सवाल ओएस एक्स पर, क्यों 'sudo ls` छुपा (डॉट) फ़ाइलें दिखाता है?


निम्नलिखित आदेशों का उपयोग करते हुए ओएस एक्स योसमेट के साथ, मुझे निम्न मिलता है:

$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a  b
$ sudo /bin/ls
.a  b

यह छिपी हुई फाइलें दिखाता है (जिनके नाम रूट से आते हैं) और सामान्य उपयोगकर्ता के रूप में चलते समय उन्हें (जैसा अपेक्षित) दिखाया नहीं जाता है। यह क्या से अलग है ls लिनक्स पर (एक से आ रहा है coreutils) कर देता है।

क्यों करता है ls इस तरह से व्यवहार करें?


160
2018-06-23 15:36


मूल


मैंने उन टैग को "ओएसएक्स खराब" के रूप में गलत तरीके से पढ़ा और वास्तव में भ्रमित हो गया। - Raystafarian
यदि अपरकेस में टैग की अनुमति है तो यह कम भ्रमित होगा, BSD तथा OSXयहां अधिक उपयुक्त हैं। - ryenus
@ रेस्टाफैरिअन काफी मजाकिया है, क्योंकि आम तौर पर आसपास का दूसरा तरीका है, लोग टैग के साथ वाक्य लिखने की कोशिश करते हैं। - Braiam


जवाब:


यह पता चला है कि यह सुविधा ऐप्पल-विशिष्ट नहीं है। यह सामान्य रूप से बीएसडी सिस्टम की एक विशेषता है।

/* Root is -A automatically. */
if (!getuid())
    f_listdot = 1;

प्रारंभ में, मैं इसे वापस स्रोतों के बारे में पता लगाने में सक्षम था 4.4BSD-लाइट। यह पहले से ही मौजूद था यह फ्रीबीएसडी प्रतिबद्धता 1 99 4 से जो उन स्रोतों को आयात कर रहा है।

यह सुविधा ओपनबीएसडी में भी मौजूद है और इसमें पाया जा सकता है यह प्रतिबद्धता 1 99 5 से नेटबीएसडी से कोड आयात करने का दावा है, इसलिए यह पहले से ही मौजूद था NetBSD

फिर 1 99 3 से नेटबीएसडी की प्रतिबद्धता का पता चलता है जो कि कोड आयात करने का दावा करता है 386BSD, और सुविधा पहले से ही है क्या आप वहां मौजूद हैं। इसके अलावा, यह प्रतिबद्धता दिखाता है कि यह 1 99 1 में 386 बीएसडी संस्करण 0.0 के विकास के दौरान था, जहां तक ​​मैं बता सकता हूं कि बीएसडी से लगभग 4.3 तक कांटा गया है।

टिप्पणी के दौरान पहली बार टिप्पणी दिखाई दी 4.3BSD-रेनो में यह प्रतिबद्धता (27 जून 1 9 8 9) "नए एलएस के पहले कामकाजी संस्करण" का हकदार है। मूल टिप्पणी ने कहा:

/* root sees all files automatically */

जो था उस दिन बाद में बदल गया (मुझे यकीन नहीं है कि इस भंडार में टाइमस्टैम्प पूरी तरह से सही हैं) हालांकि:

/* root is -A automatically */

और केवल 1 99 2 में पूंजी पत्र और अवधि जोड़ा गया था टिप्पणी को अब हमारे पास बदलना है:

/* Root is -A automatically. */

लेकिन व्यवहार 9 मई 1 9 7 9 के रूप में 2BSD में उपस्थित था जैसा देखा गया था यह स्नैपशॉट:

Aflg = getuid() == 0;

मुझे उन समय से कोई वास्तविक इतिहास नहीं मिल रहा है, लेकिन वहां भी है यह स्नैपशॉट 1 9 77 से 1 बीबीडी का के बिना उन पंक्तियों। और बिना -A वास्तव में ध्वज।

तो ऐसा लगता है कि इस सुविधा को नवंबर 1 9 77 (उस पल में 1 बीएसडी विकसित किया जा रहा है) और मई 1 9 7 9 में 2 बीएसडी की रिहाई के बीच कहीं भी पेश किया गया था।


