Utwórz symboliczny link do katalogu w Ubuntu [zamknięte]

247

Poniżej znajduje się mój kod do tworzenia dowiązania symbolicznego katalogu:

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

Już utworzyłem katalog /etc/nginx. Chcę tylko, aby zawartość katalogu źródłowego ( /usr/local/nginx/conf/) znajdowała się w zawartości katalogu docelowego ( /etc/nginx). Ale kiedy wykonuję kod, /etc/nginxzawiera on katalog o nazwie confzamiast zawartości conf. Ten katalog zawiera zawartość, której chcę, ale w niewłaściwej lokalizacji.

Dlaczego umieścił katalog w folderze docelowym, a nie tylko zawartość katalogu w folderze docelowym?

nbro
źródło
Możesz także użyć plików (domyślna przeglądarka plików). Kliknij prawym przyciskiem myszy folder, który chcesz połączyć> opcję „Utwórz łącze”. Spowoduje to utworzenie folderu połączonego, który można przenieść i zmienić nazwę według potrzeb.
John Linhart
4
Użyj bind mountfunkcji linux . przykład
gkiko,

Odpowiedzi:

254

Jest to zachowanie, lnjeśli drugi argument jest katalogiem. Umieszcza link do pierwszego arg wewnątrz niego . Jeśli chcesz /etc/nginxbyć dowiązaniem symbolicznym, najpierw usuń ten katalog i uruchom to samo polecenie.

Błąd krytyczny
źródło
10
Link do Unix.SE rozwiązuje się tutaj. Wydaje się, że mamy cykliczną zależność.
kaiser
30

Jest lnto udokumentowane, gdy cel już istnieje i jest katalogiem. Jeśli chcesz /etc/nginx, aby być dowiązania symbolicznego zamiast zawierać dowiązania symbolicznego, trzeba było nie lepiej stworzyć go jako katalog pierwszy!

Celada
źródło
51
Twoja odpowiedź ma sens tylko w kontekście czytelnika, który zna już odpowiedź. Jest to bezużyteczne dla każdego, kto zadaje pytanie
Ricardo Saporta
1
Czy rzeczywiście mogę utworzyć dowiązanie symboliczne do katalogu głównego zamontowanego urządzenia USB (dlatego nie mogę najpierw usunąć tego folderu)?
Grigorij Korniłow
1
@GrigoryKornilov możesz utworzyć dowiązanie symboliczne do wszystkiego, co chcesz, w tym czegoś, co nie istnieje. To pytanie dotyczyło raczej miejsca, w którym tworzony jest dowiązanie symboliczne (a nie, gdzie wskazuje). Określona nazwa ścieżki w systemie plików jest albo zwykłym plikiem, albo katalogiem, albo dowiązaniem symbolicznym (albo jest gniazdem, potokiem lub urządzeniem). Nie może to być więcej niż jedna z tych rzeczy w tym samym czasie (tzn. Nie możesz mieć więcej niż jednego odrębnego pliku o dokładnie takiej samej nazwie).
Celada,
10

W skrypcie przydatne jest coś takiego:

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

zapobiega ponownemu utworzeniu „złego” zapętlonego dowiązania symbolicznego po ponownym uruchomieniu skryptu

kayn
źródło
1
Doskonały! To jest dokładne rozwiązanie. nie ma potrzeby tworzenia katalogu, jeśli już istnieje. To naprawdę dobra poprawka do twardego linku i zatopienia go w blackhole (/ dev / null)
Cosmo Arun