
Favorite Unix Commands - nickwoodhams
http://clippy.in/b/YJLM9W
======
aidos
It took me a moment to figure out what was going on there (with the whole
clippy thing). The bulk of this list is the top commands from commandlinefu
which has been on HN before [0], [1].

You can even go meta and install a command to let you search commandlinefu
[2].

[0] <http://news.ycombinator.com/item?id=527486>

[1] <http://news.ycombinator.com/item?id=3843373>

[2] <http://samirahmed.github.com/fu/>

~~~
akavel
I have a suspicion that it's actually a kind of targeted example-advertisement
for the clippy thingo ;) and did somewhat work for me actually, I do now feel
interested in learning more about the site

~~~
marginalboy
On my mobile device, it was nearly unusable...

~~~
bsphil
Maximized on a 1080p monitor it was irritating with far too many internal
scroll bars.

Great list of commands though.

------
jasonkostempski
Many years ago, before I ever used Linux in any serious fashion, I often used
a password that ended with '!!'. One day I was playing around with setting up
MySQL and was having a very hard time with something that seemed super simple.
I don't remember exactly how I figured it out, I think I accidentally type my
password at the wrong time in the command line and observed some odd behavior
and, after hours, finally tracked it to the '!!' command. I decided to try a
different root password for MySQL and it was smooth sailing from there. A few
months later I was transferring a domain away from a small DNS hosting
provider. After a week or so of waiting support told me they were having a
hard time with my account and couldn't do what they needed to do to initiate
the transfer. I don't have the support emails, must have been my old hotmail
account, but something they said suggested they might be trying to run
commands on my account with my password (I knew they stored it in plain text
since it was in several emails from them and I knew they were Linux servers)
and it reminded me about the '!!' issue I had with MySQL. I changed my
password and they were able to move forward. I wish I had dug deeper into the
issues at the time they occurred.

------
pajju
Check fasd, it will blow your mind, be prepared! :) Fasd (pronounced similar
to "fast") is a command-line productivity booster.

I've been using this for a while, and trust me, its changed my command line
workflow, and I wish, this should come as inbuilt for all POSIX shells!

Here is how it works -

If you use your shell to navigate and launch applications, fasd can help you
do it more efficiently. With fasd, you can open files regardless of which
directory you are in. Just with a few key strings, fasd can find a "frecent"
file or directory and open it with command you specify. Below are some
hypothetical situations, where you can type in the command on the left and
fasd will "expand" your command into the right side. Pretty magic, huh?

    
    
      v def conf       =>     vim /some/awkward/path/to/type/default.conf
      j abc            =>     cd /hell/of/a/awkward/path/to/get/to/abcdef
      m movie          =>     mplayer /whatever/whatever/whatever/awesome_movie.mp4
      o eng paper      =>     xdg-open /you/dont/remember/where/english_paper.pdf
      vim `f rc lo`    =>     vim /etc/rc.local
      vim `f rc conf`  =>     vim /etc/rc.conf
    

Fasd offers quick access to files and directories for POSIX shells. It is
inspired by tools like autojump, z and v. Fasd keeps track of files and
directories you have accessed, so that you can quickly reference them in the
command line.

The name fasd comes from the default suggested aliases f(files),
a(files/directories), s(show/search/select), d(directories).

Fasd ranks files and directories by "frecency," that is, by both "frequency"
and "recency." The term "frecency" was first coined by Mozilla and used in
Firefox.

Here is the Link - <https://github.com/clvv/fasd>

------
csmatt
I forgot about the DNS querying of wikipedia. Probably could've used that to
entertain myself on my flights over the holidays since I'm pretty sure gogo
inflight passes DNS through.

Anyway, I'm a big fan of piping things into xargs. xxd is a terminal-based hex
editor. It can convert both to and from hex to binary. I also use 'pgrep -lf
'partial_program_name' a lot in place of 'ps aux | grep partial_program_name'.
'pkill -9 partial_program_name' searches for and kills all processes matching
the string.

~~~
avar
If they allow DNS out you can use their Internet for free via iodine:
<http://code.kryo.se/iodine/>

I run an iodine server for myself, you can get free Internet at quite a few
loginpage WiFi routers with it in airports, cafes etc.

~~~
ragmondo
ssssssh ! When proxying over DNS becomes mainstream, it'll be shutdown !!

------
robbles
Handy addition to the "mount | column -t" trick:

You can use this within Vim to pretty-format text tables, initialization of
variables, etc. Just highlight the lines in question in visual line mode (V)
and type

    
    
        !column -t<CR>
    

to pipe the lines through the column command.

------
SkippyZA
Ctrl+l is my most used command. I need a clean terminal

~~~
MikeCodeAwesome
Same here; and love that it doesn't clear the command line you're currently
typing.

Does anyone know if there's a key command for clearing the scroll buffer?

~~~
ragmondo
Does anybody know if there is a command for creating an infinite stream of the
character "y" + carriage return ?

------
q_revert
a few nice ones here too, <http://www.pixelbeat.org/cmdline.html>,
<http://www.pixelbeat.org/docs/linux_commands.html>

