Développement d'applications Web avec LAMP

Document d'accompagnement pour le cours 420-KB9-LG

Principales commandes Linux

Dernière mise à jour le 12 décembre 2022

Manipulation des répertoires

Cette sous-section présente les principales commandes qui permettent de manipuler les répertoires.

pwd

La commande pwd (print working directory) affiche le nom du répertoire courant. Le répertoire courant est parfois appelé répertoire de travail ou encore répertoire actif.

Syntaxe :

pwd

Exemple :

$ pwd
/home/patoche
$

cd

La commande cd (change directory) change le répertoire courant pour celui dont le nom est passé en paramètre.

Syntaxe :

cd [répertoire]

Utilisée sans paramètre, cd ramène l'usager dans son répertoire maison.

Exemple :

$ cd jeux
$ pwd
/home/patoche/jeux
$ cd golf
$ pwd
/home/patoche/jeux/golf
$ cd
$ pwd
/home/patoche
$

mkdir

La commande mkdir (make directory) crée un ou plusieurs répertoires.

Syntaxe :

mkdir [-p] répertoire(s)

Exemple :

$ mkdir alpha beta
$ cd alpha
$ pwd
/home/patoche/alpha
$ mkdir gamma
$ cd gamma
$ pwd
/home/patoche/alpha/gamma
$

L'option -p permet de créer plusieurs niveaux de répertoires en une seule commande.

Exemple :

$ mkdir -p alpha/gamma beta
$ cd alpha/gamma
$ pwd
/home/patoche/alpha/gamma
$

rmdir

La commande rmdir (remove directory) détruit un ou plusieurs répertoires.

Syntaxe :

rmdir répertoire(s)

Exemple :

$ rmdir junk
$ rmdir alpha/gamma alpha beta
$

ATTENTION : Un répertoire qui contient encore des fichier ne peut être détruit avec rmdir (voir rm -r)!

ls

La commande ls (list) affiche le contenu du répertoire dont le nom est passé en paramètre. Si aucun répertoire n'est spécifié, ls donne la liste des fichiers du répertoire courant.

Syntaxe :

ls [options] [répertoires et/ou fichiers]

Exemple :

$ ls
bin
dead.letter
jeux
bilan.2020
$

La commande ls offre une foule d'options dont les principales sont énumérées ici :

-a(all) affiche le nom de tous les fichiers (y compris les fichiers cachés)
-Fajoute "/" aux noms de répertoires et "*" aux noms de fichiers exécutables
-l(long) affiche la plupart des attributs
-R(Recursive) affiche récursivement le contenu de tous les sous-répertoires
-r(reverse) affiche les noms dans l'ordre inverse
-s(size) affiche la taille en blocs
-t(time) affiche d'après la date de la dernière modification
-i(inode) affiche le numéro de inode

Lorsqu'un nom de fichier est passé en paramètre, ls permet de vérifier directement la présence de celui-ci.

Exemple :

$ ls dead.letter
dead.letter
$ rm dead.letter
$ ls dead.letter
$

Chemin d'accès aux fichiers

Un chemin d'accès permet de spécifier sans ambiguïté un fichier particulier dans un système de fichiers Linux.

Ce concept permet d'utiliser comme paramètre d'une commande Linux le nom d'un fichier qui n'est pas dans le répertoire courant ou le nom d'un répertoire qui n'est pas sous-répertoire du répertoire courant.

Chemin absolu

Un chemin d'accès qui débute par le caractère "/" est un chemin d'accès absolu. Il spécifie le chemin complet pour accéder au fichier à partir du répertoire racine.

Exemples :

/home/patoche/jeux
/etc/conf/cf.d/init.base

La commande pwd affiche le chemin d'accès absolu du répertoire courant.

Chemin relatif

Un chemin d'accès qui ne débute pas par un "/" est un chemin d'accès relatif. Il désigne le chemin pour accéder au fichier à partir du répertoire courant.

Exemples :

jeux/golf    ... à partir de /home/patoche
adm/messages ... à partir de /usr

Répertoire parent

Le symbole ".." désigne le répertoire parent d'un répertoire donné. Il peut être utilisé partout où une commande s'attend à trouver un nom de répertoire.

