zsh rmll

126
zsh : utilisation interactive Bruno Bonfils, <[email protected] > mardi 5 mai 2009

Upload: bruno-bonfils

Post on 28-Nov-2014

1.910 views

Category:

Technology


0 download

DESCRIPTION

Introduction à ZSH et les bonnes pratiques du shell

TRANSCRIPT

Page 1: Zsh Rmll

zsh : utilisation interactiveBruno Bonfils, <[email protected]>

mardi 5 mai 2009

Page 2: Zsh Rmll

Sommaire

mardi 5 mai 2009

Page 3: Zsh Rmll

Sommaire

Introduction

mardi 5 mai 2009

Page 4: Zsh Rmll

Sommaire

Introduction

Organisation du shell, outils

mardi 5 mai 2009

Page 5: Zsh Rmll

Sommaire

Introduction

Organisation du shell, outils

La complétion ZSH

mardi 5 mai 2009

Page 6: Zsh Rmll

Sommaire

Introduction

Organisation du shell, outils

La complétion ZSH

ZLE (zsh line editor)

mardi 5 mai 2009

Page 7: Zsh Rmll

Sommaire

Introduction

Organisation du shell, outils

La complétion ZSH

ZLE (zsh line editor)

Quelques astuces

mardi 5 mai 2009

Page 8: Zsh Rmll

Sommaire

Introduction

Organisation du shell, outils

La complétion ZSH

ZLE (zsh line editor)

Quelques astuces

Les outils zsh

mardi 5 mai 2009

Page 9: Zsh Rmll

IntroductionMa vision du shell

mardi 5 mai 2009

Page 10: Zsh Rmll

Introduction

Définition : un shell est un programme fournissant une interface avec les utilisateurs

Ma vision du shell

mardi 5 mai 2009

Page 11: Zsh Rmll

Introduction

Définition : un shell est un programme fournissant une interface avec les utilisateurs

La productivité fournie par un outil en ligne de commande n’a jamais été égalée par des applications graphiques (pour une utilisation générique)

Ma vision du shell

mardi 5 mai 2009

Page 12: Zsh Rmll

Organisation / Outils

mardi 5 mai 2009

Page 13: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

mardi 5 mai 2009

Page 14: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

mardi 5 mai 2009

Page 15: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

Des noms explicites

mardi 5 mai 2009

Page 16: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

Des noms explicites

Utilisation d’un SCM

mardi 5 mai 2009

Page 17: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

Des noms explicites

Utilisation d’un SCM

Des outils annexes indispensables

mardi 5 mai 2009

Page 18: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

Des noms explicites

Utilisation d’un SCM

Des outils annexes indispensables

screen

mardi 5 mai 2009

Page 19: Zsh Rmll

Organisation / Outils

Respecter une hiérarchie dans votre répertoire utilisateur

Un nombre fini de répertoire

Des noms explicites

Utilisation d’un SCM

Des outils annexes indispensables

screen

dictmardi 5 mai 2009

Page 20: Zsh Rmll

Exemple d’organisation

archivesbindocsdownloadetctmptoolswork

Respecter cette hiérarchie sur l’ensemble de vos comptes/ordinateurs vous permet une plus grande productivité.

mardi 5 mai 2009

Page 21: Zsh Rmll

Un mot sur dict

mardi 5 mai 2009

Page 22: Zsh Rmll

Un mot sur dict

dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires

mardi 5 mai 2009

Page 23: Zsh Rmll

Un mot sur dict

dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires

VERA (Virtual Entity of Relevant Acronyms)

mardi 5 mai 2009

Page 24: Zsh Rmll

Un mot sur dict

dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires

VERA (Virtual Entity of Relevant Acronyms)

GCide, dictionnaire anglais

mardi 5 mai 2009

Page 25: Zsh Rmll

Un mot sur dict

dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires

VERA (Virtual Entity of Relevant Acronyms)

GCide, dictionnaire anglais

Et de nombreux autres

mardi 5 mai 2009

Page 26: Zsh Rmll

