Start
   Blogaria
   Bored
   bsgen
   cconf
   Cookies
   CopyForward
   CyclicLog
   Dialwhatever
   DNSBalancer
   fch
   HammerServer
   jpeginfo
   kalk
   Lectures
   Microproxy
   msc
   Nasapics
   PGPkey
   SafeEdit
   Simple listserv
   Wallpapers
Karel as an adult

A little movie
An animation can't be properly rendered. You have probably a too old version of Flash player.






msc

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, enter msc: 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 holler!

How to get it

  • Get the Perl script msc and save it to a temporary directory (e.g. /tmp or your "sources" directory);
  • Change-dir over there;
  • Have a look at the script if you like, there's no magic. To install, type ./msc install.
  • To get all aliases and all goodies, add the following to your /etc/bashrc (sometimes this file is /etc/bash.bashrc or /etc/bash.profile, your mileage may vary):
    PATH=$PATH:/usr/local/bin
    eval `up_aliases`
    eval `xoff_xon_aliases`
    eval `path`
    eval `ps1`
    eval `ep_alias`
    gd_function > /tmp/$$; . /tmp/$$; rm /tmp/$$
    xd_function > /tmp/$$; . /tmp/$$; rm /tmp/$$
  • Reload Bash's profile (or relog).

What does it do

Here's a quick description of what's in the MSC package. The following list shows 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 quick list).

  • 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.

  • 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)

  • 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.

  • 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.09
Copyright (c) Karel Kubat <karel@kubat.nl>. Visit http://www.kubat.nl/ for
more information.

Available 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:
      	      eval `up_aliases`
  gd        goto-directory, use as: eval `gd /new/directo/ry`
      	    to set this up as a bash function, run:
      	      gd_function > /tmp/$$; . /tmp/$$; rm /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:
              xd_function > /tmp/$$; . /tmp/$$; rm /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
	      eval `xoff_xon_aliases`

  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
	      eval `ep_alias`
  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), 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
  hex       hexdumps a file (use - for stdin)
  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)