Por que a opção do cp de não sobrescrever arquivos é chamada --no-clobber?

Por que a opção do cp de não sobrescrever arquivos é chamada --no-clobber?

cpé uma ferramenta Linux extremamente popular mantida pela equipe coreutils da fundação GNU.

Por padrão, os arquivos com o mesmo nome serão sobrescritos, se o usuário quiser alterar este comportamento pode adicionar --no-clobberao seu comando de cópia:

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

Por que não algo parecido --no-overwrite?

Responder1

Derrubar”no contexto da manipulação de dados significa destruir dados sobrescrevendo-os. No contexto de arquivos em um ambiente Unix, a palavra foi usada pelo menos já no início da década de 1980, possivelmente antes.Cshtive set noclobberque configurar >para recusar a substituição de um arquivo existente (mais tarde set -o noclobberno ksh93 e em outros shells estilo sh). QuandoCoreutils GNU adicionados --no-clobber(em 2009), eles usaram o mesmo vocabulário que os shells usavam.

Responder2

Porque este é na verdade um termo padrão. Como explicado emWikipédia:

Na engenharia de software, destruir um arquivo ou a memória do computador é sobrescrever seu conteúdo. O Jargon File define espancamento como

Para substituir, geralmente de forma não intencional: "Saí do final da matriz e derrotei a pilha." Compare mung, rabisque, jogue fora e destrua a pilha.

Conforme mencionado na mesma página, bash e outros shells também usam o termo em seu set -o noclobberequivalente. Este é apenas o termo padrão para esse tipo de coisa, então foi uma escolha natural para os desenvolvedores do cp.

Responder3

O termo "clobber" é bem conhecido na computação em geral.

A opção --no-clobber/ para só foi adicionada em 14/01/2009 por Kamil Dudka <-ncp[e-mail protegido]> (comprometer no github).

Especificamente dentro do projeto GNU, também é usado no GCCpara descrever quando uma instrução de CPU ou instrução ASM embutida destrói o conteúdo de um registro. Portanto, não é uma palavra em inglês de escolha aleatória, e não é improvável que as pessoas que trabalham em projetos GNU escritos em C estejam pelo menos familiarizadas com o uso do termo nos documentos do GCC ou em outros desenvolvedores de projetos GNU que o utilizam:

  • (clobber x)emArquivos de descrição da máquina internos do GCCque ensinam ao GCC o que cada instrução em um ISA faz. (Restrições semelhantes ao inline-asm)
  • Asm Estendido GNU Cinstruções inline asm()têm uma seção "clobber" para informar ao compilador que registra as etapas do modelo asm inline. Como este exemplo x86 inútil e sem sentido:
    asm("xor %eax,%eax; mfence" ::: "eax", "memory", "cc");. por exemplo, umEntão, perguntas e respostasperguntando sobre uma convenção de chamada de função nesses termos.
  • Documentos do GCCpara-fcall-used-regdescreva-o como dizendo ao compilador que um determinado registro é "derrotado" por chamadas de função (isto é, ajusta a convenção de chamada). Ao contrário de-fcall-saved-regou-ffixed-reg.
  • CCG-Wclobberedwarning - "Avisar sobre variáveis ​​que podem ser alteradas por longjmp ou vfork." (IDK se isso existisse em 2009, mas demonstra que esta palavra é usada para descrever esse tipo de coisa em vários contextos, incluindo nomes de opções em outros programas).

O autor do commit coreutils que adicionou --no-clobber, Kamil Dudka, está definitivamente familiarizado com os componentes internos do GCC: ele (mais tarde?)escreveu um plugin GCCpara verificação formal de programas C.

Não sei se os componentes internos do GCC influenciaram sua escolha de nome, ou se isso veio de opções de shell existentes, como set noclobber, ou ambas.

Curiosidade: os autores originais do GNU cpincluem Torjorn Granlund, autor principal deo projeto gmplib(GNU Multi-Precision), e que ajudou a inventar/implementar a otimização multiplicativa-inversa do GCC para divisão por uma constante de tempo de compilação (artigo de 1994, Estouro de pilhaPerguntas e respostas).

informação relacionada