Un mot sur dict

dict est un outil client/serveur permettant d’interroger un ensemble de dictionnaires

VERA (Virtual Entity of Relevant Acronyms)

GCide, dictionnaire anglais

Et de nombreux autres

% dict bgp BGP Border Gateway Protocol (RFC 1267/1771, IP)

mardi 5 mai 2009

Page 27: Zsh Rmll

Un mot sur screen

mardi 5 mai 2009

Page 28: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

mardi 5 mai 2009

Page 29: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

Découpage (split) des vues

mardi 5 mai 2009

Page 30: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

Découpage (split) des vues

Enregistrement, recherche

mardi 5 mai 2009

Page 31: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

Découpage (split) des vues

Enregistrement, recherche

Copier/Coller sans souris

mardi 5 mai 2009

Page 32: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

Découpage (split) des vues

Enregistrement, recherche

Copier/Coller sans souris

Hardstatus/title bar

mardi 5 mai 2009

Page 33: Zsh Rmll

Un mot sur screen

Multiplexage de terminaux

Découpage (split) des vues

Enregistrement, recherche

Copier/Coller sans souris

Hardstatus/title bar

Très utile en relation avec zsh !

mardi 5 mai 2009

Page 34: Zsh Rmll

Un mot sur screen

Title bar

Hardstatus bar

mardi 5 mai 2009

Page 35: Zsh Rmll

Un mot sur screen

Title bar

Hardstatus bar

RPS1Dynamique

mardi 5 mai 2009

Page 36: Zsh Rmll

Un mot sur screen

mardi 5 mai 2009

Page 37: Zsh Rmll

Un mot sur screen

Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut

mardi 5 mai 2009

Page 38: Zsh Rmll

Un mot sur screen

Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut

ssh, telnet vont définir le nom d’hôte dans la barre de statut

mardi 5 mai 2009

Page 39: Zsh Rmll

Un mot sur screen

Grâce à des fonctions, il est possible de rendre dynamique le contenu des barres de titre et de statut

ssh, telnet vont définir le nom d’hôte dans la barre de statut

heure, commande et chemin en cours dans la barre de titre

mardi 5 mai 2009

Page 40: Zsh Rmll

La complétion zsh

mardi 5 mai 2009

Page 41: Zsh Rmll

La complétion zsh

Les concepts

mardi 5 mai 2009

Page 42: Zsh Rmll

La complétion zsh

Les concepts

Les widgets

mardi 5 mai 2009

Page 43: Zsh Rmll

La complétion zsh

Les concepts

Les widgets

les zstyles, où comment configurer la complétion en fonction de ses envies

mardi 5 mai 2009

Page 44: Zsh Rmll

La complétion zsh

Les concepts

Les widgets

les zstyles, où comment configurer la complétion en fonction de ses envies

Définir/étendre la complétion

mardi 5 mai 2009

Page 45: Zsh Rmll

Les concepts

mardi 5 mai 2009

Page 46: Zsh Rmll

Les concepts

Écrire des fonctions de complétion très avancées, tout en pensant à la réutilisation

mardi 5 mai 2009

Page 47: Zsh Rmll

Les concepts

Écrire des fonctions de complétion très avancées, tout en pensant à la réutilisation

Une configuration très fine, pouvant contrôler le comportement de la complétion

mardi 5 mai 2009

Page 48: Zsh Rmll

La complétion

mardi 5 mai 2009

Page 49: Zsh Rmll

La complétion

Tout le monde connais la complétion sur les commandes

mardi 5 mai 2009

Page 50: Zsh Rmll

La complétion

Tout le monde connais la complétion sur les commandes

Mais zsh propose bien plus :

mardi 5 mai 2009

Page 51: Zsh Rmll

La complétion

Tout le monde connais la complétion sur les commandes

Mais zsh propose bien plus :

Une complétion sur les arguments

mardi 5 mai 2009

Page 52: Zsh Rmll

La complétion

Tout le monde connais la complétion sur les commandes

Mais zsh propose bien plus :

