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 - 9,165 results
rsync -a /path/from/.[^.]* /path/to
2012-03-19 22:08:54
User: magbeat
Functions: rsync
Tags: rsync
0

Useful when upgrading my Linux distro and trying to copy only "settings" from the old home folder to the new one.

wget -m -k -K -E http://url/of/web/site
step1 ; step2 ; step3 ; step4 ; curl -o- --get 'https://stream.twitter.com/1/statuses/filter.json' --header "$oauth_header" --data "follow=$id"
0

*** CAREFULLY READ THE NOTES **** *** THIS DOES NOT WORK "OUT OF THE BOX" ***

You'll need a few minutes of CAREFUL reading before making your own Twitter feed:

In 2010 simple command line Twitter feed requests all stopped working because Twitter upgraded to SSL security.

Https requests for a filtered Twitter stream feed now require a special header called "oauth_header".

The benefit is that your stream feed and login info is securely encrypted.

The bad news is that an "oauth_header" takes some work to build.

Fortunately, four functions, imaginatively named step1, step2, step3 and step4 can be used to build a customized oauth_header for you in a few minutes.

Now, go look at "step1" to start creating your own oauth_header!

wget -qO - http://whatismyip.org | tail
2012-03-17 10:13:05
User: Flolagale
Functions: wget
0

Uses wget standard GNU utility. Prints only your ip.

sudo sync && sudo echo 3 | sudo tee /proc/sys/vm/drop_caches
2012-03-17 08:27:58
User: StephenJudge
Functions: echo sudo sync tee
Tags: memory cache
-2

"That's it. Not much to see here. The first command writes any cache data that hasn't been written to the disk out to the disk. The second command tells the kernel to drop what's cached. Not much to it. This invalidates the write cache as well as the read cache, which is why we have the sync command first. Supposedly, it is possible to have some cached write data never make it to disk, so use it with caution, and NEVER do it on a production server. You could ... but why take the risk?

As long as you are running a post 2.6.16 kernel,..."

Source: http://ubuntuforums.org/showpost.php?p=3621283&postcount=1

curl -s http://www.google.com | espeak -m -ven+11
diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://8000000`
2012-03-16 23:51:17
User: centro
0

Creates a 4GB ramdisk on OSX. Use when you need high speed operations and have plenty of RAM

lsgrp() { read GID USERS <<< "$(grep "^$1:" /etc/group | cut -d: -f3,4 | tr ':,' ' ')" ; echo -e "${USERS// /\n}" | egrep -v "^($1)?$" ; egrep :[0-9]+:$GID: /etc/passwd | cut -d: -f1 ; }
2012-03-16 09:57:33
User: livibetter
Functions: cut echo egrep read
0

I can't find the lid command on my system, there is also another complied program: http://xyne.archlinux.ca/projects/lsgrp/

curl -s mobile.twitter.com/search | sed -n '/trend_footer_list/,/\ul>/p' | awk -F\> '{print $3}' | awk -F\< '{print $1}' | sed '/^$/d'
2012-03-15 17:17:06
User: articmonkey
Functions: awk sed
Tags: twitter awk curl
0

Prints top 5 twitter topics. Not very well written at all but none of the others worked.

pwgen -Bnyc
2012-03-15 14:38:15
User: KoRoVaMiLK
5

These are my favourite switches on pwgen:

-B Don't include ambiguous characters in the password

-n Include at least one number in the password

-y Include at least one special symbol in the password

-c Include at least one capital letter in the password

It just works!

Add a number to set password length, add another to set how many password to output. Example:

pwgen -Bnyc 12 20

this will output 20 password of 12 chars length.

