Pourquoi est-ce que lorsque je change d'utilisateur su <username>
puis que j'exécute, who am i
c'est l'utilisateur précédent auquel j'étais connecté et non celui vers lequel je suis passé?
Pourquoi est-ce que lorsque je change d'utilisateur su <username>
puis que j'exécute, who am i
c'est l'utilisateur précédent auquel j'étais connecté et non celui vers lequel je suis passé?
Réponses:
Vous exécutez probablement la mauvaise commande.
who
est 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)
whoami
est 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 i
sur le terminal, qui a fonctionné who
avec deux arguments ignorés ( am
, i
).
Voir man who
et man whoami
pour plus de détails.
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/ .*//'
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…
stat
place: stat -c '%U' "$(tty)"
vous ne devriez probablement pas analyser non who am i
plus, car les noms d'utilisateur peuvent contenir des espaces dans de rares cas.
am
eti
ne 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'-m
option."