Table des matières

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)

awk

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 

bc

Faire du calcul flottant

Source

echo "5/2" | bc -l # 2.50000000000000000000

ou

echo "scale=1;5/2" | bc # 2.5

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

bsdiff oldfile newfile patchfile
bspatch oldfile newfile patchfile

crontab

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=""

curl

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

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

Options:

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

cut

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

diff <fichier1> <fichier2>

Options :

Avoir un diff coloré : utiliser le programme colordiff.

Alias sympa :

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

echo

Options:

La commande printf interprète automatiquement les séquences comme \t et a moins de variantes suivant les shells.

find

find <location> -name <expression>

Options:

Sources:

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

find .

grep

Options:

Exclure plusieurs motifs (source) :

grep -v -e foo -e bar

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?:\/\/.+?\]\]"

htop

ls

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.

lsof

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)

Lister les fichiers ouverts par un processus :

lsof -p $pid

mktemp

Source

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

perf

popd, pushd et dirs

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

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:

sed

Enchaîner plusieurs commandes

Les séparer par des points-virgules :

sed -E 's/foo/bar/;/^\s*$/d'

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

ou les lignes qui ne contiennent rien (potentiellement uniquement des espaces) :

sed '/^\s*$/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'

Supprimer tous les espaces au début d'une ligne

Source

sed 's/^[[:space:]]*//g'

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

Afficher les lignes jusqu'à atteindre un motif (inclus)

Source

sed '/pattern/q' $fichier

Ne garder qu'un ensemble de lignes

Source

sed -n '16224,16482p' filename > newfile

N'afficher que les lignes où on fait une substitution

sed -nE "s/mpiP: Storing mpiP output in \[(.+)\]./\1/p" $f

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

sed -n -e '/^BEGIN$/,/^END$/{/^BEGIN$/d;/^END$/d;p;}' input

N'affiche que les deuxièmes lignes après un motif

Truc
Foo:
Machin
Ligne à afficher
Truc
Foo:
sdfs
Ligne à afficher
sdfs
sed -n '/Foo:/{n;n;p}' $file

sort

Trie les lignes

Options:

Trier la sortie de du

du -h -d 1 | sort -h

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:

sox fichier.mp3 fichier.wav

tail

Enlever la première ligne d'un fichier

tail -n +2 fichier

tar

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]

Top

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 :

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:].

Remplacer les majuscules par des minuscules (source) :

echo "$a" | tr '[:upper:]' '[:lower:]'

uniq

Source

Obtenir une liste en enlevant les doublons:

uniq file.txt

Options:

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

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

Options:

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.

Autres

Patch & apply

Source

diff -u hello.c hello_patched.c > hello.patch
patch < hello.patch
patch -R < hello.patch # pour annuler le patch