Exemple :

$ pwd
/home/patoche/jeux/golf
$ cd ..
$ pwd
/home/patoche/jeux
$

Répertoire courant

Le symbole "." désigne le répertoire courant. Lui aussi peut être utilisé partout où une commande s'attend à trouver un nom de répertoire.

Exemple :

$ cd prog
$ cp /home/linda/Test.java .
$

Répertoire maison

Dans un système utilisant le shell Bash, le caractère "~" peut être utilisé pour désigner le répertoire maison.

Exemple :

$ cd /home/linda
$ cp Test.java ~/prog
$

Manipulation des fichiers

Cette sous-section présente les principales commandes qui permettent de manipuler les fichiers.

cat

C'est la commande à tout faire dans Linux. La commande cat peut être utilisée pour créer un fichier, examiner le contenu d'un fichier ou concaténer des fichiers.

Exemple de création de fichier :

$ cat > proverbe
Pierre qui roule
n'amasse pas mousse.
CTRL-d
$

Exemple d'examen du contenu d'un fichier :

$ cat proverbe
Pierre qui roule
n'amasse pas mousse.
$

Exemple de concaténation de fichiers :

$ cat > dicton
Le chat parti,
les souris dansent.
CTRL-d
$ cat proverbe dicton >> mon_texte
$ cat mon_texte
Pierre qui roule
n'amasse pas mousse.
Le chat parti,
les souris dansent.
$

more

La commande cat est inadéquate pour l'affichage d'un fichier assez long étant donné qu'elle ne permet pas d'arrêter le défilement du texte à l'écran.

La commande more affiche le contenu d'un fichier en procédant un écran à la fois. A la fin de chaque "écran" de texte, more attend que l'usager presse une des touches suivantes :

SPACEpour l'affichage de l'écran suivant
ENTERpour l'affichage de la ligne suivante
qpour cesser l'affichage

Syntaxe :

more [options] [fichier(s)]

Les options les plus utilisées sont les suivantes :

-cévite le défilement du texte en débutant toujours l'affichageen haut de l'écran
-n(où n est un nombre entier) fixe la taille de la fenêtre
+n(où n est un nombre entier) débute l'affichage à la n-ième

cp

La commande cp (copy) sert à copier un fichier dans un autre ou à copier un ou plusieurs fichiers dans un répertoire.

Syntaxe :

cp fichier1 fichier2
cp fichier(s) répertoire

ATTENTION : Si fichier2 existe déjà il sera remplacé sans avertissement!

Exemple (dans un fichier) :

$ ls
Test.java
$ cp Test.java Bug.java
$ ls
Test.java
Bug.java
$

Exemple (dans un répertoire) :

$ mkdir rep
$ cp Test.java Bug.java rep
$ ls rep
Test.java
Bug.java
$

mv

La commande mv (move) sert à renommer un fichier ou un répertoire ainsi qu'à déplacer un ou plusieurs fichiers d'un répertoire à l'autre.

Syntaxe :

mv fichier1 fichier2 mv répertoire1 répertoire2 mv fichier(s) répertoire

ATTENTION : Si fichier2 existe déjà il sera remplacé sans avertissement!

Exemple (fichiers) :

$ ls
Test.java
$ mv Test.java NewTest.java
$ ls
NewTest.java
$

Exemple (répertoires) :

$ mkdir rep
$ ls
NewTest.java
rep
$ mv rep newrep
$ ls
newrep
NewTest.java
$

Exemple (fichier et répertoire) :

$ ls
newrep
NewTest.java
$ mv NewTest.java newrep
$ ls
newrep
$ ls newrep
NewTest.java
$ 

rm

La commande rm (remove) détruit un ou plusieurs fichiers. Elle permet également de détruire un répertoire avec son contenu.

Syntaxe :

rm [options] fichier(s) ou répertoire(s)

Les options les plus utilisées sont les suivantes :

-idemande une confirmation avant de procéder (idéal pour le traitement par lots)
-rdétruit un répertoire avec tout son contenu (fichiers et répertoires)

Exemple (fichier) :

