Mode d'emploi du système DIGITAL UNIX.

Ce document présente quelques commandes pour démarrer avec UNIX. La version
d'UNIX installée est DIGITAL UNIX version 3.2C

  1. Connexion
  2. Les fichiers et les répertoires
  3. Editeur de texte
  4. Impression
  5. Langage de commande ou shell
  6. redirection des entrée-sortie
  7. Rappel te édition des commandes
  8. Compléter le nom du fichier
  9. Aide en ligne
  10. Quelques trucs et utilitaires
  11. Compilation
  12. Exécution d'un programme
  13. Messagerie
  14. Réseau
  15. Outils Internet
  16. X-windows
  17. Joe
  18. Emacs

0. Caractères spéciaux

 +--------------------------------------------------------------------------+
  
    Escape s'obtient sur un VT300 en appuyant simultanément sur les touches
  
                   +------+   +------+  +-----+
                   | Ctrl |   | MAJ. |  |  3  |
                   |      |   | min. |  |  "  |
                   +------+   +------+  +-----+
  
 +--------------------------------------------------------------------------+
 En X-window, la touche F11 est programmée pour obtenir Escape

 Si vous avez tapé CTRL Z par erreur, tapez fg pour reprendre la main. En
 effet CTRL Z suspend le process, fg foreground réactive le process.


 Le caractère Fin-de-fichier s'obtient en appuyant sur CTRL D  (End Of Text)
 CTRL C stoppe le programme en cours d'exécution.

0.1 Les métacaractères

   Les métacaractères regroupent les caractères servant à la redirection des
 entrée-sortie et d'autres caractères (~,&,=,\,{,},%,#,etc...)

   Sous UNIX, les caractères de substitutions (jokers) sont interprétés de
 façon différente par les commandes. Par exemple, ls * donne la liste de tous
 les fichiers du répertoire et des répertoires immédiatemment en dessous, par
 contre wc * ne traite que les fichiers du répertoire courant. Voir plus loin 
 les caractères utilisés avec la commande ls.

 Quelques métacaractères

  $  interprétation d'une variable
  \  le caractère qui suit perd son sens spécial et est interprété tel quel
  \  en fin de ligne, signifie que la commande continue à la ligne suivante
  ;  séparateur de commandes. Il permet de donner plusieurs commandes en une
     seule fois.
  &  permet d'exécuter la commande en arrière plan
  #  délimiteur de commentaire
  ?  représente un caractère quelconque dans un nom de fichier
  |  tube ou pipe. Il sépare deux commandes. Les sorties de la première sont
     dirigées sur les entrées de la seconde.

  && Séparateur de commandes. La commande suivant && ne s'exécute que si la
     précédente a réussi (status ou exit value nul)
  || idem si la commande a échoué (status ou exit value non nul)


 Sous UNIX vous avez accès à différents langages de commandes appelés shell
 notamment le Bourne shell (sh), le C shell (csh), et le Korn shell (ksh)
 Nous présenterons ici le Bourne shell et le Korn shell.
 
 ksh reprend toutes les fonctionnalités de sh plus certaines de csh.

1. Connexion

   Attention! UNIX est sensible aux minuscules et majuscules. Tenez en
   compte quand vous donnez votre loginname et password. La correction
   d'un caractère se fait soit par la touche DEL soit par CTRL-H. 
   Avec telnet, il faut utiliser CTRL-H.
exit
permet de se déconnecter. (sh ksh)

CTRL D permet de se déconnecter si ignoreeof n'est pas validé.
(set -o ignoreeof pour le valider)
yppasswd
yppasswd permet de changer votre mot de passe.

Vous devez obligatoirement changer ce mot de passe à la première connexion.
id
id donne votre identité ce qui donnera par exemple
      onzon> id
      uid=6003(test) gid=600(criter)
who am i
who am i vous donnera l'utilisateur, le terminal et la date du début de la session, par exemple
      
      onzon> who am i
      berlier     ttyp3       Nov 21 09:52
finger berlier
finger donne des informations sur le "username" berlier, par exemple
 onzon> finger berlier
 Login name: berlier                     In real life: Jean Marc BERLIER
 Directory: /home/criter/berlier         Shell: /bin/ksh
 On since Nov 21 08:55:36
    on ttyp0 from 161.3.1.58
 No Plan.
Si un fichier .plan existe dans le répertoire de berlier, son contenu est affiché.
finger
finger donne des informations sur tous les utilisateurs actuels
finger @stroph
donne des informations sur les utilisateurs de la machine "stroph"
users
who
w
donne des informations sur les utilisateurs connectés
tset -I -Q
permet au système de reconnaitre votre terminal.
ps
ps -l
ps -u toto
ps donne tous les "process" de l'utilisateur toto.

2.les fichiers et les répertoires

   Les noms de fichiers comportent n'importe quels caractères sauf /
   qui indique le passage au répertoire. Il est conseillé d'éviter les
   métacaractères dans les noms de fichiers.

   Si vous avez des fichiers en provenance de VMS dont le nom comporte
   un point virgule, vous pouvez encadrer le nom du fichier par des
   guillements pour le renommer par exemple:

   mv "ED.TXT;1" ed.txt

   La syntaxe d'un nom de fichier est:  /répertoire1/répertoire2/fichier
   Si le nom du fichier commence par un point, il ne sera pas dans les
   listes fournies par la commande ls. Ce sera un fichier caché.
   Exemple de fichiers cachés:
    .login   personnalisation de l'environnement C shell au login
    .cshrc   personnalisation du C shell au lancement du shell
    .profile personnalisation du Bourne shell et Korn shell au login

   .. indique le répertoire au dessus
   .  indique le répertoire courant
   ~pierrot indique le répertoire d'accueil de l'utlisateur pierrot

   Le nombre de fichiers et l'espace disque utilisés sont limités par
   des quotas.

   /usr/sbin/vquota
    vous donne les quantités utilisées et les limites.

