Hide

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.


If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/

Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Hide

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for:

Hide

News

2011-03-12 - Confoo 2011 presentation
Slides are available from the commandlinefu presentation at Confoo 2011: http://presentations.codeinthehole.com/confoo2011/
2011-01-04 - Moderation now required for new commands
To try and put and end to the spamming, new commands require moderation before they will appear on the site.
2010-12-27 - Apologies for not banning the trolls sooner
Have been away from the interwebs over Christmas. Will be more vigilant henceforth.
2010-09-24 - OAuth and pagination problems fixed
Apologies for the delay in getting Twitter's OAuth supported. Annoying pagination gremlin also fixed.
Hide

Tags

Hide

Functions

All commands

All commands from sorted by
Terminal - All commands - 10,707 results
watch -t -c -n30 'wget -q -O- "http://wwwapps.ups.com/WebTracking/processInputRequest?TypeOfInquiryNumber=T&InquiryNumber1=1Z4WYXXXXXXXXXX" | html2text | sed -n "/Shipment Progress/,/Shipping Information/p" | grep -v "*" | ccze -A'
PATH="${PATH}:$(find ${HOME}/bin -type d | tr '\n' ':' | sed 's/:$//')"
2013-06-19 19:22:06
User: malathion
Tags: $PATH
0

Many users have a personal ~/bin folder for user scripts and other miscellaneous applications they can't or don't want to add to /usr/bin. But this folder can get large and unwieldy. The above command adds ~/bin and all its subdirectories to the PATH environment variable so the scripts can be organized without changing .bashrc.

find -printf "%C@ %p\n"|sort
2013-06-19 10:42:49
User: oivvio
Functions: find
Tags: sort find
0

This uses the ability of find (at least the one from GNU findutils that is shiped with most linux distros) to display change time as part of its output. No xargs needed.

while true; do netstat -a|grep WAIT|wc -l; sleep 5; done
2013-06-19 09:19:41
User: adimania
Functions: grep netstat sleep wc
Tags: netstat tcp
0

This has saved me many times while debugging timeout issues to "too many open files" issues. A high number of the order of thousand, indicates that somewhere connection is not being closed properly.

git log --no-merges --format="%an: %s" v1..v2
mysql -uuser -ppass -e 'use information_schema; SELECT table_name FROM tables where table_schema="DB-NAME" and table_name NOT LIKE "PREFIX";' | grep -v table_name | xargs mysqldump DB-NAME -uuser -ppass > dump.sql
2013-06-17 13:44:15
User: moosak
Functions: grep xargs
0

Required : information_schema

** Only replace the "DB-NAME" and "PREFIX" with your DB-name and wildcard prefix match.

** Also replace with your own username and password for mysql server.

This command uses the information_schema to wildcard match tables that we donot need from a database and than pipes the remaining tables out through "xargs" command to the mysqldump utility which than dumps those remaining tables into a sql dump file.

ps -eo pid,lstart,cmd
2013-06-17 12:52:53
User: kruspemsv
Functions: ps
Tags: PID
8

That is useful to discover the start time of process older than 1 day.

You can also run:

ls -ld /proc/PID

That's returning the creation date of the proc files from the process. Some users reported that this way might show you a wrong date since any other process like cron, for example, could change this date.

find /usr/include/ -name '*.[c|h]pp' -o -name '*.[ch]' -print0 | xargs -0 cat | grep -v "^ *$" | grep -v "^ *//" | grep -v "^ */\*.*\*/" | wc -l
2013-06-17 08:37:37
Functions: cat find grep wc xargs
0

Count your source and header file's line numbers. This ignores blank lines, C++ style comments, single line C style comments.

This will not ignore blank lines with tabs or multiline C style comments.

rcs_changes(){ rcsdiff -y --suppress-common-lines "$1" 2>/dev/null | cut -d'|' -f2; }
perl -e 'printf "%o\n", (stat shift)[2]&07777' file
python -c "a='$(ps -u luke | grep Viber.exe)';b= a.split(' ')[1];import os;os.system('cpulimit -l 1 -p '+b)"
/bin/rm -f ~/Library/Application\ Support/Google/Chrome/Default/Local\ Storage/*google*
2013-06-14 19:39:12
User: poslfit
0

If you are a regular user of Google Chrome and Gmail Offline, you'll find that Gmail Offline stops working after a while due to corruption of its local storage in your browser. Worse, trying to use Google Chrome's "Clear Browsing Data" menu command to remove all the local storage is (1) overkill, because it deletes non-Google page local storage, and (2) ineffective, because once the storage is corrupt, Google Chrome doesn't know how to delete it either. Fortunately, it's all stored in obviously named files in your home directory; this command deletes the files directly, after which restarting Google Chrome will let you reinstall Gmail Offline correctly.

stat -f -L -c %T YOUR_FILE_OR_DIRECTORY
sshuttle -r <username>@<sshserver> 0/0
2013-06-13 19:44:23
User: AvImd
0

https://github.com/apenwarr/sshuttle disassembles TCP packets, sends them over SSH, assembles and forwards on the server side, and vice versa.

netstat -tn | awk '{print $5}' | egrep -v '(localhost|\*\:\*|Address|and|servers|fff|127\.0\.0)' | sed 's/:[0-99999999].*//g'
2013-06-13 14:35:38
User: kehansen
Functions: awk egrep netstat sed
0

I used this to get all the remote connection ip addresses connected to my server... I had to start storing and tracking this data so thats why i built this out... probably not optimal as far as the egrep regex but it works ;)

[[ ${var##*yourstring*} != ${var} ]]
2013-06-12 19:38:30
User: sldenazis
0

Returns true (0) if the string is into $var, or false (1) if not.

dd if=/dev/cdrom of=cd.iso
2013-06-12 14:13:41
User: neilmccauley
Functions: dd
Tags: dvd cdrom
0

For DVD: dd if=/dev/cdrom of=cd.iso

$text = do {local(@ARGV, $/) = $file ; <>; }; [or] sub read_file { local(@ARGV, $/) = @_ ; <>; }
2013-06-12 11:41:49
User: matya
0

Found it on:

http://stackoverflow.com/questions/318789/whats-the-best-way-to-open-and-read-a-file-in-perl

The yet most simple way to read all the contents of a file to a variable. I used it in a perl script to replace $text="`cat /sys/...`", and stipping down 9 secs of runtime due less forks

svn st | grep ! | cut -c 9- | while read line;do svn resolved $line;done
info --subnodes -o - <item> | less
2013-06-11 01:23:23
Functions: info
Tags: less info
0

This makes GNU info output menu items recursively and pipe its contents to less, allowing one to use GNU info in a manner similar to 'man'.

less -XF
command -v <command>
echo c > /proc/sysrq-trigger
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
arp -i <interface>