ls रंग: मेरे कुछ फोंट काले और अन्य ls आउटपुट में हरे क्यों हैं


10

मैंने कुछ फ़ॉन्ट फ़ाइलों को AWS (अमेज़न लिनक्स चलाने) पर अपलोड किया और उन्हें .ebextensions में /usr/share/fontsएक cpकमांड का उपयोग करके निर्देशिका में ले जाया गया ।

जब मैं अपने मैक से एसएसएच करता हूं और उपयोग करता ls -aहूं, तो मैं देखता हूं कि कुछ फाइलें अलग-अलग रंग की हैं - एक फ़ॉन्ट फाइलों का एक भाग काला है जबकि अन्य हरे हैं। मैं उत्सुक हूं कि ऐसा किस वजह से हुआ, और अगर यह मेरे कोड के लिए कोई समस्या पैदा करेगा

फॉन्ट डायरेक्टरी एलास्टिक बीनस्टॉक पर AWS लिनक्स चला रही है

ls -la स्क्रीनशॉट

AskUbuntu पर एक अन्य जवाब से मुझे यह कुंजी मिली कि इन रंगों की व्याख्या कैसे करें। मुझे समझ नहीं आ रहा है कि .ttf निष्पादन योग्य क्यों होगा या .ttfs के एक सेट को क्यों पहचाना जाएगा और दूसरा नहीं।

नीला: निर्देशिका

ग्रीन: निष्पादन योग्य या मान्यता प्राप्त डेटा फ़ाइल

स्काई ब्लू: लिंक्ड फ़ाइल

काली पृष्ठभूमि के साथ पीला: डिवाइस

गुलाबी: ग्राफिक छवि फ़ाइल

लाल: पुरालेख फ़ाइल

इन फ़ाइलों को अपलोड करने से पहले विभिन्न फ़ॉन्ट साइटों से एक मैक पर डाउनलोड किया गया था।


5
विशिष्ट रंग (नीला, गुलाबी, आदि) का कोई मतलब नहीं है। आप जो चाहें रंगों को अनुकूलित कर सकते हैं। linux-sxs.org/housekeeping/lscolors.html अपने विशिष्ट सिस्टम के लिए रंगों की जाँच करने के लिए, $ LS_COLORS की गूंज करें
दाढ़ी वाले

स्पष्ट करने के लिए, मेरा इरादा वास्तव में प्रति रंगों के बारे में नहीं था, लेकिन यह समझने के लिए कि क्या यह इंगित करता है कि मैं अपनी स्क्रिप्ट / कोड के साथ किसी भी समस्या का सामना करूंगा।
प्रणब

जवाबों:


13

ls -lआपको निश्चित रूप से बताएगा कि कोई फ़ाइल निष्पादन योग्य है या नहीं। मुझे नहीं लगता कि यहां कोई महान रहस्य है। आपने विभिन्न स्रोतों से फाइलें डाउनलोड की हैं जिनमें से प्रत्येक में एक या किसी अन्य कारण से अलग-अलग अनुमति बिट्स हो सकते हैं। * अगर आपको कुछ रंग और अन्य लोगों को बिना कोशिश के देखना पसंद नहीं है chmod -x *.ttf... फ़ॉन्ट फ़ाइलों को निष्पादन योग्य बिट सेट की आवश्यकता नहीं होनी चाहिए।

* जैसा कि माटेओ इटालिया की अत्यधिक उत्कीर्ण टिप्पणी है, जिसे संरक्षित किया जाना चाहिए, कहते हैं: ज्यादातर शायद उन्हें एक एफएटी या एनटीएफएस वॉल्यूम से कॉपी किया गया था, जो निष्पादन योग्य बिट को स्टोर नहीं करते हैं, इसलिए डिफ़ॉल्ट रूप से माउंट किए जाते हैं ताकि सभी फाइलों पर निष्पादन योग्य सेट हो सके


1
बिल्कुल सही। एक नियमित फ़ाइल के बीच एकमात्र अंतर जिसमें 'निष्पादन योग्य' अनुमति सेट है, और एक जो नहीं है, वह यह है कि जब आप कमांड लाइन से फ़ाइल को चलाने की कोशिश करते हैं, तो x बिट सेट के साथ फ़ाइल के लिए, ओएस एक प्रोग्राम का उपयोग करने की कोशिश करेगा, यदि ऐसी किसी भी प्रणाली को उस फाइल को खोलने के लिए परिभाषित किया गया है।
ग्नूडीफ

