Tôi là ai sau khi `su` không hiển thị id người dùng mới?


9

Tại sao khi tôi chuyển người dùng su <username>và sau đó thực thi who am isẽ xuất ra người dùng trước đó mà tôi đã đăng nhập và không phải là người tôi đã chuyển sang?

Câu trả lời:


13

Bạn có thể đang chạy sai lệnh.

  • whocó nghĩa là hiển thị ai đã đăng nhập, tức là người dùng nào sở hữu thiết bị đầu cuối. Nó trả về một dòng như thế này:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamicó nghĩa là cho bạn thấy id người dùng hiệu quả của người điều hành nó là gì. Nó chỉ trả về một tên duy nhất, như thế này (và tương đương với việc chạy id -un):

    ckhan
    

Tôi nghĩ rằng bạn có thể đã gõ who am ivào thiết bị đầu cuối, chạy whovới hai đối số bị bỏ qua ( am, i).

Xem man whoman whoamiđể biết thêm chi tiết.


2
Hai đối số amikhông được bỏ qua, chúng thậm chí còn được chỉ định bởi POSIX: "Trong miền địa phương POSIX, giới hạn đầu ra để mô tả người dùng gọi, tương đương với -mtùy chọn."
xhienne

3

Trên trang man Ubuntu 12.04.2 của tôi cho lệnh 'who', 'tôi là ai' (hoặc ai có hai đối số) giống như 'who -m' và sẽ cung cấp cho bạn tên máy chủ và người dùng được liên kết với STDIN. Tuy nhiên tôi không nhận được kết quả nào với "tôi là ai". Trang người đàn ông sai hoặc lệnh có lỗi. Bất kể, như đã trả lời trước đó bởi ckhan, lệnh 'whoami' sẽ cung cấp cho bạn tên người dùng cho ID người dùng hiệu quả của bạn. Ít nhất là trong Ubuntu 12.04.2, không có id nào, 'tôi là ai' hay 'whoami' sẽ chỉ cung cấp cho bạn tên người dùng của người đã đăng nhập trên thiết bị đầu cuối hiện tại. Như một cách giải quyết, bạn có thể có được điều đó với:

who | sed 's/ .*//'

Lưu ý rằng đây là Linux cụ thể. Điều này trả về tên người dùng ban đầu trong Unix / SunOS.
Đánh bại

3

Cách giải quyết :

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

mà hoạt động như thay thế từ who am i | awk '{print $1}'. Giải thích bên dưới:

Trên nhiều hệ thống " who am i" tương đương với " who -m". Vấn đề ở đây là với một số thiết bị đầu cuối , " who -m" không trả về gì cả!

Ví dụ # 1 chạy từ thiết bị đầu cuối 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 ~ # 

nhưng Ví dụ # 2 từ thiết bị đầu cuối gnome (cùng máy tính, cùng lệnh)

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

Đây dường như là hậu quả của việc gnome-terminal không thêm các mục utmp


Đừng phân tích ls! Sử dụng statthay thế: stat -c '%U' "$(tty)"Bạn có thể không nên phân tích cú pháp who am i, vì tên người dùng có thể chứa khoảng trắng trong một số trường hợp hiếm.
wjandrea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.