Console(Shell)

De Diablotins.org.

(Redirigé depuis Terminal)


Un monde (presque) sans fenêtres
Image:brush.png
Un interpréteur de commande ou «shell» est une interface qui vous permet d'entrer des commandes au clavier dans une console ou terminal pour administrer le système, mais aussi utiliser tout une série d'outils et logiciels.


Sommaire

Définitions

Sous FreeBSD, il n'existe qu'une seule console, mais, par abus de langage, ce terme désigne aussi les terminaux virtuels et par extension, tout ce qui ressemble de près ou de loin à un mode «texte».
La console est généralement opposée aux interfaces des environnements graphiques ou Terminaux X.

Avant d'accéder à l'interpréteur, vous devez vous connecter (login(1)) dans une console.

De votre point de vue, le point départ d'un terminal est la connexion d'un utilisateur, qui,
connecté, lance un interpréteur qui affiche alors une invite.

Les terminaux

C'est un périphérique de dialogue entre vous et la machine.
C'est à dire, un périphérique d'entrées, par exemple, un clavier et un périphérique de sortie, l'écran;
voire l'un ou l'autre, telle une imprimante.
L'ancêtre de ces terminaux est une machine à écrire, puis la machine à écrire distante ( «tele-type» ) dont vous retrouvez des traces dans le système.


FreeBSD propose des terminaux qui reposent sur le pilote syscons.

Au démarrage, le système va lire le fichier ttys(5) pour créer les premiers terminaux.

/etc/ttys

Dans ce fichier vous décrivez tous les terminaux que FreeBSD va initialiser au démarrage de la machine.
Un terminal se déclare comme suit:

périphérique commande modèle  on/off secure/insecure group=
  • Le périphérique est une entrée de “/dev/”.
  • La commande, en général “'getty”, va initialiser le terminal associé au périphérique, si le champ «on/off» est en position «on».
  • Le modèle va décrire le terminal, selon une entrée décrite dans /etc/termcap.
  • Le champ «sercure/insecure» va déterminer si root est autorisé à se connecter sur ce terminal.
  • A l'aide du champ «group», vous autorisez ou non un groupe d'utilisateur particulier à se connecter.
  • Les champs qui suivent sont des options qui dépendent du modèle de terminal.

getty

Cette commande initialise un terminal à partir d'un périphérique suivant un modèle décrit dans Gettytab.

getty modèle

Par exemple, ouvrez un onzième terminal virtuel, accessible par <Alt> <F11>:

getty PC ttyva   le premier terminal a le numéro 0
getty PC ttvya & pour vous rendre la main après l'initialisation

Une fois le terminal initialisé, getty(8) passe la main à login.

La console

vidcontrol -P <dev/console

C'est le premier terminal que reconnaît FreeBSD, périphérique /dev/console.
Elle fait office de journal système selon ce qui est demandé dans /etc/syslog.conf.
Elle est initialisée comme suit:

console none                        unknown off secure

Hormis en lecture, elle n'est accessible que par le mode de maintenance. Remplacez le champ “secure” par “insecure” pour que le mot de passe administrateur soit requis dans ce mode.
Vous pouvez la consulter lors d'une session X via x11/xconsole, ou

xterm -C

Les terminaux virtuels

quelques commandes sous ttyv6
Par défaut vous vous trouvez sous la console, terminal “0” et FreeBSD vous propose 15 autres périphériques virtuels,

de /dev/ttyv0 à /dev/ttyvf.
De base, seuls huit terminaux virtuels sont déclarés dans /etc/ttys, ils sont accessible par la combinaison de touche <Alt><Fx> où x désigne l'index du terminal, <F1> pour ttyv0 et <F9> pour ttyv8. La touche <Impr écran> vous permet de parcourir tous les terminaux.
Attention la combinaison est <Ctrl><Alt><Fx>, si vous œuvrer sous un environnement graphique.
Exemple d'un terminal virtuel pour PC:

Type[numéro] Commande type statut
ttyv0   "/usr/libexec/getty Pc"  cons25l1 on  secure

Pour désactiver une console, définissez le statut à “off” ou commentez la ligne.

Écran

vidcontrol red white 80x50

La commande vidcontrol va vous permettre d'améliorer un peu l'apparence d'une console:

vidcontrol 80x50        

50 lignes sur 80 colonnes, pour jouer à Tetrinet.

vidcontrol 80x50 -m off -b yellow -c destructive    

Non seulement c'est laid, mais vous avez perdu le pointeur de souris.
La commande suivante va lister tous les modes possibles

vidcontrol -i mode

Notez le nombre donné en première colonne. i.e.:

30 (0x01e) 0x00000001 T 80x50           8x8   0xb8000 32k 32k 0x00000000 32k

...pour l'appeler plus rapidement:

vidcontrol MODE_30

Pour affecter ces commandes à toutes les consoles virtuelles dès le démarrage, entrez dans /etc/rc.conf:

allscreens_flags="MODE_30"

Clavier

