OS X पर, `sudo ls` छिपी हुई (डॉट) फाइलें क्यों दिखाता है?


162

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

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

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

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


141
मैंने उन टैग को "OSX खराब है" के रूप में गलत समझा और वास्तव में भ्रमित हो गया।
रेस्टाफ़ेरियन

5
यह बहुत कम भ्रमित होगा यदि टैग को अपरकेस में अनुमति दी जाती है, BSDऔर OSXयहां अधिक उपयुक्त हैं।
रेनस

@Raystafarian काफी मजाकिया है, क्योंकि आम तौर पर आसपास का दूसरा तरीका है, लोग टैग के साथ वाक्य लिखने की कोशिश करते हैं।
Braiam

जवाबों:


404

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

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

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

यह सुविधा OpenBSD में भी मौजूद है और 1995 से इस कमिट में पाया जा सकता है कि NetBSD से कोड आयात करने का दावा है, इसलिए यह NetBSD में पहले से मौजूद था ।

फिर एक 1993 से NetBSD की प्रतिबद्धता का पता चलता है जो 386BSD से कोड आयात करने का दावा करता है , और सुविधा पहले से ही है । इसके अलावा, यह प्रतिबद्ध दर्शाता है कि यह 1991 में 386BSD संस्करण 0.0 के विकास के दौरान था जो कि BSD से 4.3 के आस-पास था, जहां तक ​​मैं बता सकता हूं।

टिप्पणी के विकास के दौरान पहली बार के लिए दिखाई दिया 4.3BSD-रेनो में यह वादा (27 जून 1989) जिसका शीर्षक था "पहले नए ls के संस्करण में काम कर रहे"। मूल टिप्पणी में कहा गया है:

/* root sees all files automatically */

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

/* root is -A automatically */

और केवल 1992 में कैपिटल लेटर और पीरियड को कमेंट में जोड़ा गया, जो अब हमारे पास है:

/* Root is -A automatically. */

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

Aflg = getuid() == 0;

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

तो ऐसा लगता है कि यह सुविधा 1977 के नवंबर के बीच में पेश की गई थी (1BSD उस समय विकसित की जा रही थी) और मई 1979 में 2BSD की रिलीज़।


इस जाँच के दौरान मैंने जो पाया, वह -Iध्वज है जिसे 2005 में FreeBSD में जोड़ा गया था ताकि इस व्यवहार को समाप्त किया जा सके और बाद में इसे फिर से लागू किया गया।


52
इसके अलावा, यह ध्यान देने योग्य हो सकता है कि फ़ाइलों को उनके साथ शुरू करके छिपाने की "सुविधा" .एक साधारण बग थी - lsकेवल .निर्देशिका को छिपाने के लिए माना जाता था , न कि सबकुछ शुरू होने के साथ .। कुछ दशकों में तेजी से आगे बढ़ना, और यह आमतौर पर खतरनाक फ़ाइलों आदि को छिपाने के लिए उपयोग किया जाता है, जबकि सिस्टम कॉन्फ़िगरेशन आदि को छिपाने के लिए भी उपयोग किया जा रहा है - इसलिए यह समझ में आता है कि प्रवेशकर्ताओं को उन फ़ाइलों को देखने के लिए (कॉन्फ़िगरेशन को बनाए रखने या छिपे हुए मैलवेयर को खोजने के लिए आदि) ।
लुआं

23
लुआँ की टिप्पणी का संदर्भ: plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp (जिसमें रोब पाइक बताते हैं कि "डॉट फाइल्स" को छिपाना एक बग के रूप में शुरू हुआ)।
निबॉट

2
POSIX Rationale से, "ls यूटिलिटी के कुछ ऐतिहासिक कार्यान्वयन डॉट और डॉट-डॉट को छोड़कर एक डायरेक्टरी में सभी प्रविष्टियाँ दिखाते हैं, जब एक सुपरयूज़र -a विकल्प को निर्दिष्ट किए बिना ls को इनवॉइस करता है। जब" सामान्य "उपयोगकर्ता बिना किसी स्पेसिफिकेशन के -a को निर्दिष्ट करते हैं, तो वे। जब तक उन्हें फ़ाइल ऑपरेंड के रूप में नामित नहीं किया जाता है, तब तक किसी भी फ़ाइल के बारे में जानकारी को <period> से शुरू होने वाले नामों के बारे में जानकारी नहीं देखनी चाहिए। " pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
R ..

यह बहुत पुराना है। मुझे लगता है कि यह SysV-BSD विभाजन से पहले है क्योंकि पिछली बार जब मैंने SysV सिस्टम का उपयोग किया था, ठीक उसी तरह का व्यवहार मौजूद था।
जोशुआ

3
महाकाव्य उत्तर। इतिहास सीखा!
कोरी गोल्डबर्ग

15

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


दिलचस्प खोज। क्या एलएस करते समय छिपी हुई फाइलों को दबाने का एक तरीका भी है?
श्री लिस्टर

5
हम्म, ऐसा लगता है कि यह एक Apple- विशिष्ट विशेषता नहीं है, लेकिन यह बीएसडी दुनिया से आता है?
केरलागिन

2
सही है, यह Apple-specific नहीं है। आपके उत्तर के लिए धन्यवाद, इसने मुझे सही रास्ते पर ला खड़ा किया। मैंने Root is -A automaticallyसुराग खोजने के लिए स्ट्रिंग का उपयोग किया ।
केरलागिन

मिस्टर लिस्टर: आप कई ऑपरेटिंग सिस्टमों पर -I (कैपिटल i) रूट के साथ डॉट फाइल्स के डिस्प्ले को दबा सकते हैं (FreeBSD, तो शायद OS X साथ ही)
Allan Jude

1

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


उचित लगता है (भले ही एक फ़ाइल को डॉट-फाइल में बदलना "इसे छुपाने" का एक संदिग्ध तरीका है)। उन अभिलेखों को खोजने के लिए बहुत अच्छा होगा।
किर्लगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.