Cách tạo symlink để root


13

Tôi muốn tạo một symlink đến /thư mục root ( ) trong thư mục chính của tôi. Tuy nhiên nếu tôi thử cái này, tôi sẽ nhận được

~$ ln -s /
ln: failed to create symbolic link './': File exists

Tôi có thể làm điều này bằng Nautilus Ctrl+ D, tất nhiên, vì vậy tôi biết điều đó là có thể.

Làm thế nào để làm như vậy bằng cách sử dụng thiết bị đầu cuối?


Trong khi đây là một câu hỏi hay, tôi muốn biết lý do tại sao bạn muốn làm điều này? Có quá khó để gõ cd /? Hay bạn muốn tạo một liên kết sẽ liên tục lặp đi lặp lại? ví dụ : cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . vv
Terrance

không thực sự. bạn có thể làm điều này mà không cần liên kết đến root. Thật ra, tôi chỉ tò mò tại sao bạn không thể làm điều đó
Ankur S

Đủ công bằng. Cám ơn bạn vì đã trả lời câu hỏi của mình. =)
Terrance

Câu trả lời:


17

Bạn đang thiếu tên của liên kết, nên là:

cd ~
ln -s / root

Mà sau đó sẽ tạo ra một liên kết tượng trưng được gọi là root trong thư mục nhà của bạn. Vì vậy, cách sử dụng đúng là:

ln -s <target> <link-name>

Thông báo lỗi bạn thấy là, ./luôn tồn tại và không thể tạo liên kết với tên này, tốt nhất là sử dụng lnlệnh 2 với cả hai tham số để ngăn chặn liên kết sai.

Từ man ln:

TÓM TẮC

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  

SỰ MIÊU TẢ

Trong mẫu 1, tạo một liên kết đến TARGETvới tên LINK_NAME. Ở dạng thứ 2, tạo một liên kết đến TARGETtrong thư mục hiện tại. Trong các hình thức thứ 3 và thứ 4, tạo liên kết đến từng TARGETtrong DIRECTORY. Tạo liên kết cứng theo mặc định, liên kết tượng trưng với --symbolic. Theo mặc định, mỗi đích (tên của liên kết mới) không nên tồn tại 4 . Khi tạo liên kết cứng, mỗi liên kết TARGETphải tồn tại. Liên kết tượng trưng có thể giữ văn bản tùy ý; nếu sau đó được giải quyết, một liên kết tương đối được diễn giải liên quan đến thư mục mẹ của nó.

Đối số bắt buộc đối với tùy chọn dài cũng bắt buộc đối với tùy chọn ngắn.

LỰA CHỌN

Tham số cuối cùng <link-name>, mặc định là phần cuối cùng của mục tiêu. Vì vậy, khi mục tiêu là /path/dirtên liên kết sẽ mặc định dirnếu không được chỉ định. 1 Và nếu bạn tạo ví dụ ~/etcvới mkdir ~/etcrồi chạy ln -s /etctrong ~đó thì không thể tạo liên kết vì tên / thư mục đã tồn tại. 3

Và bạn có thể thấy liên kết được tạo trong thư mục chính của bạn (ví dụ ở đây, tất nhiên bạn có thể tự do đặt tên cho nó theo bất cứ điều gì bạn thích):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 Cảm ơn @thomasrutter đã chỉ ra điều đó.
2 Xem thêm man linkman symlink
3 Cảm ơn @steel ấn vì đã cung cấp một ví dụ trong các bình luận.
4 Phần nhấn mạnh để làm cho văn bản chỉ ra vì nó có liên quan đến câu hỏi.


nghi ngờ duy nhất còn lại của tôi là tại sao một lệnh như ln -s /etccông việc nhưng không phải lệnh này? Cảm ơn câu trả lời,
Ankur S

Nó được tạo bởi vì nó có một tên thư mục, /có thể là root hoặc nó có thể là một thành phần đường dẫn để chương trình không thể biết bây giờ có nghĩa là gì. /etcchỉ là một con đường phân biệt rõ ràng.
Videonauth

7
@AnkurSonawane vì ./sẽ luôn tồn tại - ./etckhông có khả năng như vậy. Hãy thử mkdir etcđầu tiên, và sau đó ln -s /etc- bạn cũng sẽ nhận đượcFile exists
Steeldo

8
Tham số cuối cùng, tên liên kết, mặc định là phần cuối cùng của mục tiêu nếu bị bỏ qua. Vì vậy, khi mục tiêu là /some/dirtên liên kết sẽ mặc định dirnếu không được chỉ định. /Tuy nhiên, khi mục tiêu chỉ là , điều này sẽ không hoạt động.
thomasrutter

Tôi không cảm thấy điều này cực kỳ có ý nghĩa nhưng lời giải thích của @steeldo nghe có vẻ hợp lý hơn với File Existsđầu ra. Dù sao thì nó cũng không quan trọng vì đây là trường hợp thoái hóa
Ankur S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.