Vous regardez une version antérieure (v. /display/EDDSDLTEL/Basic+shell+commands) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 8) afficher la version suivante »

If you would like to look at a book I suggest:
    www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf

HOME

By default your HOME directory is the directory in which you "land" when you log in. The path of this directory is usually:
     /home/username
It is also stored in the HOME environment variable (see further down):
     echo $HOME

In general there is not much space in your HOME but therefore, at UQAM, a backup of everything you keep under your HOME is done every 3 hours. We also keep daily and weekly backups for up to 4 weeks. You if you ever remove something by accident or if the machine or disk unit crashes, there will still be a copy of everything you had in your HOME.
Therefore, it is strongly suggested that you keep everything which is small and important in your HOME! Like programs, scripts, configuration files.

Check out the following link to find out how to retrieve data from the home backup.

Shell

A shell is a UNIX system command processor. It's a command language to tell the system what to do. There are two major shell (command interpreter) families: 
    Bourne, Korn, Bash Shell
    C Shell
   
The syntax of shell commands can vary from one shell to another.
At UQAM we use the Bourne Again Shell (bash) for the environment but often Korn Shell (ksh) for scripting. Therefore all commands below are bash commands.

Anatomy of a shell Command

command-name [-option(s) filename(s) or arguments]

Everything in square brackets [] is optional.

Example: ls -l filename

The first word of the command line is usually the command name. This is followed by the options/keys, if any, then the file and/or directory names. Options are usually preceded by a single or double dash, '-' or '--', and you may use more than one option per command.

You can also most of the time combine options:     $  ls -l -t -r
is the same as
    $  ls -lrt

In case you have a file name or an argument starting with a '-' you can use '--'. The command will NOT interpret anything following a '--' as an option/key.
For example if you are using 'grep' to look for '-a' in a file you could type:
    $  grep -iw -- -a filename

For more detailed explanations about Program Argument Syntax Conventions, please click on the here.

The examples on this reference card use bold case for command names and options and italics for arguments and filenames.

whatis command - display a one-line summary about command
man command - display on-line manual pages about command

man can be use on almost all of the shell commands listed below.

Important note about shell commands

Shell is case sensitive. Type commands exactly as shown; most shell commands are lower case. File and directory names can be lower, upper, or mixed case but must be typed exactly as listed.

User Information and Helpful Commands

On most systems your home quota (the amount of data you can keep under your home) is limited. The following commands help to check quotas and sizes of directories and file systems:

quota -v display your disk quota and usage.
There are quotas on several of our file systems. You might want to check them once in a while.
du -sdisplay your total disk usage
du -sc *display the size of all files and folders in current directory.
Very useful if you need to do a clean up because your quota is exceeded!
df -hcheck if the file systems are full - Do NOT do this on guillimin!
echo $PATHinspect your search path


List Files and Directories

pwd : display the name of present working directory

true_path directory-name : display the "true" name of directory-name, not the links. This command is a local add-on.

ls directory-name : list contents of directory

Here are some of the options I find most useful:

    -alist all files including invisible files (starting with '.')

-llong list - shows ownership, permission, and links

-hlist size in human readable format (k-, M-, GBytes)

-tlist files chronologically

-rreverse order of listing

-ddo not display directory contents but only the directory itself

-Slist in order of size (helps to find the largest files)


Understand the "long list (-l)" output:

Example:

    $ ls -ld /home/winger
    drwxr-xr-x   20   winger   users   4096   May 24 08:56   /home/winger

