My previous reference for practical Linux commands was surprisingly popular
with over 3.5 million hits in nearly 5 years. So I've decided to start compiling
another list of somewhat more involved/esoteric commands.

Examples marked with • are valid/safe to paste without modification into a terminal, so
you may want to keep a terminal window open while reading this so you can cut & paste.
This page is also available in pdf format.

CommandDescription
•grep . /proc/sys/net/ipv4/*List the contents of flag files
•set | grep $USERSearch current environment
•tr '\0' '\n' < /proc/$$/environDisplay the startup environment for any process
•echo $PATH | tr : '\n'Display the $PATH one per line
•kill -0 $$ && echo process exists and can accept signalsCheck for the existence of a process (pid)
•find /etc -readable | xargs less -K -p'*ntp' -j $((${LINES:-25}/2))Search paths and data with full context. Use n to iterate
•namei -l ~/.sshOutput attributes for all directories leading to a file name
Low impact admin
#apt-get install "package" -o Acquire::http::Dl-Limit=42 \
-o Acquire::Queue-mode=access
Rate limit apt-get to 42KB/s
 echo 'wget url' | at 01:00Download url at 1AM to current dir
#apache2ctl configtest && apache2ctl gracefulRestart apache if config is OK
•nice openssl speed sha1Run a low priority command (openssl benchmark)
•chrt -i 0 openssl speed sha1Run a low priority command (more effective than nice)
•renice 19 -p $$; ionice -c3 -p $$Make shell (script) low priority. Use for non interactive tasks
Interactive monitoring
•watch -t -n1 uptimeClock with system load
•htop -d 5Better top (scrollable, tree view, lsof/strace integration, ...)
•iotopWhat's doing I/O
#watch -d -n30 "nice ps_mem.py | tail -n $((${LINES:-12}-2))"What's using RAM
#iftopWhat's using the network. See also iptraf
#mtr www.pixelbeat.orgping and traceroute combined
Useful utilities
•pv < /dev/zero > /dev/nullProgress Viewer for data copying from files and pipes
•wkhtmltopdf http://.../linux_commands.html linux_commands.pdfMake a pdf of a web page
•timeout 1 sleep infrun a command with bounded time. See also timeout
Networking
•python -m SimpleHTTPServerServe current directory tree at http://$HOSTNAME:8000/
•openssl s_client -connect www.google.com:443 </dev/null 2>&0 |
openssl x509 -dates -noout
Display the date range for a site's certs
•curl -I www.pixelbeat.orgDisplay the server headers for a web site
#lsof -i tcp:80What's using port 80
#httpd -SDisplay a list of apache virtual hosts
•vim scp://user@remote//path/to/fileEdit remote file using local vim. Good for high latency links
•curl -s http://www.pixelbeat.org/pixelbeat.asc | gpg --importImport a gpg key from the web
•tc qdisc add dev lo root handle 1:0 netem delay 20msecAdd 20ms latency to loopback device (for testing)
•tc qdisc del dev lo rootRemove latency added above
Notification
•echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW +30min"Popup reminder
•notify-send "subject" "message"Display a gnome popup notification
 echo "mail -s 'go home' P@draigBrady.com < /dev/null" | at 17:30Email reminder
 uuencode file name | mail -s subject P@draigBrady.comSend a file via email
 ansi2html.sh | mail -a "Content-Type: text/html" P@draigBrady.comSend/Generate HTML email
Better default settings (useful in your .bashrc)
#tail -s.1 -f /var/log/messagesDisplay file additions more responsively
•seq 100 | tail -n $((${LINES:-12}-2))Display as many lines as possible without scrolling
#tcpdump -s0Capture full network packets
Useful functions/aliases (useful in your .bashrc)
•md () { mkdir -p "$1" && cd "$1"; }Change to a new directory
•strerror() { python -c "import os; print os.strerror($1)"; }Display the meaning of an errno
•plot() { { echo 'plot "-"' "$@"; cat; } | gnuplot -persist; }Plot stdin. (e.g: • seq 1000 | sed 's/.*/s(&)/' | bc -l | plot)
•hili() { e="$1"; shift; grep --col=always -Eih "$e|$" "$@"; }highlight occurences of expr. (e.g: • env | hili $USER)
•alias hd='od -Ax -tx1z -v'Hexdump. (usage e.g.: • hd /proc/self/cmdline | less)
•alias realpath='readlink -f'Canonicalize path. (usage e.g.: • realpath ~/../$USER)
•ord() { printf "0x%x\n" "'$1"; }shell version of the ord() function
•chr() { printf $(printf '\\%03o\\n' "$1"); }shell version of the chr() function
Multimedia
•DISPLAY=:0.0 import -window root orig.pngTake a (remote) screenshot
•convert -filter catrom -resize '600x>' orig.png 600px_wide.pngShrink to width, computer gen images or screenshots
 mplayer -ao pcm -vo null -vc dummy /tmp/Flash*Extract audio from flash video to audiodump.wav
 ffmpeg -i filename.aviDisplay info about multimedia file
