Shell bash
Le shell Bash est l'interpréteur de commandes par défaut de la plupart des distributions Linux. Il peut être personnalisé en modifiant son apparence ou en lui activant des paramètres.
Configuration
bashrc
Le .bashrc
est un fichier qui contient des commandes à exécuter au moment de la connexion d'un utilisateur. Il en existe 2 types :
- Un générique pour tout les utilisateurs :
/etc/bash.bashrc
- Un local pour chaque utilisateurs en particulier :
~/.bashrc
Pour que les modifications prennent effet, il faut recharger le fichier après modification soit en relançant le shell, soit en exécutant le fichier comme s'il s’agissait d'une commande . .bashrc
ou bien en utilisant la commande source ~/.bashrc
.
Auto complétion
Le paquet bash-completion
offre la possibilité de compléter les commandes bash à l'aide de la tabulation. Il faut entrer les quelques lignes suivantes dans l'un des fichiers de configuration de bash pour que cela prenne effet.
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Personnalisation du prompt
inputrc
Insensibilité à la casse
Rendre insensible l'auto complétion du shell Bash à la casse (très utile quand on tape vite au clavier et que le système écrit /Etc au lieu de /etc et dit "Aucun fichier ou dossier de ce type").
vim ~/.inputrc
Ajouter cette ligne :
set completion-ignore-case On
Source de la section
http://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-the-terminal
Redirections
Rediriger plusieurs lignes
Pour ce faire nous utiliserons un EOF (End Of File). Il faut précéder et succéder une chaîne de caractère quelconque par des traits de soulignement afin de marquer le début et la fin de notre bloque de texte (à la manière du motd Cisco).
Dans un fichier
ycharbi@XPS13:/tmp$ cat << '_EOF_' > foo.txt
> Écrire et
> terminer par le
> même symbole
> _EOF_
ycharbi@XPS13:/tmp$ cat foo.txt
Écrire et
terminer par le
même symbole
Dans le shell
ycharbi@XPS13:/tmp$ cat << _EOF_
> Écrire et
> terminer par le
> même symbole
> _EOF_
Écrire et
terminer par le
même symbole
ASTUCE
Le fait de mettre des quottes au mot clé de fin de fichier (_EOF_ dans l'exemple, mais pourrai être toto) permet de désactiver l'interprétation Bash. Si vous ne les mettez pas, le shell interprétera le code que vous entrerez (les variables notamment). À vous de voir ce que vous voulez faire. Ceci est expliqué dans ce chapitre du guide de programmation Bash avancé repris par ce commentaire.Source de la section
Arguments
Voici une liste d'astuces pour récupérer des arguments tapés en bash:
Argument | Signification |
---|---|
<Échap> + _ |
Colle le dernier argument passé à la dernière commande tapée |
!$ |
Équivaut, au moment d'envoyer la commande, au dernier argument passé à la dernière commande tapée |
!:$ |
Équivaut, au moment d'envoyer la commande, à l’énième argument passé à la dernière commande tapée (remplacer le $ par le numéro de l'argument)
|
!! |
Équivaut, au moment d'envoyer la commande, à tout les arguments de la dernière commande tapée |
^toto^titi |
Permet de remplacer toto par titi dans la commande précédente (à entrer seul, sans commande ni argument). Un ls /etc suivi d'un ^/etc^/ donnera un ls /
|
~+ |
Donne le répertoire courant (est identique à $(pwd) )
|
<ctrl> + alt + e |
Déroule la véritable signification d'un alias. Par exemple, si je tape ls suivi de ce raccourci clavier, j'obtiens ls --color qui est définit comme alias dans mon .bashrc
|
$_ |
Correspond au dernier paramètre de la dernière commande exécuté. La différence avec les motifs présentés plus haut est qu'il utilisable même lors d'un enchaînement de commande comme par exemple mkdir -p ~/tmp/conteneur && cd $_
|
Restriction
Il est possible de restreindre l'usage du shell pour un utilisateur en exécutant bash
avec l'option -r
ou en utilisant /usr/bin/rbash
(résultat identique).
L'interpréteur ainsi restreint permet de créer un environnement plus contrôlé qu'un interpréteur standard. Il se comporte de même façon que bash
à la différence des actions suivantes qui sont interdites ou non effectuées :
- changer de répertoire avec
cd
- créer ou détruire les valeurs de
SHELL
,PATH
,HISTFILE
,ENV
ouBASH_ENV
- indiquer des noms de commandes contenant un
/
- indiquer un nom de fichier contenant un
/
comme argument de la commande interne.
- indiquer un nom de fichier contenant une barre oblique (
/
) comme argument de la commande internehistory
- indiquer un nom de fichier contenant une barre oblique comme argument de l'option
-p
de la commande internehash
- importer une définition de fonction dans l'environnement au démarrage
- analyser les valeurs de
SHELLOPTS
de l'environnement d'interpréteur au démarrage - rediriger la sortie en utilisant les opérateurs de redirection
>
,>|
,<>
,>&
,&>
et>>
- utiliser la commande interne
exec
pour remplacer l'interpréteur par une autre commande - ajouter ou supprimer des commandes internes avec les options
-f
et-d
de la commande interneenable
- utiliser la commande interne
enable
pour activer les commandes internes de l'interpréteur désactivées - indiquer l'option
-p
à la commande interne commande - supprimer le mode restreint avec
set +r
ouset +o restricted
Ces restrictions sont mises en place après la lecture de tous les fichiers d’initialisation.
De fait, il est possible d'utiliser rbash
comme shell de connexion pour un utilisateur donné (exemple pour /etc/passwd
) :
www-data:x:33:33:www-data:/var/www:/usr/bin/rbash
Sources de la section
- http://linuxfr.org/users/postroutine/journaux/bash-et-les-raccourcis-claviers
- https://askubuntu.com/questions/70750/how-to-get-bash-to-stop-escaping-during-tab-completion
- https://bugzilla.redhat.com/show_bug.cgi?id=679696
- https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html#The-Restricted-Shell