Column 1  :   a set of ten permission flags (see below)
Column 2  :   link count (don't worry about this)
Column 3  :   owner of the file
Column 4  :   associated group for the file
Column 5  :   size in bytes
Column 6-8: date of last modification (format varies, but always 3 fields)
Column 9  :   name of file/directory/link (possibly with path, depending on how ls was called)

The permission flags are read as follows (left to right)

positionMeaning
1directory flag, 'd' if a directory, '-' if a normal file,
something else occasionally may appear here for special devices.
2,3,4read, write, execute permission for User (Owner) of file
5,6,7read, write, execute permission for Group
8,9,10read, write, execute permission for Other



valueMeaning
-in any position means that flag is not set
rfile is readable by owner, group or other
wfile is writeable. On a directory, write access means you can add or delete files
xfile is executable (only for programs and shell scripts - not useful for data files).
Execute permission on a directory means you can list the files in that directory
sin the place where 'x' would normally go is called the set-UID or set-groupID flag.


See 'chmod' below about how to change the permissions.

Change Working Directory

cd : to change to your home directory
cd directory-name : to change to another directory
cd - : to change back to the previous directory

Directory Abbreviations

~ : home directory (tilde)
~username : another user's home directory
. : current or working directory
.. : parent of working directory

Make (or Create) Directory

mkdir directory-name : create a directory called directory-name

options:
    -p  parents: no error if existing, make parent directories as needed

Move (or Rename) Files and Directories

mv present-filename new-filename : to rename a file
mv source-filename destination-directory : to move a file into another directory

options: -i interactive mode. Must confirm file overwrites.

Copy Files

cp source-filename destination-filename : to copy a file into another filename
cp source-filename(s) destination-directory : to copy one or more files into another directory

options:
    -i  interactive mode. Must confirm overwrites.
    -r  recursive. Copies the directory and all its files and subdirectories and their files etc.

Link Files

ln -s target link_name : symbolically links link_name to target (can be file or directory)

Remove (or Delete) File

rm filename : remove a file
rm -r directory-name : remove a directory
rmdir directory-name : to remove an empty directory

options: -i interactive mode. Prompt for confirmation.

Look at a ASCII/text File

cat filenamedisplay the whole file contents one screen
more filenamedisplay the file contents one screen at a time
less filenameprogram for browsing or paging through files or other output.
Can use arrow keys for scrolling forward or backward.
head filenamedisplay first 10 lines of a file. Option -n : display first n lines
tail filenamedisplay last 10 lines of a file. Option -n : display last n lines


Wild cards

A number of characters are interpreted by shell before any other action takes place. These characters are known as wildcard characters. Usually these characters are used in place of filenames or directory names.

*An asterisk matches any number of characters in a filename, including none.
?The question mark matches any single character.
[ ]Brackets enclose a set of characters, any one of which may match a single character at that position.
-A hyphen used within [ ] denotes a range of characters.
~A tilde at the beginning of a word expands to the name of your home directory. If you append another user's login name to the character, it refers to that user's home directory.



Here are some examples:

  1. cat c* : displays any file whose name begins with c including the file c, if it exists.
  2. ls *.c : lists all files that have a .c extension.
  3. cp ../rmt? . : copies every file in the parent directory that is four characters long and begins with rmt to the working directory. (The names will remain the same.)
  4. ls rmt[34567] : lists every file that begins with rmt and has a 3, 4, 5, 6, or 7 at the end.
  5. ls rmt[3-7] : does exactly the same thing as the previous example.
  6. ls ~ : lists your home directory.
  7. ls ~hessen : lists the home directory of the guy with the user id hessen.


Change File Access Permissions

(These are the permission you see with the 'ls -l' command - see above.)

chmod [ who option permission ] filename

who can be any combination of:
    u (user)
    g (group)
    o (other)
    a (all) (i.e. ugo)

option adds or takes away permission, and can be:
    + (add permission),
    - (remove permission), or
    = (set to exactly this permission).

permission can be any combination of
    r (read)
    w (write)
    x (execute)

Example: chmod a+x filename - makes filename executable by everyone.

Display a message

echo message : diaplays/prints 'message'.

Examples:
     $ echo Hello
     Hello
     $ echo "Hello there"
     Hello there

Variables

You can create variables and assign values to them.
There are two kinds of variables: local variables and environment variables.
The difference between the two is that environment variables are passed down to child processes (sub shell, scripts, programs)
There are already several environment variables set which you can see with:
    env

A variable name always needs to start with a letter.
To get the content of a variable the variable needs to be preceded with a dollar sign ($)

Examples:
    $  person=Alex     Never put a space before or after the equal sign!
    $  echo person
    person
    $  echo $person
    Alex
    $  echo $personis
   
    $  echo ${person}is
    Alexis
    $  echo "$person"
    Alex                     => double quotes evaluate
    $  echo '$person'
    $person                => single quotes: No evaluation done !!!

Environment variables and the "export" command

If you just set 'variable=word' the variable will only be known in the current shell/script in which it is set.
If you "export" the variable becomes an environment variable and will also be know in all scripts which get executed in this shell/script.
For example ifyou export a variable in your file '~/.profile_usr' resp. '~/.profile.d/.interactive_profile' it will be available in all sub shells.

export
variable=word

The value of the variable is set to word.

Example:
    $ export CMCLNG=english
or
    $ CMCLNG=english
    $ export CMCLNG
   

Alias

alias alias-string='command-string'

Alias abbreviates a command string with an alias string. For multi-command strings, enclose commands in quotes.

Examples:
    $ alias data='cd ~data/Validation'
    $ alias vo='voir -iment'
    $ alias rd=r.diag
    $ alias rg='r.diag ggstat'

If you put aliases in your file ~/.profile.d/.interactive_profile' they will be available in all windows.

Date

date : display time and date
Check 'man date' for different format options.

Evaluate a command

You can evaluate a command and store the answer in a variable.
For example if you want to store the current date in a variable you can use:

    $  current_date=`date`
or
    $  current_date=$(date)
    $  echo $current_date

Arithmetics

    $  year=2013
    $  next_year=$(( year + 1 ))
or
    (( next_year = year + 1 ))
    $  echo $next_year
    2014

% : modulo / remainder
    $  echo $(( 10 % 3 ))
    1

Just be careful and never try arethmetic operations on numbers starting with a zero!!!

Formatted print

printf : produces  output  according to a format.
Example:
    $  printf '%3.3d\n' $(( 1 + 15 ))
    016

'\n' give you a new line.
For more information check: man 3 printf

History

history : lists the most recent commands

Exit/Close a window or exit a script

To close a window do not just click on the "x" but type 'exit' and then press <Enter>.
For each window some temporary files and directories are created with will only get cleaned up when using 'exit'.

Escape character

\ : back slash, escape character
Unfortunately '\' has different meanings depending on where/how it gets used.
Examples:
    $  person=Alex
    $  echo $person
    Alex
    $  echo \$person
    $person              => No evaluation done !!!
    $  echo "\$person"
    $person              => No evaluation done !!!
    $  echo '\$person'
    Alex                   => Evaluation done !!!

When used as the very last character in a line it will surpress the "new line".
    $ cat > text_file << EOF
    > Hello
    > How are you?
    > EOF
    $ cat text_file
    Hello
    How are you?

    $ cat > text_file << EOF
    > Hello, \
    > how are you?
    > EOF
    $ cat text_file
    Hello, how are you?



Command I/O

      >   :command output redirection (create new)
      >> : command output redirection(append)
      <   :command input redirection (from file)
      << : command input (from script orstandard input)

Example:
    $ cat > text_file << EOF
    > Hello
    > How are you?
    > EOF
    $ cat text_file
    Hello
    How are you?

null device

/dev/null or the null device is a special file that discards all data written to it but reports that the write operation succeeded.


File Operations

Search for Patterns in Files

grep search-string filename [filename...] : to find and type out lines containing the string in a file

Options:
    -i : case insensitive search
    -w : whole words only
    -v : type out lines that do NOT contain the string (invert the search)
    -c : count the number of lines that contain a match

Search for files

find pathname -name search-string
Useful for finding particular files. find descends the directory tree beginning at each pathname and locates files that meet the specified conditions. Wild cards can be used in the search string.

find is a very powerful and useful command. Use 'man find' to find out more.
It can for example also be used in combination with 'grep':

    $ find . -name '*.scr' -exec grep case {} \;

The above command will print all lines containing the word 'case' of files with end on '.scr'.

Counting words/lines/characters in a file

wc filename(s) : counts the number of words, lines, and characters in a file

Options:
    -l : count lines
    -c : count characters
    -w : count words

Pipe

| : (pipe) redirect standard output of first command to standard input of second command

Example:
    $ ls -1 | wc -l : count the number of files in a directory

Compare files

diff filename1 filename2 : compares contents of two files on a line-by-line basis

xxdiff filename1 filename2 [filename3] : graphically compares contents of two or three files on a line-by-line basis
xxdiff directory1 directory2 : compares contents of two directories
xxdiff can also be used to edit files!

tkdiff filename1 filename2 : graphically compares contents of two files on a line-by-line basis. Use on guillimin onstead of 'xxdiff'.

File Transfer

rsync : a fast, versatile, remote (and local) file/directory-copying tool

Usage:
  rsync  origin  destination
  rsync  user@origin_machine:origin  destination
  rsync  origin  user@destination_machine:destination
origin and destination can be file(s) and/or directories.
Only the origin or the destination machine can be a nother machine, not both.

Options:

    -vverbose

-rRecursively copy entire directories

-uupdate, forces rsync to skip any files which exist on the destination and have a modified time that is newer than the source file.

-llinks, when symlinks are encountered, recreate the symlink on the destination

-Lcopy-links, When symlinks are encountered, the item that they point to (the referent) is copied, rather than the symlink.

-tpreserves time

-ppreserves permissions



scp
: secure copy (remote file copy program)

Usage: similar to rsync above

Options:

   -rRecursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.


Also see:
sftp
: secure file transfer program
ftp : Internet file transfer program

wget : web downloader
GNU Wget is a free utility for non-interactive download of files from the Web.
Example:
    $  wget www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf


File archiving and compressions

tar : tape archive, can create, add to, list, and retrieve files form an archive file (a collection of files archived together as one file).
Options:

    -vverbose

-ccreate archive

-ttable of contents

-xextract files

-ffollowed by name of tar-file                                    

-tpreserves time


Examples:
Create tar-file:   tar -cvf tar-filename.tar  filenames
Unarchive tar-file:   tar -xvf tar-filename.tar

gzip, gunzip : compress resp. expand files

    gzip filename : compresses the file filename. Whenever possible, each file is replaced(!) by one with the extension .gz
    gunzip filename.gz : uncompresses the gz-file again.
Good to save space!

zip, unzip : package and compress resp. unarchive and uncompress (archive) files

    zip zip-file.zip file_list : archives and compresses all files in file_list into zip-file.zip. Leaves original files untouched.
    unzip zip-file.zip : unarchives and uncompresses all files in zip-file.zip.
    unzip zip-file.zip aaa : unarchives and uncompresses only file 'aaa fromzip-file.zip.

Cursor movements in command line

emacs mode:
    <Esc> . : repeat last word of previous command
    Ctrl-a : jump to beginning of line
    Ctrl-e : jump to end of line
    Ctrl-r : look backwards into history

    Ctrl-c : interrupt current process

Control structures

if then else

if  expression_1 ; then
   Statement(s) to be executed if expression 1 is true
elif expression_2 ; then
   Statement(s) to be executed if expression 2 is true
elif expression_3 ; then
   Statement(s) to be executed if expression 3 is true
else
   Statement(s) to be executed if no expression is true
fi

'elif expression ; then' and 'else' are optional!!!

expressions can look like this:
Arithmetic expression examples ( a=2 ): 
    (( a == 3 )) 
    (( b != 3 ))
    (( $a >= 3 ))
In Arithmetic expressions '(( ... ))' it is not necessary to put the '$' infront of variables since strings are not allowed so all strings are assumed to be variables anyways.

String expressions examples ( abc="Bonjour" ):
equal:
    [[ "$abc" == "Hello" ]]
not equal:
    [[ "$abc" != "Hello" ]]

The more common but less recomended way is:
    [ $a -le 3 ]
resp.
    [ "$abc" -nq "Hello" ]

Note: It is mandatory to keep a 'space' just before and after the double and single square brackets!!!

and: &&
or: ||

If you want to know more about the comparison operators try:
    $ man test
or
    $ man bash            -> CONDITIONAL EXPRESSIONS

case-statement

case test_string in
    pattern_1)  statement(s) ;;
    pattern_2)  statement(s) ;;
    *) default statement(s) ;;
