Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Ubuntu em Linha de Comando
Operação e administração eficiente do Ubuntu
Linux
 
 
 
Fabrício Bueno
 
2015
 
 
 
 
 
 
 
 
 
 
B928u Bueno, Fabrício.
Ubuntu em Linha de Comando / Fabrício Bueno. –
Garopaba, SC, 2015.
153p. : il.
 
Inclui referências.
 
1. Linux (Sistema Operacional de Computador). I. Título
 
CDU 004.451.9
 
Sobre o Autor
 
Fabrício Bueno é graduado em Ciência da Computação pela Pontifícia
Universidade Católica de Goiás e mestre em Engenharia da Computação pela
Universidade Federal de Goiás. Tem experiência profissional em diversas
instituições: SERPRO, Agência Goiana de Administração e Negócios
Públicos, Pontifícia Universidade Católica de Goiás, Universidade Federal de
Goiás, Universidade Federal da Fronteira Sul e Instituto Federal de Santa
Catarina (instituição onde atua como professor de Informática).
É autor dos livros técnicos “Otimização Gerencial em Excel” e “Estatística
para Processos Produtivos” pela editora VisualBooks, e dos livros
Estaticópolis: um jeito novo de aprender Estatística, Estatística Básica para
Processos Produtivos, Ubuntu em Linha de Comando, Introdução aos Testes
de Invasão, Design de Logomarcas com Inkscape e Tratamento de Imagens
com Gimp pela Amazon.
É também autor das obras de ficção Estações Marítimas: O Retorno ao
Continente, O Olho e Outros Contos Insólitos, Gonecity e Outrora e outros
contos insólitos pela Amazon.
Contatos com o autor podem ser feitos por meio de seu e-mail
fbbsantos@gmail.com
 
Como este livro está organizado
 
Pretende-se com este livro disponibilizar um texto introdutório e didático
sobre administração de sistemas Linux através de linha de comando. Os
capítulos deste livro apresentam uma breve introdução sobre os temas a
serem apresentados, seguidos de exemplos práticos da utilização dos
comandos, através de um diálogo com o leitor tendo em vista a importância
de um texto introdutório ter caráter didático, em contrapartida de um texto de
linguagem exclusivamente técnica (o que muitas vezes torna a leitura mais
cansativa). Não é objetivo deste livro cobrir de forma aprofundada os temas
discutidos, muito menos explorar de forma exaustiva todos os comandos
existentes. Reserva-se ao leitor a necessidade ou o interesse em aprofundar
em alguns dos temas aos quais é introduzido neste livro.
Este livo está organizado em 12 capítulos. Nos dois primeiros capítulos é
feita apresentação dos sistemas Linux e suas distribuições. No terceiro
capítulo o leitor é introduzido à práticas comuns em operar o sistema através
de linhas de comando. Nos capítulos quatro e cinco são tratados,
respectivamente, o sistema de arquivos Linux e gerência de usuários. No
capítulo 6 são tratadas propriedades e permissões de arquivos. O capítulo 7
traz uma apresentação de dois compactadores de arquivos bastante utilizados.
O capítulos 8 apresenta uma introdução à programação shell. Os capítulos 9 e
10 tratam, respectivamente, da gerência de processos e gerência de pacotes.
Nos capítulos 11 e 12 são discutidos comandos de gerência de hardware e
rede.
Todos os comandos e roteiros apresentados neste livro são baseados na
distribuição Ubuntu, que é baseada no Linux Debian. Entretanto, a maior
parte dos comandos aqui discutidos estão disponíveis em outras distribuições.
Sumário
Sobre o Linux
Sobre o Ubuntu
Linha de Comando
Shell
Sessões de Linha de Comando
Comandos e argumentos
Executando comandos com poderes de root
Produtividade em Sessões de Linha de Comando
Redirecionamento
Canalização
Sistema de arquivos
Nomenclatura de discos e partições
Identificando e manipulando partições
Diferenças entre diretórios e arquivos
Navegando pelo sistema de arquivos
Manipulando arquivos e diretórios
Executando Programas
Manipulando arquivos de texto
Diretórios importantes
/bin
/boot
/dev
/etc
/home
/lib
/media e /mnt
/opt
/proc
/root
/sbin
/tmp
/usr
/var
Montagem e informações de partições
Gerência de Usuários
Propriedade e Permissões de Arquivos
Propriedades de arquivos
Permissões de Arquivos
Permissões de Diretórios
Identificando Permissões e Propriedade
Alterando Permissões
Alterando Proprietário
Manipulando Arquivos Compactados
Arquivos Zip
Arquivos Tar
Programação Shell
Começando com o famoso “Olá mundo!”
Utilizando variáveis do shell
Criando variáveis
Utilizando parâmetros
Estruturas condicionais
Estruturas de repetição
Gerenciamento de Processos
Gerenciamento de Pacotes
DPKG
APT
Gerência de Hardware
Gerência de Rede
Referências Bibliográficas
Livros Publicados na Amazon
Sobre o Linux
 
Linux é um sistema operacional gratuito e de código aberto que pode
ser encontrado em diversas distribuições. O kernel do Linux, ou seja, o
núcleo deste sistema operacional, é baseado no sistema operacional Unix
(mais especificamente no Minix), que foi criado em 1991 pelo finlandês
Linus Torvalds. O nome Linux é uma junção de Linus e Unix.
Inicialmente, o kernel do Linux era um sistema monotarefa bastante
simples. Porém, um esforço conjunto que deste então tem envolvido milhares
de desenvolvedores em todo o mundo, o que tornou o projeto deste sistema
operacional cada vez mais complexo.
Atualmente o Linux continua sendo um sistema operacional gratuito, sob
licença GNU (GNU - Generic Public License, foi desenvolvida pela Free
Software Foundation para definir termos de uso, distribuição e modificação
de um programa) e tem atraído um número crescente de usuários, sendo o
segundo sistema operacional mais utilizado por empresas de TI graças ao fato
de ser um software aberto, gratuito, confiável, estável, flexível e de bom
desempenho. Segundo dados da ASSESPRO (Federação das Associações das
Empresas Brasileiras de Tecnologia da Informação) obtidos pela pesquisa
disponível em http://assespro.org.br/na-midia/releases/2014-04-04-linux-e-
usado-em-41-por-cento-das-empresas-brasileiras-de-ti-aponta-pesquisa/, 41%
das empresas de TI utilizam Linux. Entretanto, este número é bastante
inferior entre usuários finais. Segundo o portal w3schools.com, menos de 6%
dos usuários finais utilizam Linux, conforme Pesquisa disponível em
http://www.w3schools.com/browsers/browsers_os.asp.
Apesar de o kernel do Linux ser único, cujo responsável pela distribuição
é o Linux Kernel Organization, há várias distribuições disponíveis. De
acordo com o site DistroWatch.com há atualmente cerca de 791 distribuições
ativas de Linux. Cada distribuição possui características próprias como
diferentes interfaces, diferentes mantenedores e patrocinadores, público-alvo
específico, e um conjunto de softwares utilitários e de uso específicos
inclusos, todos sob licença GNU.
Não se deve classificar uma distribuição como melhor que outra, pois cada
uma visa servir a um público diferente. Além disso, não há distribuição
perfeita.
O que deve ser levado em conta no momento de escolher uma
distribuição (Valle, 2010):
 
● Os usuários desta distribuição são experts, usuários intermediários ou
usuários básicos?
● Deseja-se utilizar esta distribuição em desktops e/ou servidores?
● Há fontes de consulta suficientes em seu idioma?
● Trata-se de uma distribuição madura? Há quanto tempo ela existe? Há
riscos desta distribuição ser abandonada e seus usuários ficarem
desamparados?
● A distribuição possui sistema de atualização on-line eficiente?
 
Dentre as várias distribuições Linux disponíveis, pode-se citar:
 
● SUSE;
● Red Hat;
● Ubuntu;
● Slackware;
● Debian
 
Este livro adotou a distribuição Ubuntu, escolha que será justificada na
próxima seção. Entretanto, este livro não se restringe a esta distribuição, uma
vez que os comandos apresentadossão, em sua maioria, comuns a todos as
distribuições Linux.
Sobre o Ubuntu
 
Ubuntu é uma distribuição do sistema operacional Linux, cujo projeto foi
criado em 2004 pela Canonical, empresa fundada por Mark Shuttleworth. O
Projeto Ubuntu é guiado pela ideia de que softwares devem ser inclusivos,
sendo possível para qualquer um, em qualquer lugar, usar, compartilhar ou
modificar o Ubuntu (Mota, 2012).
Esta distribuição é voltada para usuários finais, portanto, de fácil uso.
Entretanto o Ubuntu possui versões para diversas arquiteturas
computacionais e é comumente utilizada em servidores. O usuário do Ubuntu
encontrará praticamente todos os recursos disponíveis no Windows e no
Macintosh OS X, e, em alguns casos, recursos até mesmo mais vantajosos.
No Ubuntu, por exemplo, não é necessário utilizar CDs, DVDs, ou fazer
downloads de drivers para instalar hardwares. Isto é feito diretamente pelo
sistema operacional. Também não é necessário utilizar CDs, DVDs ou fazer
downloads de arquivos executáveis (que muitas vezes traz softwares
maliciosos) para instalar softwares e suas atualizações. O próprio Ubuntu
busca os softwares e suas atualizações nos servidores cadastrados na
Canonical.
E por falar em softwares maliciosos (vírus, cavalos de tróia, softwares
espiões, e outros), o Linux, em geral, é menos suscetível a estas ameaças,
pois a arquitetura do sistema operacional que lhe oferece maior segurança.
Linha de Comando
 
Antes da invenção e difusão das interfaces gráficas com uso de mouse,
operar um sistema operacional consistia apenas em um conjunto de linhas de
comando em um terminal pouco atrativo graficamente. Que o digam os
antigos usuários de DOS, Unix, Linux, e outros. Atualmente, todos os
sistemas operacionais voltados para o usuários finais oferecem interfaces
amigáveis, dispensando o uso de linhas de comando.
Entretanto, os bons e velhos terminais continuam disponíveis, seja no
Windows, Macintoch OS X, Linux, Unix e outros. Os usuários mais clássicos
argumentariam que linhas de comando ainda devem ser utilizadas pois era
assim que se trabalhava antigamente. Mas existe um argumento mais válido
para justificar a operação de um sistema operacional via linhas de comando:
eficiência.
A interface gráfica por si só é um overhead (pode ser definido como
recursos gastos indiretamente na execução de uma tarefa). Já os terminais
requerem poucos recursos dos computadores. Os comandos, executados
diretamente em terminais, são mais flexíveis e ágeis do que softwares que
providos de interface (Thomas, 2011).
É claro que há o contra-argumento de que é mais fácil utilizar um software
com interface gráfica do que ter que decorar comandos
“desnecessariamente”. Evidentemente é um argumento válido, ainda mais se
eficiência for analisada apenas do ponto de vista operacional, ou seja, curva
de aprendizagem e facilidade de uso.
Cabe ao usuário, portanto, decidir como irá operar o sistema operacional
de forma satisfatória e conveniente a seus propósitos.
Shell
 
Os comandos são interpretados por softwares conhecidos como shells.
Shell em inglês significa concha. O termo faz referência a conchas de
moluscos e crustáceos, um trocadilho, uma analogia à capacidade da concha
envolver e proteger o interior, no caso, o sistema operacional.
Sessões de Linha de Comando
 
Basicamente, pode-se iniciar uma sessão de linha de comando de duas
maneiras:
 
● Utilizando um terminal: no Ubuntu pode-se utilizar o terminal
acessando o menu Aplicativos > Acessórios > Terminal na versão clássica do
Gnome, ou simplesmente digitando “terminal” na busca do Painel Inicial. Há
vários softwares terminais disponíveis, com diferentes recursos e interfaces,
entretanto a função deles é exatamente a mesma;
● Utilizando um console virtual: basta teclar Ctrl +Alt+F1 e a interface
gráfica irá desaparecer dando lugar a um prompt de login. Pode-se voltar à
interface gráfica teclando Ctrl+Alt+F7. No Ubuntu há vários consoles
virtuais, que vão de F1 a F6. Eles são bastante úteis quando ocorre alguma
“pane” na interface gráfica, permitindo a correção do problema sem recorrer
ao fatídico CtrlZ+Alt+Del de outro(s) sistema(s) operacional(is). 
 
Independente da opção escolhida, o prompt de linha de comando tem o
seguinte formato:
 
nome-do-usuário@nome-do-computador:~$
 
A primeira parte do prompt, do lado esquerdo do sinal @, exibe o nome de
usuário. Após o sinal @ é exibido o nome do computador. Portanto, se um
usuário de nome Ricardo estiver usando um computador chamado desktop, o
prompt será:
 
ricardo@desktop:~$
 
