« Gestion des fichiers » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
m (Ajout table des matières)
 
(27 versions intermédiaires par 6 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{sid}}  
__TOC__
{{Ébauche|La gestion des fichiers}}


----
----
<categorytree mode=pages style="float:right; clear:right; margin-left:1ex; border:1px solid gray; padding:0.7ex; background-color:white;">Commandes</categorytree>


{{Ébauche|La gestion des fichiers}}
L'objectif est de vous présenter quelques commandes de base 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 importante car elle vous explique comment fonctionnent les autres commandes. C'est le manuel.


----
Par exemple pour connaître la liste des possibilités de la commande ''ls'' utilisez la commande :
<categorytree mode=pages style="float:right; clear:right; margin-left:1ex; border:1px solid gray; padding:0.7ex; background-color:white;">Commandes</categorytree>
$ man ls


= Gestion des fichiers  =
= Gestion des fichiers  =


== Quelques commandes  ==
== 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 ce 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 lequel il sera plus facile de naviguer pour monter ou descendre dans le fichier. Les 2 pagers les plus connus et installés par défaut sur Debian sont ''more'' et ''less''. ''less'' est plus récent et offre plus de fonctionnalités. 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" (système).
 
''find'' effectue une recherche dans un répertoire spécifié. Il s'utilise principalement ainsi :
$ find [répertoire] [-name nom]
 
(ce qui est entre [] est optionnel)
 
Il va rechercher dans le répertoire ''répertoire'' les fichiers de nom ''nom''. Il est possible d'appliquer une grande variété de condition pour n'afficher que les répertoires ou les fichiers d'un certain âge par exemple.
 
La commande ''slocate'' est la version sécurisée de ''locate''&nbsp;: 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 supprimé. Si l'on souhaite que le fichier soit réellement introuvable, 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 : [[remettre à zéro un disque dur|effacer (et accessoirement tester) un disque dur]]).
 
== Gérer les répertoires ==


=== La commande '''cat'''  ===
Par défaut vous arrivez à l'ouverture du terminal dans votre répertoire personnel (par défaut ''/home/<login>'').
Pour savoir dans quel répertoire vous êtes, utilisez la commande ''pwd'' :
$ pwd
  /home/monlogin


Afficher le contenu du fichier ''fichier'' dans la console.
=== Pour changer de répertoire ===
$ cat fichier


Afficher et copier le contenu de ''fichier'' dans ''fichier2''.  
Il faut utiliser la commande ''cd'' suivie du chemin vers le répertoire où vous souhaitez aller.
  $ cat file &gt; file2
  $ cd /mon/répertoire


Afficher le contenu d'un fichier et numérote les lignes.  
Si on omet le répertoire, on arrive dans le répertoire personnel de l'utilisateur.
$ cat -n fichier


=== La commande '''chgrp'''  ===
=== Pour lister le contenu d'un répertoire ===


Changer le groupe auquel appartient un fichier :
Ik faut utiliser la commande ''ls'' pour lister le contenu des répertoires. Il est suivi du (ou des) répertoire que l'on veut regarder, si on ne met pas de répertoire ce sera le répertoire courant.
  $ chgrp groupe fichier
  $ ls /répertoire


