Outils pour utilisateurs

Outils du site


tuto:linux:quelques_commandes_utiles

Ceci est une ancienne révision du document !


A voir : Quasiment toutes les commandes Linux : http://linux-taxi.blogspot.com/2008/08/linux-les-commandes-et-fichiers.html

Les commandes de base sous une console

man

La commande qui permet d'avoir de l'aide sur une autre commande. Par exemple si vous voulez connaitre la syntaxe exacte de la commande ls (ci dessous), il suffit de taper : man ls

man -k commande

L’identificateur du groupe est en général précisé entre parenthèses, à la suite du nom de la page de manuel.

Il se peut également que vous recherchiez de l’aide sur un sujet donné, mais que vous ne connaissiez pas le nom exact de la page de manuel qui en parle. Pour ce genre de recherche, vous pourrez utiliser le programme apropos, qui recherchera toutes les pages de manuel qui contiennent un mot clé particulier.

Ce programme s’utilise avec la syntaxe suivante :

apropos mot

où mot est le mot clé à rechercher dans toutes les pages de manuel. La commande man est la commande d’aide standard sur tous les systèmes Unix. Cependant, Linux utilise un grand nombre de commandes écrites sous la licence GNU, et qui utilisent un format d’aide spécifique à GNU.

On peut afficher toutes les pages de manuel par exemple pour read de cette façon :

apropos . | grep -w ^read

L’aide pour ces commandes peut être obtenue par la commande suivante :

info commande

Il se peut que les deux méthodes fonctionnent. Dans ce cas, la page de man sera certainement moins récente que la page d’info, car la commande que vous utilisez est sans aucun doute une commande GNU, qui a été fournie avec sa page d’information. Il est donc recommandé de lire plutôt la page d’information GNU.

Le format d’aide GNU est plus riche que celui de man, puisqu’il permet de naviguer dans le système d’aide à l’aide de liens hypertextes. Ces liens sont organisés hiérarchiquement, avec des chapitres et des sous-chapitres. Chaque chapitre dispose d’une forme de table des matières constituée de menus, qui permettent d’accéder aux sous-chapitres. Les menus se distinguent du texte normal par un astérisque (« * ») en début de ligne dans la table des matières. Les commandes clavier suivantes pourront vous être utiles pour naviguer dans la hiérarchie du système d’aide de GNU : la touche de tabulation permet de passer au lien hypertexte suivant ;

  • la touche n (pour « Next ») permet de passer au chapitre suivant ;
  • la touche p (pour « Previous ») permet de revenir au chapitre précédent ;
  • la touche u (pour « Up ») permet de remonter d’un niveau dans le système d’aide et d’atteindre la table
  • des matières référençant le chapitre courant.
  • la commande q permet de quitter le système d’aide.

ls

La commande qui permet de lister le contenu d'un repertoire. Pour ma part j'utilise ls avec quelques paramêtres pour pour avoir des couleurs différentes en fonction du type des fichiers (repertoire, lien symbolique…) et pour voir les fichiers cachés (fichiers qui commence par un '.').

bash$ ls -a --color
. .bash_history .xinitrc
.. .gnome .xsession
.Xauthority .gnome_private .xsession-errors
bash$

rm

La commande qui permet d'effacer un fichier. Voici un exemple a manipuler avec precaution. En effet, l'option -R permet d'effacer recursivement (c'est à dire tout ce qu'il y a dans les sous repertoire). * indique tout simplement de tout effacer.

bash$ ls
dir1 dir2 fichier_bidon
bash$ rm -r *
bash$ ls
bash$

cd

La commande qui permet de ce déplacer dans un autre répertoire.

mkdir

La commande pour créer un nouveau répertoire.

bash$ ls
bash$ mkdir test_dir
bash$ ls
test_dir
bash$

rmdir

La commande pour effacer un répertoire. Ce répertoire doit être vide.

bash$ ls
test_dir
bash$ rmdir test_dir
bash$ ls
bash$

alias

Une commande utile qui permet de faire correspondre à une commande un autre nom. La commande alias sans paramêtres affiche la liste des alias qui existe pour l'instant. Voici un exemple d'utilisation de alias. Après cela, la commande rm demandera confirmation à chaque fichier à effacer et la commande dir (qui n'existait pas avant) affiche le contenu d'un répertoire en couleur avec les fichiers cachés ainsi que les droits, taille…

bash$ alias
bash$ alias rm='rm -i'
bash$ alias dir='ls -a -l --color'
bash$ alias
alias dir='ls -a -l --color'
alias rm='rm -i'
bash$

more

Permet de faire défiler le contenu d'un fichier texte.

less

Comme “more” sauf qu'avec cette commande, on peut revenir en arrière dans le défilement du fichier.

ps

Permet de lister les processus actifs (voir les programmes qui sont actuellement lancés). Ici un exemple avec l'option a pour voir tous les processus.

bash$ ps a
PID TTY STAT TIME COMMAND
363 1 S 0:00 -bash
364 2 S 0:00 /sbin/mingetty tty2
365 3 S 0:00 /sbin/mingetty tty3
366 4 S 0:00 /sbin/mingetty tty4
367 5 S 0:00 /sbin/mingetty tty5
368 6 S 0:00 /sbin/mingetty tty6
392 1 S 0:00 sh /usr/X11R6/bin/startx
393 1 S 0:00 xinit /root/.xinitrc --
396 1 S 0:00 sh /root/.xinitrc
398 1 S 0:01 icewm
399 1 S 0:00 gnome-session
416 1 S 0:00 esd -nobeeps -as 30
471 1 S 0:02 panel --sm-config-prefix /panel.d/Session-a04972/ --sm-clien
513 1 S 0:00 gnome-terminal
515 1 S 0:00 gnome-pty-helper
516 p0 S 0:00 bash
832 p0 S 0:02 nedit index.html
5781 1 S 0:00 gnome-terminal
5782 1 S 0:00 gnome-pty-helper
5783 p1 S 0:00 bash
418 1 S 0:01 xscreensaver -no-splash -timeout 20 -nice 10 -lock-mode -xrm
9223 p1 S 0:00 su daniel
9224 p1 S 0:00 bash
9710 p1 R 0:00 ps a
bash$

préférez :

ps aux --forest

Voir les page faults :

$ ps -eo min_flt,maj_flt,cmd,args,uid,gid

pstree

Affiche les processus sous forme d'arbre :

gigi@gigi-linux:~$ pstree -u
init─┬─migration/0
├─ksoftirqd/0
├─watchdog/0
├─events/0
├─khelper
├─kthread─┬─kblockd/0
│ ├─kacpid
│ ├─kacpi_notify
...

top

Permet de voir les processus le plus gourmands en consommation processeur. En effet les processus sont classés et on ne visualise que les plus gourmands en ressource.

gtop sous Gnome et ktop sous kde.

Htop est une version améliorée de top.

df

Permet de voir combien d'espace disque dur est utilisé/libre sur chaque partition monté et où sont montées les partitions.

bash$ df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda3 3199501 1467699 1566333 48% /
bash$

mount

Comme vous l'aurez compris, cette commande permet de monter une partition derrière un répertoire (seul le root peut faire cela sauf si des droits supplémentaire ont été rajoutés aux utilisateurs).

[root@daniel]# mount /dev/fd0 /mnt/floppy/ -t vfat
mount: block device /dev/fd0 is write-protected, mounting read-only

remonter une partition :

mount -n -o remount,ro /
mount -n -o remount,rw /

Monter un ISO :

mount -o loop sauvegardes.iso /media/loop

Mettre des droits lors du montage :

mount -o umask=0222 /dev/hda7 /media/win_d

Après avoir monté un disque, par exemple dans /media/disque-test, il peut être intéressant de monter l'intégralité du contenu, ou un répertoire seulement, de ce disque dans un autre répertoire sans démonter /media/disque-test.

Cela permet par exemple :

  • de “recopier” ce contenu dans un répertoire tout spécialement destiné à un partage FTP,
  • un utilisateur qui n'a pas accès au disque-test par le répertoire de montage peut ainsi se voir conférer des droits d'accès à un sous répertoire du disque-test s'il a accès au répertoire lié (le répertoire lié et les fichiers qu'il contient doivent autoriser cet accès)

Cela est possible avec l'option “bind” (bind signifie lier en anglais) de la commande “mount” qui s'utilise ainsi en ligne de commande :

mount –bind /media/répertoire-à-lier /home/user/répertoire-lié'

sudo mount --bind /media/disque/répertoire /home/user/répertoire-lié

mount -o bind /proc /repertoire_chroot

Exemple de répertoire chrooté :

mount --bind /dev ${PROJET}/rootfs/dev
mount --bind /tmp ${PROJET}/rootfs/tmp
mount -t proc proc ${PROJET}/rootfs/proc
mount -t sysfs sysfs ${PROJET}/rootfs/sys
mount -t devpts devpts ${PROJET}/rootfs/dev/pts
mount -t tmpfs shm ${PROJET}/rootfs/dev/shm

chroot ${PROJET}/rootfs /bin/sh --login

Créer un disque en ram (la mémoire est allouée dynamiquement) :

mount -t tmpfs -o size=2048M tmpfs /test

Avec blkid et vol_id on peut recupérer les ID des partitions :

mount UUID=271e73db-16c3-4f3c-82fd-189b15f68a3b /boot/

Dans “/etc/fstab”, le device est précisé de la même façon que lors de l’utilisation de “mount”, ainsi :

/dev/sda1               /boot           ext3            noatime,noauto     1 2

devient :

UUID=271e73db-16c3-4f3c-82fd-189b15f68a3b               /boot           ext3  
        noatime,noauto     1 2

Il en va de même pour le chargeur de démarrage, pour grub, nous obtiendrons :

kernel /kernel-2.6.22.19-vs2.2.0.7 root=UUID=a30ae101-971b-48e5-ac7b-b5ceac48dfe7 udev vga=0x376 console=tty1

umount

Pour démonter.

[root@daniel tp_GTR]# umount /dev/fd0

free

Permet de voir combien de mêmoire est utilisé/libre et de voir combien de swap (mêmoire sur le disque dur) est utilisé.

bash$ free
total used free shared buffers cached
Mem: 63140 56028 7112 44812 3332 29708
-/+ buffers/cache: 22988 40152
Swap: 104416 0 104416
bash$

id

