Welcome to bashoneliners.com, a growing collection of practical and well-explained Bash tips and tricks. We are committed to review every contributed one-liner to ensure its high quality, practical usefulness, and a solid explanation of how it works. We want to document one-liners for frequent (non-trivial) tasks executed in the shell, written in the best possible way, following good practices known in the industry. To get the latest Bash one-liners, follow @bashoneliners on Twitter. If you find any problems, please report on GitHub Issues.
0 score

Set a colorful bash prompt per dev test prod environments

 $ PS1='\[\e[1;31m\][\u@\h \W]\$\[\e[0m\] '

Feb. 25, 2012, 2:46 p.m.Janos

1 score

Find in files, recursively

 $ grep -rn 'nameserver' /etc 2>/dev/null

Feb. 19, 2012, 8:24 a.m.atpessoa

1 score

Calculate the total disk space used by a list of files or directories

 $ du -cshx ./a ./b

Feb. 15, 2012, 10:43 p.m.openiduser14

1 score

Create a compressed tar file that rsync will transfer efficiently

 $ GZIP='--rsyncable' tar cvzf bobsbackup.tar.gz /home/bob

Feb. 15, 2012, 12:24 p.m.Anon6y5E4Use

1 score

Cut select pages from a pdf file and create a new file from those pages.

 $ ps2pdf -dFirstPage=3 -dLastPage=10 input.pdf output.pdf

Feb. 15, 2012, 11:08 a.m.Anon6y5E4Use

1 score

View a file with line numbers

 $ cat -n /path/to/file | less

Feb. 13, 2012, 5:14 p.m.openiduser28

1 score

Print the lines of file2 that are missing in file1

 $ comm -23 file2 file1

Feb. 13, 2012, 8:26 a.m.Anon9ge6A4uD

0 score

Print the lines of file2 that are missing in file1

 $ grep -vxFf file1 file2

Feb. 8, 2012, 2:42 p.m.Janos

1 score

Uses 'at' to run an arbitrary command at a specified time.

 $ echo 'play alarmclock.wav 2>/dev/null' | at 07:30 tomorrow

Feb. 4, 2012, 11:03 a.m.Anon5MAQumYj

1 score

Calculate an h index from an EndNote export

 $ MAX=$(NUM=1;cat author.xml |perl -p -e 's/(Times Cited)/\n$1/g'|grep "Times Cited" |perl -p -e 's/^Times Cited:([0-9]*).*$/$1/g'|sort -nr | while read LINE; do if [ $LINE -ge $NUM ]; then echo "$NUM"; fi; NUM=$[$NUM+1]; done;); echo "$MAX"|tail -1

Feb. 4, 2012, 1:06 a.m.openiduser14

1 score

Cut select pages from a pdf file and create a new file from those pages.

 $  pdftk input.pdf cat 2-4 7 9-10 output output.pdf

Feb. 3, 2012, 6:50 a.m.mmaki

0 score

Find in files, recursively

 $ find /etc -type f -print0 2>/dev/null | xargs -0 grep --color=AUTO -Hn 'nameserver' 2>/dev/null

Feb. 2, 2012, 7:32 p.m.openiduser21

1 score

Re-compress a gzip (.gz) file to a bzip2 (.bz2) file

 $ time gzip -cd file1.tar.gz 2>~/logfile.txt | pv -t -r -b -W -i 5 -B 8M | bzip2 > file1.tar.bz2 2>>~/logfile .txt

Feb. 1, 2012, 6:02 p.m.DAVEB

1 score

Test your hard drive speed

 $ time (dd if=/dev/zero of=zerofile bs=1M count=500;sync);rm zerofile

Feb. 1, 2012, 5:35 p.m.DAVEB

1 score

Recursively remove all empty sub-directories from a directory tree

 $ find . -depth  -type d  -empty -exec rmdir {} \;

Jan. 31, 2012, 11:15 p.m.openiduser16

1 score

Group count sort a log file

 $ A=$(FILE=/var/log/myfile.log; cat $FILE | perl -p -e 's/.*,([A-Z]+)[\:\+].*/$1/g' | sort -u | while read LINE; do grep "$LINE" $FILE | wc -l | perl -p -e 's/[^0-9]+//g'; echo -e "\t$LINE"; done;);echo "$A"|sort -nr

Jan. 31, 2012, 6:49 p.m.openiduser14

1 score

Use ghostscript to shrink PDF files

 $ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Jan. 31, 2012, 10:43 a.m.openiduser10

1 score

How to find all hard links to a file

 $ find /home -xdev -samefile file1

Jan. 30, 2012, 8:56 p.m.openiduser7

1 score

Find all the unique 4-letter words in a text

 $ cat ipsum.txt | perl -ne 'print map("$_\n", m/\w+/g);' | tr A-Z a-z | sort | uniq | awk 'length($1) == 4 {print}'

Jan. 29, 2012, 10:28 p.m.Janos

0 score

Concatenate PDF files using GhostScript

 $ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH file1.pdf file2.pdf file3.pdf

Jan. 26, 2012, 8:51 a.m.Janos

0 score

Format text with long lines to text with fixed width

 $ fmt -s -w80 file.txt

Jan. 22, 2012, 10:08 a.m.Janos

0 score

Come back quickly to the current directory after doing some temporary work somewhere else

 $ pushd /some/where/else; work; cd /somewhere; work; cd /another/place; popd

Jan. 15, 2012, 11:12 p.m.Janos

0 score

Export a git project to a directory

 $ git archive master | tar x -C /path/to/dir/to/export

Jan. 12, 2012, 11:04 a.m.Janos

0 score

Delete all tables of a mysql database

 $ mysql --defaults-file=my.cnf -e 'show tables' | while read t; do mysql --defaults-file=my.cnt  -e 'drop table '$t; done

Jan. 8, 2012, 7:53 a.m.Janos