Entrevistando alguém para habilidades gerais em unix [fechado]

20

Como você testaria um desenvolvedor que afirma ter experiência com o shell * nix (apenas para deixar claro, não queremos testar se alguém pode desenvolver o * nix, apenas que eles conheçam a linha de comando).

Eu estava pensando em fazê-los resolver um problema de obter informações dos arquivos de log, o que envolveria alguns princípios básicos como gato, grep, corte, ... combinados com tubulação.

Que outro conhecimento básico você pediria? Mais uma vez, isso não é para entrevistar alguém que desenvolverá sistemas * nix, e também não para administradores de sistemas * nix, mas apenas para desenvolvedores regulares que às vezes precisam trabalhar em um sistema * nix.

Christophe Vanfleteren
fonte
Esse tipo de treinamento de shell é fácil para qualquer pessoa que já conhece uma linguagem de programação. Desde quando as pessoas se importam se os entrevistados fazem a verdade parecer um pouco mais agradável em seus currículos? Isso acontece o tempo todo. Parece mesquinho para mim.
Yam Marcovic
@YamMarcovic - Quando você diz "faça a verdade parecer um pouco mais agradável", você está dizendo "reivindicando níveis de habilidade que eles não têm"? Se você é, eu diria que é bastante relevante descobrir durante a entrevista. Se eles mentem para passar pela porta, como alguém pode confiar neles uma vez lá dentro?
Vatine 23/11
@Vatine Porque, pelo menos pela minha experiência, todo mundo exagera em seus currículos. Se você desqualificou essas pessoas, reduziu-se a contratar pessoas dogmaticamente honestas ou ingênuas. São muito menos opções.
Yam Marcovic

Respostas:

13

Da minha experiência pessoal, o desenvolvedor que trabalha em um sistema * nix precisa saber:

  • variáveis ​​de shell (como definir / obter + conhecimento sobre variáveis ​​especiais como PATH)
  • redirecionamento de shell (captura de saída de um programa)
  • pipes (extrair algumas informações do arquivo de log é um excelente exemplo)
  • controle de processo (ps, nice / renice, kill)
  • direitos de acesso a arquivos (ls / chmod / chown / chattr)
  • usuários (mas principalmente no contexto de arquivos / processos, ou seja: este processo é capaz de acessar esse arquivo? por que ele pode / não pode?)

... e como um bônus:

  • iniciando / parando serviços do sistema

Esse conjunto de habilidades permite executar a maioria das tarefas relacionadas ao desenvolvedor com facilidade.

Jacek Prucia
fonte
Boa resposta. Quais comandos são usados ​​para iniciar / parar os serviços do sistema?
Tim
11

Pela minha experiência com meus inúmeros colegas desde que comecei a trabalhar, ninguém quer falsificar o conhecimento do Unix: eles " sabem o que fazer na linha de comando " ou simplesmente dizem "de jeito nenhum!".

Basta perguntar se o candidato está disposto a trabalhar em uma estação de trabalho Unix e deixá-lo dizer até onde ele pode passar pelo bash. Ele eventualmente nomeará alguns comandos; As mais óbvias são cd, cat, moreou less, viou emacs, grep, awk, sed. Ouça com atenção se ele menciona man.

Se é para o desenvolvimento, ele deve estar familiarizado com makee Makefiles, e alguns interface de linha de comando de controle de origem ( svn, git, cleartool, hg, cvs...)

mouviciel
fonte
4
Eu sei sobre mane eu usá-lo sempre que o Google não ajudar, mas eu nunca trazê-lo na minha lista de comandos ...
Mehrdad
3
mané a maneira mais eficiente de aprender sobre a linha de comando unix e as bibliotecas C quando você estiver offline. By the way, eu aprendi Unix quando a ferramenta mais avançada para pesquisar internet foitelnet archie.cs.mcgill.ca
mouviciel
@mouviciel: É também o aprendizado mais eficiente sobre a linha de comando do unix quando você está on-line , já que a maioria dos fóruns o ajudará a ajudá-lo a rtfm se você perguntar detalhes sobre os comandos. Isso deveria ser bom se as páginas de manual não fossem incrivelmente complicadas e difíceis de navegar na documentação. Felizmente, há stackoverflow!
Joren 28/09
Eu não sei disso. Uso páginas de manual em excesso e nunca tive problemas com isso depois que me acostumei. É fácil encontrar o que você está procurando. Você tem seções, tem "Consulte também" e pode pesquisar a coisa toda com o clique de um botão. Você obtém uma página de manual para cada comando e cada syscall, e várias chamadas de biblioteca. Eu diria que as páginas de manual são o que me faz amar tanto o UNIX.
Yam Marcovic 28/09
10

Por que fazer isso?

Os shells * nix (e outros shells do SO, fwiw) são ambientes de trabalho muito profundos e amplos. É possível que alguém passe anos trabalhando lá e use apenas uma% muito pequena da capacidade das conchas.

