Estou um pouco surpreso que isso ainda não tenha sido perguntado por ninguém, mas em um nível alto, o que todo desenvolvedor deve saber sobre como trabalhar com sistemas baseados em UNIX?
Minha experiência * nix é muito limitada, porque não tenho absolutamente nenhuma razão para usá-la no Windows para meus próprios fins, mas tenho duas entrevistas em que as empresas idealmente querem alguém com experiência * nix. Não tenho problemas em familiarizá-lo se eles fizerem uma oferta que eu quero aceitar, mas não vale a pena o investimento quando a maioria das minhas ofertas trata de sistemas Windows; espero que isso seja compreensível.
Quais ferramentas devo conhecer? Alguma peculiaridade que eu deveria estar ciente? Existem recursos bons e concisos que podem ser lidos rapidamente para obter um entendimento amplo?
Respostas:
Além do básico, como usar a linha de comando e assim por diante, acho que o fundamental é entender como o sistema está estruturado.
Eu acho que a maior diferença quando se trata do Windows para o Unix é entender como o sistema se encaixa. O Windows se encaixa por meio da API e dos componentes subjacentes do sistema operacional, como COM. Embora isso muitas vezes seja abstraído do programador, alguém que estiver codificando por um longo tempo saberá sobre o modelo de encadeamento COM, GDI e assim por diante. O Unix se encaixa de uma maneira completamente diferente. O Unix é baseado na idéia de criar componentes pequenos e construir sistemas maiores usando IPC (geralmente através de tubos simples).
Você pede um recurso conciso e, pelo menos para mim, o único ponto de partida para entender como o Unix funciona como um ambiente de programação é o ambiente de programação Unix do livro de Kernighan e Pike . Embora o livro em si pareça um pouco datado, é o exemplo perfeito do que é a filosofia do Unix e como se pode alavancar a "maneira do Unix" ao codificar.
Se você pelo menos folhear suas páginas, entenderá como usar o Unix para ajudá-lo a criar programas melhores. Mesmo que você se identifique como um cara do Windows, o conhecimento que você obterá com isso é mais ou menos universal, como são os padrões de design ou as práticas de engenharia de software.
Se quiser saber mais - talvez para o seu trabalho ou apenas porque você gostou - depois de ler o Ambiente de programação Unix, experimente a Programação avançada no ambiente UNIX (R) de Stevens. Ele complementa bem o livro de Kernighan e Pike e, depois de ambos, você terá coberto a maior parte do que eu espero que um programador do Unix saiba. Também há um livro de Stevens sobre programação em rede, também é recomendado.
Além do Linux, existem dois sistemas operacionais que vale a pena tentar: um é o Plan9 , que de certa forma é um Unix melhor que o Unix, e o outro é o OpenBSD . O OpenBSD é construído por uma equipe pequena, por isso é muito consistente e muito bem documentado, por isso é divertido bisbilhotá-lo.
fonte
Se uma organização estiver usando sistemas operacionais semelhantes ao Unix, todos os desenvolvedores devem conhecer os comandos básicos do terminal para navegar na estrutura de arquivos, criar novos arquivos e diretórios, excluir arquivos, ferramentas de criação de linha de comando, usar controle de versão na linha de comando e talvez script de shell básico para ajudar a automatizar tarefas repetitivas. Na minha opinião, o poder do terminal e a disponibilidade de ferramentas de linha de comando em sistemas semelhantes ao Unix são uma grande vantagem, juntamente com a facilidade de escrever scripts para automatizar várias tarefas complexas que você pode executar regularmente. base.
Há vários aplicativos de linha de comando com os quais você pode se familiarizar. Ferramentas como
cat
,grep
,head
,tail
,more
, eless
vir a calhar para uma série de tarefas, que vão desde a pesquisa através de arquivos para encontrar correspondências de texto, a leitura através de arquivos de log para ajudar na depuração de aplicativos. A capacidade de usar tubos e alimentar a saída por esses aplicativos também é útil para ajudá-lo a analisar as informações disponíveis.O conhecimento de um dos principais editores de texto (vi ou emacs) também seria útil. Qual deles você usa é uma opinião pessoal, mas eu recomendaria usar o que sua equipe usa (dessa forma, se você tiver dúvidas, haverá alguém em sua equipe para respondê-las). Nas minhas experiências, muitos desenvolvedores Unix "hardcore" preferem essas ferramentas aos IDEs. Eu prefiro um IDE (mesmo em um ambiente semelhante ao Unix), mas os editores de texto têm suas vantagens ao ler arquivos. Sua natureza de linha de comando facilita a pesquisa em arquivos com as ferramentas mencionadas no último parágrafo e, em seguida, abre todos os arquivos correspondentes em um desses editores.
Além do uso das ferramentas fornecidas com o sistema operacional, você também deve estar ciente das diferenças nas bibliotecas. As bibliotecas que fazem chamadas ao sistema (itens que envolvem threading vêm à mente, como um exemplo específico) provavelmente serão diferentes nos sistemas operacionais. Makefiles que possuem sinalizadores para compilar em uma arquitetura específica ou para um sistema operacional específico também podem apresentar problemas. Saber quais sistemas operacionais são usados facilitaria isso - você pode encontrar referências que abordam como implementar determinadas funções dentro desse sistema operacional. No entanto, isso é algo que eu esperaria que você pudesse pegar no trabalho (especialmente para sistemas operacionais que normalmente são usados em ambientes corporativos e aos quais as pessoas geralmente não têm acesso, como o Solaris).
fonte
O livro que usei na minha classe UNIX foi o "UNIX para programadores e usuários" da Glass and Ables . Boa introdução sólida aos comandos do sistema, ferramentas de arquivamento e programação, visão geral do sistema e da rede e os vários shells. Bastante curto, bem como novo caro. Vem em um sabor Linux também.
Para mais detalhes: "A interface de programação do Linux" . Não é uma introdução leve, mas se você precisar de um manual de referência para encerrar todos os manuais de programação em nível de sistema nos sistemas da família * nix, eu escolheria isso.
fonte
Primeiro de tudo, eu recomendaria instalar o ubuntu , que é um bom ponto de partida, em uma partição no seu computador. Tente brincar um pouco. Como assistir a um vídeo com codecs estranhos ... Então você provavelmente precisará usar o terminal para executar alguns
apt-get install
comandos, e bang! você está aprendendo a usar um sistema semelhante ao Unix. É isso aí. Comece a codificar e você sentirá a necessidade de aprender enquanto codifica.Uma lista rápida que vem à mente:
Se você deseja realmente saber como um sistema operacional funciona e como os sistemas Unix-like funcionam, dê uma olhada no minix e leia o livro do sistema operacional de Tanenbaum .
fonte
apt-get
é provavelmente inútil egedit
deve ser familiar para quem já usou um editor de texto. Toda distribuição Linux (e sistema operacional baseado em Unix) tem uma ferramenta de instalação / atualização diferente, e eu não esperaria que um desenvolvedor tivesse que manter o ambiente, como seria feito pela TI. Além disso, você esqueceu de mencionaremacs
como uma alternativa avi
- qual deles usa depende muito das preferências pessoais (e, na minha opinião, das preferências da equipe).purge
algo .. . Nunca se sabe.