Introduction au système d'exploitation UNIX/LINUX

De POLR
Aller à : navigation, rechercher

Introduction

UNIX est un système d'exploitation multi-tâches et multi-usagers qui a été créé à la fin des années 1960 par Ken Thompson et Dennis Ritchie des Laboratoires Bell. Aujourd'hui, UNIX se décline en plusieurs saveurs: LINUX, HPUX, AIX, FreeBSD, Solaris, etc. Toutes ces versions offrent les fonctionnalitées suivantes:

  • Accès simultané de la machine par plusieurs utilisateurs;
  • Support pour la création, la modification et la destruction de programmes, processus et fichiers;
  • Des systèmes de fichiers composés d'une hiérarchie de répertoires où résident les fichiers et processus;
  • Le partage équitable du processeur, de la mémoire et des disques parmis les processus;
  • Une méthode permettant aux processus et périphériques de communiquer entre eux, même s'ils sont sur des machines différentes;
  • Une multitude de programmes et utilitaires.

Nous ne présentons ici que les concepts et commandes de bases nécessaires pour qu'un utilisateur puisse faire ses premiers pas en UNIX. Le lecteur y trouvera, entre autres, de l'informations sur l'interpréteur de commande et les variables d'environnement, les commandes essentielles permettant de manipuler les répertoires et les fichiers ansi que leur contenu, les expressions régulières et l' éditeur vi . Mentionons que pour certaines des commandes présentées, seules les options les plus utilisées sont décrites . Le lecteur est donc invité à consulté la documentation en ligne (manpages) pour connaitre toutes les options disponibles pour chacune des commandes.

L'interpréteur de commandes

L'interpréteur de commandes ou shell a pour fonction de traduire les commandes de l'utilisateur et de les acheminer au système d'exploitation pour qu'elles y soient exécutées. Il existe plusieurs interpréteurs de commandes sous UNIX: sh (Bourne shell), csh (C shell), ksh (Korn shell), bash (Bourne Again shell), etc.

Tous les interpréteurs de commandes peuvent prendre les directives de l'utilisateur à partir du clavier ou à partir de fichiers, nommés scripts, dans lesquels on regroupe un ensemble d'instructions.

L'interpréteur utilisé par la majorité des usagers du POLR est le Bourne Again shell ou bash.

Les fichiers standard

L'interpréteur de commandes utilise automatiquement trois fichiers dits standard:

Entrée standard
Fichier à partir duquel les directives sont lues; habituellement le clavier. Unité 0
Sortie standard
Fichier dans lequel les résultats des commandes sont écrits; habituellement l'écran. Unité 1
Erreur standard
Fichier dans lequel les erreur sont rapportées; habituellement l'écran. Unité 2

Redirection des fichiers standard

Il est possible de rediriger vers un autre fichier les fichiers standard:

< fichier
Rediriger l'entrée standard de telle sorte que son contenu provienne de fichier plutôt que du clavier
> fichier
Rediriger la sortie standard vers fichier plutôt que vers l'écran. Si fichier existe déjà, son contenu est remplacé.
>> fichier
Rediriger la sortie standard vers fichier plutôt que vers l'écran. Si fichier existe déjà on ajoute à la suite du contenu déjà present.
2> fichier
Rediriger l'erreur standard vers fichier plutôt que vers l'écran. Si fichier existe déjà, son contenu est remplacé.
2>> fichier
Rediriger l'erreur standard vers fichier plutôt que vers l'écran. Si fichier existe déjà, on ajoute à la suite du contenu déjà présent.

Il est possible de rediriger la sortie et l'erreur standard dans le même fichier en utilisant la syntaxe 2>&1 de la façon suivante :

commande > fichier 2>&1 ( et non pas commande 1>&2 > fichier)

Lorsqu'on fait une redirection, on peut mettre ou non des espaces entre la commande, le symbole de redirection et le fichier visé: Les commandes suivantes sont toutes valides:

ls > liste
ls>liste
ls >liste
ls -alrt>liste
ls -1                              >liste

Par contre, lorsqu'on associe un numéro d'unité (0,1 ou 2) à un symbole de redirection, les espaces entre le symbole et le numéro d'unité sont interdits. Le numéro d'unité et le symbole forment alors un tout:

ls > liste 2> erreur  : ici, les séquences '>' et  '2>' sont les symboles de redirection.
ls > liste 2>&1       : ici les séquences '>' et '2>&1' sont les symboles de redirection

Exemples de redirection:

Écrire la liste des fichiers du répertoire courant et les messages d'erreur dans liste_fichiers

ls -al * > liste_fichiers 2>&1 

Ecrire les résultats du programme mon_script dans le fichier resultats et les erreurs d'exécution dans le fichier erreurs.log:

mon_script > reslutats 2> erreurs.log

Enchaînement de commandes ou pipeline

L'enchaînement de commandes ou pipeline est un mécanisme par lequel la sortie standard d'une commande est connectée à l'entrée standard d'une autre commande. Le pipeline se fait au moyen de l'opérateur barre verticale |. Chacun des programmes composant le pipeline agit alors comme un filtre et le résultat final de l'enchaînement de commandes s'affiche sur la sortie standard. Il n'est pas nécessaire d'insérer des espaces de part et d'autre de l'opérateur |.

Exemples de pipelines:

Afficher une liste du nom de tous les usagers présentement sur le système. La liste est triée et sans doublons:

who | cut -d' ' -f 1 | sort -u

Afficher la liste de tous les utilisateurs qui ont des processus actifs sur le système. La liste est triée et sans doublons:

ps -ef | cut -d' ' -f 1 | sort -u

Rechercher la chaîne ERREUR parmis les 500 dernières lignes du fichier journal et afficher les résultat un écran à la fois:

tail -500 journal | grep ERREUR | more


Substitution de commande

Les caractères accent grave `commande` ou la syntaxe $(commande) offrent un mécanisme permettant de substituer le résultat d'une commande à la commande elle-même. On peut ainsi provoquer l'exécution d'une commande et faire en sorte que son résultat serve de paramètre à une autre commande. Quelques exemples:

Ajouter la date système à la fin du fichier mon_journal:

echo `date` >> mon_journal     #(équivalent à date >> mon_journal)

ou encore:

echo $(date) >> mon_journal    

Editer avec l'éditeur gedit tous les fichiers contenant le chaîne ERREUR:

