screen

screen n’est pas facile à décrire. En gros, il permet de créer une couche entre le système d’exploitation (le kernel) et une ou plusieurs applications. Il permet d’activer plusieurs applications dans une seule fenêtre d’affichage. Il est souvent utilisé avec les applications textuelles pour les détacher/attacher de leur écran.

En général, screen n’est pas installé par défaut mais il s’installe facilement avec votre gestionnaire de paquets.

Démarrage de screen

Le démarrage est simple:

screen prog

si prog n’est pas spécifié, un shell (bash) sera démarré

Détacher une tâche

Si prog s’exécute et est visible dans la fenêtre screen, on peut les séparer (détacher). La fenêtre gérée par screen se fermera automatiquement. Il y a deux façons:

  • dans la fenêtre de l’application (gérée par screen), presser ^a suivi de d. Le préfixe ^a est requis pour éviter que le d soit traité par l’application.
  • dans une fenêtre bash: screen -d

Reprendre une tâche

Si prog est une application détachée de sa fenêtre screen, on peut la ré-associer avec  l’une des 2 façons suivantes:

  • dans une fenêtre bash: screen -r nom
  • dans une fenêtre screen: ^a r nom

Dans les 2 cas, nom est le nom donné par screen à chacune des applications qu’il gère. Il n’est pas nécessaire de spécifier le nom au complet. Il suffit de spécifier les premiers caractères du nom. Si screen ne gère qu’une seule application, le nom est facultatif. Pour connaitre le nom des applications gérées, on utilise screen -list (dans une fenêtre bash).

Exemple (2 sessions vi dans la même fenêtre):

screen vi abc^ad         #dans la fenêtre viscreen vi xyz^adscreen -listThere are screens on:
     15780.pts-6.local4 (Detached)
     13865.pts-6.local4 (Detached)
2 Sockets in /home/u/tmp.
screen -r 13   # récupérer la session d'édition de abc

Conclusion

screen était populaire à l’époque où il n’y avait pas de gestionnaire de fenêtres. Aujourd’hui, on l’utilise sur des équipements à ressources limitées ou pour éviter d’interrompre une application s’il y a déconnexion de son terminal.

screen peut gérer plusieurs fenêtres. Une application peut être ouverte dans une fenêtre puis réactivée dans une autre. Pour plus de détails: man screen

 

Survivre à une déconnexion

Lorsqu’on démarre une tâche sur un ordinateur distant, il faut s’assurer que la tâche est terminée avant de rompre la connexion. En effet, le comportement de Linux dans le cas où une communication est rompue est d’envoyer un signal SIGHUP aux programmes qui dépendent de cette connexion. Si rien n’a été fait pour le contrer, le comportement par défaut est d’arrêter brusquement la tâche.

Déléguer une tâche longue à une autre machine est courant dans le monde Unix/Linux. Mais il faut prendre certaines précautions pour éviter que notre tâche qui s’exécute sur le serveur ne soit avortée par le fait qu’on déconnecte notre portable pour l’amener à la maison.

Vérifions comment notre appli réagit à un signal SIGHUP:

kill -SIGHUP $(pidof appli)

ou

pkill -SIGHUP appli

Si l’application avorte et que ce comportement ne nous convient pas, on pourra utiliser l’une des approches suivantes:

Ajouter le traitement du SIGHUP à notre application

S’il s’agit d’un programme qu’on a écrit ou d’un logiciel libre dont on a le code source, il est facile d’ajouter du code pour traiter le signal SIGHUP.

Demander à bash d’ignorer le signal

Si la solution précédente n’est pas possible, on peut demander à bash d’ignorer le signal SIGHUP:

trap '' SIGHUP
./appli args
trap SIGHUP    # reprendre le comportement par défaut

Exemple d’un script qui ignore les SIGHUP (pour la durée du script):

trap '' SIGHUP
./appli args

