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 revision Previous revision
Next revision
Previous revision
informatique:linux:commandes_linux [2019/11/23 16:18]
pteu [vi*] vipw, visgr, visudo & cie
informatique:linux:commandes_linux [2020/06/25 10:27] (current)
pteu [dig]
Line 422: Line 422:
 <code bash> <code bash>
 # Pour afficher la date au format YYYY/​MM/​JJ-HH:​MM:​SS : # Pour afficher la date au format YYYY/​MM/​JJ-HH:​MM:​SS :
-date +%Y/%m/%d-%H:%M:%S +date "+%Y/%m/%d %H:%M:%S" 
-2009/06/25-15:07:56+2009/06/25 15:07:56
  
 # afficher le compteur (timestamp) de l'​heure actuelle : # afficher le compteur (timestamp) de l'​heure actuelle :
-date +%s+date "+%s"
 1441816670 1441816670
  
Line 460: Line 460:
 <code bash> <code bash>
 pkill -USR1 dd pkill -USR1 dd
 +</​code>​
 +
 +
 +=====declare=====
 +
 +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)).
 +
 +<code bash>
 +# 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"​
 </​code>​ </​code>​
  
Line 501: Line 534:
 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 +noall +answer pteu.fr ​   # permet de n'​afficher que la ligne le résultat (ANSWER) de la requête
 </​code>​ </​code>​
  
 +Récupérer le numéro de série (serial number) d'une zone (enlever //+short// pour un résultat plus verbeux) :
 +<code bash>
 +dig +short SOA pteu.fr
 +dns105.ovh.net. tech.ovh.net. 2018110900 86400 3600 3600000 300
 +</​code>​
 +
 +Interroger tous les serveurs faisant autorité d'une zone :
 +<code bash>
 +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.
 +</​code>​
 =====dirname===== =====dirname=====
  
Line 953: Line 1001:
 =====history===== =====history=====
  
-Permet d'​afficher l'​historique des commandes saisies dans un terminal :+Permet d'​afficher l'​historique des commandes saisies ​lors de la session ​dans un terminal :
 <code bash> <code bash>
 history history
Line 963: Line 1011:
  ​69 ​ history  ​69 ​ history
 </​code>​ </​code>​
 +
 +Lors de la fermeture de session, cette liste est ajoutée au fichier indiqué dans la variable ''​$HISTFILE''​. On peut contrôler :
 +  * le format de timestamp de chaque commande avec la variable ''​HISTTIMEFORMAT''​ (même format que la commande date)
 +  * la taille de l'​historique,​ en nombre de ligne
 +    * ''​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 :
 +<file bash .bashrc>
 +HISTCONTROL=ignoredups:​ignorespace
 +HISTTIMEFORMAT="​%Y%m%d_%H%M%S "
 +HISTSIZE=10000
 +HISTFILESIZE=20000
 +</​file>​
  
 On peut relancer une commande de l'​historique en saisissant //!// suivi de son numéro : On peut relancer une commande de l'​historique en saisissant //!// suivi de son numéro :
Line 985: Line 1047:
 </​code>​ </​code>​
  
-On efface l'​historique ​avec ''​history -c''​.+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 : On peut loguer (dans ''/​var/​log/​messages''​) l'​historique des commandes saisies par un utilisateur en ajoutant dans son .bashrc cette ligne :
Line 1695: Line 1757:
 =====netcat===== =====netcat=====
  
-Permet ​de créer des sockets comme client (''​netcat mon_serveur.fr 200''​) ou comme serveur (''​netcat -l -p 80''​) :+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 telnet   * ''​netcat -t ns213.186.xx.xx 23''​ Se comporte comme un client telnet
   * ''​netcat -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 > espionne.log''​ Ecoute sur le port 23 (telnet) et enregistre dans espionne.log tout ce qui est tapé par le client.
