Commandes Linux
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 (1Go ou plus) :
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 "s/occurence/remplacement/g" monfichier
Alternative : on peut utiliser des | ou un autre caractère, afin de ne pas avoir à échapper les slashs :
sed "s|occurence|remplacement|g" monfichier
Remplacer une occurrence dans un fichier par une ligne vide :
sed "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 '/^$/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 '/^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 '/pattern-debut/,/pattern-fin/c\
ligne1\
ligne2\
ligne3\
ligne4\
ligne5\' monfichier
Insérer une ligne avant un pattern :
sed '/^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
Toutes les commandes ci-dessous s’effectuent en dehors du mode insertion (ECHAP)
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
Se rendre à la ligne numéro “123” :
:123
Afficher ou masquer les numéros de lignes :
:set nu
:set nonu
Afficher ou masquer 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 :
gg
Aller a la fin du fichier :
G
Supprimer une ligne :
dd
Copier-coller une ligne :
yy (copier)
p (coller)
Espace disque
Afficher 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 ou répertoire :
du -hs fichier
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 et base de données
Changer le mot de passe root :
/usr/bin/mysqladmin -u root -p"MOT_DE_PASSE_ACTUEL" password
New password :
Modifier 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://toto.com
Iptables
Bloquer / 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
Vérifier si un répertoire est vide :
[ "$(ls -A /chemin/répertoire/)" ] && echo "Pas vide" || echo "Vide"
Commandes spéciales
globstar
Activer / désactiver 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
Se loguer avec un autre utilisateur et lui assigner temporairement un shell bash :
su nginx -s /bin/bash
Virtualisation
Proxmox - 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