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.

Universal configuration monitoring and system of record for IT.
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

May 19, 2015 - A Look At The New Commandlinefu
I've put together a short writeup on what kind of newness you can expect from the next iteration of clfu. Check it out here.
March 2, 2015 - New Management
I'm Jon, I'll be maintaining and improving clfu. Thanks to David for building such a great resource!
Hide

Top Tags

Hide

Functions

All commands from sorted by
Terminal - All commands - 12,296 results
ditto --arch i386 doubleTwist.app doubleTwist_i386.app
2009-06-22 23:59:14
0

ditto can be used to "thinnify" Mach-O Universal binaries to separate unncessary code from your machine. For example, doubleTwist.app shaved off around 10 MB while Google Earth went from 112 MB to 62 MB after extracting only the i386 code from them.

date -s "`curl -sI www.example.com | sed -n 's/^Date: //p'`"
2010-01-08 21:05:41
User: putnamhill
Functions: date
Tags: curl date
0

If you don't have netcat, you can use curl.

read -p "enter url:" a ; w3m -dump $a > /dev/shm/e1q ; less /dev/shm/e1q ; read -p "save file as text (y/n)?" b ; if [ $b = "y" ] ; then read -p "enter path with filename:" c && touch $(eval echo "$c") ; mv /dev/shm/e1q $(eval echo "$c") ; fi ; echo DONE
2010-07-13 22:36:38
User: LinuxMan
Functions: c++ echo eval less mv read touch
0

Thanks th John_W for suggesting the fix allowing ~/ to be used when saving a directory.

directions:

Type in a url, it will show a preview of what the file will look like when saved, then asks if you want to save the preview and where you want to save it. Great for grabbing the latest commandlinefu commands without a full web browser or even a GUI. Requires: w3m

equery belongs $( which mv )
find / -type f -size +20000k -exec ls -lh {} \; | awk '{printf $9} {for (i=10;i<=NF;i++) {printf " "$i}} {print ": "$5}'
eval "mkdir test{$(seq -s, 1 10)}"
2011-07-23 17:09:01
User: xakon
Functions: eval
Tags: bash seq eval
0

In order to create, let's say, 10 directories with a single process we can use the command:

mkdir test{1,2,3,4,5,6,7,8,9,10}

something extremely boring to type! Why not use seq?

seq -s, 1 10

and use its output inside the curly braces?

The obvious solution

mkdir test{$(seq -s, 1 10)}

is, unfortunately, too naive and doesn't work. The answer is the order of the shell expansions (feature of Bourne Shell, actually), where brace expansion happens before command substitution (according to Bash's manual).

The solution is to put another level of substitution, using the powerful and mystic command eval.

I found the trick in a similar problem in the post at http://stackoverflow.com/questions/6549037/bash-brace-expansion-in-scripts-not-working-due-to-unwanted-escaping

seq 20 | sed '5,6 { w out.txt }' #Can't print correctly. See sample output
2011-08-29 10:17:47
User: totti
Functions: sed seq
Tags: sed
0

Can't print correctly in the command field.

There is a new line before } as follows

seq 20 | sed -n '5,6 { w out.txt

}'

xml fo -e utf-8 file.xml | xml esc
alias ll='ls -lisaG'
find . -type f -exec echo echo rm {} '|' batch ';'|bash
2013-03-01 15:14:08
User: Ztyx
Functions: batch echo find rm
0

While `echo rm * | batch` might seem to work, it might still raise the load of the system since `rm` will be _started_ when the load is low, but run for a long time. My proposed command executes a new `rm` execution once every minute when the load is small.

Obviously, load could also be lower using `ionice`, but I still think this is a useful example for sequential batch jobs.

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
2013-04-23 14:27:10
User: zagdul
Tags: bash osx
0

This keeps the user logged in but shows the login screen. Very useful when connecting remotely to an OSX-Server via VNC

ls -lt | awk '{sum+=$5} END {print sum}'
2013-07-03 20:12:54
User: martinmorono
Functions: awk ls
0

Use awk to sum and print the space used by a group of files.

It works well as long as the space used is not bigger than 79094548.80...

I found that upper limit when trying to find out what was the total amount of recoverable space from a set of directories:

user@servername:/home/user/scripts>for dirName in aleph_bin aleph_sh aleph_work dailycheck INTERFAZ ; do echo "${dirName} = $(cat /tmp/purge_ocfs_dir.*.log | awk '{sum+=$5} END {printf "%4.2f", sum}') "; done