2.1 Changement de répertoire

 
   cd doc
    Change Directory vous place dans le sous-répertoire doc
 
   cd
   cd $home
   cd ~/ 
    vous replace dans votre répertoire d'accueil (ksh).

   cd ..
    vous place dans le répertoire au dessus

   cd $OLDPWD
    vous place dans le répertoire précédemment accédé par cd
   
   voir aussi la variable CDPATH qui permet de retouver un répertoire
   dans une hiérarchie de répertoire par exemple:

   Si il existe un répertoire ~/comp/fortran, si on a défini CDPATH
   par CDPATH=~/bin:~/comp, alors cd fortran, nous placera dans le
   répertoire fortran trouvé dans les répertoires donnés dans CDPATH

   pwd    
    vous donne le répertoire courant à partir de la racine (Print Working
    Directory)

2.3 recherche de fichiers

  find  ~/ -name '*.c' -print
    donnera la liste de tous vos fichiers *.c
    find permet aussi d'exécuter des commandes (-exec)

  find ~/ -name 'joe*' -exec file {} \;
    recherchera tous les fichiers joe* et donnera les informations relatives
    attention le blanc entre } et \ est obligatoire.

  find ~/ -mtime +5 -print
    donnera le nom de tous les fichiers modifiés depuis plus de 5 jours
    -atime pour les fichiers accèdés  
   
  find ~/ -mtime -1 -print
    donne la liste des fichiers modifiés depuis moins d'un jour

2.4 copie de fichiers

  cp fichier_source fichier_destination
    si le fichier destination existe, il est écrasé.

  cp -i fichier_source fichier_destination
    si le fichier destination existe, il faudra confirmer 

  cp `ls -A` ./toto
    copie dans le sous répertoire toto tous les fichiers listés par la
    commande ls -A

  cp -p fichier_source fichier_destination
    copie en conservant les dates de mofifications et accès, le propriétaire
    et les protections.

  mv ancien_fichier nouveau_fichier
    renomme le fichier. Si nouveau_fichier existe, il est écrasé.
 
  mv -i ancien_fichier nouveau_fichier
    le fichier est écrasé après confirmation

  mv -- -fic afic
    permet de renommer le fichier -fic en afic

2.5 destruction de fichiers

  rm -i *.c
    destruction avec confirmation des fichiers *.c
  rm -ie *.c
    destruction après confirmation avec message si le fichier est supprimé
   
   répondre y ou o pour détruire le fichier selon la valeur de la variable
   LANG. Par défaut cette variable n'est pas positionné, il faut donc
   répondre y

2.6 Recherche d'expression dans un ou des fichiers

  grep  texte mon.fichier.txt
    recherche et affiche les lignes contenant "texte" dans le fichier
    "mon.fichier.txt"
 
  grep -n '^Le' mon.fichier.txt
    recherche et affiche les lignes commençant par "Le" en numérotant les
    lignes

  grep -ni '^Le' mon.fichier.txt
    idem mais sans tenir compte des majuscules et minuscules

2.7 Visualiser un fichier

   page mon.fichier
   more mon.fichier
      more et page ne savent pas traiter les c. 8 bits si LANG n'est pas 
      défini setenv LANG fr_FR.ISO8859-1 (csh)  
             LANG=fr_FR.ISO8859-1;export LANG (sh ksh)
      Vous pouvez utiliser les procédures morefr et viewfr pour lancer
      more et view avec LANG défini correctement.
   
      barre d'espacement passe à l'écran suivant
      q quitte more
      h donne une aide sur more
      g affiche à partir de la ligne 1
      G affiche les dernières lignes
      /hello affiche à partir de la ligne contenant hello
      n affiche à partir de la prochaine ligen contenant hello

   view mon.fichier    (fait appel à VI, :q pour sortir)
   cat mon.fichier
   cat -n mon.fichier
     numérote les lignes
   
   pg mon.fichier
    
   od -a mon.fichier   (Octal Dump en ASCII)
   od -h mon.fichier   (Octal Dump en hexadécimal)
    Attention! à l'inversion la chaine de caractères 45 se dumpe 3534


 onzon> more e.txt
 AZERTY
 123456
 onzon> od -h e.txt
 0000000  5a41 5245 5954 310a 3332 3534 0036
 0000015
 onzon> od -cx e.txt
 0000000    A   Z   E   R   T   Y  \n   1   2   3   4   5   6
             5a41    5245    5954    310a    3332    3534    0036
 0000015
 onzon>


   file nom.fichier
     file donne à quel type de fichier appartient le fichier


 onzon.berlier> file .profile
 .profile:       commands text

 onzon.berlier> file /usr/local/bin/joe
 /usr/local/bin/joe:     COFF format alpha dynamically linked, demand paged
 executable or object module stripped - version 3.11-8


    diff fic1 fic2
     donne les différences entre les fichiers fic1 et fic2
     < indique les lignes du 1er fichier
     > indique les lignes du 2ième fichier

2.7 Compression et décompression de fichiers

    compress fichier

    uncompress fichier.Z

    zcat vtmail_1_1.tar.Z | tar xvf -
      décompresse le fichier vtmail_1_1.tar.Z puis désarchive le fichier
      ainsi décompressé.

    voir aussi gzip

2.8 Création et destruction de répertoire

    mkdir jmb
     crée un répertoire jmb
    rmdir jmb
     détruit le répertoire jmb. Le répertoire doit être vide.
    rm -r jmb
     détruit le répertoire jmb et tout son contenu.