On peut aussi utiliser le programme nohup qui déconnecte l’appli de ses canaux standards et envoie toute sortie vers le fichier nohup.out

nohup appli args

screen

screen a été conçu pour gérer plusieurs applications pour une même connexion. Un effet collatéral est que screen créée un lien virtuel entre une application et ses canaux standards (STDIN, STDOUT, STDERR).  Par conséquent, une déconnexion du lien de communication n’est pas perçue par l’application. La tâche continue à s’exécuter en arrière-plan et lorsqu’on rétablit la connexion, on peut refaire le lien avec l’application.

tmux

tmux est semblable à screen et réalise les mêmes fonctions. Sa principale différence est qu’il est de facture plus moderne. tmux se définit comme ‘multiplexeur de terminaux’. Il reprend les concepts de screen mais ajoute un gestionnaire de fenêtre qui partage la fenêtre en zones rectangulaires.

awesome

 

Aide-mémoire: commandes SED

sed est un éditeur de texte conçu pour automatiser les opérations d’édition des fichiers de texte. Il est principalement utilisé dans des scripts et, par conséquent, il est surtout utilisé par les programmeurs. Il ne faudrait donc pas se surprendre qu’il ne soit ni interactif ni convivial. Les scripts SED sont très performants mais ils deviennent rapidement difficiles à lire. S’ils deviennent trop complexes, il faudrait penser à utiliser un autre outil (AWK, Python, etc). Néanmoins, on le retrouve partout. Parce qu’il est fiable et efficace, il est utilisé partout où les besoins d’édition de texte sont simples mais dépassent les capacités de bash. Il est installé, par défaut, par chacune des distributions.

sed est souvent utilisé avec 1 ou 2 redirections. Si besoin est, vous pouvez rafraichir vos connaissance ici.

Ligne de commande

Parce qu’il n’est pas interactif, les commandes d’édition sont spécifiées sur la ligne de commande ou dans un fichier. Les formes générales de la commande sont:

  • sed  [options] commande fichierTexte
  • sed  [options] -f fichierCommandes fichierTexte

où commande est une commande d’édition (généralement délimitée par des apostrophes ou guillemets).  S’il y a plus d’une commande d’édition, on utilise -e pour chacune des commandes supplémentaires. Le fichier d’entrée est le second paramètre ou une redirection d’entrée. La sortie est le canal 2 (stdout) ou une redirection.

Les options peuvent être:

-e : utiliser un -e pour chaque commande supplémentaire
-f : fichier de commandes-i : envoyer le résultat dans le fichier d'entrée

Trois exemples indépendants:

sed '2d' fichierTexte # effacer la 2ìème ligne du texte
monProg | sed '2d' > fichierSortie
sed -f fichierCommandes fichierTexte > fichierSortie

Syntaxe d’une commande

condition-de-sélection  [!] opération [arguments]

où condition-de-sélection peut être:

la commande s’applique à toutes les lignes
n la commande s’applique à la ligne n seulement.
n,m la commande s’applique aux lignes n à m (inclusivement). Ce type de sélection n’est pas possibles pour les commandes a, i, r, q et =
/exprReg/ la commande s’applique à chacune des lignes où l’expression régulière est vraie
/expr1/, /expr2/ la commande s’applique à chacune des lignes des blocs débutant par expr1 et se terminant par expr2

$ peut être utilisé pour spécifier la dernière ligne.

si la condition  est suivie d’un !, alors la commande ne s’appliquera qu’aux lignes où la condition-de-sélection est fausse.

et l’opération (et ses arguments) peut être:

cmd description options exemples
a insérer ligne vide sous le curseur 1a
d éliminer la ligne du curseur 1d
i insérer ligne vide au-dessus du curseur 1,3i
s remplacer g: répéter
n: nième fois
s/A/B/
s/A/B/g
s/A/B/2
y/// conversion de caractères (un pour un) y/ab/AB/
= afficher numéro de la ligne /proc/=
{ …
… }
grouper plusieurs commandes 1,3{s/A/B/
s/C/D/}

