Retour à Trucs & Astuces bash |
Le shell est un programme qui vous permet de lancer des applications, d'interroger votre babasse, de dialoguer avec votre système en quelque sorte. C'est la base de n'importe quel système UNIX. Des shells, il en existe plusieurs: ksh (Korn Shell) bsh (Bourne Shell), csh (C Shell)... chacun avec ses avantages, ses inconvénients, ses particularités.
Lorsque vous travaillez en mode texte (donc sans X), vous êtes en réalité directement en relation avec le shell. En mode X (donc avec des fenêtres), il faut d'abord exécuter un programme spécial pour pouvoir utiliser un shell - Xterm est l'un de ces programmes (et un des plus répandus).
Avec le shell, vous pouvez exécuter n'importe quelle commande unix/linux classique (comme find , ou gzip, ou mkdir ..) plus quelques autres qui sont propres au shell (comme ulimit ou umask).
Pour connaitre votre shell par défaut, il suffit de regarder dans le fichier /etc/passwd . Dans la ligne qui correspond à votre nom d'utilisateur, vous verrez à la fin votre shell par défaut.
Pour changer de shell par défaut, utilisez la commande chsh (CHange SHell).
Se loger sur un compte (utilisateur ou root) revient en fait à lancer un shell, nommé le 'login shell' (c'est en tout cas vrai si on se loge avec 'login', c'est à dire en mode texte. Si on se loge via xdm, donc en mode graphique, c'est un peu plus compliqué). Au moment de son lancement, ce login shell va lire un certain nombre de fichiers dans lesquels sont positionnées ou déterminées des variables d'environnements. Le premier fichier que Bash va lire est /etc/profile . Il est lu une seule fois, au login. Ceci étant vrai pour tous les utilisateurs, il peux donc servir à déterminer un certain nombre de variables communes à tous les utilisateurs de votre système. Voici un exemple de /etc/profile. Attention: le /etc/profile est commun à tous les shells (sauf csh/tcsh) il ne faut donc rien y mettre de particulier à Bash.
Ensuite, bash lira le fichier ~/.bash_profile, qui est en fait votre /etc/profile personnel. Il est également lu une fois, au login. Voici un exemple de fichier .bash_profile. Il peux également s'appeler ~/.profile . (note : le symbole ~ (tilda) est un raccourci pour désigner votre répertoire racine personnel - ex., pour moi, ~ = /home/rouat )
Ensuite,, bash lira ensuite votre fichier ~/.bashrc dans lequel vous pouvez définir des raccourcis (alias) ou des fonctions plus complexes. L'exemple que voici commence par exécuter un autre bashrc, en l'occurence /etc/bashrc . C'est une astuce très simple pour permettre à l'administrateur système de définir des alias universels. Voici un exemple de /etc/bashrc. Le fichier .bashrc est lu à chaque fois qu'on lance bash, pas uniquement au login.
Il reste 3 fichiers qui peuvent être utiles:
Quelques trucs à connaitre sur bash:
gzip toto &compressera le fichier toto, tout en vous laissant la main.
ls -l /usr/bin > totoécrira le contenu de /usr/bin dans le fichier toto
ls /usr/bin | wc -lvous donnera le nombre de fichiers dans /usr/bin C'est exactement comme si on avait fait:
ls /usr/bin > toto wc -l totosauf que l'on n'a pas eu à créer de fichier toto.
gunzip `find . -name '*.gz' `va décompresser tous les fichiers se finissant par .gz récursivement à partir du répertoire courant.
make depend && make all
Le 'make all' n'aura lieu que losque le 'make depend' sera terminé sans retourner d'erreur.
tar cf - `find $HOME \! -type d -mtime -2 -print` | tar -C /mnt/zip -xvf -
Etudions la :--> find $HOME \! -type d -mtime -2 -print
va nous donner les noms des fichiers (mais PAS des répertoires)
modifiés depuis moins de 2 jours. Ensuite :
--> tar cf - `find $HOME \! -type d -mtime -2 -print`
va en fait créer une archive tar (donc un fichier) de tous ces
fichiers, avec comme point de sortie la sortie standard, donc
l'écran. On va donc capter cette sortie, et la rediriger vers une
autre foncion via un tube :
--> tar cf - `find $HOME \! -type d -mtime -2 -print` | tar -C /mnt/zip
-xvf -
le second tar prend ce qui lui arrive via le tube, et le redéploie
dans le répertoire /mnt/zip qui est celui ou j'ai monté mon
zip.Bilan: j'ai recopié tous les fichiers modifiés depuis
moins de 2 jours de mon répertoire personnel ($HOME) sur un zip, en
conservant l'arborescence. Pile-poil pour faire du backup (un peu simple,
certes).Et aux petits malins qui me diraient qu'il y a plus simple, je
répondrais que oui, mais que c'était pour
expliquer !Notez: si j'avais fait un cp -R $HOME /mnt/zip ,
ça n'aurait pas donné le même résultat, car un
cp recopie en dur tous les liens !
Voilà, ceci n'est qu'un premier jet. N'hésitez pas à réagir constructivement à cet article, en m'envoyant par exemple un petit mel (missive électronique)