for w in $(tr 'A-Z ,."()?!;:' 'a-z\n' < sample.txt); do echo ${#w} $w; done | sort -u | sort -n
2012-03-15 14:14:11
User: flatcap
Functions: echo sort tr
Tags: bash sort tr
0

Take a file and ,."()?!;: give a list of all the words in order of increasing length.

First of all use tr to map all alphabetic characters to lower case and also strip out any puntuation.

A-Z become a-z

,."()?!;: all become \n (newline)

I've ignored - (hyphen) and ' (apostrophe) because they occur in words.

Next use bash to print the length ${#w} and the word

Finally sort the list numerically (sort -n) and remove any duplicates (sort -u).

Note: sort -nu performs strangely on this list. It outputs one word per length.

seq 1 1000000 | while read i; do echo -en "\r$i"; done
for a in $(cat sample.txt); do echo "${#a} $a";done|sort -n
du -s $(ls -l | grep '^d' | awk '{print $9}') | sort -nr
for a in $(cat sample.txt); do echo "$(wc -m<<<$a) $a";done|sort -n
2012-03-15 08:51:42
User: knoppix5
Functions: cat echo sort
0

optionally you can add

|cut -d' ' -f2|uniq

to the end of the command line.

strings -f sample.txt
echo "Click a window to start recording"; read x y W H <<< `xwininfo | grep -e Width -e Height -e Absolute | grep -oE "[[:digit:]]{1,}" | tr "\n" " "`; ffmpeg -f alsa -ac 1 -i pulse -f x11grab -s ${W}x${H} -r 25 -i :0.0+${x},${y} -sameq output.mkv
2012-03-14 19:42:28
User: joseCanciani
Functions: echo grep read tr
1

The script gets the dimensions and position of a window and calls ffmpeg to record audio and video of that window. It saves it to a file named output.mkv

adb shell ps | grep my.app.packagename | awk '{print $2}' | xargs -I ? sh -c "adb logcat -v time | grep ?"
free -m | awk '/cache:/ {print $4}'
2012-03-13 19:54:26
User: felixhummel
Functions: awk free
Tags: ram free
0

Does not output the word "shared" so you can easily store this number in a variable.

for i in `ls *.anki`; do sqlite3 $i "select (cards.question || '||' || cards.answer) from cards, facts where cards.factid=facts.id and facts.tags like '%mytag%';" >> mytag.csv; done
2012-03-13 19:03:20
Tags: CSV anki
0

Produces a CSV file containing fronts/backs of cards with specified tag ("mytag" above). This command pulls these cards from different card databases, and allows them to be merged into one (by importing the resulting CSV file).

The CSV file is not directly produced; instead of commas, "||" are inserted. In your editor of choice, modify the resulting file to put quotes around the text before || and after ||, then change || to a comma (for every line).

ls -r | ?{-not $_.psiscontainer} | group extension | select name, count, @{n='average'; e={($_.group | measure -a length).average}} | ft -a @{n='Extension'; e={$_.name}}, count, @{n='Average Size (KB)'; e={$_.average/1kb}; f='{0:N2}'}
2012-03-13 17:58:10
User: brianpeiris
Functions: ls
Tags: PowerShell
0

Here's an annotated version of the command, using full-names instead of aliases. It is exactly equivalent to the short-hand version.

# Recursively list all the files in the current directory.

Get-ChildItem -Recurse |

# Filter out the sub-directories themselves.

Where-Object { return -not $_.PsIsContainer; } |

# Group the resulting files by their extensions.

Group-Object Extension |

# Pluck the Name and Count properties of each group and define

# a custom expression that calculates the average of the sizes

# of the files in that group.

# The back-tick is a line-continuation character.

Select-Object `

Name,

Count,

@{

Name = 'Average';

Expression = {

# Average the Length (sizes) of the files in the current group.

return ($_.Group | Measure-Object -Average Length).Average;

}

} |

# Format the results in a tabular view, automatically adjusted to

# widths of the values in the columns.

Format-Table -AutoSize `

@{

# Rename the Name property to something more sensible.

Name = 'Extension';

Expression = { return $_.Name; }

},

Count,

@{

# Format the Average property to display KB instead of bytes

# and use a formatting string to show it rounded to two decimals.

Name = 'Average Size (KB)';

# The "1KB" is a built-in constant which is equal to 1024.

Expression = { return $_.Average / 1KB };

FormatString = '{0:N2}'

}

while read l; do echo -e "$l"; done <1.txt >2.txt
2012-03-13 14:27:49
User: knoppix5
Functions: echo read
Tags: bash read
5

Bash only, no sed, no awk. Multiple spaces/tabs if exists INSIDE the line will be preserved. Empty lines stay intact, except they will be cleaned from spaces and tabs if any available.

nmap -sT -p 80 --open 192.168.1.1/24
qdbus org.kde.ksmserver /KSMServer logout 0 2 2
2012-03-12 19:48:08
User: Aissen
Tags: KDE session halt
0

Allows system to be halted and session closed by KDE. Very useful to save applications states, especially with the KDE apps that behave correctly.

qdbus org.freedesktop.PowerManagement /org/kde/Solid/PowerManagement suspendToRam