Câu trả lời:
Trong /var/lib/dpkg/info
là .list
các tệp văn bản liệt kê tất cả các tệp có trong mỗi gói¹ được cài đặt thông qua trình quản lý gói của Debian.
Tìm tất cả các tệp trong hệ thống tệp không khớp với bất kỳ mục nào có thể đạt được bằng một thứ ngây thơ như thế này:
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Điều này rõ ràng sẽ mất một thời gian rất dài vì toàn bộ hệ thống tập tin sẽ được quét. Nếu bạn sử dụng các phân vùng khác nhau cho các thư mục hệ thống (chẳng hạn như /usr
hoặc /var
), chỉ định chúng sau lần đầu tiên /
.
Cảnh báo: Không bao gồm các tệp được tạo bởi tập lệnh gói. Ví dụ:
/etc/hosts.allow
không được liệt kê ở bất cứ đâu nhưng nó có thể đến từ libwrap0
đó có thể tạo ra nó, nếu tập tin đó không tồn tại tại thời điểm cài đặt gói..pyc
tệp (thư viện Python đã biên dịch), .elc
tệp ( thư viện Emacs Lisp được biên dịch), v.v./var/lib/dpkg/info/*.list
- truy vấn trên sẽ cần phải được viết lại theo một số nguyên tắc khác.
Phiên bản hiệu quả hơn của giải pháp @ Patrice , sử dụng hệ vỏ có hỗ trợ thay thế quy trình ( bash
, AT & T ksh
, zsh
):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Giống như giải pháp của Patrice, nó giả định rằng không có đường dẫn tệp nào chứa các ký tự dòng mới.
locate
cơ sở dữ liệu sẽ nhanh hơn chạy find
? locate \* | grep -v "^/home/"
- cũng có lợi ích của việc tìm kiếm /boot/
và các phân vùng hệ thống khác.
Bạn cũng có thể sử dụng thay thế quá trình & grep
& find
. Lưu ý rằng grep
được sử dụng hai lần để chỉ lọc các đường dẫn có liên quan /var/lib/dpkg/info
để tiết kiệm vài giây nếu bạn đang tìm kiếm các tệp trong một thư mục nhất định.
dir="/lib/x86_64-linux-gnu"
find "$dir" -type f \
| grep -v -x -F -f \
<(find '/var/lib/dpkg/info' -name '*.list' -print0 \
| xargs -0 grep -h -F "^$dir" \
| sort -u)
find: argument list too long