always worth looking at these types of lists imo, whilst some of the commands
mightn't really fit into your workflow or seem useful immediately, they're
often exactly the snippets of information that can save hours at a later
stage..

------
loudmax
I have this in my .bashrc:

function lc() { if [[ "$#" -gt 1 ]]; then for DIR in "$@"; do echo -n "$DIR -
" ; ls -AU1 $DIR | wc -l ; done ; else ls -AU1 "$@" | wc -l ; fi; }

So, "lc /dir" will count the number of files in /dir and "lc /dir/*" will
count the files in subdirectories of /dir. This is useful if you're working in
an environment where you may have thousands of files in a directory, and a
regular "ls -l" will lock your terminal while it eats your entire scrollback
buffer.

~~~
pooriaazimi
Here's an idea: always pipe ls throug a pager! If it's less than a page, it
would just print the results (you have to set some flags on less that I don't
remember). If it's more, then press d or /term-to-search :)

~~~
crazydiamond

       less -F
    

Won't page if less than one screenful. zsh users can also do:

    
    
        < filename
    

(less than character)

------
tlarkworthy
grep -r . "some random debug message" (searches for the passage recursively in
all files from the directory it was executed, the main reason I like
developing in linux more than windows)

~~~
jlgreco
If you are searching inside code specifically, you may like 'ack'. It does the
same thing grep does, except it has preset 'excludes', is recursive by
default, and the output is a bit prettier.

~~~
lachenmayer
Or even 'ag' (the silver searcher). Like ack, but "better".
<https://github.com/ggreer/the_silver_searcher>

~~~
crazydiamond
"better" or just faster since its written in C ?

It is _not_ a drop-in replacement for ack. e.g. there are some basic usages it
does not support -- iirc counts (ag -c pattern).

~~~
jlgreco
Eh, faster is faster, does it matter why?

~~~
crazydiamond
The part about written in C was just added on. My point was "better or
faster". If you say "faster is better" I'll have to agree :)

------
jcampbell1
I have never understood the love for `sudo !!`. I think `ctrl+pa sudo ` is
faster, explicit, and more versatile.

~~~
kami8845
I disagree. I think typing one more command "sudo !!" is much easier and
straight-forward than doing

1\. Ctrl+p. Go to the previous line in bash history.

2\. Ctrl+a. Go to the beginning of the new line.

3\. Type "sudo ". While you're typing your whole commandline shifts around as
well.

The latter mixes history commands, navigation commands and also modifies a
previous command instead of just typing a new 7-letter command. It's also more
in terms of keystrokes (though just barely).

~~~
why-el
You know writing out their function does not make them longer. ;) I agree with
the parent because my left pinky is always on capsLock (my ctrl; I swapped
caps with ctrl) so a ctrol ap is far easier than to go to shift + 1 twice(to
type !). Again, this can be different in other keyboards/setups.

~~~
kami8845
I just wanted to illustrate the increased complexity and different domains of
the commands.

------
madao
Alt Sys Rq o - useful if you need to shut down a system and your kvm is not
working.

<http://en.wikipedia.org/wiki/Magic_SysRq_key>

~~~
nitrogen
It's probably a good idea to tErminate, kIll, Sync, and remoUnt-ro before
hitting Off or reBoot.

------
bcoates
I'm a fan of using cut or sed or awk and ending it with:

    
    
      | sort | uniq -c | sort -n -r | head
    

to get a nice top 10 whatevers in the whoosit

------
nickwoodhams
Please comment if you have a favorite not on this list.

~~~
codegeek

        alias lsd="ls -ltrF | grep ^d"
    

Helps me quickly list only directories. Any better alternatives ?

~~~
gav
Using `find` is nice to get just directories:

$ find . -type d -maxdepth 1

~~~
VaucGiaps
ls -al | grep ^d

~~~
ralph
(Fails if a directory has a linefeed in its name followed by a 'd'. :-)

------
crazydiamond
On zsh, "print -rC2" for printing some listing in 2 column format. The number
of columns (C) can be specified. (print is a builtin).

zsh's file globbing is awesome. Some simple ones:

    
    
        *(.)  - only files  
        *(/)  - only dirs  
        *(.m0) - files modified today  
        *(.om[1,15]) - 15 recently modified files

------
drinchev
faucet 80 --in cat

This is useful for creating a connection for receiving the input of what you
get...

e.g. running

faucet 80 --in cat

and later

curl <http://127.0.0.1:80>

will deliver to you console :

GET / HTTP/1.1 User-Agent: curl/7.21.4 (i686-pc-linux-gnu) libcurl/7.21.4
OpenSSL/0.9.8n zlib/1.2.5 libidn/1.19 Host: 127.0.0.1:900 Accept: _/_

~~~
cnvogel
Just some additional information:

Faucet is part of "netpipes", which is available for most Unixoid operating
systems. I guess it was inspiration to build "netcat". But netcat was a
absolute terrible hack of a program, so "socat" (socket-cat?) was born.

<http://www.dest-unreach.org/socat/>

