User Tools

Site Tools


informatique:linux:commandes_linux

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:commandes_linux [2021/02/23 09:18] – [xargs] parallèlisme pteuinformatique:linux:commandes_linux [2024/03/21 07:14] (current) – [NetworkManager] pteu
Line 1: Line 1:
-{{tag>commandes linux système}} 
- 
 ====== Commandes Linux ====== ====== Commandes Linux ======
  
 Cet article présente des commandes système sous Linux. En général on obtient de l'aide sur une commande en tapant ''man <commande>'' dans un terminal, ou en consultant l'aide située dans le dossier **/usr/share/doc**. Cet article présente des commandes système sous Linux. En général on obtient de l'aide sur une commande en tapant ''man <commande>'' dans un terminal, ou en consultant l'aide située dans le dossier **/usr/share/doc**.
  
-Les commandes réseaux sont décrites ici : [[linux configuration réseau]]+Les commandes réseaux sont décrites ici : [[informatique:linux:reseau|Le réseau sous Linux]]
  
  
Line 67: Line 65:
  
  
 +=====arping=====
 +
 +Détecter une adresse IP usurpée / duplicate :
 +<code bash>
 +arping -D -q -I eth0 -c 2 192.168.0.5
 +</code>
 =====aspell===== =====aspell=====
 Vérificateur d'orthographe interactif en ligne de commande. Vérificateur d'orthographe interactif en ligne de commande.
