質問: ### 前提・実現したいこと 初めまして、初めてteratailを使っております、何か失礼があったらお教えください。 現在、MacOSのターミナルを扱えるように色々と勉強しております。 そこで、"ls"コマンドがあるとおもうのですが、その挙動について少し疑問に思うことがあり、ご教授いただきたいです。 ### 試したこと "ls -l"でその詳細情報を確認していたら普通のファイル(abc.c等)にもハードリンクがあり、試しにls abc.cとすると、abc.cが表示されました。("ls abc.c/abc.c"はできませんでした。) ここで、一つ目のご質問なんですが、lsコマンドでファイル名をlsした場合の出力は一体なにが出力されているんでしょうか...? 自分なりに調べてみたのですが、lsはディレクトリのファイル一覧表示〜といった説明しかなかったので... また、"mkdir"で新しく作成したTestディレクトリ内には ".",".."があらかじめ生成され、親ディレクトリにて"ls -l"コマンドでTestディレクトリを確認するとハードリンク数は"2"で、それらがハードリンクとして数えられているようなのです... 実際にTestへ移動し、"ls ."をすると確かにTestディレクトリ内にリンクされているのですが、 ".."は親ディレクトリにリンクされています... 親ディレクトリの中に子ディレクトリが有り、その子ディレクトリの".."がその親ディレクトリのハードリンクとなると思うのですが... そこで二つ目の質問で、なぜTestディレクトリのハードリンクの数が2つになっているんでしょうか...? ”ハードリンクはそのファイルやフォルダの別名”と理解していているのですが、これらのことから推測すると、ハードリンクにはファイルあるいはディレクトリの名前自身(別名ではなくそれ自身)も含んでいるのでしょうか? そしてlsで確認しようとするとファイルの場合、特に追加していなければファイル自身の名前(ハードリンク?)のみが表示され、ディレクトリを作成するとディレクトリ下に自身と親を表す'.','..'が自動生成され、さらに表示はされませんが、'自分のディレクトリ名'というハードリンクがあり、'.' と'自分のディレクトリ名'で2になったといった理解でいいのでしょうか...? 色々とみてみてもなかなか腑に落ちなく...ご教授いただければと思います。 また、"abc.c"ファイルはTestのために適当に作ったものです。 よろしくお願いいたします。 //以下端末上の表示画面 Takapon:~ taka$ pwd /Users/taka Takapon:~ taka$ ls -l total 8 drwxr-xr-x 2 taka staff 64 4 7 13:36 Test -rw-r--r-- 1 taka staff 6 4 7 12:23 abc.c Takapon:~ taka$ ls -a abc.c abc.c Takapon:~ taka$ ls -a Test . .. Takapon:~ taka$ cat abc.c Hello World ### 補足情報(FW/ツールのバージョンなど) Macbookのターミナルにて実行しました。
回答: ファイルやディレクトリはinodeで管理されています。名前自体がハードリンクです。 また、ディレクトリの中には自身を指すハードリンクがあるためリンク数は2です。 tttディクレトリを作成してinodeを調べると、34656258となります。 ttt/.も同じinodeを指していることがわかります。 $ mkdir ttt $ ls -lid ttt 34656258 drwxr-xr-x 2 user1 staff 64 4 7 17:35 ttt $ ls -lid ttt/. 34656258 drwxr-xr-x 2 user1 staff 64 4 7 17:35 ttt/.