Astuces et commandes pratiques sous Linux

Astuces et commandes pratiques sous Linux

Dans ce tutoriel, je vais recenser quelques astuces et commandes pratiques sous Linux qui peuvent vous faire gagner du temps pour optimiser l’administration d’un serveur sous Linux. Que vous soyez débutant ou chevronné ces tips vont vous faire gagner du temps, c’est sûre. 100% pratique. Pour ceux qui souhaite définir un bandeau à chaque connexion de leurs serveurs/VPS, je vous conseille la création d’un MOTD (Message Of The Day).

N’hésitez pas à mettre cette page en favoris car elle sera mise à jour régulièrement. Vous pouvez aussi m’envoyer vos astuces pour débloquer une situation sous Linux.

nouvel publication dans l'articleLister les modules chargés par Apache avec Apachectl

ApacheCtl va vous permettre de lister tous vos modules Apache actifs afin de faire du tri et ne garder que les essentiels. Il est important tant au niveau sécurité et des performances de votre serveur web, de ne charger que les modules nécessaires.

Pour afficher la liste des modules Apache, nous allons utiliser la commande apachectl.

Apachectl est une sorte d’interface pour le serveur Apache. Elle est destinée à aider l’administrateur à contrôler le bon fonctionnement du daemon Apache.

Vous trouverez toutes les options en utilisant la commande :

# apachectl help

Lister les modules chargés par Apache avec Apachectl

En ce qui concerne notre tutoriel, nous allons utiliser la commande suivante :

# apachectl –t –D DUMP_MODULES

ApacheCtl va vous permettre de lister tous vos modules Apache actifs afin de faire du tri et ne garder que les essentiels.

La liste de tous vos modules chargés doit s’afficher.

Vous pouvez aussi avoir le même résultat avec la commande phpinfo(), qui affiche les modules chargés et autres informations dans une page PHP.

Vous pouvez aussi avoir le même résultat avec la commande phpinfo(), qui affiche les modules chargés et autres informations dans une page PHP.

Surveiller les connexions SSH de son serveur

Il est important de surveiller les connexions SSH échouées sur son serveur. Mais je dirais qu’il est aussi important de logger les connexions réussies. Découvrons ensemble comment mettre en place ce suivi avec un mail d’alerte. La commande utilisée pour envoyer le message sera mail.

Mail est une commande qui permet d’envoyer des courriels sous Unix. Elle nécessite au préalable que la résolution de nom soit possible via un DNS.

Exemple d’envoi de mail :

#> echo "corps du message" | mail –s "Sujet du mail" adresse@destinataire.com

Mail est une commande qui permet d'envoyer des courriels sous Unix. Elle nécessite au préalable que la résolution de nom soit possible via un DNS.

Le but de ce tutoriel, c’est qu’à chaque démarrage de session en SSH nous ayons un mail pour vérifier qu’une personne non autorisée ne se connecte pas en cachette sur notre serveur.

Nous allons utiliser l’utilitaire mail pour générer notre message d’alerte et surveiller les connexions SSH sur notre serveur. Pour que cette astuce fonctionne il faut créer le fichier sshrc dans le répertoire /etc/ssh/.

Le fichier sshrc est exécuté à chaque démarrage des connexions SSH.

#vim /etc/ssh/sshrc

Rajouter ces lignes dans le fichier sshrc :

ip='echo $SSH_CONNECTION | cut -d " " -f 1'
hostname='hostname'
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in $hostname from $ip" | mail -s "SSH Login" votreadresse@mail.com

Le but de ce tutoriel, c'est qu'à chaque démarrage de session en SSH nous ayons un mail pour vérifier qu'une personne non autorisée ne se connecte pas en cachette sur notre serveur.

Enregistrer le fichier puis déconnectez-vous de votre serveur et reconnectez-vous en SSH. Au bout de quelques instants vous recevrez dans votre boite aux lettres ce message :

Voici une astuce simple à mettre en place sur vos serveurs, pour logger discrètement qui se connecte à vos serveurs.

Voici une astuce simple à mettre en place sur vos serveurs, pour logger discrètement qui se connecte à vos serveurs.

Astuce!!! Si vous voulez surveiller une personne en particulier, il suffit d’ajouter le script dans le répertoire home de l’utilisateur dans le fichier /user/.ssh/rc

Vider le contenu d’un fichier

