Bagaimana saya bisa menghubungkan file di Linux? [Tutup]

1941

Saya ingin membuat tautan simbolis di Linux. Saya telah menulis perintah Bash ini di mana path pertama adalah folder yang saya inginkan tautannya dan path kedua adalah sumber yang dikompilasi.

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

Apakah ini benar?

chrissygormley
sumber
Anda mungkin harus mengajukan pertanyaan ini di unix.stackexchange.com
Guss
Mungkin superuser.com .
Justin Liu

Jawaban:

3679

Untuk membuat symlink baru (akan gagal jika symlink sudah ada):

ln -s /path/to/file /path/to/symlink

Untuk membuat atau memperbarui symlink:

ln -sf /path/to/file /path/to/symlink
hsz
sumber
382
@ micapam lnSintaksnya mirip dengan cpsintaksis, misalnya tujuan sumber .
Andrey
157
Berikut ini mnemonik untuk Anda: l (i) n (k) -s (ymbolic) <target> <nama opsional> (fakta bahwa parameter terakhir opsional membantu Anda mengetahui bahwa itu bukan target) (dengan meninggalkan path ke symlink membuat tautan di direktori saat ini dengan nama samaran yang sama dengan target)
UncleZeiv
32
@micapam Sama seperti cpyang CoPy, lnadalah LiNk. Huruf pertama dan ketiga.
Cole Johnson
68
Saya menghabiskan beberapa menit mencoba mencari tahu mengapa ini tidak berhasil untuk saya. Itu menciptakan tautan yang diulang-sendiri. Tampaknya / path / ke / file harus absolut dan tidak relatif terhadap "folder saat ini". Mungkin tunjukkan hal ini dalam jawabannya?
Abhishek Anand
52
@AbhishekAnand sudah beberapa tahun, tapi aku hanya ingin meninggalkan catatan bahwa itu tidak bekerja dengan path relatif; hanya perlu relatif terhadap direktori tautan simbolik yang dihasilkan dan bukan direktori saat ini. Apa yang Anda tulis sebagai argumen jalur pertama sebenarnya, kata demi kata, teks yang akan berada di dalam tautan simbolik; itu sebabnya, ketika itu relatif, itu harus relatif terhadap tautan.
JoL
302
ln -s TARGET LINK_NAME

Di mana -smembuatnya simbolis.

cyborg
sumber
2
TARGET & LINKNAME adalah cara yang lebih baik untuk diingat. btw untuk menghapus penggunaan symlink:unlink LINK_NAME
Silvan
31
Saya ingin kalimat seperti ini: ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
totymedli
@ Silvan Anda dapat menghapus symlink via rm, tetapi kebanyakan orang tidak tahu untuk menghapus trailing /.
FreeSoftwareServers
288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
codaddict
sumber
2
Lebih baik daripada jawaban yang diterima dan ditutupi dengan singkatnya ambigu.
Josh Habdas
3
Kecuali itu bukan nama symlink baru. Ini adalah nama atau path lengkap (relatif terhadap skr dir atau absolut) untuk symlink baru termasuk namanya.
David Spector
ln -s EXISTING_FILE_OR_DIRECTORY {lintasan opsional ke /} SYMLINK_NAME dan jangan beri tanda garis miring pada symlink, karena itu bukan direktori
comfytoday
94
ln -s target linkName

Anda dapat melihat halaman manual di sini:

http://linux.die.net/man/1/ln

rui
sumber
6
baik untuk menyebutkan "target" bukan hanya "file"
Alyas
88

(Karena gambar ASCII bernilai seribu karakter.)

Panah mungkin merupakan mnemonik yang sangat membantu, terutama karena itulah yang terlihat persis seperti apa yang terlihat di dalam Emacs.

Dan gambaran besar sehingga Anda tidak bingung dengan versi Windows

Linux:

ln -s target <- linkName

Windows:

mklink linkName -> target

Anda juga bisa melihat ini sebagai

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

Itu from-here seharusnya tidak ada lagi, itu harus dibuat, sedangkan to-hereharus sudah ada (IIRC).

(Saya selalu bingung tentang apakah berbagai perintah dan argumen harus melibatkan lokasi yang sudah ada sebelumnya, atau yang harus dibuat.)

EDIT: Ini masih meresap perlahan bagi saya; Saya memiliki cara lain yang saya tulis dalam catatan saya.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
Brady Trainor
sumber
Di Emacs ' dired, ini sangat mudah, ketika Anda meletakkan kursor di atas target Anda, tekan S, dan ketikkan direktori tempat Anda menginginkan tautan yang akan dibuat. Mempersingkat jarak antara membayangkan hasil yang diinginkan dan mengetik. Lihat gnu.org/software/emacs/manual/html_node/emacs/… .
Brady Trainor
2
Mnemonic saya AKTIF: ln -s Original Newfile (symlink)
robstarbuck
ini berhasil untuk saya
Haider Ali
25
ln -s source_file target_file

http://unixhelp.ed.ac.uk/CGI/man-cgi?ln

