SASH(1)                                                   SASH(1)

NAME
       sash - stand-alone shell with built-in commands

SYNOPSYS
       sash

DESCRIPTION
       The  sash  program  is a stand-alone shell which is useful
       for recovering from certain types of system failures.   In
       particular, it was created in order to cope with the prob-
       lem of missing shared libraries.  You can also use sash to
       safely upgrade to new versions of the shared libraries.

       Sash  can  execute  external  programs,  as  in any shell.
       There are no restrictions on these commands, as the  stan-
       dard  shell is used to execute them if there are any meta-
       characters in the command.

       More importantly, however, is that many  of  the  standard
       system commands are built-in to sash.  These built-in com-
       mands are:

            -chgrp, -chmod, -chown, -cmp, -cp, -dd, -echo,
            -ed, -grep, -gunzip, -gzip, -kill, -ln, -ls, -mkdir,
            -mknod, -more, -mount, -mv, -printenv, -pwd, -rm,
            -rmdir, -sync, -tar, -touch, -umount, -where

       These commands are generally similar to the standard  pro-
       grams  with  similar names.  However, they are simpler and
       cruder than the external programs,  and  so  many  of  the
       options  are  not  implemented.  The restrictions for each
       built-in command are described later.

       The built-in commands which correspond  to  external  pro-
       grams  begin with a dash character in order to distinguish
       them from the external  programs.   So  typing  "ls",  for
       example,  will  attempt  to  run  the real ls program.  If
       "-ls" is typed, then the built-in command which mimics  ls
       is called.

       For  the built-in commands, filenames are expanded so that
       asterisks, question marks, and characters inside of square
       brackets  are  recognised  and  are expanded.  However, no
       other command line processing is performed.  This includes
       quoting  of arguments, specifying of file redirection, and
       the specifying of a pipeline.

       If an external program is non-existant  or  fails  to  run
       correctly,  then  the "alias" built-in command may be used
       to redefine the standard command so that it  automatically
       runs  the built-in command instead.  For example, the com-
       mand "alias ls -ls" redefines "ls"  to  run  the  built-in
       command.  This saves you the pain of having to remember to
       type the leading dash all of the time.

       The "help" command will list all of the built-in  commands
       in  sash  .   If  an  argument is given, it will list only
       those built-in commands which contain the  given  argument
       as a sub-string.  Each built-in command is described below
       in more detail.

       alias [name [command]]
              If name and command are provided, this  defines  an
              alias  for a command with the specified name, which
              executes the specified command, with possible argu-
              ments.   If just name is provided, then the defini-
              tion of the specified command alias  is  displayed.
              If nothing is provided, then the definitions of all
              aliases are displayed.   When  defining  an  alias,
              wildcards are not expanded.

       cd [dirname]
              If  dirname is provided, then the current directory
              is changed to the dirname.  If dirname  is  absent,
              then the current directory is changed to the user's
              home directory  (value  of  the  $HOME  environment
              variable).

       -chgrp gid filename ...
              Change  the  group  id  for  the  specified list of
              files.  The gid can either be a group  name,  or  a
              decimal value.

       -chmod mode filename ...
              Change  the  mode  of  the specified list of files.
              The mode argument can only be an octal value.

       -chown uid filename ...
              Change the owner  id  for  the  specified  list  of
              files.   The  uid  can  either be a user name, or a
              decimal value.

       -cmp filename1 filename2
              Determines whether or not the  specified  filenames
              have  identical data.  This says that the files are
              links to each other, are different sizes, differ at
              a particular byte number, or are identical.

       -cp srcname ... destname
              Copies  one  or  more files from the srcname to the
              destname.  If more than one srcname is given, or if
              destname  is a directory, then all the srcnames are
              copied into the destname directory  with  the  same
              names as the srcnames.

       -dd if=name of=name [bs=n] [count=n] [skip=n] [seek=n]
              Copy  data from one file to another with the speci-
              fied parameters.  The if and of arguments  must  be
              provided,  so stdin and stdout cannot be specified.
              The bs argument is the block size, and is a numeric
              value  (which defaults to 512 bytes).  Count is the
              number of blocks to be copied  (which  defaults  to
              end  of file for the input file).  Skip is the num-
              ber of blocks to ignore  before  copying  (seek  is
              used  if  possible, and the default is 0).  Seek is
              the number of blocks to seek  in  the  output  file
              before  writing  (and  defaults  to 0).  Any of the
              numeric decimal values can have one or more  trail-
              ing  letters  from  the set 'kbw', which multiplies
              the value by 1024, 512, and  2  respectively.   The
              command  reports the number of full blocks read and
              written, and whether or not any partial  block  was
              read or written.

       -echo [args] ...
              Echo the arguments to the -echo command.  Wildcards
              are expanded, so this is convenient to get a  quick
              list  of  filenames  in a directory.  The output is
              always terminated with a newline.

       -ed [filename]
              Edit the specified file using  line-mode  commands.
              The following ed commands are provided: = c r w i a
              d p l s f k z and q.   Line  numbers  can  be  con-
              stants,  ".", "$", "'x", /string/ and simple arith-
              metic combinations of these.  The  substitute  com-
              mand and the search expression can only use literal
              strings.  There are some small differences  in  the
              way that some commands behave.

       exec filename [args]
              Execute  the  specified  program with the specified
              arguments.  This replaces sash  completely  by  the
              executed program.

       exit   Quit from sash.

       -grep [-in] word filename ...
              Display  lines of the specified files which contain
              the given word.  If only  one  filename  is  given,
              then  only the matching lines are printed.  If mul-
              tiple filenames are given, then the  filenames  are
              printed  along  with the matching lines.  Word must
              be a single word, (ie, not a  regular  expression).
              If -i is given, then case is ignored when doing the
              search.  If -n is given, then the line  numbers  of
              the matching lines are also printed.

       -gunzip inputfilename ... [-o outputpath]
              Uncompress  one  or  more  files that had been com-
              pressed using the gzip or compress algorithms.   If
              the  -o option is not given, then each of the input
              file names must have one of the  extensions  ".gz",
              ".tgz",  or  ".Z", and those files will be replaced
              by the uncompressed versions of those  files.   The
              original  files  will  be  deleted after the output
              files have been successfully created.   The  uncom-
              pressed  versions  of the files have the same names
              as the original file names,  except  for  a  simple
              modification  of their extensions.  If an extension
              is  ".tgz",  then  the  extension  is  replaced  by
              ".tar".   Otherwise, the ".gz" or ".Z" extension is
              removed.

              If the -o option is given,  then  the  input  files
              will  not be deleted, and the uncompressed versions
              of the files will be created as specified  by  out-
              putpath.   If  the output path is a directory, then
              the uncompressed versions of the input  files  will
              be  placed  in that directory with their file names
              modified as described above, or with the same  name
              if  the  input  file  name does not have one of the
              special extensions.  If the output path  is  not  a
              directory, then only one input file is allowed, and
              the uncompressed version of that input file is cre-
              ated as the output path exactly as specified.

       -gzip inputfilename ... [-o outputpath]
              Compresses  one  or more files using the gzip algo-
              rithm.  If the -o option is not given, then each of
              the  input  file names will be replaced by the com-
              pressed versions of those files, The original files
              will  be  deleted  after the output files have been
              successfully created.  The compressed  versions  of
              the  files have the same names as the original file
              names, except for  a  simple  modification  of  the
              extensions.   If  an  extension is ".tar", then the
              extension is replaced by  ".tgz".   Otherwise,  the
              ".gz" extension is added.

              If  the  -o  option  is given, then the input files
              will not be deleted, and the compressed versions of
              the  files  will be created as specified by output-
              path.  If the output path is a directory, then  the
              compressed  versions  of  the  input  files will be
              placed in that directory with their file names mod-
              ified  as  described  above.  If the output path is
              not a  directory,  then  only  one  input  file  is
              allowed,  and  the compressed version of that input
              file is created as the output path exactly as spec-
              ified.

       help   Displays a list of built-in commands.

       -kill [-signal] pid ...
              Sends the specified signal to the specified list of
              processes.  Signal is a numberic value, or  one  of
              the special values HUP, INT, QUIT, or KILL.

       -ln [-s] srcname ... destname
              Links  one  or  more  files from the srcname to the
              specified destname.  If  there  are  multiple  src-
              names, or destname is a directory, then the link is
              put in the destname directory with the same name as
              the source name.  The default links are hard links.
              Using -s makes symbolic links.  For symbolic links,
              only one srcname can be specified.

       -ls [-lid] filename ...
              Display information about the specified filesnames,
              which may be directories.  The  normal  listing  is
              simply  a  list  of  filenames,  one per line.  The
              options available are  -l,  -i,  and  -d.   The  -l
              option  produces  a  long  listing given the normal
              'ls' information.  The -i option also displays  the
              inode numbers of the files.  The -d option displays
              information about a directory, instead of the files
              within it.

       -mkdir dirname ...
              Creates  the  specified directories.  They are cre-
              ated with the default permissions.

       -mknod filename type major minor
              Creates a special device node, either  a  character
              file  or a block file.  Filename is the name of the
              node.  Type is either 'c' or  'd'.   Major  is  the
              major  device  number.   Minor  is the minor device
              number.  Both of these numbers are decimal.

       -more filename ...
              Type out the contents of the  specified  filenames,
              one  page  at a time.  For each page displayed, you
              can type 'n' and a return to go to the  next  file,
              'q' and a return to quit the command completely, or
              just a return to go to the next page.  The environ-
              ment  variables  LINES  and COLS can be used to set
              the page size.

       -mount [-t type] [-r] [-m] devname dirname
              Mount a filesystem on a  directory  name.   The  -t
              option  specifies  the  type  of  filesystem  being
              mounted, and defaults to  "ext2".   The  -r  option
              indicates  to  mount the filesystem read-only.  The
              -m option indicates to remount an  already  mounted
              filesystem.

       -mv srcname ... destname
              Moves  one  or  more  files from the srcname to the
              destname.  If multiple srcnames are  given,  or  if
              destname  is  a  directory,  then  the srcnames are
              copied into the destination directory with the same
              names  as  the  srcnames.   Renames  are  attempted
              first, but if this fails because of the files being
              on different filesystems, then a copies and deletes
              are done instead.

       -printenv [name]
              If name is not given, this prints out the values of
              all  the current environment variables.  If name is
              given, then only that environment variable value is
              printed.

       prompt [word] ...
              Sets  the  prompt  string  that is displayed before
              reading of a command.  A space is always  added  to
              the specified prompt.

       -pwd   Prints the current working directory.

       quit   Exits from sash.

       -rm filename ...
              Removes one or more files.

       -rmdir dirname ...
              Removes  one  or more directories.  The directories
              must be empty for this to be successful.

       setenv name value
              Set the value of an environment variable.

       source filename
              Execute commands which are contained in the  speci-
              fied filename.

       -sync  Do  a  "sync" system call to force dirty blocks out
              to the disk.

       -tar [xtv]f devname [filename] ...
              List or restore files from  a  tar  archive.   This
              command  can  only read tar files, not create them.
              The available options are xtvf.  The f option  must
              be  specified,  and  accepts  a device or file name
              argument which contains the  tar  archive.   If  no
              filename  is  given,  all  files in the archive are
              listed or extracted.  Otherwise, only  those  files
              starting  with  the  specified  filenames are done.
              Leading slashes in the tar  archive  filenames  are
              removed.

       -touch filename ...
              Updates the modify times of the specifed files.  If
              a file does not exist, then it will be created with
              the default protection.

       umask [mask]
              If  mask  is given, sets the "umask" value used for
              initializing  the  permissions  of  newly   created
              files.   If  mask  is  not  given, then the current
              umask value is  printed.   The  mask  is  an  octal
              value.

       -umount filename
              Unmounts a file system.  The filename can either be
              the device name  which  is  mounted,  or  else  the
              directory  name  which  the  file system is mounted
              onto.

       unalias name
              Remove the definition for the specified alias.

       -where program
              Prints out all of paths defined by the  PATH  envi-
              ronment   variable   where  the  specified  program
              exists.  If the program exists but cannot  be  exe-
              cuted, then the reason is also printed.

OPTIONS
       There  are  several  command line options to sash.  The -c
       option executes the next argument as a command  (including
       embedded spaces to separate the arguments of the command),
       and then exits.

       The -p option takes the next argument as the prompt string
       to be used when prompting for commands.

       The -q option makes sash quiet, which simply means that it
       doesn't print its introduction line when it starts.

WARNINGS
       Sash should obviously be linked statically, otherwise it's
       purpose is lost.

       The  system  is still vulnerable to unrunnable shared ver-
       sions of init and sh.

       Several other system commands might be necessary for  sys-
       tem recovery, but aren't built-in to sash.

AUTHOR
       David I. Bell
       dbell@canb.auug.org.au
       March 8, 1998

                                                                1