In case you need the functionality of bash's /dev/tcp [1] and you are
pondering to install netcat or netpipes, do yourself a favor and just go for
socat, it's insanely more powerful, read the manpage, read the examples!

<http://www.dest-unreach.org/socat/doc/socat.html#EXAMPLES>

\--

[1] but debian and ubuntu have decided to compile without it...
<https://bugs.launchpad.net/ubuntu/+source/bash/+bug/215034>

------
INTPenis
One of my favorite aliases that wasn't listed.

alias easy_search="curl -s <http://pypi.python.org/simple/> | perl -ne 'print
if s/<[^>]+>//g && $.>1'|grep"

------
ragmondo
I like the wikipedia DNS text lookup - I work in a "firewalled" environment
where the unices are only allowed DNS queries. If only wikipedia could provide
central switchboard numbers in their text fields as well ...

------
DanBC
Single user mode on an HPUX machine was, I think, the most useful to me.

(<http://www.unixhub.com/docs/hpux/hpux_boot.html>)

I wish I still had that machine, but I do not.

~~~
RexRollman
I love playing with OSes and HPUX was one of the ones I didn't get to play
with (not to mention Irix and AIX).

------
kungpoo
What a ridiculous fixed header. It's taking up 2/3 of my phone's screen.

~~~
vacri
Try turning your phone into the portrait orientation.

------
carlesfe
Here's my list, a very compact plaintext file:
<http://mmb.pcb.ub.es/~carlesfe/unix/tricks.txt>

------
overgun77
Not really a unix command, but a vi command that has been really useful,
specially if you do lots of editing protected files and want to keep your
custom vim configuration:

!sudo tee %

~~~
ralph
What vi mode is that entered in?

~~~
emillon
Normal mode (:help :! for more information on this command).

~~~
ralph
What benefit does

    
    
        :!sudo tee %
    

have over doing it at the command line other than filling in the current
filename for you? I suspect the original poster meant something like "gg!Gsudo
tee %".

~~~
AjithAntony
:w !sudo tee %

------
amalakar
I find this site handy for clever commands:
<http://www.commandlinefu.com/commands/browse>

------
glazskunrukitis
I like those un- commands for easier archive extracting, e.g.:

alias unbz2='tar xvjf' alias untar='tar xvfz'

~~~
prakashk
I use _atool_ (<http://www.nongnu.org/atool/>), which is packaged in Debian
and Ubuntu (and I am sure in other distributions as well). It supports all the
formats I have encountered so far (tar, tar.gz, zip, rar, bz2 and others).

It provides a few commands, two of which I use the most:

    
    
        als - list files in an archive
        aunpack - exatract files from an archive
    

The best part is _aunpack_ extracts files into a subdirectory (I hate
polluting the current directory with files from a new archive which wasn't
properly packaged to include a directory), and it does it only when necessary.
Before I found it, I always used to create a temp directory, cd to it, unpack
into it, and possibly move files around etc.

------
dchichkov
mount -t overlayfs -o lowerdir=$HOME,upperdir=/tmp/tmpHOME overlayfs $HOME

~~~
jlgreco
What is the purpose of this?

~~~
dchichkov
Very useful, if you want to make a checkpoint (possibly for /), break things
and then get back to the original state.

If you'd do that for / , your own system would start behaving, like a system
booted from LiveCD. And, after reboot, would return to the origanal state.

Overlayfs is pretty cool actually. Allows you to overlay a _lower_ directory
with some other _upper_ directory and mount the result somewhere. All the
changes that you are making in the mounted directory would be visible to you,
and would be stored in the _upper_ directory.

In the example above, after running this command, content of your $HOME would
stop changing. But you still will be able to change it, with all the changed
content going into tmpHome.

~~~
jlgreco
Ah, very clever. I figured it would make changes to $HOME temporary but
couldn't immediately think of why you would do that.

------
gshakir
Great post! I think "lsof" should be there along with "netstat".

------
vog
There's a typo: The command is spelled "apropos" (not apropo).

~~~
nickwoodhams
Corrected this typo. Thanks.

------
gailees
I think I might've just saved days of my life....thank you!

~~~
nickwoodhams
Glad it helped you! :)

------
tzury
that's the original

<http://www.commandlinefu.com/commands/browse/sort-by-votes>

------
gbog
esc-#, comments the current line

ctrl-\, kills current process even xtail

xtail, tails dirs

tweaks in .inputrc to have up and down arrow do backward history search, like
in ipython.

------
donquix
sudo !!

Instant favorite

~~~
AaronBBrown
I often alias `sudo` to `fucking` to help vent my frustrations

    
    
        $ rm -rf somedir
        rm: somedir/: Permission denied
        $ fucking !!

~~~
prakashk
I have been known to use _sudo_ when it is not appropriate to use the f-word
;)

------
fusiongyro
Remove trash Emacs leaves lying around:

$ find . -name \\*~ -delete

------
re_todd
alias cd5='pushd .; cd ../../../../..'

This lets me cd five directories at a time, and if I want to go back, I do a
"popd"

------
Zenst
in ksh set -o vi so I can use the vi editor to navigate the command line
history.

------
t_lark
grep -r . "Some random debug msg"

