Exile on Keyboard St. - Blog sur Linux et Debian

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

vendredi 9 juin 2017

Complétion bash et utilisateur root

La complétion bash nous facilite bien la vie au quotidien puisqu'elle nous aide dans la saisie des options et paramètres des lignes de commandes sans avoir besoin de consulter les man pages.

Mais est t'elle toujours activée ?

J'ai fait le test avec Debian Stretch mais les résultats sont les mêmes avec Debian Jessie.

Lorsque j'utilise un utilisateur non root, la complétion bash est activée que j'utilise un Shell de login (avec Ctrl Alt F1) ou un Shell normal.

Si je tappe apt-get suivi de la touche TAB:

debian@stretch:~$ apt-get 
autoclean        changelog        dist-upgrade     install          source
autoremove       check            download         purge            update
build-dep        clean            dselect-upgrade  remove           upgrade

bash me propose bien la complétion qui convient à la commande apt-get.

Si maintenant je me connecte avec root, j'obtiens le résultat suivant:

debian@stretch:~$ su
Mot de passe : 
root@stretch:/home/debian# apt-get 
.bash_history         .dmrc                 .local/               Téléchargements/
.bash_logout          Documents/            Modèles/              Vidéos/
.bashrc               .gnupg/               Musique/              .Xauthority
Bureau/               .ICEauthority         .profile              .xsession-errors
.config/              Images/               Public/               .xsession-errors.old

Avec l'utilisateur "normal", ici debian, cela fonctionne car le fichier .bashrc par défaut de l'utilisateur se termine comme ceci:

debian@stretch:~$ tail .bashrc 
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

ce qui n'est pas le cas pour l'utilisateur root:

root@stretch:/home/debian# cat /root/.bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

Cette section "enable bash completion in interactive shells" qui n'existe pas dans le fichier /root/.bashrc est bien présente dans le fichier /etc/bash.bashrc mais elle y est commentée:

root@stretch:/home/debian# tail -n 25 /etc/bash.bashrc  | head -n 8
# enable bash completion in interactive shells
#if ! shopt -oq posix; then
#  if [ -f /usr/share/bash-completion/bash_completion ]; then
#    . /usr/share/bash-completion/bash_completion
#  elif [ -f /etc/bash_completion ]; then
#    . /etc/bash_completion
#  fi
#fi

Il suffit donc de la ré-activer pour que la complétion fonctionne aussi pour root.

Une fois cela fait, la section dans le .bashrc utilisateur n'est plus nécessaire.

samedi 26 mars 2016

Configurer Solarized pour un terminal moins fatiguant pour la vue

Sous Gnome, et avec de nombreux environnements graphiques sous Linux, le profile par défaut du terminal a un fond blanc avec un texte en noir.

Ce choix de couleurs qui était préconisé quand j'étais étudiant est au contraire très fatiguant à la longue pour la vue, à cause de la forte luminosité causée par le fond blanc. C'est pourquoi d'autres configurations de couleurs sont apparues, comme par exemple le thème darcula d'IntelliJ.

On va voir dans ce billet comment utiliser le thème solarized pour:

  • La commande ls en configurant un fichier .dircolors
  • Positionner les couleurs du thème Solarized dans notre terminal

Solarized, c'est quoi ?

D'après son créateur Ethan Schoonover:

Solarized is a sixteen color palette (eight monotones, eight accent colors) designed for use with terminal and gui applications

En gros c'est une palette de couleurs, pour moitié lumineuses et pour moitié foncées.

Etape 1: Modifier les couleurs de ls avec dircolors

wget --no-check-certificate https://raw.github.com/seebi/dircolors-solarized/master/dircolors.ansi-dark
mv dircolors.ansi-dark ~/.dircolors
eval `dircolors ~/.dircolors`

Ces dernières commandes créent un fichier ~/.dircolors pris en compte par la commande ls pour coloriser chaque fichier, répertoire ou type de fichier de manière particulière. Au prochain login du système, il n'y a rien de particulier à faire puisque le fichier .bashrc appelle généralement la commande dircolors avec le fichier ~/.dircolors.

Pour en savoir plus sur la commande dircolors, on pourra consulter la doc de lea-linux.

Etape 2: Pour Gnome - Modifier les couleurs utilisées par gnome-terminal

Pour modifier les couleurs utilisées dans le profile du terminal, et donc dans le terminal, on va utiliser un autre repository sur Github:

git clone https://github.com/sigurdga/gnome-terminal-colors-solarized.git
cd gnome-terminal-colors-solarized
./set_dark.sh

