software/unix-tricks

UNIX Tricks

See also freebsd and debian tricks.

Fork many processes with xargs

To fork off 10 instances of sleep with incremented lengths, 5 at a time:

$ seq 10 20 | xargs -n 1 -P 5 sleep

Remapping a Keyboard Key to Meta

I like having a Meta key (aka “Windows key”) for use with system keyboard shortcuts (change desktop etc), but some laptop keyboards don’t have an extra button. To remap one of the Alt keys, you need to know it’s code: on FreeBSD 6.3 it was: Alt_R keysum 0xffea keycode 113. To get the right mapping under X11, read the directions in /usr/X11R6/lib/X11/xkb/README. To get the right mapping under the console, edit /usr/share/syscons/keymaps/us.iso.kbd and change ‘ralt’ to ‘meta’.

Figlet

figlet is the horizontal banner.

thttpd

thttpd is a super small/light http web server with almost no features. To server up the working directory as cgi to local host, use:

$ thttpd -p 8080 -h localhost -D

To allow CGI for PHP scripts:

$ thttpd -p 8080 -h localhost -D -c *.php

Simple “undelete”

This oneliner is useful for recovering recently deleted files from unix filesystems, assuming you know a reasonably unique string in that file. Change the -A and -B options (lines of context before and after the unique string) as appropriate, and go through the output file to clean up the text.

$ sudo grep “bookmark_bar” –binary-files=text -B 10 -A 1000 /dev/sda5 | tee undeleted_content.txt

Misc

tput is useful for controlling the terminal cursor position, font style, etc.

OpenSSL Primes

See if a number is prime with openssl prime 2011.

SSH Tunnel

Try autossh to keep tunnels open.

printf

The printf command is much more powerful than echo.

stderr in Red

Via stack overflow:

$ command 2> >(while read line; do echo -e “e[01;31m$linee[0m”; done)

Mount an .img file as loopback device

Either:

mount -o loop distro.img /mnt

Or:

losetup /dev/loop0 distro.img mount /dev/loop0 /mnt

Search and Replace String in Multiple Files

Using sed:

sed -i ‘s/OldString/NewString/g’ *.txt

File-based Network Access

You can directly access network sockets as if they were files from bash using the virtual devices /dev/tcp/HOSTNAME/PORT and /dev/udp/HOSTNAME/PORT.