Module 1
Chapitre 3 - Commandes de base
Opérations sur les fichiers et répertoires
Nous allons lister ici, une suite de commandes utiles à l’utilisation de votre machine sous Linux :
But de la commande | Linux | Equivalence MsDos |
Se déplace vers le répertoire rep | cd rep | cd rep |
Liste le contenu d’un répertoire (-R pour un listage récursif) | ls rep | dir |
Copie un fichier source vers un fichier destination (-R pour un répertoire) | cp source destination | copy |
Déplace un fichier source vers une destination (peux servir à renommer un fichier | mv source destination | move |
Crée un répertoire | mkdir rep | mkdir rep |
Efface un fichier (-rf pour effacer un répertoire) | rm fichier | del / deltree fichier |
Crée un lien destination qui va pointer sur une source (-s pour un lien symbolique) | ln source destination | non disponible |
Met à jour la date de modification du fichier, ou crée un fichier vide si le fichier n’existe pas. | touch fichier ou repertoire | non disponible |
Lecture de fichier
cat fichier | Affiche le contenu du fichier sur la sortie standard |
more fichier | Lit le contenu d’un fichier page par page. (Il doit lire l’intégralité du fichier avant de l’afficher) |
less fichier | Equivalent à more sauf qu’il n’est pas obligé de lire l’intégralité du fichier et permet de remonter dans l'affichage |
tail fichier | N’affiche que les dernières lignes d’un fichier (-n permet de spécifier le nombre de lignes à afficher) |
head fichier | Comme tail, mais affiche les N premières lignes d’un fichier (N=10 par défaut) |
grep "chaine" fichier | Recherche l’occurence d’une chaine de caractères "chaine" dans un ou plusieurs fichiers |
Noms, attributs des fichiers et globbing
3.1 Noms des fichiers
Les noms de fichiers sont "case sensitives", c’est à dire qu’ils tiennent compte des majuscules et des minuscules. Le nom d’un fichier peut contenir jusqu’à 255 caractères.
Pour accéder à un fichier comportant des caractères spéciaux dans son nom, on doit placer le nom du fichier entre guillemets (ou utiliser des backslash avant les caractères spéciaux) :
luser@localhost $ vi "ceci est un test.txt"
luser@localhost $ vi ceci\ est\ un\ test.txt
3.2 Attributs des fichiers
Pour lister le contenu d’un répertoire, nous utiliserons la commande ls
Afin de disposer de plus d'informations, nous ajouterons l’option -l
luser@localhost $ cd /tmp
luser@localhost $ mkdir un_repertoire
luser@localhost $ touch un_fichier
luser@localhost $ ln -s un_fichier un_lien
luser@localhost $ ls
un_fichier un_lien un_repertoire
luser@localhost $ ls -l
total 4
-rw-r--r-- 1 ualc galc 10 Dec 3 00:42 un_fichier
lrwxrwxrwx 1 ualc galc 10 Dec 3 00:43 un_lien -> un_fichier
drwxr-xr-x 2 ualc galc 4096 Dec 3 00:42 un_repertoire
Notons que les fichiers ou répertoires débutant par un "." sont cachés, c'est-à-dire qu’ils ne seront pas visible avec la commande ls. Si nous souhaitons voir les fichiers cachés, on passe en argument -a à ls :
luser@localhost $ ls
toto profile tools
luser@localhost $ ls -a
. .profile
.. .rhosts
.cshrc .shrc
.login tools
.login_conf profile
.mail_aliases toto
.mailrc test.c
- | Fichier ordinaire |
d | Répertoire |
l | Lien symbolique |

4. Le globbing
Le globbing est l’utilisation de caractères spéciaux tels que "*", "?".
*: correspond à aucun ou plusieurs caractères
? : correspond à un caractère
[a-z] : correspond à un ensemble de caractères
[^a-z] : correspond à tous les caractères sauf ceux de cet ensemble
Voici la liste des fichiers utilisés pour l'exemple :
luser@localhost $ ls
index.htm sommaire.htm t0st.c table.htm test.c
On affiche tous les fichiers finissant par ".htm"
luser@localhost $ ls *.htm
index.htm sommaire.htm table.htm
On affiche tous les fichiers sauf les fichiers finissant par la chaîne "htm".
luser@localhost $ ls *[^htm]
t0st.c test.c
Exemple avec "?" qui signifie un caractère non vide :
luser@localhost $ ls t?st.c
t0st.c test.c
On affiche tous les fichiers comportant "st" dans le nom :
luser@localhost $ ls *st*
t0st.c test.c
5. L'editeur VIm
Nous avons choisis de vous présenter cet éditeur de texte car c'est le plus utilisé sur la plupart des systèmes UNIX. VIm est une version améliorée de l'éditeur VI, possédant plus de commandes et d'options. VI est toujours le plus distribué sur les systèmes Unix, mais une maitrise de VIm vous permettra de vous débrouiller avec l'éditeur VI.
Le logiciel "vimtutor" permet d'apprendre les principales commandes très simplement, en vous les présentants pas à pas.
5.1 Appel de l’éditeur
Editer un fichier s’il existe, sinon, éditer un nouveau fichier vide :
vi fichier
Editer chacun des fichiers :
vi fichier_1 fichier_2
5.2 Modes d’édition
Contrairement aux éditeurs wysiwyg (what you see is what you get) VIm fonctionne par mode.
2 modes bien distincts existent :
Le mode insertion :
Les caractères tapés s'insèrent directement dans le texte en cours
Le mode commande
Les caractères tapés sont considérés comme des commandes d'édition de texte
Le logiciel démarre par defaut en mode commande.
i permet de passer en mode insertion
: permet de passer en mode commande
ESC permet de sortir des différents modes.
Le tableau ci-dessous présente les commandes principales à utiliser en mode commande.
Commande | Description |
:w | Sauvegarde les changements |
:q | Quitte le document en cours |
:q! | Quitte le document en cours sans sauvegarder les changements |
:wq | Enregistre et quitte l'editeur |
:f file2 | Enregistre sous un autre nom le document (équivalent de enregistrer sous) |
/hop | Recherche l'occurence hop et la met en surbrillance, "n" se positionne sur la prochaine occurence |
v | Permet de passer en mode visualisation pour faire une sélection par exemple |
d | Equivalent de couper, aprés une sélection par exemple |
dd | Coupe la ligne entière |
y | Equivalent de copier, après une sélection par exemple |
yy | Copie la ligne entière |
p | Coller après le curseur |
5.3 Mode Edition
Après l'utilisation de ces commandes, l'éditeur passe en mode édition :
Commande | Description |
a | Ajoute après le curseur |
A | Ajoute après la ligne courante |
i | Insère avant le curseur |
I | Insère au debut de la ligne courante avant le premier caractère non-blanc |
o | Ouvre une nouvelle ligne en-dessous de la ligne actuelle |
O | Ouvre une nouvelle ligne au-dessus de la ligne actuelle |
6. tar, gzip, bzip2
6.1 tar
tar [options] [fichiers]
La commande tar est une ancienne commande Unix qui permet aisément d’archiver, c’est-à-dire de réaliser la sauvegarde d’un ensemble de fichiers en un seul fichier. Ce fichier peut être compressé après, mais tar ne compresse pas les fichiers qu'il archive.
La plupart des archives se trouvent sous ce format.
fichiers désigne un ensemble de fichiers ou toute une arborescence précédée d’un chemin absolu (à partir de /) ou relatif.
Si c’est un chemin absolu qui est indiqué, il sera conservé dans l’archive et permettra ensuite d'être récupéré par la suite.
options
Commande | Description |
-x | Extraire le contenu d’une archive |
-c | Créer une nouvelle archive |
-t | Afficher seulement la liste du contenu de l’archive, sans l’extraire |
-f fichier | Indiquer le nom du fichier archive |
-v | Mode verbeux, affiche le détails des opérations |
-z | Compresser ou décompresser en faisant appel à l’utilitaire gzip |
-j | Compresser ou décompresser avec l’utilitaire bzip2 |
-p | Préserver les permissions des fichiers |
Exemples :
Création d'archives
1 - Effectuer la sauvegarde de tous les fichiers du répertoire /home/toto dans le fichier sauve.toto.tar placé dans le répertoire courant :
luser@localhost $ tar -cvf sauve.toto.tar /home/toto
2 - Effectue, en plus de l’archivage, une compression des fichiers :
luser@localhost $ tar -cvzf sauve.toto.tar.gz /home/toto
Listing
luser@localhost $ tar -tvf sauve.toto.tar
Extraction
1 – Extrait tout le contenu de l'archive dans le répertoire courant :
luser@localhost $ tar -xvf sauve.toto.tar
2 - Décompresse et extrait :
luser@localhost $ tar -xvfz sauve.tar.gz
3 – Extrait de l’archive le répertoire passé en argument :
luser@localhost $ tar -xvfz sauve.tar.gz home/toto/tmp
6.2 gzip
Elle est utilisée pour compresser un fichier quelconque, et en particulier une archive tar. L'extraction se fait par la commande gunzip, ou de manière totalement équivalente par gzip -d.
gzip [options] [fichiers]
Elle peut décompresser les fichiers .gz, mais aussi les fichiers .z , .Z
options :
-1 à -9 | Fixe le niveau de compression -1 etant le plus faible |
-d | Décompresse l'archive passée en argument |
-c | Ecrit sur la sortie standard au lieu de remplacer le fichier d’origine |
-l | Affiche des infos sur les fichiers de l'archive (taux de compression...) |
-r | Gzip parcoure tous les répertoires de manière récursive lors de la dé/compression |
Exemples :
1 - Compresse backup.tar et le remplace par le fichier backup.tar.gz d’une taille beaucoup plus réduite :
luser@localhost$ gzip backup.tar /home/toto
2 - Compresse au maximum chaque fichier .txt séparément, et les renomme en ajoutant le suffixe .gz :
luser@localhost $ gzip -9 *.txt
6.3 bzip2
Bzip2 admet la même syntaxe que gzip, mais effectue une compression plus efficace au détriment d'un besoin accru de mémoire et cpu.
7. Recherches de fichiers
7.1 find
find [chemin] [options] [expression]
Trouve tous les fichiers sur un du répertoire chemin qui correspondent à une expression. find recherche dans les sous répertoires.
Exemple : pour rechercher tous les fichiers mp3 contenus dans les répertoires personnels des utilisateurs :
luser@localhost $ find /home/ -name "*.mp3"
Option | Description |
-atime +n (-n) | Trouve les fichiers auxquels on a accédé il y a plus de n jours (ou moins de n jours) |
-mtime +n (-n) | Trouve les fichiers modifiés il y a plus de n jours (ou moins de n jours) |
-name "toto*" | Trouve les fichiers dont le nom commence par toto |
-maxdepth n | Définit le niveau maximum de sous-répertoire à explorer |
-type | Indique le type de fichier à rechercher :
|
Exemple : nous voulons rechercher tous les répertoires du répertoire courant contenant "rep" dans leur nom, en ne descendant pas dans les sous-répertoires
luser@localhost $ find . -type d -maxdepth 0 "*rep*"
On peut utiliser find pour exécuter une commande sur certains fichiers :
find [chemin] [option] -exec cmd {} \;Les fichiers trouvés sont passés à cmd comme des paramètres.
{} sera remplacé par le nom du fichier.
Le point virgule execute la commande sans demander d'arguments supplémentaires, normalement le cas avec un "\;".
Exemple :
Pour effacer tous les fichiers .avi de mon répertoire :
luser@localhost $ cd ~
luser@localhost $ find . -name "*.avi" -exec rm {} \;
7.2 slocate – locate
locate est un lien symbolique de la commande slocate.
La commande slocate utilise une base de données que vous devez mettre à jour régulièrement.
Des fichiers récemment créés ne sont donc pas forcément référencés. La base de données peut être mise à jour manuellement par le super utilisateur (root) avec la commande slocate -u ou encore updatedb
L’avantage de slocate est de permettre une recherche beaucoup plus rapide qu’avec la commande find. En effet, lors d'une recherche, la commande find parcourant à chaque lancement le contenu entier du disque, il est bien plus rapide d'utiliser la commande locate
Exemple : recherche tous les fichiers dont le nom comporte la chaîne toto :
luser@localhost $ locate toto
8. "Pipes" et Redirections
Une des bases essentielles d'un système Unix / Linux est la redirection d'un flux émanant d'un programme en direction d'un autre.
8.1 Les flux standards
Les flux standards sont au nombre de trois :
STDIN (0) : STDIN n’est ni plus ni moins que l’entrée au clavier (dite "entrée standard"). Cela veut dire que tout ce que vous tapez au clavier va passer par ce canal d’entrée/sortie.
STDOUT (1) : STDOUT est ce que l’on appelle la "sortie standard". Les informations qui apparaissent à l’écran passent par le canal STDOUT.
STDERR (2) : STDERR est la "sortie d’erreur standard". L’utilité d’avoir deux flux de sortie permet de séparer les messages d’erreurs et la sortie normale.
Les numéros 0,1,2 désignent respectivement STDIN, STDOUT et STDERR, et peuvent être utilisés dans les commandes shell.
8.2 Redirections
Ainsi, si nous exécutons un programme comme ls, il va afficher le résultat sur la sortie standard, c'est à dire l'écran par défaut. Il est possible de rediriger ces différents flux vers des fichiers, d’autres flux…
Ceci se fait par le biais des signes "<" et ">" Une commande "commande > un fichier" va créer un fichier "un fichier" contenant le résultat de la commande "commande".
De même, avec le signe "<" au lieu de ">" aurait utilisé le contenu du fichier "un fichier" en entrée de la commande "commande".
Exemple :
$ cd /tmp
$ ls -l /bin
total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root root 54905 May 22 2001 attr
-rwxr-xr-x 1 root bin 477692 Mar 22 2000 bash
-rwxr-xr-x 1 root bin 295012 Sep 3 1999 bash1
lrwxrwxrwx 1 root root 5 Nov 10 2000 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
...
$ ls -l /bin > un_fichier
$ cat un_fichier
total 4872
-rwxr-xr-x 1 root root 3180 Jan 22 2001 arch
-rwxr-xr-x 1 root root 54905 May 22 2001 attr
-rwxr-xr-x 1 root bin 477692 Mar 22 2000 bash
-rwxr-xr-x 1 root bin 295012 Sep 3 1999 bash1
lrwxrwxrwx 1 root root 5 Nov 10 2000 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
...
Si on utilise plusieurs fois des redirections sur un même fichier, avec ce que l’on a vu, le fichier est écrasé à chaque fois. Pour éviter cela il est possible d’utiliser "<<" à la place de "<" et ">>" à la place de ">", auquel cas les données seront concaténées dans le fichier (mises à la suite).
luser@localhost $ ls linux-lfs/
linux-lfs-flat.vmdk linux-lfs.vmx nvram
linux-lfs.vmdk linux-lfs.vmx.WRITELOCK vmware.log
luser@localhost $ ls evolution/
addressbook-sources.xml config mail shortcuts.xml
cache gtkrc-mail-fonts meta vfolders.xml
camel-cert.db local searches.xml views
luser@localhost $ ls linux-lfs/ >> fichier
luser@localhost $ ls evolution/ >> fichier
luser@localhost $ cat fichier
linux-lfs-flat.vmdk
linux-lfs.vmdk
linux-lfs.vmx
linux-lfs.vmx.WRITELOCK
searches.xml
shortcuts.xml
vfolders.xml
views
Voici un exemple montrant la redirection de la sortie standard et de la sortie d’erreur standard :
Avec l’outil find, on va rechercher un fichier dont le nom comporte "tes" dans le répertoire /etc. On redirige les résultats dans le fichier "fichier" et les erreurs dans le fichier "erreurs" :
2> signifie que l’on redirige l’erreur standard et > signifie implicitement 1>
luser@localhost $ find /etc/ -name "*tes*" > fichier 2> erreurs
luser@localhost $ cat fichier
/etc/CORBA/servers/gnotes_applet.gnorba
/etc/sysconfig/network-scripts/ifup-routes
/etc/dumpdates
/etc/openldap/ldaptemplates.conf
luser@localhost $ cat erreurs
find: /etc/cups/certs: Permission denied
find: /etc/default: Permission denied
Notons que l’on peut rediriger l’erreur standard et la sortie standard vers le même fichier :
luser@localhost $ find /etc/ -name "*tes*" > fichier 2>&1
luser@localhost $ cat fichier
find: /etc/cups/certs: Permission denied
find: /etc/default: Permission denied
/etc/CORBA/servers/gnotes_applet.gnorba
/etc/sysconfig/network-scripts/ifup-routes
/etc/dumpdates
/etc/openldap/ldaptemplates.conf
Voici un dernier exemple montrant la redirection de l’entrée standard :
luser@localhost $ cat .bashrc
export PS1="\[\033[1;35m\][\u@\h \W]$\[\033[0m\] "
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
BLA=‘ps aux | grep XFree86‘
if [ ! "$BLA" == "" ]; then
export TERM=xterm-color
fi
alias ncftp=’ncftp3’
alias ls=’ls -G’
alias vi=’vim’
luser@localhost $ tr ’A-Z’ ’a-z’ < .bashrc
export ps1="\[\033[1;35m\][\u@\h \w]$\[\033[0m\] "
export path=$path:/usr/local/bin:/usr/local/sbin
bla=‘ps aux | grep xfree86‘
if [ ! "$bla" == "" ]; then
export term=xterm-color
fi
alias ncftp=’ncftp3’
alias ls=’ls -g’
alias vi=’vim’
Avec tr, on a converti les caractères majuscules en minuscules, le flux d’information venant du fichier ".bashrc".
8.3 Pipes
Les "pipes" ("|") quand à eux sont "des voies de communication" d’un processus vers un autre.
Par exemple si nous faisons "commande 1 | commande 2", le résultat de la commande "commande 1" va être utilisé en entrée de la commande "commande 2".
Il est possible de chaîner ce type de commande autant que l’on veut. Rien de tel qu’un exemple :
luser@localhost $ ls -la /bin > un_fichier
luser@localhost $ grep "bzip" un_fichier
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover
luser@localhost $ ls -la /bin | grep "bzip"
lrwxrwxrwx 1 root root 5 Feb 12 2001 bunzip2 -> bzip2
-rwxr-xr-x 1 root bin 27380 May 18 2000 bzip2
-rwxr-xr-x 1 root bin 6708 May 18 2000 bzip2recover