$ ls
un_fichier
$ rm -i un_fichier
rm: remove un_fichier? y
$ ls
$

Dans l'exemple précédent, n'importe quelle réponse autre que "y" laisserait le fichier intact.

Exemple (répertoire) :

$ mkdir -p bonjour/la/visite
$ ls
bonjour
$ rm -r bonjour
$ ls
$

ln

La commande ln (link) crée un lien supplémentaire sur un fichier. Un lien est une entrée dans un répertoire. Cela veut dire qu'un même fichier a la possibilité d'apparaítre plusieurs fois dans le même répertoire (noms différents) ou dans des répertoires différents (noms identiques ou différents).

La commande ln est surtout utilisée pour rendre un fichier disponible sous plusieurs noms.

Syntaxe :

ln fichier1 fichier2 ln fichier(s) répertoire

Exemple :

$ ls
ventes.db
$ ln ventes.db mars.db
$ ls
mars.db
ventes.db
$ mkdir rep
$ ln ventes.db rep
$ ls rep
ventes.db
$

Fichiers et sécurité

La plupart des mécanismes de sécurité de Linux s'articulent autour du contenu des fichiers /etc/passwd (usagers) et /etc/group (groupes d'usagers).

/etc/passwd

Le fichier /etc/passwd contient les renseignements dont le système a besoin à propos de chaque usager du système. Ce fichier est public et peut être affiché par n'importe quel usager.

Ceci est un extrait du fichier /etc/passwd d'un système réel :

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
...
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
patoche:x:1000:1000:Alain Patoche:/home/patoche:/bin/bash
bob:x:1001:1001:Robert Gratton:/home/bob:/bin/bash
linda:x:1002:1002:La Doudoune:/home/linda:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
timidity:x:123:127:TiMidity++ MIDI sequencer service:/etc/timidity:/usr/sbin/nologin
mysql:x:124:128:MySQL Server,,,:/nonexistent:/bin/false
sbt:x:999:999:sbt daemon-user:/home/sbt:/bin/false
jetty:x:125:129::/usr/share/jetty9:/bin/false
mosquitto:x:126:132::/var/lib/mosquitto:/usr/sbin/nologin

