web-dev-qa-db-fra.com

Pourquoi l'option de CP est-elle de non-écraser les fichiers appelés --No-Clobber?

cp est un outil Linux massivement populaire maintenu par l'équipe Coreutils de la GNU Foundation.

Par défaut, les fichiers avec le même nom seront écrasés si l'utilisateur souhaite modifier ce comportement, ils peuvent ajouter --no-clobber à leur commande de copie:

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

Pourquoi pas quelque chose comme --no-overwrite?

23
Tomas Zubiri

"- CLOBBER " Dans le contexte de la manipulation des données, signifie détruire des données en l'écrasant. Dans le contexte des fichiers dans un environnement UNIX, le mot a été utilisé au moins aussi loin que le début des années 1980, éventuellement plus tôt. CSH avait set noclobber configurer > Pour refuser d'écraser un fichier existant (plus tard set -o noclobber dans ksh93 et ​​autres coquilles de style SH). Quand GNU Coretutils ajouté--no-clobber (en 2009), ils ont utilisé le même vocabulaire que les coquilles utilisaient.

Parce que c'est en fait un terme standard. Comme expliqué dans Wikipedia :

Dans l'ingénierie logicielle, clobberer un fichier ou une mémoire d'ordinateur écrase son contenu. Le fichier de jargon définit des cloctes comme

Pour écraser, généralement involontairement: "Je suis sorti de la fin de la matrice et j'ai écrasé la pile." Comparez Mung, Scribble, Corbeille et écrasez la pile.

Comme mentionné sur la même page, Bash et d'autres obus utilisent également le terme dans leur set -o noclobber ou équivalent. Ceci est juste le terme standard pour ce genre de chose, donc c'était un choix naturel pour les développeurs de cp.

26
terdon

Le terme "clobber" est bien connu dans l'informatique en général.

Le --no-clobber/-n Option pour cp n'a été ajouté que le 2009-01-14 de Kamil Dudka <[email protected]> ((( commettre Github ).

Spécialement dans le projet GNU, il est également utilisé dans GCC pour décrire lorsqu'une instruction CPU ou une instruction ASM en ligne détruit le contenu d'un registre. Donc, ce n'est pas un mot de choix aléatoire anglais, et il n'est pas improbable que les personnes travaillant sur GNU projets écrits en C auraient au moins familier en passant avec l'utilisation du terme des documents de la GCC ou de l'autre GNU Développeurs de projet en l'utilisant:

  • (clobber x) Dans Les fichiers de description de la machine GCC-interne qui enseignent à la GCC à quoi chaque instruction dans un ISA fait. (Contraintes similaires à inline-ASM)
  • GNU C Étendu ASM Inline asm() Les instructions ont une section "Clobber" pour indiquer au compilateur qui enregistre les étapes de modèle ASM inline. Comme cet exemple non habituel inutile x86:
    asm("xor %eax,%eax; mfence" ::: "eax", "memory", "cc");. par exemple. An , Q & A (+++) sur une convention d'appel de la fonction dans ces termes.
  • GCC DOCS pour -fcall-used-reg Décrivez-le comme indiquer au compilateur qu'un registre donné est "Clobbered" par des appels de fonctions (c'est-à-dire modifier la convention appelante). Contrairement à -fcall-saved-reg ou -ffixed-reg.
  • GCC -Wclobbered Avertissement - "Avertissez-vous pour les variables pouvant être modifiées par LONGJMP ou VFORK." (IDK Si cela existait en 2009, mais il démontre que ce mot est utilisé pour décrire ce type de chose dans divers contextes, y compris les noms d'options d'autres programmes).

L'auteur des Coreutils commettant qui a ajouté --no-clobber, Kamil Dudka, est définitivement familiarisé avec GCC Internals: il (plus tard?) a écrit un plug-in GCC pour une vérification formelle des programmes C .

Je ne sais pas si les internauaux de GCC ont influencé son choix de nom, ou si cela provenait des options de shell existantes telles que set noclobber, Ou les deux.

FAIT FUN: Auteurs originaux de GNU _ cp inclut Torjorn Granlund, auteur principal de Le projet GMPLIB (GNU Multi-Precision), et qui a aidé à inventer/Implémentez l'optimisation multiplicative-inverse de GCC pour la division par une constante de la compilée ( du papier de 1994 , débordement de pile Q & A ).

4
Peter Cordes