Exemple

Vous décidez de combiner deux sites WEB pour n’en faire qu’un seul. Le 1er site utilisait <H2> pour les titres de pages alors que le second utilisait <H3>. Pour uniformiser,  vous voulez convertir à <H3> tous les <H2> de toutes les pages du 1er site.

for F in *htm
do
  sed -i -e 's/<H2/<H3/g' $F
done

Évidemment, cet exemple ignore le fait qu’il y a aussi des </H qui doivent être convertis. L’oblique étant utilisée comme séparateur par défaut par la commande s, il faudra donc complexifier un peu:

for F in *htm
do
  sed -i -e 's/<\/H2/<\/H3/g' $F
done

Le symbole \ indique à sed que le prochain caractère perd sa signification particulière. Une telle syntaxe peut devenir difficile à lire et il est plus simple de demander à sed de changer son délimiteur (le 1er caractère qui suit la commande s devient le délimiteur).

for F in *htm
do
  sed -i -e 's|</H2|</H3|g' $F
done

La solution finale, avec un peu d’embellissement,  devient:

for F in *htm; do
  sed -i \
    -e 's|<H2|<H3|g' \
    -e 's|</H2|</H3|g' \
    -e 's|<h2|<h3|g' \
    -e 's|</h2|</h3|g' \
    $F
done

 

Unicode et UTF

On ne le croirait pas à priori mais le traitement des caractères par l’ordinateur est devenu un sujet complexe. Pour comprendre, commençons par un peu d’histoire.

Les ordinateurs ne comprennent que les nombres. Pour leur permettre de traiter les caractères, il a fallu associer un nombre à chaque caractère. Il y a eu quelques tentatives (codes de 5 bits, de 7 bits, de 8 bits, de 9 bits, etc). 2 codes ont survécu à cette première époque; ce sont l’ASCII (code de 7 bits) et l’EBCDIC (code de 8 bits, principalement utilisé par IBM). Le texte qui suit ne traitera pas de l’EBCDIC.

N’ayant que 7 bits, l’ASCII ne permet que 128 combinaisons. Il inclut 32 codes de contrôle, 52 caractères alphabétiques (majuscules et minuscules), 10 chiffres et des caractères de ponctuation. Étant d’origine états-unienne, ce code ne laissait aucune place aux caractères particuliers des autres langages. C’était frustrant.

Puis vint le PC (circa 1981). IBM  introduit les codepage. Ce sont des codes de 8 bits où les 128 premiers sont ceux de l’ASCII et les 128 autres sont disponibles pour les autres alphabets. Des compromis étaient nécessaires puisque 256 combinaisons ne sont pas suffisantes pour tous les caractères internationaux. Plus d’une centaine de codepage ont été créés, très souvent incompatibles. Par exemple, le é avait la valeur 130 dans le CP437, 233 dans le CP1252 et 142 dans le Mac-Roman de Apple. Il fallait choisir le codepage en fonction de l’ensemble des caractères à utiliser.

C’était la pagaille.

Vers 1978, Xerox proposa de créer un jeu de caractères universel qui portera plus tard le nom d’Unicode. La 1ère version arriva vers 2004 et nous en sommes aujourd’hui à sa 10ième version. Unicode (aussi connu sous le nom de ISO-10646), contient maintenant 136,755 caractères et symboles. Le problème est qu’il faut au moins 3 octets pour représenter autant de combinaisons. C’était trop!

L’UTF fut développé pour compresser Unicode. Le principe fondamental d’UTF est que les caractères les plus communs se représentent avec un seul octet et que les autres caractères sont représentés par 2, 3 ou 4 octets.

Plusieurs versions d UTF ont été développées:

  • UTF-8 utilise 1 à 4 octets
  • UTF-16 utilise 2 ou 4 octets.  (note1)
  • UTF-32 utilise 4 octets

