sash



SASH(1)                                                                SASH(1)




NAME

       sash - stand-alone shell with built-in commands


SYNOPSYS

       sash [-c command] [-f fileName ] [-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 problem of missing shared libraries or impor-
       tant executables.

       Sash can execute external programs, as in  any  shell.   There  are  no
       restrictions  on  these commands, as the standard shell is used to exe-
       cute 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 commands 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 programs with sim-
       ilar  names.   However,  they  are simpler and cruder than the external
       programs, and so many of the options are not implemented.  The restric-
       tions for each built-in command are described later.

       The  built-in commands which correspond to external programs begin with
       a dash character in order to distinguish them from  the  external  pro-
       grams.   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 backslashes.  However, no other command line  processing  is
       performed.  This includes specifying of file redirection, and the spec-
       ifying 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 com-
       mand so that it automatically runs the built-in command  instead.   For
       example,  the command "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.  If many external 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 arguments.  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  pro-
              vided, then the definitions of all aliases are displayed.

       aliasall
              This defines aliases for all of the built-in commands that start
              with dashes to the corresponding names without the dashes.  This
              may  be  useful when the system is so corrupted that no external
              programs 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 contains the archive.  If no addi-
              tional filenames are specified, then all files  in  the  archive
              are  operated  on.   Otherwise, only those archive members which
              have the same name as one of the additional filenames are  oper-
              ated  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 exten-
              sions.)

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

       -chattr [+i] [-i] [+a] [-a] fileName ...
              Change  the attributes of the specified files on an ext2 or ext3
              file system.  Using a plus sign adds the specified 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.  This command is only available on Linux.

       -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 argu-
              ment 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 identi-
              cal 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 specified parame-
              ters.  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 number  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 trailing letters from the set ’kbw’,  which
              multiplies the value by 1024, 512, and 2 respectively.  The com-
              mand 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 a convenient way to get  a  quick  list  of
              file names 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 constants, ".", "$", "’x",  /string/  and  simple
              arithmetic  combinations  of  these.  The substitute command 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 printable text or shell scripts,  are  executables,
              or contain binary data.

       -find dirName [-xdev] [-type chars] [-name pattern] [-size minSize]
              Find  all  files  contained  within the specified directory tree
              which meet all of the specified conditions.   The  -xdev  option
              prevents crossing of mount points.  The -name option specifies a
              wildcard 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  regular  files, directories, character devices, block
              devices, named pipes, sockets, and symbolic  links.   The  -size
              option  specifies that the files must be regular files or direc-
              tories 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 multiple 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 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 compressed 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 exten-
              sions ".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  uncompressed versions of the files have the same
              names as the original file names, except for a simple  modifica-
              tion  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 cre-
              ated as specified by outputPath.  If the output path is a direc-
              tory, 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 regular file, then only one input file is allowed, and  the
              uncompressed version of that input file is created 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.

              This command is only available if sash was compiled to  use  the
              gzip library.

       -gzip inputFileName ... [-o outputPath]
              Compresses  one  or more files using the gzip algorithm.  If the
              -o option is not given, then each of the input file  names  will
              be replaced by the compressed versions of those files, The orig-
              inal files will be deleted after the output files have been suc-
              cessfully  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  cre-
              ated as specified by outputPath.  If the output path is a direc-
              tory, then the compressed versions of the input  files  will  be
              placed  in  that  directory  with  their  file names modified 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  speci-
              fied.

              This  command  is only available if sash was compiled to use the
              gzip library.

       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 specified then SIGTERM is used.

       -losetup [-d] loopDev [file]
              Associates  loopback  devices with files on the system. 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  dest-
              Name.   If  there are multiple srcNames, or destName is a direc-
              tory, 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.

       -lsattr fileName ...
              Display  attributes  for  the specified files on an ext2 or ext3
              file  system.   The  letter  ’i’  indicates  that  the  file  is
              immutable  and cannot change.  The letter ’a’ indicates that the
              file is append-only.  Dashes are shown where the attributes  are
              not set.  This command is only available on Linux.

       -mkdir dirName ...
              Creates  the  specified  directories.  They are created 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 com-
              pletely, 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] [-s] [-e] [-m] devName dirName
              Mount a filesystem on a directory name.  The -t option specifies
              the type of filesystem being mounted, and defaults to "ext3" for
              Linux and "ffs" for BSD.  The -r option indicates to  mount  the
              filesystem  read-only.   The  -s  option  indicates to mount the
              filesystem no-suid.   The  -e  option  indicates  to  mount  the
              filesystem  no-exec.   The  -m  option  indicates  to remount an
              already mounted filesystem.  The -m option is only available  on
              Linux.

       -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 cur-
              rent  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 specified 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  direc-
              tory  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 umask value is printed.  The mask is an octal
              value.

       -umount [-f] 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.  The -f option unmounts  the  filesystem
              even  if  it  is being used.  The -f option is only available on
              BSD.

       unalias name
              Remove the definition for the specified alias.

       -where program
              Prints out all of paths defined by the PATH environment variable
              where  the  specified program exists.  If the program exists but
              cannot be executed, 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 embed-
       ded spaces to separate the arguments of the command), and then exits.

       The  -f  option executes the commands contained in the file name speci-
       fied by the next argument, and then exits.  This feature can be used to
       create  executable  scripts for sash by starting the script file with a
       line similar to:
            #! /bin/sash -f

       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.   This  option  is  also
       implied if the -c or -f options are used.

       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 pro-
       vide most normal bourne-shell programming features, however.



SYSTEM RECOVERY

       This section contains some useful information  about  using  sash  with
       lilo  to  perform system recovery in some situations.  Similar concepts
       should exist for other boot loaders and operating systems.

       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 you cannot
       enter multi-user mode and log in, then you can first try  booting  into
       single-user  mode  by adding the single 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 sys-
       tem 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  system  recovery,
       but aren’t built-in to sash.


AUTHOR

       David I. Bell
       dbell@canb.auug.org.au
       12 January 2004



                                                                       SASH(1)

Man(1) output converted with man2html