jak zaktualizować symboliczny cel dowiązania (ln -f -s nie działa)
45
używam
ln -f -s / var / www / html / releases / build1390 app-current
zaktualizować link symboliczny „bieżąca aplikacja” o nowy cel. Jednak to nie działa, link „bieżąca aplikacja” zachowuje oryginalne miejsce docelowe, jednak nie otrzymuję żadnych błędów ...
Wolałbym nie usuwać łącza i odtwarzać go ponownie, wystarczy zaktualizować cel istniejącego łącza. Czy to jest możliwe?
To działa dla mnie, jaka jest wydajność strace ln -f -s /var/www/html/releases/build1390 app-current?
Och, ponieważ jest to katalog, który należy dodać, -naby nie było dereferencji, a to powinno rozwiązać problem. -fjest naprawdę wygodniejsze, ponieważ dodanie -f powoduje, że i tak się rozłącza. Chociaż myślę, że prawdopodobnie normalnie byłoby to kilkaset ms szybciej.
Więc bez -narfa zostaje zdereferencjonowany, więc traktuję go jak arf, jakby to było rzeczywiście /. W twoim konkretnym przykładzie, jeśli nie ma błędu, myślę, że prawdopodobnie utworzyłeś nowe łącze symboliczne /var/www/html/releases/build1390 app-currenti będziesz chciał to wyczyścić.
Możesz użyć -nlub, --no-dereferenceaby zapobiec dereferencji celu, jeśli jest to dowiązanie symboliczne. Możesz także użyć -Tlub, --no-target-directoryaby zapewnić, że plik docelowy będzie zawsze traktowany jako zwykły plik.
Powodują one nieco inne zachowanie, jak pokazuje poniższy przykład. Załóżmy, że srcjest jakiś plik, dirlinkjest dowiązaniem symbolicznym do katalogu i dirjest rzeczywistym katalogiem.
Używanie -n:
ln -sfn src dirlinknadpisuje dirlinki łączy go zsrc
ln -sfn src dir tworzy link dir/src -> src
Używanie -T:
ln -sfT src dirlinknadpisuje dirlinki łączy go zsrc
ln -sfT src dir wyświetla komunikat o błędzie: ln: ‘dir’: cannot overwrite directory
ma najbardziej poprawną i zwięzłą odpowiedź dla użytkowników Linuksa.
Ross
Czy istnieje sposób wymuszenia zastąpienia katalogu docelowego, aby nie wyświetlał się komunikat o błędzie cannot overwrite directory?
gitaarik
@rednaw Możesz to zrobić, łącząc kilka poleceń, ale lnsam nie usuwa katalogów - prawdopodobnie byłby to zły pomysł, ponieważ wymagałby rekurencyjnego usuwania prawdopodobnie dużej liczby plików.
Możesz użyć
-n
lub,--no-dereference
aby zapobiec dereferencji celu, jeśli jest to dowiązanie symboliczne. Możesz także użyć-T
lub,--no-target-directory
aby zapewnić, że plik docelowy będzie zawsze traktowany jako zwykły plik.Powodują one nieco inne zachowanie, jak pokazuje poniższy przykład. Załóżmy, że
src
jest jakiś plik,dirlink
jest dowiązaniem symbolicznym do katalogu idir
jest rzeczywistym katalogiem.Używanie
-n
:ln -sfn src dirlink
nadpisujedirlink
i łączy go zsrc
ln -sfn src dir
tworzy linkdir/src -> src
Używanie
-T
:ln -sfT src dirlink
nadpisujedirlink
i łączy go zsrc
ln -sfT src dir
wyświetla komunikat o błędzie:ln: ‘dir’: cannot overwrite directory
źródło
cannot overwrite directory
?ln
sam nie usuwa katalogów - prawdopodobnie byłby to zły pomysł, ponieważ wymagałby rekurencyjnego usuwania prawdopodobnie dużej liczby plików.