gedit `grep -l ERREUR *`

ou

gedit $(grep -l ERREUR *)

Variables d'environnement

L'interpréteur de commande utilise plusieurs variables dites d'environnement pour pouvoir fonctionner correctement. Par exemple, lorsque l'utilisateur tape la commande ls, l'interpréteur consulte la variable PATH pour localiser la commande à exécuter. L'utilisateur peut visualiser l'ensemble de ses variables d'environnement au moyen de la commande env.

Pour récupérer la valeur d'une variable d'environnement on précède son nom du signe $ . Il est facile d'ajouter, d'éliminer ou de modifier des variables d'environnement en éditant le fichier .bash_profile qui se trouve de le répertoire HOME de chaque usager. Pour ajouter une nouvelle variable d'environnement, il suffit de la définir dans le fichier .bash_profile puis de l'exporter pour la rendre disponible à l'interpréteur de commandes. On peut par exemple, définir la variable d'environnement MONTEMP qui représente un répertoire servant à contenir des fichiers temporaires de la façon suivante:

  1. Editer le fichier .bash_profile et y ajouter
MONTEMP=/home/caveenj/temp
export MONTEMP

On pourra par la suite conserver des fichiers temporaires dans ce répertoire: Obtenir la date du système et la sauvegarder dans le fichier $MONTEMP/date_courante:

    date > $MONTEMP/date_courante

On peut ajouter un nouveau chemin /home/caveenj/bin à la variable PATH de la façon suivante:

Editer le fichier .bash_profile et y modifier la variable PATH

PATH=$PATH:/home/caveenj/bin

Si on désire que les changements apportés au fichier .bash_profile affectent immédiatement notre environnement, il faut exécuter le fichier .bash_profile à partir de son shell en utilisant l'opérateur point . (point) ou à l'aide de la commande source:

cd
. ./.bash_profile

ou:

cd
source ./.bash_profile

sinon, les changements ne seront appliqués qu'à la prochaine session de travail de l'usager. Variables d'environnement les plus courantes

Variable Valeur
HOME Chemin vers le répertoire HOME de l'usager
USER Nom de l'usager
PATH Liste des chemins fouillés par le shell pour trouver les commandes à exécuter
SHELL Nom de l'interpréteur de commande
PAGER Nom du programme à utiliser pour l'affichage un écran à la fois (more ou less)
EDITOR Éditeur préféré de l'usager (vi (?), emacs, xemacs, gedit, pico,...)
MANPATH Liste des répertoires fouillés par la commande man pour trouver la documentation
DISPLAY Nom du visuel et de l'écran à utiliser pour l'affichage des fenêtres des applications X
PWD Nom du répertoire de travail courant
LANG Langue utilisée par l'usager
HOSTNAME Nom de la machine
MACHTYPE Nom du système d'exploitation

Commandes de base

Conventions typographiques

Les conventions typographiques suivantes ont été utilisées pour la section traitant des commandes de base:

  • L'utilisation de chaque commande est écrite en italique ;
  • La description des commandes est écrite en utilisant une police régulière ;
  • Les paramètres entre crochets [] sont facultatifs ;
  • La barre verticale | sert à indiquer un OU logique ;
  • Les caractères ... indiquent qu'un paramètre peut être répété à volonté.

Par exemple, la séquence d'appel de la commande ls est présentée comme suit:

ls [-alrt] [rep | fic] ... 
Les paramètres a, l, r et t ainsi que rep et fic sont facultatifs. De plus, la commande ls peut prendre en paramètre aussi bien un ou plusieurs répertoires rep ou fichiers fic.
Les appels suivants à la commande ls sont donc tous valables:
ls
ls -a -l
ls -al
ls fic1 fic2
ls -lt rep1 rep2
ls -alrt *

Commandes informatives

Toutes les commandes UNIX sont documentées par le système des manpages. Un certain nombre de commandes UNIX permettent de fouiller cette documentation et d'obtenir la documentation recherchée. Il existe en plus, d'autres formats de documentation disponibles.

man [chapitre] com 
Afficher le manuel de la section chapitre pour la commande com. Si on ne donne pas de chapitre, man retourne le premier manuel trouvé. man fait sa recherche de documents en utilisant les répertoires de la variable d'environnement MANPATH.

Exemples: Afficher la documentation de la commande ls

man ls

Afficher le manuel pour la fonction Fortran open

man 3F open

man -k sujet
apropos sujet 
Afficher la liste des manuels traitant du sujet sujet.man et apropos font leur recherche de documents en utilisant les répertoires de la variable d'environnement MANPATH.

Exemples: La liste de manpages traitant d'images

man -k image

ou

apropos image

info com 
Afficher la documentation en format info de GNU de la commande com. L'utilitaire info permet de naviguer dans les documents grâce à des hyperliens et des menus.

Exemples: Afficher la documentation du compilateur g77

info g77

which com
Trouver l'emplacement du programme associé à la commande com. which fait sa recherche en fouillant les répertoires de la variable d'environnement PATH.

Exemples: Trouver l'emplacement de la commande man:

which man

Systèmes de fichiers

Tous les systèmes UNIX sont composés d'un ensemble de systèmes de fichiers dans lesquels sont conservés tous les fichiers nécessaires au système d'exploitation ainsi que tous les fichiers de chacun des usagers de la machine.

Sur chacun de ces systèmes de fichiers UNIX (plus ou moins équivalent à une partition sous WINDOWS) réside une arborescence de répertoires (équivalent aux dossiers sous WINDOWS). Par exemple, le système de fichiers / situé à la racine peut contenir une arborescence telle que:

/
 ---bin
 ---dev
 ---var
       ---adm
       ---cache
       ---db
 ---usr
       ---local
            ---bin
            ---include
            ---lib
            ---man
                  ---man1
                  ---man2
...

Chaque répertoire ou fichier contenu dans l'arborescence est accessible soit par le biais d'un chemin absolu ou relatif.

Chemin absolu

Pour travailler avec un fichier en utilisant son chemin absolu, on doit nécessairement indiquer toute l'arborescence: Exemples: Afficher le contenu du répertoire /usr/local/bin:

ls /usr/local/bin

Afficher le contenu du fichier passwd du répertoire /etc:

cat /etc/passwd

Chemin relatif

