All commands (14,187)

  • top

    usage: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] Show Sample Output


    -2
    top
    atgf0127 · 2011-04-14 06:59:06 3
  • This expression looks for groups inside of a GroupOfNames class element, that is itself inside one (or many) Organizational Unit (ou) nodes in the ldap tree. Give you a quick dump of all the groups the user belongs to. Handy for displaying on a webpage. Show Sample Output


    -2
    ldapsearch -H ldap://localhost:389 -D cn=username,ou=users,dc=domain -x -W -b ou=groups,dc=domain '(member=cn=username,ou=users,dc=domain)' | grep ^dn | sed "s/dn\: cn=\([^,]*\),ou=\([^,]*\),.*/\2 \1/"
    nitehawk · 2009-06-11 14:50:11 5

  • -2
    watch -n 1 "awk 'NR==3 {print \"Signal strength = \" \$3 \"00 %\"}''' /proc/net/wireless"
    jlaunay · 2012-06-07 11:00:56 8
  • -k, --keep-open will keep connection alive, and we could exclude using 'while true' nc is such a powerful command, it could be used instead of any OS! :p Show Sample Output


    -2
    nc -kl 5432 -c 'echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n";echo "<p>How are you today?</p>"'
    gvitalie · 2013-11-12 14:00:11 7
  • Creating feature-branches off master, and trying to merge them in an integration branch (preview), sometimes causes conflicts because the feature-branch might hold changes from 'master' that aren't on preview yet. So this ensures only the commits added to the feature-branch are moved to integration (preview). Note: This assumes you're currently on the feature-branch. Adjust 'master/preview' branch names to suit your environment.


    -2
    git rev-list --reverse --topo-order master... | while read rev; do git checkout preview; git cherry-pick $rev || break; done
    shadyvb · 2015-04-23 14:28:06 11
  • Fetch comical VC commit messages from whatthecommit.com Show Sample Output


    -2
    curl -s http://whatthecommit.com | sed -n '/<p>/,/<\/p>/p' | sed '$d' | sed 's/<p>//'
    zbeekman · 2011-04-14 14:58:11 3
  • The echo at the end is for pretty printing as the output is just the IP address without any html


    -2
    wget -O - -q http://www.chisono.it/ip.asp && echo
    scanepa · 2011-09-18 15:38:02 3
  • If a directory name contains space xargs will do the wrong thing. Parallel https://savannah.nongnu.org/projects/parallel/ deals better with that. Show Sample Output


    -2
    du -s * | sort -nr | head | cut -f2 | parallel -k du -sh
    unixmonkey8046 · 2010-01-28 12:59:14 6
  • If you add the bookmarklet to your browser's bookmarks with like say, the keyword 'cfu', you can for example type 'cfu hello' in the location bar and the %s gets replaced with 'hello'. The bookmarklet will convert the search text to base64 for use with the commandlinefu website and will take you there. Tested with Firefox. Show Sample Output


    -2
    echo "javascript:location.href='http://www.commandlinefu.com/commands/matching/'+encodeURIComponent('%s')+'/'+btoa('%s')+'/sort-by-votes'"
    darkfader · 2011-03-07 22:01:46 4
  • Basic search and replaceEdit The :substitute command searches for a text pattern, and replaces it with a text string. There are many options, but these are what you probably want: :%s/foo/bar/g Find each occurrence of 'foo', and replace it with 'bar'. :%s/foo/bar/gc Change each 'foo' to 'bar', but ask for confirmation first. :%s/\/bar/gc Change only whole words exactly matching 'foo' to 'bar'; ask for confirmation. :%s/foo/bar/gci Change each 'foo' (case insensitive) to 'bar'; ask for confirmation. :%s/foo/bar/gcI Change each 'foo' (case sensitive) to 'bar'; ask for confirmation. The g flag means global ? each occurrence in the line is changed, rather than just the first. DetailsEdit Search range: :s/foo/bar/g Change each 'foo' to 'bar' in the current line. :%s/foo/bar/g Change each 'foo' to 'bar' in all lines. :5,12s/foo/bar/g Change each 'foo' to 'bar' for all lines from line 5 to line 12 inclusive. :'a,'bs/foo/bar/g Change each 'foo' to 'bar' for all lines from mark a to mark b inclusive. :.,$s/foo/bar/g Change each 'foo' to 'bar' for all lines from the current line (.) to the last line ($) inclusive. :.,+2s/foo/bar/g Change each 'foo' to 'bar' for the current line (.) and the two next lines (+2). :%s/foo/bar/g Equivalent to :1,$s/foo/bar/g (change all lines). :g/^baz/s/foo/bar/g Change each 'foo' to 'bar' in each line starting with 'baz'. When searching: ., *, \, [, ], ^, and $ are metacharacters. +, ?, |, {, }, (, and ) must be escaped to use their special function. \/ is / (use backslash + forward slash to search for forward slash) \t is tab, \s is whitespace \n is newline, \r is CR (carriage return = Ctrl-M = ^M) \{#\} is used for repetition. /foo.\{2\} will match foo and the two following characters. The \ is not required on the closing } so /foo.\{2} will do the same thing. \(foo\) makes a backreference to foo. Parenthesis without escapes are literally matched. Here the \ is required for the closing \). When replacing: \r is newline, \n is a null byte (0x00). \& is ampersand (& is the text that matches the search pattern). \1 inserts the text of the first backreference. \2 inserts the second backreference, and so on. You can use other delimiters with substitute: :s#http://www.example.com/index.html#http://example.com/# Save typing by using \zs and \ze to set the start and end of a pattern. For example, instead of: :s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/ Use: :s/Copyright \zs2007\ze All Rights Reserved/2008/ Using the current word or registersEdit :%s//bar/g Replace each match of the last search pattern with 'bar'. For example, you might first place the cursor on the word foo then press * to search for that word. The above substitute would then change all words exactly matching 'foo' to 'bar'. :%s/foo//g Replace each occurrence of 'foo' with the word under the cursor. means that you press Ctrl-R then Ctrl-W. The word under the cursor will be inserted as though you typed it. :%s/foo//g Replace each occurrence of 'foo' with the WORD under the cursor (delimited by whitespace). means that you press Ctrl-R then Ctrl-A. The WORD under the cursor will be inserted as though you typed it. :%s/foo/a/g Replace each occurrence of 'foo' with the contents of register 'a'. a means that you press Ctrl-R then a. The contents of register 'a' will be inserted as though you typed it. :%s/foo/\=@a/g Replace each occurrence of 'foo' with the contents of register 'a'. \=@a is a reference to register 'a'. The contents of register 'a' is not shown in the command. This is useful if the register contains many lines of text. :%s////g Replace each match of the last search pattern with the / register (the last search pattern). After pressing Ctrl-R then / to insert the last search pattern (and before pressing Enter to perform the command), you could edit the text to make any required change. :%s/*/bar/g Replace all occurrences of the text in the system clipboard (in the * register) with 'bar' (see next example if multiline). On some systems, selecting text (in Vim or another application) is all that is required to place that text in the * register. :%s/a/bar/g Replace all occurrences of the text in register 'a' with 'bar'. a means that you press Ctrl-R then a. The contents of register 'a' will be inserted as though you typed it. Any newlines in register 'a' are inserted as ^M and are not found. The search works if each ^M is manually replaced with '\n' (two characters: backslash, 'n'). This replacement can be performed while you type the command: :%s/=substitute(@a,"\n",'\\n','g')/bar/g The "\n" (double quotes) represents the single character newline; the '\\n' (single quotes) represents two backslashes followed by 'n'. The substitute() function is evaluated by the = (Ctrl-R =) expression register; it replaces each newline with a single backslash followed by 'n'. The indicates that you press Enter to finish the = expression. See Paste registers in search or colon commands instead of using the clipboard. Additional examplesEdit :%s/foo/bar/ On each line, replace the first occurrence of "foo" with "bar". :%s/.*\zsfoo/bar/ On each line, replace the last occurrence of "foo" with "bar". :%s/\.*// On each line, delete the whole word "foo" and all following text (to end of line). :%s/\.\{5}// On each line, delete the whole word "foo" and the following five characters. :%s/\\zs.*// On each line, delete all text following the whole word "foo" (to end of line). :%s/.*\// On each line, delete the whole word "foo" and all preceding text (from beginning of line). :%s/.*\ze\// On each line, delete all the text preceding the whole word "foo" (from beginning of line). :%s/.*\(\\).*/\1/ On each line, delete all the text preceding and following the whole word "foo". Special casesEdit For substituting patterns with a corresponding case-sensitive text, Michael Geddes's keepcase plugin can be used, e.g.: :%SubstituteCase/\cHello/goodBye/g Substitute 'Hello hello helLo HELLO' by 'Goodbye goodbye goodBye GOODBYE' For changing the offsets in a patch file (line number of a block), this little snippet can be used: s/^@@ -\(\d\+\),\(\d\+\) +\(\d\+\),\(\d\+\) @@$/\="@@ -".eval(submatch(1)+offsetdiff).",".submatch(2)." +".eval(submatch(3)+offsetdiff).",".submatch(4)." @@"/g Useful when we want to strip some blocks from a patch, without patch having to complain about offset differences. Note Should try to make the expression more compact, but don't know how without having the possibility of modifying unwanted lines.


    -2
    :%s/foo/bar/g
    anhstar · 2011-08-19 14:50:28 7
  • simple bash one liner to pass multiple arguments to command one by one. optional yes/no pipe at beginning of command Show Sample Output


    -2
    yes|for x in one two three; do echo result - $x; done
    Panikos · 2010-06-01 14:49:29 3

  • -2
    geoip() { wget -qO - http://freegeoip.net/xml/$1 | sed '3,12!d;s/<//g;s/>/: /g;s/\/.*//g' ; }
    vando · 2011-10-25 21:07:08 45
  • grep's -c outputs how may matches there are for a given file as "file:N", cut takes the N's and awk does the sum. Show Sample Output


    -2
    grep -rc logged_in app/ | cut -d : -f 2 | awk '{sum+=$1} END {print sum}'
    terceiro · 2009-07-15 14:16:44 9

  • -2
    cat user_public_key.pub | ssh root@<host> "cat | su -c 'mkdir -m 700 -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys' <user>"
    noisy · 2016-05-09 08:48:40 14
  • as explained in the blog post: https://www.learnaws.org/2022/10/10/aws-s3-list-files-date/


    -2
    aws s3api list-objects-v2 --bucket my-bucket --query 'Contents[?LastModified>`2022-01-01`].Key'
    shantanuo · 2022-11-22 07:57:44 943

  • -2
    vboxmanage startvm --type gui $(vboxmanage list vms | sed -e 's/"//g' | cut -f1 -d ' ' | dmenu -i -p "VMs")
    leenucks · 2011-05-30 11:06:20 3
  • How to add an "alternate access mapping" from the command line and avoid passing on Friday evening following the interpretation of the all-too-terse "log" of SharePoint?


    -2
    stsadm -o addalternatedomain -url http://paperino.paperopoli.com -urlzone Internet -incomingurl http://quiquoqua.paperopoli.com
    0disse0 · 2011-07-09 11:32:45 3
  • Replace < pw-length > with the desired password-length. The password-length is not always correct, but wayne...


    -2
    head -c $((<pw-lenght>-2)) /dev/urandom | uuencode -m - | sed -e '1d' -e '3d' | sed -e 's/=.*$//g'
    P17 · 2009-03-24 20:05:16 9
  • This command is useful when you want to check your nic's mac address, if you're interested in your wireless interface, use its ID instead "eth". This command was tested under Ubuntu and Slackware GNU/Linux. Show Sample Output


    -2
    ifconfig | grep eth | awk '{print $5}'
    diacus · 2011-02-02 20:42:22 4

  • -2
    svn log -q | grep -v "^-" | cut -d "|" -f 2 | sort -u
    michaelmior · 2010-10-07 21:52:05 3
  • Using xargs is usually much quicker as it does not have to execute chmod for every file


    -2
    find . -type f -print0 | xargs -0 chmod a-x
    jlaunay · 2012-06-11 07:28:30 5

  • -2
    diff -qr <dir1> <dir2>
    seb1245 · 2012-12-06 07:42:32 7

  • -2
    Amharic software
    Haimar19 · 2013-08-25 16:01:29 6
  • Kudzu is available on CentOS, used for configuring and detecting new hardware device installed, is also usefull for device listing.


    -2
    kudzu -p
    servermanaged · 2009-05-12 10:34:59 5
  • Finds all files below the current directory. Orders the result from smallest to largest. Good for finding the largest files in the tree.


    -2
    find . -type f -exec ls -s \{\} \; | sort -n
    Insti · 2010-06-02 11:03:31 4
  • ‹ First  < 510 511 512 513 514 >  Last ›

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. 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.

Share Your Commands


Check These Out

Stoppable sleep
A nice way to interrupt a sleep with a signal.

Copy an element from the previous command
'n' is a non-negative integer. Using 0 will expand to the name of the previous command.

Annoying PROMPT_COMMAND animation
unset PROMPT_COMMAND to disable.

Use /dev/full to test language I/O-failsafety
The Linux /dev/full file simulates a "disk full" condition, and can be used to verify how a program handles this situation. In particular, several programming language implementations do not print error diagnostics (nor exit with error status) when I/O errors like this occur, unless the programmer has taken additional steps. That is, simple code in these languages does not fail safely. In addition to Perl, C, C++, Tcl, and Lua (for some functions) also appear not to fail safely.

Remove color codes (special characters) with sed
Removes ANSI color and end of line codes to the [{attr1};...;{attrn}m format.

Terminal Escape Code Zen - Strace and Tput
Depending on the TERM, the terminfo version, ncurses version, etc.. you may be using a varied assortment of terminal escape codes. With this command you can easily find out exactly what is going on.. This is terminal escape zen! $ ( 2>&2 strace -f -F -e write -s 1000 sh -c 'echo -e "initc\nis2\ncnorm\nrmso\nsgr0" | tput -S' 2>&1 ) | grep -o '"\\[^"]*"' --color=always "\33]4;%p1%d;rgb:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\33\\\33[!p\33[?3;4l\33[4l\33>\33[?12l\33[?25h\33[27m\33(B\33[m" Lets say you want to find out what you need to echo in order to get the text to blink.. $ echo -e "`tput blink`This will blink`tput sgr0` This wont" Now you can use this function instead of calling tput (tput is much smarter for portable code because it works differently depending on the current TERM, and tput -T anyterm works too.) to turn that echo into a much faster executing code. tput queries files, opens files, etc.. but echo is very strait and narrow. So now you can do this: $ echo -e "\33[5mThis will blink\33(B\33[m This wont" More at http://www.askapache.com/linux-unix/bash_profile-functions-advanced-shell.html

Show a curses based menu selector
Not so much handy by itself, but very nice in shell scripts. This makes you a handy ncurses based checklist. Much like terminal installers, just use the arrow keys and hit 'Space' to adjust the selections. Returns all selected tags as strings, with no newline at the end. So, your output will be something like: "one" "two" "three" "four" "etc" For those who prefer bash expansion over gratuitious typing: $ whiptail --checklist "Simple checkbox menu" 12 35 3 $(echo {one,two,three,four}" '' 0"} ) Things to note: The height must includes the outer border and padding: add 7 to however many items you want to show up at the same time. If the status is 1, it will be selected by default. anything else, will be deselected.

Convert seconds to [DD:][HH:]MM:SS
Converts any number of seconds into days, hours, minutes and seconds. sec2dhms() { declare -i SS="$1" D=$(( SS / 86400 )) H=$(( SS % 86400 / 3600 )) M=$(( SS % 3600 / 60 )) S=$(( SS % 60 )) [ "$D" -gt 0 ] && echo -n "${D}:" [ "$H" -gt 0 ] && printf "%02g:" "$H" printf "%02g:%02g\n" "$M" "$S" }

Which processes are listening on a specific port (e.g. port 80)
swap out "80" for your port of interest. Can use port number or named ports e.g. "http"

Convert seconds to [DD:][HH:]MM:SS
Converts any number of seconds into days, hours, minutes and seconds. sec2dhms() { declare -i SS="$1" D=$(( SS / 86400 )) H=$(( SS % 86400 / 3600 )) M=$(( SS % 3600 / 60 )) S=$(( SS % 60 )) [ "$D" -gt 0 ] && echo -n "${D}:" [ "$H" -gt 0 ] && printf "%02g:" "$H" printf "%02g:%02g\n" "$M" "$S" }


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: