`ฉันคือใครหลังจาก` su 'ไม่แสดงรหัสผู้ใช้ใหม่


9

ทำไมเมื่อฉันเปลี่ยนผู้ใช้su <username>แล้วดำเนินการwho am iออกเป็นผู้ใช้ก่อนหน้านี้ที่ฉันเข้าสู่ระบบและไม่ใช่คนที่ฉันเปลี่ยนไป?

คำตอบ:


13

คุณอาจเรียกใช้คำสั่งที่ไม่ถูกต้อง

  • whoหมายถึงการแสดงว่าใครเข้าสู่ระบบนั่นคือผู้ใช้ที่เป็นเจ้าของสถานี ส่งคืนบรรทัดดังนี้:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamiหมายถึงแสดงให้คุณเห็นว่า ID ผู้ใช้ที่มีประสิทธิภาพนั้นเป็นของคนที่เรียกใช้ มันจะคืนค่าชื่อเดียวเช่นนี้ (และเทียบเท่ากับการทำงานid -un):

    ckhan
    

ฉันคิดว่าคุณอาจพิมพ์who am iที่เทอร์มินัลอย่างแท้จริงซึ่งwhoมีอาร์กิวเมนต์สองตัวที่ไม่สนใจ ( am, i)

ดูman whoและman whoamiสำหรับรายละเอียดเพิ่มเติม


2
อาร์กิวเมนต์สองตัวamและiไม่ถูกละเว้นจะถูกระบุโดย POSIX: "ในโลแคล POSIX จำกัด เอาต์พุตเพื่ออธิบายผู้ใช้ที่อ้างถึงเทียบเท่ากับ-mตัวเลือก"
xhienne

3

ในหน้า man ของฉัน Ubuntu 12.04.2 สำหรับ 'who' command ', ใครคือ i' (หรือผู้ที่มีสองอาร์กิวเมนต์ใด ๆ ) จะเหมือนกับ 'who -m' และควรให้ชื่อโฮสต์และผู้ใช้ที่เกี่ยวข้องกับ STDIN อย่างไรก็ตามฉันไม่ได้รับผลลัพธ์ด้วย 'Who am i' อาจเป็น man page ผิดหรือคำสั่งมีข้อผิดพลาด ไม่ว่าตามคำตอบก่อนหน้านี้โดย ckhan คำสั่ง 'whoami' จะให้ชื่อผู้ใช้สำหรับ ID ผู้ใช้ที่มีประสิทธิภาพของคุณ อย่างน้อยใน Ubuntu 12.04.2 ไม่มีรหัส 'ใครคือฉัน' หรือ 'whoami' จะให้ชื่อผู้ใช้ของบุคคลที่ล็อกอินในเทอร์มินัลปัจจุบันเท่านั้น คุณสามารถติดต่อกับ:

who | sed 's/ .*//'

โปรดทราบว่านี่เป็น Linux โดยเฉพาะ ส่งคืนชื่อผู้ใช้เดิมใน Unix / SunOS
Underverse

3

วิธีแก้ปัญหา :

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

who am i | awk '{print $1}'ว่างานแทนจาก คำอธิบายด้านล่าง:

ในหลาย ๆ ระบบ " who am i" เทียบเท่ากับ " who -m" ปัญหาคือที่นี่ด้วยเทอร์มินัล " who -m" ไม่ส่งคืนอะไรเลย!

ตัวอย่าง # 1 เรียกใช้จาก xfce4-terminal

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

แต่ตัวอย่าง # 2 จาก gnome-terminal (คอมพิวเตอร์เครื่องเดียวกันคำสั่งเดียวกัน)

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

ดูเหมือนว่าจะเป็นผลมาจาก gnome-terminal ที่ไม่ได้เพิ่มรายการ utmp ...


อย่าแยก ls! ใช้statแทน: stat -c '%U' "$(tty)"คุณอาจไม่ควรแยกวิเคราะห์who am iเช่นกันเนื่องจากชื่อผู้ใช้อาจมีช่องว่างในบางกรณีที่หายาก
wjandrea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.