Line 117: Line 121:
 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 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'' :
 +<code bash>
 +Jul 19 02:30:00 bast2 atd[221981]: Starting job 17 (a0001101a5b44a) for user 'admin' (2006)
 +</code>
 +
 +=====auditd=====
 +
 +Permet d'auditer / debugguer des comportements bas niveau du système, comme par exemple déterminer quel processus réalise des requêtes :
 +<code bash>
 +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
 +</code>
 +src: [[https://serverfault.com/questions/192893/how-can-i-identify-which-processes-are-generating-udp-traffic-on-linux|how-can-i-identify-which-processes-are-generating-udp-traffic]]
  
 =====awk===== =====awk=====
Line 450: Line 473:
 # afficher la date dans 5 mois et 4 jours (regarde, on peut même faire des fautes, c'est pris en compte !) : # 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' 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 : # mettre à jour la date et l'heure du système :
Line 555: Line 581:
 dig mx pteu.fr                # MX (serveur de mail) 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 @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 dig +noall +answer pteu.fr    # permet de n'afficher que la ligne le résultat (ANSWER) de la requête
 </code> </code>
Line 783: Line 810:
   * ''-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>//   * ''-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 ''<nowiki>-rw-rw-r--</nowiki>''). On peut rechercher tous les fichiers qui ont le droit d'écriture pour le groupe par ''-perm -020''.   * ''-perm 664'' permet de chercher les fichiers qui ont exactement les droits du masque (ici 664 soit ''<nowiki>-rw-rw-r--</nowiki>''). 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   * ''-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)   * ''-exec'' permet d'exécuter une commande pour chaque résultat de la commande ''find'' (voir exemples)
Line 841: Line 869:
 # on peut additionner les conditions de recherches avec -a (AND) et -o (OR) # on peut additionner les conditions de recherches avec -a (AND) et -o (OR)
 find . \( -name '*.avi' -o -name '*.mkv' \) -print find . \( -name '*.avi' -o -name '*.mkv' \) -print
-</code> 
  
 +Pour trier les résultats par date de modification :
 +find . \( -name '*.avi' -o -name '*.mkv' \) -exec ls -rt {} \;
 +</code>
 =====flock===== =====flock=====
  
Line 1824: Line 1854:
 # -z = on n'envoie pas de données # -z = on n'envoie pas de données
 # -v = mode verbeux # -v = mode verbeux
 +# -t = TCP (-u pour UDP)
 # 80: numéro de port à tester # 80: numéro de port à tester
-$ nc -zv 10.0.0.1 80+$ nc -zvt 10.0.0.1 80
 Connection to 10.0.0.1 80 port [tcp/ssh] succeeded! Connection to 10.0.0.1 80 port [tcp/ssh] succeeded!
  
Line 1878: Line 1909:
   * ''netstat -s'' permet d'afficher les statistiques réseau de la machine (les compteurs IP, de connections TCP ou UDP)   * ''netstat -s'' permet d'afficher les statistiques réseau de la machine (les compteurs IP, de connections TCP ou UDP)
  
 +=====NetworkManager=====
 +
 +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/
 +<code bash>
 +# 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
 +</code>
 =====nslookup===== =====nslookup=====
  
Line 2077: Line 2145:
 </code> </code>
  
 +=====printf=====
 +
 +Comme [[informatique:linux:commandes_linux#echo|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.
 +<code bash>
 +a=12; b=34; c='toto'
 +printf 'a=%i, b=%i, c=%s\n' $a $b $c
 +a=12, b=34, c=toto
 +</code>
 +''%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) :
 +<code bash>
 +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
 +</code>
 +
 +====Afficher x fois le même caractère====
 +
 +Pour afficher 10 fois le caractère "=" :
 +<code bash>
 +printf '%.0s=' {1..10}
 +==========
 +</code>
  
 =====ps===== =====ps=====
Line 2101: Line 2194:
 </code> </code>
  
 +Afficher les processus les plus consommateurs de mémoire/de CPU :
 +<code bash>
 +ps -eo pmem,pcpu,pid,args --sort=-rss   | head
 +ps -eo pmem,pcpu,pid,args --sort=-stime | head
 +</code>
  
 =====pstree===== =====pstree=====
Line 2188: Line 2286:
   * Ajouter l'adresse de la passerelle (gw ou gateway cela dépend)   * Ajouter l'adresse de la passerelle (gw ou gateway cela dépend)
 <code bash> <code bash>
-route add default gw 192.168.0.1 netmask 255.255.255.0+route add default gw 192.168.0.1
 </code> </code>
  
Line 2212: Line 2310:
 <code bash> <code bash>
 echo "nameserver 193.252.19.3" >> /etc/resolv.conf echo "nameserver 193.252.19.3" >> /etc/resolv.conf
 +</code>
 +
 +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 :
 +  * __sous Redhat/centOS__ il faut créer ou éditer le fichier :
 +<code bash /etc/sysconfig/network-scripts/route-eth0>
 +10.0.211.0/24 via 10.0.32.2
 +</code>
 +  * sous Debian, il faut ajouter une ligne dans le fichier :
 +<code bash /etc/network/interfaces>
 +up route add -net 10.0.211.0/24 gw 10.0.32.2 dev eth0
 </code> </code>
  
Line 2386: Line 2494:
 ls --color=y | sed 's/\x1b\[[0-9;]*m//g' ls --color=y | sed 's/\x1b\[[0-9;]*m//g'
 </code> </code>
 +
 +====Supprimer les lignes paires====
 +
 +<code bash>
 +sed '2~2d' file.txt
 +</code>
 +(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'')
 +<code bash>
 +sed -n '1~2!p' file.txt
 +</code>
 +
 +Autres équivalents :
 +<code bash>
 +sed -n '2~2p' file.txt
 +sed -n 'p;n'  file.txt
 +</code>
 +
 ====Liens utiles==== ====Liens utiles====
  
Line 2639: Line 2766:
 =====tar===== =====tar=====
  
-Un outil d'archivage de données qui permet de créer une archive à partir de fichiers/arborescence.+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.
  
 <code bash> <code bash>
 # pour archiver le répertoire ./toto/ et tout son contenu (répertoires et fichiers normaux). # 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'') # (toto.tar désigne le nom de l'archive qu'on veut créer, il doit avoir l'extension ''.tar'')
-tar cvf toto.tar ./toto+tar cf toto.tar ./toto
  
 # archiver ET compresser le fichier grâce à gunzip (-z) ou bunzip (-y) : # 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 +# -c pour compresser, -v pour un affichage verbeux, -f pour préciser le fichier de sortie 
-tar czvf toto.tar.gz ./toto+tar cvzf toto.tar.gz ./toto
  
 # extraire (-x) le contenu d'une archive gunzip (-z) : # extraire (-x) le contenu d'une archive gunzip (-z) :
 tar zxf toto.tar 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
 </code> </code>
  
Line 2720: Line 2857:
 Connection closed by foreign host. Connection closed by foreign host.
 </code> </code>
 +
 +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 + ]'').
 +
 =====time===== =====time=====
  
Line 2735: Line 2875:
 <code bash> <code bash>
 time -f "%es" bash -c "ls | wc" time -f "%es" bash -c "ls | wc"
-</code> +</code> 
 + 
 + 
 +=====timeout===== 
 + 
 +**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). 
 + 
 +<code bash> 
 +timeout 10s ping google.fr 
 +</code> 
 =====top===== =====top=====
  
