Gestion des fichiers
Cet article est une ébauche. N'hésitez pas à contribuer ou à en discuter.
L'objectif est de vous présenter quelques commandes de bases pour vous mettre le pied à l'étrier avec votre terminal. Nous ne pouvons pas être exhaustif car toutes les commandes possèdent un grand nombre d'options. Elles ne seront donc que rarement présentées ici. Pour les connaître il faut utiliser la commande man. Il s'agit de la commande la plus imporante car elle vous explique comment fonctionne les autres commandes. C'est le manuel.
Par exemple pour connaître la liste des possibilités de la commande ls utilisez la commande :
$ man ls
Gestion des fichiers
Lire le contenu d'un fichier
La commande la plus simple pour lire le contenu d'un fichier est la commande cat.
$ cat fichier
cat cat affiche l'ensemble du fichier sur le terminal, si le fichier est trop grand il va être nécessaire de remonter pour voir le début de celui-ci. Pour ne pas avoir se problème il est possible soit d'utiliser la commande tac (cat à l'envers) qui écris sur le terminal le fichier de la fin au début ou utiliser un « pager ».
Un pager est un logiciel qui va vous permettre d'avoir un affichage paginé dans le quel il seras plus facile de naviguer pour monter ou descendre dans le fichier. Les 2 pagers les plus connus et installé par défaut sur Debian sont more et less. less est plus récent et offre plus de fonctionnalité. Ils s'utilisent comme cat.
Les commandes tail et head permettent d'afficher respectivement la fin et le début des fichiers.
Trouver un fichier
Les deux commandes les plus courantes pour trouver un fichier sont locate et find.
locate est très rapide il recherche à partir d'un fichier d'index. Ce qui signifie qu'il ne voit pas immédiatement les nouveaux fichiers, il faut attendre un peu ou lancer la commande updatedb pour mettre à jour cet index. locate s'utilise ainsi :
$ locate machin
et il écrira sur le terminal l'ensemble des chemins de fichiers dont le nom contient « machin » où qu'ils soient sur le disque dur.
find effectue une recherche dans un dossier spécifié. Il s'utilise principalement ainsi :
$ find [dossier] [-name nom]
(ce qui es entre [] est optionnel)
Il va rechercher dans le dossier dossier les fichiers de nom nom. Il est possible d'appliquer une grande variété de condition pour n'fficher que les dossier ou les fichiers d'un certain âge par exemple.
La commande slocate est la version sécurisée de locate : elle permet de ne pas afficher des fichiers qu'un utilisateur normal n'a pas à voir. Elle permet également une recherche plus rapide qu'avec find.
$ slocate couic
Si vous installez le paquet suidmanager, vous pourrez employer la commande suidregister pour afficher en option les fichiers auxquels vous n'avez normalement pas accès, à condition de fournir le mot de passe.
Supprimer un fichier
Pour supprimer un fichier, on utilise la commande rm (il est possible de donner plusieurs fichiers) :
$ rm fich
Supprime fich sans demander de confirmation, même si le fichier est protégé en écriture.
$ rm -f fich
Permet de demander à l'utilisateur une confirmation avant de supprimer le ou les fichiers en question.
$ rm -i
Il existe des techniques permettant de retrouver un fichier supprimer. Si l'on souhaite que le fichier ne soit plus retrouvable, il existe la commande shred qui va écraser le fichier le nombre de fois que vous souhaitez et utiliser d'autres techniques pour empêcher quiconque de retrouver vos fichiers (voir aussi : effacer (et accessoirement tester) un disque dur).
Gérer les répertoires
Par défaut vous arrivez à l'ouverture du terminal dans votre dossier personnel (par défaut /home/<login>). Pour savoir dans quel dossier vous êtes, utilisez la commande pwd :
$ pwd /home/monlogin
Pour changer de répertoire
Il faut utiliser la commande cd suivi du chemin vers le répertoire où vous souhaitez aller.
$ cd /mon/dossier
Si on omet le dossier, on arrive dans le dossier personnel de l'utilisateur.
Pour lister le contenu d'un répertoire
Ik faut utiliser la commande ls pour lister le contenu des répertoires. Il est suivi du (ou des) dossier que l'on veut regarder, si on ne met pas de dossier ce sera le dossier courant.
$ ls /dossier
Créer/supprimer un dossier
Pour créer un dossier on utilise la commande mkdir suivi du (ou des) dossier que l'on veut créer :
$ mkdir /dossier
L'option -p permet de créer tous les dossiers parents qui n'existent pas encore.
Pour supprimer un dossier, on utilise la commande rmdir !
$ rmdir /dossier
Cette commande ne peut supprimer qu'un dossier vide, pour supprimer un dossier et tout son contenu on utilise la commande rm avec l'option -r :
$ rm -r /dossier
Copier, renommer et déplacer un fichier
La commande cp permet de copier un (ou plusieurs fichiers). On lui passe en paramètre la liste des fichiers que l'on veut copier suivi du dossier de destination. S'il n'y a qu'un seul fichier la destination peut être un autre fichier :
$ cp fic1 fic2 fic3 dossier/ $ cp fic_orig fic_dest
La commande mv sert à la fois à déplacer et à renommer un fichier. Renommer un fichier consiste à déplacer le fichier à l'endroi où il est déjà avec un nom différent. Comme pour cp lorsque l'on déplace plusieurs fichier le dernier paramètre doit être un dossier :
$ mv fic1 fic2 fic3 dossier/ $ mv fic_orig fic_dest
Quelques commandes autres
La commande dd
Copier dans un fichier le contenu exact d'un support donné (disquette, table de partition...), sans tenir compte de la structure ou du format. Commande dangereuse : vous risquez, en cas d'erreur, de faire totalement et irrémédiablement disparaître les partitions de votre disque dur.
S'utilise avec les droits "root"
Exemple Pour sauvegarder le MBR du disque hda dans le fichier mbr.sav :
# dd if=/dev/hda of=mbr.sav bs=512 count=1 1+0 enregistrements lus 1+0 enregistrements écrits 512 octets (512 B) copiés, 9,3797e-05 s, 5,5 MB/s
Plus d'informations sur la commande dd...
La commande diff
Comparer deux fichiers et indique les différences. Les lignes provenant de fich1 sont préfixées par > et celles provenant de fich2 par <. Des lignes de contexte indiquent les blocs de lignes qui ont été modifiés (c), ajoutés (a) ou détruits (d), le principe étant d'indiquer les modifications à effectuer pour convertir fich1 en fich2.
$ diff fichier1 fichier2
La commande file
Il peut arriver qu'un fichier ait une extension défectueuse ou qu'il n'en ait pas. File permet de retrouver le type de fichier. Il suffit d'indiquer après file le ou les noms des fichiers à analyser. Exemple : # file /bin/bash /etc/passwd
$ file fichier
La command ln
Créer un lien (un alias ou un raccourci) vers un programme ou un fichier.
Un lien symbolique : ln -s <chemin_complet/fichier ou répertoire de destination> <chemin_complet/nom du lien symbolique>
La commande ln utilisée sans -s créé un exemplaire supplémentaire du fichier ( à développer)
Quelques "trucs"
Gestion des caractères spéciaux
Dans un shell (quelqu'il soit), certains caractères sont dis spéciaux. En effet ils sont interprétés par le shell avant que la commande soit lancée. Les principaux son « », «&», «|», «$», «"», «'», «\»... (la liste n'est pas exaustive).
Si un fichier (ou un dossier) contien l'un des ses caractères dans son nom, cela peut gêner l'utilisation du shell. Pour pallier ce problème il existe 3 solutions :
- la première consiste à faire précédé cahque caractère particulier par un «\» y compris si c'est déjà un «\» (ce qui donne «\\»)
- la deuxième consiste à entourer le fichier par des «"» (dans ce cas si le fichier contient de «"» dans son nom, il faut les protéger avec des «\»). Cette méthode permet de protéger tout les caractères sauf «$», «{» et «}».
- la dernière méthode consiste à entourer le nom de fichier par des «'» (dans le cas où il y a déjà des «'», il faut les protéger avec un «\»
Fichier commençant par un tiret
Il arrive que l'on fasse une fausse manipulation dans les commandes shell et que l'on se retrouve avec un fichier ayant un nom débutant par un tiret. Taper :
$ rm -fichier.txt
ne marchera pas, rm croyant qu'on est en train de lui passer une option puisque telle est la signification du premier tiret.
Il faut donc utiliser l'option de fin de commande symbolisée par deux tirets consécutifs --. Pour notre exemple, on tapera :
$ rm -- -fichier.txt
Note : -- est utilisable pour toutes les commandes shell. problème de nom : renommer un fichier commençant par un tiret
Supprimer les ^M d'un fichier texte de Windows.
Il peut arriver que vous ayez les caractères ^M affichés en fin de ligne d'un fichier texte écrit sous Windows. Pour les enlever, tapez :
$ tr -d 'r' < fichier_windows.txt > fichier_windows_converti.txt
Message Too many open files
Trop de fichiers ouverts. Ceci est dû à une valeur trop petite affectée à file-max (8096 par défaut). Pour corriger ce problème, tapez :
$ echo "65536" >/proc/sys/fs/file-max
Quelques exemples de commandes
Renommer plusieurs fichiers simultanément.
Exemple : pour renommer les fichiers *.mpeg en *.mpg, tapez la ligne entière suivante :
$ for i in *.mpeg; do mv "$i" "${i%.mpeg}.mpg"; done
Afficher les lignes d'un fichier sans les lignes commentées.
Les lignes commentées sont celles qui commencent par # dans les fichiers. Pour afficher à l'écran le contenu du fichier sans ces lignes, tapez :
$ sed -e "/^#/d" fichier
Explication de la commande :
sed (Stream Editor) permet de travailler sur les flux. ^ signifie tout ce qui commence par (dans notre cas, ce qui commence par #). d permet de supprimer les lignes qui correspondent à l'expression indiquée entre les barres obliques (/^#/ dans notre exemple).
Épurer un fichier de ses lignes commentées
La commande ci-dessous écrira un nouveau fichier (fichier_sans_commentaires) à partir de "fichier" en enlevant les lignes commentées (commençant par #) :
grep -v "^#" fichier | grep -v "^$" > fichier_sans_commentaires