Entrevistar a alguien para habilidades generales de Unix [cerrado]

20

¿Cómo probaría a un desarrollador que afirma tener experiencia en shell * nix?

Estaba pensando en hacer que resuelvan un problema de obtener información de los archivos de registro, lo que implicaría algunos conceptos básicos como cat, grep, cut, ... combinados con tuberías.

¿Qué otro conocimiento básico pedirías? Una vez más, esto no es para entrevistar a alguien que desarrollará para sistemas * nix, y tampoco para administradores de sistemas * nix, sino solo para desarrolladores regulares que a veces necesitan trabajar en un sistema * nix.

Christophe Vanfleteren
fuente
Ese tipo de entrenamiento de shell es fácil para cualquier persona que ya conoce un lenguaje de programación. ¿Desde cuándo le importa a la gente si los entrevistados hacen que la verdad parezca un poco más agradable en sus hojas de vida? Pasa todo el tiempo. Me suena mezquino.
Yam Marcovic
@YamMarcovic - Cuando dices "hacer que la verdad parezca un poco más agradable", ¿estás diciendo "reclamar niveles de habilidad que no tienen"? Si es así, diría que es bastante relevante averiguarlo durante la entrevista. Si mienten para cruzar la puerta, ¿cómo se puede confiar en ellos una vez dentro?
Vatine
@Vatine Porque, al menos desde mi experiencia, todos exageran demasiado sus niveles de habilidad en currículums. Si descalifica a esas personas, se reduce a la contratación de personas dogmáticamente honestas o ingenuas. Eso son muchas menos opciones.
Yam Marcovic

Respuestas:

13

Según mi experiencia personal, el desarrollador que trabaja en un sistema * nix necesita saber:

  • variables de shell (cómo establecer / obtener + conocimiento sobre las especiales como PATH)
  • redirección de shell (captura de salida de un programa)
  • tuberías (extraer un poco de información del archivo de registro es un excelente ejemplo)
  • control de proceso (ps, nice / renice, kill)
  • derechos de acceso a archivos (ls / chmod / chown / chattr)
  • usuarios (pero principalmente en el contexto de archivos / procesos, es decir: ¿este proceso puede acceder a este archivo? ¿por qué puede / no puede?)

... y como extra:

  • iniciar / detener servicios del sistema

Tal conjunto de habilidades permite realizar la mayoría de las tareas relacionadas con el desarrollador con facilidad.

Jacek Prucia
fuente
Buena respuesta. ¿Qué comandos se utilizan para iniciar / detener los servicios del sistema?
Tim
11

Desde mi experiencia con mis numerosos colegas desde que comencé a trabajar, nadie quiere fingir el conocimiento de Unix: o " conocen la línea de comando " o simplemente dicen "¡de ninguna manera!".

Simplemente pregunte si el candidato está dispuesto a trabajar en una estación de trabajo Unix y déjele decirle hasta dónde puede llegar con bash. Eventualmente nombrará algunos comandos; la mayoría de los más obvios son cd, cat, moreo less, vio emacs, grep, awk, sed. Escuche atentamente si menciona man.

Si es para el desarrollo, debe estar familiarizado con makey Makefile, y algunos interfaz de línea de comandos de control de origen ( svn, git, cleartool, hg, cvs...)

Mouviciel
fuente
44
Lo sé many lo uso cada vez que Google no ayuda, pero nunca lo mencionaría en mi lista de comandos ...
Mehrdad
3
manes la forma más eficiente de aprender sobre la línea de comandos de Unix y las bibliotecas C cuando está desconectado. Por cierto, aprendí Unix cuando la herramienta más avanzada para buscar en Internet fuetelnet archie.cs.mcgill.ca
mouviciel
@mouviciel: También es la manera más eficiente de aprender sobre la línea de comandos de Unix cuando estás en línea , ya que la mayoría de los foros te dirán 'útilmente' a rtfm si les preguntas detalles sobre los comandos. Esto debería estar bien si las páginas del manual no fueran increíblemente complicadas y difíciles de navegar por la documentación. ¡Por suerte hay stackoverflow!
Joren
No se sobre eso. Utilizo páginas de manual en exceso y nunca he tenido ningún problema una vez que me he acostumbrado. Es fácil encontrar lo que estás buscando. Tiene secciones, tiene "Vea también" y puede buscar todo con solo hacer clic en un botón. Obtiene una página de manual para cada comando y cada llamada al sistema, y ​​bastantes llamadas a la biblioteca. Diría que las páginas de manual son lo que me hace amar tanto a UNIX.
Yam Marcovic
10

¿Por qué hacer esto?

Los shells * nix (y otros shells del sistema operativo, fwiw) son entornos de trabajo muy profundos y amplios. Es posible que alguien pase años trabajando allí y use solo un porcentaje muy pequeño de la capacidad de los depósitos.

Si no espera que la persona a) el programa shell, o b) administre el sistema desde el shell, ¿por qué es importante? Todo lo que se haga estará en un nivel tan básico que una práctica hoja de trucos * nix compensará con creces la "falta de habilidades".