इस जांच के दौरान मैंने जो भी पाया, वह है -I झंडा है कि जोड़ा गया 2005 में फ्रीबीएसडी को इस व्यवहार को ओवरराइड करने के लिए और था पर फिर से काम थोड़ी देर बाद।


405
2018-06-23 17:53



साथ ही, यह ध्यान देने योग्य हो सकता है कि उन्हें शुरू करके फ़ाइलों को छिपाने की "सुविधा" . एक साधारण बग था - ls केवल छिपाने के लिए माना जाता था . निर्देशिका, सबकुछ शुरू नहीं हो रहा है .। कुछ दशकों को फास्ट फॉरवर्ड करें, और इसका उपयोग आमतौर पर खतरनाक फाइलों को छिपाने के लिए किया जाता है, जबकि सिस्टम कॉन्फ़िगरेशन इत्यादि को छिपाने के लिए भी इस्तेमाल किया जा रहा है - इसलिए यह समझ में आता है कि व्यवस्थापक उन फ़ाइलों को देख सकें (कॉन्फ़िगरेशन को बनाए रखने या छुपे हुए मैलवेयर आदि ढूंढने के लिए) । - Luaan
लुआयन की टिप्पणी के लिए संदर्भ: plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp (जिसमें रोब पाइक बताते हैं कि छिपाने के लिए "डॉट फाइल" छिपाना)। - nibot
पॉज़िक्स तर्क से, "एलएस उपयोगिता के कुछ ऐतिहासिक कार्यान्वयन डॉट और डॉट-डॉट को छोड़कर निर्देशिका में सभी प्रविष्टियों को दिखाते हैं जब एक सुपरसुर -ए विकल्प निर्दिष्ट किए बिना एलएस को आमंत्रित करता है। जब" सामान्य "उपयोगकर्ता निर्दिष्ट किए बिना एलएस का आह्वान करते हैं, तो वे <period> से शुरू होने वाले नामों वाली किसी भी फाइल के बारे में जानकारी नहीं देखना चाहिए, जब तक कि उन्हें फ़ाइल ऑपरेंड के रूप में नामित नहीं किया गया हो। " pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html - R..
यह बहुत पुराना है। मुझे लगता है कि यह एसआईएसवी-बीएसडी विभाजन की भविष्यवाणी करता है क्योंकि आखिरी बार मुझे एसआईएसवी सिस्टम तक पहुंच थी, वही व्यवहार मौजूद था। - Joshua
महाकाव्य जवाब। इतिहास सीखा! - Corey Goldberg


यहां बताया गया है एक लिंक स्रोत कोड के लिए। ध्यान दें /* Root is -A automatically. */। यह बीएसडी के ऐप्पल के संस्करण में एक विशेषता है ls


15
2018-06-23 16:03



दिलचस्प खोज क्या एलएस करते समय छिपी हुई फाइलों को दबाने का कोई तरीका है? - Mr Lister
हम्म, की तरह लगता है यह ऐप्पल-विशिष्ट सुविधा नहीं है, लेकिन यह बीएसडी दुनिया से आता है? - kirelagin
ठीक है, यह ऐप्पल-विशिष्ट नहीं है। आपके उत्तर के लिए धन्यवाद, यह मुझे सही रास्ते पर डाल दिया। मैंने इस्तेमाल किया Root is -A automatically सुराग के लिए खोज करने के लिए स्ट्रिंग। - kirelagin
मिस्टर लिस्टर: आप कई ऑपरेटिंग सिस्टम (फ्रीबीएसडी, तो शायद ओएस एक्स के साथ) के साथ रूट के रूप में डॉट फाइलों के प्रदर्शन को दबा सकते हैं। - Allan Jude


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


1
2018-06-25 21:27



उचित लगता है (भले ही फ़ाइल को डॉट-फाइल में बदलना एक "छिपाने" का एक संदिग्ध तरीका है)। उन अभिलेखागारों को ढूंढना बहुत अच्छा होगा। - kirelagin