Récemment, pour améliorer la rapidité d’une sauvegarde, j’ai dû adapter mon script en vidant le contenu d’un fichier. Voici plusieurs commandes pour vider le contenu d’un fichier sous Linux. Si ce fichier est critique, je vous conseille de réaliser une sauvegarde avant.

  • echo /dev/null > fichier_a_vider
  • echo “” > fichier_a_vider (Générera un fichier de 1 ko avec un saut de ligne)
  • printf “” > fichier_a_vider (Générera un fichier de 0 ko sans saut de ligne)
  • > fichier_a_vider

Code de retour d’une commande sous Linux

Si vous écrivez souvent des scripts sous Linux, cette astuce va sûrement vous intéresser pour gérer les erreurs dans votre script.

Toutes les commandes Linux retournent un code d’erreur compris entre 0 et 255. La valeur 0 représente la valeur OK (succès de la commande). Les valeurs supérieur à 0 représente la valeur KO (échec de la commande).

pour afficher le code erreur de la dernière commande exécutée sur votre système, vous devez saisir :

echo $?

Astuces et commandes pratiques sous Linux : Code de retour d'une commande sous Linux

Vous pouvez vous-même, modifier la valeur de retour pour un de vos scripts. Un script shell étant lui-même une commande, il est possible de lui faire retourner un code d’erreur avec la commande spéciale exit.

Il est possible d’indiquer dans un script exit 1 afin d’indiquer que le script a rencontré une erreur et/ou exit 0 afin d’indiquer que tout c’est bien déroulé.

Il est possible d'indiquer dans un script exit 1 afin d'indiquer que le script rencontré une erreur et/ou exit 0 afin d'indiquer que tout c'est bien déroulé.

Exécuter un script CRON uniquement au redémarrage de votre serveur

Voici une autre astuce vraiment pratique lorsqu’on doit exécuter un script au redémarrage de votre serveur. Un exemple récent auquel j’ai dû faire face, le reboot de mon VPS et mon instance Emby en container était bloquée car les fichiers son sur un disque virtuel sur Pcloud. Lors du reboot du VPS la reconnexion du disque virtuel via rclone n’est pas automatique. Voici donc une solution pour remédier à ce problème.

Pour définir une commande à exécuter lorsque le système redémarre, remplacez les champs de date et d’heure par @reboot. La nouvelle commande dans le CRON serait :

Exécuter un script CRON uniquement au redémarrage de votre serveurExécuter un script CRON uniquement au redémarrage de votre serveur

@reboot spécifie que cron doit exécuter la commande spécifiée après chaque démarrage. Encore une fois, nous devons ajouter la commande au fichier crontab avec la commande crontab -e, pour rappel vous pouvez lister le contenu de votre CRON avec la commande crontab -l
Lister le contenu de votre CRON
L’instruction @reboot exécute une commande immédiatement après le démarrage de votre serveur. Si vous souhaitez bénéficier d’une période de veille avant l’exécution de la commande. Vous pouvez définir un tempo en seconde en rajoutant la commande sleep dans votre ligne CRON après le @reboot.

Rajouter un tempo pour exécuter une commande via CRON au démarrage de votre serveur

600 représente 10 minutes exprimées en secondes, et sleep est l’option à utiliser lors de la spécification du temps avant l’exécution.

L’enchaînement des commandes sous Linux

Lorsqu’on réalise des tâches d’administrations, on peut être amené a enchainer plusieurs commandes de suite. Alors au-lieu de les taper les unes après les autres, on peut réaliser un enchainement de commandes grâce aux caractères d’enchainement.

Voici une petite description des 3 caractères d’enchainement sous Linux.

Le point virgule

Un enchainement de commande avec un point virgule enchaînera les commandes sans se soucier de la réussite ou de l’échec de chacune. On peut utiliser ces commandes quand nous sommes sûr de leurs réussites ou alors quand leurs bonnes exécutions n’est pas importante.

Par exemple si l’on souhaite créer un dossier puis s’y rendre pour y créer un fichier vide, on exécutera le commande suivante :

créer un dossier puis s'y rendre pour y créer un fichier vide

C’est la manière la moins propre d’enchainer les commandes sous Linux. On peut imaginer une gestion plus complexe des commandes avec une mini gestion des erreurs. Il serait alors préférable d’être capable de n’exécuter les commandes suivantes uniquement si les précédentes se sont correctement executées.

Le « && »

Il est parfois nécessaire d’exécuter une commande que si la commande précédente a réussie. Par exemple si l’on souhaite vérifier l’existence d’un dossier et, si il existe, créer un fichier dedans :