Se você não espera que a pessoa a) conceda um programa ou b) administre o sistema a partir do shell, por que isso importa? Tudo o que for feito será em um nível tão básico que uma cábula * nix útil compensará mais do que a "falta de habilidades".

Joe Internet
fonte
É uma verificação de honestidade. Se alguém colocar experiência unix em seu currículo (o que realmente não exigimos), quero poder verificar quais são essas habilidades reivindicadas. Se você é capaz de usar cd e ls, não deve reivindicar a experiência unix imo.
Christophe Vanfleteren
Bem, eu, em seguida, perguntar-lhes o que os sistemas Unix eles usaram e tê-los diferenças lista entre sistemas Unix e provavelmente Linux / Mac
Johannes
1
@Christophe - Bem, aqui está o negócio ... não importa, porque eles provavelmente não vão funcionar para você. É uma grande bandeira vermelha para um entrevistado quando o empregador em potencial começa a fazer acrobacias tolas como essa porque não confia no que está no currículo. Seu "teste" e sua justificativa para isso estão basicamente dizendo que você está tentando contratar alguém para fazer um trabalho de merda em uma empresa de merda. Posso estar errado, mas acho que não estou. No entanto, se eu estiver errado, sugiro que você reavalie suas "expectativas".
Joe Internet
1
@Yam - Diz assim ... se você está contratando e alguém lhe envia um currículo que você acredita ser artificial, você simplesmente não entrevista essa pessoa. O que você não faz é criar um teste bobo de que: a) você admite não ter relação com os requisitos da posição eb) admite que isso é projetado apenas para testar a "honestidade" da experiência reivindicada de alguém. Se alguém não consegue nem conseguir uma entrevista na empresa da OP sem ter sua "honestidade" questionada porque disse que usou o shell * nix, o que isso diz sobre a empresa? Para mim, diz trabalho de merda na empresa de merda. YMMV.
Joe Internet
1
@Christophe - Se você está contratando programadores * nix capazes, é IMO justo supor que eles "sabem o que fazer na linha de comando". Se você está contratando desenvolvedores capazes de outros sistemas operacionais, é IMO justo assumir que suas habilidades em linhas de comando * nix são mínimas. O grupo A não precisa ser testado; o grupo B recebe uma falha automática; então, por que se preocupar em testá-los? Se seus critérios para contratar um desenvolvedor de software são baseados em quão bem eles usam a linha de comando, acho que seu processo de contratação é defeituoso. Seria diferente se o script de shell fosse a principal responsabilidade do cargo.
Joe Internet
3

Do alto da minha cabeça, eu provavelmente perguntaria a eles duas coisas:

  1. Quando você usou a linha de comando * nix antes, encontrou um caso em que um comando bem pensado economizava muito tempo? Se sim, elaborado.

  2. Por favor, explique as principais diferenças entre a linha de comando * nix e uma área de trabalho padrão do Windows. Quais são as vantagens e desvantagens de cada um?

Claramente, o primeiro fornecerá uma indicação de quão profundo é o conhecimento do candidato sobre a linha de comando. Se ele trabalhou durante anos no * nix, ele não apenas diz que estava orgulhoso de ter feito um grep. Não espere que eles se lembrem dos comandos exatos, é claro (sempre há páginas de manual para isso), mas da ideia geral do que eles fizeram.

A segunda pergunta verifica se eles entendem no que a linha de comando é realmente boa e para o que não é uma ferramenta adequada. É fácil aprender a usar um martelo, mas é muito mais difícil mudar para outra ferramenta, caso o martelo seja inadequado. Portanto, essa pergunta fornece uma boa indicação da visão do candidato fora da caixa * nix, além de ser suficientemente aberta para que ele possa (e deve) pontuar com seu conhecimento. (Nada pior do que responder a algo como "uh .. o Windows tem essas janelas")

Frank
fonte
2

Depende do que você quer que eles façam.

Para obter informações dos arquivos de log, sua sugestão para o cat + grep faz todo o sentido. Eu adicionaria ls, cd e menos / mais a isso.

Se você espera que eles também façam algumas edições menores (digamos, nos arquivos de configuração), faria sentido adicionar testes para vi e / ou emacs e para coisas como cp / mv / rm / mkdir.

mosquito
fonte
1
testando da vi comandos, sheesh, eu estaria mais preocupado se eles sabiam todos eles
Nim Chimpsky
1
bem se os alcances cara por Google e começa a digitar em busca coisas campo como " comandos vi o Editor ", então eu considerar o teste passou de 90% :)
mosquito
1

Eu recomendo que eles conheçam emacs ou vi / m, tar, sed, e / f / grep, os vários compiladores, alguns scripts de shell. Talvez faça um teste em que eles tenham que usar essas ferramentas para pegar algum código de um arquivo sem abri-lo, insira-o em outro programa; então compile o programa que irá quebrar com algum erro trivial. Eles precisam usar um editor de texto para encontrar o erro, colocar o código em funcionamento e arquivar o binário. Em seguida, envie-o para algum lugar enquanto concede permissões ao destinatário para executá-lo.

