<Précédent | Table des matières | Suivant>
rm : supprimer le répertoire « archive » ? y
Nous verrons comment faire de cette option la valeur par défaut au chapitre 7, qui traite de la personnalisation de votre environnement shell.
3.3.3. Recherche de fichiers
3.3.3.1. Utilisation des fonctionnalités du shell
Dans l'exemple sur le déplacement de fichiers, nous avons déjà vu comment le shell peut manipuler plusieurs fichiers à la fois. Dans cet exemple, le shell découvre automatiquement ce que l'utilisateur entend par les exigences entre les accolades "[" et "]". Le shell peut substituer des plages de nombres et des caractères majuscules ou minuscules. Il remplace également autant de caractères que vous le souhaitez par un astérisque et un seul caractère par un point d'interrogation.
Toutes sortes de substitutions peuvent être utilisées simultanément ; le shell est très logique à ce sujet. Le shell Bash, par exemple, n'a aucun problème avec des expressions comme ls nom_rép/*/*/*[2-3].
Dans d'autres shells, l'astérisque est couramment utilisé pour minimiser les efforts de saisie : les gens entreraient cd rép* au lieu de cd annuaire. Cependant, dans Bash, ce n'est pas nécessaire car le shell GNU a une fonctionnalité appelée complétion de nom de fichier. Cela signifie que vous pouvez taper les premiers caractères d'une commande (n'importe où) ou d'un fichier (dans le répertoire courant) et si aucune confusion n'est possible, le shell saura ce que vous voulez dire. Par exemple
dans un répertoire contenant de nombreux fichiers, vous pouvez vérifier s'il y a des fichiers commençant par la lettre A juste en tapant ls A et en appuyant sur Languette touche deux fois, plutôt que d'appuyer Entrer. S'il n'y a qu'un seul fichier commençant par "A", ce fichier sera affiché comme argument de ls (ou n'importe quelle commande shell, d'ailleurs) immédiatement.
3.3.3.2. Lequel
Une façon très simple de rechercher des fichiers consiste à utiliser le qui commande, pour rechercher dans les répertoires répertoriés dans le chemin de recherche de l'utilisateur le fichier requis. Bien sûr, étant donné que le chemin de recherche ne contient que des chemins vers des répertoires contenant des programmes exécutables, qui ne fonctionne pas pour les fichiers ordinaires. Les qui La commande est utile lors du dépannage des problèmes "Commande introuvable". Dans l'exemple ci-dessous, l'utilisateur tina ne peut pas utiliser le acrolire programme, alors que sa collègue n'a aucun problème avec le même système. Le problème est similaire au PATH problème dans la partie précédente : le collègue de Tina lui dit qu'il peut voir le programme demandé dans
/opt/acroread/bin, mais ce répertoire n'est pas dans son chemin :
tina :~> qui acrolire
/usr/bin/which : pas d'acroread dans (/bin:/usr/bin:/usr/bin/X11)
tina :~> qui acrolire
/usr/bin/which : pas d'acroread dans (/bin:/usr/bin:/usr/bin/X11)
Le problème peut être résolu en donnant le chemin complet de la commande à exécuter, ou en réexportant le contenu du
Variable CHEMIN :
tina :~> export CHEMIN=$CHEMIN:/opt/acroread/bin
tina :~> echo $CHEMIN
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
tina :~> export CHEMIN=$CHEMIN:/opt/acroread/bin
tina :~> echo $CHEMIN
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
Le qui La commande vérifie également si une commande est un alias pour une autre commande :
gerrit :~> qui -a ls
ls est un alias de `ls -F --color=auto' ls est /bin/ls
gerrit :~> qui -a ls
ls est un alias de `ls -F --color=auto' ls est /bin/ls
Si cela ne fonctionne pas sur votre système, utilisez le alias commander:
tille@www:~/mail$ alias ls
alias ls='ls --color'
tille@www:~/mail$ alias ls
alias ls='ls --color'
3.3.3.3. Trouver et localiser
Ce sont les vrais outils, utilisés lors de la recherche d'autres chemins en plus de ceux répertoriés dans le chemin de recherche. Les trouver L'outil, connu sous UNIX, est très puissant, ce qui peut être à l'origine d'une syntaxe un peu plus difficile. GNOU trouver, cependant, traite des problèmes de syntaxe. Cette commande vous permet non seulement de rechercher des noms de fichiers, elle peut également accepter la taille du fichier, la date de la dernière modification et d'autres propriétés de fichier comme critères de recherche. L'utilisation la plus courante est de rechercher des noms de fichiers :
trouver -Nom
Cela peut être interprété comme « rechercher dans tous les fichiers et sous-répertoires contenus dans un chemin donné, et imprimer les noms des fichiers contenant la chaîne de recherche dans leur nom » (pas dans leur contenu).
Une autre application de trouver est pour rechercher des fichiers d'une certaine taille, comme dans l'exemple ci-dessous, où l'utilisateur Peter
veut trouver tous les fichiers du répertoire courant ou de l'un de ses sous-répertoires, dont la taille est supérieure à 5 Mo :
Pierre :~> trouve . -taille + 5000k
psychotique_chaos.mp3
Pierre :~> trouve . -taille + 5000k
psychotique_chaos.mp3
Si vous creusez dans les pages de manuel, vous verrez que trouver peut également effectuer des opérations sur les fichiers trouvés. Un exemple courant est la suppression de fichiers. Il est préférable de tester d'abord sans le Exec- option que les bons fichiers sont sélectionnés, après quoi la commande peut être réexécutée pour supprimer les fichiers sélectionnés. Ci-dessous, nous recherchons les fichiers se terminant par .tmp:
Pierre :~> trouve . -name "*.tmp" -exec rm {} \;
Pierre :~>
Pierre :~> trouve . -name "*.tmp" -exec rm {} \;
Pierre :~>
Optimiser!
Cette commande fera appel à rm autant de fois qu'un fichier répondant aux exigences est trouvé. Dans le pire des cas, cela peut être des milliers ou des millions de fois. C'est tout à fait une charge sur votre système.
Une façon plus réaliste de travailler serait l'utilisation d'un tuyau (|) et le xarg outil avec rm comme argument. De cette façon, le rm La commande n'est appelée que lorsque la ligne de commande est pleine, au lieu de pour chaque fichier. Voir le chapitre 5 pour en savoir plus sur l'utilisation de la redirection d'E/S pour faciliter les tâches quotidiennes.
Plus tard (en 1999 selon les pages de manuel, après 20 ans de trouver), localiser était développé. Ce programme est plus facile à utiliser, mais plus restreint que trouver, car sa sortie est basée sur une base de données d'index de fichiers qui n'est mise à jour qu'une fois par jour. D'autre part, une recherche dans le localiser la base de données utilise moins de ressources que trouver et montre donc les résultats presque instantanément.
La plupart des distributions Linux utilisent slocer ces jours-ci, la sécurité renforcée localiser, la version moderne de localiser qui empêche les utilisateurs d'obtenir une sortie qu'ils n'ont pas le droit de lire. Les fichiers dans racineLe répertoire personnel de est un exemple, ceux-ci ne sont normalement pas accessibles au public. Un utilisateur qui veut trouver quelqu'un qui connaît le shell C peut émettre la commande localiser .cshrc, pour afficher tous les utilisateurs qui ont un fichier de configuration personnalisé pour le shell C. En supposant que les utilisateurs racine et jenny exécutent le shell C, alors seul le fichier
/home/jenny/.cshrc sera affiché, et non celui de racinele répertoire personnel de . Sur la plupart des systèmes,
locate est un lien symbolique vers le programme slocate :
Billy :~> ls -l /usr/bin/localiser
lrwxrwxrwx 1 racine slocate 7 oct 28 14:18 /usr/bin/locate -> slocate*
Billy :~> ls -l /usr/bin/localiser
lrwxrwxrwx 1 racine slocate 7 oct 28 14:18 /usr/bin/locate -> slocate*
Utilisateur tina aurait pu utiliser localiser pour trouver l'application qu'elle voulait :
tina :~> localiser acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
tina :~> localiser acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
Répertoires qui ne contiennent pas le nom coffre ne peuvent pas contenir le programme - ils ne contiennent pas de fichiers exécutables. Il reste trois possibilités. Le fichier dans / usr / local / bin est celui tina aurait voulu : c'est un lien vers le script shell qui démarre le programme réel :
tina :~> fichier /usr/local/bin/acroread
/usr/local/bin/acroread : lien symbolique vers ../Acrobat4/bin/acroread
tina :~> fichier /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread : exécutable du texte du script shell Bourne
tina :~> fichier /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread : exécutable ELF 32 bits LSB, Intel 80386, version 1, lié dynamiquement (utilise
tina :~> fichier /usr/local/bin/acroread
/usr/local/bin/acroread : lien symbolique vers ../Acrobat4/bin/acroread
tina :~> fichier /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread : exécutable du texte du script shell Bourne
tina :~> fichier /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread : exécutable ELF 32 bits LSB, Intel 80386, version 1, lié dynamiquement (utilise
a partagé la publication de bibliothèques), pas dépouillé Afin de garder le chemin aussi court que possible, afin que le système n'ait pas à chercher trop longtemps chaque fois qu'un utilisateur veut exécuter une commande, nous ajoutons / usr / local / bin au chemin et non aux autres répertoires, qui
ne contiennent que les fichiers binaires d'un programme spécifique, tandis que / usr / local / bin contient d'autres utiles
programmes aussi.
Encore une fois, une description des caractéristiques complètes de trouver et localiser peuvent être trouvés dans les pages d'informations.
3.3.3.4. La commande grep
3.3.3.4.1. Filtrage de ligne général
Un programme simple mais puissant, grep est utilisé pour filtrer les lignes d'entrée et renvoyer certains motifs à la sortie. Il y a littéralement des milliers d'applications pour le grep programme. Dans l'exemple ci-dessous, jerry Usages grep pour voir comment il a fait la chose avec trouver:
jerry :~> grep -a trouver .bash_history
trouve . -name userinfo man find
trouver ../ -nom commun.cfg
jerry :~> grep -a trouver .bash_history
trouve . -name userinfo man find
trouver ../ -nom commun.cfg
Historique des recherches
La fonction de recherche dans bash, activé en appuyant sur Ctrl+R à la fois, comme dans l'exemple où nous voulons vérifier comment nous avons fait cela en dernier trouver encore:
Thomas ~> ^R
(reverse-i-search)`find': find `/home/thomas` -name *.xml
Thomas ~> ^R
(reverse-i-search)`find': find `/home/thomas` -name *.xml
Tapez votre chaîne de recherche à l'invite de recherche. Plus vous tapez de caractères, plus la recherche est restreinte. Ceci lit l'historique des commandes pour cette session shell (qui est écrit dans
.bash_history dans votre répertoire personnel lorsque vous quittez cette session). L'occurrence la plus récente de votre chaîne de recherche est affichée. Si vous voulez voir les commandes précédentes contenant la même chaîne, tapez Ctrl+R nouveau.
Voir les pages d'informations sur bash pour plus d'information.
Tous les UNIX avec juste un peu de décence ont un dictionnaire en ligne. Linux aussi. Le dictionnaire est une liste de mots connus dans un fichier nommé gentils, situé dans /usr/share/dict. Pour vérifier rapidement la bonne orthographe d'un mot, aucune application graphique n'est nécessaire :
Guillaume :~> grep pinguin /usr/partage/dict/mots
Guillaume :~> grep pingouin /usr/share/dict/words
pingouin pingouins
Guillaume :~> grep pinguin /usr/partage/dict/mots
Guillaume :~> grep pingouin /usr/share/dict/words
pingouin pingouins
Dictionnaire vs liste de mots
Certaines distributions offrent la dicter commande, qui offre plus de fonctionnalités que la simple recherche de mots dans une liste.
Qui est le propriétaire de ce répertoire personnel à côté du mien ? Hé, voilà son numéro de téléphone !
Lisa :~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne, tél 203234:/home/gdbruyne:/bin/bash
Lisa :~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne, tél 203234:/home/gdbruyne:/bin/bash
Et quelle était déjà l'adresse e-mail d'Arno ?
serge:~/mail> grep -i arno *
courrier envoyé : À :[email protected]>
courrier envoyé : le lundi 24 décembre 2001, [email protected] a écrit:
serge:~/mail> grep -i arno *
courrier envoyé : À :[email protected]>
courrier envoyé : le lundi 24 décembre 2001, [email protected] a écrit:
find et locate sont souvent utilisés en combinaison avec grep pour définir des requêtes sérieuses. Pour plus d'informations, reportez-vous au chapitre 5 sur la redirection d'E/S.
3.3.3.4.2. Caractères spéciaux
Les caractères qui ont une signification particulière pour le shell doivent être échappé. Le caractère d'échappement dans Bash est une barre oblique inverse, comme dans la plupart des shells ; cela enlève la signification particulière du caractère suivant. Le shell connaît pas mal de caractères spéciaux, parmi les plus courants /, ., ? et *. Une liste complète peut être trouvée dans les pages d'informations et la documentation de votre shell.
Par exemple, disons que vous voulez afficher le fichier "*" au lieu de tous les fichiers d'un répertoire, vous devrez utiliser