linux_cmd_bash_basics.md
# sleep before input is run..
ps aux | awk '{print $1}' | xargs -I % sh -c '{ echo %; sleep 1; }'
Command # Command Description
-----------------------------------
lynx -dump -width # 999 http://www.pixelbeat.org/cmdline.html > cmd.txt # Make a text copy of this page
apropos word # show commands pertinent to word. See also threadsafe
which command # show full path name of command
time command # see how long a command takes
time cat # Start stopwatch. Ctrl-D to stop. See also sw
nice command # run a low priority command
renice 19 -p $$ # make shell (script) low priority. Use for non interactive tasks
look prefix # quickly search (sorted) dictionary
grep --color expr /usr/share/dict/words # highlight occurances of regular expression in dictionary
gpg -c file # encrypt file
gpg file.gpg # decrypt file
echo 'wget url' | at 01:00 # download url at 1AM to current dir
echo "mail -s 'get the train' P@draigBrady.com < /dev/null" | at 17:45 # email reminder
watch -n1 'cat /proc/interrupts' # watch changeable data continuously
alias hd # 'od -Ax -tx1z -v' # handy hexdump. (usage e.g.: hd /proc/self/cmdline | less)
alias realpath # 'readlink -f' # canonicalize path. (usage e.g.: realpath ~/../$USER)
set | grep $USER # search current environment
ls /usr/bin | pr -T9 -W$COLUMNS # print in 9 columns to width of terminal
touch -c -t 0304050607 file # set file timestamp (YYMMDDhhmm)
dir navigation
cd - # go to previous directory
cd # go to home directory
(cd dir && command) # go to dir, execute command and return to current dir
pushd . # put current dir on stack so you can popd back to it
CDs
gzip < /dev/cdrom > cdrom.iso.gz # save copy of data cdrom
mkisofs -r dir | gzip > cdrom.iso.gz # create cdrom image from contents of dir
mount -o loop cdrom.iso /mnt/dir # mount the cdrom image at /mnt/dir (read only)
gzip -dc cdrom.iso.gz | cdrecord -v dev # /dev/cdrom - # burn cdrom image (use dev # ATAPI -scanbus to confirm dev)
cdparanoia -B # rip audio tracks from CD to wav files in current dir
cdrecord -v dev # /dev/cdrom -audio .wav # make audio CD from all wavs in current dir (see also cdrdao)
oggenc --tracknum # 'track' track.cdda.wav -o 'track.ogg' # make ogg file from wav file
archives
tar c dir/ | bzip2 > dir.tar.bz2 # make archive of dir/
bzip2 -dc dir.tar.bz2 | tar x # extract archive (use gzip instead of bzip2 for tar.gz files)
tar c dir/ | gzip | gpg -c | ssh user@remote 'dd of # dir.tar.gz.gpg' # make encrypted archive of dir/ on remote machine
find dir/ -name '*.txt' | tar c --files-from # - | bzip2 > dir_txt.tar.bz2 # make archive of subset of dir/ and below
find dir/ -name '*.txt' | xargs cp -a --target-directory # dir_txt/ --parents # make copy of subset of dir/ and below
( tar c /dir/to/copy ) | ( cd /where/to/ && tar x -p ) # copy (with permissions) copy/ dir to /where/to/ dir
( cd /dir/to/copy && tar c . ) | ( cd /where/to/ && tar x -p ) # copy (with permissions) contents of copy/ dir to /where/to/
( tar c /dir/to/copy ) | ssh -C user@remote 'cd /where/to/ && tar x -p' # copy (with permissions) copy/ dir to remote:/where/to/ dir
dd bs # 1M if # /dev/hda | gzip | ssh user@remote 'dd of # hda.gz' # backup harddisk to remote machine
rsync (Use the --dry-run option for testing)
rsync -P rsync://rsync.server.com/path/to/file file # Only get diffs. Do multiple times for troublesome downloads
rsync --bwlimit # 1000 fromfile tofile # Locally copy with rate limit. It's like nice for I/O
rsync -az -e ssh --delete ~/public_html/ remote.com:'~/public_html' # Mirror web site (using compression and encryption)
rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ # Synchronize current directory with remote one
file searching
alias l # 'ls -l --color # auto' # quick dir listing
ls -lrt # list files by date. See also newest
find -name '*.[ch]' | xargs grep -E 'expr' # search 'expr' in this dir and below. See also findrepo
find -type f -print0 | xargs -r0 grep -F 'string' # search all regular files for 'string' in this dir and below
find -maxdepth 1 -type f | xargs grep -F 'string' # search all regular files for 'string' in this dir
find -maxdepth 1 -type d | while read dir; do (cd "$dir" && echo $PWD); done # process each item with multiple commands (in while loop)
find -type f ! -perm -444 # find files not readable by all (useful for web site)
find -type d ! -perm -111 # find dirs not accessible by all (useful for web site)
locate -r 'file[^/]*\.txt' # search cached index for names. This re is like glob *file*.txt
networking (Note ifconfig, route, mii-tool, nslookup commands are obsolete)
ip link show # list interfaces
ethtool interface # list interface status
ip link set dev eth0 name wan # rename eth0 to wan
ip addr add 1.2.3.4/24 brd + dev eth0 # add ip and mask(255.255.255.0)
ip link set dev interface up # bring interface up (or down)
ip route add default via 1.2.3.254 # set default gateway to 1.2.3.254
host pixelbeat.org # lookup ip address for name or vice versa
hostname -i # lookup local ip address (equivalent to host `hostname`)
netstat -tupl # list internet services on a system
netstat -tup # list active connections to/from system
windows (note samba is the package that provides all this windows specific networking support)
smbtree # find windows machines. See also findsmb
nmblookup -A 1.2.3.4 # find the windows (netbios) name associated with ip address
smbclient -L windows_box # list shares on windows machine or samba server
mount -t smbfs -o fmask # 666,guest //windows_box/share /mnt/share # mount a windows share
echo 'message' | smbclient -M windows_box # Send popup to windows machine (off by default in XP sp2)
math
echo '(1 + sqrt(5))/2' | bc -l # quick math
echo 'obase # 16; ibase # 10; 123' | bc # base conversion (decimal to hex)
echo 'pad # 20; min # 64; (100*10^6)/((pad+min)*8)' | bc # More complex (int) e.g. This shows max FastE packet rate
echo 'pad # 20; min # 64; print (100E6)/((pad+min)*8)' | python # python handles scientific notation
echo 'pad # 20; plot [64:1518] (100*10**6)/((pad+x)*8)' | gnuplot -persist = Plot FastE packet rate vs packet size
text manipulation (note these use stdin and stdout, so if you want to edit files, append <oldfile >newfile)
sed 's/string1/string2/g' # replace string1 with string2
sed 's/\(.*\)1/\12/g' # modify anystring1 to anystring2
sed '/ *#/d; /^ *$/d' # remove comments and blank lines
sed ':a; /\\$/N; s/\\\n//; ta' # concatenate lines with trailing \
sed 's/[ \t]*$//' # remove trailing spaces from lines
sed 's/\([\\`\\"$\\\\]\)/\\\1/g' # backslashify shell metacharacters active within "..."
sed -n '1000p;1000q' # print 1000th line
sed -n '10,20p;20q' # print lines 10 to 20
sort file1 file1 file2 | uniq -u # show lines in file2 not in file1
echo 'Test' | tr '[:lower:]' '[:upper:]' # case conversion
tr -dc '[:print:]' < /dev/urandom # filter non printable characters
grep 'processor' /proc/cpuinfo | wc -l # count lines
calendar
cal -3 # display a calendar
cal 9 1752 # display a calendar for a particular month year
date -d fri # What date is it this friday. See also day
date --date # '25 Dec' +%A # what day does xmas fall on, this year
date --date '1970-01-01 UTC 1097781420 seconds' # convert number of seconds since the epoch to a date
TZ # ':America/Los_Angeles' date # What time is it on West coast of US (use tzselect to find TZ)
locales
printf "%'d\n" 1234 # print number with thousands grouping appropriate to locale
echo "I live in `locale territory`" # extract info from locale database
locale | cut -d # -f1 | xargs locale -kc | less # list fields in locale database
LANG # en_IE.utf8 locale int_prefix # lookup locale info for specific country. See also ccodes
disk space
ls -lSr # show files, biggest last
du -s * | sort -k1,1rn | head # show top disk users in current dir. See also dutop
df -h # free disk space
df -i # free inodes
fdisk -l # show disks partitions sizes (run as root)
rpm -q -a --queryformat '%10{SIZE}\t%{NAME}\n' | sort -k1,1n # list all packages by installed size (Bytes) on rpm distros
dpkg-query -W --showformat # '${Installed-Size;10}\t${Package}\n' | sort -k1,1n # list all packages by installed size (KBytes) on deb distros
monitoring/debugging
strace -c ls >/dev/null # summarise/profile system calls made by command
strace -f -e open ls >/dev/null # list system calls made by command
ltrace -f -e getenv ls >/dev/null # list library calls made by command
lsof -p $$ # list paths that process id has open
lsof ~ # list processes that have specified path open
tcpdump not port 22 # Show network traffic except ssh. See also tcpdump_not_me
ps -e -o pid,args --forest # list processes in a hierarchy
ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' # list processes by % cpu usage
ps -e -o rss # ,args # | sort -b -k1,1n | pr -TW$COLUMNS # list processes by mem usage. See also ps_mem.py
ps -C firefox-bin -L -o pid,tid,pcpu,state # list all threads for a particular process
ps -p 1,2 # list info for particular process IDs
for wtmp in `ls -t /var/log/wtmp `; do last reboot -f $wtmp; done | grep reboot # Show system reboot history.
free -m # Show amount of (remaining) RAM (-m displays in MB)
System information (see also sysinfo)
hdparm -i /dev/hda # show info about disk hda
hdparm -tT /dev/hda # Do a read speed test on disk hda
badblocks -s /dev/hda # Test for unreadable blocks on disk hda
mount | column -t # Show mounted filesystems on the system (and align output)
cat /proc/partitions # Show all partitions registered on the system
grep MemTotal /proc/meminfo # Show RAM total seen by the system
grep "model name" /proc/cpuinfo # Show CPU(s) info
lspci -tv # Show PCI info
lsusb -tv # Show USB info
recode (Obsoletes iconv, dos2unix, unix2dos)
recode -l | less # show available conversions (aliases on each line)
recode windows-1252.. file_to_change.txt # windows "ansi" to local charset (auto does CRLF conversion)
recode utf-8/CRLF.. file_to_change.txt # windows utf8 to local charset
recode iso-8859-15..utf8 file_to_change.txt # latin9 (western europe) to utf8
recode ../b64 < file.txt > file.b64 # Base64 encode
recode /qp.. < file.txt > file.qp # quoted printable decode
recode ..HTML < file.txt > file.html # text to HTML
recode -lf windows-1252 | grep euro # lookup table of characters
echo -n 0x80 | recode latin-9/x1..dump # show what a code represents in latin-9 charmap
echo -n 0x20AC | recode ucs-2/x2..latin-9/x # show latin-9 encoding
echo -n 0x20AC | recode ucs-2/x2..utf-8/x # show utf-8 encoding
interactive
mc # powerful filemanager that can browse rpm, tar, ftp, ssh, ...
screen # virtual terminals with detach capability, ...
lynx # web browser
gnuplot # interactive/scriptable graphing
octave # matlab like environment