Table des matières

Survivre dans son TTY #1 - Initiation au terminal

Nous allons présenter dans ce cours comment on peut se débrouiller dans un terminal. Il s'adresse principalement aux personnes qui ne se sont jamais servi d'un terminal. Nous verrons comment nous repérer, nous déplacer et agir sur les fichiers ; ainsi que quelques petites commandes de bases qui pourront vous être utile. Vous ne serez pas un warrior du terminal à la fin du cours, mais si on vous met un terminal sous le nez, vous saurez quoi faire.

Pour suivre ce cours, vous aurez donc bien sûr besoin d'un émulateur de terminal, n'importe lequel fera l'affaire. Nous ne verrons pas comment 'customiser' votre émulateur de terminal (la police ou les couleurs par exemple). Tout d'abord parce que les façons de faire dépendent de votre terminal et aussi parce que généralement il suffit d'aller faire un tour dans les Préférences du terminal, disponible graphiquement.

Cependant ceci n'est pas valable pour des clients comme xterm, aterm ou encore urxvt. Comme la configuration n'est pas graphique mais passe par un fichier, nous pourrons, si cela vous intéresse et si certains utilisent ces clients, faire un tour des principales options en fin de cours.

Allez c'est parti, ouvrez donc votre terminal.

Définition

Vous êtes présentement dans un shell. Ce shell sert à exécuter des instructions en mode texte que vous fournissez par l'intermédiaire de votre terminal. Comme shell par défaut vous utilisez Bash, mais sachez qu'il en existe d'autre dont un très populaire qui est Zsh, dont legreffier nous fera un cours sur le sujet prochainement. Vous n'avez pas à vous soucier des différences entre tous les shells pour le moment.

Par défaut, vous êtes censés être sous bash, mais vous pouvez rester sur votre propre shell (zsh, tcsh, etc). Tout ce que vous verrez ici sera valable pour tous les autres shells (dans le cas contraire cela sera précisé).

Le prompt

Le prompt bash s'il n'a pas été modifié ressemble à quelque chose comme ça : login@host:PATH$

Pour login j'imagine qu'il n'y a pas besoin d'explication. 'host' est le nom de votre machine. PATH c'est le chemin, là où vous êtes sur votre système de fichier. Enfin le $ signifie que vous êtes un utilisateur 'normal'. Il est à différencier de # qui est pour l'utilisateur 'root'. Généralement si vous êtes sous ubuntu, vous ne verrez jamais le signe # dans votre prompt.

À noter que par convention, il existe un signe ~ qui représente votre dossier personnel, à savoir $HOME qui fait généralement référence à /home/<votre_login>. Donc quand vous voyez ce signe vous savez qu'il fait référence à votre dossier à vous. Enfin le signe / comme vous pouvez le deviner représente la racine de votre système de fichier (le signe ~ sur un clavier PC est accessible via AltGr+2)

Les commandes de bases

