# Linux commandline tips 2

<table id="bkmrk-"><tbody><tr><td></td></tr></tbody></table>

<table id="bkmrk-command-%E2%80%A2-apropos-wh"><tbody><tr><td colspan="2">**Command**

</td></tr><tr><td>•

</td><td>apropos whatis

</td></tr><tr><td>•

</td><td>[man](http://www.pixelbeat.org/lkdb/less.html) -t man | ps2pdf - &gt; man.pdf

</td></tr><tr><td></td><td>which command

</td></tr><tr><td></td><td>time command

</td></tr><tr><td>•

</td><td>time cat

</td></tr><tr><td>•

</td><td>nice [info](http://www.pixelbeat.org/lkdb/info.html)

</td></tr><tr><td>•

</td><td>renice 19 -p $$

</td></tr><tr><td colspan="2">**dir navigation**

</td></tr><tr><td>•

</td><td>cd -

</td></tr><tr><td>•

</td><td>cd

</td></tr><tr><td></td><td>(cd dir &amp;&amp; command)

</td></tr><tr><td>•

</td><td>pushd **.**

</td></tr><tr><td colspan="2">**file searching**

</td></tr><tr><td>•

</td><td>[alias](http://www.pixelbeat.org/settings/.bashrc)l='ls -l --color=auto'

</td></tr><tr><td>•

</td><td>ls -lrt

</td></tr><tr><td>•

</td><td>ls /usr/bin | pr -T9 -W$COLUMNS

</td></tr><tr><td></td><td>find -name '\*.\[ch\]' | xargs grep -E 'expr'

</td></tr><tr><td></td><td>find -type f -print0 | xargs -r0 grep -F 'example'

</td></tr><tr><td></td><td>find -maxdepth 1 -type f | xargs grep -F 'example'

</td></tr><tr><td></td><td>find -maxdepth 1 -type d | while [read](http://www.pixelbeat.org/programming/readline/) dir; do echo $dir; echo cmd2; done

</td></tr><tr><td>•

</td><td>find -type f ! -perm -444

</td></tr><tr><td>•

</td><td>find -type d ! -perm -111

</td></tr><tr><td>•

</td><td>locate -r 'file\[^/\]\*\\.txt'

</td></tr><tr><td>•

</td><td>look reference

</td></tr><tr><td>•

</td><td>grep [--color](http://www.pixelbeat.org/settings/.bashrc) reference /usr/share/dict/words

</td></tr><tr><td colspan="2">**archives and compression**

</td></tr><tr><td></td><td>gpg -c file

</td></tr><tr><td></td><td>gpg file.gpg

</td></tr><tr><td></td><td>tar -c dir/ | bzip2 &gt; dir.tar.bz2

</td></tr><tr><td></td><td>bzip2 -dc dir.tar.bz2 | tar -x

</td></tr><tr><td></td><td>tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'

</td></tr><tr><td></td><td>find dir/ -name '\*.txt' | tar -c --files-from=- | bzip2 &gt; dir\_txt.tar.bz2

</td></tr><tr><td></td><td>find dir/ -name '\*.txt' | xargs cp -a --target-directory=dir\_txt/ --parents

</td></tr><tr><td></td><td>( tar -c /dir/to/copy ) | ( cd /where/to/ &amp;&amp; tar -x -p )

</td></tr><tr><td></td><td>( cd /dir/to/copy &amp;&amp; tar -c **.** ) | ( cd /where/to/ &amp;&amp; tar -x -p )

</td></tr><tr><td></td><td>( tar -c /dir/to/copy ) | ssh -C user@remote 'cd /where/to/ &amp;&amp; tar -x -p'

</td></tr><tr><td></td><td>dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz'

</td></tr><tr><td colspan="2">**rsync** (Network efficient file copier: Use the --dry-run option for testing)

</td></tr><tr><td></td><td>rsync -P [rsync://rsync.server.com/path/to/file](rsync://rsync.server.com/path/to/file)file

</td></tr><tr><td></td><td>rsync --bwlimit=1000 fromfile tofile

</td></tr><tr><td></td><td>rsync -az -e ssh --delete ~/public\_html/ remote.com:'~/public\_html'

</td></tr><tr><td></td><td>rsync -auz -e ssh remote:/dir/ **.** &amp;&amp; rsync -auz -e ssh **.** remote:/dir/

</td></tr><tr><td colspan="2">**ssh** (Secure SHell)

</td></tr><tr><td></td><td>ssh $USER@$HOST command

</td></tr><tr><td>•

</td><td>ssh -f -Y $USER@$HOSTNAME xeyes

</td></tr><tr><td></td><td>scp -p -r $USER@$HOST: file dir/

</td></tr><tr><td></td><td>ssh -g -L 8080:localhost:80 root@$HOST

</td></tr><tr><td></td><td>ssh -R 1434:[imap:143](imap:143) root@$HOST

</td></tr><tr><td colspan="2">**wget** (multi purpose download tool)

</td></tr><tr><td>•

</td><td>(cd dir/ &amp;&amp; wget -nd -pHEKk [http://www.pixelbeat.org/cmdline.html](http://www.pixelbeat.org/cmdline.html))

</td></tr><tr><td></td><td>wget -c [http://www.example.com/large.file](http://www.example.com/large.file)

</td></tr><tr><td></td><td>wget -r -nd -np -l1 -A '\*.jpg' [http://www.example.com/dir/](http://www.example.com/dir/)

</td></tr><tr><td></td><td>wget ftp://remote/file\[1-9\].iso/

</td></tr><tr><td>•

</td><td>wget -q -O- [http://www.pixelbeat.org/timeline.html](http://www.pixelbeat.org/timeline.html)| grep 'a href' | head

</td></tr><tr><td></td><td>echo 'wget url' | at 01:00

</td></tr><tr><td></td><td>wget --limit-rate=20k url

</td></tr><tr><td></td><td>wget -nv --spider --force-html -i bookmarks.html

</td></tr><tr><td></td><td>wget --mirror [http://www.example.com/](http://www.example.com/)

</td></tr><tr><td colspan="2">**networking** (Note ifconfig, route, mii-tool, nslookup commands are obsolete)

</td></tr><tr><td></td><td>ethtool eth0

</td></tr><tr><td></td><td>ethtool --change eth0 autoneg off speed 100 duplex full

</td></tr><tr><td></td><td>iwconfig eth1

</td></tr><tr><td></td><td>iwconfig eth1 rate 1Mb/s fixed

</td></tr><tr><td>•

</td><td>iwlist scan

</td></tr><tr><td>•

</td><td>ip link show

</td></tr><tr><td></td><td>ip link set dev eth0 name wan

</td></tr><tr><td></td><td>ip link set dev eth0 up

</td></tr><tr><td>•

</td><td>ip addr show

</td></tr><tr><td></td><td>ip addr add 1.2.3.4/24 brd + dev eth0

</td></tr><tr><td>•

</td><td>ip route show

</td></tr><tr><td></td><td>ip route add default via 1.2.3.254

</td></tr><tr><td>•

</td><td>tc qdisc add dev lo root handle 1:0 netem delay 20msec

</td></tr><tr><td>•

</td><td>tc qdisc del dev lo root

</td></tr><tr><td>•

</td><td>host pixelbeat.org

</td></tr><tr><td>•

</td><td>hostname -i

</td></tr><tr><td>•

</td><td>whois pixelbeat.org

</td></tr><tr><td>•

</td><td>netstat -tupl

</td></tr><tr><td>•

</td><td>netstat -tup

</td></tr><tr><td colspan="2">**windows networking** (Note samba is the package that provides all this windows specific networking support)

</td></tr><tr><td>•

</td><td>smbtree

</td></tr><tr><td></td><td>nmblookup -A 1.2.3.4

</td></tr><tr><td></td><td>smbclient -L windows\_box

</td></tr><tr><td></td><td>mount -t smbfs -o fmask=666,guest //windows\_box/share /mnt/share

</td></tr><tr><td></td><td>echo 'message' | smbclient -M windows\_box

</td></tr><tr><td colspan="2">**text manipulation** (Note sed uses stdin and stdout. Newer versions support inplace editing with the -i option)

</td></tr><tr><td></td><td>sed 's/string1/string2/g'

</td></tr><tr><td></td><td>sed 's/<span class="math inline">.\*</span>1/\\12/g'

</td></tr><tr><td></td><td>sed '/ \*#/d; /^ \*$/d'

</td></tr><tr><td></td><td>sed ':a; /\\\\$/N; s/\\\\\\n//; ta'

</td></tr><tr><td></td><td>sed 's/\[ \\t\]\*$//'

</td></tr><tr><td></td><td>sed 's/\\(\[`"$\\\]\\)/\\\\\\1/g'

</td></tr><tr><td>•

</td><td>seq 10 | sed "s/^/ /; s/ \*<span class="math inline">.{7, }</span>/\\1/"

</td></tr><tr><td></td><td>sed -n '1000{p;q}'

</td></tr><tr><td></td><td>sed -n '10,20p;20q'

</td></tr><tr><td></td><td>sed -n 's/.\*&lt;title&gt;\\(.\*\\)&lt;\\/title&gt;.\*/\\1/ip;T;q'

</td></tr><tr><td></td><td>sed -i 42d ~/.ssh/known\_hosts

</td></tr><tr><td></td><td>sort -t. -k1,1n -k2,2n -k3,3n -k4,4n

</td></tr><tr><td>•

</td><td>echo 'Test' | tr '\[:lower:\]' '\[:upper:\]'

</td></tr><tr><td>•

</td><td>tr -dc '\[:print:\]' &lt; /dev/urandom

</td></tr><tr><td>•

</td><td>history | wc -l

</td></tr><tr><td colspan="2">**set operations** (Note you can [export LANG=C](http://www.pixelbeat.org/docs/env.html) for speed. Also these assume no duplicate lines within a file)

</td></tr><tr><td></td><td>sort file1 file2 | uniq

</td></tr><tr><td></td><td>sort file1 file2 | uniq -d

</td></tr><tr><td></td><td>sort file1 file1 file2 | uniq -u

</td></tr><tr><td></td><td>sort file1 file2 | uniq -u

</td></tr><tr><td></td><td>join -t'\\0' -a1 -a2 file1 file2

</td></tr><tr><td></td><td>join -t'\\0' file1 file2

</td></tr><tr><td></td><td>join -t'\\0' -v2 file1 file2

</td></tr><tr><td></td><td>join -t'\\0' -v1 -v2 file1 file2

</td></tr><tr><td colspan="2">**math**

</td></tr><tr><td>•

</td><td>echo '(1 + sqrt(5))/2' | bc -l

</td></tr><tr><td>•

</td><td>echo 'pad=20; min=64; (100\*10^6)/((pad+min)\*8)' | bc

</td></tr><tr><td>•

</td><td>echo 'pad=20; min=64; print (100E6)/((pad+min)\*8)' | python

</td></tr><tr><td>•

</td><td>echo 'pad=20; plot \[64:1518\] (100\*10\*\*6)/((pad+x)\*8)' | gnuplot -persist

</td></tr><tr><td>•

</td><td>echo 'obase=16; ibase=10; 64206' | bc

</td></tr><tr><td>•

</td><td>echo $((0x2dec))

</td></tr><tr><td>•

</td><td>units -t '100m/[9.58s](http://www.pixelbeat.org/misc/usain_bolt/)' 'miles/hour'

</td></tr><tr><td>•

</td><td>units -t '500GB' 'GiB'

</td></tr><tr><td>•

</td><td>units -t '1 googol'

</td></tr><tr><td>•

</td><td>seq 100 | (tr '\\n' +; echo 0) | bc

</td></tr><tr><td colspan="2">**calendar**

</td></tr><tr><td>•

</td><td>cal -3

</td></tr><tr><td>•

</td><td>cal 9 1752

</td></tr><tr><td>•

</td><td>date -d fri

</td></tr><tr><td>•

</td><td><nowiki>\[ $(date -d "tomorrow" +%d) = "01" \]</nowiki>

</td></tr><tr><td>•

</td><td>date --date='25 Dec' +%A

</td></tr><tr><td>•

</td><td>date --date='@2147483647'

</td></tr><tr><td>•

</td><td>TZ=':America/Los\_Angeles' date

</td></tr><tr><td></td><td>echo "mail -s 'get the train' P@draigBrady.com &lt; /dev/null" | at 17:45

</td></tr><tr><td>•

</td><td>echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW + 30 minutes"

</td></tr><tr><td colspan="2">**locales**

</td></tr><tr><td>•

</td><td>printf "%'d\\n" 1234

</td></tr><tr><td>•

</td><td>BLOCK\_SIZE=\\'1 ls -l

</td></tr><tr><td>•

</td><td>echo "I live in `locale territory`"

</td></tr><tr><td>•

</td><td>LANG=en\_IE.utf8 locale int\_prefix

</td></tr><tr><td>•

</td><td>locale | cut -d= -f1 | xargs locale -kc | less

</td></tr><tr><td colspan="2">**recode** (Obsoletes iconv, dos2unix, unix2dos)

</td></tr><tr><td>•

</td><td>recode -l | less

</td></tr><tr><td></td><td>recode windows-1252.. file\_to\_change.txt

</td></tr><tr><td></td><td>recode utf-8/CRLF.. file\_to\_change.txt

</td></tr><tr><td></td><td>recode iso-8859-15..utf8 file\_to\_change.txt

</td></tr><tr><td></td><td>recode ../b64 &lt; file.txt &gt; file.b64

</td></tr><tr><td></td><td>recode /qp.. &lt; file.txt &gt; file.qp

</td></tr><tr><td></td><td>recode ..HTML &lt; file.txt &gt; file.html

</td></tr><tr><td>•

</td><td>recode -lf windows-1252 | grep euro

</td></tr><tr><td>•

</td><td>echo -n 0x80 | recode latin-9/x1..dump

</td></tr><tr><td>•

</td><td>echo -n 0x20AC | recode ucs-2/x2..latin-9/x

</td></tr><tr><td>•

</td><td>echo -n 0x20AC | recode ucs-2/x2..utf-8/x

</td></tr><tr><td colspan="2">**CDs**

</td></tr><tr><td></td><td>gzip &lt; /dev/cdrom &gt; cdrom.iso.gz

</td></tr><tr><td></td><td>mkisofs -V LABEL -r dir | gzip &gt; cdrom.iso.gz

</td></tr><tr><td></td><td>mount -o loop cdrom.iso /mnt/dir

</td></tr><tr><td></td><td>cdrecord -v dev=/dev/cdrom blank=fast

</td></tr><tr><td></td><td>gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom -

</td></tr><tr><td></td><td>cdparanoia -B

</td></tr><tr><td></td><td>cdrecord -v dev=/dev/cdrom -audio \*.wav

</td></tr><tr><td></td><td>oggenc --tracknum='track' track.cdda.wav -o 'track.ogg'

</td></tr><tr><td colspan="2">**disk space** (See also [FSlint](http://www.pixelbeat.org/fslint/))

</td></tr><tr><td>•

</td><td>ls -lSr

</td></tr><tr><td>•

</td><td>du -s \* | sort -k1,1rn | head

</td></tr><tr><td>•

</td><td>df -h

</td></tr><tr><td>•

</td><td>df -i

</td></tr><tr><td>•

</td><td>fdisk -l

</td></tr><tr><td>•

</td><td>[rpm](http://www.pixelbeat.org/docs/packaging.html) -q -a --qf '%10{SIZE}\\t%{NAME}\\n' | sort -k1,1n

</td></tr><tr><td>•

</td><td>[dpkg](http://www.pixelbeat.org/docs/packaging.html)-query -W -f='${Installed-Size;10}\\t${Package}\\n' | sort -k1,1n

</td></tr><tr><td>•

</td><td>dd bs=1 seek=2TB if=/dev/null of=ext3.test

</td></tr><tr><td>•

</td><td>&gt; file

</td></tr><tr><td colspan="2">**monitoring/debugging**

</td></tr><tr><td>•

</td><td>tail -f /var/log/messages

</td></tr><tr><td>•

</td><td>strace -c ls &gt;/dev/null

</td></tr><tr><td>•

</td><td>strace -f -e open ls &gt;/dev/null

</td></tr><tr><td>•

</td><td>ltrace -f -e getenv ls &gt;/dev/null

</td></tr><tr><td>•

</td><td>lsof -p $$

</td></tr><tr><td>•

</td><td>lsof ~

</td></tr><tr><td>•

</td><td>tcpdump not port 22

</td></tr><tr><td>•

</td><td>ps -e -o pid,args --forest

</td></tr><tr><td>•

</td><td>ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'

</td></tr><tr><td>•

</td><td>ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

</td></tr><tr><td>•

</td><td>ps -C firefox-bin -L -o pid,tid,pcpu,state

</td></tr><tr><td>•

</td><td>ps -p 1,2

</td></tr><tr><td>•

</td><td>last reboot

</td></tr><tr><td>•

</td><td>free -m

</td></tr><tr><td>•

</td><td>watch -n.1 'cat /proc/interrupts'

</td></tr><tr><td colspan="2">**system information** (see also [sysinfo](http://www.pixelbeat.org/scripts/sysinfo)) ('#' means root access is required)

</td></tr><tr><td>•

</td><td>uname -a

</td></tr><tr><td>•

</td><td>head -n1 /etc/issue

</td></tr><tr><td>•

</td><td>cat /proc/partitions

</td></tr><tr><td>•

</td><td>grep MemTotal /proc/meminfo

</td></tr><tr><td>•

</td><td>grep "model name" /proc/cpuinfo

</td></tr><tr><td>•

</td><td>lspci -tv

</td></tr><tr><td>•

</td><td>lsusb -tv

</td></tr><tr><td>•

</td><td>mount | column -t

</td></tr><tr><td>•

</td><td>grep -F capacity: /proc/acpi/battery/BAT0/info

</td></tr><tr><td>\#

</td><td>dmidecode -q | less

</td></tr><tr><td>\#

</td><td>smartctl -A /dev/sda | grep Power\_On\_Hours

</td></tr><tr><td>\#

</td><td>hdparm -i /dev/sda

</td></tr><tr><td>\#

</td><td>hdparm -tT /dev/sda

</td></tr><tr><td>\#

</td><td>badblocks -s /dev/sda

</td></tr><tr><td colspan="2">**interactive** (see also [linux keyboard shortcuts)](http://www.pixelbeat.org/lkdb/)

</td></tr><tr><td>•

</td><td>[readline](http://www.pixelbeat.org/lkdb/readline.html)

</td></tr><tr><td>•

</td><td>[screen](http://www.pixelbeat.org/lkdb/screen.html)

</td></tr><tr><td>•

</td><td>[mc](http://www.pixelbeat.org/lkdb/mc.html)

</td></tr><tr><td>•

</td><td>[gnuplot](http://www.pixelbeat.org/docs/web/access_log/analyzing.html)

</td></tr><tr><td>•

</td><td>links

</td></tr><tr><td>•

</td><td>xdg-open **.**

</td></tr><tr><td colspan="2">**miscellaneous**

</td></tr><tr><td>•

</td><td>[alias](http://www.pixelbeat.org/settings/.bashrc)hd='od -Ax -tx1z -v'

</td></tr><tr><td>•

</td><td>[alias](http://www.pixelbeat.org/settings/.bashrc)realpath='readlink -f'

</td></tr><tr><td>•

</td><td>set | grep $USER

</td></tr><tr><td></td><td>touch -c -t 0304050607 file

</td></tr><tr><td>•

</td><td>python -m SimpleHTTPServer

</td></tr></tbody></table>

&lt;!--font-size--&gt;google\_ad\_section\_start(weight=ignore)