Man Linux: Main Page and Category List

NAME

       sash - stand-alone shell with built-in commands

SYNOPSYS

       sash [-c command] [-f fileName ] [-p prompt] [-q] [-a]

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

       Sash can execute external programs, as in  any  shell.   There  are  no
       restrictions  on  these  commands,  as  the  standard  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 commands are:

            -ar, -chattr, -chgrp, -chmod, -chown, -cmp, -cp,
            -dd, -echo, -ed, -grep, -file, -find, -gunzip,
            -gzip, -kill, -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
       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 programs 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 backslashes.  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  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
              provided, 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
              additional  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
              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).

       -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
              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   specified
              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 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 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 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
              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 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
              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 uncompressed 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 outputPath.  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 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
              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 outputPath.  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  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
              specified.

              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.

       -ln [-s] srcName ... destName
              Links one or more  files  from  the  srcName  to  the  specified
              destName.   If  there  are  multiple  srcNames, 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.

       -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
              completely, or just a return  to  go  to  the  next  page.   The
              environment 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
              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 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
              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
              processed.  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
       embedded  spaces  to  separate  the arguments of the command), and then
       exits.

       The -f  option  executes  the  commands  contained  in  the  file  name
       specified  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.

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
       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  system  recovery,
       but aren't built-in to sash.

AUTHOR

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