Joe Internet
fuente
Es un cheque de honestidad. Si alguien pone experiencia de Unix en su currículum (que realmente no requerimos), quiero poder verificar cuáles son esas habilidades reclamadas. Si solo puede usar cd y ls, no debería reclamar imo de experiencia Unix.
Christophe Vanfleteren
Bueno, entonces les pregunto qué sistemas Unix usaron y les pido que enumeren las diferencias entre los sistemas Unix y probablemente Linux / Mac
johannes
1
@Christophe - Bueno, aquí está el trato ... no importa, porque probablemente no funcionarán para ti. Es una gran señal de alerta para un entrevistado cuando el posible empleador comienza a hacer acrobacias tontas como esta porque no confía en lo que hay en el currículum. Su "prueba", y su justificación para ello, básicamente dice que está tratando de contratar a alguien para que trabaje en una empresa de mierda. Puedo estar equivocado, pero supongo que no. Sin embargo, si me equivoco, le sugiero que reevalúe sus "expectativas".
Joe Internet
1
@Yam: lo dice así ... si estás contratando y alguien te envía un currículum que crees que está inventado, simplemente no entrevistas a esa persona. Lo que no debe hacer es crear una prueba tonta de que a) admite que no tiene relación con los requisitos del puesto, yb) admite que solo está diseñado para probar la "honestidad" de la experiencia reclamada de alguien. Si alguien ni siquiera puede obtener una entrevista en la compañía de OP sin que se cuestione su "honestidad" porque dijo que ha usado el shell * nix, ¿qué dice eso sobre la compañía? Para mí, dice trabajo de mierda en la compañía de mierda. YMMV.
Joe Internet
1
@Christophe: si está contratando programadores capaces de * nix, en mi opinión, es justo suponer que ellos "conocen bien la línea de comando". Si está contratando desarrolladores capaces de otros sistemas operativos, en mi opinión, es justo asumir que sus habilidades de líneas de comando * nix son mínimas. El grupo A no necesita ser probado, el grupo B recibe una falla automática, entonces ¿por qué molestarse en probarlos? Si su criterio para contratar a un desarrollador de software se basa en qué tan bien usan la línea de comando, bueno, creo que su proceso de contratación es defectuoso. Sería diferente si las secuencias de comandos de shell fueran la principal responsabilidad del puesto.
Joe Internet
3

De mi cabeza, probablemente les preguntaría dos cosas:

  1. Cuando utilizó la línea de comandos * nix antes, ¿encontró un caso en el que un comando bien pensado le ahorró mucho tiempo? Si es así, elabora.

  2. Explique las principales diferencias entre la línea de comandos * nix y un escritorio estándar de Windows. ¿Cuáles son las ventajas y desventajas de cada uno?

Claramente, el primero le dará una indicación de cuán profundo es el conocimiento del solicitante sobre la línea de comando. Si trabajó durante años en un * nix, no solo te dirá que estaba orgulloso de haber tenido una mala racha. No espere que recuerden los comandos exactos, por supuesto (siempre hay páginas de manual para eso), sino la idea general de lo que hicieron.

En cambio, la segunda pregunta verifica si entienden en qué es realmente buena la línea de comandos y para qué no es una herramienta adecuada. Es fácil aprender a usar un martillo, pero es mucho más difícil cambiar a otra herramienta en caso de que el martillo no sea adecuado. Por lo tanto, esta pregunta le da una buena indicación de la opinión del solicitante fuera del cuadro * nix, además de que es lo suficientemente abierta como para que pueda (y deba) calificar con su conocimiento. (Nada peor que responder algo como "uh ... Windows tiene esas ventanas")

Franco
fuente
2

Depende de lo que quieras que hagan.

Para obtener información de los archivos de registro, su sugerencia para cat + grep tiene mucho sentido. Agregaría ls, cd y less / more a eso.

Si espera que también realicen algunas ediciones menores (por ejemplo, en archivos de configuración), entonces tendría sentido agregar pruebas para vi y / o emacs y para cosas como cp / mv / rm / mkdir.

mosquito
fuente
1
prueba de comandos vi, sheesh, estaría más preocupado si los conocieran a todos
NimChimpsky
1
Si bien los alcances del individuo para Google y comienza a escribir en busca cosas de campo como " editor vi comandos ", entonces me gustaría considerar la prueba pasó del 90% :)
mosquito
1

Recomiendo que conozcan emacs o vi / m, tar, sed, e / f / grep, los diversos compiladores, algunos scripts de shell. Quizás ejecute una prueba en la que tengan que usar estas herramientas para obtener algún código de un archivo sin abrirlo, insertarlo en otro programa; luego compile el programa que se romperá en algún error trivial. Luego necesitan usar un editor de texto para entrar y encontrar el error, hacer que el código funcione y archivar el binario. Luego envíelo por correo a algún lugar mientras le da permisos al destinatario para ejecutarlo.

