sash - stand-alone shell with built-in commands


SYNOPSYS

       sash [-c command] [-p prompt] [-q] [-a] [script]


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 or important  executables.

       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 non-
       wildcard 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:

            -ar, -chattr, -chgrp, -chmod, -chown, -cmp, -cp,
            -dd, -echo, -ed, -grep, -file, -find, -gunzip,
            -gzip, -kill, -losetup, -ln, -ls, -lsattr, -mkdir,
            -mknod, -more, -mount, -mv, -printenv, -pwd, -rm,
            -rmdir, -sum, -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, file names are expanded so that
       asterisks, question marks, and characters inside of square
       brackets  are  recognised and are expanded.  Arguments can
       be quoted using single quotes,  double  quotes,  or  back­
       slashes.   However,  no  other  command line processing is
       performed.  This includes 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

       programs will not run, then the "aliasall" command may  be
       useful to create multiple aliases.

       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.   Arguments  containing  wildcards  can   be
              quoted  in order to defer their expansion until the
              alias is invoked.  If just name is  provided,  then
              the  definition  of  the specified command alias is
              displayed.  If nothing is provided, then the  defi­
              nitions of all aliases are displayed.

       aliasall
              This  defines  aliases for all of the built-in com­
              mands that start with dashes to  the  corresponding
              names  without the dashes.  This may be useful when
              the system is so corrupted that  no  external  pro­
              grams may be executed at all.

       -ar [txp][v] arfile [filename]...
              List  or  extract  files  from  an ar archive.  The
              arfile argument specifies a file  name  which  con­
              tains  the archive.  If no additional filenames are
              specified, then all files in the archive are  oper­
              ated  on.   Otherwise,  only  those archive members
              which have the same name as one of  the  additional
              filenames  are operated on.  Filenames which do not
              appear in the archive are ignored.  Archives cannot
              be  created  or  modified.   The archiver correctly
              handles 4.0BSD archives, and understands  both  the
              SysV  and  4.4BSD  extensions  for long file names.
              The extended pseudo-BSD formats are not  supported;
              nor are the two antediluvian binary formats derived
              from V7 and earlier.  (The  GNU  archiver  normally
              creates  archives  in  the  4.0BSD format with SysV
              extensions.)

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

              Change the attributes of the specified files on the
              ext2 file system.  Using a plus sign adds the spec­
              ified attribute for the files.  Using a minus  sign
              removes  the  specified  attributes  for the files.
              The 'i' attribute makes a file immutable so that it
              cannot  be changed.  The 'a' attribute makes a file
              append-only.

       -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 file names
              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 the arguments to the -echo command.  Wildcards
              are  expanded, so this is a convenient way to get a
              quick list of file names in a directory.  The  out­
              put 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.

       -file fileName ...
              Examine the specified files  and  print  out  their
              file  type.   This  indicates whether the files are
              regular files or not, whether they  contain  print­
              able  text  or  shell  scripts, are executables, or
              contain binary data.

       -find dirName [-xdev] [-type chars] [-name pattern]
              [-size  min­ Size]
              Find  all  files  contained  within  the  specified
              directory tree which meet all of the specified con­
              ditions.  The -xdev  option  prevents  crossing  of
              mount  points.   The -name option specifies a wild­
              card pattern to match the  last  component  of  the
              file  names.   The  -type option specifies that the
              files must have a type matching the specified  list
              from the set: f d c b p s l.  These represent regu­
              lar files, directories,  character  devices,  block
              devices,  named pipes, sockets, and symbolic links.
              The -size option specifies that the files  must  be
              regular files or directories which contain at least
              the specified number of bytes.

       -grep [-in] word fileName ...
              Display lines of the specified files which  contain
              the  given  word.   If only one file name is given,
              then only the matching lines are printed.  If  mul­
              tiple file names are given, then the file names 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

              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 a regu­
              lar file, 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.   If
              the  output  path  is  a block or character device,
              then the uncompressed versions of the  input  files
              are concatenated to the device.

       -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

              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 [word]
              Displays  a  list  of  built-in commands along with
              their usage strings.  If a word is given, then just
              those  commands  whose  name  or usage contains the
              word is displayed.  If a word  is  specified  which
              exactly  matches  a  built-in  command name, then a
              short description of the command and its  usage  is
              given.

       -kill [-signal] pid ...
              Sends the specified signal to the specified list of
              processes.  Signal is a numeric value,  or  one  of
              the  special  values  HUP,  INT,  QUIT, KILL, TERM,
              STOP, CONT, USR1 or USR2.  If no signal  is  speci­
              fied then SIGTERM is used.

       -losetup [-d] loopDev [file]
              Associates  loopback devices with files on the sys­
              tem. If  -d  is  not  given,  the  loopback  device
              loopDev  is  associated  with file. If -d is given,
              loopDev is unassociated with  the  file  it's  cur­
              rently configured for.

       -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 [-lidFC] fileName ...
              Display  information  about  the  specified list of
              file names.  The normal listing is simply a list of
              file  names,  one  per line.  The options available
              are -l, -i, -d, and -F.  The -l option  produces  a
              long  listing  giving  the normal 'ls' information.
              The -i option displays the  inode  numbers  of  the
              files.   The -d option displays information about a
              directory, instead of the files within it.  The  -F
              option appends a slash or asterisk to the file name
              if the file is a directory or is  executable.   The
              -C option displays the file names in a multi-column
              format.  The width  of  the  output  is  calculated
              using the COLS environment variable.

              Display  attributes  for the specified files on the
              ext2 file system.  The letter  'i'  indicates  that
              the  file is immutable and cannot change.  The let­
              ter 'a' indicates that  the  file  is  append-only.
              Dashes  are shown where the attributes are not set.

       -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 file names,
              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 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


       -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 file name.

       -sum fileName ...
              Calculates checksums for one or more  files.   This
              is  the 16 bit checksum compatible with the BSD sum
              program.

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

       -tar [ctxv]f tarFileName [fileName] ...
              Create,  list  or extract files from a tar archive.
              The f option  must  be  specified,  and  accepts  a
              device or file name argument which contains the tar
              archive.  When creating, at  least  one  file  name
              must  be specified to be stored.  If a file name is
              a directory, then all  the  files  and  directories
              within  the directory are stored.  Linked files and
              other special file types are not handled  properly.
              When  listing or extracting files, only those files
              starting with the specified  file  names  are  pro­
              cessed.   If  no file names are specified, then all
              files  in  the  archive  are  processed.    Leading
              slashes  in  the  tar archive file names are always
              removed so that you might need  to  cd  to  "/"  to
              restore files which had absolute paths.

       -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

              value.

       -umount fileName
              Unmounts  a  file system.  The file name 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.

       The -a option creates aliases for the built-in commands so
       that  they  replace  the  corresponding standard commands.
       This is the same result as if the 'aliasall'  command  was
       used.

       A  file name may be provided as the last argument to sash,
       in which case sash's standard  input  is  read  from  that
       file.  This  allows #! scripts to use sash as their script
       interpretor. Be aware that sash does not provide most nor­
       mal bourne-shell programming features, however.


