Principales commandes Unix

echo

echo [-n] [-e] [STRING]

echo affiche la chaîne de caractères "STRING"

-n n'affiche pas le retour chariot

-e permet une interprêtation de la chaîne "STRING"

caractère spécial signification
\n retour chariot (retour à la ligne + va à la ligne suivante)
\t tabulation
\r retour à la ligne sans changer de ligne

cat

concatenation

lit l'entrée standard (par défaut) ou des fichiers en arguments et les réécrits dans la sortie standard.

Remarque:

  • dans le cas de l'entrée standard, le marquage de fin de fichier est Ctrl-D

  • dans de nombreuses commandes, l'entrée standard et/ou la sortie standard peuvent être appelées -.

cat
cat f
cat f1 f2
cat f1 | cat - | cat > f2

En plus des redirections déjà vu >, <, et >>, cat accepte l'option << STRING: l'entrée standard va être lu jusqu'à ce qu'il rencontre la chaine STRING. Cela évite l'utilisation de Ctrl-D.

cat > f2 << END
Bonjour
VOici un fichier
END

more/less

La commande more permet d'afficher le contenu d'un fichier par page sur le terminal courant.

more gaussian.log

Si l'affichage nécessite plusieurs pages, more stoppe automatiquement à chaque page.

commande signification
Space affichage la page suivante
Enter affichage de la ligne suivante
q quitter
/string recherche de la prochaine occurence de string
n recherche de la prochaine occurence de la recherche en cours
? aide en ligne

L'un des principaux problème de more est l'affichage en arrière (=remonter dans le texte). Par opposition à more, la commande less existe. C'est une version amélioré qui permet notamment l'utilisation des flèche de navigation au clavier. Il est recommandé d'utiliser less plutôt que more.

ls

La commande ls permet de lister le contenu d'un répertoire. Par défaut il affiche le contenu du répertoire courant, excepté les fichiers ou répertoires commençant par . (dont . et ..). Les fichiers commençant par . sont dits des fichiers cachés.

Par défaut, ls trie les fichiers par ordre alphanumérique.

# affichage du repertoire courant
ls
# affichage du contenu du repertoire toto
ls toto
options de ls signification
-a affichage de tout le contenu, y compris les fichiers et répertoires cachés
-l affichage par liste
-1 affichage en une colonne
-t affichage triée par date
-r affichage par ordre inverse de la clé de tri
-S affichage triée par taille décroissante des fichiers

expansion des noms

La commande ls et plus généralement les commandes bash admettent l'utilisation de caractères spéciaux pour étendre les noms de fichiers.

caractères spéciaux pour ls signification
* n'importe qu'elle caractère ou suite de caractères
? 1 caractère
[abc] le caractère a, b, ou c
[a-z] un caractère compris entre a et z (ordre alphanumérique)
[A-Za-z0-9] un caractère alphanumérique
{a,b} a puis b

date

La commande date permet, par défaut, de connaître la date courante (jour + heure).

option de date signification
-r fichier affiche la date de dernière modification de fichier
-d chaine affiche la date correspondant à chaine
-s chaine modifie l'horloge interne de l'ordinateur à la date chaine

touch

La commande touch permet de modifier les dates de derniers accès et modification d'un fichier. Si le fichier n'existe pas, il le crée avec une taille de zéro octet. Par défaut, touch assigne au fichier la date courante.

options de touch effet
-a ne modifie que la date d'accès
-m ne modifie que la date de modification
-d date utilise la date date, sous forme de chaîne de caractères, plutôt que la date courante
-t [CC](CC)YY]MMDDhhmm[.ss] utilise la date [CC](CC)YY]MMDDhhmm[.ss] comme référence
-r fichier utilise la date du fichier fichier plutôt que la date courante

pwd

La commande pwd affiche le répertoire courante (print working directory).

cd

La commande cd permet de modifier le répertoire courant et donc de naviguer dans l'arborescence du système de fichiers.

Par défaut, cd ramène le répertoire courant au répertoire par défaut de l'utilisateur (son home directory).

