Tôi gặp vấn đề này trên một hộp FreeBSD ngày hôm nay. Vấn đề là nó là một tạo tác của vi
(không vim
, không chắc chắn nếu vim
tạo ra vấn đề này). Các tập tin đã tiêu tốn dung lượng nhưng chưa được ghi vào đĩa.
Bạn có thể kiểm tra xem với:
$ fstat -f /path/to/mount/point |sort -nk8 |tail
Cái này nhìn vào tất cả các tệp đang mở và sắp xếp (thông qua số -n
) theo cột thứ 8 (khóa, -k8
), hiển thị mười mục cuối cùng.
Trong trường hợp của tôi, mục cuối cùng (lớn nhất) trông như thế này:
bob vi 12345 4 /var 97267 -rwx------ 1569454080 rw
Điều này có nghĩa là quá trình (PID) 12345 đã tiêu thụ 1,46G (cột thứ tám chia cho 1024³) đĩa mặc dù thiếu thông báo du
. vi
thật kinh khủng khi xem các tập tin cực lớn; thậm chí 100MB là lớn đối với nó. 1.5G (hoặc lớn mà tập tin thực sự là) là vô lý.
Giải pháp là sudo kill -HUP 12345
(nếu điều đó không hiệu quả, tôi sudo kill 12345
và nếu điều đó cũng thất bại, sự sợ hãi kill -9
sẽ xuất hiện).
Tránh các trình soạn thảo văn bản trên các tệp lớn. Cách giải quyết mẫu để lướt nhanh:
Giả sử độ dài dòng hợp lý:
{ head -n1000 big.log; tail -n1000 big.log } |vim -R -
wc -l big.log |awk -v n=2000 'NR==FNR{L=$1;next}FNR%int(L/n)==1' - big.log |vim -R -
Giả sử (các) dòng lớn bất hợp lý:
{ head -c8000 big.log; tail -c8000 big.log } |vim -R -
Chúng được sử dụng vim -R
thay view
vì vim
gần như luôn luôn tốt hơn ... khi nó được cài đặt. Hãy thoải mái để ống chúng vào view
hoặc vi -R
thay vào đó.
Nếu bạn đang mở một tệp lớn như vậy để thực sự chỉnh sửa nó, hãy xem xét sed
hoặc awk
hoặc một số phương pháp lập trình khác.