Aller au contenu

Linux

Shell

  • Shell : Un shell est un programme qui fournit une interface en ligne de commande (CLI) pour interagir avec le système d'exploitation en saisissant des commandes textuelles sensibles à la case.
  • Bash : Un shell, un interpréteur de commandes.
  • Ksh : Un autre shell (Korn).

Script shell

Tous les scripts shell doivent commencer par #!/bin/bash ou n'importe quel autre shell que vous préférez. Cette ligne est appelée shebang, et même si elle ressemble à un commentaire, elle n'en est pas un. Elle indique au shell de l'interpréteur que le fichier est un script. Le chemin fourni doit être absolu (on ne peut pas utiliser "bash" par exemple). Le shebang doit être en première ligne du script, sans espace qui le précède.

#!/bin/bash

Les commentaires dans le shell

Dans les scripts shell, toutes les lignes commençant par # sont des commentaires.

# Ceci est une ligne de commentaire.
# Ceci en est une autre.

Il peut aussi y avoir des commentaires sur plusieurs lignes, pour cela il suffit d'utiliser : suivi d'une apostrophe :

:'Ceci est une ligne de commentaire.

Encore une !

Et celle-ci aussi en est une !'

Remarque : Cette méthode ne fonctionnera pas s'il y a une apostrophe dans les lignes de commentaires.

Le prompt ! Où suis-je ?

Le prompt est une ligne de texte qui apparaît dans le terminal et qui vous indique où vous êtes dans le système de fichiers. Voici un exemple de prompt :

nom_utilisateur@nom_machine:~$

nom_utilisateur : C'est le nom de l'utilisateur actuellement connecté.

@ : C'est un séparateur qui indique que ce qui suit est le nom de la machine (comme dans une adresse email).

nom_machine : C'est le nom de la machine (ou de l'ordinateur) sur laquelle vous êtes connecté.

: : C'est un autre séparateur qui indique que ce qui suit est le répertoire dans lequel vous vous trouvez.

~ : C'est un symbole qui représente le répertoire personnel de l'utilisateur, également connu sous le nom de répertoire "home". Par exemple, si votre nom d'utilisateur est alice, ~ représente /home/alice.

$ : C'est un symbole qui indique que vous êtes connecté en tant qu'utilisateur standard (et non en tant que superutilisateur ou root). Si vous étiez connecté en tant que superutilisateur, ce symbole serait généralement #.

Auto-complétion

Le shell est votre ami, il faut l’aimer aussi. Lorsqu’il n’y a aucune ambiguïté, la touche tabulation (tab) permet de compléter la saisie d'un chemin du système de fichiers automatiquement. Si la première partie est commune, appuyer sur tab permet de compléter une saisie selon ce que vous avez déjà tapé. Si cela ne fonctionne pas, c’est soit que la commande de début de ligne ne permet pas l’auto-complétion ou bien que la saisie est ambiguë.

En cas d’ambiguïté, une double pression (une pinte quoi) sur tab affichera les possibilités, ou s’il y en a trop nous demandera confirmation.

Lorsque vous savez que ça existe, l’auto-complétion est un outil qui permet de substantiels gains de temps.

Disques

/dev/sda correspond au premier disque détecté.

/dev/sdb correspond au deuxième disque.

Linux ne nomme pas les partitions à la suite. Il va réserver les chiffres de 1 à 4 pour les partitions principales (principale et étendue). Quel que soit le nombre de partitions principales, s’il y a une partition étendue alors les partitions logiques commenceront quoi qu’il arrive à 5.

/dev/sdb deuxième disque entier

/dev/sdb1 première partition principale

/dev/sdb2 deuxième partition principale

/dev/sdb3 partition étendue

/dev/sdb5 première partition logique

/dev/sdb6 deuxième partition logique

L’arborescence (FHS)

/ C'est la racine unique. I ln'y a pas de C:\ ou D:\ comme sur Windows. Tous les disques et volumes sont à la racine, ils sont alors montés dans des répertoires.

  • Chemin relatif : chemin depuis là où on se trouve.
  • Chemin absolu : chemin complet

.. Répertoire parent

. Répertoire courant

/home/user Répertoire de l'utilisateur dont le login est user.

/root Répertoire personnel de l'utilisateur root.

/media Points de montages des médias amovibles (clé USB, CD-rom…).

/mnt Points de montage temporaires de volumes disques.

/bin Commandes systèmes disponibles aux utilisateurs standards. Peut être un lien de /usr/bin.

/usr/bin Commandes systèmes disponibles aux utilisateurs standards.

/usr/local/bin Commandes systèmes disponibles aux utilisateurs standards

/sbin Commandes d'administration du super-utilisateur root. Peut être un lien de /usr/sbin.

/usr/sbin Commandes d'administration du super-utilisateur root.

/usr/local/sbin Commandes d'administration du super-utilisateur root.

/opt Répertoires pour les applications tierces (compilation manuelle de logiciels).

/boot Fichiers nécessaires au démarrage du système.

/dev Liaisons des périphériques (disques, claviers, écrans…).

/etc Contient les fichiers de paramètres du système.

/var Données de tailles variables (sites web, bases de données, journaux…).

/var/log Dossiers contenant les fichiers de journalisation du système.

/lib Contient les librairies principales utiles aux exécutables dans /bin et /sbin.

/tmp Fichiers temporaires.

/proc Répertoire virtuel contenant les fichiers de paramètres du noyau (matériels...).

/sys Répertoire virtuel contenant les informations des périphériques, pilotes…

Le dossier personnel est représenté sous Linux par un tilde ~. C’est généralement le dossier par défaut lorsque vous ouvrez un shell.

Les permissions

Lister les permissions d’un fichier ou d’un répertoire

getfacl fichier_ou_rep # la plus facile à lire !

ls -l fichier_ou_rep