O sinal “:” divide o prompt em duas partes. À esquerda constam o nome
do usuário e do computador. À direita consta o diretório do sistema de
arquivos que está sendo acessado. O símbolo “~” indica que o usuário está
em sua pasta pessoal, ou seja, no diretório home/ricardo (maiores explicações
sobre o sistema de arquivo e seus diretórios serão apresentadas na sessão
específica).
Já os prompts abaixo, indicam, respectivamente, que o usuário ricardo está
nos diretórios /home/ricardo/Documentos (lembre-se que “~” indica
home/ricardo) e /etc.
ricardo@desktop:~/Documentos$
ricardo@desktop:/etc$
 
Comandos e argumentos
 
Alguns comandos podem ser acionados por si só, ou seja, apenas com o
nome do comando. Por exemplo, basta digitar o comando ls, que lista os
arquivos de um determinado diretório (mais detalhes deste comando serão
apresentados posteriormente), e teclar Enter que o comando funcionará.
Entretanto alguns comando necessitam de argumentos para funcionar
corretamente. O comando mkdir, por exemplo, cria um diretório. Este
comando sozinho não tem nenhum efeito, quando digitado. Deve fornecido
um nome diretório a ser criado como argumento.
Exemplo:
 
mkdir NovoDiretorio
 
Este comando criará o diretório NovoDiretorio. Mais detalhes sobre este
comando serão apresentados posteriormente.
A maioria dos comandos possui opções que alteram sua funcionalidade de
acordo com a necessidade do usuário. Voltando ao comando ls, pode-se, por
exemplo, utilizar a opção - l, que exibe uma série de informações dos
arquivos listados. Utilizando esta opção, o comando passaria a ser digitado da
seguinte forma:
 
ls -l
 
A figura abaixo apresenta o resultado deste comando executado no
diretório /usr.
 
 
 
Várias opções podem ser combinadas simultaneamente, produzindo
diferentes resultados. Para descobrir quais opções existem para um
determinado comando, basta digitar o nome do comando seguido de --help.
 
ls --help
 
Para obter informações mais detalhadas sobre o funcionamento de um
comando, pode-se acionar o manual do mesmo, bastando digitar man
(abreviação de manual) e o nome do comando.
 
man ls
 
 
Executando comandos com poderes de root
 
Por questões de segurança, alguns comandos só podem ser executados
com poderes de superusuário, ou seja, usuário root. Normalmente tratam-se
de tarefas administrativas que afetam a configuração do sistema e partições
protegidas que contém arquivos do sistema operacional, de aplicações ou de
outros usuários que não podem ser manipulados por usuários comuns.
Para executar um comando com poderes de root, basta digitar sudo
(SuperUser Do – superusuário faz (ou faça)). Antes da execução do comando,
o Linux solicita a senha de root.
Exemplo:
 
sudo cp arquivo.txt /etc
 
Este comando permite que um arquivo chamado arquivo.txt seja copiado
para /etc.
A senha de root deve ser mantida sob os devidos cuidados, e as operações
realizadas com privilégios de superusuário devem ser feitas com critério, pois
podem causar danos ao sistema operacional,aos aplicativos e aos demais
usuários.
 
Produtividade em Sessões de Linha de Comando
 
Uma importante ferramenta no prompt é o histórico de comandos.
Digitando history pode-se ver uma extensa lista de comandos digitados.
Como se trata de uma lista extensa, é possível definir quantos comandos
serão exibidos: history 5, history 10, history 20, …
A figura abaixo exibe parte dos 2001 comandos já digitados.
 
 
 
 
 
A cada comando exibido nesta lista é atribuído um número. Para reutilizar
um comando sem redigitá-lo, basta digitar ! + número. Exemplo: !320. O
sinal de exclamação pode ser utilizado também para reutilizar algum
comando específico. Por exemplo, !sudo irá procurar no histórico a última
linha com o comando sudo e reutilizá-la (neste caso será reexecutado o
comando 1999). Já o comando !! irá reutilizar o último comando digitado.
Há também várias teclas de atalho que tornam mais produtivo o trabalho
em sessões de linha de comando. A seguir são apresentados alguns atalhos
(uma lista completa pode ser vista em (Motta, 2013)).
 
● ↑ ou ↓: Navega pelo histórico de comandos;
● Tab: Autocompleta comando ou nome de arquivo ou diretório;
● Ctrl + ← ou →: Mover cursor palavra por palavra;
● Ctrl + A: Move o cursor para o início da linha;
● Ctrl + E: Move o cursor para o fim da linha;
● Ctrl + Y: Recupera linha de comando deletada;
● Ctrl + L: Limpa a tela;
● Ctrl + C: Para a execução do programa corrente;
● Ctrl + Z: Envia programa para segundo plano;
● Ctrl + R: Pesquisa no histórico de comandos;
● Ctrl + D: Encerra sessão de linha de comando;
 
Redirecionamento
 
O redirecionamento é útil para enviar a saída de um comando para um
arquivo, ao invés de exibi-la na tela. Por exemplo, caso se queira registrar em
um arquivo o conteúdo de um diretório, pode-se utilizar o seguinte comando:
 
ls -l > listagem.txt
 
Será criado o arquivo listagem.txt e seu conteúdo será a listagem do
diretório corrente obtida pelo comando ls -l. Caso o arquivo listagem.txt já
exista, o mesmo será substituído. Se o arquivo já existir e usuário desejar
apenas adicionar um conteúdo ao final do arquivo, basta utilizar o comando:
 
ls -l >> listagem.txt
 
Canalização
 
Canalização é semelhante ao redirecionamento, entretanto, ao invés de
passar a saída de um comando para um arquivo, a canalização passa a saída
de um comando para outro. Por exemplo, caso se queira exibir na listagem de
um diretório os arquivos que contenham a palavra “trabalho”, basta executar
o comando:
 
ls | grep trabalho
 
A listagem do diretório gerada pelo comando ls será passada ao comando
grep trabalho, que filtrará as entradas que possuírem a palavra “trabalho” e
exibirá o resultado na tela.
Sistema de arquivos
 
Um computador pode acessar diversos tipos de dispositivos de
armazenamentos: discos rígidos, pen-drives, disquetes, cartões de memória,
etc. Nestes dispositivos os dados são armazenados de forma binária, ou seja,
zeros e uns, e podem estar distribuídos por diversas partições (que são
divisões lógicas destes dispositivos) (Valle, 2010).
Um sistema de arquivos refere-se à forma como os dados são
armazenados, organizados e acessados em cada partição do disco (Mota,
2013), sendo que cada partição pode ter seu próprio sistema de arquivos. O
Linux reconhece diversos sistemas de arquivos, sendo os principais:
 
● Ext2: sistema de arquivos estendido (extended filesystem). O Ext 2 foi
o primeiro sistema de arquivos para uso exclusivo no Linux. Apesar de não
ser mais utilizado atualmente em desktops, uma vez que possui capacidade de
recuperação de falhas limitado, ainda é indicado para dispositivos móveis de
memória flash, como pendrives;
● Ext3: em relação ao Ext2, apresenta uma significativa vantagem:
Journaling, ou seja, é um sistema de arquivos “jornalizado”. A expressão
Journaling refere-se à capacidade de um sistema de arquivos recuperar dados
em caso de falhas (queda de energia, por exemplo). Isto é feito através de um
sistema de log que registra as alterações antes que as mesmas ocorram,
permitindo a restauração do sistema de arquivos após falhas;
● Ext4: é o sistema de arquivos mais recomendado atualmente. Supera o
Ext3 em performance, capacidade de armazenamento e recursos de
manutenção;
● vfat: sistema de arquivos dos sistemas Windows9x;
● ntfs: sistema de arquivos de rede utilizados por versões mais recentes
do Windows;
 
O Linux também reconhece diversos outros sistemas de arquivos: HPFS,
ReiserFS, XFS, JFS, ISO 9660 (utilizados por CD-ROM e DVD) e
outros. 
Nomenclatura de discos e partições
 
Conhecer a terminologia do Linux para referenciar dispositivos de
armazenamento é essencial para administração deste sistema operacional. A
nomenclatura dos dispositivos é baseada na tecnologia utilizada. Dispositivos
IDE são designados pelas iniciais hd. Caso haja dois dispositivos IDE numa
mesma porta, acrescenta-se uma letra: o primeiro dispositivo será hda e o
segundo hdb.
Dispositivos SATA, SAS, SCSI e USB são designados pelas iniciais sd (a
exceção fica para drive de fita SCSI, que recebe a nomenclatura st, e
CDROM/DVD SCSI, que recebe a nomenclatura sr). Assim como no IDE,
cada dispositivo recebe uma terceira letra de forma a ordená-los: sda, sdb,
sdc, etc.
Um dispositivo de armazenamento pode ser dividido em várias partições.
Do ponto de vista prático, uma partição funciona como um sistema de
arquivos independente. Há três tipos de partição:
 
● Partição primária: pode ser inicializável, ou seja, é possível dar boot
(inicializar o sistema operacional) a partir desta partição. Normalmente a
primeira partição de um HD é inicializável;
● Partição estendida: não pode ser inicializável e nem recebe dados
diretamente. Para receber dados deve ser criada uma partição lógica dentro da
partição estendida. Só é possível haver uma partição estendida por HD;
● Partição lógica: é criada dentro da partição estendida para receber
dados. Podem ser criadas várias partições lógicas dentro de uma estendida.
 
As partições são numeradas. As primárias e estendidas são numeradas de 1
a 4. Já as partições lógicas recebem numeração a partir de 5. Estes números
são acrescidos ao final da identificação de um dispositivo.
Por exemplo, suponha um HD designado por sda. Este HD possui duas
partições primárias, uma estendida e duas partições lógicas dentro da
estendida. Logo as partições primárias e estendidas serão, respectivamente:
sda1, sda2 e sda3. As partições lógicas serão: sda5 e sda6.
Todos os dispositivos são mapeados no diretório /dev. Portanto, para se
referir à segunda partição do dispositivo sdb, deve-se fazer referência ao
diretório /dev/sdb2, conforme será discutido na seção de montagem de
sistemas de arquivos.
 
Identificando e manipulando partições
 
Informações sobre as partições de um disco podem ser visualizadas
através do comando disktype. Este comando requer como argumento um
dispositivo de armazenamento ou uma partição específica. Exemplo:
 
disktype /dev/sdb
 
A saída deste comando é exemplificada abaixo:
 
Neste exemplo existem partições do disco sdb. A primeira partição, de
aproximadamente 100GB, possui um sistema de arquivos NTFS. A segunda é
uma partição estendida do tipo Ext3 de aproximadamente 50GB. As partições
seguintes são partições lógicas:
 
● Partição 5: possui aproximadamente 500MB e sistema de arquivos
Ext3;
● Partição 6: possui aproximadamente 10GB e sistema de arquivos Ext3.
O nome do volume é “home” e o ponto de montagem é /home (maiores
informações sobre pontos de montagem serão apresentadas ao longo deste
capítulo);● Partição 7: possui aproximadamente 22GB e sistema de arquivos Ext3.
O nome do volume é “usr” e o ponto de montagem é /usr;
● Partição 8: possui aproximadamente 2GB e sistema de arquivos NTFS;
● Partição 9: possui aproximadamente 18GB e sistema de arquivos Ext3.
O nome do volume é “/” e o ponto de montagem é /;
● Partição 10: possui aproximadamente 2GB e sistema de arquivos
SWAP.
 
Para manipular partições pode-se utilizar o comando fdisk,conforme o
exemplo:
 
fdisk /dev/sdb
 
Algumas das opções deste comando são:
 
● a: alterna a partição inicializável;
● d: exclui uma partição;
● l: lista os tipos de partição conhecidos;
● m: mostra menu de ajuda;
● n: cria uma nova partição;
● p: mostra a tabela de partição;
● q: sai sem salvar as alterações;
● w: grava a tabela no disco e sai.
Ao utilizar a opção p, as seguintes informações são apresentadas:
 
 
No cabeçalho aparecem informações sobre o dispositivo: número de
cabeças, setores e cilindros, tamanho dos setores, tamanho de entrada e saída,
e identificador do disco. Em seguida são apresentados, respectivamente, os
nomes das partições, qual delas é inicializável (marcado com *), o início e o
fim de cada partição, número de blocos, e a identificação e descrição do
sistema de arquivos.
Após criar uma partição, deve-se formatá-la. Os comandos para formatar
uma partição utiliza-se o comando mkfs.[sistema de arquivos] seguido do
nome da partição. Exemplos:
 
mkfs.ext3 /dev/sda1
mkfs.ext4 /dev/sda1
mkfs.ntfs /dev/sda2
mkfs.vfat /dev/sda2
 
Diferenças entre diretórios e arquivos
 
Um arquivo consiste em um conjunto de blocos do disco cujo conteúdo
são dados pertencentes a um usuário (ou aplicativo) ou instruções para
execução de um programa. Os diretórios se assemelham a arquivos em vários
aspectos:
 
● Possuem nomes assim como os arquivos;
● Possuem propriedades, assim como os arquivos;
● Também são armazenados em blocos;
● Possuem inode;
 