Permet de savoir qui on est (le groupe et l'utilisateur). Dans l'exemple ci-dessous, je suis l'utilisateur user1 (uid) dans le group users (gid) et j'appartient aux groupes users et root (groups) en effet un utilisateur peut avoir les droits de plusieurs groupes autres que son groupe “principale”.

[user1@daniel src]$ id
uid=500(user1) gid=100(users) groups=100(users),0(root)
[user1@daniel src]$

wget

Télécharger une page web

wget http://linuxfr.org

Aspirer un site entier :

wget -np -m http://linuxfr.org

last

Permet de voir les derniers utilisateurs qui se sont connectes sur la machine :

glemeur@Soufre:~$ last
glemeur :0 Mon Mar 3 14:36 still logged in
aeraicho pts/1 neon.linux.insia Mon Mar 3 12:43 - 13:02 (00:19)
nprigent pts/0 warp.insia.org Sun Mar 2 23:33 - 23:34 (00:00)

fuser

Lorsque l'on veut démonter un système de fichier, il se peut qu'un utilisateur l'utilise. Dans ce cas, on ne peut pas démonter le système de fichier. Il est alors utile de savoir qui est quelle commande est responsable. Pour cela on peut utiliser la commande fuser. Voici un exemple qui nous permet de voir qui utilise /mnt/cdrom et tous les fichiers est sous répertoires qu'il contient.

[daniel@daniel src]$ fuser -vm /mnt/cdrom

USER PID ACCESS COMMAND
/mnt/cdrom daniel 542 ..c.. bash
[daniel@daniel src]$

Tuer tous les process d'un montage :

fuser -cku /montage

Voir tous les pocessus d'un port :

fuser -v 80/tcp
                     USER        PID ACCESS COMMAND
80/tcp:              www-data  21501 F.... apache2
                     www-data  21502 F.... apache2
                     www-data  24559 F.... apache2
                     www-data  24563 F.... apache2
                     www-data  24566 F.... apache2
                     www-data  24651 F.... apache2
                     www-data  24790 F.... apache2
                     www-data  25153 F.... apache2
                     www-data  25154 F.... apache2
                     www-data  30003 F.... apache2
                     root      31045 F.... apache2

ifconfig

Pour connaître la configuration IP des interfaces réseaux, on peut utiliser la commande ifconfig -a. Souvant cette commande ce trouve dans le répertoire /sbin qui n'est généralement pas dans le PATH des utilisateurs autres que root. Ce qui veut dire que si on ne se trouve pas sur le compte root, il peut être nécessaire d'indiquer le chemin complet où trouver la commande dans le shell.

[daniel@daniel ~]$ /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:C0:6D:12:1F:B5
inet addr:172.16.0.2 Bcast:172.16.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:4 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:11386 (11.1 Kb)
Interrupt:10 Base address:0xe400

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:168 errors:0 dropped:0 overruns:0 frame:0
TX packets:168 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12177 (11.8 Kb) TX bytes:12177 (11.8 Kb

netstat

Netstat est une commande importante pour obtenir des informations sur le réseau IP.

Cette commande peut par exemple nous renseigner sur le routage utilisé par la machine :

[daniel@daniel ~] netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
172.16.0.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
0.0.0.0 172.16.0.254 0.0.0.0 UG 40 0 0 eth0
[daniel@daniel ~]

Elle peut aussi nous renseigner sur les connections en cours :

[daniel@daniel ~] netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:swat *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:6000 *:* LISTEN
tcp 0 0 *:ndmp *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:ipp *:* LISTEN
tcp 0 0 daniel:ssh daniel:filenet-rpc ESTABLISHED
tcp 0 0 daniel:filenet-rpc daniel:ssh ESTABLISHED
udp 0 0 daniel:netbios-ns *:*
udp 0 0 *:netbios-ns *:*
udp 0 3108 daniel:netbios-dgm *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:ndmp *:*
udp 0 0 *:sunrpc *:*
udp 0 0 *:ipp *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 2103 /tmp/.ICE-unix/1282
unix 2 [ ACC ] STREAM LISTENING 1498 /tmp/orbit-daniel/orb-3
512171761674798179
...
unix 2 [ ] DGRAM 829
unix 2 [ ] STREAM CONNECTED 582

Sur l'état des interfaces réseaux et les packets transmit :

[daniel@daniel ~] netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 0 0 0 0 0 4 0 0 BMRU
lo 16436 0 812 0 0 0 812 0 0 0 LRU
[daniel@daniel ~]

Ou bien encore les statistiques sur les différents protocoles :

[daniel@daniel ~] netstat -s
Ip:
885 total packets received
0 forwarded
0 incoming packets discarded
879 incoming packets delivered
888 requests sent out
Icmp:
5 ICMP messages received
1 input ICMP message failed.
ICMP input histogram:
destination unreachable: 3
echo requests: 1
echo replies: 1
4 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 3
echo replies: 1
Tcp:
7 active connections openings
0 passive connection openings
0 failed connection attempts
0 connection resets received
2 connections established
807 segments received
808 segments send out
0 segments retransmited
0 bad segments received.
2 resets sent
Udp:
73 packets received
0 packets to unknown port received.
0 packet receive errors
73 packets sent
TcpExt:
ArpFilter: 0
3 TCP sockets finished time wait in fast timer
6 delayed acks sent
7 packets directly queued to recvmsg prequeue.
3 packets directly received from prequeue
196 packets header predicted
TCPPureAcks: 8
...
TCPMemoryPressures: 0

Voir les différents ports en écoutes :

[daniel@daniel ~] netstat -tunlp
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:37 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:912 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:32768 0.0.0.0:* -
udp 0 0 0.0.0.0:514 0.0.0.0:* -
udp 0 0 0.0.0.0:9 0.0.0.0:* -
udp 0 0 0.0.0.0:906 0.0.0.0:* -
udp 0 0 0.0.0.0:909 0.0.0.0:* -
udp 0 0 0.0.0.0:111 0.0.0.0:* -
udp 0 0 0.0.0.0:1023 0.0.0.0:* -

socklist

Affiche les socket ouverts

gigi@gigi:~> sudo socklist
type port inode uid pid fd name
tcp 111 14855 0 3750 5 portmap
tcp 631 15674 0 3869 0 cupsd
tcp 25 15392 0 3880 11 master
tcp6 22 14957 0 3780 3 sshd
tcp6 631 15675 0 3869 2 cupsd
tcp6 25 15394 0 3880 12 master
udp 32768 15122 103 3789 14 avahi-daemon
udp 68 12761 0 3139 4 dhcpcd
udp 5353 15121 103 3789 13 avahi-daemon
udp 111 14843 0 3750 4 portmap
udp 631 15678 0 3869 4 cupsd
raw 1 15023 0 3806 4 vmnet-natd

lsof

Un peu dans la même lignée que fuser mais en beaucoup plus précis, lsof permet de savoir quels sont les fichiers ouvert par les différents utilisateurs de la machine et par les différents programmes. Cette commande ce trouve rarement par défaut sur les machines, il convient alors de la rajouter sur le système.

Exécuté sous le compte d'un utilisateur, on peut seulement voir les fichiers ouvert par cet utilisateur (ou par les programmes qu'il utilise). Sous le compte root, on peut voir les fichiers ouvert par n'importe qui. La notion de fichier est prise au sens large Unix (fichier, pipe, socket, device…). Le programme est souvant installé dans /usr/sbin et rarement dans le PATH des utilisateurs autres que root. Cette commande et toutefois le plus souvant utile pour connaître l'état des connections TCP sur la machine. Dans ce cas, il faut être sous le compte root et utiliser la commande comme suit :

[root@daniel ~] lsof | grep TCP
portmap 539 root 4u IPv4 796 TCP *:sunrpc (LISTEN)
sshd 621 root 3u IPv4 895 TCP *:ssh (LISTEN)
xinetd 643 root 3u IPv4 920 TCP *:swat (LISTEN)
cupsd 656 root 0u IPv4 1022 TCP *:ipp (LISTEN)
smbd 932 root 5u IPv4 1228 TCP *:netbios-ssn (LISTEN)
miniserv. 967 root 4u IPv4 1277 TCP *:ndmp (LISTEN)
X 1042 root 1u IPv4 1372 TCP *:6000 (LISTEN)
ssh 1696 root 3u IPv4 6864 TCP daniel:filenet-rpc->daniel:ssh (ESTABLISHED)
sshd 1697 root 4u IPv4 6865 TCP daniel:ssh->daniel:filenet-rpc (ESTABLISHED)
telnet 1848 daniel 3u IPv4 27074 TCP daniel:32773->daniel:ssh (ESTABLISHED)
sshd 1849 root 4u IPv4 27075 TCP daniel:ssh->daniel:32773 (ESTABLISHED)
  • COMMAND : nom du processus
  • PID : numéro de processus (obtenu aussi par la commande ps)
  • USER : identité sous laquelle est lancé le processus
  • FD : file descriptor - mem : memory-mapped file ; txt : program text (code and data)… plus de détails dans le man de lsof
  • TYPE : type de noeud (ou inode) - CHR : fichier spécial en mode caractère ; DIR : répertoire… plus de détails dans le man de lsof
  • DEVICE : major et minor number pour un fichier spécial, protocole…
  • SIZE : taille du fichier
  • NODE : numéro d'inode
  • NAME : nom du fichier ou point de montage

Connaître quelle tâche utilise quel port

lsof -i

nmap

Nmap est un scanner de ports.

Exemple d'un scan nmap 3.83 sur un Windows 2003 Server contrôleur de domaine avec les options d'identification des services et de reconnaissance du système d'exploitation.

[root@daniel ~] nmap zinux.aur.home
Starting nmap 3.83.DC13 ( http://www.insecure.org/nmap/ ) at 2006-01-25 13:26 CET
Interesting ports on zinux.aur.home (192.168.10.34):
(The 1641 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
7/tcp open echo
9/tcp open discard?
13/tcp open daytime Microsoft Windows International daytime
17/tcp open qotd?
19/tcp open chargen
21/tcp open ftp?
23/tcp open telnet Microsoft Windows XP telnetd
42/tcp open wins Microsoft Windows Wins
53/tcp open domain Microsoft DNS
80/tcp open http Microsoft IIS webserver 6.0
88/tcp open kerberos-sec Microsoft Windows kerberos-sec
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
389/tcp open ldap Microsoft LDAP server
445/tcp open microsoft-ds Microsoft Windows 2003 microsoft-ds
464/tcp open kpasswd5?
515/tcp open printer Microsoft lpd
548/tcp open afpovertcp?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft LDAP server
1026/tcp open msrpc Microsoft Windows RPC
1027/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
1723/tcp open pptp?
3268/tcp open ldap Microsoft LDAP server
3269/tcp open ssl/ldap Microsoft LDAP server
3389/tcp open microsoft-rdp Microsoft Terminal Service
MAC Address: 00:10:5C:DE:AD:A7 (Quantum Designs (h.k.))
Device type: general purpose
Running: Microsoft Windows NT/2K/XP|2003/.NET
OS details: Microsoft Windows 2003 Server, 2003 Server SP1 or XP Pro SP2
Service Info: OSs: Windows, Windows XP, Windows 2003

Nmap finished: 1 IP address (1 host up) scanned in 122.918 seconds

strace | ltrace

L'option -f trace les processus fils à mesure qu'ils sont créés par des processus actuellement tracés à la suite de l'appel système fork. L'option -o enregistre le résultat dans un fichier. L'option -p <pid> : trace le processus <pid> en cours d'execution L'option -c permet d'afficher un récapitulatif des appels

Exemple :

[root@dns1 root]# strace -f -o trace.txt /etc/rc.d/init.d/httpd start

Ne garder que les appels systèmes désirés :

strace -e close,write echo foo
root@ks361289:~/c++# ltrace -c id
uid=0(root) gid=0(root) groupes=0(root)
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 38.54    0.002748        2748         1 setlocale
 24.99    0.001782        1782         1 getpwuid
  8.09    0.000577         288         2 getgrgid
  7.78    0.000555         555         1 dcgettext
  3.30    0.000235         235         1 is_selinux_enabled
  3.23    0.000230          38         6 printf
  2.92    0.000208         208         1 __overflow
  2.79    0.000199          99         2 sysconf
  1.51    0.000108          54         2 fclose
  1.11    0.000079          39         2 getgroups
  0.63    0.000045          22         2 __fpending
  0.62    0.000044          44         1 geteuid
  0.52    0.000037          37         1 getegid
  0.52    0.000037          37         1 getuid
  0.52    0.000037          37         1 bindtextdomain
  0.52    0.000037          37         1 getgid
  0.48    0.000034          34         1 fputs_unlocked
  0.48    0.000034          34         1 getopt_long
  0.38    0.000027          27         1 free
  0.38    0.000027          27         1 __cxa_atexit
  0.35    0.000025          25         1 textdomain
  0.35    0.000025          25         1 malloc
------ ----------- ----------- --------- --------------------
100.00    0.007130                    32 total

tty

root@Monoceros:~$ tty
/dev/pts/1

pour changer de tty :

root@Monoceros:~$ screen /dev/pts/2

ldd

ldd permet de connaître les librairies utilisées par un programme

$ ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001e000)
libdl.so.2 => /lib/libdl.so.2 (0x4005a000)
libc.so.6 => /lib/libc.so.6 (0x4005d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

ldd -r permet de voir en plus les symboles.

upd-receiver

Cette commande permet de télécharger un fichier par multicast. Packet : udpcast

udp-sender fichier (pour le serveur)
udp-receiver > fedora.vmdk (pour le client)

chmod (les droits particuliers)

Sticky Bit :

chmod +t répertoire

Il indique que seuls le propriétaire du répertoire, et le propriétaire d'un fichier qui s'y trouve ont le droit de supprimer ce fichier. C'est typiquement utilisé pour les répertoires comme /tmp ayant une autorisation d'écriture générale.

chmod +t exécutable

Un chmod +t sur un executable lui permet de rester en mémoire au prochain lancement (rien à voir avec un chmod +t sur un repertoire ou un fichier non éxécutble).

Setuid :

chmod u+s nom_du_fichier

Quand un fichier est exécutable par son propriétaire il peut être setuid. Cela veut dire que lorsqu'il est exécuté il l'est avec les droits de son propriétaire et pas avec les droits de l'utilisateur qui s'en sert. L'exemple le plus souvent repris est le programme passwd qui permet à un utilisateur de changer son mot de passe. Ce programme est setuid root (il est setuid et il appartient à root), en effet l'utilisateur qui va modifier son mot de passe doit avoir l'autorisation d'écrire l'information dans /etc/shadow (ou /etc/passwd) dans lequel seul root (et les utilisateurs que root aura spécifiés) pourront écrire. on n'utilise pas la notion de setuid pour un répertoire Le droit x est remplacé par un s dans le champ des droits du propriétaire. Si le propriétaire n'a pas le droit x alors un S majuscule est affiché à la place du s minuscule.

Setgid :

chmod g+s nom_du_fichier

Cette notion s'apparente à celle de setuid puisque au lieu que le programme setgid s'exécute avec les droits de son propriétaire ce sera avec les droits du groupe auquel il appartient. Quand un répertoire est setgid tous les fichiers créés dans ce répertoire appartiennent au même groupe que le répertoire.(Application : lors de préparation de rapports, de projets communs à un groupe d'utilisateurs)

un exécutable peut être déclaré setuid et setgid par son propriétaire

Le droit x est remplacé par un s dans le champ des droits du groupe. Si le groupe n'a pas la permission x (execute), alors un S est affiché à la place du s.

+X (en majuscule) :

chmod -R u=rw+X,g=r+X,o=r+X

Le +X (majuscule), va s'appliquer qu'aux dossiers seulement.

u : égale user g : égale groups o : égale others

screen

Imaginez que vous avez lancé sur votre système un programme qui fonctionne en mode console (un client IRC par exemple). Vous voulez vous délogguer en laissant tourner le programme… et pouvoir vous relogguer plus tard (en local ou à distance) et récupérer le programme à l'écran.

Pour cela, il faut lancer le programme dans un screen, qui est une sorte écran virtuel que l'on peut détacher et rattacher.

Voici quelques commandes utiles.

Pour lancer un screen rien de plus simple :

bash# screen -S nom_du_screen

Pour réccupérer un screen précededment détaché

bash# screen -r nom_du_screen

Pour detacher le screen

"Ctrl + a" puis "d"

Pour activer le scroll

"Ctrl + a" puis Echap

Pour créer un deuxieme screen

"Ctrl + a" puis "c"

Pour spilter la fenetre et afficher deux screen à l'écran

"Ctrl + a" puis "s"

Pour ne plus plus spliter la fenetre

"Ctrl + a" puis "X"

Pour choisir le screen afficher à l'ecran

"Ctrl + a" puis """ (double quote)

Pour nommer un screen

"Ctrl + a" puis "A"

Partager un screen avec un autre utilisateur : Je suis loggué tutu et je veux autoriser toto à se connecter dessus, alors je tape :

screen -S MaSession
screen -X multiuser on
screen -X acladd toto (Permet d’ajouter l’utilisateur toto en controle total)

Du côté de toto, il se loggue de son côté (sur le même ordi.), et là il tape :

screen -x -r tutu/MaSession

ACL :

screen -X aclchg alex,pierre +rwx  (permet d’ajouter les utilisateurs alex et pierre en indiquant les permissions)
screen -X acldel bob (permet d’enlever l’utilisateur bob de la session multiutilisateur)

sed

Introduction à sed :

Le remplacement de texte dans un fichier peut être effectué de manière automatique, c’est-à-dire sans avoir à ouvrir le fichier dans un éditeur, grâce à la commande sed (abréviation de l’anglais « Stream Editor »). Cette commande est en fait un utilitaire de manipulation de flux de données, qui permet d’effectuer des traitements plus généraux que le simple remplacement de texte, mais c’est malgré tout pour cette opération qu’elle reste la plus utilisée.

sed peut travailler à la volée sur un flux de données textuelles, que ce flux provienne de l’entrée standard ou d’un fichier. Par défaut, il écrit le résultat de son travail sur le flux de sortie standard. Les opérations qu’il doit effectuer sur le flux de données peuvent être spécifiées de différentes manières, soit en fournissant un fichier script à l’aide de l’option -f, soit directement sur la ligne de commande, avec l’option -e. La syntaxe utilisée pour appeler sed est donc typiquement la suivante :

sed -e "commandes" fichier > résultat

ou :

sed -f script fichier > résultat

où fichier est le fichier sur lequel sed doit travailler, et résultat est le fichier devant recevoir le flux de données modifiées. Notez que cette commande utilise une redirection du flux de sortie standard dans un fichier. Ce type de redirection sera décrit en détail dans la la section intitulée Redirections.

sed peut effectuer un grand nombre de commandes différentes et est réellement un outil très puissant. Cependant, nous ne verrons ici que la commande qui permet d’effectuer un remplacement de texte. Cette commande utilise la syntaxe suivante : s/texte/remplacement/options où texte est le texte à rechercher, remplacement est le texte de remplacement, et options est un jeu d’options exprimant la manière dont le remplacement doit être fait. Les options sont spécifiées à l’aide de simple caractères, les plus utiles étant sans doute g, qui permet d’effectuer un remplacement global (au lieu de ne remplacer que la première occurrence du texte rencontrée dans chaque ligne), et I, qui permet d’effectuer une recherche sans tenir compte de la casse des caractères. Par exemple, la ligne de commande suivante :

sed -e "s/bonjour/bonsoir/g" test.txt > modif.txt

permet de remplacer toutes les occurrences de la chaîne de caractères « bonjour » par la chaîne de caractères « bonsoir » dans le texte du fichier test.txt, et d’enregistrer le résultat dans le fichier modif.txt.

Note : Il ne faut pas utiliser le même nom de fichier pour le fichier source et le fichier de résultat. En effet, sed lit le fichier source à la volée, et effectuer une redirection sur ce fichier pendant son traitement provoquerait la perte irrémédiable de son contenu. Pour résoudre ce problème, on pourra utiliser un nom de fichier temporaire, et écraser le fichier original par ce fichier une fois la commande sed exécutée.

Applique les modification au fichier test.txt :

sed -i "s/bonjour/bonsoir/g" test.txt

Afficher la fonction main d'un programme :

sed -n -e '/main[[:space:]]*(/,/^}/p' fichiersource.c

Cette exemple remplace « hills » par « mountains » mais seulement sur les blocs de texte commençant par une ligne vide et se terminant par une ligne commençant par les trois caractères « END ». :

sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt

insertion / modification de lignes

  • Création du fichier :
# cat > filename.txt
first line
second line
third line
  • Ajout de append line après second line :
# sed '/second line/a append line' filename.txt
first line
second line
append line
third line
  • Ajout de insert line avant second line :
# sed '/second line/i insert line' filename.txt
first line
insert line
second line
third line
  • Ajout de change line à la place de second line :
# sed '/second line/c change line' filename.txt
first line
change line
second line
third line

Modification du fichier

  • -i : permet de modifier le fichier
sed -i '/second line/c change line' filename.txt
  • -i.name : backup le fichier en <monfichier.name>

Va créer le fichier filename.txt.bak avant de modifier l'original :

sed -i.bak '/second line/c change line' filename.txt

xargs

La commande xargs permet d’appeler une autre commande, en passant en paramètre les données qu’elle reçoit dans le flux d’entrée standard. Sa syntaxe est la suivante :

xargs commande

où commande est la commande que xargs doit exécuter. xargs construira une ligne de commande complète pour cette commande, en utilisant comme paramètres les données issues du flux d’entrée standard. Une fois cette ligne de commande construite, xargs l’exécutera. Par exemple, la commande suivante :

ls -l

peut être exécutée également de la manière suivante :

xargs ls

et en tapant la chaîne de caractères « -l » suivie du caractère de fin de fichier CTRL+D.

La commande xargs est une commande extrêmement utile lorsqu’elle est utilisée conjointement avec les tubes, parce qu’elle permet d’utiliser le résultat d’une commande en tant que paramètre pour une autre commande. Ce mécanisme est donc complémentaire de celui des pipes, puisque ceux-ci permettaient d’utiliser le résultat d’une commande pour alimenter le flux d’entrée standard d’une autre commande.

Un exemple plus utile que le précédent permettra de mieux comprendre comment on utilise la commande xargs. Supposons que l’on désire trouver tous les fichiers d’une arborescence complète dont l’extension est .txt et contenant la chaîne de caractères « test ». La liste des fichiers de l’arborescence peut être déterminée simplement à l’aide de la commande find, et la recherche du texte dans les fichiers se fait naturellement à l’aide de la commande grep. On utilisera xargs pour construire la ligne de commande pour grep, à partir du résultat fourni par la commande find :

find -name "*.txt" | xargs grep -l "test"

Cette commande est plus simple et plus efficace que la commande équivalente :

find -name "*.txt" -exec grep -l "test" {} \;

parce que grep n’est exécuté qu’une seule fois (alors que l’option -exec de la commande find l’exécute pour chaque fichier trouvé).

Permet de gérer les espace les les accents avec -print0 pour find et -0 (zéro) ou –null pour xargs :

 find /home/ftp/Films/Divx/ -type f -print0 | xargs -0 ls -ltr

find

Cherche des fichiers :

Exclus les répertoires /proc, /sys et /dev de la recherche et cherche les fichiers modifiés de moins de 2 jours :

find / \( -wholename /proc -o -wholename /sys -o -wholename /dev \) -prune -o \( -type f -mtime -2 -print \) | xargs ls -l

fsck

A partir d'un live CD

e2fsck -f -v -y /dev/sd??

Pour modifier le nombre de montages déjà effectués pour le forcer à lancer un fsk au prochain boot. Il faut d'abord regarder ces valeurs à l'aide de dumpe2fs :

$ sudo dumpe2fs /dev/hda1 |grep -i 'Mount'
dumpe2fs 1.40-WIP (14-Nov-2006)
Last mounted on: <not available>
Default mount options: (none)
Last mount time: Sat May 19 10:01:11 2007
Mount count: 30
Maximum mount count: 35

Maximum mount count est le nombre de montages maximum avant vérification au démarrage, et Mount count est le nombre de montages déjà effectués.

Si le nombre de montages effectués dépasse le nombre max, alors fsck vérifiera le système de fichier au démarrage.

L'astuce est maintenant de modifier 'à la main' le nombre de montages effectués, comme ça on force fsck à vérfier au prochain boot. Pour ce faire, utilise tune2fs :

$ sudo tune2fs -C 55 /dev/sda1

Autre :

shutdown -r -F now (reboot -F) crée un fichier /forcefsck à la racine.

nohup

Nohup est une commande qui permet de lancer un processus qui restera actif même après la déconnexion de l'utilisateur.

Cette dernière peut s'avérer très utile si on la combine au '&' qui permet de lancer un processus en arrière plan.

Prenons un exemple concret : je souhaite effectuer une action sur un serveur distant en ssh, mais je n'ai pas envie d'attendre la fin de la commande pour pouvoir me déconnecter.

Ici, je lance le téléchargement d'un gros fichier :

# ssh pti-seb@monserveur
# nohup wget ftp://...../Fedora-8-i386-rescuecd.iso &
# exit

A chaque utilisation, la commande crée un fichier de log nommé nohup.out, permettant de consulter les messages qui auraient dû s'afficher sur la console. On pourra visionner le contenu comme ceci :

# more nohup.out

disown

Si vous n'avez pas lancé le processus ou l'application avec nohup et que vous voulez comme même pouvoir fermer le terminal, utilisez disown

Par exemple :

$ disown 888

888 étant le PID du processus que vous voulez garder “en vie”.

set

Permet de parser une chaine de caractère

[dorian@Pentium4 SiteWeb]$ set 1 2 3 4 # attribue 1 2 3 4 aux variables spéciales $1 $2 $3 et $4
[dorian@Pentium4 SiteWeb]$ echo $1 $2 $3
1 2 3

[dorian@Pentium4 SiteWeb]$ shift
[dorian@Pentium4 SiteWeb]$ echo $1 $2 $3
2 3 4

set -e permet de stopper le scritp si une commande se déroule mal. Cela équivaut à mettre || exit 1 à la fin de chaque commande.

set -u génère une erreur si une des variables utilisées n'est pas définies.

echo

[dorian@Pentium4 dorian]$ variable=abcdefghijklmnopqrstuvwxyz
[dorian@Pentium4 dorian]$ echo $variable
abcdefghijklmnopqrstuvwxyz

[dorian@Pentium4 dorian]$ echo ${#variable} # affiche la longueur de $variable
26

[dorian@Pentium4 dorian]$ echo ${variable#*o} # élimine tous les caractères jusqu'à 'o'
pqrstuvwxyz

[dorian@Pentium4 dorian]$ echo ${variable%o*} # élimine tous les caractères à partir de 'o'
abcdefghijklmn

[dorian@Pentium4 dorian]$ echo ${variable:5:2} # extrait la sous-chaine de longueur 2 à partir du 5ème caractère
fg

[dorian@Pentium4 dorian]$ echo ${variable:20} # extrait tous les caractères à partir du vingtième
uvwxyz

[dorian@Pentium4 dorian]$ variable=abcdefghijklmncopqrstuvwxyz
[dorian@Pentium4 dorian]$ echo ${variable%c*} # élimine le plus petit suffixe
abcdefghijklmn

[dorian@Pentium4 dorian]$ echo ${variable%%c*} # élimine le plus grand suffixe
ab

[dorian@Pentium4 dorian]$ echo ${variable#*c} # élimine le plus petit préfixe
defghijklmncopqrstuvwxyz

[dorian@Pentium4 dorian]$ echo ${variable##*c} # élimine le plus grand préfixe
opqrstuvwxyz

[dorian@Pentium4 dorian]$ adresse=toto@fai.fr
[dorian@Pentium4 dorian]$ echo adresse
adresse

[dorian@Pentium4 dorian]$ echo $adresse
toto@fai.fr

[dorian@Pentium4 dorian]$ echo ${adresse/toto/tata} # remplace toto par tata dans adresse
tata@fai.fr

md5sum / md5deep

Un des avantages de md5deep est qu'il permet de faire des md5sum récursivement :

md5deep -r /path

On peut arriver au même résultat avec md5sum :

find /répertoire -type f -print0 | xargs -0 md5sum

Pour vérifier l'intégrité des données à partir d'un fichier md5sum / md5deep :

md5sum -c monfichier.md5

watch

watch permet de lancer une commande toutes les X intervalles de temps.

watch -n 2 lpq

permettra de surveiller la file d'attente de l'impression.

watch lsof -i

pour voir en temps réel vos connexions réseau sortantes et ports ouverts,

chattr

chattr +attr file

chattr -attr file

lsattr (permet de lister les attributs)

L'option -R permet de changer récursivement les attributs.

Les attributs :

Ils sont au nombre de seize, tous identifiables par une lettre [ASacDdIijsTtuEXZ]

-A

La date de dernier accès n'est pas mise à jour (uniquement utile pour réduire les accès disque sur les portables)

-S

Le fichier est synchrone, les écritures dans le fichier sont immédiatement effectuées sur le disque. (équivalent à l'option sync de mount appliquée à un sous-ensemble de fichiers)

-a

Le fichier ne peut être ouvert qu'en ajout pour l'écriture (fichiers journaux, etc) Seule la redirection » peut être utilisée, le fichier ne peut être supprimé. Seul l'utilisateur root ou un programme disposant des droits nécessaires peut changer cet attribut.

-c

Le fichier est automatiquement compressé avant l'écriture sur le disque, et décompressé avant la lecture.

-D

Le dossier est synchrone (cf: -S) (équivalent à l'option dirsync de mount sur un sous ensemble de dossiers) Utilisable à partir du noyau 2.5.19

-d

Le fichier ne sera pas sauvegardé par la commande dump

-I

Ne peut être fixé par chattr, uniquement listé par lsattr Indique que le dossier est indexé.

-i

Le fichier/répertoire ne peut être modifié, effacé, renommé ou lié symboliquement, pas même par root. Seul root ou un binaire possédant les droits nécessaires peut fixer cet attribut.

-j

EXT3 uniquement. Si le système de fichier est monté avec l'option “data=ordered” ou “data=writeback”, toutes les données du fichier sont écrites sur le journal avant d'être écrites dans le fichier lui-même. Si le système de fichier est monté avec l'option “data=journal”, toute les données de tous les fichiers sont déjà dans le journal, l'attribut est sans effet. Seul root ou un binaire possédant les droits nécessaires peut fixer cet attribut.

-s

Quand le fichier est détruit, tous les blocs de données libérés sont mis à zéro.

-T

Utilisable à partir de la version 2.5.46 du noyau. Pas trouvé plus d'infos pour le moment.

-t

Concerne la fragmentation. Ceci n'est pour le moment pas implémenté sur l'ext2 et l'ext3 à ma connaissance.

-u

Si le fichier est effacé, son contenu est sauvegardé, cela permet à l'utilisateur de demander sa restauration.

-E

Expérimental, permet de détecter une erreur de compression, ne peut être fixé par chattr, mais peut être listé par lsattr

-X

Expérimental, indique que les données brutes d'un fichier compressé peuvent être accédées directement. Ne peut pour le moment être fixé par chattr

-Z

Expérimental, donne des informations sur l'état d'un fichier compressé. peut être uniquement listé par lsattr

Les attributs A c s et u ne peuvent être utilisés qu'à partir d'un noyau 2.3, mais ne sont pas implémentés dans les noyaux 2.4, cela semble être le cas dans les noyaux 2.6.

at

La commande at s’exécute qu’une seule fois. On se place en root.

Sa syntaxe est la suivante at heure jour. Le jour n’est pas obligatoire par défaut c’est aujourd’hui.

Un exemple :

root@ipower:~$ at 20:00 10/21/05

Une fois que vous entrez cette commande, un prompt apparait :

root@ipower:~$ at 20:00 10/21/05
warning: commands will be executed using /bin/sh
at>

À ce moment précis entrez votre commande, par exemple lancer firefox, puis entrée :

nadir@ipower:~$ at 20:00 10/21/05
warning: commands will be executed using /bin/sh
at> firefox

Pour sortir du prompt appuyez sur CONTROLE+D.

La commande suivante permet d’exécuter une tâche dans 2 jours à minuit.

root@ipower:~$ at 00:00 +2 days

Celle-ci effectuera une tâche dans 2 heures à partir de cet instant.

root@ipower:~$ at now +2 hour

La commande qui vous permet de déterminer quels sont les jobs ou travaux en cours est atq

root@ipower:~$ atq
4 2005-10-23 00:00 a nadir
5 2005-10-21 21:52 a nadir

Vous voyez apparaître les numéros des travaux. Pour annuler une tâche, utilisez la commande atrm suivi du numéro de tâche :

root@ipower:~$ atq
4 2005-10-23 00:00 a nadir
5 2005-10-21 21:52 a nadir
root@ipower:~$ atrm 5
root@ipower:~$ atq
4 2005-10-23 00:00 a nadir

Dans l’exemple ci-dessus nous avons annuler la tâche numéro 5.

Nous sommes actuellement le super utilisateur (root), il est possible néanmoins de spécifier des utilisateurs (users) ayant le droit d’utiliser at ou ceux n’ayant pas le droit d’utiliser cette commande. On utilise pour cela les fichiers /etc/at.allow and /etc/at.deny.

Si le fichier /etc/at.allow existe, seul les utilisateurs mentionnés auront le droit d’utiliser la commande at.

Si le fichier /etc/at.allow n’existe pas, c’est le fichier /etc/at.deny qui est pris en compte : les utilisateurs mentionnés n’auront pas le droit d’utiliser la commande at.

Si aucun des deux fichiers n’existe, seul le super utilisateur (root) aura le droit d’utiliser la commande at.

Remarque : un fichier /etc/at.deny vide signifie que tout les utilisateurs peuvent utiliser la commande at.

Par défaut, seul le super utilisateur(root) possède le droit d’utiliser at.

yes

la commande yes renvoie sur l'entrée stendard y une nfinité de fois..

yes oui

Affiche oui une infinité de fois…

yes est donc utile pour les script où il faut répondre y par exemple

yes | rm -i test

socat

Socat permet de lier presque n'importe quoi vers n'importe quoi.

TCP → UDP

TCP → FICHIER

TCP → EXECUTABLE

OPENSSL → FICHIER

(Socket unix, pipe, un serveur proxy, …)

Enfin bref, n'importe quoi vers n'importe quoi.

Ecouter sur un port (80):

socat - TCP-LISTEN:80,reuseaddr,fork

Transferer un fichier test :

  • sur le serveur :
# socat TCP-LISTEN:1234 test
  • sur le client :
# socat TCP:hostname:1234 test

L'utilisation principale est d'en faire un relais réseau: socat tcp4-listen:9999,reuseaddr,fork tcp4:google.com:80

  • le reuseaddr c'est pour éviter les problèmes avec le CTRL+C)
  • le fork c'est pour avoir plusieurs connexions

Socat, permet ainsi de créer un point d'entrée sur le port 9999 directement vers google.com:80

socat tcp4-listen:9999,reuseaddr,fork tcp4:google.com:80
socat tcp4-listen:9999,reuseaddr,fork exec:"cat /proc/meminfo"

puis tester :

telnet 127.0.0.1 9999 (et hop le meminfo)

Un tunnel passant à travers un proxy :

$ socat TCP4-LISTEN:2022,reuseaddr,fork PROXY:proxy:machine.toto.fr:22,proxyport=3128,proxyauth=user:pass

Mais le plus intéressant c'est le SSL pour les paranos: D'abord générer un certficat x509 (self signé ou plus, si vous êtes riches :))

openssl genrsa -out server.key 1024
openssl req -x509 -key server.key -out server.crt -days 365 -new

socat openssl-listen:9999, cert=server.crt,key=server.key,reuseaddr,fork exec:"cat /proc/meminfo"

puis tester:

openssl s_client -connect 127.0.0.1:9999

ou encore

socat openssl-listen:9999,cert=server.crt,key=server.key,reuseaddr,fork tcp4:google.com:80

puis:

firefox https://127.0.0.1:9999

Mais là tout le monde peut se connecter… il est possible de faire une authentification par certificat pour limiter les accès.

openssl genrsa -out client.key 1024
openssl req -key client.key -out client.csr -new
openssl x509 -CA server.crt -CAkey server.key -in client.csr -req -CAcreateserial -out client.crt

socat openssl-listen:9999,cert=server.crt,key=server.key, cafile=server.crt,reuseaddr,fork,verify=1,cipher=HIGH:3DES:MD5 file:/proc/cpuinfo,rdonly

puis tester:

openssl s_client -host 127.0.0.1 -port 9999 -cert client.crt -key client.key

Créer un port en ecoute sur le port 1234 en tant que l'utilisateur nobody qui autorise seulement les connections via l'ip 192.168.1.9. Crée un fichier lock quand socat est lancé et exécute le script fichier test.sh à chaque connexion. socat -L lock TCP-LISTEN:1234,crnl,reuseaddr,fork,su=nobody ,range=192.168.1.2/32 SYSTEM:'filan -i 0 -s >&2 && ./test.sh',nofork

Exemple de script test.sh :

#!/bin/bash
#TMOUT=5 #timeout du read
while true;
do
        read rep
 
        if [ "$rep" == 'status' ]; then
            echo "status : ok"
        fi
done
netcat <server> 1234 <<EOF
status
EOF
status : ok

vmstat

Vmstat (virtual memory)

Affiche les statistiques d'utilisation de la ram, du swap, des entrées/sorties, du scheduler et du processeur.

# affichage en continu toutes les 2s
$ vmstat 2

r: Nombre de processus en compétition pour le temps CPU.

b: Nombre de processus dormants interruptable sleep.

swpd : memoire passée dans la swap

free : mémoire disponible

buff : quantité de mémoire utilisée comme tampons d'E/S (ko).

cache : mémoire utilisée dans des caches

→ si problème augmenter la ram ou à défaut la swap

si : quantité de swap lue

so : quantité de swap écrite

→ si problème augmenter la ram

bi : nombre de blocs lus sur le disque

bo : nombre de blocs écrits sur le disque

→ si problème optimiser le processus qui utilise le disque

in : nombre d'interruption matérielles et logicielles

→ si problème, matériel chargé ou abimé

cs : nombre de changement de contexte (de processus)

→ si problème, trop de processus, augmenter le nombre de cpu ;-)

us : proportion du temps processeur utilisée en userland

→ si problème, code à optimiser (probablement normal)

sy : proportion du temps processeur utilisée dans le noyau

id : proportion du temps processeur inutilisé

wa : proportion du temps processeur perdu en attente d'i/o

→ si problème, attention réseau ou disque

iostat

Du paquet sysstat, il affiche des statistiques d'entrées sortie sur le disque, c'est à dire le nombre de blocs écrits et lus :

$ iostat 2

Pour une version détaillée par partition :

$ iostat -p ALL 2

mpstat

Du même paquet que précédemment, il affiche des statistiques liées au processeur.

$ mpstat 2

Les valeurs sont découpées en

  • %user : utilisation par les processus normaux
  • %nice : utilisation par les processus nicés
  • %sys : utilisation par le noyau
  • %iowait : blocage par le matériel
  • %irq : utilisation par une interruption matérielle (timer, disque …)
  • %soft : utilisation par une interruption logicielle (appel système, exception …)
  • %steal : processeur non disponible car utilisé dans une autre machine virtuelle (nouveauté)
  • %idle : processeur non utilisé
  • intr/s : nombre d'interruptions par seconde

tee

Vous pouvez exécute une commande, avec un affichage à l'écran et une copie dans un fichier texte. Ce qui peut être très pratique pour garder un trace ou pour aider à résoudre un problème. Pour cela il faut lancer votre commande avec un ou plusieurs arguments suivi de | tee votreFichier.

Dans cet exemple la commande # apt-get update va se copier dans le fichier texte apt-update.txt se trouvant dans /home/libordux:

# apt-get update | tee /home/libordux/apt-update.txt

wall

Permet d'envoyer un message sur tous les terminaux des utilisateurs connectés (meme graphique)

hdparm

Permet de mesurer la rapidité de son HDD.

[root@xxx]# /sbin/hdparm -tT /dev/sda

/dev/sda:
Timing cached reads: 9476 MB in 2.00 seconds = 4738.72 MB/sec
Timing buffered disk reads: 260 MB in 3.01 seconds = 86.51 MB/sec

iperf

Iperf est un logiciel informatique permettant la mesure de différentes variables d'une connexion réseau IP. Iperf est développé par National Laboratory for Applied Network Research (NLANR).Basée sur une architecture client/serveur et disponible sur différents systèmes d'exploitations (Unix, Windows, MacOS X,…).

Iperf doit être lancé sur deux machines se trouvant de part et d'autre du réseau à tester. La première machine lance Iperf en “mode serveur” (avec l'option -s), la seconde en “mode client” (option -c). Par défaut le test réseau se fait en utilsant le protocole TCP (mais il est également possible d'utiliser le mode UDP avec l'option -u).

Pour plus d'info voir : http://fr.wikipedia.org/wiki/Iperf

zcat

Compression du fichier tail.txt avec le meilleur facteur de compression. Le fichier est comprimé et remplacé par le fichier tail.txt.gz

[cr@localhost /cr]#zact -9 tail.txt

On liste le contenu du fichier comprimé avec l'option l

[cr@localhost /cr]#zcat -l tail.txt.gz
compressed uncompr. ratio uncompressed_name
1392 3310 58.7% tail.txt

L'option -d pour la décompression du fichier et entraine la suppression de l'original.

[cr@localhost /cr]#zcat -d tail.txt.gz

stty

Lecture ou positionnement des paramètres du port de raccordement du terminal utilisé. Par exemple: supprimer ou remettre la fonction d'écho qui affiche tout caractère entré au clavier, modifier le caractère d'effacement, régler le traitement de la parité, la vitesse de transfert, etc

Enlever l'écho sur le terminal:

stty -echo

remettre l'écho

stty echo

positionner le caractère d'effacement

stty erase ^H (Ctrl-H ou ^H)

positionner le caractère de contrôle qui permet d'arrêter un processus en premier plan

stty intr ^C

affichage des paramètres

stty -a ou stty everything

Les paramètres d'un terminal sont beaucoup plus nombreux que les quelques exemples cités ci-dessus comme on peut le voir avec stty -a.

La suite présente les plus utiles:

icanon : mode d'entrée canonique, les caractères entrés au clavier ne sont réellement transmis au processus qui les attend qu'à la fin de la ligne. Les caractères sont mémorisés en attendant dans un tampon interne du driver du terminal. stty -icanon permet de changer ce mode, les caractères sont alors transmis en fonction de la valeur des paramètres min et time.

min : nombre de caractères à recevoir au minimum avant de les transmettre au processus lecteur. Le paramètre time permet de ne pas attendre min caractères. Utilisable seulement dans le mode -icanon.

time : intervalle entre caractères, en 10ièmes de secondes. Si l'intervalle réel dépasse time, les caractères sont émis avant d'en avoir reçu min. time est inhibé s'il vaut 0. Ainsi les caractères seront transmis un par un au rythme de leur frappe si min = 1 et time = 0. En général, par défaut, min vaut 4 et time vaut 0. Attention, certains Shells (le T-C-Shell) n'aiment pas ce mode de fonctionnement et remettent systématiquement le terminal en mode canonique. On ne peut alors changer ce mode à la main, dans ce cas il n'est utilisable que dans des Shell scripts.

echoe : le caractère d'effacement est renvoyé en écho par la séquence Backspace-Space-Backspace. Le caractère que l'on voulait effacer l'est donc bien. Avec stty -echoe, le caractère d'effacement est renvoyé en écho tel quel (par défaut ^H), la fonctionnalité d'effacement est toujours active mais on ne la voit pas.

ocrnl : en sortie, chaque caractère Return est transformé en caractère NewLine.

onlcr : en sortie un NewLine est transformé en séquence Return-NewLine.

icrnl : en entrée, un Return est transformé en NewLine. Ce mode est standard sous UNIX, les fin de lignes dans les fichiers sont codées par le caractère NewLine.

ixon : met en service le contrôle de flux par les caractères START/STOP (XON/XOFF). L'affichage des caractères est arrêté lorsque le caractère STOP est frappé au clavier. Le caractère STOP est un caractère de contrôle défini souvent par <Control-S> et modifiable par stty.

ixany : relance de l'affichage avec n'importe quel caractère quand cet affichage a été arrêté par STOP.

50 75 110 … 1200 2400 … 9600 19200 : positionnement de la vitesse en bauds du terminal.

susp ^x : positionne le caractère de contrôle susp à la valeur <Control-x>. Souvent, la valeur par défaut de ce caractère est <Control-Z>. Il permet de suspendre une commande en premier plan pour revenir au Shell sans tuer la commande. On relance la commande par fg ou bg ensuite.

iotop

iotop permet de mesurer les i/o par processus.

http://freshmeat.net/projects/iotop

pidstat

Affichera toutes les 2 secondes les processus effectuant des I/O ainsi que les volumes lus/écrits par seconde.

pidstat -d 2

trap

Gerer les signaux en shell

#! /bin/sh
# exTrap
# Script shell de mise en application de l'instruction case.
trap "echo Le script s\'est terminé" EXIT
trap "echo Vous avez appuyé sur Ctrl-C" SIGINT
trap "echo Vous avez fait : kill $$" SIGTERM
trap "echo J\'ai été stoppé et je continue" SIGCONT
trap "echo J\'ai reçu SIGUSR1 ou SIGUSR2" SIGUSR1 SIGUSR2
echo "Processus $$ : J'attends un signal..."
#
# Compte à rebours
#
i=10
while [ $i -gt 0 ]; do
echo -n "$i "
sleep 1
let $[ i -= 1 ]
done
echo "0"

trap 'echo "Sortie sur Ctrl-C"; rm -f tmp.tmp; exit' 2

Quelques signaux Unix :

0 Commande exit 1 Interruption de la session 2 Interruption par Ctrl-C 3 Interruption par Ctrl-Q 15 Commande Kill

newgrp

newgrp - (réinitialise le GID par défaut)
newgrp <groupe> (à ajouter par défaut)

Newgrp permet de changer l'identifiant de groupe de l'utilisateur au cours d'une session. Si l'option - est fournie, l'environnement de l'utilisateur est réinitialisé, comme si l'utilisateur venait de se connecter. Sinon, l'environnement actuel, y-compris le répertoire de travail actuel est conservé.

Newgrp essaiera également d'ajouter le groupe à l'ensemble des groupes de l'utilisateur. Si l'utilisateur n'est pas superutilisateur, un mot de passe sera lui demandé s'il n'utilise pas de mot de passe (dans /etc/shadow, si cet utilisateur a une entrée dans le fichier des mots de passe cachés, ou dans /etc/passwd sinon), mais que le groupe en a un, ou si l'utilisateur n'est pas dans la liste des membres de ce groupe et que ce groupe utilise un mot de passe. L'accès sera refusé si le mot de passe du groupe est vide et que l'utilisateur ne fait pas partie de ses membres.

S'il y a une entrée pour ce groupe dans /etc/gshadow, alors la liste des membres et le mot de passe de ce groupe seront pris dans ce fichier, sinon, l'entrée du fichier /etc/group est utilisée.

kill

  • kill -l (liste les signaux)
  • SIGHUP (1)

Si l'utilisateur se déconnecte du terminal ayant permis de lancer le programme,ce signal est directement envoyé au processus ; par défaut, le processus se termine. Dans le cas d'un processus démon, en principe volontairement détaché du terminal duquel il a été lancé, ce signal est généralement interprété comme une demande de relecture du fichier de configuration, ce qui est mieux que le redémarrage complet du service sur un système en production.

  • SIGINT (2)

Interruption depuis le clavier Ctrl + C. Le comportement par défaut est l'arrêt du processus.

  • SIGQUIT (3)

Abandon depuis le clavier avec Ctrl + \. De nouveau, terminaison du processus par défaut. De plus, une copie de l'espace mémoire est enregistrée dans un fichier core (utile uniquement pour le débogage des applications.

  • SIGKILL (9)

Tue un processus, quel que soit sont état, de manière inconditionnelle. A utiliser en cas d'urgence, mais le processus se terminera pas correctement, et donc laissera des traces (non libération de certaines ressources, mémoire, disque, …).

  • SIGTERM (15)

Terminaison normale d'un processus, donc propre (ressources correctement relachées).

  • SIGCONT (18)

Continuer le processus s'il est arrêté. Après l'envoi d'un signal SIGSTOP, on peut faire reprendre l'exécution du processus grâce à deux commandes. Pour le faire reprendre au premier plan du shell en cours : fg et pour le faire redémarrer en arrière plan : bg.

  • SIGSTOP (19)

Signal de pause immédiate du processus (en l'état). Correspond à la combinaison de touches Control-S.

pidof

pidof konqueror

Affiche le PID de l'application Konqueror (si actuellement en cours d'exécution).

/proc/interrupts

Afin d'obtenir la liste de toutes les interruptions de tous les périphériques, on peut afficher le contenu du fichier /proc/interrupts à l'écran.

$ cat /proc/interrupts
          CPU0
0:     397517          XT-PIC  timer
1:       7544          XT-PIC  keyboard
2:          0          XT-PIC  cascade
5:          0          XT-PIC  usb-uhci, usb-uhci
8:          2          XT-PIC  rtc
10:       2024          XT-PIC  eth0, usb-uhci, PCI device
104c:ac51, PCI device 104c:ac51, Intel ICH3
12:      19502          XT-PIC  PS/2 Mouse
14:      11445          XT-PIC  ide0
15:       2770          XT-PIC  ide1
NMI:          0
ERR:          0

Pour obtenir un système optimisé, vérifier qu'une adresse d'interruption n'est pas utilisée à la fois par deux périphériques très occupés.

Se souvenir que toute ISR de n'importe quel périphérique sera exécutée pour chaque interruption.

curl

  • Voir le code source d'une page web

curl http://www.hardware.fr

  • Téléchargement d'un fichier en http /ftp

curl http://curl.haxx.se/download/curl-7.11.0.tar.gz > curl-7.11.0.tar.gz

curl ftp://ftp.server.com/pub/fichier.tar.gz > fichier.tar.gz
  • Continuer un fichier qui s'est arrêté par http

curl -C - -O http://curl.haxx.se/download/curl-7.11.0.tar.gz

  • Téléchargement d'un fichier ftp sur un serveur avec authentification

curl -u user:password ftp://ftp.server.com/pub/fichier.tar.gz > fichier.tar.gz

  • Téléchargement d'une page web avec un .htaccess

curl -u user:password http://www.server.com/private/page.php > page.html

  • Téléchargement d'un fichier en http avec précision du referer

curl –referer http://www.server.com/index.php http://www.server.com/image/image01.jpg > image01.jpg

Permet de satisfaire la règle de contrôle du referer de Apache qui empêche qu'une image soit référencée par un site concurrent.

  • Téléchargement d'un fichier en http en passant par un proxy

curl –proxy proxyhost:port http://www.server.com/image/image01.jpg > image01.jpg

→ Exemple PHP

<?php
 $html = get_html(
    'http://www.server.com/page_lambda.php',
    array(
      'Referer'=>'http://www.server.com/index.php',
      'Proxy'=>'monproxy:8080',
      'BrowserName'=>'Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.0)'
    )
 );
 ?>

CurlFtpFS

CurlFtpFS permet à n'importe quel utilisateur de monter un dossier FTP distant dans un dossier local.

aptitude install curlftpfs

Pour monter le dossier FTP :

curlftpfs ftp://<serveur FTP> <point de montage> -o user=<login>:<mot de passe>

Exemple :

mkdir /tmp/curl
curlftpfs ftp://192.168.1.1 /tmp/curl -o user=fritz:monmotdepasse

Pour démonter le dossier FTP :

fusermount -u /tmp/curl

Pour monter automatiquement un site FTP au démarrage, il vous suffit d'ajouter à votre fichier /etc/fstab la ligne suivante :

curlftpfs#login:password@ftp.host.com /mnt/host fuse rw,uid=500,user,auto 0 0

Vous pouvez aussi choisir de monter un sous-répertoire, ou encore monter un répertoire parent de votre répertoire de départ :

curlftpfs#login:password@ftp.host.com/../chemin/vers/le%20repertoire /mnt/host fuse rw,uid=500,user,auto 0  0

Vous remarquerez au passage qu'un espace dans le nom du répertoire se traduit par %20 dans le chemin. Options de montage

  • rw (ro) : force l'écriture ou la lecture seule,
  • umask=0000 : masque pour les fichiers et répertoires dans le répertoire de montage,
  • allow_other : permet aux utilisateurs (tous) d'acceder au point de montage, par défaut, seul l'utilisateur le peut,
  • auto / noauto : montage automatique ou non automatique au lancement.

Toutes les options sont visible via man curlftpfs

dd

sauvegarder une partition :

dd if=/dev/sda of=/mnt/sdb1/backup.img

Restaurer une partition (à partir d'un live-cd) :

dd if=/mnt/sdb1/backup.img of=/dev/sda

Cloner un disque : dd if=/dev/sdb of=/dev/sdc

Sauvegarder en transférant par SSH ;

dd if=/dev/sdb | ssh root@target "(cat >backup.img)"

Créer une image ISO d'un cd-rom :

dd if=/dev/cdrom of=cdimage.iso bs=2048 conv=sync

Lire un film qui contient des blocs défectueux :

dd if=movie.avi of=rescued_movie.avi conv=noerror

udev

Surveiller les nouveaux périphériques :

sudo udevmonitor --udev

wmctrl

  • lister les fenêtres graphiques actives
wmctrl -l

touch

touch <fichier>

Change la date du fichier à l'heure du système.

touch -d "20090521 13:17:00" <fichier>

Change la date du fichier au 21/05/2009 à 13h17 et 00 seconde. Les heures, minutes et secondes sont facultatifs.

touch -a "20090521 13:17:00" <fichier>

Change la date d'accès au 21/05/2009 à 13h17 et 00 seconde. Les heures, minutes et secondes sont facultatifs.

touch <fichier1> -r <fichier2>

Change la date de <fichier1> à la même que celle de <fichier2>

sysctl

Lister les valeurs qui sont modifiable dans le noyau

badblocks

Recherche les blocs défectueux sur un périphérique (habituellement une partition d'un disque).

badblocks -nvs /dev/sdb

Le paraVérifie le disque sdb in en mode lecture/ecriture non destructif (par defaut

badblocks -wvs /dev/sdb

Vérifie le disque en mode destruction des blocs défectueux.

filefrag

Renseigne sur le niveau de fragmentation que peut atteindre un fichier

logger

Enregistre le message donné dans les logs du système.

tzselect

Permet de changer de fuseau horaire.

blkid

Permet de déterminer l'id d'une partition.

# blkid /dev/sda2
/dev/sda2: UUID="b4aa65dc-9f58-4b07-9938-f90b7c0b0930" SEC_TYPE="ext2" TYPE="ext3"

vol_id

Obtenir des info sur une partition :

root@ks361289:~# vol_id /dev/sda1
ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=2c19d2b1-e5e9-4e9e-a692-9a7638510353
ID_FS_UUID_ENC=2c19d2b1-e5e9-4e9e-a692-9a7638510353
ID_FS_LABEL=/
ID_FS_LABEL_ENC=\x2f
ID_FS_LABEL_SAFE=

Obtenir l'uuid :

root@ks361289:~# vol_id -u /dev/sda1
2c19d2b1-e5e9-4e9e-a692-9a7638510353

uuidgen

Génére un id aléatoire :

root@ks361289:~# uuidgen
ce2f661d-eb06-4f04-b6b8-de9050256c93

readelf

Affiche des informations sur les binaires du type ELF.

readelf -a /usr/bin/id

reset

Réinitialise un terminal avec ses valeurs par défaut.

toe

Liste les type de terminaux connus que peut prendre la variable TERM

toe -a
export TERM=xterm

pmap

ffiche le plan mémoire du processus désigné.

root@ks361289:~# pmap 24196
24196:   /usr/lib/teamspeak-server/teamspeak-server.real -ini=/etc/teamspeak-server/server.ini -log=/var/log/teamspeak-server.log -db=/var/lib/teamspeak-server/sqlite.db -sql=/usr/share/teamspeak-server/sql/sqlite/ -badnames=/var/lib/teamspeak-server/badnames -httpdocs=/usr/share/teamspeak-server/httpdocs/ -tcpquerydocs=/usr/share/teamspeak-server/tcpquerydocs/ -pid=/var/run/teamspeak-server.pid
08048000    832K r-x--  /usr/lib/teamspeak-server/teamspeak-server.real
08118000   1024K rwx--    [ anon ]
08218000    100K rwx--  /usr/lib/teamspeak-server/teamspeak-server.real
08231000    392K rwx--    [ anon ]
b32f9000      4K -----    [ anon ]
b32fa000   8192K rwx--    [ anon ]
b3afa000      4K -----    [ anon ]
b3afb000   8192K rwx--    [ anon ]
b42fb000      4K -----    [ anon ]
b42fc000   8192K rwx--    [ anon ]
b4afc000      4K -----    [ anon ]
b4afd000   8192K rwx--    [ anon ]
b52fd000      4K -----    [ anon ]
b52fe000   8192K rwx--    [ anon ]
b5afe000      4K -----    [ anon ]
b5aff000   8192K rwx--    [ anon ]
b62ff000      4K -----    [ anon ]
b6300000   8324K rwx--    [ anon ]
b6b21000    892K -----    [ anon ]
b6c9b000     60K r-x--  /lib/tls/i686/cmov/libresolv-2.7.so
b6caa000      8K rwx--  /lib/tls/i686/cmov/libresolv-2.7.so
b6cac000      8K rwx--    [ anon ]
b6cae000     16K r-x--  /lib/tls/i686/cmov/libnss_dns-2.7.so
b6cb2000      8K rwx--  /lib/tls/i686/cmov/libnss_dns-2.7.so
b6cb4000     36K r-x--  /lib/tls/i686/cmov/libnss_files-2.7.so
b6cbd000      8K rwx--  /lib/tls/i686/cmov/libnss_files-2.7.so
b6cbf000    136K r-x--  /usr/share/locale-langpack/fr/LC_MESSAGES/libc.mo
b6ce1000      4K -----    [ anon ]
b6ce2000   8192K rwx--    [ anon ]
b74e2000    228K r-x--  /usr/lib/teamspeak-server/sqlite.so
b751b000     20K rwx--  /usr/lib/teamspeak-server/sqlite.so
b7520000     40K r-x--  /lib/libgcc_s.so.1
b752a000      4K rwx--  /lib/libgcc_s.so.1
b7531000      4K -----    [ anon ]
b7532000   8192K rwx--    [ anon ]
b7d32000    252K r-x--  /usr/lib/locale/fr_FR.utf8/LC_CTYPE (deleted)
b7d71000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_NUMERIC (deleted)
b7d72000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_TIME (deleted)
b7d73000    900K r-x--  /usr/lib/locale/fr_FR.utf8/LC_COLLATE (deleted)
b7e54000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_MONETARY (deleted)
b7e55000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_MESSAGES/SYS_LC_MESSAGES (deleted)
b7e56000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_PAPER (deleted)
b7e57000     28K r-xs-  /usr/lib/gconv/gconv-modules.cache
b7e5e000      4K rwx--    [ anon ]
b7e5f000   1316K r-x--  /lib/tls/i686/cmov/libc-2.7.so
b7fa8000      4K r-x--  /lib/tls/i686/cmov/libc-2.7.so
b7fa9000      8K rwx--  /lib/tls/i686/cmov/libc-2.7.so
b7fab000     16K rwx--    [ anon ]
b7faf000      8K r-x--  /lib/tls/i686/cmov/libdl-2.7.so
b7fb1000      8K rwx--  /lib/tls/i686/cmov/libdl-2.7.so
b7fb3000     80K r-x--  /lib/tls/i686/cmov/libpthread-2.7.so
b7fc7000      8K rwx--  /lib/tls/i686/cmov/libpthread-2.7.so
b7fc9000      8K rwx--    [ anon ]
b7fcb000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_NAME (deleted)
b7fcc000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_ADDRESS (deleted)
b7fcd000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_TELEPHONE (deleted)
b7fce000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_MEASUREMENT (deleted)
b7fcf000      4K r-x--  /usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATION (deleted)
b7fd0000     12K rwx--    [ anon ]
b7fd3000    104K r-x--  /lib/ld-2.7.so
b7fed000      8K rwx--  /lib/ld-2.7.so
bf831000     84K rwx--    [ stack ]
ffffe000      4K r-x--    [ anon ]
 total    80600K

taskset

Prenons l'exemple de 2 processeurs quad-cores : les cores sont numérotés de 0 à 7

Permet de lancer un processus sur un nombre limité de core.

lance un programme sur les cores 0 et 6 :

taskset –c 0,6 <application>

lance un programme sur les cores 2 à 6

taskset –c 2-6 <application>

Vérifier sur quels processeurs tournent un process :

~# taskset -c -p 32025
pid 32025's current affinity list: 0

numactl

Lancer le programme sur tous les core du cpu 0 avec l'allocation mémoire des cache mémoire du processeur 1 et 2.

numactl --cpubind=0--membind=0,1 <programme>

Affichier la liste des cores et des processeurs :

numactl --show

http://www.halobates.de/numaapi3.pdf

cpulimit

Limiter un processus par son nom :

cpulimit -e nom-application -l 30

Limiter un processus par son pid :

cpulimit -p 1120 -l 15

Dans le cas d'une machine disposant d'un double coeur ou double CPU, comptez alors la limitation comprise entre 0 et 200 %, etc …

trickle

Limiter la vitesse de téléchargement à 15ko/s :

trickle -d 15 wget http://www.system-linux.eu/download.iso

Limiter la vitesse d'upload à 30ko/s :

trickle -u 30 scp /date/test.iso root@10.10.10.1:/data/

ionice

la commande ionice existe et peut s’avérer forte utile, sous réserve que l’ordonnanceur que vous utilisez soit compatible (cfq).

# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq

Si ce n'est pas le cas :

echo cfq > /sys/block/sda/queue/scheduler

Avec ionice affecter au process trois niveaux d’ordonnancement (je vous invite à faire un man ionice pour plus de détails): idle (3) – prend la main si aucun autre process n’a utilisé la ressource après un certain temps best effort(2) – comme son nom l’indique, l’ordonnancement se fait au mieux, ce mode a l’avantage de prendre un argument supplémentaire, pour définir une priorité, allant de 0 a 7, 7 étant la priorité la plus faible, 0 la priorité la plus haute. real time (1) – temps reél

Limiter les accès au disque disque dur

ionice -c3 -p <PID>
ionice -c 2 -n 7 <PID>

Ces commande modifie la priorité d'accès disque d'un processus (défini par son PID).

logname

Permet de voir avec quel compte on s'est logué initialement :

root@ks361289:~# logname
root
root@ks361289:~# su - www-data
www-data@ks361289:~$ whoami
www-data
www-data@ks361289:~$ logname
root

join

$ join -t: -j1 4 -j2 3 /tmp/seb/passwd /tmp/seb/group

va joindre passwd et group en fonction de leur champ commun GID.

Exemple :

$ cat fic1
1       nicolas
5       franck
3       gerard
12      stef
75      willy
24      gerald
8       alain
84      abdel
9       soraya
$ cat fic2
5       patron
8       commercial
3       directeur
12      administrateur
1       formateur
24      technicien
84      commercial
9       secretaire
58      patisssier
$ join fic1 fic2
5 franck patron
8 alain commercial
84 abdel commercial
9 soraya secretaire
$ sort -n fic1 > fic1s
$ sort -n fic2 > fic2s
$ join fic1s fic2s
1 nicolas formateur
3 gerard directeur
5 franck patron
8 alain commercial
9 soraya secretaire
12 stef administrateur
24 gerald technicien
84 abdel commercial

paste

Colle 2 fichiers :

$ cat fic1
1       nicolas
5       franck
3       gerard
12      stef
75      willy
24      gerald
8       alain
84      abdel
9       soraya
$ cat fic2
5       patron
8       commercial
3       directeur
12      administrateur
1       formateur
24      technicien
84      commercial
9       secretaire
58      patisssier
$ paste fic1 fic2
1       nicolas 5       patron
5       franck  8       commercial
3       gerard  3       directeur
12      stef    12      administrateur
75      willy   1       formateur
24      gerald  24      technicien
8       alain   84      commercial
84      abdel   9       secretaire
9       soraya  58      patisssier

cmp

La commande cmp compare les fichiers caractère par caractère. Par défaut la commande s'arrête dès la première différence rencontrée et indique la position de l'erreur. cmp [-l] [-s] fic1 fic2

L'option -l détaille toutes les différences en trois colonnes. La première colonne représente le numéro de caractère, la deuxième la valeur octale ASCII du caractère concerné de fic1 et et troisième la valeur octale ASCII du caractère concerné de fic2.

L'option -s retourne uniquement le code d'erreur (non visible).

$ cmp liste liste2
liste liste2 differ: char 38, line 2
$ cmp -l liste liste2
38 157 142
39 160 157
40 164 165
41 151 164
42 161 157
43 165 156
44 145 163
182 143 145
183 154 143
... 

cfdisk

   Name           Flags        Part Type    FS Type               [Label]           Size (MB)
 ------------------------------------------------------------------------------------------------
    sda1           Boot          Primary     Linux raid autodetect [/]               1998.75    
    sda2                         Primary     Linux swap / Solaris                    1003.49
    sda3                         Primary     Linux raid autodetect                   79341.06

sfdisk

Idem que fdisk mais en plus puissant.

Cloner les partitions d'un disque sur un autre :

sfdisk -d /dev/sda | sfdisk /dev/sdb

lspci

Affiche des information sur le matériel :

# lspci
* -v : verbose
* -vv : tres verbose
* -k : fourni des info sur le driver utilisé

lsscsi

Affiche des informations sur les périphériques SCSI, SATA et SAN

# lsscsi 
  • -g : affiche de device générique

lsusb

# lsusb
Bus 001 Device 001: ID 0000:0000

lshw

Affiche une multitude d'information sur le matériel comme par exemple le numéro de série, le model du serveur, le modèle des carte et la révision du bios…

# lshw 
  • -html : génére une page html
  • -businfo : condencé d'informations

dmidecode

Equivalent à lshw

smartctl

root@ks361289:~# smartctl -a /dev/sda
smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Device Model:     ST3250410AS
Serial Number:    6RY6N3RV
Firmware Version: 3.AAF
User Capacity:    250 059 350 016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Sat Jun 26 13:40:54 2010 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                 ( 430) seconds.
Offline data collection
capabilities:                    (0x5b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  64) minutes.

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   253   006    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0003   097   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       11
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   082   060   030    Pre-fail  Always       -       185064643
  9 Power_On_Hours          0x0032   081   081   000    Old_age   Always       -       17481
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       11
187 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
189 Unknown_Attribute       0x003a   100   100   000    Old_age   Always       -       0
190 Temperature_Celsius     0x0022   055   049   045    Old_age   Always       -       857145389
194 Temperature_Celsius     0x0022   045   051   000    Old_age   Always       -       45 (Lifetime Min/Max 0/23)
195 Hardware_ECC_Recovered  0x001a   059   057   000    Old_age   Always       -       84956876
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 TA_Increase_Count       0x0032   100   253   000    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Vous pouvez également déclencher manuellement un test court avec la commande suivante:

# smartctl -t short /dev/sda

La durée des tests de type short, long et conveyance est définie dans la mémoire du disque lui-même, vous ne pouvez pas modifier cette valeur.

Une fois le test terminé, vous pouvez consulter le résultat du test à l'aide de l'option -l de smartctl. Cette option va lire dans la mémoire de votre disque (si celui-ci le permet) les traces (log) des derniéres opérations réalisées sur celui-ci.

# smartctl -l selftest /dev/sda
smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     17481         -

Tester la santé du disque :

root@ks361289:~# smartctl -H /dev/sda
smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

flock

Place un lock, dans le script ci-dessous un lock empêche de pouvoir lancer le script si le précédent n'est pas encore fini.

(
    flock -n -x 200

    if [ $? != "0" ]; then
        echo "ERROR: Unable to acquire the yum lock. Is another yum running?"
        exit 1
    fi    

    # Do yum stuff here

) 200>${TMP_DIR}/yum.lck

ipcs

Voir la mémoire partagée entre les applications.

icps -m

split

Découpe un fchier.

Ex : Découpe le fichier toto en fichier de 5 méga portant le suffice gigix numéroté numériquement (et non alphabétiquement).

split -d -b 5M toto gigix

Voir aussi csplit

shuf

Permet de lire les lignes d'un fichier de manière aléatoire.

shuf <file>

comm

Compare 2 fichiers triés :

comme <file1> <file2>

options :

  • -1 suppress lines unique to FILE1
  • -2 suppress lines unique to FILE2
  • -3 suppress lines that appear in both files

dircolors

Affiche les couleurs de ls

install

Copie un fichier en changeant les permissions, les droits…

install -o www-data -m 644 <source> <dest>

shred

Supprime réellement un fichier en faisant de multitudes réécritures par dessus.

Ex :supprime le fichier toto en réécrivant 50 fois par dessus :

shred -uvz -n 50 toto

hostid

Identifiant d'une machine en hexadécimal :

root@ks361289:~# hostid
795ba7a7

tune2fs

Tunning du système de fichier ext2/3.

Voir les attributs du fs :

root@ks361289:~# tune2fs -l /dev/sda1
tune2fs 1.40.8 (13-Mar-2008)
Filesystem volume name:   /
Last mounted on:          <not available>
Filesystem UUID:          2c19d2b1-e5e9-4e9e-a692-9a7638510353
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal filetype needs_recovery sparse_super
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              393600
Block count:              787177
Reserved block count:     39358
Free blocks:              302499
Free inodes:              319543
First block:              0
Block size:               4096
Fragment size:            4096
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         15744
Inode blocks per group:   492
Filesystem created:       Thu Jun 26 01:59:41 2008
Last mount time:          Thu Jul 15 19:15:46 2010
Last write time:          Thu Jul 15 19:12:04 2010
Mount count:              1
Maximum mount count:      21
Last checked:             Thu Jul 15 19:12:04 2010
Check interval:           15552000 (6 months)
Next check after:         Tue Jan 11 18:12:04 2011
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
First orphan inode:       220418
Default directory hash:   tea
Directory Hash Seed:      0c8a6143-2360-4a6f-9176-be3962499d08
Journal backup:           inode blocks

changer l’uuid d'une partition :

tune2fs -U a30ae101-971b-48e5-ac7b-b5ceac48dfe7 /dev/sda1

Il est possible de remplacer l’UUID courant par un autre aléatoire basé : • sur le temps :

~ # tune2fs -U time /dev/sda1
tune2fs 1.41.3 (12-Oct-2008)
~ # vol_id -u /dev/sda1
90b87bf6-a1fe-11de-a5a8-001708422436

• sur la source aléatoire du système :

~ # tune2fs -U random /dev/sda1
tune2fs 1.41.3 (12-Oct-2008)
~ # vol_id -u /dev/sda1
be970ba9-31cd-4477-bd14-3fad1ea7fcdc

• tout bonnement de supprimer l’UUID :

~ # tune2fs -U clear /dev/sda1
tune2fs 1.41.3 (12-Oct-2008)
~ # vol_id -u /dev/sda1

resize2fs

Redimensionne un système de fichier ext2/3. Faire un e2fsck avant de redimensionner un fs. Ex : redimensionne sda2 à 340Go :

date; e2fsck -f /dev/sda2; date; resize2fs -p /dev/sda2 340G; date

Voir aussi ext2online

parted

Gérer les partitions :

root@ks361289:~# parted
GNU Parted 1.7.1
On utilise /dev/sda
Bienvenu dans GNU Parted ! Tapez "help" pour voir la liste des commandes.
(parted) print

Disque /dev/sda : 250GB
Taille des secteurs (logique/physique) : 512o/512o
Table de partitions : msdos

Numéro  Début   Fin     Taille  Type      Système de fichiers  Fanions
 1      32,3kB  3224MB  3224MB  primaire  ext3                 amorce
 2      3224MB  250GB   246GB   primaire  ext3
 3      250GB   250GB   535MB   primaire  linux-swap
  • check NUMERO effectue une simple vérification du système de fichiers
  • cp [PÉRIPHÉRIQUE-SOURCE] NOMBRE-SOURCE NOMBRE-DESTINATION copie le système de fichiers vers une autre partition
  • help [COMMANDE] affiche l'aide générale, ou l'aide sur la COMMANDE
  • mklabel LABEL-TYPE crée une nouvelle étiquette de disque (table de partition)
  • mkfs NUMERO TYPE-FS crée un système de fichiers de type TYPE-SF sur la partition NUMERO.
  • mkpart TYPE-PART [TYPE-SF] DÉBUT FIN crée une partition
  • mkpartfs TYPE-PART TYPE-SF DÉBUT FIN crée une partition avec un système de fichiers
  • move NUMERO DEPART FIN déplace la partition NUMERO.
  • name NUMERO NOM donne le nom NOM à la partition NUMERO.
  • print [free|NUMÉRO|all] affiche la table de partitions, une partition ou tous les périphériques
  • quit quitter le programme
  • rescue DEPART FIN restaure une partition perdue entre DEPART et FIN
  • resize NUMERO DÉPART FIN redimensionne la taille de la partition NUMERO et de son système de fichiers.
  • rm NUMERO supprime la partition NUMERO
  • select PERIPHERIQUE sélectionne le périphérique à éditer.
  • set NUMERO STATUT DRAPEAU modifie le drapeau sur la partition NUMERO
  • toggle [NUMERO [DRAPEAU]] change l'état du DRAPEAU de la partition NUMERO
  • unit UNITE change l'unité par défaut à UNITE
  • version affiche la version utilisée de GNU Parted et les informations de copyright

tasksel (ubuntu)

Lister des packs à installer :

root@ks361289:~# tasksel --list-tasks
i dns-server    DNS server
u edubuntu-server       Edubuntu server
i lamp-server   LAMP server
i mail-server   Mail server
i openssh-server        OpenSSH server
u postgresql-server     PostgreSQL database
u print-server  Print server
u samba-server  Samba File server
u ubuntustudio-graphics 2D/3D creation and editing suite
u ubuntustudio-audio    Audio creation and editing suite
u edubuntu-desktop-kde  Edubuntu KDE desktop
u edubuntu-desktop-addon        Edubuntu desktop
u gobuntu-desktop       Gobuntu desktop
u kubuntu-kde4-desktop  Kubuntu KDE 4 desktop
u kubuntu-desktop       Kubuntu desktop
u ubuntustudio-audio-plugins    LADSPA and DSSI audio plugins
u mythbuntu-desktop     Mythbuntu additional roles
u mythbuntu-frontend    Mythbuntu frontend
u mythbuntu-backend-master      Mythbuntu master backend
u mythbuntu-backend-slave       Mythbuntu slave backend
u ubuntustudio-desktop  Ubuntu Studio desktop
u ubuntu-desktop        Ubuntu desktop
u ubuntustudio-video    Video creation and editing suite
u xubuntu-desktop       Xubuntu desktop
u edubuntu-live Edubuntu live CD
u gobuntu-live  Gobuntu live CD
u kubuntu-kde4-live     Kubuntu KDE 4 live CD
u kubuntu-live  Kubuntu live CD
u mythbuntu-live        Mythbuntu live CD
u ubuntu-live   Ubuntu live CD
u ubuntu-dvd-live       Ubuntu live DVD
u xubuntu-live  Xubuntu live CD

Liste le contenu d'un pack

root@ks361289:~# tasksel --task-packages dns-server
bind9-doc
bind9

Installer un pack :

tasksel install dns-server

dmsetup

Gérer device mapper :

dmsetup info
dmsetup ls
dmsetup status
man dmsetup

tput

Agit sur le terminal.

Exemple de script :

#!/bin/bash
# script_tput.sh

#### Initialisation des variables ####

#+ Mode normal
ResetColor="$(tput sgr0)"
# "Surligné" (bold)
bold=$(tput smso)
# "Non-Surligné" (offbold)
offbold=$(tput rmso)

# Couleurs (gras)
#+ Rouge
Red="$(tput bold ; tput setaf 1)"
#+ Vert
Green="$(tput bold ; tput setaf 2)"
#+ Jaune
Yellow="$(tput bold ; tput setaf 3)"
#+ Bleue
Blue="$(tput bold ; tput setaf 4)"
#+ Cyan
BlueCyan="$(tput bold ; tput setaf 6)"

#### Fin initialisation variables ####

# Effacement du terminal
clear

# Adressage du curseur ligne 0 colonne 2
tput cup 0 2
echo "Entrez les informations demandées dans le champ ayant le curseur."
# Adressage du curseur ligne 1 colonne 2
tput cup 1 2
echo "Appuyez sur Entrée pour passer au champ suivant."
# Adressage du curseur ligne 3 colonne 20
tput cup 3 30
echo "${bold}Questions/Réponses${offbold}"

# Pré-affichage des champs
tput cup 5 5
echo -e "Nom : \c"
tput cup 7 5
echo -e "Prénom : \c"
tput cup 9 5
echo -e "Age : \c"

# Facultatif
# Pré-affichage des données
tput cup 12 2
echo -e "Votre nom est : "
tput cup 13 2
echo -e "Votre prénom est : "
tput cup 14 2
echo -e "Vous avez  ans. "

#### Interaction du script ####
# Adressage du curseur ligne 5 colonne 5
tput cup 5 5
echo -e "Nom : \c"
read nom
# Adressage du curseur ligne 7 colonne 5
tput cup 7 5
echo -e "Prénom : \c"
read prenom
# Adressage du curseur ligne 9 colonne 5
tput cup 9 5
echo -e "Age : \c"
read age

#### Affichage des réponses ####
# Adressage du curseur ligne 12 colonne 2
tput cup 12 2
echo -e "${Green}Votre nom est : ${ResetColor}"${Red}$nom${ResetColor}
# Adressage du curseur ligne 13 colonne 2
tput cup 13 2
echo -e "${Green}Votre prénom est : ${ResetColor}"${BlueCyan}$prenom${ResetColor}
# Adressage du curseur ligne 14 colonne 2
tput cup 14 2
echo -e "${Green}Vous avez ${Yellow}$age ${Green}ans. ${ResetColor}"
# Adressage du curseur ligne 20 colonne 0
tput cup 20 0

xrandr

Permet d'obtenir des info sur son écran dont la résolution :

  $ xrandr -q | grep -w Screen
  Screen 0: minimum 320 x 175, current 1280 x 1024, maximum 1280 x 1024 

Et voici une autre méthode pour obtenir la résolution courante ainsi que le taux de rafraîchissement :

  $ xrandr --verbose | grep *current
  1280×1024 (0×143) 65.5MHz *current 

Pour finir, voici un exemple qui montre comment changer la résolution de son écran avec xrandr :

  xrandr -s 1280×1024

debugfs

Examine le journal à la recherche de modification sur le fichier /etc/password :

debugfs -R 'logdump -c -i /etc/passwd' /dev/hda1 | grep [amc]time

awk

Tuto awk

$cat employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Affichier les emplyés Thomas et Nisha :

$ awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000
400  Nisha   Manager    Marketing   $9,500

Afficher les employés dont l'id est supérieur à 200 :

$ awk '$1 >200' employee.txt
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Afficher la colonne 4 si elle contient Technology :

$ awk '$4 ~/Technology/' employee.txt
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
500  Randy   DBA        Technology  $6,000

Compter le nombre d'employer qui appartienne au département Technology :

awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

sleuthkit

aptitude install sleuthkit

Certaines commandes se base sur une image post-mortem, pour la créer :

  • sans compréssion
dd if=/dev/hda | ssh username@backupserver.fqdn "dd of=/directory_of_backups_on_ssh_server/backupfile.iso"
  • avec compression
dd if=/dev/hda1 bs=1k conv=sync,noerror | gzip -c | ssh -c blowfish user@hostname "dd of=filename.gz bs=1k"

On va maintenant voir les commandes utiles du sleuthkit :

fls

Liste les fichiers présents sur le disque, y compris les fichiers effacés. Pour une partition ntfs :

fls -f ntfs /dev/loop0

par default fls liste tout ce qu'il trouve donc il liste aussi les fichiers détruits qu'il trouve. Il liste les fichiers par inode, et liste leur type :

  • r/r pour un fichier
  • d/d pour un répertoire
  • * après le type si c'est un fichier qui a été supprimé

L'inode se trouve sur la deuxième colonne. Si le block est marqué rellocated c'est qu'une partie du fichier a été deplacé et qu'on ne pourra donc le retrouver entier.

fls permet aussi de lister le temps d'accès au fichier selon le MAC Time (Modified Accessed Created, représente les trois attributs de temps enregistre par la majorité des systèmes de fichiers). Les MAC time sont très importants dans une étude forensic car en étant corellés avec les autres informations temporelles liées a l'intrusion ils permettent de savoir ce qu'a fait exactement l'intru.

fls -r -p -l /dev/sda1

icat

Extrait le contenu d'un fichier.

Pour afficher un fichier d'aprés son inode on utilise la commande :

icat -f partition-type /dev/device inode_number 

Dumper le journal d'une partition :

tune2fs -l /dev/sda1 | grep -i "Journal inode"
Journal inode:            8
icat /dev/sda2 8 >journalfile

mactime

Permet de recréer un historique des fichiers ouverts/modifiés/créés.

Voir les fichiers accédés ou modifiés après le 24/05/2007 (attention a l'inversion des jours et des mois dans la commande) :

$ mactime -R -d . 05/24/07

Avec une plage de date de / :

 $ mactime -R -d / 11/01/10-11/09/10

Nous avons au début de chaque ligne la date et l'heure, la taille du fichier, la “valeur mac”, les droits puis le nom du fichier. La “valeur mac” indique les dernières dates de modification (mtime), d'accès (atime) ou de modification de statuts (ctime). Un point signifie qu'il n'y a pas eu de changement. Ici, Xauthority a été ouvert, out2.html a été créé et out.html a été modifié.

fsstat

Affiche les détails d'une image d'un fs: statistiques, taille, labels …

ifind

Cherche des structures de meta-données.

ils

ils: liste les informations sur une inode.

istat

Affiche les détails d'une structure de meta-données dans un format lisible.

dcat

Extrait le contenu d'un bloc de donnée d'une image post-mortem.

dls

Liste les détails des blocs de données et extrait l'espace non alloué du système de fichier.

dstat

Affiche les statistiques d'un bloc de donnée dans un format lisible.

dcalc

Crée un mapping entre des blocs de données d'une image standard et d'une image contenant des blocs non alloués.

jcat

Affiche le contenu d'un bloc dans le journal du fs.

jls

Liste le contenu d'un journal.

mmls

Affiche l'organisation du disque dont les espaces non alloués (type de la partition, taille, …).

hfind

Utilise un algorithme de classification des binaires pour savoir si un fichier est connu ou non.

sorter

Classe les fichiers basés sur leurs types et exécute des vérifications sur l'extension ainsi qu'une comparaison avec une base de hash.

partprobe

Permet d'informer le système après une modification des partitions.

hdparm -z permet aussi de forcer la relecture la table des partitions

dnstracer

$ dnstracer example.com -s . -4 -c -o
Tracing to example.coma via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET . (198.41.0.4)
|\___ D.GTLD-SERVERS.NET [com] (192.31.80.30)
| |\___ dns1.example.com [example.com] (1.1.1.1)Got authoritative answer
| |\___ dns2.example.com [example.com] (2.2.2.2) Got authoritative answer
| |\___ dns3.example.com [example.com] (3.3.3.3) Lame server
| |\___ dns4.example.com [example.com] (4.4.4.4) Got authoritative answer
| \___ dns5.example.com [example.com] (5.5.5.5) Lame server
|\___ C.GTLD-SERVERS.NET [com] (192.26.92.30) ...

dig

# dig velannes.com +trace

; <<>> DiG 9.4.2 <<>> velannes.com +trace
;; global options:  printcmd
.                       158348  IN      NS      k.root-servers.net.
.                       158348  IN      NS      m.root-servers.net.
.                       158348  IN      NS      g.root-servers.net.
.                       158348  IN      NS      e.root-servers.net.
.                       158348  IN      NS      i.root-servers.net.
.                       158348  IN      NS      d.root-servers.net.
.                       158348  IN      NS      h.root-servers.net.
.                       158348  IN      NS      j.root-servers.net.
.                       158348  IN      NS      l.root-servers.net.
.                       158348  IN      NS      b.root-servers.net.
.                       158348  IN      NS      f.root-servers.net.
.                       158348  IN      NS      a.root-servers.net.
.                       158348  IN      NS      c.root-servers.net.
;; Received 452 bytes from 127.0.0.1#53(127.0.0.1) in 1 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
;; Received 490 bytes from 128.8.10.90#53(d.root-servers.net) in 89 ms

velannes.com.           172800  IN      NS      ns.kimsufi.com.
velannes.com.           172800  IN      NS      ns1.velannes.com.
;; Received 133 bytes from 192.48.79.30#53(j.gtld-servers.net) in 235 ms

velannes.com.           86400   IN      A       91.121.167.167
velannes.com.           86400   IN      NS      ns1.velannes.com.
velannes.com.           86400   IN      NS      ns.kimsufi.com.
# dig velannes.com SOA +short
ns1.velannes.com. root.velannes.com. 2011051106 10800 3600 604800 86400

# dig velannes.com mx +short
10 ns1.velannes.com.
# dig velannes.com any

; <<>> DiG 9.4.2 <<>> velannes.com any
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36110
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;velannes.com.                  IN      ANY

;; ANSWER SECTION:
velannes.com.           86400   IN      MX      10 ns1.velannes.com.
velannes.com.           86400   IN      SOA     ns1.velannes.com. root.velannes.com. 2011051106 10800 3600 604800 86400
velannes.com.           86400   IN      TXT     "v=spf1 mx -all"
velannes.com.           86400   IN      NS      ns.kimsufi.com.
velannes.com.           86400   IN      NS      ns1.velannes.com.
velannes.com.           86400   IN      A       91.121.167.167

;; ADDITIONAL SECTION:
ns1.velannes.com.       86400   IN      A       91.121.167.167
ns.kimsufi.com.         84723   IN      A       213.186.33.199

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun May 15 12:28:15 2011
;; MSG SIZE  rcvd: 205
# dig +nocmd velannes.com any +multiline +noall +answer
velannes.com.           86400 IN MX 10 ns1.velannes.com.
velannes.com.           86400 IN SOA ns1.velannes.com. root.velannes.com. (
                                2011051106 ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
velannes.com.           86400 IN TXT "v=spf1 mx -all"
velannes.com.           86400 IN NS ns1.velannes.com.
velannes.com.           86400 IN NS ns.kimsufi.com.
velannes.com.           86400 IN A 91.121.167.167
# dig -x 91.121.167.167 +short
velannes.com.

tshark

Wireshark en ligne de commande.

tshark port 443 or port 80
tshark port '!80'
tshark -T fields -e frame.len -e tcp.len -e ip.len -e ip.src -e ip.dst -e tcp.port
tshark -i eth0 -T pdml
tshark -R 'tcp.window_size == 0'

Décryptage d'un fluux SSL/TLS :

# wireshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list: serveur_hote,port_serveur,protocole,/chemin/vers/cléprivée.pem"
# wireshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list: 88.191.75.35,443,http,servkey.pem"

tcpkill

aptitude install dsniff 
tcpkill ip host 192.168.1.1 and not 192.168.1.2
tcpkill −9 port 8888 and port 6699

slabtop

Afficher en temps réel les informations de cache slab noyau.

perf

Paquet linux-tools-common sous ubuntu.

Permet de monitorer ce que fait le noyau :

Doc :

  • perf stat

This perf command provides overall statistics for common performance events, including instructions executed and clock cycles consumed. Options allow selection of events other than the default measurement events.

  • perf record

This perf command records performance data into a file which can be later analyzed using perf report.

  • perf report

This perf command reads the performance data from a file and analyzes the recorded data.

  • perf list

This perf command lists the events available on a particular machine. These events will vary based on the performance monitoring hardware and the software configuration of the system.

Exemples :

perf probe -x /lib64/libc.so.6 malloc -> Added new event: probe_libc:malloc (on 0x7eac0)

Ensuite, il est possible de récupérer le compteur pour chaque seconde :

$ perf record -e probe_libc:malloc -agR sleep 1

Enfin, la consultation du rapport en mode graphique :

$ perf report

Et en mode console :

$ perf report -g flat --stdio

lslk

Voir les fichiers lockés

# lslk
SRC         PID   DEV      INUM     SZ TY M ST WH END LEN NAME
(unknown)  1190 254,1 308115263        r 0  0  0   0   0 /mnt/homes (/dev/mapper/vg0-homes)
(unknown)  2294 254,1 308115263        r 0  0  0   0   0 /mnt/homes (/dev/mapper/vg0-homes)
(unknown)  2392 254,1 308115263        r 0  0  0   0   0 /mnt/homes (/dev/mapper/vg0-homes)
(unknown)  2397 254,1 308115263        r 0  0  0   0   0 /mnt/homes (/dev/mapper/vg0-homes)
lpd        3028 254,0   1212425      5  w 0  0  0   0   0 /var/run/lpd.pid
master     3187 254,0    262203     17  w 0  0  0   0   0 /var/spool/postfix/pid/master.pid
atd        3260 254,0   1212456      5  w 0  0  0   0   0 /var/run/atd.pid
(unknown)  3262 254,0   1212458         w 0  0  0   0   0 /var (/dev/mapper/vg0-var)
nmbd      14654 254,0    688137  32768  r 0  4  0   4   0 /var/lib/samba/public/unexpected.tdb
nmbd      14654 254,0    688148    696  r 0  4  0   4   0 /var/lib/samba/public/messages.tdb
nmbd      14654 254,0   1212429      6  w 0  0  0   0   0 /var/run/samba/public/nmbd.pid
smbd      14656 254,0    688138   8192  r 0  4  0   4   0 /var/lib/samba/public/locking.tdb
smbd      14656 254,0    688132   8192  r 0  4  0   4   0 /var/lib/samba/public/brlock.tdb
smbd      14656 254,0    688133 163840  r 0  4  0   4   0 /var/lib/samba/public/connections.tdb
smbd      14656 254,0    688147 188416  r 0  4  0   4   0 /var/lib/samba/public/sessionid.tdb
smbd      14656 254,0    688148    696  r 0  4  0   4   0 /var/lib/samba/public/messages.tdb
smbd      14656 254,0   1212430      6  w 0  0  0   0   0 /var/run/samba/public/smbd.pid
nmbd      14669 254,0    655876  32768  r 0  4  0   4   0 /var/lib/samba/users/unexpected.tdb
nmbd      14669 254,0    655875    696  r 0  4  0   4   0 /var/lib/samba/users/messages.tdb
nmbd      14669 254,0   1212448      6  w 0  0  0   0   0 /var/run/samba/users/nmbd.pid
smbd      14671 254,0    655870   8192  r 0  4  0   4   0 /var/lib/samba/users/locking.tdb
smbd      14671 254,0    655719    696  r 0  4  0   4   0 /var/lib/samba/users/brlock.tdb
smbd      14671 254,0    655718  57344  r 0  4  0   4   0 /var/lib/samba/users/connections.tdb
smbd      14671 254,0    655843 106496  r 0  4  0   4   0 /var/lib/samba/users/sessionid.tdb
smbd      14671 254,0    655875    696  r 0  4  0   4   0 /var/lib/samba/users/messages.tdb
smbd      14671 254,0   1212450      6  w 0  0  0   0   0 /var/run/samba/users/smbd.pid

nethogs

Monitor network by processus :

getconf

Voir les variables POSIX :

getconf -a

Voir aussi : sysconf(3), fpathconf(3), pathconf(3), confstr(3), posixoptions(7)

modinfo

  • Voir les fimwares demandés par un module kernel (partique quand on a une erreur du type (Failed to load firmware “e100/d101m_ucode.bin”) :
$ modinfo -F firmware /lib/modules/2.6.32-5-amd64/kernel/drivers/net/e100.ko
e100/d102e_ucode.bin
e100/d101s_ucode.bin
e100/d101m_ucode.bin

Les firmwares sont stockés dans /lib/firmware.

  • Info sur un module (les modules sont dans le répertoire /lib/modules) :
internet@mm11756:~$ modinfo e1000
filename:       /lib/modules/2.6.32-41-generic/kernel/drivers/net/e1000/e1000.ko
version:        7.3.21-k5-NAPI
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     8250981946D61D2B3B2A3F8
alias:          pci:v00008086d000010B5sv*sd*bc*sc*i*
alias:          pci:v00008086d00001099sv*sd*bc*sc*i*
alias:          pci:v00008086d0000108Asv*sd*bc*sc*i*
alias:          pci:v00008086d0000107Csv*sd*bc*sc*i*
alias:          pci:v00008086d0000107Bsv*sd*bc*sc*i*
alias:          pci:v00008086d0000107Asv*sd*bc*sc*i*
alias:          pci:v00008086d00001079sv*sd*bc*sc*i*
alias:          pci:v00008086d00001078sv*sd*bc*sc*i*
alias:          pci:v00008086d00001077sv*sd*bc*sc*i*
alias:          pci:v00008086d00001076sv*sd*bc*sc*i*
alias:          pci:v00008086d00001075sv*sd*bc*sc*i*
alias:          pci:v00008086d00001028sv*sd*bc*sc*i*
alias:          pci:v00008086d00001027sv*sd*bc*sc*i*
alias:          pci:v00008086d00001026sv*sd*bc*sc*i*
alias:          pci:v00008086d0000101Esv*sd*bc*sc*i*
alias:          pci:v00008086d0000101Dsv*sd*bc*sc*i*
alias:          pci:v00008086d0000101Asv*sd*bc*sc*i*
alias:          pci:v00008086d00001019sv*sd*bc*sc*i*
alias:          pci:v00008086d00001018sv*sd*bc*sc*i*
alias:          pci:v00008086d00001017sv*sd*bc*sc*i*
alias:          pci:v00008086d00001016sv*sd*bc*sc*i*
alias:          pci:v00008086d00001015sv*sd*bc*sc*i*
alias:          pci:v00008086d00001014sv*sd*bc*sc*i*
alias:          pci:v00008086d00001013sv*sd*bc*sc*i*
alias:          pci:v00008086d00001012sv*sd*bc*sc*i*
alias:          pci:v00008086d00001011sv*sd*bc*sc*i*
alias:          pci:v00008086d00001010sv*sd*bc*sc*i*
alias:          pci:v00008086d0000100Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000100Esv*sd*bc*sc*i*
alias:          pci:v00008086d0000100Dsv*sd*bc*sc*i*
alias:          pci:v00008086d0000100Csv*sd*bc*sc*i*
alias:          pci:v00008086d00001009sv*sd*bc*sc*i*
alias:          pci:v00008086d00001008sv*sd*bc*sc*i*
alias:          pci:v00008086d00001004sv*sd*bc*sc*i*
alias:          pci:v00008086d00001001sv*sd*bc*sc*i*
alias:          pci:v00008086d00001000sv*sd*bc*sc*i*
depends:        
vermagic:       2.6.32-41-generic SMP mod_unload modversions 586 
parm:           TxDescriptors:Number of transmit descriptors (array of int)
parm:           RxDescriptors:Number of receive descriptors (array of int)
parm:           Speed:Speed setting (array of int)
parm:           Duplex:Duplex setting (array of int)
parm:           AutoNeg:Advertised auto-negotiation setting (array of int)
parm:           FlowControl:Flow Control setting (array of int)
parm:           XsumRX:Disable or enable Receive Checksum offload (array of int)
parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
parm:           TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
parm:           RxIntDelay:Receive Interrupt Delay (array of int)
parm:           RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
parm:           SmartPowerDownEnable:Enable PHY smart power down (array of int)
parm:           KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
parm:           debug:Debug level (0=none,...,16=all) (int)

On peut y voir la version, la description, les alias des cartes supportées et les paramétres.

  • Pour voir les paramétres d'une module :
/sys/module/<module>/parameters/<parametre>

debugfs (ftrace)

Exemple de tracing de kvm :

# mount -t debugfs none /sys/kernel/debug
# echo 1 >/sys/kernel/debug/tracing/events/kvm/enable
# cat /sys/kernel/debug/tracing/trace_pipe
[...]
             kvm-5664  [000] 11906.220178: kvm_entry: vcpu 0
             kvm-5664  [000] 11906.220181: kvm_exit: reason apic_access rip 0xc011518c
             kvm-5664  [000] 11906.220183: kvm_mmio: mmio write len 4 gpa 0xfee000b0 val 0x0
             kvm-5664  [000] 11906.220183: kvm_apic: apic_write APIC_EOI = 0x0
             kvm-5664  [000] 11906.220184: kvm_ack_irq: irqchip IOAPIC pin 11
             kvm-5664  [000] 11906.220185: kvm_entry: vcpu 0
             kvm-5664  [000] 11906.220188: kvm_exit: reason io_instruction rip 0xc01e4473
             kvm-5664  [000] 11906.220188: kvm_pio: pio_read at 0xc13e size 2 count 1
             kvm-5664  [000] 11906.220193: kvm_entry: vcpu 0

# echo 0 >/sys/kernel/debug/tracing/events/kvm/enable

partprobe

Permet de relire la table des partitions.

A utiliser quand on a le message suivant :

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

udevadm

udevadm control –reload-rules
udevadm test /sys/block/sdb
udevadm trigger
udevadm info -a -p /sys/block/sda
udevadm info -a -n /dev/sda
udevadm info -a -n sda

getcap / setcap

Au lieu de passer par un setuid, il peut-être judicieux de passer par les “capabilities” :

man 7 capabilities

Prenons un exemple tout simple, déléguer le ping sur un binaire à un user :

On copie le binaire ping qui possède un setuid

$ cp /bin/ping ~/ping2
$ ~/ping2 google.com
ping: icmp open socket: Operation not permitted

Maintenant on délègue le droit de créer des sockets sur ce binaire :

$ setcap cap_net_raw=ep ~usertest/ping2

On repasse sous notre utilisateur “usertest” :

$ ./ping2 google.com
PING google.com (173.194.34.0) 56(84) bytes of data.
64 bytes from par03s02-in-f0.1e100.net (173.194.34.0): icmp_req=1 ttl=55 time=4.57 ms
64 bytes from par03s02-in-f0.1e100.net (173.194.34.0): icmp_req=2 ttl=55 time=4.54 ms
64 bytes from par03s02-in-f0.1e100.net (173.194.34.0): icmp_req=3 ttl=55 time=4.59 ms
^C

Affichage des “capabilities” du binaire ping :

$ getcap ping2
ping2 = cap_net_raw+ep

Type de “capabilities” :

  • Effective : the capabilities used by the kernel to perform permission checks for the thread.
  • Permitted : the capabilities that the thread may assume (i.e., a limiting superset for the effective and inheritable sets). If a thread drops a capability from its permitted set, it can never re-acquire that capability (unless it exec()s a set-user-ID-root program).
  • inheritable : the capabilities preserved across an execve(2). A child created via fork(2) inherits copies of its parent's capability sets. See below for a discussion of the treatment of capabilities during exec(). Using capset(2), a thread may manipulate its own capability sets, or, if it has the CAP_SETPCAP capability, those of a thread in another process

fallocate

fallocate est un outil qui permet de créer facilement des fichiers :

  • Créer un fichier de 10G :
$ fallocate -l 10G 10gig
  • Rajouter 10G à la fin du fichier de 10G :
$ fallocate -o 10G -l 10G 10gig

truncate

truncate est un outil qui permet de créer facilement des fichiers :

  • Créer un fichier de 10G :
$ truncate -s 10G tengig
  • Rajouter 10G à la fin du fichier de 10G :
$ truncate -s +10G tengig

sysdig

csysdig est l'interface graphique.

  • Afficher les catégories :
$ sysdig -cl
$ sysdig -c topfiles_bytes "not fd.name contains /proc"
  • Afficher les informations d'une catégorie :
$ sysdig -i bottlenecks
  • Afficher les filtres :
$ sysdig -lv
$ sysdig proc.nchilds=0 proc.name=apache2
sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=apache2"
  • Lister les events :
$ sysdig -L
  • Changer la sortie :

Par défaut :

*%evt.num %evt.time %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.args

On peut changer la sortie avec l'option -p :

$ sysdig -p"user:%user.name process:%proc.name file:%fd.name" "evt.type=write and fd.name contains /etc/"
  • Capture :

Capture 10M par fichier et garde seulement les 5 derniers sur le disque :

$ sysdig -C 10 -W 5 -w dump.scap

Capture 60s par fichier et garde seulement les 5 derniers sur le disque :

$ sysdig -G 60 -W 5 -w dump.scap

Capture 1000 évènements par fichier et garde seulement les 5 derniers sur le disque :

$ sysdig -e 1000 -W 5 -w dump.scap
$ sysdig -w dump.scap
$ sysdig -r dump.scap proc.name!=cat and evt.type=open
$ sysdig -r dump.scap proc.name=cat or proc.name=vi -n 100
$ sysdig -r dump.scap -s2000 -A -c echo_fds fd.cip=192.168.0.1
  • Conteneur :
$ sysdig -pc -c topfiles_bytes container.name=wordpress1
  • GET HTTP requests :
$ sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET
  • Afficher les requetes SQL :
$ sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT
$ sysdig -s 2000 -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT
  • Autres exemples :
$ sysdig "proc.name=httpd and evt.type=open and evt.failed=true"
$ sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true
$ sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"
$ sysdig evt.type=open and fd.name contains /etc
$ sysdig -c lsof "'fd.type=ipv4 and user.name=root'"
$ sysdig -c ps "'fd.type=ipv4 and fd.is_server=true and fd.sport!=80'"

sg_persist

  • Voir les info :

$ sg_persist --in --report-capabilities -v /dev/sda
    inquiry cdb: 12 00 00 00 24 00 
  SUSE      RBD               4.0 
  Peripheral device type: disk
    Persistent Reservation In cmd: 5e 02 00 00 00 00 00 20 00 00 
Report capabilities response:
  Compatible Reservation Handling(CRH): 1
  Specify Initiator Ports Capable(SIP_C): 0
  All Target Ports Capable(ATP_C): 0
  Persist Through Power Loss Capable(PTPL_C): 1
  Type Mask Valid(TMV): 1
  Allow Commands: 1
  Persist Through Power Loss Active(PTPL_A): 1
    Support indicated in Type mask:
      Write Exclusive, all registrants: 1
      Exclusive Access, registrants only: 1
      Write Exclusive, registrants only: 1
      Exclusive Access: 1
      Write Exclusive: 1
      Exclusive Access, all registrants: 1

  • Voir la clé de réservation :

Sans clé de réservation :

$ sg_persist --in -k -d /dev/sda
  SUSE      RBD               4.0 
  Peripheral device type: disk
  PR generation=0x7, there are NO registered reservation keys

Avec une clé de réservation :

$ sg_persist --in -k -d /dev/sdb
  SUSE      RBD               4.0 
  Peripheral device type: disk
  PR generation=0x8, 1 registered reservation key follows:
    0xdeadbeef

  • Voir la réservation :

$ sg_persist --in -r -d /dev/sda
  SUSE      RBD               4.0 
  Peripheral device type: disk
  PR generation=0x7, there is NO reservation held

$ sg_persist --in -r -d /dev/sda
  SUSE      RBD               4.0 
  Peripheral device type: disk
  PR generation=0x8, Reservation follows:
    Key=0xdeadbeef
    scope: LU_SCOPE,  type: Exclusive Access

  • Positionner une clé de réservation (la clé est au format HEX et fait 6 ou 8 chiffres) :

$ sg_persist --out --register --param-sark=0xDEADBEEF /dev/sda
  SUSE      RBD               4.0 
  Peripheral device type: disk

  • Placer un type réservation :

$ sg_persist --out --reserve --param-rk=0xDEADBEEF --prout-type=3 /dev/sda
  SUSE      RBD               4.0 
  Peripheral device type: disk

1) Exclusive Access : don't let anybody else use my disc at all, and don't let anybody take my reservation. 3) Write Exclusive : don't let anybody else write to my disc, and don't let anybody take my reservation. 5) Exclusive Access, Registrants Only : Don't let anybody but my group of friends use the disc, and don't let anybody take my reservation. 6) Write Exclusive, Registrants Only : Don't let anybody but my group of friends write to the the disc, and don't let anybody take my reservation. 7) Exclusive Access, All Registrants : Don't let anybody but my group of friends use the disc, and share my reservation with all of them as well. 8) Write Exclusive, All Registrants : Don't let anybody but my group of friends write to the disc, and share my reservation with all of them as well.

  • Supprimer la réservation :

$ sg_persist --out --release --param-rk=0xDEADBEEF  --prout-type=3 /dev/sda

  • Supprimer la clé de réservation :

$ sg_persist --out --register --param-rk=0xDEADBEEF /dev/sda

  • Supprimer la clé et la réservation :

$ sg_persist --out --clear --param-rk=0xDEADBEEF /dev/sda

tuto/linux/quelques_commandes_utiles.1494004536.txt.gz · Dernière modification : 2017/05/05 17:15 de root