Fichiers et répertoires en GNU/Linux
EN Unix, et donc GNU/Linux, à peu près tout est fichier : répertoires, périphériques, processus… qui s'accrochent à l'arborescence dont la racine est / . Cette page se limitera aux fichiers de données (textes, feuilles de calcul, images, musique…) et aux répertoires, aussi connus sous le nom de «dossier».
Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers…)
Pour le chiffrement des fichiers, voir cette page.
1. Répertoires
2. Fichiers
3. Affichage
4. Comparaison
5. Récupération de fichiers
Attention : la plupart des commandes ci-après ne fonctionnent que si vous disposez des droits suffisants sur les fichiers ou répertoires, ce qui courant concernant les fichiers et les répertoires de votre répertoire personnel.
1. Répertoires
pwd retourne l'adresse complète du répertoire courant.
ls liste les noms des fichiers et sous-répertoires du répertoire courant
ls -l donne les paramètres des fichiers et répertoires listés (les droits, possesseurs, longueurs, dates…) avant leur nom.
ls -R fait également une recherche dans les sous-répertoires, de façon récursive.
ls --help liste les options utilisables pour la commande.
dir est un alias de ls et s'emploie de la même façon.
du liste les sous-répertoires, de façon récursive et le nombre de bloc de chaque fichier ou répertoire
du images renvoie en Ko la place utilisée par chaque sous-répertoire, terminé par l'ensemble du répertoire images
du -h images renvoie la place utilisée en «K», «M» ou «G», selon le poids des répertoires
du -s images renvoie uniquement la place utilisée par l'ensemble du répertoire images
cd nom-du-repertoire (change directory) permet d'entrer dans un sous-répertoire listé par ls
cd .. permet de remonter dans le répertoire contenant le répertoire courant
cd nom1/nom2 permet d'entrer directement dans le sous-sous-répertoire nom2
cd / va dans le répertoire racine, le plus haut niveau hiérarchique
cd va à la racine du répertoire de l'utilisateur (~)
cd /home/nana/musique/chanson fixe le répertoire courant, d'où que l'on soit (adressage absolu)
cd ~/musique/chanson est synonyme du précédent pour l'utilisatrice nana uniquement, dont le répertoire personnel (~) est /home/nana
mkdir dirladada crée le sous-répertoire dirladada dans le répertoire courant
rmdir dirladada supprime le sous-répertoire dirladada seulement s'il est vide
cp un deux -R copie l'entièreté du répertoire un dans le répertoire deux
mv un deux
- si le répertoire deux n'existe pas, le répertoire un est renommé deux
- si le répertoire deux existe déjà, le sous-répertoire un est déplacé dans deux
ncdu classe répertoires et sous-répertoires selon leur poids, en permettant la navigation
2. Fichiers
ls -l liste fichiers et répertoires et leurs attributs (propriétaire, droits…)
ls -l | sort listage de fichiers avec une mise en ordre alphabétique
ls -l | grep chaine listage avec un filtre : seuls les lignes contenant chaine sont affichées
Il est possible d'utiliser more ou less en pipe : dmesg | less
du -a liste répertoires et fichiers du répertoire courant de façon récursive
cp yeap goulp copie le fichier yeap dans le sous-répertoire goulp
cp *.txt /repertoire copie les fichiers ".txt" dans le répertoire précisé
cp -u yeap goulp copie le fichier que si un fichier du même nom ne se trouve pas encore dans le répertoire-cible ; si un tel fichier y existe déjà, il ne sera remplacé que s'il est plus ancien.
mv yeap goulp
- déplace le fichier yeap dans le répertoire goulp s'il existe
- le fichier yeap est renommé goulp si le répertoire goulp n'existe pas
rm fichier détruit irrémédiablement un fichier (sans passer par la «poubelle»).
echo "Kiss me" > zaza crée dans le répertoire courant le fichier zaza, contenant Kiss me.
touch fichier actualise la date et l'heure d'un fichier existant, crée sinon un fichier vide.
find *.mp3 affiche les fichiers mp3 du répertoire courant et de ses sous-répertoires
find ~ -name *.mp3 précise le répertoire (ici de l'utilisateur). Il est alors nécessaire de préciser -name avant le motif de recherche
locate *.jpg affiche les fichiers jpg du répertoire courant et ses sous-répertoires. Deux restrictions : il faut que la commande soit installée sur le système et que updatedb ait été lancé avec les privilèges du super-utilisateur.
whereis commande indique l'endroit d'un binaire exécutable, de ses sources ou de son manuel
Liens
Un lien est un alias, à savoir un autre chemin/nom désignant un même fichier. Il ne s'agit pas d'une duplication du fichier : l'édition à travers un lien modifie le contenu du fichier.
Un lien matériel (hard link) est un autre chemin/nom pointant vers le même fichier (sa localisation matérielle, par exemple sur le disque). Chaque chemin/nom (l'original et les suivants) a la même valeur, et les données du fichiers ne seront effacées que si tous ces chemins/noms (dont l'original) sont effacés.
Un lien symbolique (symbolic link) pointe vers le nom original, le seul pointant vers les données du fichier. L'effacement du nom original du fichier suffit à l'effacer, cassant tous ses liens symboliques.
ln fichier lien crée un second nom du fichier
ln -s fichier lien crée un lien symbolique
readlink lien retrouve un nom du fichier d'après son lien symbolique (pas d'un lien matériel, qui est un nom de fichier comme un autre)
Éditeurs
Les bureaux GNU/Linux disposent d'un éditeur graphiques de textes simples, comme gedit pour Gnome, kwrite pour KDE, pluma pour Mate-Desktop, Xed pour Cinnamon, leafpad pour LXDE…) avec la restriction qu'ils ne permettent normalement pas d'éditer les fichiers du système (à faire en tant que super-utilisateur).
Parmi les éditer non graphiques, vi ou vim est un des éditeurs les plus anciens, et pas trop intuitif, emacs (à installer) est très spécialisé et nécessite un certain temps d'apprentissage.
nano est déjà installé sur le système et permet l'édition des fichiers avec nano -w fichier, mais n'est pas trop intuitif, mais c'est souvent l'éditeur standard.
mc (midnight commander) est un clone de Norton Commander. Il permet de naviguer dans les répertoires, visibles en deux volets, affichier quelques formats d'images, ouvrir quelques archives, téléverser des pages vers Internet, et notamment d'éditer des fichiers. Pour installer :
#apt install mcEn mode super-utilisateur: su - [Enter]
[F4] permet l'édition de fichiers (et un système de blocs pour les copier-coller). À partir de Debian 8 Jessie, mc demande lequel des éditeurs on désire utiliser, entre vim, nano et l'éditeur interne à mc, le plus intuitif. Si vous voulez modifier le choix, taper select-editor sur le champ editable en fond de fenêtre, juste au-dessus du menu du bas.
Pour déplacer, copier ou effacer des fichiers protégés (appartenant au super-utilisateur) ou modifier certains fichiers de configuration (/etc/apt/sources.list, /etc/fstab…) il faut lancer mc en tant que super-utilisateur :
#mcEn mode super-utilisateur: su - [Enter]
Attention ! vous êtes alors capable de détruire le système : avant de modifier un fichier, il est utile d'en faire une copie dont le nom de fichier se termine par exemple par -old. Mais avoir gardé une copie d'un fichier ne permettant plus le lancement du système n'est pas trop intéressant. Prudence donc.
3. Affichage de fichiers
cat fichier affiche un fichier dans la console. N'est utile que pour les fichiers-textes, où les caractères sont affichables, et n'est pratique que pour les fichiers courts, car on n'en voit que la fin s'il prend plus d'un écran. zcat et bzcat s'appliquent aux fichiers zippés.
head fichier affiche les dix premières lignes
head -n 15 fichier affiche les quinze premières lignes d'un fichier
ls -l | head -n 20 peut s'utiliser en «filtre» pipe
tail fichier affiche les dix dernières lignes d'un fichier
tail -n 15 fichier affiche les quinze dernières lignes d'un fichier
ls -l | tail -n 20 peut s'utiliser en «filtre» pipe
tail -f fichier ajoute les lignes ajoutées au fur et à mesure (en cas de fichier log), sortir avec [Ctrl-z]
more, zmore et bzmore permet le défilement par écran [Espace] ou par ligne [Enter]
ls -l | more peut servir de complément pipe à tout affichage
less, zless et bzless (éventuellement à installer) permet également de remonter ou redescendre dans le texte avec les touches fléchées et [PgDn]/[PgUp].
ls -l | less peut servir de complément pipe d'un autre affichage
sort fichier affiche un fichier texte dont les lignes sont triées
ls -l | sort peut servir de complément pipe d'un autre affichage
Il est possible de trier les lignes d'un fichier avec | sort :
Il est possible de rediriger les sorties de la console vers un fichier avec > :
ls -l > unfichier.txt cat fich1 fich2 fich3 > tout.txt
commande | tee nom_de_fichier permet une redirection vers un fichier de ce qu'une commande affiche en console (> ne permet pas l'affichage)
Il est possible de filtrer l'affichage ligne par ligne avec | grep :
lsmod | grep sound # filtre les modules relatifs au son
od -x fichier affiche un fichier binaire en hexadécimal par groupe de deux octets, en octal si pas de -x
od -t x1 dac.txt affiche en hexadécimal octet après octet
4. Comparaison de fichiers
4.1 cheksum
md5sum calcule l'empreinte checksum :
$ md5sum votre-fichier 0787b5ee8807f90cf79cf621c7c791fb votre-fichier
Cette empreinte, assez improbable (environ 1038) permet de vérifier l'intégrité d'un fichier téléchargé (par exemple l'image iso d'un CD) si vous possédez la signature "checksum" qui lui est est associée. Pour un disque entier : md5sum /dev/hdc
D'autre commandes existent pour les checksum sha : shasum, sha1sum, sha256sum, sha224sum, sha384sum, sha512sum… sha256sum, plus sécurisé que md5sum, devient la norme.
4.2 cmp
cmp fichier1 fichier2 compare deux fichiers, et retourne l'endroit du premier octet non identique.
cmp fichier1 fichier2 compare deux fichiers octet après octet, en retournant l'endroit («octet x, ligne y») du premier octet non identique. Si les fichiers sont identiques, rien n'est retourné
cmp -l fichier1 fichier2 donne trois valeurs : emplacement, valeur de l'octet du premier fichier et celle du second quand ils ne correspondent pas
cmp -i n1:n2 fichier1 fichier2 ignore les n1 premiers octets du premier fichier et les n2 premiers du second
cmp -s fichier1 fichier2 rend la sortie silencieuse. Peut être utile lorsque la commande bash est appelée par un autre programme, par exemple dans python3 :
if (os.system("cmp -s fichier1 fichier2")) : print("!=")
...sinon fichier1 fichier2 sont différents: octet 10, ligne 2 s'affiche avant !=
zcmp et bzcmp concerne les fichiers zippés
4.3 diff / patch
diff fichier1 fichier2 compare deux fichiers ligne à ligne et inscrit toutes les différences dans un fichier. C'est d'ailleurs utilisé pour les patches de code-source de programmes à recompiler. zdiff et bzdiff concerne les fichiers zippés
diff renseigne les différences ligne à ligne entre deux fichiers de texte, par des informations codées. À partir de deux fichiers, old.txt (colonne de gauche) et new.txt (colonne de droite):
Linux Debian Jessie Utilisateur depuis 2002 !!! |
GNU/Linux Debian Squeeze Wheezy Jessie Utilisateur |
diff old.txt new.txt > txt.diff fournira le fichier txt.diff suivant qui est un ensemble de règles pour transformer old.txt en new.txt :
1c1 < Linux --- > GNU/Linux 2a3,4 > Squeeze > Wheezy 4,6c6 < utilisateur < depuis 2002 < !!! --- > Utilisateur |
changer : remplacer la ligne 1 (old) par la ligne 1 (new) |
patch permet de corriger/compléter un fichier à partir d'un fichier de différences généré par diff :
patch source.txt txt.diff écrase source.txt par le texte corrigé
patch -b source.txt txt.diff sauvegarde source.txt sous source.txt.orig
5. Récupération de fichiers
5.1 testdisk
Réparation de partition ou récupération des fichiers inaccessibles sur mémoire de masse, en mode console.
#testdisk /dev/sdbEn mode super-utilisateur: su - [Enter]
permet de travailler sur le disque /dev/sdb (second disque dur du système ou premier disque dur externe ou clé USB…)
La suite n'est pas trop intuitive, cela dépend du problème rencontré. Si le boot-secteur ou la FAT est détruite, il faut impérativement lancer une analyse du périphérique, qui peut prendre quelques heures pour un téra-octet. Une fois le périphérique scanné, il faut décider des fichiers ou répertoires à copier et d'un répertoire pour les recevoir.
Attention si vous utilisez l'option /log, qui peut nécessiter plusieurs Giga-octets de place et peut saturer votre partition courante.
5.2 extundelete
Retrouve des fichiers effacés pour les systèmes ext3 et ext4. La documentation est assez lacunaire, mais il semblerait qu'il faille opérer sur une partition montée en read-only. Avec pour cible la troisième partition du premier disque (sous réserves !) :
mount -o remount,ro /dev/sda3 extundelete /dev/sda3
La partition peut être remplacée par un fichier «image», c'est-à-dire issu d'une copie brute d'une partition par la commande dd
Prévoit un répertoire de récupération, qui doit se situer en dehors de la partition-cible (toto doit être remplacé par votre nom de connexion) :
extundelete /dev/sda3 --restore-directory /home/toto/repertoire/
5.3 dvdisaster
dvdisaster est la seule application ayant permis de récupérer un dvd qui apparaissait comme vierge après plusieurs sessions de gravures non finalisées (la commande de bas niveau dd ne trouvait pas le media, non montable). Mais lorsque l'image ISO a pu être copiée sur un disque dur, il a fallu séparer les fichiers à la main un à un, n'ayant pu trouver de répertoire.
5.4 foremost (pm)
Pour mémoire, récupération des fichiers effacés (les systèmes de fichiers journalisés comme ext3 doivent être démontés ; ne fonctionne pas avec ext4).
foremost /dev/sdb1 -t jpg
… recopie les fichiers effacés d'un périphérique de stockage dans un répertoire, sous certaines conditions : les fichiers effacés doivent être d'un seul tenant sur la partition, il ne doivent pas avoir été recouverts par d'autres fichiers…
-t pour préciser les types de fichiers (jpeg, mov, pdf, avi, etc.), tous par défaut
-o pour préciser le nom du répertoire de sortie (~/output/ par défaut)