Il se configure à l'aide de kbdcontrol.
Mais, plus généralement, à l'aide des variables suivantes dans /etc/rc.conf:

keymap       plan du clavier, option  -l.
keyrate      répétition des touches , option -r.
keychange    Liste des touches de fonctions, option  -f.

Notez aussi la présence d'une variable plus générique, afin de valider d'autres options:

allscreens_kbdflags="xxxx"

Questions existentielles

Où suis-je ?

$ tty
/dev/ttyv3    Quatrième console virtuelle

Qui suis-je ?

$ id
uid=1001(david) gid=0(wheel) groups=0(wheel), 
5(operator), 1002(cdrom), 1004(floppy), 500(Oueb)
$ whoami
david

Qui fait quoi ?

$users
david

et

$ who
toto            ttyv3    28 mai 11:46
david           :0       28 mai 10:06

voire

$ w -i
11:32  up 58 mins, 2 users, load averages: 0,33 0,11 0,04
USER             TTY      FROM              LOGIN@  IDLE WHAT
david            p4       :0.0             11:21      10 -
david            v0       -                11:00      32 xinit /home/david/.xinitrc

ou encore

$ finger
Login            Name             TTY      Idle  Login  Time   Office  Phone
david            David Marec     *v0       1:50  Dim    11:00
david            David Marec      p4       1:27  Dim    11:21

qui a fait quoi:

$ last

jfbterm

Ce port fournit un terminal graphique, qui utilise le framebuffer vidéo. De fait, il permet d'utiliser les encodages en UTF-8.

Installez simplement le sysutils/jfbterm.
Puis lancez le:

jfbterm

puis

jfbterm -r

A condition que vos locales soient bien initialisées, la configuration se fera automatiquement.

Attention, sysutils/jfbterm modifie /etc/termcap. Lors des mises à jours du monde, ne laissez pas mergemaster(8) l'écraser.

Les shells

Ils sont définis lors de la création de l'utilisateur. Par défaut, il s'agit de sh(1), l'interpréteur originel, très simple et peu performant mais requis par la majorité des scripts du système.
FreeBSD est livré avec un interpréteur plus évolué, successeur du précédent: csh(1).
Vous trouverez d'autres interpréteurs connus dans les ports, sous la rubrique shells tels bash, l'interpréteur de Linux, ZSH ou encore ksh.
Pour en changer,
- il ne vous plaît pas, sh ? -
Utilisez pw ou son avatar chsh(1):

pw usermod utilisateur -s /bin/tcsh
chsh -s /bin/tcsh  utilisateur     utilisateur en cours s'il n'est pas précisé

Assurez vous que l'interpréteur choisit soit défini dans shells(5).


Connexion

À la connexion, le système lit le fichier login_conf situé dans le répertoire utilisateur (~/login_conf) ou /etc/login.conf si ce dernier n'existe pas.
Ce fichier contient diverses informations concernant l'interpréteur, tels la langue à utiliser, la fonctions des touches du clavier.C'est un ensemble d'entrées réunies et définies pour une «classe de connexion».
Il existe une classe par défaut «default» qui correspond à tous les utilisateurs qui ne possèdent pas de classe de connexion.
Ces classes sont définies lors de la création de l'utilisateur et peuvent être modifiées à l'aide de pw:

pw usermode -L classe

Dans le cas de ~/login_conf, il n'existe qu'une seule classe: vous, soit «me».
Vous trouverez la liste des entrées dans le manuel; elles sont nombreuses et modifient sensiblement le comportement de vos applications dont le shell et le système en premier lieu, notamment à l'aide de l'entrée «setenv» qui va définir automatique à chaque connexion vos variables d'environnements préférées.
Attention, le système ne consulte pas /etc/login.conf mais une base de données construite à partir de ce dernier: /etc/login.conf.db.
Lorsque vous modifiez /etc/login.conf, n'oubliez pas de reconstruire la base:

cap_mkdb /etc/login.conf


Ensuite, «login» passe la main à l'interpréteur qui ensuite consulte son propre fichier d'initialisation:

.cshrc        csh / tcsh

Vous êtes ensuite invité à entrer vos ordres.

david:~$ set promptchars="\! \#"
david:~$ set prompt="%BÀ%b vos ordres, %Bchef%b %#"
À vos ordres, chef !

- 'suis un brin mégalo, moi. -

Déconnexion

Simplement, tapez:

logout

sous un terminal virtuel. Notez que vous ne pouvez pas le faire sous un Xterm et pour cause, vous ne vous êtes pas vraiment présenté non plus.
Utilisez plutôt:

exit

Ce qui semble avoir le même résultat sous un terminal virtuel, puisque ce terminal est automatiquement recréé lorsqu'il est détruit.

Patientez

Tapez

lock -n

et rentrez un mot de passe pour bloquer votre session. Ou

lock -p -n

pour utiliser le mot de passe de l'utilisateur.
Notez que sans l'option «-n», un timeout de 15 minutes est défini, vous pouvez le modifier par l'option «-t».