cd /home/~/mondossier1 && touch monfichier1

Dans cet exemple, si la commande cd /home/~/mondossier1 ne s’exécute pas correctement (c’est à dire que le dossier n’existe pas), la commande touch monfichier1 qui créer un fichier vide ne s’exécutera pas et ne déclenchera pas de message d’erreur. Intéressant non!

Linux enregistre un paramètre à chaque exécution de commande qui peut être récupéré dans un script par exemple. Ce paramètre se met à « 0 » si la commande s’est executée correctement et à « 2 » quand la commande à échouée.

Pour déterminer si une commande a bien réussie, Linux analyse ce paramètre et, dans le cas d’un « 0 » avec un enchainement de commande « && », il exécute la commande suivante.
Si le paramètre en question est « 2 », il met donc fin à l’exécution des prochaines commandes.

Le « || »

il peut être aussi intéressant d’exécuter une commande uniquement si la commande précédente ne se déroule pas correctement au lieu de mettre fin à toute la ligne de commande. Cela est possible avec les caractères « || ».

Si l’on souhaite, comme auparavant, voir si un dossier existe et si c’est le cas y créer un fichier. On peut également vouloir créer le dossier si il n’est pas encore présent :

cd /home/~/dossier1 || mkdir / /home/~/mondossier1 && touch monfichier1

C’est un exemple simple mais on peut imaginer des choses beaucoup plus complexes.

Ici, le paramètre de vérification de l’exécution de la commande n’est pas « 0 » (= la commande « cd /home/~/mondossier1 » à échouée), on créera le fichier avec la commande « mkdir ». Puis dans un second temps on créera le fichier « monfichier1 ».

Etre averti par mail des updates de son serveur avec Yum-Cron

Si vous êtres administrateur et que vous gérez plusieurs serveurs sous RockyLinux par exemple, il peut vous être utile d’être averti lors de nouvelles mises à jour disponibles. Pour cela nous allons utiliser l’outil yum-cron.

Etre averti par mail des updates de son serveur avec Yum-Cron

Pour installer le logiciel il suffit de saisir la commande suivante :

#yum install yum-cron

L’installation s’effectue en quelques secondes. Maintenant nous allons paramétrer yum-cron pour nous envoyer un mail dès qu’une mise à jour pointe son nez.

Toute la configuration de yum-cron se trouve dans le fichier /etc/sysconfig/yum-cron.

 Etre averti par mail des updates de son serveur avec Yum-Cron

les principales options à modifier sont :

  • CHECK_ONLY : Si vous mettez YES, vérifie uniquement si des mises à jour existent pour votre système.
  • DOWNLOAD_ONLY : Cela implique que CHECK_ONLY soit positionné à YES. Permet de télécharger sans les installer les mises à jour disponibles.
  • MAILTO : Saisissez ici l’adresse mail de destination pour recevoir les alertes.
  • SYSTEMNAME : Ce paramètre vous permet de personnaliser le sujet du mail. Vous pourrez par exemple créer une règle pour classer directement ces mails.

Une fois les modifications faites dans le fichier, enregistrer le et redémarrer le service avec la commande suivante :

#/etc/init.d/yum-cron restart

Etre averti par mail des updates de son serveur avec Yum-Cron

Chaque jour en cas de nouvelles mises à jour, vous recevrez un mail de ce type avec la liste des paquets à mettre jour.

Etre averti par mail des updates de son serveur avec Yum-Cron

Désactiver un service Linux au démarrage

Si comme moi, lors de vos reboots de serveurs, vous souhaitez désactiver un service au redémarrage d’un serveur, pour éviter qu’il rentre en conflit avec d’autres services comme docker par exemple, voici la solution.

Tout d’abord si vous souhaitez savoir quels services se lancent au démarrage de votre serveur Linux et le temps que mets chacun d’entre-eux à démarrer, voici une commande qui va vous plaire (Sous Ubuntu). Vous obtiendrez la liste de tous les services lancés au démarrage ainsi que leur temps de lancement en commençant par les plus lent….

# systemd-analyze blame

Désactiver un service Linux au démarrage.

Maintenant, pour supprimer un service au démarrage de Linux (Ubuntu), utiliser la commande suivante :

# sudo systemctl disable <Nom_du_service>.service

Désactiver un service Linux au démarrage.

En désactivant le service apache2, mon docker va pouvoir se lancer et lancer ses containers rapidement et sans problème. Ouf!!!

Si vous souhaitez, activer un service au démarrage de votre serveur, vous devrez utiliser cette commande :