Engenheiro Mundial
fonte
1

Eu não sei sobre você, mas ficaria meio irritado se meu entrevistador me perguntasse e eu não soubesse trabalhar no Linux.

Você realmente não deveria se importar com o que eles sabem agora , mas com o que eles podem aprender se tiverem a chance. Aprender as ferramentas * nix não é muito difícil, mas é preciso um pouco de determinação - você deve realmente testar a capacidade e não o conhecimento.

Mehrdad
fonte
2
mas você entrevista candidatos para trabalhar para não aprender.
NoChance
1
-1 @Emmad. Então você nunca aprendeu nada em nenhum emprego que teve ...?
3
-1 @EmmadKareem todo o trabalho está aprendendo de alguma forma.
Nicholas Smith
Sim, o aprendizado é esperado até certo ponto, no entanto, a menos que o papel seja trivial, espero que o candidato seja produtivo em cerca de duas semanas de contratação, em média no Canadá isso me custaria US $ 3000! A menos que a habilidade seja rara, é isso que eu espero.
precisa saber é o seguinte
Parece que Emmad é uma pessoa para quem eu não gostaria de trabalhar, junto com o OP.
kirk.burleson
1

Depende do nível de experiência que você deseja que eles tenham. Se isso não é para alguém que desenvolverá sistemas * nix, e também não para administradores de sistemas * nix, mas apenas para desenvolvedores regulares que às vezes precisam trabalhar em um sistema * nix, de quanta experiência eles realmente precisam?

Qualquer coisa que esse desenvolvedor possa precisar nos shells * nix (sl, chmod, cat etc.) provavelmente pode ser escrita em uma única página de dicas. Nesse caso, exigir o conhecimento do * nix shell onde não é necessário pode eliminar alguns bons candidatos.


fonte
0

Normalmente, escolho uma tarefa simples e peço à pessoa que escreva um script de shell em um quadro branco.

"Você possui um diretório" foo "e um diretório de backup" foo_backup ". Escreva um script de shell para ver o que mudou em" foo "desde que" foo_backup "foi alterado.

Scott C Wilson
fonte
0

'Explique o processo de login no Linux, com o máximo de detalhes que você se sentir confortável', é uma boa pergunta. O processo de login envolve a troca de usuários, permissões e propriedades, e muita filosofia geral do Unix. Se eles puderem explicar claramente como e por que há uma/etc/passwd e /etc/shadow, e como um usuário não privado pode alterar sua própria senha, mas não outras, isso significa que eles 'obtêm' o Unix.

Outra coisa boa é qualquer coisa com análise de log ou auditorias rápidas de segurança. Se eles puderem adicionar a largura de banda total atendida para um vhost em particular a partir de um log do Apache, ou descobrir se há outros usuários no sistema com um uid de 0, eles serão úteis na linha de comando.

E uma coisa a NÃO fazer com eles: não os faça fazer em papel / quadro branco. Dê a eles um sistema ao vivo (mas sem internet porque isso é quase trapaça) e observe-os partir. Se eles conhecem as páginas de manual e conseguem criar expressões de vários canais rapidamente, isso é um bom sinal. Se eles precisam do google para tudo, então suas habilidades são questionáveis.

Marcin
fonte
0

por que fazê-los escrever um programa funcional? o que há de errado em dizer "me diga a diferença entre grep e sed, ou o que o comando X faz? etc. dessa maneira, você pode orientá-los um pouco.

se eles se atrapalharem com a tarefa específica que você lhes der, talvez não pense que são inteligentes. mas, se você fizer perguntas gerais, terá a chance de mostrar o que elas sabem, o que pode ser substancial, mas de uma maneira diferente da que você estava pensando.

Timmah
fonte
-1

Os gurus do Unix têm comandos principais de linha de comando como sed, grep etc. em um dedo e podem facilmente usá-los para alcançar o que desejam, usando todos os tipos de citações, expressões regulares avançadas etc., portanto, às vezes, você vê o script e pensa que seria mais fácil de entender sendo escrito em chinês;)

Você pode esperar que, independentemente da programação do shell, eles conhecerão pelo menos uma linguagem de script adicional, como Perl.

Eles conheceriam as configurações internas do sistema Unix, portanto, se você pedir para alterar o layout do teclado (fg adicione alguma ligação à alt + alt direita), eles não ficarão confusos.

Gerenciar pacotes instalados também não seria problema. Instalar o Oracle, executando 4 servidores de aplicativos, cada um com outra JVM - também não há problema. Configuração de rede virtual, roteamento avançado e filtragem de portas, máquinas virtuais etc., gerenciando a segurança - também vai para lá.

Marinheiro Danubiano
fonte
2
A questão é testar se um desenvolvedor possui habilidades gerais em Unix, não identificar administradores de sistemas de gurus que tenham um foco específico no Oracle e Java.
31411 Peter Peter
JVN? O que a Rede de Voluntários Judaicos tem a ver com isso?
Ocodo 29/09