1
Useful Linux Bash Commands
This is a very short summary of bash commands. Most but not all information comes from [1]
The bash terminal window
Good to know:
• Selected with mouse = automatically copied to clipboard
• Middle mouse button = paste
• <Up> = last command (editable)
• <Ctrl>-r someletters = search in command
Stopping bash scripts
<ctrl> C or ^C terminates a running script
This may leave the shell in a disordered state.
If this happens:
1. <ctrl>J or ^J
gives you back a shell prompt (does the same as <enter>, even if <enter> doesn't work any more
2. type “reset” even if you don't see what you type, followed by <ctrl>J
Miscellanous
history List of all used commands
man mycommand Display man page of mycommand
(Leave with q)
man k mykeyword Search for mykeyword in the man pages
info mycommand Get info on mycommand
(Leave with Ctrl-C)
type mycommand see if mycommand is a builtin command
which mycommand displays location of mycommand (if in search path)
Many commands have a –-help option.
Wildcards
Can be used for all bash commands and are expanded by the shell
Can be used for file and folder names
* any char, any number of chars
? any char, exactly one
[abcd] any character contained in list abcd
[^abcd] any character not contained list abcd
{a,b,c} works like [abc], but not only for files,it works for all bash commands
echo {a,b,c}test prints atest btest ctest
2
Redirection and pipes
Redirection
mycommand > myfile Output of mycommand goes to myfile
mycommand >> myfile Output of mycommand is appended to myfile
ls > dir.txt Output of ls into file dir.txt
mycommand 2> myerrorfile Error output goes to myerrorfile
(standard output remains on screen)
mycommand > myfile 2> myerrorfile Output of mycommand goes to myfile,
error output goes to myerrorfile
mycommand &> myfile Output and error output of mycommand goes to myfile
mycommand < myfile mycommand gets input from myfile
Pipes
command1 | command2 Execute command1
and use its output as input for command2
ls | grep a List all files whose filename contains a letter “a”
mycommand | tee myfile Execute mycommand , output is displayed and goes to
myfile
(tee copies from stdout to stdout and to one or more files)
ls | tee dir.txt List directory to stdout and to file dir.txt
Administration
sudo mycommand execute mycommand as a super user (root)
sudo su root Set user = root permanently
sudo adduser jcf dialout Add user jcf to group dialout
Necessary for working with serial ports e.g. using terminal
id Gn Display name and user groups
Installation
sudo aptget install myprogram Install myprogram
sudo aptaddrepository ppa:myunity/ppa Add repository
sudo aptget update Update repository info
sudo aptget upgrade
sudo aptget remove
sudo aptget source get source files
sudo aptget check check for broken dependencies
3
System Analysis
lspci List PCI devices
lsusb List USB devices
lsmod List drivers
tail f /var/log/syslog Continuously display syslog
(leave with <ctrl>c
dmesg Writes kernel boot messages to the standard output.
dmesg reads the kernel ring buffer.
dmesg | grep <keyword> filters the dmesg messages to show only those containing <keyword>
uname a Display kernel version
blkid Get drives info (seems not always to work!)
Files
ls List files
ls > dir.txt List files, output into a file
ls l List files , detailed
ls l <myfile> View detailed info on myfile
(permissions, size, date)
ls ld <myfile> View detailed info on myfile
(permissions, size, date + owner)
ls d* Lists all files beginning with d
ls ?bus* Lists all files that contain “bus” after exactly one char that may be any char.
ls [def]* Lists all files beginning with d or e or f
ls [^def]* Lists all files not beginning with d or e or f
chown myname myfile change owner of myfile
chown myname myfolder change owner of myfolder
chown R myname myfolder recursively change owner of myfolder
chgrp myfile change group
(same options as chown)
Give all users right to
chmod +r <file> read
chmod +w <file> write
chmod +x <file> execute (for folders: allow entering folder)
The same with – instead of + : take rights away
chmod R +r <folder> - R = recusively apply +r to all content of folder
cp myfile myfolder Copy myfile to myfolder
cp a myfiles myfolder Copy recursively myfiles to myfolder, including subfolders
mv myfile mynewfile Rename myfile to mynewfile
mv myfile myfolder Move myfile to myfolder
4
rm myfile Remove (delete) myfile
rm myfolder Remove myfolder
rm r myfolder Recursively remove myfolder, including subfolders
File permissions
Example:
ls -ld tmp.txt
-rw-rw-r-- 1 jcf jcf 0 Oct 15 2012 tmp.txt
Pos. 1 Pos. 2-4 Pos. 5-7 Pos. 8-10
- rw- rw- r--
Type Permissions for Permissions for Permissions for
owner group others
- = file
d = dir
*) *) *)
l = symbolic link
p = named pipe
c = char device
b = block device
*) r = read, w = write, x = execute
Folders
. = current directory
.. = parent directory
cd Change dir to HOME
pwd print working directory
mkdir myfolder Make directory myfolder
rmdir myfolder Remove directory myfolder
rm myfolder
Display files
Edit file: gedit myfile (on Ubuntu)
cat myfile display myfile
Mainly used for piping
cat *.dat | sort pipe contents of all files *.dat through sort command
less myfile display myfile page by page
(q = quit)
less N myfile display myfile page by page with line numbers
head myfile display first rows of myfile
head 5 myfile display first 5 rows of myfile
tail myfile display last rows of myfile
tail f myfile display last rows of myfile
5
and leave file open, so that every update of myfile is
displayed.
This is very useful to watch logged data
Use –retry option if myfile is not yet existing and you want to
wait for it
tail f /var/log/syslog
Continuously display syslog
strings myfile extracts readable text out of binary files
strings myfile | grep mytext search for readable text mytext in binary file myfile
strings bash | grep error search all strings containig “error” in bash
xxd myfile hex dump of myfile
xxd u myfile hex dump of myfile with uppercase hex numbers
xxd u myfile > myfile.hex hex dump into a file
xxd r myfile.hex > myfile reverse hex dump
File creation
of course, with an editor!
otherwise:
touch myfile create an empty file
echo sometext > myfile write sometext into myfile
echo moretext >> myfile append (in new line) moretext to myfile
File properties
stat myfile name, size, type, permissions, owner, time stamps
stat myfile info on file system containing myfile
wc myfile word count:
gives number of rows, words, bytes of a text file
Find files
find can look for files or folders with a specified name, size or time.
find name "myfile" search in current folder and it's subfolders for myfile
find myfolder name "myfile" search in myfolder and it's subfolders for myfile
find name "*,txt" the same using wilcards
find iname "myfile" as -name, but ignoring lower and uppercase chars
find myfolder size +100M find all files in myfolder and it's subfolders that are bigger than
100MB
find myfolder atime 3 find all files accessed in the last 3 days
find myfolder mtime 3 find all files modified in the last 3 days
find myfolder ctime 3 find all files that changed status in the last 3 days
similar options : -amin, -cmin, -mmin for time in minutes
use +3 for morre than 3, -4 for less than 4
find name "myfile" ls gives more info on the found file with ls
find not name "*.py" find all files that are not *.py files
(Many other options)
6
Find can be combined with xargs.
xargs in principle reads from the standard input and executes what it reads as a command, together with the options you
give it.
find name "*.py" | xargs ls l Finds all *.py files and pipes the resulting list
through xargs that does ls -l with them, so details on
the found files are displayed.
(Corresponds to ls -l, but only on the found "*.py"
files.)
find name "*.py" | xargs head Similar, but uses head to display the first lines of the
found files as a preview
find name "*.py" | xargs grep mykeyword Uses grep to search in the found files for
mykeyword
(Take care: file names should not include whitespaces!)
Note: on some Linux systems (not on Ubuntu) the -print option is necessary for find to get output.
Find inside a file: grep
grep "mykeyword" myfile search for mykeyword in myfile
grep "usb" /var/log/syslog search for "usb" in log file
grep [options] pattern [files] options:
-n gives line number
-i ignores case
-w compares only whole words
-x compares only whole lines
-C N gives N lines before and behind compare match
-r recursive search through subfolders
grep r "usbaudio" /var/log recursive search for "usb-audio" in all log files in and
under the /var/log directory
grep can use regular expressions
egrep is the same, but uses an extended syntax for regular expressions
fgrep accepts a list of keywords
Manipulate files or output
cut extract columns
paste combines several files seen as columns to one output on stdout
tr translates characters
sort sorts alphabetically or numerically (or other)
uniq remove double results in a sort output
awk recognizes patterns and filters
sed recognizes patterns and filters
m4 translates macros
Compare files
kompare nice GUI based tool for file comparison, easy to read difference and common text
bash commands: diff, comm, cmp
md5sum myfile creates a checksum
md5sum myfile > chk.txt creates a chk.txt file containing checksum and filename
md5sum myfile1 myfile2 ... > chk.txt id, for more files
md5sum check chk.txt checks if checksum(s) and file(s) listed in chk.txt match
7
Disk tools
df displays disk space and usage for all drives
df h the same but easy to read
df /dev/sda1 the same for sda1 only
mount shows all mounted devices
mount | grep sd shows mounted devices, but only those beginning with sd...
sudo umount /media/sda3 unmount /media/sda3
sudo mount /dev/sda3 /media/sda3 mount /dev/sda3 to /media/sda3
sync write all pending operations to disk
Very important to do before retreiving an USB stick or a
memory card!
umount /dev/sde1 do a file system check for device sde1
sudo fsck /dev/sde1 Caution: device must be unmounted before check!
View and kill processes
ps U jcf View all processes belonging to user jcf
ps C thunderbird View process ID of program "thunderbird"
ps 2301 View status and program command of process number 2301
ps efww View all processes with their command invocation
ps efH View all processes and their child processes
pidof firefox get PID of "firefox"
top View processes sorted by their activity
top c id, with command line
free m c Display free RAM in Megabyte
kill 2103 End process number 2103
Time processes
watch n 2 myprogram Execute myprogram every 2 seconds
watch n 2 date Example: Display date every 2 s
at mytime at mytime do something
(enter commands at the prompt, end with Ctrl-D)
at now+1min in one minute …
> ls > at.txt …. list files to at.txt
>.... (other commands)
at does not work with all commands (why?)
This seems to have something to do with the output of the
program.
Bash commands that output into a file are OK
crontab e Edit crontab file for jobs that will be done regularly
crontab l View crontab file
crontab r Remove crontab file
The edit mode shows a self explaning template
8
Network and Internet
Own PC
ip addr displays IP and MAC address etc. for all ports
ip addr show eth0 the same, but only for eth0
ifconfig does the same as ip addr
Network
ping <IP Adress> tests if a host is accessible
ping 192.168.0.100
Internet
host <IP Adress> asks DNS for host name
host 91.189.90.41
host <www Adress> Asks DNS for IP address
host www.ltam.lu
dig <IP Adress> very powerful command for DNS enquiry, with many
dig <www Adress> options
whois <www Adress> Get registering data of an Internet domain
whois ltam.lu Attention: omit "www." in the address!
e.g. "www.ltam.lu" → "ltam.lu"
ping <IP Adress> tests if a host is accessible
ping 192.168.0.100
ping google.com
traceroute <IP Adress> displays the network path from the own PC to a distant
traceroute google.com host, and the time needed
traceroute 173.194.35.132
Ports
lspci v | grep i serial Display serial port info from lspci
(-i = ignore case)
dmesg | grep tty Look for available ports in dmesg
sudo adduser jcf dialout Add user jcf to group dialout
Necessary for working with serial ports e.g. using terminal
echo x > /dev/ttyS4 Send “x” to serial port ttyS4
setserial ag Display information on serial ports ttyS0...5
/dev/ttyS[012345] Take care: this info may be wrong!
Especially: “UART: unknown” means no device present!
Look in man setserial for more info
sudo setserial /dev/ttyS0 Set baud rate of ttyS0 to 38400
baud_base 38400
Literature
[1] D.J. BarrettLinux Pocket Guide, o'Reilly