--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년대 초반, 아마도 그 이전까지 사용되었습니다.Csh기존 파일 덮어쓰기를 거부하도록 set noclobber구성 해야 했습니다 (나중에 ksh93 및 기타 sh 스타일 셸에서). 언제>set -o noclobberGNU coreutils가 추가되었습니다. --no-clobber(2009년) 그들은 쉘이 사용했던 것과 동일한 어휘를 사용했습니다.

답변2

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

소프트웨어 엔지니어링에서 파일이나 컴퓨터 메모리를 망가뜨리는 것은 해당 내용을 덮어쓰는 것입니다. 전문 용어 파일은 클로버링을 다음과 같이 정의합니다.

덮어쓰려면 일반적으로 의도하지 않게 "배열의 끝에서 벗어나 스택을 뭉개버렸습니다." 녹말, 낙서, 쓰레기를 비교하고 더미를 부수십시오.

같은 페이지에서 언급했듯이 bash 및 기타 쉘에서도 해당 용어를 사용 set -o noclobber하거나 이에 상응하는 용어를 사용합니다. 이는 이런 종류의 일을 가리키는 표준 용어일 뿐이므로 cp.

답변3

"clobber"라는 용어는 일반적으로 컴퓨팅 분야에서 잘 알려져 있습니다.

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

특히 GNU 프로젝트 내에서는 GCC에서도 사용됩니다.CPU 명령어나 인라인 asm 문이 레지스터의 내용을 파괴하는 경우를 설명합니다. 따라서 이는 무작위로 선택되는 영어 단어가 아니며, C로 작성된 GNU 프로젝트에 참여하는 사람들이 최소한 GCC 문서나 이 용어를 사용하는 다른 GNU 프로젝트 개발자의 용어 사용에 익숙할 가능성은 없습니다.

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

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

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

재미있는 사실: GNU의 원저자는 다음 cp의 주요 저자인 Torjorn Granlund입니다.gmplib 프로젝트(GNU Multi-Precision), 컴파일 시간 상수로 나누기 위한 GCC의 곱셈 역 최적화를 발명/구현하는 데 도움을 준 사람(1994년 논문, 스택 오버플로Q&A).

관련 정보