Escolar Documentos
Profissional Documentos
Cultura Documentos
Certificacao Linux Essentials PDF
Certificacao Linux Essentials PDF
Essentials
Copyright © 2019 by Uirá Ribeiro
Uirá Ribeiro
ISBN 978-65-990965-1-8
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 uribeiro@gmail.com
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é.
Se buscar, vai descobrir também que Uirá une duas paixões em suas atividades: TI e
educação. A aventura que começou como diretor de TI de nove campi o levou a
assumir a Direção geral da Universidade Salgado de Oliveira em Belo Horizonte.
A Força permite que ele durma pouco, de forma que ainda consegue tempo para
alimentar o hábito de cozinhar e viver inventando soluções – a última foi uma câmera
de segurança criada com um computador de 8 dólares rodando Linux!
E assim, entre invenções, linguagens e delícias, o prof. Uirá divide com você o
conhecimento para o treinamento em Certificação Linux Essentials nessas páginas.
Prefácio
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).
Como a prova da LPI é neutra, ela segue naturalmente o padrão Linux Standard Base,
que é o indicado para as distribuições seguirem. Este livro usa as convenções
adotadas pela LPI e a Linux Stardard Base.
Para os amantes do Ubuntu, lamento dizer, mas o ele é muito bom em não seguir a
risca o Linux Standard e trocar as coisas de lugar.
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.
Certificação Linux Essentials
Sumário
ix
Prof. Uirá Ribeiro
x
Certificação Linux Essentials
xi
Prof. Uirá Ribeiro
mkdir ............................................................................................................................... 88
rmdir ................................................................................................................................ 89
.......................................................................................................................................... 91
Tópico 3: O Poder da Linha de Comando ................................................................... 92
3.1 Como comprimir arquivos com a linha de comando ......................................... 93
gzip e gunzip .................................................................................................................. 93
bzip2 e bunzip2 ............................................................................................................. 93
xz e unxz ......................................................................................................................... 94
Arquivos tarball ............................................................................................................. 95
3.2 Como buscar e extrair dados de arquivos .......................................................... 98
cat .................................................................................................................................. 103
less ................................................................................................................................ 104
head ............................................................................................................................... 105
tail .................................................................................................................................. 105
sort ................................................................................................................................ 105
cut .................................................................................................................................. 107
wc ................................................................................................................................... 108
grep ............................................................................................................................... 109
3.3 Como transformar comandos em script ............................................................ 111
Escolhendo o Interpretador de Script #! shebang ................................................ 111
Permissões de Execução ............................................................................................ 113
Variáveis Especiais ..................................................................................................... 114
O Comando test ........................................................................................................... 116
Uso de [ ] no lugar do "test" ............................................................................ 117
Operadores || e && ........................................................................................... 118
if ..................................................................................................................................... 119
for .................................................................................................................................. 119
Editor de Textos vi/vim .............................................................................................. 121
........................................................................................................................................ 123
Tópico 4: O Sistema Operacional Linux ................................................................... 124
4.1 Escolhendo um Sistema Operacional ................................................................ 125
Como Escolher um Sistema Operacional .......................................................... 125
Microsoft Windows ............................................................................................ 125
MacOS ............................................................................................................... 126
Linux ................................................................................................................. 126
Ciclo de Vida .................................................................................................... 127
4.2 Noções básicas sobre o hardware do computador ......................................... 127
Fontes de Energia ............................................................................................. 127
Placas Mãe ........................................................................................................ 128
CPU ou Processadores ...................................................................................... 128
Gerência de Dispositivos .................................................................................. 128
Armazenamento ............................................................................................... 129
Informações de Hardware no Linux .................................................................. 130
xii
Certificação Linux Essentials
xiii
Prof. Uirá Ribeiro
xiv
Certificação Linux Essentials
Sempre existiu e vai existir uma lacuna no mercado de TI: os profissionais que saem
das faculdades nem sempre estão preparados para aquilo que o mercado quer e
precisa. Ainda mais no mercado de TI, onde a velocidade é muito grande e as
tecnologias mudam e se aprimoram a cada 6 meses.
Desta maneira, a indústria de TI, formada por grandes empresas, como IBM, HP, SuSe,
Microsoft, Cisco, Intel, RedHat, Apple, dentre outras, se reuniram através de
associações ou programas próprios de certificações para preencher essa lacuna no
mercado de profissionais capazes de trabalhar com eficácia nas suas plataformas,
equipamentos e tecnologias.
Se você está lendo esse livro, com certeza quer ter uma certificação de peso
reconhecida internacionalmente no seu currículo e no seu cartão de visitas. O
mercado de software livre está em crescimento e à procura de profissionais
certificados. E isso é ótimo para você, sua carreira e também seu bolso.
Este é um livro de Linux, objetivo, didático e focado nos temas da prova da LPI Linux
Essentials Exame 010-160, na última versão da prova. Você irá encontrar exatamente
aquilo que precisa estudar e na medida certa para o exame.
O exame é composto de 40 questões com mínimo de 500 pontos, sendo que o range é
de 200-800 pontos.
Para ser aprovado é necessário acertar pelo menos 26 questões. Mas é um pouco
mais complexo que isso, já que as questões envolvem pesos diferentes para cada
tópico e você não pode zerar um tópico
A maioria das questões são de múltipla escolha onde existe somente uma opção
correta. Algumas irão apresentar um cenário onde alguma medida administrativa
precisa ser tomada e em outras se pergunta qual o comando apropriado para uma
determinada tarefa.
Este exame irá testar seu conhecimento teórico e prático, comandos e suas opções
comuns, localização de arquivos importantes, sintaxe de configurações e
procedimentos mais usados, uma vez que você tenha conseguido solidificar os
conceitos básicos do sistema operacional e ferramentas associadas.
O exame é aplicado no computador, com hora e local definidos pelo candidato, é feito
em um centro Pearson Vue. Existem vários centros espalhados pelo país.
Os exampes em papel podem ser aplicados por empresas parceiras da LPI, também de
forma agendada. A LPI também promove festivais de certificação, especialmente nas
feiras e encontros de tecnologia.
O cérebro é um “músculo”. Quanto mais exercitado, mais forte e resistente ele fica.
Mais conexões sinápticas ele será capaz de fazer e responder ao ambiente de forma
apropriada. Portanto, faça muitos exercícios sobre os tópicos. Exercite os comandos.
Veja suas opções e argumentos. Teste as funcionalidades de cada um deles.
De forma que toda configuração e manejo do servidor são feitos com comandos no
Shell e diretamente nos arquivos de configuração. Isto é muito bom porque o
profissional fica experiente em qualquer Linux e não fica viciado em alguma
ferramenta amigável.
Mas existe alguma que eu indico? Sim. Mas se trata de minha opinião pessoal. Eu
gosto do Open-SuSE. É uma distribuição muito estável, feita por alemães que prezam
muito pela obediência completa aos padrões do Linux Standard Base. Os comandos,
arquivos e estrutura são exatamente como manda o figurino.
Você também precisa se conhecer um pouco para que o aprendizado seja efetivo.
Nossa mente trabalha basicamente com 3 tipos de estilos de aprendizagem: físico,
visual e linguístico/sonoro. Como você fixa melhor aquilo que aprendeu?
Físico
As pessoas com estas características são os inquietos, são os fuçadores, os
desmontadores de equipamentos e brinquedos, os que querem saber como funciona e
ver por dentro, os que não conseguem ficar sossegados em seu lugar.
Eles são pessoas que não conseguem ficar sentadas por muito tempo. Eles
simplesmente raciocinam melhor quando seus corpos estão em movimento,
balançando o corpo entre uma perna e outra, para frente e para trás. Eles interagem
melhor com o mundo através do contato manual e corporal. Os “Aprendizes” físicos
adoram esportes, inventar, construir e dançar.
Linguístico / Sonoro
São aquelas pessoas que vivem cantando ou entoando algum som mesmo com a boca
fechada, os cantores e aqueles descritos com tendo um ouvido musical. Veem sons
em tudo. Eles podem não ser os melhores cantores ou músicos, mas eles têm uma
habilidade natural para interagir e entender os sons, musicais ou não.
Sua relação com o mundo é através dos sons e ritmos sonoros. As atividades que
podem ser mais proveitosas para elas são ouvir músicas, tocar instrumentos,
interpretar sons e cantar.
Visual
Estas pessoas são os modernos Picassos e Renoirs, os grafiteiros e rabiscadores, e
indivíduos que têm um talento natural para as cores e para harmonizar ambientes. Os
indivíduos Visuais parecem ter um senso artístico que faz com que tudo que criem
pareça agradável aos olhos. Sua relação com o mundo é através de pinturas e
imagens. As atividades que podem ser mais proveitosas para elas incluem pintura,
escultura e a criação de artes gráficas.
Uma vez que você tenha se identificado em pelo menos um destes estilos, faça uso
das potencialidades do seu cérebro. Isso facilita seu aprendizado.
Mapas Mentais
Você talvez possa conhecer esse artifício de estudos chamado Mapa Mental, ou
esquema de espinha de peixe. Ele é muito útil, pois além de ser visual, ajuda a
organizar as idéias de uma forma muito prática para memorização. Na entrada dos
capítulos será apresentado um esquema de mapa mental dos temas daquele tópico.
Como exercício, execute cada comando de cada tópico pelo menos mais de uma vez,
exercitando as possíveis situações. Faça as seguintes perguntas para cada comando
estudado:
Neste tipo de esquema atente a pelo menos dois tipos de estilo de aprendizagem: o
físico pois você está fazendo movimentos ao escrever; visual pois você está fazendo
um diagrama. Também ajuda na lógica e memorização pois você está categorizando a
informação em COMO, O QUE, QUANDO e ARQUIVOS. Se possível compre fichas
pautadas 10x15cm que são excelente para fazer consultas rápidas e podem te ajudar
na memorização.
Tente imaginar as situações em que os comandos são usados e teste os diversos tipos
de opções que eles têm. Isto é importante porque uma opção de um comando pode
inverter o resultado.
Por exemplo, o comando “grep uira texto.txt” vai filtrar todas as ocorrências da
palavra “uira” no arquivo texto.txt. Já o grep com a opção “-v” inverte, de forma que o
comando irá mostrar todas as linhas que não têm a palavra “uira” no texto.txt.
Você pode recorrer aos manuais “MAN” dos comandos de cada tópico. Eles têm
informações importantes que o programador que desenvolveu o software deixou ali de
forma especial para você. Vários comandos também tem os vídeos demonstrando seu
uso, que podem ser acessados através do QR-CODE.
Flashcards
Basta recortar pequenos pedaços de papel (fichas, cartões, postit) e escrever uma
pergunta na frente e uma resposta no verso.
Este item é um complemento do anterior, mas é tão importante que resolvi separá-lo
para que você dê mais atenção a ele.
Um simulado vai te dar uma ideia exata do tipo de questões das provas com que você
vai se deparar pelo caminho. Há questões que são maldosamente formuladas para
que você caia na vala do senso comum.
Veja que existem questões que vão priorizar pela simples memorização, outras vão
exercitar sua capacidade de análise em entender um problema do “mundo real” e sua
capacidade de transpor para o “mundo computacional”; outras vão exercitar seu
julgamento diante de um problema em questão e outras vão te apresentar um
problema e a solução e você deverá avaliar se a solução é a correta ou não e por que.
A prova é feita para não ser fácil. E isto é de suma importância para atestar a
qualidade das pessoas que são certificadas. Se qualquer um com pouco preparo pode
ser certificado, de que adianta exibir este título no currículo? Mas se é para os poucos
que realmente se dedicaram e estudaram a fundo, ora, é uma certificação de peso.
Ao término de cada capítulo, você poderá fazer o simulado dos tópicos abordados,
clicando no link ou no QR-CODE.
Este livro contém diversos Qr-Codes que apontam para pequenas video-aulas sobre os
comandos citados. São mais de 8 horas de aula no total. Assim, esperamos que ao ler
sobre os comandos, você também possa ver um vídeo de uso do comando. Desta
forma, você não fica com dúvidas e ainda exercita os 3 modelos de aprendizado:
visual, linguistico e físico.
Para usar o QR-CODE, basta usar o App de câmera ou App de leitura de QR-CODE no
seu celular, apontar para o QR-CODE e curtir a aula.
Também disponibilizamos para você um Terminal Linux Fedora via navegador para
você treinar todos os comandos do livro, de forma fácil e descomplicada.
Para usar esta máquina virtual você precisa abrir o link usando um navegador de
Internet atualizado como Firefox, Chrome ou Safari. O Linux Fedora vai rodar no seu
navegador, em uma máquina virtual executada localmente no seu computador, em
segundos.
http://bit.ly/labvirtuallinux
Este desconto somente é válido para pessoas físicas residentes nos seguintes países:
Argentina, Bolívia, Brasil, Caribe, Chile, Colômbia, Costa Rica, Equador, El
Salvador, Guatemala, Haiti, México, Nicarágua, Panamá, Paraguai, Peru,
República Dominicana, Uruguai e Venezuela.
https://www.certificacaolinux.com.br/descontoessentials/
Tópico 1: 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
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 servidodo 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
dpkg
# dpkg [opções] ação
recursiva.
Exemplos:
# dpkg -i acct_6.3.5-32_i386.deb
O dpkg também pode ser utilizado para se descobrir a qual pacote determinado
arquivo pertence:
# dpkg -S stdio.h
libc6-dev: /usr/include/stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.6.0/CORE/nostdio.h
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
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
rpm
# rpm [modo] [opções] [pacotes]
Exemplo:
# rpm –q bash
bash-2.05b-207
Exemplo:
# rpm -V snort-2.0.1-98.i586.rpm
package snort-2.0.1-98.i586.rpm is not installed
Exemplo:
# rpm -K libpcap-0.7.2-37.i586.rpm
libpcap-0.7.2-37.i586.rpm: sha1 md5 gpg OK
Exemplo:
# rpm –i libpcap-0.7.2-37.i586.rpm
Exemplo:
# rpm -U libpcap-0.7.2-37.i586.rpm
Exemplo:
# rpm –e libpcap-0.7.2-37.i586.rpm
# rpm {--initdb|--rebuilddb}
Exemplo:
# rpm --initdb
# rpm {—qpR }
Exemplo:
Exemplo:
Exemplo:
Exemplo:
Exemplo:
# rpm {—Va }
Exemplo:
# rpm -Va
S.5....T. c /etc/sysconfig/svnserve
....L.... c /etc/localtime
..?...... /usr/sbin/glibc_post_upgrade.x86_64
S.5....T. c /etc/httpd/conf/httpd.conf
..?...... /usr/sbin/suexec
Prefira ao atualizar um pacote por uma versão mais nova utilizar o modo –U. Assim o
pacote mais antigo será removido, o pacote novo será instalado e as configurações
serão mantidas.
Como você pode ver, o uso do rpm é complicado a primeira vista, e pouco prático, já
que o administrador precisa baixar os pacotes e instalar as dependências de forma
manual.
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
deve utilizar para procurar e baixar os pacotes RPM.
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
------
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:
aws-cli noarch 1.7.12-1.3.amzn1 amzn-
updates 604 k
Resumo da transação
=========================================================
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.
A primeira coisa que se tem em mente quando se fala de Linux é o termo "Software
Livre", que é frequentemente associado a ideia de "sem custo". Mas, na verdade, o
Software Livre deve ser associado a "código aberto". E o que isso quer dizer, na
prática?
Existem diversas formas do autor "dar a licença" para que as outras pessoas façam
uso do seu software. A forma comum, é a licença comercial, em que se permite o uso
do software, em troca de alguma compensação para o seu autor.
Esse era o modelo padrão da nascente indústria de software no início dos anos 80.
Quase na sua maioria o software produzido era proprietário. Os usuários podiam usar
os programas em troca de alguma acordo comercial, e de forma alguma tinham
O Projeto GNU tinha como objetivo criar um sistema operacional baseado em UNIX,
que até então era um software proprietário do Bell Labs, mas composto inteiramente
de software livre. O termo "GNU" é um acrônimo recursivo, que significa "Gnu is Not
Unix".
Para fomentar a sua ideia, Stallman criou em outubro do mesmo ano a "Free Software
Foundation", organização sem fins lucrativos para promover o desenvolvimento e uso
do software livre em todas as áreas da computação e apoiar o projeto GNU.
Justamente para assegurar essas quatro liberdades, que os usuários precisam ter
acesso completo ao código do programa. Mas dar ao usuário acesso ao código-fonte
cria implicações comerciais, de forma que as empresas precisam encontrar outras
maneiras de faturar.
Isto porque, em termos práticos, os programas sob licença do GPL tem preço
praticamente nulo, uma vez que o usuário tem igual direito de revendê-lo. Desta
forma, as empresas que focam os seus negócios em software livre, trabalham na
venda de serviços, novas funcionalidades e suporte, e não na venda do software
propriamente.
Seguindo na mesma linha, em 1998, com uma pegada mais comercial e de marketing,
entusiastas do movimento de software livre, Jon Maddog Hall e Eric S Raymond,
estabeleceram a Open Source Iniciative (OSI), para também promoverem e
incentivarem a aproximação de entidades comerciais com o software livre. Embora
com uma diferença filosófica, a FSF e a OSI tem os mesmos objetivos.
Copyleft
É importante dizer que as licenças de software livre são automaticamente transferidas
aos softwares modificados, as suas variantes e os seus derivados.
É este conceito que levou Steve Ballmer, ex-CEO da Microsoft, a chamar o Linux e o
seu licenciamento de "câncer", que atinge tudo que toca. Mas é exatamente essa a
beleza do Software Livre, que o faz crescer e melhorar de forma abundante em todo o
ecossistema da Internet: ninguém pode reter para si as melhorias que produz.
Neste sentido, criaram-se outras formas de licença de software livre que permitem
conectar componentes "não livres" componentes livres, como ocorre com as
bibliotecas e frameworks. A LGPL (Lesser General Public License), por exemplo,
permite essa abordagem.
Creative Commons
Todo esse conceito criado pelas licenças de software livre foi tão bem-sucedido, que
outras iniciativas foram criadas para levar o progresso tecnológico e disseminação de
conhecimento para outras áreas não tecnológicas. A iniciativa do Creative Commons é
uma das mais importantes, que "permitem o compartilhamento e reutilização da
criatividade e do conhecimento através de ferramentas legais gratuitas".
A pioneira e de maior sucesso é a Red Hat, que faturou 3 bilhões de dólares em 2019,
e foi vendida para a IBM por 34 bilhões de dólares. As suas receitas vieram de
contratos de desenvolvimento de recursos e de suporte.
Outro modelo criado para as startups é o crowdfunding, que coleta doações ou venda
de produtos por um preço mais barato, em sites específicos, no momento que os
criadores estão desenvolvendo seus produtos. O dinheiro coletado pode servir para
desenvolver a ideia, ou mesmo coloca-la em produção. Em troca, os doadores ou
compradores da primeira hora recebem descontos e benefícios exclusivos.
Qualquer seja o modelo adotado, é importante que se saiba que muitos negócios ao
redor do mundo foram criados em torno da filosofia do software livre, e que a
liberdade não restringe a criação de negócios lucrativos.
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
todos os gostos, através de inúmeras distribuições e ainda assim manter toda a
conformidade de ser um sistema operacional padrão.
KDE
O KDE é uma grande comunidade de desenvolvedores desde 1996 que desenvolvem
um ambiente gráfico multiplataforma conhecido como KDE Plasma. Seu nome deriva
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.
Privacidade e Segurança na
Internet
Esta questão de proteção do usuário enquanto navega da rede ficou tão importante,
que muitos legisladores criaram leis específicas de proteção a dados, aos quais as
empresas devem observar, e proteger o direito a privacidade das pessoas.
Outra forma de utilizar a Internet sem ser rastreado é utilizar o modo anônimo dos
navegadores. Esta forma de navegação somente evita que os cookies armazenados
previamente sejam lidos, tornando as sessões anônimas, e sem gravar o histórico de
sites acessados. O modo anônimo não mascara o endereço IP do cliente, de forma que
ainda assim é possível que o site seja capaz de rastrear o acesso.
Senhas
Uma boa política de senhas é importante para prevenir os ataques de força bruta,
bem como a adivinhação de senhas. Uma boa política de senhas leva em conta as
seguintes observações:
mínimo de 8 caracteres;
utilizar letras maiúsculas e minúsculas;
utilizar números;
utilizar caracteres especiais;
não reutilizar senhas em todos os sites;
não anotar as senhas em papel;
não utilizar nomes de entes queridos ou datas de aniversário;
trocar as senhas de tempos em tempos;
deixar as senhas de banco únicas;
utilizar tokens de autenticação de dois fatores quando disponível;
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 ec2-user@172.30.0.107
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
type
$ type palavra
O comando type é utilizado para descrever alguma nome informado como parâmetro,
como comando interno do bash, programa, função, apelido ou arquivo. Se nenhum
nome for informado, ele não faz nada.
Exemplos:
$ type bash
bash is /usr/bin/bash
$ type ll
ll is aliased to `ls -l --color=auto'
$ type for
for is a shell keyword
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:
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.
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
$ cat /home/carlacruz/public_html/arquivo
$ 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.
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:
$ touch teste1.c
$ ls -l
-rw-rw-r-- 1 ec2-user ec2-user 226 set 13 22:35 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
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én 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 abaixo do diretório local. Você precisa ter
-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
$ 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,
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
combinação de teclas Ctrl-Alt-F1, Ctrl-Alt-F2 até Ctrl-Alt-F6, tanto em ambiente gráfico
como em ambiente texto.
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.
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
alessandra@empresa.com
arthur@empresa.com
carla@empresa.com
demetrios@empresa.com
flavia@empresa.com
paulo@empresa.com
root@empresa.com
uira@empresa.com
$ 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
cut
$ cut [opções] arquivo
-b número: Imprime uma lista vertical com o byte número (da esquerda para
direita);
-c número: Imprime uma lista vertical com o caractere número (da esquerda
para direita);
-d delimitador: Configura o delimitador que separa uma coluna da outra. O
padrão é o Tab;
-f número: Imprime a coluna número.
Exemplos:
Para pegar só os logins das contas de usuários no arquivo /etc/passwd, usando o cut.
$ cut –b 1 /etc/passwd
wc
$ wc [opções] [arquivo]
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:
$ 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 Linux possibilita concatenar um ou mais comandos num arquivo texto, e tornar esse
arquivo executável, que ganha o nome de script.
Este arquivo quando executado é interpretado pelo shell, que executa os comandos
em fila, um a um.
Escolhendo o Interpretador de
Script #! shebang
Todo script que será executado no Shell deve começar com uma linha especial que
inicia com os caracteres “#!” seguido do caminho completo do interpretador de
comandos. Esses caracteres são conhecidos como "shebang".
#!/bin/bash
clear
echo “Olá $USER”
echo “Hoje é “;date
echo “Número de usuários conectados: ” ; who | wc -l
echo “Calendário”
cal
exit 0
$ chmod +x bomdia
Olá uiraribeiro
Hoje é
sex set 27 10:56:54 -03 2019
Número de usuários conectados:
2
Calendário
setembro 2019
do se te qu qu se sá
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Outros interpretadores podem ser invocados pela linha “#!”, tais como o /bin/sh,
/usr/bin/perl, /usr/bin/awk, dentre outros.
Em um script de shell esta linha faz com que um novo programa do shell seja
executado para interpretar o script. Enquanto isso o shell que o executou fica em
estado de espera.
Um aspecto importante é que o shell pai (em que o script foi chamado) pode passar
variáveis para o processo shell filho que irá executar de fato o script. Mas o shell filho
não poderá passar variáveis ou alterar o conteúdo delas para o processo pai. A
herança é um caminho de mão única de processo pai para processo filho.
É importante que a chamada na linha “#!” que define qual interpretador deve ser
executado esteja correta. Se o caminho estiver incorreto, o script poderá não ser
executado.
Já os comentários nos scripts de Bash são sinalizados com apenas uma tralha "#".
Todo o restante da linha será ignorado pelo shell.
Permissões de Execução
Para que um script possa ser executado, ele precisa ter permissão de execução e o
comando chmod pode ser utilizado para habilitar esse bit para um script.
$ chmod +x script
#!/bin/bash
echo "eu sou:"
id
Se executado normalmente:
$ ./meuscript
eu sou:
uid=1000(uira) gid=1000(uira)
grupos=1000(uira),4(adm),10(wheel),190(systemd-journal)
$ sudo ./meuscript
eu sou:
uid=0(root) gid=0(root) grupos=0(root)
Logo, deve-se tomar extremo cuidado ao se executar um script com o "sudo", uma
vez que todos os comandos que o script invoca serão executados com as permissões
de outro usuário, e, possivelmente o root.
Utilizou-se no exemplo o caminho relativo "./" para chamar o script, porque o diretório
corrente não está listado na variável PATH.
Variáveis Especiais
Para utilizar ler o valor da variável de retorno, ela precisa ser verificada
imediatamente após a execução do comando desejado.
$ echo $?
0
#!/bin/bash
cat /tmp/arquivoteste.txt
if [ $? = 0 ]; then
echo “o arquivo existe”
else
echo “o arquivo não existe”
fi
$ chmod +x testederetorno
$ ./testederetorno
o arquivo não existe
$_ O sublinhado (underscore) contém o nome absoluto do arquivo do shell ou script que está
sendo executado como passado na lista de argumentos.
#!/bin/bash
echo "Meu nome é: $0"
echo "Eu tenho $# argumentos passados na minha execução"
echo "Este é o resultado da última execução: $_"
echo "O primeiro argumento é: $1"
echo "O segundo argumento é: $2"
echo "O terceiro argumento é: $3"
echo "Meu PID é: $$"
echo "Meus argumentos são: $@"
echo "Meus argumentos são: $*"
O Comando test
$ test expressão
O comando test é uma grande ferramenta para testar condições. Com base na
variável de retorno do comando test, lógicas de programação podem ser montadas
para executar algo se uma condição for satisfeita ou não.
Ele pode testar condições em arquivos, permissões, textos, números, e até através de
expressões e fornece o resultado através da variável de retorno $?.
Neste exemplo o comando test verifica se 1 é menor que 2 (-lt = less than - menor
que):
$ test 1 -lt 2
$ echo $?
0
Neste outro exemplo ele testa com o "-d" se o arquivo /usr/src é um diretório:
$ test –d /usr/src
$ echo $?
0
arquivo1 -nt Verifica se o arquivo1 foi modificado depois $ test arquivo1 -nt arquivo2
arquivo2 de arquivo2 (mais novo)
arquivo1 -ot Verifica se o arquivo1 foi modificado antes de $ text arquivo1 -ot arquivo2
arquivo2 arquivo2 (mais velho)
$ [ 10 -ge 8 ]
$ echo $?
Operadores || e &&
Os operadores (pipe pipe) II e && servem para verificar se a expressão à direita
retorna verdadeiro ou falso.
O operador && verifica se algo que está à sua direita é verdadeiro, e assim sendo
executa o comando à sua esquerda.
Neste exemplo, forçamos o retorno verdadeiro com o comando "true" que sempre irá
retornar verdadeiro:
Se usarmos o comando "false", que sempre retorna falso, o operador && não vai
executar o comando à esquerda:
O operador II verifica se algo que está à sua direita é falso, e assim sendo executa o
comando à sua esquerda.
Neste exemplo, forçamos o retorno verdadeiro com o comando true. Neste caso, o II
não irá executar nada.
Neste caso irá retornar SIM porque 100 é maior que 99.
if
if [ expressão ]; then comando else comando fi
Controles de fluxo (if) são comandos que testam algumas alternativas e, de acordo
com o resultado, executam comandos.
A lógica do comando if é “se isso for verdadeiro, faça isso, se não, faça aquilo”. Veja o
exemplo:
if [ $? = 0 ]; then
echo ‘O comando foi completado com sucesso...’
else
echo ‘O comando falhou.’
fi
for
$ for algo; do comando; comando2; done
Os três comandos que possibilitam isso são o for (até que), o while (enquanto for
verdadeiro) e until (enquanto for falso).
O comando for permite que laços (loops) sejam feitos para que um ou mais comandos
sejam executados até que uma determinada variável percorra todos os valores de
uma dada lista.
done
Contando: um
Contando: dois
Contando: três
Contando: quatro
Contando: cinco
Veja o exemplo:
$ ls -1 > lista_arquivos.txt
Pode-se agora usar o for para executar diversos comandos para cada arquivo da lista:
A expressão $(comando) gera uma lista com resultado do comando. Tem o mesmo
efeito que utilizar o comando entre crases: `comando`.
Em seguida ele executa os comandos para renomear e mover os arquivos até que a
lista esteja completa.
Agora um exemplo um pouco mais complexo, com uso do for com if:
Nesta linha, o resultado do comando ls -1 é colocado na variável $i; Depois cada linha
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
Ação Comando
Localizar novamente /
Desfazer alterações u
Ajuda :help
Tópico 4: O Sistema
Operacional Linux
É com essa premissa que há mais de 25 anos a Microsoft detém fortemente o espaço
dos sistemas operacionais de computadores Desktops compatíveis com o IBM PC.
Há cinco anos instalar Linux em um Notebook era algo experimental, e que nem
sempre a distribuição escolhida era capaz de identificar e fazer uso correto do
hardware. Mas isso hoje mudou drasticamente. É perfeitamente possível instalar
qualquer grande distribuição Linux com sucesso em praticamente qualquer notebook,
sem prejuízo algum de mal funcionamento.
O Linux até tem sido uma escolha sábia para reavivar velhos notebooks, com
distribuições leves, capazes de rodar em hardware antigo.
O Windows por mais de 25 anos tem sido a escolha de quase todos os fabricantes de
computadores como sistema operacional pré-instalado, com um tipo de licença OEM
(Original Equipment Manufacturer). A cada ciclo de 5 anos, a Microsoft costuma lançar
uma nova versão do seu sistema operacional.
Também há versões de Windows para servidores, que podem trabalhar com serviços
de autenticação (AD), controle de acesso, servidores de arquivos e impressão,
servidores de Internet (IIS), Firewall e comunicação (Sharepoint).
MacOS
O sistema operacional dos computadores da Apple é baseado no BSD Unix. Ele possui
um Kernel Unix, uma interface gráfica única e otimizada para o hardware, e até pode
executar um Shell, como o Bash e Zsh.
% uname -a
Darwin MacBook-Pro-de-Uira.local 19.4.0 Darwin Kernel
Version 19.4.0 RELEASE_X86_64 x86_64
Linux
Red Hat
CentOS
SUSE Enterprise
Debian
Ubuntu LTS
Fedora Server
Arch
Gentoo
Backtrack
Kali
PureOS
Ciclo de Vida
Dependendo da aplicação que o Linux irá executar, é importante considerar o ciclo de
vida de suporte do sistema operacional.
O ciclo de vida das distribuições Linux podem variar de acordo com a categoria, e
também do distribuidor. As versões empresariais costumam manter o suporte ativo de
uma versão por 10 anos. Isto é necessário porque nas aplicações empresariais, as
mudanças são feitas de forma cautelosa e lenta. É comum hoje o hardware perder a
serventia antes do fim do ciclo de vida de um software.
As versões experimentais, geralmente também tem suporte via Wiki, que são
construídos de forma ativa, sempre em movimento.
Fontes de Energia
Placas Mãe
CPU ou Processadores
Gerência de Dispositivos
na estrutura do /dev.
Os dispositivos de bloco tem o tipo de arquivo indicado com a letra "b" e representam
dispositivos de armazenamento de dados, como discos rígidos, SSDs, CD-ROMs, DVDs,
etc.
Já os dispositivos de caractere tem seu tipo indicado com a letra "c" e representam os
dispositivos de entrada e saída de dados lentas, como mouses, teclados, monitores e
terminais.
Armazenamento
Os discos óticos são os CD-ROMs (700Mb), DVDs (4,7-8,5 Gb) e Blu-Rays (2550Gb).
Não são rápidos como os HDs, mas têm grande durabilidade se acondicionados em
locais apropriados e não permitem gravar os dados diversas vezes.
Seu tempo de acesso aos dados é incrivelmente veloz se comparado aos discos
magnéticos e óticos, são resistentes a quedas e solavancos, consomem menos
energia, dentre outros benefícios. No entanto a capacidade de armazenamento não
ultrapassa 1 Terabyte, e seu custo é elevado em comparação com os discos
magnéticos. Eram muito utilizados em Ultrabooks e em servidores de alta-
performance, mas como seu preço vem a cair drasticamente, o que possibilitou o seu
uso em computadores pessoais.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 4G 0 disk
└─xvdb1 202:17 0 4G 0 part [SWAP]
xvdf 202:80 0 16G 0 disk
└─xvdf1 202:81 0 16G 0 part
xvdg 202:96 0 20G 0 disk /home
É 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
PID TTY STAT TIME COMMAND
1628 pts/0 R+ 0:00 ps a
3297 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux
27159 pts/0 T 0:00 sudo find / -iname backup.sh
27160 pts/0 T 0:00 find / -iname backup.sh
30019 pts/0 Ss 0:00 -bash
$ 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]
É 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
% 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
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;
r: Muda a prioridade de execução do processo (renice);
R: Muda a ordem dos processos de acordo com a utilização da CPU;
q: Sai do modo interativo do top.
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.
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.
Uma vez que os LOGs podem crescer demasiadamente e se tornar grandes arquivos,
faz-se necessário rotacionar os arquivos de log através de um rodízio. O utilitário que
tem essa função é o logrotate.
O utilitário logrotate é usado para fazer cópias de segurança dos arquivos de LOG
atuais do sistema. Ele copia e compacta os arquivos de LOG e cria novos arquivos.
Esta rotação dos arquivos proporciona maior organização e agilidade quando
precisamos encontrar algum detalhe útil, organizado por datas.
$ ls -l /var/log/messages*
-rw------- 1 root root 1560471 abr 14 14:21 messages
-rw------- 1 root root 5495892 mar 22 03:39
messages-20200322
-rw------- 1 root root 3670195 mar 29 03:21
messages-20200329
-rw------- 1 root root 3666272 abr 5 03:34
messages-20200405
-rw------- 1 root root 3641141 abr 12 03:20
messages-20200412
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
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
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 5: 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
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
nenhum usuário, já que o root tem superpoderes.
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
o login. Neste caso as opções do /etc/default/useradd foram usadas para configurar a
conta de usuário
# 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
programas executem sob a permissão de grupo do dono do arquivo. Se aplicado em
um diretório, o SGID vai fazer com que todos os arquivos criados debaixo deste
diretório tenham o mesmo grupo do diretório;
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
7 para as permissões do dono do arquivo (rwx), 5 para as permissões do Grupo (r-x) e
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
1 A
1.1 A evolução do Linux e sistemas Alterando o Dono dos Arquivos e Grupos
operacionais populares 12 186
1.2 Principais Aplicações Open Source 16 apt-get 28
1.3 Software open source e Arquivos tarball 95
licenciamento 43
1.4 Conhecimentos de TIC e o trabalho B
com o Linux 46 bzip2 e bunzip2 93
2 C
2.1 As bases da linha de comando 58 cat 103
2.2 Como obter ajuda na linha de chgrp 187
comando 68 chmod 183
2.3 Como usar diretórios e listar arquivos chown 186
74 Configurar o Cliente DNS 158
2.4 Criar, mover e remover arquivos 84 cp 86
cut 107
3
3.1 Como comprimir arquivos com a linha D
de comando 92 Detalhes sobre os Arquivos e Diretórios
3.2 Como buscar e extrair dados de 78
arquivos 98 Diretório Padrão (skel) 176
3.3 Como transformar comandos em dnf 42
script 111 dpkg 26
4 E
4.1 Escolhendo um Sistema Operacional echo 67
124 Editor de Textos vi/vim 121
4.2 Noções básicas sobre o hardware do Escolhendo o Interpretador de Script #!
computador 127 shebang 111
4.3 Onde os dados são armazenados 131 Executando Programas com a Permissão
4.4 Seu computador na rede 146 de Outro Usuário 172
5 F
5.1 Segurança básica e identificação de find 72
tipos de usuário 166 for 119
5.2 Criando usuários e grupos 174 free 140
5.3 Gerenciando Permissões de Arquivo e
Propriedade 178 G
5.4 Diretórios e Arquivos Especiais 188
Gerenciamento de Arquivos Red Hat e
YUM 30
H R
head 105 rm 88
history 65 rmdir 89
host 161 Rodízio de Logs com Logrotate 144
route 162
I rpm 31
Identificando Qual Usuário Está
Conectado ou Última Conexão 170 S
if 118 Serviços de LOG 142
ip 154 sort 105
ss 156
J su 173
Journal do Systemd 144 sudo 172
L T
less 104 tail 105
Links Simbólicos e Hard Links 189 top 138
ln 190 touch 84
locate 72 type 67
ls 81
U
M uptime 141
man 70 useradd 174
mkdir 88 userdel 176
Modificando as Permissões de Arquivos
183 V
mv 87 Variáveis Especiais 114
N W
netstat 163 w 172
wc 108
O who 171
O Comando test 116
Outros Livros do Autor 191 X
xz e unxz 94
P
passwd 169 Y
yum 36