Saya sudah terbiasa ln
menulis tautan simbolik selama bertahun-tahun, tetapi saya masih mendapatkan urutan parameter yang salah di sekitar.
Ini biasanya membuat saya menulis:
ln -s a b
dan kemudian melihat output untuk mengingatkan diriku.
Saya selalu membayangkan menjadi a -> b
seperti yang saya baca ketika itu sebenarnya sebaliknya b -> a
. Ini terasa kontra-intuitif sehingga saya menemukan bahwa saya selalu menebak-nebak sendiri.
Adakah yang punya tips untuk membantu saya mengingat urutan yang benar?
a
, dan sebut sajab
"ln source target
. Sama seperticp source target
,mv source target
; ...Jawaban:
Saya menggunakan yang berikut ini:
ln
memiliki formulir satu argumen (formulir ke-2 yang tercantum di halaman manual ) di mana hanya target yang diperlukan (karena bagaimana bisaln
bekerja sama sekali tanpa mengetahui target) danln
membuat tautan di direktori saat ini. Bentuk dua argumen adalah tambahan untuk bentuk satu argumen, sehingga target selalu argumen pertama.sumber
ln
.-t
) maka rasanya hampir seperti bukti. "ln
Membuat tautan di direktori saat ini. Bentuk dua argumen adalah tambahan untuk bentuk satu argumen dan karenanya target selalu argumen pertama". Karena masuk akal bahwa ini akan menjadi kasus ketika mempertimbangkan bentuk kedua, saya pikir ini akan membantu saya mengingat.Saya pergi "
ln
adalah seperticp
. 'Sumber' harus didahulukan."sumber
mv
.mv
,cp
danln
semua mengambil file yang ada sebagai argumen pertama, dan file tujuan atau nama direktori yang dimaksud sebagai argumen kedua.memcpy
,strcpy
dll bekerja sebaliknya.memcpy(dest,src,n);
peta sangat baikdest = src;
. Dengan kata lain, set (n
byte pertama ) dest sama dengan (n
byte pertama ) src.Kebanyakan Unices mendokumentasikan
ln
perintah tersebut sebagai(Saya menghilangkan opsi dll di sini)
Contoh:
Standar POSIX
OpenBSD :
NetBSD dan FreeBSD
macOS
Solaris
AIX
GNU
ln
pengguna menyebutsource
sasaran dantarget
LinkName .Manual GNU untuk
ln
Mengabaikan pilihan GNU kata-kata,
ln
utilitas berikut jenis yang sama semantik sebagai misalnyamv
dancp
dalam yang sasaran adalah apa yang diciptakan dari sumber .Karena itu,
akan membuat tautan simbolik yang
b
menunjuk kea
.Perhatikan juga bahwa saat membuat tautan simbolik , sumber hanyalah string yang menunjukkan apa yang harus ditunjukkan oleh tautan simbolik. Biasanya tidak ada pemeriksaan yang dilakukan untuk memvalidasi bahwa itu menunjuk ke sesuatu yang berguna:
sumber
ln -s a b
bekerja, dan itu tidak ada hubungannya dengan kata-kata GNU, karena saya tidak berpikir saya pernah melihat ungkapan dalam halaman manual. : D (Lebih mudah dijalankanln -si a b
jika tidak yakin, itu akan mengeluh jikab
sudah ada.)Dalam hal ini membantu orang: Saya sudah terbiasa untuk berpikir sebagai "ln apa di mana ", yang membantu saya ingat bahwa argumen pertama ( "apa") adalah file yang ada, yang kedua ( "di mana") adalah tempat untuk menempatkan (tautan ke) itu. Berlawanan dengan alasan di sebagian besar jawaban lain, ini tidak lebih dari sebuah frase bernada rendah yang secara mental dapat saya ucapkan kepada diri saya sendiri ketika saya mengetik perintah, yang berfungsi sebagai bantuan memori. Ini mungkin tidak akan berguna bagi semua orang, tetapi saya menduga itu akan membantu beberapa orang.
Ini membantu bahwa perintah manipulasi file standar lainnya menggunakan konvensi yang sama, jadi saya dapat melakukan hal yang sama untuk
cp
danmv
.sumber
Baru-baru ini saya mendengar cara yang bagus untuk mengingat hal khusus ini: sajak
Ayat pertama adalah argumen ln: sesuatu yang lama diikuti dengan nama entri direktori baru.
sumber
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:di mana Anda tidak memerlukan nama tautan. Setelah
ln -s /usr/lib/modules
Anda mendapatkandengan 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: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: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" ...
... membuat Fhard ukuran yang sama dengan F, tetapi mereka KEDUA muncul sekarang dalam merah gelap TANPA panah di
ls -l --color
. Karenastat
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.... 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', danFsoft -> F
ditampilkan sebagai nama. Tidak perlu mewarnai tautan lunak untuk mengenalinya. Karena dalam bentuk singkatls -F
Anda mendapatkan rantai melingkar@
ditambahkan:Fsoft@
Dengan
ls -l
tampilannya seperti ini:Fhard memiliki ukuran dan tipe F.
Fsoft memiliki nama F dan panjang nama F sebagai ukuran, dan jenis file yang berbeda.
Pendek
ls -sF
:menambahkan
--block-size=1
juga tidak menghasilkan ukuran yang sama. Fsoft memiliki ukuran "satu byte, nol blok". F dan Fhard menyimpang secara paralel:Untuk melihat apakah Fsoft menggantung atau tidak,
ls
Anda dapat menggunakan warna.sumber
Sangat membantu untuk mengingat bahwa nama tautan itu opsional. Jika tidak diberikan, nama dasar target tautan digunakan.
identik dengan menjatuhkan nama tautan sepenuhnya:
Ini tidak masuk akal jika target tautan disebutkan terakhir.
sumber
Pikirkan saja Unix -> AT&T -> tujuan di kanan:
sumber
ln abc def
,abc
dandef
merupakan objek yang sama; mereka tidak bisa dibedakan. Selain itu, operasi tidak berpengaruh padaabc
, selain meningkatkan jumlah tautannya. Tujuannya adalahdef
. Penunjuk ke objek baru dipasang didef
lokasi.ln -s abc def
berarti kontennyaabc
ditulis ke lokasidef
.abc
bahkan tidak harus menyelesaikan apa pun; itu bisa menjadi tautan yang menggantung.mv dest src
,ln [ -s ] dest src
,cp dest src
, ...Secara pribadi, saya lebih suka untuk tidak mengingat X, lebih memilih untuk mengetahui di mana mencari X ketika saya membutuhkannya. Saya juga penggemar sikap "lebih aman daripada menyesal" jadi saya selalu ingin memeriksa dengan cermat apa yang saya tulis, terutama sebagai root.
Dalam hal ini, jawabannya secara harfiah ada di baris pertama halaman manual:
Saya tidak akan menyarankan itu jika diperlukan untuk mempelajari halaman manual, tetapi karena itu benar di awal, IMHO itu sepadan dengan 3 detik yang dibutuhkan untuk mengetik
man ln
dan berhenti.sumber
Mirip dengan cp, yang secara mental saya baca sebagai "salin ini ke itu", saya membaca perintah ln sebagai "tautan ini ke itu".
sumber
Inilah yang saya ingat: Lupakan target. Dengan kata lain, jika saya di dir1 dan ingin membuat symlink di sini ke file1 yang ada di / some / other / dir /, saya hanya akan melakukan:
Anda akan mendapatkan symlink bernama file1 di dir1 yang menunjuk ke / some / other / dir / file1. Dari halaman manual untuk ln:
Perlu diingat bahwa ini hanya berfungsi jika Anda ingin symlink memiliki nama yang sama dengan target (yang kemungkinan besar adalah kasusnya).
sumber
Saya ingin memperluas jawaban @ gary.
Selain anwernya:
ln
perintah dapat menerima sejumlah argumen sembarang, sehingga Anda dapat membuat beberapa symlink dalam satu permintaan (yang berguna saat Anda membutuhkannya).ln -s foo bar baz
, apa penjelasan paling logis yang argumen artinya apa?ln -s foo bar
, apa penjelasan paling logis yang argumen artinya?sumber
Bayangkan sebuah versi
ln
yang memungkinkan Anda membuat beberapa tautan (simbolik) dalam satu perintah.Itu tidak akan membuat sejak untuk membalikkan itu, karena symlink hanya dapat menunjuk ke satu
TARGET
per satu dan konvensi baris perintah normal adalah untuk meletakkan bagian berulang di akhir baris perintah, misalnyagrep PAT [FILE]...
sumber
"
ls
menunjukkana -> b
begituln a b
"Ingatlah bahwa ini salah.
sumber
ls -l
:link -> target
dapat membingungkan ide Anda tentang cara mengaturln
baris perintah. Tetapi saya khawatir itu tidak akan banyak membantu.