Affecter un fichier à un groupe. Le changement de groupe peut être réalisé par n'importe quel utilisateur... '''mais''' on ne peut donner un fichier qu'à l'un des groupes dont on est membre.<br>L'administrateur évidemment peut affecter un fichier à n'importe quel groupe d'utilisateur.<br>Exemple&nbsp;:''<nowiki>$ chgrp -R toto /home/titi/rep</nowiki>'' Le répertoire ''/home/titi/rep/'' et son contenu appartiendront désormais au groupe ''toto''.
=== Créer/supprimer un répertoire ===


=== La commande '''cp'''  ===
Pour créer un répertoire on utilise la commande ''mkdir'' suivi du (ou des) répertoire que l'on veut créer :
  $ mkdir /répertoire


Copier un/des fichier(s). Exemple&nbsp;:
L'option ''-p'' permet de créer tous les répertoires parents qui n'existent pas encore.
$ cp fichier /home/toto/vrac


Copier ''fichier_source'' dans ''répertoire_cible''.
Pour supprimer un répertoire, on utilise la commande ''rmdir'' !
  $ cp fichier_source /repertoire_cible/  
  $ rmdir /répertoire


Copier ''repertoire_source'' dans ''repertoire_cible'' sans demander de confirmation.
Cette commande ne peut supprimer qu'un répertoire vide, pour supprimer un répertoire et tout son contenu on utilise la commande ''rm'' avec l'option ''-r'' :
  $ cp -Rf repertoire_source /repertoire_cible
  $ rm -r /répertoire


Attention&nbsp;: Copier un fichier vers un fichier de même nom l'écrasera.<br>Pour copier plusieurs fichiers à la fois, pensez à utiliser les caractères génériques&nbsp;? et *.
== Copier, renommer et déplacer un fichier ==


Copier sans écrasement du fichier destination (Le fichier écrasé est sauvegardé, seul le nom du fichier d'origine est modifié (ajout d'un tilde ''~'' à la fin du nom du 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 -b
  $ cp fic1 fic2 fic3 dossier/
$ cp fic_orig fic_dest


Prévient celui qui lance la commande de l'existence d'un fichier du même nom et lui demande s'il peut ou non remplacer son contenu. Permet de ne pas écraser par inadvertance des fichiers importants :
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 :
  $ cp -i
  $ mv fic1 fic2 fic3 dossier/
$ mv fic_orig fic_dest


Afficher le nom des fichiers copiés (-v = verbose ou "verbeux"). Pratique si vous copiez plusieurs fichiers à l'aide des caractères génériques * et/ou&nbsp;? et que vous souhaitez voir le bon déroulement de la multicopie.
== Quelques commandes autres ==
$ cp -v


=== La commande '''dd'''  ===
=== La commande '''dd'''  ===
Ligne 75 : Ligne 124 :
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&nbsp;: <nowiki># file /bin/bash /etc/passwd</nowiki>  
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&nbsp;: <nowiki># file /bin/bash /etc/passwd</nowiki>  
  $ file fichier
  $ file fichier
=== La commande '''find'''  ===
Rechercher de ''fichier''. Ex&nbsp;:''<nowiki># find /home/toto/bazard -name *.jpeg</nowiki>'' donne la liste des fichiers .jpeg contenu dans le répertoire''/home/toto/bazard''. Vous pouvez utiliser un caractère générique pour remplacer les lettres, il faut le faire précéder d'une barre oblique inverse&nbsp;:<nowiki># find / -name image\*</nowiki>
$ find -name fichier
Afficher le résultat de la recherche, avec les chemins relatifs.
$ find -name fichier -print
Indiquer le type de fichier à rechercher. Remplacez ''x'' par ''f'' pour les fichiers, ''d'' pour les répertoires et ''l'' pour les liens symboliques.
$ find -type x -name fichier
=== La commande '''less'''  ===
Visualiser ''fichier'' page par page. Utilisez les touches directionnelles haut et bas pour faire défiler le texte, ''q'' pour quitter.
$ less fichier


=== La command '''ln''' ===
=== La command '''ln''' ===
Ligne 100 : Ligne 133 :


La commande ln utilisée sans -s créé un exemplaire supplémentaire du fichier ( à développer)
La commande ln utilisée sans -s créé un exemplaire supplémentaire du fichier ( à développer)
=== La commande '''locate'''  ===
Localiser un fichier. ''Locate'' est un lien symbolique de la commande ''slocate''. Exemple&nbsp;: ''<nowiki># locate titi</nowiki>'' affiche la liste des fichiers dont le nom contient le mot ''titi''.''Locate'' affiche tous les noms de fichiers correspondant au critère indiqué. Pour n'afficher que les fichiers autorisés, utilisez ''slocate''.''Locate'' se base sur une base de données de tous les noms de fichiers, mise à jour quotidiennement. Des fichiers récemment créés ne seront donc pas forcément référencés. Pour forcer une mise à jour manuelle, tapez&nbsp;:<nowiki># updatedb</nowiki>ou<nowiki># slocate -u</nowiki>
$ locate x
=== La commande '''ls'''  ===
Lister les fichiers et les sous-répertoires de ''/rep''.
$ ls /rep
Lister tous les fichiers du répertoire indiqué, fichiers cachés (dont le nom commence par un point) compris. Si vous n'indiquez pas de répertoire, c'est le contenu du répertoire courant qui est listé.
$ ls -a /rep
Afficher tous les sous-répertoires de ''/rep''.
$ ls -d /rep
Affichage long&nbsp;: droits, nom et groupe du propriétaire, taille, date de dernière modification.Si vous tapez le nom d'un lien, vous connaîtrez son fichier ou répertoire cible.
$ ls -l
Affiche tout le contenu du répertoire de façon détaillée.
$ ls -la
Liste le contenu d'un répertoire en donnant pour chaque fichier/répertoire plus de détails qu'un simple ''ls''.
$ ls -lh /rep
Liste les fichiers par type. 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.
$ ls -F
Liste les fichiers en les séparant par une virgule au lieu de les présenter en colonnes.
$ ls -m
En complément de ''-l'', affiche le nom et le groupe des propriétaires en fonction de leur UID et de leur GID.
$ ls -n
Liste les fichiers en ordre alphabétique inverse.
$ ls -r
Liste les fichiers triés par ordre de taille décroissante.
$ ls -S
Liste le contenu de ''/rep'' en triant par date de modification, du plus récent au plus ancien.
$ ls -t /rep
Liste les fichiers par type d'extension.
$ ls -X
=== La commande '''mknod'''  ===
Pour créer des fichiers de caractères majuscules ou spéciaux.
$ mknod
=== La commande '''more'''  ===
Permet de visualiser le contenu de ''fich'' page par page. Utilisez ''Enter'' pour le faire défiler, ''q'' pour quitter.La commande ''<nowiki># cat fich  more</nowiki>'' donne le même résultat.
$ more fich
=== La commande '''mv'''  ===
Pour déplacer ou renommer un fichier. Exemple&nbsp;:''<nowiki># mv toto /clown/titi</nowiki>'' déplacera le fichier ''toto'' dans le répertoire ''clown'' (qui doit exister) et le renommera''titi''.
$ mv source destination
Effectue une sauvegarde du fichier avant de le déplacer.
$ mv -b
Effectue le déplacement même si la cible existe déjà, et ce sans message d'avertissement.
$ mv -f
Demande une confirmation si des fichiers risquent d'être écrasés par le déplacement.
$ mv -i
=== La commande '''rm'''  ===
Supprime ''fich''. Une fois un fichier effacé, il n'est plus possible de récupérer son contenu.Il est possible de spécifier plusieurs fichiers à la commande ''rm''&nbsp;: dans ce cas, ils seront tous supprimés.Pour supprimer un fichier dont le nom commence par un tiret -, tapez&nbsp;:<nowiki># rm -- -lenomdufichier</nowiki>ou<nowiki># rm ./-lenomdufichier</nowiki>
$ 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
=== La commande '''shred''' ===
Extrait du man : Réécrire sur les FICHIERs indiqués, de façon répétée, afin de rendre difficile toute récupération des données, même à l'aide de matériel coûteux.
Cette commande est très pratique pour rendre illisible des fichiers que vous jugez "sensibles" !
Elle fait partie du paque "coreutils"
$ cat mon_fichier_top_secret
Top secret - Personne ne doir avoir accès à ce fichier !
$ shred -fvz -n 10 mon_fichier_top_secret
shred: mon_fichier_top_secret : passe 1/11 (random)...
shred: mon_fichier_top_secret : passe 2/11 (ffffff)...
shred: mon_fichier_top_secret : passe 3/11 (999999)...
shred: mon_fichier_top_secret : passe 4/11 (222222)...
shred: mon_fichier_top_secret : passe 5/11 (000000)...
shred: mon_fichier_top_secret : passe 6/11 (random)...
shred: mon_fichier_top_secret : passe 7/11 (aaaaaa)...
shred: mon_fichier_top_secret : passe 8/11 (111111)...
shred: mon_fichier_top_secret : passe 9/11 (555555)...
shred: mon_fichier_top_secret : passe 10/11 (random)...
shred: mon_fichier_top_secret : passe 11/11 (000000)...
$ cat mon_fichier_top_secret
$
Voyez le man pour l'explication des option utilisées
Et comme tout est fichier, vous pouvez utiliser cette commande pour [[remettre à zéro un disque dur|effacer (et accessoirement tester) un disque dur]]
=== La commande '''slocate'''  ===
Pour afficher la liste des fichiers dont le nom contient le mot ''couic''. La commande ''slocate'' est la version sécurisée de ''locate''&nbsp;: 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.
=== La commande '''tac'''  ===
Pour afficher le contenu de ''fich'' à l'écran en commençant par le bas.
$ tac fich
=== La commande '''tail'''  ===
Pour afficher les 10 dernières lignes de ''fich''.
$ tail fich
Pour afficher les 2 dernières lignes de ''fich''.
$ tail -2 fich
=== La commande '''touch'''  ===
Sert normalement à modifier la date de création et de modification du fichier, mais permet aussi de créer le fichier ''fich''.
$ touch fich


== Quelques "trucs"  ==
== Quelques "trucs"  ==


=== Gestion des caractères spéciaux ===
=== 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).
Dans un shell (quel qu'il soit), certains caractères sont dits spéciaux. En effet ils sont interprétés par le shell avant que la commande soit lancée. Les principaux sont « », «&», «|», «$», «"», «'», «\»... (la liste n'est pas exhaustive).
 
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 «\»
 
[http://forum.debian-fr.org/viewtopic.php?p=252027#p252027 supprimer fichier avec '&amp;']


=== Epurer un fichier de ses lignes commentées ===
Si un fichier (ou un répertoire) contient l'un des ces 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éder chaque 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 des «"» dans son nom, il faut les protéger avec des «\»). Cette méthode permet de protéger tous 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 «\»).


La commande ci-dessous écrira un nouveau fichier (fichier_sans_commentaires) à partir de "fichier" en enlevant les lignes commentées (commençant par #) :
[http://forum.debian-fr.org/viewtopic.php?p=252027#p252027 supprimer fichier avec '&amp;']
 
grep -v "^#" fichier | grep -v "^$" > fichier_sans_commentaires
 
[http://forum.debian-fr.org/viewtopic.php?p=269266#p269266 Epurer un fichiers des lignes commençant par #]


=== Fichier commençant par un tiret  ===
=== Fichier commençant par un tiret  ===
Ligne 258 : Ligne 150 :
  $ rm -fichier.txt
  $ 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.<br>Il faut donc utiliser l'option de fin de commande symbolisée par deux tirest consécutifs --. Pour notre exemple, on tapera&nbsp;:  
ne marchera pas, ''rm'' croyant qu'on est en train de lui passer une option puisque telle est la signification du premier tiret.<br>Il faut donc utiliser l'option de fin de commande symbolisée par deux tirets consécutifs ''--''. Pour notre exemple, on tapera&nbsp;:  
  $ rm -- -fichier.txt
  $ rm -- -fichier.txt


Note&nbsp;: -- est utilisable pour toutes les commandes shell.  
Note&nbsp;: -- est utilisable pour toutes les commandes shell.  
[http://forum.debian-fr.org/viewtopic.php?f=8&t=4679&start=0  probleme de nom: renommer un fichier commencant par un tiret]  
[http://forum.debian-fr.org/viewtopic.php?f=8&t=4679&start=0  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&nbsp;:
$ tr -d 'r' &lt; fichier_windows.txt &gt; 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&nbsp;:
$ echo "65536" &gt;/proc/sys/fs/file-max
 
== Quelques exemples de commandes ==


=== Renommer plusieurs fichiers simultanément.  ===
=== Renommer plusieurs fichiers simultanément.  ===
Ligne 269 : Ligne 173 :
  $ for i in *.mpeg; do mv "$i" "${i%.mpeg}.mpg"; done
  $ for i in *.mpeg; do mv "$i" "${i%.mpeg}.mpg"; done


=== Afficher les lignes d'un fichier sans les lignes commentées.  ===
=== Afficher les lignes d'un fichier texte 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&nbsp;:  
Dans la plupart des fichiers de configuration, pour qu'une ligne de texte ne soit pas prise en compte (commentées),
  $ sed -e "/^#/d" fichier
le premier caractère de cette ligne doit être un caractère '''#'''
 
