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?
Respuestas:
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
useradd
en Mac yifconfig
funciona de manera diferente.La siguiente tabla es útil para conocer los distintos shells de Unix.
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_profile
OSX) con alias, algunos ejemplos a continuación. Ahora coloqué todos mis alias en un archivo .bash_aliases separado y lo incluí con: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íls
como 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
fuente
zsh
la finalización de la clase Java predeterminada.ls
tanto 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'
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
useradd
comando 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, usedscl
(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 usarsysadminctl -addUser
en 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-r
opción para invocar expresiones regulares extendidas; en OS X, usaría la-E
opción para obtener el mismo efecto. De manera similar, en Linux puede usarls --color=auto
para obtener una salida coloreada; en macOS, el equivalente más cercano esls -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
ifconfig
para cambiar la configuración de su red. En OS X,ifconfig
funcionará (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 connetworksetup
, y luego dejar que el demonio de configuración las aplique al estado de la red en vivo.fuente