Une complétion sur les arguments

Une complétion contextuelle (différente en fonction de l’argument précédent par exemple)

mardi 5 mai 2009

Page 53: Zsh Rmll

Quelques exemples : apt-get

mardi 5 mai 2009

Page 54: Zsh Rmll

Quelques exemples : apt-get

complétion des sous commandes (install, update, etc.)

mardi 5 mai 2009

Page 55: Zsh Rmll

Quelques exemples : apt-get

complétion des sous commandes (install, update, etc.)

complétion de la liste des paquets

mardi 5 mai 2009

Page 56: Zsh Rmll

Quelques exemples : apt-get

complétion des sous commandes (install, update, etc.)

complétion de la liste des paquets

Gestion du statut du paquet (installé, disponible)

mardi 5 mai 2009

Page 57: Zsh Rmll

Quelques exemples : apt-get

complétion des sous commandes (install, update, etc.)

complétion de la liste des paquets

Gestion du statut du paquet (installé, disponible)

Utilisation d’un cache

mardi 5 mai 2009

Page 58: Zsh Rmll

Quelques exemples : configure

mardi 5 mai 2009

Page 59: Zsh Rmll

Quelques exemples : configure

Lorsque l’on compile un logiciel à partir des sources, s’il utilise les autotools, cela commence généralement par un ./configure --help | less pour connaître la liste des options disponibles (surtout celles spécifiques)

mardi 5 mai 2009

Page 60: Zsh Rmll

Quelques exemples : configure

Lorsque l’on compile un logiciel à partir des sources, s’il utilise les autotools, cela commence généralement par un ./configure --help | less pour connaître la liste des options disponibles (surtout celles spécifiques)

Avec zsh, passez vous de cette étape, utiliser juste ./configure --<tab>

mardi 5 mai 2009

Page 61: Zsh Rmll

Autres exemples

mardi 5 mai 2009

Page 62: Zsh Rmll

Autres exemples

pour la commande man, zsh complète non seulement la liste des pages de manuels, mais aussi la liste des modules perl (documentation en pod)

mardi 5 mai 2009

Page 63: Zsh Rmll

Autres exemples

pour la commande man, zsh complète non seulement la liste des pages de manuels, mais aussi la liste des modules perl (documentation en pod)

pour les options ao/vo de mplayer, la définition de la liste est dynamique

mardi 5 mai 2009

Page 64: Zsh Rmll

Les widgets

mardi 5 mai 2009

Page 65: Zsh Rmll

Les widgets

Quelques exemples de fonctions réutilisables

mardi 5 mai 2009

Page 66: Zsh Rmll

Les widgets

Quelques exemples de fonctions réutilisables

_users _groups

mardi 5 mai 2009

Page 67: Zsh Rmll

Les widgets

Quelques exemples de fonctions réutilisables

_users _groups

_hosts

mardi 5 mai 2009

Page 68: Zsh Rmll

Les widgets

Quelques exemples de fonctions réutilisables

_users _groups

_hosts

_services

mardi 5 mai 2009

Page 69: Zsh Rmll

approximate / correct

mardi 5 mai 2009

Page 70: Zsh Rmll

approximate / correct

zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe

mardi 5 mai 2009

Page 71: Zsh Rmll

approximate / correct

zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe

Erreur de casse (cd /Etc)

mardi 5 mai 2009

Page 72: Zsh Rmll

approximate / correct

zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe

Erreur de casse (cd /Etc)

L’inversion de caractères (banane, abnane)

mardi 5 mai 2009

Page 73: Zsh Rmll

approximate / correct

zsh dispose de fonctionnalités pour corriger automatiquement des erreurs de frappe

Erreur de casse (cd /Etc)

L’inversion de caractères (banane, abnane)

Des caractères manquant, en trop (ricard, richard)

mardi 5 mai 2009

Page 74: Zsh Rmll

les zstyle

Les zstyle permettent de contrôler de manière très fine le comportement de la complétion

Permet de définir des comportements à plusieurs niveaux