Est-ce qu’Unicode solutionne tous les problèmes. Pas vraiment!

  • Un fichier ou flux UTF peut débuter par une empreinte (BOM) qui identifie quelle version d’UTF est utilisée et l’ordre des octets (big-endian ou little-endian). Malheureusement, cette empreinte n’est pas obligatoire.
  • Microsoft utilise une empreinte qui leur est propre.
  • La majorité des fichiers existants utilisent un codepage qui n’est pas inscrit dans le fichier.

Détecter quel encodage est utilisé dans un fichier n’est pas évident et plusieurs algorithmes ont été développés pour ce faire.  Mais aucun n’est parfait.

Linux fournit quelques outils pour faire ce travail:

  • La commande file identifie les encodages Unicode mais ne peut rien pour les codepage.
file fichier8
fichier8: UTF-8 Unicode text
  • La commande iconv convertit d’un encodage vers un autre (UTF-8 par défaut). Elle retourne une erreur si le fichier contient des caractères qui sont invalides. Plusieurs centaines d’encodages et codepage sont reconnus. Cette approche permet de vérifier une hypothèse mais pas d’identifier l’encodage.
iconv -f utf8 fichier8 > /dev/null ;; echo OUIOUI
if iconv -f utf16 fichier8 >/dev/null 2>&1; then echo OUI; else echo NON; fi
NON
  • Tous les Linux récents utilisent UTF-8 par défaut. La commande grep permet de repérer les textes qui ont des fautes d’encodage UTF-8.
grep -avx  '.*'  fichier

listera toutes les lignes du fichier qui contiennent un encodage invalide en UTF-8.

Note1: S’il y a une empreinte en début de fichier, UTF-16 devient UTF-16BE (big-endian) ou UTF-16LE (little-endian)

Références

Aide-mémoire: commandes VIM

vim est le remplaçant du vénérable vi. Cet éditeur a été conçu à l’époque où il n’y avait ni souris ni touches de fonction (Fn). Il est encore populaire car c’est l’outil qui vous permettra d’être le plus performant dans vos tâches courantes d’édition de texte. Sa principale caractéristiques est que vos doigts restent toujours sur le clavier, pour l’insertion et les commandes.

Pour utiliser vi, il faut savoir que son opération repose sur un mode. Le mode peut être:

  • mode de commande d’édition, navigation,  recherche,  etc)
  • mode d’insertion de texte
  • mode de commande de gestion ( fichier, aide, etc)

Changements de mode

Esc Active le mode de commande. N’a pas d’effet si on n’est pas en mode d’édition
a-i-o-s Active le mode d’édition. Voir les commandes d’insertion dans la section suivante.
: Active le mode de commande de gestion.

Activation du mode d’édition

a Insère du texte après le curseur.
A Insère du texte à la fin de la ligne.
i Insère du texte avant le curseur.
I Insère du texte au début de la ligne.
o Insère une nouvelle ligne sous la ligne courante.
O Insère une nouvelle ligne au dessus de la ligne courante.
s Efface n caractères au curseur et active le mode d’édition.
S Efface n lignes au curseur et active le mode d’édition.

Sauvegarde et sortie

:q Quitter (s’il n’y a aucun changement)
:q! ou :cq ou ZQ Quitter sans sauvegarder.
:w Sauvegarder.
:w Enregistrer sous …
:wq Sauvegarder et quitter.
ZZ Sauvegarder (s’il y a eu changement) et quitter.

Navigation:
le facteur de répétition [n] est optionnel. Par défaut, il vaut 1.