SYSTEM RECOVERY

       This  section contains some useful information about using
       sash with lilo to perform system recovery in  some  situa­
       tions.

       When  important  shared  libraries  are being upgraded, it
       might be a good idea to have sash  already  running  on  a
       console  by  itself.   Then if there is a problem with the
       shared libraries sash will be unaffected and  you  may  be
       able to use it to fix the problem.

       If a problem with the system shows up at boot time so that

       first try booting into single-user mode by adding the sin­
       gle keyword after your  kernel  image  name  at  the  lilo
       prompt.   If  you manage to reach a shell prompt, then you
       can run sash from that shell (if necessary).   One  reason
       for  doing  this  is that you might need to use the -mount
       command with the -m option to remount the root file system
       so that it can be modified.

       If  you  cannot  reach the shell in single-user mode, then
       you can try running sash directly as a replacement for the
       init  process.   This is done by adding the init=/bin/sash
       keyword after your kernel image name at the  lilo  prompt.
       When  this  is  done, then the use of the aliasall command
       might be useful to reduce attempts to access the root file
       system when running commands.

       If  your  root file system is so corrupted that you cannot
       get sash to run at all, then you will have to resort to  a
       system recovery floppy.


WARNINGS

       Sash  should obviously be linked statically, otherwise its
       purpose is lost.

       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
       2 October 1999


Man(1) output converted with man2html