Commandes Linux Wiki perso "pense-bête" de commandes linux utiles

Rechercher dans l’arborescence

find

Parcourir les fichiers à la recherche d’une chaîne de caractères « toto » et afficher ces fichiers :

find /etc -type f -exec grep -Hn "toto" {} \;

Trouver les gros fichiers (1G) :

find / -xdev -type f -size +1G -ls

Opérations sur des variables, dans des fichiers, ou sur des chaines de caractères

cat

Afficher les caractères spéciaux invisibles d’un fichier :

cat -v fichier

Ajouter l’option -T pour également afficher les tabulations :

cat -v -T fichier

sed

Options :

-i : appliquer les modifications dans le fichier indiqué

Caractères qui ont besoin d’être échappés :

$.*[\]^

Caractères qu’il n’est pas utile d’échapper :

Lettres, chiffres et (){}+?|

Rechercher/remplacer dans un fichier :

sed -i "s/occurence/remplacement/g" monfichier
Alternative : on peut utiliser des | ou un autre caractère, afin de ne pas avoir à échapper les slashs :
sed -i "s|occurence|remplacement|g" monfichier

Remplacer une occurrence dans un fichier par une ligne vide :

sed -i "s/occurence//g" monfichier

Supprimer une ligne d’un fichier sans laisser de vide (retour chariot) :

sed '/occurence/d' monfichier

Remplacer deux ou plusieurs lignes vides par une seule :

sed -i '/^$/N;/^\n$/D' monfichier

Supprimer toutes les lignes vides d’un fichier :

sed '/^$/d' monfichier

Supprimer tous les commentaires d’un fichier :

sed '/^#/d' monfichier

Afficher une partie d’un fichier (en définissant un pattern de début et un pattern de fin) :

sed -n -e '/patterndebut/,/patternfin/p'

Supprimer un pattern et toutes les lignes qui suivent jusqu’à rencontrer une ligne vide :

sed -i '/^pattern/,/^$/{d;}' monfichier

Remplacer un bloc entier par un autre en définissant un pattern de début, un pattern de fin et le bloc à insérer :

sed -i '/pattern-debut/,/pattern-fin/c\
ligne1\
ligne2\
ligne3\
ligne4\
ligne5\' monfichier

Insérer une ligne avant un pattern :

sed -i '/^pattern/i maligne' monfichier

awk

Scinder une chaîne en 2 ou plusieurs parties, en fonction d’un caractère de séparation et afficher le terme souhaité

var="terme1:terme2"

Le caractère de séparation est ":", on le définit avec l'option -F
echo "$var" | awk -F: '{print $1}'
terme1

echo "$var" | awk -F: '{print $2}'
terme2

grep

Compter le nombre d’occurrences trouvées par grep :

grep -c "occurence" monfichier

Formatage

Supprimer des caractères au début d’une variable

Exemple : www.toto.com

Supprimer les www. :

NDD="www.toto.com"
NDD=$(echo "${NDD#www.}")

Supprimer des caractères à la fin d’une variable

Exemple : www.toto.com

Supprimer .com :

NDD="www.toto.com"
NDD=$(echo "${NDD%.com}")

Encodage

Voir l’encodage d’un fichier

file -bi FICHIER
text/x-shellscript; charset=iso-8859-1

Modifier l’encodage d’un fichier

-f : format source

-t : format cible

iconv -f iso-8859-1 -t utf-8 -c FICHIER

Locales

Exécuter une commande avec une locale différente (exemple avec date) :

LC_ALL="fr_FR.UTF-8" date +%A

Vim

Rechercher un terme dans un fichier avec vim :

/toto
utiliser n pour aller au terme suivant, et N pour aller au terme précédent

Rechercher une ligne avec son numéro :

:123

Afficher les numéros de lignes (ou les retirer) :

:set nu
:set nonu

Afficher les caractères invisibles (tabulations, saut de ligne)

:set list
:set nolist

Dans vim, remplacer une occurrence par une autre dans tout le fichier :

:%s/chaine1/chaine2/g

Aller en début de fichier :

Il faut d'abord clore le mode insertion si ouvert (Echap)
Puis taper gg

Aller a la fin du fichier :

Il faut d'abord clore le mode insertion si ouvert (Echap)
Puis taper G

Supprimer une ligne :

Il faut d'abord clore le mode insertion si ouvert (Echap)
Puis taper d

Copie-coller une ligne :

Il faut d'abord clore le mode insertion si ouvert (Echap)
Puis taper yy (copier)

