Deleting a HUGE file

I had a huge log file 200GB I need to delete on a production web server. My rm and ls command was crashed and I was afraid that the system to a crawl with huge disk I/O load. To remove a HUGE file, enter:

> /path/to/file.log# or use the following syntax: > /path/to/file.log
 # finally delete it rm /path/to/file.log

Want to cache console output?

Try the script command line utility to create a typescript of everything printed on your terminal.

script my.terminal.sessio

Type commands:

lsdatesudo service foo stop

To exit (to end script session) type exit or logout or press control-D

exit

To view type:

 more my.terminal.sessionless my.terminal.sessioncat my.terminal.session

Restoring deleted /tmp folder

As my journey continues with Linux and Unix shell, I made a few mistakes. I accidentally deleted /tmp folder. To restore it all you have to do is:

mkdir /tmpchmod 1777 /tmpchown root:root /tmpls -ld /tmp

Locking a directory

For privacy of my data I wanted to lock down /downloads on my file server. So I ran:

chmod 0000 /downloads

The root user can still has access and ls and cd commands will not work. To go back:

chmod 0755 /downloads

Password protecting file in vim text editor

Afraid that root user or someone may snoop into your personal text files? Try password protection to a file in vim, type:

 
vim +X filename

Or, before quitting in vim use :X vim command to encrypt your file and vim will prompt for a password.

Clear gibberish all over the screen

Just type:

 
reset

Becoming human

Pass the -h or -H (and other options) command line option to GNU or BSD utilities to get output of command commands like ls, df, du, in human-understandable formats:

 ls -lh# print sizes in human readable format (e.g., 1K 234M 2G)df -hdf -k# show output in bytes, KB, MB, or GBfree -bfree -kfree -mfree -g# print sizes in human readable format (e.g., 1K 234M 2G)du -h# get file system perms in human readable formatstat -c %A /boot# compare human readable numberssort -h -a file# display the CPU information in human readable format on a Linuxlscpu
lscpu -e
lscpu -e=cpu,node# Show the  size of each file but in a more human readable waytree -h
tree -h /boot

Show information about known users in the Linux based system

Just type:

## linux version ##lslogins
 ## BSD version ##logins

Sample outputs:

UID USER      PWD-LOCK PWD-DENY LAST-LOGIN GECOS
  0 root             0        0   22:37:59 root
  1 bin              0        1            bin
  2 daemon           0        1            daemon
  3 adm              0        1            adm
  4 lp               0        1            lp
  5 sync             0        1            sync
  6 shutdown         0        1 2014-Dec17 shutdown
  7 halt             0        1            halt
  8 mail             0        1            mail
 10 uucp             0        1            uucp
 11 operator         0        1            operator
 12 games            0        1            games
 13 gopher           0        1            gopher
 14 ftp              0        1            FTP User
 27 mysql            0        1            MySQL Server
 38 ntp              0        1
 48 apache           0        1            Apache
 68 haldaemon        0        1            HAL daemon
 69 vcsa             0        1            virtual console memory owner
 72 tcpdump          0        1
 74 sshd             0        1            Privilege-separated SSH
 81 dbus             0        1            System message bus
 89 postfix          0        1
 99 nobody           0        1            Nobody
173 abrt             0        1
497 vnstat           0        1            vnStat user
498 nginx            0        1            nginx user
499 saslauth         0        1            "Saslauthd user"

How do I fix mess created by accidentally untarred files in the current dir?

So I accidentally untar a tarball in /var/www/html/ directory instead of /home/projects/www/current. It created mess in /var/www/html/. The easiest way to fix this mess:

 cd /var/www/html/
/bin/rm -f "$(tar ztf /path/to/file.tar.gz)"

Confused on a top command output?

Seriously, you need to try out htop instead of top:

sudo htop

Want to run the same command again?

Just type !!. For example:

 
/myhome/dir/script/name arg1 arg2
 # To run the same command again !!
 ## To run the last command again as root usersudo !!

The !! repeats the most recent command. To run the most recent command beginning with "foo":

!foo# Run the most recent command beginning with "service" as rootsudo !service

The !$ use to run command with the last argument of the most recent command:

# Edit nginx.confsudo vi /etc/nginx/nginx.conf
 # Test nginx.conf for errors/sbin/nginx -t -c /etc/nginx/nginx.conf
 # After testing a file with "/sbin/nginx -t -c /etc/nginx/nginx.conf", you# can edit file again with visudo vi !$

Get a reminder you when you have to leave

If you need a reminder to leave your terminal, type the following command:

 
leave +hhmm

Where,

  • hhmm - The time of day is in the form hhmm where hh is a time in hours (on a 12 or 24 hour clock), and mm are minutes. All times are converted to a 12 hour clock, and assumed to be in the next 12 hours.

Home sweet home

Want to go the directory you were just in? Run:
cd -
Need to quickly return to your home directory? Enter:
cd
The variable CDPATH defines the search path for the directory containing directories:

export CDPATH=/var/www:/nas10

Now, instead of typing cd /var/www/html/ I can simply type the following to cd into /var/www/html path:

cd html

Editing a file being viewed with less pager

To edit a file being viewed with less pager, press v. You will have the file for edit under $EDITOR:

 less *.cless foo.html## Press v to edit file #### Quit from editor and you would return to the less pager again ##

List all files or directories on your system

To see all of the directories on your system, run:

find / -type d | less # List all directories in your $HOMEfind $HOME -type d -ls | less

To see all of the files, run:

find / -type f | less # List all files in your $HOMEfind $HOME -type f -ls | less

Build directory trees in a single command

You can create directory trees one at a time using mkdir command by passing the -p option:

mkdir -p /jail/{dev,bin,sbin,etc,usr,lib,lib64}ls -l /jail/

Copy file into multiple directories

Instead of running:

cp /path/to/file /usr/dir1cp /path/to/file /var/dir2cp /path/to/file /nas/dir3

Run the following command to copy file into multiple dirs:

echo /usr/dir1 /var/dir2 /nas/dir3 |  xargs -n 1 cp -v /path/to/file

Creating a shell function is left as an exercise for the reader

Quickly find differences between two directories

The diff command compare files line by line. It can also compare two directories:

ls -l /tmp/rls -l /tmp/s# Compare two folders using diff ##diff /tmp/r/ /tmp/s/

20个linux命令技巧_command

Fig. : Finding differences between folders

Text formatting

You can reformat each paragraph with fmt command. In this example, I'm going to reformat file by wrapping overlong lines and filling short lines:

fmt file.txt

You can also split long lines, but do not refill i.e. wrap overlong lines, but do not fill short lines:

fmt -s file.txt

See the output and write it to a file

Use the tee command as follows to see the output on screen and also write to a log file named my.log:

mycoolapp arg1 arg2 input.file | tee my.log