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;
Dari 1971 Manual Edisi Pertama Unix .
Ada bentuk sintaksis kedua yang sederhana.
edit: Aku meletakkan FILE atau FILENAME bukan TARGET --- lihat komentar dll lihat juga tambahan yang sangat panjang di bagian bawah, mengatasi gunung es, keras dan lunak dari ln
, bukan hanya ujung itu.
Jadi GNU ln
memiliki ini:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
di mana Anda tidak memerlukan nama tautan. Setelah ln -s /usr/lib/modules
Anda mendapatkan
modules -> /usr/lib/modules
dengan nama yang sama dengan FILENAME ("target" atau "source"), tepat di tempat Anda berada. Tidak ada pilihan, tidak ada kebingungan.
Sekarang jika Anda lebih menuntut dan ingin tautan dibuat dengan nama lain dan / atau di tempat lain , Anda menambahkan keinginan itu sebagai nama atau jalur. Target sebenarnya datang pertama, fantasi tambahan nama tautan baru kedua.
Atau Anda berkata: "Saya tahu tanda panah ini ls -l
untuk tautan. Saya tidak punya panah di shell untuk menunjukkan arah tautan saya. Jadi saya harus memutarnya."
Anda membuatnya di satu arah, sehingga Anda bisa menggunakannya di sisi lain.
(AKHIR BAGIAN JAWABAN-THE-PERTANYAAN)
Pada level lain, kata "tautan" itu sendiri mengandung makna ganda yang tersembunyi. Tautan simbolik muncul kemudian, jadi pada hari-hari awal tautan hanyalah tautan. Tidak ada yang lunak dan keras, tidak ada -s
pilihan. Dan sekarang saya bahkan menggunakan simbolisme sumber-target:
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
Pada tahap ini, ada tautan, tetapi tidak ada yang keras dan lunak, dan ls -l
tidak menunjukkan panah, karena tidak ada arah di tautan (keras). "Tautan" pada tahap evolusi unix berarti nama file "B" (entri direktori "B") dalam sistem file menunjuk ke inode yang sama dengan nama file "A" menunjuk ke.
File A dan B "ditautkan" bersama-sama, karena mereka berbagi blok yang sama. Jadi sekarang dengan setiap rm, kernel harus memeriksa: apakah saya menghapus / membebaskan blok file ini pada disk, atau adakah file lain yang terhubung ke blok yang sama? Untuk itu, penghitung tautan digunakan.
Katakanlah Anda ingin menyimpan file besar di / tmp grom yang dihapus dan dilakukan ln /tmp/bigfile
. Sekarang Anda memiliki bigfile besar di dir kerja Anda. Setelah membersihkan / tmp dan mencari "asli", Anda dengan senang hati menggunakan blok data yang sama. Anda tidak mendapatkan tautan mati atau menggantung, Anda memiliki file normal. Menunjuk ke tidak ada file tetapi hanya blok sistem file seperti setiap entri dir tidak. Hanya sekarang "membersihkan" / tmp tidak seefektif dulu. Terlihat kosong, dan memang benar, tetapi blok di partisi tidak dibebaskan.
Meskipun tautan keras tidak memakan biaya ruang itu sendiri seperti halnya cp, secara tidak langsung, itu bisa.
Menambahkan ln -s
ke urutan di atas:
ln -s A B --- copy only the file's name to "B"
Sekarang "B", tautan lunak, hanya memiliki string dengan pathname. Ini adalah informasi "lunak". Secara teknis "A" dan "B" tidak berhubungan. Tapi tetap B adalah "tautan" dalam arti baru yang bisa Anda gunakan pathname tersimpan itu sebagai jalan pintas ke "A". Sekarang "tautan ke A" (titik) dan tidak "ditautkan dengan inode file A"
Kedua jenis tautan ini dapat membingungkan tidak hanya manusia tetapi juga kernel / fs. Halaman manual 1971 mencatat: "BUGS: tautan dapat dicadangkan dua kali, dan dipulihkan sebagai file terpisah dengan inode terpisah."
Tautan keras ke direktori (jarang / tidak diizinkan) dapat dengan mudah menyebabkan penyumbatan.
Tautan lunak ke direktori (sangat umum) dapat menyebabkan loop abadi - harus dikenali oleh utilitas / kernel.
Contoh praktis dalam bash
Dimulai dengan file biasa "F" ...
ln F Fhard
... membuat Fhard ukuran yang sama dengan F, tetapi mereka KEDUA muncul sekarang dalam merah gelap TANPA panah di ls -l --color
. Karena stat
menampilkan "Tautan: 2" sehubungan dengan "Inode: xyz". Hubungan keras F mengubah F sendiri menjadi tautan keras. Keduanya adalah / tetap filetype "file biasa". Tetapi keduanya memiliki inode dengan jumlah tautan di atas 1.
ln -s F Fsoft
... membuat file kecil "tidak biasa" "Fsoft" dengan filetype "symbolic link" --- bahkan lebih menghemat ruang daripada direktori kosong. A ls -l
menunjukkan tidak ada yang istimewa untuk "F". Untuk Fsoft, ukuran yang ditampilkan adalah 1 byte karena stringnya adalah 'F', dan Fsoft -> F
ditampilkan sebagai nama. Tidak perlu mewarnai tautan lunak untuk mengenalinya. Karena dalam bentuk singkat ls -F
Anda mendapatkan rantai melingkar @
ditambahkan:Fsoft@
Dengan ls -l
tampilannya seperti ini:
-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 memiliki ukuran dan tipe F.
Fsoft memiliki nama F dan panjang nama F sebagai ukuran, dan jenis file yang berbeda.
Pendek ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
menambahkan --block-size=1
juga tidak menghasilkan ukuran yang sama. Fsoft memiliki ukuran "satu byte, nol blok". F dan Fhard menyimpang secara paralel:
6074368 F 6074368 Fhard 0 Fsoft@
Untuk melihat apakah Fsoft menggantung atau tidak, ls
Anda dapat menggunakan warna.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
, dan sebut sajab
"