2.9 Liste des répertoires

    du
     donne tous les répertoires avec leur taille en bloc de 512 octets
    du -a
     donne la taille de toute l'arborescence
    du -as
     donne la taille totale
 
    ls 
     donne la liste des fichiers sauf ceux commençant par un point
    ls -sa
     donne la taille en octets (size), le nom de tous (all) les fichiers
    ls doc/*.{doc,txt}
     donne les noms de tous les fichiers .doc et .txt du répertoire doc
    
    ls -al
     donne tous les noms de fichiers en format détaillé (long)
     le type d (directory) - (fichier ordinaire) l (lien symbolique)
     les protections (rwx rwx rwx) pour le propriétaire, le groupe, les autres
     le nombre de liens physiques
     le propriétaire
     le groupe
     la taille en octets
     le mois, le jour, l'heure de la dernière modification
     le nom

    ls -l | grep '^d'
     donne la liste des répertoires


   onzon> ls -l *.man
   -rw-r--r--   1 berlier  criter      9435 jan  9 16:08 ls.man
   -rw-r--r--   1 berlier  criter     11615 jan  9 14:12 tset.man


    ls -R
     donne la liste des fichiers du répertoire et des sous-répertoires

    ls -alt
     liste triée par date de dernière modification

    ls -talu
     liste triée par date du dernier accès aux fichiers

    ls -aF
     donne la liste de tous les fichiers avec leur type.
     / pour un répertoire
     * pour un fichier exécutable
     @ pour un fichier lien avec un autre (symbolic link)

    ls -d *
     donne la liste des fichiers que du répertoire courant

    ls ~berlier
     donne la liste des fichiers du répertoire d'accueil de berlier

   Caractères spéciaux pour ls

   *    les fichiers du répertoire courant et des répertoires immédiatemment en 
        dessous

   .    les fichiers du répertoire courant

  *.*   les fichiers contenant au moins un point (sauf fichiers commençant
        par un point)

  *.com les fichiers dont le nom se termine par .com ayant éventuellement
        plusieurs points

  ?.com les fichiers ayant un caractère suivi de .com

  name[xyz]   les fichiers namex, namey, et namez

  name[a-z]   les fichiers namea, nameb, namec, ... namez
  name[a-z4]  les fichiers namea, nameb, namec, ... namez et name4

  name.{o,f}  les fichiers name.o et name.f

2.10 protection des fichiers et des répertoires

                     fichier         répertoire
    Read            lire            lire  
    Write           modifier        créer et supprimer des fichiers
    eXecute         exécuter        utilisable dans PATH
    
    Un fichier accessible en écriture peut être supprimé.

    umask 027
     cette commande définit un masque de protection par défaut lors de la 
     création des fichiers (à mettre dans .login  ou .profile par exemple)

     0 lecture, écriture, exécution par le propriétaire ou utilisateur
     2 lecture et exécution par les membres du groupe
     7 aucun accès pour les autres

     propriétaire  groupe     les autres
       user        group       others
  
      r w x         r - x      - - -               Read Write eXecute
      1 1 1         1 0 1      0 0 0                 permission  
        7             5          0               permission en octal
      0 0 0         0 1 0      1 1 1              masque en binaire
        0             2           7              masque en octal (umask)

    umask
     donne la valeur

    chmod 750 *.c
     change les permissions de tous les fichiers .c en donnant
     rwx pour le propriétaire r-x pour le groupe et rien pour les autres

    750 équivaut à rwxr-x---
    744 équivaut à rwxr--r--
    644 équivaut à rw-r--r--

    chmod u=rwx,g= v.log
     permet rwx à l'utilisateur et rien au groupe

    chmod o= v.log
     interdit tout accès aux autres sans modifier les autres permissions

    chmod u=rwx a.dat
     le fichier a.dat sera rwx par l'utilisateur (user). Les autres
     autorisations ne sont pas modifiées.

    Un fichier ne peut appartenir qu'à un seul groupe. Un utilisateur peut
    appartenir à plusieurs groupes. Ainsi les fichiers peuvent être partagés
    entre plusieurs utilisateurs.
    Quand le fichier est créé, il appartient au groupe attaché à
    l'utilisateur. Si ce dernier appartient à d'autres groupes, il peut
    changer le groupe d'appartenance de ses fichiers.

    groups
     donne les groupes aux quels appartient l'utilisateur

    chgrp nom_du_nouveau_groupe nom_du_fichier
     change de groupe le fichier

2.11 liens entre fichiers

    ln essai.txt essai
     crée un lien physique (hard link) essai donnant accès au fichier
     essai.txt
     augmente d'une unité le nombre de lien attaché au fichier
     si le fichier essai.txt est supprimé, les données sont toujours
     accessibles par essai
     essai.txt et essai doivent être dans le même file system
     Ce sont des fichiers et non des répertoires.
     

    ln -s essai.txt essai
     crée un lien symbolique (symbolic link) essai pointant sur le fichier
     essai.txt
     si le fichier essai.txt est supprimé, les données sont supprimées mais
     le lien symbolique susbsiste.
     Le lien symbolique existe tant qu'il n'a pas été explicitement
     supprimé par rm essai


    ls -li nom_de_fichier
     donne le nombre de liens et l'inode du fichier
    ls -li | grep "831 -"
     donnera tous les liens physiques (tous les fichiers ayant l'inode 831)

2.12 Quelques fichiers particuliers

    .cshrc puis .login
     s'exécute à la connexion (C shell)

    .cshrc 
     s'exécute au lancement du C shell

    .profile
     s'exécute à la connexion (Bourne shell et Korn shell)

    .kshrc
     s'exécute au login et à la création d'un sous shell (Korn shell) 
     uniquement si la variable ENV est définie dans .profile par exemple
     ENV=$HOME/.kshrc et export ENV
     Utiliser ce fichier pour rajouter vos alias, vos variables ...
     Par exemple, vous pouvez y rajouter
            set -o noclobber
            umask 077

     Au CRITeR, le fichier .profile définit la variable ENV. Vous utiliserez
     donc le fichier ~/.kshrc pour personnaliser votre environnement Korn
     Shell. 

    .logout 
     s'exécute à la déconnexion. (C shell) Il peut contenir par exemple clear
     qui effacera l'écran.

3 éditeurs de texte

   Plusieurs éditeurs de texte UNIX sont disponibles.

   VI sait à peu près traiter les caractères ISO-LATIN (ISO 8859)
   Il sait les visualiser mais gère mal le curseur.

   VI nom_de_fichier
   a ou i passe en mode Insertion et Escape en sort.
   Escape est obtenu par CTRL-3 sur les claviers VT300 (3 représente la
   touche contenant 3 et " ,il faut donc appuyer sur CTRL MAJ et cette touche)
   :q sort de VI

   EMACS 
   utilisable sur un terminal VT et sur un terminal X

   JOE 
   JOE est un éditeur de textes plein écran proche des
   éditeurs de texte existant sous DOS. Les séquences de touches rapellent
   celles de WordStar et de Turbo-C. JOE sait  traiter les
   caractères ISO-LATIN. Sur un terminal VT300 ou sur DECterm, les flèches
   et les touches "Page précéd" "Page suiv." sont utilisables.
   Pour en savoir plus, tapez "man joe" ou reportez-vous au paragraphe sur
   joe

   Attention! le traitement des caractères ISO-LATIN est pris en compte dans
              certaines commandes que si LANG est défini
              LANG=fr_FR.ISO8859-1
              Voir man locale
              Attention! aux effets inattendus.

  awk : quelques exemples
  
  awk -F: '{print length}' nom_de_fichier
   donnera la longueur de chaque enregistrement du fichier
  awk -F: '/valeur/{print $0}' mon_fichier
   donnera tous les enregistrements contenant "valeur"
  awk -F: '$4 ~ /51/ {print $0}' nom_de_fichier
   donnera tous les enregistrements contenant la valeur 51 dans le champ 4
   les champs étant séparés par :
  awk -F: '{print NR,NF}' nom_de_fichier
   donnera le numéro de l'enregistrement et le nombre de champs
  awk -F: '{print NR,$1}' nom_de_fichier
   donnera le numéro de l'enregistrement et la valeur du 1er champ

  ed
   éditeur ligne
   Pour éditer le fichier monfic.txt en utilisant le point d'interrogation
   comme prompt, remplacer toto par titi à la ligne 4, sauvegarder et sortir

   ed -p? monfic.txt
   4s/toto/titi/
   w
   q

4 Impression

   Voici les imprimantes accessibles au CRITeR
   lps17 : imprimante postscript (17 pages par minute, recto-verso, 20Mo)

   lpr -Plps17 .cshrc

      imprimera le fichier .cshrc sur l'imprimante lps17
   -r détruira le fichier après impression
   -p imprimera un entête sur chaque page comportant la date, le nom du
      fichier et le numéro de la page
   -f pour prendre en compte les caractères de contrôle d'avance du papier
      de FORTRAN
   -w132 pour obtenir 132 c. par lignes passant en mode paysage

   les messages d'erreur postscript sont renvoyés par messagerie

   lpq
   lpq -Plps17

      donne la liste des jobs en attente sur l'imprimante lps17
      en effet, l'imprimante lps17 est l'imprimante par défaut.

   Pour changer l'imprimante par défaut, rajoutez dans le fichier .profile
        PRINTER=ln03r
        export PRINTER

   lprm 111
    
      annule la demande d'impression 111 en attente.

   lprm -
      annule toutes les demandes d'impression de l'utilisateur

   /usr/sbin/lpc status ln03r
    donne l'état de l'imprimante ln03r

   /usr/sbin/lpc status
    donne l'état de toutes les imprimantes


 procédures définies par le CRITeR :

   lap2rv texte.txt
        
      imprimera le fichier texte.txt sur l'imprimante lps17 en recto-verso
      à raison de deux pages par feuille. Si le fichier est un fichier
      postscript, les commandes postscript seront imprimées.

   lal2rv texte.txt

      idem en mode paysage. Idéal pour les lignes de 132 c.

   lpp2rv fichier.ps

      Laser Postscript Portrait 2 pages par feuille Recto Verso
      imprimera le fichier postscript sur l'imprimante lps17 en recto-verso
      à raison de deux pages par feuille en mode portrait.

5 langage de commandes ou shell

   Sous UNIX, plusieurs langages de commandes sont utilisables. Au CRITeR
   par défaut, le langage de commande actif est le Korn shell.

   Pour connaître le shell actif
        echo $SHELL
   vous obtiendrez sh pour Bourne shell
                   Rsh pour Restricted Bourne shell
                   csh pour C shell
                   ksh pour Korn shell
                   etc...
   Pour changer de shell de façon provisoire, tapez le nom du shell choisi.
   Ensuite exit ou CTRL D revient au shell par défaut.

   Pour changer de façon définitive, utilisez chsh puis il faut vous
   déconnecter puis vous reconnecter


   % est le prompt habituel du C shell
   $ est le prompt habituel du Bourne shell et du Korn shell

   source .cshrc
    permet d'exécuter .cshrc après modification par exemple (csh)

   . .profile
    permet d'exécuter .profile après modification par exemple (sh ksh)

   ulimit -a
    donne toutes les limites définies

   ulimit -c 0
    limite la taille des fichiers core à zéro. Un fichier core se crée quand
    un programme se termine mal. Il contient une image mémoire (dump).

5.1 Variables du shell

   Elles sont définies dans .cshrc et .login pour C shell
                       dans .profile pour Bourne shell et Korn shell
   en C shell
   par setenv pour les variables d'environnement
   par set pour les variables du shell

   exemple: setenv LANG fr_FR.ISO8859-1 

   en Bourne shell et Korn shell
   par =
   par export

   exemple: export LANG=fr_FR.ISO8859-1 

   HOME     répertoire d'accueil
   SHELL    le shell utilisé
   USER     l'utilisateur
   PATH     donne les répertoires dans lesquels le système doit chercher
            les programmes correspondants aux commandes à exécuter. 
   MAIL     le répertoire contenant les messages
   TERM     le type du terminal (il doit être décrit dans /etc/termcap)

   printenv 
      donne la liste des variables d'environnement

 onzon> printenv
 PATH=.:/usr/bin/:/usr/bin/X11:/usr/bin/mh:/usr/local/bin:/usr/local/bin/X11
 LOGNAME=berlier
 PRINTER=lps17
 GWSOURCE=telnet
 USER=berlier
 SHELL=/bin/ksh
 HOME=/home/criter/berlier
 TERM=vt300
 PWD=/home/criter/berlier

   variable=valeur
      affecte la valeur à la variable.

   export variable=valeur
      affecte la valeur à la variable et exporte sa valeur aux processus
      fils. Attention! il ne faut pas d'espace autour du signe égale.

   unset variable
      supprime la variable

   DISPLAY=161.3.1.58:0
   export DISPLAY
 
   export DISPLAY=161.3.1.58:0
      définit l'affichage pour les applications X-window
   unset DISPLAY


   set
      donne les variables définies

   set -o noclobber
      modifie le comportement des redirections (voir plus loin)
  

   set -v
      affiche les commandes avant de les exécuter
   set +v
      désactive la fonction v

   set -b
       autorise l'affichage des messages signalant la fin d'un traitement
       effectué en arrière plan. (voir & en fin de commande)

   PS1="$USER>"
       redéfinit le prompt en donnant l'utilisateur suivi de >

   TIMEOUT=1
       déconnexion après une minute d'inactivité
 

   quelques variables utilisables

   $?
   pour tester la fin d'une exécution,  est différent de zéro en cas d'erreur 
   et vaut zéro sinon
 
   PWD
   la variable PWD donne le répertoire courant
   OLDPWD
   la variable OLDPWD donne le dernier répertoire accèdé
   
   $#
   donne le nombre de paramètres
   $1
   donne le 1er paramètre

5.2 alias

   alias
      permet de définir une commande

   alias nom_alias=texte_alias
      définit un alias. Par exemple 
   alias joe='joe -asis -baud 9600'
      redéfinit joe
   alias dir='ls -l | more'
      définit dir  
   alias back='cd $OLDPWD;pwd'  
      définit back qui ramènera dans le répertoire précédemment utilisé.

   unalias nom_alias
      détruit l'alias

5.3 Pour écrire une procédure

       #!/bin/ksh
       set -v
       echo $PWD
       ...
       exit

   echo "Exécution de $0 avec $1 comme 1er paramètre"
   $0 représente le nom de la procédure
   $1 le premier argument
    
   pour tester de l'existence d'un fichier
   if test -f fichier 
   then
   else
   fi

   pour écrire un message sur stderr
   echo "message " 1<&2

   exemple: #!/usr/bin/ksh
            set -v
            echo "Exécution de $0 avec $1 comme 1er paramètre"
            pwd
            echo $?
            if test "$1" = ""
            then
             exit
            fi
            if test -f  $1
            then
             echo "Le fichier $1 existe"
            else
             echo "Le fichier $1 n'existe pas"
            fi
            set +v
            exit

5.4 Pour exécuter une procédure

   chmod 755 laprocedure
   chmod 744 laprocedure
      pour se donner le droit de l'exécuter
   
   laprocedure arg1 arg2
      pour lancer son exécution avec deux arguments

   laprocedure arg1 arg2 <entree.in >sortie.log &
      pour exécuter en arrière plan

6 redirection des entrée-sortie

 set -o noclobber  (ksh) 
 le shell avertit l'utilisateur que le fichier cible de la redirection
 existe déjà et stoppe l'exécution.

 0 stdin   standard input
 1 stdout  standard output
 2 stderr  standard error

 >   redirection de la sortie stdout
 >>  redirection de stdout en rallongeant le fichier

 <   redirection de l'entrée stdin

 << xxx redirection des entrées jusqu'à une ligne contenant xxx
      
 Cette redirection permet de lire des données incluses dans le fichier de
 commandes lui-même. Par exemple, le fichier shell nommé commande contenant
        
        echo -n "Nombre de lignes :"
        wc -l < commande
        echo -n "Nombres de lignes jusqu'à xxx :"
        wc -l << xxx
        ligne 1
        ligne 2
        xxx
        echo "fin du test"

 1> redirection de stdin
 2> redirection de stderr

 > test.log 2<&1  redirection de stdin et stderr dans test.log

 |   redirection de stdout sur stdin d'une autre commande (pipe line)

7 Rappel et édition des commandes

 La commande history permet de retouver les dernières commandes tapées. 
 Voir aussi la variable HISTSIZE (HISTSIZE=20 permettra à history de
 retrouver les 20 dernières commandes)

  history
   donne la liste des dernières commandes. Cette commande utilise le fichier
   .sh_history dans votre répertoire d'accueil.


  HISTSIZE=40
   pour porter à 40 le nombre de commandes sauvegardées

  r 5
   pour exécuter la 5ième commande

   voir fc (fix command) pour éditer les commandes sauvegardées

  set -o emacs
   permet au ksh de rappeller et de modifier les dernières commandes et
   ce avec les flèches. CTRL a début de ligne. CTRL e fin de ligne. 
   CTRL c abandon de la commande affichée.

8 Compléter le nom de fichier

    Pour éviter de taper les noms de fichiers en entier, on peut utiliser
    la touche Escape deux fois de suite. Le système complètera le nom du
    fichier jusqu'à la prochaine ambiguïté.

9 Aide en ligne

   help
 
   whatis mail
   man -f mail
    affiche l'entête du manuel concernant mail

    onzon> whatis mail
    mail, binmail (1)       - Sends and displays messages
    mailx, Mail (1)         - Sends and receives mail
 
   man -k mail
   apropos mail
    pour retrouver où l'on parle de mail

    onzon> man -k mail
    ali (1)                 - list mail aliases
    aliases (4)             - Contains alias definitions for the sendmail
    program
    biff (1)                - Notifies users when mail arrives
    etc...

    vacation (1)            - Informs senders of mail that recipient is absent
    xbiff (1X)              - mailbox flag for X
    xmh (1X)                - send and read mail with an X interface to MH

   
   man 1 biff
    permet de retrouver les informations sur biff dans le manuel 1

   man mailx
    pour afficher le texte décrivant la commande mailx. Au prompt stdin, on
    peut taper /truc pour rechercher le texte "truc" comme pour la commande
    more

   Les pages du "man" sont stockées dans plusieurs répertoires /usr/man/man1
   à /usr/man/man8. (Voir nroff -man pour le formatage des manuels)
   
   Sur un terminal X, on peut utiliser aussi xman et dxbook.

10 Quelques trucs et utilitaires

 bc 
  Un programme intéractif permettant quelques calculs
  Par exemple, pour calculer (5+6)/2
        bc
        scale=2
        (5+6)/2
        CTRL D
  Par exemple, pour convertir en hexadécimal
        bc
        obase=16
        255
        CTRL D

 which joe
  donne la localisation de la commande joe en tenant compte du PATH.
  which ne tient pas compte des alias. (Voir aussi whereis)

11 Compilation

11.1 pascal

 pc 
 DEC compilateur pascal. pc lance le préprocesseur, le compilateur pascal et
 l'éditeur de liens (linker)
 Le programme PASCAL est stocké dans un fichier .p .P .pas ou .PAS
 variable d'environnement DECPASCAL

 pc -c -V -O0 arc.pas
  -c compilation seulement du programme arc.pas
  -V génération d'un listing fichier .l
  -O0 compilation sans optimisation

 pc -C all -usage all -o arc.exe arc.pas
 compilation et link du programme arc.pas 
  -o arc.exe Le fichier exécutable sera arc.exe 
  -C all     avec checking
  -usage all avec tous les messages d'informations

11.2 fortran 77

 f77
 DEC fortran 77. 
 Le programme FORTRAN est stocké dans un fichier de suffixe .f .for ou .FOR

 f77 -o foo ax.f bx.f cx.f
  compilation de ax.f, bx.f et cx.f avec édition de liens pour obtenir
  l'exécutable foo

  -C pour tester les débordements de tableaux
  -check overflow
  -check underflow
  -V pour générer un listing .l

 fsplit pour éclater dans des fichiers différents les SUBROUTINE et FUNCTION

 more /usr/lib/cmplrs/fort/decfortran.hlp

 Voir auusi man f77 fsplit fpr

11.3 Utilitaires

 Pour gérer vos fichiers sources, vous pouvez utiliser make ou sccs.
 Pour déboguer, vous pouvez utiliser dbx
 Pour analyser les performances, voir prof (profiling)

11.4 Librairies

 Pour utiliser des librairies, voir ar
 
 ar cr plot.o start.o stop.o
  créera la librairie plot.a 
 ar t plot.a
  listera le contenu
 ranlib plot.a
  pour créer les index
 cc prog.c -lplot
  pour utiliser

12 Exécution d'un programme

 arc.exe 
  exécution en intéractif (foreground). On peut interrompre par CTRL C. On
  peut suspendre l'exécution par CTRL Z et relancer par fg ou relancer en 
  arrière plan par bg.

 arc.exe &
  exécution en arrière plan (background).
  [no_job] no_pid

 arc.exe >& arc.log <arc.in &
  exécution en arrière plan (background) avec
  sortie des erreurs et des résultats dans arc.log  ( >& est du csh)
  entrée des données à partir du fichier arc.in
  On peut interrompre par kill. kill %no_job ou par kill no_pid

 jobs
 jobs -l
  donne la liste de jobs en arrière plan
  Attention! les jobs d'arrière plan doivent être finis (stopped) à la 
             déconnexion sinon ils restent de présents et ne peuvent plus être
             traités comme des jobs d'arrière plan normaux. Pour obtenir les
             caractéristiques des ces jobs, on peut 
             ps aux | grep username

 ps -p no_pid

 at
 at permet d'exécuter une procédure ou shell script à une date donnée en
 dehors de toute connexion. 

 at -c 
 pour lancer un C shell ou utiliser les redirections du C shell
 at -k
 pour lancer un Korn shell



 Par exemple, pour lancer l'exécution de write.csh à 15H30

 > at -c 1530
 write.csh 
 CTRL D
 job berlier.790266600.a at Mon Jan 16 15:30:00 1995
 pour lancer e.csh à 16H30

 >at -c 16:30 e.csh
 le compte-rendu vous sera adressé par la messagerie électronique

 > at -c 11:01
 arc.exe >& arc.log1 < arc.in
 job berlier.790423260.f at Wed Jan 18 11:01:00 1995
 lance à 11:01 arc.exe. Le compte-rendu sera dans arc.log1


 at -c now
  lance maintenant

 at -l
  donne la liste des jobs en attente
 ps
  donne tous vos process actifs

 at -r 
  détruit un job en attente
 onzon> at -l
 berlier.790267080.a     Mon Jan 16 15:38:00 1995
 onzon> at -r berlier.790267080.a
 at file: berlier.790267080.a deleted
 onzon> at -l

 onzon> at -c -q b
 arc.exe >& arc.log < arc.in
 CTRL D
 job berlier.790424269.b at Wed Jan 18 11:17:49 1995
 
 batch permet de lancer l'exécution dès que la charge de la machine le
 permet. (batch fait la même chose mais en utilisant Bourne shell)

13 Messagerie

13.1 Conversation en direct

 talk ou write pour dialoguer avec un utilisateur connecté 

 talk
 write paul
 texte du message à envoyer à Paul
 CTRL D

 mesg n
  pour ne pas être dérangé par des appels talk ou write

13.2 messagerie

 attention! ils existent de multiples façons d'accéder à la messagerie. Toutes
            n'utilisent pas les mêmes fichiers.

 Nous ne présentons ici  mailx l'agent utilisateur de messagerie livré sur
 tous les systèmes UNIX. Ils en existent d'autres plus conviviaux. Notamment
 elm, vtmail pour les terminaux alphanumériques (VT, minitel ...)
 exmh, dxmail pour les terminaux X-window.
 Dès que ces produits seront disponibles, vous serez informés.

13.2.1 mailx ou Mail

 pour utiliser la messagerie électronique: Mail ou mailx

 a) envoi de message
   ----------------

 mailx berlier < mon_message.txt
 envoie à berlier le fichier mon_message.txt

 mailx berlier@univ-st-etienne.fr

 ou pour un utilisateur local

 mailx berlier
 la dernière ligne du texte contient un point ou CTRL D

 ~x           sortie sans sauvegarder ni envoyer le message composé
 ~q           sortie sans envoyer le message mais sauvé dans dead.letter
 ~d           ajoute le contenu du fichier dead.letter
 ~r mon.texte ajoute le contenu du fichier mon.texte
 ~m 2         ajoute le contenu du message numéro 2 
 ~v           appelle l'éditeur défini par set VISUAL=  (vi par défaut)
              pour composer le message
 ~e           appelle l'éditeur défini par EDITOR=
              Après avoir composer le message, il faut sortir de l' éditeur
              en sauvegardant le texte. On obtient (continue). Tapez alors
              CTRL d pour envoyer le message ou ~x pour ne pas l'envoyer
 ~w mon.mes   écrit le message dans le fichier mon.mes
 ~?           donne la liste des commandes accessibles en cours de
              composition du message

 mailx durand dupont
  permet d'envoyer le même message à durand et dupond

 b) lecture de message
    ------------------

 mailx

 >U  1 Jean.Marc.Berlie  Tue Feb 14 14:36  19/967  "le sujet"
  N  2 Jean.Marc.Berlie  Tue Feb 14 14:36  20/977  "le sujet"

 > indique le message courant

 N pour New
 U pour Unread
 
 le numéro, l'expéditeur, la date, le nombre de lignes/caractères, le sujet
 
 ? est le prompt de mailx
 ? help      donne une aide
 ? h         redonne la liste des messages
 ? f *       redonne la liste des messages
 ? 5         permet d'afficher le message 5
 ? v 5       permet d'afficher le message 5 avec l'éditeur (set VISUAL) ou VI
             attention! les modifications seront sauvegardées.
 ? mo 5      idem avec more
 ? .         permet de relire le message courant
 ? <RETURN>  affiche le message suivant
 ? | 5 lpr   imprime le message 5

 ? d         détruit le message courant
 ? d 7 9     détruit les messages 7 et 9
 ? d 7-11    détruit les messages 7, 8, 9, 10, et 11
 ? q         quitte mailx et stockent les messages lus dans le fichier mbox
             Ce fichier mbox est lisible par more, cat ou un éditeur de texte
 ? x         quitte mailx sans modifier la boîte aux lettres. Les messages
             lus ou détruits restent

 ? R         permet de répondre à l'expéditeur
 ? r         permet de répondre à l'expéditeur et aux autres destinataires

 ? m destinataire permet de composer et d'envoyer un message
                  puis ~m 3 permet d'inclure le message 3 et ainsi faire
                  suivre (forward) le message 3.

 ? w mon.fic permet de sauvegarder le message courant dans le fichier mon.fic
             sans les entêtes. Si le fichier existe, il est rallongé. Par
             défaut, le message le plus récent est placé au début.
 ? s mon.fic permet de sauvegarder le message courant dans le fichier mon.fic. 
             Si le fichier mon.fic existe, le fichier est rallongé.
             Cette commande permet ainsi de stocker les messages dans des
             dossiers différents.

 ? folder mbox  permet d'aller lire les messages stockés dans mbox
 ? folder image permet d'aller lire les messages stockés dans image
 ? folder       donne le nom du dossier en cours

 mailx -f mbox
  permet de lire les messages du dossier mbox

 Pour personnaliser la messagerie, le fichier .mailrc dans le répertoire
 d'accueil peut contenir par exemple:

 set askcc        
  pour obtenir le prompt Cc: (carbon copy) à chaque envoi de message

 set EDITOR=/usr/local/bin/joe
  pour utiliser joe quand on tape ~e 
 set folder=mail_folder
  pour définir le répertoire (ici mail_folder) qui contiendra les fichiers
  correspondant à chaque folder (dossier)
 set append
  pour mettre à la fin, les messages les plus récents (voir s et w)

13.2.2 utilitaires

 Votre adresse est votre username suivi de @criter.univ-st-etienne.fr 
 par exemple: berlier@criter.univ-st-etienne.fr

 Le mot criter disparaîtra dès que la machine VMS sera arrétée. Les deux 
 formes d'adresses seront valides.

 biff y
 Cette commande permet à l'utilisateur d'être averti quand un message arrive.
 (à mettre dans .profile). Les premières lignes du message sont affichées.
 Voir aussi MAILCHECK dans man ksh

 from
 cette commande d'obtenir l'entête des messages arrivés

13.2.3 elm

 elm est un agent de messagerie plein écran pour terminaux alphanumériques
 Une aide en ligne est accessible.

 elm crée un répertoire .elm pour stocker les personnalisations (elmrc) et
 les fichiers alias.
 elm crée un réperoire Mail pour stocker les dossiers (folder) de la 
 messagerie, un fichier par dossier.

 elm -z
  permet d'activer elm que si des messages attendent

 Quelques commandes utiles

 o définir les options de elm
    par exemple:
    E)ditor (primary)    : /usr/local/bin/joe -nobackup
    P)rint mail using    : /usr/local/bin/lap2rv %s
    U)ser level          : Intermediate User

 p imprimer le message courant ou les messages marqués (tagged)

 c changer de dossier. Il faut donner le nom du dossier précédé de =
 !ls ~/Mail donne la liste des dossiers

 f faire suivre un message (forward)

 > sauvegarde le message courant dans le dossier donné

14 Réseau

 ruptime
  donne la liste des machines locales disponibles avec la charge

 onzon> ruptime
 cisrs1      up 18+17:21,     0 users,  load 0,01, 0,02, 0,03
 imars1      up 48+19:01,     0 users,  load 0,03, 0,04, 0,05 
 imars2      up 38+00:56,     0 users,  load 0,01, 0,02, 0,03
 nqa01c40f   up  4+19:22,     0 users,  load 0,00, 0,00, 0,00

 remote login
 rlogin imars1
  permet de se connecter à la machine imars1

 remote copy
 rcp
  permet de copier des fichiers d'une machines à une autre

 Connecté à une machine quelconque, la commande suivante permet de copier
 le fichier login.txt dans le répertoire d'accueil sur onzon
        rcp login.txt onzon:login.txt

 remote shell
 rsh onzon "ls -l"
  permet d'aller exécuter sur la machine crique la commande ls -l et
  d'obtenir la liste à l'écran
 rsh imars1 "cat monfichier" | lpr
  permet d'imprimer localement le fichier monfichier existant sur imars1


 rlogin, rcp et rsh nécessitent une autorisation sur la machine
 distante (fichier.rhosts par exemple)

15 Outils Internet

 ftp : File transfer Protocol
 permet de transferrer des fichiers depuis ou vers une autre machine

 ftp ftp.uni-st-etienne.fr

  get nom_de_fichier             pour récupérer un fichier
  get nom_de_fichier /dev/tty    pour visualiser le fichier
  put nom_de_fichier             pour expédier un fichier
  cd réperoire                   pour changer de répertoire
  pwd                            pour connaitre le répertoire courant
  binary                         pour effecter un transfert binaire
  hash                           pour visualiser le transfert
  bye                            pour quitter
  mget *                         pour tout récupérer
  prompt                         pour désactiver le prompt

 ftp anonyme lorsqu'on utilise anonymous comme username


 telnet crique.uni-st-etienne.fr
 permet une connexion intéractive à une autre machine
 au prompt telnet>
                  quit sort de telnet
                  open permet d'ouvrir une session
                  ?    donne une aide
                  CTRL } permet d'obtenir le prompt telnet>
                  le caractère d'échappement ^] s'obtient par CTRL (
                  retour à la machine connectée par la touche RETURN

16 X-windows

 Sur les serveurs du CRITeR, vous trouverez DEC-windows basé sur Motif et X11
 avec un certain nombre d'outils directement dans les menus proposés.

 Sur les stations Common Desktop Environment sera installé. CDE ne sera
 pas accessible à partir des terminaux X.

 D'autres outils sont installés.

 Pour afficher une application X à partir d'une session telnet, il faut
 taper:

 export DISPLAY=161.3.x.y:0    

 puis 
 
 xman      &  pour un accès au man en X
 dxvdoc    &  pour CDA viewer (nécessite X display postscript)
 dxbook    &  pour BookReader 
    
 netscape pour se connecter au serveur WEB


 Si vous utilisez l'interface Common Desktop Environment, les fichiers de
 configurations sont créées dans le fichier .dtprofile et le répertoire .dt
 /usr/dt/bin contient les exécutables

17 joe

 Vous trouverez ci après un petit descriptif non exhaustif des possiblités
 de joe.

 Dans ce qui suit le signe ^ correspond à la touche Ctrl (control)
 ^B correspond donc à CTRL B

 Si joe se termine mal. Il y a création d'un fichier DEADJOE qui contiendra
 votre fichier.

 Déplacement du curseur
 ----------------------       
 ^B  ou flèche gauche   : left (Backward)
 ^F  ou flèche droite   : right (Forward) 
 ^P  ou flèche en haut  : up   
 ^N  ou flèche en bas   : down 

 ^U  ou touche Préc.    : prev. screen  
 ^V  ou touche Suiv.    : next screen  

 ^Z : previous word 
 ^X : next word     

 ^A :  begin of line 
 ^E :  end of line  

 ^KU : top of file
 ^KV : end of file
 ^KL : to line No.

 Recherche et substitution de chaîne de carctères
 ------------------------------------------------
 ^KF : find text 
       permet de chercher une chaîne de caractères mais aussi de la remplacer 
       par une autre chaîne. En répondant R, chaque remplacement devra être
       confirmé. Répondre r, le remplacement est automatique jusqu'à la fin
       du fichier.

       \^to  recherche to en début de ligne
       \$to  recherche to en fin de ligne

 ^L  : find text
       recherche le texte défini par ^KF
       pour rechercher \, donnez \\. 

 Sortie
 ------
 ^KD : save
       sauvegarde sans sortir

 ^KX : save
       sauvegarde et sort.

 ^C  : abort
       sort sans sauvegarder

 Bloc
 ----
 ^KB : begin 
       définit le début d'un bloc
 ^KK : end
       définit la fin du bloc. Le bloc ainsi sélectionné passe en inversion
       vidéo
 ^KM : move
       déplace le bloc à la position courante du curseur
 ^KC : copy
       duplique le bloc à la position courante du curseur
 ^KW : file
       écrit le bloc dans un fichier
 ^KY : delete
       détruit le bloc

 destruction
 -----------
 ^D ou touche delete  : char           
      détruit le caractère précédent le curseur
 ^Y : line
      détruit la ligne courante
 ^W : >word
      détruit de la position du curseur à la fin du mot courant
 ^O : word <
      détruit de la position du curseur au début du mot
 ^J : >line
      détruit de la position du curseur à la fin de ligne
 ^_ : undo
      défait 
 ^^ : redo
      refait
     
 divers
 ------
 ^R : refresh
      réaffiche l'écran
 ^T : options
      affiche les options possibles (Overtype, Autoindent, Word Wrap)
      On choisit l'option en se positionnant dessus avec les flèches et
      en appuyant sur RETURN. On utilise ^C pour ne rien changer.
 ^KR : insert
      inserre un fichier à la position courante

 ^KH : help
       affiche une aide en ligne 

 fenêtre
 -------
 ^KO : Split the window in half
       coupe l'écran en deux fenêtres
 ^KE : Load file into window
       charge un fichier dans la fenêtre courante
 ^KN : Go to the window below             
       place le curseur dans la fenêtre suivante
 ^KP : Go to the window above
       place le curseur dans la fenêtre précédente
 ^C  : Eliminate the current window
       ferme la fenêtre courante 
 ^KG : Make current window bigger 
       augmente la taille de la fenêtre d'une ligne        
 ^KT : Make current window smaller 
       diminue la taille de la fenêtre d'une ligne        
 ^KI : Show all windows / Show one window
        montre toutes ou une fenêtre

 définition d'une macro et utilisation
 -------------------------------------
 ^K[ 0 : Record 
           début de l'enregistrement. Toutes les actions effectuées
           jusqu'à la fin de l'enregistrement sont mémorisées dans
           la macro 0. Dix macros sont définissables de 0 à 9

 ^K]   : Stop
           fin de l'enregistrement

 ^K 0  : Play            
           exécute la macro 0

 Special search sequences:
 -------------------------
     \^  \$  matches beg./end of line     \?     match any single char
     \<  \>  matches beg./end of word     \*     match 0 or more chars
     \c     matches balanced C expression \\     matches a \
     \[..]  matches one of a set          \n     matches a newline
     \+     matches 0 or more of the character which follows the \+

 Special replace sequences:
 --------------------------
     \&     replaced with text which matched search string
     \0 - 9 replaced with text which matched Nth \*, \?, \c, \+, or \[..]
     \\     replaced with \               \n     replaced with newline

18 Emacs

 Emacs est un éditeur de texte très puissant et très gourmand. Il est 
 utilisable :
 soit à partir d'un terminal X,
 soit à partir d'un terminal alphanumérique VT320, VT330 ...

 C- correspond à la touche Control
 M- correspond à la touche Escape

 Attention! Sur les VT320 et VT330, la gestion du flux de caractères est
            faite à partir de XON (CTRL q) et de XOFF (CTRL s). Donc
            CTRL s (C-s en notation emacs) n'est pas utilisable sous emacs
            Si vous l'utilisez par erreur, le voyant écran figé s'allume.
            Tapez CTRL q pour défiger l'écran.
            Vous pouvez utiliser la commande emacs M-x enable-flow-control
            qui permet de remplacer C-s par C-\ et C-q par C-^

  Quelques commandes emacs:
  -------------------------

  C-x C-c
    pour quitter emacs

  C-h t
    pour lancer un apprentissage (tutorial)

  Les touches Page Préc., Page Suiv. et les flèches fonctionnent