4 votes

pourquoi les commandes *NIX ont-elles des valeurs par défaut aussi "folles" (contre-intuitives) (réflexion philosophique) ?

Pourquoi la plupart des commandes *NIX (mon expérience est principalement Linux et de rares rencontres avec FreeBDS) ont des comportements par défaut si "fous" (non intuitifs), c'est-à-dire TRES différents de ce que l'action GUI "équivalente" ferait.

L'exemple le plus évident est la commande de copie de fichier, cp qui, par défaut sous Linux, (1) ne copie pas les répertoires de manière récursive (ce qui est évidemment contre-intuitif pour quiconque vient au Shell après avoir utilisé une interface graphique où un copier/coller copie un répertoire et tout ce qu'il contient) et (2) suit les simlinks ( !!) au lieu de simplement les copier tels quels (à nouveau, comme tout utilisateur d'interface graphique s'y attendrait). Donc la version "saine" de cp qui, j'imagine, devrait être par défaut est quelque chose comme : cp -r .

(Et encore une fois, il ne s'agit pas d'une perspective "biaisée" propre à quelqu'un qui n'a utilisé qu'une interface graphique auparavant. La commande DOS copy par exemple, fait ce que vous attendez, comme un équivalent de cp -r o cp -ra ...)

Un autre exemple évident est le rm quand rm -ri est ce que tout non-Shell-geek s'attendrait à ce que ce soit la valeur par défaut.

Et cela continue avec 90% de toutes les commandes *NIX où ce que vous attendez intuitivement comme étant la valeur par défaut est quelque chose que vous obtenez en ajoutant quelques options supplémentaires. Et ce n'est pas comme si ce qu'un utilisateur avancé attend d'être par défaut n'est pas ce qu'un utilisateur novice fait, pour des choses comme cp y rm il est évident que 99% du temps cp -r y rm -r est ce dont vous avez besoin. Et ce n'est pas comme si les choses avaient juste besoin de rester de cette façon pour la rétrocompatibilité, car vous pouvez simplement créer un nouveau Shell et garder #/usr/bin/oldshell ou quelque chose pour l'ancien.

Donc, encore une fois, la question serait de savoir pourquoi les options/interrupteurs par défaut des commandes *NIX Shell sont si éloignés de ce que vous attendez intuitivement ? Où puis-je trouver des arguments historiques pour justifier l'état actuel des choses (même à des fins anecdotiques) et quelles sont les raisons autres que l'odieuse rétrocompatibilité pour l'état actuel des choses ?


Trouvé este sur unix.stackexchange qui répond en fait à BEAUCOUP de mes questions...

2voto

Les commandes font exactement ce qu'on attend d'elles. Vous pouvez découvrir ce qu'il est raisonnable d'attendre d'une commande en consultant la page de manuel de cette commande.

E.G.

homme cp : -i, --interactif invite avant l'écrasement (remplace une option précédente -n)

Si vous vous dites que certaines options sont bonnes à avoir en permanence, il existe plusieurs façons de persister dans vos choix. Vous pouvez par exemple taper :

alias rm="rm -i"
alias cp="cp -r"

Mais cela ne durera que jusqu'à ce que vous vous déconnectiez. Pour rendre ces options permanentes, vous pouvez placer ces alias dans un fichier qui est lu par votre Shell chaque fois que vous vous connectez. Si vous exécutez bash, vous pouvez placer vos commandes de démarrage dans ~/.bashrc. En général, ~/.profile est également un bon endroit pour mettre des alias.


L'état actuel des choses, en ce qui concerne les shells et les utilitaires de ligne de commande, est loin d'être désagréable. Le choc initial de l'utilisation d'un terminal au lieu d'un navigateur graphique peut vous laisser perplexe et peut-être un peu enragé, mais seulement après quelques années. Vous vous y habituerez et rirez du temps où vous pensiez qu'un navigateur graphique était "l'état actuel des choses".

Dans un souci de bonne volonté, et pour vous souhaiter la bienvenue dans le monde de l'interface de ligne de commande, je vais vous donner quelques-uns de mes alias préférés. Et je vous dirai que cp -i et rm -i sont de loin les meilleures commandes par défaut, car il est très facile de faire une erreur et de supprimer beaucoup de fichiers sans le vouloir. Je ne suis pas d'accord avec l'option récursive cependant.

# basic file manipulation, etc
alias cd....='cd ../..'
alias  cd...='cd ../..'
alias   cd..='cd ..'
alias    cd.='cd .'
alias    cd~='cd ~'
alias   ....='cd ../..'
alias    ...='cd ../..'
alias     ..='cd ..'
alias      ~='cd ~'

alias ls='ls --color=auto'
alias l='ls -CF'
alias l1='ls -1'
alias ll='ls -l'
alias lla='ls -la'
alias la='ls -a'

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mc='mv -i'

alias md="mkdir"
alias rd="rmdir"

alias less="less -i"
alias bc="bc -q"
alias KA="killall"

alias swipe='screen -wipe'
alias sdr='screen -dR $1'

# and some functions: 

spelling ()  {      echo $@ | LC_ALL=en_US aspell -a; }

google-search () {
    BROWSER="firefox '%s' &"
    args="${@}";
    args=`echo $args | sed 's/ /%20/g'`;
    url="https://www.google.no/search?hl=en&um=1&sa=1&q=";
    printf "$BROWSER\n" "$url$args" | sh
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X