Affichage des articles dont le libellé est Ubuntu-Shell. Afficher tous les articles
Affichage des articles dont le libellé est Ubuntu-Shell. Afficher tous les articles

mercredi 8 juin 2016

Monter un lecteur reseau sous Linux - Samba share

Si vous cherchez à monter une "lecteur réseau" sous Linux (Linux Mint dans mon cas, donc Ubuntu), il va falloir redescendre dans les montage Samba CIFS.
Mon dieux que cela faisait longtemps.... terriblement longtemps

Voici une référence d'article qui vous aidera indéniablement:
Pour le moment, j'en suis à faire un montage avec la commande mount avant de le rendre permanent dans /etc/fstab

Pour commencer, il faut créer un point de montage, dans /mnt puisqu'il s'agit d'un lecteur présent en permanence (pas comme une carte sd qui, elle, doit être montée dans /media .

sudo mkdir /mnt/netstock

En ligne de commande, cela ressemble à ceci

sudo mount -t cifs -o user=share_username,uid=local_user_owning_files  //192.168.1.2xx/netstock /mnt/netstock

Une fois la commande saisie, il vous sera demandé le mot de passe du lecteur réseau (celui correspondant à user=) pour faire le montage

Les paramètres:
  • share_username : c'est le nom d'utilisateur windows a utiliser pour connecter le lecteur réseau
  • local_user_owning_files : si ce paramètre est omis, les fichiers du share seront vu comme appartenant à root. Perso, je préfère qu'il soient détenu par l'utilisateur courant (utilisez votre login Linux pour ce paramètre)
Selon la doc, il est possible d'ajouter un paramètre "password=" mais je n'ai encore aboutit a rien avec celui-ci... la raison voudrais qu'il ne soit pas possible de saisir un mot de passe en clair dans un script ;-)

FSTAB - montage automatiquement
il est aussi possible d'ajouter le montage dans le fichier nano /etc/fstab
Et pour une raison qu'il m'échappe, la le paramètre password fonctionne comme un charme!!

# NetStock share
//192.168.1.xxx/netstock /mnt/netstock            cifs    user=share_username,_netdev,uid=local_user_owning_files,password=XXXXX              0       0

Le paramètre _netdev informe fstab qu'il faut attendre que le périphérique réseau soit disponible avant de procéder au montage.

Pour recharger le fichier fstab, il suffit de faire un mount -a

jeudi 29 octobre 2015

Liste des processus - commande ps

la commande ps -ef permet de lister facilement les processus.... mais ce qui serait parfois utile de savoir, c'est l'état du processus.
Pour cela, nous avons la commande ps -aux  qui fourni un résultat similaire à ceci.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   4464  2512 ?        Ss   sep17   0:02 /sbin/init
root         2  0.0  0.0      0     0 ?        S    sep17   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    sep17   4:49 [ksoftirqd/0]

