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 sous Ubuntu) dans le terminal Mac et il semble répondre de la même manière.
Existe-t-il des différences significatives dans les commandes que j'utilise, les tâches qu'elles effectuent ou l'environnement Shell dont je devrais avoir connaissance?
Si vous avez effectué une nouvelle installation ou une installation propre de OS X version 10.3 ou plus récente, le terminal utilisateur par défaut Shell est bash.
Bash est essentiellement une version améliorée et GNU gratuite du Bourne Shell d’origine, sh. Si vous avez déjà utilisé bash (souvent la configuration par défaut sur les installations GNU/Linux), vous serez familiarisé avec l’utilisation de la ligne de commande OS X. Sinon, envisagez de passer de votre shell à tcsh ou à zsh, car certains trouvent cela plus convivial.
Si vous effectuez une mise à niveau à partir de ou utilisez OS X version 10.2.x, 10.1.x ou 10.0.x, l'utilisateur par défaut Shell est tcsh, une version améliorée de csh ('c-Shell'). Les premières implémentations étaient un peu buggées et la syntaxe de programmation un peu bizarre, donc ça a mal tourné.
Gordon Davisson énumère de manière très pertinente certaines différences fondamentales entre mac et linux, par exemple, aucun useradd
sur Mac et ifconfig
ne fonctionnent pas de la même manière.
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
Pour finir, je suis sous Linux (Ubuntu 11) et Mac osX. J'utilise donc bash. Ce que j’aime le plus, c’est la personnalisation du fichier .bashrc (source depuis .bash_profile
Sur OSX) avec des alias, quelques exemples ci-dessous. J'ai maintenant placé tous mes alias dans un fichier séparé .bash_aliases et l'inclure dans:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
dans le fichier .bashrc ou .bash_profile.
Notez que ceci est 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 ls
pour être invalide, ce qui était un peu alarmant jusqu'à ce que je supprime --auto-color
!
Vous pouvez également trouver https://unix.stackexchange.com/q/127799/1004 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'
La réponse de @Michael Durrant couvre parfaitement le shell lui-même, mais l'environnement du shell inclut également les différentes commandes que vous utilisez dans le shell et celles-ci seront similaires - mais pas identiques - entre OS X et Linux. En général, les deux auront les mêmes commandes et fonctionnalités principales (en particulier celles définies dans la norme Posix), mais de nombreuses extensions seront différentes.
Par exemple, les systèmes Linux ont généralement une commande useradd
pour créer de nouveaux utilisateurs, contrairement à 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 des utilisateurs (voir ici ). (Mise à jour: à partir de macOS High Sierra v10.13, vous pouvez utiliser sysadminctl -addUser
au lieu.)
En outre, 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 le -r
possibilité d’appeler des expressions régulières étendues; sur OS X, vous utiliseriez le -E
option pour obtenir le même effet. De même, sous Linux, vous pouvez utiliser ls --color=auto
pour obtenir une sortie colorisée; sur macOS, l'équivalent le plus proche est ls -G
.
EDIT: Une autre différence est que beaucoup de commandes linux permettent de spécifier des options après leurs arguments (par exemple, ls file1 file2 -l
), alors que la plupart des commandes OS X requièrent que les options apparaissent strictement en premier (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 ifconfig
pour modifier la configuration de votre réseau. Sur OS X, ifconfig
fonctionnera (avec probablement une syntaxe légèrement différente), mais vos modifications risquent d’être écrasées de manière aléatoire par le démon de configuration du système; au lieu de cela, vous devriez éditer les préférences réseau avec networksetup
, puis laisser le démon de configuration les appliquer à l'état de réseau actif.