Le chemin absolu du répertoire par défaut de l'utilisateur courant est ~. Le chemin absolu du répertoire par défaut d'un utlisateur lambda est ~lambda.

Il y a deux possibilités pour spécifier le changement de répertoire: soit par le chemin absolu, soit par le chemin relatif.

pwd
cd /tmp
pwd
cd /usr/bin
pwd
cd ../lib
pwd
cd ~
pwd

mkdir/rmdir

La commande mkdir permet de créer un nouveau répertoire. Elle prend pour argument le répertoire à créer (chemin absolu ou relatif). Si le répertoire existe déjà, une erreur est issue.

Par défaut, la commande mkdir ne crée qu'un répertoire à la fois. Ainsi pour créer le répertoire c dans le répertoire b du répertoire a. Si a et b n'existe pas, il faut effectuer:

# creation de a/b/c si a et b n'existe pas
mkdir a
mkdir a/b
mkdir a/b/c

L'option -p de mkdir permet d'éviter cela:

mkdir -p a/b/c

crée les répertoires a, b, et c si ceux-ci n'existe pas, ne fait rien sinon (la commande n'issue pas d'erreur).

La commande rmdir permet de detruire un répertoire. Pour être détruit, le répertoire doit être vide, sinon une erreur est issue (attention aux fichiers cachés).

De la même manière qu'avec mkdir, pour effacer le répertoire a/b/c, il faut effacer a/b/c puis a/b puis a.

rmdir a/b/c
rmdir a/b
rmdir a

