Tôi đang cố gắng tìm tệp ảo chứa id người dùng hiện tại. Tôi đã nói rằng tôi có thể tìm thấy nó trong thư mục proc, nhưng không hoàn toàn chắc chắn rằng tập tin.Thư mục Unix Proc
Trả lời
Bạn thực sự muốn /proc/self/status
, sẽ cung cấp cho bạn thông tin về quy trình hiện được thực hiện.
Dưới đây là một ví dụ:
$ cat /proc/self/status
Name: cat
State: R (running)
Tgid: 17618
Pid: 17618
PPid: 3083
TracerPid: 0
Uid: 500 500 500 500
Gid: 500 500 500 500
FDSize: 32
Groups: 10 488 500
VmPeak: 4792 kB
VmSize: 4792 kB
VmLck: 0 kB
VmHWM: 432 kB
VmRSS: 432 kB
VmData: 156 kB
VmStk: 84 kB
VmExe: 32 kB
VmLib: 1532 kB
VmPTE: 24 kB
Threads: 1
SigQ: 0/32268
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed: 00000003
Mems_allowed: 1
voluntary_ctxt_switches: 0
nonvoluntary_ctxt_switches: 3
Bạn có thể muốn nhìn vào những con số đầu tiên trên dòng UID và GID. Bạn có thể tra cứu các số uid nào ánh xạ tới tên người dùng nào bằng cách xem /etc/passwd
hoặc gọi các hàm có liên quan để ánh xạ uid thành tên người dùng bằng bất kỳ ngôn ngữ nào bạn đang sử dụng.
Lý tưởng nhất, bạn chỉ cần gọi hệ thống gọi getuid()
để tra cứu thông tin này, thực hiện bằng cách xem /proc/
là phản tác dụng.
Tôi không chắc chắn rằng có thể được tìm thấy trong /proc
. Bạn có thể thử sử dụng hàm getuid()
hoặc biến môi trường $USER
.
Tại sao không chỉ sử dụng "id -u
"?
Rất có thể, bạn muốn kiểm tra biến môi trường $USER
. Các tùy chọn khác bao gồm getuid
và id -u
, nhưng tìm kiếm /proc
chắc chắn không phải là phương pháp hành động tốt nhất.
Theo như tôi biết, /proc
dành riêng cho Linux, không có trong UNIX nói chung. Nếu bạn thực sự chỉ muốn UID hiện tại, hãy sử dụng hàm getuid()
hoặc geteuid()
.
Nếu bạn biết bạn sẽ chỉ sử dụng Linux, bạn có thể khám phá cấu trúc phân cấp dưới /proc/self/*
, nó chứa nhiều thông tin khác nhau về quy trình hiện tại. Hãy nhớ rằng /proc
là "huyền diệu", đó là hệ thống tệp ảo mà hạt nhân phân phát và nội dung được tạo động tại thời điểm bạn yêu cầu. Do đó nó có thể trả về thông tin cụ thể cho quy trình hiện tại.
Ví dụ, hãy thử lệnh này: cat /proc/self/status
Trong /proc/process_id/status
(ít nhất là trên Linux), bạn sẽ tìm thấy một dòng như sau:
Uid: 1000 1000 1000 1000
này cho bạn biết uid của người sử dụng mà theo tài khoản quá trình đang chạy.
Tuy nhiên, để tìm ra id quá trình của quy trình hiện tại, bạn sẽ cần một cuộc gọi hệ thống và sau đó bạn cũng có thể gọi getuid
để nhận trực tiếp uid.
Chỉnh sửa: ah, /proc/self/status
... học điều gì đó mới mỗi ngày!
Những thứ bạn đang tìm kiếm có thể nằm trong các biến môi trường. Bạn cần phải cẩn thận về những gì bạn đang sử dụng shell khi bạn kiểm tra các biến môi trường. bash sử dụng "UID" trong khi tcsh sử dụng "uid" và trong trường hợp quan trọng là *nix
. Tôi cũng thấy rằng tcsh đặt "gid" nhưng tôi không thể tìm thấy biến phù hợp trong bash.
- 1. Không thể xóa thư mục trong Unix
- 2. chuyển sang thư mục cha trong unix
- 3. Thư mục phụ nén của Unix không bao gồm thư mục mẹ
- 4. Khi nào thư mục UNIX thay đổi dấu thời gian
- 5. Đổi tên tệp trong thư mục UNIX - shell scripting
- 6. Unix tar: không giữ cấu trúc thư mục
- 7. UNIX shell file sao chép cấu trúc thư mục phẳng
- 8. Các mục nhập trong/proc/meminfo
- 9. Làm cách nào để tạo mục nhập proc trong/proc/driver?
- 10. Lệnh Unix để xóa tất cả các tệp trong một thư mục nhưng giữ lại thư mục
- 11. Thư viện Python để theo dõi/proc/diskstats?
- 12. Làm cách nào để tạo thư mục thư mục và thư mục cha trong một lệnh Perl?
- 13. Kiểm tra mục nhập ODBC trên Unix
- 14. Tìm Thư mục Với Không có tập tin trong Unix/Linux
- 15. thứ tự của các file unix tìm thấy trên hai thư mục có hoặc lệnh
- 16. UNIX Command để đệ quy thay đổi quyền trên thư mục?
- 17. Phân biệt giữa thư mục và tệp unix trong C và C++
- 18. Làm cách nào để lưu trữ thư mục trong Perl như tar trong UNIX?
- 19. Tại sao các liên kết cứng không được phép vào các thư mục trong UNIX/Linux
- 20. Lệnh UNIX để liệt kê các thư mục có số lượng tệp
- 21. Nén thư mục chứa thư mục con
- 22. Cách tạo thư mục/thư mục
- 23. Làm cách nào để tạo thư mục nếu thư mục không tồn tại bằng Perl?
- 24. Lệnh xuất UNIX UNIX
- 25. Các tệp gần đây trong thư mục
- 26. Tìm hiểu về Linux/proc/id/maps
- 27. Có thư viện Java của các hàm Unix không?
- 28. Nhận thư mục chính trong Linux, C++
- 29. Ruby: ProC# call vs yield
- 30. Khi nào sử dụng/proc và khi/dev
Bạn không nên phân tích/etc/passwd vì hầu hết các hệ thống hiện đại đều sử dụng PAM và trong trường hợp đó, cơ sở dữ liệu người dùng có thể không phải là/etc/passwd, mà thay vào đó là NIS, máy chủ LDAP hoặc thứ gì đó hoàn toàn khác nhau. – jfs