stat fichiers_ou_rep

Comprendre les permissions d’un fichier ou d’un répertoire

Interpretation avec ls -l

-rw-rw-r-- 1 user_demo groupe_demo    0 mai    5 10:30 fichier_exemple
drwxrwxr-x 2 user_demo groupe_demo 4096 juin   6 14:20 repertoire_exemple
  • 3ème colonne : "user_demo" est le propriétaire pour lequel des permission sont définies.
  • 4ème colonne : "groupe_demo" est le groupe pour lequel des permission sont définies.
owner et group

L'utilisateur propriétaire "owner" a des droits spécifiques sur le fichier. Le groupe propriétaire "group" est un groupe d'utilisateurs qui partagent certains droits sur le fichier.

  • Le premier caractère représente le type de fichier, voici les principaux :

File "-"

Directory "d"

Symslink "l"

Charactere device "c"

Socker "s"

  • Puis les 9 derniers caractères par bloc de 3 représentent les permissions pour owner / group / other (le propriétaire, le groupe et les autres) :

"r" : read

"w" : write

"x" : executable

notation en octal (commande stat):

"4" = read (r)

"2" = write (w)

"1" = executable (x)

exemple : 765 ( rwx rw- r-x )

alt text

Changer le propriétaire et le groupe d’un fichier ou d’un répertoire

chown nom_utilisateur:nom_groupe /data/commun

chown : C'est la commande utilisée pour changer le propriétaire et/ou le groupe d'un fichier ou d'un répertoire.

nom_utilisateur : C'est le nom de l'utilisateur qui deviendra le nouveau propriétaire du fichier ou du répertoire.

nom_groupe : C'est le nom du groupe qui deviendra le nouveau groupe pour lequel des permissions sont définies sur le fichier ou le répertoire.

/data/commun : C'est le fichier ou le répertoire dont on veut changer le propriétaire et le groupe.

En résumé, cette commande change le propriétaire et le groupe du répertoire /data/commun pour les remplacer par utilisateur et groupe.

-R : Appliquer la commande de manière récursive à tous les fichiers et sous-répertoires.

Modifier les permissions d’un répertoire en notation symbolique

chmod u+w,g+w,o‐rx /data/commun

chmod : C'est la commande utilisée pour changer les permissions d'un fichier ou d'un répertoire.

u+w : Donne le droit d'écriture (Write) à l'utilisateur propriétaire (User).

g+w : Donne le droit d'écriture (Write) au groupe (Group).

o‐rx : Retire le droit de lecture (Read) et d'exécution (eXecute) aux autres utilisateurs (Others).

/data/commun : C'est le répertoire dont on veut modifier les permissions.

En résumé, cette commande permet à l'utilisateur propriétaire et au groupe d'écrire dans le répertoire, mais empêche les autres utilisateurs de lire ou d'exécuter quoi que ce soit dans ce répertoire.

Modifier les permissions d’un répertoire en notation octale

chmod -R 770 /data/commun

770 : C'est une notation octale qui représente les permissions. Chaque chiffre représente une combinaison de permissions pour l'utilisateur propriétaire, le groupe et les autres utilisateurs. Le premier chiffre 7 : Donne tous les droits (lecture, écriture, exécution) à l'utilisateur propriétaire. Le second chiffre 7 : Donne tous les droits (lecture, écriture, exécution) au groupe. Le troisième chiffre 0 ne donne aucun droit aux autres utilisateurs.

-R : Appliquer la commande de manière récursive à tous les fichiers et sous-répertoires.

En résumé, cette commande donne tous les droits (lecture, écriture, exécution) à l'utilisateur propriétaire et au groupe, mais ne donne aucun droit aux autres utilisateurs.

Utilisateurs et groupes

Créer un utilisateur

useradd nom_utilisateur
-u UID : Définir l'UID (User ID) de l'utilisateur.

-G groupes : Ajouter l'utilisateur à des groupes secondaires.

-s /bin/shell : Définir le shell de l'utilisateur.

-m : Créer le répertoire personnel de l'utilisateur.

-d /chemin : Définir le répertoire personnel de l'utilisateur.