esac

Examples:

    mon="Jan"
    case "$mon" in
        "Jan") echo January
                   month=January ;;
        "Feb") echo February
                    month=February ;;
        *) echo "month not known" ;;
    esac


    #  Determine number of days per month
    case ${month} in
      04|06|09|11) days=30 ;;
      02)          if   (( year % 4 == 0 )) && \
                      ( (( year % 100 != 0 )) || (( year % 400 == 0 )) ) ; then
                     days=29
                   else
                     days=28
                   fi ;;
      *)           days=31 ;;
    esac


for loop

for var in word1 word2 ... wordN ; do
   Statement(s) to be executed for every word.
done

Examples:

for hour in 00 06 12 18 ; do
  echo $hour
done

touch dm_01 dm_02
for fine in dm* ; do
  echo $file
done

while loop

while expression ; do
   Statement(s) to be executed while expression is true
done

Example:
a=1
while (( a <= 10 )) ; do
    echo $a
    a=$(( a + 1 ))     # increase the loop parameter
done

You can also use a while-loop to read lines from an ASCII file.
Example:
    $ cat > text_file << EOF
    > Hello
    > How are you?
    > EOF

    $ while read line ; do echo $line ; done < text_file
    Hello
    How are you?



break and continue

To interrupt a loop you can use 'break' and 'continue'.
break interrupts the loop
continue interrupts the current cycle of the loop