Rob M
sumber
4
itu adalah definisi yang berlawanan dari "target" dibandingkan dengan man ln, yang menyebutnyaln -s TARGET LINK_NAME
wisbucky
22

Untuk pertanyaan awal:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

Ini memang akan membuat tautan simbolik ( -s) dari file / direktori:

<basebuild>/IpDome-kernel/kernel

ke tautan baru Anda

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

Berikut beberapa cara untuk membantu Anda mengingat:

Pertama, ada halaman manual untukln . Anda dapat mengakses ini melalui pencarian "man ln" di google, atau cukup buka jendela terminal dan ketik man lndan Anda akan mendapatkan informasi yang sama. Halaman manual dengan jelas menyatakan:

Di [OPTION] ... [-T] TARGET LINK_NAME (formulir 1)


Jika harus mencari atau membaca halaman manual setiap saat bukan untuk Anda, mungkin Anda akan lebih mudah mengingat bahwa semua perintah nix bekerja dengan cara yang sama:

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp menyalin file yang saat ini ada (argumen pertama) ke file baru (argumen kedua).
mv memindahkan file yang saat ini ada (argumen pertama) ke tempat baru (argumen kedua)

Demikian juga lntautan file yang saat ini ada (argumen pertama) ke tautan baru (argumen kedua) *


Opsi terakhir yang ingin saya sarankan adalah Anda dapat membuat halaman manual Anda sendiri yang mudah dibaca dan mudah (untuk Anda) untuk menemukan / mengingat. Buat skrip shell sederhana yang memberi Anda petunjuk yang Anda butuhkan. Misalnya :

Dalam file .bash_aliases Anda, Anda dapat menempatkan sesuatu seperti:

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

Kemudian ketika Anda membutuhkannya, dari baris perintah cukup ketik cmdsdan Anda akan mendapatkan kembali sintaks yang tepat dengan cara Anda dapat dengan cepat membaca dan memahaminya. Anda dapat membuat fungsi-fungsi ini semaju Anda ingin mendapatkan informasi apa yang Anda butuhkan, terserah Anda. Anda bahkan dapat membuatnya interaktif sehingga Anda hanya harus mengikuti petunjuknya .. sesuatu seperti:

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

* - yah jelas mereka semua dapat mengambil parameter yang berbeda dan melakukan hal yang berbeda dan dapat bekerja pada file dan juga direktori ... tetapi premisnya sama
♦ - contoh menggunakan bash shell

Mike
sumber
18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.
miku
sumber
16

Membuat tautan simbolik atau tautan lunak di Linux:

Buka Bash prompt dan ketik perintah yang disebutkan di bawah ini untuk membuat tautan simbolis ke file Anda:

A) Buka folder tempat Anda ingin membuat tautan lunak dan ketik perintah seperti yang disebutkan di bawah ini :

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

B) Ambil path nama file baru Anda dan ketik :

$ ls -lrt (To see if the new-file is linked to the file or not)

Contoh:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B
Ankit Raj
sumber
12

ln -s sourcepath linkpathname

catatan:

-s membuat tautan simbolik alih-alih tautan keras

simranjeet
sumber
11

Jika Anda berada di direktori tempat Anda ingin membuat symlink, abaikan lintasan kedua.

cd myfolder
ln -s target

Ini akan membuat symlink dari targetdalammyfolder .

Sintaks umum

ln -s TARGET LINK_NAME
Fizer Khan
sumber
11

Ini adalah Stack Overflow jadi saya menganggap Anda menginginkan kode:

Semua kode berikut mengasumsikan bahwa Anda ingin membuat tautan simbolis bernama tautan /tmp/linkitu /tmp/realfile.

PERHATIAN : Meskipun kode ini memeriksa kesalahan, kode ini TIDAK memeriksa apakah /tmp/realfilebenar-benar ada! Ini karena tautan mati masih valid dan tergantung pada kode Anda, Anda mungkin (jarang) ingin membuat tautan sebelum file asli.


