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 : Le réseau sous Linux
(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
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'utiliser apt-get safe-upgrade
, apt-get dist-upgrade
ou apt-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ètesapt-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 :
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>
Détecter une adresse IP usurpée / duplicate :
arping -D -q -I eth0 -c 2 192.168.0.5
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.
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).
On peut spécifier l'heure d'exécution en chiffres au format : at -t “YYMMDDmmHH”
.
at
: créer une tâcheatq
: lister les tâches programmées et affiche leur IDat -c <ID>
: afficher le contenu de la tâche n°<ID>atrm <ID>
: supprimer la tâche <ID>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
.
On peut consulter les journaux d'exécution du processus atd par défaut dans le fichier /var/log/messages
:
Jul 19 02:30:00 bast2 atd[221981]: Starting job 17 (a0001101a5b44a) for user 'admin' (2006)
Permet d'auditer / debugguer des comportements bas niveau du système, comme par exemple déterminer quel processus réalise des requêtes :
apt install auditd # mise en place de l'audit auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET # lister les logs de l'audit ausearch -i -ts today -k SOCKET # supprimer l'audit auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
src: how-can-i-identify-which-processes-are-generating-udp-traffic
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 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 retourne le nom du fichier fourni en paramètre, sans son chemin.
Un équivalent moins coûteux de la fonction basename $FIC
est : ${FIC##*/}
Permet de lancer une commande quand le système n'est pas trop chargé (charge CPU < 1.5).
(background) Placer un job en arrière-plan
(voir jobs
)
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"
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 2001Permet 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)
cat > list -
Utiliser ^C (ctrl+c
) pour sortir.
# é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.
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 travailchemin 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” :
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
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>
Permet de changer et lister les attributs de fichiers sur une partition ext2-3
chattr +i /etc/services
chattr +a /var/log/messages
chattr +s fichier
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
Change les permissions sur un fichier. Syntaxe simplifiée : chmod [-R] DROITS FICHIERS
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 :
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
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
, ou o
pour les champs user, group ou other.r
, w
ou x
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
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 permet d'effacer le contenu du terminal (raccourci clavier : ctrl+c
.
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.
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
Permet de lancer la commande fournie en paramètre en ne la recherchant que dans les commandes système ou dans le PATH. Invoquée avec -v
ou -V
, affiche une description de la commande ; invoquée avec -p
elle recherchera la commande spécifiée dans le PATH par défaut.
command -V cd cd est une primitive du shell
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 à -rpcron est un utilitaire qui permet de planifier des taches à un moment donné.
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>
.
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' # afficher la date, 89 jours après le 26 mai 2022 : date -d "26 may 2022 +89 days" Tue Aug 23 00:00:00 UTC 2022 # mettre à jour la date et l'heure du système : date --set="2016-6-30 4:59 PM"
Pour comparer des dates, on les convertit au format %s
(nombre de secondes depuis 1970) :
date=$(date -d 2020-12-15 +%s) now=$(date +%s) if [ $date -lt $now ]; then echo "date est dans le passé !" fi
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 :
En envoyant un SIGUSR1 à dd, il renvoie des informations comme la quantité de données copiées, la vitesse, etc..
pkill -USR1 dd
Permet de déclarer des variables en bash et leur affecter des attributs ; il équivaut à la commande typeset
(les options sont les mêmes) à partir de bash v2+, alors que typeset
est compatible ksh. Invoqué sans paramètre, declare
affiche la liste des variables existantes dans l'environnement. Pour ne lister que les fonctions, utiliser le flag -f
.
Liste des attributs existants :
-a
: tableau indexé (array)-A
: tableau associatif-i
: entier (integer)-l
: la variable ne peut contenir que des caractères en minuscules ; les majuscules sont converties (lowercase)-u
: la variable ne peut contenir que des caractères en majuscules ; les minuscules sont converties (uppercase)-r
: constante (readonly)-x
: exporter la variable (export)-p
: affiche le contenu de la variable qui suit-f
: lister le contenu de la fonction qui suit
Utiliser +
à la place de -
permet de désactiver l'attribut d'une variable (ne fonctionne pas pour l'attribut +a
(tableaux indexés)).
# exemple d'utilisation d'un entier declare -i int=2 echo "int vaut $int" # "int vaut 2" let "int += 1" echo "int vaut $int" # "int vaut 3" unset int # exemple d'utilisation d'une constante declare -r const=pierre echo "const vaut $const" # "const vaut pierre" const=sable # "-bash: const : variable en lecture seule" echo "const vaut $const" # "const vaut pierre"
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
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é dig pteu.fr @127.0.0.1 -p5353 # interroger le @serveurDNS spécifié sur un port perso (non standard) dig +noall +answer pteu.fr # permet de n'afficher que la ligne le résultat (ANSWER) de la requête
Récupérer le numéro de série (serial number) d'une zone (enlever +short pour un résultat plus verbeux) :
dig +short SOA pteu.fr dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300
Interroger tous les serveurs faisant autorité d'une zone :
dig +nssearch pteu.fr SOA dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300 from server 213.251.188.149 in 0 ms. SOA dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300 from server 2001:41d0:1:4a95::1 in 0 ms. SOA dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300 from server 2001:41d0:1:1995::1 in 2 ms. SOA dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300 from server 213.251.128.149 in 2 ms.
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.
Permet de désolidariser un processus du shell qui l'a lancé. Si aucun processus n'est spécifié, il prend le dernier lancé.
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) [..]
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
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 machinePermet 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
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 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
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
Afficher les statistiques de la carte eth0: ethtool -S eth0
. Plus d'informations pour le diagnostique réseau ici : Diagnostique réseau sous Linux
ou ctrl+d
, permet de fermer un terminal graphique.
Évaluer des expressions :
$MSG
à 40 caractèresexpr "$MSG" : "\(.\{40\}\)"
expr $z + 1
Permet de faire une boucle “pour” ; voir programmation_shell.
(forground) Placer un job en avant-plan.
(voir jobs
)
Affiche le type d'un fichier (ne tient pas compte de son extension mais regarde les headers dudit fichier)
file toto toto: ASCII text
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
.-type f -executable
permet d'afficher les fichiers exécutables. Fonctionne aussi avec -readable
et -writable
.-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 commande find
(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 fichiersOn 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# 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 Pour trier les résultats par date de modification : find . \( -name '*.avi' -o -name '*.mkv' \) -exec ls -rt {} \;
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)C'est un service qui permet d'obtenir des informations sur les comptes utilisateurs :
finger -l dude
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
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
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
.
Identifier les processus qui utilisent un fichier. (voir mount)
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
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 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)-f FILE
: fournit à grep une liste de patterns listées une par ligne dans le fichier FILE-H
affiche le nom de fichier pour chaque ligne qui matche (option par défaut)-h
inverse de -H : supprime l'affichage des noms des fichiersIl 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
Les dérivés de grep :
egrep
: permet d'utiliser des expressions régulières étendues (ERE) dans les patterns ; il vaut mieux utiliser grep -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 dedansps 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
grep -c ^ FIC
(marche aussi avec $
ou “”
)
grpck vérifie la cohérence et l'intégrité des données des groupes (c'est le pendant de pwck
).
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'
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
.
Affiche les 10 premières lignes d'un fichier.
head ~/.bash_history
-n <nb>
spécifie le nombre de lignes à afficher
Affiche la liste des commandes internes et leur syntaxe.
help <cmd>
affiche l'aide d'une <cmd> particulière.
Permet d'afficher l'historique des commandes saisies lors de la session dans un terminal :
history 64 ls -la 65 pwd 66 cd / 67 cd etc 68 echo 'toto' 69 history
Lors de la fermeture de session, cette liste est ajoutée au fichier indiqué dans la variable $HISTFILE
. On peut contrôler :
HISTTIMEFORMAT
(même format que la commande date)HISTSIZE
défini la taille de l'historique de la session courante (en mémoire)HISTFILESIZE
défini la taille du fichier d'historique (celui défini dans $HISTFILE
)HISTCONTROL
permet d'ignorer les doublons (ignoredups), les commandes précédées par un espace (ignorespace) ou les deux (ignoreboth)Exemple :
HISTCONTROL=ignoredups:ignorespace HISTTIMEFORMAT="%Y%m%d_%H%M%S " HISTSIZE=10000 HISTFILESIZE=20000
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 de session : history -c
; forcer l'écriture du buffer dans le fichier history -a
.
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
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
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
iconv est un utilitaire de conversion et d'encodage de texte.
# Supprimer les caractères accentués: echo "éèï" | iconv -f utf8 -t ascii//TRANSLIT//IGNORE eei
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
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
Sert à contrôler et diagnostiquer le réseau sur la machine.
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 NetBSDet 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)
ip address del w.x.y.z dev ethX
Cela fait la modif à chaud, sans redémarrer l'interface.
ifconfig ethX default
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 :
Affiche les informations sur une commande (relativement similaire à la commande man
) :
info ls
Couteau suisse réseau, il permet de configurer les paramètres ip d'une interface réseau. Dans de plus en plus de distributions, il semble supplanter les tradditionnels ifconfig, arp, route, etc…
# 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
Équivalence anciennes/nouvelles commandes:
anciennes commandes | équivalent ip |
---|---|
ifconfig -a | ip a |
ifconfig enp6s0 down | ip link set enp6s0 down |
ifconfig enp6s0 up | ip link set enp6s0 up |
ifconfig enp6s0 10.0.0.24 netmask 255.255.255.0 dev enp6s0 | ip addr add 10.0.0.24/24 dev enp6s0 |
ifconfig enp6s0 mtu 9000 | ip link set enp6s0 mtu 9000 |
ifconfig enp6s0:0 10.0.0.25 | ip addr add 10.0.0.25/24 dev enp6s0 |
netstat | ss |
netstat -tulpn | ss -tulpn |
netstat -neopa | ss -neopa |
netstat -g | ip maddr |
route | ip r |
route add -net 10.0.0.0 netmask 255.255.255.0 dev enp6s0 | ip route add 10.0.0.0/24 dev enp6s0 |
route add default gw 10.0.0.254 | ip route add default via 10.0.0.254 |
arp -a | ip neigh |
arp -v | ip -s neigh |
arp -s 10.0.0.33 1:2:3:4:5:6 | ip neigh add 10.0.1.33 lladdr 1:2:3:4:5:6 dev enp6s0 |
arp -i enp6s0 -d 10.0.0.254 | ip neigh del 10.0.0.254 dev wlp7s0 |
ipcs affiche les information sur l'usage des ressources IPC.
# afficher la liste des sémaphores ipcs -s
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>
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
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
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
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).
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 &
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)
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
.
Affiche les dernières connexions (ici les 12 dernières)
last -n 12
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)
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 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)
ex : Pour incrémenter z :
let z=z+1 let "z += 1"
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 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 statistiquesPour mettre à jour la base (sous Debian) :
updatedb
Est la commande pour fermer sa session, dans un terminal login. Le raccourci est ctrl+d
.
Pour rechercher un mot rapidement dans le dictionnaire (cf aspell), on utilise la commande look.
look jap japonais japonaise japonaises jappement jappements japper
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-1
(tiret un, et non tiret L) pour formater le résultat sur une seule colonnels -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 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]
Pour lister le hardware de la machine.
Affiche le statut des modules du noyau Linux.
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 1103Permet 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.
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
Utilitaire qui ressemble à ethtool
mii-tool eth0: negotiated 100baseTx-FD flow-control, link ok eth1: negotiated 100baseTx-FD flow-control, link ok
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.
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 fichierOutil permettant de configurer les modules matériels (drivers) utilisés par le noyau de votre système.
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
ou umount /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
ou umount -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 (nc) est un couteau-suisse réseau qui 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.# -z = on n'envoie pas de données # -v = mode verbeux # -t = TCP (-u pour UDP) # 80: numéro de port à tester $ nc -zvt 10.0.0.1 80 Connection to 10.0.0.1 80 port [tcp/ssh] succeeded! # On peut remplacer un port par une liste de port (séparés par des espaces : "80 443") # ou une plage de ports ("80-89") # Par défaut on teste en TCP ; pour utiliser UDP, ajouter le paramètre -u # (ex ici pour tester le DNS et le SYSLOG) : $ nc -zv 10.0.0.1 -u 53 514
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
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
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)Utilitaire de configuration réseau utilisé par défaut sous Redhat/RockyLinux/feu CentOS.
src: https://docs.rockylinux.org/fr/guides/network/basic_network_configuration/
# Etat du service systemctl status NetworkManager # Editer fichier de conf vim /etc/sysconfig/network-scripts/ifcfg-ens18 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no NAME=ens18 UUID=xxxx-xx DEVICE=ens18 ONBOOT=yes IPADDR=192.168.0.1 PREFIX=24 GATEWAY=192.168.0.254 DNS1=192.168.0.254 DNS2=1.1.1.1 IPV6_DISABLED=yes # Appliquer la conf réseau nmcli connection up ens18 # Vérifier bonne application de la conf : nmcli device show ens18 ip a ip route
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 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
(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
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
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
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 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
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 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
Comme echo, printf permet d'afficher du texte mais de façon plus léchée. Le premier argument défini le formatage de l'affichage, puis on fournit les variables dans les arguments suivants.
a=12; b=34; c='toto' printf 'a=%i, b=%i, c=%s\n' $a $b $c a=12, b=34, c=toto
%i
désigne les variables entière (integer), pour les variables chaîne (strings).
Pour formater l'affichage, on peut délimiter le nombre de colonne que prend chaque variable en suivant le “'%' par le nombre de colonne souhaité (et un -
pour aligner à droite) :
a=12; b=34; c='toto' # on aligne $a et $b à droite sur 5 colonnes, et $c à gauche sur 20 colonnes printf 'a=%5i, b=%5i, c=%-20s\n' $a $b $c a= 12, b= 34, c=toto
Pour afficher 10 fois le caractère ”=“ :
printf '%.0s=' {1..10} ==========
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
Afficher les processus les plus consommateurs de mémoire/de CPU :
ps -eo pmem,pcpu,pid,args --sort=-rss | head ps -eo pmem,pcpu,pid,args --sort=-stime | head
pstree permet d'afficher l'arborescence, à la façon de tree pour les répertoires, des processus en cours d'exécution.
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épertoiresExemple 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 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
.
Créer un tableau à partir d'un flux ou d'un fichier, d'une case par ligne.
readarray -t T_LINES < fichier.txt cat fichier.txt | readarray -t T_LINES
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)
)
Permet de réinitialiser le terminal, notamment quand on affiche un binaire qui provoque des affichages bizarres.
Permet d'inverser l'ordre des caractères des lignes d'un fichier ou d'un flux.
echo 'tito' | rev otit
Permet de contrôler la table de routage de la machine.
route -n
… qui équivaut à netstat -rn
, commande plus universelle.
route add default gw 192.168.0.1
route add -host 195.98.246.28 gateway 192.168.0.1
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
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
/etc/resolv.conf
:echo "nameserver 193.252.19.3" >> /etc/resolv.conf
Pour ajouter des routes persistantes, cela dépend de la distribution Linux utilisée. Par exemple pour créer une route pour le réseau 10.0.211.0/24 en passant par le next-hop 10.0.32.2, accessible via l'interface réseau eth0 :
10.0.211.0/24 via 10.0.32.2
up route add -net 10.0.211.0/24 gw 10.0.32.2 dev eth0
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
.
Ssh CoPy (SCP) est une commande qui permet de transférer des fichiers par une connexion SSH.
Sous Windows il existe les programmes pscp
(en ligne de commande) et l'excellent WinSCP. Sous Linux, il est possible d'utiliser gFTP si l'on veut un interface graphique. Sous Mac j'utilise Fugu.
La syntaxe en CLI est la suivante :
scp fichier_local user@serveur.com:/path
Il faut noter qu'un path relatif (sans le ”/“) est par défaut la home de l'utilisateur sous lequel on s'est connecté.
Exemples
# uploader le fichier local test.txt vers la home de l'utilisateur toto sur serveur.com : scp test.txt toto@serveur.com: # télécharger dans le répertoire courant (.) test.txt, qui se trouve sur serveur.com scp toto@serveur.com:test.txt . # uploader tout le dossier test vers le sous répertoire incoming : scp -r test toto@serveur.com:incoming # 3 façon d'uploader 2 fichiers vers un serveur scp 1.zip 2.zip serveur.com: scp {1,2}.zip serveur.com: scp *.zip serveur.com: # télécharger plusieurs fichiers en une même commande SCP (ici 1.zip et 2.zip) scp serveur.com:/tmp/\{1,2\}.zip . # copier un fichier entre 2 serveurs distants (remote to remote) scp toto@serveur1.com:test.txt titi@serveur2.com:
Les paramètres possibles sont :
-P port
pour préciser un port spécifique-r
pour les transfert récursifs (copier le contenu d'un dossier par exemple)-o ssh_option
: permet de passer des options SSH pour le transfert (ce sont les même que la commande ssh)
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
Stream EDitor est une commande qui permet d'appliquer différentes transformations prédéfinies à un flux séquentiel de données textuelles. Sed peut travailler sur un flux (pipé derrière une autre commande) ou à partir d'un fichier :
# afficher le contenu du fichier en remplaçant toto par titi cat fichier.txt | sed 's/toto/titi/' # même chose en plus simple sed 's/toto/titi/' fichier.txt
A noter que le délimiteur /
est arbitraire, la commande fonctionne avec n'importe quel autre : sed 's|toto|titi|' fichier.txt
on peut choisir le plus visuel.
Par défaut le résultat est affiché dans le terminal ; si on précise un fichier on peut choisir d'enregistrer les modifications dans celui-ci, en ajoutant l'option -i
:
# remplacer toto par titi dans le fichier (sans afficher le résultat) sed -i 's/toto/titi' fichier.txt # idem, mais en sauvegardant le fichier original avec l'extension .bck # cela créra 2 fichiers : fichier.txt (modifié) et fichier.txt.bck (l'original) sed -i".bck" 's/toto/titi' fichier.txt
Les caractères suivants doivent être échappés (préfixés par un \
) car ils ont une signification spéciales : $.*[\^
sauf s'il sont entre […] ; en revanche les autres (lettres, chiffres et (){}+?|
) ne doivent pas être échappés pour représenter le caractère.
Afficher la 3ème ligne d'un fichier :
sed -n '3p' <fichier> sed '3!d' <fichier> sed '52q;d' <fichier> # arrête la lecture dès qu'elle a matché, pour la performance
sed -n '3,$p' <fichier>
sed -n '2,5p' <fichier> sed -n '2,/sys/p' <fichier>
sed -i '1iPremièreLigne' toto.txt
(il s'agit d'un “un” i suivi du texte à insérer)
sed '/toto/,/titi/d'
sed '/SELECT/s/MOTIF/REPLACE/' toto.txt
sed -i '5d' toto.txt
sed -i '/toto/d' toto.txt
sed -i '/toto/!d' toto.txt
sed '/^$/d' toto.txt
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
sed "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/X.X.X.X/g"
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)
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.
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é.
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
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"'/'
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.
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'
sed '2~2d' file.txt
(en commençant à la ligne 2, puis toutes les 2 lignes (2~2
), on supprime la ligne (d
))
Équivalent : en partant de la première ligne, puis toutes les 2 lignes (1~2
), on n'affiche pas la ligne (!p
)
sed -n '1~2!p' file.txt
Autres équivalents :
sed -n '2~2p' file.txt sed -n 'p;n' file.txt
Pour ne pas interpréter le quote il faut découper le sed pour qu'il concatène son contenu :
echo \'toto\' 'toto' echo \'toto\'| sed 's/'\''/\"/g' "toto"
Ici sed va concaténer les 3 parts :
s/ \' /\"/g
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 zeroesseq 3 1 2 3
seq -s" " -2 0.5 -1 -2,0 -1,5 -1,0
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 (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éeExemple :
echo -e "1\n2\n3" | shuf
shuf -e 1 2 3
shuf -i 1-3
echo $(shuf -i 1-49 -n 5) - $(shuf -i 1-10 -n 1)
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 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-o <OUTPUT_FILE>
copie le résultat dans un fichier plutôt que sur la sortie standardExemple :
-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
echo -e "toto aa\ntota bb\ntiti cc\n" | sort -k2 toto aa tota bb titi cc
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 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 bigExemples :
# 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
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 # Afficher la taille du fichier (ici il est vide) $ stat -c "%s" toto.txt 0
Permet de débugguer les appels système d'un processus.
Liens :
Affiche les chaines de caractères imprimable dans le fichier spécifié (c'est donc peu utile sur les fichiers texte).
strings toto.exe
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
Comme cat, mais à l'envers :) tac affiche le fichier de la dernière à la première ligne.
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 commande tail
ne se termine jamais et affiche à l'écran toute ligne ajoutée au fichier en paramètre (par exemple tail -f /var/log/auth.log
permet de suivre en temps réel les logs d'authentification de la machine)
Un outil d'archivage de données qui permet de créer une archive à partir de fichiers/arborescence. On peut utiliser le flag -v
(verbose) pour afficher les fichiers/dossier ajoutés à l'archive.
# pour archiver le répertoire ./toto/ et tout son contenu (répertoires et fichiers normaux). # (toto.tar désigne le nom de l'archive qu'on veut créer, il doit avoir l'extension ''.tar'') tar cf toto.tar ./toto # archiver ET compresser le fichier grâce à gunzip (-z) ou bunzip (-y) : # -c pour compresser, -v pour un affichage verbeux, -f pour préciser le fichier de sortie tar cvzf toto.tar.gz ./toto # extraire (-x) le contenu d'une archive gunzip (-z) : tar zxf toto.tar # exclure le répertoire "dir" et le fichier titi.txt de l'archive tar cfz toto.tar --exclude=./toto/titi.txt --exclude=./toto/dir ./toto # équivalent en listant les fichiers à exclure dans un fichier externe cat exclude-fic.txt ./toto/titi.txt ./toto/dir tar cfz toto.tar --exclude-from exclude-fic.txt ./toto
Permet de copier l'entrée standard dans un fichier en plus de l'afficher sur la sortie standard. L'option -a
permet d'ajouter à la fin du fichier indiqué.
$ echo toto | tee fic.log toto $ echo titi | tee -a fic.log titi $ cat fic.log toto titi
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).
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.
Pour fermer une connexion telnet qui ne répond plus ou dont on n'arrive plus à sortir, il faut utiliser la séquence d'échappement suivante : ^]
(Ctrl + ]
).
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"
timeout permet de lancer une commande et de la killer si elle n'est pas terminée dans le laps de temps indiqué. Syntaxe : timeout <durée> <commande>
, avec durée un chiffre dont on peut préciser l'unité (s/seconde par défaut, ou m/h/d (minute/heure/jour).
timeout 10s ping google.fr
Affiche la liste des processus et permet d'observer en temps réel l'activité de la mémoire et du processeur.
Permet de modifier les dates de dernier accès et de dernière modification d'un fichier.
# modifier les dates d'accès et de modification avec celle du jour touch toto.txt # pour ne changer que l'une d'elle, préciser -a pour date d'accès ou -m pour date de modification # modifier avec la date spécifiée en option touch -d "1999-12-31 23:59:59" toto.txt
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 permet de déterminer la route prise par un paquet pour atteindre une adresse IP cible.
L'outil envoie un paquet à IP
avec un TTL de 1. Le paquet n'ira pas plus loin que le premier routeur qui enverra un paquet ICMP TTL Exceeded
avec sa propre adresse IP. En incrémentant le TTL ainsi de suite jusqu'à atteindre la destination, on obtient les IPs de tous les routeurs intermédiaires.
Certains routeurs ne communiquent pas d'information et affichent ???
ou * * *
; ou indique que l'hôte ne répond pas (ICMP destination host unreachable) : !H
.
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
Par défaut le protocole UDP/33434-5 est utilisé mais il peut être filtré. On peut donc demander au traceroute de changer de port (-p 53
par ex.), d'utiliser de l'ICMP (-I
) ou du TCP (-T
) mais il faudra être root.
trap permet d'exécuter une commande lorsqu'il rencontre un signal.
-l
permet de lister les signaux et leurs numéros associés1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
Le code 0
, non listé ci-dessus, correspond à un EXIT.
-p
permet d'afficher les commandes associées à chaque signalPar exemple, pour afficher un message lors d'une erreur provoquant un EXIT, ainsi que la ligne qui la génère :
trap "echo Erreur à la ligne $LINENO" 0
C'est utile pour effacer les fichiers temporaires en cas d'erreur interrompant le script par exemple :
trap "rm -f $TMPFIC1 $TMPFIC2 $TMPFIC3" 0 2 15
type est une commande interne de bash qui permet de savoir à quoi correspond un “nom” si on l'utilise en tant que commande. Utilisée avec l'option -t
, il permet de savoir si la commande est un alias, une fonction, une commande externe (file) ou une fonction interne (une primitive) du shell (builtin). Utilisée sans option ou avec l'option -a
, type affiche le type et le contenu de la commande en paramètre.
type -t ls builtin type -t l alias type l l is aliased to 'ls -p --color' type -t ssh file type ssh ssh is hashed (/usr/bin/ssh) type -a titreterm titreterm is a function titreterm () { if [[ $# -eq 1 && -n $1 ]]; then echo -ne "\033]0;$1\007"; fi }
Voir aussi : declare.
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.
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.
Démonter une partition (cf mount).
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
É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é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 :
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
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
Simplement ajouter un utilisateur dans un groupe existant :
usermod -aG GROUP USER
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.
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 commande sudo
(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 :
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 :
export VISUAL=vi export EDITOR=vi
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.
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
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 <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
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 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
Affiche une brève description d'une commande.
whatis cat cat (1) - concatenate files and print on the standard output
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
Permet de localiser le binaire d'une commande
which ls /bin/ls
Affiche les utilisateurs connectés à la machine, et depuis quand.
who root pts/0 Jun 9 10:15 (10.0.0.20) dude pts/1 2021-04-07 08:12 (10.0.16.1) toto pts/2 2021-03-02 14:32 (10.0.0.1) # afficher le runlevel précédent et courant (comme la commande ''runlevel'') : who -r run-level 3 May 31 11:36 last=S # afficher uniquement l'utilisateur courant who -m dude pts/0 2021-04-07 08:12 (10.0.16.1)
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.
Autre use case, en utilisant les paramètres -L
pour limiter le nombre de paramètre en entrée et -P
pour lancer les commandes en parallèle:
echo -ne '1\n2\n3\n4' > toto cat toto | xargs -L3 -P2 echo 1 2 3 4
C'est utile pour des opérations plus CPUvore comme le calcul de hash MD5 par ex:
ls tata toto find . -maxdepth 1 -type f -print0 | xargs -L1 -P4 -0 md5sum >> md5sums cat md5sums b4af4c692f2a8c7dda9abc8ee657997d ./tata 257cde944bf50d4fe05001bc33dd0ca4 ./toto e5084550439c3c39e1b0e53b47018058 ./md5sums
# 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