This is an old revision of the document!
Table of Contents
commandes linux système
Commandes Linux
Cet article présente des commandes système sous Linux. En général on obtient de l'aide sur une commande en tapant man <commande>
dans un terminal, ou en consultant l'aide située dans le dossier /usr/share/doc.
Les commandes réseaux sont décrites ici : linux configuration réseau
apropos
(ressemble à man -k
)
Permet d'afficher toutes les commandes en rapport avec la commande passée en paramètre.
apropos who apropos who at.allow (5) - determine who can submit jobs via at or batch at.deny (5) - determine who can submit jobs via at or batch from (1) - print names of those who have sent mail ftpusers (5) - file which lists users who are not allowed to use ftp ftpwho (1) - show current process information for each FTP session w (1) - Show who is logged on and what they are doing. w.procps (1) - Show who is logged on and what they are doing. who (1) - show who is logged on who-uploads (1) - identify the uploaders of Debian source packages whoami (1) - print effective userid whodepends (1) - check which maintainers' packages depend on a package whois (1) - client for the whois directory service xfce4_setup (1) - creates local .xsession file for the user who calls the script
apt
C'est le gestionnaire de paquet sous les distributions Debian & dérivées.
Le fichier de configuration des dépôts (main, contrib, universe, multiverse, etc) est /etc/apt/sources.list
. Les paquets téléchargés sont stocké dans un cache situé dans /var/cache/apt/
.
Les commandes utiles :
apt-get update
pour màj la liste des paquetsapt-get upgrade
pour installer les dernières màj ; les recommandations préconisent d'utiliserapt-get safe-upgrade
,apt-get dist-upgrade
ouapt-get full-upgrade
(selon les distributions et l'action désirée).apt-get install <paquet>
pour installer le paquetapt-get remove [–purge] <paquet>
pour désinstaller le paquet [et aussi ses fichiers de config]apt-get clean
supprime des paquets téléchargés du cacheapt-get autoclean
supprime les archive obsolètes
apt-cache show <paquet>
pour afficher les informations relatives au paquetapt-cache show <chaine>
pour rechercher la chaine dans la liste des tous les paquets
aptitude
est un dérivé plus récent d' apt
, qui fonctionne de manière similaire avec la plupart du temps le même argument (e.g. aptitude install
; aptitude search
, etc).
Liens :
arp
C'est une commande qui permet de voir la table de correspondance @IP/@MAC.
Pour avoir toutes les entrées ARP de la table
arp -a
Pour supprimer une entrée de la table
arp -d <nom_de_la_machine>
Pour ajouter une nouvelle entrée dans la table
arp -s <nom_de_la_machine adresses_mac>
aspell
Vérificateur d'orthographe interactif en ligne de commande.
aspell check toto.txt
Pour l'utiliser de façon non-interactive :
aspell list < toto.txt
Pour rechercher un mot rapidement dans le dictionnaire, on utilise la commande look.
at
Permet de programmer l'exécution d'une tâche à une heure donnée (une seule exécution, à la différence cron). La syntaxe est at heure jour
; puis on saisi une commande par ligne ; et enfin on quitte l'outil par un ctrl+d
(<EOT>
). Le jour n'est pas obligatoire ; par défaut on utilise la date du jour courant (at 14:45 10/19/06
équivaut à at 14:45
si on est le 19 octobre 2006). Il est possible de compter par rapport à l'heure/la date courante : at 15:00 + 3 days
programme une commande pour 15h00 dans 2 jours (marche aussi avec l'heure).
Enfin, on peut spécifier l'heure d'exécution en chiffres au format : at -t “YYMMDDmmHH”
.
date jeudi 19 octobre 2006, 14:50:41 (UTC+0200) # programmer une tâche à 14h52 at 14:52 # on aurait pu utiliser la syntaxe plus complète : at -t "200610191452" warning: commands will be executed using /bin/sh at> echo 'toto' at> echo 'tata' at> <EOT> job 1 at Thu Oct 19 14:52:00 2006 # lister les tâches programmées atq 1 Thu Oct 19 14:52:00 2006 a dude # supprimer l'entrée #1 atrm 1
Comme on peut le deviner, atq
permet d'afficher la queue des commandes programmées. Chacune est déposée dans un fichier dans le répertoire /var/spool/at
.
On peut utiliser les fichier /etc/at.allow
et /etc/at.deny
pour gérer des permissions d'accès à la commande at
.
awk
C'est une commande (un langage) de manipulation de chaînes de caractères d'un fichier ou d'un flux en entrée. Voir la page dédiée : awk
badblocks
badblocks permet de rechercher les blocks défectueux sur un périphérique.
badblocks -s -v /dev/hda
Si badblocks trouve un bloc défectueux déjà utilisé, e2fsck essaie de déplacer celui-ci à un autre emplacement. Si le bloc est vraiment abîmé, le contenu du fichier peut être corrompu.
e2fsck -c ?
Liens utiles :
basename
basename retourne le nom du fichier fourni en paramètre, sans son chemin.
Un équivalent moins coûteux de la fonction basename $FIC
est : ${FIC##*/}
batch
Permet de lancer une commande quand le système n'est pas trop chargé (charge CPU < 1.5).
bg
(background) Placer un job en arrière-plan
(voir jobs
)
blkid
Affiche les attributs des disques/partitions :
/dev/sda1: UUID="b0ab5b55-45e9-1cf9-3017-a5a8c86610be" TYPE="linux_raid_member" PARTUUID="5f04e8c2-ff94-4ab2-a129-3be865a326e1" /dev/sda2: UUID="0a4130a8-429a-d46f-3017-a5a8c86610be" TYPE="linux_raid_member" PARTUUID="97ac67bb-ce66-475b-9e62-3e67fd0b1132" /dev/sdb1: UUID="b0ab5b55-45e9-1cf9-3017-a5a8c86610be" TYPE="linux_raid_member" PARTUUID="bd37f026-6d63-4757-957d-d3eaef8666ea" /dev/sdb2: UUID="0a4130a8-429a-d46f-3017-a5a8c86610be" TYPE="linux_raid_member" PARTUUID="8bc69d02-11a2-4616-9b2a-751f995076ea" /dev/md0: LABEL="sys" UUID="381c49fe-1b04-47d4-8b0a-e55e1d68a4fb" TYPE="btrfs" /dev/md1: UUID="58833cb6-9a9f-4991-a121-99e64bc8d3e5" TYPE="swap"
cal
Permet d'afficher le calendrier en console ; par défaut le mois courant
cal -y
affiche l'année courantecal 2000
affiche l'année 2000cal 01 2001
affiche janvier 2001
cat
Permet d'afficher sur STDOUT un flux d'entrée ou un fichier spécifié en paramètre ( on peut en spécifier plusieurs) :
cat fichier.txt
On peut notamment afficher les numéros de lignes -n
, afficher l'entrée standard -
(ou lancer cat
sans paramètre), afficher les caractères invisibles -A
(les tabulations et les fins de lignes)
Tips
- Écrire des notes dans un fichier : pour simuler un notepad/bloc-note dans un shell (marche seulement pour créer un nouveau fichier) :
cat > list -
Utiliser ^C (ctrl+c
) pour sortir.
- Envoyer des paramètres à un programme sans que cela n'apparaisse dans le bash_history :
# équivalent d'un "echo blabla" cat | xargs echo blabla ^D blabla
… seule la commande cat | xargs echo
apparaitra dans l'historique des commandes ; ^D
(ou Ctrl+D
) permet de quitter le cat et envoyer le texte à la commande suivante. C'est utile lorsqu'on doit saisir un mot de passe, par exemple.
cd
change directory ; commande utiliser pour changer de répertoire (équivalent de dir
sous Windows).
A tout moment on peut savoir dans quel répertoire on est (chemin absolu) grâce à la commande pwd.
Utilisation :
cd /tmp
: aller dans le répertoire “/tmp”cd .
: le “.” désigne le répertoire courant. Donc cette commande va dans le répertoire courant (donc dans l'absolu, cette commande ne sert à rien !)cd ..
pour aller dans le répertoire racine du répertoire courant. On peut enchainer plusieurs fois cette séquence (cf exemples).cd
la commande seule permet de se rendre dans sa HOMEDIR c'est à dire son répertoire personnel (souvent dans /home/<nom d'utilisateur> ; pour le connaitre :echo $HOME
.)cd -
permet de retourner dans le précédent répertoire de travail
chemin absolu = chemin depuis la racine du sytème, par exemple “/home/toto”. Il est donc invariable et commence toujours par “/”. chemin relatif = chemin par rapport au répertoire courant. Par exemple si on veut définir le chemin relatif de “/home/toto” :
- ça sera “./toto” (= à la notation raccourcie “toto/” ou même “toto”) si on est dans /home
- ça sera “../” si on est dans /home/toto/test
- ça sera “./home/toto” si on est dans /
Exemple :
pwd /mnt/data cd /tmp pwd /tmp cd pwd /home/toto cd - pwd /tmp cd - pwd /home/toto cd .. pwd /home cd pwd /home/toto cd ../.. pwd / cd /home/toto (dans ce contexte, équivaut à "cd home/toto" ou "cd ./home/toto") pwd /home/toto
chage
Permet de lister et modifier la date d'expiration d'un compte utilisateur.
Pour afficher les information d'un compte :
chage -l <login_user> Last password change : Jan 15, 2013 Password expires : Oct 11, 2016 Password inactive : Oct 31, 2016 Account expires : never Minimum number of days between password change : 15 Maximum number of days between password change : 1365 Number of days of warning before password expires : 7
Pour modifier la date d'expiration :
chage -E YYYY-MM-DD <login_user>
chattr/lsattr
Permet de changer et lister les attributs de fichiers sur une partition ext2-3
- protéger un fichier avec
chattr +i /etc/services
- bit ajout-seul (pour les logs) :
chattr +a /var/log/messages
- effacement total :
chattr +s fichier
chkconfig
Commande pour configurer les services activer au démarrage du système.
# lister les états de tous les services chkconfig --list # activer le service toto (resp. désactiver avec "off") # optionnel : préciser les runlevels concernés, par défaut 2345) chkconfig toto on [--level 35] # lister l'état du service toto (pour chaque runlevel) chkconfig --list toto toto 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
chmod
Change les permissions sur un fichier. Syntaxe simplifiée : chmod [-R] DROITS FICHIERS
Théorie des droits sous Linux
Les droits d'un fichiers sont de la forme : [d]rwxrwxrwx qu'il faut lire en séparant les champs : [d] rwx rwx rwx. (“d” s'il s'agit d'un répertoire ; puis 3 séquences de 3 caractères qui représentent les droits (r (read), w (write), x (execute) ou - (pas le droit)) affectés respectivement au propriétaire du fichier, au groupe du fichier et aux autres (others). On obtient les droits d'un fichier avec la commande ls -l :
ls -l /home/toto/secret.txt -rwxr-xr-- 1 toto smbusers 1,2K sep 16 09:34 secret.sh
Dans cet exemple :
- (-) ⇒ c'est un fichier et non un répertoire
- (rwx) ⇒ le propriétaire de ce fichier est toto ; il a les droits de lecture, écriture et exécution sur ce fichier
- (r-x) ⇒ le fichier appartient au groupe smbusers ; les utilisateurs appartenant à ce groupe auront les droits en lecture et exécution sur ce fichier, mais pas en écriture.
- (r–) ⇒ les autres utilisateurs n'ont que le droit de lire le fichier, mais pas de l'exécuter ni de le modifier.
Méthode numérique
Ces permissions peuvent se coder avec des valeurs binaires : on considère chaque champ “rwx” indépendamment. Pour faire simple : r vaut 4, w vaut 2 et x vaut 1. L'explication technique est que chaque droit vaut la valeur de la puissance de 2 du bit qui lui correspond : Par exemple “r-x” ⇒ 101 en binaire, ce qui donne en décimal 2^2 (+ 0 * 2^1) + 2^0 = 4 (+ 0) + 1 = 5
Les permissions du fichier secret.sh ci-dessus se codent donc ainsi (on ne tient pas compte du premier tiret qui détermine s'il s'agit d'un dossier ou non) :
rwx r-x r-- 7 5 4 => 754
Pour ajouter le droit d'écriture au membres du groupe smbusers, il faut transformer les droits en : rwxrWxr–, soit 774 :
chmod 774 secret.sh ls -l secret.sh -rwxrwxr-- 1 toto smbusers 1,2K sep 16 09:34 secret.sh
Méthode symbolique
On peut simplifier la méthode numérique en se disant : “je veux ajouter le droit en écriture au groupe” ce qui se traduit par cette notation alternative :
chmod g+w secret.sh
“g” pour “group”, “+” pour “ajouter”, “w” pour “write”.
La syntaxe est la suivante :
+
,-
ou=
pour ajouter, enlever ou appliquer la valeur exacte d'une permission.u
,g
, ouo
pour les champs user, group ou other.r
,w
oux
pour les droit read, write ou execute.
On peut “factoriser” les changements : par exemple pour ajouter le droit de lecture et écriture d'un fichier à tout le monde
chmod ugo+rw un_fichier.txt
On peut lister des modifications :
chmod u+rw,g+x un_fichier.txt
chsh
Cette commande permet de changer le shell par défaut de l'utilisateur courant.
chsh Enter the new value, or press return for the default Login Shell [/bin/bash]:/bin/zsh
Pour changer le shell par default des utilisateurs :
vim /etc/adduser.conf DSHELL=/bin/bash -> DSHELL=/bin/zsh
clear
clear permet d'effacer le contenu du terminal (raccourci clavier : ctrl+c
.
cmp
cmp permet de comparer deux fichiers octet par octet. A la différence (..) de diff
, il n'affiche pas les lignes différentes mais les “endroits” des fichiers qui diffèrent.
-l
permet d'afficher tous les octets qui diffèrent, -s
(silence) ne renvoie rien d'autre que le code de retour de la commande.
comm
Permet de comparer les fichiers triés GAUCHE et DROITE ligne par ligne.
comm fichier1 fichier2
Sans option, la sortie se fait sur 3 colonnes. La première colonne contient les lignes uniques au FICHIER1, la seconde contient les lignes uniques au FICHIER2, et la troisième contient les lignes communes aux deux fichiers. Options :
-1
: supprimer les lignes uniques du fichier de gauche-2
: supprimer les lignes uniques du fichier de droite-3
: supprimer les lignes uniques des 2 fichiers
cp
copy ; copier de fichier.
Paramètres :
-i
affiche une demande de confirmation avant chaque écrasement de fichier.-r
recursive = on copie aussi toute la sous-arborescence avec les répertoires.-p
permission = permet de conserver les permissions-a
archive = équivalent à -rp
cron
cron est un utilitaire qui permet de planifier des taches à un moment donné.
cut
Permet de sélectionner une ou des colonne(s) dans un flux ou un fichier.
Par exemple pour récupérer la liste des utilisateurs d'un système ainsi que le chemin de leur home, on sélectionne la 1ère et la 6ème colonne (field) du fichier /etc/passwd
en délimitant avec :
(delimiter) :
cut -d":" -f1,6 /etc/passwd
cut n'accepte qu'un seul caractère comme délimiteur ; si on veut utiliser le caractère tabulation, \t
ne fonctionne donc pas. Pour cela il faut utiliser la séquence ctrl+v <tab>
.
date
L'heure Unix, ou timestamp, est un compteur qui affiche le nombre de seconde depuis le 1er janvier 1970 à 00h00 UTC/GMT. Il est codé sur 32 bits donc il prendra fin à 2^32-1, soit le 19 janvier 2038 à 3 h 14 min 7 s, en provoquant le bug de l'an 2038 :).
date est un outil pour manipuler ce compteur : renvoyer la date courante, convertir la date en différents formats, faire des calculs de date (les options et les formats sont très nombreux, il faut voir le man). Voici quelques exemples usuels quand même :
# Pour afficher la date au format YYYY/MM/JJ-HH:MM:SS : date +%Y/%m/%d-%H:%M:%S 2009/06/25-15:07:56 # afficher le compteur (timestamp) de l'heure actuelle : date +%s 1441816670 # afficher la date correspondant à un timestamp donné : date -d @1441816670 mer. sept. 9 18:37:50 CEST 2015 # ou la version plus verbeuse : date -d "1970-01-01 UTC + 1441816670 seconds" # afficher la date d'il y a 2 jours : date --date='2 days ago' # afficher la date dans 5 mois et 4 jours (regarde, on peut même faire des fautes, c'est pris en compte !) : date --date='5 month 4 day' # mettre à jour la date et l'heure du système : date --set="2016-6-30 4:59 PM"
dd
Copy and convert a file.
Permet de copier une source vers une destination en binaire ; par ex générer un fichier d'une certaine taille de 50 Mo :
dd if=/dev/zero of=500meg bs=1k count=500000
Légende :
- if : input file
- of : output file
- bs : block size (50 000 x 1024 = 50 mégas)
En envoyant un SIGUSR1 à dd, il renvoie des informations comme la quantité de données copiées, la vitesse, etc..
pkill -USR1 dd
diff
diff permet d'afficher les différence entre 2 fichiers :
cd /tmp ; echo "toto" > toto ; echo "titi" > titi diff toto titi 1c1 < toto --- > titi
Un patchfile c'est un fichier qui contient la sortie d'un diff :
diff -u toto titi > toto_titi.patch
Pour patcher toto avec les modifications de titi on utilise la commande patch avec le patchfile :
patch -b toto toto_titi.patch patching file toto
dig
A l'instar de nslookup
, dig est un outil d'interrogation de DNS (beaucoup plus fin cependant). Quelques use case :
dig +short www.free.fr # résoudre le nom google.fr avec une sortie au format court (affichage uniquement des IPs) 212.27.48.10 dig +search toto # va rechercher toto en recherchant aussi dans les domaines déclarés dans /etc/resolv.conf dig +short -x 212.27.48.10 # résolution inverse avec un résultat au format court (affiche uniquement les noms) www.free.fr dig +trace google.fr # mode debug pour analyser la résolution DNS dig txt pteu.fr # requêter les champs TXT du domaine dig mx pteu.fr # MX (serveur de mail) du domaine dig pteu.fr @9.9.9.9 # interroger le @serveurDNS spécifié
dirname
dirname permet de renvoyer le path (chemin) du nom de fichier absolu passé en paramètre.
FIC=/home/dude/.bashrc dirname $FIC /home/dude # équivalent moins coûteux : echo ${FIC%/*} /home/dude
Pour obtenir le chemin absolu du fichier, utiliser readlink.
disown
Permet de désolidariser un processus du shell qui l'a lancé. Si aucun processus n'est spécifié, il prend le dernier lancé.
dmesg
Affiche les messages émis par le noyau depuis le dernier démarrage.
dmesg | head -1 [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) [..] # pour convertir les temps en date dmesg -T [mer. janv. 2 18:18:44 2019] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) [..]
df
Permet d'afficher l'espace disque restant sur tous les disques montés ;
-h
permet d'utiliser un affichage compréhensible (il adapte l'unité en fonction de la taille (Ko, Mo, etc)).-T
affiche le type de sytème de fichier (ntfs, fat, ext3, …)
df -hT Sys. de fich. Type Tail. Occ. Disp. %Occ. Monté sur /dev/sda1 ext3 3,9G 1,5G 2,2G 41% / tmpfs tmpfs 474M 0 474M 0% /lib/init/rw udev tmpfs 10M 32K 10M 1% /dev tmpfs tmpfs 474M 4,0K 474M 1% /dev/shm /dev/sda3 ext3 913G 840G 26G 98% /mnt/data
dpkg
Permet de gérer les packages :
dpkg -L <paquet>
liste les fichiers contenus dans le paquetdpkg-reconfigure <paquet>
reconfigurer le paquetdpkg -i <paquet>
installer un paquetdpkg -S <fichier>
donne le paquet auquel se rapporte le fichierdpkg-query -W
affiche la listed e tous les paquets installés sur la machine
du
Permet d'afficher la taille des fichiers d'un répertoire
-h
permet d'utiliser l'unité appropriée en fonction de la taille du fichier (kilo, mégas, gigas, etc..)-s
(summurize) permet de n'afficher la taille que du dossier courant.
du -sh 437M .
Pour limiter l'affichage des répertoires du dossier courant :
du -h --max-depth=1 4,0K ./.aptitude 239M ./income 4,0K ./.w3m 4,0K ./Mail 16K ./test-gen-rsa 16K ./.ssh 776K ./save_tiga 307M .
ncdu est une alternative en ncurses (interface pseudo-graphique en CLI)
echo
echo
permet d'afficher une ligne
echo toto
toto
Options :
-n
: ne va pas à la ligne après le texte-e
: interprète les caractères spéciaux du genre\n
ou\t
echo -e "to\tto\ntiti" to to titi
env
env affiche les variables d'environnement et leur contenu.
HOST=hel TERM=xterm SHELL=/bin/bash SSH_TTY=/dev/pts/2 USER=dude MAIL=/var/mail/dude PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin BLOCKSIZE=1k PWD=/home/dude EDITOR=vim LANG=fr_FR.UTF-8 PS1=\[\e[0;30;47m\]$(date +"%H:%M")\[\e[0;32m\] \u\[\e[m\]@\[\e[0;31m\]\h\[\e[0m\]:\[\e[0;32m\]\W \[\e[0m\] SHLVL=1 HOME=/home/dude LOGNAME=dude _=/usr/bin/env OLDPWD=/home/dude/Mail
ethtool
Permet d'obtenir/modifier des informations sur la connectivité niveau 1 et 2 de la carte réseau.
Quelques exemples de commandes :
ethtool -i eth0 driver: r8169 version: 2.2LK firmware-version: bus-info: 0000:00:09.0
ethtool eth0 Settings for eth0: Supported ports: [ MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off Supports Wake-on: g Wake-on: d Current message level: 0x000000ff (255) Link detected: yes
Pour passer en 1 giga full dupleix et autonégatiation :
ethtool -s eth0 speed 1000 duplex full autoneg on
exit
ou ctrl+d
, permet de fermer un terminal graphique.
expr
Évaluer des expressions :
- tronquer la taille de la chaine
$MSG
à 40 caractères
expr "$MSG" : "\(.\{40\}\)"
- expressions arithmétiques
expr $z + 1
for
Permet de faire une boucle “pour” ; voir programmation_shell.
fg
(forground) Placer un job en avant-plan.
(voir jobs
)
file
Affiche le type d'un fichier (ne tient pas compte de son extension mais regarde les headers dudit fichier)
file toto toto: ASCII text
find
Permet de rechercher un fichier dans une arborenscence
# recherche d'un fichier "toto.txt" dans le répertoire courant "." find . -name toto.txt
Liste des options les plus utilisées (totalement subjectif) :
-type d
pour spécifier le type du fichier recherché (notamment directory, regular file, symbolic link)-name nom
permet de spécifier un nom de fichier ou un motif. Si motif, il est recommandé de le saisir entre “” ou d'échapper proprement les caractères interprétés (ex :-name \*.txt
ou-name “*.txt”
) sous peine de rencontrer l'erreur suivante : find: les chemins doivent précéder l'expression : <un fichier texte>-perm 664
permet de chercher les fichiers qui ont exactement les droits du masque (ici 664 soit-rw-rw-r--
). On peut rechercher tous les fichiers qui ont le droit d'écriture pour le groupe par-perm -020
.-regex 'expr_reg
' permet d'utiliser une expression régulière comme critère de recherche-exec
permet d'exécuter une commande pour chaque résultat de la commandefind
(voir exemples)-size +1000M
ne valide que les fichiers dont la taille est supérieure à 1000 Mo.-printf
pour contrôler la sortie et n'afficher que des champs spécifiques du fichier ; voir la partie exemples plus bas.-maxdepth n
ne pas descendre en dessous de n niveaux dans les répertoires parcourus (existe aussi en-mindepth n
)-mount
ne pas faire la recherche dans les répertoires situés sur d'autres systèmes de fichiers
On peut moduler les options avec :
!
pour exclure une condition ; par exemple rechercher les fichiers qui ne sont pas nommés toto.titi :! -name toto.titi
. Equivalent de-not
(-not -name toto.titi
).-a
(AND) et-o
(OR) pour additionner plusieurs conditions de recherche
Exemples
# fichiers en écriture pour tout le monde find / perm 0002 ! type l # fichiers en lecture pour tout le monde find / perm 0004 ! type l find / ( -perm -a+r -o -perm -a+w ) ! -type l # afficher les fichiers modifier il y a moins de 1 jour (-1) find . -mtime -1 -print | more # supprimer les fichiers modifiés il y a plus de 2 jours (+2) find . -mtime +2 -exec rm -f {} \; # copier tous les fichiers ''.jpg'' dans /tmp ("-regex" permet de rechercher dans le path complet du fichier) find . -regex ".*\/([a-z]|[A-Z]|[0-9])+\.jpg$" -exec cp {} /tmp \; # rechercher ses films de vacances et afficher leurs noms triés par ordre alphabétiques # NB : le type posix-egrep permet d'utiliser des | dans le motif, ce qui n'est pas possible par défaut find . -regextype posix-egrep -iregex '.*.avi|.*.mkv|.*.mp4|.*.m4v|.*.m2ts' | sed 's/.*\///g' | sort # supprimer toutes ces maudites miniatures Windows : find . -name Thumbs.db -exec rm {} \; # attribuer des permissions à tous les sous-répertoires contenus dans le répertoire pics : find ./pics -type d -exec chmod g+rwx {} \; # rechercher tous les fichiers exécutables en excluant les dossiers find . -type f -perm -100 # trouver et compter les doublons dans le répertoire courant (et les sous-répertoires) : find . -type f | sed "s#.*/##g" | sort | uniq -c -d # supprimer les dossiers vides find . -type d -empty -delete # lister récursivement les 10 fichiers les plus récents d'un répertoire : find /mnt/data -type f -printf "%TY-%Tm-%Td %TT %f\n" | sort | tail -10 # afficher les fichiers de plus de 10 Go (''-size +10G'') contenus dans le dossier courant, # triés par ordre décroissant de taille : # (On affiche la taille du fichier en Ko (''%k''), et le nom du fichier sans le path (''%f''). # Le reste des commandes sert à classer et ne retenir que les 10 plus récents.) find . -type f -size +10G -printf "%k %f\n" | sort -rn | tail -10 # on peut additionner les conditions de recherches avec -a (AND) et -o (OR) find . \( -name '*.avi' -o -name '*.mkv' \) -print
flock
flock est une commande de gestion de verrou. La syntaxe est :
flock <fichier de verrou> commande
Le concept global du verrou permet de vérifier que l'on n'a pas 2 commandes qui se lancent simultanément.
La commande ne se lance que si aucun autre programme n'a bloqué le verrou ; si elle obtient le verrou, elle le bloque pour le temps de son exécution, et le débloque à la fin. Par défaut si le verrou ne peut être acquis, flock attend qu'il se débloque sans lancer la commande.
Paramètres :
-w 10
: annuler la commande si l'on n'acquière pas le verrou avec 10 secondes-s
(shared) : créer un verrou partager (verrou de lecture)-e
ou-x
(exclusive) : pour obtenir un verrou exclusif (verrou d'écriture)
finger
C'est un service qui permet d'obtenir des informations sur les comptes utilisateurs :
finger -l dude
fmt
Utilitaire pour formater du texte.
Exemple :
# afficher du texte en colonnes de max 4 caractères echo "toto titi tata tutu" | fmt -w10 toto titi tata tutu
free
Affiche des informations sur la mémoire (utilisée, libre, totale) :
free total used free shared buffers cached Mem: 452052 382144 69908 0 145688 53744 -/+ buffers/cache: 182712 269340 Swap: 497972 424 497548
ftp
Permet d'échanger des fichiers avec un hôte distant par protocole FTP.
Quelques commandes en vrac : dir cd get mget put mput binary exit
.
fuser
Identifier les processus qui utilisent un fichier. (voir mount)
getent
Obtient des entrées de la base de données administrative
Par exemple pour récupérer la ligne de l'utilisateur “dude” :
getent passwd dude dude:x:10000:10000:dude,,,:/home/dude:/bin/bash
getopts
Cette commande permet de récupérer facilement les options (paramètres) avec lesquels a été lancé un script. Une option est un caractère précédé d'un + ou d'un - (à la différence d'un argument qui est “juste” une chaîne de caractère) ; getopts analyse les options une par une, et doit donc être utilisée dans une boucle.
grep
grep est un outil de recherche de motifs, soit dans son flux d'entrée soit dans un fichier (les 2 commandes suivantes sont équivalentes) :
cat toto.txt | grep titi grep titi toto.txt
Les options possibles sont :
-c
(count) pour avoir uniquement le nombre de lignes satisfaisantes-i
(insensible à la casse) : pour ne pas différencier minuscules et majuscules-n
(number)pour afficher les numéros de lignes-v
pour obtenir les lignes où le motif n'existe pas-A <nb>
pour afficher <nb> lignes après celles qui matchent-B <nb>
pour afficher <nb> lignes avant celles qui matchent-R
mode récursif (recherche dans tous les fichiers de tous les sous-répertoires)–color=auto
pour afficher en rouge le motif dans les résultats-q
(quiet) n'affiche rien, se contente de retourner le code d'erreur 0 s'il trouve le motif, 1 sinon-o
(only-matching) : n'affiche que les résultats matchant le motif (et pas la ligne entière)
Il est possible d'utiliser les expressions régulières dans le motif, par exemple :
grep '^d' toto.txt
Pour utiliser des filtres multiples il faut utiliser egrep
:
egrep "toto|titi" tata.txt
*grep
Les dérivés de grep :
egrep
: permet d'utiliser des expressions régulières étendues (ERE) dans les patterns ; il vaut mieux utilisergrep -E
car egrep est désuet. Exemple : pour afficher un fichier purgé des lignes vides et des commentaires :
grep -vE '^$|^#' file
zgrep
: permet de dézipper automatiquement les archives (*.gz) pour faire une recherche dedans
Tips
- filtrer la liste des processus sans inclure le processus grep :
ps aux | grep [p]rocess-name
En temps normal si on recherche le processus ssh avec grep on obtient une ligne incluant le processus de recherche grep :
ps axu | grep ssh dude 1777 0.0 0.0 3324 824 pts/4 S+ 12:29 0:00 grep ssh root 5332 0.0 0.1 5500 988 ? Ss Jan06 0:00 /usr/sbin/sshd
En effet les []
ne sont interprétés que par grep, et ne matchent plus la recherche.
Pour supprimer cette ligne parasite :
ps axu | grep [s]sh root 5332 0.0 0.1 5500 988 ? Ss Jan06 0:00 /usr/sbin/sshd
source : commandlinefu
- compter le nombre de lignes d'un fichier :
grep -c ^ FIC
(marche aussi avec$
ou“”
)
grpck
grpck vérifie la cohérence et l'intégrité des données des groupes (c'est le pendant de pwck
).
gunzip
Permet de décompresser un fichier compressé avec la commande gzip
(.gz
).
gunzip -d fichier.gz # pour extraire le contenu du fichier et l'afficher sur la sortie standard : 2 façons cat toto.gz | gunzip gunzip -cd fichier.gz
gzcat
est un alias souvent utilisé :
alias gzcat='gunzip -cd'
gzip
Est un outil de compression. il transforme un fichier en fichier archive ayant l'extension .gz
, par exemple ici on compresse toto.tar :
gzip -9 toto.tar ls toto.tar.gz
On obtient automatiquement un .tar.gz
(le fichier .tar sera compressé et renommé) ; l'option -9
indique le degré de compression.
Pour décompresser un fichier, voir gunzip
.
head
Affiche les 10 premières lignes d'un fichier.
head ~/.bash_history
-n <nb>
spécifie le nombre de lignes à afficher
help
Affiche la liste des commandes internes et leur syntaxe.
help <cmd>
affiche l'aide d'une <cmd> particulière.
history
Permet d'afficher l'historique des commandes saisies dans un terminal :
history 64 ls -la 65 pwd 66 cd / 67 cd etc 68 echo 'toto' 69 history
On peut relancer une commande de l'historique en saisissant ! suivi de son numéro :
!65 pwd /etc
On peut également relancer la dernière commande avec !!
:
!! pwd /etc
Pour relancer la dernière commande commençant par p, on utilise :
!p pwd /etc
On efface l'historique avec history -c
.
On peut loguer (dans /var/log/messages
) l'historique des commandes saisies par un utilisateur en ajoutant dans son .bashrc cette ligne :
PROMPT_COMMAND='history -a >(logger -t "$SHELL: $USER[$PWD] $SSH_CONNECTION")' # vérification tail -1 /var/log/messages Feb 7 18:22:45 vdeb7 /bin/bash: dude[/home/dude]: history
host
Renvoie l'IP d'un nom d'hôte en paramètre :
host toto toto has address 192.168.0.1
Pour lister les IPs d'une liste de machines située dans un fichier liste.txt :
while read n; do host $n; done < liste.txt toto has address 192.168.0.1 titi has address 192.168.0.2
hostname
Cette commande sans paramètre renvoie le nom de la machine ; suivi d'une chaine de caractère elle modifie le nom de la machine.
toto:$ hostname toto toto:$ hostname titi titi:$
Il faut éditer /etc/hostname
pour changer le nom de la machine pour le prochain reboot.
Pour prendre en compte le changement :
/etc/init.d/hostname.sh /etc/init.d/sysklogd restart
puis se reloger.
Avec le paramètre -i
, la commande renvoie l'adresse IP de la machine :
hostname -i ymir
id
Affiche l'uid (user id) ainsi que le gid (group id) et la liste des groupes auxquels appartiennet l'utilisateur courant.
Si elle est suivi d'un nom d'utilisateur, la commande affiche ces information sur l'utilisateur en question.
id root uid=0(root) gid=0(root) groupes=0(root)
ifup/ifdown
ifup
et ifdown
sont des script dépendant de la distribution, qui servent à activer/désactiver une interface :
ifup eth0
équivaut (normalement) à :
ifconfig eth0 up
Pour relancer le service réseau sous Debian :
/etc/init.d/networking restart
et sous Redhat :
service network restart
ifconfig
Sert à contrôler et diagnostiquer le réseau sur la machine.
- configurer l'adresse IP static de la carte réseau
ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
Pour activer le DHCP (adressage automatique) :
dhclient eth0
Pour le prendre en compte au prochain démarrage, éditer le fichier :
/etc/network/interfaces
sous Debian/etc/sysconfig/network
et/ou/etc/sysconfig/network-script/ifcfg.eth0
sous Redhat/etc/sysconfig/network-script/ifcfg-eth0
sous NetBSD
et mettre quelque chose qui ressemble à ça, c'est assez parlant :
iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 network 192.168.0.0 gateway 192.168.0.2 post-up /usr/bin/ethtool eth0 -s speed 100 duplex full autoneg off
(pour le DHCP il suffit de saisir iface eth0 inet dhcp
à la place)
Pour ajouter automatiquement des routes lorsque une interface réseau devient active ou inactive, on utilise la règle post-up
du fichier /etc/network/interfaces
:
allow-hotplug eth1 iface eth1 inet dhcp post-up route add -net 42.42.42.0 netmask 255.255.255.0 gw 192.168.1.1 down route del -net 42.42.42.0 netmask 255.255.255.0 gw 192.168.1.1
(source : http://www.noplay.net/Ajouter-des-routes-au-chargement-d.html)
- pour supprimer l'adresse IP d'une interface :
ip address del w.x.y.z dev ethX
Cela fait la modif à chaud, sans redémarrer l'interface.
- pour restaurer la configuration par défaut d'une interface :
ifconfig ethX default
Diagnostique
On lance la commande ifconfig seule (ou avec -a) pour lister, toutes les interfaces, ou suivi d'un nom d'interface particulier :
ifconfig eth0 eth0 Link encap:Ethernet HWaddr AA:BB:CC:DD:EE:FF inet adr:10.1.2.201 Bcast:10.1.255.255 Masque:255.255.0.0 adr inet6: fe80::aabb:ccff:fedd:eeff/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:110602292 errors:0 dropped:0 overruns:0 frame:0 TX packets:75188627 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:34256601697 (31.9 GiB) TX bytes:78967426849 (73.5 GiB) Interruption:17
Le retour indique, par ligne :
- le type de lien (Link encap) et l'adresse MAC de l'interface (HWaddr)
- l'adresse IP (inet adr), de broadcast et le masque réseau
- l'adresse IPv6 et son domaine de validité (scope)
- l'état de l'interface (ici UP, qui indique que l'interface est activée et possède le couche réseau (3)), {BROAD|MULTI}CAST pour indiquer que le lien accepte le {broad|multi}cast, RUNNING (le driver de l'interface est chargé et a initialisé l'interface), et la taille de la MTU (Maximim Transmission Unit = la taille max des paquets transportés par la couche 2 (accès réseau), à savoir Ethernet)
- les compteurs de paquets de l'interface en réception et transmission (RX et TX) ainsi que les fails de type :
- errors : somme de tous les paquet en erreurs (erreurs CRC, paquets trop petits ou trop grands (runts/giants en terminologie Cisco), trame non alignée, etc… )
- dropped : paquets droppés (cause = un mauvais tag de VLAN ou un paquet IPv6 quand le système ne le gère pas)
- overruns : dépassement du buffer de l'interface
- frame : trame non alignée = paquets dont la taille n'est pas divisible par 8, qui sont donc rejetés
- carrier : perte du signal pendant l'émission d'une trame
- collision : nombre de collision détectées (voir fonctionnement du CSMA/CD)
- le volume de données reçues et envoyées (RX et TX bytes), exprimé en bytes puis en gibibit (oui gibi, voir ici)
- Le numéro d'interruption de la carte réseau, attribué par le système
info
Affiche les informations sur une commande (relativement similaire à la commande man
) :
info ls
ip
Couteau suisse réseau, il permet de configurer les paramètres ip d'une interface réseau.
# afficher les interfaces ip addr show 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0b:cd:0a:ad:31 brd ff:ff:ff:ff:ff:ff inet 132.166.99.1/24 brd 132.166.99.255 scope global eth0 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0b:cd:0a:ad:30 brd ff:ff:ff:ff:ff:ff # afficher la table de routage ip route default via 10.10.22.249 dev ens3 onlink 10.10.22.0/24 dev ens3 proto kernel scope link src 10.10.22.65 # affecter ou supprimer une adresse IP à une interface ip addr add 10.0.0.1 255.255.255.0 dev eth0 ip addr del 10.0.0.1 255.255.255.0 dev eth0 # afficher les voisins ip neigh
ipcs
ipcs affiche les information sur l'usage des ressources IPC.
# afficher la liste des sémaphores ipcs -s
ipcrm
ipcrm permet de supprimer une file de messages, un jeu de sémaphore ou un segment de mémoire partagée.
ipcrm -s <id_sem>
iptables
Principe
Les options
Option : Description : -A Append (ajoute) -D Delete (efface) -I Insert (insère) -R Replace (remplace) -L List (liste) -F Efface toutes les règles dans la ou les chaînes -Z Remet les compteurs à zéro dans une ou plusieurs chaînes -C Teste ce paquet sur une chaîne -N Crée une chaîne définie par l'utilisateur -X Efface une chaîne définie par l'utilisateur -P Change le comportement d'une chaîne sur une cible -E Change le nom d'une chaîne -p Protocole -s Adresse/masque de source -d Adresse/masque de destination -i Nom d'entrée (nom ethernet) -o Nom de sortie (nom ethernet) -j Saute (cible de règle) -m Correspondance étendue (peut utiliser des extensions) -n Sortie numérique de ports et d'adresses -t Table à manipuler -v Mode bavard -x Vérifications étendues (affiche les valeurs exactes) -f Prends uniquement en compte le second fragment ou ceux d'après -V Version du paquet --line-numbers Affiche les numéros de ligne
Les extensions
Module Description Options étendues mac Vérifie que l'extension correspond pour les paquets entrants sur une adresse mac. --mac-source state Active l'inspection des états --state (les états sont ESTABLISHED,RELATED, INVALID, NEW) limit Définit une limite sur le flux --limit, --limit-burst owner Essaie de trouver des correspondances dans le créateur du paquet --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner sessionid unclean Plusieurs tests de vérification aléatoires du bon état des paquets
Redirection
Exemple de redirection du trafic HTTP vers un serveur mandataire (port 3128) :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to proxyhost:3128 iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to proxyhost:3128
Exemples
Ajoute en première position de la table INPUT :
iptables -I INPUT 1 -p tcp --dport 1165 -j ACCEPT
On accepte les paquets TCP à destination du port 1165
Lister les règles en place [dans la table INPUT uniquement] :
iptables -L [INPUT] -n
On peut utiliser l'option -v pour un mode plus verbeux (affiche les connexions actives).
Liens
jobs
Affiche la liste des jobs du terminal (voir aussi bg et fg).
Exemple : je lance 2 sleep
(sans jeu de mot) que j'interrompe avec un ctrl+z
, et je liste les jobs du terminal :
sleep 10 [1]+ Stopped sleep 10 sleep 12 [2]+ Stopped sleep 12
Les 2 commandes sont interrompues ; si je veux continuer le sleep 12 en le plaçant en avant-plan grâce à son “numéro de job” :
jobs [1]- Stopped sleep 10 [2]+ Stopped sleep 12 fg %2 sleep 12
Il ne reste plus que le sleep 10 dans la liste des jobs ; je peux le relancer en arrière-plan sans préciser son numéro de job car c'est le seul dans la liste :
jobs [1]+ Stopped sleep 10 bg [1]+ sleep 10 &
kill
Permet d'envoyer un signal à un processus, défini par son PID :
kill -signal <PID>
signal peut être sous forme numérique ou alphabétique ; la liste des signaux peut être affichée avec l'option -l
:
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31) SIGUSR2 32) SIGPWR
ainsi kill -9 1000
et kill -SIGKILL 1000
auront le même impact.
NB : sur certains OS, les signaux ne sont pas définis par SIGxx mais xx tout court (SIGKILL → KILL)
killall
Envoyer un signal aux processus dont le nom contient <motif>. Il faut faire attention à l'impact d'une telle commande si mal écrite.
killall rsh
Les options sont les mêmes que la commande kill
.
Sur les *BSD, pkill
remplace killall
.
last
Affiche les dernières connexions (ici les 12 dernières)
last -n 12
lastb
lastb (last bad logins) affiche les derniers logins en échec (mauvais nom d'utilisateur ou mot de passe).
# lastb toto ssh:notty 10.0.57.26 Wed Jan 9 22:13 - 22:13 (00:00) titi ssh:notty 10.0.128.23 Mon Jan 7 09:38 - 09:38 (00:00) toto ssh:notty 10.0.57.26 Fri Jan 4 20:16 - 20:16 (00:00) tata ssh:notty 10.0.128.23 Thu Jan 3 09:11 - 09:11 (00:00) tatoo ssh:notty 10.0.128.23 Thu Jan 3 09:11 - 09:11 (00:00)
lastlog
Affiche la liste des utilisateurs du système suivis de la date et l'heure de leur dernière connexion.
lastlog Utilisateur Port Venant de Dernière dude pts/1 is110853.intra.c ven déc 14 15:55:51 +0100 2007 ftp **Jamais connecté** people tty6 mar déc 19 17:40:45 +0100 2006 roro pts/4 calata mer sep 12 20:55:57 +0200 2007
ldd
ldd affiche les bibliothèques partagées nécessaires à un exécutable. Exemple pour Firefox :
which firefox /usr/local/bin/firefox ldd /usr/local/bin/firefox linux-gate.so.1 => (0x00c14000) libpthread.so.0 => /lib/libpthread.so.0 (0x007fe000) libdl.so.2 => /lib/libdl.so.2 (0x007ec000) librt.so.1 => /lib/librt.so.1 (0x007f3000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0015b000) libm.so.6 => /lib/libm.so.6 (0x00996000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00aea000) libc.so.6 => /lib/libc.so.6 (0x00653000) /lib/ld-linux.so.2 (0x00631000)
let
ex : Pour incrémenter z :
let z=z+1 let "z += 1"
ln
Commande pour créer des liens.
Pour créer un lien dur :
ln <fichier_source> <lien>
Pour créer un lien symbolique (~raccourci) :
ln -s <fichier_source> <lien>
locate
Locate est une commande Unix permettant d'indexer et de retrouver facilement des fichiers sur un disque. Alors que la commande find
recherche en parcourant le disque, locate
utilise une base de données permettant une recherche beaucoup plus rapide ; l'inconvéniant (mineur) étant qu'il faille régulièrement mettre à jour cette base.
La syntaxe est la suivante :
locate fichier
Pour affiner la recherche, on peut utiliser des paramètres :
-d chemin
pour spécifier une location-i
pour ignorer la casse-r regex
pour utiliser une expression régulière regex-S
affiche des statistiques
Pour mettre à jour la base (sous Debian) :
updatedb
logout
Est la commande pour fermer sa session, dans un terminal login. Le raccourci est ctrl+d
.
look
Pour rechercher un mot rapidement dans le dictionnaire (cf aspell), on utilise la commande look.
look jap japonais japonaise japonaises jappement jappements japper
ls
Affiche le contenu d'un dossier ou les infos d'un fichier.
La commande regorge d'options utiles et combinables :
-l
(long format) : affiche des informations détaillées des fichiers contenus dans le dossier en paramètre.–color
: affiche le résultat en couleur-a
: affiche les fichiers cachés-p
affiche un “/” après les noms de répertoires afin de mieux les identifier-t
(time) classe les résultats par date de dernière modification-r
(reverse) inverse le classement des résultats
ls -lp total 1728 -rw-r--r-- 1 dude dude 4930 2006-11-08 11:34 buf_stag.txt drwxr-xr-x 2 dude dude 4096 2006-02-17 18:58 Desktop/ drwxr-xr-x 3 dude dude 4096 2006-10-21 21:08 dl/ drwx------ 2 dude dude 4096 2006-10-19 14:53 Mail/ -rw------- 1 dude dude 91952 2006-11-07 14:38 mbox drwxr-xr-x 2 dude dude 4096 2006-09-25 11:43 public_html/ -rw------- 1 dude dude 354 2006-10-20 10:27 sent -rw-r--r-- 1 dude dude 140 2006-09-12 02:00 uptime_tiga.txt drwxr-xr-x 20 dude dude 4096 2006-02-22 02:52 vlc-0.8.4a/##
Il est conseillé de faire des alias pour ne pas avoir à saisir les options les plus utilisées. Par exemple si on utilise bash, on édite le fichier de préférence ~/.bashrc
et on ajoute :
alias ll='ls -l --color' alias la='ls -a --color' alias l='ls -p --color'
(ces alias sont souvent déjà présents dans la plupart des distributions Linux).
Puis on relance le terminal.
lsblk
lsblk permet de lister les périphériques de type bloc, c'est-à-dire les supports de stockage.
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 2,7T 0 disk └─sda1 8:1 0 2,7T 0 part └─md127 9:127 0 8,2T 0 raid5 └─vgmd1-lvmd1 252:3 0 8,2T 0 lvm /m/d sdb 8:16 0 2,7T 0 disk └─sdb1 8:17 0 2,7T 0 part └─md127 9:127 0 8,2T 0 raid5 └─vgmd1-lvmd1 252:3 0 8,2T 0 lvm /m/d sdc 8:32 0 2,7T 0 disk └─sdc1 8:33 0 2,7T 0 part └─md127 9:127 0 8,2T 0 raid5 └─vgmd1-lvmd1 252:3 0 8,2T 0 lvm /m/d sdd 8:48 0 2,7T 0 disk └─sdd1 8:49 0 2,7T 0 part └─md127 9:127 0 8,2T 0 raid5 └─vgmd1-lvmd1 252:3 0 8,2T 0 lvm /m/d sde 8:64 0 59,6G 0 disk ├─sde1 8:65 0 487M 0 part /boot ├─sde2 8:66 0 1K 0 part └─sde5 8:69 0 59,2G 0 part ├─ymir2--vg-root 252:0 0 57,2G 0 lvm / └─ymir2--vg-swap_1 252:1 0 2G 0 lvm └─cryptswap1 252:2 0 2G 0 crypt [SWAP]
lshw
Pour lister le hardware de la machine.
lsmod
Affiche le statut des modules du noyau Linux.
lsof
List open files ; permet de lister tous les fichiers ouverts sur le système avec différentes informations dessus (ouverts par quel processus, quel utilisateur, etc).
lsof -i
indique les processus de type internetlsof -ni tcp:25
liste les processus de type internet utilisant du TCP sur le port 25lsof /dev/hda1
liste les fichiers ouvert sur /dev/hda1lsof -p 1102,1103
liste les fichiers ouverts par les processus de PID 1102 ou 1103
lspci
Permet de lister les matériels connecté sur l'ordinateur :
lspci 0000:00:00.0 Host bridge: nVidia Corporation nForce2 AGP (different version?) (rev a2) 0000:00:00.1 RAM memory: nVidia Corporation nForce2 Memory Controller 1 (rev a2) 0000:00:00.2 RAM memory: nVidia Corporation nForce2 Memory Controller 4 (rev a2) 0000:00:00.3 RAM memory: nVidia Corporation nForce2 Memory Controller 3 (rev a2) 0000:00:00.4 RAM memory: nVidia Corporation nForce2 Memory Controller 2 (rev a2) 0000:00:00.5 RAM memory: nVidia Corporation nForce2 Memory Controller 5 (rev a2) 0000:00:01.0 ISA bridge: nVidia Corporation nForce2 ISA Bridge (rev a3) 0000:00:01.1 SMBus: nVidia Corporation nForce2 SMBus (MCP) (rev a2) 0000:00:02.0 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:02.1 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:02.2 USB Controller: nVidia Corporation nForce2 USB Controller (rev a3) 0000:00:04.0 Ethernet controller: nVidia Corporation nForce2 Ethernet Controller (rev a1) 0000:00:06.0 Multimedia audio controller: nVidia Corporation nForce2 AC97 Audio Controler (MCP) (rev a1) 0000:00:08.0 PCI bridge: nVidia Corporation nForce2 External PCI Bridge (rev a3) 0000:00:09.0 IDE interface: nVidia Corporation nForce2 IDE (rev a2) 0000:00:1e.0 PCI bridge: nVidia Corporation nForce2 AGP (rev a2) 0000:01:07.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 6c) 0000:02:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX - nForce GPU] (rev a3)
Pour avoir plus d'infos sur un matériel (certaines options ne sont visibles que par le root) :
lspci -v -s 02:00.0 0000:02:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX - nForce GPU] (rev a3) (prog-if 00 [VGA]) Subsystem: Micro-Star International Co., Ltd.: Unknown device 5710 Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 12 Memory at e0000000 (32-bit, non-prefetchable) [size=16M] Memory at d8000000 (32-bit, prefetchable) [size=64M] Memory at dc000000 (32-bit, prefetchable) [size=512K] Expansion ROM at dc080000 [disabled] [size=128K] Capabilities: [60] Power Management version 2 Capabilities: [44] AGP version 2.0
(voir aussi setpci)
Pour envoyer des mails en mode texte.
Exemple:
mail -s "Objet du mail" toto@titi.com <<END >salut, > >test de mail >sur plusieurs lignes >END
Ou non interactif (en utilisant un fichier source) :
mail -s "Test de mail" toto@titi.com < mail.txt -- -f tutu@tata.fr -F 'Monsieur tutu'
Ici on utilise les options :
-f
(from) pour donner spécifier l'adresse de l'expéditeur du mail.-F
pour spécifier le nom de la personne qui envoie le mail.
man
Commande permettant d'accéder à l'aide des commandes.
Par exemple man ls
permet d'afficher la page de manuel concernant la commande ls
.
On utilise les flèches haut/bas pour changer de ligne, page up/page down (ou espace) pour changer de page, et q
pour quitter.
Les paramètres :
-k <texte>
permet d'afficher toutes les pages de l'aide qui contiennent <texte> dans leur nom ou leur description.-K <texte>
affiche les pages qui contienne <texte>
ex :
man -k fat apropos fat fs (5) - Linux filesystem types: minix, ext, ext2, ext3, xia, msdos, umsdos, vfat, proc, nfs, iso9660, hpfs, sysv, smb, ncpfs mbadblocks (1) - tests a floppy disk, and marks the bad blocks in the FAT mshowfat (1) - shows FAT clusters allocated to file
Les chiffres entre paranthèses indiquent les sections du manuel qui nous concernent. Pour consulter une section, par exemple la 5 de fs :
man 5 fs
mii-tool
Utilitaire qui ressemble à ethtool
mii-tool eth0: negotiated 100baseTx-FD flow-control, link ok eth1: negotiated 100baseTx-FD flow-control, link ok
mkfifo
Permet de créer un tube nommé (un “pipe”). On peut préciser les permissions avec l'option -m suivi des droits en décimal (comme chmod) :
mkfifo -m 600 toto.fifo ll toto.fifo prw------- 1 gaspard writer 0 5 janv. 14:31 toto.fifo
Les pipes apparaissent avec le flag “p” dans un ls.
mktemp
Permet de générer un fichier temporaire avec un nom aléatoire. Par défaut le fichier est créé dans le répertoire temporaire du système ($TMPDIR ou, à défaut, /tmp
), et la commande renvoie le chemin absolu du fichier créé sur la sortie standard :
mktemp /tmp/tmp.XAmxhsyFzl
On peut forcer le format du nom de fichier en donnant le nom incluant au moins 3 “XXX”, qui seront remplacés par une chaine aléatoire :
mktemp toto.XXX /tmp/toto.XAm
Autres paramètres :
-p
permet de spécifier le répertoire dans lequel créer le fichier temporaire-d
permet de créer un répertoire à la place d'un fichier
modconf
Outil permettant de configurer les modules matériels (drivers) utilisés par le noyau de votre système.
mount
mount permet de monter des systèmes de fichier dans l'arborescence. Le fichier /etc/fstab
contient les déclaration des montage habituels et nécessaires au système d'exploitation :
cat /etc/fstab # Périphérique Point de montage FS type Options /dev/hda8 / ext3 defaults,errors=remount-ro 0 1 /dev/hda6 /sav ext3 defaults,user 0 2 /dev/hda7 none swap sw 0 0 /dev/hdc /mnt/cdrom iso9660 ro,user,noauto 0 0 /dev/hda5 /mnt/e vfat defaults,user,uid=1000 0 0 /dev/hdb2 /mnt/i80 ext3 defaults,user 0 2 //dude/g /mnt/dude_g smbfs username=<user>,password=<pwd>,gid=ftpusers,dmask=755 0 0
Il faut noter que le dmask (directory mask) et le fmask (file mask) remplace le unmask traditionnel (utilisé pour gérer les droits des fichiers samba).
umask=022
correspond à unmask=755
Quelques équivalents en ligne de commande :
mount -t vfat /dev/hda5 /mnt/e
mount -t smbfs -o username=rezo,password=rez0 //dude/g /mnt/dude_g
Pour démonter une partition :
umount /mnt/e
ouumount /dev/hda5
En cas de problème au démontage (umount: /mnt/cdrom: device is busy
par exemple) voici quelques pistes :
lsof | grep /mnt/cdrom
pour lister les applications bloquant la ressourcefuser /mnt/cdrom
fait la même chose (l'option-k
permet de killer directement le(s) processus)umount -f /mnt/cdrom
ouumount -l /mnt/cdrom
pour, respectivement, forcer le démontage ou faire un démontage paresseux.
Pour monter une sous-arborescence d'une partition déjà montée (c'est utile par exemple pour émuler des liens symboliques, invisibles par ftp, ou pour ne pas modifier le système de fichiers) on utilise l'option --bind
:
mount --bind /mnt/dude_g/dl/mp3 /sav/mp3
(le dossier /sav/mp3
doit exister)
Pour automatiser le montage d'une sous arborescence au démarrage, on va écrire un script :
vi /etc/init.d/mount_mp3 #!/bin/bash echo Montage de www sur /home/votreutilisateur/www mount --bind /var/www /home/votreutilisateur/www
et le lancer au démarrage :
chmod +x mount_mp3
update-rc.d mount_mp3 defaults
NB : Si la machine qui partage des fichiers redémarre, le point de montage devient invalide. Il faudra le détecter automatiquement, démonter puis remonter le partage.
netcat
Permet de créer des sockets comme client (netcat mon_serveur.fr 200
) ou comme serveur (netcat -l -p 80
) :
netcat -t ns213.186.xx.xx 23
Se comporte comme un client telnetnetcat -l -p 23 > espionne.log
Ecoute sur le port 23 (telnet) et enregistre dans espionne.log tout ce qui est tapé par le client.netcat -l -p 23 < mes_commandes
Exécute les commandes qui sont dans mes_commandes.netcat -l -p 23 -e ma_commande
Exécute la commande après connexion.netcat -vv la_machine_a_scanner 1-100
Permet de lancer un scan sur des machines distantes.netcat -vv -z -i 10000 -r 127.0.0.1 1-200
Permet de scanner aléatoirement les ports de 1 à 100 avec un time out. On évite la détection.
- Créer un automate qui renvoie au client tout ce que ce dernier envoie dans la socket :
côté serveur :
mkfifo /tmp/backpipe nc -l 3333 < /tmp/backpipe | cat 1> /tmp/backpipe
côté client (ici le client tape la commande, puis “écho” dans son prompt) :
nc 127.0.0.1 3333
écho
écho
… et, pour afficher un compteur d'octets transitant par notre socket (côté serveur dans cet exemple), on peut utiliser l'utilitaire Pipe viewer (il faut l'installer via aptitude) :
aptitude install pv [..] mkfifo /tmp/backpipe nc -l 3333 < /tmp/backpipe | pv -b | cat 1> /tmp/backpipe
- autre exemple d'utilisation de netcat : “émuler” un serveur web
côté client :
echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
côté serveur
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <some.file)\r\n\r\n"; cat some.file; } | nc -l 8080
netstat
Couteau suisse de l'administrateur réseau : affiche les connexions réseau, la table de routage, les statistiques des interfaces, les connexions masquées, les messages netlink, et les membres multicast.
Quelques exemples d'utilisation :
netstat -rn
affiche la table de routage (-r
), sans résolution de nom (numérique,-n
)netstat -natp
affiche toutes les connexions (-a
) tcp (-t
) en numérique (-n
) en indiquant le processus qui utilise chaque socket (-p
)netstat -ntl
liste les ports ouverts (listen)netstat -s
permet d'afficher les statistiques réseau de la machine (les compteurs IP, de connections TCP ou UDP)
nslookup
Permet d'interroger un serveur DNS afin d'obtenir des informations sur un domaine ou sur une machine :
nslookup google.fr Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: google.fr Address: 216.239.59.104 Name: google.fr Address: 66.249.93.104 Name: google.fr Address: 72.14.221.104 # pour interroger un serveur (ici 10.1.1.24) en particulier : nslookup google.fr 10.1.1.24 # utiliser nslookup en mode interactif nslookup > server 10.1.1.24 Default server: 10.1.1.24 Address: 10.1.1.24#53 > google.fr Server: 10.1.1.24 Address: 10.1.1.24#53 Non-authoritative answer: Name: google.fr Address: 216.58.209.227
Cet outil est “désuet” car plus maintenu sous Linux (mais pas sous Windows) ; dig
le remplace et est plus complet.
NTP
NTP est le protocole de synchronisation d'horloge d'équipements informatique ; le démon NTPd permet à une machine Linux de se synchroniser régulièrement pour conserver une date/heure fiable sur le long terme.
/etc/ntp.conf
# spécification des serveurs sur lesquels se synchroniser pool 0.fr.pool.ntp.org iburst pool 0.ch.pool.ntp.org iburst pool 0.debian.pool.ntp.org iburst pool 1.debian.pool.ntp.org iburst pool 2.debian.pool.ntp.org iburst pool 3.debian.pool.ntp.org iburst # si besoin, préciser les clients qui peuvent se synchroniser sur nous restrict 127.0.0.1 restrict ::1
Forcer la mise à jour de la date sur un serveur en particulier : ntpdate 1.2.3.4
Vérifier le bon fonctionnement :
ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 0.fr.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000 0.ch.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.000 0.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000 #ntp-2.arkena.ne 193.190.230.65 2 u 34 64 177 14.795 -2.333 0.212 -178.249.167.0 ( 195.66.241.2 2 u 30 64 177 9.682 -0.016 0.152 *eudyptula.init7 162.23.41.10 2 u 37 64 177 13.736 -0.070 0.152 -smtp1.xipalia.c 193.190.230.65 2 u 33 64 177 2.047 -0.552 0.292 -bart.nexellent. 194.242.34.149 2 u 41 64 177 19.428 -0.173 0.256 #pob01.aplu.fr 193.204.114.232 2 u 34 64 177 1.974 -2.490 0.213 #nsa.priv.pw 85.199.214.102 2 u 29 64 177 5.035 -1.964 0.192 #enterprise.frmu 241.73.83.127 3 u 33 64 177 5.173 -0.099 0.106 -tick.ntp.infoma .GPS. 1 u 25 64 177 15.019 0.280 0.182 +sunflower.spide 145.238.203.14 2 u 28 64 177 2.087 -0.193 0.200 -ip139.ip-5-196- 145.238.203.14 2 u 34 64 177 1.841 0.178 0.176 +cluster009.lino 193.190.230.66 2 u 24 64 177 1.967 0.308 0.187 #skarabrae.draxi 131.188.3.222 2 u 32 64 177 17.052 -2.525 0.231 -2001:41d0:b:816 124.216.164.14 2 u 32 64 177 10.852 -0.471 0.171 +2001:41d0:1:8da 193.190.230.66 2 u 29 64 177 2.073 -0.147 0.147 x78.192.0.158 (c .DCFa. 1 u 30 64 177 5.231 20.499 0.273 #eva.aplu.fr 37.187.106.108 3 u 27 64 177 15.125 0.178 0.114 #lotor.mcl.gg 237.17.204.95 2 u 30 64 177 20.259 -4.050 0.217
passwd
(ou yppasswd
) permet de changer le mot de passe du login courant. Il faut connaitre l'ancien mot de passe pour en définir un nouveau.
Le root peut changer le mot de passe de n'importe quel utilisateur :
passwd user
paste
Coller séquentiellement les lignes correspondantes de chaque fichier fourni en paramètre, séparé par des tabulations, vers la sortie standard.
paste toto titi
ping
Permet d'envoyer une requête ICMP echo-request
vers la machine spécifiée en argument, afin de vérifier la connectivité.
Le ping permet également de connaître le RTT (délais aller-retour du paquet). Sous Linux la commande se répète à l'infini (par défaut), il faut sortir avec un ^C
(ctrl+c
).
ping google.com PING google.com (74.125.127.100) 56(84) bytes of data. 64 bytes from pz-in-f100.google.com (74.125.127.100): icmp_seq=1 ttl=44 time=177 ms 64 bytes from pz-in-f100.google.com (74.125.127.100): icmp_seq=2 ttl=44 time=176 ms 64 bytes from pz-in-f100.google.com (74.125.127.100): icmp_seq=3 ttl=44 time=174 ms ^C --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2010ms rtt min/avg/max/mdev = 174.353/176.162/177.575/1.429 ms
Options avancées
ping -c 5
(count) : permet de limiter le nombre de ping envoyé(s) (ici 5)ping -i 2
(interval) : pour spécifier l'intervalle de temps (en seconde) entre 2 pings successifs. Par défaut c'est 1 seconde ; seul le root peut descendre en dessous de 200ms (0.2), pour éviter le flood.ping -I eth1
(Interface) : permet de spécifier l'interface de sortie du ping (ici l'interface eth1, mais on peut aussi préciser une adresse IP source de la machine, la table de routage fera le reste)ping -M do -s 1472
: l'option-M
permet de préciser la stratégie de découverte de la MTU ; do pour empêcher la fragmentation du paquet (bit DF=1), want pour activer la MTU-path-discovery et dont pour ne pas spécifier le flag DF (=0). Cette commande permet donc de vérifier la taille de la MTU entre la source et la destination du PING.ping -n
(numeric) = pas de résolution de nom dans les résultats de la commande (plus rapide)ping -q
(quiet) : seul la ligne de résumé est affichée, pas les pings successifsping -s 1472
(packetsize) : permet de spécifier la taille du payload (en octet) du paquet (auquel il faut ajouter 8 octets d'entête ICMP, 20 d'entête IP et 18 d'entête Ethernet. 1472 + 8 + 20 + 18 = 1518, la taille maximum d'un segment TCP). Cela sert souvent à tester la fragmentation des paquets.ping -t 1
(ttl) permet de spécifier le TTL (Time To Live) des paquets envoyés. Un TTL=1 comme ici permet de s'arrêter au premier hop (=routeur) (on rester dans le réseau commuté)ping -v
(verbose) ping verbeuxping -w 2 -c 3
(deadline)) détermine le temps au bout duquel la commande ping rend la main, indifféremment du nombre de pings envoyés. dans cet exemple la commande va rendre la main au bout de 2 secondes, sans avoir envoyer les 3 pings demandés.ping -W
(timeout) : permet de spécifier, en seconde, le temps d'attente maximum d'une réponse à un ping (si la machine d'en face met trop de temps à répondre). Par défaut, il vaut 2 RTTs.
fping
fping est une alternative à ping, ayant comme différence de pouvoir spécifier de multiples destinations à PINGer.
# va PINGer 5 fois (-c5) le réseau 10.1.2.200/29 (-g), soit de l'adresse 10.1.2.201 à 10.1.2.206, # va faire une résolution DNS inversée des IPs (-n) et n'afficher que le résumé des 5 PINGs/adresse (-q). fping -c5 -g 10.1.2.200/29 -nq test201.local : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.04/0.04/0.04 test202.local : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.23/0.23/0.23 test203.local : xmt/rcv/%loss = 1/0/100% test204.local : xmt/rcv/%loss = 1/0/100% test205.local : xmt/rcv/%loss = 1/1/0%, min/avg/max = 0.31/0.31/0.31 test206.local : xmt/rcv/%loss = 1/0/100% # ici les IPs .203, .204 et .206 ne répondent pas
pmap
Affiche la consommation mémoire et les fichiers ouverts par le processus de PID 30213 :
pmap -d 30213 30213: bash Address Kbytes Mode Offset Device Mapping 08048000 664 r-x-- 0000000000000000 009:00000 bash 080ee000 20 rw--- 00000000000a6000 009:00000 bash 080f3000 20 rw--- 00000000080f3000 000:00000 [ anon ] 08177000 1096 rw--- 0000000008177000 000:00000 [ anon ] b7c4d000 28 r--s- 0000000000000000 009:00000 gconv-modules.cache b7c54000 40 r-x-- 0000000000000000 009:00000 libnss_files-2.7.so b7c5e000 8 rw--- 0000000000009000 009:00000 libnss_files-2.7.so b7c60000 36 r-x-- 0000000000000000 009:00000 libnss_nis-2.7.so b7c69000 8 rw--- 0000000000008000 009:00000 libnss_nis-2.7.so b7c6b000 84 r-x-- 0000000000000000 009:00000 libnsl-2.7.so b7c80000 8 rw--- 0000000000014000 009:00000 libnsl-2.7.so b7c82000 8 rw--- 00000000b7c82000 000:00000 [ anon ] b7c84000 28 r-x-- 0000000000000000 009:00000 libnss_compat-2.7.so b7c8b000 8 rw--- 0000000000006000 009:00000 libnss_compat-2.7.so b7c8d000 1256 r---- 0000000000000000 009:00000 locale-archive b7dc7000 4 rw--- 00000000b7dc7000 000:00000 [ anon ] b7dc8000 1364 r-x-- 0000000000000000 009:00000 libc-2.7.so b7f1d000 4 r---- 0000000000155000 009:00000 libc-2.7.so b7f1e000 8 rw--- 0000000000156000 009:00000 libc-2.7.so b7f20000 16 rw--- 00000000b7f20000 000:00000 [ anon ] b7f24000 8 r-x-- 0000000000000000 009:00000 libdl-2.7.so b7f26000 8 rw--- 0000000000001000 009:00000 libdl-2.7.so b7f28000 188 r-x-- 0000000000000000 009:00000 libncurses.so.5.7 b7f57000 12 rw--- 000000000002f000 009:00000 libncurses.so.5.7 b7f5e000 8 rw--- 00000000b7f5e000 000:00000 [ anon ] b7f60000 4 r-x-- 00000000b7f60000 000:00000 [ anon ] b7f61000 104 r-x-- 0000000000000000 009:00000 ld-2.7.so b7f7b000 8 rw--- 000000000001a000 009:00000 ld-2.7.so bf968000 84 rw--- 00000000bffeb000 000:00000 [ stack ] mapped: 5132K writeable/private: 1324K shared: 28K
pr
pr permet de mettre en forme des fichiers texte pour l'impression.
Paramètres principaux :
--columns=<NB>
: définir le nombre de colonne en sortie-h <TITRE>
: affiche un titre en tête de page, à la place du nom de fichier-l <NB_LIGNE>
: définit le nombre de lignes de la page (par défaut 66)-n
: affiche les numéros de ligne-w <NB_CAR>
: définit le nombre de caractère de chaque ligne (par défaut 72)
Exemple :
ls | pr -n
ps
Affiche la liste des processus :
ps aux
: afficher tous les processusps -ef
: à peu près pareilps U <user>
afficher tous les processus lancés par <user>
Les options annexes :
-w
permet un affichage long (wide) afin que l'affichage des noms des processus ne soient pas coupés-C <nom du processus>
pour n'afficher que les lignes qui match ledit processus-l
affichage en long format
Pour afficher des champs personnalisés, on utilise le paramètre o
puis on liste les colonnes à afficher ; on peut définir leur taille en les suffixant par :<taille>
:
ps -o "%p %r %y %x %n %c %a" PID PGID TTY TIME NI COMMAND COMMAND 20406 20406 pts/13 00:00:00 19 burn.sh /bin/sh ./burn.sh 2 1000000 ps axo ruser:8,euser:8,pid,comm,%cpu,%mem,state,tty,nice RUSER EUSER PID COMMAND %CPU %MEM S TT NI root root 1 systemd 0.0 0.0 S ? 0
pstree
pstree permet d'afficher l'arborescence, à la façon de tree pour les répertoires, des processus en cours d'exécution.
pushd/popd/dirs
pushd, popd et dirs sont des commandes spécifiques à bash ; elles permettent de contrôler une pile de noms de répertoires successifs, afin d'y revenir plus facilement (fonctionnement LIFO, Last In First Out) :
pushd <REPERTOIRE>
permet de se rendre dans REPERTOIRE et de l'empilerpopd
permet de revenir au dernier répertoire enregistré par pushd ; puis le dépile.dirs
permet de lister le contenu de la pile de répertoires
Exemple d'utilisation :
# état initial : on est dans notre home # et la pile est vide (elle ne contient que le répertoire courant) $ pwd /home/toto $ dirs ~ # on change de répertoire (et on l'empile) $ pushd /tmp /tmp ~ # on change encore de répertoire (et on l'empile à nouveau) $ pushd /var/log /var/log /tmp ~ # on retourne dans le précédent répertoire, et on le dépile $ popd /tmp ~ # on retourne à la case départ $ popd ~
pwck
pwck vérifie l´intégrité des fichiers de mots de passe. Il vaut mieux le lancer en root car il doit accéder notamment à /etc/passwd
et /etc/shadow
.
readlink
Affiche la valeur d'un lien symbolique ou le nom canonique d'un fichier (c'est-à-dire son chemin absolu + son nom de fichier).
readlink -f toto.sh /tmp/toto.sh
C'est l'équivalent (en plus compatible) de la commande bash realpath
.
Dans un script, pour n'afficher que son chemin absolu, utiliser dirname $(readlink -f $0)
(ou, en bash, dirname $(realpath $0)
)
reset
Permet de réinitialiser le terminal, notamment quand on affiche un binaire qui provoque des affichages bizarres.
rev
Permet d'inverser l'ordre des caractères des lignes d'un fichier ou d'un flux.
echo 'tito' | rev otit
route
Permet de contrôler la table de routage de la machine.
- Pour voir la table de routage actuelle :
route -n
… qui équivaut à netstat -rn
, commande plus universelle.
- Ajouter l'adresse de la passerelle (gw ou gateway cela dépend)
route add default gw 192.168.0.1 netmask 255.255.255.0
- Ajouter un host :
route add -host 195.98.246.28 gateway 192.168.0.1
- Ajouter un réseau :
route add -net 195.98.246.0 netmask 255.255.0.0 gateway 192.168.0.1 route add -net 192.168.100.0/24 gw 192.168.0.253
- Pour supprimer une route :
route del default route del -net 192.56.76.0 netmask 255.255.255.0 dev eth0 route del -net 192.168.100.0/24 -gw 192.168.0.253
- Pour ajouter un DNS, il faut agir sur le fichier
/etc/resolv.conf
:
echo "nameserver 193.252.19.3" >> /etc/resolv.conf
runlevel
Commande qui affiche le runlevel courant et précédent. S'il n'y a pas de précédent, affiche “N”.
runlevel
N 3
.. à peu près similaire à la commande who -r
.
script
script permet d'enregistrer dans un fichier tout ce qui s'affiche sur un terminal. Par défaut il lance le shell indiqué dans la variable d'environnement $SHELL, et enregistre dans le fichier ./typescript. On quitte donc script quand on quitte le shell (exit
ou Ctrl+D
).
On peut spécifier les paramètres suivants :
-a (append) : ajouter les données à la fin du fichier (sans l'écraser) -c <COMMAND> : précise la commande à lancer à la place de $SHELL. Cela peut servir à lancer un autre terminal que celui par défaut, ou une session SSH par exemple. -f (fifo) permet d'écrire en temps réel la sortie du terminal dans le fichier. On peut ainsi récupérer la session en temps réel avec un ''tail -f <fichier_de_log>'' -q (quiet) : mode moins verbeux -t : ajout des informations de timestamp sur la sortie d'erreur standard
sed
Stream EDitor est une commande qui permet d'appliquer différentes transformations prédéfinies à un flux séquentiel de données textuelles.
- Filtre pour remplacer une IP par X.X.X.X
sed "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/X.X.X.X/g"
- Convertir les minuscules en majuscules (ou inversement)
echo "La PhraSe avec Des LeTTres n'iMpoRte comMEnt" | sed 's/.*/\L&/' la phrase avec des lettres n'importe comment # et respectivement 's/.*/\U&/' pour convertir le texte en majuscules
(Le “&” représente le motif qui matche)
- Ajouter une ligne en début de fichier :
sed -i '1iPremièreLigne' toto.txt
(il s'agit d'un “un” i suivi du texte à insérer)
- Afficher la 3ème ligne d'un fichier (et sauvegarder le fichier source avec le suffixe “.bck”) :
sed -i".bck" -n '3p' <fichier>
- Afficher un fichier à partir de la 3ème ligne :
sed -n '3,$p' <fichier>
- Afficher les lignes de 2 à 5 d'un fichier ; alternative : afficher les lignes de 2 jusqu'à ce qu'une expression régulière matche (dans cet exemple : /sys/)
sed -n '2,5p' <fichier> sed -n '2,/sys/p' <fichier>
- Supprimer les lignes contenant toto dans le fichier toto.txt :
sed -i '/toto/d' toto.txt
- Supprimer les lignes ne contenant pas toto dans le fichier toto.txt :
sed -i '/toto/!d' toto.txt
- Supprimer les lignes vides
sed '/^$/d' toto.txt
- supprimer (
d
) les première lignes du début d'un fichier (0,
) jusqu'à un motif (^begin
dans cet exemple), et supprimer les dernières lignes depuis un motif (/^end/
) jusqu'à la fin du fichier (,$
) :
sed -e '0,/^begin/d' -e '/^end/,$d' fichier.txt
- On peut réutiliser des patterns entre () qui ont matchées avec \1, \2. Par exemple, pour inverser les 3 termes séparés par des virgules :
echo "tata,toto,tutu" | sed 's/\(.*\),\(.*\),\(.*\)/\3,\2,\1/' tutu,toto,tata
\1 représente la première pattern entre parenthèses, \2 la seconde et \3 la troisième.
- Substitution multi-lignes : avec les buffers de sed on peut faire des substitutions de chaines même si elles sont réparties sur plusieurs lignes ; par exemple on veut remplacer la chaine “je pense” par “nous pensons”, même si le “je” et le “pense” sont séparés par plus d'un espace ou par un saut de ligne.
cat fichier.txt je pense qu'il bluff je pense je pense sed -e ' N s/je\([ \n]\{1,\}\)pense/nous\1pensons/g P D' fichier.txt nous pensons qu'il bluff nous pensons nous pensons
Ici : N indique à sed de lire la ligne d'après, P affiche le résultat, et D supprime la 2nde ligne puisqu'elle a déjà été traitée. On notera qu'on va à la ligne pour chaque commande ; on aurait pu aussi les séparer par un “;” : sed -e 'N;s/je\([ \n]\{1,\}\)pense/nous\1pensons/g;P;D' fichier/txt
, mais on perd un peu en lisibilité.
- Substituer les fins de lignes par un espace
sed ' :s # étiquette N # on ajoute la ligne suivante s/\n/ / # on substitue les fins de lignes par un espace b s # on se branche à l'étiquette ' fichier.txt
- Utiliser les variables du shell : sed peut utiliser le contenu de variables du shell dans ses comparaisons ; pour cela on doit les entourer de double quotes et les sortir du simple quote de l'expression régulière du sed. Voyez plutôt : je veux remplacer le texte “titi” par le contenu de ma variable VAR déclarée au préalable :
VAR=test echo -e "toto\ntiti" | sed s/titi/"$VAR"/ toto test
# Dans certains cas, on est obligé de conserver les quotes qui entourent l'expression sed ; dans ce cas on procèdera de la sorte :
echo -e "toto\ntiti" | sed 's/titi/'"$VAR"'/'
Insérer de la couleur
Pour mettre de la couleur dans le résultat de la recherche, on utilise le caractère d'échappement \x1b
:
echo "toto titi tata" | sed -e 's/titi/\x1b[0;30;47m&\x1b[0m/' # va surligner titi en gris.
Supprimer le formatage
L'effet inverse du précédente filtre : permet de supprimer le formatage (l'emphase, la couleur du texte ou du background) :
ls --color=y | sed 's/\x1b\[[0-9;]*m//g'
Liens utiles
- Sed - Introduction à SED sur ccc
- la commande sed sur openclassrooms
seq
Affiche une séquence de nombres ; syntaxe = seq [OPTION]… FIRST INCREMENT LAST
Options :
-f, –format=FORMAT
use printf style floating-point FORMAT-s, –separator=STRING
, –separator=STRING ; use STRING to separate numbers (default: \n)-w, –equal-width
equalize width by padding with leading zeroes
seq 3 1 2 3
seq -s" " -2 0.5 -1 -2,0 -1,5 -1,0
set
set -o vi
permet de pouvoir utiliser les commandes vi dans le shell.
Dans un script bash, set -- $VAR
découpe le contenu de la variable $VAR en série d'argument $1, $2, etc… ; comme pour une ligne de commande.
VAR="un deux trois" set -- $VAR echo "$3 $2 $1" trois deux un
shuf
shuf (et non pas snuff) permet d'afficher une permutation aléatoire des lignes de son flux d'entrée (pas nécessairement des nombres).
Paramètres :
-n X
: permet de n'afficher que les X premières lignes du tirage-i X-Y
: permet de spécifier un intervalle de nombres qui seront permutés (X la borne inférieure et Y la borne supérieure)-e
: permet de traiter chaque paramètre comme un flux d'entrée
Exemple :
- faire un tirage de 1-2-3 (les 2 lignes sont équivalentes) :
echo -e "1\n2\n3" | shuf
shuf -e 1 2 3
shuf -i 1-3
- simuler un tirage de l'euro-million :
echo $(shuf -i 1-49 -n 5) - $(shuf -i 1-10 -n 1)
shutdown
Permet d'éteindre le système à un instant donné, à condition d'être root.
# shutdown -r now
permet de redémarrer (reboot) le système (alias :reboot
)# shutdown -h now
permet d'arreter (halt) le sytème (alias :halt
)
Pour commander un reboot ou un arrêt dans 12 minutes :
shutdown -h +12
ou à heure fixe :
shutdown -h 01:00
Pour annuler (cancel) la planification d'une commande :
shutdown -c
Pour redémarrer et forcer un fsck lors du démarrage :
shutdown -r -F now
sort
sort permet de classer par ordre alphabétique les lignes d'un fichier texte. Si aucun fichier n'est spécifié, sort lit l'entrée standard.
sort fichier.txt
abc
def
ghi
Ceci pose un problème lorsqu'on veut classer des nombres :
echo -e "11\n3" | sort 11 3
On aurait voulu qu'il les classe dans l'ordre croissant et non alphabétique. Pour trier les nombres, on utilise le paramètre -n
qui précise qu'on veut un tri numérique :
echo -e "11\n3" | sort -n 3 11
Paramètres utiles :
-n
(numeric) : pour trier des nombre dans l'ordre croissant-r
(reverse) : pour inverser le tri-u
(uniq) : pour supprimer les doublons-i
(ignore nonprinting) : ne tient pas compte des espaces, tabulations, …-f
(ignore case) : ne tient pas compte de la casse (majuscules/minuscules)-k n
trier selon la n-ième colonne. On peut faire suivre par d'autre paramètres (ex :-k2r
pour trier selon la 2nde colonne en mode renverse)-t
précise le séparateur de colonne (par défaut un espace blanc)-V
tri par numéro de version ; peut servir d'alternative à -n
Exemple :
- Trier des adresses IP (le
-n
ne suffit pas car il ne tient compte que du premier nombre de chaque ligne) :
sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 adresses.txt
- trier selon la 2nde colonne
echo -e "toto aa\ntota bb\ntiti cc\n" | sort -k2 toto aa tota bb titi cc
split
split permet de séparer un fichier en plusieurs plus petits (par exemple ici en fichiers de 10 Mo):
split -b 10m toto
Les fichiers ainsi créés seront nommés xaa, xab, xac et ainsi de suite autant que nécessaire.
Pour les rassembler il suffit d'utiliser cat :
cat xaa xab xac xad xae > 50meg
ss
ss est un outil pour afficher les statistiques des sockets (connexions réseau) qui ressemble pas mal à netstat.
ss -s Total: 157 (kernel 750) TCP: 97 (estab 50, closed 29, orphaned 1, synrecv 0, timewait 28/0), ports 3328 Transport Total IP IPv6 * 750 - - RAW 0 0 0 UDP 6 4 2 TCP 68 63 5 INET 74 67 7 FRAG 0 0 0
Options :
-n
ne résout pas les numéros de port-l
affiche tous les ports en écoute-o state FILTER
filtrer sur l'état de la connexion TCP ; avec filter parmis : established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen, closing, all, connected, synchronized, bucket, et big
Exemples :
# afficher toutes les connexions HTTP ouvertes ss -o state established '( dport = :http or sport = :http )' # afficher toutes les connexions HTTP établies avec l'IP destination 10.0.0.1 ss dst 10.0.0.1:80 # afficher les connexions dont le port destination est supérieur à 1024 ss dport \> 1024
stat
Commande permettant d'afficher des informations sur un système de fichier ou juste un fichier.
# Affichage des informations du fichier toto.txt $ stat toto.txt Fichier : « toto.txt » Taille : 0 Blocs : 0 Blocs d'E/S : 1048576 fichier vide Périphérique : 37h/55d Inœud : 36311392 Liens : 1 Accès : (0644/-rw-r--r--) UID : (1515/dude) GID : ( 1515/ dsi) Accès : 2018-08-30 17:16:35.295782414 +0200 Modif. : 2018-08-30 18:15:02.295782414 +0200 Changt : 2018-08-30 17:16:35.295782414 +0200 Créé : -
On peut filtrer le résultat par type d'information recherchée avec l'option -c
; par exemple n'afficher que la date de dernière modification du fichier (au format human-readable) : %y
$ stat -c "%y" toto.txt 2018-08-30 18:15:02.295782414 +0200
strings
Affiche les chaines de caractères imprimable dans le fichier spécifié (c'est donc peu utile sur les fichiers texte).
strings toto.exe
su
Permet de lancer un shell sous un autre nom d'utilisateur. Par défaut (si on ne fourni pas de paramètre) il s'agit de root.
su toto
pour devenir toto (cela prompt le mot de passe root)
su
pour devenir root.
su -
pour devenir root avec avec la séquence de login complete (héritage des chemins vers les commandes, l'environement de l'utilisateur…)
su -c 'find / -name *.c'
permet d'executer la une seule fois en root (su -c 'command' <nom d'utilisateur> pour l'exécuter une fois sous un utilisateur particulier).
su laurent
pour devenir l'utilisateur laurent
tac
Comme cat, mais à l'envers :) tac affiche le fichier de la dernière à la première ligne.
tail
Affiche les 10 dernières lignes d'un fichier ou d“un flux en entrée :
tail ~/.bash_history su vim /mnt/dude_e/save/defs.txt su vim buf_stag.txt pwd cd /usr/pkg/bin/lpr -P Black sncf-confirmation man cvs w man calc
Options :
-n <nb>
: affiche les <nb> dernières lignes (au lieu des 10 par défaut) :tail -n2 toto.txt
(d'ailleurs le “n” est facultatif,tail -2 toto.txt
fonctionne aussi bien)-n +<nb>
affiche toutes les lignes après la <nb>-ième :tail -n +2 toto.txt
affichera toutes les lignes à partir de la 2ème.-f
: la commandetail
ne se termine jamais et affiche à l'écran toute ligne ajoutée au fichier en paramètre (par exempletail -f /var/log/auth.log
permet de suivre en temps réel les logs d'authentification de la machine)
tar
Un outil d'archivage de données qui permet de créer une archive à partir de fichiers/arborescence. par exemple on veut archiver le répertoire ./toto/ et tout son contenu (répertoires et fichiers normaux).
tar cvf toto.tar ./toto
(toto.tar désigne le nom de l'archive qu'on veut créer, il doit avoir l'extension .tar
)
On peut archiver ET compresser le fichier grâce à gunzip (option z
) :
tar czvf toto.tar.gz ./toto
Plus tard, pour le désarchiver :
tar zxf toto.tar
telnet
Permet de se connecter à un serveur distant avec le protocole telnet.
telnet google.fr [80]
Le port (ici 80) est facultatif (par défaut 23).
Envoi d'un mail
Pour envoyer un mail en SMTP via l'outil telnet :
# lancer l'invite telnet $ telnet telnet> open 10.1.1.55 25 Trying 10.1.1.55... Connected to 10.1.1.55. Escape character is '^]'. 220 exemple.fr ESMTP Server Ready. Tue, 9 Apr 2019 14:39:14 +0200 EHLO toto 250-exemple.fr Hello client.exemple.fr [10.1.2.201], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 25000000 250-DSN 250-ETRN 250-DELIVERBY 250 HELP MAIL from:toto@exemple.fr 250 2.1.0 toto@exemple.fr... Sender ok RCPT to:dest@domaine.fr notify=success,failure 250 2.1.5 dest@domaine.fr... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Subject: Test de mail Ceci est un test de msg . 250 2.0.0 x39CdEPw012136 Message accepted for delivery QUIT 221 2.0.0 exemple.fr closing connection Connection closed by foreign host.
time
Permet de calculer le temps d'exécution d'une commande :
time sleep 3 real 0m3.015s user 0m0.000s sys 0m0.000s
La commande retourne le temps réel (real), le temps en mode utilisateur (user) et le temps en mode système (sys).
Pour mesurer le temps de plusieurs commandes pipées (chainées avec un pipe |
), utiliser plutôt la formulation :
time -f "%es" bash -c "ls | wc"
top
Affiche la liste des processus et permet d'observer en temps réel l'activité de la mémoire et du processeur.
tr
Translate or delete characters.
Exemples :
# remplacer les sauts de ligne en espaces cat "$FIC" | tr "\n" " " # convertir toutes les majuscules d'une chaine en minuscules : echo "La PhraSe avec Des LeTTres n'iMpoRte comMEnt" | tr '[:upper:]' '[:lower:]' la phrase avec des lettres n'importe comment # qui équivaut à : echo "La PhraSe avec Des LeTTres n'iMpoRte comMEnt" | tr A-Z a-z
traceroute
Traceroute permet de déterminer la route prise par un paquet pour atteindre une IP cible.
L'outil envoie un paquet à IP
avec un TTL de 1. Du coup, le paquet n'ira pas plus loin que le premier routeur qui enverra un paquet ICMP TTL Exceeded
avec son adresse IP. En incrémentant le TTL jusqu'à atteindre la destination on obtient les IPs de tous les routeurs intermédiaires.
Certains routeurs ne communiquent pas d'informations et affichent ??? ou * * *.
traceroute google.fr traceroute: Warning: google.fr has multiple addresses; using 66.102.9.104 traceroute to google.fr (66.102.9.104), 30 hops max, 40 byte packets 1 smc (192.168.0.254) 0.346 ms 0.315 ms 0.305 ms 2 82.234.75.224 (82.234.74.254) 28.637 ms 28.650 ms 28.549 ms 3 * * * 4 * * * 5 th1-6k-2-po20.intf.routers.proxad.net (212.27.50.158) 29.221 ms * * 6 ldc-6k-1-v806.intf.routers.proxad.net (212.27.57.178) 29.470 ms 28.995 ms * 7 google.freeix.net (213.228.3.136) 31.056 ms 29.233 ms 29.521 ms 8 216.239.43.39 (216.239.43.39) 46.563 ms 46.859 ms 46.318 ms 9 64.233.174.113 (64.233.174.113) 46.504 ms 72.14.232.233 (72.14.232.233) 46.352 ms 46.461 ms 10 64.233.174.187 (64.233.174.187) 46.557 ms 52.380 ms 72.14.232.239 (72.14.232.239) 46.765 ms 11 64.233.174.18 (64.233.174.18) 48.761 ms 49.411 ms 48.771 ms 12 66.102.9.104 (66.102.9.104) 46.767 ms 46.974 ms 46.572 ms
type
type est une commande interne de bash qui indique comment chaque nom doit être interprété si on l'utilise en nom de commande.
-a
: affiche tous les emplacements de l'exécutable en paramètre (les alias et les fonctions) et son code source
# lister toutes les fonctions declare -F [..] declare -f titreterm # afficher le code de celle-ci (équivalent de "declare -f titreterm") type -a titreterm titreterm est une fonction titreterm () { if [[ $# -eq 1 && -n $1 ]]; then echo -ne "\033]0;$1\007"; fi }
update-rc.d
Les scripts (potentiellement) lancés au démarrage sont placés par convention dans /etc/init.d/
. Lorsque Linux démarre en runlevel X, il lance automatiquement au démarrage les exécutables situés dans le répertoire /etc/rcX.d
, avec 0 ⇐ X ⇐ 6, ceux-ci étant des liens symboliques vers les scripts de /etc/init.d/
. Pour ajouter ou retirer un script du démarrage de la machine, il faut donc créer le script dans /etc/init.d/
et placer un lien symbolique dans le répertoire associé au runlevel voulu.
Par convention ces liens symboliques sont de la forme <S|K><nombre><nom du script> : par exemple S23ntp.
- S si on veut lancer le script ; K pour ne pas le lancer.
- <nombre> va déterminer l'ordre de lancement (croissant) des scripts du répertoire, de 00 à 99 (00 étant lancé en premier).
Quand on veut ajouter un programme au démarrage c'est donc assez fastidieux ; heureusement il existe une commande qui le fait à votre place, c'est update-rc.d
.
Pour retirer le démon cupd de tous les runlevel (cela supprimera les liens symboliques des répertoires /etc/rcX.d) :
update-rc.d -f cupsys remove Removing any system startup links for /etc/init.d/cupsys ... /etc/rc1.d/K19cupsys /etc/rc2.d/S19cupsys /etc/rc3.d/S19cupsys /etc/rc4.d/S19cupsys /etc/rc5.d/S19cupsys
On voit qu'il se lançait au démarrage de la machine en runlevel 2 (démarrage normal), 3, 4 et 5, mais pas en runlevel 1 (single user).
Pour ajouter un script au démarrage de la machine :
update-rc.d mount_mp3 defaults
Cela va placer des liens pour les runlevel 2 à 5.
Liens
umount
Démonter une partition (cf mount).
uname
Affiche des informations sur le système.
uname -a NetBSD stag-12-11 3.99.17 NetBSD 3.99.17 (GENERIC_MOD) #0: Fri Apr 21 15:32:24 CEST 2006 dude@stag-12-11:/usr/obj/sys/arch/i386/compile/GENERIC_MOD i386
ou encore
uname -a Linux tiga 2.6.16-2-k7 #1 Fri Aug 18 19:48:42 UTC 2006 i686 GNU/Linux
On peut sélectionner la colonne de sortie :
-i
nom de la plateforme matérielle (unknown)-m
nom de l'architecture de la machine (i686)-n
nom d'hôte (tiga)-o
nom du sytème d'exploitation (GNU/Linux)-p
type de processeur (unknown)-r
version du noyau (2.6.16-2-k7)-s
nom du noyau (Linux)-v
version du noyau (#1 Fri Aug 18 19:48:42 UTC 2006)
On peut obtenir des informations encore plus détaillées avec la commande :
# cat /proc/version Linux version 2.6.26-1-686 (Debian 2.6.26-13) (waldi@debian.org) (gcc version 4.1.3 20080704 (prerelease) (Debian 4.1.2-24)) #1 SMP Sat Jan 10 18:29:31 UTC 2009
uniq
Évite la répétition de lignes adjacentes identiques ; prend en paramètre un fichier ou son entrée standart.
-u
seules les lignes existant en un seul exemplaire sont fournies-n
le nombre d'occurrences de chaque ligne est affiché
uptime
Indique depuis quand le système à été mis en route.
uptime 15:00:52 up 1 day, 1:35, 2 users, load average: 0.00, 0.00, 0.00
Dans l'ordre, cela affiche :
- l'heure
- l'uptime (temps écoulé depuis le dernier démarrage de la machine)
- le nombre d'utilisateur(s) loggués sur la machine
- la charge CPU instantanée, depuis 5 minutes et depuis 15 minutes
useradd/userdel
Pour créer ou supprimer un utilisateur sur le système.
Exemple de création de l'utilisateur toto en précisant l'UID que l'on souhaite (-u
), la création d'un groupe éponyme (-U
), la création du répertoire home (-m
), l'emplacement de sa home (-d /home/toto
), son shell (-s /bin/bash
).
useradd -u 59211 -U -m -d /home/toto -s /bin/bash toto
usermod
Pour modifier les paramètres d'un utilisateur (par exemple pour user1) : changer son groupe initial (-g), son shell par défaut (-s), et l'ajouter aux groupes secondaires supplémentaires ftpusers et smbusers (-a -G) :
usermod -g user1_grp -s /bin/bash -a -G ftpusers,smbusers user1
Pour supprimer tous les groupes supplémentaires d'un utilisateur :
usermod -G "" user1
vi
Vi (abréviation de visual) est un éditeur de texte en mode console présent par défaut sur la plupart des distributions Linux (d'où l'intérêt de la maîtriser). Il existe différentes versions plus ou moins légères (vi, vim.basic, vim.tiny, gvim, etc) ; plus d'info ici.
vi*
Composés du préfixe vi (comme d'éditeur de texte) suivi de la commande à configurer, vipw, vigr ou visudo sont des “mots-valise” permettant d'éditer proprement des parties critiques d'un système Linux.
vipw
pour éditer les utilisateurs (fichier /etc/passwd)vigr
pour éditer les groupes (fichier /etc/group)visudo
pour éditer la configuration de la commandesudo
(fichier /etc/sudoers)
Leur utilisation est vivement recommandée dans la mesure où, souvent, leur action ne se limite pas à l'édition du fichier de conf mais permet également :
- de mettre à jour d'autres fichiers liés, comme dans le cas de vipw ou vigr (pour MAJ respectivement /etc/shadow et /etc/gshadow)
- de vérifier la syntaxe pour ne pas bloquer le système en cas d'erreur (visudo par exemple)
L'éditeur de texte lancé est celui renseigné dans la variable d'environnement $VISUAL, sinon celui de $EDITOR ; et seulement si aucun n'est spécifié, vi sera utilisé par défaut.
Au passage, pour configurer l'éditeur de texte par défaut, il existe plusieurs manières :
- update-alternatives –config editor sous Debian
- select-editor (utilise la variable $SELECTED_EDITOR, préemptée par $VISUAL et $EDITOR)
- éditer le fichier ~/.bashrc pour y ajouter l'une des lignes suivantes :
export VISUAL=vi export EDITOR=vi
vmstat
Affiche des statistiques sur la mémoire virtuelle.
vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 424 69556 145732 53768 0 0 157 106 163 186 1 1 98 1
bi et bo sont les IOs du système.
w
Affiche le résultat de la commande uptime
ainsi que la liste des utilisateur loggués sur la machine.
w 14:58:52 up 1 day, 1:33, 2 users, load average: 0,00, 0,00, 0,00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT dude pts/0 stag-12-11.ipv6. 14:20 0.00s 0.13s 0.00s w dude pts/1 dude Mon18 4:51 0.07s 0.07s -bash
wall
Permet d'envoyer un message aux utilisateurs du système : soit en précisant un fichier en argument, soit en éditant directement le message.
wall *** test : coucou tlm ! *** <Ctrl+D> # pour sortir de l'édition du message
watch
watch <commande>
permet de relancer automatiquement <commande> toutes les 2s par défaut, en plein écran
On peut spécifier l'intervalle de temps pour relancer la commande (-n <temps>
), et surligner les différences (-d
).
Par exemple, pour lancer la commande free
toutes les secondes et surligner les différences :
watch -n 1 -d free
wc
Est un utilitaire qui permet d'afficher (respectivement) le nombre de lignes, mots, et caractères (en fait il s'agit du nombre d'octets) du fichier :
wc /etc/passwd 32 39 1380 /etc/passwd
On peut ne sélectionner que certaines colonnes de la sortie, en n'affichant que les lignes (-l
), les mots (-w
), les octets (-c
).
wget
wget est un outil permettant de récupérer des pages web en CLI.
wget http://www.exemple.com
Pour utiliser un proxy : ajouter les lignes suivantes au fichier ~/.wgetrc
:
use_proxy=yes http_proxy=10.0.0.1:8080 https_proxy=10.0.0.2:8043
… ou utiliser, en CLI :
wget -e use_proxy=yes -e http_proxy=10.0.0.1:8080 http://www.exemple.com wget -e use_proxy=yes -e https_proxy=10.0.0.2:8043 https://www.exemple.com
whatis
Affiche une brève description d'une commande.
whatis cat cat (1) - concatenate files and print on the standard output
whereis
Affiche le nom d'une commande, l'emplacement de celle-ci ainsi que de sa page de manuel.
whereis cat cat: /bin/cat /usr/share/man/man1/cat.1.gz
which
Permet de localiser le binaire d'une commande
which ls /bin/ls
who
Affiche les utilisateurs connectés à la machine, et depuis quand.
who root pts/0 Jun 9 10:15 (10.0.0.20)
Permet aussi d'afficher le runlevel précédent et courant (comme la commande runlevel
) :
who -r run-level 3 May 31 11:36 last=S
xargs
Redirige son entrée sur les paramètres d'une autre fonction, donnée en paramètre :
echo "toto" | xargs echo
enverra “toto” dans les paramètres du deuxième echo. Mais j'avoue, l'intérêt reste limité.
en revanche :
ps auxw | grep serveur.php | grep -v grep | awk '{print $2}' | xargs kill -15
permet de récupérer le pid de serveur.php pour envoyer lui envoyer un SIGTERM ; car kill
ne lit pas son entrée standart ; il est donc impossible de le “piper” (|
) avec d'autres commandes.
yum
# lister les fichiers installés par un package : # (cette cmd est installée par le package yum-utils) repoquery -l package # activer tous les repos pour une recherche : yum --enablerepo=* search pdsh # installer un rpm local : yum localinstall pdsh-rcmd-rsh-2.31-1.el7.x86_64.rpm pdsh-rcmd-ssh-2.31-1.el7.x86_64.rpm pdsh-2.31-1.el7.x86_64.rpm