global

par commande

par argument

mardi 5 mai 2009

Page 75: Zsh Rmll

Exemples de zstyle

mardi 5 mai 2009

Page 76: Zsh Rmll

Exemples de zstyle

zstyle ':completion:*:processes' command 'ps -au$USER'

Commandepour obtenir la liste

des processus

mardi 5 mai 2009

Page 77: Zsh Rmll

Exemples de zstyle

zstyle ':completion:*:processes' command 'ps -au$USER'

zstyle ':completion:*' use-cache on

Active le cache

mardi 5 mai 2009

Page 78: Zsh Rmll

Exemples de zstyle

zstyle ':completion:*:processes' command 'ps -au$USER'

zstyle ':completion:*' use-cache on

zstyle ':completion:*' ignore-parents parent pwd

Ignore le répertoire parent

mardi 5 mai 2009

Page 79: Zsh Rmll

Exemples de zstyle

zstyle ':completion:*:processes' command 'ps -au$USER'

zstyle ':completion:*' use-cache on

zstyle ':completion:*' ignore-parents parent pwd

zstyle ':completion:*:*:vi*:*' file-sort modification

Utilise l’heure de modification comme critère de tri pour vi

Dans ce dernier cas, le comportement est surchargé pour une commande !

mardi 5 mai 2009

Page 80: Zsh Rmll

Étendre la complétion

mardi 5 mai 2009

Page 81: Zsh Rmll

Étendre la complétion

Comportement par défaut

mardi 5 mai 2009

Page 82: Zsh Rmll

Étendre la complétion

Comportement par défaut

compdef

mardi 5 mai 2009

Page 83: Zsh Rmll

Étendre la complétion

Comportement par défaut

compdef

zstyle

mardi 5 mai 2009

Page 84: Zsh Rmll

La complétion

mardi 5 mai 2009

Page 85: Zsh Rmll

La complétion

Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé

mardi 5 mai 2009

Page 86: Zsh Rmll

La complétion

Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé

Mais il est possible de surcharger ce comportement

mardi 5 mai 2009

Page 87: Zsh Rmll

La complétion

Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé

Mais il est possible de surcharger ce comportement

Un script maison attendant un nom d’hôte en argument

mardi 5 mai 2009

Page 88: Zsh Rmll

La complétion

Pour une application dont il n’existe pas de fonction de complétion, le widget _files est utilisé

Mais il est possible de surcharger ce comportement

Un script maison attendant un nom d’hôte en argument

% compdef _hosts myscriptmardi 5 mai 2009

Page 89: Zsh Rmll

La complétion

mardi 5 mai 2009

Page 90: Zsh Rmll

La complétion

Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers

mardi 5 mai 2009

Page 91: Zsh Rmll

La complétion

Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers

zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'

mardi 5 mai 2009

Page 92: Zsh Rmll

La complétion

Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers

zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'

zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'

mardi 5 mai 2009

Page 93: Zsh Rmll

La complétion

Il est également possible de spécifier un pattern matching afin de limiter la complétion sur les fichiers

zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'

zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'

zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'

mardi 5 mai 2009

Page 94: Zsh Rmll

ZLE, zsh line editor

mardi 5 mai 2009

Page 95: Zsh Rmll

ZLE, zsh line editor

Plusieurs modes possibles

mardi 5 mai 2009

Page 96: Zsh Rmll

ZLE, zsh line editor

Plusieurs modes possibles

emacs

mardi 5 mai 2009

Page 97: Zsh Rmll

ZLE, zsh line editor

Plusieurs modes possibles

emacs

vi (mode commande, mode insert)

mardi 5 mai 2009

Page 98: Zsh Rmll

ZLE, zsh line editor

Plusieurs modes possibles

emacs

vi (mode commande, mode insert)

Extensible en écrivant ses propres widgets

mardi 5 mai 2009

Page 99: Zsh Rmll

Quelques bindkeys utiles

mardi 5 mai 2009

Page 100: Zsh Rmll

Quelques bindkeys utiles

