MSC is my collection of missing shell commands
- stuff where I
feel comfortable when it's at my fingertips on a Unix commandline, and
where I feel very naked when I don't have it! Have you ever been asked
by a customer to take care of a Unix system, and then you log in,
and.. aarrgh - the commandline just won't behave how it should? Well,
: a set of "missing commands" that are very easily
installed on new systems and very handy to have.
As with most stuff on my site: feel free to use MSC. It's
distributed without cost, and without warranty - use at your own risk.
Licensing GPLV3 applies: if you re-distribute it, you must do so in
source format, and with the license intact. Finally - if you have good
additions, you're of course free to put them in, but I'd appreciate a
How to get it
What does it do
Here's a quick description of what's in the MSC package. The following
list shows, in no particular order, the commands that you normally
type (and not the setup-commands like shown in the listing above).
msc Shows what commands are in the package (just gives a
l and d Quicks for "ls" and "ls -Fla".
lx ext and dx ext: Quicks for "ls by extension",
e.g. lx c does "ls *.c".
rx ext Removes by extension, as in rx o a ("rm *.o *.a")
- and --: cd one-up or two-up.
xd ulb: This is a nifty one. Fast directory-changer, by
initials. E.g., xd ulb will take you to
/usr/local/bin, xd ulsct will take you to
/usr/local/src/crossroaads/trunk (if those destinations exist, of
course). When more than one possibility is available, you get a
choice where you want to go.
his myprog: Shows the history of your commands
where myprog occurred. Just his shows the entire
history (as far as captured by Bash).
- tarc archive directory, tart archive, tarx
archive: Tar helpers to create (tarc), list (tart), extract
(tarx). Knows .tar, .tar.gz and .tar.bz2 archives.
x or x user, or x user@host: Starts an xterm.
When the user is given (or user@host) then an SSH connection is
made to the given credentials.
xoff or xon: Turns of X by temporary deleting the
DISPLAY variable, or by re-enabling it.
ep: Lets you edit your Bash profile and afterwords reloads
it. For example, you can enter ep, add an alias to your
profile, exit the editor - and pronto, it's loaded. User's
profiles are expected as "~/.bashrc", root's profile is expected
as "/etc/bashrc" or "/etc/bash.bashrc".
cpf file(s) directory is a "copy-forward", files are only
copied when they don't yet exist in the destination directory, or
when they are more recent. New files aren't overwritten by old
ones. I use this on Unixes where the "cp" command doesn't support
the flag "-n" (yes, these are still around!)
ftail file(s): Like tail -f, for Unixes that don't
have GNU tail.
ip shows the configured IP addresses (from ifconfig).
less file, perldoc subject, man subject: Like
the normal less or perldoc or man, but when X
is available, the command runs in a separate xterm window.
m: Like make, but you get normal and error output
piped into less. Another quickie command.
psg command (as in "ps|grep"): Examines the ps list
and shows the matching command(s).
b64dec and b64enc: Encodes or decodes all
command line strings. If no arguments are given, processes
"stdin" (as in: b64enc 'Hello World' | b64dec)
d2u file(s) and u2d file(s): Standard DOS to Unix or
Unix to DOS file conversion.
hex file(s) hexdumps the contents of the file(s). Use file
"-" to dump stdin.
while1 and while5 run commands each 1 or 5
seconds. They are just shortcuts to while [ true ] ; do
commands; sleep 5; done.
while0 is just a while [true] without
- beep just beeps 5 times. I use it to get an alert after a
long-running command ends, as in: long-running-command; beep
- env is a fusion between the two functions
of /usr/bin/env: to show the environment, or to invoke a
program. E.g., env home shows the HOME directory,
while env perl invokes Perl.
- ds is a case-insensitive find that
avoids .svn, CVS etc.. Use as e.g. ds file,
which will match myfile.o, MyOtherFile.c and so on.
- loglimit is for those situations where you don't have
e.g. Apache's logrotate and you need to limit the growth of
log files. Use as for example: mycommand | loglimit /tmp/mylog
10000 5. This will limit the size of /tmp/mylog to
10.000 bytes, and it will leave up to 5 historical versions
(/tmp/mylog.1 up to /tmp/mylog.5).
Full "usage" information
Here's what msc reports when you run it without any arguments:
These are the Missing Shell Commands V1.24
Copyright (c) Karel Kubat <email@example.com>. Visit http://www.kubat.nl/ for
For installation into BINDIR (default: /usr/local/bin/), type:
msc install [BINDIR]
For bootstrapping (loading of aliases, functions), type:
msc bootstrap [BINDIR] > /tmp/$$; . /tmp/$$; rm /tmp/$$
Available (symlinked) commands:
l, d short, long directory listing
lt, dt short, long listing by date
lx, dx short, long directory listing by extension, e.g. dx c (lists *.c)
rx remove files by extension, e.g. rx o a (removes *.o *.a)
up1, up2 cd 1 or 2 up, use as: eval `up1` and: eval `up2`
to set up the aliases - and --, run the bootstrap or:
gd goto-directory, use as: eval `gd /new/directo/ry`
to set this up as a bash function, run the boostrap or:
gd_function > /tmp/$$; . /tmp/$$; rm -f /tmp/$$
xd fast cd, use as: eval `xd ulb` (ulb is short for
/usr/local/bin or whatever matches)
to set this up as a plain xd bash command, run the boostrap or:
xd_function > /tmp/$$; . /tmp/$$; rm -f /tmp/$$
tarc create tar archive, supported: .tar, .tar.gz, .tar.bz2
tart list tar archive
tarx extract tar archive
path set shell path, use as: eval `path d1 d2 d3`, sets standard dirs
and adds to the path d1,d1/bin,d1/sbin and so on
ps1 set bash prompt, use as: eval `ps1`
x start xterm, use as: x user@host, default: thisuser, @localhost
xoff turn off X ($DISPLAY), use as: eval `xoff`
xon turn on X ($DISPLAY), use as: eval `xon`
to set up xon and xoff as aliases, run the boostrap or:
his show shell history (use his STRING to limit)
to set this up, run the boostrap or:
his_function > /tmp/$$; . /tmp/$$; rm -f /tmp/$$
e, ew start editor (async or wait mode)
ep edit and reload bash profile, use as: eval `ep`
to set up ep as a bash command, run the boostrap or:
cpf copy-forward, if you don't have cp -n
ftail like tail -f, if you don't have it
ip shows IP addresses
ruler displays a 80-column ruler
less less-pager in a new window
man man display in a new window
m make, with stdout/stderr to less
perldoc Perl documentation in a new window
psg like 'ps ax' but looks for certain commands
while1 run commands every 1 second (or 5 sec with while5, or without delay
with while0), use as: while1 cmd1 cmd2 cmd3
env shows (parts of) environment, or invokes a command, eg. "env home"
shows the home directory, "env perl" invokes perl
beep sound the alarm
ascii shows the ASCII table
localtime converts seconds-since-epoch to local time
gmtime converts seconds-since-epoch to UTC (gm) time
timet shows seconds-since-epoch
ds case-insensitive find, avoids .svn, CVS etc.
loglimit pipe that writes limited logs, use as:
cmd | loglimit FILE SIZE HISTORYFILES
b64enc encode into base64 format (either cmdline arguments or stdin)
b64dec decode from base64 format (either cmdline arguments or stdin)
hex hexdumps a file (use - for stdin)
crypt standard Unix crypt function
d2u,u2d dos2unix or unix2dos file conversions
tolower file renaming to lower case
tac reversed cat, dumps file line by line in reversed order