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

これは、rootによって呼び出された場合(ドットで始まる名前を持つ)隠しファイルを表示し、通常のユーザーとして実行している場合は(予想どおり)表示しません。これは、lsLinux(から来るもの)での動作とは異なりcoreutilsます。

なぜlsこのように振る舞うのですか?


141
これらのタグを「OSXは悪い」と誤解し、本当に混乱しました。
レイスタファリアン

5
タグは大文字で許可され、されている場合、それはあまり混乱するだろうBSDし、OSXここで、より適切です。
ライナス

@Raystafarianは非常に面白いです。なぜなら、通常はその逆で、人々はタグ付きの文章を書き込もうとするからです。
ブライアム

回答:


404

この機能はApple固有のものではないことがわかりました。これは、一般的なBSDシステムの機能です。

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

最初は、4.4BSD-Liteのソースまでさかのぼることができました。これらのソースをインポートしている1994年のこのFreeBSDコミットにはすでに存在していました。

この機能はOpenBSDにも存在しており、NetBSDからコードをインポートしていると主張する1995年のこのコミットで見つけることができるため、これはすでにNetBSDに存在していました。

それから1993年から386BSDからコードをインポートしていると主張するNetBSDのコミットを発見し、その機能はすでにそこにあります。さらに、このコミットは、1991年の386BSDバージョン0.0の開発中に存在したこと示しています。

コメントは、開発中に初めて登場し4.3BSD-リノこのコミット「最初の新しいLSのバージョンを作業」と題された(1989年6月27日)。元のコメントは言った:

/* root sees all files automatically */

その日のうちに変更されました(ただし、このリポジトリのタイムスタンプが完全に正しいかどうかはわかりません)。

/* root is -A automatically */

そして、1992年になって初めて大文字と期間が追加され、コメントが現在のものに変わりました。

/* Root is -A automatically. */

しかし、このスナップショットに見られるように、動作は1979年5月9日の時点で2BSDに存在していました。

Aflg = getuid() == 0;

私は当時からの実際の歴史を見つけることはできませんが、またそこにあるこのスナップショット 1977から1BSDのはなしにこれらの行。そして-A実際には旗なし。

そのため、この機能は1977年11月(その時点で1BSDが開発中)から1979年5月に2BSDがリリースされた間に導入されたようです。


この調査で私が見つけたのは、この動作を無効にするために2005年にFreeBSDに追加され-Iフラグであり、少し後に修正されました。


52
また、ファイルを開始することでファイルを隠す「機能」は.単純なバグであることに注意してください- ls.始まるすべてではなく、ディレクトリを非表示にするだけでした.。数十年早送りし、一般的には危険なファイルなどを隠すために使用されますが、システム構成などを隠すためにも使用されます-したがって、管理者にそれらのファイルを表示させることは理にかなっています(構成を維持したり、隠れたマルウェアを見つけるためなど) 。
ルアーン

23
Luaanのコメントのリファレンス:plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp(「ドットファイル」の非表示はバグとして始まったとRob Pikeが説明しています)。
nibot

2
POSIXの理論的根拠から、「スーパーユーザーが-aオプションを指定せずにlsを起動すると、lsユーティリティの一部の歴史的な実装は、ドットとドットドットを除くディレクトリ内のすべてのエントリを表示します。ファイルオペランドとして名前が付けられていない限り、<ピリオド>で始まる名前のファイルに関する情報は表示されません。」pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
R ..

それははるかに古いです。前回SysVシステムにアクセスしたときとまったく同じ動作があったため、SysV-BSDが分割される前のことだと思います。
ジョシュア

3
壮大な答え。学んだ歴史!
コーリーゴールドバーグ

15

ソースコードへのリンクはこちらです。注/* Root is -A automatically. */。これは、AppleのBSDバージョンの機能ですls


興味深い発見。lsを実行するときに隠しファイルを抑制する方法もありますか?
ミスターリスター

5
うーん、これはApple固有の機能ではないよう見えますが、それはBSDの世界から来たのですか?
キレラギン

2
確かに、これはApple固有のものではありません。あなたの答えをありがとう、それは私を正しい軌道に乗せました。Root is -A automatically手がかりを検索するために文字列を使用しました。
キレラギン

あなたは(同様のFreeBSDので、おそらくOS X)多くのオペレーティングシステム上で-I(資本I)でrootとしてドットファイルの表示を抑制することができます:リスター氏
アランジュード

1

IIRC、Usenetの初期(80年代前半)にこれに関するスレッドがありました。悪意のあるユーザーがsysadmin / rootからファイル/ディレクトリ/実行可能ファイルを簡単に隠すことができないように、この機能はセキュリティ対策として追加されました。理論は基本的に「ルートはすべてにアクセスできるので、すべてを見ることができるはずです」でした。


妥当と思われます(ファイルをドットファイルに変換することは、それを「隠す」疑わしい方法ですが)。それらのアーカイブを見つけるのは素晴らしいことです。
キレラギン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.