Guide avancé d'écriture des scripts Bash: | ||
---|---|---|
Précédent | Chapitre 12. Filtres externes, programmes et commandes | Suivant |
Les commandes incontournables pour le débutant
La commande élémentaire de << listage >> du contenu d'un répertoire. Il est très facile d'en sous-estimer la puissance. Par exemple, en utilisant -R, option de récursivité, ls affiche une structure de répertoire sous la forme d'une arborescence. D'autres options dignes d'intêret sont -S, qui trie selon la taille du fichier, -t, qui trie selon la date de modification des fichiers, et -i, qui affiche les inodes des fichiers (voir Exemple 12-3).
Exemple 12-1. Utilisation de ls pour créer une liste de fichiers à graver sur un CDR
#!/bin/bash # burn-cd.sh # Script d'automatisation de gravure de CD. SPEED=2 # Peut être plus élevée si votre graveur en est capable. IMAGEFILE=cdimage.iso CONTENTSFILE=contents DEFAULTDIR=/opt # C'est le repertoire contenant les fichiers à graver. # Soyez sûr qu'il existe bien. # Utilise le package "cdrecord" de Joerg Schilling. # (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html) # Si ce script est lancé par un utilisateur normal, alors il faut faire un suid sur cdrecord #+ (chmod u+s /usr/bin/cdrecord, en tant que root). if [ -z "$1" ] then IMAGE_DIRECTORY=$DEFAULTDIR # Le répertoire par défaut, si non défini par la ligne de commande. else IMAGE_DIRECTORY=$1 fi # Créer un fichier "sommaire". ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE # L'option "l" donne un "long" listing de fichier. # L'option "R" rend le listing récursif. # L'option "F" marque le type des fichiers (les répertoires se voient ajouter un / final). echo "Sommaire en cours de création." # Créer un fichier image avant de le graver sur CD. mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY echo "Image ISO9660 ($IMAGEFILE) en cours de création." # Grave le CD. cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE echo "Gravure du CD." echo "Veuillez patientez." exit 0 |
cat, un acronyme de concatenate (NdT: concaténer en français), affiche le contenu d'un fichier sur stdout. Lorsqu'il est combiné avec une redirection (> ou >>), il est couramment utilisé pour concaténer des fichiers.
cat nom_fichier cat fichier.1 fichier.2 fichier.3 > fichier.123 |
Voir aussi Exemple 12-21 et Exemple 12-17.
tac, le contraire de cat, affiche le contenu d'un fichier en commençant par sa fin.
Inverse chaque ligne d'un fichier et affiche le résultat vers stdout. Le résultat est différent d'une utilisation de tac, dans le sens où rev conserve l'ordre des lignes, mais << retourne >> chacune d'elle.
bash$ cat fichier1.txt Coucou, je suis la ligne 1. Coucou, je suis la ligne 2. bash$ tac fichier1.txt Coucou, je suis la ligne 2. Coucou, je suis la ligne 1. bash$ rev fichier1.txt .1 engil al sius ej ,uocuoC .2 engil al sius ej ,uocuoC |
Il s'agit de la commande de copie de fichier. cp fichier1 fichier2 copie fichier1 dans fichier2 et écrase fichier2 s'il existait auparavant (voir Exemple 12-5).
![]() | Les options -a, pour option d'archive (pour copier une arborescence entière de répertoire), -r et -R pour option de récursivité sont particulièrement utiles. |
Il s'agit de la commande de déplacement (move). Elle est équivalente à une combinaison des commandes cp et rm. Elle peut être utilisée pour déplacer plusieurs fichiers vers un répertoire ou même pour renommer un répertoire. Pour des exemples d'utilisation dans un script, voir Exemple 9-17 et Exemple A-3.
![]() | Lors de l'utilisation de mv dans un script, on doit ajouter l'option -f (forcer) pour empêcher toute interaction avec l'utilisateur. Quand un répertoire est déplacé vers un répertoire déjà existant, il devient un sous-répertoire du répertoire existant.
|
Efface, supprime (<< remove >> en anglais) un ou plusieurs fichiers. L'option -f force même la suppression de fichiers en lecture seule et est utile pour ignorer toute interaction de l'utilisateur durant son exécution dans un script.
![]() | Lorsqu'elle est exécutée avec l'option de récursivité (NdT: en anglais, << recursive flag >>) -r, cette commande efface les fichiers de tous les sous-répertoires de l'arborescence. |
Efface un répertoire (<< remove directory >> en anglais). Il est nécessaire que le répertoire soit vide de tout fichier, ce qui inclut les fichiers invisibles (NdT: en anglais, les << dotfiles >>), [1] pour que cette commande s'exécute correctemment.
Crée un répertoire (NdT: << make directory >> en anglais). mkdir -p projet/programmes/Decembre crée le répertoire indiqué. L'option -p s'occupe, au besoin, de la création des répertoires parents automatiquement.
Change les attributs d'un fichier existant (voir Exemple 11-10).
chmod +x nom_fichier # Rend "nom_fichier" exécutable pour tous les utilisateurs. chmod u+s nom_fichier # Active le bit de permission "suid" de "nom_fichier". # Un utilisateur ordinaire peut exécuter "nom_fichier" avec les mêmes #+ permissions que son propriétaire. # (Ceci ne s'applique pas aux scripts shell.) |
chmod 644 nom_fichier # Active les permissions de lecture/écriture de "nom_fichier" pour son #+ propriétaire et lecture seulement pour # les autres (mode octal). |
chmod 1777 nom_rep # Donne à tout le monde les permissions de lecture, d'écriture et d'exécution #+ dans le répertoire mais active aussi le "sticky bit". # Cela signifie que seul le propriétaire du répertoire, le propriétaire du #+ fichier et, bien sûr, root peuvent effacer n'importe quel fichier de ce #+ répertoire. |
Change les attributs de fichier (NdT: << change file attributes >> en anglais). Elle agit de la même manière que chmod mais avec une syntaxe d'invocation différente et ne fonctionne que sur les systèmes de fichiers ext2.
Crée des liens vers des fichiers déjà existants. Cette commande est utilisée la plupart du temps avec l'option -s, pour lien symbolique ou << soft >>. Cela permet de référencer le fichier lié par plus d'un nom et est une alternative supérieure au système d'alias (voir Exemple 4-6).
ln -s ancien_fichier nouveau_fichier lie le fichier ancien_fichier au lien nouvellement créé, nouveau_fichier.
Ces commandes accèdent aux pages de manuel et d'information relatives aux commandes systèmes et autres utilitaires installés sur la machine. Les pages info, si disponibles, contiennent habituellement des descriptions bien plus détaillées que celles des pages man.
[1] | Il s'agit de fichiers dont le nom commence par un point, par exemple ~/.Xdefaults. De tels noms de fichiers ne sont pas affichés lors d'un ls, et ne risquent donc pas d'être effacés accidententellement par une commande rm -rf *. Ces fichiers sont utilisés habituellement en tant que fichiers de configuration situés dans le répertoire principal d'un utilisateur. |
Précédent | Sommaire | Suivant |
Filtres externes, programmes et commandes | Niveau supérieur | Commandes complexes |