2
@Pranab नहीं, फोंट के लिए कोई अंतर नहीं होना चाहिए।
ग्नूडीफ

1
@ चरण ग्लैड मैं मदद कर सकता है। जब मैं कीबोर्ड के साथ एक उचित कंप्यूटर पर हूं, तो मैं थोड़ा अधिक जानकारीपूर्ण उत्तर देने का प्रयास करूंगा, ताकि एक व्यापक संदर्भ उपलब्ध हो।
ग्नूडीफ

1
वास्तव में, मैं किसी ऐसे व्यक्ति को गुमराह नहीं करूंगा, जो अन्यथा नहीं जानता, इसलिए यहां मेरी मूल टिप्पणी गलत बिट्स को घटाती है
बी लेयर

12
संभवत: उन्हें एक एफएटी या एनटीएफएस मात्रा से कॉपी किया गया था, जो निष्पादन योग्य बिट को संग्रहीत नहीं करते हैं, इसलिए डिफ़ॉल्ट रूप से माउंट किए जाते हैं ताकि सभी फाइलों में निष्पादन योग्य बिट सेट हो
मट्टियो इटालिया

6

ऐसा लगता है कि lsआप जिस कमांड को निष्पादित कर रहे हैं वह एक उपनाम हैls --color

आदमी एल.एस.

--color [= WHEN] आउटपुट को रंगीन करें; जब 'हमेशा' (डिफ़ॉल्ट रूप से छोड़ा गया), 'ऑटो', या 'कभी नहीं' हो सकता है; अधिक जानकारी नीचे

आप इसे मूल चलाकर देख सकते हैं ls:

  • उद्धरण का उपयोग करना:

    "ls" -a

  • पूर्ण पथ का उपयोग करना (जैसे यदि lsस्थान है /bin/ls) में है और देखें कि यह रंग दिखाता है या नहीं:

    / बिन / एलएस -ए

नोट: रनिंग ls -laआपको फ़ाइलों का विवरण दिखाएगा, और आप प्रत्येक फ़ाइल का पूरा विवरण देख पाएंगे, जिससे आप अपेक्षित आउटपुट के साथ जांच कर पाएंगेls --color


यह दिलचस्प है कि कोर कमांड को प्राप्त करने के कितने तरीके हैं। मुझे आसपास के-कोट्स विधि की जानकारी नहीं थी। बैश के साथ कम से कम, एक भी आदेश बैकस्लैश के साथ, पूर्व में होना कर सकते हैं \ls -a, या 'कमांड' builtin का उपयोग command ls -a। यदि आप यह देखना चाहते हैं कि एक आदेश कैसे हल होता है, तो इसे चलाने के बजाय type -a ls
बी लेयर

@BlairM। उद्धरण और बैकलैश विधियां केवल उर्फ ​​विस्तार को रोकती हैं। यदि आपके पास शेल फ़ंक्शन या बिलिन कहा जाता है तो उनका कोई प्रभाव नहीं होगा ls
छायाकार

@ssdecontrol अधिकार। मुझे सुझाव देने का कोई मतलब नहीं था ... हम सम्मान के साथ उपनाम के बारे में बात कर रहे थे ls। लेकिन यह अच्छी जानकारी है।
बी लेयर

4

रंग इंगित कर रहा है कि फ़ाइल "निष्पादन योग्य" के रूप में चिह्नित है

निष्पादन योग्य अनुमति बिट्स (उपयोगकर्ता के लिए एक, समूह के लिए एक, अन्य के लिए एक) का अर्थ है कि यदि फ़ाइल का नाम निष्पादन प्रणाली कॉल में से किसी एक को पारित किया जाता है, तो कर्नेल आगे बढ़ेगा और कोशिश करेगा और इसे बाहर निकाल देगा।

कन्वेंशन यह है कि केवल उन फ़ाइलों को जो वास्तव में एक्सपेक्टेड होने का इरादा रखते हैं, निष्पादन योग्य बिट सेट है। हालाँकि, जब फाइलों को इधर-उधर घुमाया / कॉपी किया जाता है, विशेष रूप से एक मल्टीप्लायर वातावरण में यह अनजाने में लाभ या निष्पादन योग्य बिट्स को खोना आसान है।

एक फाइल सिस्टम पर संग्रहीत फाइलें जो यूनिक्स अनुमतियों (वसा, एनटीएफएस आदि) का समर्थन नहीं करती हैं, सिस्टम के निष्पादन योग्य होने की संभावना है। अनुमतियों को संरक्षित करने वाले टूल का उपयोग करके इन फ़ाइलों को एक यूनिक्स फाइल सिस्टम में ले जाना या कॉपी करना, फिर उन निष्पादन योग्य बिट्स को संरक्षित करेगा।