Shell (bash, zsh, ...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

Sederhana nyata, sama seperti Anda akan melakukannya di baris perintah (yang merupakan shell). Semua penanganan kesalahan dilakukan oleh penerjemah shell. Kode ini mengasumsikan bahwa Anda memiliki juru bahasa shell yang berfungsi di /bin/sh.

Jika perlu Anda masih bisa menerapkan penanganan kesalahan Anda sendiri dengan menggunakan $?variabel yang hanya akan diatur ke 0 jika tautan berhasil dibuat.

C dan C ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinkhanya mengembalikan 0 saat tautan dapat dibuat. Dalam kasus lain saya menggunakanperror untuk memberi tahu lebih banyak tentang masalah tersebut.

Perl

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

Kode ini mengasumsikan Anda memiliki juru bahasa perl 5 di /usr/bin/perl. symlinkhanya mengembalikan 1 jika tautan dapat dibuat. Dalam kasus lain saya mencetak alasan kegagalan ke output kesalahan standar.

Garo
sumber
1
Penjelasan ditambahkan, juga kata peringatan untuk tautan mati. Saya tidak memeriksa ini, karena tidak dapat diasumsikan bahwa ini tidak diinginkan dan juga karena filetests tidak lagi pada topik
Garo
8

Saya ingin menyajikan deskripsi lebih jelas versi bahasa Inggris-bahasa yang sudah disajikan.

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

Perintah "ln" membuat tautan-FILE, dan "-s" menetapkan bahwa jenis tautan akan bersifat simbolis. Contoh file tautan simbolis dapat ditemukan di instalasi WINE (menggunakan "ls -la" untuk menampilkan satu baris dari isi direktori):

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

Informasi file-info standar ada di sebelah kiri (walaupun perhatikan karakter pertama adalah "l" untuk "tautan"); nama file adalah "a:" dan "->" juga menunjukkan file tersebut adalah sebuah tautan. Ini pada dasarnya memberitahu WINE bagaimana Windows "Drive A:" harus dikaitkan dengan floppy drive di Linux. Untuk benar-benar membuat tautan simbolis SIMILAR ke sana (dalam direktori saat ini, dan untuk benar-benar melakukan ini untuk WINE lebih rumit; gunakan utilitas "winecfg"):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists
vernonner3voltazim
sumber
7

Untuk membuat tautan simbolik / tautan lunak, gunakan:

ln -s {source-filename} {symbolic-filename}

misalnya:

ln -s file1 link1
Prem S
sumber
4

Ada dua jenis tautan:

tautan simbolik: Lihat jalur simbolik yang menunjukkan lokasi abstrak dari file lain

tautan keras: Lihat lokasi spesifik data fisik.

Dalam kasus Anda, symlinks:

ln -s source target

Anda dapat merujuk ke http://man7.org/linux/man-pages/man7/symlink.7.html

Anda dapat membuat tautan terlalu keras

Tautan keras ke file tidak dapat dibedakan dari entri direktori asli; setiap perubahan pada file secara independen terlepas dari nama yang digunakan untuk referensi file. Tautan keras biasanya tidak merujuk ke direktori dan mungkin tidak menjangkau sistem file.

ln source link
wpp
sumber
4

Tautan pada dasarnya terdiri dari dua jenis:

Tautan simbolik (lunak): tautan ke lintasan simbolik yang menunjukkan lokasi abstrak file lain

Tautan keras: tautan ke lokasi spesifik data fisik.

Contoh 1:

ln /root/file1 /root/file2

Di atas adalah contoh tautan keras tempat Anda dapat memiliki salinan data fisik Anda.

Contoh 2:

ln -s /path/to/file1.txt /path/to/file2.txt

Perintah di atas akan membuat tautan simbolis ke file1.txt.

Jika Anda menghapus file sumber maka Anda tidak akan memiliki apa pun ke tujuan dengan lembut.

Saat kamu melakukan:

ls -lai

Anda akan melihat bahwa ada nomor inode yang berbeda untuk symlink.

Untuk lebih jelasnya, Anda dapat membaca halaman manual ln di OS Linux Anda.

Prabhat Singh
sumber
hard link where you can have a copy of your physical data- Saya pikir kami tidak membuat salinan data fisik. Hanya nama lain untuk data fisik yang sama.
Alexander Radchenko
3

Saya menemukan sedikit membingungkan terminologi "target" dan "direktori" dalam informasi manusia.

Targetnya adalah folder tempat kami terhubung dan direktori symlink yang sebenarnya (bukan direktori tempat Anda akan symlinking), jika ada yang mengalami kebingungan yang sama, jangan merasa sendirian.

Ini adalah interpretasi saya untuk membuat Symlink (di linux):

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

Anda dapat menavigasi ke folder tempat Anda ingin membuat symlink dan menjalankan perintah atau menentukan FULL PATH untuk symlink Anda alih-alih NAME-OF-YOUR-SYMLINK.

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

ATAU

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

Saya harap ini membantu mereka yang masih bingung.

mmmdearte
sumber
-2

Cara membuat symlink di gelandangan. Langkah:

  1. Dalam file gelandangan buat folder yang disinkronkan. mis. config.vm.synced_folder "F: / Sunburst / source / sunburst / lms", "/ source" F: / Sunburst / source / sunburst / lms: - di mana kode sumber, / source: - jalur direktori di dalam gelandangan
  2. Vagrant dan ketik vagrant ssh dan pergi ke direktori sumber misalnya sumber cd
  3. Pastikan struktur folder kode sumber Anda tersedia di direktori sumber. mis. / source / local
  4. Lalu pergi ke direktori mesin tamu tempat file yang dikaitkan dengan browser. Setelah mendapatkan cadangan file. misalnya sudo mv local_bk lokal
  5. Kemudian buat symlink misalnya sudo ln -s / source / local local. local mean-name-link (nama folder di mesin tamu yang akan Anda tautkan) jika Anda perlu menghapus symlink: - Ketikkan sudo rm local
Vayodya Tamari
sumber