PS1 ? Bash ?

Le prompt de bash, c’est un peu un élément clé de linux. Mais voici des exemples de configuration:

PS1=’\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;37m\]’
PS1=’\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] ‘

C’est illisible et incompréhensible sans documentation. Tous ces caractères d’échappement et crochets, l’insertion de couleurs de manière farfelues, par exemple « \e[0;37m » pour du blanc, cela commence par « \e[ » et se termine par « m ». DEBILE. Non c’est pire, il faut en plus préciser que ces caractères sont spéciaux et qu’ils ne doivent pas être comptés comme des caractères (puisqu’ils sont invisibles) pour ne pas fausser la position du curseur du shell. Et pour cela, il faut les entourer des crochets, de crochets échappés bien sûr.

Ainsi, pour ajouter toto en jaune dans le prompt, il va falloir ajouter: « \[\e[1;33m\]toto\[\e[0m\] », soit 21 caractères pour la couleur.

Certes, oui, le prompt de linux est puissant car il peut afficher le résultat de commandes dedans, et ainsi afficher l’état du système juste dans la prompt. Mais quelle syntaxe horrible. Mais c’est vrai que l’on parle de bash, le shell qui fait un caca nerveux si on met des espaces autour du symbole égal. Un blog entier ne suffirai pas à montrer tous les défauts de cet ancêtre.

Car justement tous les problèmes proviennent de son âge, bash devrait être obsolète et plus utilisé, mais comme il est présent de partout, il est un standard (malgré l’existence d’autres shell), et il est très souvent par défaut sur les distributions, alors il reste, la compatibilité a un prix… le pire est qu’il est enseigné à l’université, j’espère que c’est seulement les bases…

Publicités

Linux et les disques durs… suite et fin ?

L’histoire de lag des disques durs, c’est à présent le fil rouge de mon blog. Sur google maps, sous Chromium (et Firefox aussi bien sûr), cela rame comme pas possible, pourtant, j’aurai bien aimé que ce soit comme Windows, aucune activité de disque significative (par déduction, les données manipulées sont en RAM). Comme cela m’a vraiment gavé, que les optimisations (nobarrier,data=writeback,noatime et companie) n’y change rien, j’ai sorti l’artillerie lourde block_dump. Un bel outil de bourrin pour linux qui affiche tout se qui se passe sur les disques durs. Autant que c’est vraiment pour du débogage de désespoir car il n’existe aucun outil comme filemon sur linux (inotifywatch -r ahah).

Après avoir activé l’outil, je vois énormément de flush-8:16 et jbd2. Génial, mais je les voyais déjà avec iotop. Sauf que cette fois-ci, je peux voir l’application à l’origine de ces appels. Puis j’arrive finalement à une très longue série de:

Jul 7 23:39:41 localhost kernel: [40813.222707] Chrome_CacheThr(1237): READ block 49119816 on sdb5 (8 sectors)
Jul 7 23:39:41 localhost kernel: [40813.222912] Chrome_CacheThr(1237): READ block 49119824 on sdb5 (8 sectors)

sdb étant mon second disque dur pour /home, j’en déduis que chromium met en cache les données dans /home… ahaha ? étonnant car je vois aussi beaucoup d’accès à tmpfs.

Jul 7 23:47:48 localhost kernel: [41298.459319] Chrome_IOThread(1238): dirtied inode 105835 (?) on tmpfs
Jul 7 23:47:48 localhost kernel: [41298.513204] Chrome_IOThread(1238): dirtied inode 105837 (?) on tmpfs

Mais ceux-ci ne se produisent pas au moment du lag, et en plus l’exemple est mal choisi car c’est seulement du dirtied. Un autre exemple dans un autre lag:

Jul 7 23:49:53 localhost kernel: [41422.756314] Chrome_CacheThr(1237): READ block 49050968 on sdb5 (8 sectors)
Jul 7 23:49:53 localhost kernel: [41422.756494] Chrome_CacheThr(1237): READ block 49050976 on sdb5 (8 sectors)
Jul 7 23:49:53 localhost kernel: [41422.756649] Chrome_CacheThr(1237): READ block 49050984 on sdb5 (8 sectors)
Jul 7 23:49:53 localhost kernel: [41422.817261] Chrome_IOThread(1238): dirtied inode 104017 (?) on tmpfs
Jul 7 23:49:53 localhost kernel: [41422.820708] Chrome_IOThread(1238): dirtied inode 106735 (?) on tmpfs
Jul 7 23:49:53 localhost kernel: [41422.825369] Chrome_IOThread(1238): dirtied inode 106736 (?) on tmpfs
Jul 7 23:49:53 localhost kernel: [41422.825656] Chrome_CacheThr(1237): READ block 49050992 on sdb5 (8 sectors)

En cherchant comment mettre en RAM le cache, je trouve la solution sur le wiki de ma distribution. Mettre le cache en RAM, c’est tellement plus pratique que ce ne soit pas le comportement par défaut pour forcer les gens à trouver la solution eux-même… LINUX!!

Bon après, c’est peut-être parce que le cache en RAM de Chromium est complet qu’il utilise le disque dur (mais j’en doute). Cela provoque des comportements totalement débile que l’on ne rencontre pas sur Windows. Mais le plus étonnant dans tout ça, c’est qu’avant cela ne le faisait pas, c’est venu d’un coup, enfin suite à une mise à jour bien sûr, mais impossible de dire laquelle car le problème n’a pas été rapidement identifié.

Je suppose que pour firefox c’est le même combat. En regardant la solution, elle est pire, il y a une page dédiée à cela, qui concerne tout le profil de firefox mis en RAM (et pas seulement le cache). Avec un script de synchronisation entre la RAM et le système de fichier, avec une CRON pour synchroniser régulièrement… OH STOP, si il faut faire tout ça pour avoir un firefox fluide, c’est hors de question, je reste sur Chromium.

Finalement je trouve cet article, qui permet de changer le dossier de cache seulement. Je me suis retrouvé avec un firefox rapide… non il ne faut pas déconner xD Mais relativement plus rapide qu’avant c’est sûr.

Sincérement, le navigateur est de nos jours généralement le logiciel le plus utilisé sur un desktop, n’avoir ni firefox, ni chromium de correctement configuré par défaut est catastrophique. Mais c’est linux, c’est normal 🙂

La poubelle

La poubelle, que c’est bien pratique, mais pas sur linux, Windows a le dessus (encore?). La poubelle correspond à un dossier, situé généralement dans ~/.local/share/Trash. On remarquera au passage la majuscule inhabituelle à Trash, ceci pour rester dans l’esprit brouillon de linux.

Il va de soit que chaque utilisateur du système possède sa corbeille, mais du coup, on arrive à une absurdité énorme dans un usage desktop de linux. On branche généralement des périphériques externes, ou bien on possède plusieurs disques dur dans la machine, où l’on apprécie alors majestueusement la notion de Corbeille de linux. En effet, à cause d’un lieu unique pour stocker les fichiers (du moins par défaut), la suppression d’un fichier sur une partion différente de celle où réside la corbeille, va impliquer le déplacement du fichier vers la corbeille sous forme de copie intégrale.

D’un certain coté, pourquoi pas. Sauf que quand de gros fichiers sont supprimés (exemple: suppression de films lors d’un trie), ils sont intégralement copiés vers la corbeille. Cela prend donc énormément de temps, alors qu’à coté, Windows, gére déjà cela très bien il y a déjà plus de 10 ans. Linux ? ahahah

Que fait Windows ? Sur chaque partition (lecteur du coup), un dossier nommé Recycler est présent et correspond à la corbeille de la partition. Ainsi sous Windows, quand on supprime un fichier, c’est instantané, c’est un déplacement sans copie (le déplacement est un simple renommage dans ce cas).

Ceci dit, linux a la problématique d’être multi utilisateurs (bon Windows aussi), et la gestion des droits ou de la sécurité empêcherait de créer une corbeille dans chaque partition. Bon en fait non, le fichier reste le propriétaire de l’utilisateur, et les droits devraient se limiter strictement à cet utilisateur une fois dans la corbeille. Hop, corbeille sécurisée. Mais linux a de grosses lacunes et traine un retard monstre, le temps que chaque distribution adopte le même système et que cela devient la norme…

En fait, voilà comment ça va se passer, ou plutôt comment ça s’est passé car forcément ce problème en a déjà fait chier plus d’un, et surement des développeurs, c’est exactement comme pour LibreOffice dans l’article précédent. Donc, le problème est négligeable car une solution existe: supprimer le fichier directement sans passer par la corbeille. Du coup, pas de solution à programmer et les développeurs peuvent faire autre chose de leur vie. Il y a même une solution alternative, déplacer soi-même les fichiers dans un dossier temporaire appelé par exemple « A supprimer », qui le moment venu, sera vidé manuellement. Hé, c’est linux, c’est le monde du bidouillage, en fait je crois que c’est fait exprès 🙂

Ahahah, les mecs qui prônent que linux est prêt pour le desktop me font de plus en plus de peine. Okay pour des vieux et encore, un vieux ça peut utiliser LibreOffice et vouloir supprimer un gros fichier d’une clé USB. C’est linux que les gens mettront à la poubelle. Pour du desktop il faut de la finition, et avec Windows c’est le bonheur.

Blague à part: Linux s’emballe à cause de la seconde intercalaire (source), beaucoup de serveurs ont été impacté. La solution ? elle existait déjà, mais elle n’a pas été mise en avant. Hehe, il faut bien justifier le salaire des IT, linux c’est du service après tout, il faut que ça plante de temps en temps !