Могу ли я сказать, чтобы найти, чтобы не восстановить исходный рабочий каталог?

find не может «восстановить начальный рабочий каталог» при запуске за sudo -u если начальный рабочий каталог не отображается в результатах поиска пользователя. Это приводит к тому, что find всегда печатает раздражающее предупреждающее сообщение с разрешением :

 $ pwd /home/myuser $ sudo -u apache find /home/otheruser -writable find: failed to restore initial working directory: Permission denied 

Каков наилучший способ предотвратить обнаружение отпечатки этого сообщения?

Один из методов заключается в изменении каталога, который пользователь поиска может восстановить, например, cd / , перед запуском find. В идеале мне бы хотелось найти такой вариант, как --do-not-restore-initial-working-directory но я думаю, что это невозможно. 😉

В основном я использую дистрибутивы на основе RedHat.

  • Как создать новый файл и отредактировать его как root?
  • Как создать пользователя sudo, который не может удалить меня?
  • Запустить nvm (функция bash) через sudo
  • Почему рискованно предоставлять sudo vim доступ к обычным пользователям?
  • Сервер Ubuntu 11.10: создание пользователя, домашний каталог, привилегии sudo: только командная строка
  • Невозможно отредактировать / proc / sys / net / core / wmem_max
  • pam_unix (sudo: auth): auth не смог идентифицировать пароль для
  • суперпользователя или пользователя?
  • One Solution collect form web for “Могу ли я сказать, чтобы найти, чтобы не восстановить исходный рабочий каталог?”

    Очистка, по-видимому, является необязательной частью выполнения find .

    https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/find.c#L231

    в main в find.c

      cleanup (); return state.exit_status; } 

    cleanup вызовов cleanup_initial_cwd

    https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/util.c#L534

    и cleanup_initial_cwd фактически изменяет каталог

    https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/util.c#L456

     static void cleanup_initial_cwd (void) { if (0 == restore_cwd (initial_wd)) { free_cwd (initial_wd); free (initial_wd); initial_wd = NULL; } else { /* since we may already be in atexit, die with _exit(). */ error (0, errno, _("failed to restore initial working directory")); _exit (EXIT_FAILURE); } } 

    Вы могли бы попробовать использовать сценарий оболочки, который cd s в / сначала, как вы предложили. (есть некоторые проблемы с этим скриптом, он не может обрабатывать несколько каталогов для поиска, например)

     #!/bin/sh path="$(pwd)/$1" shift cd / exec find "$path" "$@" 

    Вы также можете отфильтровать вывод stderr для удаления нежелательного сообщения

     #!/bin/sh exec 3>&2 exec 2>&1 exec 1>&3 exec 3>&- 3>&2 2>&1 1>&3 3>&- find "$@" | grep -v "^find: failed to restore initial working directory" # not sure how to recover find's exit status exit 0 
    Linux и Unix - лучшая ОС в мире.