Commandes de base et d’administration de
Linux
BY C.T. KATYA MUHAMBYA ECHELLO
1.1 Architecture du système d’exploitation Linux et principes
1. Architecture Globale est constitue de 3 couches :
- Couche « physique »: périphériques + BIOS
- Couche « système »: kernel et processus
- Couche « interface »: shell + X-Window
Fig. architecture d’un Système d’exloitation Linux
2. Communications entre couches très réglementées par le kernel.
3. Un interpréteur de commandes:
Un interpréteur de commandes, souvent désigné par shell en anglais, est un programme qui :
- Lit et exécute les commandes saisies par l’utilisateur ou stockées dans un script.
- Propose un contrôle des processus
- Gère les redirections en entrée et en sortie
- Propose un véritable langage de programmation
- Plusieurs types de shell disponibles:
▪ Le plus utilisé: bash (Bourne Again Shell)
▪ Autres: csh, ksh, etc…
En mode interactif il affiche une invite, finissant généralement par $ pour un utilisateur
normal, ou par # pour l’administrateur, indiquant qu’il prêt à lire une nouvelle commande.
Pour utiliser l’interpréteur en mode interactif il faut lancer un terminal et pour cela dans
Ubuntu passer par : Application > Accessoires > Terminal).
Une fois le terminal lancé, le shell se présente comme suit :
nom-utilisateur@nom-machine:~$_
Où :
nom-utilisateur : indique le nom de l’utilisateur qui a ouvert la session actuelle sur le
système nom-machine : indique le nom de machine sur laquelle on travaille
~ : désigne l’espace de travail de l’utilisateur qui a ouvert la session courante, en détail c’est
/home/nom-utilisateur.
NB : l’espace entre : et $ sert à montrer dans quel répertoire se trouve l’utilisateur.
Le signe $ indique que l’utilisateur actuel n’a pas de privilège d’administrateur sur les
systèmes, qu’il est un simple utilisateur.
Le signe ___ indique que l’interpréteur de commandes est en attente d’une nouvelle
commande.
4. Les Commandes:
En très grand nombre
Principe UNIX: une commande n’exécute qu’une seule fonction, mais le fait
de manière exhaustive
Exécutées à l’invite du shell (ou d’un terminal dans le cas de X-Window)
Une commande est de la forme:
nom_commande [-options] <cible1> <cible2>…
1.2. Arborescence des dossiers en linux
Organisation des fichiers sous Linux
Il n'y a pas de lettre représentant le disque dur comme le C: de Windows ou DOS.
De plus, le signe '\' est remplacé par '/' pour séparer les répertoires.
Il y a une seule arborescence, qui débute à la "racine", notée '/', et tous les disques durs ou
partitions apparaissent dans cette arborescence avec leur contenu de façon transparente
comme un répertoire.
Les périphériques
Tout périphérique est identifié à un fichier qui se trouve dans le répertoire /dev (comme
device, périphérique en anglais). Par exemple, le disque maître du deuxième port IDE est
identifié par /dev/hdc, sa deuxième partition par /dev/hdc2. Le lecteur de disquette est
représenté par /dev/fd0, etc. Les disques S-ATA sont représenté par « sd ». par exemple
/dev/sda1, pour une première partition et /dev/sda2 pour une deuxième partition.
Les partitions / les points de montage
Les partitions que l'on va créer sur les disques durs seront attachées à des répertoires de
l'arborescence, ou "points de montage". C'est ce qu'on appelle "monter une partition". Le
point de montage est un simple répertoire, vide avant le montage, et qui après le montage,
représente le contenu de la partition montée.
Par exemple, supposons que nous ayons créé une partition /dev/hda2 (premier disque IDE,
2ème partition) pour contenir le système. On montera cette partition (automatiquement,
heureuse-ment !) dans le répertoire racine /. Si la partition /dev/hda3 est destinée à contenir
les données utilisateur, on la montera dans le point de montage (=répertoire) /home. On verra
le contenu de cette partition dans le répertoire /home comme si c'était n'importe quel autre
répertoire, alors que physiquement les données sont sur une autre partition.
De même, pour accéder à la disquette, on montera le périphérique /dev/fd0 dans le point de
montage /mnt/floppy ou /floppy (selon la distribution) et pour accéder au CD-ROM, on
montera le périphérique /dev/cdrom dans le point de montage /mnt/cdrom ou /cdrom.
Les répertoires standards
Linux possède des répertoires "spéciaux" à la racine (un peu comme le C:\windows,
C:\Users, C:\Program Files), qui sont classiques dans les systèmes Unix et peuvent ou
non représenter un point de montage pour une partition.
Ubuntu adhère à la norme sur la hiérarchie des systèmes de fichiers (Filesystems
Hierarchy Standard, FHS) qui définit le nom, le rôle et l'arborescence des fichiers et des
répertoires dans un système de fichiers. Elle facilite la localisation des répertoires et des
fichiers, tant pour les utilisateurs que pour les concepteurs de logiciels.
Le système de fichiers :
comme un arbre
Comparez le stockage des
répertoires et fichiers de
votre ordinateur à un
arbre : en partant de la
racine d’un arbre, en
déplaçant votre doigt tout
le long de l’arbre, en
suivant le tronc puis les
branches, vous pouvez
toucher n’importe quelle
feuille de cet arbre.
Dans les systèmes de
type GNU/Linux, toute
l’information stockée
dans vos médias de
stockage (disques durs, clé USB, cartes SD, CD-ROM, etc.) est nécessairement accessible en
suivant un chemin depuis un emplacement logique appelée la racine (notée par une barre
oblique). La racine est une partition que vous définissez comme étant la base du stockage de
vos fichiers. Puis, cette base se sépare logiquement en répertoires (comme des branches d’un
arbre), eux-mêmes séparés en sous-répertoires et sous-sous-répertoires, etc. dans lesquels sont
enregistrés vos fichiers (les feuilles de l’arbre).
La norme sur la hiérarchie des systèmes de fichiers définit une organisation logique standard
concernant l’organisation de ces répertoires. Ainsi, peu importe la distribution GNU/Linux
(ou tout autre système d’exploitation adhérant à cette norme) que vous utilisez, vous serez en
mesure de retrouver l’information que vous recherchez. Le tableau suivant resume la liste des
repertoires standards et leur signification.
Répertoire Signification Contenu
Français Anglais
/ Racine du système, hiérarchie
primaire
/bin binaires, binaries, binary utilities Exécutables des commandes
utilitaires (binutils) essentielles disponibles pour
binaires tous les utilisateurs
(ex: cd, cat, ls…)
/boot Initialization Bootstrap Fichiers statiques du chargeur
d’amorçage (noyaux, images
ramdisk, fichiers de
configuration du chargeur
d'amorçage…)
/dev Périphérique Device Fichiers spéciaux des
périphériques
/etc configuration editing text config Fichiers de configuration au
éditable en format textuel de plusieurs
mode texte programmes et services du
système
/home Maison home directory Répertoires personnels des
utilisateurs
Répertoire Signification Contenu
Français Anglais
/lib bibliothèques Librairies Bibliothèques partagées
essentielles et modules du
noyau
/media Contient les points de montages
pour les médias amovibles
/mnt Montage Mount Point de montage pour monter
temporairement un système de
fichiers
/opt Optionnel Optional Emplacement pour des
applications installées hors
gestionnaire de paquets
(logiciels optionnels)
/proc Processus Processes Répertoire virtuel pour les
informations système (états du
noyau et des processus système)
/root Racine Root Répertoire personnel du super-
utilisateur
/run exécution runtime system Informations relatives au
système système depuis son dernier
démarrage (ex : utilisateurs
actifs, services en cours
d'exécution, etc.)
/sbin binaires super binaries, superbinnary Exécutables système essentiels
système utilities (superbinutils)
/srv Services Services Données pour les services du
système
/tmp Temporaire Temporary Fichiers temporaires des
applications
/usr ressources Unix system resources Hiérarchie secondaire, pour des
système Unix données en lecture seule par les
utilisateurs. Ce répertoire
contient la vaste majorité des
applications usuelles des
utilisateurs et leurs fichiers
/usr/bin Exécutables des programmes
additionnels disponibles pour
tous les utilisateurs (ex : le
gestionnaire de fichiers, le
lecteur de musique, le
navigateur Web…)
/usr/lib Bibliothèques partagées par les
applications additionnelles
de /usr/bin et /usr/sbin
/usr/local Hiérarchie tertiaire.
Emplacement où les utilisateurs
doivent installer les applications
qu'ils compilent.
/usr/share Fichiers non reliés à
Répertoire Signification Contenu
Français Anglais
l'architecture partagés par les
applications
de /usr/bin et /usr/sbin (ex : les
icônes, les thèmes, la
documentation…)
/var Variable Variable Données variables et diverses
Considérations
Ce qui suit est une liste de considérations importantes en ce qui concerne les répertoires et les
partitions. Notez que l’utilisation du disque varie largement selon la configuration système et
les modèles d’usage spécifiques. Les recommandations sont ici des indications générales et
fournissent un point de départ pour partitionner.
1. / (la partition racine) doit toujours physiquement contenir /etc, /bin, /sbin,
/lib et /dev, sinon vous ne pourrez pas amorcer le système. Typiquement, 150 à
250 Mio sont nécessaires.
2. /usr contient tous les programmes utilisateurs (/usr/bin), les bibliothèques (/usr/lib), la
documentation (/usr/share/doc), etc. C’est la partie du système qui prend généralement
le plus d’espace disque. Vous devriez lui réserver au moins 500 Mo. Cet espace devrait
être augmenté selon le nombre et le type de paquet que vous avez l’intention d’installer.
Une installation standard d’Ubuntu requiert ici un minimum de 1,5 Go. Une station de
travail ou un serveur doit permettre 4 à 6 Gio.
3. /var : des données variables, tels que des articles, des courriels, des sites web, des bases
de données, le cache du gestionnaire de paquets, etc. seront placées dans ce répertoire. La
taille de ce répertoire dépend fortement de l’usage de votre système, mais pour la plupart
des gens, elle sera dictée par la consommation générale du gestionnaire de paquets. Si
vous faites une installation complète d’à peu près tout ce qu’Ubuntu a à offrir, tout dans
une session, mettre de côté 2 ou 3 Gio d'espace pour /var doit être suffisant. Si vous
installez par morceaux (pas à pas, petit à petit), 300 à 500 Mio suffiront. Si l’espace du
disque dur est primordial et que vous ne planifiez pas de faire les mises à jour majeures,
vous pouvez mettre 30 à 40 Mio.
4. /tmp : Les données temporaires créées par les programmes iront le plus probablement
dans ce répertoire. 40 à 100 Mio seront généralement suffisants. Quelques applications —
y compris les manipulateurs d’archives, outils de gravure et les logiciels multimédias —
peuvent utiliser /tmp temporairement pour stocker les fichiers image. Si vous planifiez
d’utiliser de telles applications, vous devriez ajuster l’espace disque en conséquence.
5. /home : Chaque utilisateur mettra ses données personnelles dans un sous-répertoire de ce
répertoire. Sa taille dépend de comment les utilisateurs utiliseront le système et de quels
fichiers seront stockés dans leur répertoire. Selon ce que vous prévoyez de faire avec
votre ordinateur, vous devriez réserver à peu près 100 Mio pour chaque utilisateur. Mais
adaptez cette valeur à vos besoins personnels. Réservez beaucoup plus d’espace si vous
planifiez d’enregistrer beaucoup de fichiers multimédia (images, musique, vidéos) dans
votre répertoire personnel. C'est dans ce répertoire que se trouvent les dossiers de
configuration de chaque programme, traditionnellement sous le
nom /home/NOM_UTILISATEUR/.NOM_du_PROGRAMME (ex: ~/.thunderbird
pour Thunderbird). Vous noterez que tous les dossier commence par un point, c'est à dire
qu'ils sont cachés.
Le chemin absolu et relatif d’un répertoire
a. Le chemin absolu d’un répertoire: on appelle chemin absolu d’un répertoire le parcours
qu’on empreinte à partir du répertoire racine (/) pour atteindre celui-ci. Sur la figure ci-
dessous, le chemin absolu du répertoire « doc » est : /usr/share/doc
b. Le chemin relatif : on appelle chemin relatif d’un répertoire le parcours que l’on empreinte
à partir d’un autre répertoire, différent du répertoire racine, pour atteindre celui-ci.
i. Sur la même figure, le chemin relatif du répertoire « doc » est, selon qu’on trouve :
1. Dans /home/linux ./../../usr/share/doc
2. Dans /etc ./../usr/share/doc
3. Dans /usr ./share/doc ou share/doc
Noyau et interpréteur de commandes
a. Noyau : c’est un programme destiné à interagir directement avec les composants
électroniques, il sert ainsi d’interface entre le matériel et d’autres applications installées sur le
système.
b. Interpréteur de commandes (le shell) : est l’interface entre l’utilisateur et le kernel, les
commandes saisies par l’utilisateur sont interprétées par le shell afin que le kernel puisse
comprendre ce que l’utilisateur demande. Les utilisateurs ne peuvent interagir directement
avec le kernel.
Types de fichiers Linux
Linux connait 4 types principaux de fichier qui partage une structure commune, le répertoire
étant une variante des fichiers ordinaires. Il s’agit de :
- Fichiers ordinaires
- Répertoires
- Liens matériels et symboliques
- Fichiers spéciaux
Catégories d’utilisateurs Linux
Il a 3 catégories d’utilisateurs :Le propriétaire du fichier ou User(u), le groupe du ficher ou
Groupe(g) et le reste du monde ou other(o)
Droits élémentaires d’accès aux fichiers par les utilisateurs
Les droits élémentaires concernent : la lecture/read(r), l’écritures/Write(w) et l’exécution(x)
du fichier considéré.
On représente ces informations sous forme abrégée : trwx rwx rwx
où t représente de type de fichier avec les valeurs entre autre :
- - pour les fichiers ordinaires
- d pour les répertoires
- l pour les liens symboliques
- c pour les fichiers spéciaux de type caractères
- b pour les fichiers spéciaux
- etc.
La commande « chmod », présentée plus bas dans ce cours, permet de modifier ces
permissions qu’ont les utilisateurs sur les fichiers. A part le super utilisateur, le « root », qui a
absolument tout ce que bon lui semble, seul le propriétaire du fichier a le pouvoir de modifier
ces permissions.
1.3 Les Commandes de base
1.3.1 Parcourir l'arbre des dossiers Linux : cd, pwd, ls
1. La commande cd ( change directory) : aide à changer de répertoires
Syntaxe : cd rep (change du répertoire courant au rep)
Exemple : Si on se trouve dans « /etc » et que l’on désire se rendre dans « /home »
a. utilisateur@nom_machine: /etc $ cd /home
utilisateur@nom_machine: /home $_
b. utilisateur@nom_machine: /etc $ cd ../home
utilisateur@nom_machine: /home $_
2. La commande pwd (print working directory) : aide à savoir dans répertoire on est en train
de travailler
Syntaxe : pwd (affiche le chemin absolu du répertoire courant)
Exemple : lorsque l’utilisateur lance un terminal ( invite de commande) ce dernier s’ouvre en
lui plaçant dans son espace de travail, ainsi on a :
a. utilisateur@nom_machine: ~ $_ (le ~ ou tilde veut dire l’espace de travail
de l’utilisateur qui a ouvert la session courante).
b. utilisateur@nom_machine: ~ $ pwd
/home/utilisateur
utilisateur@nom_machine: ~ $_
c. utilisateur@nom_machine: ~/Bureau $pwd
/home/utilisateur/Bureau
utilisateur@nom_machine: ~/Bureau $_
3. la commande ls (list ) : aide à lister les contenus d'un répertoire donné
Syntaxe : ls rep (Affiche le contenu du rep)
La commande ls et ses très nombreuses options permet d'obtenir beaucoup d'informations sur
les fichiers présents dans un répertoire : déplaçons nous par exemple dans le répertoire "/bin"
et listons le contenu de ce répertoire :
[Utilisateur@uniluk bin]$ cd /bin
[Utilisateur@uniluk /bin]$ ls
arch dd gzip nisdomainname su
ash df hostname ping sync
awk dmesg kill ps tar
cp fgrep mount sh ypdomainname
cpio gawk mt sleep zcat
csh grep mv sort zsh
date gunzip netstat stty ls
Ceci est un listing "brut" du répertoire /bin qui contient les utilitaires de base de linux. On
reconnaît par exemple la commande ls ... De la même manière que sous MS-DOS (avec la
commande dir), nous pouvons demander à Linux de lister seulement les fichiers dont les noms
contiennent des caractères donnés. Demandons par exemple uniquement les noms des fichiers
commençant par la lettre "l" :
[Utilisateur@uniluk /bin]$ ls l*
ln login ls
[Utilisateur@uniluk /bin]$
Voici quelques options intéressantes de la commande ls (les options sous UNIX suivent la
commande et sont le plus souvent précédées d'un tiret) :
L'option ls -l permet de lister les attributs des fichiers (les droits de lecture, d'écriture et
d'exécution, le propriétaire, le groupe, la taille en octets, sa date de création ou de
modification) :
[Utilisateur@uniluk /bin]$ ls -l
total 3615
-rwxr-xr-x 1 root root 2716 Apr 23 02:09 arch
-rwxr-xr-x 1 root root 56380 Dec 23 1996 ash
lrwxrwxrwx 1 root root 4 May 10 20:01 awk -> gawk
-rwxr-xr-x 1 root root 18768 Mar 8 19:17 basename
-rwxr-xr-x 1 root root 300668 Sep 4 1996 bash
lrwxrwxrwx 1 root root 3 May 10 19:59 bsh -> ash
-rwxr-xr-x 1 root root 16584 Dec 16 1996 cat
-rwxr-xr-x 1 root root 17408 Nov 26 1996 chgrp
Notes : Ici, tous les fichiers appartiennent à l'administrateur système (root) et à son groupe
(root), comme les sections consacrées à « chmod » et à « chown » l'exposerons). Nous
traiterons du sens de la fin de chaque ligne, qui contient parfois une flèche visible ici sur la
ligne awk -> gawk, dans la section consacrée aux liens « ln ».
ls –a ou ls -all liste tous les fichiers du répertoire, y compris les fichiers cachés. Cette option
est très utile lorsque l'on se trouve dans son répertoire personnel car il contient les fichiers de
configuration de l'utilisateur dont les noms commencent généralement par un point et seule
l'option -a permet de détecter leur existence.
D'autres options de ls sont utiles :
ls -m : Affiche les fichiers en les séparant par une virgule au lieu de les présenter en colonnes.
ls -t : Affiche les fichiers par date, c'est-à-dire en les classant du récent au plus ancien.
ls -lu : Affiche les fichiers par date de dernier accès et indique cette date.
ls -F : Affiche les fichiers par type. Ainsi un fichier suivi d'un slash (/) est un répertoire, un
fichier suivi d'une étoile est un fichier exécutable et un fichier suivi d'un "@" est un lien (nous
reviendrons sur les liens dans la section consacrée à ln).
ls -S : Affiche les fichiers triés par ordre de taille décroissante.
ls -X : Affiche les fichiers par type d'extension.
ls -r : Affiche les fichier en ordre alphabétique inverse.
Cette option à la particularité d'inverser l'effet de tous les tris requis. Par exemple, la
commande ls -tr affichera les fichiers par date en commençant par les plus anciens pour finir
par les plus récents.
1.3.2 Travailler avec les dossiers : mkdir, rmdir, rm, ls
1. mkdir (make directory) : aide à créer un répertoire
Syntaxe : mkdir rep (Crée un répertoire rep )
Exemple : pour créer le dossier UNILUK » l’utilsateur a fait ce qui suit
1. utilisateur@nom_machine: ~ $ mkdir ./Bureau/UNILLUK
ou
2. utilisateur@nom_machine: ~ $ mkdir Bureau/UNILUK
2. rmdir (remove directory) : aide à supprimer un répertoire vide
syntaxe : rmdir rep
exemple : supposons que l’utilisateur crée un dossier « toremove » dans le répertoire
Documents et qu’après il se rend compte que celui-ci ne va pas servir à grand-chose et que
par conséquent veut le supprimer.
1. Si le dossier est vide
utilisateur@nom_machine: ~ $ rmdir ./Documents/toremove
2. Sinon : on aura un message d’erreur signalant que le dosser n’est pas vide
3. rm (remove) : aide à supprime un fichier ou répertoire non vide
NB : chaque répertoire a au moins deux références, même s’il est vide, une référence sur lui-
même (.) indicant le répertoire courant et une autre (..) sur son parent. Ainsi : ./ veut dire reste
dans le répertoire courant (actuel) ../ veut dire monte au répertoire parent
1.3.3. Travailler avec les fichiers : touch, cat, more, editeurs (vi, nano, emacs, joe), edit,
wc, tail, head
1. touch : aide à créer un fichier vide ou à modifier le temps de la dernière modification
du fichier.
2. « Cat » et « more »: aide à afficher d'un fichier à l'sortie standard (écran)
La commande cat permet de lire des fichiers. Nous avons vu tout à l'heure que le répertoire
/root contenait des fichiers de configuration. Ces fichiers sont simplement des fichiers textes
avec un agencement et une syntaxe particulière. Regardons le contenu du fichier .bashrc qui
permet de configurer à souhait son shell :
[root@uniluk /root]# cat .bashrc
# .bashrc
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
source .sd.sh
Une option utile de cat est -n qui permet de numéroter les lignes (ne pas oublier que cat
permet de lire et non de modifier un fichier. Ainsi la numérotation de ligne apparaît à l'écran
mais le fichier .bashrc n'en est pas pour autant modifié).
[root@uniluk /root]# cat -n .bashrc
1 # .bashrc
2
3 # User specific aliases and functions
4
5 # Source global definitions
6 if [ -f /etc/bashrc ]; then
7 . /etc/bashrc
8 fi
9 source .sd.sh
[root@uniluk /root]#
Si vous souhaitez connaître les autres options de cat, tapez au prompt "cat --help".
Vous pouvez utiliser la commande more pour visualiser un fichier. La commande more a
l'avantage d'afficher le fichier page par page. Pour passer d'une page à l'autre, tapez sur la
touche ESPACE.
3. vim, nano, emacs : sont des éditeurs de texte
4. edit : permet d'éditer un texte en faisant appel à un éditeur ( vim)
5. wc ( word counter) : permet de compter les mots contenus dans un fichier.
6. Affichage des dernières lignes ou des premières lignes d'un fichier : tail et head
La commande tail est tout simplement inévitable.
Elle permet d'afficher les dernières lignes d'un fichier. Jusque là on pourrait se dire qu'après
tout il suffit d'éditer le fichier et de se déplacer à la fin. D'une part c'est une méthode
fastidieuse mais d'autre part, l'option -f va définitivement vous convaincre de l'utiliser :
L'option -f demande à tail de ne pas s'arrêter lorsqu'elle a affiché les dernières lignes du
fichier et de continuer à afficher la suite du fichier au fur et à mesure que celui-ci grossit
jusqu'à ce que l'utilisateur interrompe la commande avec la combinaison de touches
d'interruption Ctrl-c.
Les deux grands cas classique de l'utilisation de tail avec l'option -f est le suivi des fichiers de
log /var/log/secure et /var/log/messages. Le premier fichier permet de surveiller les
connexions que peuvent effectuer d'autres utilisateurs sur votre machine et le deuxième fichier
permet de connaître les différents événements qui se produisent sur le système (impression,
connexion à l'Internet, tâche de maintenance système...) :
[root@uniluk /]# tail -f /var/log/messages
Apr 26 14 : 34 : 39 uniluk kernel : PPP line discipline registered.
Apr 26 14 : 34 : 39 uniluk kernel : registered device ppp0
Apr 26 14 : 34 : 40 uniluk pppd[26252] : pppd 2.2.0 started by root, uid 0
Apr 26 14 : 34 : 41 uniluk chat[26254] : send (ATZ^M)
Apr 26 14 : 34 : 41 uniluk chat[26254] : expect (OK)
Apr 26 14 : 34 : 43 uniluk chat[26254] : ATZ^M^M
Apr 26 14 : 34 : 43 uniluk chat[26254] : OK -- got it
Ici, on voit le déroulement d'une connexion à l'Internet.
la commande head réalise la même chose que tail mais elle affiche les premières lignes du
fichier au lieu d'afficher les dernières. tail et head ont une option commune qui permet
d'afficher le nombre de ligne que l'on souhaite :
"tail -5 nom_du_fichier" affichera les 5 dernières lignes du fichier
"head -15 nom_du_fichier" affichera les 15 premières lignes du fichier.
Par défaut, tail et head affichent 10 lignes.
1.3.4. Copier, Déplacer et Renommer : cp, mv
1. cp (copy) : permet de copier un fichier d'un répertoire source à un répertoire
destination
La syntaxe de la commande cp est la suivante :
cp [option] fichier-origine fichier-destination
ou cp [option] fichier répertoire
Par exemple pour faire une copie de notre fichier linux-test en un fichier linux-test2, il suffit
de faire :
[root@uniluk /root]# cp linux-test linux-test2
Nous possédons maintenant deux exemplaires de notre fichier dans /root.
Notons que si vous effectuez une copie d'un fichier sur un fichier qui existe dejà, celui-ci sera
effacé et remplacé par le nouveau fichier.
Si vous souhaitez copier le fichier linux-test dans un répertoire (par exemple /home) en
gardant le nom du fichier, utilisez la commande suivante :
[root@uniluk /root]# cp linux-test /home
Pour lui donner un autre nom :
[root@uniluk /root]# cp linux-test /home/linux-test2
Nous venons de voir que l'utilisation de cp est dangereuse et l'on risque parfois d'effacer des
fichiers importants. Les options de cp peuvent vous éviter des situations fâcheuses.
cp -i avertit l'utilisateur de l'existence d'un fichier du même nom et lui demande s'il peut ou
non remplacer son contenu. Recopions à nouveau le fichier linux-test sur linux-test2 avec
l'option -i :
[root@uniluk /root]# cp -i linux-test linux-test2
cp : overwrite `linux-test2'?
cp vous demande s'il peut écraser linux-test2 : répondre par "y" (yes) ou "n".
Quelques options importantes de cp :
cp -b permet comme l'option -i de s'assurer que la copie n'écrase pas un fichier existant : le
fichier écrasé est sauvegardé, seul le nom du fichier d'origine est modifié et cp ajoute un tilde
(~) à la fin du nom du fichier.
cp -l permet de faire un lien "dur" entre le fichier source et sa copie. Ceci signifie que le
fichier copié et sa copie partageront physiquement le même espace. Cela permet des gains de
place non négligeables. Plus exactement, sur le disque dur le fichier et sa copie seront le
même fichier alors qu'avec une copie classique, le disque dur contiendra deux exemplaires du
fichier.
cp -s permet de faire un lien "symbolique" entre le fichier source et sa copie. Le lien
symbolique est un pointeur. Ainsi si nous copions le fichier linux-test avec l'option -s, lorsque
par exemple nous voudrons éditer le fichier copié, linux éditera en réalité le fichier original
(voir la section consacrée à ln pour un descriptif plus complet des liens).
cp -p permet lors de la copie de préserver toutes les informations concernant le fichier comme
le propriétaire, le groupe, la date de création (voir les sections consacrées à chmod et chown
pour plus d'informations).
cp -r permet de copier de manière récursive l'ensemble d'un répertoire et de ses sous-
répertoires.
Exemple :
Considérons que je possède dans mon répertoire /home/Utilisateur/personnel un répertoire
intitulé "mygale" et qui contient 3 sous répertoires ("echecs", "linux", xcaissa) :
/home/Utilisateur/personnel/
/home/Utilisateur/personnel/mygale/
/home/Utilisateur/personnel/mygale/echecs/
/home/Utilisateur/personnel/mygale/linux/
/home/Utilisateur/personnel/mygale/xcaissa/
Je souhaite copier le répertoire mygale ainsi que ses sous-répertoires dans mon répertoire
/home/Utilisateur/" : j'utilise la commande (en supposant que je me suis au préalable déplacé
dans le répertoire /home/Utilisateur/personnel/ :
[Utilisateur@uniluk personnel]$ cp -r mygale /home/Utilisateur
cp -v permet d'afficher le nom des fichiers copiés. Utile si par exemple vous copiez plusieurs
fichiers (à l'aide des occurences "*" et/ou "?") et que vous souhaitez voir le bon déroulement
de la "multicopie". J'aurais pu par exemple utiliser cette option lors de ma copie récursive du
répertoire "mygale".
J'aurais ainsi vu ceci en associant l'option -v et -r :
[Utilisateur@uniluk personnel]$ cp -rv mygale /home/Utilisateur
mygale -> /home/Utilisateur/mygale
mygale/index.html -> /home/Utilisateur/mygale/index.html
mygale/logo.gif -> /home/Utilisateur/mygale/logo.gif
mygale/linux -> /home/Utilisateur/mygale/linux
mygale/linux/linux.html -> /home/Utilisateur/mygale/linux/linux.html
.....
(c'est un extrait du résultat).
2. mv (move) : permet de déplacer ou renommer un fichier (répertoire).
Pour comprendre la commande mv, voyons une suite de commandes qui effectuent des
opérations différentes :
[Utilisateur@uniluk Utilisateur]$ mv linux-test perso : renomme le fichier "linux-test" en
"perso"
[Utilisateur@uniluk Utilisateur]$ mv perso perso : va écraser le fichier existant avec la
source.
[Utilisateur@uniluk Utilisateur]$ mv personnel mon-répertoire : va renommer le répertoire
personnel en mon-répertoire
[Utilisateur@uniluk Utilisateur]$ mv perso /home/Utilisateur/mon-répertoire : va déplacer le
fichier perso dans le répertoire /home/Utilisateur/mon-répertoire
Les options :
mv -b ('b' comme "backup") va effectuer une sauvegarde des fichiers avant de les déplacer :
[Utilisateur@uniluk Utilisateur]$ mv -b mon-répertoire/perso /mon-répertoire/linux-test
Cette commande va renommer le fichier perso en linux-test, cependant vous trouverez dans le
répertoire une sauvegarde de perso (perso~).
mv -i ('i' comme «interactive») demande pour chaque fichier et chaque répertoire s'il peut ou
non déplacer fichiers et répertoires.
mv -u ('u' comme «update») demande à mv de ne pas supprimer le fichier si sa date de
modification est la même ou est plus récente que son remplaçant.
Exemple :
Déplaçons-nous vers notre répertoire personnel puis créons un nouveau fichier avec l'éditeur
de texte nano :
[Utilisateur@uniluk personnel]$ nano linux-test2
saissons un petit texte : "y en a marre de ces textes stupides !"
et finissons notre session joe par la séquence de touches suivante :
Ctrl- o
Ctrl-x
qui permet d'enregistrer le fichier et de quitter nano.
Notre fichier linux-test2 est plus récent que notre fichier linux-test. Vous pouvez le vérifier en
effectuant un "ls -l".
Nous souhaitons (naïvement, bien sûr !) renommer le fichier linux-test en linux-test2. Mais
nous sommes attentifs et nous ne voulons pas que le fichier linux-test2 soit écrasé si celui-ci
est plus récent que linux-test :
[Utilisateur@uniluk personnel]$mv -u linux-test linux-test2
L'option -u nous a évité d'écraser le fichier linux-test2. La commande mv n'a donc pas été
effective.
1.3.5 Les liens (ln)
Les liens forment un axe central du fonctionnement de linux. Qu'est ce qu'un lien ?
Un lien est un type spécial de fichier qui permet à plusieurs noms de fichiers de faire
référence au même fichier sur le disque.
On doit distinguer deux sortes de liens : les liens durs et les liens symboliques.
Les liens durs ou physiques : associent deux ou plusieurs fichiers à un même espace sur le
disque, les deux fichiers restant pourtant indépendants. On peut dire que physiquement les
fichiers sont les mêmes mais que virtuellement ils ne le sont pas.
Prenons un exemple :
[Utilisateur@uniluk personnel]$ln linux-test /home/Utilisateur/linux-test-lien-dur
Le fichier linux-test-lien-dur est créé dans le répertoire /home/Utilisateur. si vous faites un ls -
l vous constaterez que linux-test et linux-test-lien ont la même taille. Au niveau de leur
existence sous linux, ils sont indépendants. Mais sur le disque, il n'existe qu'un seul fichier,
simplement linux-test-lien-dur et linux-test sont sur le même espace (ou inode) sur le disque
dur lorsqu'on les appelle.
Ainsi si nous modifions le fichier linux-test-lien-dur, nous aurons automatiquement une
modification du fichier linux-test (et vice et versa), car la modification s'effectuera
physiquement sur le disque dur sur l'inode "partagé" par les deux fichiers.
Les liens symboliques :
si nous faisons maintenant un lien symbolique :
[Utilisateur@uniluk personnel]$ln -s linux-test /home/Utilisateur/linux-test-lien-symb
Faites un ls -F dans le répertoire /home/Utilisateur, vous verrez que le fichier linux-test-lien-
symb est précédé du signe "@". Ce fichier pointe sur linux-test. Si vous avez fait un peu de
programmation en C, nous retrouvons le concept de pointeur. Quand on appelle le fichier
linux-test-lien-sym, il va automatiquement se diriger vers le fichier linux-test.
Quelles sont les points communs entre les liens symboliques et les liens durs ?
Le lien symbolique fait référence à un fichier dans un répertoire alors que le lien dur fait
référence à un espace sur le disque dur.
- Les liens symboliques sont des fichiers de petite taille qui ont une existence propre sur le
disque dur. Ces fichiers contiennent les références des fichiers sources auquels ils
correspondent.
- Dans le cas d'un lien dur, la suppression de l'un des deux fichiers n'affectera pas l'autre. Dans
le cas d'un lien symbolique, la suppression du fichier source entraînera un changement de
comportement du fichier lien qui ne correspondra plus à un fichier valide et sera donc dit
"cassé" ("broken").
Utilité des liens
Les liens sont utiles si vous souhaitez qu'un fichier apparaisse dans plusieurs répertoires, ou
sous un nom différent. Imaginez que ce fichier fasse quelques megaoctets ... une copie à l'aide
"cp" entraînera une perte de place non négligeable alors qu'un lien permettra de limiter
l'utilisation de l'espace disque. Mieux :un lien garanti que toute modification effectuée sur ce
fichier concernera toutes les apparentes « copies » dispersées.
Syntaxe de ln :
ln fichier-source fichier-lien ln permet d'effectuer un lien dur (aucune option ici).
ln fichier-source fichier-lien ln -s permet d'effectuer un lien symbolique (option –s).
ln -b réalise une sauvegarde d'un fichier existant et dont nous aurions utilisé le nom avant de
l'écraser.
ln -i demande à l'utilisateur s'il souhaite écraser le fichier qui a un lien sur le fichier source au
cas ou celui-ci existerait déjà.
ln -d effectue des liens durs sur des répertoires ... seuls les utilisateurs possédant les droits
adéquats pourront le faire.
1.3.6. Retrouver un fichier ("find", Locate, which)
1- La commande find
Exemple simple : comment trouver un fichier portant un nom donné ?
[Utilisateur@uniluk Utilisateur]$ find / -name linux-test2 -print
/home/Utilisateur/linux-test2
(Un peu long n'est ce pas pour trouver la réponse dans tout cette grosse arborescence ? :-) )
En général on recherche rarement un fichier depuis la racine.
Décomposition de la commande de l'exemple :
"/" indique que nous voulons chercher à partir de la racine notre fichier.
"-name " est l'option qui indique ici que nous voulons spécifier le nom d'un fichier.
"-print" demande à find d'afficher le résultat.
Pour chercher tous les fichiers commençant par "linux-tes" et définir à partir de quel
répertoire on souhaite effectuer la recherche on utilise cette syntaxe :
[Utilisateur@uniluk Utilisateur]$find /home/Utilisateur -name 'linux-tes*' -print
Le nombre d'options de find est impressionnant. En voici quelques unes :
-type permet d'indiquer le type de fichier que l'on recherche. Si vous cherchez seulement un
répertoire et non pas un fichier vous pourrez utilisez cette option :
[Utilisateur@uniluk Utilisateur]$find /usr -type d -name bin -print
Ici, on demande à find de trouver les répertoires (l'argument "d" (comme "directory") de
l'option -type indique que l'on cherche un répertoire) du nom de "bin" à partir du répertoire
/usr.
-exec ou -ok permet d'exécuter une commande sur les fichiers trouvés. La différence entre -
exec et -ok est que la deuxième vous demandera pour chaque fichier trouvé si vous souhaitez
réellement réaliser l'opération :
[Utilisateur@uniluk Utilisateur]$find -name 'linux-tes*' -print -ok rm {} \;
./linux-test
rm ... ./linux-test ? y
[Utilisateur@uniluk Utilisateur]$
Dans l'option -exec, la paire d'accolades se substitue aux fichiers trouvés, et l'anti-slash lié au
point virgule forme une séquence d'échapemment.
On peut dire que cette présentation de find est assez sommaire, mais j'espère qu'elle vous
laisse deviner ses capacités.
2- La commande locate
La commande locate a la même mission que find. Pourtant vous verrez qu'en utilisant la
commande locate, le fichier sera trouvé beaucoup plus rapidement. Pourquoi ? Parce que
locate ne va pas chercher le fichier dans toute l'arborescence des répertoires mais va localiser
la position du fichier dans une base de données qui contient la liste des fichiers existants.
Cette base de données est en général automatiquement générée une fois par jour par le
système grâce à une commande appelée updatedb. Sur un système Linux Redhat, cette base
de donnée se trouve dans le répertoire /usr/lib et se nomme locatedb.
La syntaxe est donc simple:
[Utilisateur@uniluk Utilisateur]$ locate nom_du_fichier
Bien que la commande locate soit très intéressante, elle ne possède pas la puissance des
options de find. De plus, si vous créez des fichiers pendant la journée et que vous les
recherchez avec la commande locate, il n'est pas sûr que la base de donnée ait été remise à
jour. Bref, locate est un complément de find.
3-La commande which
which vous permet simplement de connaître le chemin d'un exécutable. Exemple:
[Utilisateur@uniluk Utilisateur]$ which ls
/bin/ls
[Utilisateur@uniluk Utilisateur]$
1.3.7 Trouver du texte dans un fichier (grep)
La commande grep est un pivot des commandes UNIX. Elle cherche une expression
rationnelle dans un ou plusieurs fichiers, exemple :
[Utilisateur@uniluk Utilisateur]$grep fouille linux-commande.html
grep, la commande qui vous fouille les fichiers (output apres execution commande)
La commande a donc affiché la ligne qui contient le mot "fouille" dans le fichier linux-
commande.html.
La richesse de la commande grep permet de faire des recherches sur plusieurs fichiers et
d'avoir un format de sortie adéquat. Par exemple, le fichier linux-commande.html est déjà
assez important et il serait agréable de savoir où se trouve cette ligne qui contient le mot
fouille dans le fichier :
[Utilisateur@uniluk Utilisateur]$grep -n fouille linux-commande.html
902: Grep, la commande qui vous fouille les fichiers (output apres execution de la commande)
Le mot fouille se trouve à la ligne numéro 902 et c'est l'option -n qui nous a permis de
connaître ce numéro.
Une autre option très utile est -l qui permet de n'afficher que les noms des fichiers contenant
ce que l'on cherche :
[Utilisateur@uniluk Utilisateur]$grep -l fouille /home/Utilisateur/personnel/html/*
/home/Utilisateur/personnel/html/linux-commande.html
Ici, j'ai demandé à la commande grep de chercher l'occurence "fouille" dans les fichiers du
répertoire /home/Utilisateur/personnel/html/. Le résultat est le nom des fichiers qui
contiennent l'occurence. Ici, seul le fichier "linux-commande.html" dans le répertoire contient
le mot "fouille". Quelques-unes des autres options :
-c donne le nombre de fois où l'expression rationnelle a été rencontrée dans le fichier :
[Utilisateur@uniluk Utilisateur]$ grep -c fouille linux-commande.html
10
-n est utile lorsque vous cherchez une expression rationnelle qui commence par un tiret car si
vous n'utilisez pas l'option -n, grep la considèrera comme une option !
1.3.8- Le compactage et le décompactage des fichiers au format .gz ( gzip )
Pour compacter un fichier, taper la commande suivante :
[Utilisateur@uniluk Utilisateur]$ gzip non_du_fichier
Pour décompacter un fichier, taper la commande suivante :
[Utilisateur@uniluk Utilisateur]$ gzip -d non_du_fichier.gz
Le décompactage des fichiers avec la commande uncompress
Si vous rencontrez un fichier au format .Z ( un autre type de compression plus ancien, et
moins performant), vous pouvez aussi utiliser gzip -d.
1.3.9- Archivage de données : la commande "tar"
La commande tar permet d'archiver ou de désarchiver des répertoires et des fichiers de façon
optimale.
Une des commandes dont vous aurez certainement le plus besoin est :
[root@uniluk /]# tar xzf nom_du_fichier.tar.gz
Cette commande décompacte un fichier au format .tar , . gz ou .tgz ; vous rencontrerez
régulièrement ce genre de fichier en voulant par exemple récupérer des logiciels pour linux
sur l'Internet. Le format .tar, .gz indique que le fichier est en réalité une archive (.tar), c'est-
à-dire que le fichier contient en réalité plusieurs fichiers, et qu'il est compacté (.gz). La
commande précédente peut être ainsi comprise :
x (extract) permet d'extraire certains fichiers d'une archive (lorsque l'on ne spécifie pas
les noms des fichiers que l'on souhaite extraire de l'archive, tar les extrait tous).
z décompacte l'archive
f extrait un fichier donné (ici le fichier est nom_du_fichier.tar.gz). Une autre commande
permet de connaître la liste des fichiers contenus dans un fichier .tar. gz ou tgz :
[root@uniluk /]#tar tvzf nom_du_fichier.tar.gz
t affiche la liste des fichiers contenus dans une archive tar.
v est le mode "verbose", qui affiche les noms des fichiers tel qu'ils ont été archivés à
l'origine.
C'est donc l'option t qui permet de voir comment les fichiers de l'archive seront désarchivés.
La commande suivante créera une archive de tout mon répertoire
/home/Utilisateur/personnel :
[Utilisateur@uniluk Utilisateur]# tar cvfz personnel.tgz personnel
c indique à tar de créer une archive
z indique a tar de compacter une archive
Ainsi tout mon répertoire personnel, avec les sous répertoires et tous les fichiers, se trouveront
rassemblés dans UN fichier archive : personnel.tgz
1.3.10- Connaître l'espace disque utilisé (df et du)
La commande df permet de connaître l'emplacement de montage des systèmes de fichiers
(partitions utilisables pour stocker des fichiers) accessibles sur votre système et les capacités
restantes sur chacun d'eux.
[Utilisateur@uniluk Utilisateur]$ df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda5 298762 119387 163945 42% /
/dev/sda1 41166 17116 24050 42% /dos
/dev/sda6 1745186 1163946 491042 70% /usr
[Utilisateur@uniluk Utilisateur]$
La commande du permet de connaître l'utilisation disque en kilo-octet par le répertoire
spécifié et ses sous répertoires.
[Utilisateur@uniluk html]$ du
56 ./config
224 ./images
185 ./commandes
28 ./.xvpics
2 ./docs/preparation_debutantlinux
203 ./docs
875 .
[Utilisateur@uniluk html]$
1.3.11- Contrôler les ressources utilisées par les processus
La commande "top" :
La commande top vous permet d'afficher des informations en continu sur l'activité du
système. Elle permet surtout de suivre les ressources que les processus utilisent (quantité de
RAM, pourcentage de CPU, la durée de ce processus depuis son démarrage).
Vous pourrez utiliser l'option -d pour spécifier des délais de rafraîchissement (en secondes).
En cours d'utilisation de top, il est possible de stopper un processus de manière interactive en
tapant k. top demande ensuite quel signal il doit envoyer : 15 (SIGTERM) est le signal par
défaut qui met fin à un processus, 9 (SIGKILL) est plus brutal.
Pour quitter top, appuyer simplement sur la touche "q".
La commande "ps" :
La commande ps permet de connaître les processus actifs à un moment donné :
[Utilisateur@uniluk Utilisateur]$ ps
PID TTY STAT TIME COMMAND
341 p1 S 0 : 00 bash
344 p2 S 0 : 00 bash
1039 p3 S 0 : 00 bash
1219 p3 R 0 : 00 ps
Le "PID" est l'identificateur d'un processus, c'est un nombre. Chaque processus est identifié
dans le système par un nombre unique.
Le "TTY" indique à quel port de terminal est associé le processus.
"STAT" indique l'état dans lequel se trouve le processus. Dans l'exemple, trois processus sont
endormis (S comme "sleep"), et un processus en cours d'exécution (R comme "run"). Le
processus qui est en cours d'exécution n'est autre que la commande "ps" que nous venons de
lancer.
Le "TIME" indique depuis combien de temps le processus utilise les ressources du
microprocesseur.
Le "COMMAND" précise, comme son nom l'indique, la commande dont l'état est décrit par
PID, TTY, STAT et TIME.
Ceci dit, une simple commande "ps" n'indique pas tous les processus du système. Le simple
fait de lancer ps nous a juste indiqué les processus associés à un terminal et qui dépendent de
l'utilisateur courant (ici "Utilisateur"). En fait, il est tout à fait probable que d'autres processus
non liés à un terminal aient été lancés par "Utilisateur".
[Utilisateur@uniluk Utilisateur]$ ps -x
PID TTY STAT TIME COMMAND
240 ? S 0:01 /usr/X11R6/bin/fvwm2
246 ? S 0:00 /usr/X11/bin/xautolock -corners ++++ -time 5 -locker /usr/X
247 ? S 0:00 /usr/X11/bin/unclutter -idle 3
253 ? S 0:00 /usr/local/bin/Periodic
254 ? S 7:34 emacs --background grey79 -geometry 80x58+-4+-11
257 p0 S 0:00 bash
258 p2 S 0:00 bash
259 p1 S 0:00 bash
272 ? S 0:00 /usr/lib/emacs/19.34/i386-gnu-linux/emacsserver
2134 ? S 0:00 /usr/bin/ispell -a -m -d francais
6431 p0 S 1:03 /usr/lib/netscape/netscape-navigator
6441 p0 S 0:00 (dns helper)
6741 p0 R 0:00 ps -x
Les commandes qui ne sont pas associées à un terminal sont reconnaissable par le point
d'interrogation qui rempli les champs TTY.
Si vous voulez connaître tous les processus de la machine de tous les utilisateurs, il suffit
d'utiliser l'option ax. Si en plus vous voulez connaître les utilisateurs associés à chaque
processus, il vous suffit d'utiliser l'option aux. Vous verrez alors plusieurs colonnes s'ajouter
dont "USER" qui indique à quel utilisateur appartient le processus. "%CPU" indique en
pourcentage les ressources du microprocesseur utilisées par le processus. "%MEM" montre en
pourcentage les ressources en mémoire vive utilisées par le processus. "RSS" donne
réellement la mémoire utilisée en kilobytes par le processus. "START" indique l'heure à
laquelle le processus a été lancé.
Comment être plus précis ? : -)
La commande "pstree" :
Cette commande permet d'afficher les processus sous forme d'arborescence et donc de voir
leurs inter-dépendances :
[Utilisateur@uniluk Utilisateur]$ pstree
init-+-crond
|-emacs---emacsserver
|-gpm
|-inetd
|-kerneld
|-kflushd
|-klodg
|-kswapd
|-loadmeter
|-lpd
|-6*[mingetty]
|-named
|-netscape---netscape
|-4*[nfsiod]
|-nxterm---slrn-gor---slrn
|-portmap
|-pppd |-rc.news---innwatch---sleep
|-rpc.mountd
|-rpc.nfsd
|-rpc.yppasswdd
|-sendmail
|-syslogd
|-update
|-xconsole
|-xdm-+-X
| `-xdm---Xsession---fvwm---FvwmPager
|-xterm---bash---su---bash---tail
|-2*[xterm---bash]
|-xterm---bash---pstree
\ -ypserv
On voit par exemple ici que j'utilise Fvwmpager qui depend en fait lui-même de fvwm et lui
même dépend de Xwindow ici lancé grace à xdm (vous n'obtiendrez pas la même chose que
moi si vous lancez Xwindow grâce à la commande startx, en effet xdm permet de lancer
automatiquement Xwindow au démarrage de linux).
La commande "kill" :
La commande "kill" permet d'expédier un signal à un processus en cours.
Sa syntaxe est la suivante :
kill [options] PID
Par exemple, si j'ai lancé une connexion à l'Internet en PPP, un processus pppd sera en cours.
Pour tuer le processus, je peux d'abord faire un ps -ax pour connaître le numero du PID de
pppd et ensuite si par exemple le PID est 592, je peux tuer la connexion en faisant :
[root@uniluk Utilisateur]# kill 592
Vous remarquerez que je suis logué en utilisateur "root" pour faire ceci, en effet le processus
pppd appartenait à l'utilisateur "root" et un autre utilisateur ne peut pas lui expédier de signal.
Si un processus vous résiste, c'est à dire que vous n'arrivez pas à le tuer, vous devez utiliser la
commande : kill -9 PID (PID étant toujours le numéro de de processus).
La commande "killall" permet aussi de tuer un processus mais au lieu d'indiquer le PID vous
indiquerez le nom du processus.
Mais attention, plusieurs processus peuvent utiliser la même commande. Ainsi, si vous tapez
:
[Utilisateur@uniluk Utilisateur]# killall grep
Vous tuerez tous les processus qui contiennent la commande grep. Je vous recommande donc
d'utiliser l'option "-i" qui vous demande une confirmation avant de tenter d'arrêter un
processus..
1.3.12- La connexion de plusieurs commandes : les pipes
Qu'est ce qu'un "pipe" (parfois appelé « tube ») ? Si on le décrit ce n'est rien d'autre que cette
barre verticale que vous pouvez obtenir avec la combinaison de touches "Altgr + 6" sur les
claviers français classiques, ou "Altgr + 1" sur les claviers franco-belges. Un tube permet de
passer le résultat d'une commande à autre commande. Un exemple permettra de comprendre
tout cela beaucoup plus facilement :
Je veux savoir quels sont tous les processus "bash" qui fonctionnent sur le système, mais je
veux que la commande ps aux ne me fournisse les lignes que les lignes qui contiennent le mot
"bash" pour m'eviter d'avoir à parcourir toute la longue liste qu'affiche ps aux :
[Utilisateur@uniluk html]$ ps aux | grep bash
Utilisateur 367 0.0 1.8 1600 568 p2 S 18 : 14 0 : 00 bash
Utilisateur 426 0.0 2.2 1624 704 p3 S 18 : 17 0 : 00 bash
Utilisateur 1261 0.0 2.2 1608 692 p6 S 21 : 22 0 : 00 bash
Utilisateur 1332 0.0 2.4 1616 772 ? S 21 : 41 0 : 00 bash
Utilisateur 1582 0.0 2.7 1604 844 p8 S 22 : 30 0 : 00 bash -rcfile .bashrc
Utilisateur 2796 0.0 0.9 908 300 p3 S 02 : 17 0 : 00 grep bash
root 1162 0.0 2.1 1596 664 ? S 21 : 06 0 : 00 bash
On peut dire que l'on a "connecté" deux commandes entre elles. Mais vous pouvez ainsi en
connecter autant que vous voulez en utilisant cette syntaxe :
commande1 | commande2 | commande3 ... | commandeN Si on se rend compte de l'utilité
des pipes, progressivement on les utilise et on fini par ne plus s'en passer.
1.3.13- Les redirections
Quand on parle de redirection, on parle plus précisément de la redirection des entrées-sorties
que traitent ou engendrent les programmes. Par exemple, lorsque vous tapez des commandes
au prompt de linux, vous effectuez une entrée de caractère grâce au clavier et linux vous
donne une sortie en vous donnant à l'écran le résultat de votre commande. Mais l'entrée de
données peut se faire autrement que par le clavier, en indiquant par exemple un fichier qui
contient des données à traiter. La sortie peut aussi s'effectuer ailleurs que sur l'écran, sur
l'imprimante par exemple.
Ainsi, lorsque nous parlons des entrées sorties, nous parlons aussi des périphériques de
l'ordinateur. On considérera que les périphériques sont des fichiers a part entière car, sous
UNIX, des fichiers spéciaux permettent l'accès aux périphériques se trouvent dans le
répertoire /dev. Dans la plupart des cas ce que l'on y copie va vers le périphérique.
Mais comment faire pour rediriger une entrée ou une sortie ?
Comment faire par exemple pour que la commande cat qui affiche un fichier à l'écran, sorte
plutot le fichier dans un autre fichier ou vers une imprimante ? C'est le signe > qui va nous
permettre de réaliser ceci.
Il est temps de prendre un exemple....
Dans un premier cas, je veux que linux m'affiche le fichier test à l'ecran :
[Utilisateur@uniluk Utilisateur]$ cat test
Vous allez voir s'afficher à l'écran le fichier test.
Dans un deuxième cas, je veux que linux place le fichier test dans un fichier test2 au lien de
l'afficher à l'écran :
[Utilisateur@uniluk Utilisateur]$ cat test > test2
Dans un troisième cas, je veux que linux imprime le fichier au lieu de l'afficher à l'écran :
[Utilisateur@uniluk Utilisateur]$ cat test > /dev/lp0
Quelques constats s'imposent :
1- La sortie sur un autre fichier n'est rien d'autre avec la commande cat qu'une copie du
fichier "test" en "test2". La commande cp nous permet aussi de faire cela.
2- Dans la redirection vers l'imprimante nous avons indiqué le fichier spécial /dev/lp0 qui
correspond au port LPT1 où est connectée mon imprimante.
La commande cat affiche son résultat vers la sortie standard qui est le terminal.
Par défaut le terminal est la sortie standard, ce descripteur de fichier est désigné par le
chiffre "1"
L'entrée standard dans un système UNIX est le clavier et est désigné par le chiffre "0".
Il existe un troisième descripteur de fichier qui est la sortie des erreurs produites par
l'exécution d'une commande.
La sortie des erreurs se fait par défaut sur le terminal et est désigné par le chiffre "2".
Plusieurs types de redirection existent :
- "> fichier" qui permet de rediriger le résultat d'une commande vers une sortie que
nous choisissons.
- "< fichier" permet de spécifier une entrée standard.
- ">> fichier" permet comme le signe ">" de rediriger la sortie standard vers un fichier,
mais si le fichier spécifié existe déjà, la sortie sera ajouté à ce qui existe déjà dans le
fichier alors qu'avec un simple "> le fichier spécifié serait écrasé.
- "<> fichier" permet de spécifier un fichier comme étant en même temps l'entrée
standard et la sortie standard.
- "n> fichier" permet de rediriger la sortie d'un des descripteurs de fichiers vers un
fichier. Par exemple, si vous souhaitez obtenir les erreurs standards dans un fichier
vous n'aurez qu'à utiliser cette syntaxe :
commande 2> erreurs
- "n< fichier" permet de spécifier un fichier comme étant un des descripteurs de fichier.
- ">&n" permet de dupliquer la sortie standard vers un des descripteurs de fichier.
- "<&n" permet de dupliquer l'entrée standard depuis un des descripteurs de fichier.
- "&> fichier" permet de rediriger la sortie standard et l'erreur standard vers un seul et
même fichier.
À première vue, on se demande bien à quoi peut servir certaines des redirections ...
On les découvre au fur et à mesure, mais une des plus utiles est 2>&1 qui permet de rediriger
les erreurs vers la sortie standard. Elle est très appréciée des utilisateurs lorsque par exemple
ceux-ci n'arrivent pas à lancer l'interface X-Window. Il est alors courant de recourir à la
commande suivante afin d'obliger X à placer tous ses messages dans un fichier nommé
erreursX que l'on pourra consulter ensuite à loisir :
[Utilisateur@uniluk Utilisateur]$ startx 2>&1 erreursX.tmp
1.3.14- Définir le propriétaire et le groupe d'un fichier (chown)
Cette commande nécessite d'être administrateur système, il vous faut donc vous loguer en root
(utiliser la commande "su" pour vous loguer en root) :
[Utilisateur@uniluk /home]$ su root
Password :
lorsque nous avons effectué un ls -l sur le fichier linux-test, nous avons obtenu :
-rw-r-r-- 1 Utilisateur Utilisateur 9 Jul 19 19 : 03 linux-test
Le premier nom "Utilisateur" est le propriétaire du fichier, c'est lui qui peut placer les droits
de propriété sur le fichier. Le deuxième nom "Utilisateur" indique le groupe utilisateur du
fichier. C'est l'administrateur système qui peut décider des utilisateurs qui feront partie du
groupe (dans certains cas, l'administrateur système peut permettre à un utilisateur de
déterminer lui même qui fera partie du groupe). Le fichier /etc/group montre les différents
groupes qui existent dans le système).
Je peux décider par exemple que le fichier linux-test n'appartienne plus à l'utilisateur
"Utilisateur" mais à l'utilisateur "thomas" :
[root@uniluk Utilisateur]# chown thomas.Utilisateur linux-test
Vérifions :
[root@uniluk Utilisateur]# ls -l linux-test
-rwxrw-r-- 1 thomas Utilisateur 9 Jul 19 19 : 03 linux-test
Le nouveau propriétaire du fichier est bien thomas.
Une option de chown est à connaître :
chown -R (récursif) permet de modifier les permissions d'un répertoire et de ses sous-
répertoires :
cd ::Il m'est arrivé par exemple de copier de la documentation qui se trouvait dans un
répertoire "doc" dont le propriétaire était l'administrateur système dans le répertoire d'un
utilisateur pour qu'il en ait la plus totale disposition.
J'ai donc d'une part copié tout le répertoire et ses sous répertoires dans le répertoire de
l'utilisateur grâce à la commande "cp" et son option "-r" (voir la section consacrée à cp) et j'ai
donc dû aussi modifier les droits de propriétés de tout ce répertoire et de ses sous répertoires
grâce à la commande chown et son option -R :
[root@uniluk Utilisateur]# chown -R Utilisateur.Utilisateur doc
ceci a permis de fixer en une seule fois le propriétaire de plusieurs sous répertoires et de
fichiers.
1.3.15- Créer un mot de passe root, ajouter un utilisateur et changer le mot de passe
1- Astuce: Mot de passe root.
Apres installation de Ubuntu, le mot de passe de l'administrateur n’est pas encore défini. Mais
le premier utilisateur crée pendant l'installation fait partie des utilisateurs appelé “sudoers”,
c'est à dire qui ont le droit d'agir en tant que super-utilisateur par substitution avec la
commande “su”. La commande qui nous permet de le faire c'est :
sudo passwd
Cette commande permet de définir le mot de pass ROOT. Il faut donner d'abord le mot de
pass de présent utilisateur (une fois), puis le nouveau mot de passe ROOT deux fois lorsqu'il
demande “Enter New Unix password”.
sudo (subtitute user do) : permet à substituer un utilisateur en super-utilisateur afin
d'exécuter les commandes d'administrateur.
su ( switch user) : permet à changer d'utilisateur
2-Utilisez la commande adduser pour ajouter un utilisateur :
Je veux par exemple créer un compte utilisateur "Emyllo" :
[root@uniluk /]# adduser Emyllo
Le compte est créé, c'est-à-dire qu'un répertoire Emyllo a été créé dans le répertoire
/home et l'utilisateur Emyllo a été ajouté dans le fichier de configuration /etc/passwd.
Il ne vous reste plus qu'à déterminer un mot de passe pour l'utilisateur Emyllo à l'aide de la
commande passwd
[root@uniluk /]# passwd Emyllo
passwd vous demande de rentrer deux fois le même password.
Vous pouvez maintenant quitter la session en cours (commande "exit") puis vous loguer en
tant qu'"Emyllo", ou bien utiliser la commande "su" :
[root@uniluk /]# su Emyllo
Ou encore en ouvrant une nouvelle console (linux permet d'ouvrir plusieurs consoles) en
utilisant la combinaison de touches suivante :
Alt-F2
pour revenir sur la première console vous devez simplement faire :
Alt-F1
(Sous l'environnement graphique X, on utilisera Ctrl-Alt-F1, Ctrl-Alt-F2, etc ...)
1.3.15- Décrire un utilisateur : "chfn"
Cette commande vous permet d'indiquer dans le fichier /etc/passwd différentes informations
sur un utilisateur dont son nom, son bureau, ses numeros de téléphone, exemple :
[Utilisateur@uniluk html]$ chfn
Changing finger information for Utilisateur.
Password :
Name [Armand Utilisateur] : Armand Utilisateur
Office [Farniente] : Le Mont Olympe
Office Phone [] : France telecom ?
Home Phone [] : Aie mes factures
1.3.16- Supprimer un utilisateur (userdel)
La suppression d'un compte utilisateur se décompose en deux phases :
- La suppression de l'utilisateur dans les fichiers de configuration passwd et group qui
se trouvent dans /etc (/etc/passwd, /etc/group...)
- La suppression du répertoire et des fichiers de l'utilisateur.
La commande userdel permet de faire soit la première étape soit de réaliser les deux d'un
coup.
Pour supprimer l'utilisateur Emyllo des fichiers de configuration du système, utilisez la
commande suivante :
[root@uniluk /]# userdel Emyllo
Pour supprimer d'un coup l'utilisateur et son répertoire (ici /home/Emyllo), utilisez la
commande suivante :
[root@uniluk /]# userdel -r Emyllo
1.3.17 Modifier les droits d'accès
Il existe 4 commandes liées aux droits d'accès :
• chmod (change mode), la plus utile, qui modifie les permissions
• chgrp (change group) qui modifie le groupe d'un fichier ou répertoire
• chown (change owner) qui modifie le propriétaire d'un fichier ou répertoire
• umask, qui définit les protections par défaut
Les commandes chgrp et chown servent surtout à l'administrateur du système, donc nous ne
les examinerons pas ici (lisez leur page de man pour en savoir plus). En revanche, chmod est
une commande très pratique dans une utilisation courante.
Notation symbolique
Cette notation consiste à associer un ou plusieurs degrés de propriété, une action et un ou
plusieurs types d'accès. On l'utilise généralement pour ajouter ou retirer des permissions par
rapport à la normale (-rw-r--r-- pour un fichier, drwxr-xr-x pour un répertoire).
Degré de propriété Action Type d'accès
u (utilisateur)
+ (ajoute le droit) r (lecture)
g (groupe)
- (enlève le droit) w (écriture)
o (autres)
= (définit le droit) x (execution
a (tout le monde)
Quelques exemples
-Protéger un fichier
Ici, vous interdisez à tout autre que vous l'accès à votre fichier (c'est ce qu'à l'ENS on appelle
couramment le « mode parano »).
sas ~ $ ls -l fichier.txt
-rw-r--r-- 1 toto phy03 42 Jan 5 12:08 fichier.txt
sas ~ $ chmod og-r fichier.txt
sas ~ $ ls -l fichier.txt
-rw------- 1 toto phy03 42 Feb 5 12:08 fichier.txt
-Protéger un répertoire
Même chose pour un répertoire...
sas ~ $ ls -l | grep repertoire
drwxr-xr-x 2 toto phy03 512 Feb 5 12:19 repertoire/
sas ~ $ chmod go-rx repertoire
sas ~ $ ls -l | grep repertoire
drwx------ 2 toto phy03 512 Feb 5 12:19 repertoire/
-Rétablir des droits normaux pour un fichier
Certains fichiers sont par défaut en mode parano. C'est le cas par exemple de votre mail :
quand vous sauvegardez un fichier en provenance de votre boîte aux lettres, il est protégé.
Pour permettre aux autres l'accès au fichier :
sas ~ $ chmod og+r fichier.txt
-Rétablir des droits normaux pour un répertoire
sas ~ $ chmod go+rx repertoire
-Rendre un script exécutable
Par défaut un fichier n'est pas un exécutable. Pour rendre exécutable par tout le monde le joli
script que vous venez d'écrire, faites simplement :
sas ~ $ chmod +x script
-Notation numérique
Cette notation est un peu plus complexe. Elle se fonde sur le principe suivant : considérons un
bloc de permissions, rw-r--r--. Quand une lettre est présente, ça veut dire que l'accès est
autorisé, quand elle est absente (-), il est refusé. On peut traduire ceci de façon binaire :
R W - r - - R - -
1 1 0 1 0 0 1 0 0
Ce qui donne 110-100-100. 110 vaut 6 en décimal, 100 vaut 4 (voir le tableau ci-dessous),
donc la représentation numérique de rw-r--r-- est 644. Cette valeur peut être indiquée
exactement à chmod :
sas ~ $ ls -l fichier.txt
-rw------- 1 toto phy03 42 Feb 5 12:08 fichier.txt
sas ~ $ chmod 644 fichier.txt
sas ~ $ ls -l fichier.txt
-rw-r--r-- 1 toto phy03 42 Jan 5 12:08 fichier.txt
Accès --- --x -w- -wx r-- r-x rw- Rwx
Binaire 000 001 010 011 100 101 110 111
Décimal 0 1 2 3 4 5 6 7
Quelques permissions habituelles
Valeur Type de
Permission Signification
numérique fichier
N'importe quel
--------- 000 Aucun accès à qui que ce soit
type.
Fichier parano : lecture et écriture réservées au
rw------- 600 Fichiers
propriétaire.
Standard : tout le monde peut lire le fichier mais
rw-r--r-- 644 Fichiers
vous êtes le seul à pouvoir le modifier.
rw-rw-rw 666 Fichiers Fichier public : tout le monde peut lire et écrire.
Répertoire parano : lecture, accès et écriture réservés
rwx------ 700 Répertoires
au propriétaire.
Fichier lisible et exécutable par tous, vous seul
Fichiers
pouvez le modifier.
rwxr-xr-x 755 Standard : tout le monde peut accéder au répertoire
Répertoires et lire son contenu, vous seul pouvez modifier le
contenu.
Répertoire public : tout le monde peut y accéder, lire
Répertoires
le contenu et modifier celui-ci.
rwxrwxrwx 777
Exécutable public : tout le monde peut le lire,
Fichiers
l'exécuter et le modifier.
Prendre plus de Contrôle (révision)
1. Travailler avec plus de privilège : sudo, su
1. sudo (subtitute user do) : permet à subtituer un utilisateur en super-utilisateur afin
d'exécuter les commandes d'administrateur.
2. Su ( switch user) : permet à changer d'utilisateur
2. Création d'un compte utilisateur : adduser, useradd, deluser, …
1. adduser : permet d'ajouter un nouveau compte utilisateur au sytème
1. useradd et adduser (différence)
2. deluser : permet la suppression d'un compte utilisateur au système
3. Modification de droit et du propriétaire d’un fichier, répertoire
1. Chmod : change de droit sur fichier ou répetoire
2. Chown : change de propiètaire d’un fichier ou répertoire
4. Creation et modification d’un groupe d’utlisateur
1. addgroup
2. chgrp