Quelles sont les différences entre l'utilisation du terminal sur un Mac et Linux? [fermé]

89

J'utilise Ubuntu depuis quatre ans.
J'ai une connaissance de base des commandes shell et je préfère travailler dans un terminal plutôt que d'utiliser une interface graphique. Récemment, j'ai commencé à utiliser un Mac.

J'ai essayé quelques commandes de terminal (que j'utilise sur Ubuntu) dans le terminal Mac et il semble répondre essentiellement de la même manière.

Y a-t-il des différences significatives dans les commandes que j'utilise, les tâches qu'elles exécutent ou l'environnement shell dont je devrais être conscient?

Dili
la source
8
Je voudrais rouvrir et passer à l'échange de programmeurs.
Michael Durrant
1
Existe-t-il une liste complète des commandes de terminal Mac vs Linux n'importe où sur le Web?
jasonleonhard

Réponses:

61

Si vous avez effectué une nouvelle installation ou une nouvelle installation d'OS X version 10.3 ou plus récente, le shell du terminal utilisateur par défaut est bash.

Bash est essentiellement une version améliorée et gratuite GNU du shell Bourne original, sh. Si vous avez une expérience antérieure avec bash (souvent la valeur par défaut sur les installations GNU / Linux), cela rend l'expérience de la ligne de commande OS X familière, sinon envisagez de passer votre shell soit à tcsh, soit à zsh, car certains les trouvent plus conviviales.

Si vous avez mis à niveau ou que vous utilisez OS X version 10.2.x, 10.1.x ou 10.0.x, le shell utilisateur par défaut est tcsh, une version améliorée de csh ('c-shell'). Les premières implémentations étaient un peu boguées et la syntaxe de programmation un peu bizarre, donc cela a développé une mauvaise réputation.

Il existe encore des différences fondamentales entre mac et linux, comme Gordon Davisson le répertorie si bien, par exemple non useraddsur Mac et ifconfigfonctionne différemment.

Le tableau suivant est utile pour connaître les différents shells Unix.

sh      The original Bourne shell   Present on every unix system 
ksh     Original Korn shell         Richer shell programming environment than sh 
csh     Original C-shell            C-like syntax; early versions buggy 
tcsh    Enhanced C-shell            User-friendly and less buggy csh implementation 
bash    GNU Bourne-again shell      Enhanced and free sh implementation 
zsh     Z shell                     Enhanced, user-friendly ksh-like shell

Vous pouvez également trouver ces guides utiles:

http://homepage.mac.com/rgriff/files/TerminalBasics.pdf

http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html

Sur une note finale, je suis sous Linux (Ubuntu 11) et Mac osX donc j'utilise bash et ce que j'aime le plus est de personnaliser le fichier .bashrc (source .bash_profilesur OSX) avec des alias, quelques exemples ci-dessous. J'ai maintenant placé tous mes alias dans un fichier .bash_aliases séparé et je l'inclus avec:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

dans le fichier .bashrc ou .bash_profile.

Notez qu'il s'agit d'un exemple de différence mac-linux car sur un Mac, vous ne pouvez pas avoir le--color=auto . La première fois que j'ai fait cela (sans le savoir), j'ai redéfini lscomme invalide ce qui était un peu alarmant jusqu'à ce que je le supprime --auto-color!

Vous pouvez également trouver https://unix.stackexchange.com/q/127799/10043 utile

