Mengapa ketika saya beralih pengguna su <username>
dan kemudian mengeksekusi who am i
adalah output pengguna sebelumnya yang saya login dan bukan yang saya beralih ke?
Mengapa ketika saya beralih pengguna su <username>
dan kemudian mengeksekusi who am i
adalah output pengguna sebelumnya yang saya login dan bukan yang saya beralih ke?
Jawaban:
Anda mungkin menjalankan perintah yang salah.
who
dimaksudkan 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)
whoami
dimaksudkan 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 i
di terminal, yang berjalan who
dengan dua argumen yang diabaikan ( am
, i
).
Lihat man who
dan man whoami
untuk lebih jelasnya.
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/ .*//'
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 ...
stat
sebagai 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.
am
dani
tidak diabaikan, mereka bahkan ditentukan oleh POSIX: "Di lokal POSIX, batasi output untuk menggambarkan pengguna yang memanggil, setara dengan-m
opsi."