Значение @0 в сценарии оболочки

Изменение /etc/sudo-ldap.conf с корректной информацией получил меня хороший результат к sudo -ll для моего проверочного пользователя. Я рассчитываю, который является обходным решением, все же. Это не решает проблему того, почему sudo не будет работать с только локальной информацией.

6
09.09.2014, 01:14
3 ответа

Это не имеет ничего общего с bash или sudo. Команда find использует действие -exec для выполнения данной команды для каждого найденного файла. В этом случае выполняется команда

touch -d @0

Если вы проверите man touch в системе GNU, вы обнаружите, что

   -d, --date=STRING
          parse STRING and use it instead of current time

Таким образом, -d - это способ выбора даты, которую вы хотите, чтобы -touch установил для целевого файла. @ говорит реализации GNU touch, что это дата, определенная как секунды с эпохи. Поскольку на самом деле это 0 секунд, это означает самое начало времени UNIX. Легкий способ проверить это - дать ту же самую дату команде GNU date:

$ TZ=UTC date -d @0
Thu Jan  1 00:00:00 UTC 1970

Итак, команда, которую вы показали, найдет все файлы и каталоги в /var/lib/sudo и установит их последнюю измененную дату на 00:00 UTC в четверг, 1 января 1970 года.


Причина существования этой строки была хорошо объяснена в комментариях ниже:

@crisron Назначение этой строки - гарантировать, что все sudo-пароли из любого предыдущего экземпляра sudo истекли. При первом запуске sudo, для каждого сеанса будет создаваться файл в этом каталоге. Затем при следующем запуске sudo проверяет временной штемпель на файле, чтобы решить, запрашивать или не запрашивать пароль снова. Эта строка гарантирует, что при перезапуске sudo демона все пароли должны быть перепечатаны при следующем запуске пользователем sudo что-нибудь. - krowe

12
27.01.2020, 20:20

Эта строка делает следующее:

/var/lib/sudo определяет рабочую директорию.

-exec touch -d @0 '{}' \; является действием, которое необходимо выполнить. Разделим его на части:

-exec предшествует действительному действию.

touch -d изменяет временные метки файла, разбивая строку аргумента и используя ее вместо текущего времени.

@0 - это метка времени, эквивалентная:

root@debian:/var/log# date -d @0
Wed Dec 31 21:00:00 ART 1969

Итак, итог:

Когда команда find найдет попадание, обновите метку времени до Wed 31 декабря 21:00:00 ART 1969.

4
27.01.2020, 20:20

@ 0 - дата эпохи. И в целом @x - x секунд после эпохи. Например:

$ touch -d @0 foo
$ TZ=UTC0 ls -l foo
-rw-r--r-- 1 vinc17 vinc17 0 1970-01-01 00:00:00 foo

Примечание: опция -D утилиты Touch , указанная posix, но только с строками в формах ISO8601 . Другие формы струн специфичны для каждой реализации, и, в частности, форма @X - это расширение GNU.

4
27.01.2020, 20:20

Теги

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