Как :Найти имя символической ссылки

Решение было дано в комментарии muru .

sudo will read each file in /etc/sudoers.d, skipping file names that end in ‘~’ or contain a ‘.’ character...

https://www.sudo.ws/man/1.8.15/sudoers.man.html#Including_other_files_from_within_sudoers

Как указал Роайма в другом комментарии:

The dot in the username doesn't cause the issue. It's because you chose to put the sudo configuration in a file whose name contains a dot.

В этом-то и была проблема. И решение, которое я проверил, было просто:

sudo mv /etc/sudoers.d/user.name /etc/sudoers.d/username

1
27.10.2020, 11:35
2 ответа

См. документацию в man ln .

Вы использовали 3-ю форму

ln [OPTION]... TARGET... DIRECTORY

, который создаст ссылки для всех TARGET s в DIRECTORY .

Ваша команда создала (или попыталась создать )ссылки для всех файлов и каталогов (и других объектов, если таковые имеются )в /home/orca/www, , но , возможно, это не удалось для некоторых из них, если имя уже существовало в /var. (В этом случае ваша команда могла выводить сообщения об ошибках.)

Поскольку /varобычно не пуст, вы не можете просто удалить все.

Лучшее, что я могу сейчас предложить, это удалить все имена, присутствующие в /home/orca/www, из /var, если это символическая ссылка.

Этот цикл покажет, что будет удалено:

for i in /home/orca/www/*
do
    l=/var/"${i##*/}"
    if [ -h "$l" ]
    then
        echo rm "$l"
    fi
done

Проверьте вывод. Если это то, что вам нужно, удалите echo, чтобы действительно выполнять команды rm.

for i in /home/orca/www/*
do
    l=/var/"${i##*/}"
    if [ -h "$l" ]
    then
        rm "$l"
    fi
done
2
18.03.2021, 22:54

С zsh,

rm /var/*(@m-1)

Будут удалены все символические ссылки в /var, которые были созданы за последние 24 часа.

Пока:

rm /var/*(@m-1e['[[ $REPLY:P = /home/orca/www/* ]]'])

удалит все символические ссылки, созданные за последние 24 часа, чей реальный путь(канонический абсолютный путь )соответствует шаблону /home/orca/www/*(не будет работать должным образом, если /home, /home/orca, /home/orca/wwwили любой из файлов там сами являются символическими ссылками ).

(замените rmна ls -ld, если вы просто хотите просмотреть список перед удалением файлов ).

В GNU findвы также можете:

find /var -maxdepth 1 -mtime -1 -lname '/home/orca/www/*' -delete

Чтобы удалить все символические ссылки в /var, созданные за последние 24 часа, цель которых соответствует шаблону /home/orca/www/*.

(замените -deleteна -ls, если хотите просмотреть список перед удалением файлов)

1
18.03.2021, 22:54

Теги

Похожие вопросы