Entretanto os diretórios não possuem um conteúdo significativo para o
usuário ou aplicações. Na verdade, diretórios são apenas abstrações de um
sistema de arquivos. Em outras palavras, são arquivos que contém o nome e
outras informações básicas de outros arquivos, agrupando-os naquilo que
conhecemos como “pastas de arquivos”.
Portanto, quando vemos uma árvore de diretórios, com seus respectivos
arquivos, bastante organizada, na verdade todos os arquivos estão espalhados
desordenadamente pelo disco. Sendo cada diretório um arquivo interpretado
como uma pasta que contém outros arquivos.
 
Navegando pelo sistema de arquivos
 
No Linux todos os diretórios e partições estão distribuídos a partir da raiz
do sistema de arquivos. A raiz, ou root, é indicada pelo símbolo “/”. As
partições e diretórios derivados da raiz, ou seja, contidos na raiz, são
identificados através de seus caminhos, ou paths. Seguem alguns exemplos:
 
● /home/usuario/Documentos;
● /usr/bin;
● /mnt.
 
Para verificar qual diretório está sendo acessado pode-se tanto observar as
informações no prompt, quanto utilizar o comando pwd. Para alterar o
diretório, utiliza-se o comando cd (iniciais de Change Directory) associado a
um argumento: o diretório de destino.
Exemplo:
 
cd Documentos
 
Ao utilizar o comando cd é preciso entender a diferença entre caminhos
absolutos e relativos. O exemplo acima usa um caminho relativo, ou seja, o
caminho parcial para o diretório Documentos, levando-se em conta que o
usuário está em sua pasta pessoal. Generalizando, ao fornecer um caminho
relativo, o sistema operacional interpreta que se trata de um diretório a partir
do diretório atual.
Seguem outros exemplos do comando cd utilizando caminhos relativos a
partir da pasta pessoal do usuário.
 
cd Downloads
cd Documentos/Escola
cd Musicas
 
Ao utilizar caminhos relativos, pode-se fazer uso dos caracteres “..”. Estes
caracteres indicam que o caminho relativo deve ser tomado a partir do
diretório acima. Exemplo: suponha que ao digitar pwd o usuário verifique
que está no diretório /home/ricardo/Documentos; caso ele queira ir ao
diretório Downloads, não bastará digitar cd Downloads, ele deverá informar
ao comando cd que o caminho relativo deve ser tomado a partir do diretório
acima, ou seja, /home/ricardo. Para tanto, o comando a ser digitado será:
 
 cd ../Downloads
 
Já os caminhos absolutos indicam o caminho completo de um diretório,
desde a raiz. Portanto, ao utilizar um caminho absoluto, o usuário não precisa
se preocupar com qual é o diretório corrente.
Exemplos do comando cd com caminho absoluto:
 
cd /home/ricardo/Downloads
cd /home/ricardo/Documentos/Escola
cd /etc
 
Conforme já citado anteriormente, o comando para se listar o conteúdo de
um determinado diretório é ls. Algumas das opções deste comando são:
● -l: lista informações detalhadas dos arquivos e diretórios, como
permissões, proprietário, tamanho, data e hora de criação (ou da última
modificação);
● -a: exibe todos os arquivos, inclusive arquivos ocultos;
● -h: exibe o tamanho dos arquivos em KB, MB ou GB, ao invés de
mostrá-lo em byte;
● -S: ordena listagem pelo tamanho;
● -t: ordena listagem pela data e hora de criação ou última modificação;
● -u: exibe data e hora do último acesso ao arquivo ou diretório;
● -i: mostra o número do inode do arquivo ou diretório;
 
Estas opções podem ser combinadas no comando ls:
 
ls -lha
 
Abaixo é exibido, parcialmente, as informações listadas pelo comando
acima no diretório /etc.
As primeiras colunas referem-se a permissões e proprietários dos arquivos
e diretórios. Este tema será explorado em capítulo específico posteriormente.
Caso o usuário queira obter informações sobre data e hora do último
acesso a arquivos e diretórios, deverá acrescentar a opção -u. Exemplo:
 
ls -lahu
 
Informações mais detalhadas sobre um arquivo ou diretório podem ser
obtidas com o comando stat. No exemplo abaixo são solicitadas informações
detalhadas do arquivo adduser.conf, no diretório /etc:
 
stat adduser.conf
 
As informações retornadas são exibidas abaixo:
Além do nome do arquivo são exibidos:
 
● Tamanho do arquivo;
● Número de blocos: cada arquivo ocupa um conjunto de blocos. Os
blocos consistem em um conjunto de bytes. São a menor quantidade de
informação acessíveis em um sistema de arquivos. Informações mais
detalhadas podem ser obtidas em (Mota, 2012);
● Tamanho do bloco: que neste caso é de 4096 bytes;
● Dispositivo onde o arquivo se encontra;
● Inode do arquivo: inode é um conjunto de informações sobre o arquivo
ou diretório. O inode fica armazenado no primeiro bloco de um arquivo ou
diretório. Maiores informações sobre inode podem ser obtidas em (Mota,
2012);
● Permissões;
● Usuário proprietário;
● Grupo proprietário;
● Número de links do arquivo;
● Data do último acesso;
● Data da última modificação do conteúdo;
● Data da última alteração de propriedades do arquivo (exemplo:
permissão).
 
O comando ls também aceita um diretório ou caminho como argumento,
da mesma maneira que o comando cd. Portanto, não é necessário alterar o
diretório corrente para depois utilizar o comando ls. Basta informar qual
diretório se deseja listar.
 
ls /usr -a
 
O exemplo acima lista todo o conteúdo de /usr, inclusive arquivos ocultos.
Para buscar um arquivo ou diretório sem necessariamente fazer uma
pesquisa manual (ou visual) pelo sistema de arquivos, pode-se utilizar o
comando find. O exemplo abaixo procura pelo arquivo documento.odt na
pasta pessoal do usuário ricardo.
 
find /home/ricardo -name 'documento.odt'A opção -name indica que será fornecida uma expressão de busca,
podendo inclusive ser fornecido nome parcial de um arquivo ou diretório.
Exemplo:
 
find /home/ricardo -name 'document*'
 
Outra opção de busca por arquivos é o comando locate. Este comando
possui boa performance uma vez que utiliza um banco de dados de arquivos.
Exemplo:
 
locate documento
 
Neste exemplo será procurado em todo o sistema de arquivos um arquivo
ou diretório que contenha a palavra documento.
O banco de dados utilizado pelo comando locate é gerado pelo comando
updatedb. Este comando faz uma indexação de todos os arquivos existentes
nas partições montadas, inclusive partições de dispositivos removíveis
(Pendrives, CDs, DVDs, etc). Sua execução poderá demorar algum tempo,
caso haja uma grande quantidade de arquivos a serem indexados. O comando
updatedb não necessita de argumentos em sua execução.
Manipulando arquivos e diretórios
 
O Linux é case sensitive, portanto, letras maiúsculas e minúsculas são
interpretadas diferentemente. O caminho /home/usuario/Documentos, por
exemplo, representa diretório diferente de /home/Usuario/Documentos. Da
mesma forma, os nomes de arquivo arquivo1 e Arquivo1, representam dois
arquivos diferentes.
Tantos os arquivos quanto os diretórios podem conter espaços, números
ou outros símbolos (com exceção de “/”). Portanto, são válidos os nomes e
caminhos:
 
● arquivo 1
● arquivo_1
● arquivo-1
● arquivo.1
● /home/usuario/Documentos/pasta 1
● /home/usuario/Documentos/pasta_1
● /home/usuario/Documentos/pasta-1
● /home/usuario/Documentos/pasta.1
 
Um arquivo ou diretório que comece com o caractere “.” é considerado
oculto pelo sistema de arquivos do Linux, portanto ele não aparecerá em
gerenciadores de arquivos ou comandos de listagem, a menos que seja
explicitamente requerida a exibição destes arquivos ou diretórios.
Nos sistemas Linux, os arquivos não costumam possuir extensão, como
ocorre em outros sistemas operacionais. Arquivos executáveis, por exemplo,
são identificados pelo sistema através de atributos específicos. A exceção
normalmente fica para arquivos de configuração (que possuem a extensão por
.conf) e arquivos pessoais, cuja extensão indica o tipo de arquivo (exemplos:
.doc, .odt, .jpg, .svg).
Os arquivos podem ser copiados através do comando cp (iniciais de Copy
Folder), devendo ser informado, como argumentos, o arquivo a ser copiado e
o diretório de destino. Exemplos:
 
cp arquivo /tmp
cp /home/usuario/Documentos/arquivo.doc /home/usuario /Downloads
cp arquivo.doc arquivo.doc1
 
No último exemplo, é criada uma cópia de arquivo.doc no mesmo
diretório em que esse arquivo se encontra. É um procedimento comumente
utilizado para fazer cópias de segurança de arquivos.
Uma importante opção deste comando é -r. Esta opção permite a cópia de
diretórios de forma recursiva, ou seja, os diretórios dentro do diretório
especificado também serão copiados.
Outras opções de cp são exibidas abaixo:
 
● -v: mostra um resumo das ações do comando durante sua execução.
● -p: mantém propriedades relativas às permissões dos arquivos e seu
proprietário;
● -u: executa a cópia se o arquivo destino não existir. Caso o arquivo
destino exista, só executa a cópia se o arquivo destino for mais antigo do que
o arquivo de origem;
 
O comando mv (MoVe) permite que se mova um arquivo ou diretório.
Sua utilização é similar ao comando cp, bastando indicar o arquivo de origem
e o destino (porém, para este comando não é necessário utilizar a opção -r
para mover diretórios) . O exemplo abaixo move o arquivo “arquivo.doc”
para o diretório /tmp.
 
mv arquivo.doc /tmp
 
Já o próximo exemplo move o diretório Downloads/softwares para o
diretório /tmp.
 
mv ~/Downloads/softwares /tmp
 
Este comando também pode ser utilizado para renomear arquivos ou
diretórios. Basta informar como destino outro nome para o arquivo ou
diretório que se pretende renomear. Exemplo:
 
mv arquivo.doc arquivo1.doc
 
Para deletar um arquivo ou diretório, usa-se o comando rm (RemoVe),
bastando fornecer como argumento o arquivo a ser excluído. Exemplo:
 
rm arquivo1.doc
 
Ao remover um diretório que contenha outros diretórios, é necessário
utilizar a opção -r. Outra opção que pode ser útil especialmente em remoções
recursivas é a opção -i, que solicitará confirmação do usuário a cada remoção.
Uma alternativa ao comando rm é o comando wipe (que pode ser
instalado com o comando apt-get install wipe). Este comando sobrescreve os
bytes existentes com dados aleatórios, impedindo assim que o arquivo seja
recuperado. Seu uso é idêntico ao comando rm, exigindo apenas como
argumento o arquivo a ser apagado.
O wipe também possui algumas opções:
 
● -r: remoções recursivas;
● -f: não solicita confirmação para remoção;
● -q: repete o processo de sobrescrever o arquivo apagado apenas 4 vezes
(o padrão é 34 vezes).
 
O Linux permite a criação de links para arquivos, ou seja, arquivos que
fazem referência a outros arquivos em diferentes localidades. Isto pode ser
útil quando se tem um arquivo que é constantemente acessado e que está
localizado em um diretório de “difícil acesso”. O comando para criação de
links é ln. Como argumento, devem ser fornecidos o nome do arquivo e o
nome do link a ser criado.
 
ln Documentos/arquivo1.doc lnk_arquivo1.doc
 
A partir deste comando, todo acesso ao arquivo “linkado” (seja para
edição, exibição ou execução) pode ser feito através de seu link, sem
necessidade de digitar o caminho do arquivo original. Entretanto, este
comando cria por padrão o que se chama de hard link. Um hard link
representa um segundo nome para um arquivo (não pode ser aplicado a
diretórios), que possui o mesmo tamanho do arquivo original e cujas
alterações serão replicadas para o arquivo original. Porém, isto pode gerar um
desperdício de espaço no sistema de arquivos. Portanto, é indicado o uso da
opção -s, que permite criar um link simbólico, ou soft link.
 
ln -s Documentos/arquivo1.doc lnk_arquivo1.doc
 
O link simbólico pode ser utilizado tanto para diretórios quanto para
arquivos. O link simbólico permite também a referência a arquivos ou
diretórios em partições diferentes.
O hard link, apesar de ocupar mais espaço em disco, ser limitado a
arquivos e não permitir a referência a partições diferentes, possui algumas
vantagens: como um hard link cria um segundo nome para o arquivo, caso
um dos nomes do arquivo seja apagado, o arquivo ainda continua acessível
pelo outro nome; um hard link permite um acesso mais rápido ao arquivo do
que um soft link.
Há dois comandos específicos para diretórios: mkdir e rmdir. O comando
mkdir cria diretórios. O único argumento é o nome (e caminho, caso
necessário) do diretório a ser criado. Exemplo
 
mkdir meudiretorio
 
Já o comando rmdir remove diretórios. Seu uso é similar ao mkdir:
 
rmdir meudiretorio
 
 
Executando Programas
 
Quando um comando é digitado, o Linux tenta encontrá-lo nos diretórios
armazenados na variável de sistema $PATH. Para verificar o conteúdo desta
variável é necessário utilizar o comando echo.
 
echo $PATH
 
A executar este comando, um conjunto de diretórios será exibido.
 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/