# ~/.bash_aliases
# ls variants
#alias l='ls -CF' 
alias la='ls -A' 
alias l='ls -alFtr' 
alias lsd='ls -d .*' 
# Various
alias h='history | tail'
alias hg='history | grep'
alias mv='mv -i' 
alias zap='rm -i'
# One letter quickies:
alias p='pwd'
alias x='exit'
alias {ack,ak}='ack-grep'
# Directories
alias s='cd ..'
alias play='cd ~/play/'
# Rails
alias src='script/rails console'
alias srs='script/rails server'
alias raked='rake db:drop db:create db:migrate db:seed' 
alias rvm-restart='source '\''/home/durrantm/.rvm/scripts/rvm'\'''
alias rrg='rake routes | grep '
alias rspecd='rspec --drb '
#
# DropBox - syncd
WORKBASE="~/Dropbox/97_2012/work"
alias work="cd $WORKBASE"
alias code="cd $WORKBASE/ror/code"
#
# DropNot - NOT syncd !
WORKBASE_GIT="~/Dropnot"
alias {dropnot,not}="cd $WORKBASE_GIT"
alias {webs,ww}="cd $WORKBASE_GIT/webs"
alias {setups,docs}="cd $WORKBASE_GIT/setups_and_docs"
alias {linker,lnk}="cd $WORKBASE_GIT/webs/rails_v3/linker"
#
# git
alias {gsta,gst}='git status' 
# Warning: gst conflicts with gnu-smalltalk (when used).
alias {gbra,gb}='git branch'
alias {gco,go}='git checkout'
alias {gcob,gob}='git checkout -b '
alias {gadd,ga}='git add '
alias {gcom,gc}='git commit'
alias {gpul,gl}='git pull '
alias {gpus,gh}='git push '
alias glom='git pull origin master'
alias ghom='git push origin master'
alias gg='git grep '
#
# vim
alias v='vim'
#
# tmux
alias {ton,tn}='tmux set -g mode-mouse on'
alias {tof,tf}='tmux set -g mode-mouse off'
#
# dmc
alias {dmc,dm}='cd ~/Dropnot/webs/rails_v3/dmc/'
alias wf='cd ~/Dropnot/webs/rails_v3/dmc/dmWorkflow'
alias ws='cd ~/Dropnot/webs/rails_v3/dmc/dmStaffing'
Michael Durrant
la source
1
J'aime la zshcomplétion de classe Java par défaut.
Dave Newton
merci de me rappeler que la couleur se comporte différemment sur les commandes linux et macos ls. J'utilise le même bashrc pour les deux et je dois trouver un moyen d'utiliser conditionnellement une option ls ou l'autre pour m'assurer que ls obtient toujours des couleurs.
Bastian le
Je vais l'utiliser pour utiliser conditionnellement l'une des options ls ou l'autre selon le système d'exploitation: _myos = "$ (uname)" puis cas $ _myos sous Linux) alias foo = '/ path / to / linux / bin / toto ';; FreeBSD | OpenBSD) alias foo = '/ chemin / vers / bsd / bin / foo' ;; *) ;; esac
Bastian
1
Bastian, vous pouvez avoir des couleurs pour lsLinux ( --color=all) et OSX ( -G) avec ce qui suit: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant
Le lien TerminalBasics.pdf semble être mort. Est- ce le même document?
Plasma
29

La réponse de @Michael Durrant couvre habilement le shell lui-même, mais l'environnement du shell comprend également les différentes commandes que vous utilisez dans le shell et celles-ci vont être similaires - mais pas identiques - entre OS X et Linux. En général, les deux auront les mêmes commandes et fonctionnalités de base (en particulier celles définies dans le standard Posix), mais de nombreuses extensions seront différentes.

Par exemple, les systèmes Linux ont généralement une useraddcommande pour créer de nouveaux utilisateurs, mais pas OS X. Sous OS X, vous utilisez généralement l'interface graphique pour créer des utilisateurs; si vous devez les créer à partir de la ligne de commande, vous utilisez dscl(ce que Linux n'a pas) pour éditer la base de données utilisateur (voir ici ). (Mise à jour: à partir de macOS High Sierra v10.13, vous pouvez utiliser à la sysadminctl -addUserplace.)

De plus, certaines commandes qu'ils ont en commun auront des fonctionnalités et des options différentes. Par exemple, les Linux incluent généralement GNU sed, qui utilise l' -roption pour appeler des expressions régulières étendues; sur OS X, vous utiliseriez l' -Eoption pour obtenir le même effet. De même, sous Linux, vous pouvez utiliser ls --color=autopour obtenir une sortie colorisée; sur macOS, l'équivalent le plus proche est ls -G.

EDIT: Une autre différence est que de nombreuses commandes Linux permettent de spécifier des options après leurs arguments (par exemple ls file1 file2 -l), tandis que la plupart des commandes OS X exigent que les options soient strictement prioritaires ( ls -l file1 file2).

Enfin, comme le système d'exploitation lui-même est différent, certaines commandes se comportent différemment entre les systèmes d'exploitation. Par exemple, sous Linux, vous utiliseriez probablement ifconfigpour modifier la configuration de votre réseau. Sous OS X, ifconfigfonctionnera (probablement avec une syntaxe légèrement différente), mais vos modifications sont susceptibles d'être écrasées aléatoirement par le démon de configuration du système; à la place, vous devez modifier les préférences réseau avec networksetup, puis laisser le démon de configuration les appliquer à l'état du réseau en direct.

Gordon Davisson
la source
3
Grands points Gordon! Je vais +1 même si j'ai une réponse aussi;) - ne devrais-je pas avoir du crédit pour ça?!
Michael Durrant
1
Surtout que la vôtre est une assez bonne réponse en soi; Je vous ai également donné un vote.
Gordon Davisson