linux:commands

Ceci est une ancienne révision du document !


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. (Source)

Sommer des entiers

Source

Avec un entier par ligne:

awk '{s+=$1} END {print s}' filesrc

Statistiques

Source

# 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}')

Autre façon de faire une moyenne (source) :

awk '{ total += $1; count++ } END { print total/count }' file.txt 

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).

bsdiff oldfile newfile patchfile
bspatch oldfile newfile patchfile

Les logs des exécutions des crons sont dans /var/log/syslog:

sudo grep CRON /var/log/syslog

Interagir avec les crons d'un autre utilisateur:

crontab -u $user [action]

Parmi les actions, -r permet de supprimer le fichier de cron.

Lister les crons de tous les utilisateurs:

for user in $(cut -f1 -d: /etc/passwd);
do
    crontab -u $user -l
done;

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:

MAILTO=""

Obtenir une page web avec les en-têtes:

curl -sD - <ip, adresse...>

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&param2=value2” ou --data “param1=value1” --data “param2=value2”: préciser le contenu de champs POST. La méthode HTTP sera POST par défaut. Source
  • -X <method>: précise la méthode HTTP

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):

curl -s https://url/ > /dev/null

Récupérer uniquement le code HTTP de réponse (source):

curl -o /dev/null --silent --head --write-out "%{http_code}\n" $url

Source

dpkg -l | grep php5 | cut -c5-20
dpkg -l | grep php5 | cut -d ' ' -f 3

Le séparateur par défaut est la tabulation.

diff <fichier1> <fichier2>

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 :

alias diff='colordiff -y --suppress-common-lines'

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 <location> -name <expression>

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=- (source).
  • -type d: cherche uniquement des dossiers

Sources:

Lister tous les fichiers d'un dossier, récursivement:

find .

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 (source)
  • --exclude-dir=some-dir: exclue tous les fichiers dans le dossier donné

Expression régulières

Faire un OU: 'pattern1\|pattern2'

Les lignes commençant par 19 ou 23:

grep '^\(19\|23\)'
egrep '^(19|23)'

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 (source):

grep -P -o "\[\[https?:\/\/.+?\]\]"

Changer la couleur de la sortie

https://doc.ubuntu-fr.org/ls_couleur

# 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.

Liste les fichiers ouverts.

sudo lsof +L1 # liste les fichiers ouverts qui ont moins d'un lien physique (= qui ont été supprimés depuis leur ouverture)

Source

Permet de créer un fichier temporaire avec un nom aléatoire, dans le dossier /tmp/.

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

Donne le chemin absolu d'un fichier ou d'un dossier.

rsync ~/a/b/ /c/b

Tout le contenu de /a/b ira dans /c/b/.

Ces commandes sont équivalentes (exemple tiré du man):

rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

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) (source)
  • -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…

Remplacer du texte dans des fichiers

Source

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' *

Supprimer des caractères dans chaque ligne

Pour supprimer tous les guillemets:

sed 's/"//g'

Supprimer les lignes qui contiennent un motif

sed '/2K/d' fichier

Supprimer les lignes vides

sed '/^$/d' fichier

Supprimer les redondances de caractères

Source

Ici, des espaces: s'il y a plus de un espace consécutif, on ne garde que le premier:

sed -n 's/ \+/ /gp'

Extraire et réordonner les éléments d'une chaîne

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

Ne garder que les 100 premières lignes

sed -i 100q $fichier

Préfixer toutes les lignes

Ici par une tabulation (source) :

sed 's/^/\t/'

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 ; source) :

# Supprime toutes les entrée de logs antérieures au 22 avril 2021 :
sed '1,/22\/Apr\/2021/d' nginx-access.log

Trie les lignes

Options:

  • -n: trie suivant l'ordre numérique et non lexicographique.

Trier la sortie de du

du -h -d 1 | sort -h

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:

sox fichier.mp3 fichier.wav

Enlever la première ligne d'un fichier

tail -n +2 fichier

Source

Lister les fichiers d'une archive:

tar -tf archive.tar

Créer une archive à partir un dossier:

tar cvf dossier.tar dossier

Créer une archive à partir d'une liste de fichiers (l'arborescence des fichiers passés en arguments est respectée dans l'archive):

tar cvf archive.tar fichier1 fichier2 ...

Extraire une archive:

tar fxv archive.tar[.gz]

Créer un dossier racine dans l'archive, qui contiendra tout ce qui va être archivé (source):

tar cvf archive.tar --transform 's,^,archive/,' [fichiers à archiver]

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.

Remplace des caractères dans une chaîne de caractères:

tr ' ' '\n'

Supprimer les espaces:

echo "texte avec des espaces" | tr -d '[:space:]'

[:space:] supprime tous les espaces, y compris les retours à la ligne. Pour ne supprimer que les espaces horizontaux, il faut utiliser [:blank:].

Source

Obtenir une liste en enlevant les doublons:

uniq file.txt

Options:

  • -c: afficher le nombre d'occurences
  • -d: afficher uniquement les lignes présentes plusieurs fois

Aspirer tous les fichiers d'un site

wget -r -k -E -np --limit-rate=100k https://site-aspired.com

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

source

wget --server-response --spider --quiet $url

Il faut ensuite parser la réponse du serveur pour vraiment avoir le code HTTP.

Patch & apply

  • linux/commands.1681205653.txt.gz
  • Dernière modification : 2023/04/11 11:34
  • de phsw