Sử dụng strace
bạn có thể thấy những gì konsole
đang lên đến.
$ strace -s 2000 -o konsole.log
...
...
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2655, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f316d8fc000
read(3, "root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sy
nc\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\nf
tp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\nsystemd-journal-gateway:x:191:191:Journal Gateway:/var/log/journal:/usr/sbin/nologin\npolkitd:
x:999:999:User for polkitd:/:/sbin/nologin\nusbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin\ncolord:x:998:997:User for colord:/var/lib/colord:/sbin/nologin\nrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin\nqemu:x:107:
107:qemu user:/:/sbin/nologin\nrtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\nradvd:x:75:75:radvd user:/:/sbin/nologin\nabr
t:x:173:173::/etc/abrt:/sbin/nologin\nopenvpn:x:997:996:OpenVPN:/etc/openvpn:/sbin/nologin\nunbound:x:996:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin\nsaslauth:x:995:76:\"Saslauthd user\":/run/saslauthd:/sbin/nologin\n
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin\navahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin\nrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin\nnfsnobody
:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin\nnm-openconnect:x:994:994:NetworkManager user for OpenConnect:/:/sbin/nologin\nmailnull:x:47:47::/var/spool/mqueue:/sbin/nologin\nsmmsp:x:51:51::/var/spool/mqueue:/s
bin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\npulse:x:993:993:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin\ngdm:x:42:42::/var/lib/gdm:/sbin/nologin\
ngnome-initial-"..., 4096) = 2655
close(3) = 0
...
Konsole đang đọc nội dung /etc/passwd
khá nhanh và bạn không thấy nó lsof
. Đây là một vấn đề điển hình khi một tệp được mở, đọc nhanh và sau đó đóng lại.
Tôi có nên quan tâm không?
Điều này, nhân tiện, không phải là mối quan tâm. My gnome-terminal
làm điều tương tự. Dòng chảy của mọi thứ có thể hơi khó hiểu nhưng Konsole đang truy vấn hệ thống để lấy một phần thông tin. Trong trường hợp này một cái gì đó giống như thư mục nhà của người dùng.
Vì vậy, hệ thống thực hiện cuộc gọi đến NSS (tệp cấu hình Name Service Switch):
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
Có một dòng trong tệp này, cụ thể là dòng này:
passwd: files
Dòng này cho NSS biết nơi "cơ sở dữ liệu" 'passwd' có thể được tìm thấy. Dòng này nói với NSS rằng tài nguyên được đặt trong các tệp. Vì vậy, hệ thống sau đó mở /etc/passwd
tệp để tìm thư mục chính của người dùng.
LƯU Ý: Đào sâu hơn hành vi này dường như là do Bash. Làm một strace
chỉ Bash cho thấy điều tương tự.
$ strace -s 2000 -o bash.log bash
Đọc thêm
Nếu bạn thực sự quan tâm đến cách thức hoạt động của NSS thì hãy tham khảo các trang hướng dẫn nsswitch.conf
và nss
. NSS là mô-đun và có thể sử dụng các công nghệ phụ trợ khác nhau cho "cơ sở dữ liệu" của nó.
Ví dụ:
/etc/nsswitch.conf NSS configuration file.
/lib/libnss_compat.so.X implements "compat" source.
/lib/libnss_db.so.X implements "db" source.
/lib/libnss_dns.so.X implements "dns" source.
/lib/libnss_files.so.X implements "files" source.
/lib/libnss_hesiod.so.X implements "hesiod" source.
/lib/libnss_nis.so.X implements "nis" source.
/lib/libnss_nisplus.so.X implements "nisplus" source.
/etc/passwd
? Tệp này chứa tất cả thông tin về tài khoản người dùng, bao gồm thư mục chính và shell.