Petit Guide Unix


5. Les Commandes de Base


Najib TOUNSI ( ntounsi@emi.ac.ma)
Last update: Oct. 1998

PRECEDENT SOMMAIRE SUIVANT

5.1. Généralités

Rappelons qu'il existe deux types de commandes: les commandes shells (commandes internes) que le shell interprète directement comme la commande cd pwd ..., et les commandes UNIX (commandes externes) qui sont des fichiers exécutables (binaires ou scripts shell, voir section7) dont le shell lance l'exécution. Les commandes binaires se trouvent en générale sous les répertoires /bin ou /usr/bin. L'exemple suivant utilise la commande time qui imprime le temps d'exécution de la commande passée en argument. time existe en deux versions, commande shell et commande UNIX. La priorité est donnée à la commande interne. Pour la commande UNIX time il faut taper dans ce cas le chemin complet du fichier binaire concerné.

%time cp f1 f2
0.0u 0.5s 0.01 33% 0+168k 0+44io 111pf+0w

%/bin/time cp f1 f2
1.4 real 0.0 user 0.6 sys

Une commande UNIX, ainsi que ses arguments éventuels, sont donc des fichiers. Or un nom de fichiers est un chemin d'accès: par rapport au répertoire courant (chemin relatif, ne commençant pas par /) ou par rapport à la racine du système (chemin absolu, commençant par /). Ainsi

%com arg

