Linux Commands - Overview and Examples
On this page
The command line is one of the most powerful features of Linux. There exists a sea of Linux command line tools, allowing you to do almost everything you can think of doing on your Linux PC. However, this usually creates a problem: with so many commands available to use, you don't know where and how to start learning them, especially when you are beginner.
If you are facing this issue, and are looking for an easy way to start off your command line journey in Linux, you've come to the correct place, as in this article, we will introduce you to a host of popular and useful Linux commands. The article is organized in a way that you will quickly learn what each command does through an easy to understand example. To learn more about a command, click on the 'More...' link at the end of its explanation.
The adduser and addgroup commands lets you add a new user and group to a system, respectively. Here's an example for adduser:
$ sudo adduser testuser
Adding user `testuser' ...
Adding new group `testuser' (1003) ...
Adding new user `testuser' (1003) with group `testuser' ...
Creating home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
The arch command is used to print the machine's architecture. For example:
Not sure what 'i686' means? Head here.
The cal and ncal commands display a calendar in the output.
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Su 5 12 19 26
Mo 6 13 20 27
Tu 7 14 21 28
We 1 8 15 22 29
Th 2 9 16 23 30
Fr 3 10 17 24 31
Sa 4 11 18 25
More examples of the cal and ncal commands:
The cat command allows you to concatenate files, or data provided on standard input, and print it on the standard output. In layman terms, the command prints the information provided to it, whether through stdin or in the form a file.
$ cat test.txt
Hello...how are you?
More CAT command examples:
The cd command is used to change user's present working directory.
$ cd /home/himanshu/
More CD command examples:
The chgrp command allows you to change the group ownership of a file. The command expects new group name as its first argument and the name of file (whose group is being changed) as second argument.
$ chgrp howtoforge test.txt
The chmod command lets you change access permissions for a file. For example, if you have a binary file (say helloWorld), and you want to make it executable, you can run the following command:
chmod +x helloWorld
The chown command allows you to change the ownership and group of a file. For example, to change the owner of a file test.txt to root, as well as set its group as root, execute the following command:
chown root:root test.txt
The cksum command prints the CRC checksum and byte count for the input file.
$ cksum test.txt
3741370333 20 test.txt
Not sure what checksum is? Head here.
The clear command is used to clear the terminal screen.
The cmp command is used to perform byte-by-byte comparison of two files.
$ cmp file1 file2
file1 file2 differ: byte 1, line 1
More CMP command examples:
The comm command is used to compare two sorted files line-by-line. For example, if 'file1' contains numbers 1-5 and 'file2' contains number 4-8, here's what the 'comm' command produces in this case:
$ comm file1 file2
The cp command is used for copying files and directories.
$ cp test.txt /home//himanshu/Desktop/
The csplit command lets you split a file into sections determined by context lines. For example, to split a file into two where the first part contains 'n-1' lines and the second contains the rest, use the following command:
$ csplit file1 [n]
The two parts are saved as files with names 'xx00' and 'xx01', respectively.
The date command can be used to print (or even set) the system date and time.
Tue Feb 28 17:14:57 IST 2017
The dd command copies a file, converting and formatting according to the operands. For example, the following command creates an image of /dev/sda partition.
dd if=/dev/sda of=/tmp/dev-sda-part.img
The df command displays the file system disk space usage in output.
$ df /dev/sda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 74985616 48138832 23014620 68% /
The diff command lets you compare two files line by line.
$ diff file1 file2
The diff3 command, as the name suggests, allows you to compare three files line by line.
diff3 file1 file2 file3
The dir command lists directory contents. For example:
test1 test2 test.7z test.zip
The dirname command strips last component from a file name/path. In layman's terms, you can think of it as a tool that, for example, removes file name from the file's absolute path.
$ dirname /home/himanshu/file1
The dmidecode command prints a system's DMI (aka SMBIOS) table contents in a human-readable format.
$ sudo dmidecode
# dmidecode 2.12
SMBIOS 2.6 present.
50 structures occupying 2056 bytes.
Table at 0x000FCCA0.
Handle 0x0000, DMI type 0, 24 bytes
Vendor: American Megatrends Inc.
Release Date: 08/22/2011
The du command displays disk usage of files present in a directory as well as its sub-directories.
$ du /home/himanshu/Desktop/
The echo command displays whatever input text is given to it.
$ echo hello hi
ed is a line-oriented text editor.
The eject command lets you eject removable media (typically, a CD ROM or floppy disk)
The env command not only displays the current environment, but also lets you edit it.
The exit command causes the shell to exit.
The expand command converts tabs present in the input file(s) into spaces, and writes the file contents to standard output.
$ expand file1
The expr command evaluates expressions. For example:
$ expr 1 + 2
The factor command prints the prime factors of the input number.
$ factor 135
135: 3 3 3 5
The fgrep command is equivalent to the grep command when executed with the -F command line option. The tool is also known as fixed or fast grep as it doesn't treat regular expression metacharacters as special, processing the information as simple string instead.
For example, if you want to search for dot (.) in a file, and don't want grep to interpret it as a wildcard character, use fgrep in the following way:
$ fgrep "." [file-name]
The find command lets you search for files in a directory as well as its sub-directories.
$ find test*
More examples for the Linux Find command:
- 14 Practical Examples of Linux Find Command for Beginners
- Searching For Files And Folders With The find Command
- Finding Files On The Command Line
fmt is a simple optimal text formatter. It reformats each paragraph in the file passed to it, and writes the file contents to standard output.
$ fmt file1
The fold command wraps each input line to fit in specified width.
$ fold -w 10
Hi my name is himanshu Arora
Hi my name
The free command displays the amount of free and used memory in the system.
total used free shared buffers cached
Mem: 1800032 1355288 444744 79440 9068 216236
-/+ buffers/cache: 1129984 670048
Swap: 1832956 995076 837880
The grep command searches for a specified pattern in a file (or files) and displays in output lines containing that pattern.
$ grep Hello test.txt
Hello...how are you?
More tutorials and examples for the Linux Grep command:
- How to use grep to search for strings in files on the shell
- How to perform pattern search in files using Grep
The groups command displays the name of groups a user is part of.
$ groups himanshu
himanshu : himanshu adm cdrom sudo dip plugdev lpadmin sambashare
The gzip command compresses the input file, replacing the file itself with one having a .gz extension.
$ gzip file1
Files compressed with gzip command can be restored to their original form using the gunzip command.
$ gunzip file1.gz
The head command displays the first 10 lines of the file to standard output
$ head CHANGELOG.txt
BEEBEEP (Secure Lan Messanger)
- Some GUI improvements (new icons, file sharing tree load faster)
- Always Beep on new message arrived (option)
- Favorite users (right click on user and enable star button) is on top of the list
- improved group usability
- Offline users can be removed from list (right click on an offline user in list and then remove)
- Clear all files shared (option)
- Load minimized at startup (option)
The hostname command not only displays the system's host name, but lets them set it as well.
The id command prints user and group information for the current user or specified username.
$ id himanshu
uid=1000(himanshu) gid=1000(himanshu) groups=1000(himanshu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
The join command allows you to join lines of two files on a common field (default is first).
join [OPTION]... FILE1 FILE2
Want to learn more about this command? Head here.
The kill command, as the name suggests, helps user kill a process by sending the TERM signal to it.
$ kill [process-id]
The killall command lets you kill a process by name. Unlike kill - which requires ID of the process to be killed - killall just requires the name of the process.
$ killall nautilus
The last command shows listing of last logged in users.
himanshu pts/11 :0 Thu Mar 2 09:46 still logged in
himanshu pts/1 :0 Thu Mar 2 09:46 still logged in
himanshu :0 :0 Thu Mar 2 09:42 still logged in
reboot system boot 4.4.0-62-generic Thu Mar 2 09:41 - 10:36 (00:54)
himanshu pts/14 :0 Wed Mar 1 15:17 - 15:52 (00:35)
himanshu pts/13 :0 Wed Mar 1 14:40 - down (08:06)
The ldd command displays in output dependencies of a shared library.
$ ldd /lib/i386-linux-gnu/libcrypt-2.19.so
linux-gate.so.1 => (0xb77df000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75da000)
The ln command is used for creating link between files. For example, the following command would create a link named 'lnk' to a file with name 'test.txt':
$ ln test.txt lnk
The locate command helps user find a file by name.
$ locate [file-name]
The logname command prints the user-name of the current user.
The ls command lists contents of a directory in output.
$ ls progress
capture.png hlist.o progress progress.h sizes.c
hlist.c LICENSE progress.1 progress.o sizes.h
hlist.h Makefile progress.c README.md sizes.o
More examples of the LS command:
The lshw command extracts and displays detailed information on the hardware configuration of the machine.
$ sudo lshw
[sudo] password for himanshu:
description: Desktop Computer
product: To Be Filled By O.E.M. (To Be Filled By O.E.M.)
vendor: To Be Filled By O.E.M.
version: To Be Filled By O.E.M.
serial: To Be Filled By O.E.M.
width: 32 bits
capabilities: smbios-2.6 dmi-2.6 smp-1.4 smp
The lscpu command displays in output system's CPU architecture information (such as number of CPUs, threads, cores, sockets, and more).
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Vendor ID: AuthenticAMD
CPU family: 16
CPU MHz: 2800.234
L1d cache: 64K
L1i cache: 64K
L2 cache: 1024K
The lsof command displays information (on stdout) related to files opened by processes. Files can be of any type, including regular files, directories, block special files, character special files, executing text reference, libraries, and stream/network files.
man lets you access reference manual for commands, programs/utilities, as well as functions.
$ man ls
The md5sum command lets you print or check MD5 (128-bit) checksums.
$ md5sum test.txt
The mkdir command lets you create directories.
$ mkdir [dir-name]
The mkfifo command is used to create named pipes.
$ mkfifo [pipe-name]
more is basically a filter for paging through text one screenful at a time.
$ cat [large-file] | more
The mv command lets you either move a file from one directory to another, or rename it.
$ mv test.txt /home/himanshu/Desktop/
The nano command in Linux launches the 'nano' editor. The editor is designed to emulate the features and user-friendliness of the UW Pico text editor.
$ nano [file-name]
More about the Nano Editor:
The nice command lets you run a program with modified scheduling priority.
$ nice -n[niceness-value] [program]
$ nice -n15 vim
The nl command writes contents of a file to output, and prepends each line with line number.
$ nl file1
2 How are you
The nm command is used to display symbols from object files.
$ nm test
0804a020 B __bss_start
0804841d T compare
0804a020 b completed.6591
0804a018 D __data_start
0804a018 W data_start
08048360 t deregister_tm_clones
080483d0 t __do_global_dtors_aux
08049f0c t __do_global_dtors_aux_fini_array_entry
0804a01c D __dso_handle
08049f14 d _DYNAMIC
0804a020 D _edata
0804a024 B _end
080484e4 T _fini
080484f8 R _fp_hw
080483f0 t frame_dummy
The nproc command displays the number of processing units available to the current process.
The od command lets you dump files in octal as well as some other formats.
$ od /bin/ls
0000000 042577 043114 000401 000001 000000 000000 000000 000000
0000020 000002 000003 000001 000000 140101 004004 000064 000000
0000040 122104 000001 000000 000000 000064 000040 000011 000050
0000060 000034 000033 000006 000000 000064 000000 100064 004004
0000100 100064 004004 000440 000000 000440 000000 000005 000000
0000120 000004 000000 000003 000000 000524 000000 100524 004004
The passwd command is used for changing passwords for user accounts.
$ passwd himanshu
Changing password for himanshu.
(current) UNIX password:
The paste command lets you merge lines of files. For example, if 'file1' contains the following lines:
$ cat file1
My name is
Then the following 'paste' command will join all the lines of the file:
$ paste -s file1
Hi My name is Himanshu Arora I Am a Linux researcher and tutorial writer
The pidof command gives you the process ID of a running program/process.
$ pidof nautilus
The ping command is used to check whether or not a system is up and responding. It sends ICMP ECHO_REQUEST to network hosts.
$ ping howtoforge.com
PING howtoforge.com (188.8.131.52) 56(84) bytes of data.
64 bytes from 184.108.40.206: icmp_seq=1 ttl=58 time=47.3 ms
64 bytes from 220.127.116.11: icmp_seq=2 ttl=58 time=51.9 ms
64 bytes from 18.104.22.168: icmp_seq=3 ttl=58 time=57.4 ms
The ps command displays information (in the form of a snapshot) about the currently active processes.
PID TTY TIME CMD
4537 pts/1 00:00:00 bash
20592 pts/1 00:00:00 ps
The pstree command produces information about running processes in the form of a tree.
The pwd command displays the name of current/working directory.
The rm command lets you remove files and/or directories.
$ rm [file-name]
The rmdir command allows you delete empty directories.
$ rmdir [dir-name]
The scp command lets you securely copy files between systems on a network.
$ scp [name-and-path-of-file-to-transfer] [user]@[host]:[dest-path]
The sdiff command lets you perform a side-by-side merge of differences between two files.
$ sdiff file1 file2
sed is basically a stream editor that allows users to perform basic text transformations on an input stream (a file or input from a pipeline).
$ echo "Welcome to Howtoforge" | sed -e 's/Howtoforge/HowtoForge/g'
Welcome to HowtoForge
The seq commands prints numbers from FIRST to LAST, in steps of INCREMENT. For example, if FIRST is 1, LAST is 10, and INCREMENT is 2, then here's the output this command produces:
$ seq 1 2 10
The sha1sum command is used to print or check SHA1 (160-bit) checksums.
$ sha1sum test.txt
The shutdown command lets user shut the system in a safe way.
The size command lists the section sizes as well as the total size for an object or archive file.
$ size test
text data bss dec hex filename
1204 280 4 1488 5d0 test
The sleep command lets user specify delay for a specified amount of time. You can use it to delay an operation like:
$ sleep 10; shutdown
The sort command lets you sort lines of text files. For example, if 'file2' contains the following names:
$ cat file2
Then running the sort command produces the following output:
$ sort file2
The split command, as the name suggests, splits a file into fixed-size pieces. By default, files with name like xaa, xab, and xac are produced.
$ split [file-name]
ssh is basically OpenSSH SSH client. It provides secure encrypted communication between two untrusted hosts over an insecure network.
$ ssh [user-name]@[remote-server]
The stat command displays status related to a file or a file-system.
$ stat test.txt
Size: 20 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 284762 Links: 2
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-03 12:41:27.791206947 +0530
Modify: 2017-02-28 16:05:15.952472926 +0530
Change: 2017-03-02 11:10:00.028548636 +0530
The strings command displays in output printable character sequences that are at least 4 characters long. It is used to search for printable text (strings) in binary files. For example, when a binary executable 'test' was passed as an argument to this command, following output was produced:
$ strings test
GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
The su command lets you change user-identity. Mostly, this command is used to become root or superuser.
$ su [user-name]
The sudo command lets a permitted user run a command as another user (usually root or superuser).
$ sudo [command]
The sum command prints checksum and block counts for each input file.
$ sum readme.txt
The tac command prints input files in reverse. Functionality-wise, it does the reverse of what the cat command does.
$ cat file2
$ tac file2
The tail command displays in output the last 10 lines of a file.
$ tail [file-name]
The talk command lets users talk with each other.
$ talk [user-name]
tar is an archiving utility that lets you create as well as extract archive files. For example, to create archive.tar from files 'foo' and 'bar', use the following command:
$ tar -cf archive.tar foo bar
The tee command reads from standard input and write to standard output as well as files.
$ uname | tee file2
$ cat file2
The test command checks file types and compare values. For example, you can use it in the following way:
$ test 7 -gt 5 && echo "true"
The time command is used to summarize system resource usage of a program. For example:
$ time ping google.com
PING google.com (22.214.171.124) 56(84) bytes of data.
64 bytes from del01s08-in-f14.1e100.net (126.96.36.199): icmp_seq=1 ttl=52 time=44.2 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 44.288/44.288/44.288/0.000 ms
The top command gives a dynamic real-time view of a running system (in terms of its processes). For example:
The touch command lets you change file timestamps (the access and modification times). When name of a non-existent file is passed as an argument, that file gets created.
$ touch [file-name]
The tr command can be used to translate/squeeze/delete characters. For example, here's how you can use it to convert lowercase characters to uppercase:
$ echo 'howtoforge' | tr "[:lower:]" "[:upper:]"
The tty command prints the filename of the terminal connected to standard input.
The uname command prints certain system information.
$ uname -a
Linux himanshu-desktop 4.4.0-62-generic #83~14.04.1-Ubuntu SMP Wed Jan 18 18:10:26 UTC 2017 i686 athlon i686 GNU/Linux
The Uniq command is used to report or omit repeated lines. For example, if 'file2' contains the following data:
$ cat file2
Welcome to HowtoForge
Welcome to HowtoForge
A Linux tutorial website
Then you can use the uniq command to omit the repeated line.
$ uniq file2
Welcome to HowtoForge
A Linux tutorial website
The unexpand command converts spaces present in the input file(s) into tabs, and writes the file contents to standard output.
$ unexpand file1
The uptime command tells how long the system has been running.
15:59:59 up 6:20, 4 users, load average: 0.81, 0.92, 0.82
The users command displays in output the usernames of users currently logged in to the current host.
himanshu himanshu himanshu himanshu
The vdir command lists information about contents of a directory (current directory by default).
-rw-rw-r-- 1 himanshu himanshu 4850 May 20 2015 test_backup.pdf
-rw-rw-r-- 1 himanshu himanshu 2082 May 28 2015 test-filled.pdf
-rw-rw-r-- 1 himanshu himanshu 7101 May 28 2015 test.pdf
vim is basically a text/programming editor. The name 'vim' stands for Vi IMproved as the editor is upwards compatible to the Vi editor.
$ vim [file-name]
The w command displays information about the users currently on the machine, and their processes.
16:18:07 up 6:39, 4 users, load average: 0.07, 0.32, 0.53
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
himanshu :0 :0 09:39 ?xdm? 1:08m 0.25s init --user
himanshu pts/0 :0 09:41 6:36m 0.84s 7.84s gnome-terminal
himanshu pts/10 :0 14:51 0.00s 0.16s 0.00s w
himanshu pts/11 :0 15:41 35:19 0.05s 0.05s bash
The wall command lets you write and send a message to other users that are currently logged in.
$ wall [your-message]
The watch command can be used to monitor a program's output. It runs the program repeatedly, displaying its output and errors. For example:
$ watch date
The wc command prints newline, word, and byte counts for a file.
$ wc test.txt
0 3 20 test.txt
The wget command line tool in Linux lets you perform a non-interactive download of files from the Web.
Here's how you can use it:
Read more about the wget command here.
The whatis command displays single-line manual page descriptions.
$ whatis mkdir
mkdir (1) - make directories
mkdir (2) - create a directory
mkdir (1posix) - make directories
The which command basically lets you locate a command - the file and the path of the file that gets executed. For example:
$ which date
The who command shows who is logged on.
himanshu :0 2017-03-03 09:39 (:0)
himanshu pts/0 2017-03-03 09:41 (:0)
himanshu pts/10 2017-03-03 14:51 (:0)
himanshu pts/11 2017-03-03 15:41 (:0)
The whereis command shows in output locations of the binary, source, and manual page files for a command.
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1posix.gz /usr/share/man/man1/ls.1.gz
The whoami command prints effective userid of the current user.
The xargs command builds and executes command lines from standard input. In layman's terms, it reads items from stdin and executes a command passed to it as an argument. For example, here's how you can use xargs to find the word "Linux" in the files whose names are passed to it as input.
$ xargs grep "Linux"
file2:A Linux tutorial website
file3:Linux is opensource
The Yes command outputs a string repeatedly until killed.
$ yes [string]