•ffmpeg -f x11grab -s xga -r 25 -i :0 -sameq demo.mpgCapture video of an X display
DVD
 for i in $(seq 9); do ffmpeg -i $i.avi -target pal-dvd $i.mpg; doneConvert video to the correct encoding and aspect for DVD
 dvdauthor -odvd -t -v "pal,4:3,720xfull" *.mpg;dvdauthor -odvd -TBuild DVD file system. Use 16:9 for widescreen input
 growisofs -dvd-compat -Z /dev/dvd -dvd-video dvdBurn DVD file system to disc
Unicode
•python -c "import unicodedata as u; print u.name(unichr(0x2028))"Lookup a unicode character
•uconv -f utf8 -t utf8 -x nfcNormalize combining characters
•printf '\300\200' | iconv -futf8 -tutf8 >/dev/nullValidate UTF-8
•printf 'ŨTF8\n' | LANG=C grep --color=always '[^ -~]\+'Highlight non printable ASCII chars in UTF-8
•fc-match -s "sans:lang=zh"List font match order for language and style
Development
•gcc -march=native -E -v -</dev/null 2>&1|sed -n 's/.*-mar/-mar/p'Show autodetected gcc tuning params. See also gcccpuopt
•for i in $(seq 4); do { [ $i = 1 ] && wget http://url.ie/6lko -qO-||
./a.out; } | tee /dev/tty | gcc -xc - 2>/dev/null; done
Compile and execute C code from stdin
•cpp -dM /dev/nullShow all predefined macros
•echo "#include <features.h>" | cpp -dN | grep "#define __USE_"Show all glibc feature macros
 gdb -tuiDebug showing source code context in separate windows
udev
•udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse0)List udev attributes of a device, for matching rules etc.
•udevadm test /sys/class/input/mouse0See how udev rules are applied for a device
#udevadm control --reload-rulesReload udev rules after modification
Extended Attributes (Note you may need to (re)mount with "acl" or "user_xattr" options)
•getfacl .Show ACLs for file
•setfacl -m u:nobody:r .Allow a specific user to read file
•setfacl -x u:nobody .Delete a specific user's rights to file
 setfacl --default -m group:users:rw- dir/Set umask for a for a specific dir
 getcap fileShow capabilities for a program
 setcap cap_net_raw+ep your_gtk_progAllow gtk program raw access to network
•stat -c%C .Show SELinux context for file
 chcon ... fileSet SELinux context for file (see also restorecon)
•getfattr -m- -d .Show all extended attributes (includes selinux,acls,...)
•setfattr -n "user.foo" -v "bar" .Set arbitrary user attributes
BASH specific
•echo 123 | tee >(tr 1 a) | tr 1 bSplit data to 2 commands (using process substitution)
 meld local_file <(ssh host cat remote_file)Compare a local and remote file (using process substitution)
Multicore
•taskset -c 0 nprocRestrict a command to certain processors
•find -type f -print0 | xargs -r0 -P$(nproc) -n10 md5sumProcess files in parallel over available processors
 sort -m <(sort data1) <(sort data2) >data.sortedSort separate data files over 2 processors
© May 30 2010