Baixe o app para aproveitar ainda mais
Prévia do material em texto
www.tinarede.com.br Fábio J. L. Ferreira Linux essencial Por trás da interface gráfica www.tinarede.com.br Licença Você pode: Com as seguintes condições: Acreditamos que ao compartilhar o conhecimento de forma aberta e gratuita estamos, no mínimo, incentivando terceiros a buscar um aprimoramento profissional. Inevitavelmente, contribuímos ainda para o crescimento pessoal e moral dessas pessoas. Todo e qualquer material disponibilizado por meio deste projeto é revisado, tendo como objetivo garantir um alto nível de qualidade e excelência. Não nos responsabilizamos de forma alguma por quebra de direitos autorais ou violação de propriedade intelectual que possa resultar em um ato considerado ilegal. Cada autor é responsável por responder legalmente por seu material. Copiar, distribuir, exibir e criar obras derivadas deste material. Você deve dar crédito ao autor original e ao projeto TI na Rede, citando o nome do autor (quando disponível) e fazendo referência ao site oficial do projeto. Os direitos de comercialização desta obra são de exclusividade do mantenedor oficial do projeto TI na Rede. Exceto nos casos em que o terceiro tenha uma autorização formal do mantenedor do projeto. Se você alterar, transformar ou criar outra obra com base nesta, somente poderá distribuí-la sob uma licença equivalente à original. www.tinarede.com.br Sumário Introdução ........................................................................................................................................ 7 Linux – introdução teórica .............................................................................................................. 8 1.1 Um pouco da história ............................................................................................................... 8 1.2 Software livre ........................................................................................................................... 8 1.3 Open source (código aberto) ................................................................................................... 9 1.4 Código-fonte .......................................................................................................................... 10 1.5 Qual a diferença entre Linux e GNU/Linux? .......................................................................... 10 1.6 Sistema Operacional (SO) ..................................................................................................... 11 1.7 Licença de software ............................................................................................................... 11 1.7.1 GPL ................................................................................................................................ 11 1.7.2 Copyleft .......................................................................................................................... 11 1.7.3 Outras licenças ............................................................................................................... 12 1.8 Distribuições Linux ................................................................................................................ 12 1.9 Onde o Linux é usado ........................................................................................................... 12 1.10 Qual é a melhor distribuição Linux? .................................................................................... 13 1.11 Os benefícios de uma distribuição Linux ............................................................................. 13 1.12 Por trás da interface gráfica ................................................................................................ 14 1.13 Resumo ............................................................................................................................... 15 Estrutura e funcionamento do Linux ........................................................................................... 16 2.1 Estrutura sistêmica do GNU/Linux ........................................................................................ 16 2.2 Terminal Virtual (ttyN) ............................................................................................................ 17 2.3 Introdução ao shell ................................................................................................................ 17 2.3.1 Logon e logout ................................................................................................................ 17 2.3.2 Superusuário (root), usuário comum e usuário de sistema/serviço ............................... 17 2.4 Primeiro contato com o shell ................................................................................................. 18 2.5 Árvore de diretórios (“pastas”) ............................................................................................... 19 2.6 Case-sensitive ....................................................................................................................... 20 2.7 Referências absoluta e relativa ............................................................................................. 20 2.8 Entrada e saída padrão de dados ......................................................................................... 21 2.9 Resumo ................................................................................................................................. 21 Programas comandos essenciais ............................................................................................... 23 3.1 Programas comandos básicos .............................................................................................. 23 3.1.1 help ................................................................................................................................. 23 www.tinarede.com.br 3.1.2 man ................................................................................................................................. 24 3.1.3 logout .............................................................................................................................. 24 3.1.4 shutdown, poweroff e halt ............................................................................................... 24 3.1.5 reboot ............................................................................................................................. 25 3.1.6 pwd (print working directory) .......................................................................................... 25 3.1.7 history ............................................................................................................................. 25 3.2 Manipulação de arquivos e diretórios .................................................................................... 26 3.2.1 ls (list) ............................................................................................................................. 26 3.2.1.1 Listando o conteúdo do diretório corrente ............................................................... 26 3.2.1.2 Opções (atributos de listagem) ................................................................................ 26 3.2.1.3 Listar arquivos ocultos ............................................................................................. 27 3.2.2 cd (change directory) ...................................................................................................... 28 3.2.3 cp (copy) ......................................................................................................................... 28 3.2.4 rm (remove) .................................................................................................................... 28 3.2.5 mkdir ...............................................................................................................................29 3.2.6 rmdir ............................................................................................................................... 29 3.2.7 cat (concatenar) .............................................................................................................. 29 3.2.8 more ............................................................................................................................... 29 3.2.9 cut (cortar) ...................................................................................................................... 30 3.2.10 find ................................................................................................................................ 30 3.2.11 grep .............................................................................................................................. 30 3.2.12 head .............................................................................................................................. 31 3.2.13 tail (lê do fim do arquivo) .............................................................................................. 31 3.2.14 wc (contar) .................................................................................................................... 31 3.2.15 tar (empacotar e desempacotar) .................................................................................. 32 3.2.16 gzip e bzip2 (compactar e descompactar) .................................................................... 32 3.2.17 Outros comandos ......................................................................................................... 33 3.3 Curingas ................................................................................................................................ 34 3.4 Utilizando | (pipe) para direcionar o processamento ............................................................. 34 3.5 Encadeando execuções com ; (ponto e vírgula) e && .......................................................... 35 3.5.1 Exemplos ........................................................................................................................ 35 3.5.2 Redirecionar saída com > ou >> .................................................................................... 35 3.6 Atalhos essenciais ................................................................................................................. 36 3.7 Resumo ................................................................................................................................. 36 Usuários, grupos e permissões ................................................................................................... 38 4.1 O que é um usuário ............................................................................................................... 38 4.2 O que é um grupo de usuários .............................................................................................. 38 www.tinarede.com.br 4.3 O que são permissões ........................................................................................................... 38 4.4 Gerenciamento de usuários e grupos ................................................................................... 38 4.4.1 Criar usuário ................................................................................................................... 39 4.4.2 Editar usuário e senha .................................................................................................... 40 4.4.3 Excluir usuário ................................................................................................................ 40 4.4.4 Criar um grupo ................................................................................................................ 40 4.4.5 Adicionar e remover usuário de um grupo ..................................................................... 41 4.4.6 Excluir grupo ................................................................................................................... 41 4.4.7 Diretório home do usuário .............................................................................................. 41 4.5 Gerenciamento de permissões .............................................................................................. 41 4.5.1 Adicionar, remover e definir permissões com chmod ..................................................... 42 4.5.2 Usando chmod com método numérico ........................................................................... 43 4.5.3 Umask ............................................................................................................................ 45 4.5.3.1 Calcular umask ........................................................................................................ 45 4.5.3.2 Umask para permissão ............................................................................................ 45 4.5.3.3 Alterando umask ...................................................................................................... 45 4.5.4 Permissões especiais ..................................................................................................... 46 4.5.4.1 SUID (set user id) .................................................................................................... 46 4.5.4.2 SGID (set group id) .................................................................................................. 47 4.5.4.3 Sticky (sticky bit) ...................................................................................................... 47 4.5.4.4 Vantagens (SUID, SGID e Sticky bit) ...................................................................... 48 4.5.5 Sudo ............................................................................................................................... 49 4.6 Resumo ................................................................................................................................. 49 Editores de texto (Nano e VIM) ..................................................................................................... 51 5.1 Nano ...................................................................................................................................... 51 5.2 Vim (VI iMproved) .................................................................................................................. 52 5.2.1 Comandos comuns ......................................................................................................... 54 5.2.1.1 Salvar/Sair (modo de comando) .............................................................................. 54 5.2.1.2 Movimentação (modo normal) ................................................................................. 54 5.2.1.3 Saltos (modo normal) .............................................................................................. 55 5.2.1.4 Editar ....................................................................................................................... 55 5.2.1.5 Desfazer (modo normal) .......................................................................................... 56 5.2.1.6 Buscar/Substituir (modo normal) ............................................................................. 56 5.3 Nano ou Vim .......................................................................................................................... 56 5.4 Resumo ................................................................................................................................. 56 Instalar, atualizar e remover software ......................................................................................... 58 www.tinarede.com.br 6.1 Pacotes ..................................................................................................................................58 6.2 Gerenciador de pacotes ........................................................................................................ 58 6.3 Repositório ............................................................................................................................ 59 6.4 Apt-get ou Aptitude? .............................................................................................................. 59 6.4.1 Apt-get / apt-cache (básico) ........................................................................................... 60 6.4.2 Aptitude (básico) ............................................................................................................. 61 6.5 Yum ....................................................................................................................................... 62 Gerenciamento de rede ................................................................................................................ 63 7.1 Testando a conectividade ...................................................................................................... 63 7.1.1 Ping ................................................................................................................................ 63 7.1.2 Telnet .............................................................................................................................. 64 7.1.3 Traceroute ...................................................................................................................... 64 7.2 Visualizando e configurando endereço de rede .................................................................... 65 7.2.1 Ifconfig ............................................................................................................................ 65 7.2.2 dhclient ........................................................................................................................... 66 7.2.3 Arquivo de configuração das interfaces de rede ............................................................ 66 7.3 Resumo ................................................................................................................................. 67 Lista de exercícios ........................................................................................................................ 68 Exercícios ...................................................................................................................................... 69 Respostas ...................................................................................................................................... 76 Sugestões de estudo .................................................................................................................... 81 Conclusão ...................................................................................................................................... 82 Contatos ......................................................................................................................................... 83 www.tinarede.com.br Introdução A sociedade moderna está totalmente dependente da tecnologia – esse é um fato consumado. Porém, em muitos aspectos somos meros usuários, ou seja, não compreendemos seu funcionamento e, por conta disso, nos tornamos reféns daqueles que detêm o poder sobre as tecnologias que utilizamos no dia a dia. Em alguns casos, somos considerados consumidores de tecnologia sem voz ativa nem poder de escolha. Não seja um mero usuário; tome as rédeas do jogo. Não sabe como? Neste momento, estou lhe convido a estudar, pesquisar e se aventurar no universo do software livre, um universo de possibilidades infinitas, limitadas tão somente pela sua imaginação e capacidade de inovar. Venha desbravar novos horizontes, ou melhor, venha por meio desta obra realizar uma mudança cultural na forma como você interage com o seu computador; deixe de ser um mero espectador refém das vontades da “máquina”, assuma o controle e passe a ditar as regras do jogo. Construa um conhecimento sólido e aprenda a solucionar problemas até então considerados “bichos de sete cabeças”. Dedique algumas poucas horas do seu dia a se encantar com o tema foco desta obra e garanto que não será uma perda de tempo; ainda que nem todo conhecimento adquirido aqui seja aplicado no seu cotidiano, todo e qualquer conhecimento é um bem valioso que mais cedo ou mais tarde irá render alguns bons frutos. O convite está feito! Em 2007 iniciei meus estudos e pesquisas sobre o tema Linux. Minha dedicação e vontade foram tamanhas que, poucos dias após iniciar os estudos, resolvi remover o Windows da minha máquina e instalar uma distribuição Linux; essa foi sem dúvida uma grande mudança “cultural” na minha vida. Foi uma longa jornada, porém obtive ótimos resultados com essa mudança. Em virtude da experiência adquirida, algumas portas se abriram e várias oportunidades de trabalho surgiram; confesso que foi um ótimo investimento de tempo dedicar atenção ao assunto, mas isso não veio do nada. Na verdade, eu estava há algum tempo acompanhando a comunidade de software livre, e fiquei encantado com o entusiasmo e empenho dos membros da comunidade; eles compartilhavam a experiência de uso e os conhecimentos cultivados na convivência diária com o uso desse incrível sistema. Esta obra irá abordar os pontos teóricos e práticos referentes ao sistema operacional GNU/Linux. Considere-a o seu ponto de partida. Aproveito para deixar um alerta: engana-se quem pensa que o mercado de TI está carente de vagas de trabalho. Na verdade, nos últimos anos esse mercado tem enfrentado um sério problema: a falta de profissionais qualificados para ocupar postos de trabalho nos mais diversos níveis hierárquicos das organizações. Sendo assim, sugiro que invista em si mesmo; essa será sua melhor aposta e também a garantia de seu sucesso! Chega de blá-blá-blá e vamos direto ao que interessa. Boa leitura! ;) www.tinarede.com.br Capítulo 1 Linux – introdução teórica "Quem pensa segundo a opinião dos outros está muito longe de ser um homem livre." — Autor desconhecido No capítulo 2 iremos partir para uma abordagem prática. Porém, antes disso, se faz necessário entender alguns conceitos, filosofias, impactos e a importância do Linux na sociedade. Diante disso, peço que por gentileza tente não pular os tópicos deste primeiro capítulo introdutório. Alguns dos termos discutidos neste capítulo serão utilizados até o fim desta obra; sendo assim, seu entendimento se torna no mínimo obrigatório! 1.1 Um pouco da história A busca incansável por mudar, aprimorar-se e, principalmente, evoluir levou o estudante de ciência da computação da Universidade de Helsinki, na Finlândia, Linus Torvalds a iniciar um processo de aprimoramento do núcleo do Minix, um sistema operacional Unix-like escrito por Andrew Tannenbaum. Deste aprimoramento surgiu o Linux, um kernel Unix-like, que teve sua primeira versão oficial publicada no final de 1991. Ao desenvolvê-lo, Linus quebrou todos os conceitos comerciais da história. Deixou aberto o código- fonte do sistema, algo que resultaria em uma grande mudança, um fenômeno sem precedentes na história da evolução humana dos tempos modernos: o software livre. 1.2 Software livre A ideia do software livre ganhou forma em meados de 1983 pelas mãos do ativista Richard Stallman, criador do projeto GNU e responsável por fundar em 1985 a Free Software Foundation (FSF), fundação sem fins lucrativos que tem como objetivo defender o movimento do software livre. Pode-se dizer que software livre é um movimento social que defende aspectos ligados diretamente à liberdade que o usuário tem perante o software. Segundo a FSF, qualquer software/programa deve obedecer a quatro liberdades para ser considerado um softwarelivre. São elas: • Liberdade 0 - Liberdade de executar o programa para qualquer propósito; • Liberdade 1 - Liberdade para estudar como o programa funciona e adaptá-lo às suas necessidades; • Liberdade 2 - Liberdade de redistribuir cópias de forma que você possa ajudar outras pessoas; www.tinarede.com.br • Liberdade 3 - Liberdade para melhorar o programa e disponibilizar as melhorias para o público, de forma que toda a comunidade possa se beneficiar delas. Para garantir as liberdades 2 e 3 é imprescindível ter acesso ao código-fonte do programa. A definição oficial de software livre pode ser encontrada no site do projeto GNU, ao acessar o link: http://www.gnu.org/philosophy/free-sw.html 1.3 Open source (código aberto) Open source e software livre são a mesma coisa? Mais ou menos; existem diferenças sutis, porém ambos tentam nos garantir liberdades e direitos perante o software. A Open Source Initiative (OSI) tenta ser mais flexível do que a Free Software Foundation na classificação de software. Para tanto, dita dez regras utilizadas para classificar um software como open source; são elas: 1) Distribuição livre: A licença não deve restringir de nenhuma maneira a venda ou distribuição do programa gratuitamente, como componente de outro programa ou não. 2) Código-fonte: O programa deve incluir seu código-fonte e deve permitir a sua distribuição também na forma compilada. Se o programa não for distribuído com seu código-fonte, deve haver algum meio de obtê-lo, seja via rede, seja com custo apenas de reprodução. O código deve ser legível e inteligível para qualquer programador. 3) Trabalhos derivados: A licença deve permitir modificações e trabalhos derivados, e deve permitir que eles sejam distribuídos sob os mesmos termos da licença original. 4) Integridade do autor do código-fonte: A licença pode restringir a distribuição do código- fonte em uma forma modificada apenas se a licença permitir a distribuição de arquivos patch (de atualização) com o código-fonte, para o propósito de modificar o programa no momento de sua construção. A licença deve explicitamente permitir a distribuição do programa construído a partir do código-fonte modificado. Contudo, a licença pode ainda requerer que programas derivados tenham um nome ou número de versão diferentes do programa original. 5) Não discriminação contra pessoas ou grupos: A licença não pode ser discriminatória contra qualquer pessoa ou grupo de pessoas. O conceito de software livre se opõe às diretrizes do software proprietário, mas não às do software que é vendido almejando lucro (software comercial). Cuidado: não confunda software livre (free software) com software grátis (freeware). www.tinarede.com.br 6) Não discriminação contra áreas de atuação: A licença não deve restringir o uso do programa por qualquer pessoa em um ramo específico de atuação. Por exemplo, ela não deve proibir que o programa seja usado em uma empresa, ou para pesquisa genética. 7) Distribuição da licença: Os direitos associados ao programa devem ser aplicáveis para todos aqueles cujo programa é redistribuído, sem a necessidade da execução de uma licença adicional para estas partes. 8) Licença não específica a um produto: Os direitos associados ao programa não devem depender de o programa ser parte de uma distribuição específica de programas. Se o programa é extraído de uma distribuição e usado ou distribuído dentro dos termos da licença do programa, todas as partes para quem o programa é redistribuído devem ter os mesmos direitos que os garantidos em conjunção com a distribuição de programas original. 9) Licença não restritiva a outros programas: A licença não pode colocar restrições em outros programas que são distribuídos junto com o programa licenciado. Isto é, a licença não pode especificar que todos os programas distribuídos na mesma mídia de armazenamento sejam programas de código aberto. 10) Licença neutra em relação a tecnologia: Nenhuma cláusula da licença pode estabelecer uma tecnologia individual, estilo ou interface a ser aplicada no programa. As regras acima foram retiradas do endereço http://softwarelivre.org/open-source-codigo-aberto Fonte oficial em inglês: http://www.opensource.org/docs/definition.php É importante ter em mente que, em muitos casos, um software livre também pode ser um open source e vice-versa. A FSF e a OSI não são inimigas, mas possuem pontos de vista divergentes. 1.4 Código-fonte São basicamente as instruções que formam um programa. Essas instruções são escritas com base em alguma linguagem de programação, como por exemplo Java, C, Delphi, entre outras. Ter acesso ao código-fonte do software significa basicamente ter acesso às instruções inscritas nele em qualquer que seja a linguagem de programação. Mas, como assim? Não poderíamos simplesmente editar o software? Não, o resultado final de um software normalmente é um arquivo binário; em outras palavras, este arquivo nada mais é do que uma transformação da linguagem de programação para uma linguagem de máquina, incompreensiva para nós, meros mortais. Diante disso se faz necessário ter acesso ao código-fonte para poder estudar e/ou melhorar um software. 1.5 Qual a diferença entre Linux e GNU/Linux? O Linux nada mais é do que um kernel (núcleo) do sistema; já o GNU/Linux é um sistema operacional completo, formado pela camada de kernel e pelos demais componentes do projeto GNU, tais como programas diversos, drivers, interface gráfica etc. www.tinarede.com.br O projeto GNU tinha como objetivo criar um sistema operacional completo, gratuito e livre. Quase tudo estava pronto, porém o GNU ainda não possuía a parte mais importante, um núcleo para o seu sistema. Foi aí que Linus Torvalds entrou na história, e da união do GNU com o Linux surgiu o GNU/Linux, que hoje é popularmente conhecido apenas como Linux, nome que não faz justiça a todos aqueles que contribuíram e continuam contribuindo para o crescimento do sistema operacional GNU/Linux. Existe um outro entendimento segundo o qual Linux é o nome dado a qualquer sistema que utilize o núcleo (kernel) Linux. Porém, não custa nada colocar um GNU antes do nome, né? 😉 1.6 Sistema Operacional (SO) É um software/programa ou conjunto de programas que tem como função principal gerenciar os recursos do sistema, tais como quem recebe atenção do processador, quanto de memória determinado processo irá utilizar, qual a prioridade dos processos etc. Em outras palavras, um sistema operacional é responsável por realizar uma interface entre o usuário e a máquina, abstraindo e simplificando a realização de tarefas diversas. Pense no sistema operacional como uma interface amigável, um verdadeiro amigo, pois sem ele você teria que lidar com a dificuldade de gerenciar a memória, a prioridade entre os processos e muito mais. Este conceito é extremamente importante e vasto, mas não nos convém entrar em detalhes neste momento. 1.7 Licença de software Todo software quando criado é associado a um documento, que tem como objetivo informar o que é permitido ou não fazer com aquele software. Esse documento é a licença do software; ela é quem dita as regras do “jogo”! 1.7.1 GPL Em geral, o GNU/Linux segue as regras prescritas na GPL (GNU Public License), criada em 1989 e revisada pela primeira vez em 1991, quando resultou na GPLv2 (GPL versão 2). A revisão mais recente até o lançamento desta obra é a de 2007, a GPLv3 (GPL versão 3). As quatro liberdades do software livre são garantidas graças à licença GPL. 1.7.2 Copyleft Este é um termo comum no mundo do software livre; ele é basicamente o oposto do copyright. Enquanto o copyright se concentra em pontuar as restrições, o copyleft se concentra em pontuar as permissões consentidaspela licença. Em outras palavras, o copyleft se concentra em garantir que Para mais informações a respeito da GPL: www.gnu.org/licenses/gpl.html www.tinarede.com.br determinados direitos/permissões consentidos por sua licença acompanhem o software durante sua existência, e que versões derivadas dele carreguem consigo a mesma licença do software original. 1.7.3 Outras licenças 1.8 Distribuições Linux Quando falo em distribuições Linux, estou me referindo ao conjunto formado por kernel, programas e aplicativos que compõem um sistema operacional do tipo Unix-Like. Como já foi dito, Linux é somente o kernel do sistema; isso significa que as distribuições Linux utilizam o mesmo kernel, porém acoplam a si alguns programas e aplicativos conforme a necessidade que levou à criação daquela “distribuição ou customização” em especial. Existem algumas distribuições comerciais e outras não comerciais. No caso das distribuições comerciais, o utilizador paga pelo sistema e recebe suporte técnico para ele; já no segundo caso, não existe essa cobrança pelo uso do sistema, porém, se surgir algum problema, o utilizador terá que buscar ajuda em alguma lista de discussão na internet para tentar obter uma solução. As distribuições não comerciais também são conhecidas como distribuições comunitárias; um bom exemplo é o GNU/Linux Debian, um sistema operacional disponibilizado gratuitamente, mantido por uma comunidade de desenvolvedores e amantes do universo livre. Exemplos de distribuições GNU/Linux comunitárias: Debian, Ubuntu, Slackware, Mint... 1.9 Onde o Linux é usado Um dia o Linux já foi um sistema imaturo e incompreendido. Mas, calma, ele era somente um bebê, ou melhor, um recém-nascido. O tempo passou e a cada novo aniversário ele adquiriu mais maturidade e destaque perante a comunidade. Atualmente esse sistema é utilizado em relógios de pulso, celulares, computadores, mainframes etc. Recordo-me de dois fatos históricos da trajetória desse sistema: o primeiro foi em 2001, quando a IBM anunciou o investimento de 1 bilhão de dólares em Linux; já o segundo foi em julho desse mesmo ano, quando a NASA anunciou o lançamento de um assistente pessoal de satélite baseado em Linux. Você pode nem imaginar, mas grandes estúdios de animação, tais como Pixar Estúdios, Lucas Arts e DreamWorks já utilizaram ou ainda utilizam o Linux na renderização de suas obras. Alguns Existem inúmeras outras licenças, algumas compatíveis com a filosofia do software livre e outras, não. Veja uma lista parcial: www.gnu.org/licenses/license-list.html Os mais íntimos preferem o termo distro Linux ao invés de distribuição Linux. www.tinarede.com.br bons exemplos de obras renderizadas utilizando o Linux são: O Senhor dos Anéis, Vida de Inseto e Shrek. 1.10 Qual é a melhor distribuição Linux? Vixi, calma lá! Não existe a melhor distribuição; existe aquela que é mais adequada às suas necessidades. Listarei abaixo as minhas preferências: • Servidor: Para montar servidores gosto muito de utilizar a distribuição Debian; essa é uma distribuição comunitária muito famosa e com uma comunidade altamente ativa. • Uso pessoal: Em meu desktop e notebook gosto de utilizar o Linux Mint; essa distribuição já vem por padrão com uma suíte de multimídia e software básicos pré-instalados. A distro em questão também possui uma central de software, ou seja, um local onde você tem um catálogo de itens que podem ser baixados e instalados automaticamente, sem necessitar de nenhuma interação humana. Mais simples que isso, impossível. Então, Debian é a melhor opção para montar servidor e Linux Mint para uso pessoal? Não; essas foram as melhores opções para mim, mas cada um de nós vê o mundo de uma forma diferente e possui necessidades distintas. Sugiro que faça como eu: teste outras distribuições Linux até encontrar sua cara-metade. Em alguns casos gosto inclusive de usar o CentOS para servidor e o Ubuntu para uso pessoal, porém a minha maior preferência é pelos sistemas citados no início deste tópico. 1.11 Os benefícios de uma distribuição Linux Ah, os benefícios, palavra amada e cobiçada por nós, meros mortais! Os benefícios são inúmeros; por este motivo listarei abaixo somente os mais relevantes: • Segurança: Esse é um assunto que poderia render facilmente várias páginas, porém não pretendo me aprofundar nele, uma vez que não representa o foco principal desta obra. Os tópicos abaixo possuem a função de expor os pontos fortes no quesito segurança das distribuições Linux: o Atualização constante: Possui atualizações regulares, o que se deve em parte ao fato de seu código ser aberto; como todos têm acesso às fontes do sistema, quando alguém identifica algum problema ou uma possível melhoria uma discussão é iniciada dentro da comunidade de software livre. Poucos dias depois, se não no dia seguinte, uma correção é disponibilizada; o Superusuário: O grande erro dos usuários de Windows é utilizar o sistema operacional com a conta de administrador; isso abre brecha para que malware se instalem no sistema. Já as distribuições Linux criam por padrão duas contas de usuário durante a etapa de instalação, o root (superusuário) e um usuário comum. www.tinarede.com.br Ao utilizar a máquina com o usuário comum, já elevamos nosso grau de segurança. Existem ainda as contas de usuário de sistema/serviço. Falaremos delas mais adiante; o Firewall no nível de kernel: Por padrão, o firewall das distribuições Linux está presente dentro do próprio kernel, ou seja, faz parte do núcleo do sistema, o que adiciona 1 ponto extra no quesito segurança; em capítulos posteriores falaremos sobre este recurso. • Custo/benefício: Seu custo de aquisição pode ser igual a 0 (zero). Caso queira, você poderá adquirir seu futuro sistema operacional sem pagar nada, ou até mesmo montar um ambiente inteiro sem tirar um centavo do bolso. Os software e suítes de aplicativo podem seguir essa mesma filosofia; • Facilidade de usar e manter: Atualmente as distribuições Linux são altamente intuitivas e de fácil utilização. A interface gráfica pode ser rica e altamente elegante, satisfazendo desta forma todos os “paladares”; • Customização 100%: Essa é uma vantagem que o software proprietário não dá: a liberdade para modificar o código-fonte e/ou redistribuir o resultado final desse trabalho; • Reconhecimento de hardware: Normalmente, após a instalação de uma distribuição Linux, não será necessário ter o trabalho de correr atrás dos drivers de áudio, vídeo, impressora etc. Na minha opinião esse é um benefício e tanto! Os benefícios listados acima serão abordados na prática em capítulos posteriores, então fique tranquilo; até o fim desta obra garanto que, no mínimo, você será um(a) amante de Linux. 😂 1.12 Por trás da interface gráfica No início desta obra, convidei você a deixar de ser um mero usuário, refém das vontades da máquina, mas para isso é necessário deixar de lado a “cultura do botão” e passar a entender como as coisas funcionam por baixo da interface gráfica. Para ser capaz de submeter o sistema a suas vontades, é necessário se aventurar na linha de comando do GNU/Linux, uma telinha preta que deixa você com a maior cara de nerd e que pode lhe dar acesso total ao sistema! 😅 A “cultura do botão” se aplica às pessoas que carregam o seguinte lema: “me dê um botão que eu clico”. Sem dúvida, as mentes mais engraçadinhas estão fazendo piada depois disso; não os culpo, Está pensando em montar um negócio? Então considere utilizar alguma distribuição Linux como sistema operacional; seu custo de implantação provavelmente será igual a zero, sem mencionar o fato de que você poderá ter acesso a software e suítes de escritório igualmente equivalentes em termos de custo.www.tinarede.com.br também ri até chorar! 😂 Deixar de lado o entendimento de algo para se apegar com afinco à interface gráfica pode nos render muita dor de cabeça. A perfumaria visual chamada de interface gráfica deve acima de tudo agradar os olhos, ou seja, de uma hora para outra pode sofrer uma reformulação visual que deixe você desorientado, sem saber onde aquele botão que você tanto utilizava foi parar. Até se adaptar ao novo visual, você poderá sofrer um pouco, sem falar que a adaptação pode não ser tão rápida. Uma interface gráfica rica e elegante sempre conquista admiradores e, no fim das contas, somos todos usuários de alguma interface visual; isso é inevitável, porém é mais do que recomendado entender como as coisas funcionam por trás dessa perfumaria visual. No mundo GNU/Linux temos a figura da linha de comando, um recurso que nos dá acesso total ao sistema e nos abre possibilidades não proporcionadas pela interface gráfica, sem falar que esse recurso não sofre com a volatilidade dos elementos visuais, ou seja, os comandos estarão sempre lá, aguardando você. 1.13 Resumo Neste capítulo, entendemos conceitos teóricos básicos e considerados obrigatórios. O entendimento desses conceitos facilitará sua vida ao longo dos vários capítulos que compõem esta obra, tornando ainda mais proveitosa sua estadia conosco. Neste primeiro capítulo entendemos qual é a real diferença entre os termos Linux e GNU/Linux, software livre e open source. Discutimos ainda questões de relevância comum, tais como qual a melhor distribuição Linux, onde cada uma é utilizada, sua importância e os benefícios proporcionados por sua utilização. Recomendo que realize pesquisas adicionais, consulte outras obras e visite as comunidades de software livre, com o objetivo de complementar o conteúdo passado por meio desta obra. Posso garantir que este conhecimento será de grande valia para seu crescimento profissional e, consequentemente, pessoal. Chegamos ao fim da parte teórica. Do próximo capítulo em diante, iniciaremos nosso primeiro contato “íntimo” com o GNU/Linux. Caso queira fazer uma pausa para o café, esta é a hora, pois os próximos capítulos desta obra prometem fortes emoções! www.tinarede.com.br Capítulo 2 Estrutura e funcionamento do Linux "Quem pensa pouco erra muito." — Leonardo da Vinci Para prosseguirmos com este capítulo, é necessário que você tenha uma distribuição Debian devidamente instalada. Caso não conheça o processo de instalação ou necessite de algum auxílio, consulte o material de apoio “Linux – Instalando a distribuição Debian”. Ao longo desta obra utilizaremos a distribuição Debian como referência de estudo, porém, as técnicas, conceitos e comandos apresentados daqui por diante poderão ser aplicados em qualquer outra distribuição. Talvez a maior diferença que você pode encontrar entre as várias distribuições disponíveis seja a localização de arquivos específicos de sistema, porém iremos aprender comandos e técnicas de pesquisa que nos permitirão localizar qualquer arquivo facilmente. 2.1 Estrutura sistêmica do GNU/Linux Abaixo temos o esquema visual (layout) da estrutura dos sistemas GNU/Linux: Figura 1 – Estrutura das distribuições Linux • Gerenciador de janelas: permite realizar a abertura visual dos software e aplicativos. Disponível somente quando a interface gráfica está instalada; • Tty: é uma espécie de terminal virtual. Os tty de 1 até 6 são basicamente terminais de linha de comando, já o tty7 é reservado para a interface gráfica quando instalada; • Sistema Operacional e Kernel: estes dois assuntos já foram tratados no capítulo 1; • Hardware: representa os componentes físicos da máquina. www.tinarede.com.br 2.2 Terminal Virtual (ttyN) O GNU/Linux é um sistema multiusuários, ou seja, permite que vários usuários utilizem uma máquina ao mesmo tempo. Isso é possível graças aos terminais virtuais, que são uma espécie de console isolada, recurso este que permite que os usuários trabalhem de forma isolada em uma mesma máquina sem que um interfira na experiência de uso do outro. Uma das formas mais comuns de vários usuários acessarem e trabalharem ao mesmo tempo em uma máquina é fazendo uso de conexões remotas. Nos sistemas baseados em Linux, o tipo de conexão remota mais comum é o ssh (abordado a fundo mais adiante). Ao trabalhar em um ambiente GNU/Linux temos a possibilidade de utilizar os terminais virtuais para dividir visualmente tarefas em telas distintas, ou trabalhar em paralelo com mais de um usuário. Para alternar entre os terminais virtuais (tty) utilizaremos as teclas ALT + F1 até F7, lembrando que o tty7 normalmente é reservado para a interface gráfica caso a tenha instalado, ou seja, normalmente teremos 6 tty a nossa disposição, quantidade esta que pode ser alterada por meio de configuração. 2.3 Introdução ao shell As distribuições GNU/Linux contam com o shell, um poderoso interpretador de comandos. Em outras palavras, o shell é um programa de computador que permite ao usuário interagir com o sistema por meio de comandos, submetidos através do periférico teclado. O Bash é o shell mais famoso do universo GNU/Linux; sua popularidade se deve aos inúmeros recursos que possui, que facilitam a vida do usuário. Ao longo desta obra iremos trabalhar com o bash, porém existem outras soluções de shell, cada qual com suas características próprias. Seguem alguns exemplos: csh, ksh, tcsh e zsh. 2.3.1 Logon e logout O logon nada mais é do que o ato de entrar no sistema. Já o logout é a saída do sistema, ou seja, o ato de encerrar sua sessão. No capítulo seguinte veremos como efetuar o logout. 2.3.2 Superusuário (root), usuário comum e usuário de sistema/serviço Existem basicamente duas formas de abrir um shell no Linux: uma é como superusuário (root) e outra é como usuário comum. Vejamos as particularidades de cada uma: • Superusuário: Nos termos técnicos do universo Linux, chamamos este usuário de root. Ele é o usuário master do sistema, ou seja, o administrador. Tem acesso irrestrito; • Usuário comum: Com exceção do root, todos os usuários se enquadram nesta categoria. Possuem acesso limitado ao sistema; Shell, terminal e linha de comando são praticamente sinônimos recursivos. www.tinarede.com.br • Usuário de sistema/serviço: Estes usuários são utilizados para controlar serviços no sistema, não possuem senha nem diretório home. Para identificar o nível de acesso do usuário logado, basta observar o símbolo que se encontra à esquerda do cursor; caso seja uma # (tralha), significa que o usuário logado é o root; se for um $ (cifrão), significa que este é um usuário comum. 2.4 Primeiro contato com o shell Chegou a hora de brincar com o shell, terminal ou linha de comando, como preferir. Inicie o seu sistema Debian. Caso ainda não o tenha instalado ou não se lembre como realizar a inicialização do sistema, consulte o material de apoio “Linux – Instalando a distribuição Debian”. Figura 2 – Logon O processo de inicialização pode levar alguns segundos; vai depender do hardware da sua máquina. Quando o resultado da sua tela for equivalente ao da Figura 2, isso significará que o sistema já está disponível para uso. Observe a primeira linha: o tty1 (destacado de verde) é o terminal virtual que está comportando essa sessão. Utilize usuário e senha criados na etapa de instalação: • Informe o login user e pressione ENTER; • Será solicitada a password (senha). Digite user e pressione ENTER. Caso não tenha errado o nome do usuário nem a senha, teremos um logon efetuado com sucesso: Figura 3 – Tela após o logon Na Figura 3, o retângulo vermelho é o que chamamos de banner. Ele será apresentado sempre que um usuário efetuar logon. Seu texto padrão pode ser personalizado,porém vamos deixar isso para um outro momento. Ao digitar a senha, nenhum output será apresentado no terminal; não se assuste, isso é um truque de segurança. Continue digitando e ao fim pressione ENTER. www.tinarede.com.br Ao acessar o sistema, nosso diretório inicial será /home/user, ou seja, nosso user tem um diretório pessoal dentro do diretório /home. Já o diretório pessoal do usuário root é o /root. Mais adiante entenderemos melhor como isso funciona. Uma coisa de cada vez. 😉 Para compreender melhor a última linha da Figura 3, iremos dividi-la em partes: • user: nome do usuário logado, definido na etapa de instalação; • @: separador; • debian: hostname (nome da máquina) definido no processo de instalação; • $: indica que o user é uma conta de usuário comum; • _: o underline indica o espaço destinado à inserção de comando por parte do utilizador. 2.5 Árvore de diretórios (“pastas”) A organização de diretórios do GNU/Linux tem o padrão Filesystem Hierarchy Standard (FHS), ou em português Hierarquia Padrão do Sistema de Arquivos. A principal vantagem deste conjunto de regras é a capacidade de predizer o local dos arquivos. Segue lista padrão de diretórios definidos pela FHS: Diretório Descrição / Nível raiz bin Diretório de comandos programas essenciais ao sistema. Acesso de nível público boot Arquivos de configuração do sistema de arranque dev Arquivos de dispositivos etc Arquivos de configuração de sistema home Neste local ficam armazenados os diretórios pessoais dos usuários comuns lib Bibliotecas compartilhadas e módulos do kernel media Ponto de montagem para dispositivos removíveis mnt Ponto de montagem temporário para sistema de arquivos proc Diretório virtual onde ficam as informações do sistema obtidas do Kernel root Diretório pessoal do usuário root run Dados de execução variáveis sbin Binários essenciais ao sistema; somente o root tem privilégio para executá-los sys Contém praticamente as mesmas informações do diretório proc, porém, mais organizadas tmp Arquivos temporários. Por exemplo: dados temporários criados por programas ou usuários são salvos aqui. Ao reiniciar o sistema, este diretório é esvaziado usr Diretório onde ficam os programas dos utilizadores (/usr/bin), bibliotecas (/usr/lib), documentação (/usr/share/doc) etc. São programas portáveis e não essenciais ao sistema var Dados variáveis. Por exemplo, arquivos de log srv Dados para os serviços disponibilizados pelo sistema e de acesso público www.tinarede.com.br opt Pacotes de software e aplicações adicionais que não fazem parte do sistema Tabela 1 – Hierarquia Padrão do Sistema de Arquivos GNU/Linux Ao longo desta obra voltarei a mencionar os diretórios mais relevantes e/ou importantes ao nosso estudo, conforme a necessidade for surgindo. 2.6 Case-sensitive O GNU/Linux é um sistema case-sensitive, ou seja, diferencia letras maiúsculas de minúsculas. Sendo assim, tome muito cuidado ao referenciar diretórios e arquivos. Por exemplo: • /bin • /Bin • /biN • /BIN Apesar da semelhança, os quatro diretórios citados acima são referências distintas. O mesmo se aplica a comandos. Por exemplo: • pwd • Pwd • pWD • PWD A escrita correta desse comando tem todos os caracteres em caixa baixa; ao escrever de forma diferente o sistema irá apresentar uma crítica de que o comando não existe ou não foi encontrado. 2.7 Referências absoluta e relativa Existem duas vias para se apontar um alvo/destino em um ambiente GNU/Linux: • Referência absoluta: caminho completo (absoluto) para o diretório, arquivo ou recurso; • Referência relativa: este é um apontamento que leva em consideração a sua posição atual no sistema. Vamos a um exemplo prático. Para isso, considere a estrutura da figura abaixo: Figura 4 – Estrutura de diretórios Qualquer GNU/Linux deve conter fisicamente na partição raiz /bin, /sbin, /etc, /lib, /etc e /dev. Do contrário não será possível iniciar o sistema. www.tinarede.com.br Veja as formas possíveis de se deslocar do diretório var para o bkp (Figura 4): • Referência absoluta: /etc/bkp • Referência relativa: ../etc/bkp Os 2 pontos (..) indicam um nível acima. Vamos supor que você está no diretório bkp (Figura 4) e deseja voltar para a raiz do sistema (/); então você necessita subir 2 níveis, e para isso deve usar a representação (../..). Os primeiros 2 pontos tiram você do diretório bkp e o colocam dentro do etc; a próxima ocorrência irá tirá-lo do diretório etc e, dessa forma, você estará no diretório raiz, representado por um sinal de barra (/). Devemos ter muita atenção ao utilizar referência relativa, pois este tipo de apontamento é variável. Para fixar o entendimento, veja os exemplos abaixo, baseados na estrutura da Figura 4: Diretório atual: var Destino: arquivos Via referência absoluta: /etc/arquivos Via referência relativa: ../etc/arquivos Diretório atual: arquivos Destino: bkp Via referência absoluta: /etc/bkp Via referência relativa: ../bkp Na referência absoluta nosso ponto de partida é a raiz do sistema; como tudo está abaixo deste nível, independentemente de onde estiver no sistema, o destino será sempre alcançado. Já na referência relativa esse apontamento tem que se adequar a sua posição atual no sistema, ou seja, acaba sendo uma forma relativa/volátil de apontar um destino. 2.8 Entrada e saída padrão de dados Ao trabalhar com GNU/Linux, ouvimos falar muito de entrada e saída padrão de dados; diante disso se faz necessário compreender melhor este conceito. A entrada padrão de dados é o teclado e a saída é a tela do computador. Existem três termos que fazem parte deste conceito. São eles: • stdin, que representa a entrada padrão de dados => Teclado • stdout, que representa a saída padrão de dados => Tela • stderr, saída padrão de erros => Tela 2.9 Resumo Neste capítulo tivemos nosso primeiro contato prático com o GNU/Linux, entendemos o funcionamento do sistema e seu padrão organizacional, capaz de predizer o local onde determinado arquivo será alocado. Conceitos como logon, logout, terminal virtual e shell foram devidamente apresentados. A proposta de conteúdo para o capítulo 2 poderia render facilmente mais algumas páginas, talvez www.tinarede.com.br algumas dezenas. Porém, este grau de detalhamento adicional poderia quebrar a proposta de objetividade, simplicidade e relevância, considerando a temática de conteúdo essencial proposta para esta obra. www.tinarede.com.br Capítulo 3 Comandos Programas essenciais "Busco um instante feliz que justifique minha existência" — Fiódor Dostoiévski O termo comando é uma forma popular de fazer referência aos programas comuns a quase todas as distribuições GNU/Linux. Em geral um comando nada mais é do que um arquivo binário. Ao executar os comandos listados mais adiante, não se esqueça que o caractere cifrão ($), presente à esquerda do cursor, indica que este pode ser executado pelo usuário comum; já a tralha (#) indica que este deve ser obrigatoriamente executado pelo usuário root. 3.1 Comandos Programas básicos Esta obra não tem como objetivo ser um guia/manual de comandos, ou seja, irei citar de forma resumida os comandos e opções mais utilizados no dia-a-dia, detalhando e me aprofundando somente em casos excepcionais. 3.1.1 help É uma opção de ajuda rápida, utilizada para consultar as opções disponibilizadas por um programa. Sua sintaxe é: Devemos substituir o marcador [comando] pelo programa para o qual desejamos obter ajuda. Veja: Figura 5 – Retorno do comando de ajuda A seta em vermelho (primeira linha) mostra que foi solicitada ajuda para o comando ls (apresentado adiante). Na segunda linha temos uma demonstração de comoo comando deve ser usado; já nas linhas seguintes temos o restante dos parâmetros aceitos pelo programa, neste caso o ls. $ [comando] --help www.tinarede.com.br 3.1.2 man As páginas de manual do GNU/Linux contêm a descrição dos comandos, bem como listam de forma detalhada as opções disponíveis e como elas funcionam. Sua sintaxe é: Opções internas (disponíveis no manual): • q: sai do manual; • PageDown ou f: rola 25 linhas para baixo; • PageUp ou w: rola 25 linhas para cima; • Seta para cima ou k: rola 1 linha para cima; • Seta para baixo ou e: rola 1 linha para baixo; • p ou g: volta para o início; • h: mostra a página de ajuda do manual. Opções: • -k: caso não saiba o nome de um determinado comando, basta utilizar essa opção para buscar ocorrências dentro do manual e retornar os possíveis comandos. 3.1.3 logout Os comandos abaixo podem ser utilizados para encerrar nossa sessão no terminal: 3.1.4 shutdown, poweroff e halt Os comandos abaixo podem ser utilizados para desligar a máquina: Todos os comandos acima possuem basicamente a mesma finalidade, porém, o comando shutdown permite agendar desligamento, programar reboot etc. Experimente utilizar o help para obter ajuda; exemplo: “shutdown –help”. Pessoalmente gosto de utilizar o comando poweroff para desligar a máquina. Ele funciona como um alias (apelido) para o “shutdown -h now”, com a vantagem de ser curto e fácil de decorar. $ man [opções] [comando] $ exit $ logout $ <CTRL> + d # shutdown -h now # poweroff # halt www.tinarede.com.br 3.1.5 reboot Comando responsável por reiniciar a máquina: 3.1.6 pwd (print working directory) Imprime na tela o caminho absoluto para o diretório corrente (atual): Resultado: Figura 6 – Retorno do comando pwd 3.1.7 history Lista os comandos mais recentes executados no terminal. Este é um recurso do bash (discutido no capítulo anterior). Exemplo de uso: Resultado: Figura 7 – Retorno do comando history Observe que temos no lado esquerdo um valor numérico identificando cada comando. Aproveito para deixar a seguinte dica: se você utilizar um sinal de exclamação + o número + a tecla ENTER, por exemplo, !7, no meu caso iria ser autoexecutado o comando da posição 7, ou seja, essa instrução serve como atalho para comandos presentes no history (histórico). Caso seu shell seja o bash, utilize as setas para cima e para baixo para percorrer o histórico. Para descobrir o shell atualmente em uso, basta imprimir o valor da variável de sistema $0: # reboot $ pwd $ history www.tinarede.com.br Resultado: Figura 8 – Lista o shell atual O retorno acima confirma que estamos usando o bash. Caso queira mudar para outro shell, por exemplo, sh, basta digitar sh e pressionar ENTER; já para sair de um shell basta digitar exit e pressionar ENTER. 3.2 Manipulação de arquivos e diretórios O conjunto de comandos a seguir nos permite identificar o diretório corrente, listar, copiar, mover e excluir arquivos e diretórios. 3.2.1 ls (list) Utilizado para listar o conteúdo de um diretório ou as propriedades de um arquivo. Sintaxe: 3.2.1.1 Listando o conteúdo do diretório corrente Na ausência do parâmetro de caminho, este comando lista o conteúdo do diretório corrente: Resultado: Figura 9 – ls sem retorno O comando ls executado acima não retornou nenhum valor, o que significa que no diretório corrente não existe nenhum conteúdo para ser listado, ou que os conteúdos estão ocultos (isso será discutido mais adiante). 3.2.1.2 Opções (atributos de listagem) As opções podem listar mais informações ou até mesmo formatar os dados apresentados: $ echo $0 $ ls [opções] [caminho_do_arquivo_ou_diretório] $ ls $ ls -lt /home www.tinarede.com.br Resultado: Figura 10 – ls -lt /home Iremos analisar a Figura 10 linha por linha. Sendo assim, vamos à 1ª linha: • ls: lista o conteúdo presente no diretório ou as propriedades do arquivo informado; • -lt: o sinal de menos (-) indica que o valor seguinte é um atributo (opção). A letra l (L minúsculo) lista as propriedades do conteúdo retornado, e a letra t é utilizada para ordenar a lista em ordem cronológica, o que é interessante para diretórios com muitos arquivos; • /home: diretório a ser considerado como alvo do comando. Na 2ª linha, o valor “total 4” representa o total de blocos do sistema de arquivo que estão sendo utilizados pelo conteúdo listado. Este conceito é um pouco avançado, porém, irrelevante ao escopo desta obra. Sendo assim, deixaremos para tratar deste assunto em uma outra oportunidade. Já a 3ª linha indica uma sequência de propriedades. Analisaremos cada uma delas: Figura 11 – Atributos Respectivamente: • drwxr-xr-x: no momento vamos nos apegar somente ao primeiro caractere do grupo: § - (hífen): arquivo; § b: dispositivo de bloco; § c: dispositivo de caractere; § d: diretório; § l: link, equivalente aos atalhos no ambiente Windows; § s: socket. • 2: número de hard links (irrelevante a nosso estudo); • user user: respectivamente, usuário e grupo. Será mais bem apresentado mais adiante; • 4096: tamanho do arquivo em bytes; • Jul 2 00:15: respectivamente, mês, dia e hora de criação; • user: essa última coluna indica o nome do elemento listado. 3.2.1.3 Listar arquivos ocultos Para listar um arquivo oculto é muito simples: basta utilizar o atributo -a. Veja: $ ls -a www.tinarede.com.br No exemplo acima estamos listando os arquivos ocultos do diretório corrente, porém, poderíamos informar outro diretório, ou até mesmo substituir a opção -a por -al (L minúsculo), respectivamente, para mostrar arquivos ocultos e listar as suas propriedades. No universo Linux, um arquivo oculto é representado por um ponto final (.) à esquerda de seu nome. Por exemplo: • .exemplo1 • .arquivo_oculto Para tirar a propriedade de oculto, basta renomear o arquivo ou diretório retirando o ponto; já para ocultar, basta adicionar o caractere ponto. Veremos como fazer isso mais adiante. 3.2.2 cd (change directory) Muda o diretório atual, ou seja, permite que efetuemos o deslocamento pela hierarquia de diretórios do sistema. Sintaxe: 3.2.3 cp (copy) Permite copiar arquivos e diretórios. Sintaxe: Opções: • -i: pergunta antes de substituir arquivos; • -f: substitui arquivos sem perguntar; • -v: mostra o progresso da cópia de arquivos; • -r: copia o diretório e todos os seus arquivos recursivamente. 3.2.4 rm (remove) Remove arquivos e diretórios. Sintaxe: Opções: • -f: força a exclusão; • -v: apresenta o nome dos arquivos à medida que forem removidos; • -r: exclui recursivamente arquivos e diretórios. Sem este parâmetro só serão excluídos diretórios vazios. $ cd [diretório] cp [opções] [origem] [destino] rm [opções] [caminho_do_arquivo_ou_diretório] www.tinarede.com.br 3.2.5 mkdir Permite criar diretório no sistema. Sintaxe: Opções: • --verbose: mostra uma mensagem para cada diretório criado. 3.2.6 rmdir Remove um diretório vazio. Sintaxe: 3.2.7 cat (concatenar) Este comando pode ser utilizado para concatenar arquivos ou ler seu conteúdo. Nesta obra iremos focar na característica que permite ler/apresentar conteúdo. Sintaxe: Opções: • -n: numera as linhas apresentadas; • -s: não mostra mais que uma linha em branco entre os parágrafos. 3.2.8 more Este comando é utilizado para paginar o resultado apresentado na tela. Sintaxe de uso: Opções: • +num: inicia a visualização a partir da linha informada; Opções internas: • f, ctrl+f ou barra de espaço para avançar uma página; • b ou ctrl+b para voltar uma página; • h:apresenta a lista de opções do aplicativo; • . (ponto final): repete o último comando aplicado; • q: encerra a visualização quando pressionado dentro do aplicativo. mkdir [opções] [caminho1/diretório1] [caminho2/diretório2] rmdir [caminho1/diretório1] [caminho2/diretório2] cat [opções] [caminho1/diretório1] [caminho2/diretório2] more [opções] [arquivo] www.tinarede.com.br Uma outra boa alternativa para paginação é o comando less, que é muito semelhante ao more, porém permite a navegação linha a linha, além da navegação por página igual à do comando more. 3.2.9 cut (cortar) Permite selecionar parte de um conteúdo, sendo normalmente utilizado para filtrar colunas. Sintaxe: Opções: • -f [numCampos]: exibe os campos informados; • -d [caracteres]: define o delimitador a ser utilizado; o padrão é o TAB. 3.2.10 find Pesquisa por arquivos ou diretórios no sistema. Sintaxe: Opções: • -iname [expressão]: faz a busca pelo nome do arquivo ou diretório; • -maxdepth [num]: nível máximo de diretórios abaixo do diretório de busca; • -mtime [num]: busca por arquivos modificados [num] dias atrás; • -size [num]k: busca por arquivos com tamanho igual a [num] Kbytes. • -type [tipo]: procura por arquivo do [tipo]: § d: diretório § f: arquivo regular § l: link simbólico Exemplos: Na primeira linha, a consulta é feita somente dentro do diretório /etc por qualquer arquivo que contenha em seu nome a palavra “casa”. Já na segunda linha, o caractere / indica que a consulta deve ser feita em toda a raiz do sistema, -type f indica que devem ser pesquisados somente arquivos, e -size +1000k que o tamanho tem que ser superior a 1000 Kbytes. 3.2.11 grep Faz busca em arquivos. Sintaxe: cut [opções] [arquivo] find [diretório] [opções/expressão] $ find /etc -iname casa $ find / -type f -size +1000k www.tinarede.com.br Expressão: Palavra ou frase a ser pesquisada; se composta deve ser delimitada por aspas duplas. Opções: • -h: não mostra o nome dos arquivos durante a busca; • -i: ignora diferença entre maiúsculo e minúsculo; • -v: ignora ocorrências que contenham o valor informado; • -n: mostra o número da linha onde a ocorrência foi encontrada. Exemplo: O marcador ^ encontra as linhas iniciadas pela palavra “Conteúdo” no arquivo file.txt 3.2.12 head Lê por padrão as 10 primeiras linhas de um arquivo. Sintaxe: Opções: • -n: altera o número padrão de linhas a serem lidas/apresentadas. 3.2.13 tail (lê do fim do arquivo) Lê por padrão as 10 últimas linhas de um arquivo. Sintaxe: Opções: • -f: permite a leitura constante do arquivo, o que é recomendado para arquivos que estão crescendo, quando há necessidade de acompanhar o que está sendo inserido em tempo real; • -n: altera o número padrão de linhas a serem lidas/apresentadas. 3.2.14 wc (contar) Conta caracteres, palavras e linhas. Sintaxe: grep [opções] [expressão] [arquivo] grep -i '^Conteúdo’ file.txt head [opções] [arquivo] tail [opções] [arquivo] www.tinarede.com.br Opções: • -l: conta linhas; • -m: conta caracteres; • -w: conta palavras. 3.2.15 tar (empacotar e desempacotar) O empacotamento visa a “pegar” vários arquivos ou diretórios e jogá-los dentro de um “envelope” único, ou seja, como resultado final teremos um arquivo único. Veja a sintaxe: Opções: • -c: Cria o arquivo final; • -z: Especifica o tipo como gzip (.gz); • -j: Especifica o tipo como bzip2 (.bz2); • -x: Indica que o conteúdo será extraído; • -v: Ativa o modo verbose, ou seja, lista todo o processo em tempo de execução; • -f: É obrigatório, esse comando vem de file (arquivo). Exemplo: Conforme pode ser observado, informamos o nome do arquivo a ser gerado, no exemplo acima pacote.tar.bz, e podemos passar um arquivo, diretório ou uma lista de vários arquivos e diretórios a serem empacotados. Observe que ao empacotamento foi adicionada a opção -z; isso irá instruir o tar que, após o empacotamento, ele deve compactar este arquivo com gzip. Já para extrair poderíamos fazer o seguinte: Caso o diretório de destino seja omitido, os arquivos serão extraídos e posteriormente desempacotados no local em que o comando foi executado. 3.2.16 gzip e bzip2 (compactar e descompactar) Estes só realizam a compactação de arquivos, ou seja, se tiver diretório no meio da história isso será um problema. Qual a solução mais simples? Utilize o empacotamento tar para gerar um arquivo único e posteriormente compacte-o com um dos comandos abaixo: wc [opções] [arquivo] $ tar [opções] [arquivo_final.tar] [arquivo1|diretório1] [arquivo2|diretório2] $ tar -zcf pacote.tar.gz arquivo.txt foto.png /home/user $ tar -zxf pacote.tar.gz /diretório_destino www.tinarede.com.br Opções: • -d: utilizado para extrair. Normalmente o bzip2 gera arquivos menores, porém, seu tempo de compactação é um pouco maior. 3.2.17 Outros comandos Essa obra não tem como objetivo ser um guia de comandos, logo, deixarei abaixo uma lista de comandos igualmente importantes, porém, caberá a você buscar mais informações sobre eles: • chown: altera o dono e o grupo do arquivo ou diretório • file: determina o tipo de um arquivo • df: exibe o espaço em disco • du: informa o tamanho dos objetos • free: mostra informações da memória RAM e memória SWAP • date: informa data/hora • uptime: mostra há quanto tempo o computador está ligado • uname -a: mostra a versão do kernel • diff: mostra a diferença entre 2 arquivos • awk: um cut mais sofisticado que permite busca por expressão regular • sed: editor de texto linha a linha • paste: junta arquivos na saída padrão • whereis: mostra o caminho do binário e das páginas de manual do comando informado • which: mostra somente o caminho do binário comando informado • ps: lista processos • type: revela o tipo do arquivo • kill: finaliza/mata processos • time: permite identificar quanto tempo levou a execução de um programa • touch: cria arquivo vazio • sudo: permite ao usuário obter privilégios de outro usuário, normalmente do root • uniq: remove linhas duplicadas A lista vai muito além dos comandos listados acima, porém, como já foi dito, esta obra não é um manual de comandos. $ gzip [opções] pacote.tar $ bzip2 [opções] pacote.tar Caso queira pesquisar outros comandos, obter definições mais completas e exemplos de uso para os comandos acima, sugiro que visite o endereço: http://www.uniriotec.br/~morganna/guia/index_guia.html www.tinarede.com.br 3.3 Curingas Os curingas são recursos utilizados para que possamos nos referir a um conjunto de arquivos ou diretórios de forma genérica, permitindo que mais de um arquivo ou diretório seja manipulado ao mesmo tempo. Com este recurso somos capazes de realizar pré-seleções e buscas avançadas. As possibilidades são infinitas; nesta obra iremos focar na sua forma de uso mais cotidiana, contudo, nada o impede de se aprofundar no assunto ao buscar mais informações na web. Existem basicamente três tipos de curingas: • * (asterisco): atua como substituto para uma sequência de caracteres; • ? (interrogação): atua como substituto para um caractere; • [ ] (colchetes): atuam como substitutos para um conjunto de caracteres predefinidos. Exemplos básicos de uso: No exemplo abaixo, informamos que iremos remover qualquer arquivo/diretório que comece com “arq”, tenha qualquer sequência posterior e termine com “.txt”: Já neste exemplo iremos remover qualquer arquivo/diretório que comece com qualquer letra, seguida pela sequência “rquivo”, e finalize com qualquer sequência de caracteres: Existe ainda a possibilidade de realizar buscas considerando um intervalo alfanumérico ou uma listapredefinida: Na sentença acima estamos removendo o arquivo2.txt e o arquivo4.txt, porém, se no lugar da vírgula tivéssemos colocado um hífen (-), removeríamos o intervalo que vai de 2 a 4. Os curingas podem ser utilizados no sistema como um todo, não somente com o comando rm. 3.4 Utilizando | (pipe) para direcionar o processamento O pipe, representado por uma barra ( | ), permite enviar a saída (stdout) de um programa para a entrada (stdin) de outro; este recurso é muito interessante, pois permite que o programa seguinte continue o processamento dos dados. Exemplo: $ rm arq*.txt $ rm ?rquivo.* rm arquivo[2,4].txt ls /etc | sort www.tinarede.com.br No comando acima utilizamos o “ls” para listar os arquivos do diretório “/etc”; inserimos um pipe para pegar essa saída e mandar para o programa “sort”. Este programa tem a função de ordenar caracteres alfanuméricos, ou seja, ele irá reordenar em ordem alfanumérica a saída do ls. É possível encadear quantas instruções forem necessárias; isso vai depender da sua necessidade. 3.5 Encadeando execuções com ; (ponto e vírgula) e && Podemos encadear execuções ao utilizar os símbolos ; (ponto e vírgula) e && (dois “e” comerciais). Existe uma diferença sutil, porém, extremamente relevante entre essas duas formas de encadear execuções. Veja como utilizá-las: A primeira instrução irá retornar uma lista de diretórios. Já a segunda, uma mensagem de erro informando que o arquivo ou diretório não foi encontrado. Ao utilizar ; (ponto e vírgula) somos capazes de encadear numa mesma linha várias instruções a serem executadas sequencialmente, e independentemente do resultado da instrução anterior a próxima será executada. Já ao utilizar &&, instruímos o sistema a executar a próxima instrução somente se a anterior tiver sido executada com sucesso. No exemplo acima, a linha 2 não realizou a listagem de diretórios pois o /ettc não existe, logo a instrução “cd /ettc” foi concluída com erro, não passando assim na validação do &&. 3.5.1 Exemplos Os comandos acima haviam sido apresentados como manipuladores de arquivos, porém, estes podem ser utilizados com pipe (|) para processar a saída de outro comando. Essa forma de uso não se limita aos programas apresentados até aqui. 3.5.2 Redirecionar saída com > ou >> O pipe pega a saída de um comando e joga para a entrada do outro; isso permite um processamento encadeado. Já os operadores > e >> permitem redirecionar a saída para um arquivo: • > (sinal de maior que): permite redirecionar a saída para um arquivo. Caso este arquivo exista, seu conteúdo anterior será apagado; do contrário, ele será criado; cd /ettc ; ls / cd /ettc && ls / ls -l /etc | more ls -l /etc | wc www.tinarede.com.br • >> (dois sinais de maior que): permite redirecionar a saída para um arquivo. Caso o arquivo exista, a saída será adicionada ao seu fim; do contrário, um arquivo será criado. Exemplo: A instrução acima lista o conteúdo do diretório /etc e redireciona a saída que seria apresentada na tela para o arquivo output.txt que não existia no diretório /tmp, e portanto foi criado. Para ver o fruto de seu trabalho, utilize o comando de leitura cat da seguinte forma: Viu só? O conteúdo gerado pelo comando ls -l está no arquivo, logo o redirecionamento ocorreu com sucesso. Este recurso é muito valioso; pode ter certeza de que em algum momento irá precisar dele para gerar relatórios, salvar lista de arquivos ou até mesmo output de algum shell script (tema para outro momento). 3.6 Atalhos essenciais Os atalhos abaixo têm como objetivo facilitar nossa vida. Neste caso em especial, os caracteres digitados não são case-sensitive, ou seja, tanto faz digitá-los em minúsculo ou maiúsculo, seu efeito será o mesmo: • Pressione Back Space para apagar um caractere à esquerda do cursor; • Pressione Delete para apagar o caractere acima do cursor; • Pressione CTRL + L ou Home para colocar o cursor no início da linha; • Pressione CTRL + E ou End para colocar o cursor no final da linha; • Pressione CTRL + U para apagar o que estiver à esquerda do cursor. O conteúdo apagado pode ser colado ao pressionar CTRL + Y; • Pressione CTRL + K para apagar o que estiver à direita do cursor. O conteúdo apagado pode ser colado ao pressionar CTRL + Y; • Pressione CTRL + L para limpar a tela; • Pressione CTRL + C para abrir uma nova linha de comando, descartando a atual; • Pressione CTRL + D para sair do shell. 3.7 Resumo O segredo para ter sucesso neste capítulo não está em decorar a lista de comandos, mas sim em saber que determinada ação pode ser executada. Quando precisar executar a ação desejada, você pesquisa o comando e utiliza o man e o help para saber como ele funciona. Com o passar do tempo, você irá naturalmente decorar as opções mais relevantes. ls -l /etc > /tmp/output.txt cat /tmp/output.txt www.tinarede.com.br Além dos comandos, vimos como utilizar curingas, pipe, redirecionadores de saída e operadores de encadeamento, porém, nada disso irá fixar-se na mente se você não praticar; então, antes de ir para o próximo capítulo, sugiro que volte ao início deste e teste todos os comandos passados até aqui. Mãos à obra! www.tinarede.com.br Capítulo 4 Usuários, grupos e permissões "Pensa como pensam os sábios, mas fala como falam as pessoas simples" -- Aristóteles Um dos recursos do GNU/Linux que mais me encanta é o seu controle de permissões baseado em usuários e grupos, recurso este que atribui ao sistema do pinguim uma camada extra de segurança. Neste capítulo iremos aprender a criar usuários e grupos, bem como a manipular suas propriedades e permissões. 4.1 O que é um usuário Indivíduo que tem direito ou privilégio de usar ou usufruir de algo. No escopo deste capítulo, o usuário será um indivíduo que terá ou não permissão para modificar, visualizar e/ou executar algo no sistema. 4.2 O que é um grupo de usuários É um conjunto de pessoas ou indivíduos que possuem ou buscam os mesmos objetivos. No escopo deste capítulo, os grupos são formados por usuários que terão privilégios ou permissões comuns entre si. É mais simples/rápido gerenciar grupos de usuários do que usuários de forma individual. 4.3 O que são permissões Segundo o dicionário, são o consentimento, a licença, a autorização dada a alguma coisa. No universo GNU/Linux as permissões são mecanismos pelos quais restringimos ou autorizamos os usuários ou grupos a modificar, visualizar ou executar algo. 4.4 Gerenciamento de usuários e grupos É trivial que todo utilizador de sistemas saiba criar, editar e excluir usuários e grupos. Tendo, é claro, a consciência da importância desses recursos, de como eles realmente funcionam e seus benefícios. Antes de prosseguirmos, é importante que você saiba da existência de dois arquivos altamente importantes no nível de sistema. São eles: § /etc/passwd: é a base onde ficam armazenados os usuários da máquina; www.tinarede.com.br § /etc/shadow: é a base onde ficam armazenadas as senhas (hash) dos usuários; § /etc/group: é a base onde ficam armazenados os grupos existentes. 4.4.1 Criar usuário Existem basicamente duas formas de criar um usuário no sistema. Veja a sintaxe: • useradd: cria um usuário simples, que não possui senha nem diretório /home; • adduser: cria um usuário completo, com senha e diretório /home. Estes nomes de usuários são interessantes para nós, meros mortais, porém, o sistema não os compreende. Quando um usuário é criado, a ele é atribuído um ID, pelo qual o sistema interpreta e identifica os usuários. Para consultar um ID, utilize a instrução: Será retornada uma linha com três colunas: • uid: id do usuário; • gid: id do grupo do usuário;
Compartilhar