--- 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". ---