Estoy un poco sorprendido de que esto aún no haya sido preguntado por nadie, pero a un alto nivel, ¿qué debe saber todo desarrollador acerca de trabajar con sistemas basados en UNIX?
Mi experiencia con * nix es muy limitada, porque no tengo absolutamente ninguna razón para usarlo en Windows para mis propios fines, pero tengo dos entrevistas por venir donde las compañías idealmente quieren a alguien con experiencia en * nix. No tengo ningún problema para conocerlo si hacen una oferta que quiero hacer, pero no vale la pena la inversión cuando la mayoría de mis ofertas se refieren a sistemas Windows; Esperemos que esto sea comprensible.
¿Qué herramientas debo saber? ¿Alguna peculiaridad que debería tener en cuenta? ¿Existe algún recurso bueno y conciso que se pueda leer rápidamente para obtener una comprensión amplia?
Respuestas:
Además de lo básico, como cómo usar la línea de comando, etc., creo que lo fundamental es entender cómo está estructurado el sistema.
Creo que la mayor diferencia cuando uno viene de Windows a Unix es entender cómo encaja el sistema. Windows encaja por medio de su API y los componentes subyacentes del sistema operativo como COM. Aunque esto a menudo se abstrae del programador, uno que codifique durante mucho tiempo sabrá sobre el modelo de subprocesamiento COM, GDI, etc. Unix encaja de una manera completamente diferente. Unix se basa en la idea de construir componentes pequeños y construir sistemas más grandes a partir de ellos utilizando IPC (a menudo a través de tuberías simples).
Solicitas un recurso conciso y, al menos para mí, el único punto de partida para entender cómo funciona Unix como entorno de programación es el libro de Kernighan y Pike Unix Programming Environment . Si bien el libro en sí se siente un poco anticuado, es el ejemplo perfecto de cuál es la filosofía de Unix y cómo se puede aprovechar la "forma de Unix" al codificar.
Si al menos hojea sus páginas, entenderá cómo usar Unix para ayudarlo a crear mejores programas. Incluso si te identificas como un chico de Windows, el conocimiento que obtendrás de él es más o menos universal, como lo son los patrones de diseño o las prácticas de ingeniería de software.
Si quiere saber más, tal vez por su trabajo o simplemente porque le gustó, después de leer el entorno de programación Unix, pruebe la programación avanzada en el entorno UNIX (R) de Stevens. Complementa bien el libro de Kernighan y Pike y, después de ambos, habrás cubierto la mayor parte de lo que espero que sepa un programador de Unix. También hay un libro de Stevens sobre programación en red, también se recomienda.
Además de Linux, vale la pena probar dos sistemas operativos: uno es Plan9 , que de alguna manera es un Unix mejor que Unix, y el otro es OpenBSD . OpenBSD está construido por un pequeño equipo, por lo que es muy consistente y está muy bien documentado, por lo que es divertido hurgar en él.
fuente
Si una organización utiliza sistemas operativos tipo Unix, todos los desarrolladores deben conocer los comandos básicos del terminal para navegar por la estructura de archivos, crear nuevos archivos y directorios, eliminar archivos, herramientas de construcción de línea de comandos, usar el control de versiones en la línea de comandos y quizás scripts de shell básicos para ayudar a automatizar tareas repetitivas. En mi opinión, el poder de la terminal y la disponibilidad de herramientas de línea de comandos en sistemas similares a Unix es una gran ventaja, junto con lo fácil que es escribir scripts para automatizar una serie de tareas complejas que podrías estar realizando de forma regular base.
Hay una serie de aplicaciones de línea de comandos con las que quizás desee familiarizarse. Herramientas tales como
cat
,grep
,head
,tail
,more
, yless
son útiles para una serie de tareas, que van desde la búsqueda a través de archivos para encontrar coincidencias de texto, a través de la lectura de archivos de registro para ayudar en la depuración de aplicaciones. La capacidad de utilizar tuberías y resultados de alimentación a través de estas aplicaciones también es útil para ayudarlo a analizar la información disponible.También sería útil el conocimiento de uno de los principales editores de texto (vi o emacs). Cuál usa usted es una opinión personal, pero recomendaría usar lo que usa su equipo (de esa manera, si tiene preguntas, habrá alguien en su equipo para responderlas). En mi experiencia, muchos desarrolladores de Unix "hardcore" prefieren estas herramientas a los IDE. Yo prefiero un IDE (incluso en un entorno similar a Unix), pero los editores de texto tienen sus ventajas al leer archivos. Su naturaleza de línea de comandos facilita la búsqueda a través de archivos con las herramientas que mencioné en el último párrafo y luego abre todos los archivos coincidentes dentro de uno de estos editores.
Más allá del uso de las herramientas proporcionadas con el sistema operativo, también querrá conocer las diferencias en las bibliotecas. Las bibliotecas que realizan llamadas al sistema (las cosas que implican subprocesos vienen a la mente, como un ejemplo específico) probablemente serán diferentes entre los sistemas operativos. Los archivos MAKE que tienen marcas para compilar en una arquitectura específica o para un sistema operativo específico también pueden presentar problemas. Saber qué sistemas operativos se usan facilitaría esto: puede encontrar referencias que aborden cómo implementar ciertas funciones dentro de ese sistema operativo. Sin embargo, esto es algo que esperaría que pueda recoger en el trabajo (especialmente para los sistemas operativos que generalmente se usan en entornos empresariales y a los que las personas a menudo no tienen acceso, como Solaris).
fuente
El libro que utilicé en mi clase de UNIX fue "UNIX para programadores y usuarios" de Glass and Ables . Una buena introducción sólida a los comandos del sistema, las herramientas de archivo y programación, la descripción general del sistema y las redes y los diversos shells. Bastante corto también si es algo caro nuevo. Viene en un sabor de Linux también.
Para mayor profundidad: "La interfaz de programación de Linux" . No es una introducción liviana, pero si alguna vez necesitara un manual de referencia para finalizar todos los manuales de referencia en la programación a nivel del sistema en los sistemas de la familia * nix, elegiría esto.
fuente
En primer lugar, recomendaría instalar ubuntu , que es un buen punto de partida, en una partición de su computadora. Intenta jugar un poco con él. Por ejemplo, ver un video con códecs extraños ... ¡Entonces probablemente necesites usar la terminal para ejecutar algunos
apt-get install
comandos y golpear! estás aprendiendo a usar un sistema tipo Unix. Eso es. Comience a codificar y sentirá la necesidad de aprender mientras codifica.Una lista rápida que viene a la mente:
Si está dispuesto a saber realmente cómo funciona un SO y cómo funcionan los sistemas tipo Unix, comience por echar un vistazo a minix y leer el libro de SO de Tanenbaum .
fuente
apt-get
probablemente sea inútil ygedit
debería ser familiar para cualquiera que haya usado un editor de texto anteriormente. Cada distribución de Linux (y sistema operativo basado en Unix) tiene una herramienta de instalación / actualización diferente, y no esperaría que un desarrollador tenga que mantener el entorno como lo haría TI. Además, olvidó mencionaremacs
como alternativa avi
: el que use depende mucho de las preferencias personales (y, en mi opinión, las preferencias del equipo).purge
algo ... . Nunca sabes.