-c "commentaire" : Ajouter un commentaire (par exemple, le nom complet de l'utilisateur).

Modifier un utilisateur

usermod nom_utilisateur

-u UID : Changer l'UID de l'utilisateur.

-G groupes : Remplacer les groupes secondaires de l'utilisateur.

-aG groupes : Ajouter des groupes secondaires à l'utilisateur.

-s /bin/shell : Changer le shell de l'utilisateur.

-d /chemin : Changer le répertoire personnel de l'utilisateur.

-L : Verrouiller le compte de l'utilisateur.

-U : Déverrouiller le compte de l'utilisateur.

Supprimer un utilisateur

userdel nom_utilisateur

-r : Supprimer également le répertoire personnel de l'utilisateur.

Changer le mot de passe d'un utilisateur

passwd nom_utilisateur

Afficher les informations sur un utilisateur

id nom_utilisateur

Créer un groupe

groupadd nom_groupe

-g GID : Définir le GID (Group ID) du groupe.

Modifier un groupe

groupmod nom_groupe

-n nouveau_nom : Changer le nom du groupe.

-g GID : Changer le GID du groupe.

Supprimer un groupe

groupdel nom_groupe

Ajouter un utilisateur à un groupe

usermod -aG nom_groupe nom_utilisateur

Retirer un utilisateur d'un groupe

gpasswd -d nom_utilisateur nom_groupe

Afficher les groupes d'un utilisateur

groups nom_utilisateur

Les Fichiers

ls

Liste les fichiers dans le répertoire actuel :

ls

Liste les fichiers avec des détails (propriétaire, permissions, etc.) :

ls -l

Liste tous les fichiers, y compris les fichiers cachés :

ls -a

Liste les fichiers avec des tailles lisibles par l'homme :

ls -lh

Vérifier les permissions et la taille lisible par l'homme d'un répertoire spécifique sans lister son contenu.

ls -ldh

pwd

Affiche le chemin du répertoire de travail actuel :

pwd

rm

Supprime un fichier :

rm fichier.txt

Supprime un répertoire et son contenu de manière récursive :

rm -r repertoire/

Supprime un fichier ou un répertoire avec une confirmation interactive :

rm -i fichier.txt

mv

Déplace un fichier :

mv fichier_source.txt repertoire_destination/

Déplace et renomme un fichier :

mv fichier_source.txt repertoire_destination/fichier_renomme.txt

Renomme un fichier :

mv ancien_nom.txt nouveau_nom.txt

Déplace un répertoire et son contenu :

mv repertoire_source/ repertoire_destination/

find

Recherche des fichiers ou des répertoires en fonction de critères spécifiques.

Recherche un fichier par son nom dans le répertoire actuel et ses sous-répertoires :

find . -name "fichier.txt"

Recherche tous les fichiers de type "fichier" dans le répertoire actuel et ses sous-répertoires :

find . -type f

Recherche tous les répertoires dans le répertoire actuel et ses sous-répertoires :

find . -type d

Recherche tous les fichiers modifiés dans les 7 derniers jours :

find . -mtime -7

cat

La commande cat est utilisée pour afficher le contenu d'un ou plusieurs fichiers. Elle est principalement utilisée pour afficher le contenu complet d'un fichier à la console.

Affiche le contenu du fichier.txt :

cat fichier.txt

Affiche le contenu de plusieurs fichiers :

cat fichier1.txt fichier2.txt

Combinaison de plusieurs fichiers et affichage du résultat :

cat fichier1.txt fichier2.txt > resultat.txt

mkdir && touch

Utilisez la commande mkdir pour créer un nouveau répertoire. Par exemple, pour créer un répertoire appelé "nouveau_dossier", vous pouvez faire :

mkdir nouveau_dossier

Utilisez la commande touch pour créer un fichier vide. Par exemple, pour créer un fichier appelé "nouveau_fichier.txt", vous pouvez faire :

touch nouveau_fichier.txt

Si vous souhaitez créer un répertoire et un fichier en une seule commande, vous pouvez utiliser la commande mkdir avec l'option -p pour créer le répertoire parent si nécessaire, et touch pour créer le fichier. Par exemple :

mkdir -p nouveau_dossier && touch nouveau_dossier/nouveau_fichier.txt
Info

L'opérateur && en shell est utilisé pour exécuter une commande seulement si la commande précédente s'est terminée avec succès (c'est-à-dire avec un code de retour de 0). Cela permet d'enchaîner plusieurs commandes !.***

cp

Copier un fichier :

cp fichier_source.txt repertoire_destination/

Cela copie le fichier "fichier_source.txt" dans le répertoire de destination spécifié. Si vous voulez lui donner un autre nom lors de la copie, vous pouvez le faire ainsi :

cp fichier_source.txt repertoire_destination/nouveau_nom.txt

Pour copier un répertoire et son contenu, vous pouvez utiliser l'option -r (pour récursif) de la commande cp :

cp -r repertoire_source/ repertoire_destination/

Vous pouvez copier plusieurs fichiers vers un répertoire en spécifiant les noms des fichiers source et le répertoire de destination :

cp fichier1.txt fichier2.txt repertoire_destination/

Si vous souhaitez voir les fichiers et répertoires copiés au fur et à mesure, vous pouvez utiliser l'option -v pour une sortie verbeuse (verbose) :

cp -v fichier_source.txt repertoire_destination/

scp (ssh)

Copier un fichier local vers un serveur distant :

scp -P <port ssh personnalisé si pas 22> <fichier à envoyer> <utilisateur>@<hôte distant>:<dossier cible>

scp backup.zip user@192.168.130.134:/home/user/
ou plus court, mais plus abstrait pour préciser le répertoire de l'utilisateur :

scp backup.zip user@192.168.130.134:~

Copier un dossier local et son contenu vers un serveur distant :

scp -r folder/ user@192.168.130.134:/home/user/

Copier un dossier distant vers l'hôte local :

scp -r user@192.168.130.134:/var/log/ /home/user/

Copier un fichier distant vers l'hôte local :

scp user@192.168.130.134:/home/user/file.txt /tmp

Copier plusieurs fichiers distants vers l'hôte local. Si vos fichiers ne sont pas tous dans le même dossier source, précisez les chemins absolus de chaque fichier :

scp install.txt file1.txt file2.txt \
user@192.168.130.134:/tmp

wget

Pour télécharger un fichier depuis une URL :

wget URL

Édition de fichiers avec Nano et Vim

Nano

Nano est un éditeur de texte simple et convivial, idéal pour les utilisateurs débutants. Il est souvent utilisé pour des modifications rapides et simples de fichiers.

Ouvrir un fichier :

nano nom_du_fichier

Commandes :

  • Ctrl + O : Enregistrer le fichier (puis appuyez sur Entrée pour confirmer).

  • Ctrl + X : Quitter Nano (vous serez invité à enregistrer les modifications si nécessaire).

  • Ctrl + _ : Annuler la dernière action.

  • Ctrl + K : Couper la ligne sélectionné.

  • Ctrl + U : Coller la ligne coupée.

  • Ctrl + W : Rechercher du texte dans le fichier.

  • Ctrl + _ : Aller à une ligne spécifique (vous serez invité à entrer le numéro de la ligne).

  • Ctrl + G : Afficher l'aide de Nano.

Vim

Vim est un éditeur de texte puissant et flexible, souvent utilisé par les utilisateurs avancés. Il offre de nombreuses fonctionnalités pour l'édition de texte, mais peut être complexe pour les débutants. Commandes indispensables pour Vim. Vim fonctionne principalement dans trois modes :

  • Mode normal : Le mode par défaut pour naviguer et effectuer des commandes.

  • Mode insertion : Le mode pour insérer du texte.

  • Mode commande : Le mode pour exécuter des commandes.

Exemples d'utilisation

Ouvrir un fichier :

vim nom_du_fichier

Entrer en mode insertion et ajouter du texte :

  • Appuyez sur i pour entrer en mode insertion.

  • Tapez votre texte.

  • Appuyez sur Esc pour revenir en mode normal.

Enregistrer et quitter :

  • Appuyez sur : pour entrer en mode commande.

  • Tapez wq et appuyez sur Entrée pour enregistrer et quitter Vim.

Annuler une action :

  • Appuyez sur u en mode normal pour annuler la dernière action.

Rechercher du texte :

  • Appuyez sur / en mode normal pour entrer en mode de recherche.

  • Tapez le texte à rechercher et appuyez sur Entrée.

  • Utilisez n pour aller à l'occurrence suivante et N pour aller à l'occurrence précédente.

(Debian/Ubuntu) Gestion des paquets et installation de logiciels APT.

Le fichier sources.list est un fichier de configuration utilisé par le gestionnaire de paquets APT (Advanced Package Tool) sur les systèmes basés sur Debian (comme Debian, Ubuntu, etc.). Ce fichier contient les sources des dépôts de paquets à partir desquels APT peut télécharger et installer des logiciels.

Modifier le fichier sources.list

Pour modifier le fichier sources.list, vous pouvez utiliser un éditeur de texte comme nano :

nano /etc/apt/sources.list

Voici un exemple de contenu du fichier sources.list :

deb http://ftp.fr.debian.org/debian/ buster main
deb-src http://ftp.fr.debian.org/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main

deb http://ftp.fr.debian.org/debian/ buster-updates main
deb-src http://ftp.fr.debian.org/debian buster-updates main

Explication des lignes du fichier sources.list

deb : Indique une source de paquets binaires.

deb-src : Indique une source de paquets source.

http://ftp.fr.debian.org/debian/ : URL du dépôt.

buster : Nom de la distribution (par exemple, buster pour Debian 10).

main : Composant du dépôt (par exemple, main pour les paquets officiels).

Mettre à jour, rechercher et installer un paquet

Mettre à jour la liste des paquets disponibles à partir des dépôts spécifiés dans sources.list :

apt update

Faire la mise à jour :

apt upgrade # Met à jour les paquets installés sans supprimer les paquets existants.
apt full-upgrade #  Met à jour les paquets installés et peut supprimer des paquets obsolètes.

Pour rechercher un paquet dans les dépôts, utilisez la commande suivante :

apt search mot_clé

Installer un paquet :

apt install nom_du_paquet

(Red Hat/CentOS) Gestion des paquets et installation de logiciels YUM.

Le gestionnaire de paquets utilisé sur les systèmes basés sur Red Hat (comme Red Hat Enterprise Linux, CentOS, etc.) est yum ou dnf.

Modifier les fichiers de dépôts

Pour modifier les fichiers de dépôts, vous pouvez utiliser un éditeur de texte comme nano :

nano /etc/yum.repos.d/nom_du_fichier.repo

Voici un exemple de contenu d'un fichier de dépôt :

[nom_du_depot]
name=Nom du dépôt
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

Mettre à jour, rechercher et installer un paquet

Mettre à jour la liste des paquets disponibles à partir des dépôts spécifiés :

yum update

Faire la mise à jour :

yum upgrade

Pour rechercher un paquet dans les dépôts, utilisez la commande suivante :

yum search mot_clé

Installer un paquet :

yum install nom_du_paquet

(Fedora) Gestion des paquets et installation de logiciels DNF.

Le gestionnaire de paquets utilisé sur Fedora est dnf.

Modifier les fichiers de dépôts

Pour modifier les fichiers de dépôts, vous pouvez utiliser un éditeur de texte comme nano :

nano /etc/yum.repos.d/nom_du_fichier.repo

Voici un exemple de contenu d'un fichier de dépôt :

[nom_du_depot]
name=Nom du dépôt
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

Mettre à jour, rechercher et installer un paquet

Mettre à jour la liste des paquets disponibles à partir des dépôts spécifiés :

dnf update

Faire la mise à jour :

dnf upgrade

Pour rechercher un paquet dans les dépôts, utilisez la commande suivante :

dnf search mot_clé

Installer un paquet :

dnf install nom_du_paquet

(Arch Linux) Gestion des paquets et installation de logiciels PACMAN.

Le gestionnaire de paquets utilisé sur Arch Linux est pacman.

Modifier les fichiers de dépôts

Pour modifier les fichiers de dépôts, vous pouvez utiliser un éditeur de texte comme nano :

nano /etc/pacman.d/mirrorlist

Mettre à jour, rechercher et installer un paquet

Mettre à jour la liste des paquets disponibles à partir des dépôts spécifiés :

pacman -Syu

Pour rechercher un paquet dans les dépôts, utilisez la commande suivante :

pacman -Ss mot_clé

Installer un paquet :

pacman -S nom_du_paquet

Réseau

Convention de nommage des interfaces réseau

Dans les systèmes Linux, les cartes réseau sont généralement nommées de manière systématique en fonction de leur type et de leur ordre de détection. Les conventions de nommage peuvent varier légèrement en fonction de la distribution Linux et de la version du noyau utilisé, mais voici les conventions les plus courantes :

  • Conventions de nommage traditionnelles

Ethernet (câblé) :

eth0, eth1, eth2, etc. : Les interfaces Ethernet (cablées) sont souvent nommées eth0, eth1, eth2, etc., en fonction de l'ordre dans lequel elles sont détectées par le système.

Wi-Fi (sans fil) :

wlan0, wlan1, etc. : Les interfaces Wi-Fi sont souvent nommées wlan0, wlan1, etc.

  • Conventions de nommage modernes (Predictable Network Interface Names)

Avec la convention de nommage traditionnelle, le numéro des interface pouvait être amené à changer en cas de reboot ou d'jaour/changement de matériel, ce qui pouvait petre problématique. À partir de la version 197 du système de gestion des périphériques udev (utilisé par systemd), une nouvelle convention de nommage a été introduite pour rendre les noms des interfaces réseau plus prévisibles et stables. Ces noms sont basés sur des informations matérielles et topologiques.

Ethernet (câblé) :

enpXsY :X est le numéro de l'interface physique et Y est le numéro de la sous-interface. Par exemple, enp0s3 pour une interface Ethernet sur le bus PCI.

ensX :X est le numéro de l'interface physique. Par exemple, ens1 pour une interface Ethernet sur un bus non-PCI.

Wi-Fi (sans fil) :

wlpXsY :X est le numéro de l'interface physique et Y est le numéro de la sous-interface. Par exemple, wlp2s0 pour une interface Wi-Fi sur le bus PCI.

wlX :X est le numéro de l'interface physique. Par exemple, wl0 pour une interface Wi-Fi sur un bus non-PCI.

La commande ip

Info

Les commandes traditionnelles ifconfig, route et arp sont dépréciés. La commande ip est conseillée, elle permet de gérer aussi bien les adresses IP, que les routes ou la table ARP, de plus elle est universelle sur toutes les distributions Linux.

Afficher le détail des interfaces :

ip addr

Afficher les adresses IP :

ip a

N'afficher que les adresses IP en Ipv4 :

ip -4 a

N'afficher que les adresses IP en Ipv6 :

ip -6 a

Afficher les adresses IP en filtrant sur une interface :

ip a show enp0s3

Activer (up) ou désactiver (down) l'interface enp0s3:

ip link set enp0s3 down

Assigner une adresse IP à l'interface enp0s3 :

ip addr add 192.168.0.1/24 dev enp0s3

Afficher les routes :

ip route

Ajouter une route :

ip route add 192.168.29.0/24 via 192.168.56.254 dev eth0

Ajouter une route par défaut :

ip route add default via 192.168.56.254

Supprimer une route

ip route del 192.168.1.0/24

Afficher la table ARP :

ip neigh

La commande dig

La commande dig est un outil de requête DNS qui peut être utilisé pour interroger les serveurs DNS et obtenir des informations détaillées sur les enregistrements DNS. Alternavie à nslooku.

Installer dig

apt install dnsutils

Voici trois exemples d'utilisation de la commande dig, avec des explications sur les résultats obtenus, notamment pour les types de requêtes A, MX, et ANY.

1. Requête par défaut (type A) : dig google.fr

dig google.fr

Résultat et explications :

  • Requête envoyée au serveur DNS par défaut :

En haut de la réponse, vous verrez une ligne indiquant quel serveur DNS a été utilisé. Par exemple :

;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)

Ici, 192.168.1.1 est le serveur DNS utilisé.

  • Section "ANSWER" :

Cette section contient les enregistrements A (adresse IPv4) pour google.fr :

google.fr.      300     IN      A       142.250.74.3
- google.fr : Nom de domaine demandé.

  • 300 : Temps de vie (TTL) de l'enregistrement, en secondes.

  • IN : Type de réseau (Internet).

  • A : Type de requête (IPv4).

  • 142.250.74.3 : Adresse IPv4 associée à google.fr.

2. Requête pour les enregistrements MX (Mail Exchange) : dig google.fr MX

dig google.fr MX

Résultat et explications :

  • Section "ANSWER" :

Cette section affiche les enregistrements MX (serveurs de messagerie) pour le domaine google.fr. Exemple :

google.fr.      86400   IN      MX      10 aspmx.l.google.com.
google.fr.      86400   IN      MX      20 alt1.aspmx.l.google.com.
google.fr.      86400   IN      MX      30 alt2.aspmx.l.google.com.
  • google.fr : Nom de domaine demandé.

  • 86400 : TTL (1 jour).

  • IN : Type de réseau (Internet).

  • MX : Type de requête (enregistrement Mail Exchange).

  • 10 aspmx.l.google.com: Priorité 10 pour le serveur mail aspmx.l.google.com. Les valeurs de priorité (10, 20, 30) indiquent l’ordre de préférence : plus la valeur est basse, plus le serveur est prioritaire.

3. Requête ANY pour tous les enregistrements : dig google.fr ANY

dig google.fr ANY

Résultat et explications :

  • Section "ANSWER" :

La requête ANY demande une réponse regroupant plusieurs types d’enregistrements disponibles pour google.fr :

google.fr.      300     IN      A       142.250.74.3
google.fr.      86400   IN      MX      10 aspmx.l.google.com.
google.fr.      300     IN      AAAA    2a00:1450:4007:814::2003
- A : Adresse IPv4 (déjà expliquée dans l’exemple 1).

  • MX : Serveurs de messagerie (exemple 2).

  • AAAA : Adresse IPv6 pour le domaine google.fr :

Certaines configurations DNS restreignent les réponses à ANY pour des raisons de sécurité. Si vous recevez une réponse vide ou une erreur, c'est normal dans ce cas.

Vérification du serveur DNS utilisé

Dans tous les exemples, le serveur DNS interrogé est mentionné en haut du résultat :

;; SERVER: 192.168.1.1#53(192.168.1.1)
- 192.168.1.1 est le serveur DNS utilisé. Cela peut être un DNS local, un DNS de votre routeur, ou celui configuré dans /etc/resolv.conf.

Pour interroger un autre serveur DNS (comme Quad9), vous pouvez utiliser l’option @ :

dig @9.9.9.9 google.fr

Cela envoie la requête directement au serveur DNS Quad9 (9.9.9.9).

Gestion du réseau

La gestion de la configuration des interfaces réseaux peut être laborieuse. Les méthodes et outils utilisés diffèrent selon le système Linux que vous utilisez et le besoin d'être dans une gestion statique (le réseau ne change pas comme sur un serveur) ou dynamique (besoin de se connecter à des réseaux différents comme sur votre ordinateur portable).

  • Pour une gestion statique, on utilisait traditionnellement le fichier de confifuration /etc/network/interfaces et et les outils comme ifup/down .

  • Pour une gestion dynamiques, différentes surcouches sont apparues :

1) NetworkManager : C'est le gestionnaire de réseau principalement utilisé sur les systèmes de bureau comme Ubuntu Desktop ou ses dérivées graphiques telles que Kubuntu et Lubuntu. Il est conçu pour simplifier la gestion des connexions réseau, en particulier dans les environnements où les interfaces changent fréquemment, comme avec les connexions Wi-Fi, les VPN, ou les réseaux mobiles. Sur un système utilisant NetworkManager, vous avez souvent accès à une interface graphique, comme celle intégrée dans l’environnement de bureau GNOME, pour gérer les réseaux. Cela rend NetworkManager idéal pour les postes de travail où la flexibilité et l’interaction utilisateur sont essentielles.