Pour travailler avec un fichier en utilisant son chemin relatif, on doit indiquer l'arborescence à partir du répertoire dans lequel nous sommes présentement positionné. On utilise alors les conventions suivantes: ./ indique le répertoire courant (répertoire de travail) alors que ../ indique le répertoire parent du répertoire courant. Dans plusieurs cas,on peut omettre la syntaxe ./. Exemples: Se déplacer dans le répertoire /usr/local/bin et afficher son contenu:

cd /usr/local/bin
ls ./

Se déplacer dans le répertoire /usr/local/bin et afficher le contenu de /usr/local (répertoire parent):

cd /usr/local/bin
ls ../

Afficher le contenu de /usr/local/lib (même niveau que bin):

ls ../lib

Afficher le contenu de /usr (deux répertoires au-dessus de bin):

ls ../..

Les formats des systèmes de fichiers les plus utilisés sous LINUX sont Ext3 et Ext4 alors que sous d'autres systèmes d'exploitation, on utilisera les format UFS (Unix File System), SYSV, HPFS, MSDOS, FAT32, NTFS, etc. Pour que le contenu d'un système de fichiers soit accessible, il doit être attaché à un point d'ancrage (mount point).

En plus d'avoir des systèmes de fichiers crées directements sur les disques locaux, il est possible d'importer par réseau des systèmes de fichiers en provenance d'autres serveurs. On dit alors de ces systèmes de fichiers qu'ils sont montés via NFS (Networked File System) ou SAMBA.

Certaines commandes permettent aux usagers d'obtenir de l'information sur les types de systèmes de fichiers qui sont disponibles sur leur machine.

Manipulation de répertoires

Certaines des commandes présentées ici peuvent prendre en paramètre aussi bien un répertoire qu'un fichier. La variante fichier est présentée sous la rubrique Manipulation de fichiers

pwd
Afficher le répertoire de travail courant

cd [rep]
Changer le répertoire de travail courant pour rep. Si rep n'est pas spécifié ou s'il est égal à ~, le répertoire courant devient $HOME

Exemples: Aller au répertoire projets:

cd ~/projets

Remonter de un répertoire et aller dans src:

cd ../src

mkdir rep ...
Créer le répertoire rep.

Exemple: Créer trois répertoires

mkdir dir1 dir2 dir3

rmdir rep ...
Détruire le répertoire rep. Le répertoire doit être vide (Voir la commande rm pour effacer un répertoire et son contenu).

Exemple: Détruire trois répertoires:

rmdir dir1 ../dir2 /home/james/dir3

ln -s rep lien
Créer un lien symbolique lien qui pointe vers le répertoire rep. Lorsqu'on veut créer un lien vers un répertoire, ce lien doit nécessairement être symbolique. Le commutateur -s est donc obligatoire. (Voir la commande ln pour plus d'information concernant les liens vers des fichiers)

Manipulation de fichiers

Toutes les commandes présentées ici peuvent prendre en paramètre aussi bien un répertoire qu'un fichier.

ls [-alrt] [rep | fic] ...
Afficher les informations concernant le fichier fic ou les fichiers contenus dans le répertoire rep Si rep n'est pas indiqué, on utilise le répertoire de travail courant.
-a 
Afficher l'information de tous les fichiers, y compris les fichiers cachés
-l 
Afficher toute l'information concernant les fichiers: permissions, date de modification, grosseur
-t 
Afficher l'information en triant en fonction de la date de modification des fichiers, du plus récent au plus vieux
-r 
Inverser le mode de trie pour l'affichage

Exemple: Afficher le contenu du répertoire ../src par date de modification croissante:

ls -alrt ../src

touch fich | rep ...
Créer le fichier fich s'il n'existe pas ou changer la date de modification du fichier fich (ou du répertoire rep) si celui-ci existe.

Exemple:

touch fic1 fic2

rm [-rf] fich ...
Détruire le fichier fich.
-r
Pour détruire de façon récursive un répertoire et tout son contenu
-f 
Pour forcer la destruction sans demande de confirmation

Exemples: Effacer le répertoire projets et tout son contenu:

rm -rf projets

Effacer les fichiers fic1 et fic2:

rm fic1 fic2

cp [-Rp] fich ... dest
Copier le fichier fich vers dest. Si dest est un répertoire le fichier fich est copié dans le répertoire dest
-R 
Copie récursive d'un répertoire et de son contenu
-p 
Appliquer les permissions de fich à dest

Exemples: Copier le répertoire projets/doc et tout son contenu dans le répertoire projets/web en conservant les permissions

cp -Rp projets/doc projets/web

Copier le fichier fic1 dans fic2

cp fic1 fic2

mv source ... dest
Déplacer le fichier ou répertoire source vers dest. Si dest est un répertoire le fichier source est déplacé dans le répertoire dest. Si source est un répertoire, il est déplace vers dest.

Exemples: Déplacer (renommer) le fichier fic1 vers fic2

mv fic1 fic2

Déplacer (renommer) le répertoire rep1 vers rep2

mv rep1 rep2

Déplacer tous les fichier du répertoire rep1 vers rep2