est la demande d'exécution de com avec le fichier arg en paramètre. com, chemin relatif, est d'abord cherchée sous le répertoire courant ensuite sous le répertoire utilisateur bin (s'il existe). Sinon, dans la liste des répertoires mentionnés par la variable d'environnement PATH (attention, l'ordre de cette liste est significatif). De même, arg est cherché dans le répertoire courant. Deux éventualités peuvent se produire:

com: Command not found.

ou

arg: No such file or directory

Dans un cas, la commande n'a été trouvée ni dans le répertoire courant, ni dans la liste path. Soit elle n'existe pas (erreur de nom, ou fichier non encore créé), soit il manque un répertoire dans la liste path. Dans ce dernier cas, il faut taper le chemin complet ou rajouter le bon répertoire à la liste path.

Dans l'autre cas, le fichier argument n'a pas été trouvé dans le répertoire courant. Taper son chemin complet (relatif ou absolu), si on est sûr qu'il existe quelque part, ou corriger le nom.

% cp t ici
cp: t: No such file or directory
% cp /shems/users/roudies/t ici
% cp ../roudies/t here

% emacs ici
emacs: Command not found
% /usr/local/emacs ici

5.2. Les Principales Commandes

Il faut tout un ouvrage pour traiter les commandes UNIX. Nous nous contenterons ici d'en citer quelques unes des plus courantes (y compris des commandes internes shell), groupées par catégories, avec un rapide commentaire sur leur usage y compris quelques options. Ce sont principalement les commandes du chapitre 1 du manuel de référence UNIX. On peut (et doit) souvent faire man commande pour un bon usage des commandes UNIX.

Remarques: Dans la syntaxe des commandes nous indiquerons uniquement les arguments éventuels. Des options s'il y en a, viennent bien sûr avant ces argument. Des noms mnémoniques, assez courants pour certaines options et à retenir sont: -a (all) pour toutes les options, -l (long) pour l'affichage de toutes les informations (format long), -i (interactive) pour un mode confirmation et -r (récursif) pour un parcours récursif des sous répertoires.

Gestion de Session

Ce sont des commandes générales relatives à l'information et le suivi d'une session UNIX.

csh

Lancement de l'interprète de commande csh.

env

Liste des variables environnement.

id

Donne l'identité utilisateur sous UNIX: numéro et nom d'utilisateur et de groupe.

% id uid=272(tounsi) gid=20(other) groups=20(other)

login [utilisateur]

Lance une nouvelle session qui remplacera celle en cours. Avec un paramètre utilisateur, elle permet de basculer d'un utilisateur à un autre. Avec une option -p, les variables environnement existantes  sont préservées.

logname

Donne le nom (du login) de l'utilisateur.

pwd

(print working directory) Affiche le nom du répertoire courant .

script [fichier]

Enregistre dans le fichier donné en paramètre (défaut typescript) la trace <<script>> d'une nouvelle session shell lancée à cet effet. Tout ce qui sort sur l'écran du terminal est aussi enregistré dans ce fichier. script termine quand la session shell correspondante est terminée. Avec une option -a (append), le fichier script est rallongé. Voici un exemple, où on a utilisé un prompt historique pour montrer le nouveau shell.

<17>script monScript
Script started, file is monScript
<1>pwd
/shems/users/tounsi
<2>echo le fond de l air est frais
le fond de l air est frais
<3>cat monScript                      <---
script non encore créé
<4>Script done, file is monScript     <--- après frappe de ^D
<18>cat monScript
Script started on Fri Jul 7 17:39:05 1995
<1>pwd
/shems/users/tounsi
<2>echo le fond de l air est frais
le fond de l air est frais
<3>cat monScript
<4>^D
script done on Fri Jul 7 17:39:31 1995
<19>

tty (teletype)

Affiche le nom (chemin absolu) de la référence du terminal entrée standard.

%tty /dev/ttyp3 %tty <data not a tty

clear

Efface l'écran, et ramène le prompt en haut a gauche. stty [arguments] (set tty) Commande très utile. Elle fixe ou informe sur les caractéristiques de fonctionnement d'un terminal. Nous en donnerons uniquement quelques exemples. Pour les détails complets voir man stty.

%stty speed 9600 %stty size 24 80

donnent respectivement la vitesse de transmission (ici 9600 bauds) et les dimensions en caractères du terminal (ici 24 lignes, 80 colonnes). Avec l'option -a (stty -a) stty affiche toutes les caractéristiques actuelles du terminal. Exemple: %stty -a
Pour ce qui concerne les caractères de contrôle, on peut les fixer ainsi:

stty erase ^?

permet de rendre ^? (touche del) caractère backspace (qui est aussi parfois ^H). (Taper ^ et ? ou appuyer sur del).

stty kill ^U

^U devient effacement de ligne lors de la frappe d'une commande.

stty werase ^W

^W devient effacement du dernier mot tapé. D'autres options sont eof (défaut ^D), intr (défaut ^C), stop/start (défaut ^S/^Q) etc... Attention ne pas s'amuser à les modifier à tort et à travers, surtout eof. stty permet aussi de gérer le mode d'entrée/sortie du terminal. Comme l'E/S bufferisée (mode canonique) où les caractères sont envoyés par lignes, après frappe de return. L'autre mode, non canonique (stty -icanon)  comme sous vi ou emacs, les caractères sont envoyés dès leur frappe. Ce mode est obtenable par: "stty min 1 time 0".

Remarque: Parfois le terminal se met en mode majuscule (indépendamment de shift). Faire

STTY -LCASE

pour s'en sortir (LowerCASE).

Informations Générales Utilisateurs/Système

date

Imprime la date du jour.

df

(display free) Informe sur l'état (noms, espaces libres/occupés, montages ...) des systèmes de fichiers (disques logiques).

du [chemin]

(disque usage) Informe sur la quantité d'espace utilisé par le fichier ou répertoire en argument. Par défaut le répertoire courant. Avec une option -a (défaut) l'information est donnée pour tous les fichiers du chemin. Avec -s, seul le total de chaque répertoire est donné. Ainsi

% du -s BOOKS
2643

donne la taille du répertoire BOOKS en Kilo-octets.

finger nomLogin

Donne l'identité, le répertoire du travail, la date de dernière connexion etc... de l'utilisateur en paramètre. Si les fichiers .projet et .plan, sensés contenir le projet et le plan de travail d'un utilisateur existent dans son répertoire, leur contenu est aussi imprimé. finger nomLogin@host  marche pour un utilisateur sur un autre site. finger @host par contre, donne la liste des personnes connectées au le site host. Voir aussi who.

who

Informe sur les utilisateurs actuellement connecté(e)s au système, leur terminal et la date de connexion.

who am i, n'informe modestement que sur soi. w Comme who, mais donne ce que fait chaque utilisateur [8].

% finger iznogoud
Login name: iznogoud In real life: Grand Vizir IZNOGOUD.
Directory: /shems/users/iznogoud Shell: /bin/csh
On since Jul 9 18:20:28 on ttyp0 from shems
Mail last read Tue Jul 4 11:46:02 1995
Project: Devenir Calif a la place du Calif
No Plan.
% who
ayadi  tty03 Jun 22 19:52 (alibaba)
tounsi ttyp0 Jul  9 18:20 (shems)
% who am i
alibaba!tounsi ttyp0 Jul 9 18:20 (shems)
% w
6:25pm up 18 days, 2:37, 2 users, load average: 1.36, 1.27, 1.00
User    tty    from        login@      idle      JCPU PCPU what
ayadi   03     alibaba     22Jun93     17days              -
tounsi  p0     shems       6:20pm                           w

uname Affiche des informations sur le système présent.

tounsi@shems >uname
SunOS
tounsi@shems >uname -a
SunOS shems 4.1.3_U1 2 sun4m
tounsi@yasmina >uname -a
ULTRIX yasmina 4.4 0 RISC

Sans option, uname affiche le nom du système actuel. Avec une option -a, on a toutes les informations: nom du système, identificateur de la machine dans un réseau, la révision (release) et la version du système et enfin le modèle de la machine (hardware). Avec les options -s, -n, -r, -v, -m on a respectivement chacune des informations ci-dessus.

Gestion de Fichiers

On a groupé ici les commandes, connues du monde UNIX, qui manipulent des fichiers. Ce sont des commandes très puissantes quand on sait les utiliser ou combiner. La plus connue est cat déjà vue.

cat [fichier [fichier[...]]

(catenate) Affiche sur sa sortie standard, l'un après l'autre les fichiers en paramètre. Défaut, l'entrée standard. Des options intéressantes sont -v pour afficher aussi les caractères de contrôle, ou -n pour numéroter les lignes affichées. Voir aussi la commande more.

chmod mode chemin ... (change mode)

Modifie les droits d'accès et les privilèges associés à des fichiers (ou répertoires). Pour les droits d'accès, iI y a trois catégories d'utilisateurs symbolisées par: u (user) pour le propriétaire, g (group) pour les membres d'une même équipe et o (other) pour tous les autres. Il y a aussi trois privilèges qui sont: r (read) droit de consulter, w (write) droit de modifier et x (execute) droit d'exécuter. Ces informations sont fournies par la commande ls -l sous la forme:

- rwx rwx rwx

signifiant respectivement les privilèges de chaque catégorie d'utilisateur dans l'ordre cité ci-dessus (le premier tirait est le type de fichier, voir plus loin commande ls). On peut faire:

chmod u+x fichier

pour ajouter (+) à soi-même (u) le droit d'exécuter (x) fichier

% ls -l hello
-rw-rw-rw- 1 tounsi 345 Jan 2 11:59 hello
% chmod u+x hello
% ls -l hello
-rwxrw-rw- 1 tounsi 345 Jan 2 11:59 hello

ou

chmod o-w fichier

pour enlever aux autres le droit de modifier fichier.

% chmod o-w hello
% ls -l hello
-rwxr--r-- 1 tounsi 345 Jan 2 11:59 hello

On peut utiliser l'argument a pour tous (au lieu de ugo) comme dans "chmod a+r f" qui donne à tous le droit de lire f. L'usage du signe = sert à affecter un privilège donné ou ceux d'un utilisateur: g=x donne au groupe le droit d'exécuter et g=u donne au groupe les mêmes droit que le propriétaire. Une syntaxe commode est de considérer chaque triplet de privilège comme un chiffre octal. 1 est oui 0 est non.

% chmod 644 hello
% ls -l hello
-rw-r--r-- 1 tounsi 345 Jan 2 11:59 hello

6 4 4 étant 110 100 100, soit rw-r--r--
L'option -R descend récursivement dans les sous répertoires pour faire chmod.

chown propriétaire chemin

(change owner) Modifie le propriétaire d'un fichier ou répertoire. Le nouveau propriétaire devient celui indiqué. Ne pas confondre avec chmod! L'option -R (majuscule) descend récursivement dans les sous répertoires pour faire chown.

cmp fichier_1 fichier_2

(compare) Compare les deux fichiers arguments. Ne sort rien si les deux fichiers sont identiques, sinon indique l'octet et le numéro de ligne où les deux fichiers différent. Avec l'option -l, affiche les valeurs octales et le numéro de tous les octets qui diffèrent. Voir aussi comm et diff.

comm fichier_1 fichier_2

Compare aussi les deux fichiers, mais supposés triés par ordre ASCII (voir sort). Affiche sur 3 colonnes et dans cet ordre: les lignes du fichier_1 ne se trouvant pas dans fichier_2, les lignes du fichier_2 ne se trouvant pas dans fichier_1 et les lignes communes (common) aux deux fichiers.

% cat f1
ali
brahim
cherifa
dalila

% cat f2
ali
chafik
farid

% comm f1 f2
                ali
brahim
        chafik
cherifa
dalila
        farid
%

Des options sont -123, pour ôter de l'affichage, la ou les colonnes de numéro donné. Voir aussi cmp et diff.

cp fichier_1 fichier_2
cp fichier ... répertoire
cp -r répertoire ... répertoire

(copy) Copie fichier_1 sur fichier_2, ou la liste des fichiers fournis en argument dans le répertoire spécifié en fin de liste, ou la liste des répertoires fournis dans le répertoire spécifié aussi en fin de liste. L'option -r (copie récursive des sous répertoires) est nécessaire dans ce dernier cas. L'option -i (copie interactive) demande confirmation pour chaque fichier copié. Voir aussi mv.

csplit [prefixe] [fichier] arg_1 [... arg_n]

(contexte split) Eclate un fichier (défaut entrée standard) en n+1 morceaux, de longueur variant selon les arguments fournis. Chaque fichier résultat est appelé par défaut xx00, xx01, ... et contiennent respectivement les lignes 1 à arg_1 exclue, arg_1 à arg_2 exclue ... du fichier de départ.

% cat f1
ali
brahim
cherifa

dalila
% csplit f1 2 4
% cat xx00
ali
% cat xx01
brahim
cherifa
% cat xx02
dalila

On peut renommer les fichiers résultats par l'option -f prefixe qui remplace la chaîne xx par le prefixe fourni. Un usage (voir le manuel) plus élaboré de cette commande et qui utilise les expressions régulières (cf. grep) est possible. Voir aussi les commandes split, cut, fold
et paste.

cut -fliste [-ddelimiteur] [fichier]

Extrait des colonnes d'une table ou des champs de chaque ligne d'un fichier (à la manière de projection d'une relation en terme base de données). Par défaut les champs ou colonnes sont délimités par le caractère <tab> ou <fin de ligne>, et l'option -d permet justement de préciser un autre délimiteur. La liste des champs sélectionnés, numérotés à partir de 1, est donnée par l'option -f. On peut y utiliser la syntaxe intervalle n-m. Si n (resp. m) est absent, il vaut 1 (resp. fin de ligne). -f2-4,8 veut dire les champs 2,3,4 et 8, -f-2 les 2 premiers champs, et -f4,7- le champ 4 et les champs de 7 à la fin. Dans une autre forme:

cut -cliste [fichier]

Extrait de chaque ligne du fichier les caractères sélectionnés par liste (qui s'applique aux caractères dans ce cas). cut -c 1-9,30- extrait dans chaque ligne les 9 premiers caractères et tous les autres à partir du 30ème. Voir aussi cspilt paste et fold.

diff fichier_1 fichier_2

Affiche ligne par ligne la différence entre les deux fichiers textes. Son intérêt réside dans le fait que le résultat produit (avec l'option -e) est un ensemble de commandes de l'éditeur ed, permettant de constituer une version de fichier à partir d'une autre. diff ignore les blancs (espace, tab) si L'option -b est présente. Voir aussi cmp et comm.

file fichier...

Détermine le type d'un fichier (ASCII, binaire, répertoire, source C etc.) en examinant son contenu. Elle utilise pour cela les premiers octets (magic number) d'un fichier et la base de données /etc/magic. Donne empty si un fichier est vide.

% file . hello.c .login hello.o data monTexte mbox
.      :     directory
hello.c:     c program text
.login:      shell commands
hello.o:     sparc executable not stripped
donnees:     data
monTexte:    ASCII texte
mbox:        mail folder

find répertoire arguments

Commande très puissante qui cherche récursivement dans le répertoire mentionné, les fichiers qui satisfont les critères fournis en arguments, et entreprend une action fournie aussi en argument. Quelques exemples en illustrent l'usage.

find . -name core -print

cherche sous le répertoire courant les fichiers de nom core
(argument -name core) et imprime leur chemin d'accès (argument -print).

find $HOME -name core -exec rm {} \;

fait de même - sous le répertoire utilisateur cette fois-ci - mais supprime (rm) les fichiers core s'ils existent. L'action ici, est une commande introduite par l'argument -exec. les {} représentent le fichier courant - trouvé par find - et \; marquent la fin de la commande (le \ enlève la signification shell du ';'). On peut utiliser des noms génériques. On supprimera tous les fichiers .o par:

find $HOME -name "*.o" -exec rm {} \;

Remarque: Si rm est aliasée, l'alias ne fonctionne pas. faire plutôt

find ... -exec rm -i {} \;

D'autres critères sont indiqués par les arguments suivants:

-type t recherche en testant le type de fichier. t parmi: d (directory), f (fichier ordinaire), c (fichier spécial caractères), l (lien) etc...

find . -type d -print

imprime le nom de tous les sous répertoires du répertoire courant.

-newer f teste si un fichier est modifié plus récemment que le fichier f.

-size n est vrai si le fichier trouvé est de taille n, exprimé en blocs de 512 octets.

-atime n (resp. -mtime n) teste si le fichier a été accédé en consultation (resp. en modification) dans les n jours. Avec -n voulant dire moins de n jours, +n plus de n jour et n exactement n jours.

-user u teste sur le propriétaire du fichier trouvé. Vrai s'il est u (nom login ou numéro uid).
etc... On peut combiner les critères par: énumération pour la conjonction et, ! pour la négation d'un critère, -o pour la disjonction ou de critères et parenthèses \( \) pour le groupement. Pour enlever les fichiers a.out ou core et qui ne sont pas des répertoires on a:

find . \( -name a.out -o -name core \) ! -type d -exec rm -i {} \;

Remarque: La syntaxe de find est très précise. Attention aux blancs séparateurs. Utiliser \ pour enlever leur signification shell aux caractères '(', ')', et ';'

fold [-wlargeur] [fichier...]

Découpe les lignes d'un fichier pour les fixer à une largeur largeur donnée par l'option -w. Cela sert par exemple à sortir un fichier sur un support de largeur limité tel un listing 80 colonnes, valeur par défaut de largeur. Avec une option -s, les lignes sont coupées à l'espace précédent la largeur désirée (pour ne pas couper brutalement). Voir aussi cut et paste.

grep expression [fichier...]

(Globally search Regular Expression and Print) Cherche dans les fichiers donnés, les lignes qui s'apparient avec un motif donné par l'expression régulière. Par défaut, l'entrée standard est  utilisée. Une expression régulière [9] est une chaîne qui combine des caractères fixés ou génériques pour représenter un motif (à la façon d'une grammaire). Très brièvement on a:

caractère * répétition d'un motif un certain nombre de fois, y compris 0.
caractère . : un caractère quelconque sauf fin de ligne.
[] Définition d'un motif par énumération d'un ensemble de caractères, y compris '*' '[' et '.'. Le caractère '-' est indicateur d'intervalle x-y sauf en début ou fin d'énumération.

En outre, $ signifie fin de ligne quant il est juste après une expression, et ^ signifie début de ligne s'il est en début d'expression ou complément d'ensemble, s'il est juste après [ qui marque le début d'un ensemble. Un \
fait perdre sa signification à un caractère spécial.

% grep tounsi /etc/passwd

tounsi:BerFtYukN:272:15:Najib TOUNSI Pr. Ass.:/shems/users/tounsi:/bin/csh
% grep '^[a-zA-Z]*$' t.c <--lignes de t.c ne contenant que des lettres
do
else
% nl chapitre1.pr | grep -e "-[0-9][0-9]*-"
56 -1-
113 -2-
... ...
635 -12-

La dernière ligne commande est pour chercher les numéros de lignes où se trouve la numérotation de pages dans le fichier texte chapitre1.pr . nl est là pour numéroter les lignes du fichier qui est ensuite envoyé à grep. L'expression recherchée est de la forme -n- ou -n...n- où n est un chiffre. Ici, l'option -e est utile quand l'expression commence par un caractère -. Le sens de l'expression est donc: un tirait, suivi d'un chiffre ensuite d'un certain nombre de fois un chiffre et enfin un tirait. La commande egrep (extended grep) utilise la syntaxe complète des expressions régulières, où |
entre deux motifs signifie l'un ou l'autre des motifs, + après un motif signifie répétition au moins une fois du motif et ? après un motif le rend facultatif (répétition 0 ou 1 fois).

head [-n] [fichier...]

Donne les n premières lignes (défaut 10) des fichiers spécifiés (défaut entrée standard). Voir aussi tail.

ln nomFichier nomLien
ln fichier... répertoire

Crée un nouveau nom, appelé lien, associé à un fichier existant. Un fichier peut avoir autant de liens que possible (à l'image des pointeurs qui pointent sur un même objet). nomFichier est le nom original du fichier et nomLien le nouveau nom. Dans la seconde forme, où le dernier argument est un répertoire, ln crée dans ce répertoire des liens de même nom vers les fichiers arguments. L'exemple suivant crée un lien tprime sur le fichier t:

% cat t
Benali Ali
Bensaid Said
% ln t tprime
% cat tprime
Benali Ali
Bensaid Said
% ls -l t tprime
-rwr--r-- 2 tounsi 24 Jul 14 18:00 t
-rwr--r-- 2 tounsi 24 Jul 14 18:00 tprime

Le nombre 2 dans la 2e colonne de ls -l indique le nombre de liens sur un fichier (ici deux). L'exemple suivant crée un lien vers le fichier t dans le répertoire rep:

% ln t rep
% cat rep/t
Benali Ali
Bensaid Said
% ls -l rep/t
-rwr--r-- 3 tounsi 24 Jul 14 18:00 t

Noter que t a le même nom, et que le nombre de liens est passé de 2 à 3. Remarque: Lors de la suppression par rm, un fichier n'est définitivement perdu que si on supprime son dernier lien.

Avec l'option -s ln crée un lien dit symbolique. Un lien symbolique est une entité qui contient le nom du fichier origine.

% cat ts
Benali Ali
% ln -s ts tsprime
% ls -l ts tsprime
-rw-r--r-- 1 tounsi 11 Nov 1 11:31 ts
lrwxr-xr-x 1 tounsi 2 Nov 1 11:31 tsprime -> s
% cat tsprime
Benali Ali
% file tsprime
tsprime: symbolic link to ts
% rm ts
% cat tsprime
% tsprime: No such file or directory

Comparer les caractéristiques données par "ls -l" pour les deux fichiers. En particulier le type l
pour lien. Noter aussi que la suppression du fichier d'origine se répercute sur le lien (contrairement à l'autre type de lien). En outre, un lien symbolique peut se faire à travers 2 systèmes de fichiers différents.

ls [chemin ...]

(list) Liste le contenu de chaque répertoire donné en argument, ou le nom des fichiers arguments avec d'autres informations selon les options choisies. Les principales options sont:

-a qui permet d'afficher aussi les fichiers cachés (commençant par . comme .login)

-l (format long) qui donne le type (- fichier ordinaire, d répertoire, l lien symbolique etc...) du fichier, son mode (bits de protections) , le nombre de liens, le propriétaire, la taille en octets, la date de dernière modification et le nom du fichier.

-d si l' argument est un répertoire, il n'est pas examiné. Utile avec -l.

-F pour distinguer entre les références affichées. Les répertoires sont suivis de / et les fichiers exécutables de *.

mkdir répertoire

(make directory) Crée un répertoire vide. Les références . (répertoire lui-même) et .. (répertoire parent) y sont inclus automatiquement. L'option -p permet de créer un répertoire en profondeur avec tous les sous répertoires intermédiaires.

more [fichier]

Affiche page par page sur un écran le contenu d'un fichier. un prompt "more " apparaît en bas de page avec le pourcentage du fichier déjà visualisé. L'affichage de la suite se fait ligne par ligne (touche espace) ou page par page (touche return). Par ailleurs, un certain nombre de commandes est possible avec ce prompt more. Par exemple h permet d'avoir la liste de ces commandes. On peut commencer l'affichage à partir d'une ligne de numéro donné (option +n) ou contenant une chaîne (option +/chaîne). Laquelle chaîne peut être une expression régulière (cf. grep). Voir aussi cat.

mv nom_1 nom_2
mv nom ... répertoire (move)

Déplace  (renomme en fait) un fichier ou un répertoire. Dans le premier cas, la référence , fichier ou répertoire, de nom nom_1 est changée en nom_2 (si cette derniere existe elle est d'abord supprimée). Dans le second cas, une ou plusieurs références sont déplacées, avec leur nom d'origine, dans le répertoire spécifié . L'option -i, entraîne une demande de confirmation. Voir aussi cp (et ne pas confondre avec).

paste fichier_1 fichier_2 ...

Fusion horizontale (opposé de cat) de deux ou plusieurs fichiers. Les lignes de chaque fichier sont concaténées, avec le caractère <tab> comme séparateur, et le résultat est imprimé sur la sortie standard. Avec une option -dlist, les caractères de list sont utilisés à tour de rôle comme séparateurs au lieu de <tab>.

% cat f1 Benali
Bensaid
% cat f2
Ali
Said
cherif
% paste -d"," f1 f2
Benali,Ali
Bensaid,Said
,Cherif
%

rm ficher ...

(remove) Supprime les entrées correspondant à un ou plusieurs fichiers. Si l'une de ces entrées est le dernier lien sur un fichier, celui-ci est perdu. Les options sont -i pour une demande de confirmation, -f pour forcer la suppression si le fichier est protégé en écriture et -r pour supprimer récursivement tout le contenu d'un répertoire, ses sous répertoires et le répertoire lui-même (si l'argument est un répertoire). Voir aussi rmdir. Voir aussi rm.

rmdir répertoire ...

(remove directory) Supprime tout répertoire nommé en argument. Ce dernier doit être vide (faire rm -r autrement).

sort [fichier ...]

Tri lexicographique des lignes du ou des fichiers donnés (défaut entrée standard). Le résultat est affiché sur la sortie standard (ou sur fichierSortie avec l'option -o fichierSortie). Les lignes d'un fichier à trier peuvent être décomposées en champs de tri, qui sont des mots séparés par tab ou espace (ou car avec l'option -tcar). Ces champs sont numérotés à partir de 0. Ainsi, l'option +n, fait le tri à partir du champ numéro n, et avec l'écriture +n -m, le critère de tri s'arrête avant le champ m. Avec l'option -n, le champ numérique en début de ligne est traité comme nombre. Avec une option -b, les blancs sont ignorés en début de champs. L'option -r inverse l'ordre de tri.

% cat f1
3 Benali Ali
2 Alaoui Said
1 Charif Aziz

% sort f1
2 Alaoui Said
1 Charif Aziz
3 Benali Ali

% sort -n f1      <---
premier champ numérique 1 Charif Aziz
2 Alaoui Said
3 Benali Ali

% sort -b +1 f1   <---
ignorer blancs 2e champ 2 Alaoui Said
3 Benali Ali
1 Charif Aziz

% sort -b +2 f1   <---
ignorer blancs 3e champ 3 Benali Ali
1 Charif Aziz
2 Alaoui Said
%

split [fichier [préfixe]]

Lit le fichier et le découpe en morceaux de n lignes chacun (défaut 1000 lignes). n peut être fourni avec l'option -n. Les noms des différents morceaux résultats commencent par préfixe (défaut x) et se terminent par aa, ab, ... zz. Cette commande est moins élaborée que csplit.

tail [fichier ...]

Extrait les dernières lignes d'un ou plusieurs fichiers et les affiche sur la sortie standard. La position d'extraction est donnée en nombre de lignes (défaut ou option l)) par +/-n, où +n signifie à partir de la nème ligne par rapport au début de fichier et -n par rapport à la fin de fichier. Défaut -10, les dix dernières lignes. Les options b ou c expriment quant à elles, la position en nombre de blocs ou de caractères respectivement. Avec l'option r l'affichage se fait de la fin du fichier jusqu'à la position exprimée. Attention, ces options, lbcr sont collées à +/-n et r ne s'applique pas avec b ouc. Voir aussi head.

% cat  t 
a

b

d
e
f
% tail +3   t 
c

e
f
% tail -3 t
d
e
% tail -4c t 
e
f     <--- les returns comptent
% tail +4r  t 
f
e

% tail -4r t
f
e
d
c

touch fichier ...

Rend la date de dernier accès au fichier égale à la date du jour, ou celle spécifiée par date avec l'option -t date (format mmjjhhmm[aa]) ou celle du fichier autre avec l'option -r autre. On peut modifier uniquement la date d'accès en lecture, option -a, ou en écriture, option -m. touch est surtout utile en conjonction avec l'utilitaire make, qui se base sur ces dates pour faire un traitement. Si le fichier argument de touch n'existe pas, il est créé vide. C'est donc aussi un moyen de créer des entrées dans un répertoire.

uniq entrée sortie

Reporte les lignes répétées d'un fichier. Lit le fichier entrée et élimine les lignes répétées une ou plusieurs fois. Le résultat est écrit sur le fichier sortie. Pour un fichier quelconque, il vaut mieux lui appliquer sort avant, pour rendre les lignes doubles adjacentes. Des options -u (ne conserver que les lignes uniques) et -d (ne conserver que les lignes doubles) sont possibles. Leur combinaison est donc par défaut. L'option -c fait précéder chaque ligne de son nombre d'occurrence. (Voir aussi sort)

% cat toto
a

c
b
a
b
% sort toto |uniq -c

     2 a
     2 b
     1 c

%

wc fichier

(word count) Compte le nombre de caractère, de mots et de lignes d'un fichier. Les options sont -c (compter les caractères) -w (compter les mots) et -l (compter les lignes). Les trois sont par défaut.

Gestion des Processus

at moment [jour ] [fichier]
at -r tâche ...
at -l tâche ...
batch fichier

Ces commandes exécutent un fichier commande à un moment ultérieur (en différé) indiqué par moment. L'environnement (répertoire de travail, variables etc...) est hérité par la commande. Les sorties standards et erreurs sont , si non redirigées, envoyées dans la boite au lettre utilisateur. La forme de moment est: h, hh, hhmm, noon, midnight,now, today, tomorrow
On peut mettre un jour jour, dans le cas où le délai est supérieur à 24h, sous la forme: nom du mois, suivi du numéro du jour: at 1530 jan 24             <--- pour 24 Janvier 15h 30 La forme avec -r ou -l, permet de révoquer (resp. lister) une demande d'exécuter en différé. tâche est alors le numéro attribué à la demande et qui est affiché juste après la demande at. batch est tout simplement une demande d'exécution de fichier dès que la charge du système le permet. C'est pour ne pas gêner les camarades ou les autres utilisateurs quand une commande est lourde.

bg

Rend une tâche en arrière plan (background). Voir gestion des travaux section 4.8.

fg

Rend une tâche en avant plan (foreground); Voir gestion des travaux section 4.8.

kill -signal  no_de_processus
kill -l

Envoie un signal à un processus de numéro donné (voir ps). Le signal est donné par son numéro ( e.g. -9) ou par un nom symbolique (e.g. INTR) . kill -l
permet justement d'afficher la liste des signaux possibles. Leur sens est dans man kill ou /usr/include/signal.h . (voir aussi [[section]] gestion des travaux).

ps

(process status) Donne la liste des processus utilisateurs lancés depuis le terminal dans la session. Elle affiche le numéro (PID), le terminal de contrôle(TT) de lancement, l'état (STAT), le temps d'exécution (TIME) du processus et le nom de la commande l'ayant créé. Les informations d'état sont R pour actif, S pour processus en sommeil, T
pour stoppé (ne pas confondre avec S) et Z pour terminé (zombie). Des options intéressantes sont:

-a: tous les processus

-tterm: les processus rattachés au terminal term (e.g. ps -tty02, ps -tty02,03)

-u[user]: donne plus d'informations. Et avec un nom d'utilisateur, ses processus.

-x: les processus utilisateurs, y compris ceux non rattachés au terminal.

stop

Suspend une tâche background. Voir gestion des travaux section 4.8.

time commande

Affiche le temps d'exécution d'une commande. Sous csh, faire /bin/time pour ne pas confondre avec la commande interne de même nom.

Les Outils de Communication

Ce sont des commandes pour communiquer entre utilisateurs, locaux ou distants, en immédiat ou en différé.

Principalement, il y from, mail, mesg, talk et write.

from

Affiche les entêtes expéditeurs du courrier non encore lu. Voir mail.

mail [utilisateur]

Commande qui gère le courrier entres utilisateurs UNIX. Il en existe un certain nombre de versions, plus ou moins élaborées. Nous décrirons la principale, version Berkeley, qui se trouve dans /usr/ucb [10]. La commande seule permet de consulter son courrier dans sa boite aux lettres. Celle-ci est sauvegardée pour chaque utilisateur dans un répertoire système sous /usr/spool/mail. Après frappe de mail, s'il y a courrier, une liste d'entêtes des lettres (numéro d'arrivée, expéditeur, date réception et sujet) et d'indicateurs (N nouveau, R déjà lu, U
par encore lu unread) s'affiche. Le prompt est & (ou #). Comme d'habitude, la frappe de ? ou de la lettre h
(help) donne des indications sur qu'on peut faire. En générale, on a:

next

print

header

delete

edit

reply

save ref

quit

xit

affiche le message suivant,

(ou type) affiche le message courant,

reaffiche les entêtes des messages,

supprime le message courant,

édite le message courant,

répond à l'expéditeur du message,

sauvegarde le message courant en bout du fichier de référence donnée,

quit sortie avec sauvegarde des messages non encore lus,

 sortie avec sauvegarde de tous les messages.

La première lettre de chaque commande suffit. Suivies d'un numéro, les commandes p t d e r et s s'appliquent au message de numéro donné.

Avec une option -f fichier, mail utilise le fichier donné comme boite aux lettres. En generale on l'appelle mbox.

Dans la forme

mail utilisateur

mail envoie un courrier à l'utilisateur donné (nom login). Le courrier est à taper sur le clavier. On termine la frappe par un caractère '.' en début de ligne (ou ^D). Avant de commencer la lettre, mail invite (subject:) à fournir l'objet du courrier. On peut écrire à des utilisateurs distants. La référence utilisateur doit être nom@hôte. Le système hôte est un simple nom de machine ou un nom de site divisé en plusieurs domaines séparés par le caractère '.' (syntaxe internet).

mail benali@loria.fr

Voir aussi la commande from.

mesg y|n

La commande mesg permet d'être, ou de ne pas être, dérangé par write d'un(e) autre utilisateur(trice). La commande a comme paramètre y ou n (yes or no). mesg n interdit la réception des messages de write (mais pas les envois). Pour restaurer la réception des messages, faire mesg y.

write utilisateur [tty]

Envoie ce qu'on tape sur son clavier sur l'écran de l'utilisateur mentionné qui doit être connecté (affichable par who). Si ce dernier est connecté plusieurs fois, il faut rajouter sur quel terminal tty on envoi le message. On peut ainsi mener une conversation avec un interlocuteur qui doit procéder de la même façon (faire write aussi). La commande write (ou la conversation) termine quand l'un des interlocuteurs fait ^D. Il est conseillé de s'entendre avec son interlocuteur sur la planification de la conversation, e.g. en tapant chacun à tour de rôle et on terminant la phrase par un mot de type STOP. Car ce qu'on envoi risque de se mélanger avec ce qu'on reçoit. (Voir aussi talk)

exemple: Voici une conversation entre deux utilisateurs, averel et joe

averel@karima>write joe
 

Message from joe@karima on ttyp3 at 
12:14 ...
Quand est-ce qu'on mange 
STOP
 
 
 

Je n'ai pas encore termine,
attend
STOP
du calme joe
STOP
 
 

OK Je t'attends dans un quart 
d'heure 
STOP et FIN
Entendu a tout a l'heure 
^D
averel@karima 3>EOF

joe@karima> 

Message from averel@karima on ttyp2 at 

12:14 ...
joe@karima>write averel
 

Quand est-ce qu'on mange
STOP 
Je n'ai pas encore termine, 
attend 
STOP 
 
 

du calme joe 
STOP 
OK Je t'attends dans un quart 
d'heure 
STOP et FIN
 
 

Entendu a tout a l'heure 
EOF

^D

talk utilisateur [tty]

Comme write mais permet de dialoguer plus aisément car l'écran des deux utilisateurs est partagé en deux zones: l'une pour écrire et l'autre pour recevoir. On peut donc parler en même temps, et il n'y a pas besoin de protocole. La conversation se termine avec la frappe de ^D ou ^C. (Voir aussi write)

Les Filtres

Filtre, est une métaphore pour parler des commandes UNIX qui appliquent une transformation sur un fichier. Le fait est générale, puisqu'une commande a un fichier entrée stdin et un fichier sortie stdout. Mais filtre colle mieux à certaines commandes.
 

dd option=valeur ...

Convertit les caractères d'un fichier et écrit le résultat dans un autre fichier. Les options sont:

if=f1, of=f2 fichier origine f1 et cible f2 (défaut stdin et stdout)

conv=ascii convertit en ASCII à partir d'un code EBCDIC par exemple.

conv=lcase convertit en majuscule etc...

D'autres options intéressantes, comme sauter des lignes, copier quelques lignes etc. existent. Voir man dd.

% dd conv=lcase
AzErTY
QwERtY
azerty
qwerty
0+2 records in
0+1 records out
%

tee fichier

(T prononcé en anglais) Envoie son entrée standard à la fois sur sa sortie standard et sur un fichier référence. Elle est surtout utile avec un pipe.

cmd_1 | tee f | cmd_2 ...

La sortie de cmd_1 est envoyée en entrée de cmd_2, d'après le principe des pipes, mais entre temps la commande tee l'a captée et l'a mise dans un fichier f. Un usage courant fait de f le fichier /dev/ttyxx
alias l'écran, pour imprimer le résultat de cmd_1 avant le pipe.

% who | tee /dev/tty05 |wc -l
ouardani tty02 Oct 27 18:45 (SERV1)
tounsi tty05 OCT 27 14:30 (shems)
    2

La résultat de who est lu par wc (soit 2 lignes) et est imprimé sur l'écran (par tee).

tr [chaîne_1 [chaîne_2]]

Transforme (tr) l'entrée standard vers la sortie standard avec substitutions ou suppressions de caractères spécifiés par les arguments. A chaque occurrence du i-ème caractère de chaîne_1 est substitué le i-ème caractère de chaîne_2. Pour la suppression, on utilise l'option -d pour supprimer tous les caractères définis dans chaîne_1. Une option -c spécifie les autres caractères (le complément par rapport à l'ensemble des caractères) que ceux de lachaîne_1.

% cat t
abcdefg
hijklmn
opqrst
% tr "aeg" "AEG" <t
AbcdEfG
hijklmn
opqrst
% tr -d "m-q" <t
abcdefg
hijkl
rst
% tr "[a-z]" "[A-Z]" <t
ABCDEFG
HIJKL
RST
%

On peut utiliser les notations classiques de définition de chaînes.

Autres outils

banner chaîne

Affiche la chaîne donnée sous forme de bannière formée avec des  caractères #.

basename fichier [suffixe]

Enlève le suffixe et le chemin éventuel précédant le nom (de base) d'un fichier.

% basename /usr/users/hello.c .c
hello
% basename hello
hello
% basename hello.c
hello.c

Cette opération est purement syntaxique et ne suppose pas que le fichier existe.

bc [fichier]

Interprète des commandes de calcul arithmétique en précision quelconque, avec un mini langage de programmation proche de C. Les commandes sont lues dans fichier et ensuite sur l'entrée standard. L'option -l appelle une bibliothèque mathématique. Le détail est obtenu par man bc.

% bc -l
4+5
9
y=3
x=y/2
y
1.5
quit
%

cal mois [année]

Affiche le calendrier correspondant aux arguments.

sleep n

Met le processus numéro n en état de sommeil (il ne consomme pas de temps CPU).

factor/prime

factor n décompose le nombre n en facteurs premiers, et

prime n m fournit les nombres premiers compris entre n et m.

man [section] titre

L'arme absolue du programmeur UNIX. Fournit l'aide en ligne sur la commande, la fonction C ou le sujet titre. La section est le numéro du chapitre correspondant du manuel de référence UNIX. Elle est utile dans cas où un même titre figure dans plusieurs chapitres comme kill qui est au chapitre 1 pour la commande shell, et au chapitre 2 pour l'appel système. Ne pas hésiter à l'utiliser très souvent. Il vaut mieux comprendre l'anglais.

% man man
% man 2 fork

5.3. Les Commandes internes du cshell.

Ce sont les commandes incorporées (builtin) que le cshell interprète directement. Beaucoup ont déjà été décrites ci-dessus, et nous allons juste énumérer lesquelles:

alias, cd, pwd, source, time, jobs ...eval history kill
pushd popd set setenv source.

D'autres font partie du langage de commande:

foreach, repeat, while, if, switch, goto, onintr

Voir section 6.




PRECEDENT SOMMAIRE SUIVANT