sbin:/usr/bin:/sbin:/bin:/usr/games
 
Se o usuário digitar um comando que não é encontrado nestes diretório,
receberá a mensagem de erro: “Comando não encontrado”. Entretanto, o
Ubuntu apresentará duas possíveis soluções para este erro:
● Fará sugestões de comandos similares (o que é bastante útil caso o
usuário tenha cometido apenas um errode digitação);
● Buscará o comando nos seus repositórios de softwares. Se encontrar,
irá fornecer uma linha de comando para instalar o software.
 
Por exemplo, caso seja digitado udv, o Ubuntu retornará a seguinte
mensagem:
 
O programa 'udv' não está instalado no momento. Você pode instalá-
lo digitando: sudo apt-get install ncbi-tools-x11
 
Suponhamos outra situação: caso o usuário queira executar um programa
chamado MeuPrograma obtido por meio de download e armazenado no
diretório Downloads, em sua pasta pessoal, ele pode acessar este diretório e
digitar:
 
./MeuPrograma
 
Desta forma Linux buscar o comando apenas no diretório corrente. Outra
possibilidade é fornecer o caminho absoluto para o programa.
 
/home/Usuario/Downloads/MeuPrograma
 
Manipulando arquivos de texto
 
Arquivos simples de texto são bastante utilizados para armazenar
informações de instalação de softwares, configuração e scripts. Podem ser
criados, editados e visualizados por editores simples, sem interface gráfica.
Um exemplo é o editor Nano. Para utilizá-lo, basta digitar nano. Pode-se
também digitar nano + nome do arquivo.
 
nano arquivo.txt
 
Se o arquivo existir, o editor o abrirá para edição. Caso não exista, o editor
poderá criar um arquivo com o nome digitado. As instruções de operação do
Nano, que na verdade são atalhos do teclado, são apresentadas na parte
inferior do editor, conforme exibido na figura abaixo.
O Nano possui várias opções que possuem efeitos bastante particulares
cuja praticidade depende das necessidades do usuário. Porém, duas opções
merecem destaque: -t e -m. A primeira faz com que o Nano salve
automaticamente o documento, sem perguntar ao usuário. E a segunda
habilita o uso do mouse.
Caso a intenção seja apenas uma rápida visualização do arquivo texto,
pode-se usar o comando less.
 
less arquivo.txt
 
Em um arquivo texto, pode-se procurar por palavras usando o comando
grep. Como argumentos, deve-se fornecer a palavra a ser procurada e o nome
do arquivo. Exemplo:
 
grep palavra arquivo.txt
 
O resultado será a exibição do conteúdo do arquivo com destaque para as
ocorrências da palavra pesquisada. Nada será exibido se a palavra não for
encontrada. Caso queira se procurar um trecho de texto, usa-se “”. Exemplo:
 
grep “buscando um trecho” arquivo.txt
 
A opção -i permite que a pesquisa ocorra sem que se diferencie as letras
minúsculas e maiúsculas. Já a opção -n exibe o número da(s) linha(s) onde a
palavra pesquisada foi encontrada.
Em algumas situações, pode ser necessário comparar dois arquivos ou
diretórios verificando suas diferenças. Para tanto, pode-se usar o comando
diff para mostrar as diferenças de dois arquivos ou diretórios. Este comando
utiliza como parâmetros os nomes dos arquivos ou diretórios a serem
comparados.
 
diff arquivo1 arquivo2
 
Abaixo são apresentadas algumas opções do comando diff :
 
● -i: ignora caixa do caractere;
● -w: ignora espaço em branco;
● -q: apenas informa que os diretórios ou arquivos são iguais ou
diferentes, sem exibir as diferenças entre eles;
● -r: compara diretórios de forma recursiva;
 
 
 
Diretórios importantes
 
Os sistemas Linux, independente da distribuição, têm uma organização
básica dos principais diretórios em comum, pois seguem o Padrão de
Hierarquia de Sistema de Arquivos (Filesystem Hierarchy Standard (FHS) –
disponível em www.pathname.com/fhs) (Moeler, 2012). Cada um destes
diretórios possui uma função específica. É importante que o usuário conheça
o nome e conteúdo destes diretórios.
Seguindo a ordem alfabética, os principais diretórios e seus conteúdos
serão descritos nas próximas subseções.
/bin
 
Contém arquivos executáveis essenciais para o sistema operacional;
/boot
 
Contém o Kernel Linux e arquivos relacionados ao boot loader.
/dev
 
Contém arquivos virtuais que representam dispositivos de hardware, ou
seja, arquivos que servem de ligação com os dispositivos de hardware.
/etc
 
Contém arquivos de configuração do sistema operacional e dos serviços de
rede, além de arquivos executáveis relacionados à inicialização do sistema e
seus serviços.
/home
 
Contém diretórios pessoais dos usuários.
/lib
 
Contém módulos do Kernel, drivers de dispositivos e arquivos de
biblioteca necessários aos softwares.
/media e /mnt
 
Contém subdiretórios onde dispositivos de armazenamento temporários
(HD externo, pendrive, CD, DVD, etc.) podem ser montados. Montar um
dispositivo de armazenamento consiste em criar um diretório onde o
conteúdo do dispositivo é exibido e pode ser manipulado, sem que de fato
este conteúdo seja efetivamente copiado para o sistema de arquivos onde o
Linux está instalado. Há comandos específicos para montagem de
dispositivos, porém o Ubuntu detecta e monta automaticamente qualquer
dispositivo conectado ao computador.
 
/opt
 
Neste diretório são instalados pacotes opcionais que não fazem parte da
distribuição do Linux em uso.
/proc
 
Diretório virtual. Não possui arquivos, apenas referências a informações
dinâmicas do sistema geradas constantemente pelo kernel. Exemplos:
estatísticas de uso de memória, informações da cpu.
/root
 
Diretório pessoal para o usuário root.
 
/sbin
 
Executáveis necessários para manutenção do sistema. Normalmente só
utilizáveis pelo usuário root.
 
/tmp
 
Contém informações temporárias do sistema operacional. Tem seu
conteúdo totalmente apagado a cada inicialização do sistema.
 
/usr
 
