Tìm kiếm dịch vụ giải quyết hệ thống sau khi tiết lộ lỗ hổng gần đây, tôi đã thấy một hành vi rất lạ từ lệnh find.
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
Lệnh trả về 0 hoặc hai dòng làm đầu ra cho lần chạy đầu tiên. Nhưng nếu tôi chạy lệnh lần thứ hai tôi nhận được:
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service
Điều này có nghĩa là lần đầu tiên, "tìm" không thực sự tìm thấy mọi thứ. Ngoài ra điều này chỉ xảy ra một lần. Chạy lệnh lần sau cho thấy đầu ra chính xác. Tôi đã kiểm tra điều này trên một số hệ thống khác có cài đặt Debian 8 (jessie). Trên những người có Kernel 4.9+ thì vấn đề chính xác này luôn xảy ra nhưng trên các hệ thống có kernel 3.16 thì không xảy ra.
Sau khi hệ thống khởi động lại tất cả điều này xảy ra một lần nữa. Nhưng hành vi là như nhau cho mỗi hệ thống cá nhân. Điều đó có nghĩa là nếu kiểm tra trên một hệ thống cụ thể trả về (sai) hai dòng đầu ra cho lần chạy đầu tiên và đầu ra đúng cho lần chạy thứ hai, thì lần chạy đầu tiên của lệnh sau khi khởi động lại hệ thống sẽ in lại 2 dòng. Vì vậy, các hệ thống hiển thị hành vi tương tự sau mỗi lần khởi động lại (theo thử nghiệm của tôi). Chi tiết tập tin như sau:
-rw-r--r-- 1 root root ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root ./lib/systemd/system/systemd-resolved.service
EDIT: Đối với tất cả những người đề xuất vấn đề có thể liên quan đến trường hợp cụ thể này đối với các tệp cụ thể này: " giải quyết hệ thống " chỉ là ví dụ. Điều này xảy ra khi tìm kiếm các từ khóa khác quá. Đây là một ví dụ khác cho kết quả sai trong lần chạy đầu tiên:
root@localhost:/# find . -name "*apache*"
Không có ai ở đây có thể kiểm tra vấn đề này trên Debian 8 với kernel mới nhất từ kho lưu trữ backport?
/lib/systemd
gắn kết? Đó là loại hệ thống tập tin nào? Nếu nó một riêng biệt điểm gắn kết, những gì thời gian là nó gắn?
strace
không? Hệ điều hành nào bạn quan sát thấy hành vi bị lỗi trên? Bạn có ý nghĩa gì khi "trả về 0 hoặc hai kết quả như trên"? Không hoặc hai dòng đầu ra, hoặc mã thoát 0 + hai dòng? Nó có xảy ra lần nữa sau khi bắt đầu một shell mới hoặc khởi động lại không? Có thể có liên quan rằng cuộc gọi đầu tiên chỉ trả về các tệp, trong khi cuộc gọi thứ hai trả về các tệp và thư mục.