Vous avez peut-être déjà entendu l'expression « quand on n'a qu'un marteau, tous les problèmes ressemblent à des clous ». Cela ne s'applique pas au monde merveilleux des shells POSIX. Pour les non-initiés, un écran noir brillant de texte vert est identique à tout autre écran noir brillant de texte vert, mais de nombreux administrateurs système savent que le shell que vous choisissez peut modifier toutes les facettes de votre interaction avec votre ordinateur.
Il n'est pas rare de le découvrir à la dure, généralement sous pression. Une fois que vous éprouvez l'impuissance d'entrer la syntaxe incorrecte dans un shell inconnu, vous développez rapidement un attachement à celui avec lequel vous êtes à l'aise. Même ainsi, la plupart des shells populaires ont des vertus qui poussent différents administrateurs système à les définir comme interface par défaut. . Si vous passez un peu de temps avec chacun, vous constaterez peut-être que vous développez un nouveau favori, ou du moins que vous pouvez vous installer dans un shell de sauvegarde fiable.
Voici quelques-uns des shells les plus populaires et ce que les utilisateurs apprécient à leur sujet.
Cendre et tiret
Le shell Almquist a été développé comme un clone du célèbre shell Bourne (à ne pas confondre avec le Bourne Again Shell, autrement connu sous le nom de Bash). Il a été gardé intentionnellement léger, probablement pour la même raison que l'édition de ligne et l'historique ont été exclus à l'origine :Kenneth Almquist a estimé que les fonctions UX supplémentaires appartenaient à l'extérieur du shell. Des décennies plus tard, le shell est toujours un petit shell de base préféré. Il a été livré avec les versions initiales d'Android, et c'était un shell par défaut commun pour l'environnement de démarrage minimal des distributions Linux pendant de nombreuses années.
Comme avec de nombreux shells POSIX, l'utilisation d'Ash est théoriquement familière à toute personne habituée à une console. Vous tapez des commandes ; vous obtenez une sortie. Certaines des fonctionnalités supplémentaires sont là, tandis que d'autres manquent. Par exemple, si vous avez l'habitude d'utiliser les raccourcis clavier de style Emacs ou Vim, vous les trouverez sensiblement absents d'Ash. Cependant, vous pouvez les activer (tant qu'ils ont été inclus au moment de la compilation) avec le -E
(pour Emacs) ou -V
(pour Vim). Historique (en fait le fc
commande intégrée dans Ash) n'est pas non plus une donnée, selon la façon dont Ash a été compilé. Il n'y a pas de tableaux et la commande intégrée trap n'accepte aucune option.
Dash est un shell Almquist, et est, en fait, un port de Ash de NetBSD vers Debian Linux, et signifie Debian Almquist Shell .
La meilleure caractéristique de Ash est également sa plus grande limitation. C'est un shell minimal, donc si vous recherchez la simplicité, alors c'est le shell qu'il vous faut.
Bash
Le shell Bourne-Again (Bash) a été créé par le projet GNU pour remplacer le shell propriétaire Bourne (qui lui-même a été créé pour remplacer le shell de Ken Thompson). Aujourd'hui, Bash est plus qu'un simple shell :c'est un langage de programmation légitime, l'un des principaux outils de l'administrateur système ingénieux, et presque une icône culturelle pour les non-programmeurs ayant besoin d'une automatisation rapide et sale. Si vous pouvez passer une journée dans un shell Linux, vous pouvez développer un script Bash pour vous remplacer. C'est simple, direct et étonnamment puissant, avec des fonctionnalités qui incluent des tableaux, une pile de répertoires, des interruptions, l'analyse de sous-chaînes, des raccourcis clavier Emacs ou Vim, et bien plus encore.
Un argument courant contre Bash est sa taille, qui sur mon système est d'environ 1 Mo contre 200 Ko pour Ash. Une autre est sa complexité. Bash est si riche en fonctionnalités que même si un script écrit en POSIX pur s'exécute en Bash, il n'en va pas toujours de même pour un script Bash tentant de s'exécuter dans un shell POSIX pur. Bien que Bash ait un mode POSIX, ses "bashismes" supplémentaires sont généralement trop attrayants pour être ignorés. La bonne nouvelle est que Bash est open source, il peut donc facilement être installé pour exécuter un script plein de Bash-ismes, mais certains utilisateurs s'y opposent néanmoins par principe.
Bash est un shell flexible et puissant et a remplacé d'autres shells par défaut sur de nombreux systèmes. Apprenez Bash et vous ferez l'expérience d'un shell moderne et riche en fonctionnalités qui montre tous les signes d'une convivialité croissante au fur et à mesure de son développement.
[ Télécharger maintenant :Un guide de l'administrateur système sur les scripts Bash. ]
Boîte occupée
BusyBox est un binaire multi-appel qui combine de nombreux utilitaires POSIX courants en un seul exécutable. En d'autres termes, il s'agit du binaire tout-en-un principal de l'interface utilisateur POSIX. Lorsqu'il est installé à partir du code source, il place une busybox
exécutable dans la bibliothèque de votre système, et vous devez vous y connecter lors de la création de commandes individuelles pour vous et vos utilisateurs. Par exemple :
$ ln --symbolic /lib64/busybox/busybox gzip
$ gzip --help
BusyBox v1.28.1 (2020-07-13 11:42:31 NZST) multi-call binary.
Usage: gzip [-cfkdt123456789] [FILE]...
En moins de 1 Mo, vous obtenez environ 400 commandes, dont ls , cd , cp , mv , grep , ps , mot de passe , éteindre , printf , sed , utilitaires de compression, gestion des processus et bien plus encore. La plupart de ces commandes sont minimes par rapport à leurs équivalents GNU, mais selon votre cas d'utilisation, elles sont probablement suffisantes. De même, le shell interactif de Busybox est Ash, il répond donc aux spécifications POSIX et ne fournit rien d'autre.
Csh ou Tcsh
Le shell C (csh
), et sa version ultérieure, tcsh
, utilisez une syntaxe de type C (ou C++ ou Java, si vous êtes plus familier avec celles-ci). Par exemple, voici un if
boucle dans Bash :
v=1
if [[ $v == 1 ]]
then
echo "verbose"
fi
Et voici la même chose en Csh :
set v=1
if ($v == 1) then
echo "verbose"
endif
La différence est subtile, mais pour les personnes habituées à la syntaxe du C et des langages similaires, il existe suffisamment de petites différences pour améliorer sensiblement leur expérience. Certaines commandes intégrées manquent également. Par exemple, il n'y a pas de type
ou hash
commandes dans tcsh
, et vous ne pouvez pas définir vos propres fonctions.
Tandis que csh
souffre un peu de son âge, tcsh
est une bonne mise à jour et a la plupart des mêmes fonctionnalités que Bash, bien qu'avec une syntaxe différente de temps en temps.
Poisson
La coquille de poisson s'appelle fièrement "une coquille moderne pour les années 90". Il a tous les avantages des shells robustes comme Bash et Zsh, mais avec des fonctionnalités supplémentaires telles que la coloration syntaxique, un fish_config
commande, et bien plus encore. Son objectif est de fournir un contexte supplémentaire à l'utilisateur et un meilleur système de gestion de configuration qu'un simple .bashrc
.
Il y a de légères différences de syntaxe ici et là. Par exemple, voici une définition de fonction pour Bash :
function sshrm() {
/usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
}
La même chose dans Fish, cependant :
function sshrm
/usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
end
Les fans de Fish adorent ses capacités de thématisation simples et la façon dont il utilise par défaut un répertoire de fichiers de configuration plutôt qu'un .bashrc
fichier qui, au mieux, source d'autres fichiers de points.
Corn
Le shell Korn (ksh
) a été développé par David Korn et publié en 1983. Alors que Bash et tcsh
ont été livrés comme shells par défaut pour les systèmes POSIX populaires, le shell Korn est resté en grande partie un shell "alternatif". Mais en tant que shells alternatifs, ksh
a bien fait pour lui-même, et lorsque Microsoft a présenté Powershell lors de conférences techniques, ils ont cité le shell Korn comme sa principale influence.
Il existe plusieurs versions différentes du shell Korn (mksh, ksh93, ksh93u+, ksh2020 et autres), mais les branches officielles sont maintenues sur le Github d'AT&T.
Aux utilisateurs de Bash, ksh
est susceptible de se sentir assez familier. Lire un didacticiel sur les scripts Korn revient presque à lire sur les scripts Bash. Vous pouvez définir vos propres fonctions, créer des alias, écrire des boucles et même programmer des options de complétion par onglets. Les raccourcis clavier Emacs sont activés par défaut, mais vous pouvez passer à vi
raccourcis clavier utilisant le -o vi
option au lancement, ou en plaçant set -o vi
dans votre ~/.environ.ksh
fichier de configuration.
Ce qui manque à Kornshell, vous ne le remarquerez probablement pas immédiatement. Par exemple, vous ne pouvez pas activer ou désactiver les commandes intégrées, et il existe une commande intégrée appelée whence
qui fait le même travail que le which
exécutable. Il n'y a pas de typeset
commande, mais Kornshell a des tableaux avec les fonctionnalités de recherche les plus essentielles disponibles. En d'autres termes, bien qu'il existe des différences mineures, ksh
est facile à utiliser pour toute personne habituée à Bash, Fish ou Zsh.
Zsh
Le shell Z (zsh
) est un shell POSIX interactif de type Bourne connu pour son abondance de fonctionnalités innovantes. Les utilisateurs de Z Shell citent souvent ses nombreuses commodités et lui attribuent une efficacité accrue et une personnalisation étendue. Lors du premier lancement, Zsh propose plusieurs options de configuration, telles que la taille de votre historique, les raccourcis clavier (Emacs ou Vim) et le nombre de fonctionnalités supplémentaires que vous souhaitez. Par exemple, vous pouvez créer le cd
commande implicite en autorisant Zsh à initier un changement de répertoire lorsque vous fournissez un chemin non exécutable sans commande. Il existe plusieurs fonctionnalités supplémentaires, et vous pouvez les activer ou les désactiver en modifiant le .zshrc
fichier de configuration.
Il existe quelques différences subtiles de syntaxe entre Bash et Zsh, mais peu de commandes sont souvent scriptées, de sorte que la probabilité que vous deviez adapter les scripts est faible. Par exemple, pour désactiver une commande intégrée dans Bash :
$ enable -n cd
En Zsh, la commande est un peu plus intuitive :
$ disable cd
Pour reconstruire les chemins de commande en cache dans Bash, vous devez effacer celui existant, mais dans Zsh, il y a une option pour cela :
$ hash -f
Il y a aussi de petits avantages pour ceux qui migrent d'autres coquilles. Par exemple, vous pouvez utiliser le whence
commande dans Z Shell, qui serait familière aux utilisateurs du shell Korn.
Zsh est un mélange amusant et dynamique d'anciennes et de nouvelles fonctionnalités, et il a une communauté dynamique qui développe des thèmes et des plugins pour cela. Ceux-ci sont faciles à installer et ajoutent encore plus de fonctionnalités à votre coque, faisant de Z Shell un concurrent pour la coque la plus flexible disponible.
Choisissez vos coques
Comme d'habitude avec l'open source, vous n'avez pas à choisir un seul outil parmi un outil donné. Bien que je sois un utilisateur dévoué de Bash à la maison, j'utilise souvent par défaut tcsh
par habitude au travail, car de nombreux scripts de l'industrie des effets visuels ont été écrits pour C Shell. À ce jour, j'écris compulsivement des hooks Git dans tcsh
pour cette raison.
Vous n'avez pas forcément à justifier votre choix de coque. Utilisez ce qui fonctionne le mieux pour vous et votre équipe. Tant que c'est open source, vous avez fait un excellent choix.
[ Cours en ligne gratuit :Présentation technique de Red Hat Enterprise Linux. ]