Commandes pour utilisateurs Linux¶
Dans ce chapitre, vous allez apprendre à travailler avec les commandes Linux.
Objectifs : Dans ce chapitre, les futurs administrateurs Linux vont apprendre comment :
se déplacer dans l’arborescence du système ;
créer un fichier texte, afficher son contenu et le modifier ;
utiliser les commandes les plus utiles de Linux.
commandes utilisateurs, linux
Connaissances : **
Complexité : **
Temps de lecture : 40 minutes
Généralités¶
Les systèmes Linux actuels possèdent des utilitaires graphiques dédiés au travail d’un administrateur. Toutefois, il est important d’être capable d’utiliser l’interface en mode ligne de commandes et cela pour plusieurs raisons :
- La majorité des commandes du système sont communes à toutes les distributions Linux, ce qui n’est pas le cas des outils graphiques.
- Il peut arriver que le système ne démarre plus correctement mais qu’un interpréteur de commandes de secours reste accessible.
- L’administration à distance se fait en ligne de commandes avec un terminal SSH.
- Afin de préserver les ressources du serveur, l’interface graphique n’est soit pas installée, soit lancée à la demande.
- L’administration se fait par des scripts.
L’apprentissage de ces commandes permet à l’administrateur de se connecter à un terminal Linux, de gérer ses ressources, ses fichiers, d’identifier la station, le terminal et les utilisateurs connectés, etc.
Les utilisateurs¶
L’utilisateur du système Linux est défini, dans le fichier /etc/passwd
, par :
- un nom de connexion, plus communément appelé « login », ne contenant pas d’espace ;
- un identifiant numérique : UID (User Identifier) ;
- un identifiant de groupe : GID (Group Identifier) ;
- un interpréteur de commandes, un shell, qui peut être différent d’un utilisateur à l’autre ;
- un répertoire de connexion, le home directory.
Dans d’autres fichiers par :
- un mot de passe, qui sera chiffré avant d’être stocké (
/etc/shadow
) ; - une invite de commande, ou prompt de connexion, qui sera symbolisée par un
#
pour les administrateurs et un$
pour les autres utilisateurs (/etc/profile
).
En fonction de la politique de sécurité mise en œuvre sur le système, le mot de passe devra comporter un certain nombre de caractères et respecter des exigences de complexité.
Parmi les interpréteurs de commandes existants, le Bourne-Again Shell (/bin/bash
) est celui qui est le plus fréquemment utilisé. Il est affecté par défaut aux nouveaux utilisateurs. Pour diverses raisons, des utilisateurs avancés de Linux choisiront des interpréteurs de commandes alternatifs parmi le Korn Shell (ksh
), le C Shell (csh
), etc.
Le répertoire de connexion de l’utilisateur est par convention stocké dans le répertoire /home
du poste de travail. Il contiendra les données personnelles de l’utilisateur et les fichiers de configuration de ses applications. Par défaut, à la connexion, le répertoire de connexion est sélectionné comme répertoire courant.
Une installation type poste de travail (avec interface graphique) démarre cette interface sur le terminal 1. Linux étant multi-utilisateurs, il est possible de connecter plusieurs utilisateurs plusieurs fois, sur des terminaux physiques (TTY) ou virtuels (PTS) différents. Les terminaux virtuels sont disponibles au sein d’un environnement graphique. Un utilisateur bascule d’un terminal physique à l’autre à l’aide des touches Alt + Fx depuis la ligne de commandes ou à l’aide des touches CTRL + Alt + Fx.
Le shell¶
Une fois que l’utilisateur est connecté sur une console, le shell affiche l’invite de commandes (prompt). Il se comporte ensuite comme une boucle infinie, à chaque saisie d’instruction :
- affichage de l’invite de commande ;
- lecture de la commande ;
- analyse de la syntaxe ;
- substitution des caractères spéciaux ;
- exécution de la commande ;
- affichage de l’invite de commande ;
- etc.
La séquence de touche CTRL + C permet d’interrompre une commande en cours d’exécution.
L’utilisation d’une commande respecte généralement cette séquence :
commande [option(s)] [arguments(s)]
Le nom de la commande est souvent en minuscules.
Un espace sépare chaque élément.
Les options courtes commencent par un tiret (-l
), alors que les options longues commencent par deux tirets (--list
). Un double tiret (--
) indique la fin de la liste d’options.
Il est possible de regrouper certaines options courtes :
$ ls -l -i -a
est équivalent à :
$ ls -lia
Il peut bien entendu y avoir plusieurs arguments après une option :
$ ls -lia /etc /home /var
Dans la littérature, le terme « option » est équivalent au terme « paramètre », plus utilisé dans le domaine de la programmation. Le côté optionnel d’une option ou d’un argument est symbolisé en le mettant entre crochets [
et ]
. Lorsque plusieurs options sont possibles, une barre verticale appelée « pipe » les sépare [a|e|i]
.
Les commandes générales¶
Les commandes apropos
, whatis
et man
¶
Il est impossible pour un administrateur, quel que soit son niveau, de connaître toutes les commandes et options dans les moindres détails. Un manuel est généralement disponible pour toutes les commandes installées.
La commande apropos
¶
La commande apropos
permet de faire une recherche par mot clef au sein de ces pages de manuel :
Options | Description |
---|---|
-s , --sections list ou --section list |
Se limite aux sections de manuel. |
-a ou --and |
Affiche seulement l’élément correspondant à tous les mots-clés fournis. |
Exemple :
$ apropos clear
clear (1) - clear the terminal screen
clear_console (1) - clear the console
clearenv (3) - clear the environment
clearerr (3) - check and reset stream status
clearerr_unlocked (3) - nonlocking stdio functions
feclearexcept (3) - floating-point rounding and exception handling
fwup_clear_status (3) - library to support management of system firmware updates
klogctl (3) - read and/or clear kernel message ring buffer; set console_loglevel
sgt-samegame (6) - Block-clearing puzzle
syslog (2) - read and/or clear kernel message ring buffer; set console_loglevel
timerclear (3) - timeval operations
XClearArea (3) - clear area or window
XClearWindow (3) - clear area or window
XSelectionClearEvent (3) - SelectionClear event structure
Pour chercher la commande qui va permettre le changement du mot de passe d’un compte :
$ apropos --exact password -a change
chage (1) - change user password expiry information
passwd (1) - change user password
La commande whatis
¶
La commande whatis
affiche la description de la commande passée en argument :
whatis clear
Exemple :
$ whatis clear
clear (1) - clear the terminal screen
La commande man
¶
Une fois trouvée par apropos
ou whatis
, la lecture du manuel se fait par man
(« le man est ton ami »). Cet ensemble de manuels est divisé en 8 sections, regroupant les informations par thèmes, la section par défaut étant la section 1 :
- Programmes ou commandes exécutables ;
- Les appels système (fonctions fournies par le noyau) ;
- Les appels de bibliothèque (fonctions fournies par les bibliothèques) ;
- Fichiers spéciaux (généralement situés dans /dev) ;
- Formats de fichiers et conventions (fichiers de configuration comme /etc/passwd) ;
- Jeux (tels que les applications basées sur des jeux de rôles) ;
- Divers (e.g. man(7) ) ;
- Commandes d'administration système (généralement uniquement pour root) ;
- Routines du noyau (non-standard).
Des informations sur chaque section sont accessibles en saisissant man x intro
, où x
est le numéro de section.
La commande :
man passwd
informera l’administrateur sur la commande passwd, ses options, etc. Alors qu’un :
$ man 5 passwd
l’informera sur les fichiers en relations avec la commande.
Toutes les pages des manuels ne sont pas traduites de l'anglais. Cependant, les pages des manuels en anglais sont généralement très précises et fournissent toutes les informations dont vous avez besoin. La syntaxe utilisée et le découpage peuvent dérouter l’administrateur débutant, mais avec de la pratique, il y retrouvera rapidement l’information qu’il recherche.
La navigation dans le manuel se fait avec les flèches ↑ et ↓. Le manuel se quitte en appuyant sur la touche q.
La commande shutdown
¶
La commande shutdown
permet de stopper électriquement, immédiatement ou après un certain laps de temps, un serveur Linux.
shutdown [-h] [-r] time [message]
L’heure d’arrêt est à indiquer au format hh:mm
pour une heure précise, ou +mm
pour un délai en minutes.
Pour forcer un arrêt immédiat, le mot now
remplacera l’heure. Dans ce cas, le message optionnel n’est pas envoyé aux autres utilisateurs du système.
Exemples :
[root]# shutdown -h 0:30 "Server shutdown at 0:30"
[root]# shutdown -r +5
Options :
Options | Observations |
---|---|
-h |
Arrête le système électriquement |
-r |
Redémarre le système |
La commande history
¶
La commande history
permet d’afficher l’historique des commandes qui ont été saisies par l’utilisateur.
Les commandes sont mémorisées dans le fichier .bash_history
du répertoire de connexion de l’utilisateur.
Exemple de commande history
$ history
147 man ls
148 man history
Options | Commentaires |
---|---|
-w |
Écrire l'historique actuel dans le fichier d'historique |
-c |
L’option -c effacera l’historique de la session en cours (mais pas le contenu du fichier .bash_history ). |
- Manipuler l’historique :
Pour manipuler l’historique, des commandes permettent depuis l’invite de commandes de :
Touches | Fonction |
---|---|
Rappeler la dernière commande passée. | |
Rappeler la commande par son numéro dans la liste. | |
Rappeler la commande la plus récente commençant par la chaîne de caractères. | |
Remonter l’historique des commandes. | |
Redescendre l’historique des commandes. |
L’auto-complétion¶
L’auto-complétion est également d’une aide précieuse.
- Elle permet de compléter les commandes, les chemins saisis ou les noms de fichiers.
- Un appui sur la toucheTAB complète la saisie dans le cas d’une seule solution.
- Sinon, il faudra faire un deuxième appui pour obtenir la liste des possibilités.
Si un double appui sur la touche TAB ne provoque aucune réaction de la part du système, c’est qu’il n’existe aucune solution à la complétion en cours.
Affichage et identification¶
La commande clear
¶
La commande clear
permet d’effacer le contenu de l’écran du terminal. En réalité, pour être plus précis, elle permet de décaler l’affichage de sorte que l’invite de commandes se retrouve en haut de l’écran sur la première ligne.
Dans un terminal, l’affichage sera définitivement masqué tandis que dans une interface graphique, un ascenseur permettra de remonter dans l’historique du terminal virtuel.
Tip
CTRL + L aura le même effet que la commande clear
La commande echo
¶
La commande echo
permet d’afficher une chaîne de caractères.
Cette commande est plus particulièrement utilisée dans les scripts d’administration pour informer l’utilisateur pendant l’exécution.
L'option -n
n'ajoute aucune nouvelle ligne (par défaut, une nouvelle ligne est ajoutée).
shell > echo -n "123";echo "456"
123456
shell > echo "123";echo "456"
123
456
Pour diverses raisons, le développeur du script peut être amené à utiliser des séquences spéciales (commençant par un caractère \
). Dans ce cas, l’option -e
sera stipulée, permettant l’interprétation des séquences.
Parmi les séquences fréquemment utilisées, nous citerons :
Séquence | Résultat |
---|---|
\a |
Émet un bip sonore |
\b |
Retour en arrière |
\n |
Ajoute un saut de ligne |
\t |
Ajoute une tabulation horizontale |
\v |
Ajoute une tabulation verticale |
La commande date
¶
La commande date
permet d’afficher la date et l’heure. La commande respecte la syntaxe suivante :
date [-d AAAAMMJJ] [format]
Exemples :
$ date
Mon May 24 16:46:53 CEST 2021
$ date -d 20210517 +%j
137
Dans ce dernier exemple, l’option -d
affiche une date donnée. L’option +%j
formate cette date pour n’afficher que le quantième.
Warning
Le format d’une date peut changer suivant la valeur de la langue définie dans la variable d’environnement $LANG
.
L’affichage de la date peut suivre les formats suivants :
Option | Format |
---|---|
+%A |
Nom complet du jour de la semaine des paramètres régionaux (par exemple, dimanche) |
+%B |
Nom complet du mois des paramètres régionaux (par exemple, janvier) |
+%c |
Date et heure des paramètres régionaux (par exemple, jeu 3 mars 23:05:25 2005) |
+%d |
Jour du mois (par exemple, 01) |
+%F |
Date au format AAAA-MM-JJ |
+%G |
Année |
+%H |
Heure (00..23) |
+%j |
Quantième du jour (001..366) |
+%m |
Numéro du mois (01..12) |
+%M |
Minute (00..59) |
+%R |
Heure au format hh:mm |
+%s |
Secondes depuis le 1er janvier 1970 |
+%S |
Seconde (00..60) |
+%T |
Heure au format hh:mm:ss |
+%u |
Jour de la semaine (1 pour lundi) |
+%V |
Numéro de la semaine (+%V ) |
+%x |
Date au format JJ/MM/AAAA |
La commande date
permet également de modifier la date et l’heure système. Dans ce cas, l’option -s
sera utilisée.
[root]# date -s "2021-05-24 10:19"
Le format à respecter pour l’argument suivant l’option -s
est celui-ci :
date -s "[AA]AA-MM-JJ hh:mm:[ss]"
Les commandes id
, who
and whoami
¶
La commande id
est utilisée pour afficher des informations sur les utilisateurs et les groupes. Par défaut, aucun paramètre utilisateur n'est ajouté, et les informations de l'utilisateur et du groupe actuellement connecté sont affichées.
$ id rockstar
uid=1000(rockstar) gid=1000(rockstar) groups=1000(rockstar),10(wheel)
Les options -g
, -G
, -n
et -u
affichent respectivement le GID du groupe principal, les GID des groupes secondaires, les noms au lieu des identifiants numériques et l’UID de l’utilisateur.
La commande whoami
affiche le login de l’utilisateur courant.
La commande who
seule affiche le nom des utilisateurs connectés :
$ who
rockstar tty1 2021-05-24 10:30
root pts/0 2021-05-24 10:31
Linux étant multi-utilisateurs, il est probable que plusieurs sessions soient ouvertes sur la même station, que ce soit physiquement ou à travers le réseau. Il est intéressant de savoir quels utilisateurs sont connectés, ne serait-ce que pour communiquer avec eux par l’envoi de messages.
- tty : représente un terminal.
- pts/: représente une console virtuelle sous environnement graphique, le nombre suivant représentant le numéro de la console virtuelle (0, 1, 2, ...).
L’option -r
affiche en plus le niveau d’exécution (voir chapitre « démarrage »).
Arborescence de fichiers¶
Sous Linux, l’arborescence des fichiers se présente sous la forme d’un arbre inversé, appelé arborescence hiérarchique unique, dont la racine est le répertoire /
.
Le répertoire courant est le répertoire où se trouve l’utilisateur.
Le répertoire de connexion est le répertoire de travail associé à l’utilisateur. Les répertoires de connexion sont, en standard, stockés dans le répertoire /home
.
À la connexion de l’utilisateur, le répertoire courant est le répertoire de connexion.
Un chemin absolu référence un fichier depuis la racine en parcourant l’arborescence complète jusqu’au niveau du fichier :
/home/groupA/alice/file
Le chemin relatif référence ce même fichier en parcourant l’arborescence complète depuis le répertoire courant :
../alice/file
Dans l’exemple précèdent, les « ..
» font référence au répertoire parent du répertoire actuel.
Un répertoire, même s’il est vide, contiendra obligatoirement au minimum deux références :
.
: référence sur lui-même...
: référence le répertoire parent du répertoire actuel.
Un chemin relatif peut ainsi commencer par ./
ou par ../
. Lorsque le chemin relatif fait référence à un sous dossier ou à un fichier du répertoire courant, alors le ./
est souvent omis. Mentionner le premier ./
de l’arborescence ne sera réellement requis que pour lancer un fichier exécutable.
Les erreurs dans les chemins peuvent être la cause de nombreux problèmes : création de dossier ou de fichiers aux mauvais endroits, suppressions involontaires, etc. Il est donc fortement recommandé d’utiliser l’auto-complétion lors des saisies de chemin.
Dans l’exemple ci-dessus, nous cherchons à donner l’emplacement du fichier myfile
depuis le répertoire de bob.
- Par un chemin absolu, le répertoire courant importe peu. Nous commençons par la racine, pour descendre successivement dans les répertoires
home
,groupA
,alice
et enfin le fichiermyfile
:/home/groupA/alice/myfile
. - Par un chemin relatif, notre point de départ étant le répertoire courant
bob
, nous remontons d’un niveau par..
(soit dans le répertoiregroupA
), puis nous descendons dans le répertoirealice
, et enfin le fichiermyfile
:../alice/myfile
.
La commande pwd
¶
La commande pwd
(Print Working Directory) affiche le chemin absolu du répertoire courant.
$ pwd
/home/rockstar
Utiliser un chemin relatif pour référencer un fichier ou un répertoire, ou utilisez la commande cd
pour vous déplacer dans un autre répertoire. Vous devez connaître son emplacement dans l'arborescence des fichiers.
Selon le type de shell et les différents paramètres de son fichier de configuration, l'invite de terminal (également appelée l'invite de commande) affichera le chemin absolu ou relatif du répertoire courant.
La commande cd
¶
La commande cd
(Change Directory) permet de changer le répertoire courant, autrement dit, de se déplacer dans l’arborescence.
$ cd /tmp
$ pwd
/tmp
$ cd ../
$ pwd
/
$ cd
$ pwd
/home/rockstar
Comme vous pouvez le constater dans le dernier exemple ci-dessus, la commande cd
sans argument permet de repositionner le répertoire courant sur le répertoire de connexion (home directory
).
La commande ls
¶
La commande ls
affiche le contenu d’un répertoire.
ls [-a] [-i] [-l] [repertoire1] [repertoire2] […]
Exemple :
$ ls /home
. .. rockstar
Les options principales de la commande ls
sont :
Option | Information |
---|---|
-a |
Affiche tous les fichiers, même ceux cachés. Les fichiers cachés sous Linux sont ceux qui commencent par un . . |
-i |
Affiche les numéros d’inode. |
-l |
Affiche sous forme de liste verticale la liste des fichiers avec des informations supplémentaires formatées par colonnes. |
La commande ls
offre toutefois de très nombreuses options (voir le man
) :
Option | Information |
---|---|
-d |
Affiche les informations d’un répertoire au lieu de lister son contenu. |
-g |
Affiche les UID et GID plutôt que les noms des propriétaires. |
-h |
Affiche les tailles de fichiers dans le format le plus adapté (octet, kilo-octet, méga-octet, giga-octet, …). h pour Human Readable. |
-s |
Affiche le nombre de blocs occupés par le fichier. Un bloc est égal à 400K. |
-A |
Affiche tous les fichiers du répertoire sauf . et .. |
-R |
Affiche récursivement le contenu des sous répertoires. |
-F |
Affiche le type des fichiers. Imprime un / pour un répertoire, * pour les exécutables, @ pour un lien symbolique, et rien pour un fichier texte. |
-X |
Trier les fichiers en fonction de leurs extensions. |
- Description des colonnes :
$ ls -lia /home
78489 drwx------ 4 rockstar rockstar 4096 25 oct. 08:10 rockstar
Valeur | Information |
---|---|
78489 |
Numéro d’inode. |
drwx------ |
Type de fichier (d ) et droits (rwx------ ). |
4 |
Nombre de sous-répertoires (. et .. inclus). Pour un fichier, il représente le nombre de liens physiques et 1 représente lui-même. |
rockstar |
Utilisateur propriétaire. |
rockstar |
Groupe propriétaire. |
4096 |
Pour les fichiers, il affiche la taille du fichier. Pour les répertoires, il montre la valeur fixe de 4096 octets occupée par le nom du fichier. Pour calculer la taille totale d'un répertoire, utilisez du -sh rockstar/ |
25 oct. 08:10 |
Date de dernière modification. |
rockstar |
Nom du fichier (ou du répertoire). |
Note
Des alias sont fréquemment positionnés au sein des distributions courantes.
C’est le cas de l’alias ll
:
alias ll='ls -l --color=auto'
La commande ls
dispose de nombreuses options dont voici quelques exemples avancés d’utilisations :
- Lister les fichiers de
/etc
par ordre de dernière modification :
$ ls -ltr /etc
total 1332
-rw-r--r--. 1 root root 662 29 may 2021 logrotate.conf
-rw-r--r--. 1 root root 272 17 may. 2021 mailcap
-rw-------. 1 root root 122 12 may. 2021 securetty
...
-rw-r--r--. 2 root root 85 18 may. 17:04 resolv.conf
-rw-r--r--. 1 root root 44 18 may. 17:04 adjtime
-rw-r--r--. 1 root root 283 18 may. 17:05 mtab
- Lister les fichiers de
/var
plus gros qu’un méga-octet mais moins qu’un giga-octets :
$ ls -lhR /var | grep \- | grep [1-9]*M
...
-rw-r--r--. 1 apache apache 1,2M 10 may. 13:02 XB RiyazBdIt.ttf
-rw-r--r--. 1 apache apache 1,2M 10 may. 13:02 XB RiyazBd.ttf
-rw-r--r--. 1 apache apache 1.2M 10 may. 13:02 XB RiyazIt.ttf
...
Bien sûr, nous vous recommandons fortement d'utiliser la commande find
.
$ find /var -size +1M -a -size -1024M -a -type f -exec ls -lh {} \;
- Afficher les droits sur un dossier :
Pour connaître les droits sur un dossier, dans notre exemple /etc
, la commande suivante ne conviendrait pas :
$ ls -l /etc
total 1332
-rw-r--r--. 1 root root 44 18 nov. 17:04 adjtime
-rw-r--r--. 1 root root 1512 12 janv. 2010 aliases
-rw-r--r--. 1 root root 12288 17 nov. 17:41 aliases.db
drwxr-xr-x. 2 root root 4096 17 nov. 17:48 alternatives
...
La commande ci-dessus affichera par défaut le contenu du dossier (à l'intérieur). Pour le dossier lui-même, vous pouvez utiliser l'option -d
.
$ ls -ld /etc
drwxr-xr-x. 69 root root 4096 18 nov. 17:05 /etc
- Trier par taille de fichier, la plus grande en premier :
$ ls -lhS
- format heure/date avec
-l
:
$ ls -l --time-style="+%Y-%m-%d %m-%d %H:%M" /
total 12378
dr-xr-xr-x. 2 root root 4096 2014-11-23 11-23 03:13 bin
dr-xr-xr-x. 5 root root 1024 2014-11-23 11-23 05:29 boot
- Ajouter le trailing slash à la fin des dossiers :
Par défaut, la commande ls
n’affiche pas le dernier slash d’un dossier. Dans certains cas, comme pour des scripts par exemple, il est utile de les afficher :
$ ls -dF /etc
/etc/
- Masquer certaines extensions :
$ ls /etc --hide=*.conf
La commande mkdir
¶
La commande mkdir
crée un répertoire ou une arborescence de répertoire.
mkdir [-p] repertoire [repertoire] [...]
Exemple :
$ mkdir /home/rockstar/work
Le répertoire « rockstar » devra exister pour créer le répertoire « work ».
Sinon, l’option -p
devra être utilisée. L’option -p
crée les répertoires parents s’ils n’existent pas.
Danger
Il est vivement déconseillé de donner des noms de commandes Linux comme nom de répertoires ou fichiers.
La commande touch
¶
La commande touch
modifie l’horodatage d’un fichier ou crée un fichier vide si le fichier n’existe pas.
touch [-t date] file
Exemple :
$ touch /home/rockstar/myfile
Option | Information |
---|---|
-t date |
Modifie la date de dernière modification du fichier avec la date précisée. |
Date au format : [AAAA]MMJJhhmm[ss]
Astuce
La commande touch est utilisée en priorité pour créer un fichier vide, mais elle peut avoir un intérêt dans le cadre de sauvegarde incrémentale ou différentielle par exemple. En effet, le fait d’exécuter un touch
sur un fichier aura pour seul effet de forcer sa sauvegarde lors de la sauvegarde suivante.
La commande rmdir
¶
La commande rmdir
supprime un répertoire vide.
Exemple :
$ rmdir /home/rockstar/work
Option | Information |
---|---|
-p |
Supprime le ou les répertoire(s) parent(s) à la condition qu’ils soient vides. |
Astuce
Pour supprimer à la fois un répertoire non-vide et son contenu, il faudra utiliser la commande rm
.
La commande rm
¶
La commande rm
supprime un fichier ou un répertoire.
rm [-f] [-r] file [file] [...]
Danger
Toute suppression de fichier ou de répertoire est définitive.
Options | Information |
---|---|
-f |
Ne demande pas de confirmation de la suppression. |
-i |
Demande de confirmation de la suppression. |
-r |
Supprime récursivement un répertoire et ses sous-répertoires. |
Note
La commande rm
en elle-même ne demande pas de confirmation lors de la suppression de fichiers. Cependant avec une distribution RedHat/CentOS, rm
demande une confirmation de suppression car la commande rm
y est un alias de la commande rm -i
. Ne soyez pas surpris sur une autre distribution, type Debian par exemple, de ne pas obtenir de demande de confirmation.
La suppression d’un dossier à l’aide de la commande rm
, que ce dossier soit vide ou non, nécessitera l’ajout de l’option -r
.
La fin des options est signalée au shell par un double tiret --
.
Dans l’exemple :
$ >-dur-dur # Pour créer un fichier vide appelé -dur-dur
-dur-dur
[CTRL+C] Pour interrompre la création du fichier
$ rm -f -- -dur-dur
Le nom du fichier -dur-dur commence par un -
. Sans l’usage du --
le shell aurait interprété le -d
de -dur-dur
comme une option.
La commande mv
¶
La commande mv
déplace et renomme un fichier.
mv file [file ...] destination
Exemples :
$ mv /home/rockstar/file1 /home/rockstar/file2
$ mv /home/rockstar/file1 /home/rockstar/file2 /tmp
Options | Information |
---|---|
-f |
Ne demande pas de confirmation si écrasement du fichier de destination. |
-i |
Demande de confirmation si écrasement du fichier de destination (par défaut). |
Quelques cas concrets permettront de mieux saisir les difficultés qui peuvent se présenter :
$ mv /home/rockstar/file1 /home/rockstar/file2
Renomme le fichier file1
en file2
. Si le fichier 2
existe déjà, remplacez le contenu du fichier par fichier1
.
$ mv /home/rockstar/file1 /home/rockstar/file2 /tmp
Permet de déplacer file1
et file2
dans le répertoire /tmp
.
$ mv file1 /repexist/file2
file1
est déplacé dans /repexist
et renommé file2
.
$ mv file1 file2
file1
est renommé file2
.
$ mv file1 /repexist
Si le répertoire de destination existe, file1
est déplacé dans /repexist
.
$ mv file1 /wrongrep
Si le répertoire de destination n’existe pas,file1
est renommé wrongrep
à la racine.
La commande cp
¶
La commande cp
copie un fichier.
cp fichier [fichier ...] destination
Exemple :
$ cp -r /home/rockstar /tmp
Option | Information |
---|---|
-i |
Demande de confirmation si écrasement (par défaut). |
-f |
Ne demande pas de confirmation si écrasement du fichier de destination. |
-p |
Conserve le propriétaire, les permissions et l’horodatage du fichier copié. |
-r |
Copie un répertoire avec ses fichiers et sous-répertoires. |
-s |
Crée un lien symbolique plutôt que de copier. |
cp fichier1 /repexist/fichier2
file1
est copié dans /repexist
sous le nom file2
.
$ cp fichier1 fichier2
file1
est copié sous le nom file2
dans ce répertoire.
$ cp file1 /repexist
Si le répertoire de destination existe, file1
est copié dans /repexist
.
$ cp file1 /wrongrep
Si le répertoire de destination n’existe pas, file1
est copié sous le nom wrongrep
à la racine.
Visualisation¶
La commande file
¶
La commande file
affiche le type d’un fichier.
file file1 [files]
Exemple :
$ file /etc/passwd /etc
/etc/passwd: ASCII text
/etc: directory
La commande more
¶
La commande more
affiche le contenu d’un ou de plusieurs fichiers écran par écran.
more file1 [files]
Exemple :
$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
En utilisant la touche ENTREE, le déplacement se fait ligne par ligne. En utilisant la touche ESPACE, le déplacement se fait page par page. /texte
permet de chercher l’occurrence dans le fichier.
La commande less
¶
La commande less
affiche le contenu d’un ou de plusieurs fichiers. La commande less
est interactive et possède des commandes d’utilisation qui lui sont propres.
less file1 [files]
Les commandes propres à less
sont :
Commande | Action |
---|---|
h | Aide. |
↑↓→← | Monter, descendre d’une ligne ou pour aller à droite ou à gauche. |
Entrée | Descendre d’une ligne. |
Espace | Descendre d’une page. |
PgUp et PgDn | Monter ou descendre d’une page. |
gg et G | Se placer en début de fichier ou en fin de fichier. |
/texte |
Rechercher le texte. |
q | Quitter la commande less . |
La commande cat
¶
La commande cat
concatène (mettre bout à bout) le contenu de plusieurs fichiers et affiche le résultat sur la sortie standard.
cat file1 [files]
Exemple 1 - Afficher le contenu d’un fichier vers la sortie standard :
$ cat /etc/passwd
Exemple 2 - Afficher le contenu de plusieurs fichiers vers la sortie standard :
$ cat /etc/passwd /etc/group
Exemple 3 - Combiner les contenus de plusieurs fichiers dans un fichier en utilisant les redirections de sortie :
$ cat /etc/passwd /etc/group > usersAndGroups.txt
Exemple 4 - Afficher la numérotation des lignes :
$ cat -n /etc/profile
1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
3
4 if [ "`id -u`" -eq 0 ]; then
5 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
6 else
…
Exemple 5 - Affiche la numérotation des lignes non vides :
$ cat -b /etc/profile
1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
3 if [ "`id -u`" -eq 0 ]; then
4 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
5 else
…
La commande tac
¶
La commande tac
fait quasiment l’inverse de la commande cat
. Elle affiche le contenu d’un fichier en commençant par la fin (ce qui est particulièrement intéressant pour la lecture des logs !).
Exemple : Afficher un fichier de logs en affichant en premier la dernière ligne :
[root]# tac /var/log/messages | less
La commande head
¶
La commande head
affiche le début d’un fichier.
head [-n x] fichier
Option | Description |
---|---|
-n x |
Affiche les x premières lignes du fichier |
Par défaut (sans l’option -n
), la commande head
affichera les 10 premières lignes du fichier.
La commande tail
¶
La commande tail
affiche la fin d’un fichier.
tail [-f] [-n x] file
Option | Description |
---|---|
-n x |
Affiche les x dernières lignes du fichier |
-f |
Affiche les modifications du fichier en temps réel |
Exemple :
tail -n 3 /etc/passwd
sshd:x:74:74:Privilege-separeted sshd:/var/empty /sshd:/sbin/nologin
tcpdump::x:72:72::/:/sbin/nologin
user1:x:500:500:grp1:/home/user1:/bin/bash
Avec l'option -f
les informations de changement du fichier seront toujours affichées à moins que l'utilisateur ne quitte l'état de surveillance avec CTRL + C. Cette option est très fréquemment utilisée pour suivre les fichiers journaux (les logs) en temps réel.
Sans l’option -n
, la commande tail
affiche les 10 dernières lignes du fichier.
La commande sort
¶
La commande sort
trie les lignes d’un fichier.
Elle permet d’ordonner, ranger dans un ordre donné, le résultat d’une commande ou le contenu d’un fichier, selon un ordre numérique, alphabétique, par ordre de grandeur (Ko, Mo, Go) ou dans l’ordre inverse.
sort [-k] [-n] [-u] [-o fichier] [-t] fichier
Exemple :
$ sort -k 3,4 -t ":" -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm/:/sbin/nologin
Option | Description |
---|---|
-k |
Spécifiez les colonnes à séparer. Vous pouvez spécifier plusieurs colonnes |
-n |
Demande un tri numérique |
-o file |
Enregistre le tri dans le fichier précisé |
-t |
Spécifiez un délimiteur, qui exige que le contenu du fichier correspondant soit régulièrement délimité par le contenu des colonnes, sinon ils ne peuvent pas être triés correctement |
-r |
Inverser l'ordre du résultat. Utilisé en conjonction avec l'option -n pour trier dans l'ordre de la plus grande à la plus petite |
- u |
Supprimer les doublons après le tri. Équivalent à sort file | uniq |
La commande sort
ne trie le fichier qu’à l’affichage écran. Le fichier n’est pas modifié par le tri. Pour enregistrer le tri, il faut utiliser l’option -o
ou une redirection de sortie >
.
Par défaut, le tri des nombres se fait selon leur caractère. Ainsi, « 110 » sera avant « 20 », qui sera lui-même avant « 3 ». Il faut préciser l’option -n
pour que les blocs caractères numériques soient bien triés par leur valeur.
La commande sort
permet d’inverser l’ordre des résultats, avec l’option -r
:
$ sort -k 3 -t ":" -n -r /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
Dans cet exemple, la commande sort
rangera cette fois-ci le contenu du fichier /etc/passwd
du plus grand uid au plus petit.
Quelques exemples avancés d’utilisation de la commande sort
:
- Mélanger les valeurs
La commande sort
permet également de mélanger les valeurs avec l’option -R
:
$ sort -R /etc/passwd
- Trier des adresses IP
Un administrateur système est rapidement confronté au traitement des adresses IP issues des logs de ses services comme SMTP, VSFTP ou Apache. Ces adresses sont typiquement extraites avec la commande cut
.
Voici un exemple avec le fichier dns-client.txt
:
192.168.1.10
192.168.1.200
5.1.150.146
208.128.150.98
208.128.150.99
$ sort -nr dns-client.txt
208.128.150.99
208.128.150.98
192.168.1.200
192.168.1.10
5.1.150.146
- Trier un fichier en supprimant les doublons
La commande sort
permet la suppression des doublons du fichier en utilisant l'option -u
.
Voici un exemple avec le fichier colours.txt
:
Red
Green
Blue
Red
Pink
$ sort -u colours.txt
Blue
Green
Pink
Red
- Trier des tailles de fichiers
La commande sort
sait reconnaître les tailles de fichiers, issues de commande comme ls
avec l’option -h
.
Voici un exemple avec le fichier taille.txt
:
1,7G
18M
69K
2,4M
1,2M
4,2G
6M
124M
12,4M
4G
$ sort -hr size.txt
4,2G
4G
1,7G
124M
18M
12,4M
6M
2,4M
1,2M
69K
La commande wc
¶
La commande wc
compte le nombre de lignes, mots et/ou octets d’un fichier.
wc [-l] [-m] [-w] file [files]
Option | Description |
---|---|
-c |
Compte le nombre d’octets. |
-m |
Compte le nombre de caractères. |
-l |
Compte le nombre de lignes. |
-w |
Compte le nombre de mots. |
Recherche¶
La commande find
¶
La commande find
recherche l’emplacement de fichier ou de répertoire.
find directory [-name name] [-type type] [-user login] [-date date]
Les options de la commande find
étant très nombreuses, il est préférable de se référer au man
.
Si le répertoire de recherche n’est pas précisé, la commande find
cherchera à partir du répertoire courant.
Option | Description |
---|---|
-perm permissions |
Recherche des fichiers selon leurs permissions. |
-size taille |
Recherche des fichiers selon leur taille. |
L’option -exec
de la commande find
¶
Il est possible d’utiliser l’option -exec
de la commande find
pour exécuter une commande à chaque ligne de résultat :
$ find /tmp -name *.txt -exec rm -f {} \;
La commande précédente recherche tous les fichiers du répertoire /tmp
nommés *.txt
et les supprime.
Comprendre l'option -exec
Dans l'exemple ci-dessus, la commande find
construira une chaîne représentant la commande à exécuter.
Si la commande find
trouve trois fichiers nommés log1.txt
, log2.txt
et log3.txt
, alors la commande find
va construire la chaîne en remplaçant dans la chaîne rm -f {} \;
les accolades par un des résultats de la recherche, et cela autant de fois qu’il y a de résultats.
Ce qui nous donnera :
rm -f /tmp/log1.txt ; rm -f /tmp/log2.txt ; rm -f /tmp/log3.txt ;
Le caractère ;
est un caractère spécial du shell qui doit être protégé par un \
pour éviter son interprétation prématurée par la commande find
(et non plus dans le -exec
).
Tip
$ find /tmp -name *.txt -delete
fait la même chose.
La commande whereis
¶
La commande whereis
recherche des fichiers liés à une commande.
whereis [-b] [-m] [-s] command
Exemple :
$ whereis -b ls
ls: /bin/ls
Option | Description |
---|---|
-b |
Ne recherche que le fichier binaire. |
-m |
Ne recherche que les pages de manuel. |
-s |
Ne recherche que les fichiers sources. |
La commande grep
¶
La commande grep
recherche une chaîne de caractères dans un fichier.
grep [-w] [-i] [-v] "string" file
Exemple :
$ grep -w "root:" /etc/passwd
root:x:0:0:root:/root:/bin/bash
Option | Description |
---|---|
-i |
Ignore la casse de la chaîne de caractères recherchée. |
-v |
Exclut les lignes contenant la chaîne de caractère. |
-w |
Recherche exactement le mot. |
La commande grep
retourne la ligne complète comprenant la chaîne de caractères recherchée.
* Le caractère spécial ^
permet de rechercher une chaîne de caractères placée en début de ligne.
* Le caractère spécial $
permet de rechercher une chaîne de caractères placée en fin de ligne.
$ grep -w "^root" /etc/passwd
Note
Cette commande est très puissante et il est fortement conseillé de consulter son manuel. Elle a de nombreux dérivés.
Il est possible de rechercher une chaîne de caractères dans une arborescence de fichiers avec l’option -R
.
grep -R "Virtual" /etc/httpd
Les méta-caractères (wildcards)¶
Les méta-caractères se substituent à un ou plusieurs caractères (voire à une absence de caractère) lors d’une recherche. Ces méta-caractères sont également connus sous le nom de caractères jokers.
Ils peuvent être combinés.
Le caractère *
remplace une chaîne composée de plusieurs caractères quelconques. Le caractère *
peut également représenter une absence de caractère.
$ find /home -name "test*"
/home/rockstar/test
/home/rockstar/test1
/home/rockstar/test11
/home/rockstar/tests
/home/rockstar/test362
Les méta-caractères permettent des recherches plus complexes en remplaçant tout ou partie d’un mot. Il suffit de remplacer les inconnues par ces caractères spéciaux.
Le caractère ?
remplace un unique caractère, quel qu’il soit.
$ find /home -name "test?"
/home/rockstar/test1
/home/rockstar/tests
Les crochets [
et ]
permettent de spécifier les valeurs que peut prendre un unique caractère.
$ find /home -name "test[123]*"
/home/rockstar/test1
/home/rockstar/test11
/home/rockstar/test362
Note
Prendre soin de toujours encadrer les mots contenant des méta-caractères par des "
pour éviter qu’ils soient remplacés par le nom des fichiers qui répondraient aux critères.
Avertissement
Il ne faut pas confondre les méta-caractères du shell et ceux des expressions régulières. La commande grep
utilise les méta-caractères des expressions régulières.
Redirections et tubes¶
L’entrée et les sorties standards¶
Sur les systèmes UNIX et Linux, les flux standards sont aux nombres de trois. Ils permettent aux programmes, via la bibliothèque stdio.h
de faire entrer ou sortir des informations.
Ces flux sont appelés canal X ou descripteur X de fichier.
Par défaut :
- le clavier est le périphérique d’entrée pour le canal 0, appelé stdin ;
- l’écran est le périphérique de sortie pour les canaux 1 et 2, appelés stdout et stderr.
stderr reçoit les flux d’erreurs renvoyés par une commande. Les autres flux sont dirigés vers stdout.
Ces flux pointent vers des fichiers périphériques, mais comme tout est fichier sous UNIX/Linux, les flux d’entrées/sorties peuvent facilement être détournés vers d’autres fichiers. Ce principe fait toute la force du shell.
La redirection d’entrée¶
Il est possible de rediriger le flux d’entrée depuis un autre fichier avec le caractère inférieur <
ou <<
. La commande lira le fichier au lieu du clavier :
$ ftp -in serverftp << ftp-commands.txt
Note
Seules les commandes demandant une saisie au clavier pourront gérer la redirection d’entrée.
La redirection d’entrée peut également être utilisée pour simuler une interactivité avec l’utilisateur. La commande lira le flux d’entrée jusqu’à rencontrer le mot clef défini après la redirection d’entrée.
Cette fonctionnalité est utilisée pour scripter des commandes interactives :
$ ftp -in serverftp << END
user alice password
put file
bye
END
Le mot clef END
peut être remplacé par n’importe quel mot.
$ ftp -in serverftp << STOP
user alice password
put file
bye
STOP
Le shell quitte la commande ftp
lorsqu’il reçoit une ligne ne contenant que le mot clef.
Warning
Le mot clé de fin, ici END
ou STOP
, pour terminer la commande doit être le seul mot de la ligne et doit être au début de la ligne.
La redirection de l’entrée standard est peu utilisée car la plupart des commandes acceptent un nom de fichier en argument.
La commande wc
pourrait s’utiliser ainsi :
$ wc -l .bash_profile
27 .bash_profile # the number of lines is followed by the file name
$ wc -l < .bash_profile
27 # returns only the number of lines
Les redirections de sortie¶
Les sorties standards peuvent être redirigées vers d’autres fichiers grâce aux caractères >
or >>
.
La redirection simple >
écrase le contenu du fichier de sortie :
$ date +%F > date_file
Lorsque le caractère >>
est utilisé, il indique que le résultat de sortie de la commande est ajouté au contenu du fichier.
$ date +%F >> date_file
Dans les deux cas, le fichier est automatiquement créé lorsqu’il n’existe pas.
La sortie d’erreur standard peut être également redirigée vers un autre fichier. Cette fois-ci, il faudra préciser le numéro du canal (qui peut être omis pour les canaux 0 et 1) :
$ ls -R / 2> errors_file
$ ls -R / 2>> errors_file
Exemples de redirections¶
Redirection de 2 sorties vers 2 fichiers :
$ ls -R / >> ok_file 2>> nok_file
Redirection des 2 sorties vers un fichier unique :
$ ls -R / >> log_file 2>&1
Redirection de stderr vers un "puits sans fond" (/dev/null
) :
$ ls -R / 2>> /dev/null
Lorsque les 2 flux de sortie sont redirigés, aucune information n’est affichée à l’écran. Pour utiliser à la fois la redirection de sortie et conserver l’affichage, il faudra utiliser la commande tee
.
Les tubes (pipe)¶
Un tube (pipe en anglais) est un mécanisme permettant de relier la sortie standard d’une première commande vers l’entrée standard d’une seconde.
Cette communication est monodirectionnelle et se fait grâce au symbole |
. Le symbole pipe |
est obtenu en appuyant simultanément sur les touches AltGR + 6.
Toutes les données envoyées par la commande à gauche du tube à travers le canal de sortie standard sont envoyées au canal d’entrée standard de la commande placée à droite.
Les commandes particulièrement utilisées après un pipe sont des filtres.
- Exemples :
N'afficher que le début :
$ ls -lia / | head
N'afficher que la fin :
$ ls -lia / | tail
Trier le résultat :
$ ls -lia / | sort
Compter le nombre de mots / caractères :
$ ls -lia / | wc
Chercher une chaîne de caractères dans le résultat :
$ ls -lia / | grep fichier
Points particuliers¶
La commande tee
¶
La commande tee
permet de rediriger la sortie standard d’une commande vers un fichier tout en maintenant l’affichage à l’écran.
Elle est combinée avec le pipe |
pour recevoir en entrée la sortie de la commande à rediriger :
$ ls -lia / | tee fic
$ cat fic
L’option -a
permet d’ajouter au fichier au lieu de l’écraser.
Les commandes alias
et unalias
¶
Utiliser les alias est un moyen pour demander au shell de se souvenir d’une commande particulière avec ses options et lui donner un nom.
Par exemple :
$ ll
remplacera la commande :
$ ls -l
La commande alias
liste les alias de la session en cours. Des alias sont positionnés par défaut sur les distributions Linux. Ici, les alias d’un serveur Rocky :
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
Les alias ne sont définis que de façon temporaire, le temps de la session utilisateur.
Pour une utilisation permanente, il faut les créer dans le fichier :
.bashrc
du répertoire de connexion de l’utilisateur ;/etc/bashrc
pour tous les utilisateurs.
Avertissement
Une attention particulière doit être portée lors de l’usage d’alias qui peuvent potentiellement s’avérer dangereux ! Par exemple, un alias mis en place à l’insu de l’administrateur :
alias cd='rm -Rf'
La commande unalias
permet de supprimer les alias.
Pour supprimer un seul alias :
$ unalias ll
Pour supprimer tous les alias:
$ unalias -a
Pour désactiver un alias temporairement, la combinaison est \<alias name>
.
Par exemple, si nous faisons :
$ type ls
il pourrait nous retourner :
ls est un alias de « ls -rt »
Maintenant que nous savons que c'est le cas, nous pouvons voir les résultats de l'utilisation de l'alias ou le désactiver une fois avec le \
en exécutant les commandes suivantes :
$ ls file* # order by time
file3.txt file2.txt file1.txt
$ \ls file* # order by name
file1.txt file2.txt file3.txt
Alias et fonctions utiles¶
- alias
grep
.
Colorise le résultat de la commande grep
: alias grep='grep --color=auto'
- fonction
mcd
Il est fréquent de créer un dossier puis de se déplacer dedans : mcd() { mkdir -p "$1"; cd "$1"; }
- fonction
cls
Se déplacer dans un dossier et lister son contenu : cls() { cd "$1"; ls; }
- fonction
backup
Créer une copie de sauvegarde d’un fichier : backup() { cp "$1"{,.bak}; }
- fonction
extract
Extrait tout type d’archive :
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*)
echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
- Si
alias cmount
renvoie le résultat suivant :alias cmount="mount | column -t"
Alors nous pouvons utiliser cmount
pour afficher tous les montages système dans des colonnes comme ceci : [root]# cmount
qui retournera les système de fichiers montés comme ceci :
/dev/simfs on / type simfs (rw,relatime,usrquota,grpquota)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type devtmpfs (rw,relatime,mode=755)
none on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
none on /dev/shm type tmpfs (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
Le caractère ;
¶
Le caractère;
chaîne les commandes.
Les commandes s’exécuteront toutes séquentiellement dans l’ordre de saisie une fois que l’utilisateur aura appuyé sur ENTREE.
$ ls /; cd /home; ls -lia; cd /
Testez vos connaissances¶
Qu’est ce qui défini un utilisateur sous Linux ? (7 réponses)
Qu’est ce qui caractérise une option longue pour une commande ?
Quelles commandes permettent de rechercher de l’aide sur une commande ?
-
google
-
chuck --norris
-
info
-
apropos
-
whatis
Quelle commande permet de visualiser l’historique d’un utilisateur ?
Quelle commande permet de rechercher du texte dans un fichier ?
-
find
-
grep
Quelle commande permet de rechercher un fichier ?
-
find
-
grep
Quelle commande redirige le flux des erreurs d’une commande vers un nouveau fichier errors.log
?
-
ls -R / 2> errors.log
-
ls -R / 2>> errors.log
-
ls -R / 2> errors.log 2>&1
Author: Antoine Le Morvan
Contributors: Steven Spencer, Aditya Putta, tianci li