# sudo systemctl enable <Nom_du_service>.service

Comment faire un reset du password root sous CentOS

Si vous avez perdu votre mot de passe root sur une machine CentOS, voici une procédure très simple pour le changer. Nous allons voir comment réinitialiser le mot de passe root en cinq étapes.

Pour réaliser cet exploit, il est quand même nécessaire d’avoir un accès physique à la machine.

Etape 1 : redémarrer la machine et accéder au menu de configuration de Grub.

faire un reset du password root sous CentOS depuis le menu Grub

Etape 2 : Placez-vous sur un item du menu, puis appuyer sur la touche « e » (permet d’éditer le menu)

Etape 3 : Se placer sur la ligne qui contient Kernel et appuyer de nouveau sur « e », pour éditer la ligne de lancement du kernel.

faire un reset du password root sous CentOS depuis le menu Grub

Etape 4 : Ajouter le chiffre 1 à la fin de la ligne et appuyer sur Entrée.

faire un reset du password root sous CentOS depuis le menu Grub

Etape 5 : Rebooter en appuyant sur la touche « b ». Après quelques secondes vous aurez accès au shell et en utilisant la commande passwd, vous pourrez changer le mot de passe du root.

Changer le mot de passe root sous CentOS

Voici une technique simple et efficace pour faire un reset d’un mot de passe oublié.

Lister tous les paquets installés sur une machine Linux

Grâce à une simple commande, vous allez pouvoir lister sur votre serveur les paquets installés. Outre l’aspect inventaire de cette commande, vous pouvez surveiller les installations et repérer les dysfonctionnement dû à l’installation d’un paquet. Très utile pour les sys-admin.

Les formats de paquets

Les paquets peuvent prendre plusieurs formes en fonction de votre distribution. Le format RPM (RedHat Package Manager), a été, comme son nom l’indique, créé à l’origine pour la distribution Red Hat. Depuis, de nombreuses distributions l’ont utilisé, on peut citer par exemple CentOS ou SuSE. Il existe d’autres formats de paquets dans le monde Linux qui sont DEB (pour Debian) et TGZ (pour Slackware).

Qu’est-ce qu’un paquet ?

C’est un fichier (une archive, un peu comme un fichier .tar ou .zip) qui contient tous les fichiers appartenant à une application, une bibliothèque, etc. ainsi que des scripts de contrôle qui sont exécutés lors de l’installation ou de la désinstallation de l’application. Ce fichier contient également toutes les dépendances à d’autres applications, bibliothèques, etc.

Note : on parle indifféremment de paquet, package ou même paquetage pour désigner le fichier qui contient l’ensemble des fichiers d’un programme.

Lister les paquets installés sous Ubuntu

# dpkg --list

Lister les paquets installés sous Ubuntu

Voici l’explication par colonne :

  • Le statut du paquet : la plupart du temps, il sera affiché « ii », qui signifie  » installer. Mais l’on pourra également trouver « H » pour « semi-installé » ou d’autres états dont la signification est précisée juste avant le début de la liste
  • Le nom du paquet tel que présent dans les dépôts
  • La version du paquet, une information qui sera la plupart du temps très utile pour les dépendances par exemple
  • L’architecture du système pour le paquet
  • La description du paquet, afin de voir si celui-ci nous semble utile ou pas.

Bonus !! Sauvegarder les paquets installés sous Ubuntu dans un fichier texte

Cette astuce vous permet de stocker tous les paquets dans un fichier texte en vue d’une nouvelle installation sur une autre machine. Cela peut vous faire gagner du temps.

# dpkg --get-selections > liste-des-paquets_`hostname`_`date +%Y-%m-%d-%H-%M`

Pour restaurer les paquets, voici les commandes à respecter sur une machine :

# sudo apt-get update
# sudo apt-get install dselect
# sudo dselect update
# sudo dpkg --set-selections < liste-des-paquets>
# sudo apt-get -u dselect-upgrade

Sous CentOS, la commande équivalente pour afficher les paquets installés est :

# yum list installed

Changer le fuseau horaire de votre serveur Linux

Il peut arriver sur certaines installations Linux que l’heure ne soit pas une heure locale mais UTC (pour Universal Time Coordinated). En France cela pose des problèmes surtout si vous renvoyez vos logs vers un syslog comme Splunk par exemple, il faut toujours jongler avec les heures en enlevant 2 ou 1 heures suivant la saison. La meilleure heure pour un serveur est l’heure locale. Voici la commande pour paramétrer votre serveur Linux avec le bon fuseau horaire :

