NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
1971 Unix初版マニュアルから。
ある二、シンプル、構文形式は。
編集:私は対処する、などのコメントを参照してくださいまた、下部の非常に長い追加を参照してください---ターゲットの代わりにFILEまたはファイル名を入れ 氷山は、ハードとソフトのln
、それだけではなく先端を。
GNUにln
は次の機能があります。
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
リンク名は必要ありません。ln -s /usr/lib/modules
あなたが取得した後
modules -> /usr/lib/modules
FILENAMEと同じ名前(「ターゲット」または「ソース」)で、まさにあなたがいる場所。選択肢も混乱もありません。
あなたはより厳しいですし、下に作成されたリンクしたい場合は今、別の名前および/または他のどこかに、あなたは追加の名前またはパスとしてその願いを。実際のターゲットが最初になり、余分なファンタジーの新しいリンク名が2番目になります。
または、「ls -l
リンクについてはこの矢印表記を知っています。リンクの方向を示す矢印はシェルにありません。したがって、向きを変える必要があります。」
一方向で作成するため、他の方向で使用できます。
(質問に対する回答の終わり)
別のレベルでは、「リンク」という単語自体が、深く隠された二重の意味を持ちます。シンボリックリンクは後で登場したため、初期の頃はリンクは単なるリンクでした。ソフトもハードも-s
オプションもありませんでした。そして今、私はソースとターゲットのシンボリズムさえ使用しています:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
この段階では、リンクはありますが、ハードとソフトls -l
はなく、(ハード)リンクには方向がないため、矢印は表示されません。UNIXの進化のその段階での「リンク」は、ファイルシステムのファイル名「B」(ディレクトリエントリ「B」)がファイル名「A」が指しているのと同じiノードを指すことを意味しました。
ファイルAとBは同じブロックを共有しているため、一緒に「リンク」されています。それで、すべてのrmで、カーネルはチェックする必要があります:ディスク上のこのファイルのブロックを削除/解放するか、同じブロックにリンクされた別のファイルがありますか?そのために、リンクカウンターが使用されます。
/ tmp gromの大きなファイルを削除したままにしておきたいとしましょうln /tmp/bigfile
。これで、作業ディレクトリに大きな大きなファイルができました。/ tmpをクリーニングし、「オリジナル」を削除した後、同じデータブロックを使用して喜んで続行します。死んだリンクやぶら下がりリンクを取得するのではなく、通常のファイルがあります。すべてのdirエントリが行うようにファイルをブロックせず、ファイルシステムのみを指します。/ tmpの「クリーニング」は、今ほど効果的ではありません。空に見えますが、パーティション上のブロックは解放されません。
ハードリンクは、cpのようにスペース自体を消費しませんが、間接的には可能です。
ln -s
上記のシーケンスに追加:
ln -s A B --- copy only the file's name to "B"
現在、ソフトリンク「B」には、パス名を持つ文字列のみが含まれています。これは「ソフト」情報です。技術的には、「A」と「B」は無関係です。しかし、Bは、保存されたパス名を「A」へのショートカットとして使用できるという新しい意味での「リンク」です。これは「Aへのリンク」(ピリオド)であり、「ファイルAのiノードとリンク」ではありません
どちらの種類のリンクも、人間だけでなくkernel / fsも混乱させる可能性があります。1971年のマニュアルページには、「バグ:リンクは2回バックアップされ、個別のiノードを持つ個別のファイルとして復元されます。」
ディレクトリへのハードリンク(まれ/許可されていない)は、簡単に詰まる可能性があります。
ディレクトリへのソフトリンク(非常に一般的)は、永遠のループにつながる可能性があります-ユーティリティ/カーネルによって認識される必要があります。
bashの実用例
通常のファイル「F」で始まります...
ln F Fhard
... FhardはFと同じサイズになりますが、両方の矢印はなしで濃い赤で表示されls -l --color
ます。stat
「Inode:xyz」に関連して「Links:2」が表示されるため。Fをハードリンクすると、F自体がハードリンクになります。両方ともファイルタイプ「通常ファイル」です。ただし、どちらにもリンクカウントが1を超えるiノードがあります。
ln -s F Fsoft
...ファイルタイプ「シンボリックリンク」を持つ小さな「不規則な」ファイル「Fsoft」を作成します。空のディレクトリよりもさらにスペースを節約できます。A ls -l
は「F」に特別なものは何も示しません。Fsoftの場合、文字列が「F」であるため、Fsoft -> F
表示されるサイズは1バイトで、名前として表示されます。ソフトリンクを認識するためにソフトリンクを色付けする必要はありません。短い形式でls -F
は、コイルチェーンが@
追加されるためです。Fsoft@
ではls -l
、それは次のようになります。
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
FhardにはFのサイズとタイプがあります。
FsoftにはFの名前とFの名前の長さがサイズとしてあり、異なるファイルタイプがあります。
ショートls -sF
:
5932 F 5932 Fhard 0 Fsoft@
追加--block-size=1
しても同じサイズにはなりません。Fsoftのサイズは「1バイト、ゼロブロック」です。FとFhardは並行して逸脱します。
6074368 F 6074368 Fhard 0 Fsoft@
Fsoftがぶら下がっているかどうかを確認するには、ls
色を使用します。
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
、かつそれを呼び出すb
」