mv rep1/* rep2

ln [-s] source dest
Créer un lien dest qui pointe vers source. On peut ainsi avoir un même fichier qui porte plusieurs noms. Si l'option -s n'est pas utilisée, on crée un lien réel vers source (hard link). Tant qu'il existe un lien réel vers un fichier, ce fichier existe et son contenu est accessible. Lorsqu'on utilise l'otion -s, on crée un lien symbolique vers dest. Si on supprime dest, son contenu est perdu bien que le lien symbolique toujours existant. Le lien pointe alors vers un fichier (ou répertoire) inexistant.
-s 
Créer un lien symbolique (soft link). L'option -s est obligatoire lorsque source est un répertoire ou lorsque source et dest résident sur des systèmes de fichiers différents.

Exemples: Créer un lien fic2 qui pointe vers le fichier fic1. I faut détruire fic1 et fic2 pour effacer le fichier

ln fic1 fic2

Créer un lien symbolique (racourci) fic2 qui pointe vers fic1. Si fic1 est effacé, le lien fic2 pointe vers un fichier inexistant.

ln -s fic1 fic2

Créer un lien symbolique (racourci) rep2 qui pointe vers rep1. Si rep1 est effacé, le lien rep2 pointe vers un répertoire inexistant.

ln -s rep1 rep2

file fich ... 
Obtenir de l'information concernant le type du fichier fich: texte, binaire, data,...

chown [-R] usager[:groupe] fic ...
chown [-R] :groupe fic ... 
Modifier les paramètres d'apartenance du fichier ou répertoire fic.
-R 
Modifier le rértoire fic et tout son contenu (comportement récursif)

Exemples: Donner le fichier à l'usager caveenj

chown caveenj fic

Donner les fichiers fic1 et fic2 à l'usager sennevil et à tous les membres du groupe climat

chown sennevil:climat fic1 fic2

chmod [-R] mode fic ... 
Modifier les droits d'accès du fichier ou répertoire fic. Pour qu'un usager puisse lire ou modifier un fichier (ou répertoire) ou bien exécuter un programme, il faut que des droits d'accès lui aient été attribués. Chaque fichier possède des droits d'accès pour le propriétaire, le groupe et tous les autres utisateurs. On peut visualiser ces permissions au moyen de la commande ls -l.
-R 
Modifier le rértoire fic et tout son contenu (comportement récursif)

Exemples de permissions:

ls -l XWin.log 
-rw-r--r-- 1 pscavj01 Administ 3215 Jan 27 18:56 XWin.log

indique que le fichier est en mode lecture-écriture (rw-) pour le propriétaire pscavj01, en mode lecture pour le groupe Administ (r--) et en mode lecture pour tous les autres usagers (r--).

ls -l XWin 
drwxr-xr-- 1 pscavj01 Administ 3215 Jan 27 18:56 XWin

indique qu'il s'agit d'un réertoire (le d en début de ligne) et qu'il est en mode lecture-écriture-exécution (rwx) pour le propriétaire pscavj01, en mode lecture-exécution pour le groupe Administ (r-x) et en mode lecture pour tous les autres usagers (r--).

Pour pouvoir consulter le contenu d'un répertoire, il faut avoir des droits d'exécution pour celui-ci. Donc dans cet exemple, seuls l'usager pscavj01 et les membres du groupe Administ peuvent consulter les fichiers du répertoire XWin.

La modification des permissions se fait au moyen d'une séquence des mots clefs u (usager), g (groupe), o (others), a (all), des opérateurs + (ajouter), - (enlever), = (mettre égal à) et des permissions r (read), w (write), x (execute).

On peut aussi attribuer les permissions au moyen des valeurs numériques 1 (execute), 2 (write) et 4 (read) que l'on peut additionner entre elles pour obtenir, par exemple, 6 (4 + 2) pour read-write.

Exemples: Donner au propriétaire le droit d'exécuter le programme prog (i.e., rendre prog exécutable):

chmod u+x prog

Donner les droits de lecture et d'écriture à tous les utilisateurs pour le fichier fic:

chmod a+rw fic

Supprimer le droit d'exécution (consultation) pour tous les autres usagers pour le répertoires rep. Tous les autres usagers fait référence à tous les usagers qui ne sont pas l'usager propriétaire du répertoire ou qui ne font pas partie du groupe auquel appartient le répertoire rep:

chmod o-x rep

Rendre le programme prog exécutable et lisible pour tous et permettre au propriétaire de le modifier:

chmod 755 prog

lpr [-P imprimante] [fichier] ... 
Imprimer le contenu de fichier. Si on ne donne pas de nom de fichier, lpr utilise l'entrée standard. Si on ne donne pas de nom d'imprimante, la tâche est acheminée vers l'imprimante par défaut du système.

Exemples: Imprimer fic1 et fic2 sur l'imprimante par défaut:

lpr fic1 fic2

Imprimer l'entrée standard (sortie de la commande cat) vers l'imprimmante impPOLR:

cat fic1 | lpr -P impPOLR

Manipulation du contenu de fichiers texte

Les commandes qui suivent permettent de visualiser et de traiter le contenu des fichiers de type texte. Pour visualiser ou manipuler des fichiers binaires, veuillez vos référer à la section Manipulation du contenu de fichiers binaires.

cat [-nbET] [fichier] ... 
Afficher (concaténer) le contenu du fichier fichier sur la sortie standard. Si on donne plusieurs fichiers en paramètre, le contenu de chaque fichier est affiché un à la suite de l'autre. Si on ne fournie pas de nom de fichier, cat utilise l'entrée standard.
-n 
Numéroter les lignes
-b 
Ne numéroter que les lignes non vides ( ne fonctionne pas partout)
-E 
Afficher $ à la fin de chaque ligne
-T 
Afficher les caractères TAB comme ^I

Exemples: Afficher le contenu de fic à l'écran:

cat fic

Afficher le contenu de fic1 et fic2 à l'écran en numérotant les lignes:

cat -n fic1 fic2

Insérer le contenu de fic1 dans fic_out (écrase le contenu de fic_out) :

cat fic1 > fic_out

Ajouter le contenu de fic2 à la fin du fichier fic_out :

cat fic2 >> fic_out

more [fichier] ... 
Afficher le contenu du fichier fichier sur la sortie standard un écran à la fois. Si on donne plusieurs fichiers en paramètre, le contenu de chaque fichier est affiché un à la suite de l'autre. Si on ne fournie pas de nom de fichier, more utilise l'entrée standard. La commande more permet, en utilisant les commandes vi de se déplacer et de faire des recherches dans le fichier. La commande less est similaire à more mais offre beaucoup plus de fonctionnalités.

Exemples: Afficher le contenu de fic à l'écran:

more fic

Afficher le contenu de fic1 et fic2 à l'écran:

more fic1 fic2

Trier le contenu de fic1 et afficher le résultat un écran à la fois (ici, more utilise l'entrée standard :

sort fic1 | more

less [fichier] ... 
Afficher le contenu du fichier fichier sur la sortie standard un écran à la fois. Si on donne plusieurs fichiers en paramètre, le contenu de chaque fichier est affiché un à la suite de l'autre. Si on ne fournie pas de nom de fichier, less utilise l'entrée standard. La commande less permet, en utilisant les commandes de vi de se déplacer et de faire des recherches aussi bien par en avant que par en arrière dans le fichier. De plus, less n'a pas besoin de lire le fichier en entier au démarrage, ce qui fait qu'il peut démarrer plus rapidement qu'un éditeur tel vi.

Exemples: Afficher le contenu de fic à l'écran:

less fic

Afficher le contenu de fic1 et fic2 à l'écran:

less fic1 fic2

Trier le contenu de fic1 et afficher le résultat un écran à la fois (ici, less utilise l'entrée standard :

sort fic1 | less

head [-N] [fichier] ... 
Afficher les N premières lignes (10 par défaut) du fichier fichier sur la sortie standard. Si on donne plusieurs fichiers en paramètre, le nom de chaque fichier est affiché. Si on ne fournie pas de nom de fichier, head utilise l'entrée standard.

Exemples: Afficher les 10 premières lignes de fic à l'écran:

head fic

Afficher les 25 premières lignes de fic1 et fic2 à l'écran:

head -25 fic1 fic2

Trier le contenu de fic1 et afficher les 5 premières lignes du résultat (ici, head utilise l'entrée standard :

sort fic1 | head -5

tail [-N] [fichier] ... 
Afficher les N dernières lignes (10 par défaut) du fichier fichier sur la sortie standard. Si on donne plusieurs fichiers en paramètre, le nom de chaque fichier est affiché. Si on ne fournie pas de nom de fichier, tail utilise l'entrée standard.

Exemples: Afficher les 10 dernières lignes de fic à l'écran:

tail fic

Afficher les 50 dernières lignes de fic1 et fic2 un écran à la fois (more):

tail -50 fic1 fic2 | more

Trier le contenu de fic1 et afficher les 5 dernières lignes du résultat (ici, tail utilise l'entrée standard) :

sort fic1 | tail -5

sort [-bdfnr] [fichier] ... 
Trier le contenu du fichier fichier.
-b 
Ignorer les blancs en début de ligne
-d 
Trier selon l'ordre du dictionaire
-f 
Ignorer la casse
-n 
Faire un tri selon la valeur numérique
-r 
Inverser l'ordre du tri

Exemples: Trier les lignes de fic selon la valeur des chaînes de caractères et afficher le résultat à l'écran:

sort fic

Trier les lignes de fic selon la valeur numérique des chaînes de caractères et afficher le résultat à l'écran:

sort -n fic

Trier les lignes de fic selon la valeur numérique des chaînes de caractères et afficher le résultat à l'écran en ordre décroissant:

sort -nr fic

Il importe de savoir que l'opération de tri se fait en tenant compte du LOCALE c'est à dire l'ensemble des variables d'environnement qui définissent la langue, le pays, etc. de l'utilisateur. Avant d'effectuer un tri sur des valeurs numériques, entre autres, il est essentiel d'initialiser la variable d'environnement LC_ALL à l'aide de la commande export LC_ALL=C.

grep [-ihnvl] PATRON [fichier] ... 
Rechercher l'expression régulière PATRON dans le fichier fichier.
-i 
Ignorer la casse
-h 
Omettre le nom du fichier lorsque plusieurs fichiers sont fouillés
-n 
Indiquer les numéros de ligne
-v 
Afficher les lignes ne contenant pas le PATRON
-l 
Afficher uniquement le noms des fichiers contenant le PATRON

Exemples: Rechercher la chaîne Bonjour dans le fichier fic et afficher les numéros de lignes trouvées:

grep -n Bonjour fic

Trouver tous les fichiers du répertoire courant contenant la chaîne bonjour et afficher uniquement le nom de ces fichiers. La recherche se fait en ignorant la casse :

grep -li bonjour *

Trouver tous les fichiers du répertoire courant ne contenant pas le patron bo.*r (l'expression rérugière 'bo.*r' concorde avec bonjour, bonne heure, bonheur, bonne humeur,...) et afficher uniquement le nom de ces fichiers. La recherche se fait en ignorant la casse :

grep -liv 'bo.*' *

Trouver tous les fichiers du répertoire courant contenant des lignes composées uniquement de la chaîne Bonjour. La recherche se fait en ignorant la casse :

grep -i '^Bonjour$' *

cut [-cétendue] [fichier] ...
cut [-dséparateur] [-fétendue] [-s] [fichier] ... 
Afficher des parties de lignes de chaque fichier vers la sortie standard. cut permet entre autres, d'extraire des colonnes d'un fichier.
-cétendue 
Extraire les colonnes de caractères indiquées par la valeur de étendue
-fétendue 
Extraire les champs indiquées par la valeur de étendue
-dséparateur 
Indiquer à cut le caractère à utiliser comme séparateur de champs. Par défaut, cut utilise le tabulateur
-s 
Ne pas afficher les lignes ne contenant pas de champ valide

étendue peut être une liste (e.g., 2,3,5) ou prendre la forme [début][-][fin].

Par exemple:

-c1-10 	Les colonnes de caractères de 1 à 10
-c4- 	Les colonnes de caractères de 4 à la fin de la ligne
-c-4 	Les colonnes de caractères de 1 à 4
-f3 	Le troisième champ
-f3-5 	Les champs 3, 4 et 5
-f3,5,7 	Les champs 3, 5 et 7

Exemples: Affichier les colonnes 3 à 12 du fichier fic:

cut -c3-12 fic

Afficher uniquement les champs 3, 4 et 5 du fichier fic. Le séparateur de champ est une virgule :

cut -s -d',' -f3-5 fic

Afficher uniquement les champs 3, 5 et 6 du fichier fic. Le séparateur de champ est un espace :

cut -s -d' ' -f3,5,6 fic

paste[fichier] ... 
Coller séquentiellement les lignes correspondantes de chaque fichier, séparées par des tabulations, vers la sortie standard. Sans fichier, ou quand fichier est -, lire de l'entrée standard. paste s'utilise souvent en complément à la commande cut.

Exemples: Inverser les champs 1 et 2 du fichier fic_entree et les sauvegarder dans le fichier fic_sortie. Ici les fichers col1 et col2 sont des fichiers de travail:

cut -f1 fic_entree > col1      #Extraire champ 1
cut -f2 fic_entree > col2      #Extraire champ 2
paste col2 col1 > fic_sortie   #Coller les champs 2 et 1

wc [-cmwlL] [fichier] ... 
Afficher le décompte d'octets, de mots et de nouvelles lignes pour chaque fichier fichier et le nombre total de lignes si plus d'un fichier est spécifié. Sans fichier, ou quand fichier est -, lire de l'entrée standard.
-c 
Afficher le nombre d'octets
-m 
Afficher le nombre de lettres
-w 
Afficher le nombre de mots
-l 
Afficher le nombre de lignes
-L 
Afficher le nombre d'octets de la ligne la plus longue

Exemples:

Compter les octets, mots et lignes du fichier fic1:

wc fic1

Compter le nombre de lignes de l'entrée standard (en provenance de la commande cat du fichier fic1:

cat fic1 | wc -l


diff [-ibBEw] fichier1 fichier2
diff rep1 rep2 : Comparer le contenu des fichiers fichier1 et fichier2 ou des répertoires rep1 et rep2 et afficher les différences.
-i 
Ignorer la casse
-b 
Ignorer les changements dans l'espacement
-B 
Ignorer les lignes vides
-E 
Ignorer l'expansion des tabulateurs
-w 
Ignorer tous les espaces

Exemples:

Comparer les fichier fic1 et fic2:

diff fic1 fic2

Comparer les fichiers fic1 et fic2 en ignorant la casse et les changments d'espacement des blancs:

diff -ib fic1 fic2

Comparer le contenu des rértoires projets/web et projets/ancien_web:

diff projets/web projets/ancien_web

Manipulation du contenu de fichiers binaires

od [-abcfox] [fichier] ... 
Afficher le contenu du fichier fichier selon une représentation non ambiguë par un affichage des octets (en octal par défaut) sur la sortie standard. Sans fichier, ou quand fichier est -, lire de l'entrée standard.
-a 
Afficher en caractères nommés
-b 
Afficher en octal
-c 
Afficher en caractères ASCII
-f 
Afficher en nombres point flottant
-o 
Afficher en octal court
-x 
Afficher en hexadécimal

Exemples:

Afficher le contenu du fichier fic1 en octal:

od -b fic1

Afficher le contenu du fichier fic1 en octal court et en hexadécimal :

od -ox fic1

Afficher le contenu du fichier fic1 en ASCII:

od -c fic1

Afficher le contenu de l'entrée standard (cat datat) en point folttant:

cat data | od -f


cmp [-cl] fichier1 fichier2 
Comparer octet par octet le contenu du fichier fichier1 à celui du fichier fichier2.
-c 
Imprimer les octets qui diffèrent sous forme de caractères
-l 
Continuer la comparaison au-delà de la première différence

Exemples:

Vérifier si fic1 et fic2 sont identiques :

cmp fic1 fic2

Comparer tout le contenu de fic1 et fic2 et afficher les différences en ASCII, si possible :

cmp -lc fic1 fic2


Gestion des processus

Un certain nombre de commandes UNIX permettent d'obtenir de l'information sur les différents processus (programmmes) en exécution sur la machine. Une fois cette information recueillie, il est possible de modifier le comportement ou de mettre fin à certains des processus actifs. Pour pouvoir modifier le comportement d'un processus, il faut en être le propriétaire.

Les processus ont deux modes de fonctionnement sous UNIX soit en avant-plan et en arrière-plan. Lorsqu'on lance un processus en avant-plan, l'invite de commande (prompt) ne nous est retournée que lorsque la commande est complétée. En arrière-plan, l'invite de commande nous est immédiatement retournée pendant que le processus de la commande continue de s'exécuter.

Pour mettre fin à un processus lancé en avant-plan, il faut entrer les caractères CTL-C au clavier. Le processus est alors tué.

Pour suspendre un processus lancé en avant-plan, il faut entrer les caractères CTL-Z au clavier. Le processus tombe alors en dormance. On peut redémarrer un processus en dormance avec la commande fg pour continuer de le faire tourner en avant-plan ou avec la commande bg pour le faire basculer en arrière-plan.

Pour démarrer un processus immédiatement en arrière-plan, on suit la commande du caractère &.

Exemples:

Faire basculer l'éditeur Xemacs en arrière-plan:

Xemacs
CTL-Z
bg

Démarrer l'éditeur Xemacs en arrière-plan:

Xemacs &

Suspendre la commande top puis la redémarrer en avant-plan:

top
CTL-Z
fg

On peut obtenir la liste des processus associés à notre session (c.a.d. associés au terminal) qui sont en dormance ou qui s'exécutent en arrière-plan à l'aide de la commande ps. Il est alors possible de ramener à l'avant-plan une tâche d'arrière-plan ou de faire passer une tâche en dormance vers l'avant ou l'arrière-plan.

Exemple:

emacs &      # Démarrer emacs en arrière-plan
matlab       # Démarrer matlab en avant-plan (on perd alors l'invite de commande)
CTL-Z        # Mettre matlab en dormance
ps           # Obtenir la liste des processus associés au terminal
     PID TTY          TIME CMD
  19393 pts/0    00:00:00 bash
  19976 pts/0    00:00:00 emacs
  19978 pts/0    00:00:00 matlab
  20019 pts/0    00:00:00 ps
bg matlab    # Basculer matlab en arrière-plan pour récupérer l'invite de commande



top [-u usager] [-p PID] 
Afficher en ordre décroissant d'utilisation, la liste des processus utilisant le plus de ressources sytème. Sans paramètres, la commande top affiche à intervalle régulier l'état du système (nombre d'utilisateurs, charge moyenne, nombre de tâches, utilisation de la mémoire...), et les statistiques des processus les plus gourmants du système.
-u usager 
Faire un top uniquement pour les processus de l'utilisateur usager.
-p PID  
Fire un top uniquement pour le processus numéro PID


Exemple:

top - 09:57:38 up  1:39,  2 users,  load average: 0.08, 0.39, 0.45
Tasks:  74 total,   1 running,  73 sleeping,   0 stopped,   0 zombie
Cpu(s):  13.2% user,   2.6% system,   0.0% nice,  84.1% idle
Mem:    190708k total,   184772k used,     5936k free,     3292k buffers
Swap:   393080k total,     1844k used,   391236k free,    60044k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2481 caveenj 25 0 13240 12m 8336 S 7.9 6.9 0:04.86 gnome-terminal 1552 root 25 0 31132 22m 8084 S 7.3 11.9 3:21.91 X 2706 caveenj 25 0 1032 1032 828 R 0.7 0.5 0:00.24 top 1 root 25 0 120 84 64 S 0.0 0.0 0:03.42 init 2 root 25 0 0 0 0 S 0.0 0.0 0:00.25 keventd 3 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kapmd


Pour mettre fin au programme top on tape q out CTL-C dans la fenêtre d'affichage.


ps [-f] [-e | -U usager] 
Afficher les processus. Sans paramètres, la commande ps affiche les processus associés au terminal courant.


-e 
Afficher tous les processus du système
-f 
Afficher toute l'information sur les processus
-U usager Afficher les processus appartenant à l'usager usager

Exemples:

Afficher les processus associés à mon terminal:

ps

Afficher toutes les informations de tous les processus de l'usager caveenj :

ps -fU caveenj


kill [-signal] pid ...
kill [-s signal] pid ... 
Mettre fin à l'exécution de la tâche ayant le numéro de processus pid en lui faisant parvenir le signal signal. En l'absence d'une valeur -signal, le signal SIGTERM est utilisé. Les numéros de processus (pid) sont disponibles via la commande ps.
-signal
-s signal 
Utiliser le signal ayant pour valeur signal au lieu de SIGTERM. Pour mettre fin à un processus qui ignore SIGTERM, on utilise SIGKILL (9) comme valeur de signal.

Exemples:

Tuer avec un signal SIGKILL le processus ayant le pid=12354:

kill -9 12354

ou encore: kill -s SIGKILL 12354


Informations sur le système

Plusieurs commandes permettent d'obtenir des informations sur la machine et sur les usagers qui y ont un compte.

hostname 
Afficher le nom de la machine hôte à l'écran

uptime
Afficher depuis combien de temps la machine fonctionne.

date
Afficher l'heure du système.

uname [-anrsv]
Afficher certaines informations identifiant le système. Sans option, identique à -s.
-a 
Afficher toutes les informations disponibles
-n 
Afficher le nom du noeud réseau de la machine (hostname)
-r 
Afficher la révision de la version du système d'exploitation
-s 
Afficher le nom du noyeau
-v 
Afficher la version du noyeau

Exemples: Afficher toutes les informations sur la machine:

uname -a

id [usager] 
Afficher certaines informations sur l'usager usager: uid, gid et groupes. En l'absence de usager, afficher les informations concernant l'usager courant.

Exemples: Afficher le numéro d'utilisateur (uid), le numéro de groupe principal (gid) et les groues d'appartenance de l'usager caveenj:

id caveenj

who
whoami
who am i 
Afficher la liste des utilisateurs présentement branchés sur la machine (who). Afficher le nom effectif de l'utilisateur (whoami). Afficher l'identitée réelle de l'utilisateur (who am i).

Éditeur vi

vi [+ligne] fichier ... 
Démarrer vi et éditer le fichier fichier. Si on précise un numéro de ligne (+ligne), vi positionnera le curseur sur la ligne demandé dès l'ouverture du fichier.

Exemples: Editer le fichier fic1 à partir de la ligne 45

vi +45 fic1

Editer les fichiers fic1 fic2 et fic3

vi fic1 fic2 fic3

L'éditeur de texte de base de tout système UNIX se nomme vi pour visual editor. vi est un éditeur plein-écran qui fonctionne selon trois modes possibles:

commande 
le mode de fonctionnement par défaut de vi. Permet de se déplacer dans le fichier, de modifier le texte (effacer, remplacer) et de basculer en mode insertion ou en mode ligne de commande
insertion
mode qui permet d'ajouter du nouveau texte au fichier
ligne de commande
mode dans lequel les commandes sont entrées à la dernière ligne (la ligne de commandes) du terminal et qui permet de faire des modification globales, de sauvegarder ou de quitter l'éditeur.

Le lecteur devrait se familiariser avec le concept des expressions régulières s'il veut profiter de tout le potentiel de vi.

Les directives du mode commande
Opération Commande Définition
Déplacements
Si on omet n les déplacements se font d'une unité de mesure
nh Vers la gauche de n caractères
nj Vers le bas de n lignes
nk Vers le haut de n lignes
nl Vers la droite de n caractères
nw Avancer de n mots
nb Reculer de n mots
nG Aller à la ligne n
G Aller à la dernière ligne du document
0 (zéro) Aller au début de la ligne
$ Aller à fin de la ligne
CTL-F Avancer de un écran
CTL-B Reculer de un écran
Effacer, copier, coller et remplacer. (lorsque n est omis, il a pour valeur 1) nx Supprimer n caractères à partir de la position du curseur
dnl Supprimer les n caractères suivant, à partir de la position du curseur
dnh Supprimer les n caractères précédents, à partir de la position du curseur
dnw Supprimer les n mots suivants à partir de la position du curseur
dnb Supprimer les n mots précédents à partir de la position du curseur
ndd Supprimer n lignes y compris la ligne courante
ynl Copier les n caractères suivant, à partir de la position du curseur
ynh Copier les n caractères précédents, à partir de la position du curseur
ynw Copier les n mots suivants à partir de la position du curseur
ynb Copier les n mots précédents à partir de la position du curseur
nyy Copier n lignes y compris la ligne courante
p Coller le résultat de la dernière commande d, y, dd ou yy après la position du curseur. Si on a copié/effacé des caractères (d , y), ils sont ajoutés sur la même ligne. Si on a copié/effacé des lignes (dd, yy), elles sont ajoutées sous la ligne courante.
P Coller le résultat de la dernière commande d, y, dd ou yy avant la position du curseur. Si on a copié/effacé des caractères (d , y), ils sont ajoutés sur la même ligne. Si on a copié/effacé des lignes (dd, yy), elles sont ajoutées au-dessus de la ligne courante.
cnl Remplacer les n caractères suivants
cnh Remplacer les n caractères précédents
cnw Remplacer n mots
r Remplacer un caractère
R Ecraser le contenu jusqu'à ce que la touche d'échapement soit entrée
c0 Remplacer depuis le début de la ligne
c$ Remplacer jusqu'à la fin de la ligne
u Défaire
. (point) Répéter la dernière commande
Passer en mode insertion

Pour quitter le mode insertion, on utilise la touche d'échapement (Echap, ESC ou Escape)
i Insérer à partir de la position du curseur
I Insérer depuis le début de la ligne
a Ajouter à partir de la position suivant le curseur
A Ajouter à partir de la fin de la ligne
o Ouvrir une nouvelle ligne sous la ligne courante
O Ouvrir une nouvelle ligne au-dessus de la ligne courante
J Coller la ligne du dessous à la fin de la ligne courante
. (point) Répéter la dernière modification
Echap
ESC
Quitter le mode insertion
Recherches /chaîne Chercher la chaîne ou expression régulière chaîne en allant vers la fin du fichier
?chaîne Chercher la chaîne de caractères ou expression régulière chaîne en allant vers le début du fichier
n Chercher dans la même direction la prochaine chaîne ou expression régulière
N Chercher dans la direction inverse la prochaine chaîne ou expression régulière
Passer en mode ligne de commande
Le mode ligne de commande ne sert qu'à exécuter une commande à la fois. Pour annuler le mode ligne de commande , on utilise la touche d'échapement (Echap, ESC ou Escape)
 : Basculer en mode ligne de commande
Les directives du mode ligne de commande
Opération Commande Définition
Sauvegardes et fin de session

Le caractère ! permet de forcer l'exécution de la commande; par exemple, lorsqu'on essaie d'écrire dans un fichier qui n'est qu'en mode lecture.
 :w[!] Sauvegarder les fichier
 :w[!] fichier Sauvegarder sous le nom fichier
 :q[!] Terminer la session d'édition et quitter vi
 :wq[!] Sauvegarder et quitter vi
Exécution d'une commande shell  :! comm Démarrer un shell dans lequel sera exécutée la commande comm, sans quiter l'éditeur
Par exemple:
 :!ls -al
Supprimer, copier, coller et substituer   :début,[fin]d Supprimer toutes les lignes entre début et fin. Les lignes effacées peuvent être collées avec les commandes p ou P
Par exemple, pour effacer la ligne courante et les 4 suivantes:
 :.,.+4d

Effacer les lignes 4 à 12:
 :4,12d
 :début,[fin]y Copier toutes les lignes entre début et fin. Les lignes copiées peuvent être collées avec les commandes p ou P
Par exemple, pour copier la ligne courante et les 4 suivantes:
  :.,.+4y

Copier les lignes 4 à 12:
 :  4,12y
 :debut,[fin]s/orig/rempl/[g] Remplacer la chaîne ou expression régulière orig par rempl sur toutes les lignes entre début et fin. Si on omet le paramètre g, seule la première chaîne ou expression régulière de la ligne est remplacée
Exemples:
Remplacer tous les Windows par LINUX dans tout le document:
  :1,$s/Windows/LINUX/g

Remplacer, dans les six prochaines lignes (incluant la ligne courante) les chaînes Vi et vi par EMACS:
  :.,.+5s/[Vv]i/EMACS/g
Manipulation de fichiers   :e! Rouvrir le fichier en cours d'édition tel qu'il était à la dernière sauvegarde
  :n[!] Ouvrir le prochain fichier dans la liste des fichiers à éditer

Expressions régulières

Les expressions régulières sont des patrons de caractères qui servent pour les recherches et les substitutions dans un texte. Elles sont couramment utilisées avec grep et vi, entres autres.

Il existe plusieurs catégories d'expressions régulières. Seules les expressions régulières dites de base sont présentées ici.

Les caractères spéciaux
Caractère Définition
. (point) Représente n'importe quel caractère
^ Un début de ligne
$ Une fin de ligne
* Zéro ou plusieurs fois le caractère qui précède
[classe ] Une classe de caractères. Par exemple
[a-z] : toutes les lettres minuscules
[12ac] : les chiffres 1,2 et les lettres a et c
[^ ] Tous les caractères autres que ceux de la classe

Note : La concordance d'une expression régulière se fait avec la plus longue chaîne possible.

Exemples d'expressions régulières
Expression régulière Concordance
a a
b. b suivi de n'importe quel caractère.
Exemples: ba, bo, bb, b& ...
a* zéro ou plusieurs a de suite
Exemples: a, aaa, aaaaaa,
^a Un a en début de ligne
a$ Une ligne se terminant par la lettre a
bon.*r La séquence bon, suivie de zéro ou plusieurs caractères puis de la lettre r.
Exemples: bon r dans 'bon ragoût', bonheur dans 'bonheur',
bonne mère! quelle belle par dans 'bonne mère! quelle belle partie de pétanque' (et non pas avec 'bonne mèr')
[Tt]orpinouche Torpinouche et torpinouche
 [a-zA-Z].* Tous les mots commencant par une lettre. Ici, il y a un espace avant le crochet ouvrant .
 [^a-zA-Z] Tous les mots ne commençant pas par une lettre
^[0-9][0-9]*$ Toutes les lignes ne contenant que des chiffres

Autres commandes utiles

Voici une liste partielle de plusieurs utilitaires UNIX qu'il peut être très utile de connaitre. Il existe de la documentation en format manpage (et possiblement en format info) pour chacun de ces programmmes:

Autres commandes utiles
Utilitaire Description
ar Créer une archive de fichiers. Utilisé entre autres pour créer des bibliothèques de routines souvent utilisées
at Exécuter une tâche ultérieurement
awk Langage d'examen et de traitement de motifs
chgrp Changer le groupe propriétaire d'un fichier
cal Afficher un calendrier à l'écran
clear Effacer l'écran du terminal
compress
uncompress
Comprimer et décomprimer un fichier
dbx Débogueur symbolique
dos2unix
unix2dos
Convertir des fichiers ASCII de DOS à UNIX et vice-versa
egrep Recherche d'expressions régulières étendues
env Afficher les variables d'environnement
find Rechercher des fichiers ou répertoires
finger Rechercher des informations sur un utilisateur
ftp Transférer des fichiers d'une machine à une autre
lprm, lpstat Manipuler et obtenir des informations sur les queues d'impression
make Utilitaire pour maintenir des groupes de programmes
mount, umount Monter ou démonter un système de fichiers
newgrp Se connecter sous un nouveau groupe
nohup Exécuter un programme en le rendant insensible aux déconnexions de la session courante
passwd Changer son mot de passse
sed Editeur de fichiers de type flot (stream editor)
sleep Attendre une durée déterminée (Surtout utile dans les scripts)
su Devenir un autre utilisateur
tar Archiver un ensemble de fichiers
telnet Se connecter à une autre machine
tr Transposer ou éliminer des caractères
scp Copier des fichiers d'une machine à une autre en utilisant le protocole ssh
sftp Transférer des fichiers d'une machine à une autre en utilisant le protocole ssh
ssh Se connecter à une machine en utilisant le protocole ssh

Index des commandes