2 votes

Tester si on opère depuis une session live ou non à l'intérieur d'un Shell Shell.

J'ai un Shell Shell qui ne peut être exécuté qu'à partir d'une session live (LiveCD ou Live USB) car il réduit le système de fichiers racine d'une installation réelle, ce qui ne peut être fait que lorsque le système de fichiers n'est pas monté.

Si le script est exécuté depuis la session live, il devrait poursuivre son exécution. Dans le cas contraire, il devrait échouer.

Je n'arrive pas à trouver un moyen de différencier la session en direct d'une session utilisateur "normale", car la session en direct a un aspect et une sensation très proches des sessions du système installé. La seule chose que je peux dire jusqu'à présent est que les sessions live ont toujours ubuntu comme nom d'hôte, mais je ne peux pas me fier à cela puisque l'utilisateur peut le choisir lors de l'installation d'Ubuntu.

Y a-t-il un moyen d'identifier ceci dans un Shell Shell / ligne de commande ?

(J'ai hésité entre poster sur Demandez à Ubuntu o Stack Overflow je peux supprimer le message et le réafficher sur Stack Overflow si cela est plus approprié)

3voto

sourav c. Points 40637

Il existe de nombreuses caractéristiques distinctives entre une session en direct et une session normale. Au premier abord, il me vient à l'esprit qu'il n'y a pas de véritable utilisateur dans une session en direct. On peut exploiter cela.

Donc, il n'y aurait pas gid supérieure à 999 dans /etc/passwd correspond à n'importe quel utilisateur réel sauf nobody utilisateur.

$ awk -F: '($3>=1000){print $1}' /etc/passwd
nobody

Le script suivant devrait fonctionner,

#!/bin/bash

var=$(awk -F: '($3>=1000){print $1}' /etc/passwd | wc -l)
if [[ $var -gt 1 ]]; then
    echo "normal session"
else
    echo "live session"
fi

1voto

Stewart Points 1385

Non, le nom est arbitraire, vous ne pouvez rien présumer sur cette base. Cependant, la session Live a quelques particularités telles que :

$df -h | grep -w /
/cow        2.0G   42M   1.9G  3% /

Comme vous pouvez le voir, le dispositif spécial /cow est monté sur / . Je ne suis pas sûr de la portabilité de ce système, je doute qu'il soit le même pour les Linux autres qu'Ubuntu et il est possible que cela change dans les prochaines versions, mais tant qu'il ne s'agit pas d'un dispositif réel dans le système d'exploitation. /dev vous pouvez tester cela très facilement :

df | grep -w / | grep -q 'cow' && echo "Live session" || echo "Normal install"

Explication :

  • df : imprimer les systèmes de fichiers montés
  • grep -w / : imprimer seulement la ligne qui montre ce qui est monté sur / . Le site -w correspond uniquement à des mots entiers, de sorte que seuls les / et non par exemple /home sera imprimé.
  • grep -q cow : Le -q supprime la sortie, grep sortira avec un statut >0 (erreur) si cow n'a pas été trouvé et 0 (correct) si c'était le cas.
  • && echo "Live session" : Print Session en direct if the grep` a été couronné de succès
  • || echo "Normal install" : Else, print Normal install .

EDIT PAR L'OP

Au final, voici la solution que j'ai implémentée dans mon script, si cela peut vous être utile :

#!/bin/bash

if [ ! $(df | grep -w / | grep -q '/cow') ]; then
  printf "This script must be run from a live session.\n"
  exit 1
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X