Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 5 novembre 2017

Le paquet trash-cli ou comment utiliser la corbeille en ligne de commande

On a tous à un moment ou à un autre supprimé un fichier par erreur sous Linux.

On remédie souvent à cette situation malheureuse par un:

alias rm='rm -i'

Cependant, il existe un moyen de se passer de la confirmation de suppression de la commande rm et cela consiste à utiliser la corbeille en ligne de commande.

Linux propose en effet le paquet trash-cli que l'on installe comme suit:

sudo apt-get install trash-cli

Et pour supprimer un fichier, plutôt que d'utiliser la commande rm:

trash-put Readme.md 

Puis:

trash-put Profiles.zip 

Pour afficher la liste des fichiers présents dans la corbeille:

trash-list 
2017-11-05 16:34:05 /home/user/Profiles.zip
2017-11-05 16:33:51 /home/user/Readme.md

La timestamp affiché étant la date de suppression du fichier.

Supposons maintenant que j'ai supprimé Readme.md par erreur:

user@machine:~$ restore-trash 
   0 2017-11-05 16:34:05 /home/user/Profiles.zip
   1 2017-11-05 16:33:51 /home/user/Readme.md
What file to restore [0..1]: 

Il me suffit alors de sélectionner le numéro du fichier pour que celui-ci soit restauré.

Le paquet trash-cli fournit aussi la commande restore-trash qui permet de rétablir l'intégralité des fichiers placés à la corbeille.

Et on peut maintenant définir:

alias rm='trash-put'

mercredi 18 octobre 2017

Bien utiliser les tableaux en bash: les tableaux associatifs

Dans un billet précédent, on a vu comment bien utiliser les tableaux en bash. Il s'agissait des tableaux indexés dont l'indice est un entier comme dans beaucoup de langages.

Mais Bash permet aussi la définition de tableaux associatifs dans lesquels l'indice est une chaîne de caractères et non plus un entier.

Pour reprendre l'exemple des couleurs:

declare -A colours

colours[black]=noir
colours[red]=rouge
colours[green]=vert

Vous remarquerez le flag -A au lieu de -a utilisé pour le tableau indexé.

Pour lister les valeurs du tableau associatif:

for colour in "${colours[@]}"; do
    echo "$colour"
done
rouge
vert
noir

Maintenant si je veux faire le parcours en partant des clés:

for colour in "${!colours[@]}"; do
    echo "$colour: ${colours[$colour]}"
done

Ce qui donne:

red: rouge
green: vert
black: noir

La syntaxe est donc exactement la même qu'avec les tableaux indexés excepté qu'ici la clé est une chaîne de caractères et que l'utilisation des crochets tient lieu de double quotes: la clé peut donc contenir des espaces.

On peut aussi affecter un tableau en une seule instruction:

data=([joe]=30 [mary]=25)

dimanche 8 octobre 2017

Mise à jour de Debian Stretch: Debian 9.2

La deuxième mise à jour de Debian Stretch a été publiée hier. Avec cette version 9.2, ce sont principalement des failles de sécurité qui ont été corrigées.

La liste détaillée des changements dans Debian 9.2 se trouve ici.

N'ayant pas vu passer de mail concernant Debian Jessie, j'imagine que la version oldstable restera en version 8.9.

mardi 12 septembre 2017

Mate: Raccourcis clavier prédéfinis et personnalisés - Le Bureau

Les raccourcis clavier permettent non seulement de gagner du temps pour faire les opérations les plus fréquentes de notre quotidien, mais aussi évitent d'utiliser la souris souvent cause de troubles musculo squelettiques, comme par exemple le syndrome du canal carpien.

Sous Mate, fork de Gnome 2, ils sont régroupées en 5 catégories nommées comme cela sur Debian Jessie:

  • Bureau
  • Desktop
  • Gestion des fenêtres
  • Raccourcis personnalisés
  • Sound

Ne me demandez pas pourquoi il y a un mix de Français et d'Anglais ni pourquoi on a à la fois la catégorie Bureau et la catégorie Desktop ... Le fait d'installer Linux en Français explique peut-être cela !

On va s'intéresser pour l'instant à ces deux premières catégories et voir quels sont les raccourcis clavier que l'on peut définir ou redéfinir.

Par défaut les raccourcis clavier définis pour le "Bureau" sont les suivants:

  • Alt+F2: Afficher la boite de dialogue "Lancer une application" du tableau de bord
  • Alt+F1: Afficher le menu principal du tableau de bord
  • Impr: Prendre une capture d'écran
  • Alt+Impr: Prendre une capture d'écran de la fenêtre
  • Desactivé: Lancer un terminal

Première chose, aucun raccourci n'est défini pour lancer un terminal ... On va donc en définir un et aussi changer le premier raccourci pour être plus cohérent avec ce que l'on fera ensuite. Cela nous donne:

  • Ctrl+Alt+R: Afficher la boite de dialogue "Lancer une application" du tableau de bord
  • Alt+F1: Afficher le menu principal du tableau de bord
  • Impr: Prendre une capture d'écran
  • Alt+Impr: Prendre une capture d'écran de la fenêtre
  • Ctrl+Alt+T: Lancer un terminal

