Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for May, 2007

Niveau :      
Résumé : xrestop

Le serveur X (xorg) peut être vu comme un noyau avec ses propres applications, son monde à lui. Tout comme le noyau, il fournit des services de base, il est utilisé par toutes les applications graphiques et il consomme de la mémoire et du temps de calcul pour ses applications.

Il est donc tout naturel qu'il dispose d'une application permettant de monitorer les processus qui tournent comme client du serveur X. Elle s'appelle xrestop, pensez à l'installer si vous ne l'avez pas (paquet xrestop sous debian).

$ xrestop

Les informations importantes affichés par xrestop sont la commande du processus concerné, le pid et le total de mémoire consommée par le serveur X pour cette application. Cette mémoire est en général majoritairement dédiée aux pixmaps. C'est-à-dire aux images stockées sur le serveur. D'autres informations sont données, comme le nombre de pixmaps ou de fontes utilisées, ce qui peut avoir son intérêt lorsqu'on est développeur.

Vous avez ainsi l'explication de pourquoi votre serveur X est souvent un gros consommateur de mémoire. D'ailleurs on constate aussi que firefox consomme beaucoup de pixmaps, et cette mémoire n'est pas comptée pour firefox lorsqu'on analyse sa consommation, par exemple avec htop !

Niveau :      
Résumé : man 1 man

RTFM

Connaissez vous l'acronyme RTFM ? Il veut dire Read The Fucking Manual. C'est un mot couramment utilisé pour vous enjoindre poliment :-D de lire le manuel avant de poser des question stupides. On peut aussi trouver des variantes à base de google.

Pourquoi cette manie ? Tout simplement parce qu'on trouve tout dans le manuel ou presque. Il fut un temps ou les manuels étaient rares et on vous enjoignait plutôt de lire le source( Use the Source Luke !). Le code source d'une application est toujours la meilleure documentation qui soit car on peut vous certifier qu'elle est à jour :-)

Toujours est-il que le man est votre meilleur point d'entrée dans le monde unix, il permet entre autre de ne pas toujours solliciter vos amis lorsque vous pouvez vous débrouiller seul comme un grand.

Le premier man à connaître est évidemment man :

$ man man

Si vous voulez connaître la liste des manuels disponibles pour partir à la recherche d'une commande (et pour tous les lire bien sûr), il existe bien sûr une commande man pour cela :

$ man -k ".*"

En pratique certains de ces manuels sont identiques, car ce sont des liens symboliques. Mais tout de même :

$ find /usr/share/man -type f

ne renvoie que 10 000 fichiers chez moi, prenez votre temps.

Catégories

Pour vous repérer, les manuels sont divisés en 9 catégories :

  1. Programmes exécutables ou commandes de l’interpréteur de commandes (shell)
  2. Appels système (Fonctions fournies par le noyau) ;
  3. Appels de bibliothèque (fonctions fournies par les bibliothèques des programmes)
  4. Fichiers spéciaux (situés généralement dans /dev)
  5. Formats des fichiers et conventions. Par exemple /etc/passwd
  6. Jeux
  7. Divers (y compris les macropaquets et les conventions). Par exemple, man(7), groff(7)
  8. Commandes de gestion du système (généralement réservées au superutilisateur)
  9. Sous-programmes du noyau (hors standard)

continue reading...

Niveau :      
Résumé : reboot 1 ; shutdown -c ; telinit 2

Lorsque vous éteignez votre machine en ligne de commande vous utilisez probablement la commande halt ou shutdown -h.

Une option utile et qui devrait toujours être utilisée par défaut est le temps d'attente avant l'extinction réelle de la machine. Le but est double. Tout d'abord si vous avez des utilisateurs qui ont des terminaux ouverts sur la machine, ceux-ci seront avertis de l'extinction un peu à l'avance, ils auront donc le temps de sauvegarder leur travail en cours ou de demander d'annuler l'extinction de la machine.

De plus il peut arriver de faire une erreur et de vouloir annuler son action (par exemple on peut se tromper de terminal et taper la commande sur une autre machine :-).

Pour cela la commande shutdown (ainsi que halt et reboot) prend un paramètre entier qui indique le nombre de minutes entre le moment où les utilisateurs seront avertis de l'extinction et le moment où la machine sera réellement arrêtée.

$ shutdown 5

