OBSD4* : wiki

KSH : Korn shell

ksh est le shell par défaut sous OpenBSD - exactement pdksh : Public Domain Korn Shell, qui est l'équivalent du ksh88 .

Il ressemble beaucoup à Bash par bien des aspects et vous devriez vous y retrouver si vous venez de GNU/Linux.

Configuration

  • Le fichier de configuration principal : /etc/ksh.kshrc
  • Votre fichier de configuration personnel : ~/.kshrc

Les autres fichiers de configuration liés à l'usage de ksh (cf : le manpage ksh) :

  • le fichier profil de la session utilisateur : ~/.profile
  • celui relatif au système : /etc/profile
  • la base de données shell : /etc/shells
  • et, enfin, le fichier de profil shell privilégié : /etc/suid_profile - ATTENTION, aux conséquences relatives aux modifications de ce fichier sensible.

Préférez modifier votre fichier de configuration personnel, en ajoutant les déclarations principales, tel que :

. /etc/ksh.kshrc

Ajout du fichier ''.profile''

Sourcez votre fichier personnel ~/.profile dans lequel vous déclarez toutes vos variables d'environnement, vos alias, de manière généraliste.
Préférez l'usage de la variable HOME plutôt que du tilde ~.

. $HOME/.profile

Activer l’historique

Ajoutez ceci :

HISTFILE=~/.hist
HISTSIZE=3000

Si vous ne voulez pas garder de doublons si une même commande est lancée plusieurs fois de suite :

HISTCONTROL=ignoredumps

PS1 : un prompt en couleur

⇒ PS1 user :

PS1="\e[0;36m\u@\h: \e[0;32m\w \e[0;36m\$ \e[m"

⇒ PS1 root :

PS1="\e[0;31m\u@\h | \e[0;32m\w | \e[0;31m\# \e[m"

Petite astuce : si vous mettez '\#', à chaque commande utilisée, le prompt affichera un compteur…

En fonction du code de sortie de la commande

Il peut être intéressant d'avoir un prompt couleur, d'une part pour se repérer dans son terminal, d'autre part, ça devient intéressant visuellement si ce dernier change de couleur en fonction du code de retour de la commande qui vient d'être lancée.

Pour cela, voici un bout de config à ajouter :

escape=$(print '\033')
ctrla=$(print '\001')
PS1=$(print '\001\015')
PS1=$PS1$ctrla$escape'[$(($? ? 31 : 32))m'$ctrla
PS1=$PS1'[\u@\h \w]'
PS1=$PS1$ctrla$escape'[0m'$ctrla' '

Exemples

Un .kshrc minimal

. /etc/ksh.kshrc
. $HOME/.profile

HISTCONTROL=ignoredumps
HISTFILE=~/.hist
HISTSIZE=3000

# Préférez paramétrer les variables PS1, LC_* dans .profile
export PS1="\u@\h:\w\$ "
export LC_CTYPE=fr_FR.UTF-8
export LC_MESSAGES=fr

export TOP='-s 1'
export PAGER=less

Informations Systèmes

Gestion de dates

⇒ Obtenir une date au format timestamp :

$ date +%s

⇒ Transformer un timestamp en date :

$ date -r $timestamp +"%x %X"

⇒ Obtenir la date de maintenant :

$ date +"%x %X"

⇒ Obtenir la date du jour :

$ date +'%Y-%m-%d_%H-%M-%S'

⇒ Obtenir la date d'hier :

date -r $(($(date -j $(date +%Y%m%d1200) +%s) - 86400)) +%F

Informations de fichiers

Dates de fichier

⇒ date de création :

$ stat -f "%c" file

⇒ date de modification :

$ stat -f "%m" file

⇒ date du dernier accès :

$ stat -f "%c" file

Vous obtiendrez des dates au format timestamp. Pour les transformer en date, humainement compréhensible, voire ci-dessus

Taille d'un fichier

Obtenir la taille d'un fichier :

$ stat -f "%z" file

Type d'un fichier

Obtenir le type du fichier :

$ stat -f "%T" file

Utilisateur et groupe d'un fichier

⇒ Obtenir l'utilisateur ayant les droits sur le fichier :

$ stat -f "%u" fichier

⇒ et le groupe :

$ stat -f "%g" fichier