태그 보관물: touch

touch

`touch`에 -f 옵션을 사용하는 것은 무엇입니까? 20 16:17 file $ touch

보낸 사람 man touch:

-f     (ignored)

하지만 의미가 무엇하지 않는 무시 .

나는 다음을 시도했다.

$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:17 file

$ touch -f file
$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:18 file

에도 불구하고 타임 스탬프가 변경 -f됩니다.

그래서 나는 무엇이 무엇을 -f의미 하는지 알고 싶습니다 .



답변

GNU 유틸리티의 경우 전체 설명서는 다음 info페이지에서 읽을 수 있습니다.

-f
무시 `touch ‘의 BSD 버전과 호환됩니다.

참조 터치 역사적인 BSD 맨 페이지 , -f하는 것이었다 강제 터치합니다.

이전 BSD의 소스를 살펴보면 utimes()시스템 호출 이 없었 으므로 touch파일을 읽기 + 쓰기 모드로 열고 1 바이트를 읽은 다음 다시 검색하여 마지막 액세스 및 마지막 수정 시간을 업데이트하기 위해 다시 쓰십시오 .

분명히, 읽기쓰기 권한이 모두 필요했습니다 ( false touchaccess(W_OK|R_OK)반환 된 경우 시도하지 마십시오 ). 일시적으로 권한을 0666으로 변경하여-f 그 문제를 해결하려고했습니다 !

0666은 모든 사람에게 읽기 및 쓰기 권한을 의미합니다. 그 짧은 창에서 의미 할 수 있는 다른 방법 (예 : 여전히 터치를 허용 한 0600과 같은보다 제한적인 권한)과 달리 파일에 대한 읽기 또는 쓰기 권한이있는 프로세스는 더 이상 할 수 없었습니다. 기능을 깨고 .

그러나 그렇지 않으면 파일에 액세스 할 수없는 프로세스는 이제 파일을 열 기회가 짧아 보안이 손상 됩니다.

그것은 매우 합리적인 일이 아닙니다. 현대의 touch구현은 그렇게하지 않습니다. 그 이후로 utime()시스템 호출 이 도입되어 파일의 내용과 어울리지 않고 수정 및 액세스 시간을 개별적으로 변경할 수 있습니다 (즉, 비정규 파일과도 작동 함).

옵션을 touch통과해도 GNU는 여전히 실패하지 않지만 -f플래그를 무시합니다. 이런 식으로, 이전 버전의 BSD 용으로 작성된 스크립트는 GNU 시스템으로 이식 될 때 실패하지 않습니다. 요즘 관련성이 적습니다.


답변

-f아무것도하지 않습니다. 역사적 호환성 (BSD touch에 따라 info touch) 과 함께 유지 되므로 존재한다고 예상되는 응용 프로그램은 그것을 전달하지 않고 존재하지 않는다는 오류 메시지를 다시받습니다. 이것이 GNU coreutils라고 가정하면 소스 에서 이것이 break아무것도하지 않고 옵션 처리 스위치에서 수행한다는 것을 알 수 있습니다.

무시 된 옵션으로, 1992 년에 추가 된 -fGNU touch명령 의 첫 번째 버전 에서 제공됩니다 ( diff 참조 ). 적어도 FreeBSD v9에서는 -f“파일 권한이 현재 그것을 허용하지 않는 경우에도 강제로 업데이트를 시도합니다”(Sukminder에 의해 발견됨).


답변

–help 출력 또는 맨 페이지에 “옵션 X가 무시 됨”이 표시 될 때마다 프로그램 옵션 X를 수락 합니다. 구문 오류는 발생하지 않지만 아무런 영향을 미치지 않습니다. 프로그램은 옵션이 없을 때와 똑같은 작업을 수행합니다.

다른 답변에서 알 수 있듯이 이전 버전과의 호환성을 위해 수행됩니다. 옵션 사용 이했던 어떤 어떤 효과가 더 이상 유용하지 않으며, 옵션에 관계없이 같은 일을하고있는 것은 바로 호환성 동작입니다.


답변

역사적인 소스 코드 의 주석 22를 볼 때 :

  22   -f                     (ignored)\n\

Jim Meyering이 처음 릴리스 한 이후 -f 옵션은 무시되었습니다.

그리고 옵션을 처리하기위한 switch 문은 아무것도하지 않는 명백한 경우 (150/151 행)를 가지고 있습니다.

 150         case 'f':
 151           break;

1992 년 이래로이 옵션을 무시한 동기는 다음과 같습니다. -f 옵션이 필요하고 그렇지 않으면 중단되는 사용 시나리오가 있습니까?


답변