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)
# 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;
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:
--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. 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):
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
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-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 lireSources:
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--exclude-dir=some-dir: exclue tous les fichiers dans le dossier donnéExclure plusieurs motifs (source) :
grep -v -e foo -e bar
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?:\/\/.+?\]\]"
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)
Lister les fichiers ouverts par un processus :
lsof -p $pid
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…Les séparer par des points-virgules :
sed -E 's/foo/bar/;/^\s*$/d'
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' *
Pour supprimer tous les guillemets:
sed 's/"//g'
sed '/2K/d' fichier
sed '/^$/d' fichier
ou les lignes qui ne contiennent rien (potentiellement uniquement des espaces) :
sed '/^\s*$/d' fichier
Ici, des espaces: s'il y a plus de un espace consécutif, on ne garde que le premier:
sed -n 's/ \+/ /gp'
sed 's/^[[:space:]]*//g'
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
sed -i 100q $fichier
Ici par une tabulation (source) :
sed 's/^/\t/'
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
sed '/pattern/q' $fichier
sed -n '16224,16482p' filename > newfile
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.
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
Truc Foo: Machin Ligne à afficher Truc Foo: sdfs Ligne à afficher sdfs
sed -n '/Foo:/{n;n;p}' $file
Trie les lignes
Options:
-n: trie suivant l'ordre numérique et non lexicographique.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
tail -n +2 fichier
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:].
Remplacer les majuscules par des minuscules (source) :
echo "$a" | tr '[:upper:]' '[:lower:]'
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 foiswget -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 serveurwget --server-response --spider --quiet $url
Il faut ensuite parser la réponse du serveur pour vraiment avoir le code HTTP.
diff -u hello.c hello_patched.c > hello.patch patch < hello.patch patch -R < hello.patch # pour annuler le patch