aleph_bin = 79094548.80

aleph_sh = 79094548.80

aleph_work = 79094548.80

dailycheck = 79094548.80

INTERFAZ = 79094548.80

In the worst case scenario, the total number might be almost 137G.

user@servername:/home/user/scripts>df -h /ocfs/*

Filesystem Size Used Avail Use% Mounted on

//argalephfsprod/aleph_bin$

137G 38G 99G 28% /ocfs/aleph_bin

//argalephfsprod/aleph_sh$

137G 38G 99G 28% /ocfs/aleph_sh

//argalephfsprod/aleph_work$

280G 135G 146G 49% /ocfs/aleph_work

//argalephfsprod/dailycheck$

137G 38G 99G 28% /ocfs/dailycheck

//argalephfsprod/INTERFAZ/

137G 38G 99G 28% /ocfs/INTERFAZ

Any suggestion about how to get the correct amount of space for total over 80 Mbytes?

dsquery group -samid "group_name" | dsmod group "cn=group_name",dc=example,dc=com" -addmbr
curl -s http://pages.cs.wisc.edu/~ballard/bofh/bofhserver.pl |grep 'is:' |awk 'BEGIN { FS=">"; } { print $10; }'
2014-10-10 21:17:33
User: toj
Functions: awk grep
Tags: curl BOFH
0

Sure, it's dirty, but it's quick, it only displays the excuse, and it works.

set -o noclobber
2010-01-08 21:06:44
User: eastwind
Functions: set
0

If you set noclobber to on, bash won't allow redirection to overwrite existing files .

set -o noclobber command turn the option on (default it s off ) .

You can still append information but not overwrite the file .to turn it back off use : $ set +o noclobber .

I use it because i overwrite a file by accident , after thought , content of the file was very important , creating a one more file mean nothing for my hard disk (we are not anymore on the 64 k memory time) , but content of file is far much important . What we call exeprience :(

git log -g --pretty=oneline | grep '}: commit' | awk '{print $1}' | head -1 | xargs git checkout -f
nvidia-settings -a AssociatedDisplays=0x00010000
2011-02-11 22:56:37
User: sharkyo
Tags: display nvidia
0

When nvidia-settings gets itself into a funk and displays the error

"Unable to load X Server Display Configuration page", then use

this script to make it reset itself.

reference: http://ubuntuforums.org/archive/index.php/t-1047029.html

du -h / | grep -w "[0-9]*G"
vie(){vi $(which $1)}
2011-10-03 15:07:19
User: lpb612
Functions: which
0

vie myscript

will find where myscript is, and then use vi to edit that file. Not much trick, but saves typing if you use it a lot.

git submodule status | awk '{print $2}' | xargs -P5 -n1 git submodule update --init
java -jar app.jar -cp $(echo lib/*.jar | tr ' ' ':')
2012-10-29 12:51:46
User: xymor
Functions: echo tr
Tags: java cli
0

Lauching an app including jars in an adjacent lib folder to its classpath

gcalcli --mon --width $((COLUMNS/8)) calw 2
2013-07-04 12:28:51
User: jaw42
0

Using the gcalcli interface to google calendar, print the calendar for the next 2 weeks according to the width of the terminal being used.

* Remove "--mon" to start week on sunday,

* Change 2 for more or less weeks

gcalcli --mon --width $((COLUMNS/8)) calm

for whole month

sar -n DEV -f /var/log/sa/sa05 |awk '{if ($3 == "IFACE" || $3 == "eth0" || $2 == "eth0") {print}}'
2014-03-06 21:32:54
Functions: awk
0

Choose the /var/log/sa/saXX log based on what day you want to view. You can use ifconfig to find the name of the interface.

You can use the -s flag to specify a certain time period, e.g. -s 12:00:00 -e 14:00:00

function google { Q="$@";GOOG_URL='https://www.google.com/search?tbs=li:1&q=';AGENT="Mozilla/4.0";stream=$(curl -A "$AGENT" -skLm 10 "${GOOG_URL}${Q//\ /+}");echo "$stream" | grep -o "href=\"/url[^\&]*&amp;" | sed 's/href=".url.q=\([^\&]*\).*/\1/';}
psql -U quassel quassel -c "SELECT message FROM backlog ORDER BY time DESC LIMIT 1000;" | grep my-query
2014-10-12 19:53:06
User: Tatsh
Functions: grep
0

Replace the credentials to psql if necessary, and the my-query part with your query.