Manipulating Variables

Example string:
     $ string="ABC_abc_123"

String length:
     $ echo ${#string}

#      removes minimal matching prefixes
##   removes maximal matching prefixes
%     removes minimal matching suffixes
%%  removes maximal matching suffixes
:s:n  get 'n' caracters starting from position 's' (first position is 0)

Look at these examples and you will understand the meaning of the above:
    $ string="ABC_abc_123"
    $ echo ${string#*_}     
    abc_123                                             => removes everything before first occurance of '_'
    $ echo ${string##*_}
    123                                                    => removes everything before last occurance of '_'
    $ echo ${string%_*}
    ABC_abc                                            => removes everything after last occurance of '_'
    $ echo ${string%%_*}
    ABC                                                   => removes everything after first occurance of '_'
    $ echo ${string:s:n}
    abc                                                    => gets n characters, starting from position s

Cut out part of the content of a variable:

cut prints selected parts of a string
Options:

    -cselect only these characters

-ddelimiter=DELIM; use DELIM instead of TAB for field delimiter

-fselect only these fields


Examples:
    $ abc="I am hungry"
    $ echo $abc | cut -c 6-9
    hung                                                => returns characters 6-9
    $ echo $abc | cut -c 6-
    hungry                                            => returns characters 6 to end
    $ echo $abc | cut -d' ' -f 3
    hungry                                            => returns 3rd element with ' ' used as seperator
    $ abc="I am hungry. Are you?"
    $ echo $abc | cut -d. -f 2
    
Are you?                                        => returns 2nd element with '.' used as seperator

set
When you call set without options but with one or more arguments, it sets the values of the command line argument variables ($1-$9) to its arguments.
Examples:
    $ abc="I am hungry"
    $ set $abc
    $ echo $3
    hungry

When options are specified, they set or unset shell attributes.
Options:

    -xexpands each simple command
This is very useful for debugging scripts!!!

+xno expanding of commands anymore

For more options check man page: man set
Examples:
    $ abc="I am hungry"
    $ set -x
    $ abc="I am hungry"
    + abc='I am hungry'


& -> Send job in background

You can send a job in the background by adding a '&' at the end of the command line.
This is useful to get the prompt back - beeing able to continue using the window - when calling a program whic opens a nother window, like for example Matlab, emacs, xrec.
Example:
    $ matlab &

In case you forgot to add the '&' you can still send an already launched job into the background with Ctrl-z followed by 'bg' (for background):
Example:
    $ emacs
    Ctrl-z
    [1]+  Stopped                 emacs
    $ bg
    [1]+ emacs &


Check and kill running processes

ps reports a snapshot of the current processes
Options:

    -eselect all processes

-fdo full-format listing

-u userlistthis selects the processes whose effective user name or ID is in userlist


Try for example:
    $ ps -fu $USER

If ever you need to kill one of these jobs you can use 'kill' followed by the 'PID'.
If a normal 'kill' does not work try 'kill -9' followed by the 'PID'.

  • Aucune étiquette