O diretório usr (Unix Shared Resources – recursos compartilhados do
Unix (algumas bibliografias citam usr como UNIX SYSTEM RESOURCES
(recursos de sistema Unix) (VALLE, 2010)) contém a maior parte dos
arquivos dos softwares, incluindo executáveis, bibliotecas e documentações.
 
/var
 
Contém arquivos com conteúdo variável essenciais para a execução do
sistema, como logs, spool de impressoras, e outros.
 
Além destes, outros diretórios podem ser criados por aplicações, pelo
próprio usuário ou por especificidades de alguma distribuição Linux.
 
Montagem e informações de partições
 
O comando mount envolve a montagem de partições de dispositivos de
armazenamento. O dispositivo montado fará parte do sistema de arquivos do
Linux. Ao digitar o comando mount são exibidas os dispositivos de
montados e seus respectivos pontos de montagem (diretório onde o conteúdo
do dispositivo será exibido).
A linha abaixo exibe um dispositivo montado.
/dev/sdb6 on /home type ext4 (rw)
 
 
A primeira informação especifica que se trata do dispositivo sdb6 no
diretório /dev (DEVice – dispositivo em inglês). Trata-se de um dispositivo
de armazenamento, pois sd são iniciais de Storage Device (dispositivo de
armazenamento em inglês). Este dispositivo foi dividido em várias partições,
e a partição montada aqui foi a de número 6.
A palavra on (cuja tradução é “em”) indica que a próxima informação será
o ponto de montagem deste dispositivo: /home. Logo, esta partição contém
arquivos pessoais dos usuários, devendo passar periodicamente por processos
de backup e devem ser preservadas por instalações, reinstalações ou
atualizações do Linux.
A informação seguinte ext4, informa o tipo do sistema de arquivos e as
letras rw, em parênteses, indicam que a partição pode ser lida (read) ou
escrita (write).
Conforme mencionado anteriormente, o Ubuntu monta automaticamente
os dispositivos de armazenamento, seja no processo de inicialização, seja
durante a operação do sistema operacional. Por exemplo, se um pendrive for
inserido em uma porta USB, automaticamente o Ubuntu o detectaráe o
montará no diretório /media. Seu ponto de montagem poderá ser verificado
pelo comando mount.
Devido a essa praticidade das versões atuais do Linux, a montagem
manual de dispositivos passou a ser pouco utilizada. Entretanto, caso se
deseje fazer uma montagem manual, o comando deverá ser digitado
conforme o exemplo:
 
mount -t ntfs /dev/sbg2 /media/disco
 
O comando deve ser executado no modo root. A opção -t permite definir o
tipo de partição que será montada, neste caso ntfs. Em seguida são
informados o dispositivo e o ponto de montagem.
Uma vez montado, o dispositivo de armazenamento ficará disponível até
que a máquina seja reiniciada. Caso se deseje sempre utilizar alguma partição
e queira que ela seja montada durante a inicialização do sistema, deve-se
incluir a partição no arquivo /etc/fstab, que é lido na inicialização do kernel. 
A desmontagem de dispositivos é feita pelo comando umount. Para este
comando, basta fornecer o ponto de montagem. Exemplo:
 
umount /media/disco
 
Pode-se verificar o uso de espaço em cada partição utilizando o comando
df. Os resultados deste comando normalmente são melhores compreendidos
com a opção -h, que exibe o espaço em MB e GB.
Exemplo:
 
df -h
 
Este comando exibe os dispositivos montados, o tamanho do dispositivo, a
quantidade de espaço utilizado, a quantidade de espaço disponível, a
porcentagem de uso e o ponto de montagem, conforme pode ser verificado no
exemplo abaixo.
 
Sist. Arq. Tam. Usado Disp. Uso% Montado em
/dev/sdb9 18G 12G 4,6G 72% /
/dev/sdb6 9,2G 8,1G 704M 93% /home
/dev/sdb7 21G 9,4G 9,8G 49% /usr
 
 
 
Embora não necessite de argumentos, pode-se solicitar os dados de uma
única partição.
 
df -h /home
 
Outra opção bastante útil do comando df é a opção -T. Com esta opção
são exibidos os sistemas de arquivos utilizados nas partições.
O comando du, por sua vez, exibe o espaço ocupado por diretórios de
forma recursiva, ou seja, explorando toda a árvore de subdiretórios. São
opções úteis do comando du:
● -s: mostra apenas a ocupação total do diretório, sem exibir a quantidade
de memória de cada subdiretório;
● -S: ordena a listagem com base no tamanho de cada diretório;
● -h: exibe resultado em MB e GB, ao invés de exibir em bytes.
Gerência de Usuários
 
Para adicionar um usuário ao sistema usa-se o comando adduser, que só
pode ser executado pelo usuário root. O argumento deste comando é o nome
do usuário a ser criado.
 
adduser novousuario
 
A este comando se seguirão as mensagens de criação do usuário, seu
grupo e diretório pessoal.
Note que o UID (User IDentifier) deste usuário é 1003, e seu GID (Group
Identifier) 1003. Em seguida são solicitadas a senha do usuário e algumas
informações opcionais, como nome completo, sala, telefones e outro.
 
Após a criação de um usuário pode-se trocar sua senha com o comando
passwd. Assim como no comando adduser, deve ser fornecido o nome do
usuário.
 
passwd novousuario
 
Apenas o usuário root pode alterar a senha de qualquer usuário. Porém,
um usuário comum pode utilizar este comando para alterar sua própria senha.
De acordo com a opção utilizada, este comando permite bloquear e
desbloquear usuários:
 
● -l: bloqueia usuário;
● -u: desbloqueia usuário.
 
Para remover um usuário, deve-se usar o comando userdel. Este comando
deve ser executado pelo root e deve fornecer como argumento o nome do
usuário a ser deletado.
 
userdel novousuario
 
Caso este comando seja executado com a opção -r, o diretório e todos os
arquivos do usuário são apagados.
Para criar um grupo novo utiliza-se o comando addgroup. Este comando
deve ser executado pelo root e deve ser especificado o nome do grupo.
 
addgroup novogrupo
 
E para apagar um grupo basta usar o comando groupdel.
 
groupdel novogrupo
 
Caso se queira mudar o grupo de um usuário, utiliza-se o comando
usermod com a opção -g. O exemplo a seguir altera o grupo do usuário
novousuario para novogrupo.
 
usermod novogrupo -g novousuario
 
Para visualizar todos os usuários cadastrados no sistema, basta utilizar o
comando less e indicar o arquivo /etc/passwd.
 
less /etc/passwd
 
O usuário criado nesta seção aparece na última linha do arquivo:
 
novousuario:x:1002:1003:NovoUsuário,,,:/home/novousuario:
/bin/bash
 
Cada campo é separado por dois pontos. O caractere “x” indica que a
senha criptografada do usuário está no arquivo /etc/shadow. A seguir é
apresentado o GID e o UID, respectivamente. Os dados seguintes são as
informações opcionais do usuário. Observe que nem todos foram digitados.
Por fim é informada a pasta pessoal do usuário e o shell disponível para o
usuário.
Para visualizar os grupos criados, basta utilizar o comando less e indicar o
arquivo /etc/group.
 
less /etc/group
 
O comando w mostra os usuários conectados no momento. A seguir são
apresentadas as informações fornecidas por este comando.
A primeira linha mostra a hora atual, o tempo em que o sistema está no ar,
o número de usuários conectados, e a carga média de processamento no
último minuto, nos cinco últimos minutos e nos quinze últimos minutos.
A segunda linha traz informações sobre cada coluna:
 
● USER: esta coluna mostra o nome do usuário conectado;
● TTY: indica qual o terminal no qual o usuário está logado;
● FROM: exibe onde o login foi feito, caso tenha ocorrido em alguma
máquina remota;
● LOGIN@: informa a quanto tempo cada usuário está conectado;
● IDLE: informa o tempo que o usuário está inativo;
● JCPU: informa o tempo de processamento em CPU utilizado pelos
processos de um usuário;
● PCPU: informa o tempo de processamento em CPU do processo
indicado na coluna WHAT;
● WHAT: mostra o processo referente à aplicação que o usuário está
utilizando no momento.
Propriedade e Permissões de Arquivos
 
Nas próximas subseções serão apresentados conceitos e comandos sobre
propriedade, e permissão de arquivos e diretórios.
 
Propriedades de arquivos
 
Todo arquivo possui um dono (owner), que pode ser um usuário comum
ou o usuário administrador do sistema (usuário root). Esta é uma das
características que tornam o Linux seguro, pois, além de impedir que um
usuário ou software malicioso acesse ou altere arquivos de outros usuários,
impede que arquivos específicos do sistema operacional (que são de
propriedade do root) sejam indevidamente manipulados por outros usuários
ou softwares maliciosos.
 
 
Permissões de Arquivos
 
Existem as seguintes permissões de acesso a arquivos: leitura (read),
escrita (write) e executar (execute). O proprietário de um arquivo pode
determinar estas permissões em três categorias:
 
● Permissões do proprietário (owner): geralmente possui acesso completo
a arquivos. Entretanto, por questões de segurança, para evitar alterações
acidentais, um proprietário pode determinar que um arquivo seja apenas para
leitura;
● Permissões de grupo (groups): todos usuários são membros de grupos.
Os arquivos podem ser associados a grupos e ter definidas as permissões para
estes grupos;
● Permissões para os demais usuários (others): o proprietário de um
arquivo pode dar acesso aos demais usuários (que não são proprietários e
nem membros de um grupo ao qual o arquivo está associado). Normalmente,
a permissão para others é leitura.
 
Permissões de Diretórios
 
As permissões de diretórios apresentam algumas diferenças em relação
aos arquivos:
 
● As permissões atribuídas a um diretório são aplicadas ao seu conteúdo,
ou seja, aos arquivos e diretórios dentro dele;
● A permissãode execução não implica propriamente na execução de
programas, mas na permissão de acesso e modificação do conteúdo do
diretório, ou seja, um diretório sem a permissão de execução tem seu
conteúdo inacessível. Caso um usuário tente acessar este diretório, receberá
uma mensagem de “Permissão Negada”;
● A permissão de leitura permite que o conteúdo do diretório seja
visualizado, mas só tem efeito se o diretório tem permissão de execução;
● A permissão de escrita permite que o usuário crie, apague ou renomeie
arquivos ou diretórios dentro do diretório em questão.
 
Assim como nos arquivos, pode-se definir permissões específicas para o
proprietário, para grupos e demais usuários.
 
Identificando Permissões e Propriedade
 
Ao executar o comando ls -l, os primeiros caracteres exibidos em cada
linha referem-se às permissões de arquivos ou diretórios.
Abaixo é exibido novamente o resultado parcial do comando ls -lah
executado no diretório /etc.
A letra d (Directory – diretório) não está relacionada a permissões, e sim
para indicar que se trata de um diretório. A letra r (Read – leitura) indica
permissão de leitura, a letra w (Write – escrita) permissão de escrita e a letra
x (eXecution – execução) permissão de execução.
Analisando a primeira linha, temos a sequência drwxr-xr-x. A letra d
informa que trata-se de um diretório. Já as permissões são divididas em três
grupos:
 
● Permissões do proprietário (owner): rwx indica que o proprietário tem
permissão de leitura, escrita e execução;
● Permissões de grupo (group):r-x indica que o grupo possui apenas
permissão de leitura e execução, não sendo permitida aos integrantes do
grupo criar, apagar ou renomear diretórios ou arquivos;
● Permissões dos demais usuários (others): r-x indica que os demais
usuários possuem as mesmas permissões que o grupo.
 
Analisando agora a quarta linha do exemplo anterior, referente ao arquivo
adduser.conf, temos a sequência -rw-r--r--. Como não se trata de um
diretório, e sim de um arquivo, o primeiro caractere é apenas o símbolo “-”.
A seguir temos as permissões:
 
● Permissões do proprietário (owner): rw- indica que o proprietário tem
permissão de leitura e escrita, mas não de execução;
● Permissões de grupo (group):r-- indica que o grupo possui apenas
permissão de leitura, não sendo permitida ao integrantes do grupo executar,
criar, apagar ou renomear diretórios ou arquivos;
● Permissões dos demais usuários (others): r-- indica que os demais
usuários possuem as mesmas permissões que o grupo.
 
A informação seguinte às permissões e ao número de blocos é o
proprietário do arquivo, ou diretório, e o grupo ao qual o arquivo, ou
diretório, está associado. Em todas as linhas do exemplo acima o proprietário
e o grupo são root.
No Ubuntu todos os usuários são associados a seu grupo pessoal. Desta
forma, as permissões de grupo se tornam pouco relevante, uma vez que as
permissões de proprietário precedem as de grupo. As permissões de grupo
são relevantes caso se inclua outros usuários em determinado grupo pessoal.
 
 
Alterando Permissões
 
Arquivos e diretórios podem ter suas permissões e propriedade alteradas.
Normalmente é necessário poderes de usuário root para realizar tais
operações. Os demais usuários podem alterar apenas as permissões dos
arquivos ou diretórios que lhe pertençam.
O comando chmod (Change Mode – alterar modo) é utilizado para alterar
permissões. Há várias combinações de argumentos e opções para utilizar este
comando. Uma das maneiras é especificar quem terá a permissão alterada
(proprietário, grupo ou demais usuários), as novas permissões e o nome do
arquivo ou diretório.
O proprietário é identificado por uma letra:
 
● u: identifica o proprietário;
● g: identifica o grupo;
● o: identifica os demais usuários.
 
Para se acrescentar uma permissão utiliza-se o símbolo “+” e para retirar
uma permissão, utiliza-se o símbolo “-”. Analisemos alguns exemplos:
 
chmod u+w teste
 
Neste exemplo é acrescida a permissão de escrita para o proprietário do
arquivo teste.
 
chmod u+x teste
 
Agora é acrescida a permissão de execução para o proprietário do arquivo
teste.
 
chmod g-x teste
 
Neste exemplo é retirada a permissão de execução para do grupo
associado ao arquivo teste. O próximo exemplo irá retirar a permissão de
leitura para os demais usuários.
 
chmod o-r teste
 
É possível atribuir várias permissões em um mesmo comando. Seguem
dois exemplos.
 
chmod g+rwx teste
chmod go+rwx teste
 
As permissões de diretórios são definidas da mesma maneira. Porém, para
um diretório basta retirar a permissão de execução para torná-lo inacessível.
Ao atribuir ou retirar permissões de um diretório, os subdiretórios herdarão
estas permissões.
Exemplo:
 
chmod g-x diretorio
 
Alterando Proprietário
 
Para alterar o proprietário de um arquivo ou diretório utilizamos o
comando chown. Este comando deve ser executado com poderes de
superusuário, portanto deve ser precedido por sudo. O comando abaixo muda
o proprietário do arquivo teste.txt para o usuário fabricio:
 
sudo chown fabricio teste.txt
 
O grupo a que um arquivo ou diretório está associado pode ser alterado
utilizando o comando chgrp. O exemplo abaixo altera o grupo do arquivo
teste.txt para admin.
 
sudo chgrp admin teste.txt
 
O proprietário e grupo de um arquivo podem ser alterados com um único
comando, basta utilizar o comando chown especificando o proprietário e o
grupo da seguinte forma: proprietário:grupo. O exemplo abaixo ilustra a
mudança do proprietário do arquivo teste.txt para fabricio e o grupo para
admin.
 
sudo chown fabricio:admin teste.txt
Manipulando Arquivos Compactados
 
Há vários formatos de arquivos compactados. A compactação é um
processo importante para backups e transporte de arquivos, pois permite que
vários arquivos sejam incluídos em um único arquivo de tamanho reduzido.
Nesta seção serão tratados os formatos mais utilizados: zip e tar.
 
Arquivos Zip
 
Caso se queira compactar um arquivo chamado documento.odt no
formato zip, pode-se usar o comando:
 
zip documento.zip documento.odt
 
Este comando criará um arquivo compactado chamado documento.zip,
que terá em seu conteúdo o arquivo documento.odt. Evidentemente não é
obrigatório criar um arquivo compactado com o mesmo nome do arquivo
original (com exceção da extensão), mas este procedimento provê melhor
organização, uma vez que permite a fácil identificação do conteúdo do
arquivo compactado. Também não é obrigatório o uso da extensão .zip,
porém o seu uso permite identificar que se trata de um arquivo compactado
do tipo zip.
Caso seja necessário compactar mais de um arquivo, pode-se fornecer
vários nomes na linha de comando:
 
zip documento.zip documento.odt documento1.odt planilha.ods
arquivo.txt
 
Comumente, a compactação não envolve apenas um ou poucos arquivos,
mas diretórios com seus arquivos e subdiretórios. Para compactar um
diretório de forma recursiva, ou seja, incluindo seus subdiretórios, utiliza-se a
opção -r:
 
zip -r documentos.zip ~/Documentos
 
Este comando compactará todo o conteúdo do diretório Documentos da
pasta pessoal do usuário para o arquivo documentos.zip.
Para descompactar um arquivo, utiliza-se o comando unzip.
 
unzip documentos.zip
 
Este comando extrairá todos os arquivos contidos em documentos.zip
para o diretório corrente. Porém, é possível escolher o diretório para o qual os
arquivos serão extraídos com a opção -d.
 
unzip documentos.zip -d /tmp
 
Neste exemplo, os arquivos serão extraídos para o diretório/tmp.
É possível também extrair arquivos específicos, ao invés de todo o
conteúdo do arquivo compactado. Suponha, por exemplo, que dentro de
documentos.zip haja um arquivo chamado documento1.odt. Para extrair
apenas este arquivo, utiliza-se o comando:
 
unzip documentos.zip documento1.odt
 
Caso se queira apenas listar o conteúdo de um arquivo compactado, pode-
se utilizar a opção -l.
 
unzip -l documentos.zip
 
Arquivos Tar
 
Para se criar um arquivo tar chamado backup.tar contendo o arquivo
documento.odt, utiliza-se o comando tar com a sintaxe abaixo:
 
tar -cf backup.tar documento.txt
 
A opção c indica ao tar que um novo arquivo deve ser criado e a opção f
indica que o nome do arquivo será fornecido a seguir.
Ao contrário do zip, o comando tar não comprime automaticamente o
conteúdo do arquivo compactado. Para que isso ocorra, é necessário utilizar a
opção -j para a compressão bzip2.
 
tar -cjvf backup.tar.bz2 documento.txt
 
A opção -v faz com que o tar mostre o que está ocorrendo durante o
processo de compactação.
Para extrair o conteúdo de um arquivo tar basta substituir a opção -c por -
x.
 
tar -xvf backup.tar
 
Caso o arquivo tenha sido compactado com a opção -j, ou seja, tenha
utilizado compactação bzip2, deve-se usar esta opção novamente.
 
tar -xjvf backup.tar.bz2
 
Para extrair um único arquivo, basta especificá-lo na linha de comando.
 
tar -xjvf backup.tar.bz2 documento.txt
 
Assim cono nos arquivos zip, é possível apenas listar o conteúdo de um
arquivo compactado, conforme o exemplo:
 
tar -tf backup.tar
 
Caso o arquivo compactado seja do tipo bzip2, a opção -j deve ser
acrescida.
 
tar -tjf backup.tar
 
 
Programação Shell
 
Através de programação Shell, administradores de sistemas operacionais
Linux podem criar pequenos programas para automatizar a administração do
sistema. Estes programas são basicamente arquivos de texto (também
chamados de scripts) contendo comandos do UNIX e comandos especiais do
shell que permitem:
 
● Definir e utilizar variáveis de sistema;
● Realizar testes no sistema;
● Instalar, desinstalar e configurar softwares;
● Realizar atualizações;
● Entender o funcionamento da sequência de boot do Linux.
 
Estes scripts são interpretados pelo shell, não havendo necessidade de
compilá-los. Embora sejam programas, os scripts não podem ser visto como
aplicações finais criadas pelas diversas linguagens de programação
existentes. Além de serem mais lentos que programas feitos nestas
linguagens, seu escopo se limita a sequências de instruções do sistema
operacional, não dispondo de recursos mais como interface gráfica,
bibliotecas avançadas, manipulação de bancos de dados, etc.
Os scripts apresentados nas próximas seções introduzirão a sintaxe básica
dos principais comando, não pretendendo ser um texto introdutório à lógica
de programação, nem aprofundado a ponto de criar scripts tão complexos
quantos os existentes na inicialização e configuração do Linux.
Os comandos de script apresentados a seguir são baseados no shell
/bin/bash do Linux.
 
Começando com o famoso “Olá mundo!”
 
O programa “Olá mundo!” é tradicional na maioria dos textos
introdutórios de linguagens de programação. O script abaixo imprimirá a
mensagem “Olá mundo!” no prompt. Este script pode ser digitado no
GNU/nano ou em outros editores.
 
#!/bin/bash
#script “Olá mundo!”
echo “Olá mundo!”
 
 
A primeira linha indica o shell utilizado para interpretar o script. A
segunda linha trata-se de um comentário que descreve a função do script (um
comentário sempre começa com o caractere #). A terceira linha utiliza o
comando echo imprime uma mensagem na tela.
Por questões de organização, é recomendável que o arquivo do script
tenha extensão .sh, para ser facilmente identificado como um script. Antes de
executá-lo, é necessário acrescentar permissão de execução, conforme o
comando abaixo.
 
chmod ugo+x olamundo.sh
 
Para executar o script, basta digitar:
 
./olamundo.sh
 
Utilizando variáveis do shell
 
Há diversas variáveis pré-definidas no shell. O comando printenv traz
uma lista completa destas variáveis. A seguir são citadas algumas destas
variáveis e seu conteúdo:
 
● SHELL: armazena o shell padrão utilizado na distribuição do Linux;
● USER e LOGNAME: nome do usuário logado;
● PATH: caminhos padrões para execução de comandos;
● HOME: caminho absoluto da pasta pessoal do usuário logado;
● HOSTNAME: nome do computador;
 
O script a seguir imprime uma mensagem de boas vindas ao usuário,
juntamente com algumas informações sobre seu computador e pasta pessoal.
 
#!/bin/bash
#Script de boas vindas
clear
echo "Olá $LOGNAME. Você está usando o computador
$HOSTNAME."
echo "Seus arquivos pessoais estão em $HOME."
echo "Tenha um ótimo dia de trabalho!"
 
O comando clear, na terceira linha, limpa a tela. Para acessar o conteúdo
das variáveis, deve-se utilizar o símbolo $ antes de seu nome. Na quarta e
quinta linhas, $USER, $HOSTNAME e $HOME, serão substituídos por
valores pré-definidos pelo shell. O resultado deste script será a mensagem:
 
Olá fabricio. Você está usando o computador fabricio-note.
Seus arquivos pessoais estão em /home/fabricio.
Tenha um ótimo dia de trabalho!
 
 
 
Criando variáveis
 
Além das variáveis pré-definidas, pode-se criar variáveis com qualquer
nome e conteúdo em um script. Para criar uma variável, basta atribuir-lhe um
valor, não sendo necessário especificar o tipo das mesmas. Assim como nas
variáveis pré-definidas, é necessário o uso do símbolo $ antes do nome da
variável para acessar seu conteúdo.
O script a seguir solicita que o usuário digite seu nome. O comando read
captura o conteúdo digitado pelo usuário e o armazena em uma variável
chamada nome. Na linha seguinte, uma mensagem é impressa junto com o
conteúdo desta variável.
 
#!/bin/bash
#Este script solicita o nome do usuário e o imprime em seguida.
echo "Digite seu nome:"
read nome
echo "Bom dia, $nome"
 
 
Utilizando parâmetros
 
Assim como comandos do Linux, os scripts podem receber parâmetros.
Para acessar os argumentos é necessário utilizar o símbolo $ seguido de um
número ou símbolo:
 
● $#: retorna o número de parâmetros passados;
● $*: retorna todos os parâmetros passados;
● $0: retorna o nome do script que está sendo executado;
● $1 a $9: retorna respectivamente os argumentos de 1 a 9.
 
O script a seguir exibe o nome do arquivo e o número de parâmetros
passados.
#!/bin/bash
#Imprime o nome do arquivo do script e o número de parâmetros
passados
 
echo "Ola, eu sou o scritp $0 e você me passou $# parâmetros"
 
Este script foi salvo com o nome parametros.sh. Suponha que sejam
passados os parâmetros:
 
./parametros.sh parametro1 parametro2
 
 
O script imprimirá na tela:
 
Ola, eu sou o script ./parametros.sh e você me passou 2 parâmetros
 
 
Estruturas condicionais
 
Estruturas condicionais são essenciais na maioria dos programas, uma vez
que permitem tomadas de decisão ao longo do código, alterando sua
sequência de execução. A seguir são apresentadas estruturas condicionais
utilizando o if:
 
if CONDIÇÃO
then
COMANDOS
fi
 
 
 
 
if CONDIÇÃO
then
COMANDOS
else
COMANDOS
fi
 
O próximo script ilustra uma aplicação de estruturas condicionais:
 
 
#!/bin/bash
#Este script renomeia dois arquivos
if [ $# -ne 2 ]
then
echo "Por favor, digite dois parâmetros"
else
mv $1 $2
fi
 
 
Na terceira linha deste script é verificado se foi passada uma quantidade
de parâmetros diferente de 2. -ne é um operadorpara testes numéricos, sendo
que ne são as iniciais de Not Equal, em português, não igual (os operadores
para testes numéricos são apresentados na Tabela 1). Caso este teste seja
positivo, uma mensagem é impressa. Caso contrário, o comando mv move o
arquivo ou diretório especificado pelo primeiro parâmetro para o nome
especificado pelo seguindo parâmetro.
 
Tabela 1: Operadores para testes numéricos
Operadores Significado
-eq É igual
-ne Não é igual
-gt É maior que
-lt É menor que
-ge É maior ou igual
-le É menor ou igual
 
 
Estruturas de repetição
 
Assim como as estruturas condicionais, as estruturas de repetição são
imprescindíveis na maioria dos programas, pois permitem a execução de
determinadas porções de código repetidas vezes.
Nesta seção serão apresentadas as estruturas while e for, cujas estruturas
são exibidas a seguir:
 
while CONDIÇÃO
do
COMANDOS
done
 
for CONDIÇÃO
do
COMANDOS
done
 
 
A diferença entre a repetição utilizando while e for consiste no fato de no
primeiro caso a repetição ocorrer enquanto uma condição estiver sendo
satisfeita e, no segundo caso, a repetição ocorre uma quantidade de vezes pré-
determinada.
O script abaixo é uma brincadeira com o usuário que ilustra uma exemplo
utilizando while.
 
#!/bin/bash
#Script com repeticao while
echo "Este computador se autodestruirá em 5 segundos"
c=5
while [ $c -gt 0 ]
do
sleep 1
echo "$c"
(( c-- ))
done
echo "kabum :)"
 
 
Na terceira linha uma mensagem de autodestruição é dada. Na linha
seguinte, uma variável numérica é criada com o valor 5. Na quinta linha é
realizado um teste que definirá que a repetição acontecerá enquanto a
variável c for maior que 0. Na sétima linha o script é paralisado brevemente
com o comando sleep. Nas linhas seguintes a variável c é impressa e
decrementada. Na última linha uma onomatopeia é impressa. Mas fique
tranquilo, nenhum dano é causado ao computador.
O próximo script trata-se de um exemplo de estrutura de repetição com
for.
 
#!/bin/bash
#Este script apenas cria diretórios
echo "Quantos diretórios vc quer criar?"
read diretorios
for ((i=1; i<=$diretorios; i++))
do
echo "criando diretorio$i"
mkdir "diretorio$i"
done
 
 
Na quarta linha deste script, o comando read permite que seja digitado um
valor que será atribuído à variável diretórios. Na quinta linha, o comando for
inicializa uma variável i com valor 1. A cada iteração esta variável é
incrementada em uma unidade até que ultrapasse o valor da variável
diretórios. Os comandos dentro desta estrutura (uma mensagem e a criação
de diretórios) são repetidos a cada iteração.
Neste script, os diretórios serão criados com os nomes diretorio1,
diretório2, e assim suscetivamente. Para apagar estes diretórios, pode-se
utilizar o script abaixo:
#!/bin/bash
#Este script apenas apaga diretórios
echo "Quantos diretórios vc quer apagar?"
read diretorios
for ((i=1; i<=$diretorios; i++))
do
echo "Apagando diretorio$i"
rmdir "diretorio$i"
done
Gerenciamento de Processos
 
 
Processos são programas em execução. O gerenciamento de processos é
útil especialmente em casos em que um programa apresenta alguma anomalia
em seu funcionamento comprometendo a operação do sistema operacional e
outros aplicativos. Em outras palavras, quando um programa “trava”, há
opções no Linux para finalizar este programa sem recorrer à reinicialização
do computador ou outros métodos pouco práticos. Em situações como esta,
pode-se abrir terminais virtuais utilizando as teclas Ctrl+Alt+F1,
Ctrl+Alt+F2, Ctrl+Alt+F3, Ctrl+Alt+F4, Ctrl+Alt+F5, Ctrl+Alt+F6. Para
voltar à interface gráfica basta teclar Ctrl+Alt+F7.
Uma vez em uma sessão de linha de comando, para se visualizar uma lista
constantemente atualizada de processos, basta utilizar o comando top. Será
aberta uma lista de processos com diversas informações.
Dentre as informações apresentadas por este programa, destaca-se:
● Tarefas: Número de processos em execução e seus estados;
● KiB Mem: uso de memória pelos processos;
● KiB Swap: uso de memória swap pelos processos;
● PID: Número identificador do processo;
● USER: usuário que inicializou o processo. Este usuário é o proprietário
do processo. Um processo só pode ser finalizado por seu proprietário. A
exceção é usuário root, que pode finalizar qualquer processo;
● S: Estado do processo. Os estados mais comuns de processos são:
● R (running): processo em execução;
● S (sleep): processo em espera ;
● s: trata-se de um processo (processo pai) com vários
subprocessos atrelados a ele (processos filhos);
● D: processo em espera aguardando uma operação de
Entrada/Saída de algum dispositivo ;
● T (trace): processo encontra-se parado sendo analisado por
alguma rotina ;
● Z (zombie): processo terminou mas continua alocado na
memória consumindo recursos do sistema;
● “<”: processo rodando em alta prioridade;
● N: processo rodando em baixa prioridade;
● “+”: processo rodando em primeiro plano, ou seja, sua execução
pode ser visualizada em um terminal;
● l: processo está sendo processado em mais de um núcleo do
processador ou por vários processadores.
● %CPU: Porcentagem da capacidade do processador utilizada pelo
processo;
● %MEM: Porcentagem de memória principal utilizada pelo processo;
● TIME+: Tempo total de execução do processo;
● Command: comando que inicializou o processo.
 
A tela gerada pelo comando top contém um prompt logo acima da lista de
processos. Desta forma é possível realizar algumas operações. Para verificar
as operações disponíveis, basta teclar h e será apresentada uma tela de ajuda.
Para finalizar um processo, basta teclar k e fornecer um PID. Para
terminar um processo, o comando kill é ativado (este comando será tratado
mais a frente nesta seção). Este comando envia um sinal ao processo. O sinal
15 é o padrão para finalizado de um processo. Entretanto, para forçar o fim de
um processo pode-se usar o sinal 9.
Para sair da tela de processos gerada por este comando, basta teclar q.
Os processos podem também ser visualizados com o comando ps, que
exibe praticamente as mesmas informações do comando top, embora as
apresente de forma estática. Dentre as várias opções deste comando, as
opções a, u e x tornam bastante prática a visualização da lista completa de
processos com seus respectivos nomes:
 
ps -aux
 
Como este comando retorna uma lista de processos muitas vezes extensa,
pode-se utilizar o comando grep para buscar um programa específico. Por
exemplo, caso se queira visualizar informações sobre o processo referente ao
navegador Chromium, o comando ps pode ser utilizado da seguinte forma:
 
ps -aux | grep chromium
 
Para matar este processo, e consequentemente encerrar o programa,
utiliza-se o comando kill. O exemplo abaixo encerra o processo de PID 3268.
 
kill 3268
 
Caso um programa não esteja respondendo e não se encerre com o
comando acima, pode-se forçar sua finalização utilizando como opção o sinal
-9.
 
kill -9 3268
 
Em algumas situações, pode ser preferível reiniciar o processo ao invés de
finalizá-lo. Isto pode ser feito com o sinal -1.
 
kill -1 3268
 
A relação de sinais disponíveis para o comando kill pode ser visualizada
utilizando a opção -l.
É possível encerrar um processo sem conhecer seu PID. Para isso deve-se
usar o comando killall seguido do nome do programa que se quer finalizar a
execução. Por exemplo, para encerrar o Nautilus, basta digitar:
 
killall nautilus
 
Este comando encerrará todos os processos que tiverem o nome nautilus
em sua coluna de comandos (última coluna apresentada nos comandos top e
ps).
Caso o processo que se deseja finalizarseja de propriedade de outro
usuário, é necessário usar o comando sudo.
 
sudo kill 3268
 
Na seção Linha de Comando vimos que as teclas Ctrl+Z enviam um
programa para o segundo plano. Isto é útil quanto necessitamos de continuar
utilizando o terminal enquanto um processo é executado. Os processos em
segundo plano podem ser visualizados pelo comando jobs. O exemplo a
seguir mostra informações do comando updatedb sendo executado em
segundo plano.
 
[1]+ Parado sudo updatedb
 
Estes processos recebem uma numeração sequencial diferente de seu PID.
Neste exemplo, o processo está parado. Para reiniciar um processo em
segundo plano, utiliza-se o comando bg juntamente com o número sequencial
do processo.
 
bg 1
 
Para reiniciar um processo e trazê-lo para primeiro plano, utiliza-se o
comando fg.
 
fg 1
 
Caso o usuário queira que um comando continue a ser executado mesmo
que seja feito logout do sistema, pode-se utilizar o comando nohup.
 
nohup updatedb &
 
O símbolo & faz com que o comando seja executado em segundo plano.
Em algumas situações pode ser necessário saber quais processos estão
utilizando algum recurso específico (um arquivo ou diretório, por exemplo).
No primeiro caso utiliza-se o comando fuser.
O comando fuser recebe como argumento algum recurso. Exemplo:
 
fuser /etc/passwd
 
O resultado deste comando é:
 
/etc/passwd: 2237 3463
 
Os processos 2237 e 3463 estão utilizando o arquivo /etc/passwd. Para
obter maiores informações sobre estes processos basta usar o comando ps.
Exemplo:
 
ps 2237
 
O comando fuser possui algumas opções importantes:
 
● -k: mata os processos que estejam acessando o recurso especificado;
● -m: permite especificar um ponto de montagem ou um dispositivo
montado;
● -u: exibe o nome do usuário que está executando cada processo
exibido;
● -v: mostra os resultados de forma mais organizada.
 
 
Exemplo:
 
fuser -muv /dev/sda6
 
O resultado parcial deste comando é exibido a seguir:
 
A coluna ACESSO exibe como o processo está acessando o recurso. Esta
coluna pode ter os seguintes valores:
 
 
● c: diretório atual;
● e: arquivo em execução;
● r: diretório raiz;
● m: arquivo em memória;
● f: arquivo aberto para leitura;
● F: arquivo aberto para escrita.
 
Estes valores podem ser melhores visualizados executando o comando
sobre a raiz ou sobre a pasta pessoal do usuário.
Gerenciamento de Pacotes
 
No Linux, é possível realizar um eficiente gerenciamento de pacotes por
meio de ferramentas específicas. Nesta seção serão apresentados os
gerenciadores de pacotes: APT e DPKG. Ambos os comandos, para
instalação ou remoção de pacotes, devem ser executados com privilégios de
superusuário. Portanto, os exemplos desta seção supõem que o usuário esteja
logado como root ou utilize o comando sudo.
 
DPKG
 
O DPKG (Debian Package) é um gerenciador de pacotes próprio do
Debian, como o próprio nome já diz. O Ubuntu também possui este
gerenciador, uma vez que é baseado na distribuição Debian. O DPKG
manipula pacotes .deb.
As opções mais comuns do comando dpkg são:
 
● -i: instala um pacote .deb. Exemplo: dpkg -i tree_1.5.3-2_i386.deb;
● -r: desinstala um pacote sem apagar seus arquivos de configuração.
Exemplo:
 dpkg -r tree_1.5.3-2_i386.deb;
● -P: desinstala um pacote e apaga seus arquivos de configuração.
Exemplo:
 dpkg -P tree_1.5.3-2_i386.deb;
 
APT
 
O APT (Advanced Package Tool) é uma ferramenta originária da
distribuição Debian, e assim como o DPKG, está presente no Ubuntu. É o
sistema de gerenciamento de pacotes mais utilizado entre as distribuições
Linux (Mota, 2013) . Os pacotes gerenciados pelo APT possuem extensão
.deb. Estes pacotes são baixados de repositórios na internet distribuídos em
vários países e automaticamente instalados pelo comando DPKG.
Os softwares disponíveis para instalação pelo APT são mantidos em um
banco de dados local, que é frequentemente atualizado por servidores
remotos. Os pacotes também podem ser encontrados em CD-ROM, DVD e
rede local, embora a fonte mais utilizada seja a internet.
O arquivo /etc/apt/sources.list exibe os repositórios locais e remotos
disponíveis. Para inserir ou remover um repositório, deve-se editar este
arquivo. Os repositórios remotos são listados conforme o exemplo:
 
deb http://br.archive.ubuntu.com/ubuntu/ precise main restricted
 
deb-src http://br.archive.ubuntu.com/ubuntu/ precise main restricted
A primeira informação é o tipo de repositório. Pode ser deb ou deb-src.
deb refere-se aos pacotes binários, ou seja, os programas pré-compilados.
deb-src refere-se aos códigos fonte.
A segunda informação é o repositório propriamente dito. A lista completa
está disponível em http://www.debian.org/mirror/list. A seguir é informado a
versão da distribuição. Neste exemplo a versão é precise, porém outros
costumam ser utilizados: lucid, stable, testing, sid, experimental, e outros.
A penúltima informação refere-se à seção do repositório, neste caso main
restricted indica que o pacote faz parte da distribuição oficial do Ubuntu.
O APT envolve vários comandos. Os mais utilizados são:
 
● apt-get update: atualiza lista de pacotes disponíveis nos repositórios
na internet;
● apt-cache: pesquisa de pacotes baixados pelo comando apt-get
update;
● apt-get install pacote: instala o pacote solicitado. Caso o pacote já
esteja instalado, faz sua atualização. É possível solicitar a instalação de vários
pacotes num único comando;
● apt-get upgrade: atualiza o sistema sem instalar ou remover pacotes;
● apt-get dist-upgrade: faz a atualização completa do sistema,
instalando novos pacotes e removendo pacotes que estejam em conflito com
o sistema atualizado;
● apt-get source pacote: faz download do código-fonte de um pacote;
● apt-get clean: apaga os arquivos baixados pelo APT. Estes arquivos
ficam armazenados em /var/cache/apt/archives;
● apt-get remove pacote: desinstala pacote mantendo os arquivos de
configuração. Caso o pacote seja uma dependência de outros, o APT também
irá desinstalá-los;
● apt-get purge pacote: desinstala pacote e remove seus arquivos de
configuração, com exceção dos arquivos de configuração dos usuários em
/home. Caso o pacote seja uma dependência de outros, o APT também irá
desinstalá-los;
 
Há algumas opções que podem ser úteis na utilização dos comandos APT:
 
● -d: faz apenas o download dos pacotes, sem instalá-los;
● -y: automaticamente responde “sim” à pergunta “Você quer continuar?
[S/n]”;
● -f: opção útil na instalação de pacotes quando há problemas com
dependência. Só pode ser utilizada com o comando: apt-get install.
 
Há também algumas opções específicas para o comando apt-cache:
 
● pkgnames: mostra pacotes disponíveis;
● search: procura por pacotes a partir de uma expressão. Exemplo: apt-
cache search firefox. Neste exemplo serão pesquisados pacotes que
contenham a expressão firefox em sua descrição resumida ou detalhada;
● show: mostra dados de um pacote. Exemplo: apt-cache show firefox;
● depends: mostra dependências de um pacote. Exemplo: apt-cache
depends firefox;
● stats: exibe estatísticas do banco de dados de pacotes;
 
Gerência de Hardware
 
Para visualizar todos os componentes de hardware de um computador,
temos o comando lshw. A lista de hardwares e seus respectivos detalhes é
bastante extensa. Porém, é possível facilitar a visualização a partir de
algumas opções:
 
● -html: apresenta a listagem em html. Utilizando o símbolo “>” é
possível criar um arquivo html para a visualização em um browser (exemplo:
lshw -html> listagem.html);
● -xml: apresenta o resultado em xml;
● -short: mostra lista de dispositivos sem apresentar detalhes dos
mesmos;
 
O comando report-hw também é útil para visualizar os dispositivos de
hardware disponíveis. Apesar de gerar um relatório completo, este comando
não possui opções de visualização.
Para visualizar especificamente dispositivos PCI e AGP em uma máquina,
utiliza-se o comando lspci. Este comando não possui argumentos, entretanto
há algumas opções que merecem destaque:
 
● -k: exibe os drivers e módulos de kernel dos dispositivos;
● -v: fornece detalhes de cada dispositivo;
● -vv: aumenta nível de detalhes fornecidos de cada dispositivo;
 
Os dispositivos USB podem ser visualizados pelo comando lsusb. Este
comando também não possui argumentos. A seguir são apresentadas algumas
opções deste comando:
● -v: fornece detalhes de cada dispositivo;
● -s: permite visualizar informações de um único dispositivo, devendo ser
incluído na linha de comando o barramento e o número do dispositivo.
 
Algumas informações de hardware estão disponíveis em arquivos no
diretório /proc. Para visualizar estes arquivos, pode-se utilizar o comando
less. A seguir são descritos os arquivos relacionados aos dispositivos de
hardware.
 
● /proc/interrupts: exibe todas as IRQs (Interrupt ReQuest – requisição
de interrupção) utilizadas pelo sistema. IRQs são utilizadas pelos periféricos
para notificar o processador sobre uma necessidade de comunicação. Cada
dispositivo possui uma IRQ;
● /proc/dma: exibe todos os canais de DMA (Direct Memory Access)
utilizados pelo sistema;
● /proc/ioports: exibe a área de endereços de I/O (Input/Output –
Entrada/Saída). Endereços de I/O são posições de memória RAM utilizada
para troca de dados entre o processador e dispositivos de hardware;
● /proc/cpuinfo: exibe informações do processador (marca, modelo,
clock, tamanho de cache, etc);
● /proc/swaps: exibe informações sobre o sistema de swap.
Gerência de Rede
 
Neste capitulo serão apresentados comandos relacionados a interfaces de
rede no Linux. Não serão tratados aspectos teóricos de arquitetura e
protocolos de rede. Portanto, espera-se que o leitor já possua conhecimentos
básicos do protocolo TCP/IP.
Um dos comandos mais conhecidos quando se trata de redes de
computadores é o comando ping (Packet INternet Groper). Este comando
permite testar a comunicação entre dois computadores, pois através dele
pode-se verificar se um determinado pacote está ou não chegando ao seu
destino. O comando ping requer como argumento o endereço (IP ou URL) do
host de destino. Exemplos:
 
ping 91.189.94.156
 
ping ubuntu.com
 
A resposta ao último comando será:
 
Para cada pacote enviado há informações como tamanho, destino e tempo
de resposta. Ao fim do comando (após interromper sua execução com as
teclas Ctrl+C), têm-se, entre as informações, o número de pacotes
transmitidos e recebidos, a porcentagem de perda e tempo total.
Para verificar as configurações dos adaptadores de rede de um
computador, temos o comando ifconfig. Este comando, utilizado sem
argumentos, exibe todos os adaptadores de rede do computador. Entretanto, é
possível visualizar as configurações de um único adaptador. Exemplo:
 
ifconfig eth0
 
Este comando exibirá a configuração da placa ethernet eth0. Já o exemplo
a seguir exibirá a configuração da placa de rede sem fio wlan0.
 
ifconfig wlan0
 
O comando ifconfig permite a ativação e desativação de placas de rede
através das opções up e down, respectivamente:
 
ifconfig wlan0 down
 
ifconfig wlan0 up
 
A visualização das configurações de rede podem ser feitas por um usuário
comum. Porém a modificação, ativação ou desativação devem realizada pelo
usuário root. Informações sobre a conexão de dispositivos de rede podem ser
obtidas com o comando ethtool. Este comando permite visualizar diversas
informações sobre o link: tecnologia de rede suportada, velocidade do link,
conexão detectada, e outras informações.
O uso do comando ethtool é semelhante ao comando ifconfig:
 
ethtool eth0
 
Destaca-se as seguintes opções deste comando:
 
● -i: exibe o driver do dispositivo;
● -S: exibe estatísiticas deste dispositivo;
 
Uma vez que os adaptadores de rede estejam configurados e funcionando,
pode-se verificar a tabela de roteamento estático de rede através do comando
route. As colunas apresentadas por este comando são:
 
● Destino: endereço da rede ou máquina de destino;
● Roteador: endereço do roteador;
● Mascara Genérica: máscara da a rede destino;
● Opções: são apresentados flags de rede:
● U (rota esta Up);
● H (alvo é uma máquina);
● G (use roteador);
● R (reinstale rota para roteamento dinâmico);
● D (Instalada dinamicamente por um daemon ou por
redirecionamento);
● M (Modificada por daemon de roteamento ou
redirecionamento);
● ! (Rota rejeitada ).
● Metrica: A 'distância' até o alvo (geralmente contada em hops);
● Ref: Número de referências a esta rota. Não usado no kernel do Linux.
Seu valor é sempre 0;
● Uso: contagem de procuras por esta rota;
● Iface: interface através da qual os pacotes IP serão enviados;
 
Com o comando route é possível inserir ou remover rotas através das
opções add e del, respectivamente. Exemplo:
 
route add -net 192.56.76.0 netmask 255.255.255.0 eth0
 
Este exemplo adiciona uma rota para a rede 192.56.76.0 através da
interface "eth0". O exemplo seguinte remove esta rede.
 
route del -net 192.56.76.0 netmask 255.255.255.0 eth0
 
O comando netstat mostra não só a tabela de roteamento, conforme o
comando route, mas também permite verificar conexões de rede, portas TCP
e UDP abertas, estatísticas de interface e outras informações. A principais
opções de netstat são:
 
● -a: mostra as conexões ativas e as portas abertas;
● -l: mostra somente as portas referentes aos serviços que estejam ativos
na máquina;
● -p: mostra os processos que estão utilizando as portas ativas;
● -r: exibe a tabela de roteamento;
● -s: exibe estatísticas de rede;
● -t: mostra somente conexões TCP;
● -u: mostra somente conexões UDP;
 
 
O comando whois mostra dados sobre domínios e blocos IP na internet.
Esta informações são importantes em pesquisas sobre redes ou instituições na
internet. Este comando requer como argumento um endereço de destino.
Exemplos:
 
whois ubuntu-br.org
 
whois 91.189.94.226
 
Para obter apenas a localização de um endereço IP ou de uma URL, pode-
se utilizar o comando geoiplookup. Assim como no comando whois, é
necessário fornecer um endereço.
 
geoiplookup ubuntu-br.org
 
geoiplookup 91.189.94.226
 
Os comandos iptraf e ethstatus permitem monitorar o tráfego de rede nos
adaptadores de rede ativos. Ambos apresentam interfaces gráficas simples
(exibidas nas figuras a seguir), mas apenas o comando iptraf possui um
ambiente interativo.
A figura a seguir apresenta uma das telas do iptraf.
A figura abaixo apresenta a tela do comando ethsatus.
O comando wget é utilizado para fazer download de arquivos e diretórios
em modo texto, utilizando os protocolos HTTP ou FTP. No exemplo abaixo,
o comando wget é utilizado para fazer o download de uma imagem da versão
13.10 da distribuição Ubuntu.
 
wget http://releases.ubuntu.com/saucy/ubuntu-13.10-desktop-
amd64.iso
Referências Bibliográficas
 
MOELLER, Jonathan. The Ubuntu Beginner's Guide. Reno:
LLC/Amazon, 2012. 6 ed.
 
MOTA, FILHO, João Eriberto. Descobrindo o Linux: entenda o sistema
operacional GNU/Linux. São Paulo: Novatec, 2012. 3 ed.
 
THOMAS, Keir. Linux Nitty Gritty: Working at the UuntuCommand-Line Prompt. ???: McFreda/Amazon, 2011.
 
VALLE, Odilson Tadeu. Administração de redes com linux:
fundamentos e práticas. Florianópolis: Publicações do IF-SC, 2010.
 
 
Livros Publicados na Amazon
 
Estaticópolis - Um jeito novo de aprender Estatística
 
Este livro não apresenta um conteúdo de forma linear, nem é recheado de
fórmulas, teorias e conceitos. Estaticópolis é uma ficção, e como toda ficção,
busca ser divertida e envolvente. Neste livro, o leitor encontrará diversas
analogias das estatísticas presentes em seu cotidiano (em noticiários,
pesquisas eleitorais, campanhas publicitárias, relações comerciais, etc) e
aprenderá a analisá-las em suas entrelinhas. .
 
 
Um livro útil para estudantes e profissionais de diversas áreas, com ou sem
conhecimento prévio de Estatística.
 
Estatística Básica para Processos Produtivos
 
Estatística não é só a arte de fazer os números falarem, mas de fazer os
números falarem a verdade. Isso só é possível mediante um rigoroso processo
estatístico composto por vários detalhes importantes: escolha e organização
de dados, extração de suas medidas, análise de inferências, criação e
interpretação dos gráficos. Este livro apresenta uma série de ferramentas
estatísticas (técnicas de amostragem, medidas de tendência central e
dispersão, gráficos e análise de regressão), com exemplos voltados para
produção, porém aplicáveis a qualquer área que exija coleta e organização de
dados, apresentação e interpretação de informações.
 
Design de Logomarcas com Inkscape: Aprenda desenhar e analisar
logomarcas
 
Este livro busca cobrir uma lacuna deixada pelos livros tradicionais da área,
que muitas vezes excedem na linguagem técnica, tornando o aprendizado
maçante e difícil. Utilizando uma linguagem que consiste em um diálogo
contínuo com o leitor, este livro une o aprendizado de desenho de logomarcas
com o uso do Inkscape,
 
Ainda que inclua análises de logomarcas de estúdios e designers consagrados
internacionalmente, este livro não é voltado apenas a profissionais da área de
logomarcas. As técnicas utilizadas aqui servem para vários tipos de artes
gráficas.
 
Este é o primeiro livro de uma série de volumes que incluirão logomarcas de
complexidade crescente.
 
Tratando Imagens com GIMP: Aprendizado com Projetos Curtos e Didáticos
 
Assim como o livro sobre Inkscape, este livro também busca cobrir uma
lacuna deixada pelos livros tradicionais da área, que muitas vezes se excedem
na linguagem técnica, tornando o aprendizado maçante e difícil. Com uma
linguagem informal, como se dialogasse com o leitor, este livro apresenta, de
forma didática, técnicas úteis para tratar fotos tiradas sob diversas
circunstâncias, obtendo muitas vezes efeitos divertidos e/ou inusitados.
 
Este é o primeiro livro de uma série de volumes que incluirão técnicas de
tratamento de imagens de complexidade crescente.
 
 
Introdução aos Testes de Invasão: Técnicas de ataque para melhorar suas
defesas
 
Este livro tem como objetivo ser um texto introdutório a interessados em
hacking e testes de invasão. A intenção deste livro, ao promover um conteúdo
de hacking e testes de invasão, vai ao encontro da necessidade de se conhecer
as técnicas de invasão para se adotar medidas de prevenção à invasão. Em
outras palavras: para se defender é preciso conhecer as técnicas e ferramentas
de ataque, ou seja, segurança ofensiva.
O conteúdo deste livro não exige que o leitor tenha experiência anterior em
testes de invasão. Porém é importante que o leitor tenha um domínio básico
de Linux, preferencialmente da distribuição Ubuntu e conhecimentos de
básicos de redes de computadores.
Ubuntu em Linha de Comando: Operação e Administração Eficiente do
Ubuntu Linux
 
Texto introdutório e didático sobre operação e administração de sistemas
Linux através de linha de comando. Apesar de ser um livro introdutório, seu
conteúdo pode ser útil para usuários com diferentes níveis de conhecimento
no sistema operacional Linux.
 
O olho e outros contos insólitos
 
"O olho e outros contos insólitos" recebeu menção honrosa no XI Livraria
Asabeça Prêmio Literário 2012.
 
O livro traz três contos irreais, embora verossímeis, em que o improvável é
apresentado com extrema naturalidade. O primeiro conto "O Olho", traz uma
narrativa surreal, em que duas pessoas desconhecidas, em partes opostas do
planeta, compartilham involuntariamente suas visões, fazendo-as questionar
suas sanidades.
 
O segundo conto, "Réplicas", é uma história de suspense. Tudo começa com
um sensação de dor no meio da noite. Uma pequena perfuração que não
coagula. E estranhas aparições e acontecimentos que fazem uma família
questionar a realidade.
 
O terceiro conto, "Maquinários", traz uma história futurista, numa época que
o homem existe apenas como fonte de inspiração para formas de vida
autômatas em uma Terra desfigurada. Neste cenário, um robô concebido para
um fatídico propósito, e com um virtuoso defeito, passa a enfrentar toda a
ordem e desordem que o cerca, tentando resgatar o que resta da humanidade.
 
Estações marítimas o retorno ao continente
 
Em um futuro relativamente distante, o planeta Terra estava dividido em duas
grandes alianças (a aliança dos países ocidentais e a aliança dos países
orientais) quando eclodiu uma grande guerra pelo domínio do planeta. Guerra
que durou vários anos e, quando estava prestes a ser vencida, foi utilizada
uma arma biológica devastadora pela aliança cuja derrota era iminente. Uma
bactéria altamente transmissível que, dentre seus sintomas, ataca o sistema
nervoso do homem e o transforma em uma criatura descontrolada e letal.
 
A humanidade foi praticamente banida dos continentes. Os poucos
sobreviventes se aglomeraram e se mataram por um espaço nas embarcações
de evacuação para estações marítimas. Porém, o que parecia ser a salvação se
transformou em um novo pesadelo. Os sobreviventes desta catástrofe,
confinados fora de seu habitat natural, passaram a sofrer com as dificuldades
de adaptação e escassez de recursos. A extinção do homem era iminente.
A última esperança da humanidade seria uma tentativa desesperada de
reconquistar os continentes. Foi criada uma força tarefa cuja missão seria
retoma-los. Missão esta que escondia vários segredos. Ao chegar em terra
firme, uma inconveniente verdade veio à tona. Surgindo aí um novo inimigo,
uma intriga militar tão ou mais mortal que a bactéria e as pessoas
contaminadas.
 
Gonecity
 
De repente, uma cidade inteira isolada. Seria possível? Algo indestrutível. De
origem não conhecida. O planeta inteiro está lá. Para libertá-la. Mas, sob os
olhos de todos, a cidade simplesmente some, deixando apenas uma imensa e
precisa cratera. Nesta cidade, onde que que ela esteja agora, quatro pessoas
unidas pelo acaso partem em busca de um meio de voltar para casa, ou, pelo
menos, de respostas. Respostas que desafiarão a lógica, o tempo, a ciência e a
suas próprias vidas.
 
Outrora e outros contos insólitos
Contos irreais, mas verossímeis. Fatos impossíveis, mas imagináveis. As
regras do mundo que conhecemos são questionadas nestes três contos
insólitos.
O primeiro conto, Outrora, narra um fenômeno natural incompreensível pela
ciência atual, mas que afetará para sempre a vida na Terra. Um fenômeno
capaz de colocar em cheque a noção de vida ou morte. Capaz de botar em
cheque saberes axiomáticos como a lei da gravidade e a lei de Lavoisier.
O segundo conto, O Olho, traz uma narrativa surreal, em que duas pessoas
desconhecidas, em partes opostas do planeta, compartilham
involuntariamente suas visões, fazendo-as questionar suas sanidades.
O terceiro conto, Oceano Morto, narra outro fenômeno inexplicável pela
ciência. Mas neste conto, a ciência não terá oportunidade de estudá-lo.
Repentinamente os oceanos se convertem numa matéria desconhecida, de
cor, cheiro e constituição irreconhecíveis. Esta matéria consumiráa Terra aos
poucos e levará a humanidade a ações extremas de uma improvável
sobrevivência. O quarto conto, "Réplicas", é uma história de suspense. Tudo
começa com um sensação de dor no meio da noite. Uma pequena perfuração
que não coagula. E estranhas aparições e acontecimentos que fazem uma
família questionar a realidade.
 
Transgenia: uma nova espécie está surgindo
Um lugar remoto. Esquecido. Condenado por poluentes de indústrias
desativadas. Uma pequena população é surpreendida por um submarino de
origem desconhecida, trazendo consigo uma tecnologia capaz de alterar o
genoma humano. Um conflito global explode naquele pacato local quando
forças especiais são enviadas para lidar com a ameaça e se deparam com um
garoto com particularidades mentais que o tornam imune à perigosa
tecnologia.
Teorias conspiratórias, ameaças terroristas, armas biológicas e conflitos
militares permeiam esta trama em época e local indefinidos.
	Sobre o Linux
	Sobre o Ubuntu
	Linha de Comando
	Shell
	Sessões de Linha de Comando
	Comandos e argumentos
	Executando comandos com poderes de root
	Produtividade em Sessões de Linha de Comando
	Redirecionamento
	Canalização
	Sistema de arquivos
	Nomenclatura de discos e partições
	Identificando e manipulando partições
	Diferenças entre diretórios e arquivos
	Navegando pelo sistema de arquivos
	Manipulando arquivos e diretórios
	Executando Programas
	Manipulando arquivos de texto
	Diretórios importantes
	Montagem e informações de partições
	Gerência de Usuários
	Propriedade e Permissões de Arquivos
	Propriedades de arquivos
	Permissões de Arquivos
	Permissões de Diretórios
	Identificando Permissões e Propriedade
	Alterando Permissões
	Alterando Proprietário
	Manipulando Arquivos Compactados
	Arquivos Zip
	Arquivos Tar
	Programação Shell
	Começando com o famoso “ Olá mundo ! ”
	Utilizando variáveis do shell
	Criando variáveis
	Utilizando parâmetros
	Estruturas condicionais
	Estruturas de repetição
	Gerenciamento de Processos
	Gerenciamento de Pacotes
	DPKG
	APT
	Gerência de Hardware
	Gerência de Rede

Mais conteúdos dessa disciplina