Pour faire afficher à l'écran le contenu du fichier sans les lignes commentées, tapez&nbsp;:  
  $ sed "/^#/d" fichier


Explication de la commande&nbsp;:  
Explication de la commande&nbsp;:  
{| class="wikitable"
|style="text-align: center;"|sed
|('''S'''tream '''Ed'''itor) permet de travailler sur les flux texte.
|-
|style="text-align: center;"|^
|signifie toute les lignes qui commencent par (dans notre cas, ce qui commence par #).
|-
|style="text-align: center;"|-d
|permet de supprimer les lignes qui correspondent à l'expression indiquée entre les barres obliques (/^#/ dans notre exemple).
|}


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).  
=== Afficher les lignes d'un fichier texte sans les lignes commentées ni les lignes vides.  ===
 
$ sed "/^#\|^$/d" fichier
 
Explication de la commande&nbsp;:
{| class="wikitable"
|style="text-align: center;"|sed
|('''S'''tream '''Ed'''itor) permet de travailler sur les flux texte.
|-
|style="text-align: center;"|^
|signifie toute les lignes qui commencent par…
|-
|style="text-align: center;"|\
|permet d'échapper le caractère qui le suit.
|-
|style="text-align: center;"| |
|est une fonction logique '''ou''' (or).
|-
|style="text-align: center;"|$
|dans ce contexte, représente une fin de ligne.
|-
|style="text-align: center;"|-d
|permet de supprimer les lignes qui correspondent au motif.
|}
'''^$''' permet donc de spécifier une ligne qui commence par une fin de ligne <=> une ligne vide de tout caractère.