Line 2757: Line 2907:
 </code> </code>
 =====traceroute===== =====traceroute=====
-[[http://fr.wikipedia.org/wiki/Traceroute|Traceroute]] permet de déterminer la route prise par un paquet pour atteindre une IP cible. 
-L'outil envoie un paquet à ''IP'' avec un TTL de 1. Du coup, le paquet n'ira pas plus loin que le premier routeur qui enverra un paquet ''ICMP TTL Exceeded'' avec son adresse IP. En incrémentant le TTL jusqu'à atteindre la destination on obtient les IPs de tous les routeurs intermédiaires. 
  
-Certains routeurs ne communiquent pas d'informations et affichent %%???%% ou %%* * *%%.+[[http://fr.wikipedia.org/wiki/Traceroute|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 %%* * *%%.
 <code bash> <code bash>
 traceroute google.fr traceroute google.fr
Line 2779: Line 2930:
 </code> </code>
  
 +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'').
  
 =====trap===== =====trap=====
  
 **trap** permet d'exécuter une commande lorsqu'il rencontre un signal. **trap** permet d'exécuter une commande lorsqu'il rencontre un signal.
-  * ''-l'' permet de lister les signaux+  * ''-l'' permet de lister les signaux et leurs numéros associés 
 +<code bash> 
 + 1) 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 
 +</code> 
 +Le code ''0'', non listé ci-dessus, correspond à un EXIT.
   * ''-p'' permet d'afficher les commandes associées à chaque signal   * ''-p'' permet d'afficher les commandes associées à chaque signal
  
-Par exemple, pour afficher un message lors d'une erreur ainsi que la ligne qui la génère :+Par exemple, pour afficher un message lors d'une erreur provoquant un EXIT, ainsi que la ligne qui la génère :
 <code bash> <code bash>
-trap "echo Erreur à la ligne $LINENO" SIGERR+trap "echo Erreur à la ligne $LINENO" 0
 </code> </code>
  
 +C'est utile pour effacer les fichiers temporaires en cas d'erreur interrompant le script par exemple :
 +<code bash>
 +trap "rm -f $TMPFIC1 $TMPFIC2 $TMPFIC3" 0 2 15
 +</code>
 =====type===== =====type=====
  
-**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, un mot-clé une fonction, un fichier (une commande externe) ou un //builtin// (fonction interne à bash). Utilisée sans option ou avec l'option ''-a'', **type** affiche le type et le contenu de la commande en paramètre.+**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.
  
 <code bash> <code bash>
 type -t ls type -t ls
  builtin  builtin
 +
 type -t l type -t l
  alias  alias
 +
 type l type l
  l is aliased to 'ls -p --color'  l is aliased to 'ls -p --color'
Line 3050: Line 3224:
  
 Affiche les utilisateurs connectés à la machine, et depuis quand. Affiche les utilisateurs connectés à la machine, et depuis quand.
-  who +<code bash> 
-   root     pts/       Jun  9 10:15 (10.0.0.20) +who 
- + root     pts/       Jun  9 10:15 (10.0.0.20) 
-Permet aussi d'afficher le runlevel précédent et courant (comme la commande ''runlevel'': + dude     pts/       2021-04-07 08:12 (10.0.16.1
-  who -+ toto     pts/       2021-03-02 14:32 (10.0.0.1)
-         run-level 3  May 31 11:36                   last=S+
  
 +# 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/       2021-04-07 08:12 (10.0.16.1)
 +</code>
 =====xargs===== =====xargs=====
  
informatique/linux/commandes_linux.1614071898.txt.gz · Last modified: 2021/02/23 09:18 by pteu