В данном случае это «альтернатива» Debian, поэтому для получения более подробной информации вы можете использовать:
$ update-alternatives --display gnome-text-editor
gnome-text-editor - auto mode
link best version is /usr/bin/gedit
link currently points to /usr/bin/gedit
link gnome-text-editor is /usr/bin/gnome-text-editor
slave gnome-text-editor.1.gz is /usr/share/man/man1/gnome-text-editor.1.gz
/usr/bin/gedit - priority 50
slave gnome-text-editor.1.gz: /usr/share/man/man1/gedit.1.gz
/usr/bin/leafpad - priority 40
slave gnome-text-editor.1.gz: /usr/share/man/man1/leafpad.1.gz
В общем, в Linux вы можете используйте команду namei
, чтобы узнать обо всех символических ссылках, участвующих в разрешении пути (также точки монтирования с -x
):
$ namei -lx /usr/bin/gnome-text-editor
f: /usr/bin/gnome-text-editor
Drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root bin
lrwxrwxrwx root root gnome-text-editor -> /etc/alternatives/gnome-text-editor
Drwxr-xr-x root root /
drwxr-xr-x root root etc
drwxr-xr-x root root alternatives
lrwxrwxrwx root root gnome-text-editor -> /usr/bin/gedit
Drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root bin
-rwxr-xr-x root root gedit
Для более прямого ответа на ваш вопрос, Я бы сделал что-то вроде:
#! /bin/zsh -
zmodload zsh/stat || exit
ret=0
for file do
n=0
while
ls -ld -- "$file" || ! ret=1 && [ -L "$file" ]
do
if ((++n > 40)) && [ ! -e "$file" ]; then
echo >&2 too many symlinks
ret=1
break
fi
zstat -A target +link -- "$file" || ! ret=1 || break
case $target in
(/*) file=$target;;
(*) file=$file:h/$target
esac
done
done
exit "$ret"
Это может не дать вам всей информации, необходимой для понимания того, что происходит. Сравните, например:
$ ./resolve-symlink b/b/b/b/x/b
lrwxrwxrwx 1 stephane stephane 1 Mar 18 15:37 b/b/b/b/x/b -> a
lrwxrwxrwx 1 stephane stephane 4 Mar 18 15:37 b/b/b/b/x/a -> ../a
lrwxrwxrwx 1 stephane stephane 26 Mar 18 15:15 b/b/b/b/x/../a -> /usr/bin/gnome-text-editor
lrwxrwxrwx 1 root root 35 Nov 5 2013 /usr/bin/gnome-text-editor -> /etc/alternatives/gnome-text-editor
lrwxrwxrwx 1 root root 14 Mar 15 12:21 /etc/alternatives/gnome-text-editor -> /usr/bin/gedit
-rwxr-xr-x 1 root root 10344 Nov 12 17:18 /usr/bin/gedit
С:
$ namei -lx b/b/b/b/x/b
f: b/b/b/b/x/b
lrwxrwxrwx stephane stephane b -> .
drwxr-xr-x stephane stephane .
lrwxrwxrwx stephane stephane b -> .
drwxr-xr-x stephane stephane .
lrwxrwxrwx stephane stephane b -> .
drwxr-xr-x stephane stephane .
lrwxrwxrwx stephane stephane b -> .
drwxr-xr-x stephane stephane .
lrwxrwxrwx stephane stephane x -> 2
drwxr-xr-x stephane stephane 2
lrwxrwxrwx stephane stephane b -> a
lrwxrwxrwx stephane stephane a -> ../a
drwxr-xr-x stephane stephane ..
lrwxrwxrwx stephane stephane a -> /usr/bin/gnome-text-editor
Drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root bin
lrwxrwxrwx root root gnome-text-editor -> /etc/alternatives/gnome-text-editor
Drwxr-xr-x root root /
drwxr-xr-x root root etc
drwxr-xr-x root root alternatives
lrwxrwxrwx root root gnome-text-editor -> /usr/bin/gedit
Drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root bin
-rwxr-xr-x root root gedit
вы можете использовать find как
find. -type d -print0 | xargs -r -0 chmod 0755
find. -type f -print0 | xargs -r -0 chmod 0644
Первый для каталогов chmod и второй для файлов
Вместо использования поиска и восьмеричного режима. Это можно сделать одной командой (При использовании современногоchmod
).
chmod -R u=rw,og=r,+X «directory to be fixed»