Console(Shell)
Un article de Diablotins.org.
|
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 utiliser et administrer le système.
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) dans une console.
Sommaire |
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, par le biais de fichier de configuration des terminaux : “/etc/ttys”.
FreeBSD propose des terminaux qui reposent sur le pilote “syscons” ou “SC”, déclaré dans le noyau. Ce pilote est associé à deux autres pilotes, pour le clavier et la carte graphique
Vous pouvez donc piloter les terminaux à l'aide du script RC “/etc/rc.d/syscons”, qui acceptent les paramètres suivants donnés par rc.conf:
allscreens_kbdflags paramètres du clavier, passés à kbdcontrol allscreens_flags paramètres du clavier, passés à vidcontrol
Ainsi que les polices de caractères et autres dispositions claviers, décrites plus en détail dans l'article dédié à la francophonie.
Au démarrage, le système va lire le fichier “/etc/ttys” pour créer les premiers terminaux.
/etc/ttys
Dans ce fichier vous allez décrire tous les terminaux que FreeBSD pourra 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 passe la main à login.
La 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 par “xconsole”, ou
xterm -C
Les terminaux
Un terminal peut être sur liaison série, réseau voire modem ou virtuel.
Intéressons nous aux terminaux que nous proposent nos PC, les terminaux virtuels.
De votre point de vue, le point départ d'un terminal est la connexion d'un utilisateur, qui,
connecté, lance l'interpréteur qui affiche l'invite.
Terminal virtuel
Par défaut vous vous trouvez sous la console, terminal “1” 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”.
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
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 ?
$ who toto ttyv3 28 mai 11:46 david :0 28 mai 10:06
Les shells
Ils sont définis lors de la création de l'utilisateur. Par défaut, il s'agit de «sh», 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/tcsh».
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:
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 /etc/shells.
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
XTerm
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.
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 sa variante «uxterm» pour obtenir un terminal compatible UTF-8.
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
- Brancher son jukebox
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
C'est un successeur de Screen qui se veut plus moderne.
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.
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 une console au travers du réseau, via le démon “telnetd”.
Par exemple : telnet towel.blinkenlights.nl