Line 1702: Line 1764:
   * ''​netcat -vv la_machine_a_scanner 1-100''​ Permet de lancer un scan sur des machines distantes.   * ''​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.   * ''​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.
 +
 +  * pour tester si des ports sont ouverts sur une machine distante:
 +<code bash>
 +# -z = on n'​envoie pas de données
 +# -v = mode verbeux
 +# 80: numéro de port à tester
 +$ nc -zv 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
 +</​code>​
  
   * Créer un automate qui renvoie au client tout ce que ce dernier envoie dans la socket :   * Créer un automate qui renvoie au client tout ce que ce dernier envoie dans la socket :
Line 2100: Line 2177:
 =====sed===== =====sed=====
  
-**S**tream **ED**itor est une commande qui permet d'​appliquer différentes transformations prédéfinies à un flux séquentiel de données textuelles. +**S**tream **ED**itor 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 :
- +
-  * Filtre pour remplacer ​une IP par X.X.X.X+
 <code bash> <code bash>
-sed "s/\([0-9]\{1,​3\}\.\)\{3\}[0-9]\{1,​3\}/​X.X.X.X/​g"​ +# afficher le contenu du fichier en remplaçant toto par titi 
-</code>+cat fichier.txt | sed 's/toto/titi'
  
-  * Convertir les minuscules ​en majuscules (ou inversement) +# même chose en plus simple 
-<code bash> +sed 's/toto/titi' ​fichier.txt
-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+
 </​code>​ </​code>​
-(Le "&"​ représente le motif qui matche) 
  
-  * Ajouter une ligne en début de fichier :+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'' ​:
 <code bash> <code bash>
-sed -i '1iPremièreLigne' toto.txt+# 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
 </​code>​ </​code>​
-(il s'agit d'un "​un"​ i suivi du texte à insérer) 
  
