जवाबों:
इसे इस्तेमाल करे:
truncate -s 0 /var/log/*log
संपादित करें:
यदि आप logrotate
अपने लॉग्स को संभालने के लिए एक से अधिक बार उपयोग करना चाहते हैं । आमतौर पर यह ubuntu में स्थापित है। पर एक नज़र है man logrotate
(या यदि आपके पास यह ऑनलाइन मैनपेज पर देखने के लिए स्थापित नहीं है या इसके साथ स्थापित करें sudo apt-get install logrotate
)
मैनपेज से:
logrotate को बड़ी संख्या में लॉग फाइल बनाने वाली प्रणालियों के प्रशासन को आसान बनाने के लिए डिज़ाइन किया गया है। यह स्वचालित रोटेशन, संपीड़न, हटाने और लॉग फ़ाइलों की मेलिंग की अनुमति देता है। प्रत्येक लॉग फ़ाइल को दैनिक, साप्ताहिक, मासिक, या जब यह बहुत बड़ा हो जाता है, तो संभाला जा सकता है।
यदि आप अपनी सभी लॉग फ़ाइलों को साफ़ करना चाहते हैं , न कि केवल प्रथम-स्तरीय लॉग फ़ोल्डर में, आप उपयोग कर सकते हैं:
shopt -s globstar # if needed
truncate -s 0 /var/log/*.log # first-level logs
truncate -s 0 /var/log/**/*.log # nested folders, like /var/log/nginx/access.log
यह देखते हुए कि यदि आपके पास पहले से logrotate
चल रहा है, तो आपको घुमाए गए .gz
लॉग को भी साफ करना होगा :
find /var/log -type f -name '*.[0-99].gz' -exec rm {} +
इस के लिए एक वैध उपयोग वितरण के लिए एक वीएम उपकरण कंटेनर का निर्माण हो सकता है, उदाहरण के लिए।
आपको इसे नियमित रखरखाव के हिस्से के रूप में करने की आवश्यकता नहीं है: जैसा कि डेम ने काफी सही ढंग से सुझाव दिया है, उसके लिए उपयोग करें logrotate
।
जैसा कि @ उत्तर का पालन करें
यह सभी लॉग फ़ाइलों को /var/log
खोजेगा और उन्हें 0 बाइट्स में विभाजित करेगा।
find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0
*.log*
इसके बजाय उपयोग करूंगा, लेकिन मुझे यकीन नहीं है कि यह 100% सुरक्षित है, इसलिए मैंने इसे उत्तर में शामिल नहीं किया है। क्योंकि जैसी फाइलें हैं dovecot.log-20180930
और हैं dovecot.log-20180923.gz
।
आम तौर पर सबसे POSIX- अनुरूप ओएस के लिए लागू एक फ़ाइल को पूरी तरह से छोटा करने के लिए कुछ तरीके हैं। शेल स्क्रिप्टिंग के साथ आप जो सबसे आम देखेंगे वह कुछ ऐसा है ( true > file.txt
या शेल के : > file.txt
मामले में bash
, >
पुनर्निर्देशन पर्याप्त है)। इस तरह >
से झंडे के साथ open()
या openat()
syscall के माध्यम से फ़ाइलों को खोलता है कि जिस तरह से है O_WRONLY|O_CREAT|O_TRUNC
- कि केवल पढ़ने के लिए बनाता है या फ़ाइल नाम मौजूद नहीं है, या मौजूदा फ़ाइल नाम ट्रंक करें।
इस बात को ध्यान में रखते हुए, हम सी में कुछ इस तरह से लागू कर सकते हैं:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char **argv){
if (argc == 2){
int fd = open(argv[1],O_TRUNC);
close(fd);
}
return 0;
}
इस कोड को संग्रहीत करने वाली फ़ाइल को नाम दें trunc.c
और उसके साथ संकलित करें gcc trunc.c -o trunc
, और आपके पास स्वयं की एक छोटी सी उपयोगिता है जो एक फ़ाइलनाम तर्क को काट देगा जो इसमें प्रदान किया गया है trunc ./foobar.txt
। बेशक, यह कोड अन्य चेक नहीं करता है, यह केवल पहले स्थितीय पैरामीटर को छोटा करता है। मैं इसे पाठकों तक छोड़ने के लिए पता लगाऊंगा कि एक से अधिक स्थितीय मापदंडों से कैसे निपटना है। साइड नोट पर, truncate()
syscall है जिसे हम अच्छी तरह से उपयोग कर सकते हैं, और एक फ़ाइल को चर लंबाई में काट सकते हैं।
अब, यदि आप C के प्रशंसक नहीं हैं, तो Python आपके लिए आसान हो सकता है। open()
पाइथन में एक ही सिद्धांत पर कमांड संचालित होता है - फाइलिंग मौजूद होने पर लिखने और छंटनी के लिए फ़ाइल खोलना। इस प्रकार हम कर सकते हैं
python -c 'import sys;open(sys.argv[1],"w").close()' passwd.copy
सभी .log
फ़ाइलों को खोजने के लिए , जो पहले से ही अन्य उत्तरों में शामिल है - *
ग्लोब या विस्तारित ग्लोब का उपयोग करें bash
। वहाँ भी है find -type f -name "*.log"
, जिसमें -exec
कमांड चलाने के लिए झंडा है (इस विशेष मामले sh -c ''
में >
क्योंकि लाभ लेने के >
लिए एक शेल ऑपरेटर है और बाहरी निष्पादन योग्य नहीं है)। इस प्रकार आप कर सकते हैं
find /var/log -type f -name "*.log" -exec sh -c 'true > "$1"' sh {} \;
यह भी निर्देशिका में है कि लॉग फाइल ध्यान देने योग्य है जैसे /var/log
अक्सर logrotate सेवा तक घुमाया जाता है, इसलिए वहाँ के रूप में फ़ाइल नाम इस तरह हो जाएगा /var/log/service.log
, /var/log/service.log.1
,, आदि तो आप उपयोग कर सकते हैं *.log.[1-9]
पैटर्न के बजाय
अन्य बातों के अलावा, हम /dev/null
वांछित फ़ाइल में कॉपी कर सकते हैं । अजीब तरह से पर्याप्त है, भले ही /dev/null
एक विशेष चरित्र डिवाइस प्रकार की फ़ाइल है, जब आप कॉपी करते हैं कि कहीं और परिणाम खाली नियमित फ़ाइल है, कम से कम जीएनयू के साथ cp
। इस प्रकार हम कर सकते हैं
cp /dev/null foo.txt
या
dd if=/dev/null of=foo.txt
अन्य सुझाए गए पढ़ने:
लॉग / इन / लॉग में लॉग को घुमाने के लिए लॉगोट्रेट कार्यक्षमता के साथ घूमना अच्छा है, लेकिन जब भी हम ऐसा करना चाहते हैं। सिस्टम लॉग उसे प्रिंट किया जाएगा और वे किसी भी विफलताओं को डिबग करने के लिए आसान होंगे।
यदि यह लॉगोट्रेट का उपयोग नहीं करने की आवश्यकता है, तो विकल्प तलाशे जा सकते हैं। हालांकि ट्रंकट यूनिक्स प्रणाली के कुछ स्वादों में आसान विकल्प है, यह कमांड आसानी से उपलब्ध नहीं है, इसे स्थापित करने की आवश्यकता है। यदि नई कमांड को स्थापित करने की अनुमति नहीं है तो नीचे लूप का उपयोग किया जा सकता है।
for logfile $(ls /path/*.log)
do
cat /dev/null > $logfile
done
for logfile in /path/*.log
इसके बजाय उपयोग करें ।
/var/log
यह वह जगह है जहां सिस्टम उन संदेशों को डालता है जिनकी आपको बाद में आवश्यकता हो सकती है। उबंटू पहले भी समस्या का सामना कर चुका है। पढ़ेंman 8 logrotate;man logrotate.conf
।