Le script nous demande alors de choisir le thème de couleur:

  • dark
  • dark_alternative
  • light

puis le profile utilisé. Quand on a installé Linux en Français, c'est:

  • Par défaut (Default)

Ensuite on confirme et les couleurs sont instantanément modifiées dans le terminal.

Si l'on souhaite conserver le profile "Par défaut" inchangé, on peut commencer par le cloner en l'appelant par exemple "Solarized". C'est alors ce dernier profile que l'on modifiera avec ./set_dark.sh.

Etape 2: Pour Mate - Modifier les couleurs utilisées par mate-terminal

Si vous n'utilisez plus Gnome mais Mate à la place, il faut procéder comme suit:

git clone https://github.com/cledoux/mate-terminal-colors-solarized.git
cd mate-terminal-colors-solarized.git
./install.sh 

Note: Sur Debian Jessie, j'ai dû me déconnecter de l'interface graphique afin que les modifications du profil du terminal soient prises en compte.

dimanche 17 mai 2015

Retrouvez les modifications faites dans vos fichiers de configuration sous Linux

On est tous amenés à modifier les fichiers de configuration de bash sour Linux.

Seulement voilà au bout de quelques temps et après beaucoup de changements comment savoir quelles sont les portions du fichier que l'on a changé ?

Les deux fichiers de configuration de bash, .profile et .bashrc sont installés sur le système par le package du même nom. La version initiale de ces fichiers, le "squelette", se trouve dans le répertoire /etc/skel:

ls -a /etc/skel/
.  ..  .bash_logout  .bashrc  .profile

Par conséquent, pour connaitre les modifications faites par exemple dans .profile il suffit de faire:

diff /etc/skel/.profile .profile 

Ce qui peut donner:

18a19,21
> JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
> export JAVA_HOME
> 

Le fait que les fichiers squelette se trouvent dans /ets/skel est connu. Mais comment faire pour trouver à quel package Debian appartient un fichier ?

Il suffit pour cela d'utiliser la commande apt-file avec en premier argument le mot clé search comme ceci:

apt-file search .bashrc
adduser: /usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
adduser: /usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc
base-files: /usr/share/base-files/dot.bashrc
bash: /etc/bash.bashrc
bash: /etc/skel/.bashrc
drush: /usr/share/doc/drush/examples/example.bashrc
iselect: /usr/share/doc/iselect/examples/chdir/dot.bashrc
iselect: /usr/share/doc/iselect/examples/ilogin/dot.bashrc
qiime: /usr/lib/qiime/shell/.bashrc
sysprofile: /usr/share/doc/sysprofile/examples/etc/bash.bashrc

On retrouve bien le fichier /etc/skel/.bashrc installé par le paquet bash.

Le fichier .bashrc de l'utilisateur root se trouve ici: /usr/share/base-files/dot.bashrc

lundi 11 mai 2015

Un Terminal Linux avec un titre plus lisible

Par défaut sous Linux, le titre des terminaux a l'aspect suivant:

Default-Terminal.png

On a d'abord le nom de la machine précédé de l'utilisateur et ensuite le chemin complet dans lequel on se trouve.

Or l'information intéressante ici est bien le chemin et non le nom de la machine. Comme on peut le voir sur l'image suivante, si l'on a plusieurs terminaux d'ouverts on ne pourra pas les distinguer les uns des autres puisque dans la barre des tâches tout ce que je vois c'est debian@debian-testing à chaque fois.

Terminal-Detail.png

Le titre du terminal sous Linux, tout comme l'aspect du prompt, se configure avec la variable PS1 du shell, plus précisément de bash.

Cette variable est configurée dans le fichier .bashrc. La portion de code qui nous intéresse est la suivante:

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

On voit le \u@\h qui affiche debian@debian-testing et \w qui affiche le répertoire courant.

Pour rendre le titre de notre terminal plus lisible, on peut par exemple afficher le répertoire courant en premier et restreindre celui-ci au seul nom du dernier niveau, ce qui donne:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\W on \u@\h\a\]$PS1"

On utilise \W au lieu de \w pour ne pas avoir le chemin complet.

On voit maintenant que le deuxième terminal a un titre plus lisible et le retrouver dans la barre des tâches sera plus facile.

Terminal-Detail2.png

Pour personnaliser encore d'avantage le titre du terminal ou l'aspect du prompt sous Linux, on pourra consulter la documentation de bash ou aller sur le site bashrcgenerator qui permet de tester et simuler les modifications faites à la variable PS1.

- page 1 de 2