Maintenant, la catégorie "Desktop" qui comporte plus de raccourcis:

  • Désactivé: Lancer le navigateur d'aide
  • Calculator: Lancer la calculatrice
  • Mail: Lancer le logiciel de messagerie
  • WWW: Lancer le navigateur Web
  • Désactivé: Déconnexion
  • Ctrl+Alt+Suppr: Eteindre
  • Ctrl+Alt+L: Verrouiller l'écran
  • Explorer: Dossier personnel
  • Search: Rechercher

Comme on peut le voir, beaucoup de raccourcis sont soit désactivés soit définis sur les touches "Explorer", "Search" ou "WWW" que l'on cherche parfois lontemps sur certains claviers ... On va donc les redéfinr comme suit:

  • F1: Lancer le navigateur d'aide
  • Ctrl+Alt+C: Lancer la calculatrice
  • Désactivé: Lancer le logiciel de messagerie
  • Ctrl+Alt+W: Lancer le navigateur Web
  • Désactivé: Déconnexion
  • Ctrl+Alt+Suppr: Eteindre
  • Ctrl+Alt+L: Verrouiller l'écran
  • Ctrl+Alt+F: Dossier personnel
  • Ctrl+Alt+S: Rechercher

Vous le voyez, la plupart des raccourcis sont définis à base de Ctrl+Alt, on aurait pu utiliser aussi la touche Mod4 (celle qui à un symbole "Windows") à la place. Ces raccourcis n'entrent pas en conflit avec ceux définis dans IntelliJ Idea, du moins si on utilise le KeyMap d'Eclipse !

On verra par la suite les raccourcis pour la gestion des fenêtres ainsi que quelques raccourcis clavier personnalisés.

mardi 15 août 2017

Utilisation des alias Bash en mode interactif ou non

Avec Bash, les alias sont définis dans le fichier .bashrc ou plus proprement dans le fichier .bash_aliases qui normalement est chargé depuis .bashrc comme suit:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Si j'ai défini:

alias ll='ls -l

Alias en mode interactif

La commande ll donnera le résultat suivant:

user@machine:~$ ll
total 60
drwxr-xr-x 2 user user  4096 juil. 23 17:03 bin
drwxr-xr-x 2 user user  4096 août   3 21:41 Bureau
drwxr-xr-x 6 user user  4096 juil.  9 18:00 Documents
drwxr-xr-x 2 user user  4096 avril 29 14:20 Enregistrements
drwxr-xr-x 4 user user  4096 juin  14 07:39 Images
drwxr-xr-x 2 user user  4096 nov.   9  2016 Modèles
drwxr-xr-x 2 user user  4096 nov.  23  2016 Musique
drwxr-xr-x 9 user user  4096 juin  13 08:51 Programs
drwxr-xr-x 2 user user  4096 nov.   9  2016 Public
drwxr-xr-x 8 user user  4096 juin   4 07:25 Sources
drwxr-xr-x 6 user user 12288 août   2 07:59 Téléchargements
drwxr-xr-x 7 user user  4096 juin   5 06:31 Vidéos
drwxr-xr-x 9 user user  4096 juin  30 19:32 VirtualBox VMs

Expansion des alias

C'est normal me direz-vous. En fait, l'alias ll qui a été défini est utilisable parce que je suis dans un Shell interactif et que par défaut Bash autorise l'expansion des alias dans un Shell interactif.

On peut s'en convaincre en désactivant cette option:

user@machine:~$ shopt -u expand_aliases
user@machine:~$ ll
bash: ll : commande introuvable
user@machine:~$ alias
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -l'
alias ls='ls --color=auto'
alias rm='rm -i'

Les alias sont définis, ils existent mais ne sont pas utilisables pour autant !

Alias en mode non interactif

En mode non interactif, c'est à dire dans un script Shell lançé sans l'option -i, les choses sont différentes.

Première différence, le script .bash_aliases n'est pas chargé puisque .bashrc ne l'est pas. Ah bon ?

Il suffit de regarder le début du fichier .bashrc pour s'en convaincre:

user@machine:~$ more .bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Vos alias habituels ne seront donc pas connus dans les scripts.

C'est en fait assez heureux si l'on considère les alias couramment définis sur les commandes rm et cp avec une demande de confirmation: dans un script mieux vaut ne pas avoir à répondre à des questions !

Deuxième différence, l'expansion des alias n'est pas activée par défaut dans un Shell non interactif.

Considérons le script suivant:

#!/bin/bash

alias ll='ls -l'
alias
ll
user@machine:~$ alias.sh
alias ll='ls -l'
/home/user/alias.sh: ligne 5: ll : commande introuvable

L'alias défini dans le script lui même n'est pas utilisable !!!

En revanche si j'ajoute en début de script la ligne suivante:

shopt -s expand_aliases

mon alias est connu depuis le script. On pensera donc à ajouter cette commande, avant ou après la définition des alias, dans les scripts les utilisant.

Et pour afficher toutes les options actives de Bash:

shopt -s

- page 1 de 18