history-search-{back|for}ward

Permet de parcourir les anciens appels à une commande donnée

mardi 5 mai 2009

Page 101: Zsh Rmll

Quelques bindkeys utiles

history-search-{back|for}ward

insert-last-word

Insère le dernier mot de la saisie

mardi 5 mai 2009

Page 102: Zsh Rmll

Quelques bindkeys utiles

history-search-{back|for}ward

insert-last-word

push-line

Temporise la commande en cours

mardi 5 mai 2009

Page 103: Zsh Rmll

Étendre les bindkeys

mardi 5 mai 2009

Page 104: Zsh Rmll

Étendre les bindkeys

Création d’un bindkey (vi):

mardi 5 mai 2009

Page 105: Zsh Rmll

Étendre les bindkeys

Création d’un bindkey (vi): bindkey -s '((' '()\ei'

mardi 5 mai 2009

Page 106: Zsh Rmll

Étendre les bindkeys

Création d’un bindkey (vi):

Permet de rajouter automatiquement la parenthèse fermante et de reculer d’un caractère

bindkey -s '((' '()\ei'

mardi 5 mai 2009

Page 107: Zsh Rmll

D’autres fonctionnalités

mardi 5 mai 2009

Page 108: Zsh Rmll

D’autres fonctionnalités

autopushd

mardi 5 mai 2009

Page 109: Zsh Rmll

D’autres fonctionnalités

autopushd

zmv

mardi 5 mai 2009

Page 110: Zsh Rmll

D’autres fonctionnalités

autopushd

zmv

alias

mardi 5 mai 2009

Page 111: Zsh Rmll

D’autres fonctionnalités

autopushd

zmv

alias

historique partagé

mardi 5 mai 2009

Page 112: Zsh Rmll

autopushd

autopushd est une option permettant la mise en pile (stack) des n derniers répertoires visités dans la session

permet de faire cd -<tab/numéro> pour retourner rapidement un ancien répertoire

mardi 5 mai 2009

Page 113: Zsh Rmll

zmv

mardi 5 mai 2009

Page 114: Zsh Rmll

zmv

Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle

for file in **/*(#i).ogg ; do

mv $file ${(C)$file:r}.ogg ;

done

Puis autre boucle pour gérer les répertoires

mardi 5 mai 2009

Page 115: Zsh Rmll

zmv

Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle

mardi 5 mai 2009

Page 116: Zsh Rmll

zmv

Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle

mardi 5 mai 2009

Page 117: Zsh Rmll

zmv

Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle

mardi 5 mai 2009

Page 118: Zsh Rmll

zmv

Lorsque que vous devez renommer plusieurs fichiers, la manière classique est d’utiliser une boucle

Maintenant, pensez zmv !% zmv '(*) - (*) - (*).ogg' '$1/$2/$1 - $2 - $3.ogg'

mardi 5 mai 2009

Page 119: Zsh Rmll

Les alias

mardi 5 mai 2009

Page 120: Zsh Rmll

Les alias

Alias de suffixe

mardi 5 mai 2009

Page 121: Zsh Rmll

Les alias

Alias de suffixe

alias -s pem=”openssl x509 -noout -text -in”

mardi 5 mai 2009

Page 122: Zsh Rmll

Les alias

Alias de suffixe

alias -s pem=”openssl x509 -noout -text -in”

alias -s log=”tail -f”

mardi 5 mai 2009

Page 123: Zsh Rmll

Les alias

Alias de suffixe

alias -s pem=”openssl x509 -noout -text -in”

alias -s log=”tail -f”

Alias globaux

mardi 5 mai 2009

Page 124: Zsh Rmll

Les alias

Alias de suffixe

alias -s pem=”openssl x509 -noout -text -in”

alias -s log=”tail -f”

Alias globaux

alias -g L=”| less”

mardi 5 mai 2009

Page 125: Zsh Rmll

Historique partagé

Toutes les sessions partagent le même fichier d’historique

Très utile pour coupler avec la recherche d’historique !

mardi 5 mai 2009