2) systemd-networkd : systemd-networkd est plus souvent utilisé sur les systèmes serveurs, comme Ubuntu Server ou Debian, où la gestion des interfaces réseau est plus statique et ne nécessite pas d’interactions fréquentes avec l’utilisateur. Ce service est minimaliste et parfaitement intégré au système systemd, ce qui le rend adapté aux serveurs et aux environnements sans interface graphique.

3) Netplan : Puis vint Netplan qui agit comme une surcouche simplifiant la gestion de systemd-networkd (le gestionnaire de réseau de systemd) et de NetworkManager. Cela permet aux administrateurs d’utiliser une syntaxe unique et simplifiée, peu importe le service sous-jacent. Netplan est introduit dans les distibutions Linux basées sur Ubuntu depuis la version 17.10.

Déterminer quel gestionnaire est utilisé

Pour vérifier si NetworkManager est installé et actif, vous pouvez utiliser la commande suivante :

systemctl status NetworkManager

Si le service est actif, vous verrez un retour indiquant son statut comme “running”. Dans le cas contraire, le service sera inactif ou non installé.

Pour vérifier l’état de systemd-networkd, utilisez cette commande :

systemctl status systemd-networkd
De la même manière, le statut sera “active” si systemd-networkd gère le réseau.

(Debian) Modifier le réseau avec le fichier de configuration interfaces

