¿Cuáles son las diferencias entre usar el terminal en una Mac y Linux? [cerrado]

89

He estado usando Ubuntu durante los últimos cuatro años.
Tengo un conocimiento básico de los comandos de shell y prefiero trabajar en una terminal en lugar de usar una GUI. Recientemente comencé a usar una Mac.

Probé algunos comandos de terminal (que uso en Ubuntu) en el terminal de Mac y parece responder casi de la misma manera.

¿Hay alguna diferencia significativa en los comandos que uso, las tareas que realizan o el entorno de shell que debo conocer?

Dili
fuente
8
Me gustaría reabrir y pasar al intercambio de programadores.
Michael Durrant
1
¿Existe una lista completa de comandos de terminal mac vs linux en cualquier lugar de la web?
jasonleonhard

Respuestas:

61

Si realizó una instalación nueva o limpia de OS X versión 10.3 o más reciente, el shell de terminal de usuario predeterminado es bash.

Bash es esencialmente una versión mejorada y gratuita GNU del shell Bourne original, sh. Si tiene experiencia previa con bash (a menudo el predeterminado en instalaciones GNU / Linux), esto hace que la experiencia de la línea de comandos de OS X sea familiar; de lo contrario, considere cambiar su shell a tcsh o zsh, ya que algunos los encuentran más fáciles de usar.

Si actualizó o usa OS X versión 10.2.x, 10.1.xo 10.0.x, el shell de usuario predeterminado es tcsh, una versión mejorada de csh ('c-shell'). Las primeras implementaciones tenían un poco de errores y la sintaxis de programación un poco extraña, por lo que desarrolló una mala reputación.

Todavía hay algunas diferencias fundamentales entre mac y linux, como bien indica Gordon Davisson, por ejemplo, no useradden Mac y ifconfigfunciona de manera diferente.

La siguiente tabla es útil para conocer los distintos shells de 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

También puede encontrar útiles estas guías:

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

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

En una nota final, estoy en Linux (Ubuntu 11) y Mac osX, así que uso bash y lo que más me gusta es personalizar el archivo .bashrc (fuente de .bash_profileOSX) con alias, algunos ejemplos a continuación. Ahora coloqué todos mis alias en un archivo .bash_aliases separado y lo incluí con:

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

en el archivo .bashrc o .bash_profile.

Tenga en cuenta que este es un ejemplo de una diferencia mac-linux porque en una Mac no puede tener el--color=auto . La primera vez que hice esto (sin saberlo), lo redefiní lscomo inválido, lo cual fue un poco alarmante hasta que lo eliminé --auto-color.

También puede encontrar útil https://unix.stackexchange.com/q/127799/10043

# ~/.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
fuente
1
Me gusta zshla finalización de la clase Java predeterminada.
Dave Newton
gracias por recordarme que el color se comporta de manera diferente en el comando linux y macos ls. Utilizo el mismo bashrc para ambos y necesito encontrar una manera de usar condicionalmente una opción ls u otra para asegurarme de que ls siempre obtenga colores.
Bastian
Voy a usar esto para usar condicionalmente una de las opciones de ls o la otra según el sistema operativo: _myos = "$ (uname)" y luego $ _myos en Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) alias foo = '/ ruta / a / bsd / bin / foo' ;; *) ;; esac
Bastian
1
Bastian, puede tener color lstanto en Linux ( --color=all) como en OSX ( -G) con lo siguiente: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant
El enlace TerminalBasics.pdf parece estar muerto. ¿Es este el mismo documento?
Plasma
29

La respuesta de @Michael Durrant cubre hábilmente el shell en sí, pero el entorno del shell también incluye los diversos comandos que usa en el shell y estos serán similares, pero no idénticos, entre OS X y Linux. En general, ambos tendrán los mismos comandos y funciones principales (especialmente los definidos en el estándar Posix), pero muchas extensiones serán diferentes.

Por ejemplo, los sistemas Linux generalmente tienen un useraddcomando para crear nuevos usuarios, pero OS X no. En OS X, generalmente usa la GUI para crear usuarios; si necesita crearlos desde la línea de comandos, use dscl(que linux no tiene) para editar la base de datos del usuario (ver aquí ). (Actualización: a partir de macOS High Sierra v10.13, puede usar sysadminctl -addUseren su lugar).

Además, algunos comandos que tienen en común tendrán diferentes características y opciones. Por ejemplo, Linux generalmente incluye GNU sed, que usa la -ropción para invocar expresiones regulares extendidas; en OS X, usaría la -Eopción para obtener el mismo efecto. De manera similar, en Linux puede usar ls --color=autopara obtener una salida coloreada; en macOS, el equivalente más cercano es ls -G.

EDITAR: Otra diferencia es que muchos comandos de Linux permiten que las opciones se especifiquen después de sus argumentos (por ejemplo ls file1 file2 -l), mientras que la mayoría de los comandos de OS X requieren que las opciones estén estrictamente primero ( ls -l file1 file2).

Finalmente, dado que el sistema operativo en sí es diferente, algunos comandos terminan comportándose de manera diferente entre los sistemas operativos. Por ejemplo, en Linux probablemente usaría ifconfigpara cambiar la configuración de su red. En OS X, ifconfigfuncionará (probablemente con una sintaxis ligeramente diferente), pero es probable que el demonio de configuración del sistema sobrescriba al azar los cambios; en su lugar, debe editar las preferencias de red con networksetup, y luego dejar que el demonio de configuración las aplique al estado de la red en vivo.

Gordon Davisson
fuente
3
¡Grandes puntos Gordon! Haré +1 aunque también tenga una respuesta;) - ¡¿No debería obtener algo de crédito por eso ?!
Michael Durrant
1
Sobre todo porque la suya es una respuesta bastante buena por sí sola; También te he dado un voto.
Gordon Davisson