दूसरी ओर, फ़ाइलों को स्थानांतरित करने के लिए टूल का उपयोग करना जो या तो अनुमतियों को संरक्षित नहीं कर सकते हैं या अनुमतियों को संरक्षित करने के विकल्प के साथ उपयोग किए जाते हैं, जिसके परिणामस्वरूप मूल होने के बावजूद कॉपी को निष्पादन योग्य नहीं चिह्नित किए जाने की संभावना है।

इसलिए विभिन्न प्रकार के औजारों का उपयोग करके विभिन्न प्लेटफार्मों के आसपास स्थानांतरित होने के बाद, निष्पादन योग्य अनुमति बिट्स काफी मनमानी स्थिति में समाप्त हो सकते हैं।

* मुझे 100% यकीन नहीं है कि ls उस मामले को कैसे संभालता है जहाँ कुछ नहीं बल्कि सभी निष्पादन योग्य बिट्स सेट हैं।


2

जैसा कि पिछले जवाब में कहा गया है, रंग यह इंगित करने के लिए है कि क्या फ़ाइलों को निष्पादन योग्य माना जाता है या नहीं।

लिनक्स में "निष्पादित" अनुमति (= बिट) और अधिकांश अन्य यूनिक्स में फ़ाइलों के लिए एक अर्थ है और निर्देशिकाओं के लिए दूसरा है।

निर्देशिकाओं के लिए, यदि आपने इसके लिए अनुमति दी है, तो आप इसकी सामग्री देख सकते हैं। यदि आप नहीं करते हैं, तो आप निर्देशिका में सीडी नहीं रख सकते हैं, और न ही आप इसमें फाइलों को सूचीबद्ध कर सकते हैं, भले ही आपके पास निर्देशिका तक पहुंच को पढ़ना और लिखना दोनों हो।

नियमित फ़ाइलों के लिए (डिवाइस फ़ाइलों और अन्य विशेष यूनिक्स फ़ाइल प्रकारों के विपरीत), निष्पादित बिट का मतलब है कि यदि आप कमांड लाइन पर फ़ाइल नाम का उपयोग करते हैं, तो ओ / एस (या अधिक सटीक: शेल) "निष्पादित" या चलाने की कोशिश करेंगे एक कमांड के रूप में फ़ाइल। इसके विपरीत, यदि आपके पास फ़ाइल पर अनुमति नहीं है, तो आप इसे कमांड लाइन से नहीं चला सकते हैं।

इसलिए, यदि आप, उदाहरण के लिए, सभी उपयोगकर्ताओं से / बिन / बिल्ली फ़ाइल (जो एक यूनिक्स कमांड है) पर एक्स अनुमति को हटा दें, तो आप स्वयं या किसी अन्य और कोई भी प्रोग्राम जो "कैट" कमांड का उपयोग करने की कोशिश करता है, वह विफल हो जाएगा।

इसके बाद OS कमांड्स होते हैं, जैसे "कैट" और "grep", जिनके पास / / बिन / डायरेक्टरी - / बिन, / usr / बिन, / sbin, / usr / sbin आदि में बेकार की फाइलें होती हैं।

और फिर अनकैप्ड, व्याख्या की गई स्क्रिप्ट्स हो सकती हैं, जो या तो कुछ प्रोग्रामिंग भाषा में लिखी जाती हैं, जैसे कि पायथन या शेल स्क्रिप्ट (मूल रूप से, आपको कमांड लिखते हैं जैसे कि कमांडलाइन से सर्वर पर sshing करते समय)।

अब, जब आप स्क्रिप्ट फ़ाइल पर बिट निष्पादित करते हैं (उदाहरण के लिए, फ़ाइल फ़ॉबर), और इसे अपने शेल द्वारा निष्पादित करने का प्रयास करें: "./foobar", शेल फ़ाइल का विश्लेषण करने और स्क्रिप्ट को पास करने के लिए सही प्रोग्राम खोजने की कोशिश करता है। सेवा।

यह शेल फ़ाइल की पहली पंक्ति को पढ़ने और "शेबंग" अंकन को खोजने की कोशिश करके करता है किस प्रोग्राम को चलाना है।

तो, अगर आपका फोब्बर इस तरह की पहली पंक्ति के साथ एक पाठ फ़ाइल थी:

#!/usr/bin/python

फिर शेल कमांड को निष्पादित करने की कोशिश करेगा: /usr/bin/python foobarमूल रूप से अजगर इंटरप्रेटर को लागू करना और अपनी फोब्बर फाइल का नाम इसे पायथन स्क्रिप्ट के रूप में पारित करना।

यदि शेल को आपकी फ़ाइल में ऐसी पहली पंक्ति नहीं मिलेगी, तो यह फ़ॉबरों को स्वयं निष्पादित करने का प्रयास करेगा जैसे कि इसमें शेल कमांड सम्‍मिलित हैं।

यदि निष्पादन योग्य बिट वाली फ़ाइल में मान्य शेल कमांड नहीं हैं, तो शेल बस शिकायत करेगा।

तो यह वही होता है, यदि आपके पास TTF फाइलें होती हैं, जो निष्पादन बिट सेट के साथ होती हैं और इसे कमांड लाइन से चलाने की कोशिश की जाती है:

$./FreeMonoOblique.ttf
-bash: ./FreeMonoOblique.ttf: cannot execute binary file: Exec format error
$

इसलिए, फोंट के लिए, यह शायद नीटर है, यदि निष्पादन बिट सेट नहीं है, लेकिन वास्तव में कुछ भी नहीं बदलता है।

पुनश्च बस कुछ बाहरी जानकारी। यदि आप कुछ कमांड या स्क्रिप्ट पर निष्पादित बिट को हटाते हैं, तो यह अभी भी किसी अन्य प्रोग्राम को एक तर्क के रूप में पारित किया जा सकता है। यदि वह अन्य प्रोग्राम जानता है, तो आपकी कमांड को कैसे निष्पादित किया जाए, तो आपकी एक्ज़िट बिट को हटाना वास्तव में कोई मायने नहीं रखता। उदाहरण के लिए, फ़ोबो पायथन स्क्रिप्ट अभी भी पायथन दुभाषिया द्वारा चलाई जाएगी, यदि आपने बस कमांड लाइन से किया है:

$python foobar

के बजाय

$./foobar

सिस्टम कमांड के उदाहरण के साथ ही, जैसे कि "कैट"। यदि आप "बिल्ली" से निष्पादन को हटाते हैं, तो आप इसे निष्पादन के लिए शेल के एक नए उदाहरण के लिए पास कर सकते हैं:

$sh -c 'cat myfile'

काम करेंगे, भले ही आपने बिल्ली से थोड़ा हटा दिया हो और

$cat myfile

ऐसा नहीं करता।


2
अपने सिस्टम पर, कम से कम, की तरह एक द्विआधारी निष्पादन योग्य फ़ाइल पर निष्पादन बिट unsetting catया echoकरता नहीं करते हैं तो आप के माध्यम से इसे चलाने sh -c 'cat myfile', और न ही साथ system("cat", "myfile")Ruby जैसी भाषाओं में। पायथन गैर-निष्पादन योग्य .pyफ़ाइलों को चला सकता है क्योंकि यह उन्हें पाठ की एक स्ट्रिंग के रूप में पढ़ता है, और फिर उस पाठ का व्यवहार करने के लिए एक दुभाषिया का उपयोग करता है जैसे कि यह कोड है।
एथन कमिंसकी

@ ईथनकुमस्की दिलचस्प। मुझे यह स्पष्ट रूप से याद है कि यह मेरे लिए काम कर रहा है, लेकिन विवरण की जांच करनी होगी।
ग्नूडीफ

1
@Gnudiff द्विआधारी निष्पादन योग्य के लिए, execveसिस्टम कॉल निष्पादन की अनुमति पर जोर देता है। Glibc- आधारित सिस्टम पर आप डायनामिक लिंकर को एक शेबंग लाइन ( /lib64/ld-linux-x86-64.so.2 /bin/cat) के समान प्रभाव पाने के लिए एक प्रोग्राम के रूप में लागू कर सकते हैं और यह मेरे लिए काम करता है, भले ही कमांड लाइन पर फ़ाइल निष्पादन योग्य न हो, लेकिन sh -c catऐसा नहीं करेगा तुम्हारे लिए।
15:12 पर zwol

यह वह शेल नहीं है जो यह निर्धारित करता है कि किसी फ़ाइल को कैसे और कैसे निकाला जाए, यह कर्नेल है। शेल केवल निष्पादन योग्य नाम और पैरामीटर को कर्नेल में पास करता है।
प्लग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.