#liste_articles {display:block}

Les commandes de base sous une console

vendredi 5 novembre 2004

 

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

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 tout 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$ 

top

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

kill

Très utile car cette commande permet de tuer un processus (programme) ce qui peut s’avérer nécessaire si celui-ci a planté.

bash$ nedit &
[1] 9450
bash$ ps
  PID TTY STAT TIME COMMAND
 9223  p1 S    0:00 su daniel 
 9224  p1 S    0:00 bash 
 9450  p1 S    0:00 nedit 
 9458  p1 R    0:00 ps 
bash$ kill -9 9450
bash$ ps
  PID TTY STAT TIME COMMAND
 9223  p1 S    0:00 su daniel 
 9224  p1 S    0:00 bash 
 9498  p1 R    0:00 ps 
[1]+  Killed                  nedit
bash$ 

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
[root@daniel tp_GTR]#

umount

Pour démonter.

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

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]$ 

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]$ 

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)

[daniel@daniel ~]$ 

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      [ ]         DGRAM                    829    
unix  2      [ ]         STREAM     CONNECTED     582  
[daniel@daniel ~] 

Sur les programmes derrière les connections en cours (il faut être root pour voir toutes les connexions) :

[root@daniel daniel]# netstat -ap
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat PID/Program name
tcp        0      0 *:x11                   *:*                     LISTEN 921/X
tcp        0      0 *:ssh                   *:*                     LISTEN 744/sshd
tcp        0      0 *:ipp                   *:*                     LISTEN 775/cupsd
tcp        0      0 daniel.erasme.lan:32852 mail1.erasme.org:imap   ESTABLISHED 1025/evolution-1.4
tcp        1      0 daniel.erasme.lan:32854 gila.mozilla.org:http   CLOSE_WAIT 1109/esd
tcp        0      0 daniel.erasme.lan:33325 gate.erasme.lan:ssh     ESTABLISHED 14002/ssh
udp        0      0 *:631                   *:* 775/cupsd
Sockets du domaine UNIX actives(serveurs et établies)
Proto RefCpt Indicatrs   Type       Etat          I-Node PID/Program name    Chemin
unix  2      [ ACC ]     STREAM     LISTENING     1432   875/                /tmp/.gdm_socket
...

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
[daniel@daniel ~] 

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 (L
ISTEN)
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-r
pc->daniel:ssh (ESTABLISHED)
sshd      1697   root    4u  IPv4       6865               TCP daniel:ssh->dani
el:filenet-rpc (ESTABLISHED)
telnet    1848 daniel    3u  IPv4      27074               TCP daniel:32773->da
niel:ssh (ESTABLISHED)
sshd      1849   root    4u  IPv4      27075               TCP daniel:ssh->dani
el:32773 (ESTABLISHED)
[root@daniel ~] 

rpm

Cette commande sert a installer, supprimer ou créer des packages (fichier se terminant par .rpm) RPM. Ces packages permettent l’installation de n’importe quoi (et donc des programmes) sous les distributions de Linux de RedHat et de Mandrake (principalement).

Pour installer un package, il faut d’habitude être sous le compte de l’utilisateur root. Le fichier du package peut être passé en paramêtre en relatif ou en absolue. L’installation d’un package ce fait comme suit (chemin relatif dans le répertoire courant) :

[root@daniel /mnt/cdrom/Mandrake/RPMS2] rpm -ivh xrally-1.1-1mdk.i586.rpm
xrally                      ##################################################
[root@daniel /mnt/cdrom/Mandrake/RPMS2] 

Pour supprimer un package, il faut d’habitude être sous le compte de l’utilisateur root. Le nom du package correspond (en gros) au nom du fichier sans le .i586.rpm (i586 indique que ce package est fait pour des machines compatible avec les Pentium). La suppression d’un package ce fait comme suit (pas besoin du fichier du package) :

[root@daniel ~] rpm -e xrally-1.1-1mdk
[root@daniel ~] 

Pour lister les packages installés sur la machine, il faut procéder comme suit (ici, pas besoin d’être sous le compte root) ATTENTION, il y a souvant beaucoup de packages installés :

[~] rpm -qa
libtermcap2-2.0.8-28mdk
setup-2.1.9-42mdk
info-install-4.0-20mdk
...
auth_ldap-1.4.7-1mdk
traceroute-1.4a5-14mdk
[~] 

Pour mettre à jour un ensemble de packages RPM sur une machine pour des versions plus récentes, il faut utiliser la commande rpm -F. L’ensemble des packages à jour peuvent être placés dans un répertoire puis la commande suivante met à jour seulement les packages déjà installé sur la machine et dont une version plus récente est disponible :

[~] rpm -Fvh *.rpm
...
[~] 

ssh

SSH est une commande qui permet de se connecter à une machine distante. La commande ssh comprend l’option -l qui sert a spécifier le nom du compte sur lequel on souhaite ce connecter. Le tout suivit du nom ou de l’adresse IP de la machine distante sur laquelle on veux se connecter. Ce qui peux donner par exemple :

[root@server1 /root]# ssh -l root server2.domain.org
root@server2.domain.org's password:
Last login: Tue Dec 10 02:24:53 2002 from server1.domain.org
[root@server2 root]# 

Pour copier un grand nombre de fichier avec SSH à travers le réseau, on peut faire une copie d’un répertoire de manière récursive avec la commande scp -r. Seulement, si le nombre de fichiers est vraiment grand, la commande tar et quelques pipe sont vraiment plus rapides :

[~] tar cvzf - repertoire | ssh -l root dest.domain.org tar xzf -
...
[~] 

scp

Pour copier un répertoire sur une autre machine à travers le réseau. Vous pouvez utiliser les outils de ssh. Pour la copie de fichier, la commande est scp. L’option -r permet de copier les répertoires récursivement. Voici un exemple de base :

[~] scp -r repertoire root@dest.domain.org:/dest/dir
...
[~] 

Dans ce cas, les communications sont cryptées et une barre de progression pour chaque fichier vous indique l’état d’avancement.

Un problème se pose si vous avez vraiment beaucoup de fichiers a copier. Dans ce cas, il vaut mieux supprimer le cryptage de scp, les indicatifs de progression et valider la compression. Ce qui peut être fait avec la commande suivante (vraiment beaucoup plus rapide) :

[~] scp -C -q -c none -r repertoire root@dest.domain.org:/dest/dir
...
[~] 

Documents :

par Daniel Lacroix