Próbuję lepiej zrozumieć dowiązania symboliczne ... i nie mam dużo szczęścia. Oto moje rzeczywiste wyjście powłoki ze zmienioną nazwą użytkownika / hosta:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Myślałem, że dowiązanie symboliczne powinno działać w sposób przezroczysty, w tym sensie, że możesz operować na pliku, który wskazuje, tak jakbyś miał bezpośredni dostęp do pliku (z wyjątkiem oczywiście sytuacji, w rm
których link jest po prostu usuwany ).
linux
ubuntu
bash
symbolic-link
orokusaki
źródło
źródło
df -T
) - czy powyższy wynik też jest dla Ciebie dziwny?Odpowiedzi:
Dowiązania symboliczne zwykle lubią pełne ścieżki lub są względne względem łącza, w przeciwnym razie często mogą szukać
file-1.txt
lokalnie (co dziwne).Nawiguj
proper
i wykonuj,ls -l
a zobaczysz, że dowiązanie symboliczne szukaactual/file-1.txt
, kiedy powinno../actual/file-1.txt
.Masz więc dwie opcje:
Podaj pełną ścieżkę
Przejdź do folderu, w którym ma znajdować się link, i stamtąd link
Edycja : wskazówka, aby zapisać pisanie.
Możesz po prostu zrobić
ln -s ~/actual/file-{1,2}.txt ~/proper
Elementy w nawiasach klamrowych są zastępowane i umieszczane jeden za drugim, tworząc polecenie
źródło
rm -rf *
wchodź też do folderu z dowiązaniami symbolicznymi - możesz wyczyścić folder, do którego prowadzi. Po prostu wykonaj rm symlinkname. Kilka rzeczy, w których popełniłem błędy: DProblemem jest użycie ścieżek względnych. Jeśli określisz tworzenie linku z pełną jawną ścieżką, to zadziała.
Twój przykład tworzy linki w
proper
tym wyglądzie podkatalogu o nazwie rzeczywisty w bieżącym katalogu, a nie zamierzonego elementu nadrzędnego dla obu.źródło
Dowiązania symboliczne mogą być trudne. Zasadniczo dowiązanie symboliczne to plik zawierający nazwę pliku / ścieżkę do innego pliku (oznaczony do specjalnego traktowania). Jeśli nazwa ścieżki w pliku łącza zaczyna się od „
/
”, to jest traktowana jako bezwzględna nazwa ścieżki, a sprawy są dość proste. Jeśli nie zaczyna się od ukośnika, jest traktowany jako względna nazwa ścieżki - względem katalogu, w którym znajduje się łącze. (Dzieje się tak niezależnie od tego, czy nazwa zawiera ukośniki.) Tak więc utworzyłeśproper/file–1.txt
link do „actual/file–1.txt
”, a kiedy próbowałeś uzyskać do niego dostęp, system próbował uzyskać dostępproper/actual/file–1.txt
. Powinieneś był powiedziećNawiasem mówiąc, nie potrzebowałeś
touch
poleceń.echo "file 1" > actual/file–1.txt
wystarczy stworzyćactual/file–1.txt
.źródło
Powiązany problem, który może być oczywisty dla wielu, ale zaskoczył mnie na kilka minut: jeśli tworzysz dowiązanie symboliczne w katalogu, który sam jest dowiązaniem symbolicznym, lub istnieje dowiązanie symboliczne w ścieżce bieżącego katalogu roboczego, możesz napotykają problemy z niedziałającymi dowiązaniami symbolicznymi.
Używaj
cd ..
ils -l
kilkakrotnie, aby sprawdzić, czy Twoje katalogi nadrzędne same są połączone symbolicznie.Jeśli musisz utworzyć dowiązanie symboliczne,
cd
do oryginalnego katalogu docelowego i tam utworzyć nowe dowiązania symboliczne, aby ścieżki względne były dokładne.Innymi słowy: ścieżka względna prowadzi od początku do celu. Jeśli źródło jest następnie dowiązane symbolicznie, to jest OK. Ale możesz napotkać problemy z konfiguracją nowego Origin link_name w katalogu, który sam jest w jakiś sposób symlinkowany.
źródło
cd ..
ils -l
wielokrotnie” możesz użyćnamei -mox $PWD
. Innym przydatnym sposobem sprawdzenia, czy na ścieżce są dowiązania symboliczne, jest użycie ścieżkipwd -P
, która daje ścieżkę do bieżącego katalogu, który nie zawiera żadnych dowiązań symbolicznych (więc jeślipwd
ipwd -P
daje inne dane wyjściowe, wiesz, że gdzieś po drodze jest dowiązanie symboliczne ).Kiedy próbujesz utworzyć link do pliku, który nie istnieje (lub podałeś nieprawidłową ścieżkę), ln -s nie zgłasza błędu. Tworzy link, ale gdy spróbujesz użyć „cat” na tym linku, nie zostanie znaleziony żaden plik. Nawet jeśli możesz to zobaczyć za pomocą ls. W takich przypadkach zawsze dwukrotnie sprawdź ścieżkę do pliku.
Ponieważ plik etc / ufw / ufw.conf nie istnieje. Prawidłowa ścieżka to /etc/ufw/ufw.conf
źródło
ln -s
„czasami” nie sprawdza istnienia celu jest po prostu błędna.