nano /etc/network/interfaces

  # The loopback network interface < ON NE TOUCHE PAS
    auto lo
    iface lo inet loopback

  # Avec attribution d'adresse statique
    allow-hotplug ens33
    auto ens33
    iface ens33 inet static
          address 10.44.0.151
          netmask 255.255.0.0
          gateway 10.44.255.254
      nameserver 10.44.255.254
      nameserver 9.9.9.9
      nameserver 149.112.112.112

  # Avec adresse automatique par DHCP
    allow-hotplug ens37
    auto ens37
    iface ens37 inet dhcp

Relancer le réseau

systemctl stop networking

systemctl start networking

(Ubuntu) Modifier le réseau avec Netplan

Netplan est un outil de configuration réseau utilisé principalement sur les systèmes basés sur Ubuntu. Il a été introduit pour simplifier et standardiser la gestion des configurations réseau, en remplaçant les méthodes traditionnelles comme NetworkManager pour les configurations de base.

Installation

apt update

apt install netplan.io

Configuration

Les fichiers de configuration utilisés par Netplan sont au format YAML, un format simple et lisible qui permet de configurer facilement les interfaces réseau. Ces fichiers se trouvent dans le répertoire /etc/netplan/, et c’est à partir de là que les configurations réseau sont appliquées.

