Command Line Interface – General Specification

command lineshellUtilities

  1. I was wondering where I can find and
    learn some general idea about the
    command line interface used in Linux
    and bash?
  2. As to now, I have found pieces of
    such information only from
    experience, such as

    1. For cat, without any further
      arguments, it accepts stdin input.
      But you may explicitly specify STDIN
      using the special name -, and both
      ways are equivalent. cat can also
      accept a filename as cat filename.
      So is - meant to fill in an
      argument supposed for filename? Is
      this usage of - also common for
      other commands?
    2. In chardet <<<somestring, <<<
      means a string is used as stdin,
      the same as echo somestring |
      chardet
      . Is this usage of <<<
      also common?
    3. In cut -c 1-3,20,25- employees, is
      the way 1-3,20,25- to specify a
      range of numbers for an argument
      also common in other commands?
  3. Last but not least, are these
    general ideas common to just within
    bash, or within Linux and Unix, or
    within software using getopt as
    command line parser?

Best Answer

I recommend reading a book on unix or Linux shell and command line usage, in order to learn basic usage and get a feeling for some advanced features. Then you can turn to reference documentation.

The usage of specific commands is described in their manual. man cat will show the manual of the cat command on your system. Manual pages are usually references, not tutorials, though they often contain examples. On Linux, cat --help shows a terse usage message (meant for quick perusal when you already know the fundamentals and want to find an option for a specific task).

The POSIX standard specifies a minimum set of commands, options and shell features that every unix system is supposed to support. Most current systems by and large support POSIX:2004 (also known as Single UNIX version 3 and the Open Group Base Specifications issue 6). GNU software (the utilities found on Linux) often have many extensions to this minimum set.

There are common conventions for command-line arguments. POSIX specifies utility conventions that most utilities follow, in particular:

  • Options consist of - followed by a single letter; -ab is shorthand for -a -b.
  • -- signifies the end of options. For example, in rm -- -a, -a is not an option but an operand, i.e. a file to act upon, so this commands removes the file called -a.
  • A lone - stands for standard input, where an input file is expected. It stands for standard output where an output file is expected.

GNU utilities and others also support “long options” of the form --name. Some utilities go against the general convention and take multi-letter options with a single leading dash: -name.

Redirection is a shell feature, so you'll find it in your shell's manual. <<< to use a string as standard input is a ksh extension, also supported by bash and zsh. As long as the shell supports it, it can be used on any command.