# commandlinefu.com by David Winterbottom
# Run the last command as root
sudo !!
# Serve current directory tree at http://$HOSTNAME:8000/
python -m SimpleHTTPServer
# change to the previous working directory
cd -
# Runs previous command but replacing
^foo^bar
# mtr, better than traceroute and ping combined
mtr google.com
# Rapidly invoke an editor to write a long, complex, or tricky command
ctrl-x e
# Execute a command without saving it in the history
<space>command
# Empty a file
> file.txt
# Salvage a borked terminal
reset
# Capture video of a linux desktop
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
# Place the argument of the most recent command on the shell
'ALT+.' or '<ESC> .'
# currently mounted filesystems in nice layout
mount | column -t
# Query Wikipedia via console over DNS
dig +short txt <keyword>.wp.dg.cx
# Execute a command at a given time
echo "ls -l" | at midnight
# start a tunnel from some machine's port 80 to your local post 2001
ssh -N -L2001:localhost:80 somemachine
# Lists all listening ports together with the PID of the associated process
netstat -tlnp
# Quick access to the ascii table.
man ascii
# Runs previous command replacing foo by bar every time that foo appears
!!:gs/foo/bar
# output your microphone to a remote computer's speaker
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
# Get your external IP address
curl ifconfig.me
# Mount a temporary ram partition
mount -t tmpfs tmpfs /mnt -o size=1024m
# Mount folder/filesystem through SSH
sshfs name@server:/path/to/folder /path/to/mount/point
# Update twitter via curl
curl -u user:pass -d status="Tweeting from the shell" http://twitter.com/statuses/update.xml
# Compare a remote file with a local file
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
# Download an entire website
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
# commandlinefu.com by David Winterbottom
# Clear the terminal screen
ctrl-l
# Jump to a directory, execute a command and jump back to current dir
(cd /tmp && ls)
# List the size (in human readable form) of all sub folders from the current location
du -h --max-depth=1
# type partial command, kill this command, check something you forgot, yank the command, resume typing.
<ctrl+u> [...] <ctrl+y>
# A very simple and useful stopwatch
time read (ctrl-d to stop)
# SSH connection through host in the middle
ssh -t reachable_host ssh unreachable_host
# Shutdown a Windows machine from Linux
net rpc shutdown -I ipAddressOfWindowsPC -U username%password
# Make 'less' behave like 'tail -f'.
less +F somelogfile
# Watch Star Wars via telnet
telnet towel.blinkenlights.nl
# Check your unread Gmail from the command line
curl -u username --silent "https://mail.google.com/mail/feed/atom" | perl -ne 'print "\t" if /<name>/; print "$2\n" if /<(title|name)>(.*)<\/\1>/;'
# Simulate typing
echo "You can simulate on-screen typing just like in the movies" | pv -qL 10
# Set audible alarm when an IP address comes online
ping -i 60 -a IP_address
# Reboot machine when everything is hanging
<alt> + <print screen/sys rq> + <R> - <S> - <E> - <I> - <U> - <B>
# Close shell keeping all subprocess running
disown -a && exit
# List of commands you use most often
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
# Display the top ten running processes - sorted by memory usage
ps aux | sort -nk +4 | tail
# 32 bits or 64 bits?
getconf LONG_BIT
# Display a block of text with AWK
awk '/start_pattern/,/stop_pattern/' file.txt
# Set CDPATH to ease navigation
CDPATH=:..:~:~/projects
# Push your present working directory to a stack that you can pop later
pushd /tmp
# Put a console clock in top right corner
while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
# Watch Network Service Activity in Real-time
lsof -i
# Backticks are evil
echo "The date is: $(date +%D)"
# Create a script of the last executed command
echo "!!" > foo.sh
# diff two unsorted files without creating temporary files
diff <(sort file1) <(sort file2)
# commandlinefu.com by David Winterbottom
# Sharing file through http 80 port
nc -v -l 80 < file.ext
# escape any command aliases
\[command]
# Reuse all parameter of the previous command line
!*
# Easy and fast access to often executed commands that are very long and complex.
some_very_long_and_complex_command # label
# Show apps that use internet connection at the moment. (Multi-Language)
lsof -P -i -n
# quickly rename a file
mv filename.{old,new}
# python smtp server
python -m smtpd -n -c DebuggingServer localhost:1025
# Delete all files in a folder that don't match a certain file extension
rm !(*.foo|*.bar|*.baz)
# Google Translate
translate(){ wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$1&langpair=$2|${3:-en}" | sed 's/.*"translatedText":"\([^"]*\)".*}/\1\n/'; }
# save command output to image
ifconfig | convert label:@- ip.png
# Remove duplicate entries in a file without sorting.
awk '!x[$0]++' <file>
# Extract tarball from internet without local saving
wget -qO - "http://www.tarball.com/tarball.gz" | tar zxvf -
# Kills a process that is locking a file.
fuser -k filename
# Matrix Style
tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"
# Rip audio from a video file.
mplayer -ao pcm -vo null -vc dummy -dumpaudio -dumpfile <output-file> <input-file>
# Display which distro is installed
cat /etc/issue
# Find the process you are looking for minus the grepped one
ps aux | grep [p]rocess-name
# Insert the last command without the last argument (bash)
!:-
# Inserts the results of an autocompletion in the command line
ESC *
# Add Password Protection to a file your editing in vim.
vim -x <FILENAME>
# Stream YouTube URL directly to mplayer.
i="8uyxVmdaJ-w";mplayer -fs $(curl -s "http://www.youtube.com/get_video_info?&video_id=$i" | echo -e $(sed 's/%/\\x/g;s/.*\(v[0-9]\.lscache.*\)/http:\/\/\1/g') | grep -oP '^[^|,]*')
# Copy your SSH public key on a remote machine for passwordless login - the easy way
ssh-copy-id username@hostname
# A fun thing to do with ram is actually open it up and take a peek. This command will show you all the string (plain text) values in ram
sudo dd if=/dev/mem | cat | strings
# Define a quick calculator function
? () { echo "$*" | bc -l; }
# Show File System Hierarchy
man hier
# commandlinefu.com by David Winterbottom
# Easily search running processes (alias).
alias 'ps?'='ps ax | grep '
# Create a CD/DVD ISO image from disk.
readom dev=/dev/scd0 f=/path/to/image.iso
# Graphical tree of sub-directories
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
# Monitor progress of a command
pv access.log | gzip > access.log.gz
# Print all the lines between 10 and 20 of a file
sed -n '10,20p' <filename>
# Make directory including intermediate directories
mkdir -p a/long/directory/path
# Multiple variable assignments from command output in BASH
read day month year <<< $(date +'%d %m %y')
# intercept stdout/stderr of another process
strace -ff -e trace=write -e write=1,2 -p SOME_PID
# Job Control
^Z $bg $disown
# Show apps that use internet connection at the moment. (Multi-Language)
ss -p
# Copy a file using pv and watch its progress
pv sourcefile > destfile
# Send pop-up notifications on Gnome
notify-send ["<title>"] "<body>"
# Edit a file on a remote host using vim
vim scp://username@host//path/to/somefile
# Create a pdf version of a manpage
man -t manpage | ps2pdf - filename.pdf
# replace spaces in filenames with underscores
rename 'y/ /_/' *
# Generate a random password 30 characters long
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo
# Find Duplicate Files (based on size first, then MD5 hash)
find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
# Check your unread Gmail from the command line
curl -u username:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"
# Graph # of connections for each hosts.
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'
# Convert seconds to human-readable format
date -d@1234567890
# Remove all but one specific file
rm -f !(survivior.txt)
# return external ip
curl icanhazip.com
# Display a cool clock on your terminal
watch -t -n1 "date +%T|figlet"
# Monitor the queries being run by MySQL
watch -n 1 mysqladmin --user=<user> --password=<password> processlist
# Mount a .iso file in UNIX/Linux
mount /path/to/file.iso /mnt/cdrom -oloop
# commandlinefu.com by David Winterbottom
# Get the 10 biggest files/folders for the current direcotry
du -s * | sort -n | tail
# Record a screencast and convert it to an mpeg
ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/outputFile.mpg
# Search commandlinefu.com from the command line using the API
cmdfu(){ curl "http://www.commandlinefu.com/commands/matching/$@/$(echo -n $@ | openssl base64)/plaintext"; }
# Open Finder from the current Terminal location
open .
# Processor / memory bandwidthd? in GB/s
dd if=/dev/zero of=/dev/null bs=1M count=32768
# mkdir & cd into it as single command
mkdir /home/foo/doc/bar && cd $_
# Remove a line in a text file. Useful to fix
ssh-keygen -R <the_offending_host>
# Attach screen over ssh
ssh -t remote_host screen -r
# Share a terminal screen with others
% screen -r someuser/
# Create a persistent connection to a machine
ssh -MNf <user>@<host>
# Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id
cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
# Makes the permissions of file2 the same as file1
chmod --reference file1 file2
# git remove files which have been deleted
git add -u
# directly ssh to host B that is only accessible through host A
ssh -t hostA ssh hostB
# (Debian/Ubuntu) Discover what package a file belongs to
dpkg -S /usr/bin/ls
# List all bash shortcuts
bind -P
# Draw kernel module dependancy graph.
lsmod | perl -e 'print "digraph \"lsmod\" {";<>;while(<>){@_=split/\s+/; print "\"$_[0]\" -> \"$_\"\n" for split/,/,$_[3]}print "}"' | dot -Tpng | display -
# RTFM function
rtfm() { help $@ || man $@ || $BROWSER "http://www.google.com/search?q=$@"; }
# Show numerical values for each of the 256 colors in bash
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
# To print a specific line from a file
sed -n 5p <file>
# Run a command only when load average is below a certain threshold
echo "rm -rf /unwanted-but-large/folder" | batch
# Download Youtube video with wget!
wget http://www.youtube.com/watch?v=dQw4w9WgXcQ -qO- | sed -n "/fmt_url_map/{s/[\'\"\|]/\n/g;p}" | sed -n '/^fmt_url_map/,/videoplayback/p' | sed -e :a -e '$q;N;5,$D;ba' | tr -d '\n' | sed -e 's/\(.*\),\(.\)\{1,3\}/\1/' | wget -i - -O surprise.flv
# Broadcast your shell thru ports 5000, 5001, 5002 ...
script -qf | tee >(nc -kl 5000) >(nc -kl 5001) >(nc -kl 5002)
# Eavesdrop on your system
diff <(lsof -p 1234) <(sleep 10; lsof -p 1234)
# Remove security limitations from PDF documents using ghostscript
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=OUTPUT.pdf -c .setpdfwrite -f INPUT.pdf
# commandlinefu.com by David Winterbottom
# Run a file system check on your next boot.
sudo touch /forcefsck
# Release memory used by the Linux kernel on caches
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# Remove all files previously extracted from a tar(.gz) file.
tar -tf <file.tar.gz> | xargs rm -r
# using `!#$' to referance backward-word
cp /work/host/phone/ui/main.cpp !#$:s/host/target
# Binary Clock
watch -n 1 'echo "obase=2;`date +%s`" | bc'
# List only the directories
ls -d */
# Download all images from a site
wget -r -l1 --no-parent -nH -nd -P/tmp -A".gif,.jpg" http://example.com/images
# Duplicate installed packages from one machine to the other (RPM-based systems)
ssh root@remote.host "rpm -qa" | xargs yum -y install
# Start COMMAND, and kill it if still running after 5 seconds
timeout 5s COMMAND
# Use tee to process a pipe with two or more processes
echo "tee can split a pipe in two"|tee >(rev) >(tr ' ' '_')
# Edit a google doc with vim
google docs edit --title "To-Do List" --editor vim
# Backup all MySQL Databases to individual files
for I in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $I | gzip > "$I.sql.gz"; done
# Port Knocking!
knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000
# Show a 4-way scrollable process tree with full details.
ps awwfux | less -S
# which program is this port belongs to ?
lsof -i tcp:80
# Sort the size usage of a directory tree by gigabytes, kilobytes, megabytes, then bytes.
du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e'
# Google text-to-speech in mp3 format
wget -q -U Mozilla -O output.mp3 "http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=hello+world
# What is my public IP-address?
curl ifconfig.me
# Search recursively to find a word or phrase in certain file types, such as C code
find . -name "*.[ch]" -exec grep -i -H "search pharse" {} \;
# Bring the word under the cursor on the :ex line in Vim
:<C-R><C-W>
# Block known dirty hosts from reaching your machine
wget -qO - http://infiltrated.net/blacklisted|awk '!/#|[a-z]/&&/./{print "iptables -A INPUT -s "$1" -j DROP"}'
# Synchronize date and time with a server over ssh
date --set="$(ssh user@server date)"
# Recursively remove all empty directories
find . -type d -empty -delete
# Add timestamp to history
export HISTTIMEFORMAT="%F %T "
# Rapidly invoke an editor to write a long, complex, or tricky command
fc
# commandlinefu.com by David Winterbottom
# Find out how much data is waiting to be written to disk
grep ^Dirty /proc/meminfo
# Remove a line in a text file. Useful to fix "ssh host key change" warnings
sed -i 8d ~/.ssh/known_hosts
# Search for a <pattern> string inside all files in the current directory
grep -RnisI <pattern> *
# Colorized grep in less
grep --color=always | less -R
# check site ssl certificate dates
echo | openssl s_client -connect www.google.com:443 2>/dev/null |openssl x509 -dates -noout
# Create a quick back-up copy of a file
cp file.txt{,.bak}
# Convert Youtube videos to MP3
youtube-dl -t --extract-audio --audio-format mp3 YOUTUBE_URL_HERE
# Exclude multiple columns using AWK
awk '{$1=$3=""}1' file
# Get the IP of the host your coming from when logged in remotely
echo ${SSH_CLIENT%% *}
# ls not pattern
ls !(*.gz)
# Show apps that use internet connection at the moment.
lsof -P -i -n | cut -f 1 -d " "| uniq | tail -n +2
# Compare two directory trees.
diff <(cd dir1 && find | sort) <(cd dir2 && find | sort)
# exit without saving history
kill -9 $$
# Remind yourself to leave in 15 minutes
leave +15
# make directory tree
mkdir -p work/{d1,d2}/{src,bin,bak}
# Control ssh connection
[enter]~?
# pretend to be busy in office to enjoy a cup of coffee
cat /dev/urandom | hexdump -C | grep "ca fe"
# run complex remote shell cmds over ssh, without escaping quotes
ssh host -l user $(<cmd.txt)
# GREP a PDF file.
pdftotext [file] - | grep 'YourPattern'
# Exclude .svn, .git and other VCS junk for a pristine tarball
tar --exclude-vcs -cf src.tar src/
# delete a line from your shell history
history -d
# Recursively change permissions on files, leave directories alone.
find ./ -type f -exec chmod 644 {} \;
# Convert PDF to JPG
for file in `ls *.pdf`; do convert -verbose -colorspace RGB -resize 800 -interlace none -density 300 -quality 80 $file `echo $file | sed 's/\.pdf$/\.jpg/'`; done
# Prettify an XML file
tidy -xml -i -m [file]
# Quick access to ASCII code of a key
showkey -a
# commandlinefu.com by David Winterbottom
# find files in a date range
find . -type f -newermt "2010-01-01" ! -newermt "2010-06-01"
# notify yourself when a long-running command which has ALREADY STARTED is finished
<ctrl+z> fg; notify_me
# easily find megabyte eating files or directories
alias dush="du -sm *|sort -n|tail"
# prints line numbers
nl
# A robust, modular log coloriser
ccze
# Remove blank lines from a file using grep and save output to new file
grep . filename > newfilename
# Create a directory and change into it at the same time
md () { mkdir -p "$@" && cd "$@"; }
# Save your sessions in vim to resume later
:mksession! <filename>
# How to establish a remote Gnu screen session that you can re-connect to
ssh -t user@some.domain.com /usr/bin/screen -xRR
# Take screenshot through SSH
DISPLAY=:0.0 import -window root /tmp/shot.png
# Lists all listening ports together with the PID of the associated process
lsof -Pan -i tcp -i udp
# Opens vi/vim at pattern in file
vi +/pattern [file]
# Alias HEAD for automatic smart output
alias head='head -n $((${LINES:-`tput lines 2>/dev/null||echo -n 12`} - 2))'
# Create colorized html file from Vim or Vimdiff
:TOhtml
# Colorful man
apt-get install most && update-alternatives --set pager /usr/bin/most
# Pipe stdout and stderr, etc., to separate commands
some_command > >(/bin/cmd_for_stdout) 2> >(/bin/cmd_for_stderr)
# Go to parent directory of filename edited in last command
cd !$:h
# Diff on two variables
diff <(echo "$a") <(echo "$b")
# Draw a Sierpinski triangle
perl -e 'print "P1\n256 256\n", map {$_&($_>>8)?1:0} (0..0xffff)' | display
# Create a nifty overview of the hardware in your computer
lshw -html > hardware.html
# Manually Pause/Unpause Firefox Process with POSIX-Signals
killall -STOP -m firefox
# Gets a random Futurama quote from /.
curl -Is slashdot.org | egrep '^X-(F|B|L)' | cut -d \- -f 2
# Use lynx to run repeating website actions
lynx -accept_all_cookies -cmd_script=/your/keystroke-file
# Intercept, monitor and manipulate a TCP connection.
mkfifo /tmp/fifo; cat /tmp/fifo | nc -l -p 1234 | tee -a to.log | nc machine port | tee -a from.log > /tmp/fifo
# Display a list of committers sorted by the frequency of commits
svn log -q|grep "|"|awk "{print \$3}"|sort|uniq -c|sort -nr
# commandlinefu.com by David Winterbottom
# Copy a MySQL Database to a new Server via SSH with one command
mysqldump --add-drop-table --extended-insert --force --log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost "mysql -uUSER -pPASS NEW_DB_NAME"
# Fast, built-in pipe-based data sink
<COMMAND> |:
# Use file(1) to view device information
file -s /dev/sd*
# Find usb device
diff <(lsusb) <(sleep 3s && lsusb)
# Bind a key with a command
bind -x '"\C-l":ls -l'
# copy working directory and compress it on-the-fly while showing progress
tar -cf - . | pv -s $(du -sb . | awk '{print $1}') | gzip > out.tgz
# analyze traffic remotely over ssh w/ wireshark
ssh root@server.com 'tshark -f "port !22" -w -' | wireshark -k -i -
# View the newest xkcd comic.
xkcd(){ wget -qO- http://xkcd.com/|tee >(feh $(grep -Po '(?<=")http://imgs[^/]+/comics/[^"]+\.\w{3}'))|grep -Po '(?<=(\w{3})" title=").*(?=" alt)';}
# convert unixtime to human-readable
date -d @1234567890
# Schedule a script or command in x num hours, silently run in the background even if logged out
( ( sleep 2h; your-command your-args ) & )
# recursive search and replace old with new string, inside files
$ grep -rl oldstring . |xargs sed -i -e 's/oldstring/newstring/'
# Find files that have been modified on your system in the past 60 minutes
sudo find / -mmin 60 -type f
# find geographical location of an ip address
lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \\'|sed 's\My\\'
# read manpage of a unix command as pdf in preview (Os X)
man -t UNIX_COMMAND | open -f -a preview
# Speed up launch of firefox
find ~ -name '*.sqlite' -exec sqlite3 '{}' 'VACUUM;' \;
# List the number and type of active network connections
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
# format txt as table not joining empty columns
column -tns: /etc/passwd
# Bind a key with a command
bind '"\C-l":"ls -l\n"'
# prevent accidents while using wildcards
rm *.txt <TAB> <TAB>
# Random Number Between 1 And X
echo $[RANDOM%X+1]
# live ssh network throughput test
yes | pv | ssh $host "cat > /dev/null"
# Press Any Key to Continue
read -sn 1 -p "Press any key to continue..."
# backup all your commandlinefu.com favourites to a plaintext file
clfavs(){ URL="http://www.commandlinefu.com";wget -O - --save-cookies c --post-data "username=$1&password=$2&submit=Let+me+in" $URL/users/signin;for i in `seq 0 25 $3`;do wget -O - --load-cookies c $URL/commands/favourites/plaintext/$i >>$4;done;rm -f c;}
# send echo to socket network
echo "foo" > /dev/tcp/192.168.1.2/25
# Perform a branching conditional
true && { echo success;} || { echo failed; }
# commandlinefu.com by David Winterbottom
# Resume scp of a big file
rsync --partial --progress --rsh=ssh $file_source $user@$host:$destination_file
# shut of the screen.
xset dpms force standby
# Create a single-use TCP (or UDP) proxy
nc -l -p 2000 -c "nc example.org 3000"
# runs a bash script in debugging mode
bash -x ./post_to_commandlinefu.sh
# Instead of writing a multiline if/then/else/fi construct you can do that by one line
[[ test_condition ]] && if_true_do_this || otherwise_do_that
# Use tee + process substitution to split STDOUT to multiple commands
some_command | tee >(command1) >(command2) >(command3) ... | command4
# Retry the previous command until it exits successfully
until !!; do :; done
# Shell recorder with replay
script -t /tmp/mylog.out 2>/tmp/mylog.time; <do your work>; <CTRL-D>; scriptreplay /tmp/mylog.time /tmp/mylog.out
# A child process which survives the parent's death (for sure)
( command & )
# find all file larger than 500M
find / -type f -size +500M
# exclude a column with cut
cut -f5 --complement
# Recover a deleted file
grep -a -B 25 -A 100 'some string in the file' /dev/sda1 > results.txt
# April Fools' Day Prank
PROMPT_COMMAND='if [ $RANDOM -le 3200 ]; then printf "\0337\033[%d;%dH\033[4%dm \033[m\0338" $((RANDOM%LINES+1)) $((RANDOM%COLUMNS+1)) $((RANDOM%8)); fi'
# Listen to BBC Radio from the command line.
bbcradio() { local s PS3="Select a station: ";select s in 1 1x 2 3 4 5 6 7 "Asian Network an" "Nations & Local lcl";do break;done;s=($s);mplayer -playlist "http://www.bbc.co.uk/radio/listen/live/r"${s[@]: -1}".asx";}
# Monitor bandwidth by pid
nethogs -p eth0
# throttle bandwidth with cstream
tar -cj /backup | cstream -t 777k | ssh host 'tar -xj -C /backup'
# Run a long job and notify me when it's finished
./my-really-long-job.sh && notify-send "Job finished"
# List all files opened by a particular command
lsof -c dhcpd
# Tell local Debian machine to install packages used by remote Debian machine
ssh remotehost 'dpkg --get-selections' | dpkg --set-selections && dselect install
# GRUB2: set Super Mario as startup tune
echo "GRUB_INIT_TUNE=\"1000 334 1 334 1 0 1 334 1 0 1 261 1 334 1 0 1 392 2 0 4 196 2\"" | sudo tee -a /etc/default/grub > /dev/null && sudo update-grub
# Diff remote webpages using wget
diff <(wget -q -O - URL1) <(wget -q -O - URL2)
# Close a hanging ssh session
~.
# List alive hosts in specific subnet
nmap -sP 192.168.1.0/24
# intersection between two files
grep -Fx -f file1 file2
# processes per user counter
ps hax -o user | sort | uniq -c
# commandlinefu.com by David Winterbottom
# Create an audio test CD of sine waves from 1 to 99 Hz
(echo CD_DA; for f in {01..99}; do echo "$f Hz">&2; sox -nt cdda -r44100 -c2 $f.cdda synth 30 sine $f; echo TRACK AUDIO; echo FILE \"$f.cdda\" 0; done) > cdrdao.toc && cdrdao write cdrdao.toc && rm ??.cdda cdrdao.toc
# Show current working directory of a process
pwdx pid
# Quickly (soft-)reboot skipping hardware checks
/sbin/kexec -l /boot/$KERNEL --append="$KERNELPARAMTERS" --initrd=/boot/$INITRD; sync; /sbin/kexec -e
# Nicely display permissions in octal format with filename
stat -c '%A %a %n' *
# Brute force discover
sudo zcat /var/log/auth.log.*.gz | awk '/Failed password/&&!/for invalid user/{a[$9]++}/Failed password for invalid user/{a["*" $11]++}END{for (i in a) printf "%6s\t%s\n", a[i], i|"sort -n"}'
# convert uppercase files to lowercase files
rename 'y/A-Z/a-z/' *
# Check if system is 32bit or 64bit
getconf LONG_BIT
# Limit the cpu usage of a process
sudo cpulimit -p pid -l 50
# Convert seconds into minutes and seconds
bc <<< 'obase=60;299'
# Repoint an existing symlink to a new location
ln -nsf <TARGET> <LINK>
# send a circular
wall <<< "Broadcast This"
# The BOFH Excuse Server
telnet towel.blinkenlights.nl 666
# List files with quotes around each filename
ls -Q
# See udev at work
udevadm monitor
# Get your outgoing IP address
dig +short myip.opendns.com @resolver1.opendns.com
# Makes you look busy
alias busy='my_file=$(find /usr/include -type f | sort -R | head -n 1); my_len=$(wc -l $my_file | awk "{print $1}"); let "r = $RANDOM % $my_len" 2>/dev/null; vim +$r $my_file'
# Insert the last argument of the previous command
<ESC> .
# Duplicate several drives concurrently
dd if=/dev/sda | tee >(dd of=/dev/sdb) | dd of=/dev/sdc
# Make sure a script is run in a terminal.
[ -t 0 ] || exit 1
# Get your external IP address
curl ip.appspot.com
# use vim to get colorful diff output
svn diff | view -
# A fun thing to do with ram is actually open it up and take a peek. This command will show you all the string (plain text) values in ram
sudo strings /dev/mem
# find files containing text
grep -lir "some text" *
# Quickly graph a list of numbers
gnuplot -persist <(echo "plot '<(sort -n listOfNumbers.txt)' with lines")
# Analyse an Apache access log for the most common IP addresses
tail -10000 access_log | awk '{print $1}' | sort | uniq -c | sort -n | tail
# commandlinefu.com by David Winterbottom
# prevent large files from being cached in memory (backups!)
nocache <I/O-heavy-command>
# Print diagram of user/groups
awk 'BEGIN{FS=":"; print "digraph{"}{split($4, a, ","); for (i in a) printf "\"%s\" [shape=box]\n\"%s\" -> \"%s\"\n", $1, a[i], $1}END{print "}"}' /etc/group|display
# Create strong, but easy to remember password
read -s pass; echo $pass | md5sum | base64 | cut -c -16
# Generate an XKCD #936 style 4 word password
shuf -n4 /usr/share/dict/words | tr -d '\n'
# Python version 3: Serve current directory tree at http://$HOSTNAME:8000/
python -m http.server
# VI config to save files with +x when a shebang is found on line 1
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif
# I finally found out how to use notify-send with at or cron
echo "export DISPLAY=:0; export XAUTHORITY=~/.Xauthority; notify-send test" | at now+1minute
# perl one-liner to get the current week number
date +%V
# Execute a command with a timeout
timeout 10 sleep 11
# Find files that were modified by a given command
touch /tmp/file ; $EXECUTECOMMAND ; find /path -newer /tmp/file
# Have an ssh session open forever
autossh -M50000 -t server.example.com 'screen -raAd mysession'
# pipe output of a command to your clipboard
some command|xsel --clipboard
# Recursively compare two directories and output their differences on a readable format
diff -urp /originaldirectory /modifieddirectory
# Make anything more awesome
command | figlet
# When feeling down, this command helps
sl
# List recorded formular fields of Firefox
cd ~/.mozilla/firefox/ && sqlite3 `cat profiles.ini | grep Path | awk -F= '{print $2}'`/formhistory.sqlite "select * from moz_formhistory" && cd - > /dev/null
# Base conversions with bc
echo "obase=2; 27" | bc -l
# ls -hog --> a more compact ls -l
ls -hog
# Start a command on only one CPU core
taskset -c 0 your_command
# Get all the keyboard shortcuts in screen
^A ?
# Switch 2 characters on a command line.
ctrl-t
# Notepad in a browser (type this in the URL bar)
data:text/html, <html contenteditable>
# convert single digit to double digits
for i in ?.ogg; do mv $i 0$i; done
# Annotate tail -f with timestamps
tail -f file | while read; do echo "$(date +%T.%N) $REPLY"; done
# Stamp a text line on top of the pdf pages.
echo "This text gets stamped on the top of the pdf pages." | enscript -B -f Courier-Bold16 -o- | ps2pdf - | pdftk input.pdf stamp - output output.pdf
# commandlinefu.com by David Winterbottom
# Create a file server, listening in port 7000
while true; do nc -l 7000 | tar -xvf -; done
# bypass any aliases and functions for the command
\foo
# cat a bunch of small files with file indication
grep . *
# Find broken symlinks
find -L . -type l
# stderr in color
mycommand 2> >(while read line; do echo -e "\e[01;31m$line\e[0m"; done)
# Stop Flash from tracking everything you do.
for i in ~/.adobe ~/.macromedia ; do ( rm $i/ -rf ; ln -s /dev/null $i ) ; done
# Save a file you edited in vim without the needed permissions (no echo)
:w !sudo tee > /dev/null %
# Delete all empty lines from a file with vim
:g/^$/d
# Remote screenshot
DISPLAY=":0.0" import -window root screenshot.png
# your terminal sings
echo {1..199}" bottles of beer on the wall, cold bottle of beer, take one down, pass it around, one less bottle of beer on the wall,, " | espeak -v english -s 140
# Define words and phrases with google.
define(){ local y="$@";curl -sA"Opera" "http://www.google.com/search?q=define:${y// /+}"|grep -Po '(?<=<li>)[^<]+'|nl|perl -MHTML::Entities -pe 'decode_entities($_)' 2>/dev/null;}
# Harder, Faster, Stronger SSH clients
ssh -4 -C -c blowfish-cbc
# Clean up poorly named TV shows.
rename -v 's/.*[s,S](\d{2}).*[e,E](\d{2}).*\.avi/SHOWNAME\ S$1E$2.avi/' poorly.named.file.s01e01.avi
# Backup all MySQL Databases to individual files
for db in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $db | gzip > "/backups/mysqldump-$(hostname)-$db-$(date +%Y-%m-%d-%H.%M.%S).gz"; done
# check open ports
lsof -Pni4 | grep LISTEN
# Triple monitoring in screen
tmpfile=$(mktemp) && echo -e 'startup_message off\nscreen -t top htop\nsplit\nfocus\nscreen -t nethogs nethogs wlan0\nsplit\nfocus\nscreen -t iotop iotop' > $tmpfile && sudo screen -c $tmpfile
# Save an HTML page, and covert it to a .pdf file
wget $URL | htmldoc --webpage -f "$URL".pdf - ; xpdf "$URL".pdf &
# DELETE all those duplicate files but one based on md5 hash comparision in the current directory tree
find . -type f -print0|xargs -0 md5sum|sort|perl -ne 'chomp;$ph=$h;($h,$f)=split(/\s+/,$_,2);print "$f"."\x00" if ($h eq $ph)'|xargs -0 rm -v --
# create an emergency swapfile when the existing swap space is getting tight
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024000;sudo mkswap /swapfile; sudo swapon /swapfile
# Relocate a file or directory, but keep it accessible on the old location throug a simlink.
mv $1 $2 && ln -s $2/$(basename $1) $(dirname $1)
# a short counter
yes '' | cat -n
# Rsync remote data as root using sudo
rsync --rsync-path 'sudo rsync' username@source:/folder/ /local/
# Transfer SSH public key to another machine in one step
ssh-keygen; ssh-copy-id user@host; ssh user@host
# git remove files which have been deleted
git rm $(git ls-files --deleted)
# Copy stdin to your X11 buffer
ssh user@host cat /path/to/some/file | xclip
# commandlinefu.com by David Winterbottom
# Get info about remote host ports and OS detection
nmap -sS -P0 -sV -O <target>
# List of commands you use most often
history | awk '{print $2}' | sort | uniq -c | sort -rn | head
# Copy a file structure without files
find * -type d -exec mkdir /where/you/wantem/\{\} \;
# Get list of servers with a specific port open
nmap -sT -p 80 -oG - 192.168.1.* | grep open
# Display current time in requested time zones.
zdump Japan America/New_York
# dmesg with colored human-readable dates
dmesg -T|sed -e 's|\(^.*'`date +%Y`']\)\(.*\)|\x1b[0;34m\1\x1b[0m - \2|g'
# Extract audio from Flash video (*.flv) as mp3 file
ffmpeg -i video.flv -vn -ar 44100 -ac 2 -ab 192k -f mp3 audio.mp3
# Share your terminal session real-time
mkfifo foo; script -f foo
# Short and elegant way to backup a single file before you change it.
cp httpd.conf{,.bk}
# clean up memory of unnecessary things (Kernerl 2.6.16 or newer)
sync && echo 1 > /proc/sys/vm/drop_caches
# Find all the links to a file
find -L / -samefile /path/to/file -exec ls -ld {} +
# Recover tmp flash videos (deleted immediately by the browser plugin)
for h in `find /proc/*/fd -ilname "/tmp/Flash*" 2>/dev/null`; do ln -s "$h" `readlink "$h" | cut -d' ' -f1`; done
# Single use vnc-over-ssh connection
ssh -f -L 5900:localhost:5900 your.ssh.server "x11vnc -safer -localhost -nopw -once -display :0"; vinagre localhost:5900
# send a circular
echo "dear admin, please ban eribsskog" | wall
# Visit wikileaks.com
echo 213.251.145.96 wikileaks.com >>/etc/hosts
# List all open ports and their owning executables
lsof -i -P | grep -i "listen"
# Create a single PDF from multiple images with ImageMagick
convert *.jpg output.pdf
# dd with progress bar and statistics
sudo dd if=/dev/sdc bs=4096 | pv -s 2G | sudo dd bs=4096 of=~/USB_BLACK_BACKUP.IMG
# View all date formats, Quick Reference Help Alias
alias dateh='date --help|sed -n "/^ *%%/,/^ *%Z/p"|while read l;do F=${l/% */}; date +%$F:"|'"'"'${F//%n/ }'"'"'|${l#* }";done|sed "s/\ *|\ */|/g" |column -s "|" -t'
# Monitor open connections for httpd including listen, count and sort it per IP
watch "netstat -plan|grep :80|awk {'print \$5'} | cut -d: -f 1 | sort | uniq -c | sort -nk 1"
# output your microphone to a remote computer's speaker
arecord -f dat | ssh -C user@host aplay -f dat
# download and unpack tarball without leaving it sitting on your hard drive
wget -qO - http://example.com/path/to/blah.tar.gz | tar xzf -
# Colored diff ( via vim ) on 2 remotes files on your local computer.
vimdiff scp://root@server-foo.com//etc/snmp/snmpd.conf scp://root@server-bar.com//etc/snmp/snmpd.conf
# Split a tarball into multiple parts
tar cf - <dir>|split -b<max_size>M - <name>.tar.
# Matrix Style
echo -e "\e[32m"; while :; do for i in {1..16}; do r="$(($RANDOM % 2))"; if [[ $(($RANDOM % 5)) == 1 ]]; then if [[ $(($RANDOM % 4)) == 1 ]]; then v+="\e[1m $r "; else v+="\e[2m $r "; fi; else v+=" "; fi; done; echo -e "$v"; v=""; done
# commandlinefu.com by David Winterbottom
# Pretty Print a simple csv in the command line
column -s, -t <tmp.csv
# Ultimate current directory usage command
ncdu
# Cleanup firefox's database.
find ~/.mozilla/firefox/ -type f -name "*.sqlite" -exec sqlite3 {} VACUUM \;
# Terminal - Show directories in the PATH, one per line with sed and bash3.X `here string'
tr : '\n' <<<$PATH
# Find Duplicate Files (based on MD5 hash)
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
# Print a great grey scale demo !
yes "$(seq 232 255;seq 254 -1 233)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .01; done
# Smiley Face Bash Prompt
PS1="\`if [ \$? = 0 ]; then echo \e[33\;40m\\\^\\\_\\\^\e[0m; else echo \e[36\;40m\\\-\e[0m\\\_\e[36\;40m\\\-\e[0m; fi\` \u \w:\h)"
# Create a system overview dashboard on F12 key
bind '"\e[24~"':"\"ps -elF;df -h;free -mt;netstat -lnpt;who -a\C-m"""
# coloured tail
tail -f FILE | perl -pe 's/KEYWORD/\e[1;31;43m$&\e[0m/g'
# Search for commands from the command line
clfu-seach <search words>
# Install a Firefox add-on/theme to all users
sudo firefox -install-global-extension /path/to/add-on
# clear current line
CTRL+u
# Convert all MySQL tables and fields to UTF8
mysql --database=dbname -B -N -e "SHOW TABLES" | awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"}' | mysql --database=dbname &
# Put readline into vi mode
set -o vi
# Delete all empty lines from a file with vim
:g!/\S/d
# Backup a remote database to your local filesystem
ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gz
# Recursively remove .svn directories from the current location
find . -type d -name '.svn' -print0 | xargs -0 rm -rdf
# Start a new command in a new screen window
alias s='screen -X screen'; s top; s vi; s man ls;
# Efficiently print a line deep in a huge log file
sed '1000000!d;q' < massive-log-file.log
# Encrypted archive with openssl and tar
tar --create --file - --posix --gzip -- <dir> | openssl enc -e -aes256 -out <file>
# Remove a range of lines from a file
sed -i <file> -re '<start>,<end>d'
# Hide the name of a process listed in the `ps` output
exec -a "/sbin/getty 38400 tty7" your_cmd -erase_all_files
# Create a local compressed tarball from remote host directory
ssh user@host "tar -zcf - /path/to/dir" > dir.tar.gz
# convert from hexidecimal or octal to decimal
echo $((0x1fe)) $((033))
# save man-page as pdf
man -t awk | ps2pdf - awk.pdf
# commandlinefu.com by David Winterbottom
# Convert seconds into minutes and seconds
echo 'obase=60;299' | bc
# List by size all of the directories in a given tree.
du -h /path | sort -h
# All IP connected to my host
netstat -lantp | grep ESTABLISHED |awk '{print $5}' | awk -F: '{print $1}' | sort -u
# df without line wrap on long FS name
df -P | column -t
# rsync instead of scp
rsync --progress --partial --rsh="ssh -p 8322" --bwlimit=100 --ipv4 user@domain.com:~/file.tgz .
# Download a file and uncompress it while it downloads
wget http://URL/FILE.tar.gz -O - | tar xfz -
# Reuse last parameter
!$
# Make sudo forget password instantly
sudo -K
# View user activity per directory.
sudo lsof -u someuser -a +D /etc
# Print a row of characters across the terminal
printf "%`tput cols`s"|tr ' ' '#'
# Limit bandwidth usage by apt-get
sudo apt-get -o Acquire::http::Dl-Limit=30 upgrade
# Convert text to picture
echo -e "Some Text Line1\nSome Text Line 2" | convert -background none -density 196 -resample 72 -unsharp 0x.5 -font "Courier" text:- -trim +repage -bordercolor white -border 3 text.gif
# track flights from the command line
flight_status() { if [[ $# -eq 3 ]];then offset=$3; else offset=0; fi; curl "http://mobile.flightview.com/TrackByRoute.aspx?view=detail&al="$1"&fn="$2"&dpdat=$(date +%Y%m%d -d ${offset}day)" 2>/dev/null |html2text |grep ":"; }
# Tune your guitar from the command line.
for n in E2 A2 D3 G3 B3 E4;do play -n synth 4 pluck $n repeat 2;done
# Remove executable bit from all files in the current directory recursively, excluding other directories
chmod -R -x+X *
# convert filenames in current directory to lowercase
rename 'y/A-Z/a-z/' *
# More precise BASH debugging
env PS4=' ${BASH_SOURCE}:${LINENO}(${FUNCNAME[0]}) ' sh -x /etc/profile
# Remove color codes (special characters) with sed
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
# redirect stdout and stderr each to separate files and print both to the screen
(some_command 2>&1 1>&3 | tee /path/to/errorlog ) 3>&1 1>&2 | tee /path/to/stdoutlog
# get all pdf and zips from a website using wget
wget --reject html,htm --accept pdf,zip -rl1 url
# bash: hotkey to put current commandline to text-editor
bash-hotkey: <CTRL+x+e>
# Use all the cores or CPUs when compiling
make -j 4
# Prints total line count contribution per user for an SVN repository
svn ls -R | egrep -v -e "\/$" | xargs svn blame | awk '{print $2}' | sort | uniq -c | sort -r
# Analyze awk fields
awk '{print NR": "$0; for(i=1;i<=NF;++i)print "\t"i": "$i}'
# Create a list of binary numbers
echo {0..1}{0..1}{0..1}{0..1}
# commandlinefu.com by David Winterbottom
# Run a command, store the output in a pastebin on the internet and place the URL on the xclipboard
ls | curl -F 'sprunge=<-' http://sprunge.us | xclip
# Get your public ip using dyndns
curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
# Start screen in detached mode
screen -d -m [<command>]
# How to run X without any graphics hardware
startx -- `which Xvfb` :1 -screen 0 800x600x24 && DISPLAY=:1 x11vnc
# Cut out a piece of film from a file. Choose an arbitrary length and starting time.
ffmpeg -vcodec copy -acodec copy -i orginalfile -ss 00:01:30 -t 0:0:20 newfile
# iso-8859-1 to utf-8 safe recursive rename
detox -r -s utf_8 /path/to/old/win/files/dir
# List the files any process is using
lsof +p xxxx
# Pipe STDOUT to vim
tail -1000 /some/file | vim -
# Show biggest files/directories, biggest first with 'k,m,g' eyecandy
du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'
# Terminate a frozen SSH-session
RETURN~.
# change directory to actual path instead of symlink path
cd `pwd -P`
# Download an entire static website to your local machine
wget --recursive --page-requisites --convert-links www.moyagraphix.co.za
# Batch convert files to utf-8
find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF-8 {} -o ../newdir_utf8/{} \;
# Get http headers for an url
curl -I www.commandlinefu.com
# vi a remote file
vi scp://username@host//path/to/somefile
# Show permissions of current directory and all directories upwards to /
namei -m $(pwd)
# Use top to monitor only all processes with the same name fragment 'foo'
top -p $(pgrep -d , foo)
# delete command line last word
ctrl+w
# move you up one directory quickly
shopt -s autocd
# Remove a line from a file using sed (useful for updating known SSH server keys when they change)
ssh-keygen -R <thehost>
# Show what PID is listening on port 80 on Linux
fuser -v 80/tcp
# Draw kernel module dependancy graph.
lsmod | awk 'BEGIN{print "digraph{"}{split($4, a, ","); for (i in a) print $1, "->", a[i]}END{print "}"}'|display
# Color man pages
echo "export LESS_TERMCAP_mb=$'\E[01;31m'" >> ~/.bashrc
# List files accessed by a command
strace -ff -e trace=file my_command 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print'
# Protect directory from an overzealous rm -rf *
cd <directory>; touch ./-i
# commandlinefu.com by David Winterbottom
# Watch RX/TX rate of an interface in kb/s
while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done
# Figure out what shell you're running
echo $0
# Blink LED Port of NIC Card
ethtool -p eth0
# See where a shortened url takes you before click
check(){ curl -sI $1 | sed -n 's/Location: *//p';}
# Running scripts after a reboot for non-root users .
@reboot <yourscript.sh>
# run command on a group of nodes in parallel
echo "uptime" | tee >(ssh host1) >(ssh host2) >(ssh host3)
# run command on a group of nodes in parallel
echo "uptime" | pee "ssh host1" "ssh host2" "ssh host3"
# Remove Thumbs.db files from folders
find ./ -name Thumbs.db -delete
# Display BIOS Information
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
# open path with your default program (on Linux/*BSD)
xdg-open [path]
# Copy an element from the previous command
!:1-3
# use the previous commands params in the current command
!!:[position]
# Mirror a directory structure from websites with an Apache-generated file indexes
lftp -e "mirror -c" http://example.com/foobar/
# Choose from a nice graphical menu which DI.FM radio station to play
zenity --list --width 500 --height 500 --column 'radio' --column 'url' --print-column 2 $(curl -s http://www.di.fm/ | awk -F '"' '/href="http:.*\.pls.*96k/ {print $2}' | sort | awk -F '/|\.' '{print $(NF-1) " " $0}') | xargs mplayer
# Quickly share code or text from vim to others.
:w !curl -F "sprunge=<-" http://sprunge.us | xclip
# copy from host1 to host2, through your host
ssh root@host1 "cd /somedir/tocopy/ && tar -cf - ." | ssh root@host2 "cd /samedir/tocopyto/ && tar -xf -"
# Change prompt to MS-DOS one (joke)
export PS1="C:\$( pwd | sed 's:/:\\\\\\:g' )\\> "
# View network activity of any application or user in realtime
lsof -r 2 -p PID -i -a
# Print a list of standard error codes and descriptions.
perl -le 'print $!+0, "\t", $!++ for 0..127'
# Unbelievable Shell Colors, Shading, Backgrounds, Effects for Non-X
for c in `seq 0 255`;do t=5;[[ $c -lt 108 ]]&&t=0;for i in `seq $t 5`;do echo -e "\e[0;48;$i;${c}m|| $i:$c `seq -s+0 $(($COLUMNS/2))|tr -d '[0-9]'`\e[0m";done;done
# grep -v with multiple patterns.
grep 'test' somefile | grep -vE '(error|critical|warning)'
# Identify long lines in a file
awk 'length>72' file
# Show directories in the PATH, one per line
echo "${PATH//:/$'\n'}"
# Mount the first NTFS partition inside a VDI file (VirtualBox Disk Image)
mount -t ntfs-3g -o ro,loop,uid=user,gid=group,umask=0007,fmask=0117,offset=0x$(hd -n 1000000 image.vdi | grep "eb 52 90 4e 54 46 53" | cut -c 1-8) image.vdi /mnt/vdi-ntfs
# Show me a histogram of the busiest minutes in a log file:
cat /var/log/secure.log | awk '{print substr($0,0,12)}' | uniq -c | sort -nr | awk '{printf("\n%s ",$0) ; for (i = 0; i<$1 ; i++) {printf("*")};}'
# commandlinefu.com by David Winterbottom
# Display current bandwidth statistics
ifstat -nt
# Given process ID print its environment variables
sed 's/\o0/\n/g' /proc/INSERT_PID_HERE/environ
# restoring some data from a corrupted text file
( cat badfile.log ; tac badfile.log | tac ) > goodfile.log
# view the system console remotely
sudo cat /dev/vcs1 | fold -w 80
# Fix Ubuntu's Broken Sound Server
sudo killall -9 pulseaudio; pulseaudio >/dev/null 2>&1 &
# Look up the definition of a word
curl dict://dict.org/d:something
# Diff files on two remote hosts.
diff <(ssh alice cat /etc/apt/sources.list) <(ssh bob cat /etc/apt/sources.list)
# Ctrl+S Ctrl+Q terminal output lock and unlock
Ctrl+S Ctrl+Q
# Redirect STDIN
< /path/to/file.txt grep foo
# I hate `echo X | Y`
base64 -d <<< aHR0cDovL3d3dy50d2l0dGVyc2hlZXAuY29tL3Jlc3VsdHMucGhwP3U9Y29tbWFuZGxpbmVmdQo=
# Schedule a download at a later time
echo 'wget url' | at 01:00
# Send keypresses to an X application
xvkbd -xsendevent -text "Hello world"
# Add calendar to desktop wallpaper
convert -font -misc-fixed-*-*-*-*-*-*-*-*-*-*-*-* -fill black -draw "text 270,260 \" `cal` \"" testpic.jpg newtestpic.jpg
# Browse system RAM in a human readable form
sudo cat /proc/kcore | strings | awk 'length > 20' | less
# Get Cisco network information
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'
# Quick glance at who's been using your system recently
last | grep -v "^$" | awk '{ print $1 }' | sort -nr | uniq -c
# Generat a Random MAC address
MAC=`(date; cat /proc/interrupts) | md5sum | sed -r 's/^(.{10}).*$/\1/; s/([0-9a-f]{2})/\1:/g; s/:$//;'`
# ping a range of IP addresses
nmap -sP 192.168.1.100-254
# Check if system is 32bit or 64bit
arch
# Find the most recently changed files (recursively)
find . -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort
# Ask for a password, the passwd-style
read -s -p"Password: " USER_PASSWORD_VARIABLE; echo
# monitor memory usage
watch vmstat -sSM
# Content search.
ff() { local IFS='|'; grep -rinE "$*" . ; }
# List 10 largest directories in current directory
du -hs */ | sort -hr | head
# Stream YouTube URL directly to MPlayer
yt () mplayer -fs -quiet $(youtube-dl -g "$1")
# commandlinefu.com by David Winterbottom
# List open files that have no links to them on the filesystem
lsof +L1
# List of commands you use most often
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head > /tmp/cmds | gnuplot -persist <(echo 'plot "/tmp/cmds" using 1:xticlabels(2) with boxes')
# find all active IP addresses in a network
nmap -sP 192.168.1.0/24; arp -n | grep "192.168.1.[0-9]* *ether"
# Convert all Flac in a directory to Mp3 using maximum quality variable bitrate
for file in *.flac; do flac -cd "$file" | lame -q 0 --vbr-new -V 0 - "${file%.flac}.mp3"; done
# Convert a Nero Image File to ISO
dd bs=1k if=image.nrg of=image.iso skip=300
# Copy with progress
rsync --progress file1 file2
# a shell function to print a ruler the width of the terminal window.
ruler() { for s in '....^....|' '1234567890'; do w=${#s}; str=$( for (( i=1; $i<=$(( ($COLUMNS + $w) / $w )) ; i=$i+1 )); do echo -n $s; done ); str=$(echo $str | cut -c -$COLUMNS) ; echo $str; done; }
# quickest (i blv) way to get the current program name minus the path (BASH)
path_stripped_programname="${0##*/}"
# A function to output a man page as a pdf file
function man2pdf(){ man -t ${1:?Specify man as arg} | ps2pdf -dCompatibility=1.3 - - > ${1}.pdf; }
# a trash function for bash
trash <file>
# Play music from youtube without download
wget -q -O - `youtube-dl -b -g $url`| ffmpeg -i - -f mp3 -vn -acodec libmp3lame -| mpg123 -
# generate a unique and secure password for every website that you login to
sitepass() { echo -n "$@" | md5sum | sha1sum | sha224sum | sha256sum | sha384sum | sha512sum | gzip - | strings -n 1 | tr -d "[:space:]" | tr -s '[:print:]' | tr '!-~' 'P-~!-O' | rev | cut -b 2-11; history -d $(($HISTCMD-1)); }
# Replace spaces in filenames with underscores
rename -v 's/ /_/g' *
# find and delete empty dirs, start in current working dir
find . -empty -type d -exec rmdir {} +
# Move all images in a directory into a directory hierarchy based on year, month and day based on exif information
exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir
# Follow tail by name (fix for rolling logs with tail -f)
tail -F file
# Colored SVN diff
svn diff <file> | vim -R -
# Find broken symlinks and delete them
find -L /path/to/check -type l -delete
# Find if the command has an alias
type -all command
# Show a config file without comments
egrep -v "^$|^[[:space:]]*#" /etc/some/file
# Download all Delicious bookmarks
curl -u username -o bookmarks.xml https://api.del.icio.us/v1/posts/all
# beep when a server goes offline
while true; do [ "$(ping -c1W1w1 server-or-ip.com | awk '/received/ {print $4}')" != 1 ] && beep; sleep 1; done
# Number of open connections per ip.
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
# Create a favicon
convert -colors 256 -resize 16x16 face.jpg face.ppm && ppmtowinicon -output favicon.ico face.ppm
# Quickly generate an MD5 hash for a text string using OpenSSL
echo -n 'text to be encrypted' | openssl md5
# commandlinefu.com by David Winterbottom
# create dir tree
mkdir -p doc/{text/,img/{wallpaper/,photos/}}
# Check Ram Speed and Type in Linux
sudo dmidecode --type 17 | more
# Run any GUI program remotely
ssh -fX <user>@<host> <program>
# Run the Firefox Profile Manager
firefox -no-remote -P
# Delete the specified line
sed -i 8d ~/.ssh/known_hosts
# Backup your hard drive with dd
sudo dd if=/dev/sda of=/media/disk/backup/sda.backup
# Add forgotten changes to the last git commit
git commit --amend
# Sort dotted quads
sort -nt . -k 1,1 -k 2,2 -k 3,3 -k 4,4
# Press ctrl+r in a bash shell and type a few letters of a previous command
^r in bash begins a reverse-search-history with command completion
# Extract audio from a video
ffmpeg -i video.avi -f mp3 audio.mp3
# Get Dell Service Tag Number from a Dell Machine
sudo dmidecode | grep Serial\ Number | head -n1
# Resume aborted scp file transfers
rsync --partial --progress --rsh=ssh SOURCE DESTINATION
# Use last argument of last command
file !$
# Commandline document conversion with Libreoffice
soffice --headless -convert-to odt:"writer8" somefile.docx
# HourGlass
hourglass(){ trap 'tput cnorm' 0 1 2 15 RETURN;local s=$(($SECONDS +$1));(tput civis;while (($SECONDS<$s));do for f in '|' '\' '-' '/';do echo -n "$f";sleep .2s;echo -n $'\b';done;done;);}
# Transfer a file to multiple hosts over ssh
pscp -h hosts.txt -l username /etc/hosts /tmp/hosts
# Verify/edit bash history command before executing it
shopt -s histverify
# Resize an image to at least a specific resolution
convert -resize '1024x600^' image.jpg small-image.jpg
# Print without executing the last command that starts with...
!ssh:p
# Query well known ports list
getent services <<service>>
# Create .pdf from .doc
oowriter -pt pdf your_word_file.doc
# Diff XML files
diffxml() { diff -wb <(xmllint --format "$1") <(xmllint --format "$2"); }
# Gets the english pronunciation of a phrase
say() { mplayer "http://translate.google.com/translate_tts?q=$1"; }
# What is the use of this switch ?
manswitch () { man $1 | less -p "^ +$2"; }
# Save the list of all available commands in your box to a file
compgen -c | sort -u > commands
# commandlinefu.com by David Winterbottom
# clear screen, keep prompt at eye-level (faster than clear(1), tput cl, etc.)
cls(){ printf "\33[2J";} or, if no printf, cat >cls;<ctrl-v><ctrl+[>[2J<enter><ctrl+d> cls(){ cat cls;}
# Down for everyone or just me?
down4me() { wget -qO - "http://www.downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g' ; }
# Run a program transparently, but print a stack trace if it fails
gdb -batch -ex "run" -ex "bt" ${my_program} 2>&1 | grep -v ^"No stack."$
# Compare copies of a file with md5
cmp file1 file2
# backup delicious bookmarks
curl --user login:password -o DeliciousBookmarks.xml -O 'https://api.del.icio.us/v1/posts/all'
# Rename all .jpeg and .JPG files to have .jpg extension
rename 's/\.jpe?g$/.jpg/i' *
# pretend to be busy in office to enjoy a cup of coffee
j=0;while true; do let j=$j+1; for i in $(seq 0 20 100); do echo $i;sleep 1; done | dialog --gauge "Install part $j : `sed $(perl -e "print int rand(99999)")"q;d" /usr/share/dict/words`" 6 40;done
# Generate a Random MAC address
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
# Purge configuration files of removed packages on debian based systems
aptitude purge '~c'
# Get all links of a website
lynx -dump http://www.domain.com | awk '/http/{print $2}'
# Find all active ip's in a subnet
sudo arp-scan -I eth0 192.168.1.0/24
# Display BIOS Information
dmidecode -t bios
# Disassemble some shell code
echo -ne "<shellcode>" | x86dis -e 0 -s intel
# make, or run a script, everytime a file in a directory is modified
while true; do inotifywait -r -e MODIFY dir/ && make; done;
# kill process by name
pkill -x firefox
# ignore the .svn directory in filename completion
export FIGNORE=.svn
# Ping scanning without nmap
for i in {1..254}; do ping -c 1 -W 1 10.1.1.$i | grep 'from'; done
# Working random fact generator
wget randomfunfacts.com -O - 2>/dev/null | grep \<strong\> | sed "s;^.*<i>\(.*\)</i>.*$;\1;"
# Remote backups with tar over ssh
tar jcpf - [sourceDirs] |ssh user@host "cat > /path/to/backup/backupfile.tar.bz2"
# Pronounce an English word using Dictionary.com
pronounce(){ wget -qO- $(wget -qO- "http://dictionary.reference.com/browse/$@" | grep 'soundUrl' | head -n 1 | sed 's|.*soundUrl=\([^&]*\)&.*|\1|' | sed 's/%3A/:/g;s/%2F/\//g') | mpg123 -; }
# Make ISO image of a folder
mkisofs -J -allow-lowercase -R -V "OpenCD8806" -iso-level 4 -o OpenCD.iso ~/OpenCD
# Change pidgin status
purple-remote "setstatus?status=away&message=AFK"
# Grep by paragraph instead of by line.
grepp() { [ $# -eq 1 ] && perl -00ne "print if /$1/i" || perl -00ne "print if /$1/i" < "$2";}
# Vim: Switch from Horizontal split to Vertical split
^W-L
# Numbers guessing game
A=1;B=100;X=0;C=0;N=$[$RANDOM%$B+1];until [ $X -eq $N ];do read -p "N between $A and $B. Guess? " X;C=$(($C+1));A=$(($X<$N?$X:$A));B=$(($X>$N?$X:$B));done;echo "Took you $C tries, Einstein";
# commandlinefu.com by David Winterbottom
# generate random password
pwgen -Bs 10 1
# Change user, assume environment, stay in current dir
su -- user
# Testing hard disk reading speed
hdparm -t /dev/sda
# Identify differences between directories (possibly on different servers)
diff <(ssh server01 'cd config; find . -type f -exec md5sum {} \;| sort -k 2') <(ssh server02 'cd config;find . -type f -exec md5sum {} \;| sort -k 2')
# How fast is the connexion to a URL, some stats from curl
URL="http://www.google.com";curl -L --w "$URL\nDNS %{time_namelookup}s conn %{time_connect}s time %{time_total}s\nSpeed %{speed_download}bps Size %{size_download}bytes\n" -o/dev/null -s $URL
# move a lot of files over ssh
rsync -az /home/user/test user@sshServer:/tmp/
# List programs with open ports and connections
lsof -i
# Show git branches by date - useful for showing active branches
for k in `git branch|perl -pe s/^..//`;do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k|head -n 1`\\t$k;done|sort -r
# disable history for current shell session
unset HISTFILE
# Share a 'screen'-session
screen -x
# Show all detected mountable Drives/Partitions/BlockDevices
hwinfo --block --short
# Monitor TCP opened connections
watch -n 1 "netstat -tpanl | grep ESTABLISHED"
# Fibonacci numbers with awk
seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'
# Read the output of a command into the buffer in vim
:r !command
# Calculates the date 2 weeks ago from Saturday the specified format.
date -d '2 weeks ago Saturday' +%Y-%m-%d
# Find broken symlinks
find . -type l ! -exec test -e {} \; -print
# Add your public SSH key to a server in one command
cat .ssh/id_rsa.pub | ssh hostname 'cat >> .ssh/authorized_keys'
# ssh tunnel with auto reconnect ability
while [ ! -f /tmp/stop ]; do ssh -o ExitOnForwardFailure=yes -R 2222:localhost:22 target "while nc -zv localhost 2222; do sleep 5; done"; sleep 5;done
# find process associated with a port
fuser [portnumber]/[proto]
# cycle through a 256 colour palette
yes "$(seq 232 255;seq 254 -1 233)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .01; done
# scping files with streamlines compression (tar gzip)
tar czv file1 file2 folder1 | ssh user@server tar zxv -C /destination
# add all files not under version control to repository
svn status |grep '\?' |awk '{print $2}'| xargs svn add
# Count files beneath current directory (including subfolders)
find . -type f | wc -l
# Discover the process start time
ps -eo pid,lstart,cmd
# Run the built in PHP-server in current folder
php -S 127.0.0.1:8080
# commandlinefu.com by David Winterbottom
# Press enter and take a WebCam picture.
read && ffmpeg -y -r 1 -t 3 -f video4linux2 -vframes 1 -s sxga -i /dev/video0 ~/webcam-$(date +%m_%d_%Y_%H_%M).jpeg
# Automatically find and re-attach to a detached screen session
screen -D -R
# ping as traceroute
for i in {1..30}; do ping -t $i -c 1 google.com; done | grep "Time to live exceeded"
# what model of computer I'm using?
sudo dmidecode | grep Product
# tail a log over ssh
ssh -t remotebox "tail -f /var/log/remote.log"
# du with colored bar graph
t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
# sort the output of the 'du' command by largest first, using human readable output.
du -h --max-depth=1 |sort -rh
# Target a specific column for pattern substitution
awk '{gsub("foo","bar",$5)}1' file
# Discovering all open files/dirs underneath a directory
lsof +D <dirname>
# Substrings a variable
var='123456789'; echo ${var:<start_pos>:<offset>}
# Check syntax for all PHP files in the current directory and all subdirectories
find . -name \*.php -exec php -l "{}" \;
# "Clone" a list of installed packages from one Debian/Ubuntu Server to another
apt-get install `ssh root@host_you_want_to_clone "dpkg -l | grep ii" | awk '{print $2}'`
# Timer with sound alarm
sleep 3s && espeak "wake up, you bastard" 2>/dev/null
# A formatting test for David Winterbottom: improving commandlinefu for submitters
echo "?????, these are the umlauted vowels I sing to you. Oh, and sometimes ?, but I don't sing that one cause it doesn't rhyme."
# Random unsigned integer
echo $(openssl rand 4 | od -DAn)
# kill all process that belongs to you
kill -9 -1
# Continue a current job in the background
<ctrl+z> bg
# Send email with curl and gmail
curl -n --ssl-reqd --mail-from "<user@gmail.com>" --mail-rcpt "<user@server.tld>" --url smtps://smtp.gmail.com:465 -T file.txt
# translates acronyms for you
wtf is <acronym>
# Create an animated gif from a Youtube video
url=http://www.youtube.com/watch?v=V5bYDhZBFLA; youtube-dl -b $url; mplayer $(ls ${url##*=}*| tail -n1) -ss 00:57 -endpos 10 -vo gif89a:fps=5:output=output.gif -vf scale=400:300 -nosound
# Print just line 4 from a textfile
sed -n '4{p;q}'
# Print just line 4 from a textfile
sed -n '4p'
# List bash functions defined in .bash_profile or .bashrc
compgen -A function
# Start a HTTP server which serves Python docs
pydoc -p 8888 & gnome-open http://localhost:8888
# Do some learning...
ls /usr/bin | xargs whatis | grep -v nothing | less
# commandlinefu.com by David Winterbottom
# Insert the last argument of the previous command
<ALT> .
# Typing the current date ( or any string ) via a shortcut as if the keys had been actually typed with the hardware keyboard in any application.
xvkbd -xsendevent -text $(date +%Y%m%d)
# recursive search and replace old with new string, inside files
find . -type f -exec sed -i s/oldstring/newstring/g {} +
# Clean your broken terminal
stty sane
# geoip information
curl -s "http://www.geody.com/geoip.php?ip=$(curl -s icanhazip.com)" | sed '/^IP:/!d;s/<[^>][^>]*>//g'
# Backup a local drive into a file on the remote host via ssh
dd if=/dev/sda | ssh user@server 'dd of=sda.img'
# Sort all running processes by their memory & CPU usage
ps aux --sort=%mem,%cpu
# Kill processes that have been running for more than a week
find /proc -user myuser -maxdepth 1 -type d -mtime +7 -exec basename {} \; | xargs kill -9
# Save current layout of top
<Shift + W>
# Show directories in the PATH, one per line
echo $PATH | tr \: \\n
# An easter egg built into python to give you the Zen of Python
python -c 'import this'
# Add prefix onto filenames
rename 's/^/prefix/' *
# Stream YouTube URL directly to mplayer
id="dMH0bHeiRNg";mplayer -fs http://youtube.com/get_video.php?video_id=$id\&t=$(curl -s http://www.youtube.com/watch?v=$id | sed -n 's/.*, "t": "\([^"]*\)", .*/\1/p')
# Get all IPs via ifconfig
ifconfig -a | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1'
# Pick a random line from a file
shuf -n1 file.txt
# Get all these commands in a text file with description.
for x in `jot - 0 2400 25`; do curl "http://www.commandlinefu.com/commands/browse/sort-by-votes/plaintext/$x" ; done > commandlinefu.txt
# Stripping ^M at end of each line for files
dos2unix <filenames>
# Use Cygwin to talk to the Windows clipboard
cat /dev/clipboard; $(somecommand) > /dev/clipboard
# Backup files incremental with rsync to a NTFS-Partition
rsync -rtvu --modify-window=1 --progress /media/SOURCE/ /media/TARGET/
# Find removed files still in use via /proc
find -L /proc/*/fd -links 0 2>/dev/null
# Convert "man page" to text file
man ls | col -b > ~/Desktop/man_ls.txt
# Connect to google talk through ssh by setting your IM client to use the localhost 5432 port
ssh -f -N -L 5432:talk.google.com:5222 user@home.network.com
# Find last reboot time
who -b
# Get video information with ffmpeg
ffmpeg -i filename.flv
# for all flv files in a dir, grab the first frame and make a jpg.
for f in *.flv; do ffmpeg -y -i "$f" -f image2 -ss 10 -vframes 1 -an "${f%.flv}.jpg"; done
# commandlinefu.com by David Winterbottom
# Purge configuration files of removed packages on debian based systems
sudo aptitude purge `dpkg --get-selections | grep deinstall | awk '{print $1}'`
# from within vi, pipe a chunk of lines to a command line and replace the chunk with the result
!}sort
# Using awk to sum/count a column of numbers.
cat count.txt | awk '{ sum+=$1} END {print sum}'
# Append stdout and stderr to a file, and print stderr to the screen [bash]
somecommand 2>&1 >> logfile | tee -a logfile
# quickly change all .html extensions on files in folder to .htm
for i in *.html ; do mv $i ${i%.html}.htm ; done
# Grep for word in directory (recursive)
grep --color=auto -iRnH "$search_word" $directory
# Another Curl your IP command
curl -s http://checkip.dyndns.org | sed 's/[a-zA-Z<>/ :]//g'
# count IPv4 connections per IP
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | sed s/::ffff:// | cut -d: -f1 | sort | uniq -c | sort -n
# pattern match in awk - no grep
awk '/pattern1/ && /pattern2/ && !/pattern3/ {print}'
# Optimal way of deleting huge numbers of files
find /path/to/dir -type f -print0 | xargs -0 rm
# Convert Shell Text to Upper/Lower Case
ALT-U / ALT-L
# grep processes list avoiding the grep itself
ps axu | grep [a]pache2
# repeat a command every one second
watch -n 1 "do foo"
# Swap the two last arguments of the current command line
<ctrl+e> <esc+t>
# Daemonize nc - Transmit a file like a http server
while ( nc -l 80 < /file.htm > : ) ; do : ; done &
# Redirect tar extract to another directory
tar xfz filename.tar.gz -C PathToDirectory
# Run a command when a file is changed
while inotifywait -e modify /tmp/myfile; do firefox; done
# Find Malware in the current and sub directories by MD5 hashes
IFS=$'\n' && for f in `find . -type f -exec md5sum "{}" \;`; do echo $f | sed -r 's/^[^ ]+/Checking:/'; echo $f | cut -f1 -d' ' | netcat hash.cymru.com 43 ; done
# Execute a command, convert output to .png file, upload file to imgur.com, then returning the address of the .png.
imgur(){ $*|convert label:@- png:-|curl -F "image=@-" -F "key=1913b4ac473c692372d108209958fd15" http://api.imgur.com/2/upload.xml|grep -Eo "<original>(.)*</original>" | grep -Eo "http://i.imgur.com/[^<]*";}
# RDP through SSH tunnel
ssh -f -L3389:<RDP_HOST>:3389 <SSH_PROXY> "sleep 10" && rdesktop -T'<WINDOW_TITLE>' -uAdministrator -g800x600 -a8 -rsound:off -rclipboard:PRIMARYCLIPBOARD -5 localhost
# Rapidly invoke an editor to write a long, complex, or tricky command
<ESC> v or ctrl-x ctrl-e
# Remote screenshot
ssh user@remote-host "DISPLAY=:0.0 import -window root -format png -"|display -format png -
# List your MACs address
lsmac() { ifconfig -a | sed '/eth\|wl/!d;s/ Link.*HWaddr//' ; }
# ssh to machine behind shared NAT
ssh -NR 0.0.0.0:2222:127.0.0.1:22 user@jump.host.com
# Countdown Clock
MIN=10;for ((i=MIN*60;i>=0;i--));do echo -ne "\r$(date -d"0+$i sec" +%H:%M:%S)";sleep 1;done
# commandlinefu.com by David Winterbottom
# Look up a unicode character by name
egrep -i "^[0-9a-f]{4,} .*$*" $(locate CharName.pm) | while read h d; do /usr/bin/printf "\U$(printf "%08x" 0x$h)\tU+%s\t%s\n" $h "$d"; done
# Generate MD5 hash for a string
md5sum <<<"test"
# Ask user to confirm
Confirm() { read -sn 1 -p "$1 [Y/N]? "; [[ $REPLY = [Yy] ]]; }
# Make a file not writable / immutable by root
sudo chattr +i <file>
# prevent accidents and test your command with echo
echo rm *.txt
# Get My Public IP Address
curl ifconfig.me
# Empty a file
:> file
# Emptying a text file in one shot
:%d
# computes the most frequent used words of a text file
cat WAR_AND_PEACE_By_LeoTolstoi.txt | tr -cs "[:alnum:]" "\n"| tr "[:lower:]" "[:upper:]" | awk '{h[$1]++}END{for (i in h){print h[i]" "i}}'|sort -nr | cat -n | head -n 30
# Quick HTML image gallery from folder contents
find . -iname '*.jpg' -exec echo '<img src="{}">' \; > gallery.html
# check the status of 'dd' in progress (OS X)
killall -INFO dd
# Restrict the bandwidth for the SCP command
scp -l10 pippo@serverciccio:/home/zutaniddu/* .
# List all authors of a particular git project
git log --format='%aN' | sort -u
# live ssh network throughput test
pv /dev/zero|ssh $host 'cat > /dev/null'
# Carriage return for reprinting on the same line
while true; do echo -ne "$(date)\r"; sleep 1; done
# What is my ip?
curl http://www.whatismyip.org/
# Empty a file
truncate -s0 file
# List Network Tools in Linux
apropos network |more
# Function that outputs dots every second until command completes
sleeper(){ while `ps -p $1 &>/dev/null`; do echo -n "${2:-.}"; sleep ${3:-1}; done; }; export -f sleeper
# Search back through previous commands
Ctrl-R <search-text>
# Print text string vertically, one character per line.
echo "vertical text" | grep -o '.'
# Find running binary executables that were not installed using dpkg
cat /var/lib/dpkg/info/*.list > /tmp/listin ; ls /proc/*/exe |xargs -l readlink | grep -xvFf /tmp/listin; rm /tmp/listin
# Cleanup firefox's database.
pgrep -u `id -u` firefox-bin || find ~/.mozilla/firefox -name '*.sqlite'|(while read -e f; do echo 'vacuum;'|sqlite3 "$f" ; done)
# vim easter egg
$ vim ... :help 42
# Find the process you are looking for minus the grepped one
pgrep command_name
# commandlinefu.com by David Winterbottom
# VIM: Replace a string with an incrementing number between marks 'a and 'b (eg, convert string ZZZZ to 1, 2, 3, ...)
:let i=0 | 'a,'bg/ZZZZ/s/ZZZZ/\=i/ | let i=i+1
# Get the canonical, absolute path given a relative and/or noncanonical path
readlink -f ../super/symlink_bon/ahoy
# Create a Multi-Part Archive Without Proprietary Junkware
tar czv Pictures | split -d -a 3 -b 16M - pics.tar.gz.
# wrap long lines of a text
fold -s -w 90 file.txt
# Display last exit status of a command
echo $?
# Enable ** to expand files recursively (>=bash-4.0)
shopt -s globstar
# Command Line to Get the Stock Quote via Yahoo
curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=csco&f=l1'
# Convert camelCase to underscores (camel_case)
sed -r 's/([a-z]+)([A-Z][a-z]+)/\1_\l\2/g' file.txt
# Set your profile so that you resume or start a screen session on login
echo "screen -DR" >> ~/.bash_profile
# play high-res video files on a slow processor
mplayer -framedrop -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all
# Grep colorized
grep -i --color=auto
# List your largest installed packages.
wajig large
# Monitor dynamic changes in the dmesg log.
watch "dmesg |tail -15"
# Generate a list of installed packages on Debian-based systems
dpkg --get-selections > LIST_FILE
# find the process that is using a certain port e.g. port 3000
lsof -P | grep ':3000'
# Pause Current Thread
ctrl-z
# Merge *.pdf files
gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf `ls *.pdf`
# Convert .wma files to .ogg with ffmpeg
find -name '*wma' -exec ffmpeg -i {} -acodec vorbis -ab 128k {}.ogg \;
# Generate Random Passwords
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6
# Grep without having it show its own process in the results
ps aux | grep "[s]ome_text"
# Find recursively, from current directory down, files and directories whose names contain single or multiple whitespaces and replace each such occurrence with a single underscore.
find ./ -name '*' -exec rename 's/\s+/_/g' {} \;
# Files extension change
rename .oldextension .newextension *.oldextension
# archive all files containing local changes (svn)
svn st | cut -c 8- | sed 's/^/\"/;s/$/\"/' | xargs tar -czvf ../backup.tgz
# Just run it ;)
echo SSBMb3ZlIFlvdQo= | base64 -d
# Show which programs are listening on TCP and UDP ports
netstat -plunt
# commandlinefu.com by David Winterbottom
# vim easter egg
$ vim ... :help 42
# copy with progress bar - rsync
rsync -rv <src> <dst> --progress
# find and replace tabs for spaces within files recursively
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
# List your MACs address
cat /sys/class/net/eth0/address
# diff current vi buffer edits against original file
:w !diff -u % -
# Send data securly over the net.
cat /etc/passwd | openssl aes-256-cbc -a -e -pass pass:password | netcat -l -p 8080
# pretend to be busy in office to enjoy a cup of coffee
for i in `seq 0 100`;do timeout 6 dialog --gauge "Install..." 6 40 "$i";done
# JSON processing with Python
curl -s "http://feeds.delicious.com/v2/json?count=5" | python -m json.tool | less -R
# Get your external IP address without curl
wget -qO- icanhazip.com
# cycle through a 256 colour palette
yes "$(seq 1 255)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .01; done
# Find all files larger than 500M and less than 1GB
find / -type f -size +500M -size -1G
# extract email adresses from some file (or any other pattern)
grep -Eio '([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})'
# command line calculator
calc(){ awk "BEGIN{ print $* }" ;}
# Plays Music from SomaFM
read -p "Which station? "; mplayer --reallyquiet -vo none -ao sdl http://somafm.com/startstream=${REPLY}.pls
# infile search and replace on N files (including backup of the files)
perl -pi.bk -e's/foo/bar/g' file1 file2 fileN
# Create an SSH SOCKS proxy server on localhost:8000 that will re-start itself if something breaks the connection temporarily
autossh -f -M 20000 -D 8000 somehost -N
# Delete all files found in directory A from directory B
for file in <directory A>/*; do rm <directory B>/`basename $file`; done
# Block an IP address from connecting to a server
iptables -A INPUT -s 222.35.138.25/32 -j DROP
# Record microphone input and output to date stamped mp3 file
arecord -q -f cd -r 44100 -c2 -t raw | lame -S -x -h -b 128 - `date +%Y%m%d%H%M`.mp3
# loop over a set of items that contain spaces
ls | while read ITEM; do echo "$ITEM"; done
# Extract tar content without leading parent directory
tar -xaf archive.tar.gz --strip-components=1
# Function to split a string into an array
read -a ARR <<<'world domination now!'; echo ${ARR[2]};
# Update twitter via curl
curl -u user -d status="Tweeting from the shell" http://twitter.com/statuses/update.xml
# Check your spelling
aspell -a <<< '<WORDS>'
# View ~/.ssh/known_hosts key information
ssh-keygen -l -f ~/.ssh/known_hosts
# commandlinefu.com by David Winterbottom
# Binary digits Matrix effect
perl -e '$|++; while (1) { print " " x (rand(35) + 1), int(rand(2)) }'
# print multiplication formulas
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
# Rapidly invoke an editor to write a long, complex, or tricky command
<ESC> v
# add the result of a command into vi
!!command
# Super Speedy Hexadecimal or Octal Calculations and Conversions to Decimal.
echo "$(( 0x10 )) - $(( 010 )) = $(( 0x10 - 010 ))"
# bash shortcut: !$ !^ !* !:3 !:h and !:t
echo foo bar foobar barfoo && echo !$ !^ !:3 !* && echo /usr/bin/foobar&& echo !$:h !$:t
# Traceroute w/TCP to get through firewalls.
tcptraceroute www.google.com
# benchmark web server with apache benchmarking tool
ab -n 9000 -c 900 localhost:8080/index.php
# move a lot of files over ssh
tar -cf - /home/user/test | gzip -c | ssh user@sshServer 'cd /tmp; tar xfz -'
# sends a postscript file to a postscript printer using netcat
cat my.ps | nc -q 1 hp4550.mynet.xx 9100
# the same as [Esc] in vim
Ctrl + [
# open a screenshot of a remote desktop via ssh
xloadimage <(ssh USER@HOSTNAME DISPLAY=:0.0 import -window root png:-)
# Displays the attempted user name, ip address, and time of SSH failed logins on Debian machines
awk '/sshd/ && /Failed/ {gsub(/invalid user/,""); printf "%-12s %-16s %s-%s-%s\n", $9, $11, $1, $2, $3}' /var/log/auth.log
# Create a bunch of dummy files for testing
touch {1..10}.txt
# Quickly get summary of sizes for files and folders
du -sh *
# Temporarily ignore mismatched SSH host key
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@host
# back up your commandlinefu contributed commands
curl http://www.commandlinefu.com/commands/by/<your username>/rss|gzip ->commandlinefu-contribs-backup-$(date +%Y-%m-%d-%H.%M.%S).rss.gz
# Find the package a command belongs to on Debian
dpkg -S $( which ls )
# Replace spaces in filenames with underscorees
ls | while read f; do mv "$f" "${f// /_}";done
# Google text-to-speech in mp3 format
say(){ mplayer -user-agent Mozilla "http://translate.google.com/translate_tts?tl=en&q=$(echo $* | sed 's#\ #\+#g')" > /dev/null 2>&1 ; }
# Terminal redirection
script /dev/null | tee /dev/pts/3
# Converts to PDF all the OpenOffice.org files in the directory
for i in $(ls *.od{tp}); do unoconv -f pdf $i; done
# Print info about your real user.
who loves mum
# Update twitter via curl (and also set the "from" bit)
curl -u twitter-username -d status="Hello World, Twitter!" -d source="cURL" http://twitter.com/statuses/update.xml
# Escape potential tarbombs
atb() { l=$(tar tf $1); if [ $(echo "$l" | wc -l) -eq $(echo "$l" | grep $(echo "$l" | head -n1) | wc -l) ]; then tar xf $1; else mkdir ${1%.tar.gz} && tar xf $1 -C ${1%.tar.gz}; fi ;}