On va commencer par la base, où on est : tapez pwd dans votre terminal. Il va vous répondre normalement /home/<votre_login> (pour ceux que ça intéresse pwd veut dire Print Working Directory) (cette commande n'est pas très utile car votre prompt vous l'indique, mais c'est bon de le savoir).

Ensuite on va lister ce que notre dossier ~ contient en faisant simplement ls (LS en minuscule et non 1S).

Repérez n'importe lequel de vos dossiers (par exemple Musique) et faites un cd Musi<tab> pour entrer dedans (remarquez le changement dans votre prompt).

On va revenir dans le dossier parent (soit /home/<votre_login> en faisant un : cd ..

On va maintenant créer un dossier : mkdir u-classroom et puis on va rentrer dedans : cd u-classroom (utilisez la touche <tab> pour vous aider).

Sachez en passant qu'avec mkdir on peut créer des arborescences entières d'un seul coup : mkdir -p u-classroom/travail/dossier1 vous créera le dossier u-classroom puis dans celui-ci le dossier travail et enfin dans ce dernier le dossier dossier1.

Astuces avec ''cd''

Juste un petit truc pratique de cd. Depuis le dossier ~/u-classroom allez dans le dossier musique : cd ~/Musique Si vous voulez revenir dans le dossier ~/u-classroom vous pouvez bien sûr taper : cd ~/u-classroom mais on peut faire plus rapide en tapant simplement : cd -

Autre petit truc de cd : en tapant simplement cd dans votre terminal, vous vous retrouverez toujours dans votre dossier personnel, c'est-à-dire $HOME.

La commande ''ls''

On va maintenant se pencher un peu plus sur la commande ls qui sert à lister le contenu d'un dossier je le rappelle. Et on va notamment lui passer des options.

ls est capable de faire la différence entre les dossiers et les fichiers. Si vous faîtes un ls -F vous verrez à la fin des noms de dossiers/fichiers un indicateur : / pour un dossier * pour un executable ou encore @ pour un lien (il en existe d'autres).

Pour lister tout de votre dossier y compris les fichiers cachés : ls -a (Sachez que les fichiers cachés sous gnu/linux sont précédés d'un . ).

On peut avoir un affichage qui nous donne plus d'informations : ls -l

Et bien sûr, on peut combiner les deux : ls -al

ls peut aussi vous afficher vos dossiers/fichiers en couleur en faisant : ls –color=auto

Vous devez savoir que la commande ls peut prendre beaucoup d'options que je ne décrirais pas ici. Mais vous avez par exemple l'option -R qui peut être intéressante pour lister récursivement les dossiers. Ou aussi -1 (le chiffre 1 et non la lettre l) pour afficher un résultat par ligne.

Les opérations sur un fichier

Sachez que l'on peut faire exécuter à notre terminal deux commandes à la suite en utilisant ce signe : && ce qui peut éviter des pertes de temps. On va revenir dans notre dossier ~/u-classroom et créer le dossier travail/ à l'intérieur de celui-ci : cd ~/u-classroom && mkdir travail

Notez que grâce à && la seconde commande ne s'exécutera que si la première a réussie.

Pour faire cet exercice on va créer un fichier totalement vide en utilisant la commande touch : touch monfichier.txt

Vous pouvez avoir des informations sur ce fichier en faisant un : file monfichier.txt

Ici c'est pas très intéressant car le fichier est vide. Mais vous pouvez vous amusez à le faire sur un fichier.mp3 par exemple (file ~/Musique/fichier.mp3 ; <tab> est votre ami;)).

Déplacer/renommer

On va commencer par déplacer ce fichier dans notre dossier travail/ avec la commande mv (pour move) : mv monfichier.txt travail

On rentre maintenant dans notre dossier travail/ : cd travail

La commande mv ne sert pas qu'à déplacer des fichiers d'un endroit à un autre, elle sert aussi à les renommer : mv monfichier.txt fichier.txt

Notez qu'on aurait très bien pû faire tout à l'heure un : mv monfichier.txt travail/fichier.txt

La copie

Pour copier un fichier on va utiliser cp : cp -v fichier.txt autrefichier.txt

On a rajouter ici l'option -v comme vous pouvez le voir. Cette option est utile car elle vous donne un feedback de ce qui s'est passé : monfichier.txt → autrefichier.txt

Effacer

Enfin pour finir, on va utiliser rm pour effacer/remove un fichier : rm autrefichier.txt. On vous demande si vous voulez l'effacer, taper simplement y puis entrée pour confirmer. On peut éviter qu'il nous demande une confirmation en faisant rm -f autrefichier.txt (le -f pour Force).

L'effacement avec rm est définitif, il n'y a pas de corbeille dans le terminal.

Attention avec l'option -f on a vite fait des faire des bêtises !!!

Une dernière petite chose à propos de rm

Pour voir cela revenez dans votre dossier ~/u-classroom et déplacer votre fichier.txt dans celui-ci en faisant un : mv -v travail/fichier.txt .

REMARQUEZ LE '.' : il signifie 'ici' (voyez aussi l'option -v comme pour cp pour avoir un retour de ce qu'il se passe).

Vérifiez bien que votre fichier fichier.txt est dans votre dossier ~/u-classroom avec la commande ls.

Nous allons effacer notre dossier travail/ : rm -f travail/ Vous devez avoir une erreur normalement.

rm vous précise que vous ne pouvez pas effacer travail/ car c'est un dossier. Quand on travail sur un dossier, les commandes cp et rm ont besoin d'une option supplémentaire qui est -r (Récursif). Pour effacer votre dossier travail vous devez donc faire : rm -rf travail/

Notez que ceci n'est pas valable avec mv.

Attention à nouveau ici avec la commande rm -rf, une erreur est très vite arrivée car comme dit le proverbe : ”Il y a deux types d'admins : celui qui fait une connerie et celui qui va la faire.

Notes à propos des espaces et de la casse

Vous l'avez vu aucun de mes dossiers/fichiers ne comportent d'espace. Les espaces dans les noms de fichier/dossier par définition c'est mal. En effet ils servent à différencier la commande, des options du fichier comme mv fichier.txt autrefichier.txt mais il peut arriver qu'on ai des fichiers avec des espaces.

Il y a deux façons de s'en sortir : soit on échappe l'espace, soit on entoure le fichier par des guillemets.

Le plus simple est de mettre des guillements, par exemple : mv “autre fichier.txt” fichier.txt

La version avec les espaces échappés ressemblent à ça : mv autre\ fichier.txt fichier.txt remarquez le \ avant l'espace.

Il y a d'autres choses qu'il faut éviter dans les noms de fichiers et donc qu'il faudra échapper par exemple $ ou encore ! qui deviendront donc \! ou encore \$. De plus si l'on veut échapper le caractère \ il faudra alors faire \\.

De plus je ne met jamais de majuscule dans mes noms de fichiers/dossiers parce que je trouve ça plus simple. Mais sachez que pour votre système de fichier Fichier.txt et fichier.txt ne sont pas du tout la même chose. Ainsi quand on dit de faire attention à la casse c'est à dire que l'on demande de faire attention au majuscule et au minuscule.

Les alias

Comme vous l'avez vu il y a quelques options utiles et que vous utiliserez souvent. Mais sachez que vous n'êtes pas obligés de les taper tout le temps. Pour arriver à cela on va utiliser les alias. Les alias sont des espèces de raccourci que votre shell interprétera tout seul.

On va ouvrir un fichier de configuration qui se nomme bashrc. C'est un fichier caché qui se trouve à la racine de votre dossier personnel. Donc : gedit ~/.bashrc (gedit, kate, vim, emacs ou autre selon votre goût).

Par défaut sous bash c'est ~/.bashrc mais selon votre shell, cela peut être ~/.zshrc ou ~/.tcshrc ou même encore simplement ~/.profile.

Vous pouvez rentrer des alias en faisant quelque chose de ce genre (un alias par ligne) :

alias raccourci='commande -options'

Pour ls par exemple : alias ls='ls –classify –tabsize=0 –literal –color=auto –show-control-chars –human-readable'

alias la='ls -a'

Ici la reprendra toutes les options de ls PLUS l'option -a qui sert à voir les fichiers cachés.

Si ça vous intéresse voici ma liste d'alias : http://druuna.dud-t.org/c/survivre_dans_son_tty_1/alias.html

Une fois vos alias défini, il ne vous reste plus qu'à relancer votre terminal, ou encore à utiliser cette commande : source ~/.bashrc.

Sachez que source vient avec bash et ne sera donc pas forcément disponible pour d'autres shell. Elle est présente sous zsh par exemple mais pas sous dash. On peut utiliser source aussi à des fins de tests sans avoir à modifier votre bashrc en faisant simplement : source ~/nimporte_que_fichier.

Topo rapide sur les redirections

Les redirections servent à envoyer le résultat d'une commande vers un fichier. On aura donc quelque chose qui ressemble à ceci : echo “ceci est une ligne” > ~/u-classroom/fichier.txt

Notez que > écrasera le fichier.txt. Si vous voulez rajouter “ceci est une ligne à la fin du fichier fichier.txt il faut alors doubler le » soit : echo “ceci est une autre ligne” » ~/u-classroom/fichier.txt

Ça peut être intéressant pour garder une trace d'un locate par exemple : locate > locate_du_jour.txt ou le résultat d'un apt : apt-cache search > aptcache_search_item.txt

Sous bash, les redirections sont celles-ci :

commande > fichier ; redirige la sortie standard générée par la commande vers fichier (on peut aussi faire commande 1> fichier). La sortie standard EST la sortie que vous voyez dans votre terminal.

commande 2> fichier ; idem que la précédente mais _que_ pour les erreurs.

commande 2>&1 ; redirige la sortie d'erreur vers la sortie standard.

commande &> fichier ; redirige la sortie d'erreur et la sortie standard vers fichier.

À noter que la sortie standard est votre terminal ici, votre écran si vous préférez. Ce qui n'est pas toujours le cas.

Quelques commandes utiles

locate

Pour rechercher des fichiers, on va utiliser la commande locate (cette commande fait partie du paquet locate disponible par défaut sur toutes les grandes distributions). locate utilise une base de donnée. Pour l'utiliser il faut donc créer/mettre à jour cette base de donnée : sudo updatedb

ATTENTION vous voyez nous avons utilisé ici sudo qui vous donne temporairement, le temps de la commande, tous les droits. Elle est nécessaire ici pour effectuer le listing de _tous_ les fichiers présents sur vos disques durs. Votre mot de passe utilisateur vous sera demandé.

Cette opération peut prendre pas mal de temps selon la taille de vos disques. La base de donnée étant à jour, vous pouvez rechercher : locate fichier.txt

L'avantage de locate est de ne pas trop faire souffrir le disque dur quand on fait une recherche en faisant bouger la tête de lecture un peu partout pour avoir ce qu'on cherche. Là on travaille juste sur un seul fichier, c'est beaucoup moins lourd et plus rapide.

find

find permet aussi de rechercher des fichiers, mais peut faire plus que locate. Il mériterait un cours à lui tout seul. Mais sachez que l'on peut faire une recherche de cette façon : find /etc/ -iname 'LeFichier'. Vous pouvez ne pas connaître le nom exacte du fichier, alors vous pouvez faire ceci qui pourra vous renseigner find /etc -iname '*eFich*'.

Remarquez les *. Cette commande vous montrera aussi bien TeFichal que 'LeFichier' ainsi que 'blouloueFichoubla'. Ça peut être pratique si on est pas sûr d'une orthographe par exemple.

On peut aussi effectuer des opérations sur les fichiers trouvés grâce à l'option -exec comme par exemple

less

Vous pouvez voir le contenu d'un fichier dans votre terminal grâce à la commande less : less ~/.bashrc Utilisez les flêches haut/bas, les touches j/k pour faire défiler le texte. La barre espace ou PageDown/PageUP servent à faire défiler le texte d'un longueur égale à la hauteur de votre terminal.

which

which permet de connaître le path exact d'un exécutable : which ls par exemple tout simplement.

grep

less est intéressant si vous voulez voir tout le contenu d'un fichier, mais il peut arriver que vous ne cherchiez que quelque chose de précis. Au lieu d'ouvrir le fichier et de faire une recherche dedans, on peut utiliser la commande grep. Par exemple pour connaître tous les alias de votre ~/.bashrc : grep alias ~/.bashrc (pour avoir de la couleur rajouter l'option –color=auto ; cf mes alias : http://druuna.dud-t.org/c/survivre_dans_son_tty_1/alias.html).

tail

Un autre truc utile si vous voulez transformer votre terminal en afficheur de log système, la commande tail avec l'option -f : sudo tail -f /var/log/syslog /var/log/dmesg

À nouveau, la commande sudo, en effet, pour des raisons de sécurités, il faut avoir des droits pour lire ces fichiers.

top

Enfin, la commande top qui vous permet de voir quelles sont les tâches en cours sur votre système (pour quitter taper q).

Un wallpaper pense-bête

Un petit wallpaper bien utile que vous connaissez peut-être si on débute pour avoir les principales commandes constamment sous le nez : http://druuna.dud-t.org/c/survivre_dans_son_tty_1/linux_wallpaper_for_begginners.jpg