Les fichiers de configuration Netplan peuvent être multiples, chacun ayant son propre fichier dans le répertoire /etc/netplan/. Les fichiers sont traités dans l’ordre alphabétique, c’est pourquoi ils sont souvent nommés avec des préfixes numériques comme 01-network-manager-all, 50-cloud-init.yaml, etc. Un fichier commençant par 01- sera appliqué avant un fichier commençant par 50-, permettant de définir une priorité entre les configurations si nécessaire.

Chaque fichier Netplan suit une syntaxe YAML stricte avec des indentations bien définies.

Voici un exemple simple de configuration où l’interface Ethernet utilise DHCP pour obtenir une adresse IP automatiquement :

nano /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true

Explication :

  • network: Bloc principal qui contient toutes les configurations réseau.
  • version: La version du fichier de configuration Netplan (actuellement, c’est la version 2).
  • renderer: Définit quel service gère la configuration du réseau. Ici, networkd signifie que systemd-networkd est utilisé.Pour un environnement de bureau, on peut utiliser NetworkManager.
  • ethernets: Ce bloc contient les interfaces Ethernet. Dans cet exemple, eth0 est l’interface que l’on configure.
  • dhcp4: Permet d’activer DHCP pour l’IPv4, ce qui attribue une adresse IP automatiquement.

Voici un exemple de configuration où l’interface Ethernet "ens33" est configurée avec une adresse IP statique :

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens18:
      addresses:
        - 192.168.29.105/24
      routes:
        - to: default
          via: 192.168.29.254
      nameservers:
        addresses:
          - 9.9.9.9
          - 149.112.112.112
  • addresses: définit l’adresse IP statique avec le masque de sous-réseau (/24).
  • gateway4: spécifie la passerelle par défaut, le routeur.
  • nameservers: définit les serveurs DNS (ici, ceux de Quad9).

