Linux - Do - Zero - Livro PDF 2024
Linux - Do - Zero - Livro PDF 2024
Linux - Do - Zero - Livro PDF 2024
Linux do Zero
Uirá Ribeiro
ISBN 978-65-990965-1-8
carmen
79003052549
[email protected]
+351920273542
Este livro e todo seu conteúdo é protegido pela Lei de Direitos Autorais - LEI Nº 9.610,
de 19 de Fevereiro de 1998. Este livro e suas partes não poderão ser reproduzidos /
distribuídos / copiados / cedidos / vendidos / emprestados sem a autorização pré via e
por escrito do autor, sob pena da adoção das medidas cabı́veis na esfera cı́vel e penal.
Apesar de toda a atenção, erros de digitação e/ou de impressã o nã o sã o descartados.
Em caso de alguma dú vida, entre em contato conosco pelo e-mail [email protected]
para que possamos ajudá -lo.
No sagrado mistério da vida, cada coração possui no Infinito a alma gêmea da sua,
companheira divina para a viagem à gloriosa imortalidade. Agradeço à minha alma de
minhalma, Carla Cruz, por tecer-me a felicidade em sorrisos de esplendor.
Ao meu “pequeno” grande amigo, meu filho, Arthur. Que torna todos os momentos
mais doces e engraçados.
Ao amigo Jon “Maddog” Hall, que tão gentilmente me honrou ao escrever o prefácio
deste livro.
A Deus, pela força, pela saúde, pelo pão nosso de cada dia e pela fé.
Saudações,
Se você está lendo estas palavras, é porque você, provavelmente, tomou várias
decisões.
Em segundo lugar, você pode estar usando Linux em seu PC em casa, ou talvez você
seja um administrador de um sistema como Solaris, AIX, HP/UX, ou algum outro
sistema de propriedade Unix e, logo, você começou a usar Linux no trabalho. Ou
ainda, você se sente pronto para trabalhar em uma empresa que trabalha com o
sistema Linux em tempo integral.
Em terceiro lugar, você pode ter olhado em um jornal e percebeu que alguns anúncios
de emprego já estão exigindo que o candidato tenha “Certificação de LPI”, e você
deseja saber o motivo de tal requisito. Afinal de contas, você já sabe como manter um
sistema de Linux!
Quando eu comecei em informática, trinta e cinco anos atrás, as coisas eram muito,
mas muito mais simples do que elas são hoje. Um programador só precisava saber
como perfurar cartões e como escrever na linguagem FORTRAN (ou COBOL). Não
havia Internet ou vírus, somente interfaces gráficas pobres, e a memória principal era
medida em kilobytes, nada de megabytes ou gigabytes. Na realidade, nem sequer
existia algum título oficial para o cargo que temos hoje de “administrador de
sistemas”, uma vez que cada sistema era executado por “operadores” que se
preocupavam com uma máquina específica, e não com a interatividade de várias
máquinas que trabalham em conjunto.
Hoje, nós temos que nos preocupar com segurança, tráfico de rede e tabelas de rotas,
subnets, e demais assuntos de rede. Temos que controlar migração de dados e de
programas de um sistema para o outro, e a interoperabilidade de várias redes e
protocolos. Nós temos que ser capazes de planejar o crescimento, além de resolver
problemas. É a partir dessas necessidades que se originaram as tarefas e o título de
“Administrador de Sistemas.”
Este livro é um exemplo de um método de treinamento para lhe ajudar a alcançar este
nível de conhecimento.
Claro que o contratante também pode conferir o potencial do candidato com seus ex-
empregadores ou professores. E por que também não verificar as realizações prévias
do empregado como listado em seu currículo? Mas o fato do candidato ter sido
aprovado nos exames de LPI assegura para o empregador que o candidato em
questão, com certeza, se trata de um BOM administrador de sistemas GNU/Linux.
Meus cumprimentos,
Já os comandos que iniciam com "#", são aqueles que precisam de permissões do
super-usuário root para serem executados. Portanto, se você for testar estes
comandos, você precisa estar logado como root, ou então usar o comando "sudo"
antes do comando indicado no exemplo.
Alguns comandos podem aceitar algum parâmetro ou opção como opcional. Quando
isso acontecer, o livro vai apresentar o parâmetro entre colchetes [ ] para indicar que
é opcional.
Também é possível que haja pequenas variações nos caminhos dos arquivos indicados
no livro. Isto é um problema oriundo da distribuição que você escolheu que não seguiu
o padrão definido pelo Linux Standard Base (LBL).
Este livro também tem vídeos sobre os comandos exemplificados, para você ver o uso
do comando em questão em ação. Para ver os vídeos use seu celular com o aplicativo
da câmera ou aplicativo de ler QR-Code.
Linux do Zero
Sumário
ix
Prof. Uirá Ribeiro
x
Linux do Zero
xi
Prof. Uirá Ribeiro
xii
Linux do Zero
xiii
Prof. Uirá Ribeiro
xiv
Linux do Zero
-- Steve Jobs
Eu sou o Professor Uirá Ribeiro, autor de livros sobre Linux, CEO do Certificação Linux
e Chair do Board do Linux Professional Institute (LPI). No mundo da tecnologia da
informação (TI), onde a inovação e a evolução são constantes, é fundamental estar
atualizado e preparado para enfrentar novos desafios. Entre as diversas tecnologias
que compõem o cenário atual, o Linux destaca-se como um sistema operacional
essencial para profissionais de TI. Neste artigo, discutiremos a importância de estudar
Linux, suas vantagens para a carreira e como ele está integrado ao cotidiano das
pessoas.
2. Versatilidade e Flexibilidade
O Linux é conhecido por sua versatilidade e flexibilidade. Ele pode ser utilizado em
diversos dispositivos, desde servidores robustos até dispositivos embarcados,
passando por desktops e dispositivos móveis. Isso permite que profissionais de TI
possam aplicar seus conhecimentos em uma ampla variedade de ambientes e
contextos.
3. Custo-Benefício
Sendo um sistema operacional de código aberto, o Linux oferece uma alternativa
econômica em comparação com sistemas proprietários. Empresas podem reduzir
custos com licenciamento e personalizar o sistema conforme suas necessidades, sem
comprometer a qualidade e a segurança.
4. Segurança e Estabilidade
O Linux é reconhecido por sua segurança e estabilidade. Sua arquitetura permite uma
gestão eficiente de permissões e acesso, além de ser menos suscetível a malwares.
Profissionais que dominam Linux são capazes de implementar soluções seguras e
robustas, essenciais para a proteção de dados e continuidade dos negócios.
Linux no Contexto da TI
1.Servidores de Web
•A maioria dos servidores web no mundo operam com Linux. Segundo a W3Techs,
aproximadamente 78% dos servidores web utilizam alguma distribuição Linux, como
Ubuntu Server, CentOS ou Red Hat Enterprise Linux (RHEL).
2.Serviços de Nuvem
•Provedores de nuvem como AWS, GCP e Azure oferecem uma ampla gama de
instâncias baseadas em Linux.
•Segundo a Linux Foundation, mais de 90% das cargas de trabalho na nuvem pública
rodam em Linux.
•Empresas como Netflix, Airbnb e Amazon utilizam Linux para suas operações na
nuvem, aproveitando a escalabilidade e a eficiência do sistema.
3.Desenvolvimento de Software
5.Segurança e DevOps
O grande uso do Linux nos provedores de cloud computing ressalta ainda mais sua
importância e relevância no cenário tecnológico atual. Empresas líderes em serviços
de nuvem, como Amazon Web Services (AWS), Google Cloud Platform (GCP) e
Microsoft Azure, utilizam Linux extensivamente em suas infraestruturas devido à sua
robustez, segurança, flexibilidade e eficiência de recursos. A predominância do Linux
nestes ambientes se deve à sua capacidade de oferecer suporte a uma ampla gama
de aplicações, desde serviços web e bancos de dados até inteligência artificial e big
data, proporcionando aos provedores de cloud uma plataforma confiável e escalável
para atender às demandas variadas e crescentes de seus clientes. Este cenário
reforça a necessidade de profissionais de TI possuírem habilidades e certificações em
Linux, garantindo a competência necessária para operar e gerenciar esses ambientes
de nuvem críticos.
Provedores de Cloud
•AWS oferece Amazon Linux, uma distribuição projetada para uso na infraestrutura da
AWS, além de suporte para outras distribuições populares como Ubuntu, CentOS e
RHEL.
•GCP suporta várias distribuições Linux, oferecendo integração com serviços como
Google Kubernetes Engine (GKE) e Compute Engine.
3.Microsoft Azure
Estatísticas Relevantes
•De acordo com a Stack Overflow Developer Survey 2020, mais de 55% dos
desenvolvedores profissionais usam Linux como seu sistema operacional de
desenvolvimento principal.
Embora muitas pessoas possam não estar cientes, o Linux está presente no cotidiano
de quase todos nós, especialmente através dos dispositivos Android. O sistema
operacional Android, utilizado em bilhões de smartphones e tablets, é baseado no
kernel Linux. Isso significa que, ao utilizar um dispositivo Android, as pessoas estão
interagindo indiretamente com o Linux.
Estudar Linux é, sem dúvida, uma decisão estratégica para qualquer profissional de TI.
As vantagens incluem alta demanda por profissionais qualificados, versatilidade,
custo-benefício, segurança e estabilidade. No contexto da TI, o Linux é essencial para
servidores, desenvolvimento de software e serviços de nuvem. Além disso, sua
presença no cotidiano das pessoas, especialmente através do Android, ressalta sua
relevância.
Aumento da Empregabilidade
Potencial de Salário
Credibilidade e Reconhecimento
Se você optar por estudar através de escolas parceiras das instituições provedoras
dos exames, é bem capaz que consiga algum desconto na compra dos exames.
Linux Essentials
LPIC-1: $165 por exame, sendo dois exames necessários (101-500 e 102-500).
LPIC-2: $165 por exame, sendo dois exames necessários (201-450 e 202-450).
É preciso ser LPIC-1 primeiro.
LPIC-3: $165 por exame, com um exame necessário dependendo da
especialização escolhida. É preciso ser LPIC-2.
RHCSA: $400.
RHCE: $400, além de ser necessário ter a certificação RHCSA.
CompTIA Linux+
Linux Essentials • Baixo custo ($100). • Não é suficiente para cargos avançados.
• Introdução básica ao Linux. • Foco limitado em conceitos básicos.
• Boa para iniciantes. • Ideal para desenvolvedores de software
que executam suas aplicações em Linux.
RHCSA • Foco prático em Red Hat. • Custo relativamente alto (aprox. $400).
• Boa entrada para carreiras com • Específico para Red Hat.
Red Hat.
• Requisito para RHCE.
RHCE • Alta especialização em Red Hat. • Custo relativamente alto (aprox. $400).
• Valorizada para cargos seniores. • Necessário ter RHCSA.
• Foco prático e em problemas do • Específico para Red Hat.
mundo real.
CompTIA Linux+ • Cobre várias distribuições Linux. • Custo relativamente alto (aprox. $369).
• Boa para administradores de • Considerada menos específica em
sistemas gerais. comparação com outras certificações
• Reconhecida em diversas avançadas.
indústrias.
Para aqueles que estão começando na área de TI, obter uma certificação Linux pode
ser um excelente ponto de partida. Ela fornece uma base sólida de conhecimento e
abre portas para posições de entrada em suporte técnico e administração de
sistemas.
Avanço na Carreira
Especialização
Tópico 2: A comunidade
Linux e a carreira Open
Source
Você vai precisar passar horas e horas todos os dias, por pelo
menos uns 10 anos. Se você fizer isso você será um dos melhores
em alguma coisa. Mas o único jeito de se conseguir fazer algo por
horas e horas é se você encontrar algo em que realmente esteja
interessado em fazer!
-- Linus Torvalds
Na época a única portabilidade do sistema Unix para PCs era o sistema operacional
educacional chamado MINIX.
O MINIX era um sistema operacional mínimo baseado em UNIX, criado pelo renomado
professor de computação Andrew S. Tanenbaum, com intuito de ensinar o
funcionamento de sistemas operacionais. O licenciamento do MINIX na época limitava
o seu uso para questões educacionais, fora outras limitações.
Desde o início, o Linux foi uma sensação entre os programadores e apaixonados por
tecnologia, sendo distribuído através dos canais de FTP, fóruns de discussão e
aprimorado por diversos entusiastas.
Isso se deve em grande parte ao licenciamento de software adotado, o GNU GPL, que
obriga a livre distribuição do código-fonte, permite o seu aperfeiçoamento, e obriga a
livre distribuição do novo código aperfeiçoado.
Distribuições Linux
Por se tratar de um sistema operacional de código aberto, o Linux pode ser alterado e
personalizado por qualquer pessoa ou empresa.
Com isso, nos anos 90 surgiram diversos grupos, amadores e empresariais com fins
comerciais, que personalizaram o Linux, criando as suas próprias distribuições.
É por isso que existem distribuições voltadas para usuário final para uso em Desktop,
como o Fedora, Ubuntu e OpenSuSE, que utilizam ferramentas amigáveis, ambiente
gráfico robusto, e as distribuições voltadas para servidores, com propósito de uso
eficiente de recursos computacionais, como o Red Hat, Fedora para Servidores, SuSe e
o CentOS.
Lançado em 1993 por Ian Murdock, o Debian é uma distribuição Linux que contou com
milhares de voluntários, que compartilharam dos ideais de Richard Stallman, quanto à
liberdade dos usuários para usar, distribuir e aprimorar o software.
Em 2004, Mark Shuttleworth e seu time, com objetivo de tornar o Linux o mais
amigável possível para os usuários Desktop, aprimorou o Debian, deixando a curva de
aprendizado para novos usuários a menor possível, e desse trabalho ele criou a
distribuição Ubuntu.
Do Red Hat nasceram outras distribuições como o Fedora, voltado para Desktops e o
CentOS para servidores. O Fedora é mantido pela Red Hat, e adota novas tecnologias
de forma bem rápida.
Outra empresa antiga de Linux é a SUSE Linux, nascida em 1992 na Alemanha, é uma
distribuição conhecida por sua seriedade e também por seu Linux comercial SUSE
Enterprise para servidores. EM 2004 a empresa criou o OpenSUSE, uma versão livre e
gratuita do Linux, aberta para desenvolvedores externos. O SUSE Linux ficou
conhecido por sua ferramenta de gerenciamento de software chamada YaST, que
facilita muito a instalação de software, muito antes do Debian e Red Hat criarem
ferramentas parecidas (apt e yum).
Sistemas Embarcados
Android
Sem dúvida, com 2,5 bilhões de dispositivos ativos em 2019, o Android é uma forma
de Linux embarcado de muito sucesso. Criada em 2003, a empresa Android Inc.
inicialmente começou a desenvolver um sistema para ser usado em câmeras digitais.
Em 2005 foi adquirida pela gigante Google e transformou-se no sistema operacional
mais utilizado em dispositivos móveis.
Raspberry Pi
Linux na Nuvem
Por melhor que seja um sistema operacional, sem um ecossistema rico em aplicativos,
estará fadado ao desprezo e esquecimento.
Pois são os aplicativos que tornam o sistema relevante e útil aos olhos dos usuários,
realizando uma variedade de tarefas, com programas de edição de texto, planilhas,
navegadores web, reprodução e edição de vídeos, leitores de e-mail, interfaces de
desenvolvimento, comunicadores, etc.
Sem dúvida, independente da aplicação escolhida, é quase certo que haverá mais de
um aplicativo disponível para a escolha do usuário. Cabe a ele escolher um que seja
adequado aos requisitos e que atenda satisfatoriamente os seus desejos.
Aplicativos de Escritório
Há várias alternativas profissionais para o Microsoft Office para Linux, tais como:
LibreOffice
OpenOffice
Calligra Suite
WPS Office
OnlyOffice
Todas elas oferecem leitura de documentos compatível com o formato aberto, bem
com o formato da Microsoft.
Navegadores Web
Chromium do Google
Firefox da Mozilla
Opera, da empresa de mesmo nome
Multimídia
Neste quesito o Linux também possui fortes concorrentes para todos os softwares
pagos:
Desenvolvimento de Software
Bluefish
Geany
Gedit
Kate
Eclipse
Brackets
Visual Studio Code
Atom
Sublime
Linguagens de Programação
C/C++
Perl
Python
PHP
Java
Javascript
Ruby
Bash
Dart
Golang
No mundo Mobile, 40,44% dos acessos à Internet em setembro de 2019 foram feitos
com dispositivos rodando Android.
Como sistema operacional, não há muita diferença entre um Linux Desktop que roda
em um Notebook e um Linux servidor que executa numa máquina em algum gabinete
em um Rack de servidores. Ambos tem o mesmo Kernel, e são capazes de executar as
mesmas aplicações.
A diferença está nas aplicações que estão instaladas no Linux, e como estas
aplicações executam no sistema.
Os servidores são especificamente feitos para executar programas que vão prover
serviços para os usuários, geralmente via rede. Estes programas geralmente são
executados como serviços do sistema, em modo texto, no Shell do Linux.
Hoje, a maioria das aplicações são feitas para funcionar em ambiente Web ou Mobile,
e o Linux atua a fornecer um Servidor Web ou provendo serviços de processamento de
dados para os dispositivos móveis.
É na utilização de programas para servidores que o Linux detém pelo menos 90% do
mercado, com programas que fornecem a infraestrutura para sites, aplicativos, base
de dados, serviços de streaming, comunicação, etc.
Servidores Web
Apache HTTP Server
NGINX
O uso de memória do Nginx é bem menor que no Apache, podendo lidar com mais de
10.000 clientes simultaneamente.
Oracle Database
O banco de dados relacional da Oracle foi um dos primeiros bancos de dados a ser
largamente utilizado por empresas, e há até uma distribuição Linux da própria Oracle
customizada para hospedar seu banco de dados.
MySQL
O MySQL foi um dos primeiros banco de dados relacionais de código livre, provendo
serviços de banco de dados de forma rápida e simples. Sua combinação com
servidores Web, como o Apache, e com a linguagem de programação PHP foi explosiva
e decisiva para a ascensão das aplicações web. Esta combinação ficou conhecida
como LAMP (Linux Apache MySQL e PHP).
Há poucos anos o MySQL foi comprado pela Oracle e uma versão comercial
aprimorada foi lançada, mas mantendo uma versão mais simples comunitária.
PostgreSQL
O PostgreSQL é outro banco de dados relacional de código aberto que sempre teve
como objetivo rivalizar com os softwares comerciais, trazendo características que
geralmente são encontradas somente em softwares comerciais de alto custo. Seu uso
nunca foi grande no mundo web, devido a sua má reputação de ser lento.
MongoDB
O MongoDB é um banco de dados não relacional, que armazena dados com o método
NoSQL. Ele não usa tabelas como os banco de dados relacionais, mas sim em
documentos com elementos independentes, no formato JSON (Javascript Object
Notation).
Servidores de E-Mail
Uma das primeiras aplicações servidoras que o Linux hospedou na Internet é o serviço
de e-mail. Ao invés de utilizar aplicações monolíticas para receber e enviar e-mails, o
Linux utiliza uma série de programas, que juntos servem para enviar e-mails entre os
servidores, receber e-mails dos clientes, enviar e-mails para os clientes e armazenar
as mensagens.
No Linux, os pacotes Chrony ou NTPD geralmente são utilizados como serviço de NTP.
É comum nas redes locais uma das máquinas atuarem como servidor de DNS para as
demais máquinas na rede, de forma que é feito um cachê local dos nomes de rede já
resolvidos, evitando assim novas consultas pela Internet.
Servidor de Arquivos
O Linux pode atuar como um confiável servidor de arquivos para usuários e máquinas
em uma rede local ou em nuvem. Há várias maneiras do Linux servir arquivos em uma
rede, através de diferentes maneiras e pacotes de software:
Web: O linux pode atuar com um servidor Web preparado para servir arquivos
via páginas de Internet;
NFS: Network FIle Systems é um sistema de compartilhamento de pastas
largamente utilizado no Linux e Unix;
SAMBA: O serviço de SAMBA é um sistema de compartilhamento de pastas e
impressoras utilizado no Linux para compartilhar volumes entre máquinas
Windows e Linux;
Servidores de Impressão
O Linux também pode atuar como servidor de Impressão, controlando uma ou mais
impressoras locais, com serviços de autenticação e controle de impressões. O pacote
mais popular no Linux para este serviço é o CUPS.
de objetos de Internet (páginas, imagens, js, css, etc) de forma que uma segunda
requisição para um mesmo site seja bem mais rápida, economizando tempo e largura
de banda do link de Internet. Existem distribuições Linux especialmente desenvolvidas
para atuar como Web Proxy e Firewall de Internet. O pacote Linux mais popular para
serviço de Web proxy é o squid.
Autenticação
O serviço de autenticação de usuários pode ser fornecido pelo Linux de diversas
maneiras diferentes.
No entanto, o Linux pode ser utilizado para autenticar usuários para uma rede local,
utilizando os servidores de SAMBA, KEBEROS e LDAP:
Keberos
SAMBA
LDAP
Monitoramento
O serviço de monitoramento no Linux serve para monitorar servidores e aplicações, de
forma que o administrador fique sabendo quando um evento importante aconteceu,
como por exemplo falha ou indisponibilidade de algum serviço. Os servidores de
monitoramento podem se conectar diretamente em um serviço, como por exemplo
um servidor web, banco de dados, etc, para testar se o serviço está funcionando, ou
através de um protocolo especial chamado SNMP (Simple Network Management
Protocol), implementado em diversos dispositivos, servidores e aplicações para
difundir na rede o status dos seus ativos. Este protocolo é implementado geralmente
em dispositivos de rede, como roteadores, switches, modems e outros equipamentos.
Logging
O serviço de Logging servido junto com os serviços de autenticação e monitoramento.
Ele fornece um jornal de log de eventos de sistema, usuários e aplicativos, guardando
informações das situações importantes, para posterior consulta e depuração de
problemas. O Linux possui um jornal de Logging nativo no Systemd, bem como
serviços de Log herdados do Unix, como o Syslog e SyslogNG. Estes servidores de LOG
podem armazenar as informações sobre os eventos da máquina Linux localmente,
bem como armazenar eventos de dispositivos remotos.
Autoridade de Certificado
O serviço de autoridade de certificado se tornou comum na Internet para autenticação
de usuários. Os certificados atuam como um método de autenticação por 2 fatores. A
autenticação por 2 fatores utiliza dois métodos diferentes para autenticar um usuário.
Geralmente envolve o usuário apresentar algo que ele tenha (como um certificado, ou
uma senha gerada por algum dispositivo ou algum cartão de combinações) e algo que
ele saiba (como uma senha pessoal). Os dois fatores fortalecem a autenticação, pois é
necessário apresentar os dois fatores.
Os certificados são emitidos por autoridades de certificado, que são empresas que
conferem a documentação de uma empresa ou pessoa, e então emitir um certificado.
O certificado então pode ser verificado através de uma cadeia de servidores, que
atestam sua autenticidade.
Clustering
O clustering é a divisão da carga de processamento em diversos servidores que atuam
como irmãos gêmeos, provendo os mesmos serviços, com as mesmas aplicações.
Dependendo da aplicação, é necessário que os servidores em cluster compartilhem
alguma informação de sessão, como autenticação de usuários, etc. Este tipo de
topologia permite que um determinado serviço seja distribuído em diversos servidores
para aumentar a sua confiabilidade e disponibilidade.
Balanceamento de Carga
O serviço de balanceamento de carga é inerente ao serviço de clustering, uma vez
que pode ser necessário que algum agente na rede atue dividindo a carga ou o
processamento entre os servidores em clustering. O tipo de software que vai fazer o
balanceamento de carga depende do tipo de aplicação. O mais comum é
balanceamento de servidores web, que pode ser feito com um proxy reverso, ou com
servidor web configurado para tal.
Conteineres
Um dos grandes problemas do desenvolvimento de software é garantir que o software
que funcionou como esperado no ambiente de desenvolvimento funcione da mesma
forma nos servidores em produção. Quem já lidou com isso sabe que mesmo uma
aplicação web simples pode enfrentar problemas com variáveis ambientais erradas,
configurações diferentes, plugins ou módulos faltando.
Existem muitos pacotes de conteineres para Linux, sendo os mais populares o Docker,
Kubernetes e o LXC.
Também a empresa americana Red Hat foi uma das pioneiras no tratamento sério do
Linux. Desde o início ela é uma das principais distribuições mundiais com grande
influência. Criadora do RPM, o gerenciador de pacotes mais usado atualmente no
Linux, a Red Hat tem uma distribuição voltada para o mercado de servidores. O
Fedora, Mandriva, SuSE, OpenSuSe, CentOS e o Oracle Linux seguem o padrão RPM.
A Debian está atenta para detalhes que nos permitem produzir programas de alta
qualidade e estabilidade. As instalações podem ser facilmente configuradas para
servir múltiplos propósitos, como firewalls com poucos pacotes, estações desktop
científicas e servidores de rede de alto desempenho.
Esta distribuição é especialmente popular entre usuários avançados por causa de sua
excelência técnica e atenção às necessidades e expectativas da comunidade Linux. A
Debian também introduziu muitas características ao sistema que agora são rotineiras
como o sistema de gerenciamento de pacotes para instalação e remoção fácil de
software e também a possibilidade de permitir a atualização do sistema sem requerer
a reinstalação.
Exemplos:
abiword-gtk_1.0.2+cvs.2002.06.05-1_i386.deb
abiword-plugins_1.0.2+cvs.2002.06.05-1_i386.deb
abook_0.4.16-1_i386.deb
abuse_2.00+-3_i386.deb
abuse-frabs_2.10-3_all.deb
abuse-lib_2.00-14_all.deb
abuse-sdl_0.6.1-1_i386.deb
acct_6.3.5-32_i386.deb
ace-of-penguins_1.2-3_i386.deb
acfax_981011-7_i386.deb
apt-get
# apt-get [opções] [comando] [nome do pacote]
-d: Baixa os arquivos, mas não instala. É útil para baixar grandes volumes de
pacotes para posterior instalação;
-s: Simula a instalação dos pacotes, mas não realiza modificações;
-y: Responde afirmativamente por todas as perguntas feitas durante o
processo de instalação/desinstalação dos pacotes.
Exemplos:
# apt-get update
# apt-get upgrade
O apt-get pode atualizar toda a sua distribuição de uma forma inteligente e segura.
Ele lê a listagem de pacotes disponíveis no servidor remoto, verifica quais estão
instalados e suas versões e atualiza os pacotes antigos.
# apt-get dist-update
Versão do Software: Cada arquivo rpm tem a sua versão que podem variar
de acordo com os pacotes. Geralmente é numérica e são separada do nome
por um traço;
Distribuição do Software: Cada arquivo também pode ter uma distribuição
ou empacotamento diferente;
Arquitetura: O pacote rpm costuma carregar o nome da arquitetura para a
qual foi montado;
Sufixo .rpm: Ele utiliza a terminação .rpm para fácil identificação.
Exemplos:
binutils-2.27-28.base.el7_5.1.x86_64
python-backports-1.0-8.el7.x86_64
libstaroffice-0.0.4-1.el7.x86_64
adcli-0.8.1-4.el7.x86_64
yum
# yum [opções] [comando] [nome do pacote]
O Yum é um acrônimo para Yellow dog Updater, Modified. É uma ferramenta utilizada
para gerenciar a instalação e remoção de pacotes em distribuições Linux, que utilizam
o sistema RPM.
Ele possui um arquivo de configuração que especifica quais os repositórios que o YUM
Nem sempre um Linux baseado em RPM terá o gerenciador de pacotes YUM instalado.
Se for necessário instalar o YUM, ele pode ser conseguido no site
http://yum.baseurl.org.
Repositórios no Yum
O YUM também permite que repositórios de software sejam customizados no arquivo
de configuração yum.conf.
Exemplo do /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
distroverpkg=centos-release
[fedora-us-3-core]
name=Fedora Core 3 — Fedora US mirror
baseurl=http://SERVERNAME/fedora/fedora/$releasever/$basear
ch/RPMS.os
[fedora-us-3-updates]
name=Fedora Core 3 Updates — Fedora US mirror
baseurl=http://SERVERNAME/fedora/fedora/$releasever/$basear
ch/RPMS.updates
$ ls -l /etc/yum.repos.d/
-rw-r--r--. 1 root root 1664 Ago 13 2018 CentOS-Base.repo
-rw-r--r--. 1 root root 630 Ago 13 2018 CentOS-Media.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever
&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$bas
earch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Veja os exemplos:
Resolving Dependencies
Install 2 Package(s)
Is this ok [y/N]: y
00:11
(2/2): postgresql-libs-9.0.4-5.fc15.x86_64.rpm | 203 kB
00:00
------------------------------------------------------------
------
Total 241 kB/s | 3.0 MB
00:12
Running Transaction
Installing : postgresql-
libs-9.0.4-5.fc15.x86_64 1/2
Installing : postgresql-9.0.4-5.fc15.x86_64
2/2
Uma opção do Yum é o "-y" que instala ou faz update de pacotes sem perguntar. Não
é muito indicado para produção.
# yum update
Plugins carregados: priorities, update-motd, upgrade-
helper
amzn-main/latest
Resolvendo dependências
---> Executando verificação da transação
---> O pacote aws-cli.noarch 0:1.7.5-1.2.amzn1 será
atualizado
---> O pacote aws-cli.noarch 0:1.7.12-1.3.amzn1 será uma
atualização
---> Resolução de dependências finalizada
Dependências resolvidas
=========================================================
======
Package Arq. Versão Repo
Tam.
=========================================================
======
Instalando:
kernel x86_64 3.14.34-27.48.amzn1 amzn-
updates 16 M
Atualizando:
59/59
Pacotes instalados
Nome : mysql
Arquitetura : noarch
Versão : 5.5
Lançamento : 1.6.amzn1
Tamanho : 0.0
Repo : installed
Do repositório : amzn-main
Sumário : MySQL meta package
URL : http://www.mysql.com
Licença : GPLv2 with exceptions
Descrição: MySQL is a multi-user, multi-threaded SQL
database server. MySQL is a
: client/server implementation consisting of a
server daemon (mysqld)
: and many different client programs and libraries.
The base package
: contains the standard MySQL client programs and
generic MySQL files.
# yum list
Pacotes instalados
GeoIP.x86_64
1.4.8-1.5.amzn1 @amzn-main
GeoIP-devel.x86_64
1.4.8-1.5.amzn1 @amzn-main
PyYAML.x86_64
3.10-3.6.amzn1 installed
acl.x86_64
2.2.49-6.9.amzn1 installed
acpid.x86_64
1.0.10-2.1.6.amzn1 installed
alsa-lib.x86_64
1.0.22-3.9.amzn1 installed
apr.x86_64
1.5.0-2.11.amzn1 @amzn-
updates
(…)
Repo : amzn-main
Resultado a partir de:
Nome de arquivo : /etc/sysconfig/nfs
# yum repolist
id do repo nome do repo status
amzn-main/latest amzn-main-Base 5.019
amzn-updates/latest amzn-updates-Base 1.085
newrelic/x86_64 New Relic packages 59
dnf
# dnf [opções] [comando] [nome do pacote]
A distribuição Linux Fedora fez o seu próprio gerenciador de pacotes baseado em Red
Hat, chamado DNF.
Ele mantém a compatibilidade da interface do Yum e define uma API rigorosa para
extensões e plugins. O fato dele possibilitar a instalação de plugins é muito bem
vinda, pois estes podem modificar ou ampliar os recursos do DNF e fornecer
comandos de interface adicionais.
Se o DNF não estiver instalado na sua distribuição baseado em Red Hat, você pode
fazê-lo usando o Yum:
Os exemplos de uso do DNF são muito parecidos com o YUM e a prova requer somente
conhecimento sobre o DNF.
No seu nascedouro o Linux era um simples shell no padrão Unix, e foi assim por muito
tempo. Era algo para feito por programadores para programadores, então ser
amigável e bonito não era um requisito importante.
Mas há 5 anos essa narrativa deu lugar a um sistema operacional bonito, com uma
variedade de ambientes gráficos e aplicativos de primeira, culminando numa
experiência Desktop completa, com tudo que um usuário inexperiente possa ter a mão
para trabalhar, se comunicar e divertir.
Sem dúvida uma das belezas do Linux é a sua pluralidade de ambientes gráficos para
KDE
O KDE é uma grande comunidade de desenvolvedores desde 1996 que desenvolvem
um ambiente gráfico multiplataforma conhecido como KDE Plasma. Seu nome deriva
de K Desktop Environment, e a letra "K" foi escolhida simplesmente porque vem
depois de "L" de Linux. O KDE e seus aplicativos são escritos com o framework Qt.
GNOME
O GNOME (acrônimo para GNU Network Object Model Environment) é um projeto de
software livre para ambiente gráfico também multiplataforma com ênfase especial a
usabilidade, acessibilidade e internacionalização.
Há ainda uma divisão do GNOME 2 conhecida como MATE, uma vez que a mudança no
ambiente do GNOME 2 para o GNOME 3 foi grande, e alguns usuários simplesmente
preferiram ficar com o ambiente mais parecido com o GNOME 2.
Criado por dois mexicanos em 1997, descontentes na época com a falta de software
livre para o Framework Qt, utilizado para desenvolvimento de aplicações para o KDE.
Desta forma, eles preferiram utilizar o GTK (Gimp Tool Kit) como framework padrão
para o desenvolvimento do GNOME, uma vez que este já era licenciado pela GPL.
O GNOME 3 mudou isso com o GNOME Shell, com um ambiente abstrato onde a
alternância entre diferentes tarefas e desktops virtuais ocorre em uma área separada
chamada “Visão Geral”.
Xfce
Xfce é um ambiente de Desktop para sistemas operacionais Unix Like, como Linux e
BSD, fundado em 1996.
O Xfce tem objetivo de ser leve, rápido e visualmente atraente. Ele incorpora a
filosofia Unix de modularidade e reutilização e consiste em partes separadas
empacotadas que, juntas, fornecem todas as funções do ambiente de trabalho, mas
podem ser selecionadas em subconjuntos para atender às necessidades e
preferências do usuário.
O Xfce pode ser instalado em diversas plataformas UNIX, tais como NetBSD, FreeBSD,
OpenBSD, Solaris, Cygwin, MacOS X, etc.
Cinnamon
O Cinnamon é um projeto de desktop gráfico derivado do GNOME 2, criado pelo
pessoal do Linux Mint. Sua experiência de usuário é muito parecida com o Windows
XP, 2000, Vista e 7, facilitando a curva de aprendizagem de usuários que tenham
migrado destes sistemas operacionais.
Linha de Comando
Popularizado por grandes empresas como a Amazon Web Services (AWS), Microsoft
Azure e Google Cloud Platform, o termo computação em nuvem serve atualmente
para designar computação distribuída, onde recursos computacionais são
compartilhados e distribuídos para completar uma determinada tarefa ou aplicação.
Apesar de ter acesso a hardware cada vez mais eficiente e poderoso, as operações
executadas nos servidores físicos tradicionais - ou bare-metal - inevitavelmente
enfrentam limites práticos significativos.
Neste sentido a computação evoluiu para fornecer servidores virtuais, que podem ser
criados ou destruídos em poucos segundos, ou mesmo ter a capacidade de aumentar
Isto fornece um diferencial ímpar para as aplicações corporativas, que devem atender
às necessidades de negócios em constante mudança.
Por exemplo, a Amazon Web Services (AWS) oferece neste modelo suas instâncias
EC2, de forma que o cliente escolhe a CPU, Memória, Armazenamento e qual sistema
operacional virá pré-instalado. Toda a manutenção do sistema operacional, bem como
as aplicações são de responsabilidade do cliente.
Neste modelo você paga pelo que utiliza, pelo tempo que utiliza. Isto permite uma
grande flexibilidade de adaptação e mudança do ambiente computacional.
Por padrão, cada instância tem um disco permanente de inicialização pequeno que
contém o sistema operacional.
Instâncias e redes
Instâncias e contêineres
Por exemplo na AWS, temos o RDS (Relational Database Service), que provê serviços
de banco de dados relacionais como MySQL, Aurora, PostgreSQL, MariaDB, Oracle
Database e SQL Server. O cliente não precisa se preocupar com o sistema operacional,
nem mesmo com a administração do banco de dados. Ele simplesmente acessa o
banco.
A Linha de Comandos
Entrar com comandos no shell é mais do que simplesmente digitá-los.
Primeiro, o comando precisa ser válido e estar nos diretórios listados na variável PATH
ou com sua localização explícita. O comando também pode requerer opções,
geralmente precedidos pelo símbolo “-” ou “--” e por argumentos. O importante é que
cada comando tem sua sintaxe única e pode haver variações dependendo da
distribuição do Linux.
$ ls
Este comando lista os arquivos no diretório corrente. Ele não requer nenhuma opção
ou argumento para ser executado. O argumento –l pode ser acrescentado para gerar
uma lista de arquivos detalhada:
$ ls –l
$ ls –l –a –t
Ou
$ ls –lta
Para ocultar um arquivo no Linux, o seu nome deve necessariamente começar com o
símbolo “.” (ponto). Ex: .bash_history
Para alguns comandos as opções têm de ser precedidas com dois traços “--” ao invés
de um traço. Ainda, alguns comandos oferecem formas alternativas de indicar uma
mesma opção. No caso do ls, as opções –a e --all produzem o mesmo efeito. O detalhe
é que opções que são chamadas com dois traços não podem ser combinadas.
$ ls –lt --all
E não:
$ ls --lalllt
Alguns comandos podem aceitar argumentos como opcional. Para outros comandos os
argumentos são necessários. Os argumentos são os parâmetros que os comandos
aceitam ou necessitam. Vejamos o comando ls:
$ ls –l *.txt
$ dd if=bootdisk.img of=/dev/fd0
Quase todos os comandos aceitam a opção –-help que mostra uma ajuda simples das
opções e argumentos aceitos pelo comando.
É importante que você tenha em mente que o Linux somente vai executar os
comandos que sejam internos do interpretador, ou comandos cuja localização esteja
na variável PATH ou comandos chamados com o seu caminho explícito.
$ ls
Ou
$ /bin/ls
No exame é muito importante que você esteja bem familiarizado com os comandos
listados neste capítulo e sua sintaxe. Portanto você precisa saber quando o comando
aceita opções com um traço, dois traços ou nenhum traço.
O Bash também permite que você entre com uma sequência de comandos em uma
mesma linha. Para isso você deve separar os comandos com o símbolo ; (ponto e
vírgula).
$ cat ~/.bash_history
O comando cat, dentre outras coisas, serve para visualizar o conteúdo dos arquivos.
Variáveis de Shell
O primeiro contato do usuário com o shell do Linux é o prompt de comandos.
[uira@server1 ~]$
Esta variável guarda o conteúdo do prompt de comandos do bash quando ele está
pronto para receber comandos.
Existe também a variável PS2 que guarda o conteúdo do prompt de comandos quando
são necessários múltiplas linhas para completar um comando.
Estas duas variáveis do shell não afetam como o interpretador irá processar os
comandos recebidos, mas podem ser de grande ajuda quando carregam informações
extras como nome do usuário, diretório corrente, etc.
O conteúdo de qualquer variável do Shell poderá ser visualizado com o comando echo
sucedido pelo símbolo $ mais o nome da variável:
$ echo $PS
\$
O caractere \ diz que qualquer outro caractere que o sucede deve ser interpretado
exatamente como ele é e não processado pelo shell. Ele é o que chamamos de
metacaractere.
Outra variável importante do Shell é o PATH. O path guarda uma lista dos diretórios
que contêm os programas que você poderá executar sem precisar passar na linha de
comandos o caminho completo de sua localização.
$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
Uma dica interessante é incluir “:.” no final da variável PATH para que o bash inclua o
diretório corrente na sua lista de busca por programas executáveis.
Isto é um problema para usuários novatos no Linux que não entendem porque ao
digitar um comando ou tentar rodar um programa que está na pasta corrente não
funciona na maioria das vezes. Simplesmente é a falta que o ":." faz no $PATH.
Uma lista completa das variáveis do shell poderá ser obtida com o comando:
$ set
Você poderá também alterar ou criar uma nova variável do shell através do comando:
$ LIVRO=”Certificação Linux”
Se o conteúdo for alfanumérico é desejável que ele esteja entre aspas simples ou
duplas.
Quando o texto de uma variável é uma sequência comum de letras e números, pouco
importa se você vai usar aspas simples ou duplas.
$ FRASE1=”Este é um teste”
$ FRASE2='de direfença entre aspas'
$ echo $FRASE1 $FRASE2
Este é um teste de diferença entre aspas
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bi
n:/home/ec2-user/bin
$ PATH="$PATH:/ora/oracle/admin/bin"
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bi
n:/home/ec2-user/bin:/ora/oracle/admin/bin
Depois de criar uma variável do shell, é preciso exportá-la para o ambiente com o
comando export.
Quando uma variável é exportada para o ambiente ela fica disponível para todos os
processos filhos do shell (todos os programas e aplicações que você executar no
bash).
Cada vez que um programa é executado pelo shell, ele somente irá receber as
variáveis criadas pelo shell se elas forem exportadas com o comando export.
Assim o processo filho (o programa que desejamos executar) vai herdar do processo
pai (o shell) as variáveis criadas.
$ LIVRO=”Certificação Linux”
$ echo $LIVRO
Certificação Linux
$ bash
$ echo $LIVRO
Uso de Coringas
Quando estamos trabalhando com arquivos e diretórios no shell é muito comum
precisarmos trabalhar com diversos arquivos de uma vez. Para tornar este tipo de
tarefa mais simples, o Linux oferece o recurso de coringa para os nomes dos arquivos
e diretórios.
Assim como no baralho de cartas, os coringas são símbolos que podem significar
muitas coisas. No Linux possibilitam que você os utilize como parte do nome dos
arquivos e diretórios. Veja a tabela abaixo:
Símbolo Descrição
Símbolo Descrição
{texto1, Substitui a parte dentro das chaves pelos texto1, depois pelo texto2, assim por
texto2...} diante. Por exemplo: “parte_{a,b,c}” vai resultar em “parte_a”, “parte_b” e
“parte_c”.
Exemplos:
$ ls *.txt
history
$ history [número]
Você pode passar como parâmetro a quantidade de linhas que você quer ele ele
mostre desde o último comando digitado:
$ history 10
564 cd ..
565 ll
566 cp cadastro.php cadastro_livro.php
567 sudo cp cadastro.php cadastro_livro.php
568 sudo vi cadastro_livro.php
569 mv geralivro.php geraflivro.php
570 sudo mv geralivro.php gerarlivro.php
571 cat grava.php
Você também pode usar o history com o grep para filtrar os comandos:
Ao saber o número da linha que você quer usar novamente, basta colocar exclamação
seguido do número da linha correspondente:
$ !144
ssh -i uribeiro.pem [email protected]
Last login: Thu Sep 12 09:51:33 2019 from 172.30.0.241
Atalho Descrição
Atalho Descrição
Ctrl rtexto Procura comandos que contenham o texto do último comando para o primeiro
Ctrl stexto Procura comandos que contenham o texto do primeiro comando para o último
echo
$ echo parâmetro
O comando echo imprime algo na tela ou na saída padrão. Ele também pode ser usado
para imprimir os valores de variáveis.
O Linux tem um conjunto de manuais que podem ser utilizados pelos usuários e
administradores para consultarem informações sobre os comandos em busca de
ajuda.
$ free --help
Usage:
free [options]
Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
--peta show output in petabytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory
statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output
--help display this help and exit
-V, --version output version information and exit
Para ter acesso a esta documentação, é preciso utilizar o comando info seguido do
nome do comando desejado. Veja um exemplo, digitando o comando no shell:
# info test
Para passar para a próxima página do conteúdo, digite “N” (Next) e, para voltar, digite
“P” (Previous). A tecla “q” sai do info.
# info
Veja um exemplo:
3Dfx-HOWTO.html
AI-Alife-HOWTO.html
Acer-Laptop-HOWTO.html
Alpha-HOWTO.html
Bash-Prog-Intro-HOWTO.html
Benchmarking-HOWTO.html
Este tipo de documentação é útil quando não se sabe como começar uma
determinada tarefa ou quais ferramentas devem ser utilizadas.
Nem sempre os how-tos podem estar instalados na distribuição, e o seu caminho pode
ser diferente.
man
$ man [sessão] comando
O comando man oferece um manual de vários comandos do GNU Linux, bem como
manual de outros programas de terceiros. O man oferece uma interface simplificada
para os programadores oferecerem um manual de seus programas.
Uma página de manual é visualizada na forma de texto único com rolagem vertical.
Também documenta parâmetros usados em alguns arquivos de configuração.
É possível que uma mesma palavra possa referenciar a uma função de programação,
comando ou arquivo de configuração. Desta maneira é importante saber em qual
sessão iremos encontrar a documentação desejada.
Para acessar o manual, o comando é o man seguido do item procurado. Como opção,
o número da sessão pode ser passada como parâmetro.
$ man passwd
$ man 5 passwd
locate
$ locate arquivo
$ locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
( ... )
find
$ find [caminho] [expressão]
O find permite uma infinidade expressões como opções de busca, tais como nome,
tamanho, data de criação de arquivo, data de acesso, por tipo de arquivo, permissões,
etc.
Exemplos:
Procura pelo arquivo texto.txt a partir do raiz (/), do tipo arquivo (f):
Procura por todos os arquivos com extensão .txt a partir do diretório corrente (.):
Procura por arquivos que não terminam com .html a partir do diretório corrente:
O find também permite executar um comando com a lista de arquivos que ele
encontrar. Neste exemplo o find copia todos os arquivos .mp3 encontrados a partir do
diretório corrente para /tmp:
Nos sistemas de arquivos de uma forma geral, os objetos são organizados de uma
forma hierárquica e cada objeto possui uma identificação única dentro de uma tabela.
seus arquivos em uma partição nomeada como drive “C:\”, e nela temos o diretório
Windows, que contém o sistema operacional; o diretório “Arquivos de Programas”, que
contém a maioria dos produtos instalados, e assim por diante. Os arquivos ficam
divididos em diretórios e subdiretórios diferentes por uma questão de afinidade e
organização. Da mesma maneira temos uma organização no Linux.
Basicamente no Linux tudo é um arquivo, que dependendo do seu tipo, pode se tornar
um arquivo comum, um diretório, um link, um socket, um condutor, um descritor de
dispositivos, etc.
Figura 12 - FHS
/
Diretório raiz do sistema de arquivos;
/bin
Contêm os comandos que podem ser utilizados pelos usuários e pelo administrador do
sistema. São requeridos no modo monousuário ou de manutenção (single-user mode)
e também podem conter comandos que são utilizados indiretamente por alguns
scripts. Nele ficam os arquivos executáveis, tais como: cat, chgrp, chmod, chown, cp,
date, dd, df, dmesg, echo, hostname, kill, ln, more, mount, mv, ps, pwd, rm, rmdir,
sed, su, umount e uname;
/boot
Arquivos estáticos necessários à carga do sistema. É onde fica localizada a imagem do
Kernel, initramfs e alguns arquivos do Grub. Este diretório contém tudo que é
necessário para carregar o sistema, exceto os arquivos de configuração e o
gerenciador de boot. O /boot inclui o setor master de carga do sistema (master boot
sectors) e arquivos de mapa de setor.
/dev
Abstração do Kernel onde ficam os arquivos para acesso dos dispositivos do sistema,
como discos, cd-roms, pendrives, portas seriais, terminais, etc. Os arquivos são
descritores que facilitam o acesso aos dispositivos. Este diretório é um pseudo-
filesystem, e não existe no disco. Seu conteúdo, por exemplo, tem descritores de
dispositivos como /dev/sda, /dev/cdrom, etc.
/etc
Arquivos necessários à configuração do sistema. São necessários para a carga do
sistema operacional. Ele possui arquivos importantes tais como: fstab, exports,
passwd, shadow, group, hosts, hosts.allow, hosts.deny, inittab, ld.so.conf, mtab,
profile, services, etc. Nele também residem os arquivos de configuração nas interfaces
de rede.
/home
Geralmente é neste diretório onde ficam os diretórios home dos usuários. Neste
diretórios localizam-se scripts de carga de perfil e do shell bash de cada usuário.
/lib
Arquivos de bibliotecas essenciais ao sistema, utilizadas pelos programas em /bin e
módulos do Kernel. É comum existir um diretório /lib[arquitetura]. Nos processadores
de 64 bits, existe o diretório /lib64. Nos processadores de 32 bits, deve existir um
diretório /lib32.
/mnt
Diretório vazio utilizado como ponto de montagem de dispositivos na máquina. Usado
pelo administrador para montar discos.
/media
Diretório vazio utilizado como ponto de montagem de dispositivos na máquina, tais
como cdrom, dvd, pendrives, etc.
/proc
Informações do Kernel e dos processos. É um pseudo-filesystem e não existe
realmente no disco. Neste diretório ficam as abstrações de descritores de tudo quanto
há no Kernel do sistema. É possível não só ler os dados, bem como fazer alterações no
comportamento do Kernel alterando o conteúdo de arquivos em /proc.
/opt
Neste diretório ficam instalados os aplicativos que não são da distribuição do Linux,
como por exemplo, banco de dados de terceiros, software de vetores Cad, etc.
/root
Diretório home do superusuário root. Dependendo da distribuição pode estar presente
ou não;
/run
Este diretório contém informações do sistema desde a última carga. Os arquivos deste
diretório são apagados ou zerados no início do processo de boot. Arquivos como
aqueles que indicam o PID do processo em execução devem residir neste diretório.
/sbin
Arquivos essenciais ao sistema, como aplicativos e utilitários para a administração da
máquina. Normalmente só o superusuário tem acesso a estes arquivos, tais como:
fdiskm fsck, ifconfig, init, mkfs, mkswap, route, reboot, swapon e swapoff.
/tmp
Diretório de arquivos temporários. Em algumas distribuições este diretório é montado
em memória. Recomenda-se que seu conteúdo seja apagado de tempos em tempos
ou a cada reboot.
/usr
Arquivos pertencentes aos usuários e a segunda maior hierarquia de diretórios no
Linux. Seu conteúdo pode ser distribuído via rede para diversos sistemas Linux da
mesma distribuição sem problema algum. Ele tem alguns subdiretórios a saber:
/var
Diretório onde são guardadas informações variáveis sobre o sistema, como arquivos
de log, arquivos de e-mail etc. Possui subdiretórios importantes, a saber:
Por exemplo, ao listar um conteúdo de uma pasta, o diretório "musicas" está presente:
$ ls
arquivo musicas
Se renomearmos o diretório musicas, iniciando com um ".", ele não irá aparecer mais
na lista de arquivos e diretórios:
$ mv musicas .musicas
$ ls
arquivo
Os arquivos e diretórios ocultos somente irão aparecer na listagem com a opção "-a"
do comando ls:
$ ls -a
. .. arquivo .musicas
Desta forma, estes dois arquivos especiais servem para se fazer referência relativa
aos arquivos e diretórios do sistema. Chama-se relativa, porque a referência depende
do ponto de partida, do diretório corrente.
$ pwd
/home/carlacruz
$ ls
bin public_html
Para listar o conteúdo de algum arquivo dentro do diretório public_html, pode-se usar
a referência relativa, à partir do diretório corrente, usando o arquivo ".":
$ cat ./public_html/arquivo
Este é um arquivo de exemplo
$ cat /home/carlacruz/public_html/arquivo
Este é um arquivo de exemplo
$ ls ../
carlacruz uiraribeiro arthur
O arquivo especial ".." pode ser usado também para navegar nos diretórios, com o
comando "cd":
$ cd ..
$ pwd
/home
$ cd ..
$ pwd
/
Observe que entre o comando "cd" e o arquivo especial ".." é necessário um espaço,
para separar o comando "cd" e o arquivo especial "..".
Diretório Home
Cada usuário no Linux possui um diretório especial único, chamado de diretório HOME.
É no seu diretório HOME que cada usuário pode criar, apagar, mover e renomear
arquivos e pastas à vontade.
Nenhum outro usuário comum do sistema pode ter acesso ao diretório home de outro
usuário. Somente o super-usuário root pode ter acesso a qualquer diretório no
sistema.
$ echo $HOME
/home/carlacruz
$ cd ~
$ pwd
/home/carlacruz
Desta forma, pode-se usar o caminho do "~" para fazer referência aos arquivos e
diretórios do diretório HOME do usuário conectado:
$ cat ~/public_html/arquivo
Este é um arquivo texto de exemplo
ls
$ ls [opções] [arquivo]
O comando ls é sem dúvida um dos mais utilizados. Ele serve basicamente para listar
arquivos e conteúdo de diretórios.
Exemplos:
$ ls -m /boot/*138*
/boot/config-4.14.138-114.102.amzn2.x86_64,
/boot/initramfs-4.14.138-114.102.amzn2.x86_64.img,
/boot/symvers-4.14.138-114.102.amzn2.x86_64.gz,
/boot/System.map-4.14.138-114.102.amzn2.x86_64,
/boot/vmlinuz-4.14.138-114.102.amzn2.x86_64
$ ls -Sl ~/
-rw-rw-r-- 1 ec2-user ec2-user 221427 dez 7 2018
mysqltuner.pl
-rw-rw-r-- 1 ec2-user ec2-user 35487 mai 21 2017
vfsync-2017-05-21.tar.gz
pwd
$ pwd [opção]
O comando pwd informa o diretório absoluto corrente. Por absoluto entende-se que
ele mostra o caminho completo desde a raiz do sistema.
O comando pwd sem opção ou com a opção "-L" , o link simbólico é indicado.
Já com a opção "-P", o pwd resolve o link simbólico apontando para o diretório original.
$ ls -l
lrwxrwxrwx 1 root root 8 set 12 13:16 programa -> software
drwxr-xr-x 7 apache users 4096 fev 1 2013 software
$ cd /home/programa
$ pwd
/home/programa
$ pwd -L
/home/programa
$ pwd -P
/home/software
Neste capítulo aborda os comandos para criar, copiar, mover, renomear e apagar
arquivos e diretórios.
touch
$ touch [opções] arquivo
Todo arquivo contém informações de metadados, como o seu nome, data de criação,
data de modificação e data de último acesso, dentre outras informações. O comando
touch serve para alterar os metadados de tempo dos arquivos, modificando a data de
último acesso ou de modificação dos arquivos.
Isto pode ser útil para marcar um arquivo sofrer backup incremental ou diferencial a
partir de uma determinada data, ou ser sincronizado num repositório, sem a
necessidade de alterar o conteúdo do arquivo, bastando alterar a sua data de
modificação.
O comando touch também é útil para criar um arquivo vazio, se o arquivo informado
não existir.
A opção -d=data é texto de data legível por humanos, na sua maioria livre, como
"Dom, 29 de fevereiro de 2004 16:21:42 -0800 "ou" 2004-02-29 16:21:42 "ou até
"próxima quinta-feira". Uma sequência de datas pode conter itens indicando data do
calendário, hora do dia, fuso horário, dia da semana, hora relativa, data relativa e
números.
No exemplo abaixo o touch é usado para criar um arquivo fazio chamado config.txt:
$ touch config.txt
$ ls -l
-rw-rw-r-- 1 ec2-user ec2-user 0 set 13 22:29
config.txt
Uma lista também pode ser usada para criar vários arquivos:
$ touch teste{1..3}.txt
$ ls -l
-rw-rw-r-- 1 ec2-user ec2-user 226 set 12 16:14 teste1.c
-rw-rw-r-- 1 ec2-user ec2-user 0 set 13 22:31
teste1.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 set 13 22:31
teste2.txt
-rw-rw-r-- 1 ec2-user ec2-user 0 set 13 22:31
teste3.txt
O touch pode ser usado para alterar a data de modificação de um arquivo, como por
exemplo teste1.c que foi alterando em 12/set:
Você também pode especificar uma data e hora específica ao invés da data e hora
correntes. Neste exemplo: 11/05/1978 às 18:40:30 :
Você também pode especificar a data e a hora como um conjunto (string) usando a
opção -d. A linha de comando a seguir mostra um exemplo que define a data para 23
de fevereiro e a hora é automaticamente definida para 00:00:
cp
$ cp [opções] origem destino
Exemplos:
$ cp arquivo1 arquivo2
$ cp arquivo1 /tmp
Copia o arquivo1 localizado no diretório /tmp para o diretório local. O símbolo “.”
(ponto) especifica o diretório como local:
$ cp /tmp/arquivo1 .
mv
$mv [opções] origem destino
O mv move ou renomeia arquivos e diretórios. Ele não altera os atributos dos arquivos
ou diretórios movidos se a transferência for o mesmo sistema de arquivos. Se o
destino para onde os arquivos ou diretórios forem movidos não existir, o comando
renomeia a origem, senão os dados são gravados por cima.
Exemplos:
$ mv arquivo1 arquivo2
$ mv arquivo1 /tmp
Você também pode usar o mv com o ".." para mover algo para o diretório superior:
$ mv arquivo1 ../
rm
$ rm [opções] arquivo
Você precisa ter a permissão de gravação no diretório onde o arquivo está localizado
para removê-lo. Utilizando as opções –R e –f o comando rm remove diretórios.
Em algumas distribuições o comando "rm -i" é utilizado como apelido do comando rm,
forçando sempre confirmar antes de remover.
As opções são:
Exemplos:
Remove o arquivo1:
$ rm arquivo1
$ rm –Rf documentos
mkdir
$ mkdir [opcões] diretório
O comando mkdir cria um ou mais diretórios. Você precisa ter permissões para escrita
no diretório para executar o mkdir.
-p: Cria o diretório especificado mesmo que o diretório pai não exista. Neste
caso, cria também o diretório pai;
-m: Configura a permissão do diretório criado. As permissões possíveis são
rxwrxwrxw (veremos mais adiante).
Exemplos:
$ mkdir documentos
$ mkdir –p documentos/cartas
rmdir
$ rmdir [opções] diretório
Exemplos:
$ rmdir favoritos
$ rmdir -p a/b/c/d
$ rmdir musicas
rmdir: falhou em remover “musicas”: Directory not empty
gzip e gunzip
$ gzip arquivo
$ gzip arquivo
$ gzip –d arquivo.gz
Ou
$ gunzip arquivo.gz
bzip2 e bunzip2
$ bzip2 arquivo
sufixo .bz2.
$ bzip2 arquivo
$ bzip2 –d arquivo.bz2
Ou
$ bunzip2 arquivo.bz2
Existem alguns casos onde o arquivo compactado pode ficar maior que o arquivo
original. Isto pode ocorrer se o algoritmo utilizado não encontrar ocorrências para
fazer a compressão dos dados e o cabeçalho do compactador é adicionado ao arquivo
original.
xz e unxz
$ xz arquivo
Ainda, temos o compressor de dados xz, que utiliza o algoritmo similar ao gzip. Ele
produz arquivos com a extensão .xz ou .lzma.
$ xz arquivo
Para descompactar:
$ xz --decompress arquivo.xz
Ou
$ unxz arquivo.xz
Para você ter uma ideia da diferença entre os três compactadores gzip, bzip2 e xz,
veja o exemplo comparativo do pacote TAR de um arquivo de backup de um site:
Arquivos tarball
As opções do comando tar não são tão opcionais assim. Ele recebe pelo menos dois
argumentos:
Primeiro deve-se escolher o que tar deve fazer através das opções:
Por ser um comando que originalmente foi feito para ler/gravar em fita, para criar um
arquivamento tar ou ler um arquivamento tar em disco, deve-se sempre usar a opção
"f".
Exemplos:
$ gzip –d arquivo.tar.gz
Ou
Se o arquivo for compactado com o bzip2, ele deve ser descompactado pelo bunzip2
ou utilizar a opção –d do bzip2.
$ bzip2 –d arquivo.tar.bz2
Ou
$ bunzip2 arquivo.tar.bz2
No caso dos arquivos compactados com xz, pode-se utilizad o comando xz:
$ xz -d linux.tar.xz
Seguido de:
OU
No ambiente gráfico, você pode descompactar e extrair um arquivo tarball sem muito
esforço, apenas clicando no arquivo. Desta forma o Linux invocará em segundo plano
o compactador de dados apropriado, juntamente com o tar para extrair o pacote de
dados no diretório corrente.
$ ls -1shS linux*
895M linux.tar
165M linux.tar.gz
126M linux.tar.bz2
105M linux-5.4.3.tar.xz
Você pode ver esses fluxos de dados no diretório /dev com o comando:
$ ls -l /dev/std*
lrwxrwxrwx 1 root root 15 ago 15 10:53 /dev/stderr ->
/proc/self/fd/2
lrwxrwxrwx 1 root root 15 ago 15 10:53 /dev/stdin ->
/proc/self/fd/0
lrwxrwxrwx 1 root root 15 ago 15 10:53 /dev/stdout ->
/proc/self/fd/1
Como você pode perceber, o arquivo /dev/stderr é um link simbólico para um arquivo
no /proc/self/fd/2. O arquivo /dev/stdin aponta para o /proc/self/fd/0 e /dev/stdout para
/proc/self/fd/1.
É por isso que o stderr é representado pelo número 2, o stdin pelo número 0 e o
stdout pelo 1.
É por causa dos descritores de arquivos que podemos redirecionar a entrada padrão
ou a saída padrão do fluxo de dados de um determinado processo para outro processo
ou um arquivo com muita facilidade.
Para redirecionar um resultado de uma saída para uma entrada de dados ou arquivo
utilizamos o sinal de maior ">".
E para direcionarmos algum arquivo como uma entrada de dados usamos o sinal de
menor "<".
O sinal duplo ">>" significa adicionar algo, geralmente ao final de um arquivo, sem
sobrescrever o seu conteúdo.
E o sinal duplo <<palavra geralmente serve para permitir que o usuário entre com
dados digitando no terminal, até que a palavra indicada seja digitada, uma vez que a
palavra funciona como um delimitador.
O sinal "&" pode ser usado para juntar as saídas como em 2>&1.
Ainda podemos redirecionar uma saída para uma entrada usando uma barra vertical
especial, o sinal em inglês chamado “pipe” "|" ou duto.
E os processos podem estar ligados aos terminais, conhecidos como tty. O termo tty
deriva da palavra Teletype.
$ ls -1 /dev/tty*
/dev/tty
/dev/tty0
/dev/tty1
( ... )
O Linux mantém os terminais, mas de forma virtual, que podem ser acessados com a
O comando "ps -a" pode mostrar quais processos estão conectados a quais terminais:
$ ps -a
PID TTY TIME CMD
2738 tty2 00:12:41 Xorg
2751 tty2 00:00:00 gnome-session-b
9274 pts/0 00:00:00 ps
O termo pts vem de Pseudo-Terminal, que nada mais é do que um terminal tty
emulado por um programa, como, por exemplo, o ssh. Então os programas em
execução através de uma conexão remota, estarão atrelados a um terminal falso
denominado pts.
Existe também o comando tty, devolve qual é o terminal que o processo do shell está
atrelado, seja ele um terminal real (tty) ou emulado (pts):
$ tty
/dev/pts/0
Por exemplo, é possível mandar uma mensagem para um usuário remoto conectado
via ssh num terminal. Para isto, basta saber qual é o terminal que ele está conectado
com o comando w:
$ w
23:40:41 up 1 day, 17:57, 2 users, load average: 0.00,
0.02, 0.02
USER TTY FROM LOGIN@ IDLE JCPU
PCPU WHAT
arthur pts/0 10.211.55.2 10:31 1:52 0.28s
0.28s -bash
uiraribe pts/1 10.211.55.2 23:36 1.00s 0.03s
0.00s w
Desta forma, pode-se mandar uma mensagem para o Arthur no pts/0, utilizando o
comando echo seguido do redirecionador ">" e o descritor de arquivos que
representa o pseudo-terminal pts/0:
Qualquer comando pode ter a sua saída redirecionada para um arquivo, ou para um
dispositivo utilizando um descritor de arquivos que o representa.
$ ls > saida.txt
Para enviar toda a saída do programa folha_pagamento para o arquivo1, inclusive com
os erros:
Se quisermos enviar toda a saída de erros para o arquivo arquivo_ erro.log, podemos
usar o descritor "2":
Tanto a saída padrão e os erros podem ser enviados de forma combinada para o
arquivo arquivo1, usando "2>&1" ou "1>&2" (não faz diferença a ordem) :
O mesmo pode ser feito para enviar os erros para a impressora, usando a abstração
que representa impressoras no /dev/lp0:
Toda vez que você quer enviar a saída padrão de um programa para a entrada padrão
de outro programa, você precisa usar um condutor, com o sinal "|" do teclado.
> fim
Desta forma, os erros que o find encontrar não serão mostrados no terminal, somente
a saída padrão.
cat
$ cat [opções] arquivo
O comando cat concatena arquivos, imprime seu conteúdo de tela e ainda pode
receber texto digitado pelo teclado para um arquivo.
Agora você pode digitar qualquer texto. Quando terminar, pressione Ctrl d em uma
linha vazia para finalizar a entrada de dados e salvar o arquivo teste.txt.
$ cat teste.txt
$ cat -n teste.c
1 #include <stdio.h>
2 int main()
3 {
4 printf("Certificação Linux!\n");
5 };
less
$ less [opções] arquivo
Imagine agora que você quer ver o conteúdo de um arquivo grande. O comando
less serve para paginar o conteúdo de um arquivo, e permite que você navegue para
frente e para trás.
Além disso, o comando less carrega o arquivo de forma paginada, desta forma ele
inicia mais rapidamente que os editores de texto como o vi.
O comando less permite que você pressione Seta para Cima e Seta para Baixo ou
PgUP/PgDown para fazer o rolamento da página. Para sair do less pressione q.
Exemplos:
$ less /var/log/messages
Nem sempre o comando less está instalado como padrão nas distribuições. Você pode
instalar o pacote usando o gerenciador de pacotes da sua distribuição.
head
$ head [opções] arquivo
Exemplo:
$ head –n 50 LEIAME.TXT
tail
$ tail [opções] arquivo
O inverso do head também é possível. O comando tail (do inglês cauda) visualiza as
últimas 10 linhas de um arquivo.
Exemplos:
$ tail –n 50 /var/log/messages
$ tail –f /var/log/messagens
sort
$ sort [opções] arquivo
$ sort emails
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
$ cat numeros
330
40
4
3
31
19
1
Ao usar o sort sem nenhum parâmetro, ele ordena primeiro usando o primeiro byte,
depois o segundo:
$ sort numeros
1
19
3
31
330
4
40
Para ordenar usando os números como caracter, você pode usar a opção -n, ou a
opção -h para ordenar em formato humano:
$ sort -n numeros
1
3
4
19
31
40
330
wc
$ wc [opções] [arquivo]
6 6 41
Nossa lista tem 6 itens (um por linha), seis palavras e 41 caracteres.
grep
$ grep [opções] expressão-regular arquivos
-c: Mostra somente a contagem das ocorrências nos arquivos e não as linhas
onde as ocorrências foram encontradas;
-h: Mostra somente as linhas encontradas, sem a indicação do nome dos
arquivos;
-i: Procura as ocorrências ignorando se as letras estão em maiúsculas ou
minúsculas;
-v: Mostra todas as linhas do arquivo procurado menos as ocorrências
encontradas. Tem o efeito inverso;
-n: Mostra, além do texto das linhas encontradas, o número das linhas dentro
dos arquivos;
-B n: Mostra n linhas antes da linha encontrada;
-A n: Mostra n linhas depois da linha encontrada.
-E Muda o padrão POSIX BRE para POSIX ERE.
-F Não interpreta nenhum meta-caractere
Exemplos:
Procura todas as linhas que iniciam com as vogais no /etc/passwd. A expressão regular
chamada lista procura qualquer um dos caracteres dentro do colchete:
Procura por todas as linhas em que o primeiro caracter seja qualquer um e o segundo
caracter seja uma vogal. O ponto final na expressão regular simboliza “um caractere
qualquer”:
Procura por linhas que contenham uma sequência de pelo menos quatro números
consecutivos:
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
alias:x:501:1000::/var/qmail:/bin/false
qmaild:x:502:1000::/var/qmail:/bin/false
$ grep security *
$ cat datas
1978-05-11 João
1976-02-23 Maria
2001-07-11 Pedro
1980-05-14 Carla
Para procurar as pessoas nascidas no dia 11 usando o grep, deve-se indicar que os
caracteres { } são metacaracteres usando a contra-barra:
O modo de operação é acessado através da tecla ESC. O vi sempre inicia nesse modo.
Para entrar no modo de inserção, basta a pressionar a tecla INSERT ou o comando “i”.
$ vi nomedoarquivo
Altere o modo para inserção com a tecla INSERT. O cursor pode ser movido neste
modo com as setas de posição. Ao terminar a digitação aperte a tecla ESC e digite:
Veja a seguir a tabela de comandos aceitos pelo vi. Todos os comandos deverão ser
dados no modo de operação. O sinal “+” indica teclas que devem ser pressionadas
simultaneamente. A vírgula indica que as teclas devem ser digitadas em sequência.
Ação Comando
Salvar Arquivo :w
Localizar novamente /
Desfazer alterações u
Ajuda :help
Nano
$ nano arquivo
Outro editor muito utilizado no Linux, principalmente para iniciantes, é o nano. Ele
lembra um pouco o bloco de notas do Windows, mas para terminal do Linux.
O nano é um editor pequeno e amigável. Ele não tem modo de comando. Tudo é
simples como editar textos no Bloco de Notas do Windows.
$ nano arquivo
Os comandos do nano são bem simples, e podem ser acionados com a tecla Control
mais a letra correspondente.
Figura 26 - Nano
É bem verdade que o Kernel do Linux tem uma capacidade excelente para trabalhar
com processos sem intervenção do usuário. Mas às vezes é preciso que o root
intervenha e termine um processo que esteja comportando de forma egoísta e
exaurindo os recursos da máquina.
O que é um processo?
Quando um programa está em execução, ele é chamado de processo.
O Linux utiliza um algoritmo para fatiar o tempo de CPU entre os processos baseado
em prioridades. A ideia é classificar os processos com base no valor e na necessidade
de tempo do processador. Os processos com prioridade mais alta serão executados
antes daqueles com prioridade mais baixa, enquanto os processos com a mesma
prioridade são agendados como round-robin (um após o outro, repetindo).
ps
$ ps [opções]
$ ps
PID TTY TIME CMD
1415 pts/0 00:00:00 ps
30019 pts/0 00:00:00 bash
$ ps a
$ ps -a
PID TTY TIME CMD
1675 pts/0 00:00:00 ps
27159 pts/0 00:00:00 sudo
27160 pts/0 00:00:00 find
$ ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START
TIME COMMAND
root 3297 0.0 0.0 121336 1600 tty1 Ss+ ago15
0:00 /sbin/agetty --noclear tty1 linux
root 3298 0.0 0.1 120984 2064 ttyS0 Ss+ ago15
0:00 /sbin/agetty --keep-baud 115200,38400,9600
ec2-user 3414 0.0 0.1 164440 4032 pts/0 R+ 18:38
0:00 ps au
root 27159 0.0 0.3 216984 6608 pts/0 T 17:46
0:00 sudo find / -iname backup.sh
root 27160 0.0 0.1 128308 3944 pts/0 T 17:46
0:00 find / -iname backup.sh
ec2-user 30019 0.0 0.2 127120 4348 pts/0 Ss 14:48
0:00 -bash
Para obter uma lista completa dos processos em execução, não só aqueles que estão
conectados ao terminal, adicione a opção "x":
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START
TIME COMMAND
root 1 0.0 0.2 199452 4968 ? Ss ago15
9:23 /usr/lib/systemd/systemd --switched-root --
root 2 0.0 0.0 0 0 ? S ago15
0:00 [kthreadd]
( ... )
ec2-user 30018 0.0 0.2 152864 4384 ? S 14:48
0:00 sshd: ec2-user@pts/0
ec2-user 30019 0.0 0.2 127120 4348 pts/0 Ss 14:48
0:00 -bash
postfix 30391 0.0 0.3 90536 6928 ? S 18:06
0:00 pickup -l -t unix -u
O Kernel coloca com frequência os processos para dormir, enquanto eles estão à
espera de algum evento, que pode ser, por exemplo, carregar dados do disco, ou uma
conexão de rede.
$ ps -efH
UID PID PPID C STIME TTY TIME CMD
root 3252 1 0 ago15 ? 00:00:00
/usr/sbin/sshd -D
root 29998 3252 0 14:48 ? 00:00:00 sshd:
ec2-user [priv]
ec2-user 30018 29998 0 14:48 ? 00:00:00 sshd:
ec2-user@pts/0
ec2-user 30019 30018 0 14:48 pts/0 00:00:00 -
bash
ec2-user 4176 30019 0 18:43 pts/0 00:00:00 ps
-efH
É possível brincar com os comandos, como, por exemplo, saber quais são os processos
que mais consomem a CPU:
Threads podem ser entendidas como pedaços do programa que executam como se
fossem processos filhos, porém mais leves, pois compartilham muita coisa com o
processo pai. Esta tecnologia é muito usada nos processadores com vários núcleos
(cores) para permitir execução de várias threads ao mesmo tempo.
% de CPU
Cada processo ganha uma fatia do tempo da CPU, que pode ser contabilizada, e serve
como parâmetro para o administrador saber quais são os processos que consomem
muita CPU.
% de Memória
Cada processo em execução também ganha uma fatia da memória RAM, que também
pode ser contabilizada para que o administrador saiba os processos que consomem
muita RAM
Terminal (TTY)
Cada processo pode ou não ter um Terminal associado.
Se olharmos o diretório /proc, ele terá um subdiretório com o número 3252, que
corresponde ao PID do programa sshd:
# cd /proc/3252
# ls
attr coredump_filter gid_map mem oom_adj
root stack timerslack_ns
autogroup cpuset io mountinfo
oom_score sched stat uid_map
auxv cwd latency mounts
oom_score_adj schedstat statm wchan
cgroup environ limits mountstats pagemap
sessionid status
clear_refs exe loginuid net
patch_state setgroups syscall
cmdline fd map_files ns
personality smaps task
comm fdinfo maps numa_maps
projid_map smaps_rollup timers
Por exemplo, a linha de comando do programa com o PID 3252 pode ser consultada
com um simples cat:
# cat cmdline
/usr/sbin/sshd-D
top
$ top [opções]
O comando top ainda pode suportar alguns comandos que alteram o seu
comportamento durante a sua execução. São eles:
Z: Muda o esquema de cores do top. Para que esta opção esteja ativa é
necessário que o terminal suporte ANSI;
F: Adiciona colunas com mais opções de monitoramento dos processos;
u: Mostra os processos de um determinado usuário;
k: Termina (kill) com um determinado processo;
Figura 13 - Top
O comando top na primeira linha fornece a média de carga da CPU (load average),
correspondente a 1 minuto, 5 minutos e a 15 minutos, igual ao comando "uptime".
Quanto maiores os números, mais sobrecarregado o sistema estará.
É comum o sistema experimentar taxas altas na média de 1 minuto. Mas uma taxa
média alta constante no indicador de 15 minutos é um sinal de que a CPU está mal
dimensionada.
Na terceira linha o top mostra a quantidade total de memória, memória livre, usada e
em buffer/cache.
free
$ free [opções]
$ free
total used free shared buff/cache
available
Mem: 2039524 189396 178424 131684 1671704
1503316
Swap: 0 0 0
$ free -h
total used free shared buff/cache available
Mem: 1,9G 153M 205M 128M 1,6G 1,5G
Swap: 0B 0B 0B
Nas versões antigas do comando free, a informação de buffer e cachê eram separadas
em duas colunas, porque o Linux dividia o buffer cachê em duas categorias. O buffer
era a memória usada pelo Kernel, e o Cachê era a memória usada pelos processos
para cachê. Resolveu-se juntar essa informação em uma só coluna.
swap.
O swap é uma área de disco que pode ser usada como espaço de troca de páginas de
memória entre a RAM e o disco, possibilitando aumentar virtualmente a memória do
sistema através das paginações entre memória e disco. É um recurso que pode ser
usado para evitar um esgotamento da memória RAM.
uptime
$ uptime [opções]
As médias de carga de CPU mostradas pelo comando uptime são calculadas com uma
média dos processos em execução ou esperando pela CPU. Essas médias não são
normalizadas pelo número de CPUs.
Se a carga de CPU for maior que 1, e se o sistema tem apenas uma CPU, significa que
o uso da CPU está além da capacidade, portanto, há uma espera grande por CPU pelos
processos.
Mas para tirar conclusões mais acertadas, vai depender do tempo em que a média de
CPU está acima de 1. Se houve um pico de uso de CPU no último minuto, mas as
médias de carga nos tempos de 5 e 15 minutos são baixas, não é um indicativo que
há necessidade de troca da CPU. Mas se as médias são altas com 5 e 15 minutos
também, significa que a capacidade de processamento pode estar mal planejada em
relação à carga do sistema.
Também é importante saber que essas médias não são normalizadas pelo número de
processadores. Um número de carga de 1 em um sistema com 4 processadores,
significa que as CPUs estão ociosas 75% do tempo. Desta forma, pode-se entender
que para sobrecarregar um sistema com 4 CPUs, a carga média precisa ser maior que
4.
$ uptime
20:35:37 up 31 days, 9:41, 1 user, load average: 0,02,
0,02, 0,00
A opção -p mostra desde quando o sistema está ligado no estilo contagem de dias:
$ uptime -p
up 4 weeks, 3 days, 9 hours, 45 minutes
E a opção -s mostra desde quanto tempo o sistema está ligado no formato de data:
$ uptime -s
2019-08-15 10:53:45
Serviços de LOG
O mais antigo deles é o syslog, pouco utilizado. O sistema legado rsyslog é comum ser
encontrado ainda nas distribuições, e o mais utilizado na maioria das atualmente é o
Systemd Journal.
rsyslog
O rsyslog foi por muitos anos o serviço padrão de gravação de Logs do sistema. Seu
trabalho consiste em coletar mensagens do Kernel, de outros serviços e de aplicativos,
e grava-los em arquivos de log, enviá-los para outro serviço remoto de rsyslog, gravar
em um banco MySql ou PostgreSQL e também exibir mensagens urgentes no terminal.
Seu arquivo de configuração /etc/rsyslog.conf controla o que ele vai gravar e onde.
O rsyslog também trabalha com módulos, que são programas no estilo "plugin" que
podem habilitar novas funcionalidades ao syslog, tais como: envio de mensagens
SNMP, uso do MySQL, uso do PostgreSQL, outras bases de dados, etc.
A seguir uma tabela com os principais arquivos de LOG e seus propósitos que podem
estar configurados no sistema de Log. Cada distribuição pode ou não fazer uso deles.
Arquivo Propósito
/var/log/messages Este arquivo contém Logs genéricos do sistema, com informações não críticas.
/var/log/secure Este arquivo contém os eventos de autenticação, como logins usando sudo e ssh
e outros serviços de segurança.
O comando lastb serve para ler o conteúdo do arquivo wtmp, fornecendo uma lista
dos usuários que se conectaram, como um livro de visitas:
# lastb
uiraribe ssh:notty 10.211.55.2 Sat Dec 28 16:01 -
16:01 (00:00)
uiraribe ssh:notty 10.211.55.2 Sat Dec 29 15:59 -
15:59 (00:00)
O exame requer que você tenha a noção da existência de outros dois sistemas de
Logs: syslog e o syslog-ng.
Journal do Systemd
O sistema que centraliza e gerencia estes logs do systemd é conhecido como journal.
Este journal é implementado pelo serviço journald que organiza todas as mensagens
de log do kernel, processos e serviços do usuário, como initrd, etc.
journalctl
O comando journalctl pode ser utilizado para ler o journal. Quando nenhum parâmetro
for informado, o journalctl mostra o log do systemd, de forma paginada (geralmente
utilizando o comando less):
$ journalctl
-- Logs begin at Mon 2019-04-22 22:15:28 -03, end at Tue
2019-10-22 02:34:11 -03. --
Apr 22 22:15:28 ubuntu kernel: Linux version 5.0.0-13-
generic (buildd@lcy01-amd64-020) (gcc version 8.3.0 (Ubuntu
8.3.0-6ubuntu1)) #14-Ubun
Apr 22 22:15:28 ubuntu kernel: Command line:
BOOT_IMAGE=/boot/vmlinuz-5.0.0-13 root=/dev/sda1
ou
$ journalctl –u nginx.service
$ journalctl /bin/bash
$ journalctl –n
$ journalctl –f
$ journalctl -p alert
x.y.z.w
192.168.1.1
A divisão de redes por classes é útil para dividir as redes de alguma forma lógica que
enquadre as necessidades das empresas e pessoas. Por exemplo, você pode dividir as
redes por departamento, por prédios físicos de uma escola, em rede administrativa e
rede de convidado, enfim, qualquer divisão que ajude a administrar melhor a rede.
Esta divisão é feita utilizando um recurso chamado máscara de rede (subnet mask):
A subnet mask funciona exatamente como uma máscara, indicando quais bits serão
utilizados para definir a parte de endereçamento de rede e quais bits são usados para
definir a parte de endereços de máquinas.
Localhost
Existem alguns endereços IP especiais que são reservados para funções específicas e
que não podem ser utilizados como endereços de uma máquina da rede. A Classe A
127.0.0.0 é utilizada como referência à própria máquina. Normalmente o endereço
127.0.0.1 é associado ao nome localhost.
Redes Privadas
Existem classes que são chamadas de IPs privados, pois são utilizadas em redes
locais. Estas classes privadas não são reconhecidas na Internet, e portanto não podem
se conectar na Internet sem o uso de um gateway ou dispositivo que faça a tradução
dos IPs privados para IPs públicos.
O padrão RFC 1918 regula quais são as redes privadas do IPv4 e o padrão RFC 4193
regula quais são os endereços privados da rede IPv6.
Para a prova é importante você reconhecer quais faixas são utilizadas em redes
privadas:
Ela garante que os dados tenham níveis de qualidade previamente negociados e que
sejam entregues ao seu destino sem erros, em sequência e em segurança.
Camada de Transporte
A camada de transporte utiliza basicamente dois protocolos para transferir
informações: o TCP e o UDP. O primeiro é orientado a conexão e o segundo é não
orientado a conexão. Ambos os protocolos podem servir a mais de uma aplicação
simultaneamente.
Um protocolo orientado a conexão significa que ele negocia uma comunicação entre
transmissor e receptor, e mantém esta conexão ativa enquanto durar a conversa. Já
um protocolo não orientado a conexão simplesmente entrega seu conteúdo do
transmissor para o receptor, mas sem estabelecer uma conexão.
Os cabeçalhos dos pacotes TCP requerem o uso de bits adicionais para assegurar
sequência correta da informação e o “checksum” obrigatório que garante a
integridade do cabeçalho e dos dados. Para garantia da entrega dos pacotes, o
protocolo requisita que o destinatário envie um pacote especial chamado de
“acknowledgement” que confirma o recebimento.
O protocolo UDP não garante a entrega dos dados, pois não faz a checagem de
recebimento. Ele possui um “checksum” opcional que está dentro do seu próprio
cabeçalho. É utilizado por aplicações que geram altos volumes de tráfego na rede,
como vídeo e som. Estas aplicações não podem incorrer em atrasos na entrega dos
pacotes, sacrificando a garantia de recepção. Um streaming de vídeo que perder
poucos pacotes UDP será imperceptível para o usuário. Mas, se na transferência de
um download faltar um arquivo, o mesmo será corrompido. Por este motivo o TCP é
utilizado para transferência de dados de forma confiável (mesmo que mais lenta que o
UDP) e o UDP é utilizado para streaming de conteúdo.
IP - Internet Protocol
dados sem conexão e trabalha com o endereçamento dos pacotes e seu roteamento.
Cada porta é referenciada como número inteiro, que a identifica e à aplicação a que
ela dá suporte. Este número é um valor de 16-bit, que vai do 1 ao 65535 em decimal.
Cada serviço de rede oferecido por um computador deve utilizar uma porta de
comunicação exclusiva.
Quando uma máquina deseja abrir uma página de um site na Internet, ela abre uma
conexão entre ela e o servidor que hospeda a página. A máquina então abre uma
conexão em uma porta local, geralmente de número acima de 1024, e amarra essa
porta local com o programa do navegador web, com a porta 80 (http/tcp) do servidor
em questão. Então haverá, no momento da transferência do site, uma conexão entre
uma porta local de uma máquina e a porta 80 de um servidor. É importante que você
tenha em mente a relação entre estas portas e os serviços oferecidos por cada uma
delas.
No servidor, o programa que serve páginas web (servidor web Apache, por exemplo),
fica “escutando” a porta 80/tcp para aceitar novas conexões dos navegadores, porque
convencionou-se que este serviço trabalhe sempre na porta 80 do lado do servidor e
utilize o protocolo TCP para transferência de dados.
É certo que o arquivo /etc/services seja idêntico entre todos os Unix e Linux, pelo
menos das portas entre 1 e 1024.
Tabelas de Rotas
Para que as redes se interliguem e formem a Internet, cada dispositivo que interliga as
diferentes redes (conhecidos como gateways ou roteadores) é dotado de uma tabela
de rotas. Essa tabela de rotas especifica qual rede é conectada em qual interface do
roteador.
Uma situação especial desta tabela é a rota padrão. Esta rota padrão diz ao roteador
qual será a interface para qual os pacotes deverão ir quando nenhuma ocorrência da
tabela de rotas satisfaz o destino do pacote. Na tabela de rotas convencionou-se o
endereço 0.0.0.0/0 como sendo da rota padrão. Na notação CIDR 0.0.0.0/0 significa
“todo o resto” ou “todas as outras redes”.
Quando uma máquina transmite um pacote para outra máquina que não pertence à
rede local, ele é entregue para o roteador da rede. O roteador consulta sua tabela de
rotas para determinar de qual rede é o pacote. Se a rede à qual o pacote pertence
não está na lista, o pacote é entregue na interface indicada na rota padrão, que muito
provavelmente é um outro roteador ao qual o link está conectado.
Desta forma o pacote vai caminhando de roteador em roteador, até chegar na rede de
destino e então é entregue ao destinatário. Cada roteador por que o pacote passa é
chamado de salto ou hops. Convencionou-se na rede IPv4 que um máximo de 32
saltos atinja 99% de alcance.
Cada vez que um pacote passa por um salto, é incrementado um contador especial no
pacote que conta quantos saltos ele já deu. Se um pacote não é entregue em até 32
saltos, ele pode ser descartado pelo próximo roteador que passar, de forma que não
fique vagando eternamente na Internet.
IPv6
O IPv6 é a versão nova do protocolo IP que vem com o propósito de trazer inúmeras
melhorias à pilha de protocolo, bem como comportar mais endereços.
O IPv6 está sendo implantado gradativamente na Internet e deve funcionar lado a lado
com o IPv4, numa situação tecnicamente chamada de “pilha dupla” por algum tempo.
A longo prazo, o IPv6 tem como objetivo substituir o IPv4.
Um endereço padrão IPv6 deve ser formado por um campo provider ID, subscribe ID,
subnet ID e node ID. Recomenda-se que o último campo tenha pelo menos 48 bits
para que possa armazenar o endereço MAC.
3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344
Se um grupo de vários dígitos seguidos for 0000, pode ser omitido. Por exemplo:
3ffe:6a88:85a3:0000:0000:0000:0000:7344
3ffe:6a88:85a3::7344
/etc/hostname
Este arquivo contém o nome do sistema. Em algumas distribuições existe o arquivo
/etc/HOSTNAME que é um link simbólico para o /etc/hostname.
$ cat /etc/hostname
linux.home.com.br
/etc/hosts
Este arquivo faz o mapeamento entre endereços IP e nomes de máquinas na rede e é
utilizado para resolução de nomes durante o processo de boot enquanto nenhum
servidor de DNS entrou em ação.
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.211.55.50 centos
/etc/resolv.conf
Este arquivo especifica o endereço IP de um ou mais servidores de DNS para resolução
de nomes.
$ cat /etc/resolv.conf
nameserver 192.168.1.1
nameserver 192.168.1.200
search certificacaolinux.com.br
Você pode especificar o endereço IP dos servidores de DNS que a máquina irá utilizar
com a palavra nameserver seguida do endereço IP.
A chave search determina que uma busca por hosts pode ser passada sem a
necessidade de se escrever o domínio inteiro.
/etc/host.conf
Este arquivo especifica a ordem de procura para a resolução de nomes. O sistema
pode procurar os endereços IPs no arquivo /etc/hosts (hosts) e pelo serviço de DNS
(bind). A opção multi on habilita mais de um IP para uma determinada máquina.
A opção order é que especifica se a máquina irá olhar primeiro no /etc/hosts e depois
do DNS.
$ cat /etc/host.conf
order hosts, bind
multi on
/etc/nsswitch.conf
O Linux mantém um serviço chamado Name Server Switch, que é utilizado pelas
bibliotecas de programação em GNU C para determinar quais são as fontes de
informação para resolução de nomes e em qual ordem.
Ele contém apelidos (passwd, group, hosts, network, etc.) que na verdade são
relacionados a funções na biblioteca de programação. Cada apelido pode estar
relacionado a uma ou mais funções de programação.
Por exemplo:
$ cat /etc/nsswitch.conf
passwd: compat
group: compat
hosts: files dns
networks: files dns
services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files
publickey: files
ip
# ip [ opções ] Objeto { comando }
Com este comando é possível inserir ou alterar entradas na tabela de rotas, adicionar
ou modificar a rota padrão e também configurar endereços de rede.
Os objetos com que o comando ip pode trabalhar são: link, addr, addrlabel, route,
rule, neigh, ntable, tunnel, tuntap, maddr, mroute, mrule, monitor, xfrm, netns,
l2tp, tcp_metrics, token e netconf.
Para o exame é necessário saber como funcionam os objetos addr (que configuram o
endereço IP), link (que habilita uma interface) e route (que modifica a tabela de
rotas).
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
Para verificar a tabela de rotas do host, você pode usar o objeto route:
# ip route
default via 172.19.1.1 dev enp0s25
172.19.0.0/20 dev enp0s25 proto kernel scope link src
172.19.1.34
ping e ping6
# ping ip
O comando ping utiliza o protocolo ICMP para enviar mensagens ECHO REQUEST e
receber ECHO RESPONSE para testar a conexão entre o sistema e outra máquina na
rede.
Ele retorna o tempo de resposta que um pacote de rede demora para ir e voltar. Muito
útil para realizar o diagnóstico de uma conexão. O ping irá testar indefinidamente até
que o Crtl-c seja pressionado.
O ping também possui uma versão para o IPv6, chamada de ping6. Seu
funcionamento é similar ao ping do IPv4.
-c num: Esta opção faz com que o ping teste a conexão um deteminado
número de vezes.
-q: Esta opção faz com que o ping somente apresente a estatística final do
teste de conexão.
Exemplo:
$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.175 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.120 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.115 ms
— 192.168.1.1 ping statistics —
5 packets transmitted, 5 received, 0% packet loss, time
4000ms
rtt min/avg/max/mdev = 0.115/0.128/0.175/0.026 ms
O ping é muito utilizado para testar se uma máquina está conectada na rede local ou
se ela é alcançável na rede remota. Para que o ping funcione corretamente, a rede em
questão não deve ter nenhum filtro de ICMP, especialmente os tipos ECHO REQUEST e
ECHO RESPONSE.
Problema de Conectividade:
ss
$ ss [opções]
Exemplos:
$ ss -s
Total: 1020
TCP: 25 (estab 2, closed 1, orphaned 0, timewait 1)
Transport Total IP IPv6
RAW 1 0 1
UDP 9 6 3
TCP 24 22 2
INET 34 28 6
FRAG 0 0 0
$ ss -lt
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:*
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 128 [::]:ssh [::]:*
Para mostrar as portas TCP e UDP abertas e os processos donos do sockets. Para
mostrar os processos, o usuário precisa ser o administrador root:
# ss -ltpu
Netid State Local Address
udp UNCONN 127.0.0.1:323
users:(("chronyd",pid=20898,fd=5))
tcp LISTEN 0.0.0.0:ssh users:(("sshd",pid=9857,fd=3))
O DNS – Domain Name System é utilizado para resolução de nomes para endereços IP
e vice-versa.
A distribuição dos servidores DNS faz-se necessária uma vez que a centralização de
uma única base de dados contendo as informações para a conversão dos nomes
simbólicos em endereços IP seria inviável.
search meudominio.com.br
nameserver 10.25.12.1
nameserver 200.216.215.5
host
$ host [ opções ] endereço
O comando host é utilizado para fazer buscar no serviço de resolução de nomes DNS.
Veja no exemplo que ele diz quais são os registros encontrados para o endereço
www.certificacaolinux.com.br:
$ host www.certificacaolinux.com.br
www.certificacaolinux.com.br is an alias for
myload-1433566614.us-east-1.elb.amazonaws.com.
myload-1433566614.us-east-1.elb.amazonaws.com has address
23.23.152.168
myload-1433566614.us-east-1.elb.amazonaws.com has address
23.21.124.198
$ host esteendereconaoexiste.com
Host esteendereconaoexiste.com not found: 3(NXDOMAIN)
Se o comando host demorar muito para responder e retornar o seguinte erro, é porque
o endereço IP do servidor de DNS especificado em /etc/resolv.conf não está acessível:
$ host google.com
route
$ route [opções] comando alvo
Tudo que o comando route faz pode ser realizado pelo comando ip.
$ route
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções
Métrica Ref Uso Iface
default ip-172-30-0-1.e 0.0.0.0 UG 0
0 0 eth0
10.8.0.0 ip-10-8-0-2.ec2 255.255.255.0 UG 0
0 0 tun0
ip-10-8-0-2.ec2 0.0.0.0 255.255.255.255 UH 0
0 0 tun0
instance-data.e 0.0.0.0 255.255.255.255 UH 0
0 0 eth0
172.30.0.0 0.0.0.0 255.255.255.0 U 0
0 0 eth0
$ ip route show
default via 172.30.0.1 dev eth0
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
169.254.169.254 dev eth0
172.30.0.0/24 dev eth0 proto kernel scope link src
172.30.0.46
netstat
$ netstat [opções]
O comando netstat faz parte do antigo pacote legado Net-Tools e exibe as conexões
de rede, tabela de rotas, estatísticas das interfaces etc. Ele foi elegantemente
substituído pelo comando "ss".
Exemplos:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:*
LISTEN 981/mysqld
tcp 0 0 0.0.0.0:8080 0.0.0.0:*
LISTEN 24929/mini-apache:
tcp 0 0 0.0.0.0:8888 0.0.0.0:*
LISTEN 2160/httpd
tcp 0 0 0.0.0.0:3128 0.0.0.0:*
LISTEN 1994/(squid)
tcp 0 0 127.0.0.1:953 0.0.0.0:*
LISTEN 935/named
Neste exemplo o comando netstat lista todas as conexões abertas e processos que
estão à escuta de conexões e à qual processo eles pertencem. A opção "-p" somente
mostra os programas "donos" das conexões para o root.
$ netstat -i
Tabela de Interfaces do Kernel
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR
TX-DRP TX-OVR Flg
eth0 9001 34849988 0 0 0 30552900 0
0 0 BMRU
lo 65536 4407543 0 0 0 4407543 0
0 0 LRU
A opção "-r" mostra a tabela de rotas, bem parecido com o comando route:
$ netstat -rn
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções MSS
Janela irtt Iface
0.0.0.0 172.30.0.1 0.0.0.0 UG 0
0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0
0 0 tun0
10.8.0.2 0.0.0.0 255.255.255.255 UH 0
0 0 tun0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0
0 0 eth0
172.30.0.0 0.0.0.0 255.255.255.0 U 0
0 0 eth0
O netstat também provê estatísticas das interfaces de rede com a opção "-s":
$ netstat -s
Ip:
8871 total packets received
0 forwarded
0 incoming packets discarded
7997 incoming packets delivered
5023 requests sent out
( ... )
Tópico 6: Segurança e
Permissões de Arquivos
/etc/passwd
Neste arquivo são gravados os dados como login do usuário, senha, identificador,
grupo a que ele pertence, nome do usuário, diretório home e shell.
O formato do passwd é:
Login:senha:UID:GID:comentário:home:shell
Cada elemento que constitui o conteúdo do arquivo /etc/passwd é separado por dois-
pontos, na seguinte sequência:
Login: O login é a identificação que o usuário vai utilizar no sistema. Este deve ser
único, sem espaços e geralmente uma abreviação do nome. Algumas aplicações
necessitam ter um usuário próprio que definirá as permissões de segurança;
ID do usuário (User ID – UID): Este ID é numérico único para cada conta de usuário.
Por definição o ID zero (0) é designado para o usuário root, que habilita os seus
poderes como administrador do sistema. Por convenção os IDs de 1 a 99 são utilizados
para uso administrativo e contas de usuário utilizadas por serviços do sistema;
Diretório Home: O diretório home é diretório padrão para a conta de usuário. É neste
diretório que o dono da conta tem privilégios especiais. Neste campo do arquivo
passwd deverá ser colocado o caminho completo do diretório home;
Shell: Neste campo é designado o executável do shell que cada usuário utiliza. O
padrão é o Bourne Again Shell /bin/bash. Outros executáveis podem ser utilizados,
como o /bin/sh, /bin/tcsh ou qualquer outro programa que será executado logo após o
processo de logon do usuário. Existem arquivos especiais como o /bin/false. Este
programa simplesmente não faz nada, proibindo o usuário da conta logar no sistema
interativamente. Outra possibilidade é o arquivo /sbin/nologin. Este programa também
não permite que o usuário entre no sistema de forma interativa, mas exibe uma
mensagem que pode ser configurada no arquivo /etc/nologin.txt
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
openvpn:x:219:497:OpenVPN:/etc/openvpn:/sbin/nologin
zabbix:x:500:501::/home/zabbix:/bin/bash
uira:x:501:501::/home/uira:/bin/bash
/etc/shadow
Antigamente o Linux mantinha as senhas criptografadas no segundo campo do
arquivo /etc/passwd. Como vários programas precisam de acesso às contas do
sistema, as senhas foram movidas para o arquivo /etc/shadow, que não tem
permissão de leitura para ninguém.
Além disso, se todos tem acesso ao arquivo com as senhas criptografadas, um ataque
do tipo força bruta pode ser feito, gerando combinações de palavras, números e
símbolos que são criptografados e comparados com as senhas criptografadas, até que
uma comparação seja positiva. Por isso, o fato de apenas o root ter acesso ao
/etc/shadow dificulta este ataque.
$ ls -l passwd shadow
-rw-r--r-- 1 root root 1573 out 15 02:12 passwd
---------- 1 root root 760 out 15 02:12 shadow
As senhas no Linux são criptografadas de uma forma que não é possível recuperação
usando a engenharia reversa.
/etc/group
Para facilitar a administração das permissões de acesso aos recursos e arquivos do
sistema, o Linux faz uso do conceito de grupos de trabalho. Cada usuário faz parte de
pelo menos um grupo de trabalho, definido no /etc/passwd através do campo Group
ID.
nomedogrupo:senha:GID:listademembros
Cada coluna separada por dois pontos do arquivo tem o significado a seguir:
Senha do Grupo: Assim como as contas de usuário, os grupos podem também fazer
uso de senha para que um usuário possa ingressar nele. As senhas de grupo foram
criptografadas e movidas para o arquivo /etc/gshadow. Este campo atualmente
contém um "x";
Algumas distribuições como o Redhat criam um grupo de usuário para cada usuário
criado no sistema. Outras distribuições como o SuSE utilizam o grupo users (GID 100)
para todos os usuários.
root:x:0:root
daemon:x:10:wwwrun,sendmail,squid
users:x:500:uira,carla
passwd
# passwd [opção] login
O comando passwd entra com a senha para uma determinada conta de usuário. Se a
conta de usuário não for fornecida como parâmetro o passwd muda a senha da conta
utilizada no momento. Por questões de segurança não é possível passar a senha na
linha de comando.
Somente o root pode alterar a senha de outros usuários. Um usuário comum pode
executar o passwd para alterar a sua própria senha.
# passwd uira
Enter new password for ‘uira’:
last
O utilitário last, fornece as últimas conexões efetuadas no sistema e por qual usuário:
$ last
ec2-user pts/0 ip-10-8-0-6.ec2. Tue Apr 14 10:21
still logged in
ec2-user pts/0 ip-10-8-0-6.ec2. Mon Apr 13 23:26 -
00:10 (00:43)
ec2-user pts/5 ip-10-8-0-6.ec2. Sun Apr 12 15:52 -
01:50 (09:57)
ec2-user pts/0 ip-10-8-0-6.ec2. Sun Apr 12 15:51 -
01:50 (09:59)
id
Exemplo:
$ id
uid=1000(uiraribeiro) gid=1000(uiraribeiro)
groups=1000(uiraribeiro),4(adm),24(cdrom),27(sudo),30(dip),4
6(plugdev),119(lpadmin),130(lxd),131(sambashare)
Observe que o usuário que está logado no Linux é o uiraribeiro, com User ID iqual a
1000. O comando também mostra todos os grupos que o usuário faz parte.
$ id -un
uiraribeiro
uiraribeiro@ubuntu:~$ id -u
1000
$ id arthur
uid=1001(arthur) gid=1001(arthur) groups=1001(arthur)
Este comando geralmente é útil para ser utilizado em scripts, onde se deseja pegar o
login ou User Id do usuário.
whoami
Este comando mostra qual é o login do usuário corrente. É o mesmo que o comando
"id -un".
$ whoami
uiraribeiro
$ id -un
uiraribeiro
who
$ who
O utilitário who pode ser utilizado para mostrar quais são os usuários logados no
sistema:
$ who
ec2-user pts/0 2015-04-14 10:21
(ip-10-8-0-6.ec2.internal)
w
$w
O utilitário w também fornece uma lista de quais usuários estão conectados, mas com
outros detalhes:
$ w
12:10:53 up 218 days, 22:52, 1 user, load average: 0,00,
0,01, 0,05
USER TTY FROM LOGIN@ IDLE JCPU
PCPU WHAT
ec2-user pts/0 ip-10-8-0-6.ec2. 10:21 5.00s 0.45s
0.00s w
O Linux permite que você execute algum programa com a permissão de outro usuário
através do utilitário sudo ou assuma outra conta de usuário como se estivesse logado
com ela com o comando su.
sudo
$ sudo [opções] comando
Caso o usuário que executou o sudo seja um usuário comum, ele deverá saber a
senha do usuário que deseja executar o comando.
Caso o usuário que executou o sudo seja o root, o sudo não irá perguntar a senha de
Exemplo:
Neste exemplo, o usuário root está mandando um e-mail como se fosse o usuário
“uira”.
Observe que, se outro usuário tentar fazer o sudo executar um programa com as
permissões de outro usuário, o sudo irá solicitar a senha do usuário:
Neste exemplo, o usuário “uira” está tentando enviar um e-mail como se fosse o
usuário “carla”.
O sudo é útil quando você deseja que algum processo execute com um usuário
específico, de forma que as permissões de arquivos estejam corretas para o perfeito
funcionamento.
su
$ su [opções] [-] [usuário]
Exemplo:
uira@linux-7rxb:~> su -
Password:
Neste exemplo, o usuário “uira” solicita que o Shell seja executado como o usuário
“root”. Desta forma, o usuário “uira” irá ganhar todas as permissões da conta de
superusuário no sistema.
O sinal “-“ faz com que os scripts de carga do shell da conta “root” sejam lidos, como
se o próprio “root” logasse no sistema.
Você também pode especificar um usuário para executar o shell como se fosse ele:
# su uira -
Neste exemplo, o usuário root irá executar o shell como se fosse o usuário “uira”.
$ su root -
Por este motivo, é comum quando um usuário quer ganhar privilégios do root, utiliza-
se o comando:
$ sudo su -
Desta forma, se o seu usuário estiver no grupo que tem permissões para executar o
sudo no arquivo /etc/sudoers, você só precisa autenticar novamente com a sua própria
senha, e não a senha do usuário root. Essa autenticação é só para confirmar que você
é você mesmo. Dependendo da configuração, nem mesmo essa autenticação é
necessária.
Criar, modificar ou apagar usuários no Linux é tão fácil quanto editar manualmente o
arquivo /etc/passwd.
Porém, existem ferramentas que facilitam esse trabalho, como o useradd, groupadd e
passwd.
useradd
# useradd [opções] login
$ cat /etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
Se alguma opção for utilizada ao se criar uma conta de usuário com o useradd, ela
será utilizada ao invés da variável correspondente no /etc/default/useradd. As
informações deste arquivo somente serão totalmente ignoradas se todas as opções
correspondentes forem utilizadas ao criar o usuário.
A senha da conta deverá ser configurada depois de criada a conta o com o comando
passwd.
Exemplos:
No exemplo o useradd cria o usuário uira com o diretório home /home/uira com a
estrutura definida em /etc/skel, com o nome “Uirá Ribeiro” nos comentários, com o
shell /bin/bash e o grupo GID 100.
Um usuário pode ser criado simplesmente com o comando abaixo, informando apenas
# useradd arthur
Uma vez criada a conta de usuário, os dados podem ser alterados manualmente,
editando o arquivo /etc/passwd, ou utilizando o comando usermod.
O diretório /etc/skel funciona como um diretório "home" modelo. Quando uma conta
de usuário é criada com o comando useradd, o conteúdo do diretório /etc/skel é
copiado para o diretório HOME do usuário recém criado. Funciona como uma cópia do
"profile" no Windows.
Geralmente neste diretório são colocados os scripts de login do bash que podem ser
customizados, assim como subdiretórios e outros arquivos que se deseja que façam
parte do diretório HOME dos usuários quando eles forem criados no sistema.
$ ls -lga /etc/skel/
-rw-r--r-- 1 root 18 jul 27 2018 .bash_logout
-rw-r--r-- 1 root 193 jul 27 2018 .bash_profile
-rw-r--r-- 1 root 231 jul 27 2018 .bashrc
userdel
# userdel [opção] login
A opção disponível é:
Exemplo:
# userdel –r arthur
groupadd
# groupadd nome_do_grupo
-f: Força a saída do comando como sucesso mesmo que o nome do grupo ou
groupid já existam;
-g N: Atribui o número N ao Group ID;
-p SENHA: atribui uma senha à um grupo, de forma que um usuário deve saber
a senha para ingressar em um grupo
Exemplos:
# groupadd contabilidade
groupdel
# groupdel nome_do_grupo
Deve-se manualmente checar os sistemas de arquivos para garantir que nenhum dos
arquivos permanece com o grupo ou com a sua identificação.
# groupdel contabilidade
Estes recursos podem ser desde um simples arquivo até uma impressora ou um
gravador de CD-ROM.
Cada arquivo no Linux tem definido o seu controle de acesso. Este controle é definido
por três classes:
E para cada classe podemos definir três tipos de acesso: leitura (r), escrita (w) e
execução (x). Quando não há o acesso para aquele determinado tipo, o sistema
sinaliza com um traço "-".
As três últimas permissões representa os outros (que nã o é o usuá rio dono do recurso
e nã o pertence ao grupo).
Como no Linux tudo é um arquivo, isto facilita muito trabalhar com as permissões, já
que o esquema é o mesmo para tudo. Não importa se você está falando de um
arquivo, diretório, ou recurso de hardware.
Figura 16 - ls
A primeira letra que aparece na esquerda do "ls -l" indica o tipo de arquivo. Quando
não há letra, mas um traço, o arquivo é comum.
Diretório Permite listar o Permite criar, mover, Permite ler e gravar arquivos no
conteúdo do renomear e apagar diretório, bem como mudar o
diretório. arquivos no diretório. diretório corrente para o diretório
com "cd".
As permissões são gravadas em forma binária, com 12 bits para cada arquivo no
sistema, conforme a figura a seguir:
Os três primeiros bits da esquerda para a direita são bits de atributos especiais, a
saber:
SUID (Set User ID): O bit de SUID afeta somente os arquivos executáveis.
Normalmente os programas são executados com a permissão do usuário que os
executou. O SUID muda esta condição, fazendo com que o programa seja executado
sob as permissões do usuário Dono do arquivo, não importando quem o chamou. O
SUID geralmente é utilizado para dar a um programa permissões de root. É preciso
que o administrador tenha muito cuidado ao utilizar o SUID, pois um programa mal-
intencionado pode ter acesso elevado ao sistema;
SGID (Set Group ID): O bit de SGID funciona como o bit SUID. Ele faz com que os
Nas implementações recentes no Linux e Unix este bit já não é mais usado para “colar
na memória”, mas para evitar que arquivos que o tenham habilitado de serem
apagados por usuários que não sejam seu dono. Se habilitado em um diretório este bit
confere que seu conteúdo possa somente ser apagado pelos respectivos donos dos
arquivos nele contidos, o próprio dono do diretório ou o root.
Esta representação pode ser utilizada para cada classe (Dono, Grupo e Outros), bem
como para os bits especiais (SUID, SGID, Sticky).
Exemplo:
As permissões do arquivo Script.sh podem ser representadas pelos octetos 750, sendo
Como os bits de permissão especiais são utilizados com pouca frequência, e sob
condições especiais, eles são representados pela letra (s) no lugar do (x) de execução
para os bits SUID e SGID nas classes de Dono do arquivo e Grupo, e (t) no lugar do (x)
para o bit sticky na classe de Outros.
Veja o Exemplo:
O arquivo Firewall tem permissão de leitura, escrita e execução para o usuário root,
leitura e execução para usuários do grupo users e nenhuma permissão como Outros.
E ainda possui o bit de SUID habilitado (o "s" no lugar de "x" para o Dono do arquivo).
Se você decompor cada número, vai encontrar as permissões de cada classe. Veja a
figura a seguir:
Modificando as Permissões de
Arquivos
chmod
$ chmod [opções] { letras, octal } arquivo
Para utilizar letras para configurar as permissões, veja a Tabela Letras para
Representar as Classes:
Letra Descrição
g Grupo
o Outros
a Todos
Símbolo Descrição
E por fim, as permissões podem ser representadas pelas letras que você já conhece
(rwx), adicionando o X, s e t:
Permissão Descrição
r Leitura (Read)
w Gravação (Write)
x Execução (eXecute)
X Configura o bit de execução para outras classes para arquivos que já possuem o bit
(x)
s SUID ou SGID
t Sticky
Muda as permissões do arquivo Leiame.txt para rwx (7) para o Usuário, r-x (5) para o
Grupo e r-x (5) para Outros.
$ chmod +x Backup.sh
Dessa forma o grupo a que pertence este arquivo passa a ter permissão de gravação
no mesmo.
É possível mudar mais de uma permissão ao mesmo tempo, bastando indicar as letras
das permissões (rw):
Também é possível mudar permissões de uma só vez para diversas classes. Neste
exemplo as permissões de escrita e execução são retiradas de todas as classes:
Fique atento as permissões que usam os operadores de adição (+) e subtração (-),
pois eles adicionam ou subtraem permissões, alterando as permissões que já existem
Aos usuários comuns, o chmod somente permite que o dono do arquivo ou diretório
altere as suas permissões. Já o root pode alterar as permissões de qualquer arquivo ou
diretório.
Deve-se ter muito cuidado ao alterar as permissões dos arquivos e diretórios, pois
permissões mal configuradas é um prato cheio para malwares e invasores.
Os comandos chown e chgrp alteram o dono dos arquivos e diretórios assim como o
grupo ao qual o arquivo pertence.
chown
$ chown [opções] usuário.grupo arquivo
O comando chown altera o dono do arquivo e pode também alterar o grupo a que este
arquivo pertence.
Login
Se somente for informado o login do usuário, a propriedade do Dono do arquivo
muda, mas a propriedade do grupo permanece inalterada.
Login:grupo
Se for informado um "login:grupo" ou "login.grupo", tanto a propriedade do dono
do arquivo quanto o grupo são alterados.
Login:
Se for informado um "login:" ou "login." sem informar o grupo, o dono do
arquivo é alterado, e o grupo é alterado para o grupo em que o login indicado faz
parte.
:grupo
Se for informado ":grupo" ou ".grupo" sem informar o login, o chown vai agir
como o comando chgrp, alterando somente o grupo do arquivo.
Exemplos:
Altera o dono do arquivo Leiame.txt para o usuário uira e o grupo do arquivo para o
grupo do usuário:
Altera o dono do arquivo Leiame.txt para o usuário uira e o grupo para users:
chgrp
$ chgrp [opções] grupo arquivo
Exemplo:
Arquivos temporários
Como todo sistema operacional, o Linux também mantém um diretório específico para
os arquivos temporários. O propósito deste diretório é manter arquivos que vão existir
por um curto período de tempo, geralmente para armazenar dados durante o
processamento de alguma tarefa, cachê de aplicações, conversão de um formato para
outro, etc.
/tmp
Este diretório pode ser usado por qualquer usuário ou programa. Geralmente, todo seu
conteúdo é apagado na reinicialização do sistema. Observe que as permissões do /tmp
permitem leitura, escrita e gravação para qualquer usuário ou programa:
Para que isso não aconteça, o diretório /tmp ganha o Sticky bit "t", que faz com que os
arquivos e diretórios contidos nele somente possam ser apagados ou modificados pelo
usuário dono do arquivo ou diretório. Assim, todo o mundo pode gravar à vontade,
mas só no que é seu.
/var/tmp
O Linux mantém o diretório "/var/tmp" para arquivos temporários, também com o bit
"t", mas os arquivos gravados nele não são apagados quando o computador é
reiniciado.
/run
Os links são arquivos especiais que funcionam como um atalho para outros arquivos e
diretórios. São especialmente úteis quando você deseja espelhar o conteúdo de um
arquivo ou diretório em outro ponto do seu sistema de arquivos.
Links Simbólicos
É um arquivo especial que contém um ponteiro que aponta para outro arquivo. Eles
consomem pouco espaço em disco e possuem a versatilidade de poderem apontar
para arquivos de outro sistema de arquivos, até mesmo quando mapeado de outro
computador em rede.
O link simbólico não tem permissões de acesso próprio, mas assume as permissões do
arquivo original.
Podemos fazer uma analogia com o “atalho” do Windows. Os links simbólicos ocupam
espaço em disco, mesmo que pouco.
Os links físicos somente podem ser criados para arquivos e em um mesmo sistema de
arquivos, já que eles apontam para o mesmo inode do arquivo original.
ln
$ ln [opções] arquivo link
Os links simbólicos podem ser criados entre arquivos, ou entre diretórios, mesmo em
discos e sistemas de arquivos diferentes.
Já os links físicos somente podem ser criados entre arquivos de um mesmo sistema de
arquivos em um mesmo volume físico (disco).
Exemplos:
$ ls -l
-rw-rw-r--. 1 uira uira 177 Set 18 15:09 quintana
Vamos criar o link físico entre arquivo quintana com o nome poema:
$ ln quintana poema
Se observarmos com o ls -l, veremos que o contador de links físicos destes arquivos
passou de 1 para 2.
$ ls -l
-rw-rw-r--. 2 uira uira 177 Set 18 15:09 poema
-rw-rw-r--. 2 uira uira 177 Set 18 15:09 quintana
Desta forma, é como se o mesmo conjunto de bytes no disco tivessem dois nomes, um
chamado poema e outro chamado quintana. O conteúdo dos dois é o mesmo, e se
alteramos o conteúdo de um, do outro também será alterado, já que o conjunto de
bytes do arquivo é o mesmo.
$ rm quintana
$ ls -l
-rw-rw-r--. 1 uira uira 177 Set 18 15:09 poema
$ ln -s poema poesia
$ ls -l
-rw-rw-r--. 1 uira uira 177 Set 18 15:09 poema
lrwxrwxrwx. 1 uira uira 5 Set 18 15:20 poesia -> poema
Veja que o link simbólico cria um apontador para o arquivo original. Ele terá sempre as
permissões "lrwxrwxrwx", e seu tamanho será sempre pequeno (5 bytes).
A seta " -> " e o tipo de arquivo "l" indicam que o arquivo se trata de um link
simbólico.
Você pode editar e alterar o link simbólico como se estivesse alterando o próprio
arquivo, sem problema algum.
$ rm poema
$ ls -l
lrwxrwxrwx. 1 uira uira 5 Set 18 15:20 poesia -> poema
Os links simbólicos ajudam muito a administração do sistema, uma vez que permitem
que "atalhos" para os arquivos sejam criados sem a necessidade direta de se fazer
cópias.
O uso de um link físico permite que vários nomes de arquivos sejam associados ao
mesmo arquivo, uma vez que um link físico aponta para o inode de um determinado
arquivo. É como fazer uma cópia, mas sem de fato duplicar o espaço em disco.
Livro Desenvolvedores
Se você não falha em pelo menos 90% das vezes, seus objetivos não
foram ambiciosos o suficente
-- Alan Kay
Índice Remissívo
2 C
2.1 A evolução do Linux e sistemas cat 97
operacionais populares 14 chgrp 167
2.2 Principais Aplicações Open Source 18 chmod 163
2.3 Ambiente Gráfico 38 chown 166
Configurar o Cliente DNS 136
3 cp 79
3.1 As bases da linha de comando 52
3.2 Como obter ajuda na linha de D
comando 62 Detalhes sobre os Arquivos e Diretórios
3.3 Como usar diretórios e listar arquivos 72
67 Diretório Padrão (skel) 156
3.4 Criar, mover e remover arquivos 77 dnf 37
4 E
4.1 Como comprimir arquivos com a linha echo 61
de comando 86 Editor de Textos vi/vim 104
4.2 Como buscar e extrair dados de Executando Programas com a Permissão
arquivos 92 de Outro Usuário 152
5 F
5.1 Processos no Linux 110 find 66
5.2 Rede no Linux 124 free 118
6 G
6.1 Segurança básica e identificação de Gerenciamento de Arquivos Red Hat e
tipos de usuário 146 YUM 30
6.2 Criando usuários e grupos 154 Gerenciamento de Pacotes Debian 26
6.3 Gerenciando Permissões de Arquivo e grep 102
Propriedade 158 groupadd 157
6.4 Diretórios e Arquivos Especiais 168 groupdel 157
gzip e gunzip 87
A
Alterando o Dono dos Arquivos e Grupos H
166 head 98
apt-get 28 history 59
Arquivos tarball 89 host 139
B I
bzip2 e bunzip2 87 Identificando Qual Usuário Está
Conectado ou Última Conexão 150
ip 132
R
J rm 81
rmdir 82
Journal do Systemd 122
route 140
L S
less 98
Serviços de LOG 121
Links Simbólicos e Hard Links 169
sort 99
ln 170
ss 134
locate 65
su 153
ls 75
sudo 152
M T
man 64 tail 99
mkdir 82 top 117
Modificando as Permissões de Arquivos touch 77
163
mv 80 U
uptime 120
N useradd 154
Nano 105 userdel 156
netstat 141
W
O w 152
Outros Livros do Autor 171 wc 101
who 151
P
passwd 149 X
ping e ping6 133 xz e unxz 88
ps 111
pwd 76 Y
yum 31