GNU/Linux >> Tutoriels Linux >  >> Linux

Premiers pas avec Zsh

Z-shell (ou 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.

Si vous êtes relativement nouveau sur Linux ou Unix mais suffisamment expérimenté pour avoir ouvert un terminal et exécuté quelques commandes, vous avez probablement utilisé le shell Bash. Bash est sans doute le shell logiciel libre définitif, en partie à cause de ses fonctionnalités progressives et en partie parce qu'il est livré comme shell par défaut sur la plupart des systèmes d'exploitation Linux et Unix populaires. Cependant, plus vous utilisez un shell, plus vous commencez à trouver de petites choses qui pourraient être meilleures pour la façon dont vous voulez l'utiliser. S'il y a une chose pour laquelle l'open source est célèbre, c'est le choix . Beaucoup de gens choisissent de passer de Bash à Z.

Qu'est-ce que Zsh ?

Un shell n'est qu'une interface avec votre système d'exploitation. Un shell interactif vous permet de saisir des commandes via ce qu'on appelle la entrée standard , ou stdin , et obtenez la sortie via la sortie standard et erreur type , ou stdout et stderr . Il existe de nombreux shells, notamment Bash, Csh, Ksh, Tcsh, Dash et Zsh. Chacun a des fonctionnalités basées sur ce que ses programmeurs pensaient être le mieux pour un shell. Que ces fonctionnalités soient bonnes ou mauvaises dépend de vous, l'utilisateur final.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Zsh possède des fonctionnalités telles que l'achèvement interactif des onglets, la recherche automatisée de fichiers, l'intégration des expressions régulières, un raccourci avancé pour définir la portée des commandes et un moteur de thème riche. Ces fonctionnalités sont incluses dans un environnement de shell de type Bourne, par ailleurs familier, ce qui signifie que si vous connaissez et aimez déjà Bash, vous trouverez Zsh familier, sauf avec plus de fonctionnalités. Vous pourriez le considérer comme une sorte de Bash++.

Installation de Zsh

Installez Zsh avec votre gestionnaire de packages.

Sur Fedora, RHEL et CentOS :

$ sudo dnf install zsh

Sur Ubuntu et Debian :

$ sudo apt install zsh

Sur MacOS, vous pouvez l'installer à l'aide de MacPorts :

$ sudo port install zsh

Ou avec Homebrew :

$ brew install zsh

Il est possible d'exécuter Zsh sous Windows, mais uniquement au-dessus d'une couche Linux ou de type Linux telle que le sous-système Windows pour Linux (WSL) ou Cygwin. Cette installation n'entre pas dans le cadre de cet article, consultez donc la documentation Microsoft.

Configurer Zsh

Zsh n'est pas un émulateur de terminal; c'est un shell qui s'exécute à l'intérieur d'un émulateur de terminal. Ainsi, pour lancer Zsh, vous devez d'abord lancer une fenêtre de terminal telle que GNOME Terminal, Konsole, Terminal, iTerm2, rxvt ou un autre terminal de votre choix. Ensuite, vous pouvez lancer Zsh en tapant :

$ zsh

La première fois que vous lancez Zsh, vous êtes invité à choisir certaines options de configuration. Ceux-ci peuvent tous être modifiés plus tard, alors appuyez sur 1 pour continuer.

This is the Z Shell configuration function for new users, zsh-newuser-install.

(q)  Quit and do nothing.

(0)  Exit, creating the file ~/.zshrc

(1)  Continue to the main menu.

Il existe quatre catégories de préférences, alors commencez par le haut.

  1. La première catégorie vous permet de choisir le nombre de commandes conservées dans votre fichier d'historique du shell. Par défaut, il est défini sur 1 000 lignes.
  2. La complétion de Zsh est l'une de ses fonctionnalités les plus intéressantes. Pour garder les choses simples, pensez à l'activer avec ses options par défaut jusqu'à ce que vous vous habituiez à son fonctionnement. Appuyez sur 1 pour les options par défaut, 2 pour définir les options manuellement.
  3. Choisissez les raccourcis clavier Emacs ou Vi. Bash utilise des liaisons Emacs, vous y êtes donc peut-être déjà habitué.
  4. Enfin, vous pouvez découvrir (et activer ou désactiver) certaines fonctionnalités subtiles de Zsh. Par exemple, vous pouvez arrêter d'utiliser le cd en autorisant Zsh à initier un changement de répertoire lorsque vous fournissez un chemin non exécutable sans commande. Pour activer l'une de ces options supplémentaires, saisissez le numéro de l'option et saisissez s pour définir ce. Essayez d'activer toutes les options pour profiter pleinement de l'expérience Zsh. Vous pouvez les supprimer plus tard en modifiant ~/.zshrc .

Pour terminer la configuration, appuyez sur 0 .

Utiliser Zsh

Au début, Zsh ressemble beaucoup à l'utilisation de Bash, qui est sans aucun doute l'une de ses nombreuses fonctionnalités. Il existe de sérieuses différences entre, par exemple, Bash et Tcsh, donc pouvoir basculer entre Bash et Zsh est une commodité qui rend Zsh facile à essayer et facile à utiliser à la maison si vous devez utiliser Bash au travail ou sur votre serveur.

Changer de répertoire avec Zsh

Ce sont les petites différences qui rendent Zsh agréable. Tout d'abord, essayez de changer le répertoire vers votre dossier Documents sans le cd commande . Cela semble trop beau pour être vrai; mais si vous entrez un chemin de répertoire sans autre instruction, Zsh passe à ce répertoire :

% Documents
% pwd
/home/seth/Documents

Cela génère une erreur dans Bash ou tout autre shell normal. Mais Zsh est loin d'être normal, et ce n'est que le début.

Rechercher avec Zsh

Lorsque vous souhaitez rechercher un fichier à l'aide d'un shell normal, vous avez probablement recours à la commande find ou localiser commande. À tout le moins, vous avez peut-être utilisé ls -R pour une liste récursive d'un ensemble de répertoires. Zsh a une fonctionnalité intégrée lui permettant de trouver un fichier dans le sous-répertoire actuel ou dans tout autre sous-répertoire.

Par exemple, supposons que vous ayez deux fichiers appelés foo.txt . L'un est situé dans votre répertoire actuel et l'autre dans un sous-répertoire appelé foo . Dans un shell Bash, vous pouvez lister le fichier dans le répertoire courant avec :

$ ls
foo.txt

et vous pouvez lister l'autre en indiquant explicitement le chemin du sous-répertoire :

$ ls foo
foo.txt

Pour lister les deux, vous devez utiliser le -R commutateur, peut-être combiné avec grep :

$ ls -R | grep foo.txt
foo.txt
foo.txt

Mais dans Zsh, vous pouvez utiliser le ** raccourci :

% ls **/foo.txt
foo.txt
foo.txt

Et vous pouvez utiliser cette syntaxe avec n'importe quelle commande, pas seulement avec ls . Imaginez votre efficacité accrue lorsque vous déplacez des types de fichiers spécifiques d'un ensemble de répertoires vers un emplacement unique, ou que vous concaténez des extraits de texte dans un fichier, ou que vous parcourez des journaux.

Utilisation de l'achèvement de l'onglet Zsh

La complétion de tabulation est une fonctionnalité utilisateur expérimentée dans Bash et certains autres shells, et elle a pris d'assaut le monde Unix lorsqu'elle est devenue monnaie courante. Les utilisateurs d'Unix n'avaient plus besoin de recourir à des caractères génériques lors de la saisie de chemins longs et fastidieux (tels que /h*/s*h/V*/SCS/sc*/comp*/t*/a*/*9/ 04/LS*bateau*v , ce qui est bien plus simple que de taper /home/seth/Videos/SCS/scenes/composite/takes/approved/109/04/LS_boat-port-cargo-mover.mkv ). Au lieu de cela, ils pouvaient simplement appuyer sur la touche Tab lorsqu'ils avaient saisi suffisamment d'une chaîne unique. Par exemple, si vous savez qu'il n'y a qu'un seul répertoire commençant par un h au niveau racine de votre système, vous pouvez taper /h puis appuyez sur Tab. C'est rapide, c'est simple, c'est efficace. Il confirme également qu'un chemin existe ; si Tab ne complète rien, vous savez que vous cherchez au mauvais endroit ou que vous avez mal saisi une partie du chemin.

Cependant, si vous avez de nombreux répertoires qui partagent cinq ou plus des mêmes premières lettres, Tab refuse catégoriquement de se terminer. Alors que dans la plupart des terminaux modernes, il révélera (au moins) les fichiers qui l'empêchent de deviner ce que vous voulez dire, il faut généralement deux pressions sur Tab pour les révéler; par conséquent, la complétion de tabulations devient souvent une telle interaction de lettres et de tabulations sur votre clavier que vous avez l'impression de vous entraîner pour un récital de piano.

Zsh résout ce problème mineur en parcourant les complétions possibles. Si vous tapez ls ~/D et appuyez sur Tab, Zsh complète votre commande avec Documents première; si vous appuyez à nouveau sur Tab, il propose des téléchargements , et ainsi de suite jusqu'à ce que vous trouviez celui que vous voulez.

Wildcards en Zsh

Les caractères génériques se comportent différemment dans Zsh que ce à quoi les utilisateurs de Bash sont habitués. Tout d'abord, ils peuvent être modifiés. Par exemple, si vous souhaitez répertorier tous les dossiers de votre répertoire actuel, vous pouvez utiliser un caractère générique modifié :

% ls
dir0   dir1   dir2   file0   file1
% ls *(/)
dir0   dir1   dir2

Dans cet exemple, le (/) qualifie les résultats du caractère générique afin que Zsh n'affiche que les répertoires. Pour lister uniquement les fichiers, utilisez (.) . Pour lister les liens symboliques, utilisez (@) . Pour lister les fichiers exécutables, utilisez (*) .

% ls ~/bin/*(*)
fop  exify  tt

Zsh n'est pas conscient des types de fichiers uniquement. Il peut également lister en fonction de l'heure de modification, en utilisant la même convention de modificateur générique. Par exemple, si vous voulez trouver un fichier qui a été modifié au cours des huit dernières heures, utilisez le mh modificateur (pour modifié et heures ) et l'entier négatif des heures :

% ls ~/Documents/*(mh-8)
cal.org   game.org   home.org

Pour trouver un fichier modifié il y a plus de (par exemple) deux jours, les modificateurs changent en md (pour modifié et jour ) avec un entier positif :

% ls ~/Documents/*(+2)
holiday.org

Vous pouvez faire beaucoup plus avec les modificateurs et qualificatifs génériques, alors lisez la page de manuel Zsh pour plus de détails.

L'effet secondaire générique

Pour utiliser les caractères génériques comme vous les utiliseriez dans Bash, ils doivent parfois être échappés dans Zsh. Par exemple, si vous copiez des fichiers sur votre serveur dans Bash, vous pouvez utiliser un caractère générique comme celui-ci :

$ scp IMG_*.JPG [email protected]:~/www/ph*/*19/09/14

Cela fonctionne dans Bash, mais Zsh renvoie une erreur car il essaie de développer les variables du côté distant avant d'émettre le scp commande. Pour éviter cela, vous devez échapper les variables distantes :

% scp IMG_*.JPG [email protected]:~/www/ph\*/\*19/09/14

Ce sont ces types de petites exceptions qui peuvent vous frustrer lorsque vous passez à un nouveau shell. Il n'y en a pas beaucoup lors de l'utilisation de Zsh (il y en a probablement plus lors du retour à Bash après avoir expérimenté Zsh) mais quand ils se produisent, restez calme et soyez explicite. Vous vous tromperez rarement en vous conformant strictement à POSIX, mais si cela échoue, recherchez le problème pour le résoudre et passez à autre chose. Hyperpolyglot.org s'est avéré inestimable pour de nombreux utilisateurs bloqués sur un shell au travail et un autre à la maison.

Dans mon prochain article sur Zsh, je vous montrerai comment installer des thèmes et des plugins pour rendre votre Z-Shell encore plus Z-ier.


Linux
  1. Démarrer avec ls

  2. Premiers pas avec Samba pour l'interopérabilité

  3. Premiers pas avec PostgreSQL sous Linux

  4. Premiers pas avec SSH sous Linux

  5. Guide pratique :Premiers pas avec Ansible

Premiers pas avec GitHub

Premiers pas avec le gestionnaire de paquets Nix

Premiers pas avec systemctl

Premiers pas avec cPanel

Premiers pas avec SiteApps

Premiers pas avec la commande Tar