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) fuser
có thể được tìm thấy trong psmisc
gói; đây là trường hợp sử dụng mà tôi thấy fuser
tỏ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 systemd
là init
sau đó fuser
sẽ thấy nó và có những cân nhắc khác. Với systemd
việ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
. systemd
tiê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ó ... init
và getty
vẫ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 systemd
cho 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 systemd
việ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.service
hoặ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. fuser
có thể tìm thấy & bạn giết dhclient
nhưng NetworkManager
khở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, systemd
tương đương với cấp 1 chạy được khớp với rescue.target
(và runlevel1.target
là 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 busy
và 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 umount
thấ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.
w
hoặcu
trongFD
cộ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 .