에서 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
그것이 무엇을 의미하는지, 어떤 역할을 하는지 궁금합니다.
답변1
GNU 유틸리티의 경우 전체 문서는 info
다음 페이지에 있습니다.
-f
무시됩니다. "터치"의 BSD 버전과 호환됩니다.
바라보다역사적인 BSD 터치 매뉴얼 페이지, -f
어디로 가야힘만지다.
그 옛날 BSD의 소스코드를 보면 utimes()
시스템 콜이 없기 때문에touch
읽기+쓰기 모드로 파일을 열고, 1바이트를 읽고, 역추적하고 다시 쓰기하여 마지막 액세스 및 마지막 수정 시간을 업데이트합니다..
분명히 둘 다 필요합니다.읽다그리고쓰다권한(touch
access(W_OK|R_OK)
false를 반환하면 이 작업을 수행하지 않아도 됩니다.). -f
이 문제를 해결하려고일시적으로 권한을 0666으로 변경합니다.!
0666은 모든 사람이 읽기 및 쓰기 권한을 가지고 있음을 의미합니다. 그렇지 않으면 (0600과 같이 더 제한적인 권한을 사용하는 것처럼 여전히 허용됩니다)만지다) 이는 이 짧은 기간 동안 파일에 대한 읽기 또는 쓰기 액세스 권한이 있는 프로세스가 더 이상 액세스할 수 없게 되어 손상을 입힐 수 있음을 의미할 수 있습니다.특징.
그러나 이는 파일에 액세스할 수 없었던 프로세스가 이제 파일을 열 수 있는 짧은 기회를 가지게 되어 파일을 파기한다는 의미입니다.안전.
이것은 별로 현명한 일이 아닙니다. 현대 touch
구현에서는 이를 수행하지 않습니다. 그때부터,utime()
시스템 호출파일 내용과 섞이지 않고(비정규 파일에도 작동함을 의미) 수정 및 액세스 시간을 독립적으로 변경할 수 있도록 하기 위해 도입되었으며 쓰기 액세스만 필요합니다.
이 옵션이 전달되면 GNU는 touch
여전히 실패하지 않고 -f
플래그를 무시합니다. 이렇게 하면 이전 버전의 BSD용으로 작성된 스크립트를 GNU 시스템으로 이식할 때 실패하지 않습니다. 요즘은 별로 관련성이 없습니다.
답변2
-f
아무것도 하지 않았습니다. 이는 기록 호환성( touch
및 참조에 따르면 BSD와의 호환성 info touch
)을 위해 유지되므로 해당 존재를 기대하는 응용 프로그램은 이를 통과하지 못하고 존재하지 않는다는 오류 메시지를 반환합니다. 이것이 GNU coreutils라고 가정하면 다음을 볼 수 있습니다.소스 코드에서이는 break
옵션 처리 스위치 외부의 작업만 수행합니다.
무시되는 옵션으로 -f
1992년에 추가된 GNU 명령의 첫 번째 버전 이후부터 존재했습니다 touch
(차이점 보기). 적어도 FreeBSD v9에서는 -f
"파일 권한이 현재 허용하지 않더라도 강제로 업데이트를 시도"하는 것 같습니다(Sukmininder가 발견했습니다. 감사합니다).
답변3
언제든지--help 출력 또는 맨페이지에 "옵션 X 무시됨"이 표시됩니다. 이는 다음을 의미합니다.수용하다옵션 X - 구문 오류가 발생하지 않지만 효과는 없습니다. 프로그램은 이 옵션이 없을 때와 동일한 작업을 수행합니다.
다른 답변에서 알 수 있듯이 이는 이전 버전과의 호환성을 위해 수행됩니다. 옵션사용된어떤 효과를 내기 위해서는 그것이 무엇이든 더 이상 유용하지 않으며 옵션에 관계없이 동일한 작업을 수행하는 것이 올바른 호환성 동작입니다.
답변4
댓글을 읽으면서과거 소스 코드, 22행:
22 -f (ignored)\n\
-f 옵션은 Jim Meyering의 초기 릴리스 이후로 무시됩니다.
아무 작업도 수행하지 않는 옵션을 처리하는 스위치 문의 명시적인 경우(150/151행)가 있습니다.
150 case 'f':
151 break;
다음 저자들이 1992년 이후 이 옵션을 무시하게 된 이유는 주목할 가치가 있습니다. -f 옵션이 필요한 사용 사례가 있거나 중단될 수 있습니까?