News for hackers. Stuff that matters.
Re:A Unix Utility You Should Know About: Pipe Viewer by pkrumins on Monday February 02, 2009 @09:25AM (#462283)
ask hacker news: what other utilities do you know that others don't? :)
Re:A Unix Utility You Should Know About: Pipe Viewer by yan on Monday February 02, 2009 @10:36AM (#462380)
A short list of what I like and use:

the command 'tee': let's you see what is happening at an intermediate stage of a pipeline (I originally thought your blog post would be about tee)

the -S flag to objdump: If you're trying to learn how compilers work or assembly, the '-S' flag to objdumb is absolutely beautiful. If you compile a binary with debugging symbols (-g in gcc), 'objdump -S binary' will intersperse the assembly with the original code, letting you see what each line compiled into.

I use 'pushd' and 'popd' bash builtins. It lets you remember current directories and have a stack of locations that you've been. Very valuable when you're jumping around a large source tree.

Even though not a command, I usually follow ls by "-ltr". That arranges it such that the most recently modified file is on the bottom. Very easy to see what files were modified.

"du -sk * | sort -rn" for a nice listing of directory sizes.

Pressing "esc, ." (That's the Esc key, followed by a period. Not together) in bash would insert the previous command's argument. i.e.:

  bash# ls /some/really/long/path/to/a/huge/file.c
  bash# vi [esc, .]    # <-- that would insert the path
  bash# vi $_          # <-- same effect
'tree' is nice to picture a directory hierarchy.
Re:A Unix Utility You Should Know About: Pipe Viewer by gcv on Monday February 02, 2009 @10:52AM (#462411)
Looks like the Esc-. trick works in zsh as well. I didn't know about it. Cool. Thank you.

With regard to pushd and popd: these tricks work in zsh also. In addition, (again, zsh-specific) you can set these options:

  setopt auto_pushd         # automatic directory stack
  setopt pushd_minus        # swap +/- for pushd and popd
  setopt pushd_silent       # no output after pushd and popd
  setopt pushd_to_home      # pushd with no arguments goes to ~
  setopt pushd_ignore_dups  # no duplicates in directory stack
With these options set, every time you change directories using cd, the directory goes into your directory stack, basically executing an implicit pushd. Then, move around the directory structure a little, and try typing 'cd -<Tab>' (meaning type 'cd -' and press Tab for autocompletion). It'll list entries in your directory stack by number (so -1 is your previous directory, -2 is the one before, and so on). It's a handy wrapper for bare pushd/popd functionality.

Bash might offer similar functionality, but I don't know much about bash.

Re:A Unix Utility You Should Know About: Pipe Viewer by nuclear_eclipse on Monday February 02, 2009 @12:24PM (#462547)

    setopt pushd_to_home      # pushd with no arguments goes to ~
I would personally dislike that, because without that option set, calling pushd (at least in Zsh) with no argument will actually rotate the top two elements on the directory stack, which can be extremely handy for switching between two places, rather than needing to constantly call `pushd +1` or `pushd -1`.

e.g.:

    $ pu ~
    /home/user
    $ pu workspace/project
    /home/user/workspace/project /home/user
    $ pu /tmp/data
    /tmp/data /home/user/workspace/project /home/user
    $ pu
    /home/user/workspace/project /tmp/data /home/user
    $ po
    /tmp/data /home/user
    $ po
    /home/user
note that I alias pu="pushd" and po="popd" for easier shell usage...
Re:A Unix Utility You Should Know About: Pipe Viewer by likpok on Monday February 02, 2009 @11:15AM (#462452)
I doubt it. One of the big features of zsh over bash is the tab completion is fantastic (arguments, URLS, etc). With a good .zsh and .zshrc, it is an amazing experience.
Re:A Unix Utility You Should Know About: Pipe Viewer by nuclear_eclipse on Monday February 02, 2009 @12:36PM (#462564)
My only complaint with Zsh's tab completion, which is usually far superb compared to Bash, is that package-name completion is much slower in Zsh as compared to Bash, at least on the Debian and Ubuntu systems that I use. Typing `aptitude install build-<Tab>` in Bash almost immediately completes "build-essential", but Zsh can take anywhere from 3-15 seconds to search through the package cache before completing the same package name.

Other than that, I absolutely love Zsh's completion system, and the awesome capabilities it provides, like context-sensitive Git argument completion, such as `git add <Tab>` listing only the files that are either changed since the last commit, or not yet tracked by Git. Insanely useful!

Re:A Unix Utility You Should Know About: Pipe Viewer by nixme on Monday February 02, 2009 @02:05PM (#462689)
I find M-. (on most keyboards, hold Alt and press .) to be faster than Esc,. although using Esc as a "metafy-next-key" is useful for broken terminals.
Re:A Unix Utility You Should Know About: Pipe Viewer by _phred on Monday February 02, 2009 @04:08PM (#462877)
!$ is the substitution in most shells for the last arg of the last command. I use it all the time as it's really easy to type.
Re:A Unix Utility You Should Know About: Pipe Viewer by jsrn on Monday February 02, 2009 @09:42AM (#462312)
mmv (moves multiple files based on a simple pattern replacement language). Example:

    mmv "*.mp3" "old_#1.mp3"
prefixes all files in the current directory ending with .mp3 with 'old_'. Btw., the quotes around the arguments are necesssary because mmv uses some of the same metacharacters as the shell does.

Multiple substitutions are allowed, e.g.:

    $ mmv "*.*" "#1___#2"
renames blub.xyz to blub___xyz.
Re:A Unix Utility You Should Know About: Pipe Viewer by jarekr on Tuesday February 03, 2009 @03:09AM (#463692)
Zsh has a module called zmv which lets you do things like:

zmv '(??)-(*).mp3' '$1 - ${(C)2:gs/_/ }.mp3'

Which would change "01-foo_bar_baz.mp3" into "01 - Foo Bar Baz.mp3"

Re:A Unix Utility You Should Know About: Pipe Viewer by nuclear_eclipse on Monday February 02, 2009 @12:18PM (#462537)
I've been looking for something like that for years!
Re:A Unix Utility You Should Know About: Pipe Viewer by moe on Monday February 02, 2009 @12:54PM (#462599)
I commonly use qmv (from renameutils):

qmv, qcp - Rename or copy files quickly, editing the file names in a text editor

Found nothing better for bulk renames because you get to use all the pattern/replace power of your favorite editor instead of learning some wierd specialized grammar through trial & error.

This is how to remove all spaces from mp3 filenames using vim:

qmv -f do *.mp3

:%s/ /_/g

:wq

Re:A Unix Utility You Should Know About: Pipe Viewer by jsrn on Monday February 02, 2009 @01:00PM (#462610)
for Emacs users, there is wdired mode, which makes a directory listing editable just like a normal Emacs buffer.
Re:A Unix Utility You Should Know About: Pipe Viewer by yters on Monday February 02, 2009 @05:42PM (#463058)
A lot of what I find lacking in a standard terminal, Emacs makes up for with its shell and terminal emulators. I find that an editable buffer with the contents of my entire session to be eminently powerful when combined with keyboard macros and the search/replace commands.
Re:A Unix Utility You Should Know About: Pipe Viewer by puffythefish on Monday February 02, 2009 @07:13PM (#463200)
Has anyone had any luck getting this to compile for OS X (Leopard)? make seems to fail on an error for me.
Re:A Unix Utility You Should Know About: Pipe Viewer by mark_h on Monday February 02, 2009 @03:37PM (#462833)
Andrew Myers has a shell script called mvsed that does something similar, using sed to specify the patterns.

Found it: http://www.cs.cornell.edu/andru/useful.html

Re:A Unix Utility You Should Know About: Pipe Viewer by Erwin on Monday February 02, 2009 @03:57PM (#462862)
There's a 'rename' script that comes with Perl that also does this, which may be useful if you want some really fancy renames. E.g. rename '$_=lc' *.MP3 to change case to lowercase.
Re:A Unix Utility You Should Know About: Pipe Viewer by nickb on Monday February 02, 2009 @03:40PM (#462839)
Anyone know where to find a source tarball that compiles under Leopard? All I've found is a bunch of precompiled Linux RPMs...
Re:A Unix Utility You Should Know About: Pipe Viewer by ruby_roo on Monday February 02, 2009 @06:57PM (#463175)
Update your MacPorts. It was just added:

http://trac.macports.org/changeset/46335

Re:A Unix Utility You Should Know About: Pipe Viewer by jsrn on Monday February 02, 2009 @05:41PM (#463056)
hm - no source tarball, but perhaps others find this Leopard binary useful:

http://www.joel.lopes-da-silva.com/articles/computer-science...

(including man pages etc.) Caveat: I didn't try it myself (I don't have Leopard).

Re:A Unix Utility You Should Know About: Pipe Viewer by pwk on Monday February 02, 2009 @12:20PM (#462539)
Oh, and of course netcat (nc). Indispensable for debugging anything TCP/IP based.

  echo -n 'GET / HTTP/1.0\r\n\r\n' | nc news.ycombinator.com 80
Of course there are more specific tools for specific protocols, like curl or wget for http, but nc is the swiss army knife.
Re:A Unix Utility You Should Know About: Pipe Viewer by yan on Monday February 02, 2009 @05:12PM (#462992)
nc is also awesome for quick and dirty file/directory transfer over the wire:

  host1 (receiving): nc -l 6123 > tar xfz -
  host2 (sending  ): tar cfz - directory/ | nc host2 6123
Re:A Unix Utility You Should Know About: Pipe Viewer by alnayyir on Wednesday February 04, 2009 @12:54AM (#465309)
you know, it's cool that you do that (quite neat in fact), but why is this better than scp'ing something, pray tell?
Re:A Unix Utility You Should Know About: Pipe Viewer by meredydd on Wednesday February 04, 2009 @05:40AM (#465563)
My favourite two reasons for using it:

1. I often tend to use it when I want to pipe the output into a command. If it's a big transfer, I don't really want to have to stream several gigabytes of data onto disk, then off it, then back on again. Restoring a database dump is one example:

  me@host1$ nc -l -p <port> < db_dump.sql

  postgres@host2$ nc <host> <port> | psql db-name

2. The other big advantage over scp is that sometimes, your target (deliberately) isn't accessible directly from an SSH login.

In the example above, I want to process that data as the 'postgres' user, but there's no way I'm allowing direct logins as that user. 'root' is, of course, the other common example.

Re:A Unix Utility You Should Know About: Pipe Viewer by yan on Wednesday February 04, 2009 @08:49AM (#465711)
Firstly, if the two machines are on the same switch this method is noticeably faster than scp'ing something large. The actual main reason though, is that this isn't limited to tarring over a network. What it comes down to, is you can almost seamlessly have a shell pipeline and one of those stages jumps a machine boundary.
Re:A Unix Utility You Should Know About: Pipe Viewer by alnayyir on Wednesday February 04, 2009 @02:50PM (#466356)
I see. Gotta love netcat.
Re:A Unix Utility You Should Know About: Pipe Viewer by gcv on Monday February 02, 2009 @09:32AM (#462294)
I was happy to discover rlwrap. Not every REPL or utility-with-its-own-prompt out there supports readline by default.
Re:A Unix Utility You Should Know About: Pipe Viewer by pwk on Monday February 02, 2009 @12:10PM (#462527)
I find xargs handy, it lets you use the output of one command as arguments for another command. As an example, I have a little alias that I use to grep through my ruby/rails source trees:

  alias gr 'find . -name \*.rb -o -name \*.rhtml -o -name \*.erb -o -name \*.rjs | xargs egrep \!*'
(backticks can be used similarly, but can run into command line length limits)
Re:A Unix Utility You Should Know About: Pipe Viewer by jacquesm on Monday February 02, 2009 @04:30PM (#462916)
not really a utility but a very handy one liner to check if someone is being annoying on a http server:

tail -1000 logfile | cut -d ' ' -f 1 | sort | uniq -c | sort -n

Bots should stand out in the last couple of lines and have a linecount that is substantially higher than a normal user.