Pour rmdir, il existe également l'option -p qui permet d'effacer tous les répertoires du chemin spécifié (toujours à condition que c'est chemin soit vide).k

cp

La commande cp (copy) permet, par défaut, de copier un fichier dans un fichier ou un répertoire.

cp source target

Le premier argument est le fichier qu'on veut copier. Le deuxième argument est le fichier qu'on veut créer ou le répertoire dans lequel on veut copier le fichier (dans ce cas, le nom du nouveau fichier sera le même que le nom de la source).

touch a
mkdir b
ls
ls b
cp a c
ls
cp a b
ls
cp a b/c
ls b
options de cp signification
-r copie récursive: permet de copier l'entièreté d'un répertoire (fichiers et sous-répertoire inclus)
-i demande confirmation avec d'écraser un fichier cible pré-existant
-f ne demande pas de confirmation avec d'écraser un fichier cible pré-existant
-p préserve les dates et les droits lors de la copie
-a -r et -p

mv

La commande mv (move) permet de déplacer (=de renommer) un fichier.

mv source target
options de mv effet
-i demande confirmation avec d'écraser un fichier cible pré-existant
-f ne demande pas de confirmation avec d'écraser un fichier cible pré-existant

rm

La commande rm (remove) permet d'effacer un ou plusieurs fichiers du système de fichiers.

rm fichier1 [fichier2 ..]
options de cp signification
-r copie récursive: permet de copier l'entièreté d'un répertoire (fichiers et sous-répertoire inclus)
-i demande confirmation avec d'écraser un fichier cible pré-existant
-f ne demande pas de confirmation avec d'écraser un fichier cible pré-existant

Par défaut, la commande rm n'efface que des fichiers (mais pas de répertoire), mais l'option -r accepte des répertoires comme arguments de commande.

⚠️ Atention à l'utilisation de rm -fr qui peut être très dangereuse.

ln

La commande ln permet la création d'un lien.

Pour rappel, le système de fichiers fait la distinction entre le nom d'un fichiers (stocké dans la table du répertoire qui le contient) et la description du fichier (i-noeud). Un lien permet de définir une relation entre un nom de fichier et un i-noeud. La commande ln permet d'ajouter un lien entre l'i-noeud d'un fichier et un nouveau nom.

ln source target

source est un nom de fichier, target est un nom de fichier qui va se référer au même i-noeud que target.

Le nombre de lien d'un fichier peut être obtenu grâce à la commande ls (ls -la).

options de cp signification
-f force la création du lien en effaçant si besoin un fichier pré-existant
-s création d'un lien symbolique

Un lien symbolique est un lien vers le nom de fichier et non pas vers l'i-noeud.

touch a b 
ls -l
ln a c
ls -l
ln -s b d
ls -l
ln a e
ls -l

yes

La commande yes permet de répondre par défaut à yes aux questions qu'une ou plusieurs commandes bash peuvent demandées.

chmod

Droits d'un fichier

Chaque fichier possède dans son i-noeud une information concernant les droits que peut avoir un utilisateur sur ce fichier.

Il existe 3 types de droits:

  • lecture(r)

  • écriture/modification (w)

  • exécution (x)

Il existe 3 types d'accès à un fichier:

  • par l'utilisateur (u)

  • par le groupe d'utilisateurs (g)

  • par les autres (o)

Les droits pour un fichier sont accessibles par la commande ls -l (1ère colonne).

Un premier caractère indique le type de fichier:

caractère signification
d répertoire
- fichier simple
l lien symbolique

Les neuf caractères suivantes donnent les droits, dans l'odre, pour l'utilisateur, le groupe et les autres.

Par exemple, rwxr-x--- signifie que l'utilisateur a les droits en lecture, écriture et exécution, les autres utilisateurs du groupe ont les droits en lecture et exécution (pas en modification), et les autres utilisateurs (hors groupe) non aucun droit.

Modification des droits

La commande chmod permet de modifier les droits d'un fichier.

Pour chaque droit et chaque accès, on peut définir un bit qui vaut vrai si l'accès est permis, faux sinon. Pour chaque type d'accès, on peut regrouper les trois bits de droits (rwx) en 1 octet:

binaire decimal droits signification
000 0 --- aucun droit
100 4 r-- lecture simple
110 6 rw- lecture + écriture
101 5 r-x lecture + exécution
111 7 rwx lecture + écriture + exécution

La commande chmod accepte deux types d'arguments pour les droits: soit une forme alphabétique (rwx), soit une forme numérique (0,4,5,etc).

# utilisation de chmod
chmod droit fichier
ls -l a
# droit numerique (triplet decimal)
chmod 777 a
ls -l a
chmod 664 a
ls -l a
# modification par ajout ou restriction
chmod o+x a
ls -l a
chmod g-wx a
# droit absolu
chmod u=rwx a
chmod u=rwx,g=rx,o=r a
# a: all
chmod a=rwx a 

umask

Lorsqu'un fichier est créé, il possède des droits par défaut. La commande umask permet de connaître ces droits par défaut. Elle retourne les droits qui sont enlevés à un fichier à partir d'une valeur comprenant "tous les droits".

Un fichier possède à la base les droits rw-rw-rw et un répertoire les droits rwxrwxrwx (le x ici signifie qu'on peut entrer dans le répertoire).

Par exemple, si umask vaut 022 (ce qui correspond à -ww), tout fichier créé aura pour droit par défaut rw-r--r--, alors que tout répertoire aura pour droit rwxr-xr-x. Pour empêcher tout personne autre que l'utilisateur de pouvoir entrer dans un répertoire ou lire un fichier, il faut mettre le mask à 077.

df

La commande df permet de lister les volumes présents dans la machine et de connaître leurs taux d'occupation.

option de df signification
-h impression dans un format plus lisible (k, M, G)
-l impression des volumes locaux seulement
-t TYPE impression des volumes de type TYPE
-x TYPE exclusion dans l'impression des volumes de type TYPE

Pour connaître les types de volumes présents sur la machine, on peut utiliser la commande mount (sans argument).

du

La commande du permet de connaître la taille d'un fichier ou d'un répertoire (= la place prise par ce fichier ou ce répertoire dans le disque). La commande est par défaut récursif, c'est-à-dire qu'elle parcourt un répertoire mais aussi tous ses répertoires fils.

option de df signification
-h impression dans un format plus lisible (k, M, G)
-s impression de la taille des répertoires et fichiers en argument uniquement
-k impression en kilo-octet
-x reste sur le système de fichiers initial (même si les répertoires fils sont sur d'autres systèmes de fichiers)

who/w

La commande who permet de savoir qui est connecté sur la machine.

La commande w permet de savoir qui est connecté sur la machine et ce qu'il fait.

whoami/id

La commande whoami permet de retrouver son login 😃

La commande id permet de retrouver son numéro d'identifiant (UID) et de groupe (GID).

uname/hostname

La commande hostname permet de retrouver le nom de la machine sur laquelle on travaille.

La commande uname permet de savoir sur quel type de machine on travaille. L'option -a permet d'avoir plus de détail sur la version du système d'exploitation utilisée.

last

La commande last permet de connaître les dernières connections sur la machine: qui et combien de temps?

La commande head permet d'extraire la tête d'un fichier. Par défaut, head affiche les 10 premières lignes du fichier.

options de head signification
-n nombre affiche les nombre premières lignes

tail

La commande tail permet d'extraire la queue d'un fichier. Par défaut, tail affiche les 10 dernières lignes du fichier.

option de tail signification
-n nombre affiche les nombre dernières lignes
-n +nombre affiche les lignes à partir de la ligne numéro nombre
-f continue à afficher la fin du fichier au fur et à mesure de sa modification

paste

La commande paste permet de joindre des fichiers lignes à ligne.

cut

La commande cut permet d'extraire des sections d'un fichier ligne à ligne. Pour cela, il faut sélectionner soit un ou des champs, soit un ou des caractères.

option de cut signification
-c columns ne sélectionne que les caractères définis
-f fields ne sélectionne que les champs définis
-d char définit le caractère char comme délimiteur de champ (par défaut, la tabulation)
-s n'affiche que les lignes qui ont répondu au critère de sélection (par défaut, les lignes non transformées sont affichées)

Les caractères ou les champs sont définis de la manière suivante:

N le champ ou le caractère N
N- les champs ou les caractères depuis N jusqu'au dernier
-N les champs ou les caractères du première au Nème
N-M les champs ou les caractères depuis N jusque M (inclus)
N-M,L-P les champs ou les caractères N à M puis de L à P
cat > f << END
1234567890
a b c d e.
aa  cc  ee
1234. 789.
END
cut -c 1-4 f
cut -c 1-3,8- f
cut -f 1 f
cut -d" " -f 1 f 
cut -d. -f 2 f

tee

La commande tee permet de garder une copie de la sortie standard dans un fichier. Elle lit l'entrée standard, la recopie dans la sortie standard (comme cat) et recopie cette même entrée standard dans un fichier désigné en argument.

option de tee signification
-a ajoute au fichier (sans écrasement au préalable)

sort

La commande sort permet de trier les lignes d'un fichier. Par défaut, le tri est effectué par ordre alphanumérique croissant. La clé principale de tri est la première colonne, la clé secondaire est la deuxième colonne, et ainsi de suite.

option de sort signification
-n tri par ordre numérique
-k col la colonne col est utilisée comme clé de tri (on peut en mettre plusieurs, dans l'ordre de tri)
-r tri par ordre décroissant (par défaut, tri par ordre croissant)
-u ne garde qu'une seule ligne (la première) par ligne identique

wc

La commande wc compte dans un fichier le nombre de caractères, de mots et/ou de lignes. Par défaut, elle donne les trois informations (dans l'ordre, le nombre de lignes, de mots et de caractères).

option de wc signification
-l affiche le nombre de lignes
-c affiche le nombre de caracteres
-w affiche le nombre de mots

split

La commande split permet de diviser un fichier en parts égales. Les parties sont stockées dans des fichiers nommés PREFIXaa, PREFIXab, PREFIXac, etc. Par défaut, PREFIX vaut x et la division s'effectue par morceaux de 1000 lignes.

option de split signification
-a n nombre n de suffixe (par défaut 2 => aa, ab, ac, etc.)
-l n divise toutes les n lignes
-b n divise tous les n bytes
-d utilise un suffixe numérique plutôt qu'alphabétique (00, 01, 02, etc.)

basename

La commande basename permet de retirer la partie répertoire d'un nom de fichier. Suivi d'un suffixe, elle permet également de retirer ce suffixe.

basename f1
basename /home/lambda/f1
basename /home/lambda/f1.txt .txt

dirname

La commande dirname permet d'extraire le répertoire d'un nom de fichier (à partir du nom et non de sa location éventuelle).

dirname toto
dirname titi/toto
dirname /tmp/toto

file

La commande file détermine le type d'un fichier: texte, binaire, etc.

cmp

La commande cmp permet de comparer deux fichiers et identique s'ils sont identiques. Si les deux fichiers sont identiques, cmp ne renvoie rien. Si les deux fichiers sont différents, cmp génère un message sur la sortie standard indiquant le premier élément différent entre les deux.

/dev/null

/dev/null est un fichier spécial du système qui ne contient rien. Il est toujours de taille nulle, même si on écrit dedans. Il est pratique à utiliser lors d'une redirection.

Par exemple:

cat `< /dev/null >` file

crée un fichier file de taille zéro.

cat f1 > /dev/null

redirige la sortie standard dans /dev/null qui ne contiendra rien.

cmp f1 f2 > /dev/null

redirige le message d'erreur éventuel vers /dev/null.

code d'erreur retour

bash vous permet de savoir si une commande s'est effectuée avec succès ou non grâce à la variable $? (voir les variables plus tard). Si une commande s'est effectuée normalement, $? vaut 0 et est différent de 0 sinon (la valeur non nulle peut alors avoir une signification).

cmp f1 f1
echo $?
cmp f1 f2
echo $?
cmp f1 f2 > /dev/null
echo $?

Il est possible d'utiliser les ou et et logique pour effectuer une deuxième commande en fonction du résultat de la première. Le ou logique en bash s'écrit ||, tandis que le et logique s'écrit &&. Comme en langage C, la deuxième partie du et n'est exécuté que si la première partie vaut vrai, alors qu'avec un ou la deuxième partie n'est exécuté que si la première partie est fausse.

cmp f1 f1 > /dev/null && echo les fichiers sont identiques
cmp f1 f2 > /dev/null || les deux fichiers ne sont pas identiques 
cmp f1 f1 > /dev/null && echo les fichiers sont identiques || echo les fichiers ne sont pas identiques
cmp f1 f2 > /dev/null && echo les fichiers sont identiques || echo les fichiers ne sont pas identiques

diff

La commande diff permet d'afficher la différence entre deux fichiers.

option de diff signification
-i ignore la casse (= la différence entre minuscule et majuscule)
-w ignore les espaces
-B ignore les lignes blanches
-y affiche les deux textes côte-à-côte

compress/uncompress

Lorsqu'un fichier est trop gros, on peut le compresser, c'est-à-dire de le transformer dans un fichier binaire de taille inférieure et contenant la même information. Pour ré-obtenir le fichier original, il faut le décompresser.

compress et uncompress sont les deux commandes originales UNIX pour la compression et la décompression, respectivement. Le fichier compressé se termine par défaut par l'extension .Z.

cat f1
cp f1 f2
ls -l
compress f1
ls -l
uncompress f1.Z
ls -l
cmp f1 f2

gzip/gunzip

gzip et gunzip sont les versions GNU de compress et uncompress. Le suffixe d'un fichier compressé par gzip est .gz.

option de gzip/guzip signification
-c redirige le résultat dans la sortie standard
gunzip -c f1.gz > f1
ls -l
cat f1 | gzip -c - > f2.gz

bzip2/bunzip2

bzip2 et bunzip2 sont des versions "plus modernes" de gzip et gunzip, respectivement. De manière générale, la compression est plus importante (= le fichier compressé possède une taille plus petite avec bzip qu'avec gzip).

zcat/zless

zcat et zless sont les versions de cat et less appliquées aux fichiers compressés.

zcat est équivalent à la commande gunzip -c, zless fichier est équivalent à gunzip -c fichier | less.

time

La commande time permet de connaître le temps qu'a pris une commande UNIX. Elle est utilisée comme préfixe de la commande initiale.

time ls

La commande time reporte 3 temps: le temps d'attente réel entre le moment où la commande est issue et le moment où la commande se termine; le temps utilisateur qui représente le temps d'utilisation du CPU pour effectuer la commande; et le temps système qui comprend tous les appels au système d'exploitation (accès au disque, etc.) et qui ont interrompu l'exécution par le CPU de la commande.

cal

La commande cal affiche le calendrier du mois courant ou d'une date donnée en argument.

cal
cal January 1999

tar

La commande tar (tape archive) permet de stocker des fichiers (et des répertoires) dans une archive.

tar s'utilise, au choix, pour créer (option -c), lister (-t) ou extraire (-x) une archive.

option de tar signification
-f tarfile sauvegarde/lit l'archive dans tarfile (par défaut, la sortie standard est utilisée en lecture et l'entrée standard en archivage)
-v verbose: donne de l'information supplémentaire
-z compresse/décompresse l'archive avec gzip/gunzip
-j compresse/décompresse l'archive avec bzip2/bunzip2
-C dir change le répertoire par défaut en dir
# creation d'une archive
tar -cvf /tmp/toto.tar  .
# listage du contenu de l'archive
tar -tvf /tmp/toto.tar
# extraction dans le repertoire /tmp/toto
mkdir /tmp/toto
cd /tmp/toto
tar -xvf /tmp/toto.tar
# ou directement
tar -xvf /tmp/toto.tar -C /tmp/toto
# creation d'une archive compressee
tar -czvf /tmp/toto.tgz .

Par convention, on suffixe .tar les archives de tar, .tgz les archives compressées avec gzip et .tar.bz2 les fichiers compressées avec bzip2.

Un fichier .tgz correspond en fait à un fichier .tar compressé avec gzip. On peut ainsi faire:

gunzip -c toto.tgz > toto.tar

sleep

La commande sleep suivi d'un nombre met en attente l'interprêteur ce nombre de secondes. Dans la plupart des implantations, l'argument de sleep doit être un entier, mais un réel est parfois accepté.

ps

La commande ps permet de lister les processus.

option de ps signification
-e tous les processus
-f format long
-u user les processus de l'utilisateur user

kill

La commande kill permet d'envoyer un signal (par défaut de terminaison) à un ou des processus.

option de kill signification
-L liste les signaux possibles qu'on peut envoyer
-15 ou -TERM signal de terminaison (défaut)
-9 ou -KILL signal de terminaison qui ne peut être bloqué par le processus
-STOP éteint un processus (sans le tuer)
-CONT relance un processus éteint

nohup

La commande nohup permet d'excuter une commande sans que celle-ci soit interrompue par la fin d'une session. nohup précède la commande à exécuter.

Ctrl-Z/fg/bg/&

Une commande peut être utilisée de manière asynchrone en la suffixant par &. L'interprêteur de commande rend alors la main (le prompt) avant que l'exécution de la commande ne soit terminée. On dit alors que la commande est en arrière-plan (background). Pour la remettre au premier-plan (foreground) il faut utiliser la commande fg.

sleep 1
sleep 10 &
ps
fg

Un processus en cours peut être stoppé grâce à la commande Ctrl-Z (=appui sur la touche Control puis Z). Le prompt est alors récupéré mais l'exécution du processus est arrêté. Pour le continuer, on a alors deux choix: soit en arrière-plan (commande bg), soit en premier-plan (commande fg).

history

La commande history permet de lister les dernières commandes effectuées.

Chaque commande est référencé par un numéro dans l'historique des commandes.

Utilisation de l'historique:

!! répétition de la dernière commande effectuée
!n répétition de la commande numéroté n dans l'historique
!-n répétition de la n-ième plus récente commande
!chaine répétition de la dernière commande commençant par chaine
!?chaine? répétition de la dernière commande contenant la chaine chaine

alias/unalias

Une abbréviation de commande est appelée alias en shell. Créer et détruire une abbréviation s'effectuent respectivement par les commandes alias et unalias.

Par défaut, alias liste les alias en cours.

alias [nom[=valeur]]
alias
alias ls
ls
alias ls="ls -l"
ls
\ls

Si une commande est aliasée, le suffix \ permet de revenir à la forme initial (avant de rechercher une commande dans le PATH, le shell regarde si un alias de la commande existe et l'exécute en premier; le prefix \ inhibe l'utilisation de l'alias).