Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
informatique:linux:commandes_linux [2020/01/02 16:08] – [stat] pteu | informatique:linux:commandes_linux [2020/11/20 15:48] – [at] pteu |
---|
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). | Permet de programmer l'exécution d'une tâche à une heure donnée (une seule exécution, à la différence [[cron]]). La syntaxe est ''at heure jour'' ; puis on saisi une commande par ligne ; et enfin on quitte l'outil par un ''ctrl+d'' (''<EOT>''). Le jour n'est pas obligatoire ; par défaut on utilise la date du jour courant (''at 14:45 10/19/06'' équivaut à ''at 14:45'' si on est le 19 octobre 2006). Il est possible de compter par rapport à l'heure/la date courante : ''at 15:00 + 3 days'' programme une commande pour 15h00 dans 2 jours (marche aussi avec l'heure). |
| |
Enfin, on peut spécifier l'heure d'exécution en chiffres au format : ''at -t "YYMMDDmmHH"''. | On peut spécifier l'heure d'exécution en chiffres au format : ''at -t "YYMMDDmmHH"''. |
| |
| * ''at'' : créer une tâche |
| * ''atq'' : lister les tâches programmées et affiche leur ID |
| * ''at -c <ID>'' : afficher le contenu de la tâche n°<ID> |
| * ''atrm <ID>'' : supprimer la tâche <ID> |
| |
<code bash> | <code bash> |
<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 |
| |
<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> |
| |
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===== |
| |
* ''-q'' (**q**uiet) n'affiche rien, se contente de retourner le code d'erreur 0 s'il trouve le motif, 1 sinon | * ''-q'' (**q**uiet) n'affiche rien, se contente de retourner le code d'erreur 0 s'il trouve le motif, 1 sinon |
* ''-o'' (**o**nly-matching) : n'affiche que les résultats matchant le motif (et pas la ligne entière) | * ''-o'' (**o**nly-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 fichiers |
| |
Il est possible d'utiliser les expressions régulières dans le motif, par exemple : | Il est possible d'utiliser les expressions régulières dans le motif, par exemple : |
=====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 |
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 : |
</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 : |
* ''-t'' (//time//) classe les résultats par date de dernière modification | * ''-t'' (//time//) classe les résultats par date de dernière modification |
* ''-r'' (//reverse//) inverse le classement des résultats | * ''-r'' (//reverse//) inverse le classement des résultats |
| * ''-1'' (tiret un, et non tiret L) pour formater le résultat sur une seule colonne |
| |
<code bash> | <code bash> |
=====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. |
* ''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 : |
=====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") : | <WRAP center round important 60%> |
| 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. |
| </WRAP> |
| |
| * 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> |
| |
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> |
| |
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 : |
* ''-t'' précise le séparateur de colonne (par défaut un espace blanc) | * ''-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 | * ''-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 standard |
| |
Exemple : | Exemple : |
</code> | </code> |
| |
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'' | On peut filtrer le résultat par type d'information recherchée avec l'option ''-c'' ; par exemple : |
<code bash> | <code bash> |
| # N'afficher que la date de dernière modification du fichier (au format //human-readable//) : ''%y'' |
$ stat -c "%y" toto.txt | $ stat -c "%y" toto.txt |
2018-08-30 18:15:02.295782414 +0200 | 2018-08-30 18:15:02.295782414 +0200 |
| |
| # Afficher la taille du fichier (ici il est vide) |
| $ stat -c "%s" toto.txt |
| 0 |
</code> | </code> |
| |
=====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===== |