=============== Commandes Linux =============== Rechercher dans l’arborescence ============================== find ---- Parcourir les fichiers à la recherche d’une chaîne de caractères « toto » et afficher ces fichiers : .. code-block:: shell find /etc -type f -exec grep -Hn "toto" {} \; Trouver les gros fichiers (1Go ou plus) : .. code-block:: shell 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 : .. code-block:: shell cat -v fichier Ajouter l’option -T pour également afficher les tabulations : .. code-block:: shell cat -v -T fichier sed --- Options : **-i** : appliquer les modifications dans le fichier indiqué Caractères qui ont besoin d’être échappés : .. code-block:: shell $.*[\]^ Caractères qu’il n’est pas utile d’échapper : .. code-block:: shell Lettres, chiffres et (){}+?| Rechercher/remplacer dans un fichier : .. code-block:: shell sed "s/occurence/remplacement/g" monfichier Alternative : on peut utiliser des **|** ou un autre caractère, afin de ne pas avoir à échapper les slashs : .. code-block:: shell sed "s|occurence|remplacement|g" monfichier Remplacer une occurrence dans un fichier par une ligne vide : .. code-block:: shell sed "s/occurence//g" monfichier Supprimer une ligne d’un fichier sans laisser de vide (retour chariot) : .. code-block:: shell sed '/occurence/d' monfichier Remplacer deux ou plusieurs lignes vides par une seule : .. code-block:: shell sed '/^$/N;/^\n$/D' monfichier Supprimer toutes les lignes vides d’un fichier : .. code-block:: shell sed '/^$/d' monfichier Supprimer tous les commentaires d’un fichier : .. code-block:: shell sed '/^#/d' monfichier Afficher une partie d’un fichier (en définissant un pattern de début et un pattern de fin) : .. code-block:: shell sed -n -e '/patterndebut/,/patternfin/p' Supprimer un pattern et toutes les lignes qui suivent jusqu’à rencontrer une ligne vide : .. code-block:: shell 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 : .. code-block:: shell sed '/pattern-debut/,/pattern-fin/c\ ligne1\ ligne2\ ligne3\ ligne4\ ligne5\' monfichier Insérer une ligne avant un pattern : .. code-block:: shell 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é .. code-block:: shell var="terme1:terme2" Le caractère de séparation est ":", on le définit avec l'option -F .. code-block:: shell echo "$var" | awk -F: '{print $1}' terme1 .. code-block:: shell echo "$var" | awk -F: '{print $2}' terme2 grep ---- Compter le nombre d’occurrences trouvées par grep : .. code-block:: shell grep -c "occurence" monfichier Formatage ========= Supprimer des caractères au début d’une variable ------------------------------------------------ Exemple : www.toto.com Supprimer les www. : .. code-block:: shell NDD="www.toto.com" NDD=$(echo "${NDD#www.}") Supprimer des caractères à la fin d’une variable ------------------------------------------------ Exemple : www.toto.com Supprimer .com : .. code-block:: shell NDD="www.toto.com" NDD=$(echo "${NDD%.com}") Encodage ======== Voir l’encodage d’un fichier ---------------------------- .. code-block:: shell file -bi FICHIER text/x-shellscript; charset=iso-8859-1 Modifier l’encodage d’un fichier -------------------------------- -f : format source -t : format cible .. code-block:: shell iconv -f iso-8859-1 -t utf-8 -c FICHIER Locales ======= Exécuter une commande avec une locale différente (exemple avec date) : .. code-block:: shell 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 : .. code-block:: shell /toto utiliser n pour aller au terme suivant, et N pour aller au terme précédent Se rendre à la ligne numéro '123' : .. code-block:: shell :123 Afficher ou masquer les numéros de lignes : .. code-block:: shell :set nu :set nonu Afficher ou masquer les caractères invisibles (tabulations, saut de ligne) .. code-block:: shell :set list :set nolist Dans vim, remplacer une occurrence par une autre dans tout le fichier : .. code-block:: shell :%s/chaine1/chaine2/g Aller en début de fichier : .. code-block:: shell gg Aller a la fin du fichier : .. code-block:: shell G Supprimer une ligne : .. code-block:: shell dd Copier-coller une ligne : .. code-block:: shell yy (copier) p (coller) Espace disque ============= Afficher l’espace disponible/utilisé sur les disques : .. code-block:: shell df -h Afficher le nombre d’inodes utilisés : .. code-block:: shell df -i Calculer l’espace utilisé par un fichier ou répertoire : .. code-block:: shell du -hs fichier Apache ====== Tester la conf Apache : .. code-block:: shell apachectl configtest Rechargement d’Apache sans couper les requêtes en cours : .. code-block:: shell service httpd graceful Test de la conf et rechargement d’Apache sans couper les requêtes en cours : .. code-block:: shell apachectl configtest && service httpd graceful Déclarer un Vhost écoutant sur plusieurs IP : .. code-block:: shell NameVirtualHost 192.168.1.1:80 NameVirtualHost 172.20.30.40:80 ... Mysql et base de données ======================== Changer le mot de passe root : .. code-block:: shell /usr/bin/mysqladmin -u root -p"MOT_DE_PASSE_ACTUEL" password New password : Modifier la politique de mot de passe de MySQL : .. code-block:: shell mysql>SET GLOBAL validate_password_policy=LOW; Paquets ======= Debian/Ubuntu ------------- Lister les paquets installés : .. code-block:: shell dpkg -l Rechercher dans tous les paquets si le paquet php est installé : .. code-block:: shell dpkg -l *php* Red Hat/CentOS -------------- Rechercher dans tous les paquets si le paquet php est installé : .. code-block:: shell rpm -qa | grep php Rechercher un paquet par son nom : .. code-block:: shell yum list php yum list *php* Étendre la recherche à la description : .. code-block:: shell yum search php Obtenir des informations détaillées sur un paquet : .. code-block:: shell yum info php Curl ==== Afficher/tester les entêtes HTTP d’un site web : .. code-block:: shell curl -I https://toto.com Iptables ======== Bloquer / bannir une adresse IP : .. code-block:: shell iptables -I INPUT -s X.X.X.X -j DROP GPG --- Générer une paire de clés : .. code-block:: shell 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 » 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 sub rsa4096/8E46476A 2017-03-19 [] Lister les clés : .. code-block:: shell 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) : .. code-block:: shell gpg2 --list-keys /root/.gnupg/pubring.kbx ------------------------ pub rsa4096/A1FEA2C7 2017-03-19 [SC] uid [ ultime ] Toto sub rsa4096/8E46476A 2017-03-19 [E] gpg2 --export-secret-keys -a A1FEA2C7 > cle_secrete.key Chiffrer un fichier : .. code-block:: shell gpg2 --output monfichier.gpg --encrypt --recipient toto@tutu.com monfichier Arborescence et répertoires =========================== Compter le nombre de fichiers dans un répertoire : .. code-block:: shell ls -l | wc -l Afficher uniquement les noms de fichiers avec ls : .. code-block:: shell ls -A1 Vérifier si un répertoire est vide : .. code-block:: shell [ "$(ls -A /chemin/répertoire/)" ] && echo "Pas vide" || echo "Vide" Commandes spéciales =================== globstar -------- Activer / désactiver globstar (récursivité dans les répertoires) : .. code-block:: shell 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 ‘=’ : .. code-block:: shell printf '%*s' "${COLUMNS:-$(tput cols)}" '' | tr ' ' '=' Explications : pour cela, on va découper la commande : .. code-block:: shell '%*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 : .. code-block:: shell 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 : .. code-block:: shell su nginx -s /bin/bash Virtualisation ============== Proxmox - openVZ ---------------- Lister les containers de l’hôte : .. code-block:: shell pvectl list ou .. code-block:: shell vzlist Modifier les specs d’un container (depuis l’hôte) : Modifier espace disque (ici exemple avec 100Go) : .. code-block:: shell pvectl set CTID -disk 100 Modifier mémoire RAM (ici exemple avec 4Go de RAM) : .. code-block:: shell pvectl set CTID -memory 4096 Modifier nombre de CPU (ici exemple avec 2 CPU) : .. code-block:: shell pvectl set CTID --cpus 2 Ajouter une IP à un container : .. code-block:: shell vzctl set CTID --ipadd X.X.X.X --save Supprimer une IP d’un container : .. code-block:: shell vzctl set CTID --ipdel X.X.X.X --save Démarrer un container : .. code-block:: shell vzctl start CTID Entrer dans un container depuis l’hôte : .. code-block:: shell vzctl enter CTID