De plus cette commande ne rends pas la main, il est donc possible de l'interrompre directement avec un ctrl-c. Si vous n'êtes pas l'utilisateur qui a lancé la commande vous avez aussi la possibilité d'annuler l'extinction en cours avec la commande :

$ shutdown -c

Enfin notez qu'il est possible d'arrêter l'extinction de la machine in-extremis lorsque la procédure d'arrêt a déjà été lancée. Il vous faut taper la commande :

$ telinit 2

2 pouvant être remplacée par la valeur du runlevel habituel (2 pour debian, 5 pour redhat...). Vous pouvez utiliser la commande runlevel pour connaître votre runlevel courant.

Attention, le système d'extinction des systèmes étant de plus en plus rapide, la fenêtre d'ouverture pour cette commande est très réduite.

Par conséquent une bonne habitude à prendre pour éteindre ou redémarrer une machine est toujours de lancer la commande sous la forme suivante :

$ reboot 1

Elle peut vous sauver dans bien des situations et ce n'est pas une minute d'attente qui devrait vous affecter (au contraire, cela vous laisse le temps de réfléchir et de planifier vos actions :-).

Niveau :      
Résumé : ^] et ~.

Telnet et son successeur sécurisé ssh sont des clients permettant un accès distant. Tout caractère tapé dans le client est aussitôt transmis au système distant, qui aura la charge de l'interpréter. Tous ! Non, quelques caractères résistent encore et toujours au transfert sauvage.

En effet, il est possible de donner des commandes directement au client avec le clavier. Pour que celles-ci fonctionnent, il faut que certains caractères ne soient pas envoyés au serveur mais interprétés par le client lui-même. Ce sont des caractères de contrôle. Nous allons voir le cas particulier du caractère d'échappement.

Telnet

Le caractère d'échappement de telnet est par défaut ^] (ou ctrl-] selon l'écriture choisie, ou ctrl-$ si vous êtes sur putty). Tapez ensuite "help<return>" pour avoir la liste des commandes que peut comprendre telnet. La plus importante à connaître est quit.

Elle est utile lorsque vous tentez de vous connecter à une machine avec telnet et que votre connexion est bloquée pour une raison ou pour une autre. Ex :

$ telnet localhost imap
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.

Si on ne connaît pas le protocole, on ne peut plus sortir de telnet car l'imap demande une séquence bien particulière pour vous déconnecter. De plus une fois connecté le ctrl-c ne fonctionne plus car il est envoyé comme tout autre caractère. Il vous faut donc donc taper "^]quit<return>" pour forcer la déconnexion.

Note : le caractère de contrôle ^E (ou ctrl-E) permet de désactiver l'affichage de ce qu'on est en train de taper, c'est parfois utile si le serveur répète ce que vous écrivez.

Ssh

Le caractère d'échappement de ssh est par défaut ~ attention, il ne fonctionne qu'après un retour à la ligne. L'aide est cette fois disponible avec la séquence ~? et la commande la plus importante est ~. qui permet comme avec telnet de couper la connexion et de quitter ssh.

Par exemple si vous lancez un processus qui bloque votre shell ou si le serveur distant ne répond plus, vous ne pouvez plus rien faire. La séquence permet d'arreter directement le client ssh sans attendre un timeout.

Une autre commande particulièrement utile de ssh est ~C elle permet de rentrer dans un mode commande de ssh. Help vous donnera plus d'infos, mais cette commande permet surtout d'ajouter ou de supprimer des tunnels directement comme vous l'auriez fait avec les options -L et -R, mais cette fois sans relancer ssh.

Niveau :      
Résumé : passwd -l ; passwd -u

Un hash de mot de passe contenant un ! est invalide car il contient un caractère qui ne peut être généré par une fonction de hash. Mettre un ! sur le hash d'un utilisateur dans /etc/shadow empêche donc cet utilisateur de se connecter (par mot de passe).

Il est donc facile de désactiver un compte utilisant les mots de passe, mais attention, cela ne fonctionne pas pour les utilisateurs utilisant une clé ssh ou tout autre authentification à travers pam.

La commande passwd permet de faire ces manipulations pour vous :

$ passwd -l toto

bloque le mot de passe de l'utilisateur toto

$ passwd -u toto

débloque le mot de passe de l'utilisateur toto

