| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| linux:commands [2023/04/11 11:34] – [diff] fix formatting phsw | linux:commands [2025/11/07 22:21] (Version actuelle) – [sed] add how to print nth line after a matching line phsw |
|---|
| ====== Commandes Linux ====== | ====== Commandes Linux ====== |
| |
| Certaines commandes (''grep'', ''ls'', ...) acceptent en paramètre ''--color=always'' qui permet de garder les colorations lorsque les commandes sont pipées. Utile pour piper plusieurs ''grep'', par exemple. ([[https://superuser.com/questions/923275/how-can-i-make-grep-respects-colors-on-a-pipe|Source]]) | Certaines commandes (''grep'', ''ls'', ...) acceptent en paramètre ''%%--%%color=always'' qui permet de garder les colorations lorsque les commandes sont pipées. Utile pour piper plusieurs ''grep'', par exemple. ([[https://superuser.com/questions/923275/how-can-i-make-grep-respects-colors-on-a-pipe|Source]]) |
| |
| | |
| | * [[https://shafi.ddns.net/blog/customize-nano-text-editor|Customize Nano Text Editor]] |
| |
| ==== awk ==== | ==== awk ==== |
| <code bash> | <code bash> |
| awk '{ total += $1; count++ } END { print total/count }' file.txt | awk '{ total += $1; count++ } END { print total/count }' file.txt |
| | </code> |
| | |
| | |
| | |
| | ==== bc ==== |
| | |
| | === Faire du calcul flottant === |
| | |
| | [[https://unix.stackexchange.com/questions/66766/are-operations-on-floats-supported-with-bc|Source]] |
| | |
| | <code bash> |
| | echo "5/2" | bc -l # 2.50000000000000000000 |
| | </code> |
| | ou |
| | <code bash> |
| | echo "scale=1;5/2" | bc # 2.5 |
| </code> | </code> |
| |
| |
| ==== curl ==== | ==== curl ==== |
| | |
| | * [[https://jpmens.net/2025/01/23/uploading-a-message-to-an-imap-server-using-curl/|Uploading a message to an IMAP server using curl]] |
| |
| Obtenir une page web avec les en-têtes: | Obtenir une page web avec les en-têtes: |
| * ''%%--%%data "param1=value1¶m2=value2"'' ou ''%%--%%data "param1=value1" %%--%%data "param2=value2"'': préciser le contenu de champs POST. La méthode HTTP sera POST par défaut. [[https://superuser.com/a/149335|Source]] | * ''%%--%%data "param1=value1¶m2=value2"'' ou ''%%--%%data "param1=value1" %%--%%data "param2=value2"'': préciser le contenu de champs POST. La méthode HTTP sera POST par défaut. [[https://superuser.com/a/149335|Source]] |
| * ''-X <method>'': précise la méthode HTTP | * ''-X <method>'': précise la méthode HTTP |
| | * ''-F "userid=32"'' : précise un couple clé/valeur d'une requête POST |
| | * ''-F "img=@/tmp/img.png"'' : précise le fichier à envoyer via un formulaire POST |
| |
| Pour afficher les en-têtes de la requête, il faut utiliser le mode verbeux avec l'option ''-v''. | Pour afficher les en-têtes de la requête, il faut utiliser le mode verbeux avec l'option ''-v''. |
| </code> | </code> |
| Options: | Options: |
| * ''-delete'': supprimer les fichiers trouvés | * ''-delete'' : supprimer les fichiers trouvés |
| * ''-exec du -ch {} +'': connaître la taille des fichiers trouvés. S'il y a trop de fichiers, ''find'' va faire des paquets de paramètres et plusieurs appels à ''du''. La solution est d'utiliser : ''find -type f -iname *.jpg -print0 | du -ch --files0-from=-'' ([[https://unix.stackexchange.com/questions/41550/find-the-total-size-of-certain-files-within-a-directory-branch|source]]). | * ''-exec du -ch {} +'' : connaître la taille des fichiers trouvés. S'il y a trop de fichiers, ''find'' va faire des paquets de paramètres et plusieurs appels à ''du''. La solution est d'utiliser : ''find -type f -iname *.jpg -print0 | du -ch --files0-from=-'' ([[https://unix.stackexchange.com/questions/41550/find-the-total-size-of-certain-files-within-a-directory-branch|source]]). |
| * ''-type d'': cherche uniquement des dossiers | * ''-type d'' : cherche uniquement des dossiers |
| | * ''-perm -g+r,g+x'' : cherche les fichiers avec le groupe qui peut lire et exécuter |
| | * ''\! -perm -g+r'' : cherche les fichiers que l e groupe n'a pas le droit de lire |
| |
| Sources: | Sources: |
| * ''%%--%%include \*.scm'': cherche uniquement dans les fichiers terminant par ''.scm'' ([[https://stackoverflow.com/questions/12516937/how-can-i-grep-recursively-but-only-in-files-with-certain-extensions|source]]) | * ''%%--%%include \*.scm'': cherche uniquement dans les fichiers terminant par ''.scm'' ([[https://stackoverflow.com/questions/12516937/how-can-i-grep-recursively-but-only-in-files-with-certain-extensions|source]]) |
| * ''%%--%%exclude-dir=some-dir'': exclue tous les fichiers dans le dossier donné | * ''%%--%%exclude-dir=some-dir'': exclue tous les fichiers dans le dossier donné |
| | |
| | Exclure plusieurs motifs ([[https://www.baeldung.com/linux/grep-exclude-multiple-patterns|source]]) : |
| | <code bash> |
| | grep -v -e foo -e bar |
| | </code> |
| |
| |
| grep -P -o "\[\[https?:\/\/.+?\]\]" | grep -P -o "\[\[https?:\/\/.+?\]\]" |
| </code> | </code> |
| | |
| | |
| | ==== htop ==== |
| | |
| | * [[https://peteris.rocks/blog/htop/|htop explained]] |
| |
| |
| <code bash> | <code bash> |
| sudo lsof +L1 # liste les fichiers ouverts qui ont moins d'un lien physique (= qui ont été supprimés depuis leur ouverture) | sudo lsof +L1 # liste les fichiers ouverts qui ont moins d'un lien physique (= qui ont été supprimés depuis leur ouverture) |
| | </code> |
| | |
| | Lister les fichiers ouverts par un processus : |
| | <code bash> |
| | lsof -p $pid |
| </code> | </code> |
| |
| |
| Permet de créer un fichier temporaire avec un nom aléatoire, dans le dossier ''/tmp/''. | Permet de créer un fichier temporaire avec un nom aléatoire, dans le dossier ''/tmp/''. |
| | |
| | |
| | |
| | ==== perf ==== |
| | |
| | * [[http://www.brendangregg.com/perf.html|Linux perf examples]] |
| | * [[https://gitlab.in2p3.fr/grasland/tp-perf|TP perf]] |
| |
| |
| * ''-i'': éditer directement les fichiers. Par défaut, ''sed'' affiche le résultat, et rediriger la commande vers le même fichier efface le contenu du fichier... | * ''-i'': éditer directement les fichiers. Par défaut, ''sed'' affiche le résultat, et rediriger la commande vers le même fichier efface le contenu du fichier... |
| |
| | |
| | === Enchaîner plusieurs commandes === |
| | |
| | Les séparer par des points-virgules : |
| | <code bash> |
| | sed -E 's/foo/bar/;/^\s*$/d' |
| | </code> |
| |
| === Remplacer du texte dans des fichiers === | === Remplacer du texte dans des fichiers === |
| <code bash> | <code bash> |
| sed '/^$/d' fichier | sed '/^$/d' fichier |
| | </code> |
| | |
| | ou les lignes qui ne contiennent rien (potentiellement uniquement des espaces) : |
| | <code bash> |
| | sed '/^\s*$/d' fichier |
| </code> | </code> |
| |
| <code bash> | <code bash> |
| sed -n 's/ \+/ /gp' | sed -n 's/ \+/ /gp' |
| | </code> |
| | |
| | |
| | === Supprimer tous les espaces au début d'une ligne === |
| | |
| | [[https://stackoverflow.com/questions/34322188/removing-all-spaces-from-the-beginning-of-lines|Source]] |
| | |
| | <code bash> |
| | sed 's/^[[:space:]]*//g' |
| </code> | </code> |
| |
| </code> | </code> |
| |
| | |
| | === Afficher les lignes jusqu'à atteindre un motif (inclus) === |
| | |
| | |
| | [[https://unix.stackexchange.com/questions/11305/show-all-the-file-up-to-the-match|Source]] |
| | <code bash> |
| | sed '/pattern/q' $fichier |
| | </code> |
| | |
| | |
| | === Ne garder qu'un ensemble de lignes === |
| | |
| | [[https://stackoverflow.com/questions/83329/how-can-i-extract-a-predetermined-range-of-lines-from-a-text-file-on-unix|Source]] |
| | <code bash> |
| | sed -n '16224,16482p' filename > newfile |
| | </code> |
| | |
| | |
| | === N'afficher que les lignes où on fait une substitution === |
| | |
| | <code bash> |
| | sed -nE "s/mpiP: Storing mpiP output in \[(.+)\]./\1/p" $f |
| | </code> |
| | |
| | Le paramètre ''-n'' indique de n'afficher aucune ligne, c'est le flag ''p'' qui indique qu'il faut afficher la ligne. |
| | |
| | |
| | |
| | === Ne garder que des lignes délimitées === |
| | |
| | Pour ne garder que les lignes qui sont entre des lignes qui contiennent ''BEGIN'' et ''END'' [[https://unix.stackexchange.com/questions/78472/print-lines-between-start-and-end-using-sed|source]] : |
| | <code bash> |
| | sed -n -e '/^BEGIN$/,/^END$/{/^BEGIN$/d;/^END$/d;p;}' input |
| | </code> |
| | |
| | |
| | === N'affiche que les deuxièmes lignes après un motif === |
| | |
| | * [[https://www.baeldung.com/linux/show-nth-line-after-match|Source]] |
| | |
| | <code> |
| | Truc |
| | Foo: |
| | Machin |
| | Ligne à afficher |
| | Truc |
| | Foo: |
| | sdfs |
| | Ligne à afficher |
| | sdfs |
| | </code> |
| | |
| | |
| | <code bash> |
| | sed -n '/Foo:/{n;n;p}' $file |
| | </code> |
| ==== sort === | ==== sort === |
| |
| ==== tr ==== | ==== tr ==== |
| |
| Remplace des caractères dans une chaîne de caractères: | Remplace des caractères dans une chaîne de caractères : |
| <code bash> | <code bash> |
| tr ' ' '\n' | tr ' ' '\n' |
| </code> | </code> |
| |
| Supprimer les espaces: | Supprimer les espaces : |
| <code bash> | <code bash> |
| echo "texte avec des espaces" | tr -d '[:space:]' | echo "texte avec des espaces" | tr -d '[:space:]' |
| </code> | </code> |
| ''[:space:]'' supprime tous les espaces, y compris les retours à la ligne. Pour ne supprimer que les espaces horizontaux, il faut utiliser ''[:blank:]''. | ''[:space:]'' supprime tous les espaces, y compris les retours à la ligne. Pour ne supprimer que les espaces horizontaux, il faut utiliser ''[:blank:]''. |
| | |
| | Remplacer les majuscules par des minuscules ([[https://stackoverflow.com/questions/2264428/how-to-convert-a-string-to-lower-case-in-bash|source]]) : |
| | <code bash> |
| | echo "$a" | tr '[:upper:]' '[:lower:]' |
| | </code> |
| |
| |
| === Patch & apply === | === Patch & apply === |
| |
| * [[https://www.thegeekstuff.com/2014/12/patch-command-examples/]] | [[https://www.thegeekstuff.com/2014/12/patch-command-examples/|Source]] |
| | |
| | <code bash> |
| | diff -u hello.c hello_patched.c > hello.patch |
| | patch < hello.patch |
| | patch -R < hello.patch # pour annuler le patch |
| | </code> |
| |
| |