XTerm

xterm lancé sous Fluxbox

Ce sont des émulateurs de terminaux que l'on ouvre au sein d'une session X, qui rentrent dans la classe de ressources “Xterm”, que vous trouverez dans le répertoire “ /usr/local/lib/X11/app-defaults/XTerm-xx”.
Chaque xterm créé un nouveau périphérique “/etc/ttypx”.
Par tradition, ils émulent un célèbre terminal de chez DEC: le VT100. Sous FreeBSD, il s'agit de l'entrée «xterm-color» de /etc/termcap.
Vous pouvez taper «resize» pour l'obtenir.


De base, X-window est livré avec xterm qui est proposé dans le menu standard de la plupart des gestionnaires de fenêtre.
Ce dernier est concurrencé par rxvt, aterm, Eterm et par les versions livrées avec les environnement de bureaux; Konsole pour KDE, par exemple.
Utilisez l'option «-u8» pour obtenir un terminal qui supporte l'Unicode.


Ces terminaux sont très utile et très utilisés; ils vous permettre d'ouvrir de nombreuses applications, notamment sous les gestionnaire de fenêtres légers.
Soit vous ouvrer des xterm seuls puis tapez le nom de l'application à exécuter, soit vous lancez l'application directement via un xterm par le levier “-e” (execute).


  • Ouvrir un client FTP, sans barre de défilement, avec titre et nom de fenêtre:
xterm +sb -T lFtp -n lftp -e lftp
 xterm -r -T MusicDaemon -e ncmpc
  • Sessions multiplexées, voir le paragraphe suivant:
xterm -T ScreenSession -e screen        Nouvelle session Screen
xterm -T ScreenSession -e screen -r     Reprendre une session Screen
xterm -T Tmux -e tmux                    Nouvelle session Tmux
xterm -T Tmux -e tmux attach-session    Reprendre une session Tmux

Rapidement, on en abuse.

Terminaux hérités ou multiplexés

Pour ne pas s'arrêter en si bon chemin, nous devons décrire un terminal particulier, mélange des terminaux «texte» et des Xterm.
Ce terminal est créé par des outils qui permettent de créer un terminal virtuel puis de le «détacher» du terminal hôte, pour le rattacher ensuite, sur le même hôte ou sur un autre.
Aussi, si vous devez lancer un script long et ennuyeux que vous souhaitez consulter régulièrement, ou qui risque de perturber un moment votre terminal actuel,
i.e. une mise à jour du système ou de l'arbre des ports,
lancez le dans un terminal multiplexés et détachez le.
Rattachez le de temps à autre pour en consulter l'avancement.

Screen

Le plus célèbre de ces outils est le port sysutils/screen. Dans un Xterm ou un terminal virtuel, tapez:

screen

Vous avez lancé une nouvelle session de dialogue, que vous pouvez détacher en tapant <Ctrl a> puis “D”.
<Ctrl a> est la séquence d'échappement de Screen.
Pour le retrouver, ouvrez un terminal sous le même compte utilisateur et tapez:

screen -r

Tmux

sysutils/tmux est un successeur de Screen qui se veut plus moderne, livré sous Licence BSD .
Créez une session:

tmux

ou

tmux new-session


Tmux utilise les même touches que Screen, mais en utilisant <Ctrl b> comme touche d'échappement.
Il offre une meilleur gestion de sessions que son prédécesseur mais souffre d'un défaut: il ne supporte pas actuellement le pilote de la console “SC”. Une mise à jour est en cours dans la branche «CURRENT(8)» de FreeBSD pour que la console utilise un pilote de type «xterm-color».
Ainsi, une session X est nécessaire pour l'utiliser.

depuis une récente mise à jour de FreeBSD( 7_2 ), ou de Tmux, ce n'est plus le cas.

SSH

Secure SHell est un terminal distant, dont le trafic est chiffré selon le protocole du même nom.
Ce terminal réseau a remplacé de fait les anciennes commandes à distance qui commençaient par la lettre «r» (remote):

rsh      Shell réseau
rlogin   Connexion distance
rcp      Copie de fichier à distance
ftp       par extension, par sftp.

peu ou pas sécurisée. Une fois votre connexion authentifié, vous pouvez utiliser le terminal comme si vous étiez devant votre serveur.

La version de FreeBSD étant un port de OpenSSH, suite SSH développée par OpenBSD, je vous invite à en lire la F.A.Q.

Telnet

Le protocole “telnet” ouvre aussi un terminal au travers du réseau, via le démon “telnetd”.
Par exemple :

telnet towel.blinkenlights.nl

Ce dernier, par contre, est généralement dédié à une application et ne supporte ni les mécanismes de login ni de shell. C'est à l'application lancée derrière la session telnet de gérer ces mécanismes, au besoin.

Vous le trouverez dans de nombreux services et serveurs, périphériques «intelligents», où il offre une interface de configuration.

Il a tendance à disparaître au profit d'interfaces Http.


En savoir plus

Projets :