Exile on Keyboard St. - Blog sur Linux et Debian

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

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

dimanche 23 juillet 2017

Commandes ifconfig et netstat sur Debian 9

Si vous avez installé Debian 9 récemment, vous aurez surement constaté que les commandes ifconfig et netstat entre autres ne semblent plus présentes sur le système:

debian@stretch:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.0 (stretch)
Release:        9.0
Codename:       stretch
debian@stretch:~$ /sbin/ifconfig
-bash: /sbin/ifconfig: Aucun fichier ou dossier de ce type
debian@stretch:~$ netstat
-bash: netstat : commande introuvable

Pour ceux qui les utilisent quotidiennement cela peut être gênant.

En fait ces commandes existent encore, pour l'instant, et nécessitent sur Debian 9 l'installation du paquet net-tools qui n'est maintenant plus installé par défaut:

sudo apt-get install net-tools

Dans un prochain billet on pourra voir par quelles commandes ifconfig et netstat sont remplacées.

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.

mardi 30 mai 2017

Devuan Jessie 1.0.0: Test d'installation ... concluant

La version stable de la distribution Linux Devuan est sortie vendredi dernier.

Pour rappel Devuan est un fork de Debian créé en 2014, principalement en raison du choix de Debian d'abandonner init au profit de systemd, ce que les initiateurs du projet Devuan ont refusé. En outre, contrairement à Debian qui utilise Gnome comme environnement de bureau par défaut, devuan installe Xfce par défaut.

J'avais essayé d'installer Devuan plusieurs fois avec VirtualBox, mais sans être convaincu du résultat, le programme d'installation échouant presque toujours à un moment ou à un autre.

Maintenant que Devuan Jessie 1.0.0 est là, il est temps de réitérer l'opération !

Comme je le fais toujours avec Debian, j'ai utilisé l'iso NETINST pour installer Devuan: c'est plus rapide que de télécharger un CD ou un DVD, et mon expérience est que j'ai eu moins que plantages à l'installation qu'avec le media CD ou DVD ...

Au début de l'installation, on choisit l'installation graphique: les années 80 sont finies !

Devuan - début d'installation

Dans la suite de l'installation, comme pour Debian, on choisit le nom de la machine, l'utilisateur par défaut, le mot de passe de root ...

Devuan - partitions séparées

On en arrive au partionnement des disques. J'ai choisi ici des partitions séparées, mais les possibilités de partitionnement sont les mêmes que celles de l'installeur Debian, puisque c'est l'installeur Debian qui tourne !!!

Après maintes et maintes questions pour lesquelles on gardera la valeur proposée, il est temps de choisir les logiciels à installer. Le choix par défaut est le suivant:

Devuan - logiciels par défaut

Si vous acceptez cet écran, Devuan installera Xfce comme environnement graphique puisque c'est l'environnement par défaut de la distribution.

Personnellement, je lui préfère Mate et j'ajoute le serveur SSH à la liste. J'installe donc les logiciels suivants:

Devuan - logiciels installés

Devuan - installée avec Mate

Je vous fait grâce de l'étape d'installation de Grub, la fin de l'installation se passe bien et Devuan démarre avec l'interface Mate.

Et si vous lancez la commande suivante dans un terminal:

ps aux | grep systemd

Vous constaterez que systemd ne tourne pas sur votre système !

En conclusion, Devuan Jessie 1.0.0 s'installe très bien avec VirtualBox, il faudra évidemment faire le test avec une machine réelle et selon le hardware utilisé des surprises (pas toujours agréables) peuvent survenir. Mais l'impression est bonne, et peut-être qu'à la prochaine ré-installation de ma machine Devuan aura sa chance.

- page 1 de 12