# sudo dpkg-reconfigure tzdata

Changer le fuseau horaire de votre serveur Linux

Changer le fuseau horaire de votre serveur Linux

Changer le fuseau horaire de votre serveur Linux

Désactiver l’IPV6 sur Ubuntu

Tout est dit dans le titre. Si l’IPv6 ne vous sert à rien sur votre serveur Linux, on le désactive. Voici comment en quelques lignes de commandes, comment se débarasser de l’IPv6 sous Ubuntu.

Pour savoir si l’IPv6 est activé sur vos interfaces réseau, il suffit d’utiliser la commande suivant :

# ifconfig

Pour savoir si l'IPv6 est activé sur vos interfaces réseau, il suffit d'utiliser la commande ifconfig sous Linux

Comme toujours avant je vous conseille d’effectuer une mise à jour de votre système avec les commandes suivantes :

# sudo apt update
# sudo apt upgrade

Ensuite éditer le fichier sysctl.conf :

# vi /etc/sysctl.conf

Puis rajouter à la fin du fichier les lignes suivantes :

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf..disable_ipv6 = 1

Remplacer  <nom_de_l’interface> par le nom de votre interface sur le serveur, ou il faut désactiver l’IPv6. Par défaut l’IPv6 sera désactiver sur l’interface de loopback.

Pour que les modifications soient prises en compte, inutile de redémarrer votre serveur. Utiliser cette commande :

# sysctl -p

Désactiver l'IPV6 sur Ubuntu dans le fichier sysctl.conf

Enfin, pour vérifier si la commande a bien désactiver l’IPv6 sur les interfaces, retaper ifconfig, il ne devrait y avoir aucune ligne inet6.

Désactiver l'IPV6 sur Ubuntu dans le fichier sysctl.conf

Corriger l’erreur Could not get lock /var/lib/dpkg/lock-frontend – open (11: Resource temporarily unavailable)

Vous tentez d’installer ou de mettre à jour un logiciel ou votre distribution avec la commande APT et vous avez ce message d’erreur :

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

Corriger l'erreur Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)

Cette erreur survient généralement lorsqu’une précédente mise à jour s’est mal déroulée et le processus est bloqué. Vous avez plusieurs solutions pour résoudre ce problème.

Vous pouvez utiliser la ligne de commande Linux pour rechercher et tuer le processus en cours. Pour ce faire, utilisez la commande ci-dessous:

# ps aux | grep -i apt

Corriger l'erreur Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable).

Cela vous montrera l’identifiant du processus exécutant apt ou apt-get. Dans l’exemple ci-dessus, l’ID de processus est 3274. Vous pouvez ignorer la dernière ligne contenant «grep –color = auto».

Vous pouvez utiliser l’identifiant du processus pour le tuer avec la commande :

sudo kill -9

Ou sinon vous pouvez utilisez une méthode plus radicale. Cette commande va tuer toutes les instances d’un programme en cours d’exécution :

sudo killall apt apt-get

Grâce à la commande wget, vous allez pouvoir récupérer très rapidement votre adresse IP Publique.

Récupérer votre adresse IP publique avec wget

Vous pourrez ensuite l’utiliser dans des scripts par exemple où pour faire des vérifications si vous utilisez une connexion VPN.

$ wget -qO- icanhazip.com

Une petite explication s’impose :

La commande  wget est un gestionnaire de téléchargement libre. Il est issu du projet GNU, il permet le téléchargement avancé de fichiers sur des réseaux et sur Internet. Par exemple, il permet de créer des miroirs de sites, ou d’effectuer des téléchargements récursifs. Son nom vient de World Wide Web et de GET qui est le nom de la commande utilisée dans le protocole HTTP pour récupérer un fichier. Il est capable de communiquer avec les protocoles HTTP et FTP. (Source Wikipédia)

La syntaxe des commandes wget est relativement simple :

wget [option] [URL]

Pour avoir plus de renseignements taper :

$ man wget

Voici le résultat de la commande :

Récupérer votre adresse IP publique avec wget sous Ubuntu.

De manière plus générale, si vous souhaitez connaitre votre IP publique lorsque vous naviguez sur un site, que ce soit chez vous ou dans votre entreprise vous pouvez aller sur ce site : http://icanhazip.com/. Pratique, simple et efficace.

Signature manuelle Guillaume

1 potin

  1. Bonjour,
    c’est très bon cette page. Et ce site.
    Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *