Почему отличается завершение удара символьной ссылки, чем каталог?

Это нормально. Файл после > не открыто процессом, работающим под sudo, но оболочкой, которая не является. Попробуйте это вместо этого:

printf "foo" | sudo tee /etc/file
4
03.06.2011, 19:26
2 ответа

Это не удар, это - находка; хотя Вы найдете, что большинство утилит будет следовать за тем же принципом:

  • При работе на содержание файла символьная ссылка на регулярный файл эквивалентна фактическому файлу.
  • При работе на записи каталога символьные ссылки являются собственной категорией.

Когда Вы работаете find $SYMLINK, find видит объект, который не является каталогом, таким образом, он не пересекает его. Если Вы хотите рассматривать символьную ссылку на каталог, как будто случалось так, что каталог, добавляют a / в конце (несколько поврежденных систем или команд могут потребовать "$SYMLINK/."):

find "$SYMLINK/" -name file.c

Для find, можно также использовать -H опция, которая говорит этому рассматривать любую символьную ссылку на командной строке, как будто Вы указали цель:

find -H "$SYMLINK" -name file.c
6
27.01.2020, 20:49

Это не bash, это find. Следующие символьные ссылки в рекурсивном обходе каталога часто приводят к бесконечным циклам (рассмотрите общий прием ln -s foo . обеспечить путь совместимости). POSIX find включает -follow предикат для переопределения этого; возможно, более полезно в этом случае, GNU находит, обеспечивает -H следовать только за символьными ссылками, непосредственно указанными как параметры, продолжая стараться не разворачивать символьные ссылки, найденные во время обхода. Вы могли использовать их с псевдонимом:

alias find='find -H'
3
27.01.2020, 20:49
  • 1
    Для -follow и -H, это - противоположное: -H POSIX, -follow GNU (и другой) расширение. –  Gilles 'SO- stop being evil' 03.06.2011, 19:26
  • 2
    @Gilles: ха, я признаюсь, что не проверил стандарт POSIX конкретно, но -follow предшествует POSIX. –  geekosaur 03.06.2011, 19:28

Теги

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