Mengapa membuat tautan seperti ini: ln -nsf?

42

Apa fungsinya?

ln -nsf

Saya tahu ln -smembuat tautan simbolis, bukan tautan keras yang berarti Anda dapat menghapusnya dan itu tidak akan menghapus pemikiran bahwa tautannya. Tetapi apa arti hal-hal lain? (-nf)

Perbarui: oke ... jadi saya ingat Anda dapat menemukan hal ini dari baris perintah. Inilah yang saya temukan dari mengetik ln --help:

-f, --force                 remove existing destination files
-n, --no-dereference        treat destination that is a symlink to a
                            directory as if it were a normal file

Tapi ini masih belum jelas bagi saya apa implikasi dari ini. Mengapa saya ingin membuat tautan soft / sym seperti ini?

Andrew
sumber
1
Bahkan jika Anda tidak menggunakan -sAnda dapat menghapus tautan tanpa menghapus file asli. Tautan keras meningkatkan jumlah tautan file sehingga tidak akan dihapus ketika Anda hanya menghapus satu tautan.
Amok
Itu bukan perbedaan antara tautan keras dan tautan simbolik. Tautan keras menunjuk ke byte (inode) yang sama pada disk. Tautan lunak menunjuk ke file lain dengan nama file .
Greg Hewgill
Ada juga halaman manual. yaitu menjalankan man ln. Atau laki-laki, untuk belajar tentang sistem bantuan itu. Anda bisa mendapatkan halaman manual online, juga ...
Peter Cordes

Jawaban:

43

Dari halaman manual BSD:

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.
rangsangan
sumber
32

yang -npilihan (bersama-sama dengan -f) pasukan lnuntuk memperbarui link simbolik ke direktori. apa artinya?

misalkan Anda memiliki 2 direktori

  • foo
  • bar

dan tautan simbolis yang ada

  • baz -> bar

sekarang Anda ingin memperbarui baz untuk menunjuk ke foo sebagai gantinya. jika kamu lakukan saja

ln -sf foo baz

kamu akan mendapatkan

  • baz / foo -> foo
  • baz -> bar (tidak berubah), dan dengan demikian
  • bar / foo -> foo

jika Anda menambahkan -n

ln -sfn foo baz

Anda mendapatkan apa yang Anda inginkan.

  • baz -> foo

itulah yang dimaksud dengan 'no-dereference': jangan menyelesaikan tautan yang ada dan letakkan tautan baru di dalam direktori itu, tetapi cukup perbarui saja.

Marian Theisen
sumber
2
Jawaban yang paling membantu sejauh ini.
kobejohn
1

Berikut ini semua opsi untuk ln. Anda akan menemukan -n dan -f di sini.

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character `y' or `Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.
bmargulies
sumber
-1

Anda dapat mengetik "man ln" untuk menemukan hal-hal seperti:

   -f, --force
          remove existing destination files

   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were
          a normal file
Derek Slager
sumber
20
saya masih tidak persis mengerti apa artinya
Andrew
-1

-f, - memaksa menghapus file tujuan yang ada

-n, --no-dereference memperlakukan tujuan yang merupakan symlink ke direktori seolah-olah itu adalah file normal

ennuikiller
sumber
-5

-f mengatakan bahwa jika target perintah Anda adalah file yang sudah ada, itu harus dihapus dan diganti oleh tautan baru. (Perhatikan bahwa dalam sistem yang dipengaruhi Unix, "file" dapat menyertakan direktori, tautan, pipa, dll.)

-n memodifikasi -f, mengatakan bahwa jika target yang Anda tentukan adalah tautan simbolik yang ada, itu tidak boleh dihapus.

CarlF
sumber
3
Deskripsi Anda -nsalah. -fdengan sendirinya tidak akan mengganti symlink ke direktori. Saat mengganti symlink ke direktori, -ndiperlukan untuk memperlakukan symlink yang ada seperti file normal, bukan direktori.
Brian