# Apostila Linux ## O que é Linux Ubuntu é um sistema operacional (pt-BR) ou sistema operativo (pt) de código aberto, construído a partir do núcleo Linux, baseado no Debian e utiliza GNOME como ambiente de desktop de sua mais recente versão com suporte de longo prazo (LTS). É desenvolvido pela Canonical Ltd. Geralmente é executado em computadores pessoais e também é popular em servidores de rede, geralmente executando a versão Ubuntu Server, com recursos de classe empresarial. Até 2017, o Ubuntu também estava disponível para tablets e smartphones, com a edição Ubuntu Touch. A proposta do Ubuntu é oferecer um sistema que qualquer pessoa possa utilizar sem dificuldades, independentemente de nacionalidade, nível de conhecimento ou limitações físicas. O sistema deve ser constituído principalmente por software livre e deve também ser isento de qualquer taxa. ### Denominação O nome "Ubuntu" IPA: [u'buntu] deriva do conceito sul africano de mesmo nome, diretamente traduzido como "humanidade com os outros" ou "sou o que sou pelo que nós somos". > “Uma pessoa com Ubuntu está aberta e disponível para outros, apoia os outros, não se sente ameaçada quando outros são capazes e bons, baseada em uma autoconfiança que vem do conhecimento que ele ou ela pertence a algo maior e é diminuída quando os outros são humilhados ou diminuídos, quando os outros são torturados ou oprimidos.” Esse nome busca passar a ideologia do projeto, baseada nas liberdades do software livre e no trabalho comunitário de desenvolvimento. O sistema é muito comumente chamado "Ubuntu Linux", porém, oficialmente a Canonical, desenvolvedora do sistema, usa apenas o nome "Ubuntu", uma vez que o sistema ao ser portado para outros núcleos livres para além do Linux recebe outros nomes (por exemplo, o Ubuntu implementado sobre o OpenSolaris recebe o nome de "Nexenta") - ao contrário do Debian, por exemplo, que recebe este nome independentemente do núcleo usado. ### Historia O Ubuntu é construído sobre a arquitetura e a infraestrutura do Debian, e compreende as versões de sistema operacional para telefones e tablets Linux, desktop e tablet descontinuados. O Ubuntu lança versões atualizadas previsivelmente a cada seis meses, e cada lançamento recebe suporte gratuito por nove meses (dezoito meses antes da versão 13.04) com correções de segurança, correções de bugs de alto impacto e correções de bugs conservadoras e substancialmente benéficas de baixo risco. O primeiro lançamento foi em outubro de 2004. As versões atuais de suporte de longo prazo (LTS) são suportadas por cinco anos e são lançadas a cada dois anos. As versões LTS recebem lançamentos de pontos regulares com suporte para novo hardware e integração de todas as atualizações publicadas naquela série até o momento. Os pacotes do Ubuntu são baseados em pacotes do ramo instável do Debian. Ambas as distribuições usam o formato de pacote .deb do Debian e ferramentas de gerenciamento de pacotes (por exemplo, APT e Ubuntu Software). Pacotes Debian e Ubuntu não são necessariamente binariamente compatíveis entre si, no entanto; pacotes podem precisar ser reconstruídos a partir do código-fonte para serem usados no Ubuntu. Muitos desenvolvedores do Ubuntu também são mantenedores de pacotes-chave no Debian. O Ubuntu coopera com o Debian, empurrando as mudanças de volta para o Debian, embora tenha havido críticas de que isso não acontece com frequência suficiente. Ian Murdock, o fundador do Debian, expressou preocupação com os pacotes do Ubuntu divergindo muito do Debian para permanecerem compatíveis. Antes do lançamento, os pacotes são importados do Debian unstable continuamente e mesclados com modificações específicas do Ubuntu. Um mês antes do lançamento, as importações são congeladas e os empacotadores trabalham para garantir que os recursos congelados funcionem bem juntos. Em 8 de julho de 2005, Mark Shuttleworth e a Canonical Ltd anunciaram a criação da Ubuntu Foundation e providenciaram um aporte inicial de US$ 10 milhões. A finalidade da fundação é garantir apoio e desenvolvimento a todas as versões posteriores a 5.10. No dia 5 de maio de 2007, Matt Zimmerman anuncia o novo projeto da Canonical, o "Ubuntu Mobile and Embedded", que seria uma versão do Ubuntu otimizada para uso com o Dispositivo de Internet Móvel da Intel.[15] A primeira versão, 8.04, foi lançada em 30 de julho de 2008, porém o projeto foi cancelado na versão 9.10 Alpha 6, lançada em 17 de setembro de 2009 Em 12 de março de 2009, o Ubuntu anunciou o suporte de desenvolvedores para plataformas de gerenciamento de nuvem de terceiros, como as usadas no Amazon EC2. Desde o Ubuntu 17.10, o GNOME 3 é a GUI padrão do Ubuntu Desktop, enquanto o Unity ainda é o padrão em versões mais antigas, incluindo todas as versões atuais do LTS. A versão Ubuntu GNOME foi descontinuada após a versão padrão adotar este ambiente de desktop e os esforços de desenvolvimento foram combinados. Uma bifurcação do Unity 8, chamada Yunit, foi criada para continuar o desenvolvimento do Unity. Shuttleworth escreveu em 8 de abril de 2017: ### Antecedentes > "O que queríamos preservar era não só um bom ambiente para fazer programação, mas sim um sistema em torno do qual um companheirismo poderia se formar. Por experiência, sabíamos que a essência da computação em comunidade da maneira proporcionada pelo acesso remoto e o compartilhamento de tempo de máquinas não é apenas para digitar programas em um terminal em vez de um fundador de papel, mas para encorajar a comunicação de perto". O sistema operacional Unix foi concebido e implementado em 1969 pela AT&T Bell Laboratories nos Estados Unidos por Ken Thompson, Dennis Ritchie, Douglas McIlroy, e Joe Ossanna. Lançado pela primeira vez em 1971, o Unix foi escrito inteiramente em linguagem assembly uma prática comum para a época. Mais tarde, em 1973, o sistema foi reescrito na linguagem de programação C por Dennis Ritchie. A disponibilidade de uma implementação do Unix feita em linguagem de alto nível fez a sua portabilidade para diferentes plataformas de computador se tornarem mais fácil. Na época, a maioria dos programas era escrita em cartões perfurados que tinham de ser inseridos em lotes em computadores mainframe. Devido a uma lei antitruste que a proibia de entrar no negócio de computadores, a AT&T foi obrigada a licenciar o código fonte do sistema operacional para quem quisesse. Com o resultado, o Unix cresceu rapidamente e se tornou amplamente adotado por instituições acadêmicas e diversas empresas. Em 1984, a AT&T se desfez da Bell Labs; livres da obrigação legal exigindo o licenciamento do royalty, a Bell Labs começou a vender o Unix como um Software proprietário. O Projeto GNU, iniciado em 1983 por Richard Stallman, teve o objetivo de criar um "sistema de software completamente compatível com o Unix", composto inteiramente de software livre. O trabalho começou em 1984.Mais tarde, em 1985, Stallman começou a Free Software Foundation e escreveu a Licença Pública Geral GNU (GNU GPL) em 1989. No início da década de 1990, muitos dos programas necessários em um sistema operacional (como bibliotecas, compiladores, editores de texto, uma Unix shell, e um sistema de janelas) foram concluídos, embora os elementos de baixo nível, como drivers de dispositivo, daemons e as do kernel foram paralisadas e não completadas. Apesar de não ter sido lançado até 1992 devido a complicações legais, o desenvolvimento do 386BSD, que veio a partir do NetBSD, OpenBSD e FreeBSD, antecedeu ao do Linux. Linus Torvalds disse que se o 386BSD estivesse disponível naquele momento, ele provavelmente não teria criado o Linux. Vários fatores ajudaram a rápida expansão do Linux depois de seu lançamento. Popularização dos computadores pessoais: o Unix era o S.O. padrão para estudos em universidades, porém, utilizavam plataformas proprietárias relativamente caras. O Linux se tornou uma opção para resolver esse problema, porque com ele foi possível a utilização de computadores pessoais mais baratos. Projeto GNU: o projeto GNU, criado por Richard Stallman em 1984, surgiu com o intuito de apoiar a liberdade de software (veja seção mais adiante sobre Software Livre). Na época do surgimento do Linux, Stallman apoiava e pretendia adotar o kernel Hurd, porém este não estava utilizável, com isso, o Linux acabou sendo o kernel (componente central do sistema operacional ligando aplicativos e o processamento real de dados feito pelo hardware) preferido para rodar as centenas de programas livres disponibilizados pelo projeto, porém o Hurd continua sendo o kernel oficial do sistema operacional GNU. Distribuições Linux: no sentido de tornar o Linux o mais utilizável possível, surgiram instituições comerciais e não-comerciais que se dedicaram a criar uma combinação ideal de aplicativos (livres ou não) que rodassem no kernel Linux. As instituições com objetivos comerciais mantiveram o licenciamento livre, através de serviços agregados, tais como: suporte, treinamento e desenvolvimento customizado. Veja seção mais adiante sobre distribuições Linux. ### Criação Linus Torvalds, criador e principal mantenedor do núcleo Linux. O núcleo Linux foi, originalmente, escrito por Linus Torvalds do Departamento de Ciência da Computação da Universidade de Helsinki, Finlândia, com a ajuda de vários programadores voluntários através da Usenet (uma espécie de sistema de listas de discussão existente desde os primórdios da Internet). Linus Torvalds começou o desenvolvimento do núcleo como um projeto particular, inspirado pelo seu interesse no Minix, um pequeno sistema UNIX desenvolvido por Andrew S. Tanenbaum. Ele limitou-se a criar, nas suas próprias palavras, "um Minix melhor que o Minix" ("a better Minix than Minix"). E depois de algum tempo de trabalho no projecto, sozinho, enviou a seguinte mensagem para comp.os.minix: “Você suspira pelos bons tempos do Minix-1.1, quando os homens eram homens e escreviam seus próprios" device drivers"? Você está sem um bom projecto em mãos e deseja trabalhar num S.O. que possa modificar de acordo com as suas necessidades? Acha frustrante quando tudo funciona no Minix? Chega de noite ao computador para conseguir que os programas funcionem? Então esta mensagem pode ser exactamente para você. Como eu mencionei há um mês atrás, estou trabalhando numa versão independente de um S.O. similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estado em que poderá ser utilizado (embora possa não ser o que você espera), e eu estou disposto a disponibilizar o código-fonte para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso ao executar bash, gcc, gnu-make, gnu-sed, compress etc. nele. ” Curiosamente, o nome Linux foi criado por Ari Lemmke, administrador do site ftp.funet.fi que deu esse nome ao diretório FTP onde o núcleo Linux estava inicialmente disponível.Linus inicialmente tinha-o batizado como "Freax". No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira versão "oficial" do núcleo Linux, versão 0.02. No ano de 1992, Linus Torvalds mudou a licença do núcleo Linux, de uma licença própria para uma licença livre compatível com a GPL do projeto GNU. Desde então, muitos programadores têm contribuído com o desenvolvimento, ajudando a fazer do Linux o núcleo de enorme sucesso colaborativo que é hoje. No início era utilizado por programadores ou só por quem tinha conhecimentos e usava linhas de comando. Hoje isso mudou e existem diversos grupos que criam ambientes gráficos para as diversas distribuições GNU/Linux, que são cada vez mais amigáveis, de forma que, uma pessoa com poucos conhecimentos consegue usar o Linux, através de uma distribuição GNU/Linux, por exemplo. Hoje o Linux é um núcleo estável e consegue reconhecer muitos periféricos sem a necessidade de que o usuário precise instalar drivers de som, vídeo, modem, rede, entre outros. ### Núcleo A onipresença da Núcleo Linux. GNOME Shell, interface gráfica para Linux KDE, interface gráfica para Linux Compiz Fusion, um gerenciador de janelas OpenGL O termo Linux refere-se ao núcleo (em inglês: "kernel") do sistema operativo que inicia e gerencia outros programas que fornecem o acesso aos recursos do sistema como os vários software livres de shells, compiladores, bibliotecas-padrão e os comandos que fazem parte do Projeto GNU. O Projeto GNU, por sua vez, foi criado pela Free Software Foudation com o intuito de criar um sistema operacional completo, totalmente livre e compatível com o Unix. O principal compilador do Linux C, gcc, é um pedaço do projeto GNU. ### Arquitetura O Linux é um núcleo monolítico: as funções do núcleo (escalonamento de processos, gerenciamento de memória, operações de entrada/saída, acesso ao sistema de arquivos) são executadas no espaço de núcleo. Uma característica do núcleo Linux é que algumas das funções (drivers de dispositivos, suporte à rede, sistema de arquivos, por exemplo) podem ser compiladas e executadas como módulos (em inglês: LKM - loadable kernel modules), que são bibliotecas compiladas separadamente da parte principal do núcleo e podem ser carregadas e descarregadas após o núcleo estar em execução. ### Portabilidade Embora Linus Torvalds não tivesse como objetivo inicial tornar o Linux um sistema portátil, ele evoluiu nessa direção. Linux é hoje um dos núcleos de sistemas operativos mais portáteis, correndo em sistemas desde o iPaq (um computador portátil) até o IBM S/390 (um denso e altamente custoso mainframe). Os esforços de Linus foram também dirigidos a um diferente tipo de portabilidade. Portabilidade, de acordo com Linus, era a habilidade de facilmente compilar aplicações de uma variedade de código fonte no seu sistema; consequentemente, o Linux originalmente tornou-se popular em parte devido ao esforço para que os códigos-fonte GPL ou outros favoritos de todos corressem em Linux. O Linux hoje funciona em dezenas de plataformas, desde mainframes até um relógio de pulso, passando por várias arquitecturas: x86 (Intel, AMD), x86-64 (Intel EM64T, AMD64), ARM, PowerPC, Alpha, SPARC e etc, com grande penetração também em sistemas embarcados, como handhelds, PVR, console de videogames, celulares, TVs e centros multimídia, entre outros. ### Termos de licenciamento Inicialmente, Torvalds lançou o Linux sob uma licença de software própria que proibia qualquer uso comercial. Isso foi mudado, um ano depois, para a GNU General Public License. Essa licença permite a distribuição e até a venda de versões até mesmo modificadas do Linux, mas requer que todas as cópias sejam lançadas dentro da mesma licença e acompanhadas de acesso ao código fonte. Apesar de alguns dos programadores que contribuem para o núcleo permitirem que o seu código seja licenciado com GPL versão 2 ou posterior, grande parte do código (incluído as contribuições de Torvalds) menciona apenas a GPL versão 2. Isto faz com que o núcleo como um todo esteja sob a versão 2 exclusivamente. ### Sistemas de arquivos suportados O Linux possui suporte de leitura e escrita a vários sistema de arquivos, de diversos sistemas operacionais, além de alguns sistemas nativos. Por isso, quando o Linux é instalado em dual boot com outros sistemas (Windows, por exemplo) ou mesmo funcionando como Live CD, ele poderá ler e escrever nas partições formatadas em FAT e NTFS. É por isso que os Live CDs Linux são muito utilizados na manutenção e recuperação de outros sistemas operacionais.[23] Entre os sistemas de ficheiros suportados pelo Linux, podemos citar UFS (Unix), FAT, NTFS, JFS, XFS, HPFS, Minix e ISO 9660 (sistema de ficheiros usado em CD-ROMs), este último também com as extensões RRIP (IEEE P1282) e ZISOFS.[24] Alguns sistemas de ficheiros nativos são, entre outros, Ext2, Ext3, Ext4, ReiserFS e Reiser4.[25] Alguns sistemas de ficheiros com características especiais são SWAP, UnionFS, SquashFS, Tmpfs, Aufs e NFS, dentre outros. ### Sistema operacional Richard Stallman, fundador do projeto GNU para um sistema operacional livre. Logo que Linus Torvalds passou a disponibilizar o Linux, ou seja na sua versão 0.01, já havia suporte ao disco rígido, tela, teclado e portas seriais, o sistema de arquivos adotava o mesmo layout do Minix (embora não houvesse código do Minix no Linux), havia extensos trechos em assembly, e ela já era capaz de rodar o bash e o gcc. A linha guia quando implementei o Linux foi: fazê-lo funcionar rápido. Eu queria o núcleo simples, mas poderoso o suficiente para rodar a maioria dos aplicativos Unix.[26] O próprio usuário deveria procurar os programas que dessem funcionalidade ao seu sistema, compilá-los e configurá-los. Talvez por isso, o Linux tenha carregado consigo a etiqueta de sistema operativo apenas para técnicos. Foi neste ambiente que surgiu a MCC Interim Linux, do Manchester Computer Centre, a primeira distribuição Linux, desenvolvida por Owen Le Blanc da Universidade de Manchester, capaz de ser instalada independentemente em um computador. Foi uma primeira tentativa de facilitar a instalação do Linux. Desde o começo, o núcleo Linux incluía um sistema básico para chamadas do sistema e acesso aos dispositivos do computador. O núcleo de um sistema operativo define entre várias operações, o gerenciamento da memória, de processos, dos dispositivos físicos no computador e é uma parte essencial de qualquer sistema operacional utilizável, contudo para um sistema operacional adquirir funcionalidade são necessários também vários outros aplicativos que determinam funções específicas que aquele sistema será capaz de desenvolver, os aplicativos existentes num sistema operacional com a única exceção do núcleo são determinados pelo usuário do computador, como por exemplo: interpretadores de comandos, gerenciadores de janelas, que oferecem respectivamente uma interface para o usuário do computador, CLI ou GUI, e outros aplicativos como editores de texto, editores de imagem, tocadores de som, e, mas não necessariamente, compiladores. O sistema foi continuado dentro da Bell Labs, chegando a poucas dezenas de instalações, porém só obteve grande crescimento após ter sido totalmente reescrito na linguagem C, o que permitiu uma portabilidade melhor para outras plataformas. A linguagem C foi derivada da linguagem B e criada por Dennis Ritchie e Brian Kernighan. Nesta época, o sistema já contava com mais de 60 comandos, muitos deles ainda utilizados até hoje, tais como: cd - trocar de diretórios, chmod - trocar permissões, wc - contar palavras em arquivos, roff - processar texto, etc. O seu crescimento e reconhecimento culminou com a publicação na renomada revista “ Communications of the ACM” , em julho de 1974. Com sua filosofia de simplicidade, padrões abertos e seu licenciamento facilitado pela AT&T, o Unix se espalhou e se desenvolveu rapidamente pelas universidades. Várias versões de Unix foram surgindo, sendo que a principal delas foi desenvolvida na Universidade de Berkeley, denominada BSD (Berkeley Software Distribution), um software liberado publicamente em 1977, predecessor dos atuais e bem-sucedidos BSD's (FreeBSD, OpenBSD e NetBSD). Outras versões comerciais também foram surgindo, tais como: Irix pela SGI em 1982, XENIX pela SCO em 1983, HP-UX pela HP em 1986, SunOS pela Sun em 1987 e AIX pela IBM em 1990 . A maioria dos sistemas inclui ferramentas e utilitários baseados no BSD e tipicamente usam XFree86 ou X.Org para oferecer a funcionalidade do sistemas de janelas X — interface gráfica. Assim como também oferecem ferramentas desenvolvidas pelo projeto GNU. No momento do desenvolvimento do Linux, vários aplicativos já vinham sendo reunidos pelo Projeto GNU da Free Software Foundation (‘Fundação do Software Livre’), que embarcara num subprojeto que ainda continua para obter um núcleo, o GNU Hurd. Porém devido a várias complicações o projeto GNU e demora em desenvolver o Hurd, Stallman acabou adotando o núcleo Linux como base para distribuir os programas do projeto GNU ; no entanto diversas pessoas e instituições tiveram a mesma ideia e assim começaram a surgir várias distribuições baseadas no núcleo desenvolvido inicialmente por Linus. ### Diretórios Os s de shell, que são:os arquivos de textos, os comandos executáveis, entre outros arquivos comuns são nomeados como arquivos regulares. Estes tipos de arquivos possuem dados que podem ser lidos ou executados por instruções. Também há arquivos que não são regulares, como diretórios ou redirecionamentos com nomes. Eles contêm dados singulares ou possuem comportamentos especiais quando acessados. Os arquivos são organizados em diretórios ou listagens de arquivos. Todos os demais arquivos no Linux, um diretório é lidado também como um tipo de de arquivo. Cada diretório poderá conter um subdiretório, originando assim uma lista hierárquica. Os diretórios são organizados somente em uma árvore monolítica. O mais alto dos diretórios é chamado de diretório-raiz. Ele se difere em relação aos outros sistemas operacionais, que tem discos marcados separadamente. O Linux lida qualquer parte do disco como um subdiretório dentro dessa estrutura do principal diretório. Partindo do ponto de vista do usuário, é praticamente impossível afirmar em qual parte do disco é pertencido um respectivo diretório, pois aparentemente tudo pertence ao único disco. O nome de caminho é uma string que mostra uma localização de um arquivo, de acordo com sua ordem de diretórios que for encontrado ao passar. O diretório-raiz, é determinado com o símbolo da barra (/). O uso de mais nomes de barras e diretórios especifica os diretórios adicionais. Quando os usuários se conectam, são trazidos no diretório pessoal chamado de seu diretório de entrada. Esse diretório é tipificado com um til (~) em Bash. O diretório de trabalho, ou chamado também diretório corrente é representado por um ponto final (.). Quando ele não começa com uma barra, o Bash julga que é um caminho relativo ao diretório de trabalho. O diretório-pai, é simbolizado por dois pontos (..). Esses dois pontos podem ser usados em qualquer diretório a fim de mover em direção ao diretório-raiz da árvore de diretórios, anulando assim o diretório dito anteriormente em um caminho.[27] Os nomes de caminhos sem uma barra inicial são nomeados de caminhos relativos, pois eles especificam a localização de um arquivo em comparação ao diretório corrente. Esses caminhos relativos são de utilidade para representar arquivos em seu diretório corrente ou em subdiretórios deste. Os caminhos com uma barra no início são nomeados de caminhos absolutos. Esses tipos de caminhos denotam a localização do arquivo em comparação ao diretório-raiz. Não importando onde que esse diretório-raiz estiver. Os caminhos absolutos sempre identificam o arquivo com precisão. Esses caminhos absolutos servem de localização de arquivos comuns que são guardados sempre no mesmo lugar. A maioria das distribuições Linux incluem os respectivos diretórios: /dev - Contém arquivos especiais ou arquivos de dispositivos. /bin e /usr/bin - Contém comandos-padrão de Linux. /lib e /usr/lib - Possui as bibliotecas-padrão de Linux. /var - Possui arquivos de configuração e de log. /etc - Possui arquivos padrão de configuração. /usr/local/bin - Possui comandos que não são parte da distribuição, acrescentando pelo seu administrador. /opt - Possui software comercial /tmp - Armazena arquivos temporários. /sbin e /usr/sbin - Possui comandos de administração de sistema. ### Distribuições Imagem da interface do Ubuntu, uma das mais bem sucedidas distribuições Linux.[29] Atualmente, um Sistema Operacional (em Portugal Sistema Operativo) Linux ou GNU/Linux completo (uma "Lista de distribuições de Linux ou GNU/Linux") é uma coleção de software livre (e por vezes não-livre) criado por indivíduos, grupos e organizações de todo o mundo, incluindo o núcleo Linux. Companhias como a Red Hat, a SuSE, a Mandriva (união da Mandrake com a Conectiva) e a Canonical (desenvolvedora do Ubuntu Linux), bem como projetos de comunidades como o Debian ou o Gentoo, compilam o software e fornecem um sistema completo, pronto para instalação e uso. Patrick Volkerding também fornece uma distribuição Linux, o Slackware. As distribuições do Linux ou GNU/Linux começaram a receber uma popularidade limitada desde a segunda metade dos anos 90, como uma alternativa livre para os sistemas operacionais Microsoft Windows e Mac OS, principalmente por parte de pessoas acostumadas ao Unix na escola e no trabalho. O sistema tornou-se popular no mercado de Desktops e servidores, principalmente para a Web e servidores de bancos de dados. Todas elas tem o seu público e sua finalidade, as pequenas (que ocupam poucas disquetes) são usadas para recuperação de sistemas danificados ou em monitoramento de redes de computadores. Dentre as maiores, distribuídas em CDs, podem-se citar: Slackware, Debian, Suse, e Conectiva. Cada distribuição é, em síntese, um sistema operacional independente, de modo que os programas compilados para uma distribuição podem não rodar em outra, embora usem o mesmo núcleo (o Linux propriamente dito). A distribuição Conectiva Linux, por exemplo, tinha as suas aplicações traduzidas em português, o que fez com que os usuários que falam a Língua Portuguesa tenham aderido melhor a esta distribuição. Hoje esta distribuição foi incorporada à Mandrake, o que resultou na Mandriva. Para o português, existe também as distribuições brasileiras, como As mais recentes Duzero, Metamorphorse, GoboLinux, Linuxfx ctOS Big Linux, Dizinha Linux, DreamLinux, Dual O/S, Ekaaty, Famelix, FeniX, GoblinX, Kalango e Kurumin (essa distribuição foi descontinuada pelo seu mantenedor), construída sobre Knoppix e Debian, e a Caixa Mágica, existente nas versões 32 bits, 64 bits, Live CD 32 bits e Live CD 64 bits, e com vários programas open source: LibreOffice, Mozilla Firefox, entre outros. Existem distribuições com ferramentas para configuração que facilitam a administração do sistema. As principais diferenças entre as distribuições estão nos seus sistemas de pacotes, nas estruturas dos diretórios e na sua biblioteca básica. Por mais que a estrutura dos diretórios siga o mesmo padrão, o FSSTND é um padrão muito relaxado, principalmente em arquivos onde as configurações são diferentes entre as distribuições. Então normalmente todos seguem o padrão FHS (File Hierarchy System), que é o padrão mais novo. Vale lembrar, entretanto, que qualquer aplicativo ou driver desenvolvido para Linux pode ser compilado em qualquer distribuição que vai funcionar da mesma maneira. Quanto à biblioteca, é usada a biblioteca libc, contendo funções básicas para o sistema Operacional Linux. O problema é que, quando do lançamento de uma nova versão da Biblioteca libc, algumas distribuições colocam logo a nova versão, enquanto outras aguardam um pouco. Por isso, alguns programas funcionam numa distribuição e noutras não. Existe um movimento LSB (Linux Standard Base) que proporciona uma maior padronização. Auxilia principalmente vendedores de software que não liberam para distribuição do código fonte, sem tirar características das distribuições. O sistemas de pacotes não é padronizado. Arch Linux, Debian, Fedora, Manjaro Linux, SolusOS, Sabayon, Mandriva, Mint, openSuse, PCLinuxOS, Puppy, Slackware e Ubuntu são algumas das distribuições mais utilizadas actualmente, listadas aqui por ordem alfabética. Existem também distribuições Linux para sistemas móveis, como tablets e smartphones, sendo o Android, desenvolvido pelo Google, a mais difundida de todas. Outras distribuições Linux para sistemas móveis são o Maemo e o MeeGo. Vários fatores ajudaram a rápida expansão do Linux depois de seu lançamento: Popularização dos computadores pessoais: o Unix era o S.O. padrão para estudos em universidades, porém, utilizavam plataformas proprietárias relativamente caras. O Linux se tornou uma opção para resolver esse problema, porque com ele foi possível a utilização de computadores pessoais mais baratos. Projeto GNU: o projeto GNU, criado por Richard Stallman em 1984, surgiu com o intuito de apoiar a liberdade de software (veja seção mais adiante sobre Software Livre). Na época do surgimento do Linux, Stallman apoiava e pretendia adotar o kernel Hurd, porém este não estava utilizável, com isso, o Linux acabou sendo o kernel (componente central do sistema operacional ligando aplicativos e o processamento real de dados feito pelo hardware) preferido para rodar as centenas de programas livres disponibilizados pelo projeto, porém o Hurd continua sendo o kernel oficial do sistema operacional GNU. Distribuições Linux: no sentido de tornar o Linux o mais utilizável possível, surgiram instituições comerciais e não-comerciais que se dedicaram a criar uma combinação ideal de aplicativos (livres ou não) que rodassem no kernel Linux. As instituições com objetivos comerciais mantiveram o licenciamento livre, através de serviços agregados, tais como: suporte, treinamento e desenvolvimento customizado. Veja seção mais adiante sobre distribuições Linux. ### Interface com o Usuário Uma característica que acaba resultando na diferenciação de uma Distribuição Linux é a Interface Gráfica. Algumas distribuições utilizam a interface KDE, outras utilizam interface GNOME, outras utilizam a interface XFCE, e ainda existem várias outras interfaces que podem ser utilizadas. ### Desenvolvimento O Ubuntu é produzido pela Canonical e pela comunidade em um modelo de governança meritocrático. A Canonical fornece atualizações gratuitas de segurança e suporte para cada versão do Ubuntu, a partir da data de lançamento e até o lançamento atingir sua data de fim de vida (EOL - End Of Life). Todas as versões são disponibilizadas sem custo algum,[26] a Canonical gera receita através da venda de serviços premium relacionados ao Ubuntu.[27][28][29][30][31][32][33][34] Novas versões são lançadas duas vezes ao ano, uma no mês de Abril e outra no mês de Outubro. Tendo relação direta com suas versões: Ano.Mês. Sua última versão é a 19.04 (lançada em 2019, mês 04). Debian vs. Ubuntu Diferencia-se do Debian pela filosofia em torno de sua concepção, por ter versões lançadas semestralmente, por disponibilizar suporte técnico nos 9 meses seguintes ao lançamento de cada versão e as versões LTS (Long Term Support, suporte de longo prazo) para desktop e servidores receberem 5 anos de suporte. O Ubuntu possui uma forte ligação com a comunidade Debian, contribuindo direta ou indiretamente com qualquer modificação nos códigos fonte, ao invés de apenas anunciar essas mudanças em uma data posterior. Muitos programadores do Ubuntu mantêm pacotes chave do próprio Debian. ### Usabilidade e acessibilidade Um dos focos principais é a usabilidade,[35] incluindo o uso da ferramenta sudo[36] para tarefas administrativas (similar ao Mac OS X) e a oferta de uma gama de recursos completa a partir de uma instalação padrão. Outros focos são a acessibilidade e internacionalização, permitindo a utilização do sistema pelo maior número de pessoas possível. A partir da versão 5.04, a codificação de caracteres padrão é o UTF-8 (permitindo a utilização de caracteres não utilizados no alfabeto latino). O projeto visa também a oferecer suporte técnico nos idiomas de seus usuários. ### Popularidade Atualmente (2019) a página do Ubuntu no Distrowatch da versão de desktop é a quinta mais acessada no ranking dos últimos seis meses. Ela já foi apontada como uma das melhores distribuições para o uso em computadores pessoais. É o sistema operacional mais popular em ambientes hospedados (computação em nuvem) por ser a distribuição Linux mais popular para servidores, e a distribuição Linux mais popular para a execução de servidores web, onde é usada por 34% dos top 10 milhões de sites analisados pela W3Techs. ### Aparência O visual padrão até a versão 5.10 e na versão 9.10 caracteriza-se pela utilização de tons castanhos; entre as versões 6.06 (Dapper Drake) e 9.04 (Jaunty Jackalope), no entanto, passou-se a usar um padrão de cores mais próximo do laranja. A versão 10.04 passou a adotar um padrão de cores mais diversificado, misturando tons de púrpura no padrão de cores. O padrão púrpura e laranja se mantêm até hoje. ### Aplicativos Além das ferramentas de sistema padrão e outros aplicativos menores, o Ubuntu é oferecido com diversos programas pré instalados que atendem às funcionalidades básicas, entre os quais estão a suíte de aplicativos LibreOffice e o navegador de internet Firefox. Programas para visualizar conteúdos multimídia, clientes de e-mail e jogos simples completam o sistema básico. A gestão de instalação de software é realizada pelo APT e pelo Synaptic e, mais recentemente, pelo Centro de Software do Ubuntu. ### Classificação de pacotes e suporte O Ubuntu divide a maioria dos softwares em quatro domínios para refletir as diferenças de licenciamento e o grau de suporte disponível.[43] Alguns aplicativos não suportados recebem atualizações de membros da comunidade, mas não da Canonical Ltd. ## O que é shell? ![](https://i.imgur.com/nowX6Hg.png) Shell é a linha de comando do Linux (e UNIX). É o shell quem interpreta a linha de comandos digitada pelo usuário no terminal e chama os programas desejados. Lê-se "xéu", como em "meu deu du xéu" :) Além de executar comandos do sistema, o shell também tem seus próprios comandos, como IF, FOR e WHILE, e também possui variáveis e funções. Tudo isso para tornar um pouco mais "esperta" e flexível essas chamadas de comandos feitas pelo usuário. Como estas são as características de uma linguagem de programação, o shell é uma ferramenta muito poderosa para desenvolver scripts e programinhas rápidos para automatizar tarefas do dia-a-dia. Para os que vêm do mundo MSDOS, pense no shell como um Batch (dos arquivos .BAT). O shell é como um Batch (muito) melhorado. Mas não se engane, o shell não é um brinquedo. Assim como serve para fazer scripts de 5 ou 10 linhas, ele é versátil e completo o suficiente para que GRANDES programas sejam feitos nele. A interação natural com o sistema operacional e seus programas multiplica os poderes do shell. Interfaces interativas com o usuário, programas de cálculos, CGI, instaladores de software, manipulação de banco de dados, rotinas de backup, tudo isso pode ser feito em shell! ## Lista de comando mais usados Lista de comandos mais usados no Linux. Numa manutenção de rotina usa-se os comandos em momentos de monitoração e (ou) urgência: | Comando | Descrição| | ------- | :--------| | ls: | Lista todos os arquivos do diretório | | df: | Mostra a quantidade de espaço usada no disco rígido | | top: | Mostra o uso da memória | | cd: | Acessa uma determinada pasta (diretório) | | mkdir: | Cria um diretório | | rm: | Remove um arquivo/diretório | | cat: | Abre um arquivo | | vi: | Abre o editor vi (lê-se viai) para editar/criar arquivos | ## Comandos de Controle e Acesso | Comando | Descrição| | ------- | :--------| |exit: |Terminar a sessão, ou seja, a shell (mais ajuda digitando man sh ou man csh)| |logout: |Des-logar, ou seja, terminar a sessão atual, mas apenas na C shell e na bash shell| |passwd:| Mudar a password do nosso utilizador (usuário logado)| |rlogin:| Logar de forma segura em outro sistema Unix/Linux| |ssh:| Sessão segura, vem de secure shell, e permite-nos logar num servidor remoto através do protocolo ssh| |slogin:| Versão segura do rlogin| |yppasswd:| Mudar a password do nosso utilizador nas páginas amarelas (yellow pages)| ## Comandos de Comunicações | Comando | Descrição| | ------- | :--------| |mail: |Enviar e receber emails| |mesg: |Permitir ou negar mensagens de terminal e pedidos de conversação (talk requests)| |pine:| Outra forma de enviar e receber emails, uma ferramenta rápida e prática| |talk: |Falar com outros utilizadores que estejam logados no momento| |write: |Escrever para outros utilizadores que estejam logados no momento| ## Comandos de Ajuda e Documentação | Comando | Descrição| | ------- | :--------| |apropos:| Localiza comandos por pesquisa de palavra-chave| |find:| Localizar arquivos, como por exemplo: find . -name *.txt -print, para pesquisa de arquivos de texto do diretório atual| |info:| Abre o explorador de informações| |man: |Manual muito completo, pesquisa informação acerca de todos os comandos que necessitemos de saber, como por exemplo man find| |whatis: |Descreve o que um determinado comando é/faz| |whereis:| Localizar a página de ajuda (man page), código fonte, ou arquivos binários, de um determinado programa| ## Comandos de Edição de Texto | Comando | Descrição| | ------- | :--------| |emacs: |Editor de texto screen-oriented| |pico: |Editor de texto screen-oriented, também chamado de nano| |sed:| Editor de texto stream-oriented| |vi:| Editor de texto full-screen| |vim:| Editor de texto full-screen melhorado (vi improved)| ## Comandos de Gestão de Arquivos e Directorias | Comando | Descrição| | ------- | :--------| |cd:| Mudar de diretório atual, como por exemplo cd diretório, cd .., cd / | |chmod: |Mudar a proteção de um arquivo ou diretório, como por exemplo chmod 777, parecido com o attrib do MS-DOS| |chown:| Mudar o dono ou grupo de um arquivo ou diretório, vem de change owner| |chgrp:| Mudar o grupo de um arquivo ou diretório| |cmp: |Compara dois arquivos| |comm:| Seleciona ou rejeita linhas comuns a dois arquivos selecionados| |cp:| Copia arquivos, como o copy do MS-DOS| |crypt: |Encripta ou Descripta arquivos (apenas CCWF)| |diff:| Compara o conteúdo de dois arquivos ASCII| |file:| Determina o tipo de arquivo| |grep:| Procura um arquivo por um padrão, sendo um filtro muito útil e usado, por exemplo um cat a.txt | grep ola irá mostrar-nos apenas as linhas do arquivo a.txt que contenham a palavra “ola”| |gzip:| Comprime ou expande arquivo| |ln:| Cria um link a um arquivo| |ls:| Lista o conteúdo de uma diretório, semelhante ao comando dir no MS-DOS| |lsof:| Lista os arquivos abertos, vem de list open files| |mkdir:| Cria uma diretório, vem de make directory”| |mv:| Move ou renomeia arquivos ou diretórios| |pwd:| Mostra-nos o caminho por inteiro da diretório em que nos encontramos em dado momento, ou seja um pathname| |quota:| Mostra-nos o uso do disco e os limites| |rm:| Apaga arquivos, vem de remove, e é semelhante ao comando del no MS-DOS, é preciso ter cuidado com o comando rm * pois apaga tudo sem confirmação por defeito| |rmdir:| Apaga diretório, vem de remove directory| |stat: |Mostra o estado de um arquivo, útil para saber por exemplo a hora e data do último acesso ao mesmo| |sync: |Faz um flush aos buffers do sistema de arquivos, sincroniza os dados no disco com a memória, ou seja escreve todos os dados presentes nos buffers da memória para o disco| |sort:| Ordena, une ou compara texto, podendo ser usado para extrair informações dos arquivos de texto ou mesmo para ordenar dados de outros comandos como por exemplo listar arquivos ordenados pelo nome| |tar:| Cria ou extrai arquivos, muito usado como programa de backup ou compressão de arquivos| |tee: |Copia o input para um standard output e outros arquivos| |tr: |Traduz caracteres| |umask: |Muda as proteções de arquivos| |uncompress:| Restaura um arquivo comprimido| |uniq:| Reporta ou apaga linhas repetidas num arquivo| |wc: |Conta linhas, palavras e mesmo caracteres num arquivo| ## Exibição ou Impressão de Arquivos | Comando | Descrição| | ------- | :--------| |cat:| Mostra o conteúdo de um arquivo, como o comando type do MD-DOS, e é muito usado também para concatenar arquivos, como por exemplo fazendo cat a.txt b.txt > c.txt” para juntar o arquivo a.txtb.txt num único de nome c.txt| |fold: |Encurta, ou seja, faz um fold das linhas longas para caberem no dispositivo de output| |head: |Mostra as primeiras linhas de um arquivo, como por exemplo com head -10 a.txt, ou usado como filtro para mostrar apenas os primeiros x resultados de outro comando| |lpq:| Examina a spooling queue da impressora| |lpr: |Imprime um arquivo| |lprm: |Remove jobs da spooling queue da impressora| |more: |Mostra o conteúdo de um arquivo, mas apenas um ecrã de cada vez, ou mesmo output de outros comandos, como por exemplo ls | more| |less: |Funciona como o more, mas com menos features, menos características e potenciais usos| |page:| Funciona de forma parecida com o comando more, mas exibe os ecrãs de forma invertida ao comando more| |pr:| Pagina um arquivo para posterior impressão| |tail:| Funciona de forma inversa ao comando head, mostra-nos as últimas linhas de um arquivo ou mesmo do output de outro comando, quando usado como filtro| |zcat:| Mostra-nos um arquivo comprimido| |xv: |Serve para exibir, imprimir ou mesmo manipular imagens| |gv:| Exibe arquivos ps e pdf| |xpdf:| Exibe arquivos pdf, usa o gv| ## Comandos de Notícias ou Rede | Comando | Descrição| | ------- | :--------| |netstat:| Mostra o estado da rede| |rsh: |Um shell em outros sistemas UNIX| |ssh: |Versão segura do rsh| |nmap: |Poderoso port-scan, para visualizarmos portas abertas num dado host| |ifconfig:| Visualizar os ips da nossa máquina, entre outras funções relacionadas com ips| |ping: |Pingar um determinado host, ou seja, enviar pacotes icmp para um determinado host e medir tempos de resposta, entre outras coisas| ## Comandos de Controlo de Processos | Comando | Descrição| | ------- | :--------| |kill: |Mata um processo, como por exemplo kill -kill 100 ou kill -9 100 ou kill -9 %1| |bg:| Coloca um processo suspenso em background| |fg: |Ao contrário do comando bg, o fg traz de volta um processo ao foreground| |jobs: |Permite-nos visualizar jobs em execução, quando corremos uma aplicação em background, poderemos ver esse job com este comando, e termina-lo com um comando kill -9 %1, se for o jobnúmero 1, por exemplo| |top:| Lista os processos que mais cpu usam, útil para verificar que processos estão a provocar um uso excessivo de memória, e quanta percentagem decpu cada um usa em dado momento| |^y: |Suspende o processo no próximo pedido de input| |^z: |Suspende o processo actual| ## Comandos de Informação de Estado | Comando | Descrição| | ------- | :--------| |clock: |Define a hora do processador| |date: |Exibe a data e hora| |df: |Exibe um resumo do espaço livre em disco| |du: |Exibe um resumo do uso do espaço em disco| |env:| Exibe as variáveis de ambiente| |finger: |Pesquisa informações de utilizadores| |history:| Lista os últimos comandos usados, muito útil para lembrar também de que comandos foram usados para fazer determinada acção no passado ou o que foi feito em dada altura| |last:| Indica o último login de utilizadores| |lpq: |Examina a spool queue| |manpath: |Mostra a path de procura para as páginas do comando man| |printenv: |Imprime as variáveis de ambiente| |ps: |Lista a lista de processos em execução, útil para saber o pid de um processo para o mandar abaixo com o comando kill, entre outras coisas| |pwd:| Mostra-nos o caminho por inteiro do diretório em que nos encontramos em dado momento, ou seja um pathname| |set: |Define variáveis da sessão, ou seja, da shell, na C shell, na bash ou na ksh| |spend: |Lista os custos ACITS UNIX até à data| |time |Mede o tempo de execução de programas| |uptime: |Diz-nos há quanto tempo o sistema está funcional, quando foi ligado e o seu uptime| |w:| Mostra-nos quem está no sistema ou que comando cada job está a executar| |who: |Mostra-nos quem está logado no sistema| |whois: |Serviço de diretório de domínios da Internet, permite-nos saber informações sobre determinados domínios na Internet, quando um domínio foi registado, quando expira, etc| |whoami: |Diz-nos quem é o dono da shell| ## Comandos de Processamento de Texto | Comando | Descrição| | ------- | :--------| |abiword: |Processador de Texto Open Source| |addbib: |Cria ou modifica bases de dados bibliográficas| |col:| Reverte o filtro a line feeds| |diction: |Identifica sentenças com palavras| |diffmk:| Marca diferenças entre arquivos| |dvips:| Converte arquivos TeX DVI em arquivos PostScript| |explain: |Explica frases encontradas pelo programa diction| |grap: |Preprocessador pic para desenhar gráficos, usado em tarefas elementares de análises de dados| |hyphen:| Encontra palavras com hífens| |ispell: |Verifica a ortografia de forma interativa| |latex: |Formata texto em LaTeX, que é baseado no TeX| |pdfelatex: |Para documentos LaTeX em formato pdf| |latex2html:| Converter LaTeX para html| |lookbib: |Encontra referências bibliográficas| |macref: |Cria uma referência cruzada listando arquivos de macros nroff/troff| |ndx: |Cria uma página de indexação para um documento| |neqn: |Formata matemáticas com nroff| |nroff: |Formata texto para exibição simples| |pic: |Produz simples imagens para troff input| |psdit: |Filtra um output troff para a Apple LaserWriter| |ptx: |Cria uma indexação permutada mas não em CCWF| |refer: |Insere referências de bases de dados bibliográficas| |roffbib: |Faz o run off de uma base de dados bibliográfica| |sortbib: |Ordena uma base de dados bibliográfica| |spell:| Encontra erros de ortografia| |style: |Analisa as características superficiais de um documento| |tbl: |Formata tabelas para nroff/troff| |tex: |Formata texto| |tpic:| Converte arquivos pic source em comandos TeX| |wget: |Permite-nos fazer o download completo de páginas web, com todos os arquivos, de forma fácil e não interactiva, sem exigir por isso presença do utilizador, respeitando também o arquivorobots.txt| ## Web | Comando | Descrição| | ------- | :--------| |html2ps: |Conversor de html para ps| |latex2html:| Conversor de LaTeX para html| |lynx: |Navegador web baseado em modo de texto, ou seja, é um web browser que nos permite abrir todo o tipo de páginas visualizando apenas os textos elinks, não vendo assim as imagens, e sendo por isso bastante rápido, mas requere prática para ser manuseado| |netscape: |Navegador web da Netscape| |sitecopy: |Aplicação que nos permite manter fácil e remotamente web sites| |weblint: |Verificador de sintaxes e de estilos html| ## Comandos básicos ### Conceitos e comandos #### O diretório raiz (`/`) Todos os arquivos e diretórios do sistema Linux instalado no computador partem de uma única origem: o diretório raiz. Mesmo que estejam armazenados em outros dispositivos físicos, é a partir do diretório raiz – representado pela barra (/) – que você poderá acessá-los. Também vale lembrar que o único usuário do sistema capaz de criar ou mover arquivos do diretório raiz é o root, ou seja, o usuário-administrador. Isso evita que usuários comuns cometam erros e acabem comprometendo a integridade de todo o sistema de arquivos. #### Binários executáveis: `/bin` No diretório `/bin` estão localizados os binários executáveis que podem ser utilizados por qualquer usuário do sistema. São comandos essenciais, usados para trabalhar com arquivos, textos e alguns recursos básicos de rede, como o cp, mv, ping e grep. Se você ainda não conhece esses comandos, não se preocupe: falaremos sobre eles em um artigo futuro, aqui no Canaltech. #### Binários do sistema: `/sbin` Assim como o `/bin`, este diretório armazena executáveis, mas com um diferencial: são aplicativos utilizados por administradores de sistema com o propósito de realizar funções de manutenção e outras tarefas semelhantes. Entre os comandos disponíveis estão o ifconfig, para configurar e controlar interfaces de rede TCP/IP, e o fdisk, que permite particionar discos rígidos, por exemplo. #### Programas diversos: /usr Se você não encontrar um comando no diretório `/bin` ou `/sbin`, ele certamente está aqui. O `/usr` reúne executáveis, bibliotecas e até documentação de softwares usados pelos usuários ou administradores do sistema. Além disso, sempre que você compilar e instalar um programa a partir do código-fonte, ele será instalado nesse diretório. #### Configurações do sistema: /etc No diretório `/etc` ficam arquivos de configuração que podem ser usados por todos os softwares, além de scripts especiais para iniciar ou interromper módulos e programas diversos. É no /etc que se encontra, por exemplo, o arquivo resolv.conf, com uma relação de servidores DNS que podem ser acessados pelo sistema, com os parâmetros necessários para isso. #### Bibliotecas: `/lib` Neste ponto do sistema de arquivos ficam localizadas as bibliotecas usadas pelos comandos presentes em `/bin` e `/sbin`. Normalmente, os arquivos de bibliotecas começam com os prefixos `ld` ou `lib` e possuem "extensão" `so`. #### Opcionais: `/opt` Aplicativos adicionais, que não são essenciais para o sistema, terminam neste diretório. #### Aquivos pessoais: `/home` No diretório `/home` ficam os arquivos pessoais, como documentos e fotografias, sempre dentro de pastas que levam o nome de cada usuário. Vale notar que o diretório pessoal do administrador não fica no mesmo local, e sim em `/root`. #### Inicialização: `/boot` Arquivos relacionados à inicialização do sistema, ou seja, o processo de boot do Linux, quando o computador é ligado, ficam em `/boot`. #### Volumes e mídias: `/mnt` e `/media` Para acessar os arquivos de um CD, pendrive ou disco rígido presente em outra máquina da rede, é necessário "montar" esse conteúdo no sistema de arquivos local, isso é, torná-lo acessível como se fosse apenas mais um diretório no sistema. Em `/media` ficam montadas todas as mídias removíveis, como dispositivos USB e DVDs de dados. Já o diretório `/mnt` fica reservado aos administradores que precisam montar temporariamente um sistema de arquivos externo. #### Serviços: `/srv` Dados de servidores e serviços em execução no computador ficam armazenados dentro desse diretório. #### Arquivos de dispositivos: `/dev` No Linux, tudo é apresentado na forma de arquivos. Ao plugar um pendrive no computador, por exemplo, um arquivo será criado dentro do diretório `/dev` e ele servirá como interface para acessar ou gerenciar o drive USB. Nesse diretório, você encontra caminhos semelhantes para acessar terminais e qualquer dispositivo conectado ao computador, como o mouse e até modems. #### Arquivos variáveis: `/var` Todo arquivo que aumenta de tamanho ao longo do tempo está no diretório de arquivos variáveis. Um bom exemplo são os logs do sistema, ou seja, registros em forma de texto de atividades realizadas no Linux, como os logins feitos ao longo dos meses. #### Processos do sistema: `/proc` Lembra da história de que tudo funciona como um arquivo no Linux? Pois o `/proc` é a prova disso. Nesse diretório são encontrados arquivos que revelam informações sobre os recursos e processos em execução no sistema. Quer um exemplo? Para saber há quanto tempo o Linux está sendo usado desde a última vez em que foi iniciado, basta ler o arquivo `/proc/uptime`. #### Arquivos temporários: `/tmp` Arquivos e diretórios criados temporariamente tanto pelo sistema quanto pelos usuários devem ficar nesse diretório. Boa parte deles é apagada sempre que o computador é reiniciado. Como fica fácil perceber, os nomes dos diretórios dão dicas do que pode ser encontrado em seu interior e, com alguns meses de uso, você estará navegando por eles com facilidade. #### Listar arquivos: `ls` Mostra a lista de arquivos do diretório ![](https://i.imgur.com/fXsqULz.png) #### Listar arquivos com detalhes: `ls -l` Mostra a lista de arquivos do diretório ![](https://i.imgur.com/5Q2Rhoi.png) #### Listar arquivos ocultos: `ls -a` Mostra a lista de arquivos OCULTOS do diretório. Todos os arquivos ocultos tem um "ponto" na frente do nome. ![](https://i.imgur.com/1Q7R0A8.png) #### Mostrar o calendário: `cal` ![](https://i.imgur.com/AoAcSsh.png) #### Mostrar o calendário do ano: `cal 2019` ![](https://i.imgur.com/uY6YhcZ.png) #### Mostrar a data: `date` ![](https://i.imgur.com/N9qPfkf.png) #### Mostrar quem está logado: `w` ![](https://i.imgur.com/3QlewDS.png) #### Mostrar o espaço utilizado: `df` ![](https://i.imgur.com/6UPwwXb.png) #### apt-get update APT é um projeto amplo, cujos planos originais incluem uma interface gráfica. Ele é baseado numa biblioteca que contém as aplicações principais, e o apt-get é a primeira interface — em linha de comando — que foi desenvolvida dentro do projeto. O apt é uma segunda interface baseada em linha de comando fornecida pelo APT que supera alguns erros de projeto do apt-get. Consulta as entradas dos repositórios listados no arquivo /etc/apt/sources.list e atualiza a base de dados de pacotes disponíveis. Este comando procura por novas versões de pacotes nos repositórios disponíveis. E claro, atualiza a lista de pacotes que fica disponível em nosso sistema. #### apt-get upgrade Verifica atualizações de todos os pacotes de um sistema Linux, em seguida executa o download e instalação. #### apt-get dist-upgrade Atualiza todo o sistema para uma nova versão da distribuição, mesmo que isso signifique eliminar pacotes. ## Criptografia GPG ![](https://i.imgur.com/WgN7jiI.png) **GPG (GNU Privacy Guard)** Além de encriptar mensagens inteiras, o **GPG** permite que você “assine” digitalmente as assinaturas. Usadas desta forma, as mensagens podem ser lidas por recipientes que carecem do software **GPG** ou chaves apropriadas; mas, aqueles que tiverem estas ferramentas podem verificar que os conteúdos não foram cuidados. Além de encriptar mensagens inteiras, o **GPG** permite que você “assine” digitalmente as assinaturas. Usadas desta forma, as mensagens podem ser lidas por recipientes que carecem do software **GPG** ou chaves apropriadas; mas, aqueles que tiverem estas ferramentas podem verificar que os conteúdos não foram cuidados. Para começar a usar o **GPG**, você deverá instalar o software. Existem chances da sua própria distribuição já ter o incluído como pacote padrão, então torna-se ainda mais fácil. Já feito isso, você deverá gerar chaves. As chaves GPG são bem parecidas com as chaves SSH: você precisa de uma chave privada e uma chave pública. Você pode assinar suas mensagens com a chave privada e o leitor pode verificá-la com sua chave pública; ou você pode encriptar uma mensagem com outra chave pública de outro usuário, e poderá ser decriptada somente com a chave privada de tal usuário. Para gerar chaves, você usa o programa gpg com sua opção --gen-key: ```javascript $ gpg --export nome > gpg.pub ``` Tendo gerado a sua chave, você pode exportar sua chave pública: ```javascript $ gpg --export nome > gpg.pub ``` Para encriptar os dados, você irá utilizar o gpg com suas opções --out e --encrypt além de, opcionalmente, --recipient e --armor. ```javascript $ gpg --out encrypted-file --recipient uid --armor --encrypt original-file ``` Se você recebeu uma mensagem ou arquivo que foi encriptado com sua chave pública, você pode reverter a encriptação usando a opção --decrypt. ```javascript $ gpg --out decrypted-file --decrypt encrypted-file ``` Para assinar as mensagens, use a opção --sign ou --clearsign. ```javascript $ gpg --verify received-file ``` ## Youtube -DL ![](https://i.imgur.com/Cx3iAPJ.png) **Youtube-dl** é uma ferramenta de linha de comando que permite baixar vídeos do YouTube e outros sites semelhantes de um jeito bem simples e rápido. **Youtube-dl** suporta: YouTube (onde além de vídeos individuais, também suporta listas de reprodução, pesquisas e vídeos do usuário), metacafe.com, vídeo do Google (incluindo pesquisas), hotnewhiphop.com, auengine.com, gamespot.com, RingTV, wat.tv, traileraddict.com, tu.tv, instagram.com, Statigr.am, break.com, tudou.com, Jukebox, Wimp.com, CSpan, 3sat, brightcove.com, Pinsthotobucket, Dailymotion, DepositFiles, blip.tv, Vimeo, myvideo.de, The Daily Show/Colbert Nation, The Escapist, CollegeHumor, arte.tv, Soundcloud, xvideos, infoq, mixcloud, Stanford Open Content, Youku, MTV, Xnxx, Google Plus, archive.org e há também um downloader genérico que funciona com alguns outros sites. ### Como instalar o Youtube-dl no Ubuntu **Passo 1**. Abra um terminal (Usando o Dash ou pressionando as teclas CTRL+ALT+T); **Passo 2**. Se ainda não tiver, adicione o repositório do programa com este comando ou use esse tutorial; ```javascript sudo add-apt-repository ppa:nilarimogard/webupd8 ``` **Passo 3**. Atualize o Apt digitando o comando: ```javascript sudo apt-get update ``` **Passo 4**. Agora instale o programa com o comando: ```javascript sudo apt-get install youtube-dl ``` ### UserMod Este comando modifica uma conta de usuário do sistema. #### Algumas opções do comando ||| |--|--| |-d diretório [-m] :| cria um novo diretório home para o usuário. A opção -m faz com que os arquivos do diretório atual do usuário sejam movidom para o novo diretório.| |-e yyyy-mm-dd :| altera a data de expiração da conta do usuário.| |-g grupo :| altera o GID do grupo padrão do usuário para o valor especificado.| |-G grupo1[,grupo2, …] :| define o GID dos outros grupos aos quais o usuário pertence.| |-l nome :| altera o nome de identificação do usuário (o usuário não pode estar logado).| |-s shell :| altera o shell do usuário.| |-u uid : |altera o número de UID do usuário.| * O comando usermod normalmente exige o uso do comando sudo. * Este comando altera (se necessário) as entradas relacionadas ao usuário especificado nos seguintes arquivos: /etc/passwd, /etc/shadow e /etc/group. * Os comandos adduser e useradd criam usuários. * Os comandos deluser e userdel deletam usuários. * O comando chsh altera o shell padrão do usuário. * Os comandos chgrp e chown permitem alterar o grupo de um arquivo/diretório. Além disso, é também possível usar o segundo comando para alterar o dono do arquivo. ### Less Este comando permite fazer a paginação de arquivos ou da entrada padrão. ||| |--|--| | + :| se a opção começa com este sinal, então a opção é usada como um comando inicial para o aplicativo less.| | -? ou −−help:| lista um sumário das opções do aplicativo less.| | +num :| mostra arquivo a partir da linha num.| | -N :| numera as linhas do arquivo.| | -n :| não numera as linhas do arquivo (é o padrão).| | -f or −−force : |força a abertura de um arquivo não regular.| | +F :| continua indefinidamente tentando ler caracteres no final do arquivo (assume que o arquivo está crescendo). O comportamento é semelhante ao comando tail -f.| | +G :| posiciona no final do arquivo.| #### Teclas disponíveis * Use as teclas Page-Down, Ctrl+F ou Space para avançar nas páginas. * Use as teclas Page-Up ou Ctrl+B para voltar as páginas. * Use Enter para avançar apenas uma linha por vez. * Digite h para ver a lista das teclas disponíveis para navegação no aplicativo (digite q para voltar ao texto). * Para procurar uma palavra, digite / e, em seguida, entre com a palavra. Para procurar a próxima palavra e a palavra anterior no texto use, respectivamente, n e N. * Para sair do aplicativo digite q. ### Cut O comando cut pode ser usado para mostrar apenas seções específicas de um arquivo de texto ou da saída de outros comandos. Ele lê o conteúdo de um ou mais arquivos, ou a saída de comandos, e apresenta como resultado uma coluna. O cut é ótimo para trabalhar com delimitadores entre os dados como ":" ou ";", mas também pode ser usado contando os caracteres partindo do início ou do fim de uma linha. As opções mais usadas, são: ||| |--|--| |-b, -bytes [bytes] ::| Mostra a lista de bytes do arquivo.| |-c, -characters [número] ::| Mostra o número de caracteres do arquivo (o Tab e o espaço são contados como caracteres).| |-f, -field [campos] ::| Mostra a lista de campos| |-d, delimite [caracter] ::| Opção para uso com "-f", determina o caractere delimitador e na ausência o padrão é o Tab.| **Exemplos:** :point_right: Para mostrar os logins de todos os usuários do sistema contidos no arquivo passwd: ```javascript cut -d: -f 1 /etc/passwd ``` :point_right: Obter os logins e os números de usuário: ```javascript cut -d: -f 1,3 /etc/passwd ``` :point_right:Mostrando apenas os 10 (dez) primeiros caracteres de qualquer linha em um arquivo: ```javascript cut -c 1-10 /etc/passwd ``` ### Chown Em sistemas operacionais Linux, cada arquivo é associado com um grupo e um dono (owner). Chown é uma abreviação para change owner, que traduzido fica “mudar o dono”. O comando pode ser utilizado em qualquer sistema Unix pelo superusuário. Neste tutorial você vai aprender como usar e se beneficiar deste comando. Com o chown você pode mudar o dono de arquivos, diretórios e links. Se um usuário comum desejar realizar certas mudanças em um arquivo, um superusuário pode usar o comando chown para alterar o dono do arquivo e permitir tal alteração. ### Wget ![](https://i.imgur.com/EsgoCyH.png) O **wget** é um comando bastante utilizado nos sistemas operacionais — sobretudo no Linux — que se caracteriza por oferecer benefícios no download de arquivos. Sem dúvidas, estou falando de uma ferramenta essencial para quem faz uso do terminal. GNU Wget (ou apenas WGET, anteriormente Geturl, também escrito como seu nome de pacote, wget) é um programa de computador que recupera conteúdo de servidores web. É parte do Projeto GNU. O W do seu nome deriva da World Wide Web. Ele suporta o download através dos protocolos HTTP, HTTPS e FTP. Suas características incluem download recursivo, conversão de links para visualização offline de HTML local e suporte para proxies. Apareceu em 1996, coincidindo com o boom de popularidade da Web, causando seu uso amplo entre usuários Unix e distribuição com a maioria das principais distribuições Linux. Escrito em C portátil, Wget pode ser facilmente instalado em qualquer sistema Unix-like. Os programadores têm portado Wget para muitos ambientes, incluindo Microsoft Windows, Mac OS X, OpenVMS, HP-UX, MorphOS e AmigaOS. Desde a versão 1.14 o Wget conseguiu salvar sua saída no formato WARC de arquivamento na web. ## Instalação Visual Code ```javascript= sudo apt upgrade sudo apt install software-properties-common apt-transport-https wget wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" sudo apt update sudo apt install code ``` ###### tags: `linux` `apostila`