/etc/init.d/sudo
저는 Ubuntu 14.04 Linux 시스템에서 이 스크립트를 보고 있습니다. 대본을 읽다가 이런 문구를 발견했습니다.
find /var/lib/sudo -exec touch -d @0 '{}' \;
여기서 요점은 무엇입니까 @0
? 위의 진술은 무엇을 하는가?
답변1
bash
이것은 또는 와는 아무 관련이 없습니다 sudo
. 이 find
명령은 -exec
작업을 사용하여 발견된 각 파일에 대해 지정된 명령을 실행합니다. 이 경우 실행되는 명령은 다음과 같습니다.
touch -d @0
man touch
GNU 시스템을 확인해 보면 다음과 같은 내용을 찾을 수 있습니다.
-d, --date=STRING
parse STRING and use it instead of current time
따라서 이는 -d
대상 파일에 설정하려는 날짜를 선택하는 한 가지 방법입니다. GNU 구현에 이것이 다음과 같이 정의된 날짜임을 touch
알려줍니다 .@
touch
에포크 이후 초. 실제로는 0초이므로 UNIX 시간의 시작을 의미한다. 이를 확인하는 쉬운 방법은 date
GNU 명령에 동일한 날짜를 제공하는 것입니다.
$ TZ=UTC date -d @0
Thu Jan 1 00:00:00 UTC 1970
따라서 표시되는 명령은 그 안에 있는 모든 파일과 디렉터리를 찾아 /var/lib/sudo
마지막 수정 날짜를 1970년 1월 1일 목요일 00:00 UTC로 설정합니다.
이 줄이 존재하는 이유는 다음에 잘 설명되어 있습니다.논평다음과 같은:
@crisron 이 줄의 목적은 이전 sudo 인스턴스의 모든 sudo 비밀번호가 만료되었는지 확인하는 것입니다. 사용자가 처음으로 sudo를 실행하면 각 세션마다 이 디렉터리에 파일이 생성됩니다. 그런 다음 Sudo는 다음에 실행될 때 파일의 타임스탬프를 확인하여 비밀번호를 다시 물어볼지 여부를 결정합니다. 이 줄은 sudo 데몬이 다시 시작될 때 사용자가 다음에 sudo 작업을 수행할 때 모든 비밀번호를 다시 입력해야 함을 보장합니다. – 크로우
답변2
@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 확장입니다.
답변3
이 줄은 다음을 수행합니다.
/var/lib/sudo작업 디렉터리를 정의합니다.
-exec 터치 -d @0 '{}' \;수행할 작업입니다. 이를 여러 부분으로 나누어 보겠습니다.
-구현하다실제 행동 전.
터치 -d파일 타임스탬프 구문 분석 매개변수 문자열을 변경하고 현재 시간 대신 사용합니다.
@0타임스탬프이며 다음과 같습니다.
root@debian:/var/log# date -d @0
Wed Dec 31 21:00:00 ART 1969
따라서 결론은 다음과 같습니다.
find 명령이 일치하는 항목을 찾으면 타임스탬프가 Wed Dec 31 21:00:00 ART 1969로 업데이트됩니다.