$ passwd -S toto
> toto L 05/14/2006 0 99999 7 -1

vérifie l'état de l'utilisateur toto. La lettre L après le login indique un compte bloqué (Locked) P indiquerait un compte normal (Password) et NP un compte sans mot de passe (No Password).

Niveau :      
Résumé : /srv /opt /media

FHS

Un standard a plusieurs buts. Tout d'abord il vous propose une solution réfléchie à un problème, laquelle surpassera nécessairement la première idée qui vous passe par la tête. Ensuite, il permet de faire en sorte que tout le monde utilise les mêmes outils ou les mêmes méthodes. L'intérêt est de permettre à monsieur Y de ne pas être perdu lorsqu'il passe d'un système à un autre.

La FHS (Filesystem Hierarchy Standard) définit comment les fichiers devraient être organisés sur un système unix. Elle se base sur des pratiques établies depuis longtemps, c'est pourquoi récent ici signifie environ 10 à 20 ans.

Évitons de parler des hyper connus /etc /bin /lib ... Intéressons-nous plutôt à ceux qui sont plus rares ou plus récents.

/media vs /mnt

/media est une invention relativement "récente", il sert à héberger les points de montage des media temporaires comme un CD ou une clé usb. On peut aussi y trouver des points de montage un peu moins temporaires comme une partition de stockage de données.

Cette fonction a pendant quelque temps été attribuée à /mnt qui contenait des sous répertoire pour ces points de montage. Mais /mnt a été créé pour fournir un point de montage temporaire, par exemple pour tester un disque. Il doit donc rester vide lorsqu'il n'est pas monté.

/opt vs /usr/local

/opt est aussi une invention "récente", contrairement à /usr/local.

/usr/local à pour but de laisser à l'administrateur le choix d'installer des paquets qui ne sont pas gérés par sa distribution tout en gardant la hiérarchie habituelle d'une distribution. C'est pourquoi on trouve dans /usr/local la même arborescence que dans /usr. C'est à ça que sert l'option --prefix= lorsque vous utilisez un script ./configure pour compiler vos outils.

/opt lui ressemble dans le principe, installer un paquet non géré par la distribution, mais il est différent dans le fonctionnement. /opt à été pensé pour le vendeur de logiciel. Chaque paquet doit s'installer dans /opt/<paquet> ou /opt/<vendeur> et ainsi être totalement indépendant. Un tel paquet ne peut et ne doit pas interférer avec les autres paquets du système.


continue reading...

Niveau :      
Résumé : sudo -l ; sudo -s ; NOPASSWD:

La théorie

Sudo est un outil utilisé par défaut dans certaines distributions pour donner les droits d'administration système à certains utilisateurs. Sudo a l'avantage sur su de ne pas nécessiter la mémorisation d'un mot de passe supplémentaire. De plus il permet de retirer des droits à une personne. Allez en faire autant avec su pour démémoriser un mot de passe (anesthésie, scalpel, scie, petite cuillère, travaux de couture... ce n'est pas de tout repos).

Le principe de sudo est simple, toute commande tapée derrière sudo est exécutée en tant qu'utilisateur root (par défaut) si le droit vous en a été donné. Ceci est vérifié après vous avoir demandé votre mot de passe pour une vérification complémentaire de votre identité. Celui-ci vous sera redemandé une fois de temps en temps. Petit inconvénient, les divers sudo ne partagent pas le même cache (sudo, gksudo, kdesudo vous demanderont tous un mot de passe si vous les lancez successivement).

Sudo signale automatiquement à l'administrateur lorsque quelqu'un tente de l'utiliser sans disposer de droit pour le faire. Pour ne pas donner l'impression de chercher à abuser des règles, il est possible de connaître les commandes qui vous sont autorisées avec l'option -l :

$ sudo -l

Vous liste vos droits.

La pratique

Sudo fonctionne commande par commande, c'est bien utile pour un besoin temporaire de devenir root :

$ ./configure
$ make
$ sudo make install

ou pour lancer une application graphique :

$ sudo wireshark

Cela peut devenir lourd si vous en avez besoin pour plusieurs commandes d'affilée. Il existe pour cela l'option -s qui fait en sorte que toutes les commandes suivantes soient lancées avec sudo (dans un sous shell) :

$ sudo -s

continue reading...