Có vẻ như bạn đang đệ quy tìm kiếm toàn bộ hệ thống phân cấp hệ thống tệp của mình. Điều đó sẽ không hoạt động như mong đợi trên hầu hết các hệ thống.
Trên Linux ít nhất /proc
và /sys
là các hệ thống tệp ảo - chúng không tương ứng với tệp thực trên đĩa. Các tệp đặc biệt trong /dev
cũng không phải là tệp thực - chúng tương ứng với một số thiết bị trên hệ thống của bạn, chẳng hạn như đĩa cứng, thiết bị đầu vào e.t.c. Việc sửa đổi - và, đôi khi, ngay cả các tập tin đọc dưới bất kỳ thư mục nào cũng không bao giờ xảy ra theo cách không kiểm soát được, vì bạn có thể làm hỏng hạt nhân, hủy hoại hệ thống tập tin và thậm chí gây hư hỏng vĩnh viễn cho phần cứng của bạn.
Vì bạn đang sử dụng find
để thực hiện tìm kiếm, bạn cần phải hạn chế phạm vi tìm kiếm của mình:
Sử dụng rõ ràng phủ nhận -path
lựa chọn:
find/-maxdepth 2 -type f ! -path '/proc/*' ! -path '/sys/*'
Sử dụng tùy chọn -prune
:
find/-maxdepth 2 -path '/proc' -prune -o -path '/sys' -prune -o -type f -print
Sử dụng tùy chọn -xdev
để tránh giảm dần đến hệ thống tập tin khác hoàn toàn:
find/-maxdepth 2 -xdev -type f
Bạn có thể sử dụng như nhiều -path
và/hoặc -prune
tùy chọn như bạn cần phải tinh chỉnh đầu ra của find
. Tuy nhiên, tôi khuyên bạn nên kiểm tra đầu ra của nó trước khi chuyển nó đến bất kỳ giai đoạn nào sau này trong đường ống.
EDIT:
Dưới đây là một số ví dụ về các thiệt hại gây ra khi truy cập vào một số tập tin một cách không kiểm soát được - thường là root
:
Cũ hơn hạt nhân used to crash nếu /proc/kcore
được đọc như root
. Tôi tin rằng điều này không còn xảy ra, nhưng tôi đã gặp điều này kể từ khi /proc/kcore
được giới thiệu trong loạt hạt nhân 2.4.x và nó occasionally pops up again, vì vậy tôi không có tâm trạng để thực sự thử nghiệm ...
Đọc thiết bị khối thông qua nút thiết bị của nó trong /dev/
có thể làm chậm bất kỳ hoạt động nào khác trên thiết bị đó, vì nó bỏ qua VFS và các bộ đệm khác nhau.Hãy tưởng tượng, ví dụ, đọc một trực tiếp RAID-5 6TB partion, trong khi các quá trình khác cố gắng sử dụng nó đúng cách thông qua hệ thống tập tin được cài đặt. Sử dụng -type f
trong find
nên ngăn điều này xảy ra.
Vì bạn đã đề cập sửa đổi, bạn có thể dễ dàng tạo thiết bị nhúng bằng cách làm hỏng phần mềm của thiết bị, có thể truy cập qua /dev/mtd*
. Trong một số trường hợp nó không thể phục hồi từ tham nhũng như vậy mà không có một số biện pháp khá cực đoan.
Vì vậy, hãy sử dụng 'find $ anything! -wholename "/ proc/sysrq-trigger"? –
* Tại sao * bạn có đọc tệp đệ quy trong '/ proc' không? Chúng tôi có thể giúp bạn nhiều hơn nếu bạn nói với chúng tôi những gì bạn đang cố gắng làm theo các điều khoản rộng hơn. – thkala
@thkala cố gắng tìm kiếm các tệp có một chuỗi nhất định trong đó, sau đó xóa toàn bộ nội dung của tệp. – user1166981