Baixe o app para aproveitar ainda mais
Prévia do material em texto
CURSO TÉCNICO EM INFORMÁTICA PARA INTERNET PROF. GENILSON ISRAEL DA SILVA SISTEMAS OPERACIONAIS Campus Barbacena SUDESTE DE MINAS GERAIS Sumário Palavras do Professor...........................................................................................................................6 Apresentação da Disciplina..................................................................................................................7 Capítulo 1 – Introdução........................................................................................................................8 O Linux............................................................................................................................................8 Algumas Características do Linux:.............................................................................................9 Distribuições do Linux...................................................................................................................11 Debian.......................................................................................................................................11 Ubuntu.......................................................................................................................................12 Slackware..................................................................................................................................12 SuSE..........................................................................................................................................12 Red Hat Enterprise Linux.........................................................................................................12 Fedora........................................................................................................................................12 Software Livre...............................................................................................................................13 Além do Software.....................................................................................................................14 Para quem está migrando (ou pensando em migrar) do Windows para o Linux...........................15 Capítulo 2 – Conhecendo o Shell.......................................................................................................15 Terminal Virtual (console).............................................................................................................16 Primeiro contato com o shell.........................................................................................................16 Comandos do Prompt.....................................................................................................................18 cd...............................................................................................................................................19 ls................................................................................................................................................19 cp...............................................................................................................................................20 mv..............................................................................................................................................20 mkdir.........................................................................................................................................21 rm..............................................................................................................................................21 rmdir..........................................................................................................................................21 df...............................................................................................................................................22 du...............................................................................................................................................22 cat..............................................................................................................................................22 touch..........................................................................................................................................22 Desligando.....................................................................................................................................23 Informações sobre o hardware.......................................................................................................23 Rede...............................................................................................................................................23 Localizando arquivos e diretórios..................................................................................................24 Instalando e removendo aplicativos...............................................................................................24 Comandos Internos........................................................................................................................29 Comandos Externos.......................................................................................................................29 Curingas.........................................................................................................................................30 Redirecionamentos e Pipe..............................................................................................................31 Capítulo 3 – Arquivos e diretórios......................................................................................................32 Diretórios.......................................................................................................................................32 Diretório Raiz............................................................................................................................34 Diretório atual...........................................................................................................................35 Diretório home..........................................................................................................................35 Diretório Superior.....................................................................................................................35 Diretório Anterior......................................................................................................................36 Caminho na estrutura de diretórios...........................................................................................36 Estrutura básica de diretórios do Sistema Linux.......................................................................36 Arquivos.........................................................................................................................................37 Extensão de arquivos.....................................................................................................................37 Tamanho de arquivos................................................................................................................38 Arquivo texto e binário.............................................................................................................38 Manipulando arquivos no Shell.....................................................................................................39 O editor VIM.............................................................................................................................39 O editor Nano............................................................................................................................44 Exibindo o início e o fim de arquivos texto..............................................................................45Compactação e descompactação de arquivos e diretórios.............................................................46 Conhecendo o tar......................................................................................................................46 O tipo .tar.gz..............................................................................................................................48 Conhecendo o zip/unzip............................................................................................................49 Capítulo 4 – Discos e partições..........................................................................................................50 Sistemas de arquivos......................................................................................................................50 Partições.........................................................................................................................................50 Montando e desmontando partições..............................................................................................52 O arquivo fstab...............................................................................................................................56 Capítulo 5 – Administração de usuários.............................................................................................56 Tipos de usuário.............................................................................................................................57 Superusuário (sudo) ou administrador......................................................................................57 Usuários de sistemas.................................................................................................................58 Usuários comuns.......................................................................................................................58 Permissões.....................................................................................................................................58 Atribuindo permissões..............................................................................................................60 A notação octal..........................................................................................................................61 Criando usuários............................................................................................................................61 Criando grupos...............................................................................................................................61 Alterando dono e grupo de um arquivo.........................................................................................62 Referências.........................................................................................................................................64 Palavras do Professor Prezado aluno, Nós somos criaturas de hábito. Normalmente demonstramos uma certa resistência ao ter que mudar a forma como normalmente fazemos as coisas. Contudo, também somos altamente adaptáveis. Com boa vontade e dedicação não há nada que não consigamos fazer. Assim, é comum que muitas pessoas demonstrem a princípio uma certa resistência ao utilizar uma distribuição Linux. Sem nem mesmo se esforçar já bradam aos quatro ventos que é “um sistema ruim”, “difícil”, “todo diferente”, “só para nerd”, dentre outras bobagens. O MacOS é o sistema utilizado nos Macbooks da Apple. Você já deve ter ouvido falar deles. São muito bonitos e possuem perfeita integração com o sistema operacional, por isso entregam uma experiência de uso muito superior. Os usuários de produtos da Apple geralmente são fortes defensores da marca (sim, a Apple fabrica tanto o hardware quanto o software). Ter um Macbook é de certa forma um sinal de status. Então, mesmo que o sistema operacional seja diferente, um usuário que tenha se acostumado com o Windows vai quebrar a cabeça com o sistema, mas não vai desistir. Você já ouviu alguém falar que MacOS é “muito difícil”? Não, porque normalmente as pessoas estão mais abertas a dedicar um pouco mais de seu tempo para aprender a utilizá-lo. Uma pergunta que muitos fazem é: qual é o melhor sistema operacional? Windows ou Linux? Eu costumo dizer que não há uma resposta definitiva, uma vez que isso depende muito de qual será o uso. Considerando uma série de características que para mim são importantes, o Linux é sem dúvidas o melhor. Contudo, pode ser que as características consideradas por outro usuário sejam outra completamente diferentes! Como aluno do curso Técnico em Informática para Internet, você acabará se deparando com o uso do Linux em muitas ocasiões. Quando precisar, por exemplo, instalar um servidor Web, banco de dados, PHP, etc., os conhecimentos adquiridos nesta disciplina serão de fundamental importância. Dedique-se agora a aprender um pouco mais sobre o uso do Linux, principalmente utilizando linha de comando. Algumas distribuições Linux, como o Ubuntu por exemplo, prezam pela facilidade de uso e trazem interfaces muito amigáveis. Já possuem diversos software pré-instalados, bem como diversas rotinas de configuração prontas, no intuito de facilitar a vida do usuário. Tudo o que você precisa fazer é dar uma chance ao software livre. Depois de se acostumar, você dificilmente vai querer outra coisa :) Prof. Genilson 4 Apresentação da Disciplina Na disciplina de Sistemas Operacionais serão abordados conceitos básicos do uso de distribuições Linux, com um foco maior no uso em modo texto, ou seja, utilizando linha de comando. Será utilizado como base o sistema Ubuntu Linux, que é uma derivação do Debian. Por isso, os comandos utilizados podem variar caso seja utilizada uma distribuição diferente, mas normalmente isso não acontece. Esta apostila é uma adaptação de artigos, tutoriais e livros listados na seção Referências. No capítulo 1, veremos o que são Distribuições Linux. No capítulo 2 nos familiarizaremos um pouco com o uso da linha de comando, aprendendo mais sobre comandos básicos do Prompt para a execução de tarefas básicas. No capítulo 3 aprenderemos sobre a árvore de diretórios do Linux e como podemos manipular arquivos e diretórios pela linha de comando. No capítulo 4 entenderemos o que são partições de um disco rígido e como são utilizadas dentro do Linux. Não menos importante, é o gerenciamento de usuários e permissões, apresentados no capítulo 05. No capítulo 6, que não integra a apostila, será apresentado o Sistema Operacional Ubuntu Linux, com foco na utilização pela interface gráfica. É importante que você se aprofunde ao máximo nesse assunto. Mãos à obra, e bons estudos! 5 Capítulo 1 – Introdução O Linux Tudo começou em 1991, quando Linus Torvalds começou a trabalhar no desenvolvimento de um sistema Unix para rodar em seu 386. Na época, o único sistema similar era o Minix, um sistema operacional para uso acadêmico, que era bastante limitado. No início, Linus usava o Minix para rodar o editor, compiladores e outras ferramentas de desenvolvimento que utilizava para desenvolver o kernel Linux, mas, a partir de um certo ponto, ele passou a usar o próprio Linux. Ou seja, depois de um breve período de encubação dentro do Minix, o Linux passou a ser desenvolvido dentro do próprio Linux. :) De início, o kernel Linux era um projeto muito pequeno, o hobby de um único programador. Entretanto, ele tinha uma grande vantagem em relação aos sistemas UNIX que o precederam: o simples fato de ser disponibilizado sob a licença GPL. Isso permitiu que outros programadores adotassem o projeto, passando a contribuir com melhorias e correções. Subitamente, toda a demanda acumulada em relação a um sistema Unix para micros PC foi canalizada em torno do Linux, fazendocom que o sistema passasse a crescer em um ritmo cada vez mais acelerado, chegando ao que temos nos dias de hoje. Embora o kernel seja o componente mais importante do sistema (e também o mais complexo), ele não é o único. Qualquer sistema operacional moderno é a combinação de um enorme conjunto de drivers, bibliotecas, aplicativos e outros componentes. O kernel é apenas uma base sobre a qual todos eles rodam. Além do período de incubação dentro do Minix, o Linux se beneficiou de diversos outros projetos anteriores, tais como o X (responsável pela interface gráfica) e inúmeros utilitários, bibliotecas, linguagens de programação, compiladores e assim por diante. A eles se soma uma grande lista de interfaces e aplicativos que surgiram nos anos seguintes, tais como o GNOME, o KDE, o Firefox e o OpenOffice. O Linux é um sistema Operacional de código aberto distribuído gratuitamente pela Internet. Seu código fonte é liberado como Free Software (software livre), sob licença GPL. O aviso de copyright do kernel feito por Linus descreve detalhadamente isto e nem mesmo ele pode fechar o sistema para que seja usado apenas comercialmente. Isto quer dizer que você não precisa pagar nada para usar o Linux, e não é crime fazer cópias para instalar em outros computadores, nós inclusive incentivamos você a fazer isto. Ser um sistema de código aberto pode explicar a performance, estabilidade e velocidade em que novos recursos são adicionados ao sistema. O requisito mínimo para rodar o Linux depende do kernel que será usado: 2.2.x - Computador 386 SX com 2 MB de memória 2.4.x - Computador 386 SX com 4MB de memória 2.6.x - Computador 486 DX com no mínimo 8MB Para espaço em disco é requerido 500MB para uma instalação básica usando modo texto com suporte a rede. Claro que não é considerada a execução de ambiente gráfico ou serviços de rede em produção, que neste caso é exigido mais memória RAM e espaço em disco para armazenamento de dados de programas e usuários. 6 O sistema segue o padrão POSIX que é o mesmo usado por sistemas UNIX e suas variantes. Assim, aprendendo o Linux você não encontrará muita dificuldade em operar um sistema do tipo UNIX, FreeBSD, HPUX, SunOS, etc., bastando apenas aprender alguns detalhes encontrados em cada sistema. O código fonte aberto permite que qualquer pessoa veja como o sistema funciona (útil para aprendizado), corrigir algum problema ou fazer alguma sugestão sobre sua melhoria, esse é um dos motivos de seu rápido crescimento, do aumento da compatibilidade de periféricos (como novas placas sendo suportadas logo após seu lançamento) e de sua estabilidade. Outro ponto em que ele se destaca é o suporte que oferece a placas, CD/DVD-RWs, BluRay e outros tipos de dispositivos de última geração e mais antigos (a maioria deles já ultrapassados e sendo completamente suportados pelo sistema operacional). Este é um ponto forte para empresas que desejam manter seus micros em funcionamento e pretendem investir em avanços tecnológicos com as máquinas que possui. O Linux é desenvolvido por milhares de pessoas espalhadas pelo mundo, cada uma fazendo sua contribuição ou mantendo alguma parte do kernel gratuitamente. Linus Torvalds ainda trabalha em seu desenvolvimento e na coordenação dos grupos de trabalho do kernel. O suporte ao sistema também se destaca como sendo mais eficiente e rápido do que qualquer programa comercial disponível no mercado. Existem milhares de consultores e empresas especializadas no suporte e treinamento espalhados ao redor do mundo. Outra opção de suporte é através da comunidade Linux; você pode se inscrever em uma lista de discussão e relatar sua dúvida ou alguma falha, e sua mensagem será vista por centenas de usuários na Internet e algum deles irá te ajudar ou avisará as pessoas responsáveis sobre a falha encontrada para devida correção. Segundo o http://www.top500.org/ (que mantém um rank atualizado dos 500 supercomputadores mais poderosos do mundo), em novembro de 2015 nada menos do que 494 dos 500 supercomputadores mais poderosos rodavam diferentes versões do Linux (http://www.top500.org/statistics/list/). Dos restantes, 6 rodavam outros sistemas Unix. Nenhum rodava Windows. Algumas Características do Linux: • É livre e desenvolvido voluntariamente por programadores experientes, hackers, e contribuidores espalhados ao redor do mundo que têm como objetivo a contribuição para a melhoria e crescimento deste sistema operacional. Muitos deles estavam cansados do excesso de propaganda (Marketing) e baixa qualidade de sistemas comerciais existentes • Também recebe apoio de grandes empresas como IBM, Sun, HP, etc. para seu desenvolvimento • Convivem sem nenhum tipo de conflito com outros sistemas operacionais (com o DOS, Windows, OS/2) no mesmo computador. • Multiusuário • Suporte a nomes extensos de arquivos e diretórios (255 caracteres) • Modularização - O Linux somente carrega para a memória o que é usado durante o processamento, liberando totalmente a memória assim que o programa/dispositivo é finalizado • Suporte nativo a rede e tecnologias avançadas como: balanceamento de carga, ips alias, 7 failover, vlans, bridge, trunking, OSPF, BGP • Não há a necessidade de se reiniciar o sistema após modificação da configuração de qualquer periférico ou parâmetros de rede. A reinicialização somente é necessária no caso de uma instalação interna de um novo periférico, falha em algum hardware (queima do processador, placa-mãe, etc.) • Suporte nativo a virtualização, onde o Linux se destaca como plataforma preferida para execução de múltiplos sistemas operacionais com performance e segurança • O crescimento e novas versões do sistema não provocam lentidão, pelo contrário, a cada nova versão os desenvolvedores procuram buscar maior compatibilidade, acrescentar recursos úteis e melhor desempenho do sistema (como o que aconteceu na passagem do kernel 2.0.x para 2.2.x, da 2.2.x para a 2.4.x e da 2.4.x para a 2.6.x) • O GNU/Linux é distribuído livremente e licenciado de acordo com os termos da GPL • Acessa corretamente discos formatados pelo DOS, Windows, Novell, OS/2, NTFS, SunOS, Amiga, Atari, Mac, etc. • O Linux é muito menos vulnerável a vírus. Devido à separação de privilégios entre processos e respeitadas as recomendações padrão de política de segurança e uso de contas privilegiadas (como a de root, como veremos adiante), programas como vírus se tornam inúteis pois têm sua ação limitada pelas restrições de acesso do sistema de arquivos e execução. Claro que se o usuário inadvertidamente der permissão para que um script malicioso seja executado, o estrago será feito • Qualquer programa (nocivo ou não) poderá alterar partes do sistema que possui permissões (será abordado como alterar permissões e tornar seu sistema mais restrito no decorrer do guia). Frequentemente são criados exploits que tentam se aproveitar de falhas existentes em sistemas desatualizados e usá-las para causar danos. Erroneamente este tipo de ataque é classificado como vírus por pessoas mal-informadas e são resolvidas com sistemas bem mantidos. Em geral, usando uma boa distribuição que tenha um eficiente sistema de atualização e que seja bem configurada, você terá 99.9% de tranquilidade • Suporte a dispositivos Plug-and-Play • Suporte nativo a pendrives, dispositivos de armazenamento e cartões de memória. • Os sistemas de arquivos usados pelo GNU/Linux (Ext2, Ext3, reiserfs, xfs, jfs) organiza os arquivos de forma inteligente evitando a fragmentação e tornando-o um poderoso sistema para aplicações multiusuário exigentes e gravações intensivas • Por ser um sistema operacional de código aberto, você pode ver o queo código fonte (instruções digitadas pelo programador) faz e adaptá-lo às suas necessidades ou de sua empresa. Esta característica é uma segurança a mais para empresas sérias e outros que não querem ter seus dados roubados • Suporte a diversos dispositivos e periféricos disponíveis no mercado, tanto novos como obsoletos • Empresas especializadas e consultores especializados no suporte ao sistema espalhados por todo o mundo. 8 Distribuições do Linux Só o kernel GNU/Linux não é suficiente para se ter um sistema funcional, mas é o principal. Existem grupos de pessoas, empresas e organizações que decidem “distribuir” o Linux junto com outros aplicativos (como, por exemplo, editores gráficos, planilhas, bancos de dados, ambientes de programação, formatação de documentos, firewalls, etc). Este é o significado essencial de distribuição. Cada distribuição tem sua característica própria, como o sistema de instalação, o objetivo, a localização de programas, nomes de arquivos de configuração, etc. A escolha de uma distribuição é pessoal e depende das necessidades de cada um. Algumas distribuições bastante conhecidas são: Ubuntu, Debian, Slackware, Red Hat, Gentoo, Suse todas usando o SO Linux como kernel principal (Debian é uma distribuição independente de kernel e pode ser executada sob outros kernel, como o GNU hurd ou o kernel BSD). A escolha de sua distribuição deve ser feita com muita atenção, não adianta perguntar em canais de IRC sobre qual é a melhor distribuição, ser levado pelas propagandas, pelo vizinho, etc. O melhor caminho para a escolha da distribuição, acredito eu, seria perguntar as características de cada uma e porque essa pessoa gosta dela em vez de perguntar qual é a melhor, porque uma distribuição que atenda às necessidades de um usuário pode não ser a melhor para lhe atender. Segue abaixo as características de algumas distribuições seguidas do site principal e endereço para download: Debian http://www.debian.org/ - Distribuição desenvolvida e atualizada através do esforço de voluntários espalhados ao redor do mundo, seguindo o estilo de desenvolvimento GNU/Linux. Por este motivo, foi adotada como a distribuição oficial do projeto GNU. Possui suporte a língua Portuguesa, é a única que tem suporte a 14 arquiteturas diferentes (i386, IA64, AMD64, Alpha, Sparc, PowerPc, Macintosh, Arm, etc.) e aproximadamente 15 sub arquiteturas. A instalação da distribuição pode ser feita tanto através de Disquetes, CD-ROM, Tftp, Ftp, NFS ou através da combinação de vários destes em cada etapa de instalação. ftp://ftp.debian.org/ - Endereço para download. Ubuntu http://www.ubuntu.com/ - Variante da distribuição Debian voltada a interação mais amigável com o usuário final e facilidade de instalação. Atualmente é a melhor para usuários que tem o primeiro contato com o Linux. Conta tanto com a instalação do sistema em HD e execução através de Live CD. No decorrer dessa apostila, será considerado o sistema operacional Ubuntu, podendo os comandos variar de acordo com a distribuição. http://www.ubuntu.com/getubuntu/download/ - Endereço para download do Ubuntu. 9 Slackware http://www.slackware.com/ - Distribuição desenvolvida por Patrick Volkerding, objetiva alcançar facilidade de uso e estabilidade como prioridades principais. Foi a primeira distribuição a ser lançada no mundo e costuma trazer o que há de mais novo enquanto mantém uma certa tradição, provendo simplicidade, facilidade de uso e com isso flexibilidade e poder. Desde a primeira versão lançada em Abril de 1993, o Projeto Slackware Linux tem buscado produzir a distribuição Linux mais UNIX-like, ou seja, mais parecida com UNIX. O Slackware segue os padrões Linux como o Linux File System Standard, que é um padrão de organização de diretórios e arquivos para as distribuições. http://ftp.slackware-brasil.com.br/ - Ftp da distribuição Slackware. SuSE http://www.suse.com/ - Distribuição comercial Alemã com a coordenação sendo feita através dos processos administrativos dos desenvolvedores e de seu braço norte-americano. O foco da Suse é o usuário com conhecimento técnico no Linux (programador, administrador de rede, etc.) e não o usuário iniciante no Linux. Preferencialmente a administração deve ser feita usando o Yast, mas também pode ser feita manualmente através de alteração dos arquivos de configuração. Possui suporte as arquiteturas Intel x86 e Alpha. Sua instalação pode ser feita via CD-ROM ou CD- DVD (é a primeira distribuição com instalação através de DVD). ftp://ftp.suse.com/ - Ftp da distribuição SuSE. Red Hat Enterprise Linux http://www.redhat.com/ - Distribuição comercial suportada pela Red Hat e voltada a servidores de grandes e médias empresas. Também conta com uma certificação chamada RHCE específica desta distro. Ela não está disponível para download, apenas vendida a custos a partir de 179 dólares (a versão workstation) até 1499 dólares (advanced server). Fedora https://getfedora.org/pt/ - O Fedora Linux é a distribuição de desenvolvimento aberto patrocinada pela RedHat e pela comunidade, originada em 2002 e baseada em versão da antiga linha de produtos RedHat Linux. Esta distribuição não é suportada pela Red Hat como distribuição oficial (ela suporta apenas a linha Red Hat Enterprise Linux), devendo obter suporte através da comunidade ou outros meios. A distribuição Fedora dá prioridade ao uso do computador como estação de trabalho. Além de 10 contar com uma ampla gama de ferramentas de escritório possui funções de servidor e aplicativos para produtividade e desenvolvimento de softwares. Considerado um dos sistemas mais fáceis de instalar e utilizar, inclui tradução para português do Brasil e suporte às plataformas Intel e 64 bits. https://admin.fedoraproject.org/mirrormanager/ - Mirrors para download da distribuição Fedora. Software Livre Por “software livre” devemos entender aquele software que respeita a liberdade e senso de comunidade dos usuários. Grosso modo, os usuários possuem a liberdade de executar, copiar, distribuir, estudar, mudar e melhorar o software. Assim sendo, “software livre” é uma questão de liberdade, não de preço. Para entender o conceito, pense em “liberdade de expressão”, não em “cerveja grátis”. Com essas liberdades, os usuários (tanto individualmente quanto coletivamente) controlam o programa e o que ele faz por eles. Quando os usuários não controlam o programa, o programa controla os usuários. O desenvolvedor controla o programa e, por meio dele, controla os usuários. Esse programa não-livre e “proprietário” é, portanto, um instrumento de poder injusto. Um programa é software livre se os usuários possuem as quatro liberdades essenciais: • A liberdade de executar o programa como você desejar, para qualquer propósito (liberdade 0). • A liberdade de estudar como o programa funciona, e adaptá-lo às suas necessidades (liberdade 1). Para tanto, acesso ao código-fonte é um pré-requisito. • A liberdade de redistribuir cópias de modo que você possa ajudar ao próximo (liberdade 2). • A liberdade de distribuir cópias de suas versões modificadas a outros (liberdade 3). Desta forma, você pode dar a toda comunidade a chance de beneficiar de suas mudanças. Para tanto, acesso ao código-fonte é um pré-requisito. Um programa é software livre se os usuários possuem todas essas liberdades. Portanto, você deve ser livre para redistribuir cópias, modificadas ou não, gratuitamente ou cobrando uma taxa pela distribuição, a qualquer um, em qualquer lugar. Ser livre para fazer tudo isso significa (entre outras coisas) que você não deve ter que pedir ou pagar pela permissão para fazê-lo. Você também deve ter a liberdade de fazer modificações e usá-las privativamente ou em seu trabalho ou lazer,sem sequer mencionar que eles existem. Se publicar suas modificações, você não deve ser obrigado a avisar ninguém em particular, ou de qualquer modo em particular. A liberdade de executar o programa significa que qualquer tipo de pessoa ou organização é livre para usá-lo em qualquer tipo de sistema computacional, ou para qualquer tipo de trabalho e propósito, sem que seja necessário comunicar ao desenvolvedor ou qualquer outra entidade específica. Nessa liberdade, é o propósito do usuário que importa, não aquele do desenvolvedor; você, como usuário, é livre para rodar o programa para seus propósitos e, caso você o distribua a outra pessoa, ela também será livre para executá-lo com os propósitos dela, mas você não é intitulado a impor seus propósitos sobre ela. Para que as liberdades 1 e 3 (a liberdade de modificar e a liberdade de publicar versões modificadas) façam sentido, você deve ter acesso ao código-fonte do programa. Consequentemente, acesso ao código-fonte é uma condição necessária para o software livre. Código-fonte 11 “obscurecido” não é código-fonte real e não conta como código-fonte. A liberdade 1 inclui a liberdade de usar sua versão modificada em lugar da original. Se um programa é entregue num produto projetado para rodar a versão de outra pessoa, mas se recusa a rodar a sua — prática conhecida como “tivoização”, “travamento” ou ainda (na terminologia perversa de seus praticantes) como “boot seguro” - a liberdade 1 se torna ficção teórica ao invés de liberdade prática. Isso não é suficiente. Em outras palavras, esses binários não são software livre mesmo que o código-fonte a partir do qual foram compilados seja livre. Para que essas liberdades sejam reais, elas devem ser permanentes e irrevogáveis desde que você não faça nada de errado; se o desenvolvedor do software tiver o poder de revogar a licença, ou adicionar restrições retroativamente a seus termos, sem que você faça nada errado para dar um motivo, o software não é livre. Todavia, certas regras sobre a maneira de distribuir o software são aceitáveis, quando elas não entram em conflito com as liberdades centrais. Por exemplo, o copyleft (apresentado de maneira muito simples) é a regra de que, quando redistribuindo um programa, você não pode adicionar restrições que neguem as liberdades centrais de outras pessoas. Essa regra não entra em conflito com as liberdade centrais; na verdade, ela as protege. “Software livre” não significa “não comercial”. Um programa livre deve estar disponível para uso comercial, desenvolvimento comercial e distribuição comercial. Desenvolvimento comercial de software livre deixou de ser incomum; tais software livre comerciais são muito importantes. Você pode ter pago dinheiro por suas cópias de software livre, ou você pode tê-las obtido a custo zero, mas independentemente de como você conseguiu suas cópias, você sempre deve ter a liberdade para copiar e mudar o software, ou mesmo para vender cópias. Se uma modificação constitui ou não um aperfeiçoamento é uma questão subjetiva. Se o seu direito de modificar um programa é limitado, fundamentalmente, a mudanças que outra pessoa considere um aperfeiçoamento, o programa não é livre. Quando falamos sobre software livre, é melhor evitar termos como “dado” ou “de graça”, porque estes termos implicam que a questão é o preço, e não a liberdade. Além do Software Manuais de software devem ser livres pelas mesmas razões que software deve ser livre, e porque manuais são, com efeito, parte do software. Os mesmos argumentos também fazem sentido para outros tipos de trabalhos de uso prático — isto é, trabalhos que englobam conhecimento útil, como obras educativas e de referência. A Wikipédia é o exemplo mais conhecido. Qualquer tipo de obra pode ser livre, e a definição de software livre pode ser estendida para a definição de obras culturais livres, aplicável a qualquer tipo de obra. Código Aberto? Outro grupo começou a usar o termo “código aberto” (do inglês open source) com um significado parecido (mas não idêntico) ao de “software livre”. Nós preferimos o termo “software livre” porque, uma vez que você tenha ouvido que ele se refere à liberdade ao invés do preço, ele traz à mente a liberdade. A palavra “aberto” nunca se refere à liberdade. 12 Para quem está migrando (ou pensando em migrar) do Windows para o Linux Em sistemas GNU/Linux, a conta root não tem restrições de acesso ao sistema e pode fazer tudo o que quiser. É equivalente ao usuário normal do Windows (que normalmente é um usuário administrador). Use a conta root somente para manutenções no sistema e instalação de programas, qualquer movimento errado pode comprometer todo o sistema. No GNU/Linux os diretórios são separados por uma “/” e não por uma “\” como acontece no DOS. Da mesma forma, o diretório raiz no Linux é identificado pela “/”, enquanto que no Windows é utilizada uma letra para a unidade. Veja um exemplo de caminho para o diretório teste, existente na raiz, em cada um dos sistemas: Windows: C:\teste Linux: /teste Os comandos são case sensitive, o que significa que ele diferencia as letras maiúsculas de minúsculas em arquivos e diretórios. O comando ls e LS são completamente diferentes. A instalação de pacotes é feita de forma diferente do Windows, normalmente através de repositórios próprios da distribuição Linux. Não é necessário baixar o software de algum site qualquer para instalar, pois existem ferramentas que fazem uma busca nos repositórios e já instalam o software solicitado e todas as suas dependências (outros softwares dos quais dependam para funcionar). Sempre que tiver dúvidas sobre a utilização de algum comando, basta digitar no terminal “man comando” e você terá acesso ao manual do comando, explicando para que serve cada parâmetro e como utilizá-lo. O parâmetro --help traz uma ajuda rápida, com a assinatura do comando, ou seja, sua descrição e quais parâmetros possui. Basta usar “comando --help”. Capítulo 2 – Conhecendo o Shell Shell é o programa responsável por interpretar as instruções enviadas pelo usuário e seus programas ao sistema operacional (o kernel). É ele que executa comandos lidos do dispositivo de entrada padrão (teclado) ou de um arquivo executável. É a principal ligação entre o usuário, os programas e o kernel. O GNU/Linux possui diversos tipos de interpretadores de comandos, entre eles podemos destacar o bash, ash, csh, tcsh, sh, etc. Entre eles o mais usado é o bash. O interpretador de comandos do DOS, por exemplo, é o command.com. Os comandos podem ser enviados de duas maneiras para o interpretador: interativa e não-interativa: Interativa: os comandos são digitados no prompt de comando e passados ao interpretador de comandos um a um. Neste modo, o computador depende do usuário para executar uma tarefa, ou próximo comando. Não-interativa: são usados arquivos criados pelo usuário com sequências de comandos (scripts), de forma que o computador execute-os na ordem encontrada no arquivo. Neste modo, o computador executa os comandos do arquivo um por um, executando o próximo quando o anterior é finalizado. Este sistema é útil quando temos que digitar por várias vezes seguidas um mesmo comando para executar tarefas repetitivas. Assim, o script será responsável por executar esse conjunto de instruções quando for necessário. 13 O shell bash possui ainda outra característica interessante: a completação dos nomes. Isto é feito ao pressionar-se a tecla TAB. Por exemplo: o comando “ls” é utilizado para listar arquivos e diretórios em uma determinada localização do disco. Ao digitar “ls tes” e pressionar <tab>, caso a completação de nomes encontre mais do que uma expressão que satisfaça apesquisa, ou nenhuma, é emitido um beep. Se for apertada novamente a tecla TAB imediatamente depois do beep, o interpretador de comandos listará as diversas possibilidades que satisfaçam a pesquisa, para que se possa escolher a correta (ou outro bip caso não exista mesmo uma opção). Para escolher uma opção, basta digitar a próxima letra do nome do arquivo ou diretório que você deseja acessar. Esse processo é repetido até que não haja mais opções ambíguas (ou seja, com mesma sequência de caracteres no nome). A completação de nomes funciona sem problemas para comandos internos. No Windows há algo parecido, porém muito menos eficiente e funcional (normalmente é listado o primeiro arquivo encontrado, sem se preocupar com a ambiguidade encontrada quando mais de um arquivo possui nomes com mesma sequência de caracteres no início. Terminal Virtual (console) Terminal (ou console) é o teclado e tela conectados em seu computador. O GNU/Linux faz uso de sua característica multiusuária usando os “terminais virtuais”. Um terminal virtual é uma seção de trabalho completamente independente de outras, que pode ser acessada no computador local ou remotamente via telnet, rsh, rlogin, etc. No GNU/Linux, em modo texto, você pode acessar outros terminais virtuais segurando a tecla ALT e pressionando F1 a F6. Cada tecla de função corresponde a um número de terminal do 1 ao 6 (o sétimo é usado por padrão pelo ambiente gráfico X). O GNU/Linux possui mais de 63 terminais virtuais, mas apenas 6 estão disponíveis inicialmente por motivos de economia de memória RAM. Se estiver usando o modo gráfico, você deve segurar CTRL+ ALT enquanto pressiona uma tela de <F1> a <F6>. Para voltar ao modo gráfico, pressione CTRL+ALT+ <F7>. Um exemplo prático: Se você estiver usando o sistema no Terminal 1 com o nome joao e desejar entrar como root para instalar algum programa, segure ALT enquanto pressiona <F2> para abrir o segundo terminal virtual e faça o login como root. Será aberta uma nova seção para o usuário root e você poderá retornar a hora que quiser para o primeiro terminal pressionando ALT+<F1>. Primeiro contato com o shell A figura 1.1 mostra como é um terminal de comandos (ou prompt de comandos). genilson: norme do usuário arch_gen: é o nome do host (computador). O @ (ou at, que em inglês significa “em”) indica que o usuário “genilson” está no host “arch_gen”. ~: Abreviação para a pasta do usuário, ou seja, indica que o local atual é o diretório home do usuário “genilson”. $: Indica tratar-se de um usuário comum. O usuário root é representado por “#”. 14 Figura 2.1 – Um prompt de comando Agora que entendemos o significado do prompt que aparece, vamos testar alguns comandos e ver o que acontece: genilson@arch_gen:~$ pwd /home/genilson genilson@arch_gen:~$ whoami genilson genilson@arch_gen:~$ date Ter Janeiro 10 12:19:01 BRT 2016 genilson@arch_gen:~$ Ao executar o comando pwd, o retorno foi exatamente o diretório que estamos atualmente chamando de current. O comando whoami exibe o nome do usuário atual que estamos usando e o date retorna a data atual. Não se preocupe ainda com os poderes de administrador sudo, veremos isso mais adiante. Sempre que quisermos digitar algum comando que já tenha sido executado antes, podemos fazer uso da tecla direcional para cima ou direcional para baixo. Isso possibilita navegarmos por uma lista de comandos que já foram executados. Existe a opção de vermos essa lista completa, graças ao history, que cria um histórico memorizando tudo o que já digitamos no shell: 15 genilson@arch_gen:~$ history 1 pwd 2 whoami 3 date 4 history genilson@arch_gen:~$ Outra recomendação para um uso mais produtivo do shell é utilizar a tecla tab, que possui a função de autocompletar, explicada anteriormente. Comandos do Prompt Apesar de a interface gráfica ser muito mais fácil de usar, é bom você ter, pelo menos, uma boa noção de como as coisas funcionam pelo prompt de comando. Isso vai lhe dar um domínio muito maior sobre o sistema. Comandos são ordens que passamos ao sistema operacional para executar uma determinada tarefa. Um comando pode ter argumentos (ou parâmetros), que podem ser opcionais ou obrigatórios. Sempre que você digitar um comando que exija algum argumento específico sem fornecer o argumento, será exibida uma mensagem de help resumida indicando o uso correto do comando. Argumentos opcionais servem para executar ações específicas. Argumentos obrigatórios são especificações necessárias à execução do comando. Via de regra, o uso se dá sempre da seguinte forma: comando argumento1 argumento2 argumentoN Repare que há sempre um espaço entre o comando e seus argumentos. Assim, caso em um dos argumentos você tente especificar algo com espaço em branco, serão considerados dois argumentos separados. Este é um erro muito comum entre os iniciantes. Exemplo: Para listar o que está na pasta etc, o usuário digita “ls / etc”. O comando ls entenderá que precisa listar dois diretórios, sendo o primeiro a raiz (/) e o segundo o etc. O comando correto é: “ls /etc”. Em vários tipos de documentação sobre Linux, você verá receitas (tutoriais) com longas listas de comandos que devem ser digitados para configurar ou alterar algo. Em muitos casos existe algum utilitário gráfico que permite fazer o mesmo, mas os autores geralmente preferem dar a receita de como fazer via linha de comando, pois nem todo mundo terá os utilitários à mão e muitas vezes existem diferenças entre as opções disponíveis nas diferentes distribuições. Ou seja, aprendendo a fazer via linha de comando, muito provavelmente será necessário aprender apenas uma vez. Vamos então a um guia rápido dos comandos básicos do terminal: cd cd [DIRECTORY] 16 Começando do básico, o comando “cd” (change directory) permite navegar entre os diretórios. Ao abrir o terminal, você começa dentro do seu diretório home (como “/home/genilson”) e pode acessar outros diretórios diretamente, especificando-os no comando, como em “cd /etc” ou “cd /mnt/cdrom”. O “.” representa o diretório atual e “..” representa o diretório superior. Para subir um diretório na estrutura de diretórios, use “cd ..” e, para voltar ao home, digite simplesmente “cd”, sem parâmetro algum, ou “cd ~”. Lembre-se que o “~” referencia o diretório home do usuário atual. Sempre que quiser confirmar em qual diretório está, use o comando “pwd”. Um caminho pode ser absoluto ou relativo. O caminho absoluto é aquele que começa a partir da raiz da árvore de diretórios (ou seja, a /). Relativo, é o caminho que começa a partir da localização atual. Por exemplo: um arquivo teste.txt existente no diretório home do usuário genilson, possui o seguinte caminho absoluto: /home/genilson/teste.txt Porém, para o usuário que estiver dentro do diretório /home, o caminho relativo será: genilson/teste.txt Para o usuário que estiver dentro do diretório /home/genilson, o caminho relativo será: ./teste.txt Lembre-se de que o ponto representa o diretório atual. Agora, suponhamos que o arquivo teste estivesse dentro do diretório /home, e o usuário estivesse dentro do diretório /home/genilson. O arquivo poderia ser referenciados pelos seguintes caminhos, respectivamente absoluto e relativo: /home/teste.txt ../teste.txt ls ls [OPTION]... [FILE]... Em seguida temos o “ls”, que serve para listar os arquivos dentro da pasta. Na maioria das distribuições, a listagem aparece colorida, permitindo diferenciar as pastas e os diferentes tipos de arquivos. As pastas aparecem em azul, os links em azul claro, os arquivos compactados em vermelho, as imagens em rosa, os executáveis em verde e os arquivos de texto e outros formatos em preto (ou em branco, de acordo com o esquema de cores usado). Para incluiros arquivos ocultos (que no Linux começam com "."), use “ls -a”. Para ver mais detalhes sobre cada arquivo, incluindo o tamanho, permissões de acesso e dono, use “ls -lh”. Para incluir os ocultos, adicione o “a”, como em “ls -lha”. A ordem dos parâmetros não altera o resultado do comando. Tanto faz digitar “ls -lha” ou “ls -alh”, você pode simplesmente decorar os parâmetros na ordem que achar mais fácil de lembrar. 17 cp cp [OPTION]... SOURCE... DIRECTORY Para copiar arquivos de uma pasta para outra usamos o “cp”, especificando o nome do arquivo e a pasta para onde ele vai, como em “cp arquivo.zip /mnt/sda1/”. Se você quiser copiar um arquivo que está em outra pasta para o diretório atual, inclua a localização completa do arquivo e em seguida o “.” (que representa o diretório atual), como em “cp /mnt/cdrom/video.avi .”. Você pode também usar o "*" como curinga para copiar vários arquivos. Para copiar todos os arquivos da pasta atual para a pasta “/mnt/hda6”, por exemplo, use “cp * /mnt/hda6”. Por default, o comando cp omite diretórios (ou se preferir, pastas), além de alterar as permissões dos arquivos ou pastas copiados. Por exemplo: quando o usuário root copia para o seu diretório algum arquivo de outro usuário do sistema, o dono do arquivo copiado é alterado para root. Um parâmetro bastante útil é o "-a", que faz com que o cp sempre copie recursivamente (ou seja, copie todos os arquivos, pastas e subpastas), mantenha as permissões originais e preserve os links simbólicos (um link simbólico é um atalho) que encontrar pelo caminho. Para copiar uma pasta do CD-ROM para o diretório atual, por exemplo, você poderia usar “cp -a /mnt/cdrom/musicas .”. mv mv [OPTION]... SOURCE... DIRECTORY O “cp” faz par com o “mv”, que serve tanto para mover quanto para renomear arquivos. Não há um comando exclusivamente para renomear um arquivo ou pasta. Para mover o arquivo foto.png para a pasta “/mnt/hda6/”, o comando seria “mv foto.png /mnt/hda6/”. Note que não foi especificado o nome do arquivo de destino, sendo mantido então o nome original. A foto deixaria de existir na localização antiga, sendo movida para a nova localização. Para renomear um arquivo, basta especificar o novo nome no local de destino, como em “mv foto.png /mnt/hda6/outronome.pgn”. mkdir mkdir [OPÇÃO]... DIRETÓRIO... Para criar diretórios, usamos o comando “mkdir”, como em “mkdir arquivos” (que cria o diretório arquivos dentro do diretório atual) ou “mkdir /mnt/sda6/arquivos”, que cria o diretório arquivos dentro de /mnt/sda6. É possível também criar pastas recursivamente (criando todas as pastas necessárias até chegar a que você pediu) adicionando o parâmetro “-p” como em “mkdir -p /mnt/hda6/arquivos/novos/2016”. Assim, mesmo que a pasta “arquivos” e a pasta “novos” não existam, elas serão criadas. Sem o parâmetro “-p”, será 18 emitido um erro, informando que o local onde você deseja criar o diretório não existe. rm rm [OPTION]... [FILE]... Em seguida temos o rm, que serve tanto para remover arquivos quanto diretórios, de acordo com os parâmetros usados. Para remover um arquivo simples, basta usá-lo diretamente, como em “rm arquivo”. Para que ele remova sem pedir a confirmação, adicione o parâmetro “-f”, como em “rm -f arquivos”. Para remover uma pasta e todos os arquivos e diretórios dentro dela, adicione o parâmetro "-r", como em “rm -rf arquivos”. Se você tentar excluir um diretório sem fornecer a opção “-r”, receberá uma mensagem de erro. Tome cuidado ao usar o “-rf”, pois ele não pede confirmação, e deleta os arquivos e pastas recursivamente. Respire fundo e verifique se realmente está deletando a pasta certa antes de confirmar o comando. Você provavelmente já ouviu falar (se não ouviu, ainda vai ouvir) do comando “rm -rf /”. Pelo que já estudamos, o que esse comando faz? Você sabe dizer? Pois é, como mandamos remover a raiz (/), incluindo os diretórios, de forma recursiva (-r), todo o conteúdo da estrutura de diretórios do sistema será apagado, sem confirmação, sem mensagem de alerta, nada. Seu sistema irá todo para o espaço, com apenas um comando. É possível também usar caracteres curingas na hora de remover arquivos. Esses caracteres substituem uma sequência qualquer de outros caracteres. Quando um arquivo ou diretório corresponde a uma expressão com caractere coringa, dizemos que a expressão “casou” com o arquivo. Então, para remover todos os arquivos que possuírem a extensão “.jpg”, use “rm -f *.jpg”. Para remover todos os arquivos que começarem com “img”, use “rm -f img*”. Você pode usar também o "?" quando quiser usar o curinga para apenas um caractere específico. Se você quiser remover os arquivos “doc1.txt”, “doc2.txt” e “doc3.txt”, você poderia usar o comando “rm -f doc?.txt”. rmdir rmdir [OPÇÃO]... DIRETÓRIO... Temos também o comando rmdir, uma variação do mkdir, que permite remover diretórios. A diferença entre ele e o “rm -rf” é que o “rmdir” só remove diretórios vazios. Acostume-se a usá-lo no lugar do “rm -rf” ao deletar uma pasta que acha que está vazia, assim você evita acidentes. df df [OPÇÃO]... [ARQUIVO]... Para verificar o espaço em disco disponível, use o “df”. Ele mostra o espaço disponível (assim 19 como outras informações, incluindo a capacidade e o diretório de montagem) de cada uma das partições do sistema, incluindo pendrives e outros dispositivos de armazenamento que estejam montados. Ele faz par com o “free”, que permite checar rapidamente o uso da memória RAM (ignore a primeira linha e veja diretamente a linha "-/+ buffers/cache", que mostra o uso real, descartando o usado pelo cache de disco). du du [OPTION]... [FILE]... Outro comando útil é o du, que permite ver uma lista com o espaço ocupado por pasta dentro do diretório atual. Para facilitar, use sempre o “du -h”, que exibe o tamanho dos arquivos de forma amigável, escrevendo "2,8G" em vez de "2876322", por exemplo. A opção “-s” mostra o valor somado dos tamanhos de todos os diretórios e arquivos dentro do diretório analisado. Você também pode executar uma fila de comandos de uma vez. Basta separá-los por ponto e vírgula, como em “ls; pwd” ou “cd /mnt/arquivos; ls”. cat cat [OPÇÃO]... [ARQUIVO]… O comando cat permite que seja exibido o conteúdo de um arquivo. Se for um arquivo texto, o conteúdo será mostrado de forma legível na tela. Se for um arquivo binário, como um arquivo de música por exemplo, será mostrado na tela um conjunto de caracteres inteligíveis. touch touch [OPTION]... FILE... O comando touch serve basicamente para alterar o timestamp de um arquivo. O timestamp são as datas de criação e alteração do arquivo. Quando o arquivo não existe, ele é criado, e por isso, o touch é muito utilizado para criar arquivos vazios, como em: touch teste.txt Se você executar um “cat teste.txt” verá que o arquivo não possui conteúdo algum. Desligando Assim como no Windows, você precisa desligar o sistema corretamente para evitar perda de 20 arquivos e danos à estrutura das partições (sem falar em evitar o chato fsck no boot seguinte). Além das opções nos menus do KDE ou GNOME, você pode desligar via terminal, usando os comandos halt (desligar) e reboot (reiniciar). Existe também o Ctrl+Alt+Del, que se executado em um dos terminais de texto puro reinicia o micro e, se pressionado dentro do ambiente gráfico abre (na maioria das distribuições) o diálogo com as opções de desligar e reiniciar. Informações sobre o hardware A pasta “/proc” armazena informações sobre o hardware e sobre a configuração do sistema. Embora seja possível ver o conteúdo dos arquivos usando qualquer editor de texto (como no caso do “cat /proc/cpuinfo”), a maiorparte das informações são crípticas demais para qualquer ser humano normal. Se você quer apenas descobrir qual é o chipset da placa wireless ou da placa de som, por exemplo, pode ver uma listagem resumida do hardware da máquina usando o comando lspci. Para os dispositivos USB (que não aparecem na lista do lspci), temos o lsusb. O comando lshw mostra uma longa lista de detalhes sobre a máquina, lembrando um pouco o gerenciador de dispositivos do Windows, porém em modo texto. Complementando, temos o clássico “uname -a”, que permite verificar rapidamente qual versão do kernel está sendo usada. Rede O comando básico para gerenciar a configuração de rede no Linux é o ifconfig. Quando chamado sem argumentos, ele mostra a configuração atual da rede (o que o torna uma opção rápida para verificar qual endereço IP seu PC está usando, ou se ele obteve a configuração corretamente a partir do servidor DHCP), mas ele pode ser usado também para alterar a configuração da rede rapidamente. Ao digitar “ifconfig eth0 192.168.1.2/24”, por exemplo, você troca o endereço da placa de rede eth0. Ele é complementado pelo iwconfig, que se aplica às placas wireless. Ao chamá-lo sem argumentos, ele mostra a configuração atual, incluindo o SSID da rede, o endereço MAC do ponto de acesso, a qualidade do sinal e a velocidade atual de transmissão, mas ele pode ser usado também para configurar a rede Wi-Fi manualmente. Localizando arquivos e diretórios O comando which, busca executáveis e mostra sua localização. Executáveis são “comandos” disponíveis no sistema. O comando find permite localizar arquivos, vasculhando os diretórios em busca de arquivos que casem com a expressão utilizada (no caso do uso de caracteres curingas), ou com o nome do arquivo especificado. Quando utilizados caracteres curingas, é importante que a expressão esteja 21 entre aspas. Embora seja lento ao procurar em diretórios com muitos arquivos e subdiretórios, o find é eficiente se você souber previamente onde procurar. Por exemplo, o diretório "/etc" concentra as configurações do sistema. Se você estiver procurando pelo arquivo “smb.conf” (onde é armazenada a configuração do Samba), você poderia pesquisar diretamente no diretório /etc, usando o comando “find /etc -name smb.conf”. Podem também ser utilizados caracteres curingas para casar expressões, desde que as expressões estejam entre aspas. Para buscar todos os arquivos que comecem com smb no diretório /etc, onde também seria encontrado o mesmo arquivo smb.conf, o comando poderia ser “find /etc -name “smb*””. Para buscar todos os arquivos mp3 dentro da partição hda6, você poderia utilizar “find /mnt/hda6 -name “*.mp3””. Note que além do diretório onde ele vai procurar (/etc no exemplo), você deve usar o parâmetro “-name” antes de indicar o nome do arquivo que está procurando. Omitindo o diretório, ele simplesmente procura dentro do diretório atual. Assim como outros comandos do terminal, o find pode ser usado de forma mais amigável através de ferramentas gráficas. No KDE, por exemplo, você pode usar o kfind. Através dele você pode procurar pelo nome ou tipo de arquivo (você pode fazer uma busca incluindo apenas arquivos de imagem, por exemplo), procurar dentro de pastas específicas ou localizar arquivos pertencentes a um determinado usuário ou grupo do sistema, ou até mesmo procurar por arquivos modificados recentemente. Assim como no caso dos nomes de arquivos, você pode completar os comandos usando a tecla TAB, o que reduz a necessidade de realmente decorá-los. Outra dica é usar o comando apropos para ajudar a localizar comandos quando você tem apenas uma vaga ideia do nome. Basta chamá-lo incluindo algumas letras que façam parte do comando (não importa se do começo ou do final), como em “apropos keyg” ou “apropos ogg”. Ele mostra uma lista com todos os comandos que contêm em seu nome os caracteres especificados, acompanhados de uma pequena descrição. Instalando e removendo aplicativos No mundo Linux, os programas são distribuídos na forma de pacotes. Esses pacotes possuem metadados que contém informações tais como nome do aplicativo e descrição, bem como todas as dependências que ele possui. As dependências de um pacote são outros pacotes dos quais ele dependa para funcionar. Para instalação, atualização e remoção de aplicativos, distribuições GNU/Linux utilizam um gerenciador de pacotes, responsável por gerenciar todo o processo de instalação, atualização e remoção de aplicativos, cuidando inclusive de instalar as dependências necessárias. Sem um gerenciador de pacotes, seria necessário instalar cada uma das dependências manualmente! Esse gerenciador varia de distribuição para distribuição, e na maioria das vezes possui também uma ferramenta gráfica para facilitar seu uso. O objetivo desta seção é demonstrar o uso do gerenciador de pacotes APT (Advanced Packaging Tool) no terminal. O APT possui duas interfaces que funcionam basicamente da mesma forma mas possuem algumas diferenciações em seu uso: o comando apt-get e o aptitude. O aptitude é um pouco mais amigável, e já realiza algumas tarefas automaticamente. Por exemplo, ao remover um pacote, o aptitude remove junto as suas dependências que não forem mais úteis ao sistema. Já com o apt-get, será necessário executar um comando separadamente para que as dependências sem uso 22 sejam removidas. Em algumas distribuições, o aptitude já vem instalado por padrão, mas é comum ser necessário instalá-lo utilizando o apt-get. Em tempo, o APT é um gerenciador de pacotes do Debian e de distribuições derivadas. Outras distribuições utilizarão outros gerenciadores de pacotes, como por exemplo, o pacman utilizado pelo, Arch, portage utilizado pelo Gentoo, o yum do CentOS, o RPM do Red Hat, etc. Antes de prosseguir, vamos entender algumas opções do apt-get: • update: atualiza a lista de pacotes; • upgrade: atualiza todo o sistema, porém não instala novos dependências necessárias nem remove softwares já instalados. • dist-upgrade: atualiza todo o sistema, se necessário instalando novas dependências ou removendo alguns pacotes que não seja mais necessários. • install: instala um novo programa; • remove: desinstala um programa, porém mantém seus arquivos de configuração; • purge: desinstala um programa e remove seus arquivos de configuração do sistema. Para entender melhor como funciona o apt-get, vamos fazer a instalação do apache webserver. Como os pacotes são baixados de um repositório, onde frequentemente ocorrem adição e atualização de pacotes, é necessário antes de mais nada atualizar a lista de pacotes do sistema, de forma que o apt-get possua localmente uma lista de pacotes (e suas versões) sincronizada com a lista do repositório, evitando inconsistências. Veja nas imagens abaixo como é feita na prática a atualização da lista de pacotes e a instalação do apache2. Como se trata de uma tarefa administrativa, ela também precisa ser executada com privilégios de root, ou seja, utilizando o sudo. Por agora, não se preocupe com isso. Você entenderá melhor o conceito de permissões e tipos de usuários no Capítulo 5, que trata do gerenciamento de usuários. Observe que na figura 2.2 é feita a atualização da lista de pacotes, e na figura 2.3 a finalização da atualização, informando a quantidade de dados obtidos. Na figura 2.4 o apache é instalado. Estão destacados os pontos que informam os pacotes que serão instalados como dependências, as sugestões de pacotes (que podem ser interessantes, mas não necessários) e a quantidade de dados a ser baixada. A figura 2.5 mostra a finalização da instalação, quando o servido apache já é automaticamente iniciado Na figura 2.6 é mostrada a remoção do pacote apache2. Note que, durante aremoção do pacote, o apt informa que os pacotes instalado automaticamente não serão removidos, e que para isso, deve-se usar a opção autoremove do apt-get (o procedimento deve ser realizado imediatamente após o purge). Observe também que antes de proceder à remoção, o apt-get solicita confirmação do usuário. Por fim, na figura 2.7 é mostrada a execução do comando “apt-get autoremove”: 23 Figura 2.2 – Atualização da lista de pacotes do APT Figura 2.3 – Finalização da atualização da lista de pacotes 24 Figura 2.4 – Instalação do apache Figura 2.5 – Finalização da instalação do apache 25 Figura 2.6 – Removendo o apache 2 Figura 2.7 – Execução do processo autoremove 26 Sempre que quiser obter mais informações sobre um pacote, basta usar o comando apt-cache com as opções show e search: apt-cache show apache2 apt-cache search apache2 Comandos Internos São comandos que estão localizados dentro do interpretador de comandos (normalmente o Bash) e não no disco. Eles são carregados na memória RAM do computador junto com o interpretador de comandos. Quando executa um comando, o interpretador de comandos verifica primeiro se ele é um Comando Interno caso não seja é verificado se é um Comando Externo. Exemplos de comandos internos são: cd, exit, echo, bg, fg, source, help Comandos Externos São comandos que estão localizados no disco. Os comandos são procurados no disco usando a ordem do PATH e executados assim que encontrados. Path é o caminho de procura dos arquivos/comandos executáveis. O path (caminho) é armazenado na variável de ambiente PATH. Curingas Curinga (ou referência global) é um recurso usado para especificar um ou mais arquivos ou diretórios do sistema de uma só vez. Este recurso permite que você faça a filtragem do que será listado, copiado, apagado, etc. São usados 4 tipos de curingas no GNU/Linux: • "*" - Faz referência a um nome completo/restante de um arquivo/diretório. • "?" - Faz referência a uma letra naquela posição. • [padrão] - Faz referência a uma faixa de caracteres de um arquivo/diretório. Padrão pode ser: • [a-z][0-9] - Faz referência a caracteres de a até z seguido de um caractere de 0 até 9. • [a,z][1,0] - Faz a referência aos caracteres a e z seguido de um caractere 1 ou 0 naquela posição. • [a-z,1,0] - Faz referência a intervalo de caracteres de a até z ou 1 ou 0 naquela posição. A procura de caracteres é “case Sensitive” assim se você deseja que sejam localizados todos os 27 caracteres alfabéticos você deve usar [a-zA-Z]. Caso a expressão seja precedida por um ^, que é um sinal de negação, o resultado será o contrário do especificado pela expressão. Por exemplo, [^abc] faz referência a qualquer caractere, exceto a, b e c. Vamos dizer que haja arquivos no diretório /usr/teste: teste1.txt, teste2.txt, teste3.txt, teste4.new, teste5.new. Caso deseje listar todos os arquivos do diretório /usr/teste você pode usar o coringa "*": cd /usr/teste; ls * ou ls /usr/teste/*. Como todos os arquivos serão listados se o ls for usado sem nenhum coringa, não tem muito sentido usar o comando ls com "*". Agora, para listar apenas os arquivos teste1.txt, teste2.txt, teste3.txt, podemos usar inicialmente 3 métodos: • Usando o comando ls *.txt que pega todos os arquivos que começam com qualquer nome e terminam com .txt. • Usando o comando ls teste?.txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caractere no lugar do coringa ? e terminem com .txt. Repare que se também tivéssemos um arquivo chamado teste10.txt, ele não seria listado. • Usando o comando ls teste[1-3].txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caractere entre o número 1-3 no lugar da 6ª letra e terminem com .txt. Neste caso se obtém uma filtragem mais específica. Para listar somente teste4.new e teste5.new podemos usar os seguintes métodos: ls *.new que lista todos os arquivos que terminam com .new ls teste?.new que lista todos os arquivos que começam com teste, contenham qualquer caractere na posição do coringa ? e terminem com .new. ls teste[4,5].* que lista todos os arquivos que começam com teste, contenham números de 4 e 5 naquela posição e terminem com qualquer extensão. Existem muitas outras formas de se fazer a mesma coisa, isto depende do gosto de cada um. Redirecionamentos e Pipe “>” O caractere “>” redireciona a saída padrão de um programa/comando/script para algum dispositivo ou arquivo ao invés do dispositivo de saída padrão (tela). Quando é usado com arquivos, este redirecionamento cria ou substitui o conteúdo do arquivo, ou seja, o conteúdo existente anteriormente no arquivo é perdido. Por exemplo, você pode usar o comando ls para listar arquivos e usar “ls > listagem.txt” para enviar a saída do comando para o arquivo listagem.txt, em vez de mostrá-la na tela. 28 Depois disso você pode usar o comando cat para visualizar o conteúdo do arquivo listagem. Para redirecionar somente a saída de erros de algum comando, use “2> /tmp/erros.txt”. Essa técnica é útil, por exemplo, para criação de logs de erro ao executar uma tarefa. Dessa forma, a saída padrão do comando é exibida na tela e os erros são escritos no arquivo erros.txt. O comando cat, visto anteriormente, é muito utilizado também para concatenar arquivos. Exemplo de um uso interessante: suponha que você possua dois arquivos de áudio, o audio1.mp3 e o audio2.mp3, e queira uni-los em um único arquivo .mp3. O cat resolveria isso facilmente: “cat audio1.mp3 audio2.mp3 > audio_unico.mp3”. Interessante, não? :) “>>” Os caracteres “>>” tem a mesma função, ou seja, redirecionam a saída padrão de um programa/comando/script para algum dispositivo ou arquivo ao invés da saída padrão. Porém, caso o arquivo já exista, as linhas são adicionadas ao final do arquivo. Nesse redirecionamento duplo, o arquivo será criado caso não exista, porém não terá seu conteúdo apagado caso exista, sendo apenas atualizado. Por exemplo: para adicionar o conteúdo do arquivo1.txt ao arquivo2.txt, pode-se fazer “cat arquivo1.txt >> arquivo2.txt”. “|” (Pipe) O pipe envia a saída de um comando para a entrada do próximo comando para continuidade do processamento, ou seja, com ele é possível alimentar a entrada de um comando com a saída de um anterior. Os dados enviados são processados pelo próximo comando que mostrará o resultado do processamento. Por exemplo, o comando “ls -la | more” faz a listagem longa de arquivos do diretório atual, que é então enviada ao comando more, que tem a função de efetuar uma pausa a cada 25 linhas do arquivo. Outro exemplo é o comando “cat listagem.txt | wc -l”. O comando “wc” permite fazer contagens em um arquivo texto. Podem ser contatadas linhas, bytes ou palavras de um arquivo. Assim, o comando cat imprime o conteúdo do arquivo, porém o “|” faz com que esse conteúdo, em vez de ser enviado para a tela, seja enviado como entrada para o comando “wc -l”, que conta as linhas do arquivo. A saída desses comandos, mostrada na tela, será simplesmente o número de linhas existentes no arquivo listagem.txt. Capítulo 3 – Arquivos e diretórios Diretórios Diretório é o local utilizado para armazenar conjuntos arquivos para melhor organização e localização. O nome diretório, como o arquivo, também é “case Sensitive” (diretório /teste é completamente diferente do diretório /Teste). 29 Não podem existir dois arquivos com o mesmo nome em um diretório, ou um subdiretório com um mesmo nome de um arquivo em um mesmo diretório. No Windows temos os arquivos do sistema concentrados nas pastas "Windows" e "Arquivos de programas", podendo o usuário criar e organizar suas pastas da forma que quiser. No Linux, é basicamente o contrário. O diretório raiz(como se fosse o C:\ do Windows) está tomado pelas pastas do sistema e espera-se que o usuário armazene seus arquivos pessoais dentro da sua pasta no diretório “/home”. Naturalmente, é possível ajustar as permissões de uma maneira que se possa salvar arquivos em outros locais, mas isso nem sempre é uma boa ideia. No Linux os discos e partições não aparecem necessariamente como unidades diferentes, como o C:\, D:\ e E:\ do Windows. Tudo faz parte de um único diretório, chamado diretório raiz ou simplesmente “/”. Porém, algumas distribuições Linux facilitam bastante as coisas e listam as unidades de disco já montadas no gerenciador de arquivos, de forma que possam ser acessadas com apenas dois cliques. Figura 3.1 – Gerenciador de arquivos do Gnome A pasta “/usr/bin” (bin de binário) armazena cerca de 2.000 programas e atalhos para programas em uma instalação típica do sistema. Como os executáveis de quase todos os programas instalados são armazenados nela, o número só faz crescer conforme você instala novos pacotes. Outro diretório com um enorme volume de arquivos é o “/usr/lib”, onde ficam armazenadas as bibliotecas usadas pelos programas. A função destas bibliotecas lembra um pouco a dos arquivos .dll no Windows. As bibliotecas com extensão ".a" são bibliotecas estáticas, que fazem parte de um programa específico, enquanto as terminadas em “.so.versão” (xxx.so.1, yyy.so.3, etc.) são bibliotecas compartilhadas, usadas por vários programas. Elas são gerenciadas de maneira automática pelo gerenciador de pacotes; quando uma biblioteca é atualizada, por exemplo, são deixados links apontando para a nova versão, o que permite que os aplicativos que utilizavam a versão antiga continuem funcionando. Outras pastas dignas de nota são a “/usr/local”, que é reservada a programas e scripts que você instalar manualmente; a “/usr/sbin”, que é reservada a executáveis que podem ser usados 30 apenas pelo root (similar à pasta “/sbin”) e a “/usr/src”, que é usada para armazenar o código-fonte de programas e também o código-fonte do kernel (caso disponível). Subindo de novo, a pasta “/boot” armazena o kernel e alguns arquivos usados na fase inicial do boot. Além do kernel, ela armazena também a configuração do gerenciador de boot, responsável pelas opções mostradas na tela de boot e as opções de inicialização aplicadas a cada uma. Logo a seguir temos o diretório “/dev”, que é de longe o exemplo mais exótico de estrutura de diretório no Linux. Todos os arquivos contidos aqui, como, por exemplo, “/dev/sda”, “/dev/fd”, etc., não são arquivos armazenados no HD, mas sim ponteiros para dispositivos de hardware. Tudo no Linux se resume a arquivos. O arquivo “/dev/psaux” contém as informações enviadas pelo mouse, enquanto o “/dev/sr0” permite acessar o drive de CD, por exemplo. Essa organização visa facilitar a vida dos programadores, que podem acessar o hardware do micro simplesmente fazendo seus programas lerem e gravarem em arquivos, deixando que o kernel se encarregue da parte complicada. Ele é complementado pelo diretório “/proc”, que não armazena arquivos, mas sim informações sobre o hardware e sobre a configuração do sistema. Estas informações são usadas por utilitários de detecção e configuração do sistema, mas podem ser úteis também quando você quer checar alguma configuração manualmente. O comando “cat /proc/net/dev” mostra informações sobre as interfaces de rede, o “cat /proc/cpuinfo” mostra informações sobre o processador e assim por diante. O diretório “/proc” faz par com o “/sys”, uma novidade introduzida a partir do kernel 2.6, que agrupa informações sobre os dispositivos instalados, incluindo o tipo, fabricante, capacidade, endereços usados e assim por diante. Estas informações são geradas automaticamente pelo kernel e permitem que os serviços responsáveis pela detecção de hardware façam seu trabalho, configurando impressoras e criando ícones no desktop para acesso ao pendrive, por exemplo. O diretório “/etc” concentra os arquivos de configuração do sistema, substituindo de certa forma o registro do Windows. A vantagem é que, enquanto o registro é uma espécie de caixa-preta, os scripts e arquivos de configuração do diretório "/etc" são desenvolvidos justamente para facilitar a edição manual. É bem verdade que na maioria dos casos isto não é necessário, graças aos vários utilitários de configuração disponíveis, mas a possibilidade continua existindo. Os arquivos recebem o nome dos programas, seguidos geralmente da extensão “.conf”. A boa notícia é que, ao contrário do registro do Windows, os arquivos do “/etc” não se corrompem sozinhos e é fácil fazer cópias de segurança, caso necessário. Concluindo, o diretório “/mnt” (de “mount”) recebe este nome justamente por servir de ponto de montagem para o drive óptico (“/mnt/cdrom” ou “/mnt/dvd”) e outros dispositivos de armazenamento. Na maioria das distribuições atuais ele é substituído pelo diretório “/media”, que tem a mesma função. O nome dado ao dispositivo normalmente é utilizado na montagem. Um pendrive com nome “genilson” será montado em /media/genilson. Na verdade, o uso do diretório “/media” ou “/mnt” é apenas uma convenção. Você pode perfeitamente montar o seu pendrive dentro da pasta “/home/fulano/pendrive”, por exemplo, desde que faça a montagem de forma manual. Os diretórios padrão de montagem das partições são configuráveis através do arquivo “/etc/fstab”, que é um dos arquivos básicos de configuração do sistema. 31 Diretório Raiz Este é o diretório principal do sistema. Dentro dele estão todos os outros diretórios. O diretório raiz é representado por uma “/”. Assim, se você digitar o comando “cd /”, será levado ao diretório raiz. Nele estão localizados outros diretórios como o /bin, /sbin, /usr, /usr/local, /mnt, /tmp, /var, /home, etc. Estes são chamados de subdiretórios pois estão dentro do diretório “/”. A estrutura de diretórios e subdiretórios pode ser identificada da seguinte maneira: • / • /bin • /sbin • /usr • /usr/local • /mnt • /tmp • /var • /home A estrutura de diretórios também é chamada de Árvore de Diretórios porque é parecida com uma árvore de cabeça para baixo. Cada diretório do sistema tem seus respectivos arquivos que são armazenados conforme regras definidas pela FHS (FileSystem Hierarchy Standard - Hierarquia Padrão do Sistema de Arquivos), definindo que tipo de arquivo deve ser armazenado em cada diretório. Diretório atual É o diretório em que nos encontramos no momento. Você pode digitar pwd para verificar qual é seu diretório atual. O diretório atual também é identificado por um "." (ponto). O comando “ls .” pode ser usado para listar seus arquivos (é claro que isto é desnecessário porque se não digitar nenhum diretório, o comando “ls” listará o conteúdo do diretório atual). Diretório home Também chamado de diretório de usuário. Em sistemas GNU/Linux cada usuário (inclusive o root) possui seu próprio diretório onde poderá armazenar seus programas e arquivos pessoais. Este diretório está localizado em “/home/[login]”. Se o seu login for “joao” o seu diretório home será /home/joao. O diretório home do usuário logado também é identificado por um ~ (til), então você pode digitar tanto o comando “ls /home/joao” como “ls ~” para listar os arquivos de seu diretório home. 32 O diretório home do usuário root (na maioria das distribuições GNU/Linux) está localizado em /root, ou seja, diretamente na raiz. Diretório Superior O diretório superior é identificado por “..” (2 pontos, sem aspas). Por exemplo, caso o usuário esteja no diretório /usr/local e quiser listar os arquivos do diretório “/usr”, poderá digitar “ls ..”. Este recurso também pode ser usado
Compartilhar