Both sides previous revisionPrevious revisionNext revision | Previous revision |
informatique:linux:commandes_linux [2024/09/14 13:17] – [usermod] pteu | informatique:linux:commandes_linux [2025/04/25 07:57] (current) – [diff] ignore option pteu |
---|
=====diff===== | =====diff===== |
| |
diff permet d'afficher les différence entre 2 fichiers : | diff permet d'afficher les différences entre 2 fichiers : |
<code> | <code bash> |
cd /tmp ; echo "toto" > toto ; echo "titi" > titi | cd /tmp ; echo "toto" > toto ; echo "titi" > titi |
diff toto titi | diff toto titi |
> titi | > titi |
</code> | </code> |
| |
| On peut ignorer des motifs avec l'option ''-I <motif>'', par exemple pour ignorer les commentaires : ''diff -I "^#" toto titi''. |
| |
Un patchfile c'est un fichier qui contient la sortie d'un diff : | Un patchfile c'est un fichier qui contient la sortie d'un diff : |
<code> | <code bash> |
diff -u toto titi > toto_titi.patch | diff -u toto titi > toto_titi.patch |
</code> | </code> |
Pour patcher toto avec les modifications de titi on utilise la commande **patch** avec le patchfile : | Pour patcher toto avec les modifications de titi on utilise la commande **patch** avec le patchfile : |
<code> | <code bash> |
patch -b toto toto_titi.patch | patch -b toto toto_titi.patch |
patching file toto | patching file toto |
</code> | </code> |
| |
Liste des options les plus utilisées (totalement subjectif) : | Liste des options utiles (totalement subjectif) : |
* ''-type d'' pour spécifier le type du fichier recherché (notamment **d**irectory, regular **f**ile, symbolic **l**ink) | * ''-type d'' pour spécifier le type du fichier recherché (notamment **d**irectory, regular **f**ile, symbolic **l**ink) |
* ''-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>// |
* ''-type f -executable'' permet d'afficher les fichiers exécutables. Fonctionne aussi avec ''-readable'' et ''-writable''. | * ''-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). On peut additionner plusieurs commandes à exécuter, en spécifiant plusieurs fois le paramètre ''-exec'' |
* ''-size +1000M'' ne valide que les fichiers dont la taille est supérieure à 1000 Mo. | * ''-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. | * ''-printf'' pour contrôler la sortie et n'afficher que des champs spécifiques du fichier ; voir la partie exemples plus bas. |
find . -regextype posix-egrep -iregex '.*.avi|.*.mkv|.*.mp4|.*.m4v|.*.m2ts' | sed 's/.*\///g' | sort | find . -regextype posix-egrep -iregex '.*.avi|.*.mkv|.*.mp4|.*.m4v|.*.m2ts' | sed 's/.*\///g' | sort |
| |
# supprimer toutes ces maudites miniatures Windows : | # afficher puis supprimer supprimer toutes ces maudites miniatures Windows : |
find . -name Thumbs.db -exec rm {} \; | find . -name Thumbs.db -exec echo {} \; -exec rm -f {} \; |
| |
# attribuer des permissions à tous les sous-répertoires contenus dans le répertoire pics : | # attribuer des permissions à tous les sous-répertoires contenus dans le répertoire pics : |
<code bash> | <code bash> |
# afficher le contenu du fichier en remplaçant toto par titi | # afficher le contenu du fichier en remplaçant toto par titi |
cat fichier.txt | sed 's/toto/titi' | cat fichier.txt | sed 's/toto/titi/' |
| |
# même chose en plus simple | # même chose en plus simple |
sed 's/toto/titi' fichier.txt | sed 's/toto/titi/' fichier.txt |
</code> | </code> |
| 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'' : | 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 '/toto/,/titi/d' | sed '/toto/,/titi/d' |
| </code> |
| |
| * remplacer le motif "MOTIF" par "REPLACE" uniquement sur les ligne matchant le motif "SELECT" |
| <code bash> |
| sed '/SELECT/s/MOTIF/REPLACE/' toto.txt |
</code> | </code> |
| |
</code> | </code> |
| |
| |
| =====strace===== |
| |
| Permet de débugguer les appels système d'un processus. |
| |
| Liens : |
| * [[https://linuxfr.org/users/raphj/journaux/debugger-un-probleme-de-performance-avec-strace|Débugger un problème de performance avec strace]] (journal LinuxFR) |
=====strings===== | =====strings===== |
| |
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. | 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 %%* * *%%. | 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''. |
<code bash> | <code bash> |
traceroute google.fr | traceroute google.fr |
</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''). | 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===== | =====trap===== |