Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== 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]]) * [[https://shafi.ddns.net/blog/customize-nano-text-editor|Customize Nano Text Editor]] ==== awk ==== * [[https://learnbyexample.github.io/learn_gnuawk/]] === Sommer des entiers === [[https://stackoverflow.com/questions/450799/shell-command-to-sum-integers-one-per-line|Source]] Avec un entier par ligne: <code bash> awk '{s+=$1} END {print s}' filesrc </code> === Statistiques === [[https://unix.stackexchange.com/questions/13731/is-there-a-way-to-get-the-min-max-median-and-average-of-a-list-of-numbers-in|Source]] <code bash> # avec une valeur par ligne dans $values : avg=$(echo "$values" | awk '{x+=$0}END{print x/NR}') min=$(echo "$values" | awk 'NR==1||$0<x{x=$0}END{print x}') max=$(echo "$values" | awk 'NR==1||$0>x{x=$0}END{print x}') </code> Autre façon de faire une moyenne ([[https://linuxconfig.org/calculate-column-average-using-bash-shell|source]]) : <code bash> 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> ==== bsdiff et bspatch ==== Ces binaires proviennent du paquet ''bsdiff'' et permettent de comparer des binaires (''bsdiff'') pour générer un patch des différences et d'ensuite appliquer ce patch à un binaire (''bspatch''). <code bash> bsdiff oldfile newfile patchfile bspatch oldfile newfile patchfile </code> ==== crontab ==== Les logs des exécutions des crons sont dans ''/var/log/syslog'': <code bash> sudo grep CRON /var/log/syslog </code> Interagir avec les crons d'un autre utilisateur: <code bash> crontab -u $user [action] </code> Parmi les actions, ''-r'' permet de supprimer le fichier de cron. Lister les crons de tous les utilisateurs: <code bash> for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l done; </code> === Ne pas envoyer les sorties textuelles par mail === [[http://www.auxnet.org/index.php/the-news/228-stop-cron-daemon-from-sending-email-for-each-job]] Avant les déclarations des CRONs, préciser la variable suivante: <code bash> MAILTO="" </code> ==== 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: <code bash> curl -sD - <ip, adresse...> </code> Options: * s'authentifier sur une authentification basique: ''%%--%%user admin:pass'', ou sinon ''"http://admin:pass@ip/"''. Si juste un nom d'utilisateur est précisé, le mot de passe sera demandé par un prompt. * ''-f'': considère les erreurs HTTP comme de vraies erreurs (= renvoie un code d'erreur) * ''%%--%%local-port 20'': spécifie le port local de connexion * ''-I'' n'affiche que les headers de la réponse * ''-i'' affiche également les en-têtes de la réponse * ''%%--%%interface <iface>'': préciser par quelle interface réseau doit passer la requête * ''-L'' suivre les redirections HTTP (vers HTTPS, par exemple) * ''-s'': mode silencieux * ''%%--%%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 * ''-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 que ''curl'' ne renvoie rien comme information (la redirection provoque l'affichage de statistiques de progression, le ''-s'' sert à éviter ça): <code bash> curl -s https://url/ > /dev/null </code> Récupérer uniquement le code HTTP de réponse ([[https://stackoverflow.com/questions/6136022/script-to-get-the-http-status-code-of-a-list-of-urls|source]]): <code bash> curl -o /dev/null --silent --head --write-out "%{http_code}\n" $url </code> ==== cut ==== [[https://www.thegeekstuff.com/2013/06/cut-command-examples/|Source]] <code bash> dpkg -l | grep php5 | cut -c5-20 dpkg -l | grep php5 | cut -d ' ' -f 3 </code> Le séparateur par défaut est la tabulation. ==== diff ==== <code bash> diff <fichier1> <fichier2> </code> Options : * ''-y'' : met les fichiers côte à côte * ''%%--%%suppress-common-lines'' : n'affiche pas les lignes identiques Avoir un diff coloré : utiliser le programme ''colordiff''. Alias sympa : <code bash> alias diff='colordiff -y --suppress-common-lines' </code> ==== echo ==== * [[https://stackoverflow.com/questions/525872/echo-tab-characters-in-bash-script]] Options: * ''-n'': ne pas faire de retour à la ligne * ''-e'': interprète les séquences comme ''\t''. Nécessaire pour bash, pas avec zsh. La commande ''printf'' interprète automatiquement les séquences comme ''\t'' et a moins de variantes suivant les shells. ==== find ==== <code bash> find <location> -name <expression> </code> Options: * ''-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]]). * ''-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: * [[https://opensource.com/article/18/4/how-use-find-linux]] * [[https://www.cyberciti.biz/faq/howto-find-a-directory-linux-command/]] Lister tous les fichiers d'un dossier, récursivement: <code bash> find . </code> ==== grep ==== Options: * ''-I'': ne pas chercher dans les fichiers binaires * ''-v'': inverser la recherche: prendre les motifs qui ne correspondent pas. * ''-L'': affiche les fichiers ne contenant pas le motif * ''-A <nb>'': affiche ''nb'' lignes de contexte après * ''-B <nb>'': affiche ''nb'' lignes de contexte avant * ''-C <nb>'': affiche ''nb'' lignes de contexte avant et après * ''%%--%%no-group-separator'': retire le séparateur entre les résultats lorsque des lignes de contexte sont ajoutées * ''-o'': ne renvoyer que les parties de la ligne qui correspondent au motif * ''%%--%%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é Exclure plusieurs motifs ([[https://www.baeldung.com/linux/grep-exclude-multiple-patterns|source]]) : <code bash> grep -v -e foo -e bar </code> === Expression régulières === Faire un OU: '''pattern1\|pattern2''' Les lignes commençant par 19 ou 23: <code bash> grep '^\(19\|23\)' egrep '^(19|23)' </code> Pour utiliser les quantificateurs paresseux (//non-greedy// / //lazy//), il faut utiliser l'option ''-P''. Les quantificateurs paresseux permettent de terminer une regex dès qu'une première occurrence est trouvée, cela se fait un rajoutant un point d'interrogation après le quantificateur ([[https://stackoverflow.com/questions/3027518/how-to-do-a-non-greedy-match-in-grep/3027524|source]]): <code bash> grep -P -o "\[\[https?:\/\/.+?\]\]" </code> ==== htop ==== * [[https://peteris.rocks/blog/htop/|htop explained]] ==== ls ==== === Changer la couleur de la sortie === [[https://doc.ubuntu-fr.org/ls_couleur]] <code bash> # 1. Esporter la configuration actuelle: dircolors -p > ~/.ls_colors # 2. Changer la configuration dans le fichier .ls_colors # 3. Rajouter dans le bashrc: eval `dircolors $HOME/.ls_colors` # dircolros va définir la variable LS_COLORS. </code> ==== lsof ==== Liste les fichiers ouverts. <code bash> 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> ==== mktemp ==== [[https://www.cyberciti.biz/tips/shell-scripting-bash-how-to-create-temporary-random-file-name.html|Source]] 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]] ==== popd, pushd et dirs ==== * [[https://unix.stackexchange.com/questions/77077/how-do-i-use-pushd-and-popd-commands]] <code bash> dirs # visualiser la pile des répertoires pushd some_dir # va dans le dossier some_dir et l'ajoute à la pile des répertoires popd # va dans le dossier précédent, en enlevant de le répertoire de la pile </code> ==== readlink ==== Donne le chemin absolu d'un fichier ou d'un dossier. ==== rsync ==== <code bash> rsync ~/a/b/ /c/b </code> Tout le contenu de ''/a/b'' ira dans ''/c/b/''. Ces commandes sont équivalentes (exemple tiré du man): <code bash> rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo </code> Options: * ''-L'' permet de remplacer les liens symboliques par leur véritable contenu. Ne pas oublier de mettre ''-r'' pour que cela s'applique récursivement aux dossiers (inclus dans le raccourci ''-a'') * ''%%--%%no-perms'' ne préserve pas les permissions * ''-P'' affiche la progression * ''-n'' explique ce qui va se passer, sans le faire * ''%%--%%size-only'' compare les fichiers en se basant uniquement sur leur taille, ne fait pas attention aux timestamps * ''-c'': compare les fichiers avec leur hash * ''%%--%%exclude='PATTERN''' exclut les fichiers correspondant au pattern. rsync ne comprend pas les regex, seulement l'astérisque a du sens (sinon, combiner avec ''find''...) * ''%%--%%omit-dir-times'' : ignore les dates de modifications des répertoires * ''-i'' ou ''%%--%%itemize-changes'' : permet de savoir pour quelle raison un fichier est transféré (voir le man pour la signification des symboles) ([[https://unix.stackexchange.com/questions/341413/see-only-changes-when-running-rsync/341415|source]]) * [[https://stackoverflow.com/questions/4493525/rsync-what-means-the-f-on-rsync-logs]] ==== sed ==== * [[https://www.folkstalk.com/2013/03/sed-remove-lines-file-unix-examples.html]] * [[https://opensource.com/article/20/12/sed]] * [[http://sed.sourceforge.net/sed1line_fr.html]] * ''-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 === [[https://unix.stackexchange.com/questions/112023/how-can-i-replace-a-string-in-a-files|Source]] <code bash> sed -i 's/toreplace/replaced/g' * # Mac: il est nécessaire de préciser une extension pour les fichiers de sauvegardes: sed -i.bak 's/toreplace/replaced/g' * </code> === Supprimer des caractères dans chaque ligne === Pour supprimer tous les guillemets: <code bash> sed 's/"//g' </code> === Supprimer les lignes qui contiennent un motif === <code bash> sed '/2K/d' fichier </code> === Supprimer les lignes vides === <code bash> sed '/^$/d' fichier </code> ou les lignes qui ne contiennent rien (potentiellement uniquement des espaces) : <code bash> sed '/^\s*$/d' fichier </code> === Supprimer les redondances de caractères === [[https://unix.stackexchange.com/questions/19014/how-to-strip-multiple-spaces-to-one-using-sed|Source]] Ici, des espaces: s'il y a plus de un espace consécutif, on ne garde que le premier: <code bash> 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> === Extraire et réordonner les éléments d'une chaîne === <code bash> echo "Releve_n_9999_du_26_10_2012_123456789_abcdfeg.pdf" | sed -e "s/Releve_n_[0-9]*_du_\([0-9]*\)_\([0-9]*\)_\([0-9]*\)_.*/\3-\2-\1.pdf/" # 2012-10-26.pdf </code> === Ne garder que les 100 premières lignes === <code bash> sed -i 100q $fichier </code> === Préfixer toutes les lignes === Ici par une tabulation ([[https://stackoverflow.com/questions/2099471/add-a-prefix-string-to-beginning-of-each-line|source]]) : <code bash> sed 's/^/\t/' </code> === Supprimer les premières lignes jusqu'à celle contenant un motif === Tant que le motif donné n'est pas trouvé dans une ligne, supprimer les lignes et afficher toutes les lignes qui suivent (n'affiche pas la première ligne qui correspond au motif ; [[https://www.unix.com/shell-programming-and-scripting/248021-sed-printing-lines-after-pattern-matching-excluding-line-containing-pattern.html|source]]) : <code bash> # Supprime toutes les entrée de logs antérieures au 22 avril 2021 : sed '1,/22\/Apr\/2021/d' nginx-access.log </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 === Trie les lignes Options: * ''-n'': trie suivant l'ordre numérique et non lexicographique. === Trier la sortie de du === <code bash> du -h -d 1 | sort -h </code> ==== sox ==== Permet de convertir les fichiers audio. Installer les paquets ''sox'' et ''libsox-fmt-all'' (pour manipuler du MP3). ''sox'' fournit aussi la commande ''play''. Convertir un fichier MP3 en WAV: <code bash> sox fichier.mp3 fichier.wav </code> ==== tail ==== === Enlever la première ligne d'un fichier === <code bash> tail -n +2 fichier </code> ==== tar ==== [[https://doc.ubuntu-fr.org/tar|Source]] Lister les fichiers d'une archive: <code bash> tar -tf archive.tar </code> Créer une archive à partir un dossier: <code bash> tar cvf dossier.tar dossier </code> Créer une archive à partir d'une liste de fichiers (l'arborescence des fichiers passés en arguments est respectée dans l'archive): <code bash> tar cvf archive.tar fichier1 fichier2 ... </code> Extraire une archive: <code bash> tar fxv archive.tar[.gz] </code> Créer un dossier racine dans l'archive, qui contiendra tout ce qui va être archivé ([[https://askubuntu.com/questions/598237/how-to-create-a-common-base-folder-with-tar-and-how-to-rename-folders|source]]): <code bash> tar cvf archive.tar --transform 's,^,archive/,' [fichiers à archiver] </code> ==== Top ==== * [[https://codywu2010.wordpress.com/2015/10/22/show-last-used-cpu-in-top-and-ps/]] La touche ''f'' permet de choisir les champs à afficher. Les champs à afficher doivent être contigus. Une fois de retour à l'interface principale, il est possible de sauvegarder les réglages avec ''Shift+W''. La configuration est sauvegardée dans ''~/.toprc''. La touche ''H'' permet d'afficher les threads. ==== tr ==== Remplace des caractères dans une chaîne de caractères : <code bash> tr ' ' '\n' </code> Supprimer les espaces : <code bash> echo "texte avec des espaces" | tr -d '[:space:]' </code> ''[: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> ==== uniq ==== [[https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/40172-extraire-trier-et-filtrer-des-donnees#/id/r-40109|Source]] Obtenir une liste en enlevant les doublons: <code bash> uniq file.txt </code> Options: * ''-c'': afficher le nombre d'occurences * ''-d'': afficher uniquement les lignes présentes plusieurs fois ==== wget ==== [[https://chispa.fr/sima78/index.php?post/2018/11/14/Wget-%E2%80%93-Aspirer-un-site-n%E2%80%99est-pas-un-crime]] === Aspirer tous les fichiers d'un site === <code bash> wget -r -k -E -np --limit-rate=100k https://site-aspired.com </code> Options: * ''-r'' pour parcourir tous les liens du sites. * ''-k'' conversion des liens en liens locaux. * ''-E'' conversion PHP vers HTML, facilite la lecture depuis votre navigateur. * ''-np'' pour ne pas remonter dans l’arborescence du site * ''--limit-rate=100k'' limite la vitesse de téléchargement à 100k/s * ''--no-http-keep-alive --no-cache'' permet de ne pas réutiliser une connexion TCP déjà existante avec un serveur === Essayer une connexion HTTP à une page web === [[https://stackoverflow.com/questions/6136022/script-to-get-the-http-status-code-of-a-list-of-urls|source]] <code bash> wget --server-response --spider --quiet $url </code> Il faut ensuite parser la réponse du serveur pour vraiment avoir le code HTTP. ==== Autres ==== === Patch & apply === [[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> linux/commands.txt Dernière modification : 2025/11/07 22:21de phsw