`qui suis-je` après` su` n'affiche pas le nouvel identifiant?

9

Pourquoi est-ce que lorsque je change d'utilisateur su <username>puis que j'exécute, who am ic'est l'utilisateur précédent auquel j'étais connecté et non celui vers lequel je suis passé?

user1091856
la source

Réponses:

13

Vous exécutez probablement la mauvaise commande.

  • whoest destiné à montrer qui est connecté, c'est-à-dire quel utilisateur possède le terminal. Il renvoie une ligne comme celle-ci:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamiest destiné à vous montrer quel est l'ID utilisateur effectif de la personne qui l'exécute. Il ne renvoie qu'un seul nom, comme celui-ci (et équivaut à courir id -un):

    ckhan
    

Je pense que vous avez peut-être littéralement tapé who am isur le terminal, qui a fonctionné whoavec deux arguments ignorés ( am, i).

Voir man whoet man whoamipour plus de détails.

ckhan
la source
2
Les deux arguments amet ine sont pas ignorés, ils sont même spécifiés par POSIX: "Dans les paramètres régionaux POSIX, limitez la sortie à la description de l'utilisateur appelant, équivalente à l' -moption."
xhienne
3

Selon ma page de manuel Ubuntu 12.04.2 pour la commande 'who', 'who am i' (ou who avec deux arguments) est identique à 'who -m' et devrait vous donner le nom d'hôte et l'utilisateur associé à STDIN. Cependant, je ne reçois aucune sortie avec «qui suis-je». Soit la page de manuel est incorrecte, soit la commande contient un bogue. Quoi qu'il en soit, comme précédemment répondu par ckhan, la commande «whoami» vous donnera le nom d'utilisateur pour votre ID utilisateur effectif. Au moins dans Ubuntu 12.04.2, aucun identifiant, «qui suis-je» ou «whoami» ne vous donnera juste le nom d'utilisateur de la personne connectée sur le terminal actuel. Comme solution de contournement, vous pouvez obtenir cela avec:

who | sed 's/ .*//'
Marnix A. van Ammers
la source
Notez que ceci est spécifique à Linux. Cela renvoie le nom d'utilisateur d'origine dans Unix / SunOS.
Underverse
3

Solution :

ls -l `tty` | awk '{print $3}'

qui fonctionne en remplacement de who am i | awk '{print $1}'. Explication ci-dessous:

Sur de nombreux systèmes, " who am i" équivaut à " who -m". Le problème ici est qu'avec certains terminaux , " who -m" ne renvoie rien!

Exemple # 1 exécuté à partir d'un terminal xfce4

Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ # 

mais Exemple # 2 à partir d'un gnome-terminal (même ordinateur, mêmes commandes)

Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # 

Cela semble être une conséquence du fait que gnome-terminal n'ajoute pas d'entrées utmp…

Thomas Baeckeroot
la source
Ne pas analyser ls! Utilisez à la statplace: stat -c '%U' "$(tty)"vous ne devriez probablement pas analyser non who am iplus, car les noms d'utilisateur peuvent contenir des espaces dans de rares cas.
wjandrea