Ngoài ra, các biến này có luôn khớp với tên người dùng hiện đang đăng nhập không (chúng có trên hệ thống Debian của tôi) không? Tôi có thể giả sử tính khả dụng của chúng trong các hệ thống Unix (giống như) khác không?
Tôi cũng tò mò tại sao người ta sẽ sử dụng whoamithay vì chỉ đọc bất kỳ biến nào trong số này.
USERvà USERNAMElà các biến môi trường thông thường, có nghĩa là, nếu bạn muốn, bạn có thể đặt chúng thành các giá trị tùy ý. Chỉ cần gõ USER=xyz. Nói cách khác, ngay cả khi các biến đó tồn tại, không có gì đảm bảo rằng giá trị của chúng khớp với tên người dùng hiện đang đăng nhập.
guarantee, ý tôi là theo mặc định (nghĩa là người dùng không thay đổi chúng).
sudo whoamivàsudo echo $USER
sudo echo $USER, vỏ mở rộng $USER, sau đó gọi sudo. Vì vậy, tất nhiên nó không tạo ra cùng một đầu ra như whoami. Giống như sudo whoami, sudo sh -c 'echo $USER'đầu ra (thường) root. Về nhận xét của bạn về việc whoamisử dụng EUID , lưu ý rằng sudo whoamisẽ xuất rootngay cả khi đã whoamisử dụng UID. sudođặt cả EUID và UID cho lệnh mà nó chạy (ngoại trừ trong trường hợp rất bất thường mà bạn định cấu hình rõ ràng để hành xử theo cách khác). So sánh sudo id -uvới sudo id -ru.
mantrang,whoamibáo cáo tên được liên kết với ID người dùng hiệu quả của bạn. Điều đó có nghĩa là nó sẽ trả về một cái gì đó khác nếu bạn đang sử dụngsudohoặc chạy một tập tin thực thi setuid. Nếu bạn đãsudothiết lập, hãy thửsudo whoamiví dụ.