--no-clobber라는 파일을 덮어쓰지 않는 cp 옵션이 있는 이유는 무엇입니까?

--no-clobber라는 파일을 덮어쓰지 않는 cp 옵션이 있는 이유는 무엇입니까?

cpGNU 재단의 coreutils 팀이 관리하는 매우 인기 있는 Linux 도구입니다.

기본적으로 동일한 이름을 가진 파일은 덮어쓰게 됩니다. 사용자가 이 동작을 변경하려는 경우 --no-clobber복사 명령에 추가할 수 있습니다.

   -n, --no-clobber
          do not overwrite an existing file (overrides a previous -i option)

왜 비슷한 것이 없습니까 --no-overwrite?

답변1

"클로퍼데이터 조작의 맥락에서 ""는 데이터를 덮어써서 파괴하는 것을 의미합니다. Unix 환경에서 파일의 맥락에서 이 용어의 사용은 적어도 1980년대 초반, 그리고 아마도 그 이전까지 거슬러 올라갑니다.돌을 자르다기존 파일 덮어쓰기를 거부하도록 set noclobber구성 해야 합니다 (나중에 ksh93 및 기타 sh 스타일 셸에서). 언제>set -o noclobberGNU coreutils 추가 --no-clobber(2009), 그는 Shell과 동일한 어휘를 사용했습니다.

답변2

왜냐하면 이것은 실제로 표준 용어이기 때문입니다. 설명된 대로위키피디아:

소프트웨어 공학에서 파일이나 컴퓨터 메모리를 손상시키는 것은 해당 내용을 덮어쓰는 것입니다. 전문 용어 파일은 파괴를 다음과 같이 정의합니다.

덮어쓰기(대개는 의도하지 않음): "나는 배열 끝에서 걸어나와 스택을 파괴했습니다." 녹색 잔디, 낙서, 쓰레기 및 부서진 스택을 비교하십시오.

같은 페이지에서 언급했듯이 bash 및 기타 쉘에서도 이 용어 set -o noclobber또는 동등한 용어를 사용합니다. 이런 종류의 일을 가리키는 표준 용어일 뿐입니다 cp.

답변3

"clobber"라는 용어는 컴퓨팅 커뮤니티에서 잘 알려져 있습니다.

--no-clobber/옵션은 2009-01-14에 Kamil Dudka에 의해서만 추가 -n되었습니다 . <cp[이메일 보호됨]>(github에 제출).

특히 GNU 프로젝트에서는 GCC에서도 사용됩니다.CPU 명령이나 인라인 asm 문이 레지스터의 내용을 손상시키는 경우를 설명합니다. 따라서 이는 무작위로 선택된 영어 단어가 아니며 C로 작성된 GNU 프로젝트에 참여하는 사람들은 적어도 GCC 문서나 이 용어를 사용하는 다른 GNU 프로젝트 개발자의 용어 사용에 익숙할 것입니다.

  • (clobber x)존재하다GCC - 내부 머신 설명 파일ISA의 각 명령어가 수행하는 작업을 GCC에 알려줍니다. (인라인 어셈블리와 유사한 제약 조건)
  • GNU C 확장 어셈블리inline asm()문에는 인라인 asm 템플릿 단계를 등록한 컴파일러를 알려주는 "clobber" 부분이 있습니다. 이 쓸모없고 무의미한 x86 예제처럼:
    asm("xor %eax,%eax; mfence" ::: "eax", "memory", "cc");. 예를 들어그래서 Q&A이 용어의 함수 호출 규칙에 대해 문의하세요.
  • GCC 문서~을 위한-fcall-used-reg주어진 레지스터가 함수 호출(즉, 호출 규칙 조정)에 의해 "파괴"된다는 것을 컴파일러에 알리는 것으로 설명하십시오. 상대적인-fcall-saved-reg또는-ffixed-reg.
  • 걸프 협력 협의회-Wclobberedwarning - "longjmp 또는 vfork에 의해 변경되었을 수 있는 변수에 대해 경고합니다."(이 단어가 2009년에 존재했는지는 모르겠지만 옵션을 포함하여 이러한 항목을 설명하기 위해 이 단어가 다양한 맥락에서 사용되었음을 시사합니다.) 다른 프로그램 이름으로).

추가된 coreutils 커밋의 작성자인 Kamil Dudka는 --no-clobber확실히 GCC 내부에 대해 잘 알고 있습니다. 그는 (나중에?)GCC 플러그인을 작성했습니다.C 프로그램의 공식 검증을 위해.

GCC 내부가 그의 이름 선택에 영향을 미쳤는지, 아니면 이것이 기존 쉘 옵션(예: )에서 나온 것인지, 아니면 둘 다에서 나온 것인지는 모르겠습니다 set noclobber.

재미있는 사실: GNU의 원저자 중에는 cp주 저자인 Torjorn Granlund가 있습니다.gmplib 프로젝트(GNU 다중 정밀도), 컴파일 타임 상수로 나누기 위한 GCC의 곱셈 역 최적화를 발명/구현하는 데 도움을 주었습니다(1994년 논문, 스택 오버플로Q&A).

관련 정보