---
categories: ['OpenBSD','Système','Astuce']
date: 2020-01-19T20:53:20+02:00
description: "Découvrir le shell par défaut sous OpenBSD : pdksh, et quelques astuces à ce propos…"
draft: false
include_toc: true
show_comments: false
tags: ['OpenBSD','Astuce','ksh']
title: "KSH : Korn shell"
translationKey: 'openbsd-tip-pdksh'
---
## Description
**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 sont *(cf : le
[manpage ksh](https://man.openbsd.org/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 :
```cfg
. /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](https://man.openbsd.org/ksh#Tilde_expansion) `~`, tel que :
```cfg
. $HOME/.profile
```
### Activer l’historique
Ajoutez ceci :
```cfg
HISTFILE=~/.hist
HISTSIZE=3000
```
Si vous ne voulez pas garder de doublons si une même commande est lancée
plusieurs fois de suite :
```cfg
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 :
```cfg
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" nom-fichier`
⇒ date de modification : `$ stat -f "%m" nom-fichier`
⇒ date du dernier accès : `$ stat -f "%c" nom-fichier`
{{}}
Vous obtiendrez des dates au format timestamp. Pour les transformer en
date, humainement compréhensible, voire {{< anchor "ci-dessus" "gestion-de-dates" >}}…
{{}}
#### Taille d'un fichier
Obtenir la taille d'un fichier :
`$ stat -f "%z" nom-fichier`
#### Type d'un fichier
Obtenir le type du fichier :
`$ stat -f "%T" nom-fichier`
#### Utilisateur et groupe d'un fichier
⇒ Obtenir l'utilisateur ayant les droits sur le fichier :
`$ stat -f "%u" nom-fichier`
⇒ et le groupe :
`$ stat -f "%g" nom-fichier`
---
## Historique
J'ai écrit historiquement cette documentation de manière collaborative
sur le wiki de la communauté "OpenBSD Pour Tous".
---