-  * Afficher la 3ème ligne d'un fichier (et sauvegarder le fichier source avec le suffixe "​.bck"​) :+  * Afficher la 3ème ligne d'un fichier (plusieurs méthodes
 +Afficher la 3ème ligne d'un fichier ​:
 <code bash> <code bash>
-sed -i"​.bck" ​-n '​3p'​ <​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
 </​code>​ </​code>​
  
Line 2135: Line 2212:
 sed -n '​2,​5p'​ <​fichier>​ sed -n '​2,​5p'​ <​fichier>​
 sed -n '​2,/​sys/​p'​ <​fichier>​ sed -n '​2,/​sys/​p'​ <​fichier>​
 +</​code>​
 +
 +  * Ajouter une ligne en début de fichier :
 +<code bash>
 +sed -i '​1iPremièreLigne'​ toto.txt
 +</​code>​
 +(il s'agit d'un "​un"​ i suivi du texte à insérer)
 +
 +  * Afficher les lignes sauf celles situées entre "​toto"​ et "​titi"​ :
 +<code bash>
 +sed '/​toto/,/​titi/​d'​
 +</​code>​
 +
 +  * Supprimer la 5eme ligne du fichier toto.txt
 +<code bash>
 +sed -i '​5d'​ toto.txt
 </​code>​ </​code>​
  
   * Supprimer les lignes contenant toto dans le fichier toto.txt :   * Supprimer les lignes contenant toto dans le fichier toto.txt :
 <code bash>sed -i '/​toto/​d'​ toto.txt</​code>​ <code bash>sed -i '/​toto/​d'​ toto.txt</​code>​
 +
 +  * Supprimer les lignes __ne contenant pas__ toto dans le fichier toto.txt :
 +<code bash>sed -i '/​toto/​!d'​ toto.txt</​code>​
  
   * Supprimer les lignes vides   * Supprimer les lignes vides
Line 2147: Line 2243:
 sed -e '​0,/​^begin/​d'​ -e '/​^end/,​$d'​ fichier.txt sed -e '​0,/​^begin/​d'​ -e '/​^end/,​$d'​ fichier.txt
 </​code>​ </​code>​
 +
 +  * Remplacer les adresses IP par X.X.X.X
 +<code bash>
 +sed "​s/​\([0-9]\{1,​3\}\.\)\{3\}[0-9]\{1,​3\}/​X.X.X.X/​g"​
 +</​code>​
 +
 +  * Convertir les minuscules en majuscules (ou inversement)
 +<code bash>
 +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
 +</​code>​
 +(Le "&"​ représente le motif qui matche)
  
   * On peut réutiliser des patterns entre () qui ont matchées avec \1, \2. Par exemple, pour inverser les 3 termes séparés par des virgules :   * On peut réutiliser des patterns entre () qui ont matchées avec \1, \2. Par exemple, pour inverser les 3 termes séparés par des virgules :
Line 2378: Line 2487:
 ss dport \> 1024 ss dport \> 1024
 </​code>​ </​code>​
 +=====stat=====
 +
 +Commande permettant d'​afficher des informations sur un système de fichier ou juste un fichier.
 +
 +<code bash>
 +# 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éé : -
 +</​code>​
 +
 +On peut filtrer le résultat par type d'​information recherchée avec l'​option ''​-c''​ ; par exemple :
 +<code bash>
 +#  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
 +</​code>​
 +
 =====strings===== =====strings=====
  
 Affiche les chaines de caractères imprimable dans le fichier spécifié (c'est donc peu utile sur les fichiers texte). Affiche les chaines de caractères imprimable dans le fichier spécifié (c'est donc peu utile sur les fichiers texte).
-  ​strings toto.exe +<code bash> 
 +strings toto.exe 
 +</​code>​
  
 =====su===== =====su=====
Line 2497: Line 2635:
  
 Permet de calculer le temps d'​exécution d'une commande : Permet de calculer le temps d'​exécution d'une commande :
-  ​time sleep 3 +<code bash> 
-   +time sleep 3 
-   real    0m3.015s + ​real ​   0m3.015s 
-   ​user    0m0.000s + ​user ​   0m0.000s 
-   ​sys     ​0m0.000s+ ​sys ​    ​0m0.000s 
 +</​code>​
  
 La commande retourne le temps réel (//real//), le temps en mode utilisateur (//user//) et le temps en mode système (//sys//). 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 : 
 +<code bash> 
 +time -f "​%es"​ bash -c "ls | wc" 
 +</​code> ​
 =====top===== =====top=====
  
Line 2552: Line 2694:
 =====type===== =====type=====
  
-**type** est une commande interne de bash qui indique comment chaque ​nom doit être interprété ​si on l'​utilise en nom de commande.+**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.
  
-  * ''​-a''​ : affiche tous les emplacements de l'​exécutable en paramètre (les alias et les fonctions) et son code source 
 <code bash> <code bash>
-# lister toutes les fonctions +type -t ls 
-declare ​-F + builtin 
-[..] +type -t l 
-declare ​-f titreterm+ alias 
 +type l 
 + l is aliased to '​ls ​-p --color'​ 
 + 
 +type -t ssh 
 + ​file 
 +type ssh 
 + ssh is hashed (/​usr/​bin/​ssh)
  
-# afficher le code de celle-ci (équivalent de "​declare -f titreterm"​) 
 type -a titreterm type -a titreterm
-titreterm ​est une fonction + titreterm ​is a function 
-titreterm ()  + ​titreterm () 
-+ {
     if [[ $# -eq 1 && -n $1 ]]; then     if [[ $# -eq 1 && -n $1 ]]; then
         echo -ne "​\033]0;​$1\007";​         echo -ne "​\033]0;​$1\007";​
     fi     fi
-}+ }
 </​code>​ </​code>​
 +
 +Voir aussi : [[informatique:​linux:​commandes_linux#​declare|declare]].
  
 =====update-rc.d===== =====update-rc.d=====
informatique/linux/commandes_linux.1574522339.txt.gz · Last modified: 2019/11/23 16:18 by pteu