سؤال على نظام التشغيل OS X ، لماذا تظهر ملفات sudo (dot) المخفية؟


باستخدام OS X Yosemite ، باستخدام الأوامر التالية ، أحصل على ما يلي:

$ 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


الأصل


أخطأت في قراءة هذه العلامات باسم "OSX سيئة" وحصلت على حيرة حقا. - Raystafarian
سيكون أقل إرباكًا إذا تم السماح بالعلامات بأحرف كبيرة ، BSD و OSXأكثر ملاءمة هنا. - ryenus
Raystafarian مضحك للغاية ، لأنه عادة ما يكون العكس ، يحاول الناس كتابة جمل مع العلامات. - Braiam


الأجوبة:


اتضح أن هذه الميزة ليست خاصة بشركة Apple. هذا هو سمة من سمات أنظمة BSD بشكل عام.

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

في البداية ، كنت قادرا على تتبع إعادته إلى مصادر 4.4BSD لايت. كان موجودا بالفعل في هذا فري بدت ارتكاب من 1994 التي تستورد تلك المصادر.

الميزة موجودة أيضا في OpenBSD ويمكن العثور عليها في هذا الالتزام من عام 1995 يدعي أنه استيراد رمز من NetBSD ، لذلك كان هذا بالفعل في نت بي.

ثم يكتشف المرء التزام NetBSD من 1993 الذي يدعي أنه استيراد رمز من 386BSD، والميزة هي بالفعل هناك. علاوة على ذلك، هذا الالتزام يدل على أنه كان هناك خلال تطوير 386BSD الإصدار 0.0 في عام 1991 التي تفرقت من 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;

لا يمكنني العثور على أي سجل فعلي من تلك الأوقات ، ولكن هناك أيضًا هذه اللقطة من 1BSD من 1977 بدون تلك الخطوط. وبدون -A علم في الواقع.

لذا يبدو أن الميزة قد تم تقديمها في مكان ما بين نوفمبر 1977 (1BS التي تم تطويرها في تلك اللحظة) وإصدار 2BSD في مايو 1979.


ما وجدت أيضا خلال هذا التحقيق ، هو -I علم ذلك تمت أضافتة إلى FreeBSD في عام 2005 لتجاوز هذا السلوك وكان إعادة صياغة في وقت لاحق قليلا.


405
2018-06-23 17:53



أيضا ، قد يكون من الجدير بالذكر أن "ميزة" من إخفاء الملفات عن طريق البدء بها . كان علة بسيطة - ls كان من المفترض فقط إخفاء . الدليل ، وليس كل شيء يبدأ .. تقديم سريع لعدة عقود ، ويتم استخدامه عادةً لإخفاء الملفات الخطيرة وما إلى ذلك ، بينما يتم استخدامها أيضًا لإخفاء تهيئة النظام وما إلى ذلك - لذلك من المنطقي السماح للمشرفين بمشاهدة هذه الملفات (للحفاظ على التكوين أو العثور على البرامج الضارة المخفية وما إلى ذلك) . - Luaan
مرجع تعليق لوانان: plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp (حيث يوضح Rob Pike أن إخفاء "dot files" بدأ كعلة). - nibot
من POSIX Rationale ، "تعرض بعض التطبيقات التاريخية للأداة المساعدة ls جميع الإدخالات في دليل ما عدا نقطة النقطة نقطة عندما يستدعي مستخدم متميز ls بدون تحديد الخيار -a. عندما يستدعي المستخدمون" العاديين ls بدون تحديد -a ، يجب ألا ترى معلومات حول أي ملفات ذات أسماء تبدأ بـ <period> ما لم يتم تسميتها كمعاملات ملفات. " pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html - R..
إنها أقدم بكثير. أعتقد أنه يسبق عملية تقسيم SysV-BSD كآخر مرة أتيحت لها إمكانية الوصول إلى أنظمة SysV وكان نفس السلوك نفسه موجودًا. - Joshua
الجواب الملحمي. علمت التاريخ! - Corey Goldberg


من هنا رابط إلى شفرة المصدر. ملحوظة /* Root is -A automatically. */. هذه ميزة في إصدار Apple الخاص بـ BSD ls.


15
2018-06-23 16:03



العثور على مثيرة للاهتمام. هل هناك أيضًا طريقة لقمع الملفات المخفية عند إجراء ls؟ - Mr Lister
جلالة الملك، يشبه هذه ليست ميزة خاصة بـ Apple ، ولكنها تأتي من عالم BSD؟ - kirelagin
صحيح ، ليس من أبل محددة. شكرا لإجابتك ، وضعني على المسار الصحيح. اعتدت Root is -A automatically سلسلة للبحث عن أدلة. - kirelagin
السيد ليستر: يمكنك منع عرض ملفات النقطة كجذر مع -I (capital i) على العديد من أنظمة التشغيل (FreeBSD ، لذلك ربما OS X أيضًا) - Allan Jude


IIRC ، كان هناك موضوع حول هذا مرة أخرى في الأيام الأولى من يوزنت (أوائل 80). تمت إضافة الميزة كإجراء وقائي أمني بحيث لا يتمكن المستخدمون الضارون من إخفاء الملفات / الدلائل / الملفات التنفيذية بسهولة من مسؤول النظام / الجذر. كانت النظرية أساسًا "الجذر لديه حق الوصول إلى كل شيء لذا يجب أن يكون قادراً على رؤية كل شيء".


1
2018-06-25 21:27



تبدو معقولة (على الرغم من أن تحويل ملف إلى ملف نقطي هو طريقة مشكوك فيها "لإخفائها"). سيكون من الرائع العثور على تلك المحفوظات. - kirelagin