yyy
La colonne STAT nous indique le statut du processus dont voici les principaux
  • D - Uninterruptible sleep - En sommeil et ne pouvant pas être arrêté (généralement en attente d' IO)
  • R - Running - Exécuté ou processus exécutable (dans la queue d'exécution)
  • S - Sleep - en sommeil et pouvant être interrompu (en attente d'événement)
  • T - Arrêté, soit suite à u signal de contrôle de job/processus ou parce qu'il est en cours de débogage (traced).
  • X - processus mort (dead). Nous ne devrions jamais voir ce statut
  • Z - Zombie, processus terminé et non repris en charge (collecté/libéré) par son processus parent.

dimanche 17 mai 2015

Linux - Les permissions sur les fichiers et gestion des utilisateurs

Préambules
Utiliser une système Unix/Linux est devenu relativement simple. Des distributions comme Ubuntu ou Linux Mint facilitent grandement la prise en main par des Néophytes.

Il n'en reste pas moins que Linux/Unix ne sont pas seulement des systèmes multitâches mais aussi des systèmes multi-utilisateurs. Cela signifie que plusieurs utilisateurs peuvent utiliser un même ordinateur en même temps en mode graphique, en telnet, ssh. Il est même possible de démarrer un programme graphique à distance en indiquant que l'affichage se fait sur le système distant.

Un système multi-utilisateur c'est bien mais il ne faudrait pas que ce que fait un utilisateur puisse planter l'ordinateur... ou qu'il puisse avoir accès à des informations auxquelles il n'aurait pas droit.

C'est la qu'intervient la gestion des permissions, héritée de Unix et toujours d'application aujourd'hui.

Le système de permissions
Le mieux pour découvrir le système de permission c'est de se pencher sur la commande ls -l  qui liste les fichiers avec leurs permissions.

Admettons que nous avons le fichier xfile.mp3, nous allons lister ses permissions.

[domeu@dom-pc ~ $] ls -l xfile.mp3
-rw-rw-r-- 1 domeu domeu 1097374 Sep 26 18:48 xfile.mp3

Décortiquons l'information:
  • - : Le premier caractère indique s'il s'agit d'un fichier (-) ou d'un répertoire (d)
  • rw-rw-r-- : Les permissions (r: read=lecture, w: write=écriture, x=execution) mais nous y revenons ci-dessous.
  • 1 : indique le nombre de liens vers le fichier
  • domeu : propriétaire du fichier (dit owner). L'utilisateur est domeu.
  • domeu : groupe auquel appartient le fichier (ici le groupe est celui de l'utilisateur mais pourrait être dialout, adm, plugdev, etc).
  • 1097374 : La taille du fichier
  • Sep 26 18:48 : La date de dernière modification du fichier
  • xfile.mp3 : le nom du fichier
Les droits d'accès au fichier:
Les droit d'accès sont repris sous forme de regroupement de 3 lettres rwx indiquant respectivement que le droit de lecture (r) est activé, d'écriture (w) est activé ou d'exécution (x) est activé. Lorsqu'un droit est activé, la lettre est visible sinon elle est remplacée par un tiret.

La description reprends 3 groupes de 3 lettres.
  • rw- : Premier groupe de 3 lettres. Indique les droits du propriétaire du fichier.
    L'utilisateur domeu peut lire (r), écrire (w) mais ne peut pas exécuter le fichier.
  • rw- : Deuxième groupe de 3 lettres. Indique les droits des utilisateurs attachés au groupe du fichier (groupe "domeu" dans ce cas).
    Les utilisateurs du groupe "domeu" peuvent lire (r), écrire (w) mais pas exécuter le fichier
  • r-- : troisième groupe de 3 lettres. Indique le droit des autres utilisateurs.
    lecteur (r) uniquement. Les droit w et x ne sont pas disponibles. 
Droit d'accès sur répertoire:
Il est utile de faire remarquer que le droit 'x' (exécution) à une signification différente dans le cas d'un répertoire. Dans le cas d'un répertoire, x autorise la lecture du contenu du répertoire.

Examinons un autre cas:
ls -l /bin/bash
-rwxr-xr-x 1 root root 316848 Feb 27  2000 /bin/bash

Le premier "-" indique que c'est une fichier.
Ensuite, "rwx" indique de l'utilisateur "root" peut lire (r), écrire/modifié (w) et exécuter (w) le fichier.
Le groupe suivant "r-w" indique de tout utilisateur du groupe "root" peut lire et exécuter le fichier (mais pas le modifier, seul l'utilisateur root à ce droit).
Le troisième groupe, également "r-w", signifie que tous les utilisateurs du système peuvent lire le fichier et l'exécuter.

Changer les permissions d'un fichier
La commande chmod permet de modifier les permissions sur un fichier.
Il y a deux façons de modifier les droits sur un fichier mais nous allons nous attacher à la méthode la plus répandue.

Il est facile de concevoir les droits d'accès comme des bits.
rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

Pour les différentes valeurs possibles, nous retrouvons:
rwx = 111 en binaire = 7
rw- = 110 en binaire = 6
r-x = 101 en binaire = 5
r--- = 100 en binaire =4

Grâce à cela, nous pouvons représenter les 3 groupes de permissions rwx pour le propriétaire, group et autres) à l'aide de 3 chiffres consécutifs.
Ainsi 600 donne les droits rw- pour le propriétaire, rien pour le groupe et rien pour les autres utilisateurs.

l'instruction serait alors:
chmod 600 le_fichier

Voici quelques séries de valeurs des permissions les plus répandues sur les fichiers:
  • 777 - (rwxrwxrwx) aucune restriction. tout le monde peut tout faire. Cette configuration n'est pas souhaitable.
  • 755 - (rwxr-xr-x) le propriétaire du fichier peut le lire, l'écrire, l'exécuter. Tous les autres peuvent le lire et l'exécuter. Cette configuration est habituelle de pour les programmes utilisés par tous les utilisateurs.
  • 700 - (rwx------) seul le propriétaire du fichier peut l'utiliser. Les autres ne peuvent rien faire avec. Cette configuration est utiliser pour les programmes utilisables uniquement par l'utilisateur (et que les autres ne peuvent pas voir où utiliser).
  • 666 - (rw-rw-rw-) tous les utilisateurs peuvent lire et écrire dans les fichiers (mais pas les exécuter). Si vous rencontrez des problèmes de permissions, cette option sera vous tirer facile d'un mauvais pas. Attention, cela reste quand même très permissif.
Changer les permissions d'un répertoire
Comme précisé plus avant dans l'article le "x" à une signification différente lorsqu'il s'agit d'un répertoire.
Comme un répertoire ne s'exécute pas, le "x" sera utilisé pour permettre l'accès au contenu du répertoire (comprenez "lire ce qu'il y a dedans").

Voici quelques séries de valeurs des permissions les plus répandues sur les répertoires:
  • 777 - (rwxrwxrwx) aucune restriction. tout le monde lister le contenu du répertoire, créer ou effacer des fichiers. Cette configuration n'est pas souhaitable.
  • 755 - (rwxr-xr-x) le propriétaire à tous les droits. Les autres utilisateurs peuvent lister le contenu et lire les fichiers. Par contre, les autres utilisateurs ne peuvent pas écrire/effacer des fichiers. Cette configuration est typique pour les répertoires que vous voulez partager avec d'autres utilisateurs.
  • 700 - (rwx------) le propriétaire à tous les droits. Les autres utilisateurs n'ont aucun droit. Cette configuration est pratique pour les répertoires qui doivent reste disponibles uniquement pour le propriétaire.
Changer le propriétaire d'un fichier
Nous l'avons vu, le propriétaire du fichier est quelqu'un de particulier.
Il est donc intéressant de pouvoir modifier/changer le propriétaire d'un fichier/répertoire... c'est ce que fait la commande chown.

Cette instruction se fait en mode super utilisateur, il faut donc utiliser un sudo pour changer le propriétaire d'un fichier.

sudo chown nouveau_propriétaire le_fichier

Changer le groupe d'un fichier
Le propriétaire d'un fichier n'est pas le seul à disposer de droit particulier, il y a aussi le groupe.
En associant des utilisateurs à un groupe donné, vous pouvez leur donner un droit d'accès particulier sur un fichier ou répertoire (même si il n'en est pas propriétaire).
Par exemple, ce serait le cas si l'on voulait autoriser l'accès sur des données comptables pour tous les personnes du service comptabilité.

Pour changer le groupe d'un fichier/répertoire, l'on utilise la commande chgrp.
Tout comme chown, il faut être super utilisateur pour modifier cette information (il faut donc utiliser un sudo).



sudo chgrp nouveau_groupe le_fichier


Les utilisateurs et stockage des utilisateurs
Gestion multi-utilisateurs c'est bien, assignation des permission c'est cool mais faut-il encore savoir comment créer des utilisateurs.
J'ai trouvé l'article The Complete Guide to “useradd” Command in Linux vraiment très bien fait, en voici l'essence.  

Création d'un utilisateur:
pour créer un utilisateur, il faut utiliser la commande useradd et passwd (pour assigner son mot de passe).

$ sudo useradd minty
$ sudo passwd minty
Changing password for user minty.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


Lister les utilisateurs
Les informations utilisateurs sont stockés dans le fichier /etc/passwd
En inspectant le contenu de ce fichier, nous apprenons plein de choses intéressantes:

more /etc/passwd

Contenu de /etc/passwd
Nous y retrouvons les informations suivantes (en dernière ligne):
  • minty - nom de l'utilisateur
  • x - le mot de passe, toujours 'x' car il est stocké dans le fichier encrypté /etc/shadow
  • 1001 - cette première valeur est l'UID (identification de l'utilisateur)
  • 1001 - cette seconde valeur est le GUI (identification du groupe, par défaut, chaque utilisateur dispose de son propre groupe).
  • (vide) - cette zone vide contient une information sur l'utilisateur (commentaire comme le prénom+nom de l'utilisateur). Cette zone peut être remplie au moment de la création de l'utilisateur ou remplie par la commande finger.
  • /home/minty - répertoire 'home' de l'utilisateur.
  • (vide) - cette dernière zone contient la commande shell. Cette dernière peut être précisée au moment du useradd (par exemple: /bin/bash) mais peut également être /usr/sbin/nologin (pas de login possible mais ssh autorisé, plus d'info sur nologin ici) ou /bin/false (l'utilisateur ne peut pas se logger)
Ajouter des groupes à un utilisateur
Il est possible d'ajouter un ou plusieurs groupes pour un utilisateur. Cela se fait à l'aide de l'instruction.

useradd -G admins,webadmin,developers minty

Plus d'information sur l'utilisateur
La commande id permet d'obtenir plus d'information sur l'utilisateur courant (ou l'utilisateur désigné dans la commande)

