हां, ऐसे मामले हैं।
जीएनयू के साथ लिनक्स सिस्टम पर सहानुभूति के मामले में ls
, ls -l
वसीयत लिंक के आकार को बाहर कर wc -c
देगी , जबकि वास्तविक फ़ाइल को हल करेगी और वहां बाइट्स की संख्या पढ़ेगी। नीचे आप देख सकते हैं कि ls -l
रिपोर्ट 29 बाइट्स, जबकि wc
वास्तविक फ़ाइल में 172 बाइट्स रिपोर्ट करती है।
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 1月 17 2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
$ wc -c /etc/resolv.conf
172 /etc/resolv.conf
$ wc -c /var/run/resolvconf/resolv.conf
172 /var/run/resolvconf/resolv.conf
$ ls -l /var/run/resolvconf/resolv.conf
-rw-r--r-- 1 root root 172 1月 15 15:49 /var/run/resolvconf/resolv.conf
वर्चुअल फाइलसिस्टम के मामले में , जैसे कि/proc
या/sys
, वहाँ कई फाइलें आकार 0 के रूप में दिखेंगी ls -l
। /dev
फाइलसिस्टम के अंतर्गत हमारे पास विभिन्न प्रकार की विशेष फाइलें होती हैं, जैसे कि चरित्र डिवाइस और ब्लॉक डिवाइस - wc -c
उन पर लटकी होती हैं और आकार के बजाय प्रमुख और मामूली संख्याls -l
दिखाती हैं ।
नाम दिया गया पाइप को 0
बाइट्स के रूप में रिपोर्ट किया जाएगा ls -c
, लेकिन wc -c
वास्तव में पाइप की सामग्री को पढ़ेंगे, इसलिए तकनीकी रूप से यह आपको बताएगा कि नामित पाइप में कितना डेटा है:
$ mkfifo named.pipe
$ echo "This is a test" > named.pipe &
[1] 2129
$ ls -l named.pipe
prw-rw-r-- 1 xieerqi xieerqi 0 1月 16 08:40 named.pipe|
$ wc -c named.pipe
15 named.pipe
[1] + Done echo "This is a test" >named.pipe
एक नियमित फ़ाइलों के लिए, आकार बराबर होना चाहिए।
की बात ls -l
और wc -c
, और कैसे वे भी काम अलग है। wc -c
वास्तव में पढ़ने के लिए फ़ाइल खोलता है (आप देख सकते हैं कि यदि आप strace wc -c /etc/passwd
उदाहरण के लिए चलाते हैं )। ls -l
केवल stat()
उन पर कॉल करता है । यह भी बताता है कि /proc
ls -l
शो 0 आकार में क्यों - आप उन फ़ाइलों को स्टेट नहीं कर सकते क्योंकि वे "वास्तविक" नहीं हैं या वास्तव में हार्ड-ड्राइव / एसएसडी पर संग्रहीत हैं। wc -c
इसके बजाय, उस फ़ाइल की सामग्री को पढ़ता है , और इसके आकार की गणना करता है।
अंत में, ls -l
केवल आइटम को अंतःक्रियात्मक रूप से सूचीबद्ध करने के लिए एक उपकरण है। पटकथा के लिए यह शायद ही अच्छा है। जब आपको वास्तव में डेटा पढ़ने की आवश्यकता होती है, तो wc -c
इसके बजाय उपयोग करें ।
कृपया ध्यान दें, कि किसी फ़ाइल के स्क्रिप्टिंग और आकलन के लिए, ls
सबसे अच्छा उम्मीदवार नहीं है। वास्तव में, पार्सिंग ls
आउटपुट से बचने के लिए यह आम प्रथाओं में से एक है । कृपया du -b
फ़ाइल के आकार का पता लगाने के लिए उपयोग करें ।