Les fichiers Netplan doivent avoir des permissions appropriées pour des raisons de sécurité. Ils doivent être lisibles et modifiables uniquement par l’utilisateur root. Les permissions recommandées pour les fichiers Netplan sont 600, ce qui signifie que seul root peut les lire et les modifier, garantissant ainsi que la configuration réseau ne puisse être altérée par d’autres utilisateurs. Modifier les permissions sur un fichier de configuration :

chmod 600 /etc/netplan/01-network-manager-all.yaml

Appliquer la configuration Netplan :

netplan generate

netplan try

netplan apply

Comment vérifier la configuration ?

netplan get

netplan status ens33

netplan status --all

Si la configuration n'est pas correcte, essayez le mode debug lors de l'application de la nouvelle configuration :

netplan --debug apply

La commande ss

Info

La commande ss vient remplacer la traditonnelle netstat, qui, comme ifconfig, est dépréciée.

Lister les sockets (connexions réseau) ouverts :

ss

Lister les sockets TCP/UDP en écoute :

ss -unplat

Gestion des services avec systemctl

systemd est un système d'initialisation et un gestionnaire de services. Au fil des années, systemd et son outil de commande systemctl se sont imposés comme des composants clés de la gestion des services Linux. Leur adoption généralisée a créé une norme de facto pour les distributions modernes. Cela signifie que, que vous utilisiez une distribution basée sur Red Hat, Debian, ou une autre, vous êtes susceptible de rencontrer systemd.

Pour lister les différents types de services disponibles, vous pouvez utiliser la commande suivante :

systemctl list-unit-files --type=service

Lister les services en cours d'exécution :

systemctl list-units --type=service --state=running

Démarrer un service :

systemctl start nom_du_service.service

Arrêter un service :

systemctl stop nom_du_service.service

Redémarrer un service :

systemctl restart nom_du_service.service

Activer un Service au Démarrage :

systemctl restart nom_du_service.service

Désactiver un Service au Démarrage :

systemctl disable nom_du_service.service

Vérifier l’État d’un Service :

systemctl status nom_du_service.service

Arrêt, redémarrage et mise en veille du système :

systemctl poweroff 

systemctl reboot

systemctl suspend

Logs et diagnostics

Systemd et journald

systemd est un système d'initialisation et un gestionnaire de services utilisé par de nombreuses distributions Linux modernes. L’un des avantages de systemd est la journalisation centralisée des processus et des systèmes. Contrairement à d'autres outils où les journaux sont dispersés, systemd offre une gestion centralisée via le daemon journald, qui collecte et stocke les messages du noyau, des services, etc., sous un format binaire.

Cela permet une manipulation facile et dynamique des journaux. L'utilitaire journalctl permet d'accéder et de manipuler ces données. Les administrateurs peuvent afficher les journaux de manière dynamique, par exemple, visualiser les données de démarrage sur les trois derniers démarrages ou combiner les entrées de deux services liés pour déboguer un problème.

Le stockage binaire des journaux permet de les afficher sous différents formats de sortie, comme syslog ou JSON, selon les besoins. Le journal systemd peut soit remplacer, soit compléter une implémentation syslog existante, offrant ainsi une grande flexibilité. En combinant ces technologies, vous pouvez centraliser les journaux de plusieurs serveurs tout en utilisant les fonctionnalités avancées de systemd pour une gestion locale efficace.

Pour voir les journaux collectés par le daemon journald, utilisez la commande journalctl :

journalctl

Lorsqu’utilisée seule, chaque entrée de journal qui se trouve dans le système s’affichera dans un pager (généralement less) pour que vous puissiez y naviguer. Les entrées les plus anciennes seront les premières :

Afficher toutes les entrées qui ont été recueillies depuis le dernier démarrage :

journalctl -b

Pour consulter le journal d’un service spécifique, utilisez la commande suivante :

journalctl -u nom_du_service

Vous pouvez filtrer par date, niveau de gravité, utilisateur, etc. Vous pouvez filtrer par des périodes de temps arbitraires en utilisant les options --since et --until, qui limitent respectivement les entrées affichées à celles qui suivent ou précèdent le temps donnée. :

journalctl -u crowdsec.service --since yesterday --until today

Les valeurs de l’heure peuvent se présenter sous différents formats. Pour les valeurs de temps absolus, vous devez utiliser le format suivant YYYY-MM-DD HH:MM:SS. Par exemple, nous pouvons voir toutes les entrées depuis le 10 janvier 2024 à 17 h 15 en saisissant :

journalctl --since "2024-01-10 17:15:00"

Rechercher les entrées de journal contenant des erreurs :

journalctl -p err -u nom_du_service

Syslog

Syslog est un système de journalisation traditionnel utilisé depuis de nombreuses années. Il est largement supporté par de nombreux systèmes et applications. Les journaux sont généralement stockés dans des fichiers texte.

Les logs générés par syslog sont généralement stockés dans /var/log/. Vous pouvez vérifier les fichiers suivants :

  • /var/log/syslog
  • /var/log/messages
  • /var/log/auth.log
  • /var/log/kern.log

Utilisez la commande cat, less, ou tail pour afficher le contenu de ces fichiers :

cat /var/log/syslog

less /var/log/syslog

tail -f /var/log/syslog

Afficher les 20 dernières lignes :

tail -n 20 /var/log/messages

Vous pouvez bien sûr filtrer avec la commande grep :

cat /var/log/syslog | grep helloworld

Rsyslog

rsyslog est une implémentation moderne de syslog qui offre plus de fonctionnalités et de flexibilité. Le fichier de configuration principal de rsyslog est /etc/rsyslog.conf. Vous pouvez également avoir des fichiers de configuration supplémentaires dans le répertoire /etc/rsyslog.d/.

