**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 {{ :tuto:linux:tcp.gif |}} 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 Voir les process qui ont des fichiers supprimés : lsof +aL1 lsof -d DEL ===== nmap ===== * [[https://bencane.com/ten-nmap-commands-every-sysadmin-should-know-2390c559a7c3|Ten Nmap Commands Every Sysadmin Should Know ]] 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 : trace le processus 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 : * [[http://www.commentcamarche.net/faq/sujet-9536|Partie I]] * [[http://www.commentcamarche.net/faq/sujet-9559|Partie II]] * [[http://www.commentcamarche.net/faq/sujet-9558|Partie III]] 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 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: 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 1234 < 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 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 . Souvent, la valeur par défaut de ce caractère est . 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 (à 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 '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:// -o user=: 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 Change la date du fichier à l'heure du système. touch -d "20090521 13:17:00" 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" Change la date d'accès au 21/05/2009 à 13h17 et 00 seconde. Les heures, minutes et secondes sont facultatifs. touch -r Change la date de à la même que celle de ===== 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 lance un programme sur les cores 2 à 6 taskset –c 2-6 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 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 ionice -c 2 -n 7 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 ===== comm ===== Compare 2 fichiers triés : comme 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 ===== 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: 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 {{http://www.commentcamarche.net/faq/images/0-Sw2Op1lW-capture2-s-.png?400*324}} {{http://www.commentcamarche.net/faq/images/0-n5C0HcLm-capture3-s-.png?400*324}} ===== 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 ===== [[http://www.unixgarden.com/index.php/gnu-linux-magazine/awk-le-langage-script-de-reference-pour-le-traitement-de-fichiers|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 ===== * https://www.it-connect.fr/reseau-analyse-dune-connexion-tcp-et-de-ses-options-avec-wireshark/ 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 : * http://alicebobandoscar.com/2012/03/22/howto-capturer-du-trafic-tls-local-en-clair-episode-1/ * http://wiki.wireshark.org/SSL # 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 : * http://anton.ozlabs.org/blog/2009/09/04/using-performance-counters-for-linux/ * http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Developer_Guide/perf.html * https://perf.wiki.kernel.org/index.php/Tutorial * **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 : {{http://www.pc-freak.net/images/nethogs_screenshot_on_server_with_nginx.png}} =====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, 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//parameters/ =====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 ===== * [[http://www.sysdig.org/install/|Installation ]] * [[http://www.sysdig.org/wiki/sysdig-user-guide/#output-formatting|User guide]] * [[http://www.sysdig.org/wiki/sysdig-examples/|Exemples]] **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/" * [[https://sysdig.com/aws-storage-latency-sysdig-spectrogram/|spectogram]] * 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 ou $ sg_persist /dev/mapper/mpatha >> No service action given; assume Persistent Reserve In command >> with Read Keys service action SUSE RBD 4.0 Peripheral device type: disk PR generation=0x14, 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 jusqu'à 8 chiffres) : $ sg_persist --out --register --param-sark=0xDEADBEEF /dev/sda SUSE RBD 4.0 Peripheral device type: disk Il est possible de convertir l'IP en HEX pour positionner la clé : $ printf '%02X' $(hostname -i | awk '{ print $NF }' | sed 's@\.@ @g'); echo * Placer un type réservation : $ sg_persist --out --reserve --param-rk=0xDEADBEEF --prout-type=5 /dev/sda SUSE RBD 4.0 Peripheral device type: disk Ci-dessous les différents types : 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=5 /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 ===== upower ===== Lister les sources d'énergie : $ upower -e /org/freedesktop/UPower/devices/line_power_AC /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/DisplayDevice Information sur une source d'énergie : $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: SMP model: DELL TP1GT61 serial: 2617 power supply: yes updated: mer. 08 nov. 2017 23:12:56 CET (5 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: charging warning-level: none energy: 6,5892 Wh energy-empty: 0 Wh energy-full: 59,736 Wh energy-full-design: 59,9944 Wh energy-rate: 30,6888 W voltage: 7,868 V time to full: 1,7 hours percentage: 11% capacity: 99,5693% technology: lithium-polymer icon-name: 'battery-low-charging-symbolic' History (charge): 1510179176 11,000 charging History (rate): 1510179176 30,689 charging Information sur le démon : $ upower -d ... Daemon: daemon-version: 0.99.6 on-battery: no lid-is-closed: no lid-is-present: yes critical-action: PowerOff Voir aussi [[#acpi]]. ===== acpi ===== Information sur la batterie (voir aussi [[#upower]]): $ acpi -i -b Battery 0: Discharging, 28%, 02:50:39 remaining Battery 0: design capacity 7894 mAh, last full capacity 6028 mAh = 76% ===== showkey ===== Afficher la valeur d'une touche : $ showkey -a ===== rpm ===== ==== Metadonnées rpm ==== Afficher les vendors: $ rpm -qa --qf '%{VENDOR}\n' | sort | uniq Afficher les rpms: $ rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' | sort Pour afficher tous les tags: rpm --querytags ===== patchelf ===== [[https://nixos.org/patchelf.html|Patchelf]] permet de relinker un binaire detype ''elf'': $ patchelf --set-interpreter /my/lib/my-ld-linux.so.2 program $ patchelf --set-rpath /opt/my-libs/lib:/foo/lib program $ patchelf --shrink-rpath program ===== growpart ===== Etend au max la partition: $ growpart /dev/sda 1 Ensuite on augmente le fs: $ btrfs filesystem resize max /mounted ===== nvme ===== $ nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 27CB40Y7KSHU THNSN5512GPUK NVMe TOSHIBA 512GB 1 512,11 GB / 512,11 GB 512 B + 0 B 5KDA4103 $ nvme smart-log /dev/nvme0 Smart Log for NVME device:nvme0 namespace-id:ffffffff critical_warning : 0 temperature : 44 C available_spare : 100% available_spare_threshold : 50% percentage_used : 11% endurance group critical warning summary: 0 data_units_read : 14 094 762 data_units_written : 19 359 069 host_read_commands : 274 444 402 host_write_commands : 263 000 581 controller_busy_time : 2 411 power_cycles : 1 547 power_on_hours : 4 677 unsafe_shutdowns : 90 media_errors : 0 num_err_log_entries : 0 Warning Temperature Time : 11 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 44 C Thermal Management T1 Trans Count : 0 Thermal Management T2 Trans Count : 0 Thermal Management T1 Total Time : 0 Thermal Management T2 Total Time : 0