Chaque ligne du fichier /etc/passwd est divisée en 7 champs contenant l'information suivante :

  1. nom d'usager
  2. mot de passe (chiffré)
  3. numéro d'identification de l'usager (UID)
  4. numéro d'identification du groupe (GID)
  5. information supplémentaire (généralement nom et prénom de l'usager)
  6. répertoire maison
  7. shell de connexion

Dans certains systèmes le mot de passe chiffré est remplacé par un "x" et conservé dans un fichier dont l'accès est restreint.

/etc/group

Le fichier /etc/group contient le nom des groupes d'usagers du système et la liste de leurs membres. Un usager peut faire partie de plus d'un groupe.

Ceci est un extrait du fichier /etc/group d'un système réel :

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,patoche
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
...
patoche:x:1000:
sambashare:x:126:patoche,bob,linda
timidity:x:127:
realtime:x:1001:patoche
mysql:x:128:
sbt:x:999:
jetty:x:129:
kvm:x:130:patoche
rdma:x:131:
mosquitto:x:132:

Chaque ligne du fichier /etc/group est divisée en 4 champs contenant l'information suivante :

  1. nom de groupe
  2. mot de passe (rarement utilisé)
  3. numéro d'identification du groupe (GID)
  4. membres du groupe

Attributs des fichiers

La commande ls -l (ou son alias ll) affiche la plupart des attributs d'un fichier.

Exemple :

$ ls -l Chapitre_4.pdf
-rw-r--r--  1 stephane  info    8152 Jan 25 12:03 Chapitre_4.pdf
$

La sortie est divisée en 8 champs :

  1. le premier caractère indique le type de fichier
    -   fichier ordinaire
    b   spécial (périphérique de transfert par blocs)
    c   spécial (périphérique de transfert par caractères)
    d   répertoire
    
  2. les 9 caractères suivants indiquent les droits d'accès au fichier
  3. le nombre de liens sur le fichier
  4. le propriétaire du fichier
  5. le groupe auquel appartenait le propriétaire du fichier au moment de sa création
  6. la taille du fichier en octets
  7. la date de dernière modification
  8. le nom du fichier

Dans le cas d'un fichier spécial la taille est remplacée par deux nombres :

Exemple :

$ ls -l /dev/ttyp0
crw-rw-rw-  1 root  wheel   20, 0 Jan 25 12:03 /dev/ttyp0
$

Droits d'accès

Trois catégories d'usagers :

usager l'usager propriétaire du fichier, celui qui l'a créé et qui décide des droits d'accès
groupe le groupe auquel appartenait le propriétaire du fichier au moment de sa création
autres les autres usagers du système

Trois types d'accès (pour tous les types de fichiers) :

readlecture
writeécriture
executeexécution

Le second champ de la sortie de la commande ls -l indique les droits d'accès au fichier pour chaque catégories d'usager.

Exemple :

    r w x r - x r - x
    ----- ----- -----
      |     |     |
      |     |     |
      |     |     +-------------> autres
      |     |
      |     +-------------------> groupe
      |
      +-------------------------> usager
CodeType d'accès
rlecture
wécriture
xexécution
-aucun accès

La commande chmod permet la modification des droits d'accès à un fichier. Cette commande peut être utilisée selon un mode symbolique ou absolu.

Mode symbolique

Syntaxe :

chmod [qui] opérateur droits fichier(s)

où on a :

quiupropriétaire
ggroupe
oautres usagers
atous les usagers (valeur de défaut)
opérateur+ajoute des droits
-enlève des droits
=donne des droits spécifiques
droitsrlecture
wécriture
xexécution

Exemples :

$ chmod a+r proverbes.txt
$ chmod +r proverbes.txt
$
ajoute à tous les usagers le droit de lecture sur "proverbes.txt"
$ chmod ug+x mon_script.sh
$
ajoute au propriétaire et au groupe le droit d'exécution sur "mon_script.sh"
$ chmod ug+r,o-r proverbes.txt
$
ajoute au propriétaire et au groupe le droit de lecture sur "proverbes.txt" et l'enlève aux autres usagers
$ chmod g=rx foobar
$
donne au groupe les droits de lecture et d'exécution et lui enlève le droit d'écriture sur "foobar" (ne modifie pas les droits des autres usagers)
Mode absolu

Syntaxe :

chmod mode fichier(s)

où le mode (nombre en base 8) se calcule ainsi :

     accès      valeur catégorie

     lecture    4 0 0  propriétaire
   + écriture   2 0 0  propriétaire
   + exécution  1 0 0  propriétaire

   + lecture    0 4 0  groupe
   + écriture   0 2 0  groupe
   + exécution  0 1 0  groupe

   + lecture    0 0 4  autres
   + écriture   0 0 2  autres
   + exécution  0 0 1  autres
  ___________________________________
   =            mode

Exemples :

$ chmod 751 mon_script.sh
$
donne au propriétaire tous les droits, au groupe les droits de lecture et d'exécution et aux autres usagers le droit d'exécution sur "mon_script.sh"
$ chmod 700 mon_script.sh
$
donne au propriétaire tous les droits et enlève au groupe et aux autres usagers tous les droits sur "mon_script.sh"
$ chmod 755 dossiers_X
$
donne au propriétaire tous les droits et au groupe et aux autres usagers le droit de lister le contenu et d'exécuter la commande cd sur le répertoire "dossiers_X"
$ chmod 744 dossiers_X
$
donne au propriétaire tous les droits et au groupe et aux autres usagers le droit de lister le contenu du répertoire "dossiers_X" mais non d'exécuter la commande cd

Sommaire des commandes

CommandeFonction
pwdAffiche le répertoire courant
cdChange le répertoire courant
mkdirCrée un répertoire
rmdirEfface un répertoire
lsAffiche le contenu d'un répertoire
catAffiche le contenu d'un fichier
moreAffiche le contenu d'un fichier un écran à la fois
cpCopie un fichier
mvDéplace ou renomme un fichier
rmEfface un fichier
lnCrée un lien sur un fichier
chmodChange les droits d'accès à un fichier