मैं आज एक FreeBSD बॉक्स पर इस समस्या में भाग गया। मुद्दा यह था कि यह एक कलाकृति थी vi
( vim
निश्चित नहीं कि vim
यह समस्या पैदा होगी)। फ़ाइल अंतरिक्ष का उपभोग कर रही थी लेकिन डिस्क पर पूरी तरह से नहीं लिखा गया था।
आप इसे देख सकते हैं:
$ fstat -f /path/to/mount/point |sort -nk8 |tail
यह -n
8 वीं कॉलम (कुंजी) द्वारा सभी खुली फाइलों और सॉर्ट्स (संख्यात्मक रूप से ) को देखता है -k8
, जो अंतिम दस आइटम दिखाता है।
मेरे मामले में, अंतिम (सबसे बड़ी) प्रविष्टि इस तरह दिखी:
bob vi 12345 4 /var 97267 -rwx------ 1569454080 rw
इसका मतलब यह था कि प्रक्रिया (PID) 12345 डिस्क के अभाव के बावजूद डिस्क के 1.46G (1024 (द्वारा विभाजित आठवें स्तंभ) का उपभोग du
कर रही थी। vi
बहुत बड़ी फ़ाइलों को देखने में भयानक है; यहां तक कि इसके लिए 100MB भी बड़ा है। 1.5G (या वास्तव में बड़ी वह फ़ाइल वास्तव में थी) हास्यास्पद है।
समाधान था sudo kill -HUP 12345
(यदि वह काम नहीं करता था, तो मैं sudo kill 12345
और यदि वह भी विफल रहता है, तो खूंखार kill -9
खेल में आ जाएगा)।
बड़ी फ़ाइलों पर पाठ संपादकों से बचें। त्वरित स्किमिंग के लिए नमूना वर्कअराउंड:
उचित लाइन लंबाई मानकर:
{ 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 -
अनुचित रूप से बड़ी रेखा मान लेना:
{ head -c8000 big.log; tail -c8000 big.log } |vim -R -
ये उपयोग vim -R
के स्थान पर view
, क्योंकि vim
लगभग हमेशा बेहतर जब इसके इंस्टॉल हो रहा है ...। उन्हें view
या vi -R
इसके बजाय पाइप करने के लिए स्वतंत्र महसूस करें ।
आप इस तरह के एक बड़ी फ़ाइल वास्तव में इसे संपादित करने के खोलने जा रहे हैं, तो विचार करें sed
या awk
या कुछ अन्य कार्यक्रम संबंधी दृष्टिकोण।