GNU/Linux >> Znalost Linux >  >> Linux

Příliš mnoho úrovní symbolických odkazů

Jak Dubu zdůrazňuje v komentáři, problém spočívá ve vašich relativních cestách. Měl jsem podobný problém se symbolickým propojením konfigurace nginx z /usr/local/etc/nginx/etc/nginx . Pokud svůj symbolický odkaz vytvoříte takto:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

Ve skutečnosti vytvoříte odkaz /etc/nginx -> /etc/nginx, protože zdrojová cesta je relativní k cestě odkazu. Řešení je stejně jednoduché jako použití absolutních cest:

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

Pokud chcete použít relativní cesty a nechat je chovat se tak, jak pravděpodobně očekáváte, můžete použít pwd pro vložení aktuální cesty k pracovnímu adresáři, například takto:

cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx

Budete chtít mít kolem cesty uvozovky, abyste se ujistili, že věci, jako jsou mezery ve vaší aktuální cestě, jsou escapovány. Pamatujte, že při tom musíte použít dvojité uvozovky, jako $(pwd) nebude nahrazeno, pokud použijete jednoduché uvozovky.


Na první pohled, to, co jste navrhli, pro mě funguje.

Příklad

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Vytvořte symbolický odkaz:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

Spuštění podruhé by obvykle způsobilo toto:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Takže se tu pravděpodobně děje něco jiného. Měl bych podezření, že máte kruhový odkaz, kde odkaz směřuje zpět na sebe.

Můžete použít find abych to trochu vypátral:

$ cd /suspected/directory
$ find -L ./ -mindepth 15

Symbolické odkazy jsou relativní k nadřazenému adresáři odkazu, nikoli k aktuálnímu adresáři ln proces.

Když to uděláte:

cd /top/dir
ln -s test/src test/firefox

(kde test/firefox je adresář), vytváříte test/firefox/src symbolický odkaz, jehož cíl je test/src .

To test/src je relativní k test/firefox adresář, takže je to symbolický odkaz na /top/dir/test/firefox/test/src .

Pokud chcete, aby tento symbolický odkaz byl odkazem na /top/dir/test/src , musíte napsat:

ln -s ../src test/firefox/

Nebo

ln -s /top/dir/test/src test/firefox/

i když je obecně špatný nápad vytvářet symbolické odkazy na absolutní cesty, protože je lze snadno prolomit při přejmenování adresářů nebo připojení souborových systémů jinam.

S GNU ln , můžete použít jeho -r možnost nechat jej provést výpočet sám:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

Linux
  1. Proměnné prostředí v symbolických odkazech

  2. Chování cd/bash na symbolických odkazech

  3. Hromadná aktualizace symbolických odkazů rekurzivně

  1. Řešení chyby Mysql:Příliš mnoho otevřených souborů

  2. Chyba příliš mnoha připojení v MySQL

  3. s3cmd selže příliš mnohokrát

  1. Příkaz Ln:Jak vytvořit symbolické odkazy v Linuxu

  2. Jak zkopírovat symbolické odkazy?

  3. Příliš mnoho otevřených souborů v Debianu