Linux - Overview
Linux - Overview
Linux - Overview
Linux
uma
Revisão
2020
Sumário
Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 DISCOS E PARTIÇÕES . . . . .
. . . . . . . . . . . . . . . . . . . . . . 7
1.1 Partições . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Particionando um Disco . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Formatando partição de disco .
. . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Sistemas de Arquivos . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1.1 Partição EXT2 (Linux Native) . . . .
. . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1.2 Partição EXT3 (Linux Native) . . . .
. . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1.3 Partição EXT4 (Linux Native) . . . .
. . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1.4 Sistema de arquivos ReiserFS . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 13
1.2.1.5 Sistema de arquivos XFS . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 13
1.2.1.6 Partição Linux Swap (Memória Virtual) . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.1.7 Sistema de arquivos /proc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Formatação e Acesso ao Sistemas de Arquivos . . . . . . . . . . . . . . 14
1.3.1 Formação partição de disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 Acessando partição de disco . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5 Ativando swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 COMANDOS BÁSICOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1 Sintaxe dos comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.1 man (manual) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.2 pwd (print working directory) . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.3 ls (list) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.4 cd (change directory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.5 mkdir (make directory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.6 rmdir (remove directory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.7 touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.8 rm (remove) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.9 cp (copy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.10 mv (move) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.11 cat (concatenate) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.12 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.13 clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.14 exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.15 echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.16 date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.17 df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.18 du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.19 cal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1.20 uptime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1.21 time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1.22 ln (links) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Comandos manipulação texto . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.1 Redirecionamento E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.2 tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.3 head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.4 more . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.5 less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2.6 sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2.7 grep ou egrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2.8 vim (Vi IMproved) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2.9 awk ou gawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5 NETWORK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.0.1 Gerenciando endereçamentos IPs . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.0.2 Gerenciando Interface de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.0.3 Gerenciando ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.0.4 Gerenciamento de tabela de roteamento . . . . . . . . . . . . . . . . . . . . . 71
5.1 Laboratório . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.1.1 Prática 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.1.2 Prática 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.1.3 Prática 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.1.4 Prática 04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.1.5 Prática 05 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2 Configurando init de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.3 Laboratório . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Introdução
• Suporte nativo a rede e tecnologias avançadas como: balanceamento de carga, ips alias,
failover, vlans, bridge, trunking, OSPF, BGP.
• Acessa diversos formatos de partição, como DOS, Windows, Novell, OS/2, NTFS, SunOS,
Amiga, Atari, Mac, etc.
• São feitos extensivos testes em uma comunidade aberta antes do lançamento de cada
versão para atingir um alto grau de confiabilidade.
Este capítulo traz explicações de como manipular discos rígidos e partições no sistema
GNU/Linux e como acessa-los. Também será ensinado como formatar uma partição ou arquivo
em formato EXT2, EXT3, reiserfs, xfs e usar a ferramenta mkswap (para criar uma partição
ou arquivo de memória virtual).
1.1 Partições
Uma partição é uma divisão do espaço de um disco, que marcam onde começa e onde
termina um sistema de arquivos. Cada partição pode conter um sistema de arquivos diferente
que pode ser usado por um único sistema operacional ou até mesmo por diferentes arquiteturas
(32, 64 bits ou outra existente). Várias partições pode coexistir no mesmo disco. Uma partição
de disco não interfere em outras partições existentes,
Existem diferentes formatos de particionamento, sendo o tipo DOS e NTFS os mais
conhecidos, usado nos computadores com sistemas operacionais da Microsoft. Em linux os
formatos EXT2, EXT3, reiserfs e xfs são os mais difundidos. Junto com as variantes de
partições o esquema de particionamento do registro mestre de inicialização (MBR) é o mais
difundido, porém o GPT (GUID Partition Table), usado em conjunto com o UEFI (Unified
Extensible Firmware Interface – padrão criado pela Intel para substituir o BIOS, atualmente
mantido por Unified EFI, Inc.) vem sendo difundido pelos fabricantes de hardwares.
Uma partição pode ser do tipo primaria ou estendida. Na MBR é possível ter até 4
partições primarias e uma única estendida, o qual pode ser subdivididas em partições lógicas.
Na MBR o número máximo de partições é 64, entre primárias (3), estendidas(1) e logicas(60).
No GPT o padrão em Windows 128 e no Linux 65536. Na Figura 1 temos os formatos de
partições suportado pelo comando fdisk.
Agora que temos o nosso disco habilitado, vamos particiona-lo utilizando o comando fdisk
$ sudo fdisk /dev/loop17
Para os teste particionar a primeira parte como primaria com 10M, a segunda partição
com 5M de swap, na sequencia particionar o espaço restante como estendida e na estendida, 3
partições lógica de 10M. Após isso altera o formato da ultima partição lógica para FAT32,
resultando em :
$ sudo fdisk -lu /dev/loop17
Disco /dev/loop17: 50 MiB, 52428800 bytes, 102400 setores
Unidades: setor de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 512 bytes
Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de rótulo do disco: dos
Identificador do disco: 0x0d0c5d7e
A partição EXT2 é o tipo usado para criar o sistema de arquivos Linux Native usado para
armazenar o sistema de arquivos EXT2 (após a formatação) e permitir o armazenamento
de dados. Este tipo de partição é normalmente identificado pelo código 83 nos programas
de particionamento de disco. Logo que foi inventado, o GNU/Linux utilizava o sistema de
arquivos Minix (e consequentemente uma partição Minix) para o armazenamento de arquivos.
Com a evolução do desenvolvimento, foi criado o padrão EXT (Extended Filesystem) e
logo evoluiu para o EXT2 (Second Extended Filesystem).
Entre as vantagens do EXT2 para armazenamento de arquivos estão: é o mais rápido
devido ao não uso de journaling (principalmente para Netbooks e dispositivos flash), não
se fragmentar tão facilmente, pois permite a localização do melhor lugar onde o arquivo se
encaixa no disco, etc. Isto é útil para grandes ambientes multiusuário onde várias pessoas
gravam/apagam arquivos o tempo todo.
O sistema de arquivos ext3 faz parte da nova geração extended file system do Linux, sendo
o padrão atual e tem como seu maior benefício o suporte a journaling e armazenamento
eficiente de arquivos únicos com até 2 TiB de tamanho com um máximo de até 16 TiB para o
sistema de arquivos.
Journaling
O sistema de journaling grava qualquer operação que será feita no disco em uma área
especial chamada “journal”, assim se acontecer algum problema durante alterações no
disco, ele pode voltar ao estado anterior do arquivo, ou finalizar a operação (??).
Desta forma, o journal acrescenta ao sistema de arquivos o suporte a alta disponibilidade
e maior tolerância a falhas. Após uma falha de energia, por exemplo, o journal é
analisado durante a montagem do sistema de arquivos e todas as operações que estavam
sendo feitas no disco são verificadas. Dependendo do estado da operação, elas podem
ser desfeitas ou finalizadas. O retorno do servidor é praticamente imediato (sem precisar
a enorme espera da execução do fsck em partições maiores que 10Gb), garantindo o
rápido retorno dos serviços da máquina.
O uso deste sistema de arquivos comparado ao ext2, na maioria dos casos, melhora o
desempenho do sistema de arquivos através da gravação sequencial dos dados na área de
metadados e acesso mhash a sua árvore de diretórios. Mas pode trazer impactos na performance
no caso de dispositivos de memória flash e quando utiliza arquivos para armazenar o sistema
de arquivos.
A estrutura da partição ext3 é semelhante a ext2, o journaling é feito em um arquivo
chamado .journal que fica oculto pelo código ext3 na raiz da partição (desta forma ele não
poderá ser apagado, comprometendo o funcionamento do sistema). A estrutura idêntica da
partição ext3 com a ext2 torna mais fácil a manutenção do sistema, já que todas as ferramentas
para recuperação ext2 funcionam sem problemas.
Ext4 é a evolução do sistema de arquivos Ext3. De diversas formas, o Ext4 é uma melhoria
mais profunda sobre Ext3 do que o Ext3 foi sobre Ext2. O Ext3 foi principalmente sobre
adicionar journaling ao Ext2, mas o Ext4 modifica estruturas de dados importantes do sistema
de arquivos como aqueles projetados para armazenar os dados de arquivos. O resultado é um
sistema de arquivos com um desenho melhorado, confiabilidade, recursos e maior capacidade
de armazenamento, suportando até 1 EiB de sistema de arquivo com limite máximo de 16
TiB de tamanho de arquivo único.
1.2.1.4 Sistema de arquivos ReiserFS
O XFS é um sistema de arquivos com registro de 64 bits de alto desempenho criado pela
Silicon Graphics, Inc (SGI) em 1993. O XFS é excelente na execução de operações paralelas
de entrada/saída (E/S) devido ao seu design, que é baseado em grupos de alocação (um
tipo de subdivisão dos volumes físicos nos quais o XFS é usado - também abreviado para
AGs). Por causa disso, o XFS permite extrema escalabilidade de threads de E/S, largura
de banda do sistema de arquivos e tamanho dos arquivos e do sistema de arquivos em si,
ao abranger vários dispositivos de armazenamento físico. O XFS garante a consistência dos
dados, empregando o registro de metadados e suportando barreiras de gravação. A alocação
de espaço é realizada por meio de extensões com estruturas de dados armazenadas em árvores
B+, melhorando o desempenho geral do sistema de arquivos, especialmente ao lidar com
arquivos grandes. A alocação atrasada auxilia na prevenção da fragmentação do sistema de
arquivos. Desfragmentação online também é suportada. Um recurso exclusivo do XFS é a
pré-alocação da largura de banda de E/S a uma taxa pré-determinada. Isso é adequado para
muitos aplicativos em tempo real, no entanto, esse recurso era suportado apenas no IRIX e
somente com hardware especializado (??).
Um usuário notável do XFS, a Divisão de Supercomputação Avançada da NASA, aproveitou
esses recursos para implantar dois sistemas de arquivos XFS de 300+ terabytes em dois
servidores de armazenamento de arquivamento SGI Altix, cada um deles diretamente conectado
a várias matrizes de disco Fibre Channel.
O XFS pode lidar com até 16 EB (exabytes) de tamanho total do sistema de arquivos e
até 8 EB de tamanho máximo para um arquivo individual. Em contraste com os sistemas de
arquivos tradicionais, o XFS também pode fazer journal das informações cota. Isso reduz o
tempo de recuperação de um sistema de arquivos que usa cotas. Além disso, o journal pode
ficar em um dispositivo externo.
Este tipo de partição é usado para oferecer o suporte a memória virtual ao GNU/Linux em
adição a memória RAM instalada no sistema. Este tipo de partição é identificado pelo tipo 82
nos programas de particionamento de disco para Linux. Somente os dados na memória RAM
são processados pelo processador, por ser mais rápida.
Desta forma quando você está executando um programa e a memória RAM começa a
encher, o GNU/Linux move automaticamente os dados que não estão sendo usados para a
partição Swap e libera a memória RAM para a continuar carregando os dados necessários pelo.
Quando os dados movidos para a partição Swap são solicitados, o GNU/Linux move os dados
da partição Swap para a Memória. Por este motivo a partição Swap também é chamada de
Troca ou memória virtual.
A partição swap é otimizada para permitir alta velocidade para mover dados da memória
RAM para ela e vice versa. É possível criar o sistema de arquivos Swap em um arquivo ao
invés de uma partição. Contudo a partição Swap é mais rápida que o arquivo Swap pois
é acessada diretamente pelo Kernel. Se o seu computador tem pouca memória (menos que
512Mb) ou você tem certeza que o sistema recorre frequentemente a memória virtual para
executar seus programas, é recomendável usar uma partição Swap.
O arquivo de troca permite que você crie somente uma partição Linux Native e crie
o arquivo de troca na partição EXT2. Você pode alterar o tamanho do arquivo de troca
facilmente apagando e criando um novo arquivo. É possível criar um arquivo de troca em
outros tipos de partições como FAT16, FAT32, NTFS, etc.
O arquivo de troca estará disponível somente após o sistema de arquivos que o armazena
(ext2, fat32, etc) estar montado. Isto é um problema para sistemas com pouca memória que
dependem do arquivo de troca desde sua inicialização.
No laboratório iremos então montar as duas partições criadas e formatadas, para tanto
vamos criar antes o ponto de montagem com o comando mkdir e na sequencia montar a
partição.
O comando mkdir(make directory) é usado no sistema operacional Unix para criar novos
diretórios
$ mkdir acesso_ext acesso_vfat
$ sudo mount -t ext4 /dev/loop17p1 acesso_ext
$ sudo mount -t vfat /dev/loop17p7 acesso_vfat
$ mount | grep loop
/dev/loop17p1 on /Curso/Laboratorio/acesso_ext type ext4 (rw,relatime)
/dev/loop17p5 on /Curso/Laboratorio/acesso_vfat type vfat
(rw,relatime,fmask=0022,dmask=0022, codepage=437,iocharset=iso8859-
1,shortname=mixed,errors=remount-ro)
A grosso modo, pode-se dizer que, no Linux, tudo é arquivo. Se há algo que não seja um
arquivo, então este algo é um processo. No GNU/Linux (como no UNIX), não há diferença
entre arquivo e diretório, uma vez que um diretório é apenas um arquivo contendo nomes de
outros arquivos. Imagens, músicas, textos, programas, serviços e assim por diante são todos
arquivos. Dispositivos de entrada e saída, e geralmente, todos os dispositivos, são considerados
como arquivos. Todos estes arquivos estão organizados de acordo com uma hierarquia, isto é,
há critérios que prevem os principais diretórios e seu conteúdo. Estes critérios são definidos
por um padrão, o FHS (Filesystem Hierarchy Standard ) (??).
O FHS originalmente administrado pelo Free Standards Group e agora pela Linux Founda-
tion, especifica os principais diretórios que precisam estar presentes, e descreve suas finalidades.
Ele pode ser obtido a partir do endereço http://www.pathname.com/fhs/.
Ao especificar um layout padrão o FHS simplifica a tarefa de administrar arquivo locais.
Enquanto a maioria das distribuições Linux respeita o FHS, provavelmente nenhuma deles
segue exatamente, e a última versão oficial é antiga e não leva em consideração alguns avanços.
Distribuições gostam de experimentar e, eventualmente, algumas das experiências são
aceitas. As distribuições Linux gastam muito tempo para garantir que o layout do sistema de
arquivos é coerente e evolui ao longo do tempo.
É possível encontrar diretórios de distribuições específicas no diretório raiz. Entre eles
/misc que tem uso geral, normalmente dados, e o /tftpboot que é usado para o processo de
boot através da rede usando TFTP. Arquivos encontrados neste diretório, são provavelmente
relacionados com a inicialização da estações de trabalho sem disco. Observe que ter outros
diretórios não viola a FHS, no entanto ter diretórios com finalidades semelhantes ao que o
padrão determina é uma violação.
Abaixo a lista dos principais diretórios encontrados sob o /:
• Inicializar o sistema.
2.1.1 /bin
O diretório /bin é muito importante e ele:
Contém programas executáveis e scripts necessários para administradores de sistema e
usuários sem privilégios, que são necessários quando há sistemas de arquivos que ainda não
foram montados, por exemplo, quando iniciando no modo mono-usuário ou no modo recovery.
Também pode conter arquivos executáveis que são usados indiretamente por scripts.
Pode não conter subdiretórios.
Utilitários binários que não são considerados essenciais para ter lugar no /bin são colocados
no /usr/bin. Programas que o usuário root nunca utiliza são considerados não essenciais.
Nota: Algumas distribuições recentes estão abandonando a estratégia de separar o /bin e
o /usr/bin (assim como o /sbin e o /usr/sbin) e só tem um diretório com links simbólicos,
preservando, assim, a visão com duas pastas. Eles acreditam que o conceito consagrado pelo
tempo de colocar o /usr em uma partição separada se tornou obsoleto.
Programas obrigatórios que devem existir no /bin incluem:
cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls,
mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, e
uname.
e opcionalmente podem estar lá:
csh, ed, tar, cpio, gunzip, zcat, netstat, and ping.
2.1.2 /boot
Arquivos essenciais para iniciar o sistema devem estar no diretório /boot. Os dois arquivos
que são absolutamente essenciais são:
vmlinuz: O kernel do Linux compactado.
initramfs: O sistema de arquivos em memória para partida (initial RAM Filesystem), que
é montado antes do diretório raiz estar disponível.
Esses arquivos têm nomes mais longos que dependem da versão do kernel, e com a forma
exata dependendo da distribuição Linux. Além disso ao invés de initramfs, o arquivo pode
ser chamado initrd, que significa RAM disk inicial(initial RAM disk)que era o método antigo,
mas o nome sobreviveu.
O conteúdo exato do /boot varia de acordo com a distribuição e com o tempo; Em um
sistema Ubuntu 20 temos:
Em um passado distante, estes arquivos essenciais eram colocados no /, ao invés de ficarem
no diretório /boot, de acordo com práticas tradicionais do UNIX, que hoje são consideradas
obsoletas.
Há várias versões do kernel disponíveis no diretório /boot e, para cada versão, existem
quatro arquivos. (A escolha entre kernels será feita usando o GRUB durante o boot.)
Os outros dois arquivos além do vmlinuz e initramfs são:
config: O arquivo de configuração usado para compilar o kernel. Está aqui apenas
para registro/auditoria e para facilitar o debug.
System.map: A tabela de símbolos do kernel, que é muito útil para debug. Ela contém
endereços hexadecimais de todos os símbolos do kernel.
Esses dois arquivos não são necessários para o boot ou a execução do sistema.
Distribuições podem colocar outros arquivos e diretórios no /boot, como backup dos setores
de inicialização e outros dados gerados automaticamente.
2.1.3 /dev
Este diretório contém arquivos especiais que representam dispositivos embarcados ou
conectados ao sistema. Estes arquivos especiais são essenciais para que o sistema funcione
adequadamente.
Estes arquivos representam dispositivos de caractere (char / character) (byte-stream) e
dispositivos de bloco de I/O . As interfaces de rede a principio não possui um dispositivo no
Linux, e em vez disso são referenciados por nome, como eth1 ou wlan0 ().
Todos as distribuições Linux modernas(não embarcadas) utilizam o sistema udev, que cria
arquivos especiais durante a inicialização do sistema e quando um novo dispositivo é detectado.
O conteúdo do diretório /dev quando desmontado, ér um diretório vazio; durante a
inicialização um sistema de arquivos virtual é criado e montado em /dev e os nós de dispositivos
são criados por demanda pelo udev. Sistemas embarcados Linux podem ser estáticos, ou
seja, ter dispositivos fixos e podem não usar o udev ou usar uma alternativa, como o mdev.
Exemplo do conteúdo do /dev:
Observe que dispositivos char começam com um c, dispositivos de bloco com um b, en-
quanto links simbólicos começam com um l, há outros dispositivos que não estão mostrado aqui
o u de unsigned char e p de pipe. E que os dois numero antes do mês (colunas 5 e 6) é a desig-
nação de sua criação. O primeiro numero é o major-number, geralmente se refere a qual tipo
de dispositivo é, e o segundo número é minor-number, especifica o dispositivo dentro do grupo,
a combinação dos dois será única, um documento sobre essa numeração pode ser encontrada em
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-
guide/devices.txt .
2.1.4 /etc
Este diretório contém arquivos de configuração do servidor e alguns scripts de inicialização;
não devem existir executáveis binários neste diretório. Distribuições costumam adicionar
arquivos de configuração e diretórios na pasta /etc. Por exemplo, a Red Hat adiciona uma série
diretórios como o /etc/sysconfig, que armazena arquivos e diretórios usados para configurar o
sistema.
Outros subdiretórios importantes incluem /etc/skel, que contém um esqueleto usado como
modelo para novos diretórios home, e /etc/init.d, que contém os scripts de inicialização do
System V.
Arquivos e diretórios que podem ser encontrados neste diretório incluem:
2.1.5 /home
Em sistemas Linux, os diretórios de usuários são convencionalmente salvos dentro do
diretório /home, como em /home/coop, /home/student, etc. Tudo que seja pessoal como
configurações, dados e programas executáveis é armazenado nesta hierarquia de diretórios.
/home também pode conter subdiretórios para grupos ou conjuntos de usuários como /ho-
me/estudantes, /home/funcionarios, /home/aliens etc.
Em outros sistemas operacionais baseados em UNIX, o conceito da pasta /home existe,
mas pode ser ligeiramente diferente. Por exemplo no Solaris os diretórios dos usuários são
criados em /export/home e o automount monta as pastas dos usuários sob demanda em /home.
Isso acontece porque é comum que o diretório home esteja na rede em ambientes corporativos,
provavelmente em um compartilhamento NFS, e a pasta home será montada automaticamente
para o uso.
O Linux tem os mesmos recursos de automount , mas a maioria dos usuários não percebe
quando eles estão em uso, e para o caso de sistemas em que tudo é resolvido por apenas um
servidor, o conceito de pontos de montagem NFS provavelmente não se aplica.
Um usuário sempre pode substituir a variável de ambiente $HOME pela raiz do seu diretório
pessoal, ou utilizar o atalho ; por exemplo, os dois comandos abaixo são equivalentes:
$ ls -l $HOME/public_html
$ ls -l /public_html
Existe uma exceção: o diretório home para o super usuário root no Linux é sempre salvo
na pasta /root. Alguns sistemas UNIX podem usar o diretório raiz do sistema / o que pode
causar confusão.
2.1.6 /lib
Este diretório deve conter apenas as bibliotecas necessárias para executar os programas da
pasta /bin e /sbin. Estas bibliotecas são particularmente importantes para iniciar o sistema e
executar comandos no sistema de arquivo root(/).
Módulos do kernel ficam na pasta /lib/modules/.
Os arquivos do PAM (Pluggable Authentication Modules) ficam na pasta /lib/security.
Sistemas que suportam programas de 32-bit e 64-bit devem manter os dois tipos de
biblioteca. Nos sistemas baseados em Red Hat existe um diretório separado para bibliotecas
de 32-bit (/lib) e para as bibliotecas de 64-bit (/lib64 ).
2.1.7 /media
Este diretório é normalmente usado para montar sistemas de arquivos de mídias removíveis,
como CDs, DVDs, pendrives USB, e até mesmo disquetes da era paleolítica. Sistemas Linux
modernos montam essas mídias de forma dinâmica, e após a inserção o udev cria diretórios
na pasta /media e depois monta o sistema de arquivos. Após a desmontagem e remoção, os
diretórios utilizados como pontos de montagem no /media serão apagados.
Se a mídia removível tem mais de uma partição, cada uma será montada em uma pasta
diferente dentro do /media. Em muitas distribuições Linux, principalmente as desktops, o
gerenciador de arquivos (como o Nautilus) irá mostrar pastas recém montadas.
Nota: Em algumas distribuições mais recentes (incluindo o SUSE e o RHEL 7) mídias
removíveis irão aparecer sob a pasta /run/media/[nome do usuário]/.
2.1.8 /mnt
Este diretório é fornecido para que o administrador do sistema possa montar temporaria-
mente um sistema de arquivos quando necessário. Um uso comum é para sistemas de arquivos
de rede como NFS, Samba, CIFS, AFS
Historicamente, o /mnt também foi utilizado para estes tipos de montagem que agora são
montados sob o /media (ou /run/media) em sistemas modernos. De um modo geral, esse
diretório não deve ser utilizado por programas de instalação.
2.1.9 /opt
Este diretório é projetado para pacotes de software que desejam manter a maioria dos
seus arquivos em um lugar isolado, em vez de espalhá-los por toda a árvore de diretórios do
sistema. Por exemplo, se dolphy_app fosse o nome de um aplicativo que fosse inteiramente
instalado dentro do /opt, todos os arquivos serial colocados dentro da pasta /opt/dolphy_app,
incluindo /opt/dolphy_app/bin para binários e /opt/dolphy_app/man para man pages.
Isso pode facilitar instalar e desinstalar o software, já que tudo está em uma localização
conveniente e isolada. Também torna mais fácil determinar a natureza de cada arquivo e
associá-lo a um pacote específico.
Entretanto, ao usar sistemas de pacotes como RPM e APT, também é fácil instalar e
remover software de uma forma limpa e controlada, mesmo quando os arquivos instalados por
um pacote sejam espalhados por toda a árvore de diretórios.
No Linux, a pasta /opt é frequentemente usada por software proprietário, ou por aqueles
que gostam de evitar complicações causadas pelas diferenças entre distribuições.
Os diretórios /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib, e /opt/man são reser-
vados para uso do administrador do sistema local. Os pacotes podem fornecer arquivos que
terão links nestas pastas ou até mesmo copiados para elas, mas os pacotes devem ser capazes
de funcionar sem os arquivos que estão nestes diretórios especiais.
2.1.10 /proc
Este diretório é um ponto de montagem para um sistema de arquivos virtual dos processos
do sistema, em que toda a informação está na memória e não no disco. Assim como o /dev, o
/proc é vazio se for examinado antes do sistema estar rodando.
O kernel expõe estruturas de dados importantes através do /proc. Cada processo em
execução tem o seu próprio diretório dentro do /proc contendo informações detalhadas sobre o
estado do processo, os recursos em uso no momento e desde que começou a rodar.
Os arquivos no /proc são chamados de arquivos virtuais e tem propriedades interessantes.
Enquanto a maioria parece ter zero bytes de tamanho, eles podem exibir grande quantidade
de informação.
Além disso, a maioria dos parâmetros de data e hora dos arquivos virtuais refletem a hora e
a data atuais, indicando o fato de que eles estão sempre mudando. Na verdade, as informações
contidas nestes arquivos é gerada apenas quando eles são lidos, porque eles não são atualizados
periodicamente.
Arquivos virtuais importantes incluem /proc/interrupts, /proc/meminfo, /proc/mounts, e
/proc/partitions, que apresentam uma visão atual do hardware do sistema.
Outros como /proc/filesystems e o diretório /proc/sys/ fornecem informações sobre a
configuração do sistema e interfaces para alterá-las.
Por questões de organização, arquivos contendo informações sobre um mesmo tema são
colocados em um subdiretório. Por exemplo, /proc/scsi/ contém informações sobre todos os
dispositivos SCSI. Da mesma forma o diretório process contém informações sobre todos os
processos em execução no sistema.
Vamos examinar extensamente os arquivos do /proc durante o curso, e veremos com
detalhes sobre configuração(tuning) do kernel e monitoramento do sistema.
2.1.11 /sys
Este diretório é o ponto de montagem para o sistema de arquivos virtual sysfs onde toda a
informação reside apenas na memória, não no disco. Como o /dev e o /proc, o / diretório /sys
está vazio quando o sistema não está rodando.
O sysfs é usado tanto para reunir informações sobre o sistema quanto para modificar o
seu comportamento durante a execução. Nesse sentido, se assemelha ao /proc, porém é mais
jovem e melhor estruturado. Por exemplo, quase todos os arquivos virtuais no /sys contém
apenas uma linha, ou apenas um valor; não existem arquivos que produzem saídas longas
como acontece no /proc.
Assim como fizemos com o /proc, vamos examinar entradas no /sys no decorrer deste curso
para configurar o kernel e para monitorar do sistema.
2.1.12 /root
Este diretório é o home para o usuário root e só deve ser usada para ações que necessitam
de privilégios do super usuário. Para todas as ações que podem ser executadas por um usuário
não privilegiado, use outra conta.
2.1.13 /sbin
Este diretório contém binários essenciais para a inicialização, restauração, recuperação
e/ou reparação além dos binários do diretório /bin. Também é necessário poder montar outros
sistemas de arquivo nas pastas /usr, /home e em outras pastas se necessário, após o sistema de
arquivos root estiver corretamente montado durante o boot. Normalmente somente o usuário
root se utiliza deste diretório.
Os seguintes programas devem estar presentes(alguns apenas se o seus subsistemas estiverem
instalados):
fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff,
update. Lembre-se: Algumas distribuições estão abandonando a estratégia de separar
em partições diferentes as pastas /sbin e /usr/sbin (e também /bin e /usr/bin) e
estão colocando os binários em uma pasta e criando links simbólicos para manter
compatibilidade.
2.1.14 /tmp
Este diretório é usada para armazenar arquivos temporários, e pode ser acessada por
qualquer usuário ou aplicação. Entretanto arquivos salvos no diretório /tmp não tem a
existência garantida por muito tempo:
Algumas distribuições rodam cron jobs automáticos, que normalmente removem arquivos
com mais de 10 dias de idade. Essa é a política padrão do RHEL 6. Algumas distribuições
removem o conteúdo da pasta /tmp a cada reboot. Essa tem sido a política padrão do
Ubuntu. Outras distribuições modernas utilizam um sistema de arquivos virtual, usando o
diretório /tmp apenas como um ponto de montagem para um ram disk usando o sistema de
arquivos tmpfs. Esta tem sido a política padrão para as versões recentes do Fedora. Quando o
computador é reiniciado, toda informação é consequentemente perdida.
No caso do tmpfs, deve-se evitar criar grandes arquivos, pois eles vão ocupar espaço na
memória ao invés de ocupar espaço no disco, e é fácil afetar ou congelar o sistema por falta de
memória.
Enquanto a regra geral é que aplicativos devem evitar colocar grandes arquivos na pasta
/tmp, há inúmeros programas que violam esta regra e colocam arquivos grandes no diretório
/tmp. O problema é que mesmo sendo possível colocá-los em outra pasta(talvez por especi-
ficar uma variável de ambiente), muitos usuários não tem conhecimento de como fazer esta
configuração.
Esta política pode ser desativada em sistemas baseados no systemd, como o Fedora, com o
comando:
$ systemctl mask tmp.mount
2.1.15 /usr
Este diretório /usr pode ser vista como uma segunda hierarquia. Ela é usada para arquivos
que não são necessários durante a inicialização do sistema. O /usr não precisa estar na mesma
partição do diretório raiz, e pode ser compartilhado através da rede entre os hosts usando a
mesma arquitetura.
Os pacotes de software não devem criar subdiretórios diretamente dentro do /usr , mas
links simbólicos são tolerados para fins de compatibilidade.
Este diretório é normalmente montado como somente leitura. Ele contém os binários que
não são necessários no modo monousuário. Porém a pasta /usr/local, é onde binários locais
podem ser salvos. As man pages ficam dentro da pasta /usr/share/man.
Diretório Função
/usr/bin −→ Scripts e executáveis não essenciais, que não são necessários em modo
monousuário. Geralmente, isso significa aplicativos do usuário que não
são necessários para o sistema funcionar corretamente.
/usr/include −→ Arquivos header usados para compilar aplicativos.
/usr/lib −→ Bibliotecas para programas salvos nas pastas /usr/bin e /user/sbin.
/usr/lib64 −→ Bibliotecas para programas 64-bit nas pastas /usr/bin e /usr/sbin.
/usr/sbin −→ Executáveis não essenciais do sistema como daemons do sistema.
/usr/share −→ Dados compartilhados por aplicativos, geralmente independente da
arquitetura.
/usr/src −→ Código fonte, normalmente para o kernel do Linux .
/usr/X11R6 −→ Arquivos do ambiente gráfio X Window; Geralmente obsoleto. Não é
mais presente em várias distribuições Linux modernas.
/usr/local −→ Aplicativo locais específicos do servidor. Subdiretórios comuns: bin,
sbin, lib, share, include, etc.
• Os arquivos de log.
Obviamente, /var não pode ser montado como um sistema de arquivos somente leitura.
Por razões de segurança, é muitas vezes considerada uma boa ideia montar o /var como
um sistema de arquivos separado. Além disso, se o diretório ficar cheio, não deve bloquear
todo o sistema. O /var/log é diretório onde a maioria dos arquivos de log estão salvos, e do
diretório /var/spool armazena arquivos locais para processos como e-mail, impressão e tarefas
agendadas.
Diretório Função
/var/ftp −→ Usado como a base do servidor FTP.
/var/lib −→ Dados persistentes, modificados por programas a medida que executam.
/var/lock −→ Arquivos de Lock usados para controlar acesso simultâneo a recursos.
/var/log −→ Arquivos de Log.
/var/mail −→ Caixas de correio (mailboxes) dos usuários.
/var/run −→ Informação sobre a execução do sistema desde o último boot.
/var/spool −→ Tarefas em uma fila ou aguardando para serem processadas, como a fila
de impressão.
/var/tmp −→ Arquivos temporários que serão preservados entre reboots do sistema,
algumas vezes relacionados com o /tmp.
/var/www −→ Raiz da hierarquia dos websites.
2.1.17 /run
O diretório /run armazena os arquivos transitórios: aqueles que contém informações sobre
o tempo de execução (run time), que podem ser salvas nos primeiros estágios da inicialização
do sistema (boot), e que não precisam ser persistentes entre reinicializações.
Geralmente o /run é implementado como um ponto de montagem vazio. Logo este pseudo
filesystem (sistema de arquivos artificial) só existe em memória.
Alguns caminhos existentes, como /var/run e /var/lock, são apenas links simbólicos para
subdiretórios dentro do /run. Outras pastas, dependendo da distribuição podem também
apenas apontar para locais dentro do /run.
2.1.18 lost+found
O lost+found é um diretório especial, não faz parte do FHS mas que precisa cer mencionado,
ele é criado automaticamente após a formatação da partição com o mkfs.ext2 ( sistemas
de arquivos ext2/3/4 ), a função deste diretório é pré-alocar os blocos de arquivos/diretório
durante a execução do programa fsck.ext2 na recuperação de um sistema de arquivos. Isto
garante que os blocos de disco não precisarão ser diretamente alocados durante a checagem.
3 Usuários, Grupos e Permissões
• o seu nome de login (ou seja, o nome que é necessário digitar para entrar no sistema);
• senha criptografada, nos primórdios do *unix a senha ficava aqui e qualquer usuário
tinha acesso, porém isso sofreu um aprimoramento, agora a senha fica em outro arquivo
no /etc/shadow que só o administrador tem aceso. A letra X informa que a senha está
armazenada e protegida dentro do arquivo shadow. Se houver um asterisco (*) no lugar,
significa que a conta está desativada.;
• informações adicionais sobre o usuário (nome completo, dados de contato, etc). Também
chamado de GECOS (General Electric Comprehensive Operating System) em alusão a
uma funcionalidade existente em um sistema operacional Unix que tinha esse nome. Cada
informação é separada da outra por uma vírgula, por exemplo: Usuário do Sistema,Rua
X,1234-4321. Na prática, você pode inserir as informações que achar melhor, não apenas
os dados informados anteriormente;;
Cada parâmetro do usuário é separado por : (dois pontos), e cada usuário formatado ocupa
uma linha dentro do arquivo /etc/passwd, exemplo de uma linha:
lab:x:1001:500:Usuario de TesTe:/home/lab:/bin/bash
Temos:
Onde:
Ou seja, para melhor entendimento, o primeiro dígito determina o tipo de arquivo, os três
seguintes a permissão do dono do arquivo, os três do meio a permissão do grupo que o arquivo
pertence e os últimos a permissão de outros usuários. A regra para as permissão sempre será:
- - - Nenhuma permissão;
r- - Permissão de leitura;
r-x Leitura e execução;
rw- Leitura e gravação;
rwx Leitura, gravação e execução.
Após a primeira letra (que indica o tipo de arquivo), existem mais nove que indicam os
direitos de acesso concedidos aos usuários em potencial do arquivo. Estes direitos são divididos
em três grupos de três letras:
A primeira letra representa o tipo de arquivo / objeto e pode ser :
• - : Arquivo convencional
• d : Diretório
• l : Link Simbólico
• s : Socket
• x : executar é permitido.
Se a ação não é permitida, um hífen (-) aparece em vez de uma dessas letras.
Além disso, permissões especializadas existem para cada categoria, como as permissões
setuid / setgid.
Assim, no exemplo anterior, o usuário linux e membros do grupo curso têm acesso de
leitura e escrita, enquanto os outros tem apenas acesso de leitura.
As permissões de acesso a arquivos são uma parte importante do sistema de segurança que
o Linux usa. Qualquer pedido de acesso a um arquivo requer a comparação das credenciais e
da identidade do usuário que solicitou o acesso com as credenciais do arquivo.
A autenticação é concedida, dependendo de um destes três conjuntos de permissões, na
seguinte ordem:
$ ls -l disco_teste
-rw-rw-r- - 1 linux curso 1048576 out 9 23:26 disco_teste
$ chmod uo+x,g-w disco_teste
$ ls -l disco_teste
-rwxr- -r-x 1 linux curso 1048576 out 9 23:26 disco_teste
onde u representa o usuário (dono), o significa outros (ou mundo), e g representa o grupo.
As permissões podem ser representados tanto na forma simbólica como bitmap em octal.
Bitmaps em octal é no formato 0755, enquanto representações simbólicas é u+rwx,g+rwx,o+rx.
A sintaxe simbólica pode ser difícil de digitar e lembrar, e por isso a abreviação octal é
popular por permitir que você defina todas as permissões em uma única etapa. Isto é feito
com um algoritmo simples, e um único número é suficiente para especificar os três bits de
permissão para cada entidade. Este número é a soma de:
4 se a permissão de leitura é desejada.
2 se a permissão de gravação é desejada.
1 se a permissão de execução é desejada.
$ chown -R coop:projeto ./
$ chown -R coop:projeto subdir
o primeiro comando vai mudar o dono e o grupo de todos os arquivos no diretório atual e
em todos os seus subdiretórios, e apenas no diretório subdir e todos os seus subdiretórios no
segundo comando.
3.3.2 umask
As permissões padrão dadas ao criar um arquivo são de leitura e gravação para dono, grupo
e outros (0666), e para um diretório são leitura/escrita/execução para dono, grupo e outros
(0777).
$ touch afile
$ mkdir adir
$ ls -l | grep -e afile -e adir
drwxrwxr-x 2 coop coop 4096 Sep 16 11:18 adir
-rw-rw-r- - 1 coop coop 0 Sep 16 11:17 afile
Contudo quando criamos arquivos e diretórios as permissões estão alteradas para 664 para
o arquivo e 775 para o diretório. As permissões padrão de criação foram alteradas pelo umask
que tem a finalidade de definir quais permissões devem ser negadas. O valor atual pode ser
mostrado por:
$ umask
0002
Este valor é combinado com as permissões de criação padrão para obter o resultado final:
0666 & ~002 = 0664 & = E lógico e ~ = Negação lógico, A & ~B = A XOR B
ou seja:
-rw-rw-r- -
$ umask 0022
• S - Idêntico a s. Significa que não existe a permissão “x” (execução ou entrar no diretório)
naquela posição.
• t - Salva a imagem do texto do programa no dispositivo swap, assim ele será carregado
mais rapidamente quando executado, também chamado de stick bit. Em diretórios,
impede que outros usuários removam arquivos dos quais não são donos. Isto é chamado
de colocar o diretório em modo append-only. Um exemplo de diretório que se encaixa
perfeitamente nesta condição é o /tmp, todos os usuários devem ter acesso para que seus
programas possam criar os arquivos temporários lá, mas nenhum pode apagar arquivos
dos outros. A permissão especial t, pode ser especificada somente no campo outros
usuários das permissões de acesso.
1. Crie um arquivo teste (digitando touch teste) e defina sua permissão para rw-rw-r - -
(chmod ug=rw,o=r teste ou chmod 664 teste).
3. digite ls -l
9. Veja que agora a permissão de execução foi concedida a todos os usuários, pois foi verifi-
cado que o arquivo era executável (tinha permissão de execução para outros usuários).
13. Você deve ter reparado que a permissão de acesso especial X é semelhante a x, mas
somente faz efeito quanto o arquivo já tem permissão de execução para o dono, grupo
ou outros usuários.
Obs: Se utilizar de valores de octeto a opção especial X não faz sentido, pois os valores
são atribuídos diretamente a cada campo da permissão!
O setuid por segurança não é habilitado seu uso em script, pois se pudesse facilmente
haveria scripts rodando com outros usuários, portanto seu acesso é restrito a programas
compilados.
Para teste do setgid vamos utilizar de dois usuários, um que será o dono do diretório e
outro manipulando o diretório:
4 Comandos Básicos
man [comando]
curso@curso-desktop:~$ pwd
/home/curso
4.1.3 ls (list)
Lista os arquivos e subdiretórios de um ou mais diretórios.
Sintaxe básica:
Exemplos:
$ ls -l /etc
$ ls / /etc
$ ls -R /etc
$ ls -a /tmp
$ ls -la /tmp
$ ls -l -a /tmp
cd [diretório]
Exemplos:
• Para mudar para o diretório root (raiz do sistema, o / , não confundir com diretório do
usuário root).
$ cd /
$ cd
$ cd ..
• Para voltar dois diretório, use:
$ cd ../../
$ cd -
Exemplos:
• Cria os diretórios, criando os diretórios intermediários, não gera erro caso algum diretório
já exista, cria os diretórios pais à medida que forem necessários.
$ mkdir -p /tmp/dir3/dir4/dir5/dir6/dir7
Exemplos:
$ rmdir -p /tmp/dir3
4.1.7 touch
Criar novos arquivos vazios e também para mudar a data e a hora de criação de arquivos
existentes.
Sintaxe básica:
$ touch arquivonovo
• Alterar a data do arquivo “arquivonovo” para o dia 16/11 (16 de novembro), e o horário
para 16h11min
4.1.8 rm (remove)
Remove arquivos e diretórios.
Sintaxe básica:
Exemplos:
$ touch arquivo_teste
$ rm arquivo_teste
$ mkdir -p dir_teste/dir1
$ touch dir_teste/dir1/arquivo_teste
$ rm -r dir_teste
Atenção: O comando rm é definitivo, ou seja, uma vez que o usuário removeu um arquivo
ou diretório, não há recuperação. No GNU/Linux em linha de comando não há uma
lixeira!
4.1.9 cp (copy)
Efetua copia de arquivos e diretórios.
Sintaxe básica:
Exemplos:
$ touch /tmp/teste
$ cp /tmp/teste ~
$ mkdir -p /tmp/dir_teste/dir1
$ touch /tmp/dir_teste/dir1/arquivo_teste
$ cp -r /tmp/dir_teste
4.1.10 mv (move)
Efetua o movimento de arquivos e diretórios para outro diretório, ou renomeia arquivos e
diretórios.
Sintaxe básica:
Exemplos:
$ touch teste
$ mkdir dir_teste
$ mv teste teste1
$ mv dir_teste dir_teste_1
• Mover arquivo e diretório:
$ mv dir_teste_1 /tmp
$ mv teste1 /tmp/dir_teste1
Exemplos:
$ cat /etc/hosts
4.1.12 find
O comando find é usado para procurar por diretórios e arquivos no disco. Possui muitas
opções, é recomendável ler o man dele, será mostrado apenas alguns exemplos simples.
Sintaxe básica:
Exemplos:
4.1.13 clear
O comando clear limpa o console:
Sintaxe básica:
clear
4.1.14 exit
Sai do shell (interpretador), faz o logout do usuário.
Sintaxe básica:
logout
4.1.15 echo
Mostra um texto. É utilizado em scripts para exibir mensagens ao usuário.
Sintaxe básica:
echo "mensagem"
4.1.16 date
Mostra ou modifica a data e o horário do sistema. Este comando possui muitas opções
vale uma lida do man.
Sintaxe básica:
date [opções]
$ date 02011430
4.1.17 df
Este comando exibe informações sobre espaço, livre e ocupado, das partições do sistema.
Sintaxe básica:
df [opções] [partição]
Exemplos:
$ df
$ df -k /dev/sda1
4.1.18 du
Exibe informações sobre o espaço usado pelos diretórios.
Sintaxe básica:
du [opções] [diretorio]
Exemplos:
$ du -c *.txt
$ du -sh testes
Observações
O comando du, sem qualquer opção e sem nome de arquivo ou diretório, fornece a
quantidade de espaço ocupada por cada subdiretório que se encontra hierarquicamente
abaixo do diretório atual
4.1.19 cal
Mostra o calendario e linha de comando.
Sintaxe básica:
4.1.20 uptime
Mostra quanto tempo o sistema esta operando.
Sintaxe básica:
uptime
4.1.21 time
Mede o tempo gasto para executar um processo (programa).
Sintaxe básica:
time [comando]
Exemplos:
• $ time ls
• $ time find / -iname time
4.1.22 ln (links)
Este comando cria ligações (links) entre arquivos. Há dois conceitos de ligação em sistemas
Unix:
• Ligação direta ou hard link – cria uma cópia de inode para o arquivo com outro
nome (um arquivo pode ter diversos nomes). O arquivo será removido do disco quando
o último nome for removido. Não há algo como um nome original, todos os nomes tem o
mesmo status. Não funciona com diretório.
Sintaxe básica:
Exemplos:
$ ln ./teste_arquivo ./teste_arquivo_2
• O comando cat abaixo copia o conteúdo dos arquivos teste1.txt e teste2.txt para o
arquivo teste. Caso o arquivo teste não exista, o arquivo é criado. Caso o arquivo teste
exista, ele é sobreposto.
Operador Significado
> ou 1> redireciona para saída
>> redireciona para fim de arquivo
< redireciona para a entrada
<< redireciona para a entrada e mantém a entrada aberta até que seja digitado
algum caractere de EOF (fim de arquivo) como, por exemplo, CTRL+D
>& ou 2> redireciona a saída de erros
| redireciona a saída de um comando para a entrada de um outro comando
tee redireciona o resultado para a saída padrão e para um arquivo, deve ser
usado em conjunto com o “|”
• O comando cat abaixo recebe como entrada o arquivo teste.txt e, portanto, mostra na
tela o conteúdo deste arquivo.
• Suponha que o diretório xxxxx não existe. Portanto, o comando ls xxxxxx apresenta
uma mensagem de erro. Para direcionar a saída de erro deste comando para o arquivo
resultado.
• O comando tee junto com o caractere | para que o resultado de um comando seja
redirecionado para a saída padrão e para um arquivo.
Observações
Normalmente cada processo opera com pelo menos três descritores de arquivo sempre
abertos: stdin (fd 0), stdout (fd 1) e stderr (fd 2).
4.2.2 tail
Este comando exibe as últimas linhas de um arquivo texto.
Sintaxe básica:
Exemplos:
$ tail arquivo
$ tail -n 3 arquivo
4.2.3 head
Este comando exibe as primeiras linhas de um arquivo texto.
Sintaxe básica:
Exemplos:
$ head arquivo
$ head -n 3 arquivo
4.2.4 more
Permite fazer a paginação de arquivos ou da entrada padrão. O comando more pode ser
usado como comando para leitura de arquivos que ocupem mais de uma tela. Quando toda
a tela é ocupada, o more efetua uma pausa e permite que você pressione Enter ou espaço
para continuar avançando no arquivo sendo visualizado. Para sair do more pressione q. A
visualização é continua e não tem volta.
Sintaxe básica:
more [arquivo]
Exemplos:
$ more /etc/services
4.2.5 less
Permite fazer a paginação de arquivos ou da entrada padrão. O comando less pode ser
usado como comando para leitura de arquivos que ocupem mais de uma tela. Quando toda a
tela é ocupada, o less efetua uma pausa e permite que você pressione Seta para Cima e Seta
para Baixo ou PgUP/PgDown para fazer o rolamento da página, permite a navegação entre
as páginas. Para sair do less pressione q. O comando less possui opção de busca no arquivo
semelhante comando vim
Sintaxe básica:
less [arquivo]
Exemplos:
$ less /etc/services
4.2.6 sort
Organiza as linhas de um arquivo texto ou da entrada padrão. A organização é feita por
linhas e as linhas são divididas em campos que é a ordem que as palavras aparecem na linha
separadas por um delimitador (normalmente um espaço).
Sintaxe básica:
Exemplos:
$ sort texto.txt
Exemplos:
Formas de Trabalho
O vim possui três formas de trabalho: modo de linha, modo de edição e modo de comandos.
A mudança de um modo para outro modo é feita através do uso da tecla Esc.
Após o arquivo ser aberto pelo vim, o modo de comandos é ativado. No modo de comandos,
as teclas digitadas pelo usuário são interpretadas pelo vim como ações a serem executadas
dentro do arquivo aberto.
No modo de edição, as teclas digitadas pelo usuário são ecoadas na tela. Para entrar neste
modo, pode-se digitar, por exemplo, “a” (adicionar), “i” (incluir), etc. No modo de linha,
o usuário define ações a serem executadas no arquivo como um todo (por exemplo, salvar,
substituir caracteres, sair do aplicativo, etc). Para entrar neste modo, deve-se digitar “:”.
Modo de comandos
0 - mover o cursor para o início da linha em que o cursor está posicio-
nado.
a - inserir texto após a posição atual do cursor.
A - inserir texto no final da linha atual.
dd - deletar linha atual.
[n]+dd - deletar n linhas a partir da linha atual.
G - ir para o fim do arquivo.
[n]+G - ir para a n-ésima linha do arquivo.
h - voltar um caractere.
H - ir para a primeira linha exibida na tela atual.
i - inserir texto a partir da posição atual do cursor.
I - inserir texto no início da linha atual.
j - descer uma linha.
J - juntar a linha atual com a linha seguinte.
[n]+J - juntar n linhas consecutivas a partir da linha atual.
k - subir uma linha.
l - avançar um caractere.
L - ir para a última linha exibida na tela atual.
n - procurar, a partir da posição atual do cursor, a próxima ocorrência
do texto definido no último comando /.
N - procurar, a partir da posição atual do cursor e indo em direção ao
início do arquivo, a próxima ocorrência do texto definido no último
comando /.
o - inserir uma linha em branco após a linha atual.
O - inserir uma linha em branco acima da linha atual.
p - inserir linhas copiadas após a linha atual.
P - inserir linhas copiadas antes da linha atual.
r - substituir o caractere atual.
R - substituir um conjunto de caracteres.
s - deletar o caractere atual e inserir texto.
S - apagar linha e inserir novo texto na linha.
u - desfazer a última alteração feita no texto e ainda não desfeita.
U - desfazer a última alteração feita no texto.
x - apagar caractere onde o cursor está posicionado.
$ - mover o cursor para o fim da linha em que o cursor está posicionado.
[n]+y - copiar n linhas a partir da linha atual.
yy - copiar a linha atual.
[n]+Y - copiar n linhas a partir da linha atual.
YY - copiar a linha atual.
<Ctrl> + B - voltar uma página.
<Ctrl> + F - avançar uma página.
<F1> - exibir tela de ajuda.
[n]+<Enter> - ir para n linhas abaixo da linha atual.
[n]+. - repetir o último comando que alterou o texto n vezes a partir da
posição atual do cursor.
[n] + ∼+ <Enter> - inverter a caixa (case) dos n caracteres seguintes ao cursor.
/texto - procurar pela primeira ocorrência do texto especificado a partir
da posição atual do cursor.
Modo de linha
:r arquivo - incluir arquivo a partir da linha atual do cursor.
:q + <Enter> - sair da tela de ajuda.
:q! - sair do vim sem salvar as alterações.
:w arquivo - salvar arquivo com o nome especificado.
:wq - sair do vim salvando as alterações.
:X - criptografa o arquivo.
%!xxd - Para visualizar um arquivo binário no modo hexadecimal
%!xxd -r - Para retornar do modo hexadecimal
O funcionamento básico do awk é pegar uma entrada (linha) e separar em campos para ser
manipulado, o separador padrão é o espaço, um exemplo para entender melhor isso, vamos
pegar uma entrada, vamos usar a frase "A banana madura é amarela e doce", vamos utilizar o
separador padrão, o espaço, quando olhamos a frase, temos 7 palavras separadas por espaço, o
awk ira ver desta maneira, portanto ira separar cada palavra em uma campo (coluna). Então
como exemplo, faremos o o awk separa a 1, 2 e 5 campo :
$ echo "A banana madura é amarela e doce" | awk ’{print $1 " " $2 " " $5}’
Como resultado:
A banana amarela
Um exemplo muito difundido é, imaginemos que queremos obter a lista dos usuários do
sistema e o shell usado por cada um dos usuários. Estas duas informações fazem parte do
arquivo /etc/passwd onde existe uma entrada para cada usuário do sistema com as seguintes
informações: nome, senha, UID, GID, informações do usuário, diretório home e o shell padrão.
Por exemplo, a linha abaixo mostra a entrada para o usuário aluno que usa o shell bash como
padrão.
aluno:x:1001:1001::/home/aluno:/bin/bash
Note que os campos são separados por dois pontos (“:”). Podemos então, digitar o seguinte
comando para obter os nomes e os shells dos usuários:
A opção -F define o caractere ":"como separador dos campos. O comando print define a
exibição de três argumentos: o primeiro campo de cada linha ($1), a string ” => ” e o sétimo
campo de cada linha ($7). Portanto, a saída do comando acima para a entrada do usuário
aluno é
Somando números :
Outra forma é criar um arquivo e torná-lo executável com o comando chmod. Por exemplo,
suponha que o arquivo teste possui o conteúdo mostrado abaixo. Note que agora o separador
de campos é definido na variável FS (Field Separator) e que uma frase é exibida antes de
processar o arquivo de entrada (bloco BEGIN) e outra frase é exibida no final da execução
(bloco END). Apenas os comandos do bloco central são executados de forma repetitiva (ler
uma linha do arquivo de entrada e executa o bloco central). Portanto, neste exemplo, o número
de vezes que o comando print do bloco central é executado depende do número de linhas do
arquivo /etc/passwd usado como entrada.
#!/usr/bin/awk -f
BEGIN { FS=”:”; print “*** inicio ***\n” }
{
print $1 ” => ” $7
}
END { print “*** fim ***” }
Antes de executá-lo, devemos alterar a permissão do arquivo comchmod u+x testeEm
seguida, basta digitar
./teste /etc/passwd
O resultado será o mesmo do segundo exemplo, exceto que aparecerão duas frases: uma no
início e outra no fim da execução.
Mais Exemplos
O exemplo abaixo exibe o resultado da soma de dois valores recebidos na linha de comandos.
Da mesma forma da função main( ), as variáveis ARGC e ARGV contém, respectivamente, o
número de parâmetros e os argumentos passados na linha de comandos (o parâmetro ARGV[0]
possui "awk"). Observe que todos os comandos estão dentro do bloco BEGIN (isto significa
que os comandos serão executados uma única vez)
O exemplo abaixo calcula a raiz quadrada de um número. Note que o programa verifica se
o parâmetro passado pelo usuário é realmente um número.
#!/usr/bin/awk -f
BEGIN {
if (ARGC != 2 )
print "Forneca um numero"
else
{
if (ARGV[1] ~ /^[0-9]+$/)
{
raiz=sqrt(ARGV[1])
print "Raiz quadrada de", ARGV[1], "=", raiz
}
else
print "Valor nao numerico"
}
}
Um exemplo de uso de arrays é mostrado a seguir. Note que o índice do array não precisa
ser um valor numérico.
#!/usr/bin/awk -f
BEGIN {
vetor[0] = 1
vetor[1] = 2
vetor[2] = 3
dicionario["teste"] = "socorro"
dicionario["AOU"] = "Linux"
for (i = 0; i < 3; i++)
print "vetor[" i "] = " vetor[i]
print "teste = " dicionario["teste"]
print "AOU = " dicionario["AOU"]
}
O exemplo abaixo mostra outra forma de ler o arquivo /etc/passwd e exibir o nome do
usuário (primeiro campo = $1) e o shell usado pelo usuário (sétimo campo = $7). Os nomes
dos usuários são usados como índices do vetor e cada posição do vetor armazena o shell do
usuário. A variável NF contém o número de campos da linha que, neste caso, é igual a 7.
#!/usr/bin/awk -f
BEGIN { FS=":" }
{
usuario[$1]=$NF
}
END {
for (i in usuario)
print i,"=>", usuario[i]
}
#!/usr/bin/awk -f
BEGIN{
# Ler primeira matriz
valor = getline < ARGV[1]
lin_A = 0
while (valor == 1)
{
lin_A++
for (i = 1; i <= NF; i++)
A[lin_A][i] = $i
valor = getline < ARGV[1]
}
col_A = NF
# Ler segunda matriz
valor = getline < ARGV[2]
lin_B = 0
while (valor == 1)
{
lin_B++
for (i = 1; i <= NF; i++)
B[lin_B][i] = $i
valor = getline < ARGV[2]
}
col_B = NF
if (col_A != lin_B)
printf "Numero de colunas de A dever ser igual a numero de linhas de B\n"
else
{
for (i = 1; i <= lin_A; i++)
{
for (j = 1; j <= col_B; j++)
{
C[i][j] = 0;
for (k = 1; k <= col_A; k++)
{
C[i][j] += A[i][k] * B[k][j]
}
printf C[i][j] " "
}
printf "\n"
}
}
}
1 3 1
2 3 2
Arquivo B
2 1
3 1
1 2
12 6
15 9
Variáveis internas O AWK possui variáveis internas que podem ser usadas pelo programador.
A tabela abaixo mostra algumas dessas variáveis.
Variável Descrição
ARGC Número de argumentos da linha de comandos
ARGV Vetor com os argumentos da linha de comandos
ENVIRON Vetor com as variáveis de ambiente
ERRNO Armazena mensagem de erro
FILENAME Nome do arquivo de entrada sendo processado no bloco central
FNR Número de linhas já processadas de um determinado arquivo
FS Separador dos campos da linha de entrada (o espaço é o padrão)
NF Número de campos na linha sendo processada
NR Número de linhas já processadas considerando todos os arquivos de entrada
Observações
A linguagem AWK é muito rica pois permite, por exemplo, o uso de:
comandos de decisão (if, else);
laços (for, while, do while);
expressões aritméticas (+, −, ∗, /, %, ++, −−, =, + =, − =, >
, >=, <, <=, ! =, etc);
funções (exp, log, sqrt, split, substr, getline, etc);
variáveis, constantes e vetores.
Para obter mais informações, consulte o manual on-line (digite “man awk” ou GNU
Awk Manual).
5 Network
Sintaxe
ip OBJECT COMMAND
ip [options] OBJECT COMMAND
ip OBJECT help
Os OBJETOS podem ser qualquer um dos apresentados na tabela 6 e podem ser escritos
de forma completa ou abreviada.
Objeto Forma Objetivo
abreviada
a
address Endereço de protocolo (IP ou IPv6) em um dispositivo.
addr
addrlabel addrl Configuração de etiqueta para seleção de endereço de
protocolo.
l2tp Túnel sobre IP (L2TPv3).
link Dispositivo de rede
m
maddress Endereço multicast.
maddr
monitor Mostrar as mensagens do netlink.
mptcp Gerenciar o gerenciador de caminhos MPTCP.
mroute mr Entrada de cache de roteamento multicast.
mrule Regra no banco de dados de política de roteamento
multicast.
n
neighbour Gerenciar entradas de cache ARP ou NDISC.
neigh
netns Gerencia namespaces de rede.
ntable Gerencia a operação do cache vizinho.
route r Entrada da tabela de roteamento.
rule ru Regra no banco de dados de política de roteamento.
tcp_metrics / Gerenciar métricas de TCP
tcpmetrics
token Gerenciar identificadores de interface tokenizados.
tunnel t Túnel sobre IP.
tuntap Gerenciar dispositivos TUN / TAP.
vrf Gerenciar roteamento virtual e dispositivos de encami-
nhamento.
xfrm x Gerencia políticas IPSec.
Observações
[h] 15
Para obter informações sobre cada objeto, use o comando help da seguinte maneira:
ip OBJECT help
ip OBJECT h
ip a help
ip r help
5.0.1 Gerenciando endereçamentos IPs
Exibe informações sobre todas as interfaces de rede
Digite o seguinte comando para listar e mostrar todos os endereços IP associados em todas
as interfaces de rede:
ip a
# Ou
ip addr
Figura 5 – Mostra os endereços associados a interface, inet para IPv4 e inet6 para IPv6.
Sintaxe
Por padrão, o comando ip não define nenhum endereço de broadcast, a menos que seja
explicitamente solicitado.
Sintaxe
Sintaxe
É possivel excluir um endereço IPv4 / IPv6 um por um, conforme mostrado . No entanto,
o comando flush pode remover o endereço IP a partir de uma determinada condição. Por
exemplo, você pode excluir todos os endereços IP da rede privada 192.168.2.0/24 usando o
seguinte comando:
ip -s -s a f to 192.168.1.0/24
Resposta do comando:
Sintaxe
ip link add link <dispositivo> name <nome interface> type <tipo interface>
Sintaxe
Sintaxe
Sintaxe
O endereço MAC de uma placa de interface de rede (NIC) Linux pode ser alterado da
seguinte maneira:
Sintaxe
ip neigh show
# ou
ip n show
Sintaxe
Exemplo, acrescentando uma entrada ARP permanente para o vizinho 192.168.1.5 na eth0:
Onde,
Sintaxe
ip -s -s n flush <IPAddress>
ip -s -s n flush 192.168.1.0/24
ip route show
ip r
ip r list
ip route list
ip r list [options] ip route
Resultado:
ip r list 192.168.1.0/24
Resultado:
Sintaxe
Exemplos:
Sintaxe
Exemplo:
ifconfig vs. ip
Comando do Linux obsoleto e seu equivalente com ip:
Comando antigo (obsoleto) Novo comando
ifconfig -a ip a
ifconfig enp6s0 down ip link set enp6s0 down
ifconfig enp6s0 up ip link set enp6s0 up
ifconfig enp6s0 192.168.2.24 ip addr add 192.168.2.24/24 dev enp6s0
ifconfig enp6s0 netmask 255.255.255.0 ip addr add 192.168.1.1/24 dev enp6s0
ifconfig enp6s0 mtu 9000 ip link set enp6s0 mtu 9000
ifconfig enp6s0:0 192.168.2.25 ip addr add 192.168.2.25/24 dev enp6s0
netstat ss
netstat -tulpn ss -tulpn
netstat -neopa ss -neopa
netstat -g ip maddr
route ip r
route add -net 192.168.2.0 netmask ip route add 192.168.2.0/24 dev enp6s0
255.255.255.0 dev enp6s0
route add default gw 192.168.2.254 ip route add default via 192.168.2.254
arp -a ip neigh
arp -v ip -s neigh
arp -s 192.168.2.33 1:2:3:4:5:6 ip neigh add 192.168.3.33 lladdr 1:2:3:4:5:6
dev enp6s0
arp -i enp6s0 -d 192.168.2.254 ip neigh del 192.168.2.254 dev wlp7s0
5.1 Laboratório
O laboratório será feitos com maquinas virtuais no Virtualbox, serão maquinas com 256M
de ram e 8Gb de disco, com uma instalação miníma do CentOS, sem interface gráfica ou
aplicativos de auxilio de configuração.
As redes utilizadas entre VMs serão redes dentro do Virtualbox ( pressione CRTL+H para
gerencia-las ) sem DHCP :
No laboratório com mais pessoas combinar o ultimo octeto para não repetir, expresso
pelo X.
Observações
Antes de iniciar as configurações em cada maquina desabilite o dhcp-cliente
E desabilite o iptables :
IP: 10.100.200.X
Prefixo: 24
Gateway: 10.100.200.1
5.1.2 Prática 02
Configure a maquina Lab-01 com :
Interface 1:
IP: 10.100.200.X
Prefixo: 24
Gateway: 10.100.200.1
Interface 2:
IP: 10.100.201.1
Prefixo: 24
Interface 3:
IP: 10.100.202.1
Prefixo: 24
IP: 10.100.201.10
Prefixo: 24
Gateway: 10.100.201.1
Objetivo: Configurar interface e rota nas maquinas, para verificação, fazer um teste de
conectividade entre as interfaces das maquinas e gateway. Não pode haver perdas de pacotes.
5.1.3 Prática 03
Configure a maquina Lab-01 com :
Interface 1:
IP: 10.100.200.X
Prefixo: 24
Gateway: 10.100.200.1
Interface 2:
IP: 10.100.201.1
Prefixo: 24
VLAN: 10
Interface 3:
IP: 10.100.202.1
Prefixo: 24
VLAN: 20
IP: 10.100.201.10
Prefixo: 24
Gateway: 10.100.201.1
VLAN: 10
Objetivo: Configurar interface, VLANs e rota nas maquinas, para verificação, fazer um
teste de conectividade entre as interfaces das maquinas e gateway. Não pode haver perdas de
pacotes.
5.1.4 Prática 04
Utilizando a estrutura da Prática 03, configure a maquina Lab-01 para rotear o trafego de
rede entre as interfaces. Para isso será necessário a execução de um comando de liberação de
fluxo de dados entre as interfaces:
5.1.5 Prática 05
Utilizando a estrutura da Prática 04, configure a maquina Lab-01 para rotear o trafego de
rede entre as interfaces e o gateway. Aqui será utilizado o NAT do iptables, comando que será
melhor detalhado em uma abordagem futura. A principio o comando a ser utilizado é :
ifcfg-<INTERFACE>
Exemplos:
• yes: Esta interface é definida como a rota padrão para o tráfego IPv4 | IPv6.
O mínimo de configuração necessária para uma interface ser carregada via DHCP, que
também é os parâmetros que necessitam sempre estar no arquivo, alterando somente os seu
valores em cada caso.
TYPE="Ethernet"
BOOTPROTO="dhcp"
ONBOOT="yes"
NAME="enp0s3"
DEVICE="enp0s3"
5.3 Laboratório
Configure a maquina Lab-01 para que no boot carregue com as seguintes configurações de
rede:
Interface 1:
IP: 10.100.200.X
Prefixo: 24
Gateway: 10.100.200.1
Interface 2:
IP: 10.100.201.1
Prefixo: 24
VLAN: 10
Interface 3:
IP: 10.100.202.1
Prefixo: 24
VLAN: 20
Configure a maquina Lab-02 para que no boot carregue com as seguintes configurações de
rede:
IP: 10.100.201.10
Prefixo: 24
Gateway: 10.100.201.1
VLAN: 10
Configure a maquina Lab-03 para que no boot carregue com as seguintes configurações de
rede:
IP: 10.100.202.10
Prefixo: 24
Gateway: 10.100.202.1
VLAN: 20
Objetivo: Configurar as maquinas para que a rede seja carregada automaticamente. Para
verificação, fazer um teste de conectividade entre as maquinas. Não pode haver perdas de
pacotes.