$ id minty
uid=1001(minty) gid=1001(minty) groupes=1001(minty)


Ajouter un groupe
Nous avons pas mal parlé des utilisateurs, des groupes et des droits.
Il manque encore une commande, celle qui permet de créer un groupe.

groupadd nom_du_groupe

Il ne reste plus qu'a ajouter ce groupe pour les utilisateurs concerné.

useradd -G nom_du_groupe minty
  
Ressources

jeudi 16 avril 2015

Ubuntu / Mint - monter une carte SD en ligne de commande

Voici une petite recette de cuisine pour monter une carte SD en ligne de commande.

J'ai une machine juste derrière moi, bien utile mais son clavier est mort... je travaille donc en SSH (donc ligne de commande). J'ai pourtant besoin de récupérer les photographiques qui y sont stockées par mon Nikon D5000.
Voici donc une petite recette de cuisine:

Identifier le device (périphérique)
Insérer la carte SD puis taper la commade dmesg.
Les messages de debug nous indiquerons le périphérique /dev ou nous pourrons trouver notre carte SD.

[  557.134222] perf samples too long (2524 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
[  576.595295] EXT4-fs (mmcblk0): VFS: Can't find ext4 filesystem
[  576.595747] EXT4-fs (mmcblk0): VFS: Can't find ext4 filesystem
[  576.596201] EXT4-fs (mmcblk0): VFS: Can't find ext4 filesystem
[  576.596552] FAT-fs (mmcblk0): bogus number of reserved sectors
[  576.596557] FAT-fs (mmcblk0): Can't find a valid FAT filesystem
[  576.597091] FAT-fs (mmcblk0): bogus number of reserved sectors
[  576.597095] FAT-fs (mmcblk0): Can't find a valid FAT filesystem
[  586.441706] FAT-fs (mmcblk0): bogus number of reserved sectors
[  586.441713] FAT-fs (mmcblk0): Can't find a valid FAT filesystem
[  625.835340] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[  952.916270] mmc0: card 0007 removed
[ 1660.553681] mmc0: new SDHC card at address 0007
[ 1660.553936] mmcblk0: mmc0:0007 SD8GB 7.63 GiB
[ 1660.556428]  mmcblk0: p1


Le log nous indique clairement un périphérique mmcblk0 et en faisant un peu plus attention, nous avons même l'information sur la partition p1

Le périphérique est donc mmcblk0p1

Pour s'en convaincre, il suffit de faire un petit ls /dev/mmcblk0* et nous obtenons:

/dev/mmcblk0 
/dev/mmcblk0p1

Monter la carte SD
Dans Linux Mint 17, les périphériques externes sont montés dans /media/nom_utilisation/ .

Nous allons commencer par créer le répertoire sur-lequel nous allons monter la carte SD.
Dans l'exemple ci-dessous, dom est le nom d'utilisateur.

cd /media/dom
mkdir sdcard


Puis effectuer le montage en fat32 (type "vfat") très communément répandu pour les cartes SD d'appareil photo.

sudo mount -t vfat /dev/mmcblk0p1 /media/dom/sdcard

Voila, reste plus qu'a aller explorer la carte.

cd /media/dom/sdcard
cd DCIM
cd 100D5000
ls *.JPG

Démonter la carte

Avant d'éjecter la carte du lecteur, vous devez vous assurer que toutes les données sont bien écrites dessus. Pas besoin d'espionner les entrées/sorties, il suffit de démonter le périphérique (unmount), cette commande se chargera de faire le ménage et les dernière opérations d'écritures en attente.

Démonter un périphérique est aussi simple que:

sudo umount /media/dom/sdcard

Ne pas oublier de retirer le répertoire sur lequel nous avons monté le périphérique... ce dernier n'est plus utile.

cd /media/dom
rmdir sdcard



dimanche 1 mars 2015

Comment démarrer une application graphique sur un Linux distant via SSH

Je voulais faire une petite surprise à ma tit femme en transférant et affichant sur son PC (Linux Mint) une petite collection d'image en utilisant une connexion SSH.

Le transfert de fichier SSH était déjà abordé dans un précédent article "Transfert des fichiers vers son Raspberry-Pi", cela fonctionne également avec n'importe quel PC Linux supportant les connexions ssh (sudo apt-get install openssh-server)

Reste alors à faire ouvrir le dossier (sur l'ordinateur distant) en utilisant une ligne de commande. Comme le navigateur de fichier sur Mint est "caja", suffit de saisir les commandes suivantes:

oli@bert:~$ ssh tim
oli@tim:~$ export DISPLAY=:0
oli@tim:~$ caja repertoire_a_afficher
Et voila....

Source: How to start a GUI software on a remote Linux PC via SSH

lundi 28 juillet 2014

ClamAV - Un anti-virus pour mon Linux

Hé oui, ce n'est pas parce que Linux est plus sécurisé qu'il n'est pas totalement immunisé.

En cas de doute, sachez qu'il existe aussi des anti-virus pour Linux

lundi 13 janvier 2014

Petit Rappel sur l'archivage Linux tar.gz

Source: http://www.linux-kheops.com/doc/dupoux/compress/

Introduction
Nous allons voir comment compresser et décompresser des fichiers sous Linux (comme avec Winzip sous Windows). Nous n'étudierons que les outils en ligne de commande, car ils sont standards, fonctionneront sur toutes les distributions de Linux, et il n'est pas nécessaire de disposer de XWindow.
La compression est un élément indispensable. Dès qu'on récupère un programme sur Internet, il est compressé. La plupart du temps, le format utilisé est le format .TAR.GZ (tar.gzip), qui est standard, et que tout le monde peut décompacter sans problème. Mais il existe aussi un format plus récent: le BZ2 (bzip2) qui est moins répandu, mais plus efficace. Il faut avoir l'utilitaire Bzip2 pour pouvoir utiliser les données. Ce dernier format est d'ailleurs utilisé pour compresser le noyau 2.2 de Linux: avec ce format (BZ2), il n'occupe que 10 Mo, contre 13 Mo en .TAR.GZ.

Le format .tar.gz
L'extension .TAR.GZ (ou parfois TGZ) indique que le fichier est avant tout une archive TAR, qui a été ensuite compressée avec Gzip (GZ). Le rôle de l'utilitaire TAR est de créer une archive, donc de regrouper plusieurs fichiers, comme par exemple tout un dossier, en un unique fichier d'extension .TAR. Et ensuite, gzip compresse cette archive. La compression et la décompression s'effectuent donc en deux étapes. Mais on peut demander à TAR de faire appel à Gzip avec l'option z, donc dans ce cas, une seule opération suffit à créer ou utiliser un fichier .TAR.GZ. 

Compression d'une Archive

Syntaxe:
tar <options> <fichier .tar.gz à créer> <fichiers à ajouter>

Dans les options, on doit mettre c pour créer une archive et non la décompresser, f pour indiquer qu'il s'agit d'un fichier, on peut mettre z pour compresser avec Gzip, et v si on désire avoir la liste des fichiers compressés qui défile.

Exemple:
tar cfvz kfilecoder.tar.gz /root/projects/kfilecoder

Dans cet exemple, on crée un fichier kfilecoder.tar.gz compressé avec Gzip, dans lequel on met tous les fichiers contenus dans le dossier /root/projects/kfilecoder



Extraction d'une archive .TAR.GZ

Syntaxe: 

tar <options> <fichier .tar.gz à extraire>

Dans les options, on doit mettre x pour extraire l'archive indiquée, f pour indiquer qu'il s'agit d'un fichier, on peut mettre z pour décompresser avec Gzip, et v si on désire avoir la liste des fichiers compressés qui défile.

Exemple: 
tar xfvz kfilecoder.tar.gz

Dans cet exemple, on extrait l'archive kfilecoder.tar.gz, en la décompressant avec Gzip, tous les fichiers sont copiés dans le dossier courant.
Remarque: attention à la casse. Par exemple l'option z (minuscule) pour compresser au format Gzip ne doit pas être confondue avec l'option Z (majuscule) qui compresse au format Compress, qui est totalement différent.
 

lundi 18 avril 2011

Bash Programming - ressources

Tous les utilisateurs Unix, et donc Linux, savent qu'il est nécessaire à un moment ou l'autre de se frotter au langage de scripting. S'il existe plusieurs langages de scripting, le plus répandu reste certainement Bash (Bourne Again Shell) issus d'une initiative de la Free Software Foundation.

Voici quelques référence relatives au Bash Programming.

Et pour un accès plus facile, ces références seront également accessible depuis la zone de raccourcis de ce blog (accessible sur la droite de cet article)

jeudi 17 mars 2011

Monitorer les processus sous Ubuntu

Introduction
Sous windows, il existe le "task manager" et sous Ubuntu le "Moniteur Système" propose un environnement graphique pour visualiser les processus et l'utilisation des ressources (gnome-system-monitor, accessible depuis le menu "Système | Administration | Moniteur Système").

Tout comme sous Windows, il est possible de consulter les tâches en cours d'exécution, la consommation des ressources processeurs, de mémoire mais également le trafic réseau.
Tout comme sous Windows, il est également possible de terminer un processus (ou bien de le "tuer" en utilisant le menu contextuel).
A l'avantage de gnome-systeme-monitor, il est également possible de consulter les fichiers ouverts (et donc aussi les connexions réseaux) ainsi qu'une "table d'allocation mémoire".

Si la plupart des utilisateurs seront satisfait avec cette option graphique, d'autres voudront aller un peu plus loin et cette exploration avancée passe par la ligne de commande.
Dans ce domaine, surveiller les processus d'Ubuntu se fait de la même façon que sur n'importe quelle autre machine Linux/Unix.

Processus ID (pid)
Pour commencer, il faut savoir que tout processus Unix (programme, deamon, etc) est identifier par un identifiant unique, il s'appelle "pid".
Cet identifiant est également affiché dans le volet "Processus" du Moniteur Système.
Il est également possible d'obtenir la liste des processus (et pid correspondant) par différentes lignes de commande.
Ce qu'il faut savoir, c'est que le "pid" est une pierre angulaire de la gestion des processus.

free: La mémoire disponible
La commande free permet d'afficher l'état de la mémoire (utiliser-g ou -m pour afficher les résultats en giga ou megaoctects).

xxx@yyy:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2508       1392       1116          0        153        710
-/+ buffers/cache:        528       1980
Swap:        11998          0      11998
Shared - indique la mémoire partagée entre processus.
Buffers - la mémoire allouée au systèmes d'entrée/sortie.
Cached - la mémoire actuellement utilisé pour faire du cache.
+/- buffers/cache - indique la quantité de mémoire réellement utilisée pour les buffers et caches.

Juste une note pour signaler que [-/+ buffers/cache].free = mem.free + mem.shared + mem.buffer + mem.cached.

Top: Liste des processus
La commande top affiche quelques informations utiles ainsi qu'une liste des processus trié par ordre de consommation cpu.
Si top permet de garder un oeil sur les processus les plus gourmants et permet l'identification des processus qui freine le bon fonctionnement du système, le rafraichissement constant de top (toutes les 3 à 5 sec) le rend aussi peu utilise lorsque l'on désire espionner un processus particulier.
En effet, la position d'un processus dans la liste varie constamment avec fonction de sa consommation cpu. C'est assez agacant.
Voici le résultat d'une commande top.
Attention: Il est cependant possible d'indiquer précisément le ou les processes à suivre (top -p pid1,pid2,...)

top - 11:37:01 up 3 days, 21:11,  2 users,  load average: 0.34, 0.24, 0.23
Tasks: 182 total,   3 running, 179 sleeping,   0 stopped,   0 zombie
Cpu(s): 12.6%us,  1.1%sy,  0.0%ni, 86.2%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   2569208k total,  1451288k used,  1117920k free,   157804k buffers
Swap: 12286972k total,        0k used, 12286972k free,   729628k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                    
 9980 domeu     20   0  400m 115m  28m S   27  4.6   9:05.54 firefox-bin                                                
 1309 root      20   0 94356  74m  18m R   24  3.0  37:01.50 Xorg                                                       
 1706 domeu     20   0 69148  46m  14m S    3  1.9   7:47.29 compiz                                                     
 9997 domeu     20   0  134m  31m  14m S    3  1.2   1:42.08 plugin-containe                                            
10079 domeu     20   0 93140  13m  10m S    3  0.6   0:00.84 gnome-terminal                                             
 1160 root      20   0 19292 4356 3572 S    0  0.2   0:06.87 NetworkManager                                             
 9498 root      20   0     0    0    0 R    0  0.0   0:00.92 kondemand/2                                                
10322 domeu     20   0  2620 1156  840 R    0  0.0   0:00.02 top                                                        
    1 root      20   0  2864 1700 1224 S    0  0.1   0:00.86 init                                                       
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd                                                   
    3 root      20   0     0    0    0 S    0  0.0   0:04.54 ksoftirqd/0                                                
    4 root      RT   0     0    0    0 S    0  0.0   0:00.65 migration/0                                                
    5 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/0                                                 
   15 root      20   0     0    0    0 S    0  0.0   0:05.05 events/0                                                   
   19 root      20   0     0    0    0 S    0  0.0   0:00.00 cpuset                                   

L'entête mentionne:
  • La date et l'heure mais aussi "uptime" (cfr: up)
  • La charge moyenne (average load)
  • L'usage de la mémoire (y compris swap)
  • L'usage CPU détaillé
    • us : User
    • sy : system
    • ni : nice
    • id : idle
    • wa : iowait
    • hi : H/w interrupt requests
    • si : S/w interrupt requests
La liste elle-même reprend:
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9980 domeu     20   0  400m 115m  28m S   27  4.6   9:05.54 firefox-bin

pid - identification du processus
pr - la priorité attribuée par l'OS. Cette valeur dépend de la valeur de "nice" et d'autres paramètres. plus le chiffre est grand et moins le processus est prioritaire.
ni - la priorité donnée par l'utilisateur (-20 la plus haute, 20 la plus basse).
virt - la mémoire vituelle utilisée par le processus (mem processus + data processus + bibliothèques partagées utilisées + swap)
res - la quantité de ressource utilisé par le processus (mem processus + data processus)
shr - la mémoire partagée utilisée par le processus.
%cpu - évident
%mem - pourcentage de la mémoire physique utilisée par le processus.
time - temps cumulé durant lequel le processus a été actif.
command - la commande qui à lancé le processus

ps: Liste des processus
Une autre commande bien utile est ps, cette dernière permet de tirer une liste des procesus en cours d'exécution.
Les variantes les plus connues sont:
  • ps -ef
  • ps -efl
  • ps aux

La commande ps accepte de nombreux arguments bien documenté dans les pages du manuel.
(voir "man ps")

ps -ef
Permet de tirer une liste des processus en cours d'exécution.
Dans son utilisation la plus courante, ps -ef sert a trouver le pid d'un processus, voire même s'il fonctionne.
A titre d'exemple, pour savoir sur firefox est en cours de fonctionnement (et quel pid) on utilisera la commande suivante:
ps -ef | grep firefox

voici un extrait de l'outpup affiché par ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar10 ?        00:00:00 /sbin/init
root         2     0  0 Mar10 ?        00:00:00 [kthreadd]
root         3     2  0 Mar10 ?        00:00:06 [ksoftirqd/0]
uid - utilisateur ayant lancé le processus
pid - identification du processus
ppid - processus parent.
c - valeur entière indiquant le %cpu utilisé.
stime - Start Time, date et heure du lancement du processus
tty - terminal ayant lancé la commande (pas relevant dans un environnement graphique).
time - Cumul des temps d'exécutions du processus
cmd - la commande ayant lancé le processus.

ps -efL
Affiche le même contenu que la commande ps -ef mais ajoute des informations concernant les threads.
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1 Mar10 ?        00:00:00 /sbin/init
root         2     0     2  0    1 Mar10 ?        00:00:00 [kthreadd]
root         3     2     3  0    1 Mar10 ?        00:00:11 [ksoftirqd/0]
root         4     2     4  0    1 Mar10 ?        00:00:01 [migration/0]
root         5     2     5  0    1 Mar10 ?        00:00:00 [watchdog/0]
root        15     2    15  0    1 Mar10 ?        00:00:11 [events/0]
LWP - Identification du thread.
NLWP - Nombre de thread du processus.

ps aux
Cette commande permet d'obtenir un affichage beaucoup plus proche de la commande top.
Avec ps aux, il sera possible de connaître le %cpu et %mem mais aussi les consommations en ressource.
xxx@yyy:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2864  1700 ?        Ss   Mar10   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Mar10   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Mar10   0:11 [ksoftirqd/0]
VSZ - Virtual memory size, correspond a la colonne virt de la commande top. (mem processus + data processus + bibliothèques partagées utilisées + swap)
RSS - Resident Set Size, mémoire utilisée par le processus et ses données. Correspond à la colonne res de la commande top.

kill: terminer un processus
La commande kill permet d'envoyer le signal SIGTERM (fin de processus) à un processus particulier identifié par son pid.
Si le processus ne semble pas répondre, il est possible d'utiliser l'option -9 (KILL) dans la commande kill, cela terminera le processus de façon expéditive.

Voici un exemple terminant/expédiant le processus 253.
kill -9 253
Cet autre exemple demandant la fin d'exécution (gracefully) des processus 457 et 1099
kill 457 1099

Dans les entrailles des processus
Dans le monde Unix, tout est représenté sous forme de fichier.
Ainsi, les processus en cours d'exécution se conforme à cette règle et font également partie du système de fichier.
Ainsi, en explorant le répertoire /proc, l'on se retrouve a explorer les processus en court d'éxécution.
La commande
ls -l /proc
affichera un répertoire par processus actif, le nom du répertoire étant le pid du processus (que l'on peu identifier à l'aide de ps -ef) et quelques autres fichiers et répertoires aux noms plus explicites.

Vous pouvez obtenir plus d'information sur /proc dans les manuels à l'aide de la commande.
man 5 proc

/proc/cpuinfo
Fournit des informations relatives à la configuration cpu de la machine.
cat /proc/cpuinfo

/proc/meminfo
Fournit des informations relatives à la mémoire du système.
Si toutes informations ne sont pas utiles, certaines peuvent se montrer pertinente.
xxx@yyy:~$ cat /proc/meminfo
MemTotal:        2569208 kB
MemFree:         1090812 kB
Buffers:          162756 kB
Cached:           740640 kB
SwapCached:            0 kB
...

/proc/PID
Un répertoire processus (identifier par la pid) contient une foule d'information.
En voici un exemple:
xxx@yyy:~$ ps -ef | grep firefox
domeu     9972     1  0 11:00 ?        00:00:00 /bin/sh /usr/lib/firefox-3.6.15/firefox
xxx@yyy:~$ ls -l /proc/9972
dr-xr-xr-x 2 domeu domeu 0 2011-03-14 11:08 attr
-r-------- 1 domeu domeu 0 2011-03-14 13:53 auxv
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cgroup
--w------- 1 domeu domeu 0 2011-03-14 13:53 clear_refs
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 cmdline
-rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 comm
-rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 coredump_filter
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cpuset
lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 cwd -> /home/domeu
-r-------- 1 domeu domeu 0 2011-03-14 13:53 environ
lrwxrwxrwx 1 domeu domeu 0 2011-03-14 11:22 exe -> /bin/dash
dr-x------ 2 domeu domeu 0 2011-03-14 11:00 fd
dr-x------ 2 domeu domeu 0 2011-03-14 13:53 fdinfo
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 io
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 latency
-r-------- 1 domeu domeu 0 2011-03-14 13:53 limits
-rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 loginuid
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 maps
-rw------- 1 domeu domeu 0 2011-03-14 13:53 mem
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mountinfo
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mounts
-r-------- 1 domeu domeu 0 2011-03-14 13:53 mountstats
dr-xr-xr-x 5 domeu domeu 0 2011-03-14 13:53 net
-rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_adj
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_score
-r-------- 1 domeu domeu 0 2011-03-14 13:53 pagemap
-r-------- 1 domeu domeu 0 2011-03-14 13:53 personality
lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 root -> /
-rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 sched
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 schedstat
-r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 sessionid
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 smaps
-r-------- 1 domeu domeu 0 2011-03-14 13:53 stack
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 stat
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 statm
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 status
-r-------- 1 domeu domeu 0 2011-03-14 13:53 syscall
dr-xr-xr-x 3 domeu domeu 0 2011-03-14 13:53 task
-r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 wcha
On y retrouve les informations suivantes:
  • cmdline - fichier contenant la ligne de commande.
  • cwd - lien symbolique vers le répertoire courant du processus.
  • environ - fichier contenant une copie des variables d'envrionnements liées au processus.
  • exe - lien symbolique vers l'exécutable
  • fd - file directory, répertoire contenant un liste des fichiers et sockets ouverts par le processus
xxx@yyy:/proc/9972$ ls -l fd
total 0
lr-x------ 1 domeu domeu 64 2011-03-14 11:00 0 -> /dev/null
lrwx------ 1 domeu domeu 64 2011-03-14 11:00 1 -> /home/domeu/.xsession-errors
lrwx------ 1 domeu domeu 64 2011-03-14 11:00 10 -> /usr/lib/firefox-3.6.15/firefox
lrwx------ 1 domeu domeu 64 2011-03-14 11:00 2 -> /home/domeu/.xsession-errors
  • root - lien vers le répertoire root du processus (habituellement /).
    Il faut savoir qu'il est possible d'utiliser un root customisé en utilisant chroot. Cela permet de restreindre l'accès au système de fichier ou d'utiliser un sous répertoire pour recréer le système de fichier, c'est très utile pour recréer un système minimaliste sans toucher au système de fichier, cette option est fort utilisée pour tester la compilation et l'installation de package sans risque pour le système.
    Pour les curieux, voir le liens http://doc.fedora-fr.org/wiki/Utilisation_de_chroot
  • Status - ce fichier affiche différentes informations relatif au fonctionnement du processus, y compris l'usage de la mémoire.
xxx@yyy:/proc/9972$ more status
Name: firefox
State: S (sleeping)
Tgid: 9972
Pid: 9972
PPid: 1
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 256
Groups: 4 20 24 46 111 119 122 1000 
VmPeak:     1896 kB
VmSize:     1896 kB
VmLck:        0 kB
VmHWM:      508 kB
VmRSS:      508 kB
VmData:      168 kB
VmStk:      136 kB
VmExe:       80 kB
VmLib:     1484 kB
VmPTE:       28 kB
VmSwap:        0 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
...

Inutile de présenter PID, PPID, Name et State.
VmSize - mémoire totale utilisée. VmLib + VmExe + VmData + VmStk.
VmLock - mémoire vérouillée (évite qu'elle passe en swap).
VmRss - mémoire Resident Set Size (mem processus + mem data + mem stack).
VmData - mémoire virtuelle utilisée par la heap (stockage des données)
VmStk - mémoire utilisé pour la stack
VmExe - mémoire utilisée par l'executable et le librairie liées statiquement.
VmLib - Mémoire virtuelle utilisée par les librairies chargées en cours d'exécution.
VmData - mémoire allouée aux données
VmSwap - mémoire en swap

  • Stat - version condensée de Status utilisé par la commande ps. le format produit par une instruction C printf est décrit dans le manuel d'utilisation (man 5 proc).

mardi 15 mars 2011

Aide mémoire des commande Linux

Juste un tout petit article pour mentionner l'existence d'un excellent aide mémoire des commandes Linux très synthétique.
S'il passe en revue les commandes les plus utilisées (cp, mv, mkdir, ln), cet aide-mémoire aborde également des commandes que l'on utilise beaucoup moins dans le monde DOS mais qui peuvent néanmoins se montrer fort ultimes.
Par exemple paste, nl (number lines), head, ...

Je trouve d'ailleurs cet aide-mémoire suffisamment utile et concis pour le placer dans mes liens favoris (sur la gauche).