**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