[n]h Déplace le curseur de n caractères vers la gauche.
[n]j Déplace le curseur de n lignes vers le bas.
[n]k Déplace le curseur de n lignes vers le haut.
[n]l Déplace le curseur de n caractères vers la droite.
0 (zéro) Déplace le curseur vers le début de la ligne.
$ Déplace le curseur vers la fin de la ligne.
^ Déplace le curseur vers le 1er caractère non-blanc de la ligne.
[n]w Déplace le curseur vers le début du prochain mot.
[n]W Déplace le curseur vers le début du prochain mot.
La nuance avec w est le séparateur de mots
[n]b Déplace le curseur vers le début du mot précédent.
[n]B Déplace le curseur vers le début du mot précédent.
La nuance avec b est le séparateur de mots
[n]( Déplace le curseur vers le début de la phrase précédente.
[n]) Déplace le curseur vers le début de la phrase suivante.
[n]{ Déplace le curseur vers le début de la phrase précédente.
[n]} Déplace le curseur vers le début de la phrase suivante.
[n]G Déplace le curseur vers la fin du fichier.
[n]gg Déplace le curseur vers le début du fichier.

Effacement de texte: le facteur de répétition [n] est optionnel. Par défaut, il vaut 1.

[n]x Efface le caractère au curseur.
[n]dd Efface n lignes à partir du curseur.
[n]dw Efface n mots suivants.
d0 Efface du début de ligne jusqu’au curseur.
d$ Efface du curseur jusqu’à la fin de ligne.
d( Efface du curseur jusqu’au début de phrase.
d) Efface du curseur jusqu’à la fin de phrase.
dgg Efface du curseur jusqu’au début de fichier.
dG Efface du curseur jusqu’à la fin de fichier.

Recherche et remplacement de texte

/txt Recherche txt vers l’avant.
?txt Recherche txt vers l’arrière.
/ ou n Aller vers l’occurrence suivante.
? ou N Aller vers l’occurrence précédente.
rcar ou r{txt} Remplacer le caractère au curseur par un ou des caractères.
R Remplacer les caractères à partir du curseur, jusqu’en fin de ligne. Terminer par Esc.
:s/txt1/txt2/ Remplacer txt1 par txt2 dans la ligne courante, 1 fois.
:s/t1/t2/opts Remplacer t1 par t2.  opts peut être:
g: toutes les occurrences
c: demander confirmation à chaque remplacement

Copier/coller
Le copier/coller se fait par l’intermédiaire d’un tampon . On peut utiliser plus d’un tampon. Chacune des commandes qui suivent peut être préfixée par « x où x est l’identificateur du tampon. «  » est le tampon par défaut. « + est le tampon-système (utilisé par les autres applications).

[n]yy ou [n]Y Copier n lignes.
[n]yw Copier n mots.
y$ Copier du curseur à la fin de ligne.
p Coller après le curseur.
P Coller avant le curseur.

Opérations sur blocs

