登録する方法がないかと思っていましたが、ほとんどの最新の検索エンジンは5単語以上の構文をうまく処理できないため、助けが必要です。
ファイルを特定のタイプに登録し、それに応じて決定を下す必要があるbashスクリプトを作成しているので、これは不思議です。技術的には、これは私のプロジェクトにとって重要ではありませんが、疑問に思います。
また、通常のファイルと見なされる場合は、解析せずにファイルがハードリンクであるかどうかを確認する方法はありますかls -i
?コマンドを使用せずに、ランダムファイルXが他のランダムファイルYにハードリンクされていることを確認する方法はありますかfind -i
?
ベストアンサー1
Unixスタイルシステムのファイルシステムオブジェクトを表すデータ構造(つまり、データ~についてファイル)はいわゆる「inode」に保存されます。
ファイル名は、単に「ハードリンク」と呼ばれる対応する inode へのリンクです。ファイルの最初の名前と後続のリンクの間に違いはありません。したがって、答えは「はい」です。ハードリンクは通常のファイルであり、実際には通常のファイルはハードリンクです。
このls
コマンドは、ファイル内のハードリンクの数を表示します。
たとえば、
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
ここではというファイルを作成しました/tmp/hello.txt
。1
出力は、ls -l
ファイルに1つのハードリンクがあることを示します。このハードリンクはファイル名自体です/tmp/hello.txt
。
これで、ファイルへの別のハードリンクを作成すると、次のようになります。
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
これで、両方のファイル名がそのファイルへのハードリンクが2つあることを示します。これらのどれも「正しい」ファイル名ではなく、両方とも同じように有効です。どちらも同じ inode (この場合は 5374043) を指すことがわかります。
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
これがディレクトリごとに異なるという一般的な誤解があります。私は、人々がls
ディレクトリによって返されたリンクの数がサブディレクトリの数であると言う.
のを聞きました..
。間違った。または、少なくとも正しい数を提供しますが、間違った理由で正しいです!
ディレクトリを作成して実行すると、次のようなls -ld
結果が得られます。
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
これは、ディレクトリに2つのハードリンクがあることを示します。これらはすべて:
/tmp/testdir
/tmp/testdir/.
注意し/tmp/testdir/..
てくださいいいえこのディレクトリへのリンクは、/tmp
「サブディレクトリの数」が機能する理由を示します。新しいサブディレクトリを作成するとき:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
/tmp/testdir
これで、ディレクトリへの3つのハードリンクがあることがわかります。これらはすべて:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
したがって、各新しいサブディレクトリには、含まれているエントリのためにリンク数が1ずつ増えます..
。