Cool, but obscure Unix tools
kkovacs.eu
kkovacs.eu
abcde - CD to mp3 ripper
apg - random password generator
base64 - better than uuencode
boxes - draw any kind of boxes around your text
bsdiff - binary differ
bspatch - binary patcher
bvi - binary vi (yet another hex editor)
ccx2 - console xmms2 client
clive - flash video downloader
dvipdfmx - dvi to pdf converter
enfuse - poor man's HDR
get_flash_videos - yet another flash video downloader
glark - advanced grep
indent - code beautifier
lshw - list hardware configuration
mcurl - multiple part downloader using curl
mktemp - safely create temporary files and directories
msort - sort records in complex ways
netbrake - bandwidth limiter
od - octal dump
par - paragraph reformatter
par2 - archive verification and repair tool
ped - sed done right with perl
pinfo - color info reader
pipe.vim - make vim part of a unix pipe and allow it to
edit the pipe contents
pv - Pipe Viewer: a tool for monitoring
the progress of data through a pipe
pydf - pretty df (disk space viewer)
qmv - use your favorite editor to rename files
(part of renameutils)
qodem - modem program that can do serial, telnet, ssh,
zmodem, kermit, etc
rdiff-backup - like rsync, but can do incremental backups
recode - like dos2unix and unix2dos, but with many more encodings
recordmydesktop - make screencast videos
remark - great logfile colorizer (part of regex-markup)
rkhunter - find rootkit infections
rlwrap - add readline editing support to any command
safecopy - data recovery tool (better than dd)
sponge - soak up stdin and write to a file
(for things like pipeline editing)
sux - su while transferring X credentials
unbuffer - force flushing of stdout
upx - executable compressor
utimer - countdown timer and stopwatch
vared - edit shell variables (part of zsh)
watch - run a command multiple times and display the output
(with differences highlighted)
xdotool - simulate keyboard and mouse activity
xxd - hex dump
zargs - a version of xargs that makes the find command redundant
(part of zsh)
zed - very small and fast vi-like editor (part of zsh)
zrun - automatically uncompress arguments to commandI mean, I remember even 5 years ago ripping a CD took actual effort and a long time to get all the encoding done. So yay for abcde.
Converseley, there are plenty of long-term unix experts out there who also find that a mac makes a nice workstation that still satisifies their need for unix tools plus other stuff.
And it was easiest to take the screenshots from my OS X laptop. For some tools, like powertop, I had SSH-d into various Linux or FreeBSD boxes.
Some of these are uncommon enough that they are not ported to every package manager system, too. :(
Edit: looking at the site again, at least one of those screenshots is from OS X. htop lists /sbin/launchd and several processes from /Library/Frameworks.
==== ________ ___________
_D _| |_______/ \__I_I_____===__|_________|
|(_)--- | H\________/ | | =|___ ___| _________________
/ | | H | | | | ||_| |_|| _| \_____A
| | | H |__--------------------| [___] | =| |
| ________|___H__/__|_____/[][]~\_______| | -| |
|/ | |-----------I_____I [][] [] D |=======|____|________________________|_
__/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__|__________________________|_
|/-=|___|| || || || |_____/~\___/ |_D__D__D_| |_D__D__D_|
\_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/> Still the most complex game on the planet.
Dwarf Fortress.
As a sidenote, to anyone who doesn't know the story of how Dwarf Fortress is being made, you should check it out. It's one guy, working full time on it, and managing to support himself and his brother through monthly donations. It's released completely free of charge, so this is just solely from people donating. That alone would be a pretty cool story, but when you look at the immense, mindboggling, ridiculously ambitious scale of the the planned finished game, it's incredible. He's basically trying to build a completely "generic fantasy world simulator", with procedurally generated world, history, etc. The amount of detail he goes into in this is amazing, and he has so much more planned. If you ever need to be inspired that one person can make a living doing what they love, or that you can actually implement features that are ambitious beyond most AAA developers' wildest dreams, look to Toady One.
As a bonus, it's a pretty fun game!
The sequel, Headshoots[2], is also funny but not quite the same calibre as Boatmurdered. FYI, the name of your fortress is randomly generated.
[1] http://lparchive.org/Dwarf-Fortress-Boatmurdered/Introductio...
It's a pity that DF isn't open source either, as then its interface problems would have long since been fixed. But, as it is, its lead (and only) developer doesn't seem to care enough to fix it himself.
> By and large, 2D should be the most reliable, while STANDARD has a good combination of speed and reliability. However, all 2D modes are normally fa r slower than even STANDARD, which may be the slowest OpenGL mode.
It is indeed. However:
> Linux/OS X users may also use PRINT_MODE:TEXT for primitive ncurses output.
It's just too bad he can't come up with a UI that would appeal to any but the most dedicated players.
There's a player trying to get a sample of saguaro wood so they can measure some of its material properties empirically and add those to the game. And that's just one small part of some very large, recent threads researching real-world stuff to improve the game's model.
Someone actually went through about a couple of hundred random types of stone and wood to find out more information on them and input proper data for them, rather than using the defaults for wood and stone.
That thread is somewhere on the Suggestions forum.
Until someone writes out rules for Azad, I think Dwarf Fortress will remain king of the complexity hill.
Still, a very nice one, that is!
I bet very few people here are aware of its existence, even it has been part of Unix since Version 7. I recently discovered it and have used it to solve some project Euler problems.
Fixed it for you.
That principle also applies to grep regular expressions vs Perl regexes. Regular languages are quite weak in the right way, and thus can be recognized in linear time. Perl's regexes on the other hand, are so powerful, they can even tell prime numbers from composite numbers with their back tracking.
Choosing a weaker tool also serves as documention---about which features not to worry about.
(Of course you shouldn't try to use a tool that's weaker than what you need. For example, trying to solve some problem crying for recursion or iteration in a spreadsheet will lead to more harm than good.)
but nl is shorter :)
$ cat > test.txt
one
two
three
five
Let's try to number every line: $ nl test.txt
1 one
2 two
3 three
4 five
Ok, the leading spaces are annoying (why not use a single tab?), and are also produced with "cat -n". And why is not numbering blank lines the default?How can you prefix every line, even non-blank ones, with the line number followed by a single tab? Turns out the answer is:
$ nl -w1 -n ln -ba -s"`printf '\t'`" test.txt
Horrible defaults. HORRIBLE.If I ever needed line numbering, I would output into a file and open it in a far more capable text editor/viewer that was designed for doing that well.
I'm often surprised that cat is anywhere near as popular as it is. I think I've used it for actual file concatenation maybe two times in the past three years.
That's because numbers look better when they are right justified.
The blank line thing is stupid though.
They don't look better to a computer though. And that's what I don't get. Why are the defaults geared towards typesetting (human consumption) while cut/sort/join friendly output is so painful to produce?
This is a very common scenario when processing log files: line numbering, then sorting on another field followed by join/grep/head to grab a subset of interest, then recovering the original line numbers for the subset of interest.
Honestly half the time I end up doing this, just because it's the shortest invocation that comes to mind:
perl -lape '$_="$.\t$_"'Though I'm not sure I see why the "%5d" method is hard to parse...
nl /usr/share/dict/words | head -20 | sort -n
seems to work ok. "cut -f 2" and "cut -c 8-" also seem to work well in this case. awk '{ print FNR "\t" $0 }' test.txt
1 one
2 two
3 three
4
5 fiveI was in the process of making something similar before I found what I wanted – rlwrap. It provides readline line editing capabilities to command line applications that don’t support them, such as netcat.
Kristof here, creator of this particular list. First, thanks for the kind words! :)
I'll maybe add more tools when I have some time to make more screenshots. It's surprisingly more time consuming than it seems :)
Also, I'm a bit of two minds with the whole list -- many people think that some of these tools are already not "obscure" enough, while others suggest adding even more trivial ones like ifconfig or grep. I'll have to think about this a bit :)
Once again, thanks for your feedback!
KKovacs
For me, the major winner was dstat. Did not know about that tool - I've been struggling with the output of iostat. I'll also be experimenting with tmux as a screen replacement/alternative.
I'm sure the latter points can be remedied by config file settings for screen, but it's nice to use software that just works once in a while.
I'm glad that there is competition in this space, but you tmux evangelists need to realize that there is a lot of work that needs to be done before tmux is really "an amazing improvement to screen."
Is vertical split in mainline screen now, or do you still have to patch it?
I use both tmux and screen but prefer tmux. Here are some (non-ideological) reasons:
Dunno if screen has this, but in tmux IIRC, you can have two different tmux servers running in totally different processes, and transfer a window from one server to another. That's pretty cool, imho. The graphical equivalent would be running two VNC servers, and moving an xterm window from one to the other.
Another cool thing: pipe the entire contents of a window in realtime to an arbitrary program.
got me:
ack - Kanji code converter
:(
Ack is simply too often used and I don't want to type ack-grep all the time.
sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
That way you still get the benefits of the packaging system and you don't have to alias or create a /usr/local/bin symlink. <nit>
$ man alias
No manual entry for alias
$ man bash
ALIASES
Aliases allow a string to be substituted for a word when it is used as the first word of a simple command.
</nit>
alias is not a standalone, it's part of the shell (in bash at least). BASH_BUILTINS(1)
Though, I'm using zsh which may be layering something in there.None of the following from this list are obscure: screen, vim, rsync, xargs, curl
I'm tempted to put ack in that list.
Irssi - irc client
Mutt - email client
These are mentioned mostly because he included the newsbeuter rss client (which is amazing, I highly recommend it).agrep - approximate grep based on edit distance).
GNU Global - source tagging system that integrates with the shell (less -tfunc displays the function given in the shell).
xmllint - xml validator, pretty printer and schema validator.
"tee"
Redshift/f.lux - Redshift adjusts the color temperature of your screen according to your surroundings.
yafc: The best command-line FTP client that nobody's ever heard of. Local caching, tab completion, bookmarking, SFTP, and other generally awesome stuff.
clex: Full-screen file manager for command-line junkies. Configurable directory display, smart name completion, enhances the command line without seeking to replace it.
clex's approach to file management is by complementing the command line; you can generally use it as a pure CLI and it stays out of your way unless until you need to find or select a path. Every action you perform remains on the command line, clex merely makes it easier to quickly build commands. Compared to clex, Midnight Commander (like Norton Commander before it) feels like an attempt at a graphical file manager for the terminal, where the command line is almost an afterthought.
http://unkart.ovh.org/ncmpcpp/screenshots.php
Also in line with tmux, checkout teamocil and tmuxinator on github.
http://caca.zoy.org/wiki/libcaca
Also, there is neercs, a terminal multiplexer that uses libcaca: http://caca.zoy.org/wiki/neercs
So over on one of the test machines I apt-get install cowsay ... One of the other devs here is going go get a surprise next time he logs into one of the webservers ... ;)
< cowsay is the epitome of a unix tool. >
------------------------------------------------
\ _
\ (_)
\ ^__^ / \
\ (OO)\_____/_\ \
(__)\ ) /
||----w ((
|| ||>>You can do some amazing things with MySQL, Postgres, and Memcached with some of the maatkit tools.
Especially, xmlstarlet sel lets you select whatever data you want from XML files, being a command-line XSL templates generator.
Don't know anything else useful for XML, so it fills a vacuum.
Deleted comment