v Sélection de caractères. Déplacer le curseur jusqu’à la fin du bloc.
V Sélection de lignes. Déplacer le curseur jusqu’à la fin du bloc.
V Sélection d’une zone rectangulaire. Déplacer le curseur jusqu’à la fin du bloc.
d Effacer le bloc sélectionné.
c Effacer le bloc sélectionné et activer le mode Insertion.
y Copier le bloc sélectionné. Utiliser y ou Y pour coller.
~ Transformer les minuscules en majuscules et vice-versa.
> Indenter vers la droite (introduire des tab).
< Indenter vers la gauche.
!prog Traiter le bloc avec un prog externe (par exemple: sort.

Repères
Très utiles lorsqu’on édite un long fichier.

mx Création du repère x.
`x Aller au repère x.
:marks Lister les repères créés.

Annulation

u Annulation de la dernière commande.
Ctrl+r Reprendre la commande annulée.

Onglets

:tabnew Crée un nouvel onglet
:tabnew f Ouvre le fichier f dans un nouvel onglet
:tabn Active l’onglet suivant
:tabp Active l’onglet précédent
:tabm n Déplace l’onglet courant vers la position n.
Les positions se numérotent à partir de 0
:tabdo cmd Exécute une commande dans chacun des onglets.
Utile pour effectuer un remplacement global.

Préférences
On peut régler les préférences dans vim (ou modifier le fichier ~/.viminfo).
Les exemples qui suivent ne sont qu’un aperçu. Il y en a trop pour tout couvrir.

:set tabstop=4 Règle la largeur d’indentation.
:set showcmd Affiche la commande incomplète sur la dernière ligne.
:set noshowcmd Désactive la préférence ci-dessus.

Conclusion
La liste des commandes de vim est beaucoup plus exhaustive que ce qui a été montré ici. Cet aide-mémoire sera utile aux utilisateurs occasionnels de vim.

Références

Redirection

Tous les programmes démarrent avec 3 canaux d’entrée-sorties déjà ouverts. Ce sont:

  • 0 (stdin) : entrée normale, généralement le clavier
  • 1 (stdout): sortie normale, généralement l’écran
  • 2 (stderr): sortie des messages d’erreur, généralement l’écran

bash nous permet de rediriger ces canaux vers les entrée-sorties qui correspondent à nos besoins. Trois caractères spéciaux ( <>| ) sont utilisés. Supposons le programme unProg:

unProg <  fichier   # utiliser un fichier au lieu du clavier
unProg >  fichier   # rediriger la sortie vers un fichier (le vider d'abord)
unProg >> fichier   # rediriger la sortie vers un fichier (ajouter au fichier)
unProg | autreProg  # rediriger la sortie vers un autre programme

Un exemple:

cat fichier | wc -l # afficher le nombre de lignes du fichier

Le programme cat affiche le contenu d’un fichier mais, dans ce cas-ci, sa sortie n’ira pas vers l’écran mais plutôt vers le programme wc -l qui compte le nombre de ligne dans le texte entré. Dans ce cas-ci, l’entrée de wc n’est pas le clavier mais, à cause de la redirection, c’est plutôt la sortie du programme précédent.

La forme générale d’une redirection de fichier est n> ou n< où n est le numéro du canal d’entrée-sortie. Donc:

unProg 2> fichier_erreurs

redirige le canal 2 (les messages d’erreurs) vers un fichier. On aura compris que > (sans numéro de canal) est une abréviation de 1>.

Fusion de flux

La formulation n>&m permet de fusionner le canal n avec le canal m

Donc. la commande unProg > fichierX 2>&1    signifie:

  • envoyer la sortie normale vers fichierX
  • fusionner le canal2 (erreurs) et le canal1 (sortie normale)

Notez que l’évaluation se fait de gauche à droite et que, par conséquent, la commande unProg  2>&1  >fichierX ne dirige pas les messages d’erreur vers fichierX

Autres exemples:

prog 1> fich1 2>fich2 # rediriger les canaux 1 et 2
prog 2> /dev/null     # diriger la sortie d'erreur vers la poubelle

Note: il ne faut pas insérer d’espace entre les caractères de n> ou n>&m

Dans le cas d’une redirection vers un programme, on ne peut pas spécifier les canaux; c’est toujours 1 vers 0 (sortie normale vers l’entrée). Si c’est vraiment nécessaire, il y a, bien sur, une façon de diriger 2 (les erreurs) vers l’entrée:

unProg 3>&1   1>&2   2>&3 | autreProg  # on permute 1 et 2

Sauvegarder vos mots-de-passe dans vim

Il est fortement recommandé de ne jamais réutiliser le même mot de passe sur deux sites différents. Suite au vol d’un fichier contenants 160 millions de mots de passe du site LinkedIn en 2012, plusieurs personnes ont connu des problèmes liés à de la fraude ou de l’usurpation d’identité. En effet, si le mot de passe utilisé sur LinkedIn était aussi utilisé sur Paypal, eBay ou une banque alors le fraudeur pouvait facilement puiser dans votre compte. Mais si on utilise un mot de passe différent pour chaque site, notre liste deviendra longue très rapidement.

Une longue liste de mots de passe crée des problèmes:

  • on n’arrive pas à tous les mémoriser
  • il n’y a pas assez de place sur l’écran pour y coller tous les post-it  🙂

D’où l’apparition de logiciels de stockage de mots de passe. Ils sont bien commodes mais ils ne sont pas parfaits. Leur principal défaut est qu’ils sont graphiques et, par conséquent, ils sont plus lourds que nécessaire. En effet, la couleur, les icônes et la décoration n ont aucune utilité pour gérer une liste de mots de passe.

Alors pourquoi ne pas utiliser un éditeur de texte?

J’utilise vim pour stocker mes mots de passe. Il est facile à utiliser,  rapide au démarrage et il permet le chiffrage de son contenu. En plus, il est installé par défaut, peu importe votre distribution. Voyons comment l’utiliser:

Étape 1: création du fichier:

vi -x nom_du_fichier

Un mot de passe vous sera demandé. À vous d’en choisir un qui n’est pas trop facile mais que pourrez mémoriser toute votre vie.

Étape 2: renforcer l’algorithme de chiffrage

Par défaut, l’algorithme de chiffrage est zip et ce chiffrage peut être craqué. Il est très simple de choisir une meilleure méthode de chiffrage:

:set cryptmethod=blowfish2

Vous pouvez alors entrer vos sites et leur mots de passe.

Étape3: sauvegarder

:wq

Par la suite, on accède au fichier avec:

vi nom_du_fichier      # notez que le -x n'est pas requis

et si vous êtes amateur de performance, pourquoi ne pas créer un alias

alias mdp='vi ~/chemin/nom_du_fichier'

que vous déposerez dans le fichier .bash_profile de votre répertoire.

Si vous êtes du genre parano, 2 options supplémentaires peuvent être ajoutées à l’étape2:

:set nobackup
:set nowritebackup

Ces commandes indiquent à vim de ne pas créer des copies de sauvegarde ou temporaire.

Essayez, vous verrez que c’est simple et efficace. Et nul besoin  d’apprendre les commandes de vim.

Note1: les mots de passe LinkedIn ne sont pas les seuls à avoir été divulgués. En 2009, il y a eu intrusion dans le site RockYou.com. Un fichier contenant 32 millions de mots de passe a été dérobé et il est assez facile de consulter ce fichier sur Internet. Vous pouvez même trouver des études sur le contenu de ce fichier; on peut y voir que certains mots de passes sont beaucoup plus populaires que d’autres.

Note2: le chiffrage est une option dans vim. L’option est incluse avec toutes les distributions récentes. Pour s’en assurer, il suffit de faire:

vim  --version | grep cryptv

Si le mot cryptv est précédé d’un +, alors l’option est incluse. Sinon, vous ne l’avez pas.

Note3: si vous aviez un compte LinkedIn en 2012, vous pouvez vérifier si votre mot-de-passe a été volé en consultant le site https://haveibeenpwned.com/

 

Quelques astuces Bash

Même si vous êtes habile pour pianoter sur un clavier, il est possible d’augmenter votre performance en utilisant quelques astuces de bash.

L’auto-complément est évidemment une technique très efficace mais il y a aussi plusieurs astuces d’édition qu’il y a avantage à connaître.

Auto-complément

La touche Tab permet de compléter le mot courant. C’est utile pour les mots longs ou si vous ne vous souvenez pas de l’orthographe exact.

Si le Tab est donné durant le 1er mot, l’expansion du Tab proposera toutes les commandes disponibles qui débutent avec les caractères entrés. S’il n’y en a qu’une, elle s’inscrira dans votre ligne de commande, sinon vous devrez entrer des caractères supplémentaire pour raffiner la sélection.

Si la touche Tab n’est pas dans le 1er mot, alors bash proposera une liste des fichiers du répertoire courant.

L’auto-complément est tellement utile que son concept a été étendu pour le rendre plus intelligent. Mais cette fonctionnalité n’est possible que pour certaines commandes. Pour ces commandes, si le Tab est utilisé ailleurs que dans le 1er mot, alors la recherche sera optimisée en fonction du 1er mot. Par exemple, si vous entrez Tab après man conf, alors bash vous proposera une liste de toutes les pages de manuel des commandes qui débutent par conf.

Nous verrons, dans un autre article, comment on peut ajouter nous-même la fonctionnalité d’auto-complément à une commande quelconque.

Accès à l’historique

Toutes vos lignes de commandes sont mémorisées dans un fichier d’historique. Les touches de flèches verticales vous permettent de vous promener dans l’historique et de récupérer une de ces vieilles commandes. De plus, la combinaison ctrl-r permet de rechercher dans le fichiers d’historique en fonction des caractères que vous entrez.  Un ctrl-r supplémentaire permet d’aller plus loin dans le fichier. Utilisez une touche de flèche horizontale lorsque vous avez la commande désirée ou que vous voulez terminer la recherche. Pour plus de détails.

Mise en commentaire Alt-#

Vous est-il déjà arrivé, en cours d’édition d’une commande, de constater que vous avez un blanc de mémoire? Vous allez alors dans une autre fenêtre (ou un autre onglet) et vous interrogez man. Mais si vous n’avez pas cette autre fenêtre, vous pouvez utiliser l’astuce suivante. Si vous utilisez Alt-# dans votre commande courante, un # sera introduit en début de commande (pour en faire un commentaire) et la commande se terminera sans effet. Après avoir consulté man, la flèche ascendante vous ramène votre commande et il n’y a plus qu’à la compléter et enlever le #.

Rappel du premier mot de la commande précédente

La combinaison Alt-. vous ramène le premier mot de la commande précédente.

Dernier argument !$

Très utile lorsque vous avez à entrer 2 commandes qui se terminent par le même argument. Exemple:

nano chemin/fichier
lp !$

nano est un éditeur de texte et lp est une commande d’impression. L’expansion du !$ récupère le dernier argument de la commande précédente. Vous pouvez obtenir le même résultat en utilisant Esc et . (touche Esc suivie de la touche . )  ou Esc_. Vous pouvez utiliser cette séquence plusieurs fois pour avoir accès au dernier paramètre d’une plus vieille commande.

nième argument

De la même façon qu’avec !$, vous pouvez utiliser !:n pour obtenir le nième argument

Commandes d’édition de la ligne en cours

  • ctrl-a déplace le curseur vers le début de la ligne
  • ctrl-e déplace le curseur vers la fin de la ligne
  • ctrl-t permute le caractère courant avec le précédent (ou les 2 derniers si le curseur est en fin de ligne). C’est très utile.
  • alt-t intervertit 2 mots. Semblable à ctrl-t
  • alt-d supprime le mot (ou portion de mot) après le curseur
  • ctrl-w efface le mot à la gauche du curseur
  • ctrl-u coupe tous les caractères à la gauche du curseur
  • ctrl-k coupe tous les caractères à la droite du curseur
  • ctrl-y ramène les caractères du presse-papier (coupés par ctrl-u ou ctrl-k, etc)
  • ctrl-l efface le contenu de la fenêtre en conservant la ligne courante
  • alt-u met en majuscules le mot (ou portion de mot) qui suit le curseur
  • alt-l met en minuscules le mot (ou portion de mot) qui suit le curseur
  • alt-c met en majuscule la lettre sous le curseur

Autres combinaisons utiles

  • ctrl-c termine le programme en cours
  • ctrl-z met en pause le programme en cours
  • ctrl-l nettoie la fenètre
  • ctrl-s bloque le défilement de texte
  • ctrl-q débloque le défilement de texte
  • ctrl-d signale une fin de fichier. En ligne de commande, il ferme la fenètre

Le presse-papiers du bureau (ne pas confondre avec celui de bash)

  • ctrl-C copier vers le presse-papiers (notez la majuscule qui nécessite Shft)
  • ctrl-V ramener le presse-papiers (notez la majuscule qui nécessite Shft)