Puis taper p (coller à l'endroit souhaité)

Espace disque

Calculer l’espace disponible/utilisé sur les disques :

df -h

Afficher le nombre d’inodes utilisés :

df -i

Calculer l’espace utilisé par un fichier :

du -hs fichier (ou répertoire)

Apache

Tester la conf Apache :

apachectl configtest

Rechargement d’Apache sans couper les requêtes en cours :

service httpd graceful

Test de la conf et rechargement d’Apache sans couper les requêtes en cours :

apachectl configtest && service httpd graceful

Déclarer un Vhost écoutant sur plusieurs IP :

NameVirtualHost 192.168.1.1:80 
NameVirtualHost 172.20.30.40:80

<VirtualHost 192.168.1.1:80 172.20.30.40:80>
...
</VirtualHost>

Mysql / Base de données

Changer le mot de passe root :

/usr/bin/mysqladmin -u root -p"MOT_DE_PASSE_ACTUEL" password
New password :

Appliquer/changer la politique de mot de passe de MySQL :

mysql>SET GLOBAL validate_password_policy=LOW;

Paquets

Debian/Ubuntu

Lister les paquets installés :

dpkg -l

Rechercher dans tous les paquets si le paquet php est installé :

dpkg -l *php*

Red Hat/CentOS

Rechercher dans tous les paquets si le paquet php est installé :

rpm -qa | grep php

Rechercher un paquet par son nom :

yum list php
yum list *php*

Étendre la recherche à la description :

yum search php

Obtenir des informations détaillées sur un paquet :

yum info php

Curl

Afficher/tester les entêtes HTTP d’un site web :

curl -I https://yavin4.ovh

Iptables

Bannir une adresse IP :

iptables -I INPUT -s X.X.X.X -j DROP

GPG

Générer une paire de clés :

gpg2 --full-gen-key
gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: répertoire « /root/.gnupg » créé
gpg: nouveau fichier de configuration « /root/.gnupg/dirmngr.conf » créé
gpg: nouveau fichier de configuration « /root/.gnupg/gpg.conf » créé
gpg: le trousseau local « /root/.gnupg/pubring.kbx » a été créé
Sélectionnez le type de clef désiré :
   (1) RSA et RSA (par défaut)
   (2) DSA et Elgamal
   (3) DSA (signature seule)
   (4) RSA (signature seule)
Quel est votre choix ? 1
les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.
Quelle taille de clef désirez-vous ? (2048) 4096
La taille demandée est 4096 bits
Veuillez indiquer le temps pendant lequel cette clef devrait être valable.
         0 = la clef n'expire pas
        = la clef expire dans n jours
      w = la clef expire dans n semaines
      m = la clef expire dans n mois
      y = la clef expire dans n ans
Pendant combien de temps la clef est-elle valable ? (0) 0
La clef n'expire pas du tout
Est-ce correct ? (o/N) o

GnuPG doit construire une identité pour identifier la clef.

Nom réel : Toto
Adresse électronique : toto@tutu.com
Commentaire : 
Vous avez sélectionné cette identité :
    « Toto <toto@tutu.com> »

Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique
ou (O)ui/(Q)uitter ? 
Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique
ou (O)ui/(Q)uitter ? o
De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
                        
De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
gpg: /root/.gnupg/trustdb.gpg : base de confiance créée
gpg: clef A1FEA2C7 marquée de confiance ultime.
gpg: répertoire « /root/.gnupg/openpgp-revocs.d » créé
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/475B73652786355D54035D2DC636A094A1FEA2C7.rev'
les clefs publique et secrète ont été créées et signées.

gpg: vérification de la base de confiance
gpg: marginals needed: 3  completes needed: 1  trust model: PGP
gpg: profondeur : 0  valables :   1  signées :   0
     confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.
pub   rsa4096/A1FEA2C7 2017-03-19 [S]
      Empreinte de la clef = 475B 7365 2786 355D 5403  5D2D C636 A094 A1FE A2C7
uid        [  ultime ] Toto <toto@tutu.com>
sub   rsa4096/8E46476A 2017-03-19 []

Lister les clés :

gpg2 --list-keys

Exporter la clé PRIVÉE dans un fichier (d’abord récupérer l’ID de la clé à l’aide de la commande précédente) :

gpg2 --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub   rsa4096/A1FEA2C7 2017-03-19 [SC]
uid        [  ultime ] Toto <toto@tutu.com>
sub   rsa4096/8E46476A 2017-03-19 [E]


gpg2 --export-secret-keys -a A1FEA2C7 > cle_secrete.key

Chiffrer un fichier :

gpg2 --output monfichier.gpg --encrypt --recipient toto@tutu.com monfichier

Arborescence et répertoires

Compter le nombre de fichiers dans un répertoire :

ls -l | wc -l

Afficher uniquement les noms de fichiers avec ls :

ls -A1

Checker si un répertoire est vide :

[ "$(ls -A /chemin/répertoire/)" ] && echo "Pas vide" || echo "Vide"

Commandes spéciales

globstar

Activer globstar (récursivité dans les répertoires) :

shopt -s globstar
shopt -u globstar (pour désactiver)

Affichage dans le terminal

Afficher une ligne sur tout le terminal (utile dans les script par exemple), ici il s’agira d’une ligne de caractères ‘=’ :

printf '%*s' "${COLUMNS:-$(tput cols)}" '' | tr ' ' '='

Explications : pour cela, on va découper la commande :

'%*s' → afficher un caractère de type string (%s), l'étoile permet de définir à quelle position sera affiché ce caractère dans le terminal. LA position est définie par le paramètre suivant.
"${COLUMNS:-$(tput cols)}" → lorsque l'étoile (*) est utilisée, ce deuxième paramètre est censé être la position où sera affiché le caractère. En général il s'agit d'un chiffre (ex: 10 pour afficher le caractère après 10 espaces). Dans ce cas précis on calcule le nombre total de colonnes dans le terminal. Le but sera d'afficher le caractère à la fin du terminal (tout à droite).
' ' → c'est le caractère à afficher. Ici rien, la commande va alors afficher une ligne vide sur tout le terminal.
| tr ' ' '=' → la commande tr est une commande de remplacement. Ici tr remplace chaque caractère ' ' (espace ou vide) par un caractère '=' (égal).

Pour récapituler : Ici printf va afficher un caractère espace (ou vide) au bout à droite du terminal. Tout ce qui se trouve avant est vide également. Ce caractère et tous les autres vides seront ensuite remplacés par un caractère ‘=’

Couper avant ou après un motif :

Prenons un exemple : root@serveur ; on souhaite ne garder que « serveur », pour cela :

cut -d'@' -f2

Explication : ici on coupe en deux blocs ce qui se trouve avant et après ‘@’. root étant le premier bloc et serveur le second. Ensuite on choisi de ne garder que le bloc 2 (donc serveur)

Shell

Ouvrir un shell pour un utilisateur spécifique :

su nginx -s /bin/bash

Virtualisation

OpenVZ

Lister les containers de l’hôte :

pvectl list

ou

vzlist

Modifier les specs d’un container (depuis l’hôte) :

Modifier espace disque (ici exemple avec 100Go) :

pvectl set CTID -disk 100

Modifier mémoire RAM (ici exemple avec 4Go de RAM) :

pvectl set CTID -memory 4096

Modifier nombre de CPU (ici exemple avec 2 CPU) :

pvectl set CTID --cpus 2

Ajouter une IP à un container :

vzctl set CTID --ipadd X.X.X.X --save

Supprimer une IP d’un container :

vzctl set CTID --ipdel X.X.X.X --save

Démarrer un container :

vzctl start CTID

Entrer dans un container depuis l’hôte :

vzctl enter CTID

Ansible

Variable ansible

Hostname de la machine :

{{ ansible_fqdn }}

IP de la machine :

ansible_default_ipv4.address

Templates Jinja

Concerne les fichiers de templates .j2

Appliquer du code si le nom de mon serveur commence par ^frontal-

{% if hostvars[inventory_hostname]['inventory_hostname_short'] | regex_search('^frontal-') %}
code
{% endif %}

La même chose si le nom de mon serveur commence par ^frontal- OU ^backoffice-

{% if hostvars[inventory_hostname]['inventory_hostname_short'] | regex_search('^frontal-') or regex_search('^backoffice-') %}
code
{% endif %}

Appliquer du code si une variable spécifique a été définie sur mon serveur :

{% if serveur_type == "frontal" %}
ma_conf_à_appliquer
{% endif %}

D’autres exemples de conditions dans un fichier jinja :

https://stackoverflow.com/questions/25552766/change-variable-in-ansible-template-based-on-group

https://stackoverflow.com/questions/3842690/in-jinja2-how-do-you-test-if-a-variable-is-undefined

https://automatisation.pressbooks.com/chapter/templates/

%d blogueurs aiment cette page :