=== Supprimer les ^M d'un fichier texte de Windows.  ===
=== Épurer un fichier de ses lignes commentées et lignes vides avec grep ===


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&nbsp;:  
La commande ci-dessous écrira un nouveau fichier (fichier_sans_commentaires) à partir de "fichier" en enlevant les lignes commentées (commençant par #), et les lignes vides :
$ tr -d 'r' &lt; fichier_windows.txt &gt; fichier_windows_converti.txt


=== Message ''Too many open files'' ===
  grep -v "^#\|^$" fichier > fichier_sans_commentaires


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&nbsp;:
[http://forum.debian-fr.org/viewtopic.php?p=269266#p269266 Epurer un fichiers des lignes commençant par #]
$ echo "65536" &gt;/proc/sys/fs/file-max


[[Catégorie:Commandes de base]]
[[Catégorie:Commandes]]
[[Niveau de difficulté::Débutant]]

Dernière version du 14 octobre 2016 à 11:18

Cet article est une ébauche. N'hésitez pas à contribuer ou à en discuter.


L'objectif est de vous présenter quelques commandes de base 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 importante car elle vous explique comment fonctionnent 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 ce 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 lequel il sera plus facile de naviguer pour monter ou descendre dans le fichier. Les 2 pagers les plus connus et installés par défaut sur Debian sont more et less. less est plus récent et offre plus de fonctionnalités. 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" (système).

find effectue une recherche dans un répertoire spécifié. Il s'utilise principalement ainsi :

$ find [répertoire] [-name nom]

(ce qui est entre [] est optionnel)

Il va rechercher dans le répertoire répertoire les fichiers de nom nom. Il est possible d'appliquer une grande variété de condition pour n'afficher que les répertoires 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 supprimé. Si l'on souhaite que le fichier soit réellement introuvable, 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 répertoire personnel (par défaut /home/<login>). Pour savoir dans quel répertoire vous êtes, utilisez la commande pwd :

$ pwd
/home/monlogin

Pour changer de répertoire

Il faut utiliser la commande cd suivie du chemin vers le répertoire où vous souhaitez aller.

$ cd /mon/répertoire

Si on omet le répertoire, on arrive dans le répertoire 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) répertoire que l'on veut regarder, si on ne met pas de répertoire ce sera le répertoire courant.

$ ls /répertoire

Créer/supprimer un répertoire

Pour créer un répertoire on utilise la commande mkdir suivi du (ou des) répertoire que l'on veut créer :

$ mkdir /répertoire

L'option -p permet de créer tous les répertoires parents qui n'existent pas encore.

Pour supprimer un répertoire, on utilise la commande rmdir !

$ rmdir /répertoire

Cette commande ne peut supprimer qu'un répertoire vide, pour supprimer un répertoire et tout son contenu on utilise la commande rm avec l'option -r :

$ rm -r /répertoire

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 (quel qu'il soit), certains caractères sont dits spéciaux. En effet ils sont interprétés par le shell avant que la commande soit lancée. Les principaux sont « », «&», «|», «$», «"», «'», «\»... (la liste n'est pas exhaustive).

Si un fichier (ou un répertoire) contient l'un des ces 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éder chaque 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 des «"» dans son nom, il faut les protéger avec des «\»). Cette méthode permet de protéger tous 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 «\»).

supprimer fichier avec '&'

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 texte sans les lignes commentées.

Dans la plupart des fichiers de configuration, pour qu'une ligne de texte ne soit pas prise en compte (commentées), le premier caractère de cette ligne doit être un caractère #

Pour faire afficher à l'écran le contenu du fichier sans les lignes commentées, tapez :

$ sed "/^#/d" fichier

Explication de la commande :

sed (Stream Editor) permet de travailler sur les flux texte.
^ signifie toute les lignes qui commencent 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).

Afficher les lignes d'un fichier texte sans les lignes commentées ni les lignes vides.

$ sed "/^#\|^$/d" fichier

Explication de la commande :

sed (Stream Editor) permet de travailler sur les flux texte.
^ signifie toute les lignes qui commencent par…
\ permet d'échapper le caractère qui le suit.
| est une fonction logique ou (or).
$ dans ce contexte, représente une fin de ligne.
-d permet de supprimer les lignes qui correspondent au motif.

^$ permet donc de spécifier une ligne qui commence par une fin de ligne <=> une ligne vide de tout caractère.

Épurer un fichier de ses lignes commentées et lignes vides avec grep

La commande ci-dessous écrira un nouveau fichier (fichier_sans_commentaires) à partir de "fichier" en enlevant les lignes commentées (commençant par #), et les lignes vides :

grep -v "^#\|^$" fichier > fichier_sans_commentaires

Epurer un fichiers des lignes commençant par # Débutant