Làm cách nào tôi có thể liệt kê các tệp ngăn / không được đọc lại thành chỉ đọc?
A) fusercó thể được tìm thấy trong psmiscgói; đây là trường hợp sử dụng mà tôi thấy fusertỏa sáng & hữu ích hơn lsof.
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
Điều đó sẽ hiển thị tất cả các quy trình có tệp mở trên / để đọc (f) và viết (F). Các tệp sẽ ngăn / không được đọc lại thành chỉ đọc là những tệp được mở để ghi (F).
Giết các tiến trình đang chạy có thể chạy với các tệp thư mục gốc mở để ghi ., Tức là
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
Đó là trên các systemdý kiến với một cảnh báo. Nếu systemdlà initsau đó fusersẽ thấy nó và có những cân nhắc khác. Với systemdviệc chạy, nó có thể (bắt đầu lại) các quá trình phía sau lưng của bạn, ngay cả khi chúng vừa được xác định và bị giết fuser. systemdtiên tiến hơn nhiều so với truyền thống sysvinit.
B) CẬP NHẬT trong phần mô tả cho biết hệ thống chỉ có ... initvà gettyvẫn đang chạy ...
Tôi thấy bình luận nói rằng hệ thống không sử dụng systemd, nó đang sử dụng init. Trên căng, systemd là init . Nhận xét không nói rõ ràng sysvinit, vì vậy tôi cho rằng hệ thống đang được đề cập có thể đang sử dụng độ dài mặc định systemdcho init. Hoặc rằng những người khác vấp ngã trên bài đăng này, đang sử dụng căng systemd, thấy phần này hữu ích.
Theo Wiki Wiki ,
Quá trình khởi tạo hệ thống được xử lý bởi trình nền init. Trong các bản phát hành nén và trước đó, trình nền đó được cung cấp bởi gói sysvinit và không có sự thay thế nào được hỗ trợ. Trong wheezy , init daemon mặc định vẫn cònsysvinit , nhưng "bản xem trước công nghệ" của systemd có sẵn. Trong jessie và căng , hệ thống init mặc định làsystemd , nhưng chuyển đổi để sysvinit được hỗ trợ.
Kể từ jessie, chỉ có systemd được hỗ trợ đầy đủ; sysvinit chủ yếu được hỗ trợ, nhưng các gói Debian không bắt buộc phải cung cấp các tập lệnh khởi động sysvinit. runit cũng được đóng gói, nhưng chưa nhận được mức độ thử nghiệm và hỗ trợ như các loại khác và hiện không được hỗ trợ như PID 1.
Với systemdviệc chạy, có một vài bước bổ sung cần được thực hiện để giải phóng / để nó có thể được xử lý lại mà không gặp vấn đề gì.
Có khả năng system.sliceđang giữ các tệp đang mở cho systemd-journald.servicehoặc systemd-udevd.service(cả hai đều có phụ thuộc ổ cắm). Hoặc, nếu NetworkManagerđang chạy, nó có thể hồi sinh dhclient, ghi vào / var / ... (& / var / không phải luôn là thiết bị của chính nó), v.v. fusercó thể tìm thấy & bạn giết dhclientnhưng NetworkManagerkhởi động lại ngay.
Đạo đức là rất nhiều thứ được tự động hóa mà có thể 'muốn' / (và thậm chí còn hơn thế nữa systemd).
Để chắc chắn, nếu nó khả thi, systemdtương đương với cấp 1 chạy được khớp với rescue.target(và runlevel1.targetlà một liên kết tượng trưng cho rescue.target).
1) Bắt đầu bằng cách cách ly hệ thống với rescue.target
# systemctl isolate rescue.target
Nó sẽ nhắc bạn nhập mật khẩu root; làm theo hướng dẫn trên màn hình.
2) Tại vỏ cứu hộ, tìm hiểu những gì muốn /.
# systemctl show -p Wants /
Thông thường, nó là system.slice; dừng tất cả mọi thứ mà Wants /. ví dụ
# systemctl stop system.slice
3) Tại thời điểm này, bản báo cáo không nên báo cáo mount: / is busyvà mount -o remount,ro / nên hoạt động. Nếu không, kiểm tra lại với fuser.
4) FWIW; Tôi cũng đã thấy những lần umountthất bại khi / nếu một thiết bị khác được gắn trên thư mục con của một mount khác, tức là các mount được lồng. Ví dụ: umount /sẽ thất bại nếu / var / hoặc / boot / nằm trên thiết bị khác (và được gắn). Mặc dù mount -o remount,ro /vẫn nên làm việc trong trường hợp này.
lsblk có thể hữu ích để hình dung gắn kết lồng nhau.
Tại sao lsof + L1 không còn liệt kê các tệp đang mở mà không được liên kết?
Bởi vì chúng không có sẵn (ổ cắm hoặc hầu hết các bộ & ống), chúng không mở tệp nữa (quy trình cha mẹ đã đóng bộ mô tả tệp) hoặc chúng (vẫn) có số lượng liên kết lớn hơn 1.
người đàn ông lsof (8) chi tiết ...
+ | -L [l]
Tùy chọn này cho phép ('+') hoặc vô hiệu hóa ('-') danh sách số lượng liên kết tệp, nơi chúng có sẵn - ví dụ: chúng không có sẵn cho ổ cắm, hoặc hầu hết các bộ xếp hình và ống.
Khi + L được chỉ định mà không có số sau, tất cả số lượng liên kết sẽ được liệt kê. Khi -L được chỉ định (mặc định), sẽ không có số lượng liên kết nào được liệt kê.
Khi + L được theo sau bởi một số, chỉ các tệp có số lượng liên kết ít hơn số đó sẽ được liệt kê . (Không có số nào có thể theo -L.) Một đặc điểm kỹ thuật của biểu mẫu '' + L1 '' sẽ chọn các tệp đang mở đã được hủy liên kết. Một đặc điểm kỹ thuật của biểu mẫu +aL1 <file_system>sẽ chọn các tệp đang mở không được liên kết trên hệ thống tệp được chỉ định.
whoặcutrongFDcột củalsofđầu ra, hoặc choFđầu ra củafuser -vm /, ví dụ. Tôi không thể cung cấp cho bạn một danh sách đầy đủ, mặc dù. Bạn cũng có thể muốn cài đặt gói Needrestart .