2012-02-01 36 views
216

Dưới đây là mã của tôi để tạo ra một liên kết tượng trưng của một thư mục:Tạo một liên kết tượng trưng của thư mục trong Ubuntu

sudo ln -s /usr/local/nginx/conf/ /etc/nginx 

Tôi đã tạo thư mục /etc/nginx. Tôi chỉ muốn nội dung của thư mục nguồn (/usr/local/nginx/conf/) nằm trong nội dung của thư mục đích (/etc/nginx). Nhưng khi tôi thực thi mã, /etc/nginx chứa một thư mục có tên là conf, thay vì nội dung của conf. Thư mục đó chứa nội dung tôi muốn, nhưng ở vị trí sai.

Tại sao nó đặt một thư mục trong thư mục đích, thay vì chỉ đặt nội dung của thư mục trong thư mục đích?

+0

Bạn cũng có thể sử dụng tập tin (trình duyệt tập tin mặc định). Nhấp chuột phải vào thư mục bạn muốn liên kết> Tùy chọn "Tạo liên kết". Nó sẽ tạo ra thư mục liên kết mà bạn có thể di chuyển và đổi tên khi bạn cần. –

+3

Sử dụng tính năng 'bind mount' của Linux. [ví dụ] (http://backdrift.org/how-to-use-bind-mounts-in-linux) – gkiko

Trả lời

222

Đây là hành vi của ln nếu arg thứ hai là một thư mục. Nó đặt một liên kết đến arg đầu tiên bên trong nó. Nếu bạn muốn /etc/nginx là liên kết tượng trưng, ​​trước tiên bạn nên xóa thư mục đó và chạy lệnh tương tự.

+1

liên quan: http://unix.stackexchange.com/questions/84175/weird-behavior-of-gnu -ln – corazza

+5

Liên kết Unix.SE đó sẽ giải quyết ở đây. Dường như chúng tôi có một sự phụ thuộc vòng tròn. – kaiser

27

Đó là những gì ln được ghi lại khi mục tiêu đã tồn tại và là một thư mục. Nếu bạn muốn /etc/nginx đến một liên kết tượng trưng thay vì chứa một liên kết tượng trưng, ​​trước tiên bạn không nên tạo nó làm thư mục!

+42

Câu trả lời của bạn chỉ có ý nghĩa trong ngữ cảnh của người đọc đã biết câu trả lời. Nó là vô ích cho bất cứ ai sẽ hỏi câu hỏi –

+1

Tôi có thể thực sự tạo một liên kết tượng trưng đến gốc của thiết bị USB được gắn (vì vậy tôi không thể xóa thư mục này trước)? –

+1

@GrigoryKornilov bạn có thể tạo liên kết tượng trưng * tới * bất kỳ thứ gì bạn muốn, bao gồm thứ gì đó không tồn tại. Câu hỏi này khá đúng về nơi tạo liên kết tượng trưng (không phải nơi mà nó trỏ tới). Một tên đường dẫn cụ thể trong hệ thống tập tin hoặc là một tập tin thông thường hoặc nó là một thư mục hoặc nó là một liên kết tượng trưng (hoặc nó là một ổ cắm hoặc đường ống hoặc thiết bị). Nó không thể * là * nhiều hơn một trong số những thứ đó cùng một lúc (nghĩa là bạn không thể có nhiều hơn một tệp riêng biệt có cùng tên chính xác). – Celada

8

Trong kịch bản rất hữu ích như thế này:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi 

nó ngăn chặn trước khi tái tạo "xấu" looped liên kết tượng trưng sau khi tái chạy script

Các vấn đề liên quan