Pour configurer rsyslog, vous pouvez éditer le fichier /etc/rsyslog.conf ou créer un nouveau fichier dans /etc/rsyslog.d/.

Exemple de configuration simple pour envoyer tous les logs à un serveur distant :

*.* @192.168.1.100:514

Cette ligne envoie tous les logs (.) à l'adresse IP 192.168.1.100 sur le port 514.

Après avoir modifié la configuration, redémarrez le service rsyslog pour appliquer les changements :

systemctl restart rsyslog

Utilisation de la commande logger

La commande logger permet d'envoyer des messages directement à syslog. C'est utile pour tester la configuration ou pour envoyer des messages personnalisés. Exemple d'utilisation :

logger "Ceci est un message de test"
Ce message sera envoyé à syslog et apparaîtra dans les fichiers de log appropriés, comme /var/log/syslog ou /var/log/messages.

Gestion des disques, volumes et systèmes de fichiers

Lister les disques et partitions

lsblk

lsblk -o model,name,type,fstype,size,label

blkid

Modifier la table de partition d'un disque

parted /dev/sdb

Gestion des volumes LVM (Logical Volume Manager)

Les termes PV, VG, et LV sont des concepts clés dans la gestion des volumes logiques (LVM - Logical Volume Manager) sur les systèmes Linux.

  • PV (Physical Volume) : Un périphérique de stockage physique initialisé pour être utilisé par LVM.

  • VG (Volume Group) : Un ensemble de PV regroupés pour former un pool de stockage.

  • LV (Logical Volume) : Un volume de stockage créé à partir de l'espace disponible dans un VG.

PV (Physical Volume)

Un Physical Volume (PV) est un périphérique de stockage physique (comme un disque dur ou une partition) qui est utilisé par LVM. Un PV est initialisé pour être utilisé par LVM en utilisant la commande pvcreate. Une fois initialisé, un PV peut être ajouté à un Volume Group (VG).

Exemple de création d'un PV :

pvcreate /dev/sdb1

VG (Volume Group)

Un Volume Group (VG) est un ensemble de Physical Volumes (PV) qui sont regroupés pour former un pool de stockage. Un VG peut contenir plusieurs PV et peut être utilisé pour créer des Logical Volumes (LV). Un VG est créé en utilisant la commande vgcreate.

Exemple de création d'un VG :

vgcreate vgname /dev/sdb1

LV (Logical Volume)

Un Logical Volume (LV) est un volume de stockage créé à partir de l'espace disponible dans un Volume Group (VG). Les LV sont flexibles et peuvent être redimensionnés, déplacés, et même étendus sur plusieurs disques physiques. Un LV est créé en utilisant la commande lvcreate.

Exemple de création d'un LV :

lvcreate -n lvname -L 2G vgname

Recette : exemple complet de création de PV, VG et LV

Créer un PV :

pvcreate /dev/sdb1

Créer un VG :

vgcreate vgname /dev/sdb1

Créer un LV :

lvcreate -n lvname -L 2G vgname

Gestion des PV, VG et LV

Lister les PV :

pvs
pvdisplay

Lister les VG :

vgs
vgdisplay

Lister les LV :

lvs
lvdisplay

Étendre des VG et LV

Étendre un VG :

vgextend vgname /dev/sdc1 /dev/sdd

Étendre un LV :

lvextend -r -L +5G /dev/vgname/lvname

Gestion des FileSystem (système de fichiers)

Créer un FS :

mkfs.<fstype> [options] /dev/vgname/lvname

Ajouter une étiquette à un FS ext :

tune2fs -L "LABEL" /dev/vgname/lvname

Remettre un FS à la taille de sa partition hôte :

resize2fs /dev/vgname/lvname

Effectuer un check disk sur la partition :

fsck.<fstype> /dev/sdb1

Gestion des points de montage

Voir les points de montage :

mount

findmnt

lsblk

blkid

Monter un LV sur un point de montage manuel/temporaire :

mkdir -p /mnt/test

mount -t ext4 /dev/vgname/lvname /mnt/test

Démonter un volume :

umount /mnt/test

Montage automatique :

nano /etc/fstab
#<Vol. à monter>    <mountpoint>   <type>   <options>   <dump>  <fsck>

# Appel de la partition par son UUID (recommandé)
UUID=3e65ad…        /boot           ext2    defaults    0       2

# Appel d'un volume logique
/dev/vgsys/lvroot   /           ext4 errors=remount:ro  0       1

# Appel d'un FS par son étiquette (Label)
LABEL=homedsk   /home               ext4    defaults    0       2

# Appel de la partition par son nom (déconseillé)
/dev/sdc1       /mnt/extdsk         ext4    defaults    0       0

Tester un montage dans fstab :

mount -a

Résumé des commandes de gestion des disques

lsblk : Liste les blocs de stockage de manière hiérarchique.

blkid : Affiche les attributs des périphériques de bloc, y compris les UUID et les étiquettes.

parted : Un outil plus moderne pour la gestion des partitions.

pvs, vgs, lvs : Commandes pour lister les volumes physiques (PV), les groupes de volumes (VG) et les volumes logiques (LV).

pvdisplay, vgdisplay, lvdisplay : Commandes pour afficher des informations détaillées sur les PV, VG et LV.

mkfs.<fstype> : Crée un système de fichiers de type .

tune2fs : Modifie les paramètres du système de fichiers ext2/ext3/ext4.

resize2fs : Redimensionne un système de fichiers ext2/ext3/ext4.

fsck.<fstype> : Vérifie et répare un système de fichiers de type .

mount : Monte un système de fichiers.

umount : Démonte un système de fichiers.

/etc/fstab : Fichier de configuration pour les montages automatiques.

Références

https://blog.stephane-robert.info/