A comprehensive Linux command cheat sheet
I think that it doesn’t matter what operating system you use — as long as you know your OS of choice well!:bowtie:
This is a Linux command cheat sheet covering a wide range of topics. I cannot guarantee that the information is fully up-to-date or even correct. Use at own risk
. It is intended primarily as a reference for myself in the future. I have learned most of the material covered below a couple of years ago in the LinuxFoundationX’s Introduction to Linux course offered through edx.org.
Table of contents
- Table of contents
- The most basic operations
- Create files, directories, and links
- I/O redirection
- Search
- Viewing text files
- Create and fill text files
- More text utilities
- Comparing and patching files
- Postscript and PDF files
- Viewing linux documentation
- File ownership and permissions
- User accounts and groups
- Environment variables and aliases
- Filesystems
- Processes
- Backing up data
- Compressed data and archives
- Network operations
- Transferring files over the network
- Cool links
The most basic operations
- Power off / reboot:
shutdown -h now,halt,poweroff,reboot,shutdown -r now - Most basic navigation:
pwd,cd,cd ~,cd ..,cd -,ls,ls -a,ls -li,tree - Most basic file management:
mv,cp,rm -f,rm -i,rm -r,rmdir <empty_dir> - Date and time:
date,cal,cal -y
Create files, directories, and links
- Create files and directories:
$ touch <file>
$ touch -t 1703270159 <file>
$ mkdir <path/dir>
- Create a hard / soft (symbolic) link:
ln/ln -s - Create a temporary file or directory:
$ TEMP=$(mktemp /tmp/tempfile.XXXXXXXX)
$ TEMPDIR=$(mktemp -d /tmp/tempdir.XXXXXXXX)
I/O redirection
Assume that do_something reads from stdin and writes to stdout and stderr.
- Get the input from a file using
<. - Send the output to a new file using
>. - Append to an existing file using
>>.
Example:
$ do_something < input-file
$ do_something > output-file
$ do_something 2> error-file
$ do_something > all-output-file 2>&1
$ do_something >& all-output-file
Pipe the output of one command or program into another as its input:
$ command1 | command2 | command3
Search
- Locate applications:
which,whereis - Update database, and search for a character string in the database with
updatedbandlocate. E.g., to list all files and directories with both “zip” and “bin” in their name:$ updatedb $ locate zip | grep bin - Locate files recursively from a given directory:
find- E.g., searching only for regular files named “test1” in
/usr:$ find /usr -type f -name test1 - E.g., search based on file size or time stamp:
$ find / -size +10M $ find / -ctime 3 -
finduses wildcards such as?,*,[set],[!set](where “set” is a set of letters). - Run commands on the found files with the
-execoption. - E.g., to find and remove all files that end with
.swpin current directory:$ find -name "*.swp" -exec rm {} ’;’
- E.g., searching only for regular files named “test1” in
- Use
grepto search for a pattern in a file and print all matching lines. Examples:$ grep [pattern] <filename> $ grep -C 3 [pattern] <filename>
Viewing text files
-
catfor short files, no scroll-back. -
tacto look at a file backwards. - Concatenate multiple files and display the output:
$ cat <file1> <file2> $ tac <file1> <file2> <file3> -
lessfor larger files; use/and?for forward and backward search. - Print the first
nor the lastnlines of a file:$ head -n $ tail -n - Monitor new output in a growing file:
$ tail -f
Create and fill text files
- Create a file and fill it with content:
$ echo line one > myfile $ echo line two >> myfile $ echo line three >> myfileor
$ cat << EOF > myfile > line one > line two > line three > EOF - From existing text files:
$ cat file1 file2 > newfile $ cat file >> existingfile
More text utilities
- Sort the lines in file alphabetically:
$ sort <filename> - Remove consecutive duplicate lines from file:
$ uniq <filename> - Split a file into 1000-line segments:
$ split <infile> <prefix> - Count lines, words, and characters in a file:
$ wc <filename> - Print or join files by column (field):
awk,paste,join,cut - Miscellaneous text utilities:
sed,tr,tee,strings
Comparing and patching files
- Show the file type of a file:
$ file <filename> - Compare two files:
$ diff <filename1> <filename2> - Compare two files to a common file:
$ diff3 <filename1> <commonfile> <filename2> - Produce a patch file:
$ diff -Nur oldfile newfile > patchfile - Apply a patch file:
$ patch -p0 < patchfileor
$ patch file patchfile
Postscript and PDF files
- Convert
bar.txttofoo.ps:$ enscript -p foo.ps bar.txt - View the details of a PDF file:
$ pdfinfo <filename>.pdf - Converting between PostScript and PDF:
$ ps2pdf <filename>.pdf $ pdf2ps <filename>.ps $ epstopdf <filename>.eps <filename>.pdf -
pdftkis the Swiss Army knife of PDF tools. Usage examples:- Merge
1.pdfand2.pdf, and save as12.pdf:$ pdftk 1.pdf 2.pdf cat output 12.pdf - Save pages 1 and 2 of
1.pdftonew.pdf:$ pdftk A=1.pdf cat A1-2 output new.pdf - Rotate all pages of
in.pdf90 deg. clockwise, and save asout.pdf:$ pdftk in.pdf cat 1-endeast output out.pdf - Encrypt a PDF file:
$ pdftk public.pdf output private.pdf user_pw PROMPT
- Merge
Viewing linux documentation
-
manto search, format, and displays the manual pages. Examples:-
man -fdisplays a one-line manual pages descriptions:$ man -f printf printf (1) - format and print data printf (3) - formatted output conversionor equivalently,
$ whatis printf printf (1) - format and print data printf (3) - formatted output conversion - The section number can be supplied:
$ man 3 printf -
man -kshows all man pages that discuss a specified subject:$ man -k ruby erb (1) - Ruby Templating erb2.3 (1) - Ruby Templating gem (1) - frontend to RubyGems, the Ruby package manager (...)
-
- GNU Info System:
$ info $ info <topic name> - Every command has a
--helpor-hoption.
File ownership and permissions
- Change user ownership:
$ chown <owner> <filename> - Change group ownership:
$ chgrp <group> <filename> - Change the permissions on a file:
$ chmod <permissions> <file>
User accounts and groups
- Identify currently logged-on users:
$ who $ who -a $ whoami - Add / Remove a user:
useradd/userdel - Set the initial password for a new user:
$ passwd <username> - Display information about a user:
$ id <user> $ groups <user> - Add / Remove a group:
groupadd/groupdel - Add a user to a group:
$ groupmod -G <group> <user> - Grant root privileges to user temporarily:
$ su $ sudo <command> - Show last time each user has logged into the system:
$ last
Environment variables and aliases
- View the values of currently set environment variables:
$ set $ env $ export - Show the value of a specific variable:
$ echo $VARIABLE - Export a new variable value:
$ export VARIABLE=value - E.g., to prefix a private bin directory to your path:
$ export PATH=$HOME/bin:$PATH - List currently defined aliases:
$ alias - Create an alias, e.g.:
$ alias vi='vim'
Filesystems
- Attach a filesystem:
$ mount <device node> <mount point> $ mount /dev/sda5 /home - Display information about mounted filesystems:
$ df -Th $ mount $ fdisk -l - NFS (Network Filesystem)
- On the Server:
- Start the NFS:
$ sudo service nfs start - Modify
/etc/exports. Example entry:/projects *.example.com(rw)` - After modifying the
/etc/exportsfile run:$ exportfs -av
- Start the NFS:
- On the client:
- Mount the remote filesystem:
$ mount servername:/projects /mnt/nfs/projects - Or modify
/etc/fstab. Example entry:servername:/projects /mnt/nfs/projects nfs default 0 0`
- Mount the remote filesystem:
- On the Server:
- The
procFilesystem- Some important files in
/procare:/proc/cpuinfo,/proc/interrupts,/proc/meminfo,/proc/mounts,/proc/partitions,/proc/version. -
/procalso has subdirectories, such as/proc/<Process-ID-#>and/proc/sys.
- Some important files in
Processes
- All processes / all processes and all threads / all processes for all users:
$ ps -ef
$ ps -eLf
$ ps aux
- Process tree:
$ pstree
- Proc list with updates in real time:
$ top
$ htop
(press A to sort when using top)
- Terminate a process:
$ kill -SIGKILL <pid>
$ kill -9 <pid>
- View the background processes in the current terminal:
$ jobs -l
- Suspend a foreground process:
CTRL-z - Cancel a foreground process:
CTRL-c - Move process to the background / foreground:
$ bg
$ fg
- Schedule future non-interactive proc, e.g.:
$ at 11 am may 20
at> echo Hello! > hello.txt
at> <CTRL-D>
$
$ at now + 3 minutes
at> mkdir dirfrom3minutesago
at> <CTRL-D>
$
- Schedule periodic background work:
$ crontab -e
- Suspend execution (suffix =
s,m,h,d):
$ sleep <number><suffix>
Backing up data
- Synchronize directory trees with
rsync, which copies only the differences between directories. Examples:
$ rsync -avP --delete dir1/ dir2
$ rsync -avPe ssh --delete dir/ user@host:/path/to/dir
- Test the
rsynccommand using the--dry-runoption.
Compressed data and archives
- Compressing data using
gzip,bzip2andxz- There is an efficiency vs. speed trade-off. Ranked by space-efficiency:
xz>bzip2>gzip. - Replace each file in the current directory with its compressed version:
$ gzip * $ bzip2 * $ xz * - Compress the file
foointofoo.xzusing the default compression level (-6), and removefooif compression succeeds:$ xz foo - De-compress:
$ gunzip foo $ bunzip2 *.bz2 - Decompress
bar.xzintobarand don’t removebar.xzeven if decompression is successful:$ xz -dk bar.xz
- There is an efficiency vs. speed trade-off. Ranked by space-efficiency:
- Handling Files Using zip
- E.g., archive the login directory (
~) and all files and directories under it asbackup.zip:$ zip -r backup.zip ~ - Extracts all files in the file
backup.zip:$ unzip backup.zip
- E.g., archive the login directory (
- Archiving and Compressing Data Using
tar- Extract all the files in
mydir.tarinto themydirdirectory:$ tar xvf mydir.tar - Create the archive and compress with
gzip/bz2/xz:$ tar zcvf mydir.tar.gz mydir $ tar jcvf mydir.tar.bz2 mydir $ tar Jcvf mydir.tar.xz mydir - Extract all the files in
mydir.tar.*into themydirdirectory:$ tar xvf mydir.tar.gz
- Extract all the files in
- Working with compressed data
- For
gzip‘ed files:zcat,zless,zgrep,zdiff. - For
bzip2‘ed files:bzcat,bzless. - For
xz‘ed files:xzcat,xzless.
- For
Network operations
- Using Domain Name System (DNS) and Name Resolution Tools
- View IP and domain information about your system:
$ hostname $ cat /etc/hosts $ cat /etc/resolv.conf - View IP and domain information about linux.com:
$ host linux.com $ nslookup linux.com $ dig linux.com $ dig +trace linux.com $ dig @8.8.8.8 linux.com(
8.8.8.8is Google’s recursive DNS server)
- View IP and domain information about your system:
- Network Interfaces and Configuration
- List all currently active network interfaces:
$ ifconfig - Show IP address of active network device:
$ ip addr show - Show routing info of active network device:
$ ip route show - Check the status of the remote host:
$ ping <hostname>
- List all currently active network interfaces:
- Routing Tables / Routes
- Show current IP routing table:
$ route -n - Add/delete static route:
$ route add -net address $ route del -net address - Print the route taken by the packet to reach the network host at
<domain>:$ traceroute <domain> - Display all active connections and routing tables:
$ netstat -r
- Show current IP routing table:
- Dump network traffic for analysis:
$ tcpdump $ sudo tcpdump host google.com - Interaction with webpages
- Download a webpage:
$ wget <url> - Read or save the source code and other info of a URL:
$ curl <url> $ curl -o saved.html http://www.mysite.com
- Download a webpage:
Transferring files over the network
- FTP (File Transfer Protocol)
- An example of connecting to the server and downloading a file:
$ ftp -p some.server.com ftp> ls ftp> get somefile.txt ftp> quit $
- An example of connecting to the server and downloading a file:
- SSH (Secure Shell)
- Log into
remotesystemwithusername:$ ssh <username@remotesystem> - Run
my_commandon a remote system via SSH:$ ssh <user@remotesystem> my_command - Copy a local file to a remote system (similarly vice versa):
$ scp <localfile> <user@remotesystem>:/home/user/ $ scp <user@remotesystem>:/home/user/somefile /local/dir/
- Log into
Cool links
- http://explainshell.com — see help text that matches each argument of a given command line. Extremely useful!
- http://jvns.ca/zines/ — informative fanzines about some Linux tools.
- http://tldr.sh/ — simplified man pages (so short!), driven by practical examples.