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…)

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

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

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 :

#En mode super-utilisateur: su - [Enter] apt install mc

[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 :

#En mode super-utilisateur: su - [Enter] mc

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 md5 (si pas unique, très improbable) d'un fichier, ce qui 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, du type a575bdb97eb0d7…

md5sum votre-fichier
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)
à gauche : "Linux" (old)

à droite : "GNU/Linux" (new)
ajouter après la ligne 2 (old) les lignes 3 et 4 (new)


changer : remplacer les lignes 4-6 (old) par la ligne 6 (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.

#En mode super-utilisateur: su - [Enter] testdisk /dev/sdb

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)