`siapa aku` setelah` su` tidak menampilkan id pengguna baru?

9

Mengapa ketika saya beralih pengguna su <username>dan kemudian mengeksekusi who am iadalah output pengguna sebelumnya yang saya login dan bukan yang saya beralih ke?

pengguna1091856
sumber

Jawaban:

13

Anda mungkin menjalankan perintah yang salah.

  • whodimaksudkan untuk menunjukkan siapa yang masuk, yaitu pengguna mana yang memiliki terminal. Ini mengembalikan garis seperti ini:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamidimaksudkan untuk menunjukkan kepada Anda apa id pengguna yang efektif dari orang yang menjalankannya. Hanya mengembalikan satu nama, seperti ini (dan setara dengan berjalan id -un):

    ckhan
    

Saya pikir Anda mungkin telah mengetik who am idi terminal, yang berjalan whodengan dua argumen yang diabaikan ( am, i).

Lihat man whodan man whoamiuntuk lebih jelasnya.

ckhan
sumber
2
Dua argumen amdan itidak diabaikan, mereka bahkan ditentukan oleh POSIX: "Di lokal POSIX, batasi output untuk menggambarkan pengguna yang memanggil, setara dengan -mopsi."
xhienne
3

Per halaman manual Ubuntu 12.04.2 saya untuk perintah 'siapa', 'siapa saya' (atau yang dengan dua argumen) sama dengan 'siapa -m' dan harus memberi Anda nama host dan pengguna yang terkait dengan STDIN. Namun saya tidak mendapatkan hasil dengan 'siapa saya'. Halaman manual salah atau perintah memiliki bug. Apapun, seperti yang sebelumnya dijawab oleh ckhan, perintah 'whoami' akan memberi Anda nama pengguna untuk ID pengguna Anda yang efektif. Setidaknya di Ubuntu 12.04.2, tidak ada id, 'who am i', atau 'whoami' akan memberikan Anda hanya nama pengguna dari orang yang masuk di terminal saat ini. Sebagai solusinya Anda bisa mendapatkannya dengan:

who | sed 's/ .*//'
Marnix A. van Ammers
sumber
Perhatikan bahwa ini adalah spesifik Linux. Ini mengembalikan nama pengguna asli di Unix / SunOS.
Underverse
3

Penanganan masalah :

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

yang berfungsi sebagai pengganti dari who am i | awk '{print $1}'. Penjelasan di bawah ini:

Pada banyak sistem " who am i" setara dengan " who -m". Masalahnya di sini adalah bahwa dengan beberapa terminal , " who -m" tidak mengembalikan apa pun!

Contoh # 1 dijalankan dari 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 ~ # 

tetapi Contoh # 2 dari terminal gnome (komputer yang sama, perintah yang sama)

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 ~ # 

Ini tampaknya merupakan konsekuensi dari gnome-terminal tidak menambahkan entri utmp ...

Thomas Baeckeroot
sumber
Jangan uraikan ls! Gunakan statsebagai gantinya: stat -c '%U' "$(tty)"Anda mungkin juga tidak perlu menguraikan who am i, karena nama pengguna dapat berisi spasi dalam beberapa kasus yang jarang terjadi.
wjandrea