Ingeniero mundial
fuente
1

No sé sobre ti, pero me molestaría un poco si mi entrevistador me preguntara y no supiera cómo trabajar en Linux.

Realmente no debería importarle lo que saben ahora , sino lo que pueden aprender si tienen la oportunidad. Aprender las herramientas * nix no es demasiado difícil, pero requiere un poco de determinación: realmente debes probar la habilidad en lugar del conocimiento.

Mehrdad
fuente
2
pero entrevista a candidatos para hacer el trabajo y no para aprender.
NoChan
1
-1 @Emmad. ¿Entonces nunca has aprendido nada en ningún trabajo que hayas tenido ...?
3
-1 @EmmadKareem todo el trabajo es aprender de alguna manera.
Nicholas Smith
Sí, el aprendizaje se espera hasta cierto punto, sin embargo, a menos que el papel sea trivial, espero que el candidato sea productivo en aproximadamente 2 semanas de contratación, ¡en promedio en Canadá esto me costaría $ 3000! A menos que la habilidad sea rara, esto es lo que espero.
NoChance
Parece que Emmad es una persona para la que no quisiera trabajar, junto con el OP.
kirk.burleson
1

Depende del nivel de experiencia que desee que tengan. Si esto no es para alguien que desarrollará para sistemas * nix, y tampoco para administradores de sistemas * nix, sino solo para desarrolladores regulares que a veces necesitan trabajar en un sistema * nix, ¿cuánta experiencia realmente necesitan?

Cualquier cosa que tal desarrollador pueda necesitar en shells * nix (ls, chmod, cat, etc.) probablemente podría escribirse en una hoja de trucos de una sola página. Si es así, requerir conocimiento de shell * nix donde no se requiere podría eliminar algunos buenos candidatos.


fuente
0

Por lo general, elijo una tarea simple y le pido a la persona que escriba un script de shell en una pizarra.

"Tiene un directorio" foo "y un directorio de respaldo" foo_backup ". Escriba un script de shell para ver qué ha cambiado en" foo "desde que" foo_backup "ha cambiado.

Scott C Wilson
fuente
0

'Explicar el proceso de inicio de sesión en Linux, con tantos detalles como te sientas cómodo' es una buena pregunta. El proceso de inicio de sesión implica cambiar usuarios, permisos y propiedades, y mucha filosofía general de Unix. Si pueden explicar claramente cómo y por qué hay un /etc/passwdy /etc/shadow, y cómo un usuario no privado puede cambiar su propia contraseña pero no la de los demás, eso significa que 'obtienen' Unix.

Otra buena es cualquier cosa con análisis de registros o auditorías de seguridad rápidas. Si pueden sumar el ancho de banda total servido para un vhost particular de un registro de Apache, o si hay otros usuarios en el sistema con un uid de 0, son útiles en la línea de comandos.

Y una cosa que NO debe hacerles: no les hagas hacerlo en papel / pizarra. Dales un sistema en vivo (pero no internet porque eso es casi trampa), y míralos ir. Si conocen bien las páginas de manual y pueden construir expresiones de múltiples tuberías sobre la marcha, es una buena señal. Si necesitan google para todo, entonces su conjunto de habilidades es cuestionable.

Marcin
fuente
0

¿Por qué hacer que escriban un programa funcional? ¿Qué tiene de malo decir "dime la diferencia entre grep y sed, o qué hace el comando X? etc. de esa manera, puedes guiarlos un poco.

si ellos pierden la tarea específica que les das, es posible que no pienses que son inteligentes. pero si haces preguntas generales, les das la oportunidad de mostrarte lo que saben, que puede ser sustancial pero de una manera diferente a lo que te estabas preguntando.

Timmah
fuente
-1

Los gurús de Unix tienen comandos básicos de línea de comandos como sed, grep, etc. en un dedo y pueden usarlos fácilmente para lograr lo que quieren, usando todo tipo de citas, expresiones regulares avanzadas, etc., por lo que a veces ves el script y piensas que sería más fácil de entender escrito en chino;)

Puede esperar que, independientemente de la programación de shell, conozcan al menos un lenguaje de script adicional, como Perl.

Conocerían la configuración interna del sistema Unix, por lo que si les pide que cambien la distribución del teclado (fg agregue algún enlace a la derecha alt +) no se confundirán.

La administración de los paquetes instalados tampoco sería un problema. Instalar Oracle, ejecutar 4 servidores de aplicaciones, cada uno con otra JVM, tampoco hay problema. La configuración de red virtual, el enrutamiento avanzado y el filtrado de puertos, las máquinas virtuales, etc., la gestión de la seguridad, también van allí.

Marinero danubiano
fuente
2
La pregunta es sobre probar si un desarrollador tiene habilidades generales de Unix, no identificar los administradores de sistemas de gurú que tienen un enfoque particular en Oracle y Java.
Peter Taylor
JVN? ¿Qué tiene que ver la Red de Voluntarios Judíos con esto?
ocodo