Si je me réfère à "Learning the Bash Shell" des éditions O'Reilly l'"utilité" cat "copy input to output".
Exemple:
# cat < file1 > file2est semblable à cp file1 file2
Commençons par une instruction simple. Vous avez un fichier "mon_fichier".
Tapez l'instruction:
>cat mon_fichieren étant dans le répertoire qui contient ce fichier et sera alors listé sur écran, c'est-à-dire vers le périphérique de sortie par défaut, le contenu de votre fichier mon_fichier.
Supposons que vous recherchez uniquement les lignes de votre fichier mon_fichier qui contiennent le mot mot_cherché, vous pouvez taper:
# cat mon_fichier | grep mot_cherché
Et ne seront imprimés sur l'écran que les lignes qui contennent le mot "mot_cherché". L'instruction cat permet également de "concaténer" un fichier vers un autre ou, en terme plus simple, de copier un fichier sous un autre nom.
Taper:
#cat mon_fichier > mon_fichier2
Et votre fichier sera copié dans mon_fichier2.
Si vous ne voulez copier que les dix dernières lignes de votre fichiers "mon_fichier", utilisez la fonction "tail":
#tail --line=10 mon_fichier > mon_fichier2
Et vous n'aurez que les dix dernières lignes retranscrites dans mon_fichier2.
On peut encore ajouter à mon_fichiers2 toutes les lignes qui contiennent par exemple "mot_cherché":
# mon_fichier | grep mot_cherché >> mon_fichier2
N'oubliez pas les deux crochets vers la droite ">>" qui indiquent qu'on fait un "append" sur le fichier existant. Avec un seul crochet ">" on aurait substitution des anciennes lignes par les nouvelles importées par l'instruction cat.
Exemple: dans le fichier /etc/passwd on a des lignes qui ressmblent à ceci:
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
man:x:13:2::/var/cache/man:/bin/bash
alain:x:500:100:Alain Barthélemy:/home/alain:/bin/bash
avec l'instruction # cut -d: -f1 < /etc/passwd | sort
on extrait le premier domaine ou "field" (-f1) là où les domaines sont délimités par
des ":" (-d:) le résultat est ensuite trié.
Résultat:
alain
man
uucp
#date
>sam fév 10 21:15:17 CET 2001
Pour fixer la date, par exemple au 11 février 2001 à 22h30, on tape:
#date 021122302001
Ou, si on est en 2001:
#date 02112230
Pour appliquer cette heure à l'horloge hardware, taper ensuite:
#hwclock --systohc
dd sert donc à copier des fichiers comme cat et cp.
Exemple: pour créer une disquette d'amorçage, on copie le fichier /boot/vmlinuz sur une disquette vierge qui peut être formatée sous MS-Dos ou sous Linux:
# dd if=/boot/vmlinuz of=/dev/fd0 bs=8192
dd copie le fichier d'entrée (option if, Input File) nommé /boot/vmlinuz dans le fichier de sortie (option of, Output File), par bloc de 8192 octets (option bs, Block Size).
Plus simplement, il existe la commande cp mais qui est, paraît-il, dédaignée par les administrateurs système.
Autre application de la commande dd pour générer un fichier de swap supplémentaire.
# dd if=/dev/zero of=/swap bs=1024 count=8192
Cette commande écrit 8192 bloc de 1024 octets (soit 8Mo) de données issues de /dev/zero dans le fichier /swap. Le périphérique /dev/zero est spécial car toute opération de lecture retourne alors des octets nuls.
On invoque ensuite:
# mkswap -c /swap 8192
... qui va formater la partition /swap en format "swap" dont la taille est égale à 8192 blocs de 1024 octets. L'option -c est optionnelle et permet de rechercher les blocs défectueux pendant le formatage.
Pour mettre en service cette zone de swap:
# swapon /swap
Cette nouvelle zone s'ajoute à l'espace total disponible pour le swap.
Mise hors service de la zone de swap:
# swapoff /swap
#dig infonie.be ns; <<>> DiG 8.3 <<>> infonie.be ns ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER opcode: QUERY, status: NOERROR, id: 4 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUERY SECTION: ;; infonie.be, type = NS, class = IN ;; ANSWER SECTION: infonie.be. 22h48m34s IN NS zeus.infonie.be. infonie.be. 22h48m34s IN NS jupiter.infonie.be. ;; ADDITIONAL SECTION: zeus.infonie.be. 22h48m34s IN A 212.232.0.1 jupiter.infonie.be. 22h48m34s IN A 212.232.0.3 ;; Total query time: 2 msec ;; FROM: terre to SERVER: default -- 192.168.1.37 ;; WHEN: Wed Feb 14 16:41:09 2001 ;; MSG SIZE sent: 28 rcvd: 101
Il faut également ajouter le filtre less car les messages de boot sont généralement long.
#dmesg | less
Une autre solution est d'aller examiner le fichier boot.msg qui se trouve dans le répertoire /var/log, soit via l'application Midnight Commander (taper mc) soit avec l'instruction cat soit avec l'éditeur vi:
#cat /var/log/boot.msg | less
ou
#vi /var/log/boot.msg | less
Remarque: pour quitter less saisir q et pour quitter vi saisir :q puis enter.
Dans le même répertoire /var/log/ on trouve d'autres fichiers qui renseignent sur l'état du système dont le fichier /var/log/messages qui accumule tous les messages du système.
Conseil: les fichiers /var/log/fichiers ont tendances à croître et à prendre beaucoup de place. Il est intéressante de faire le nettoyage et de ne garder que, par exemple, les 200 dernières lignes. Dans SuSE, il y a, dans /etc/rc.config, une ligne MAX_DAYS_FOR_LOG_FILES="XX". Remplacer XX par un nombre de jour après lequel les fichiers /var/log/fichiers vont être vérifiés et amputés d'une certaine valeur s'ils dépassent une certaine taille.
Une autre façon de faire:
#tail /var/log/messages --lines=200 > /var/log/mess_tmp
#cat /var/log/mess_tmp > /var/log/messages
#rm /var/log/mess_tmp
#du .......... 12 ./Users 8 ./TheFindByContentFolder/.AppleDouble 12 ./TheFindByContentFolder 51952 .
Si on ne veut que l'espace total occupé par le répertoire courant, ajouter le paramètre -s
#du -s
51956 .
Les tailles sont exprimées ici en octets
Avec le paramètre -a ou --all, on obtient également les statistiques pour tous les fichiers pas seulement les répertoires.
Avec le paramètre -h ou --human les tailles sont affichées de manière facile à lire par les humains (en octet, kiloctets k ou mégaoctets M).
#du -h 12k ./Users 8.0k ./TheFindByContentFolder/.AppleDouble 12k ./TheFindByContentFolder 51M .#du -hs 51M
Mettre en argument le répertoire dont on veut connaître l'espace disque occupé.
#du -hs /ce_répertoire
#fdisk -l Disque /dev/hda : 255 têtes, 63 secteurs, 730 cylindres Unités = cylindres sur 16065 * 512 octets Périphérique Amorce Début Fin Blocs Id Système /dev/hda1 1 383 3076416 b Win95 FAT32 /dev/hda2 * 384 384 8032+ 83 Linux /dev/hda3 385 401 136552+ 82 Echange Linux /dev/hda4 402 730 2642692+ 5 Etendue /dev/hda5 402 730 2642661 83 Linux
En précisant la partition, on peut alors la manipuler:
#fdisk /dev/hda
Commande (m pour aide) :
Si on saisit m, on a:
Action de commande a (Dés)active un indicateur Bootable b Edite le libellé de disque bsd c (Dés)active l'indicateur de compatibilité DOS d Supprime une partition l Répertorie les types de partition connus m Affiche ce menu n Ajoute une nouvelle partition o Crée une nouvelle table de partition DOS vide p Affiche la table de partition q Quitte le programme sans enregistrer les modifications s Crée un nouveau libellé de disque Sun vide t Change l'ID système d'une partition u Change l'unité d'affichage/saisie v Vérifie la table de partition w Ecrit la table sur le disque et quitte le programme x Fonctions supplémentaires (experts seulement)
On peut ainsi manipuler "manuellement" les partitions: création (n), suppression (d), etc.
#ls -l | grep '^d'
La commande grep élimine toutes les lignes de sorties sauf celles qui ont un d comme première lettre, càd les répertoires qui sont caractérisés par la présence d'un d en tête de ligne. Le caractère '^' indique à grep de ne regarder que les d qui sont en tête de ligne. Le motif ^d est inclus entre guillemets simples (').
Voir la commande tail.
L'évaluation de l'expression se fait de gauche à droite, en suivant des règles de précédence décrite dans la sec tion OPÉRATEURS, jusqu'à ce que le résultat soit connu (par exemple la partie gauche vraie pour un opérateur OU ou fausse pour un opérateur ET).
Le premier argument commençant par `-', `(', `)', `,', ou `!' est considéré comme le début de l'expression, tous les arguments précédents sont des chemins à parcourir.
Exemple:
find /tmp \! -type d -atime +2 -exec rm -f {} \;
On demande à find de parcourir toutes les arborescences du répertoire \tmp et de rechercher tous ce qui n'est pas répertoire (le point d'exlamation ! = négation et le paramètre -type d indique répertoire ou directory).
free affiche les quantités totales de mémoire et de zone de swap libres et utilisées dans le système, ainsi que la mémoire partagée et les buffers utilisés par le noyau.
#free
total used free shared buffers cached
Mem:130532 106564 23968 0 6924 62452
-/+ buffers/cache: 37188 93344
Swap:136544 0 136544
Voir aussi la commande top.
kill envoie le signal indiqué aux processus mentionnés. Si on ne précise pas de signal, TERM est envoyé (ou le paramètre -15). Ce dernier clotûrera proprement les processus qui ne l'interceptent pas.
La commande kill -15 peut cependant être désactivée (ou interceptée) par le programme, par exemple pendant une action critique qui ne peut pas être interrompue. On peut alors tuer un processus de façon radicale (donc sans mise en ordre, suppression des temporaires, ...) en utilisant le paramètre -9:
#kill -9 PID_processus
Pour connaître le PID du processus, utiliser la commande ps aux.
Si on est dans un gestionnaire de fenêtre et qu'on est confronté à un "plantage" qui bloque
tout, transférez-vous dans une autre console (la nième par exemple)en tapant
ctrl alt Fn. Loguer vous alors en root et faites un "kill".
Revenez ensuite au gestionnaire de fenêtre en tapant alt F7
Exemple: vous avez un répertoire /cible vers lequel on veut créer un lien à partir du répertoire utilisateur home/bibi. Tapez:
#ln -s /cible /home/bibi/lien
On crée ainsi un répertoire virtuel qui est un lien vers le répertoire /cible.
Le paramètre -s indique qu'on crée un lien dit symbolique. Je n'entre pas dans les détails, voir le man pour plus de détails.
Si on n'indique pas, en second argument, un nom de lien spécifique, le lien prendra le nom du répertoire cible.
#ln -s /cible
Cette instruction créera le lien /home/bibi/cible
Une des applications est de déplacer des répertoires volumineux dans une partition qui offre encore de l'espace libre:
#mv /depart /destination #mv = transférer un fichier
Une fois le fichier transféré, on crée un lien symbolique entre le répertoire qui contenait le fichier transféré et le nouvel emplacement de ce répertoire:
#ln -s /destination /depart
tout se passe comme si le répertoire /depart existait toujours sauf qu'il est maintenant virtuel et qu'il ne sert plus que de pointeur vers le répertoire destination.
Si on veut, dans KDE, accéder directement à un répertoire à partir du bureau à la façon Windows ou Mac, on se met dans le répertoire Desktop de son compte personnel:
#cd /home/bibi/Desktop
Ensuite on crée un lien vers le répertoire /cible, par exemple un sous-répertoire du compte bibi, /home/bibi/cible:
ln -s /home/bibi/cible
Sur le bureau apparaît alors un icône qui permet d'accéder directement au répertoire /home/bibi/cible.
Pour enlever un lien, on peut le faire via l'application Midnight Commander et la touche F8 pour "Effacer" ou manuellement avec l'instruction rm:
#rm /lien
alain@portable:~ > ls
Desktop Program.kdelnk kmail.kdelnk quanta.kdelnk
Mail html pictures wp8.kdelnk
Le contenu des répertoires est trié par ordre alphabétique (majuscules
en tête!).
Un fichier dont le nom commence par un point ('.') n'est affiché que si
l'option -a est fournie.
alain@portable:~ > ls -a
. .dvipsrc .mc .uitrc.vt102 .zsh
.. .emacs .muttrc .uitrc.xterm Desktop
.X.err .exrc .nc_keys .urlview Mail
.Xdefaults .gimprc .profile .vimrc Program.kdelnk
Avec l'option -1, on affiche un fichier par ligne:
Avec l'option -d, on n'affiche pas le contenu du répertoire.
Avec l'option -l, on affiche le type du fichier, les permissions d'accès,
le nombre de liens physiques, le nom du propriétaire et du groupe, la taille
en octets et l'horodatage (de la dernière modification).
alain@portable:~ > ls -la
total 221
drwx------ 15 alain users 1259 avr 11 22:53 .
drwxr-xr-x 3 root root 56 avr 11 21:00 ..
-rw-r--r-- 1 alain users 8958 avr 12 08:21 .X.err
-rw-r--r-- 1 alain users 5742 avr 11 21:00 .Xdefaults
-rw-r--r-- 1 alain users 1305 avr 11 21:00 .Xmodmap
lrwxrwxrwx 1 root root 10 avr 11 21:00 .Xresources-> .Xdefaults
d indique qu'on a affaire à un répertoire, l à un lien, les permissions (owner, group, other) sont indiqués par les lettres r (read), w (write) et x (executable).
L'option -r inverse l'ordre de tri, l'option -t trie en fonction de la date, l'option -u en fonction de la date de dernier accès
Monter la disquette en format FAT32 (format Microsoft archaïque)dans le répertoire /floppy:
#mount /dev/fd0/ -t vfat /floppy
Monter un disque dur consacré à Windoxs sur le point de montage /mnt/windows:
#mount -t vfat /dev/hda2 /mnt/windows
Remarque: hda2 peut être hda1 ou hda3, etc. Vérifier avec fdisk -l.
Ces lignes permettent de retrouver l'arborescence du disque dur Windows dans le répertoire Windows. Il est indispensable que le répertoire /mnt/windows existe.
Monter le CD-Rom dans le répertoire /cdrom
#mount /dev/cdrom -t iso9960 /cdrom
Dans SuSE (et d'autres distribution), les partitions Linux sont montées automatiquement au démarrage. Si on va voir dans le répertoire /etc/ on trouvera un fichier nommé fstab. C'est le fichier qui indique au système les fichiers à monter.
/dev/hdb1 /boot ext2 defaults 1 2
/dev/hdb2 swap swap defaults 0 2
/dev/hdb3 / ext2 defaults 1 1
/dev/hdc /cdrom auto ro,noauto,user,exec 0 0
/dev/fd0 /floppy auto noauto,user 0 0
/dev/hda1 /mnt/windows vfat noauto,users,umask=000 0 0
La première colonne donne la nature du périphérique.
La deuxième indique le répertoire sur lequel le périphérique doit être monté. Ce répertoire doit
être préalablement créé.
La troisième colonne indique le type de fichier (ext2: Linux, vfat: Windows, iso9660: CDRom, auto:
au choix)
La quatrième colonne donne les options de montage: auto: montage automatique au démarrage (par défaut),
noauto: pas de montage automatique au démarrage, ro: read only (cdrom), user: ne peut être démonté que
par l'utilisateur qui a monté le périphérique. Cela évite que des sans-gêne démonte le périphérique sur
lequel on travaille, users: peut être démonté par n'importe qui,exec: est exécutable (cdrom), umask=000:
accès permis par tout le monde.
Lorsque le périphérique est encodé dans /etc/fstab, il suffit de taper:
#mount /periph ou mount /dev/periph pour le monter.
Pour le démonter, taper:
#umount /periph ou umount /dev/periph pour le monter.
#nohup ma_commande &
Attention! N'oubliez pas le & sinon le travail ne passe pas en tâche de fond.
root@terre:/var/log > pwd
/var/log
#ps
PID TTY TIME CMD
4102 tty2 00:00:00 bash
4109 tty2 00:00:00 startx
4110 tty2 00:00:00 tee
4118 tty2 00:00:00 xinit
4121 tty2 00:00:00 kwm
4213 tty2 00:00:00 kbanner.kss
Avec le paramètre -a:
PID TTY STAT TIME COMMAND
4086 tty1 S 0:00 login -- root
4087 tty2 S 0:00 login -- alain
4088 tty3 S 0:00 /sbin/mingetty tty3
4089 tty4 S 0:00 /sbin/mingetty tty4
4090 tty5 S 0:00 /sbin/mingetty tty5
4091 tty6 S 0:00 /sbin/mingetty tty6
On obtient ainsi le PID (process ID), le terminal (TTY) auquel le processus est rattaché, l'état du processus STAT (la valeur est S si le processus est inactif, R s'il est en cours d'exécution, T s'il est arrêté, Z si c'est un zobie, D s'il est inactif et ne peux pas être arrêté), ensuite vient le temps système TIME utilisé par le processus et enfin le nom du processus COMMAND.
Pour avoir des informations sur les utilisateurs, ajouter le paramètre u:
#ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
bibi 4102 0.0 1.0 2316 1384 tty2 S 09:42 0:00 -bash
bibi 4109 0.0 0.7 2084 1040 tty2 S 09:42 0:00 sh /usr/X11R6/bin
bibi 4213 0.0 2.7 6560 3548 tty2 SN 09:42 0:00 /opt/kde/bin/kban
bibi 4239 0.0 3.0 6512 3976 tty2 S 09:42 0:00 knotes -knotes_re
Pour n'avoir que les processus d'un utilisateur, jouter son nom:
#ps au bibi
Le paramètre -x vous donne les informations suivantes:
#ps x
PID TTY STAT TIME COMMAND
4102 tty2 S 0:00 -bash
4109 tty2 S 0:00 sh /usr/X11R6/bin/startx
4110 tty2 S 0:00 tee /home/alain/.X.err
4118 tty2 S 0:00 xinit /home/alain/.xinitrc --
Pour avoir toutes les informations, taper:
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 360 208 ? S 09:06 0:04 init
root 2 0.0 0.0 0 0 ? SW 09:06 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW 09:06 0:00 [kupdate]
root 4 0.0 0.0 0 0 ? SW 09:06 0:00 [kpiod]
Ajoutez le filtre less si vous voulez voir la liste des processus page par page:
#ps aux | less
La commande grep permet de filtrer la liste des processus. Par exemple Netscape:
# ps aux | grep netscape
bibi 4261 0.0 10.8 22688 14156 tty2 S 09:43 0:03 /opt/netscape/netscape -irix-session-management
Voir également la commande kill car la commande ps permet de rechercher le PID d'une instruction pour pouvoir la "killer".
#su
#password_root
Pour quitter:
#exit
Pour se connecter sur le compte d'un autre utilisateur:
#su nom_autre_utilisateur
#password
Egalement, pour quitter:
#exit
Aucune session supllémentaire n'est ouverte. Très logiquement, les droits suivent la commande su.
Cette commande est pratique si vous devez faire une action qui demande les droits de roots et que
vous ne voulez pas ouvrir une autre session ou quitter le gestionnaire de fenêtre.
Toutes ces commandes doivent se faire en root obligatoirement. Un utilisateur normal n'a pas la permission d'éteindre la station.
#shutdown -r now
Cette instruction redémarre le système.
#shutdown -r sec
Redémarre après sec secondes.
Cette instruction peut être remplacée par:
#reboot
#shutdown -h now
Cette instruction éteint le système. Elle peut être remplacée par:
#halt
#tail -n 25 texte.txt
On peut également écrire:
#tail --line=25 texte.txt
Le paramètre -f ou --follow continue d'afficher la fin du fichier même si ce dernier est modifié, notamment si de nouvelles informations se rajoutent. Cette options est pratique pour suivre les fichiers de log:
#tail -f /var/log/messages
12:18pm up 12 min, 2 users, load average: 0.15, 0.07, 0.04
55 processes: 54 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 2.0% user, 1.1% system, 0.0% nice, 96.8% idle
Mem: 130532K av, 65680K used, 64852K free, 0K shrd, 4140K buff
Swap: 136544K av, 0K used, 136544K free 28296K cached
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
551 root 6 0 14572 14M 1540 S 0 0.9 11.1 0:06 X
739 bibi 12 0 1048 1048 868 R 0 0.9 0.8 0:00 top
1 root 0 0 196 196 168 S 0 0.0 0.1 0:04 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kupdate
On a les mêmes informations qu'avec la commande ps aux.
En mode graphique, voir aussi les commandes ktop et gtop.
alain@terre:~ > type awk
awk is /usr/bin/awk
On peut aussi taper (instruction which):
alain@terre:~ > which awk
/usr/bin/awk
#uptime
Voilà ce que vous obtenez:
10:42am up 1:36, 2 users, load average: 0.00, 0.00, 0.00
whatis recherche les mots indiqués dans un ensemble de bases de données contenant les descriptions des commandes système (décrit brièvement une instruction).
alain@portable:~ > whatis lsof lsof (8) - list open files
alain@terre:~ > xwininfo
xwininfo:
Please select the window about which you
would like information by clicking the
mouse in that window.
Le poinreur de la souris est remplacé par une petite croix et si on clique, bouton gauche, en la positionnant sur une fenêtre, on obtient la sortie suivante:
xwininfo: Window id: 0x1c0000b "Konsole"
Absolute upper-left X: 4
Absolute upper-left Y: 47
Relative upper-left X: 4
Relative upper-left Y: 24
Width: 582
Height: 318
Depth: 16
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x21 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +4+47 -438+47 -438-403 +4-403
-geometry 582x318+0+23
Donc, toutes les informations concernant cette fenêtre sont affichées.
En tapant:
# xwininfo|awk '/id:/{print$4}'
... on obtient:
0x1c0000b
... c'est-à-dire l'id de la fenêtre après avoir cliqué dessus.
Je ne parle pas de awk que je connais mal. Ceci est purement à titre d'exemple.
Si on tape:
# xwininfo | grep 'id:'
... on extrait (grep) de l'affichage produit par la commande xwininfo la ligne qui contient "id:".