Le blog de Fatiha

Une geek de plus !

Commande nohup sous Linux

 

Qu’est-ce que la commande nohup sous Linux ? Dans quels cas est-elle utilisée ?

J’ai entendu parler de la commande nohup dans le domaine professionnel. Cette commande est utilisée souvent sous Linux lors de lancement de scripts.

nohup – Exécuter un programme en le rendant insensible aux déconnexions

La syntaxe est la suivante :

nohup COMMAND [ARG]…
nohup OPTION

Rien ne vaut une exemple avec le lancement d’un script shell /tmp/testShell.ksh :

#!/bin/ksh

echo "test 1" >> /tmp/testShell.log
sleep 10
echo "test 2" >> /tmp/testShell.log
sleep 20
echo "test 3" >> /tmp/testShell.log
sleep 30
echo "test 4" >> /tmp/testShell.log
sleep 40
echo "fin" >> /tmp/testShell.log

Après quelques secondes je ferme mon terminal. J’ouvre un nouveau terminal et je vérifie si le script a continué de tourner :
Nous remarquons que dès que j’ai fermé mon terminal, quand je me suis déconnectée, le script s’est arrêté avant la fin. Ce qui est très problématique.

C’est là que la commande nohup entre en jeu ! Je lance exactement le même script avec nohup, puis je me déconnecte.

Je me reconnecte pour vérifier que le script a continué à tourner :

Je vais vérifier que le fichier de log généré par le script est correct :

 

Supprimer une ligne précise dans l’historique sous Linux

 

L’histoire commence ainsi, je me connecte avec un utilisateur applicatif sous Linux et ensuite je tape la commande :

[user@monserveur] su -

Et sans regarder mon écran, machinalement je tape le mot de passe root. Le problème c’est que j’ai oublié que cet utilisateur applicatif n’a pas le droit d’utiliser la commande su. Du coup je me retrouve avec l’écran suivant :

[user@monserveur] su -
su: incorrect password

[user@monserveur] PASSWD_ROOT

Oui vous avez bien vu, j’ai tapé mon mot de passe en clair ! Je souhaite à présent effacer l’historique mais pas tout l’historique, uniquement la ligne où le mot de passe apparaît en clair.

Mon premier réflexe :

[user@monserveur]  man history

Ce qu’il me reste à faire c’est de taper la commande :

[user@monserveur]  history

et de repérer le numéro de la ligne incriminée puis de faire :

[user@monserveur]  history -d num_ligne

Voilà, me voilà sauvée.