Download - Linux Basico
1
Universidade Federal de Santa Maria
Centro de Ciências Rurais
Departamento de Engenharia Rural
Linux básico : distribuição DEBIAN
Série Didática
Santa Maria, agosto de 2007.
Prof. Rudiney Soares Pereira
Núcleo de Desenvolvimento de Informações e Geotecnologias
Laboratório de Sensoriamento Remoto
2
P436l
Pereira, Rudiney Soares, 1958-
Linux básico : distribuição DEBIAN / por Rudiney Soares Pereira. – Santa Maria:
UFSM/Departamento Engenharia Rural/Laboratório de Sensoriamento Remoto,
2007. (Caderno didático)
75 f. : il.
1. Linux 2. Sistema operacional 3. Distribuição DEBIAN 4. Computação I. Título
II. Série
CDU: 004.451.9LINUX
Ficha catalográfica elaborada por
Luiz Marchiotti Fernandes CRB-10/1160
Biblioteca Setorial do Centro de Ciências Rurais/UFSM
3
4
S U M Á R I O
1. Introdução ....................................................................................................................... 6
2. Distribuições LINUX ...................................................................................................... 6
3. Características ............................................................................................................... 6
3.1. Free software ................................................................................................................... 6
3.2. Modularidade .................................................................................................................. 7
3.3. Multitasking (multitarefa) ................................................................................................ 7
3.4. Multiuser (multiusuário) ................................................................................................. 7
3.5. Portabilidade .................................................................................................................. 7
3.6. Multiprocessamento ....................................................................................................... 7
4. Estrutura organizacional ............................................................................................ 7
4.1.Kernel ............................................................................................................................. 7
4.1.1.Versões do kernel ........................................................................................................ 7
4.2.Shell ................................................................................................................................ 8
4.3.Processos ........................................................................................................................ 8
4.3.1.Processos interativos .................................................................................................... 8
4.3.2.Processos batch ........................................................................................................... 8
4.3.3.Processos deamons ...................................................................................................... 8
4.3.4.Atributos ....................................................................................................................... 9
4.4.Tipos de arquivos e estruturas ........................................................................................ 9
4.4.1.Arquivos ordinários (arquivos comuns) ....................................................................... 9
4.4.2.Arquivos diretórios ...................................................................................................... 10
4.4.2.1.Hierarquia de arquivos ............................................................................................ 10
4.4.2.2.Estrutura hierárquica .............................................................................................. 10
4.4.3.Arquivos especiais ...................................................................................................... 12
5. Conexão e desconexão com o sistema .................................................................... 12
5.1.Conexão com o sistema ................................................................................................. 12
5.2.Desconexão com o sistema ........................................................................................... 13
6. Criação e exclusão de usuários ................................................................................ 13
7. Comandos ..................................................................................................................... 15
7.1.Manipulação de arquivos e diretórios ............................................................................. 15
7.2.Manipulação e filtragem de texto ................................................................................... 27
5
7.3.Pesquisa em informações ............................................................................................... 34
7.4.Comandos de terminal ................................................................................................... 37
7.5.Comandos de administração do sistema ........................................................................ 51
7.6.Formato padrão de uma linha de comando .................................................................... 52
7.7.Comparação entre os comandos DOS e LINUX ............................................................... 53
8. Redirecionamento, filtros e pipes ............................................................................ 54
8.1.Redirecionamento .......................................................................................................... 54
8.2.Filtros ............................................................................................................................. 55
8.3.Pipes .............................................................................................................................. 56
9. Montando e desmontando dispositivos ................................................................... 57
9.1.Discos ............................................................................................................................ 57
9.2.Montando a partição ..................................................................................................... 57
10.Pacotes DEB ................................................................................................................ 60
10.1.Editando o arquivo sources.list ................................................................................... 61
10.2.Atualizando o sistema com o apt-get ......................................................................... 61
10.3.O pacote Synaptic ...................................................................................................... 63
11.Permissões nos arquivos e diretórios .................................................................... 71
11.1.Alteração das permissões .......................................................................................... 72
11.2.Alteração do grupo e dono ........................................................................................ 74
12.Referências para consulta ...................................................................................... 75
6
1. Introdução
O objetivo deste material é servir de consulta à usuários iniciantes no mundo do
software livre. Não tem o propósito de ser um documento completo e, certamente é possibilitar
um contato inicial com o LINUX, com ênfase na distribuição DEBIAN. Sua organização passa por
considerações gerais sobre software livre, estrutura organizacional dos sistemas operacionais
LINUX, distribuições existentes, gerenciamento de usuários no sistema, comandos, montagem
de dispositivos e gerenciamento do sistema com atualizações de pacotes DEBIAN.
Linux é um Sistema Operacional baseado em LINUX assim como o AIX da IBM, Solaris,
SunOS, BSD e outros.
Os direitos autorais pertencem a Linus Torvalds (Linux = Linus + LINUX) e outros
colaboradores porém, pode ser livremente distribuído sob os termos da GNU (General Public
License - GPL). Essa licença preserva os direitos autorais do software, mas assegura a
distribuição dos programas com código-fonte.
Linux em si é apenas o Kernel (Núcleo) do sistema operacional, a parte que controla o
hardware, gerencia arquivos, separa processos, entre outras funções.
Existem diversas combinações de Linux com vários utilitários e aplicativos de modo a
formar um sistema operacional completo. Cada uma dessas combinações é chamada de
distribuição.
2. Distribuições LINUX
Distribuições são sistemas originados pelo trabalho de comunidades, universidades,
usuários e empresas que transformam/adaptam o Linux com a adição de facilidades e/ou
recursos. Isso, se dá pela introdução de aplicativos e/ou utilitários desenvolvidos e
disponibilizados em CD/DVD aos interessados, juntamente a documentação/suporte, manuais e
tutoriais.
Dentre muitas distribuições, podemos citar:
Debian, Redhat, Conectiva, Caldera, Mandrake, Slackware, Suse, Tech Linux, Turbo
Linux, Ubuntu Linux, Mandriva, entre outras.
Para uma lista mais detalhada, consulte os sítios:
http://distrowatch.com/, http://pt.wikipedia.org/wiki/Linux
3. Características
O sistema operacional LINUX apresenta seis características que lhe são muito
peculiares. Dentre estas, pode-se citar que é um software livre (free software), possui
modularidade, é multitarefa, multiusuário, é portável e permite multiprocessamento. Abaixo,
breve descrição destas características.
3.1 Free Software: tem todo seu código fonte(incluindo o Kernel, drivers, bibliotecas, etc.)
aberto para qualquer um.
7
3.2 Modularidade: O LINUX é o único em seu desenho modular, que permite usuários
adicionar ou remover partes para adaptá-lo as suas necessidades específicas.
3.3 Multitasking (multitarefa): a capacidade de Multitasking do LINUX permite que mais de
uma tarefa seja realizada simultaneamente.
3.4 Multiuser (Multiusuário): um sistema multiusuário permite que vários usuários utilizem o
computador simultaneamente.
3.5 Portabilidade: a portabilidade é a possibilidade dos softwares que operam em uma
máquina operarem em uma outra diferente.
3.6 Multiprocessamento: o LINUX foi aprimorado para trabalhar em máquinas de grande
porte, suportando assim a utilização de vários processadores em um único computador, e
com a possibilidade de compartilhamento do processamento entre vários usuários ao
mesmo tempo.
4. Estrutura Organizacional
A estrutura organizacional pode ser dividida em 4 partes principais: Kernel, Shell,
processos e estrutura de arquivos.
4.1 Kernel
É a base do Sistema Operacional, suporta os programas dos usuários e programas
utilitários como compiladores, links, sistemas de controle, código fonte, etc. e, implementa as
seguintes funções:
Escalonamento de processos;
Gerenciamento de memória;
Gerenciamento de dispositivos;
Gerenciamento de arquivos;
Interface de chamada do sistema;
Interface de controle do operador.
4.1.1 Versões do Kernel
Convenção para distinguir as versões estáveis das não estáveis:
Versão v.x.y,
onde:
v : número da versão.
8
x : número par versão estável
: número impar versão não estável (versões para beta teste características
novas sendo acrescentadas todo o tempo)
y : correções de bugs, nenhuma característica nova implementada.
De tempos em tempos o Kernel apresenta-se como uma performance confiável
passando a ser denominado como uma Kernel estável. O desenvolvimento continua em uma
nova versão do Kernel.
Kernel é mudado conforme novos devices e/ou drivers são adicionados e erros são
corrigidos.
4.2 Shell
Shell é o programa que conecta e interpreta os comandos digitados por um usuário. Ele
é o mediador entre o usuário e o sistema LINUX usado para interpretar os comandos. Esse
programa lê os comandos digitados pelo usuário e os executa utilizando os serviços e/ou outros
programas do sistema operacional.
Dentre os Shells mais conhecidos pode-se citar:
sh Bourne Shell – o mais tradicional(prompt $);
Bash Bourne – Again Shell – Shell padrão do Linux;
ksh Korn Shell – muito utilizado atualmente;
csh C Shell – considerado o mais poderoso – largamente utilizado(prompt %);
rsh Remote Shell – Shell remoto;
Rsh Restricted Shell – versão restrita do sh
4.3 Processos
Um processo é um simples programa que está rodando em seu espaço de
endereçamento virtual próprio. Os processos são executados em background ou foreground e
podem ser divididos em três grupos principais: interativos, batch e deamons.
4.3.1 Processos interativos: são iniciados a partir de, e controlados por, uma sessão terminal.
4.3.2 Processos batch (ou em lote): não são associados a nenhum terminal. Ao invés disso são
submetidos a uma fila, da qual jobs (trabalhos/instruções) são executados seqüencialmente.
4.3.3 Processos deamons: são processos servidores, inicialmente iniciados durante o boot, que
rodam continuamente enquanto o sistema estiver ativo, esperando, em background, até que
um processo requisite seus serviços.
9
4.3.4 Atributos
Process ID (PID)
Parent Process ID (PPID)
TTY
UID real e efetiva (RUID, EUID)
GID real e efetiva (RGID, EGID)
Process ID, PID é um número que identifica unicamente esse processo e é usado para
referir-se a ele.
Parent Process ID, PID é o “pai” do processo, ou seja, o processo que o criou.
TTY é o dispositivo de terminal associado com o processo.
UID real de um processo é o UID do usuário que o criou. O UID efetivo, é o UID que é
utilizado para determinar o acesso do processo a recursos do sistema. Usualmente, RUID e
EUID são os mesmos, e o processo tem os mesmos acessos que o usuário que os disparou.
GID real e efetivo de um processo é o grupo primário ou corrente do usuário.
4.4 Estrutura de Arquivos
Arquivos são centrais para o LINUX de uma maneira não encontrada em outros sistemas
operacionais.
O LINUX tem uma organização de diretórios hierárquica em forma de árvore conhecida
como filesystem. A base desta árvore é um diretório chamado root directory. Em sistemas
LINUX, todo espaço em disco disponível é combinado em uma única árvore de diretórios abaixo
do “/” (root).
O acesso a arquivos é organizado através de propriedades e proteções. Toda segurança
do sistema depende, em grande parte, da combinação entre a propriedade e proteções
fixadas/estabelecidas em seus arquivos e suas contas de usuários e grupos.
Resumindo:
Tudo em LINUX é um arquivo;
O LINUX tem uma organização de diretórios hierárquica chamada filesystem;
O acesso a arquivos é organizado através de propriedades e proteções.
4.4 Tipos de arquivos e estruturas
Existem três tipos de arquivos no LINUX: os arquivos ordinários (comuns), os arquivos
diretórios
4.4.1 Arquivos Ordinários (ou arquivos comuns)
São arquivos que contém dados binários ou caracteres ASCII. Consiste de uma string de
bytes de dados. Por exemplo, um arquivo criado através de um editor de texto é um arquivo do
10
tipo ordinário. Uma subclasse de arquivos ordinários são os arquivos hidden (oculto). O nome
dos arquivos hidden inicia sempre com um ponto (.profile, .kshrc) e possue funções especiais.
Esses arquivos ocultos recebem a denominação de hidden porque normalmente não podem ser
vistos em uma consulta a um diretório.
4.4.2 Arquivos Diretórios
São responsáveis pela manutenção da estrutura hierárquica do sistema de arquivos. As
informações são armazenadas em arquivos ordinários agrupados em diretórios, que por sua
vez também são agrupados em outros diretórios.
Todo diretório contém os nomes de arquivos "." e ".." , que corresponde
respectivamente ao próprio diretório e ao seu diretório pai. Todo usuário possui um diretório
default (home directory), e quando ele se conecta ao sistema o LINUX, automaticamente o
posiciona neste diretório.
4.4.2.1 Hierarquia de arquivos
Como foi dito anteriormente os arquivos diretórios são organizados hierarquicamente
em forma de árvore em que a base é chamada de root. Esta árvore pode ser facilmente
observada na figura 1.
4.4.2.2 Estrutura da árvore de diretórios
A árvore de diretórios é constituída por: bin, boot, cdrom, dev, etc, home, initrd, lib,
media, mnt, opt, proc, root, sbin, selinux, srv, sys, tmp, usr e var. Alguns desses como srv,
proc, selinux, sys são temporários e podem ser extintos por ocasião do momento de
desconexão ou pela intalação de alguns aplicativos como por exemplo “reconstructor” ou
“isomaster” que são aplicações utilizadas para a construção de novas distribuições. A figura 1
apresenta essa estrutura da árvore de diretórios.
11
Figura 1: Estrutura da árvore de diretórios
Tabela 1: Estrutura de diretórios do Linux
Diretório Descrição dos arquivos que estão nesse diretório
/ Diretório raiz do sistema de arquivos. é abaixo dele que se situam todos os
outros.
/bin Arquivos executáveis de comandos essenciais.
/boot Arquivos estáticos necessários à inicialização do sistema.
/dev Arquivos de dispositivos (drives) do sistema.
/etc Arquivos de configuração do sistema.
/home Lugar onde ficam os diretórios locais(diretórios pessoais) dos usuários.
/lib Arquivos de bibliotecas essenciais ao sistema, utilizados pelos programas em
/bin.
/mnt Usualmente é o ponto de montagem de dispositivos(drives) na máquina.
/proc Informações do kernel e dos processos.
/root Diretório local do superusuário.
/sbin Arquivos essenciais (comandos especiais) ao sistema. Normalmente só o
superusuário tem acesso a estes arquivos.
/tmp Diretório de arquivos temporários.
/usr Arquivos pertencentes aos usuários. ( é a segunda maior hierarquia de
diretórios presente no Linux, só perdendo para o diretório raiz).
12
4.4.3 Arquivos Especiais
O LINUX trata todos os dispositivos físicos do sistema como arquivos especiais. Cada
dispositivo do computador, tais como: terminais, unidades de fita, disco e impressoras, possui
um arquivo especial associado à ele. Estes arquivos estão localizados no diretório /dev, e não
referenciam dados, eles possuem especificações sobre o tipo de dispositivo, como terminal ou
impressora, e suas características, como configuração, densidade de gravação, etc. Os
arquivos especiais podem ser acessados da mesma forma que os arquivos ordinários.
Obs:
1. O nome do arquivo pode possuir até 255 caracteres, em sistemas BSD, ou até 14
caracteres, em sistemas System V.
2. Alguns caracteres não devem ser usados por possuírem significado especial para o
LINUX, são eles: "/", "*", "?", "[", "]", ">", "<", "-", "$", "'","""", "&", "!" e “\”.
3. Para quem está acostumado com o DOS, notará algumas diferenças como os nomes de
arquivos, que no DOS tem apenas 8 caracteres de nome e 3 de extensão. No LINUX não
existe esse limite, podendo ter várias formas finais de apresentação. Os arquivos no
LINUX não possuem extensões, porém podemos incluir um ponto seguido de uma
seqüência de caracteres no nome de qualquer arquivo, embora, esta pseudo extensão,
não possua nenhum significado especial para os comandos LINUX.
Exemplo: trabalho.txt.zip.tar
5. Conexão e Desconexão com o Sistema
Entende-se por conexão e desconexão do sistema a ação que o usuário executa junto
ao sistema, com o objetivo de acessar a sua área de trabalho e demais aplicações
disponibilizadas pelo sistema operacional entre elas as compreendidas e relacionadas a leitura,
escrita e execução de arquivos ressalvadas as permissões de acesso.
5.1 Conexão com o sistema
A conexão ao sistema necessita de dois elementos básicos: uma identificação de
usuário (login) e uma senha (password) de acesso.
Caso ocorra algum erro na digitação do login ou da password, o sistema responde com a
mensagem 'login incorrect' e proporciona uma nova oportunidade ao usuário de se conectar.
Havendo sucesso o shell apresenta um prompt, indicando que está pronto para receber
comandos do usuário. O prompt apresentado depende do shell que se está utilizando, no
Bourne Shell e Korn Shell o prompt é o caracter "$" enquanto que, no C Shell, é o caracter "%".
Em qualquer uma das situações, o prompt do usuário root, será representado pelo caracter
“#”.
13
5.2 Desconexão do sistema
A desconexão do sistema pode ser obtida através do comando logout, da seqüência de
teclas digitadas [Ctrl+D], ou ainda, executar o comando exit.
Atenção: No sistema operacional LINUX as letras maiúsculas e minúsculas, são tratadas como
caracteres distintos ou seja, são case sensitive.
6. Criação e exclusão de usuários e grupos
Uma conta de usuário é um conjunto de duas informações a citar: nome de acesso
(login) e uma senha (password), que possibilitam ao usuário acessar a sua área do sistema.
Devido a essa característica, um mesmo usuário pode ter várias contas com a ressalva de que
sejam criadas com nomes de acesso (login) diferentes.
Exite basicamente dois tipos de contas: a primeira delas denominada de “usuário” que
permite o acesso e o uso das ferramentas do sistema e, o segundo tipo, a conta denominada
de “superusuário” que permite realizar configurações no sistema. Assim, a conta com
privilégios de superusuário necessita de senha, preferencialmente, diferente da senha para a
conta “usuário” pois, somente assim, resguardam-se aspectos de segurança do sistema e a
possibilidade de que apenas um “superusuário” possa configurar o sistema.
Um “grupo” é basicamente um conjunto de usuários cujas contas possuem acessos
específicos no sistema ou seja, é possível definir para o grupo de usuários um conjunto de
aplicações e/ou arquivos em comum, que essas contas “usuários” terão acesso ao uso
considerando níveis de restrição/permissão.
Existem algumas formas de criar e manter usuários em um sistema, porém todas elas,
necessitam privilégios de superusuário. Uma das formas é a utilização da linha de comando no
terminal console (texto), com o comando “adduser”. Por exemplo, para criar um usuário
denominado “geomatica”, no terminal, digita-se como superusuário (#), o seguinte comando:
# adduser geomatica
Para definirmos a senha desse usuário, que, assim permitirá o acesso as
aplicações/arquivos comuns, digita-se:
# passwd geomatica
No exemplo abaixo, identificamos algumas informações importantes como: a) a
sentença “rudiney@katrina:~$” identifica usuário denominado “rudiney” na máquina
denominada “katrina”. A seqüência “:~$” significa que o usuário “rudiney” está em sua área
de trabalho.
Ainda, para criarmos o usuário “geomatica”, é necessário que se tenha privilégios de
“superusuário” por isso, digita-se “su -”. Após, o sistema solicitará a senha com a sentença
14
“Password:”. Digitada a senha, então, o usuário “rudiney” inicialmente logado, agora passa a
ter os privilégios de “superusuário”. O que caracteriza essa situação é a sentença
“katrina:~#”.
Então, executa-se o comando adduser geomatica.
rudiney@katrina:~$ su -
Password:
katrina:~# adduser geomatica
Adding user 'geomatica' ...
Adding new group 'geomatica' (1002) ...
Adding new user 'geomatica' (1002) with group 'geomatica' ...
Creating home directory '/home/geomatica' ...
Copying files from '/etc/skel' ...
Enter new LINUX password:
Retype new LINUX password:
passwd: senha atualizada com sucesso
Modificando as informações de usuário para geomatica
Informe o novo valor ou pressione ENTER para aceitar o padrão
Nome Completo []:
Número da Sala []:
Fone de Trabalho []:
Fone Doméstico []:
Outro []:
A informação está correta? [s/N]
katrina:~#
A senha “password” pode conter qualquer caractere porém, é desejável por questões de
segurança, que ela possua no mínimo 6 caracteres. O preenchimento dos demais dados como:
Nome Completo[], Número da Sala[], Fone de trabalho[], Fone Doméstico[] e Outro[], é de
caráter opcional.
Com isto, a nova conta estará criada. Uma linha será incluída no arquivo /etc/passwd
com os dados do novo usuário, incluindo o seu diretório de trabalho (/home/geomatica), sendo
colocado o /bin/bash como o interpretador de comandos padrão, entre outros dados.
Do mesmo modo, para remover contas de usuários basta digitar o comando:
# userdel -r usuario
No exemplo acima, o “usuario” é geomatica. Com esse comando, subtrai-se da área
/home, o usuário “geomatica” com todo o seu conteúdo. Também, os dados do arquivo
/etc/passwd.
O comando de texto groupadd cria um novo grupo. Para remover um grupo, basta
executar o comando groupdel.
15
Há dois modos de incluir usuários em um grupo pelo modo texto: a) utilizando o
comando usermod ou b) diretamente no arquivo /etc/group.
Para incluir novos usuários em um grupo, deve-se editar diretamente o arquivo. Por
exemplo, se existir um grupo denominado “grandeteste”, pode-se adicionar usuários “teste” e
“geomatica” usando o comando usermod assim, teremos a seqüência:
a) usando o comando usermod:
# usermod -G grandeteste teste
# usermod -G geomatica
b) editando o arquivo /etc/group com um editor de texto, por exemplo o vi ou vim:
grandeteste:x:504:teste,geomatica
Dessa forma, os usuários teste e geomatica foram incluídos no grupo grandeteste. No
entanto, o comando usermod só permite a inclusão de um usuário por vez.
A inclusão de vários grupos, deve ser cuidadosamente manipulada pois, essa ação,
apaga a configuração anterior.
7. Comandos
Os comandos podem ser subdivididos em agrupamentos com as finalidades:
manipulação de arquivos e diretórios, manipulação e filtragem de texto, pesquisa em
informações, comandos de terminal e comandos de administração de sistema.
7.1. Manipulação de arquivos e diretórios
ls
O comando ls exibe arquivos ou o conteúdo de um ou vários diretórios.
Sintaxe:
$ ls [opções] [arquivo]
Opções:
-a: Exibe arquivos ocultos;
-A: Não exibe os diretórios . e ..;
--author: Mostra o autor (criador) de cada arquivo;
-b: Exibe caracteres de escape octais no lugar dos caracteres que não podem ser vistos,
16
como o espaço em branco;
--block-size=[tamanho]: Exibe o tamanho dos arquivos em múltiplos do número de
bytes especificado nesse parâmetro;
-B: Não exibe arquivos de backup (terminados com ~);
-c: Lista os arquivos por ordem da data da última modificação;
-C: Exibe a listagem em colunas;
--color=[quando]: Controla quando as cores devem ser usadas para distinguir os tipos
de arquivos. Os valores aceitos são:
. never: Não usa cores pra nenhum tipo de arquivo;
. always: Usar cores para todo tipo de arquivo;
. auto: Seleciona quais arquivos serão exibidos em cores.
-d: Exibe o diretório especificado, e não o seu conteúdo;
-f: Ativa os parâmetros -a e -U e desabilita os parâmetros -l, -s e -t;
-F: Acrescenta um caracter gráfico ao final de cada arquivo para identificar o seu tipo;
-G: Não exibe informações dos grupos a que os arquivos pertencem;
-h: Exibe os tamanhos dos arquivos em uma forma legível (2K, 21M, 1G);
--si: Semelhante ao -h, mas usa múltiplos de 1000 bytes ao invés de 1024;
-H: Exibe os arquivos para os quais os links simbólicos apontam, ao invés de listar só o
link;
-i: Exibe o número de índice (I-node) dos arquivos;
-I: Não exibe entradas que contiverem o padrão informado;
-k: Equivalente a --block-size=1k;
-l: Listagem detalhada, com diversas informações sobre os arquivos;
-L: Quando listar links simbólicos, lista o local para onde o link aponta, e não o link
propriamente dito;
-m: Lista os arquivos em linhas, separando cada item com uma vírgula;
-n: O mesmo que o parâmetro -l, mas mostra as UID's e GID's ao invés dos nomes dos
grupos;
-o: O mesmo que o parâmetro -l, mas não exibe as informações sobre o grupo;
-p: Adiciona um caracter para identificar o tipo do arquivo. O mesmo que -F, mas não
utiliza o caracter * (asterisco);
-Q: Exibe os nomes das entradas entre " (aspas duplas);
-r: Organiza a lista na ordem inversa;
-R: Lista recursivamente o conteúdo dos diretórios e subdiretórios do diretório atual;
-s: Exibe o tamanho de cada arquivo, em múltiplos de blocos (especificados com o
parâmetro --block-size=[tamanho]);
-S: Organiza a lista de acordo com o tamanho do arquivo;
-t: Lista pela data de modificação;
-u: Organiza a listagem pela data do último acesso;
-U: Não organiza a listagem, exibindo os arquivos na seqüência em que estão gravadas
no diretório;
-w: Ajusta o tamanho da tela para o número de colunas especificado;
-X: Organiza a listagem em ordem alfabética;
17
-1: Lista apenas um arquivo por linha;
Em [arquivo], devemos informar quais arquivos (arquivos, diretórios, dispositivos, links,
etc.) devem ser listados. Se não for informado nada, será listado o conteúdo do diretório atual
(.).
Pode-se também utilizar curingas para filtrar os arquivos que serão listados. Por
exemplo, podemos usar ls *.doc para listar somente os arquivos terminados em .doc.
cd
O comando cd, sigla de change directory (selecionar diretório), serve para acessar um
determinado diretório.
Sintaxe:
$ cd [diretório]
Lembrando a lista dos diretórios do sistema:
..: Diretório acima do atual. Se você estiver no diretório /home/aluno/ e quiser acessar o
diretório /home/, digite cd ... Se quiser acessar o diretório /home/ana/, digite cd ../ana/;
~: Diretório pessoal do usuário atual, ou seja, /home/[usuário]/;
-: Diretório anterior. Se você estava no diretório /etc/ e mudou para o diretório /home/,
digite cd - para voltar ao diretório /etc/.
Se for usado sem parâmetro, ou seja, apenas cd, você será redirecionado para o
diretório pessoal do usuário atual.
mkdir
O comando mkdir, abreviatura de make directory (criar diretório), é usado para criar
um novo diretório.
Sintaxe:
$ mkdir [opções] [novo diretório]
Opções:
-m: Especifica as permissões que do novo diretório terá;
-p: Cria todos os diretórios e subdiretórios necessários;
-v: Exibe uma mensagem para cada diretório criado.
18
Em [novo diretório] devemos colocar os diretórios que queremos criar. Não é necessário
digitar o caminho completo, caso queiramos criar um diretório dentro do diretório atual.
Podemos criar vários diretórios com um único comando, bastando separá-los com espaços. Se
quiser que o nome do novo diretório tenha espaços em branco, escreva-o entre aspas duplas,
dessa forma:
$ mkdir /home/ana/"diretório com espaços em branco"
rmdir
Esse comando é utilizado para apagar um diretório vazio.
Sintaxe:
$ rmdir [opções] [diretório]
Opções:
-p: Remove os diretórios-pai do diretório selecionado, se possível. Assim, o comando
rmdir -p a/b/c/ vai apagar o diretório a/b/c/, depois o diretório a/b/ e por fim o diretório a/, se
possível;
-v: Mostra os detalhes da remoção dos diretórios.
Podem ser especificados mais de um diretório por vez. O rmdir só remove diretório
vazios.
pwd
O pwd, sigla de print working directory (exibir diretório de trabalho), exibe o diretório
atual. É equivalente a echo $PWD.
Uso:
$ pwd
cat
O comando cat concatena arquivos e imprime na saída padrão (exibe na tela). Em
arquivos, usamos o cat para listar seu conteúdo na tela. Com o uso de direcionadores,
podemos usá-lo para unir diferentes arquivos em um só, dentre outra funções.
Sintaxe:
19
$ cat [opções] [arquivo]
Opções:
-b: Numera as linhas, com exceção das linhas em branco;
-E: Mostra um "$"? (cifrão) para indicar fim de linha;
-n: Numera todas as linhas, incluindo as em branco;
-s: Não mostra mais do que uma linha em branco. Se houver duas ou mais linhas em
branco consecutivas, elas são truncadas e apenas uma é mostrada;
-T: Substitui tabulações pelos caracteres "^I"?;
-v: Substitui os caracteres não imprimíveis por símbolos, exceto tabulações e final de
linha.
Exemplos de uso:
$ cat [arquivo1 arquivo2 arquivo3 ... arquivoN] > [arquivo]
Isso pode ser usado em qualquer tipo de arquivo, inclusive arquivos binários. É prática
comum utilizar isso para juntar arquivos de vídeo grandes, como filmes, que muitas vezes são
divididos em várias partes.
Veja no exemplo abaixo, como unir as 2 partes do filme Harmatia em um único arquivo:
$ cat the-harmatia_part-1.mpeg the-harmatia_part-2.mpeg > the-harmatia.mpeg
Vale lembrar que tal procedimento não é corretamente executado com arquivos AVI.
tac
O tac faz o mesmo que o cat, mas exibe o arquivo pela ordem inversa, ou seja,
começando pela última linha e terminando com a primeira.
Uso:
$ tac [arquivo]
touch
O comando touch é usado atualizar as informações sobre as datas de último acesso e
última modificação de um arquivo.
Sintaxe:
$ touch [opções] [arquivo]
20
Se o arquivo não existir, ele é criado, por padrão. Isso faz o touch ser muito utilizado
para criar arquivos vazios, através do comando touch [arquivo].
Opções:
-a: Modifica apenas a data do último acesso;
-c: Não cria arquivos, caso eles não existam;
-m: Modifica apenas a data de modificação;
-t: A data e hora a ser utilizada para o último acesso ou última modificação. O formato
utilizado é MMDDhhmm (mês, dia, hora e minuto);
cp
O cp, abreviação de copy (copiar), é utilizado para copiar arquivos e diretórios de um
local para outro, com o mesmo nome ou com nome diferente.
Sintaxe:
$ cp [opções] [origem] [destino]
-b: Cria um arquivo dos arquivos de destino se eles estiverem para ser sobrescritos;
-P: Quando tratar de links simbólicos, copia o link, e não o local para onde o link aponta;
-f: Operação forçada. Se um dos arquivos de destino não puder ser aberto, apaga-o e
repete a operação;
-i: Pede confirmação antes de sobrescrever um arquivo;
-L: Quando tratar de links simbólicos, copia o local para o onde o link aponta, e não o
link;
-p: Preserva as propriedades do arquivo (permissões, dono e datas);
--preserve=[propriedade]: Escolhe quais propriedades preservar, separadas por vírgula.
Podem ser:
. mode: Preserva as permissões;
. ownership: Preserva a informação de dono do arquivo;
. timestamp: Preserva as datas de acesso e modificação.
--no-preserve=[propriedade]: Escolhe quais propriedades não devem ser preservadas.
As opções são as mesmas que do parâmetro --preserve;
-R ou -r: Modo recursivo, copia todos os arquivos e subdiretórios do diretório
especificado. Esse parâmetro deve ser usado para copiar diretórios inteiros;
--target-directory=[diretório]: Especifica para qual diretório devem ser copiados os
arquivos/diretórios especificados;
-u: Copia apenas os arquivos novos. Se um arquivo que estiver sendo copiado já existir
21
no diretório de destino, sua cópia será ignorada;
-v: Mostra os detalhes da cópia dos arquivos.
Exemplos de uso:
Para copiar o arquivo file.gz para o diretório /tmp/:
$ cp file.gz /tmp
Para para fazer uma cópia do arquivo file.gz com o nome file-copia.gz:
$ cp file.gz file-copia.gz
Para copiar os arquivos file1, file2 e file3 para o diretório /home/ana/doc/:
$ cp file1 file2 file3 /home/ana/doc
Para copiar o diretório img/ para o diretório /tmp/upload/:
$ cp -r img /tmp/upload
Para copiar os arquivos file1, file2 e file3 e o diretório img/ para o diretório /tmp/upload/:
$ cp -r file1 file2 fil3 img /tmp/upload
mv
Utilizamos o mv mover ou renomear arquivos.
Sintaxe:
$ mv [opções] [destino]
Opções:
-b: Cria um backup dos arquivos de destino, se eles forem sobrescritos;
-f: Força as operações, sem fazer perguntas caso seja necessário sobrescrever arquivos
e outros;
-i: Modo interativo, pede confirmação para sobrescrever arquivos;
--target-directory=[diretório]: especifica o diretório de destino para os arquivos;
-u: Só move os arquivos novos. Se o arquivo que está sendo movido já estiver presente
no diretório de destino, ele é ignorado;
-v: Mostra os detalhes do processo de movimentação.
22
Exemplos de uso:
Para mover o arquivo file1 para o diretório /home/ana/doc/:
$ mv file1 /home/ana/doc
Para mover o diretório /home/ana/doc/ para /tmp/upload/:
$ mv /home/ana/doc /tmp/upload
Para renomear o arquivo package.tar.gz para pacote.tar.gz:
$ mv package.tar.gz pacote.tar.gz
Para mover o arquivo file1 e o diretório img/ para o diretório /tmp/upload/:
$ mv file1 img /tmp/upload
rm
O rm é utilizado para excluir arquivos.
Sintaxe:
$ rm [opções] [arquivo]
Opções:
-f: Modo forçado, não pede confirmação para realizar as operações;
-i: Pede confirmação antes de remover qualquer arquivo;
-R, -r: Exclui recursivamente todo o conteúdo do diretório e o próprio diretório. Quando
quiser excluir um diretório que não está vazio, utilize esse parâmetro;
-v: Mostra os detalhes das exclusões.
ln
Esse é o comando utilizado para criar links, simbólicos ou absolutos.
Sintaxe:
$ ln [opções] [alvo] [nome do link]
Opções:
23
-b: Se houver um arquivo com o mesmo nome do link que está sendo criado no diretório
de destino, cria um backup do arquivo existente;
-d: Permite ao administrador do sistema (root) criar um hardlink (link absoluto) para um
diretório;
-f: Força a criação dos links;
-n: Trata um link simbólico pra um diretório como se fosse um arquivo normal;
-i: Pergunta antes de remover arquivos existentes;
-s: Cria um link simbólico;
--target-directory=[diretório]: Especifica em qual diretório o link deve ser criado;
-v: Exibe o nome de cada link antes de criá-lo.
Exemplos de uso:
Se você quiser criar um link simbólico para o arquivo /home/ana/doc/ no diretório atual,
com o mesmo nome do diretório real (no caso, doc):
$ ln -s /home/ana/doc
Se você quiser fazer a mesma coisa, mas preferir que o link criado tenha o nome
"documentos":
$ ln -s /home/ana/doc documentos
Se você quiser criar um link absoluto (hardlink), oculte o parâmetro -s:
$ ln /home/ana/doc
cmp
Esse comando é utilizado para comparar dois arquivos e mostrar a primeira diferença
entre eles. Use para certificar-se de que dois arquivos possuem ou não o mesmo conteúdo.
Sintaxe:
$ cmp [opções] [arquivo1] [arquivo2]
Opções:
-b: Imprime os bytes que são diferentes entre si;
-i [n]: Não considera os primeiros [n] bytes de cada arquivo;
-l: Mostra os número dos bytes e os valores diferentes;
-s: Não mostra nenhum detalhe, apenas sai com status 1 se alguma diferença for
encontrada.
24
Exemplos de uso:
Vamos comparar os arquivos file1 e file2:
$ cmp file1 file2
file1 file2 differ: byte 10, line 2
diff
Esse comando compara dois arquivos de texto e mostra as diferenças entre eles.
Sintaxe:
$ diff [opções] [arquivo1] [arquivo2]
Opções:
-i: Ignora as diferenças de letras maiúsculas/minúsculas;
-E: Ignora as diferenças de tabulação;
-b: Ignora diferenças na quantidade de espaço em branco;
-w: Ignora qualquer espaço em branco;
-B: Ignora linhas em branco a mais ou a menos;
-a: Compara os arquivos como arquivos de texto, ainda que não sejam;
-u [n]: Mostra [n] linhas do conteúdo final do arquivo1, adicionadas as diferenças do
arquivo2;
-q: Mostra apenas se o conteúdo dos arquivos são ou não diferentes;
-y: Mostra os arquivos em duas colunas, indicando as diferenças;
-t: Expande as tabulações, convertendo-as em espaços, na saída;
-r: Compara recursivamente todo o conteúdo de um diretório;
-S [arquivo]: Quando comparar diretórios, inicia a comparação pelo arquivo
especificado.
Exemplos de uso:
Vamos considerar os arquivos file1 e file2, com o seguinte conteúdo:
$ cat file1
5 f j 33
diferença
2 a c 1
1 t 4 f
6 b c _
25
10 i r 3
$ cat file2
5 f j 33
2 a c 1
1 t 4 f
6 b c _
10 i r 3
outra diferença
Aplicando o diff nos dois arquivos, temos o seguinte retorno:
$ diff file1 file2
2d1
< diferença
6a6
> outra diferença
O diff exibe informações sobre o que é necessário fazer para que o conteúdo de file1
seja igual ao de file2. Nesse caso, 2d1 quer dizer que a diferença foi encontrada na linha 2, e
que é necessário apagar (d = delete) a palavra diferença do arquivo file1. O 6a6 nos diz que a
diferença foi encontrada na linha 6, e que é necessário adicionar (a = add) a linha outra
diferença no arquivo file1.
O parâmetro -y exibe esses parâmetros de forma mais clara:
$ diff -y file1 file2
5 f j 33 5 f j 33
diferença <
2 a c 1 2 a c 1
1 t 4 f 1 t 4 f
6 b c _ 6 b c _
10 i r 3 10 i r 3
> outradiferença
Veja que os sinais de maior e menor (>, <) sempre apontam para a linha que é
diferente. Se a diferença estiver no primeiro arquivo, listado à esquerda, ela deve ser apagada.
Se a diferença estiver no segundo arquivo, listado à direita, ela deve ser adicionada.
O diff, quando usado em conjunto com o utilitário patch, fornece uma grande
funcionalidade para atualizações. Um grande exemplo é o código-fonte do kernel Linux. Ao
invés de gravar a nova versão do kernel inteira, é possível gravar a penas as diferenças entre
eles, algo como:
26
$ diff [kernel-antigo] [kernel-novo] > diferenças.diff
E depois utilizar o utilitário patch para gravar as diferenças no kernel-antigo, fazendo-o
ficar com o mesmo conteúdo de kernel-novo. A grande vantagem é que não é necessário o
usuário baixar todo o kernel, que é muito grande, mas apenas o arquivo com as diferenças,
bem pequeno.
patch
Utilizamos esse comando para atualizar as diferenças geradas através do comando diff.
Suponhamos os arquivos file1 e file2, que são diferentes. Podemos criar as diferenças entre os
dois arquivos com o comando diff:
$ diff file1 file2 > file.diff
Esse comando gera um arquivo file.diff com as diferenças entre os arquivos file1 e file2.
Podemos agora usar o comando patch para aplicar as diferenças no arquivo file1,
fazendo seu conteúdo ficar igual ao de file2:
$ patch file1 file.diff
Sintaxe:
$ patch [opções] [arquivo] [arquivo de patch] (para arquivos)
$ patch [opções] < [arquivo de patch] (para diretórios)
Opções:
-p [n]: Nível do diretório onde será aplicado o patch. Se [n] for 0, o patch será aplicado
no diretório atual. Se for 1, será aplicado no diretório acima (..), se 2, 2 diretórios acima (../..) e
assim por diante;
-b: Cria cópias dos arquivos originais antes de aplicar o patch;
-binary: Lê e grava usando o modo binário;
-d [diretório]: Muda para o diretório especificado antes de aplicar o patch;
-E: Remove arquivos vazios após a aplicação do patch;
-n: Interpreta o arquivo de patch como um .diff normal;
-N: Não desfaz patches já aplicados;
-s: Modo silencioso, não exibe mensagens de erro;
-u: Interpreta o patch em formato unificado. Use isso se o arquivo de patch foi gerado
com diff -u.
27
7.2. Manipulação e filtragem de texto
grep
O grep é utilizado para encontrar padrões em arquivos de texto, ou, em outras palavras,
procura num arquivo todas as linhas que possuem a palavra ou expressão informada e as exibe
na tela.
Sintaxe:
$ grep [expressão] [arquivo]
Assim, se você quiser varrer o arquivo /etc/fstab procurando pelas linhas que contém o
texto "/dev/fd0", digite:
$ grep /dev/fd0 /etc/fstab
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
Se o padrão informado não for encontrado no arquivo especificado, não é exibida
nenhuma mensagem.
cut
O cut é utilizado para selecionar colunas de texto em um arquivo. Suponhamos que
você tenha um arquivo da seguinte forma:
A1 B1 C1
A2 B2 C2
A3 B3 C3
E precise, por algum motivo, que somente a terceira coluna seja exibida na tela, dessa
forma:
C1
C2
C3
É exatamente isso que o cut fará para nós.
Sintaxe:
$ cut [opções] [arquivo]
28
Opções:
-c: Especifica quais caracteres serão exibidos;
-d: Especifica qual o caracter será usado como delimitador de campo;
-f: Lista dos campos que serão exibidos;
-s: Não exibe as linhas que não contém os delimitadores especificados em -d;
--output-delimiter=[string]: Utiliza a string (seqüência de caracteres) especificada como
o delimitador dos campos na saída.
Exemplos de uso:
Considerando o arquivo lista.txt com o conteúdo mostrado acima, se quisermos exibir
somente o quinto caracter de cada linha, usamos:
$ cut -c 5 lista.txt
1
2
3
Se quisermos exibir os primeiros 5 caracteres, utilizamos -5 ao invés de 5:
$ cut -c -5 lista.txt
A1 B1
A2 B2
A3 B3
Se quisermos exibir do quinto caracter em diante, usamos 5-, assim:
$ cut -c 5- lista.txt
1 C1
2 C3
3 C3
Por fim, para exibir do segundo até o sexto caracter:
$ cut -c 2-6 lista.txt
1 B1
2 B2
3 B3
Repare agora que o delimitador de cada coluna é o espaço em branco. Assim, se
quisermos exibir apenas o primeiro campo, usamos:
29
$ cut -f1 -d' ' lista.txt
A1
A2
A3
O parâmetro -f1 informa que queremos que seja exibido o primeiro campo, enquanto -d'
' (dois acentos agudos separados por espaço) informa que o separador de campos é o espaço
em branco. O parâmetro -d não precisa ser utilizado no caso de o arquivo utilizar TAB
(tabulação) como separador de campos.
Seguindo esse raciocínio, se quisermos exibir os campos 1 e 3, usamos:
$ cut -f1,3 -d' ' lista.txt
A1 C1
A2 C3
A3 C3
Com o uso do direcionador | (pipe) podemos processar o mesmo arquivo várias vezes
com o cut, de modo a podermos fazer um processamento poderoso do arquivo de texto. Além
disso, ele aceita a saída de outros programas como entrada, através do mesmo direcionador |.
head
Usamos esse comando para exibir as linhas iniciais de um arquivo.
Sintaxe:
$ head [opções] [arquivo]
Opções:
-c [-][n]: Sem o - (hífen), mostra os primeiros [n] bytes do arquivo. Com o -, mostra
todos os bytes com exceção dos [n] últimos;
-n [-][n]: Sem o -, mostra as primeiras [n] linhas do arquivo. Com o -, mostra todas as
linhas com exceção das [n] últimas;
-v: Imprime um cabeçalho com o nome do arquivo.
Exemplos de uso:
Para ver as primeiras 5 linhas do arquivo file, faça:
$ head -n 5 file
1
2
30
3
4
5
Se quiser exibir todas as linhas menos as 3 últimas:
$ head -n -3 file
1
2
3
4
5
6
7
more
Usamos esse comando para realizar a paginação de arquivos de texto cujo conteúdo
não cabe na tela.
Sintaxe:
$ more [opções] [arquivo]
Opções:
-d: Exibe as mensagens [Press space to continue, 'q' to quit] (pressione espaço para
continuar, 'q' para sair). Ao se pressionar espaço, a tela rola uma página inteira. Se for
pressionada alguma tecla inválida, é exibida a mensagem [Press 'h' for instructions.] (pressione
'h' para instruções.);
-l: Evita que ocorram pausas toda vez que seja encontrado o caracter "^L" (alimentação
de formulário) no texto;
-s: Se houver múltiplas linhas em branco num arquivo, trunca elas em apenas uma;
+/[padrão]: Começa a mostrar o texto a partir da primeira linha que contém o padrão
informado;
+[número]: Especifica qual linha deve ser a primeira a ser mostrada;
-[número]: Especifica o tamanho da tela, em linhas.
Assim, quando quiser ler um texto muito extenso sem precisar abrir um editor de textos
para isso, use o more. O texto será exibido até ocupar a tela inteira, e então aparecerá um
prompt escrito "--More--(xx%)". Presssione Enter para rolar o texto linha por linha. Se quiser
cancelar a exibição e voltar para o prompt de comando, pressione "q".
31
É possível usar o more para exibir vários arquivos seqüencialmente. Basta informar
todos os arquivos separados por espaço.
less
O less tem a mesma utilidade do more, com a vantagem de poder rolar o texto exibido
para cima e para baixo através do uso dos direcionais, além de contar com um localizador de
texto. Para digitar o padrão que você deseja procurar precedido de / (barra).
Sintaxe:
$ less [arquivo]
sort
Usamos esse comando para classificar as linhas de um arquivo de texto.
Sintaxe:
$ sort [opções] [arquivo]
Opções:
-b: Ignora linhas em branco;
-d: Descarta quaisquer linhas iniciadas com caracteres que não sejam espaço em
branco ou alfanuméricos;
-f: Ignora a diferença entre caracteres maiúsculos e minúsculos;
-r: Exibe a lista na ordem inversa;
-n: Organiza os números na ordem aritmética. Sem essa opção, a seqüência de
caracteres 100, 10, 50 seria exibida na ordem 10, 100, 50. Com a opção -n, eles são exibidos
na ordem 10, 50, 100;
-c: Verifica se o arquivo já está organizado. Se não estiver, retorna a mensagem disorder
on [arquivo] (desordem em [arquivo]);
-o [arquivo]: Grava a saída do comando sort no arquivo especificado;
-m [arquivo1] [arquivo2]: Combina o conteúdo dos dois arquivos gerando um único
arquivo. Esse comando só funciona se ambos os arquivos já estiverem ordenados;
-i: ignora os caracteres fora da faixa octal ASCII 040-0176;
-t [caracter]: Usa o caracter especificado ao invés de espaço em branco como
delimitador durante a organização das linhas;
+[número 1] +[número 2]: Especifica qual campo (coluna) será usado como referência
na organização. Os campos começam a ser contados de 0, e o separador de campos padrão é
o espaço. Para selecionar outro delimitador, use o parâmetro -t. Os campos serão organizados
32
de [número 1] até [número 2]. Se [número 2] não for especificado, os campos serão
organizados de [número 1] até o final da linha;
-k [número 1] [número 2]: Idêntico ao parâmetro anterior, mas os campos começam a
ser contados de 1.
Exemplos de uso:
Suponha que você tenha um arquivo file.list com o seguinte contéudo:
$ cat file.list
5 f j 33
2 a c 1
1 t 4 f
6 b c _
10 i r 3
Ao usarmos o comando sort, as linhas serão organizadas de acordo com a primeira
coluna:
$ sort file.list
10 i r 3
1 t 4 f
2 a c 1
5 f j 33
6 b c _
Veja, entretanto, que temos um problema aqui: o 10 foi posto antes do 1, seguindo a
ordem alfabética e não aritmética. Para corrigir isso, acrescentamos o parâmetro -n:
$ sort -n file.list
1 t 4 f
2 a c 1
5 f j 33
6 b c _
10 i r 3
Agora, se quisermos organizar as linhas tomando como referência a segunda coluna ao
invés da primeira, fazemos o seguinte:
$ sort +1 file.list
2 a c 1
6 b c _
5 f j 33
10 i r 3
33
1 t 4 f
Podemos obter o mesmo resultado de outra forma:
$ sort -k 2 file.list
2 a c 1
6 b c _
5 f j 33
10 i r 3
1 t 4 f
Por fim, para gravar o resultado no arquivo fileorder.list, basta acrescetar o parâmetro -o
fileorder.list.
tail
Esse comando é utilizando para mostrar as últimas linhas de um arquivo de texto.
Sintaxe:
$ tail [opções] [arquivo]
Opções:
-c [n]: Exibe apenas os últimos [n] bytes do arquivo;
-n [n]: Exibe as últimas [n] linhas do arquivo;
-f: Fica monitorando o arquivo, e exibe todas as novas linhas adicionadas a ele, em
tempo real. Isso é muito utilizado para monitorar arquivos de log.
wc
Conta o número de linhas, palavras, caracteres e bytes nos arquivos.
Sintaxe:
$ wc [opção] [arquivo]
Opções:
-c: Exibe apenas o número de bytes;
-m: Exibe o número de caracteres;
-l: Exibe o número de linhas;
-L: Exibe o comprimento, em caracteres, da maior linha do arquivo;
34
-w: Exibe o número de palavras encontradas.
Se for usado sem argumentos, o wc exibe o número de linhas, palavras e caracteres do
arquivo, respectivamente:
$ wc file.list
20 42 file.list
7.3. Pesquisa e informações
find
O find (procurar, em inglês) é uma ferramenta que utilizamos para localizar arquivos ou
diretórios no sistema de arquivos.
Sintaxe:
$ find [opções] [caminho] [expressão] [ações]
Opções:
-amin [n]: Procura arquivos que foram acessados há [n] minutos atrás;
-anewer [arquivo]: Procura arquivos que foram acessados depois do [arquivo];
-atime [n]: Procura arquivos que foram acessados há [n] dias atrás;
-cmin [n]: Procura arquivos que tiveram seu status alterado há [n] minutos atrás;
-cnewer [arquivo]: Procura arquivos que tiveram seu status alterado depois do
[arquivo];
-empty: Procura arquivos vazios e que sejam como arquivos regulares ou diretórios;
-fstype [tipo]: Procura apenas arquivos que estejam gravados em sistemas de arquivos
do tipo especificado;
-gid [n]: Procura por arquivos cujo GID seja [n];
-group [grupo]: Procura por arquivos que pertençam ao grupo informado;
-inum [n]: Procura o arquivo cujo I-node seja [n];
-mmin [n]: Procura arquivos que foram modificados a [n] minutos atrás;
-mtime [n]: Procura arquivos que foram modificados a [n] dias atrás;
-name [expressão]: Procura arquivos cujo nome coincida com a expressão digitada;
-newer [arquivo]: Procura arquivos que foram modificados depois do [arquivo];
-nouser: Procura arquivos cuja UID não esteja registrada no sistema;
-nogroup: Procura arquivos cuja GID não esteja resgistrada no sistema;
-path [expressão]: Realiza a busca nos diretórios que coincidam com a expressão
informada;
-perm [permissões]: Procura arquivos que contenham as permissões informadas, no
35
modo octal ou literal;
-perm [-/+][permissões]: Aplica as permissões informadas para os arquivos
encontrados;
-regex [expressão]: Localiza os arquivos que coincidirem com a expressão regular
informada. Lembre-se que expressões simples são diferentes de expressões regulares;
-size [n][b/c/k/w]: Localiza os arquivos cujo tamanho seja [n] múltiplos de:
. b: 512 bytes;
. c: 1 byte;
. k: 1 kilobyte;
. w: 2 bytes.
-type [tipo]: Procura por arquivos que sejam de um tipo específico:
. b: dispositivo de bloco;
. c: dispositivo de caracter;
. d: diretório;
. p: duto nomeado (FIFO);
. f: arquivo regular;
. l: link simbólico;
. s: soquete.
-uid [número]: Procura por arquivos cuja UID seja igual ao [número];
-used [n]: Procura por arquivos que tenham sido acessados [n] dias após seu status ter
sido modificado;
-user [usuário]: Procura por arquivos cujo dono seja o [usuário].
O caminho é o diretório dentro do qual se vai realizar a busca. Para buscar em todo o
sistema de arquivos, deve-se colocar /. Se a busca for feita no diretório atual, pode-se ignorar
esse parâmetro.
A expressão deve ser o nome do arquivo que se está procurando, com ou sem curingas.
Essa expressão pode ser omitida dependendo da opção de pesquisa que se esteja utilizando.
Ações:
É possível realizar ações com os arquivos encontrados. Isso é muito útil quando é
necessário realizar uma determinada operação com todos os arquivos do sistema que tenham
determinadas características.
As principais ações que podem ser executados são:
-exec [comando] [prefixo]{}[sufixo] \;: Executa o comando nos arquivos encontrados. O
comando pode ser qualquer programa do sistema. Os caracteres {} são substituídos pelo
nome do arquivo encontrado. [prefixo] e [sufixo] são opcionais;
-ok [comando] [prefixo]{}[sufixo] \;: O mesmo que -exec, mas pergunta para o usuário
36
antes de executar o comando em cada arquivo.
whereis
Localiza o executável, arquivo/diretório de configuração, diretórios de bibliotecas,
arquivos compartilhados, código-fonte e caminho da página de manual do programa
especificado.
Sintaxe:
$ whereis [opções] [programa]
Opções:
-b: Procura apenas pelo executável do programa;
-m: Procura apenas pela páginas de manual;
-s: Procura apenas pelo diretório do código-fonte;
-u: Procura no diretório atual por arquivos que não possuam alguma das entradas
informadas.
Exemplos de uso:
Para ver a localização dos arquivos e diretórios do GIMP, utilizamos o whereis da
seguinte forma:
$ whereis gimp
gimp:/usr/bin/gimp /etc/gimp /usr/lib/gimp /usr/share/gimp
/usr/share/man/man1/gimp.1.gz
Onde:
/usr/bin/gimp: Executável;
/etc/gimp: Diretório contendo os arquivos de configuração;
/usr/lib/gimp: Diretório contendo as bibliotecas;
/usr/share/gimp: Diretório contendo os arquivos compartilhados;
/usr/share/man/man1/gimp.1.gz: Localização da página de manual.
Para saber apenas a localização da página de manual, utilizamos a opção -m:
$ whereis -m gimp
gimp: /usr/share/man/man1/gimp.1.gz
37
which
Exibe o caminho completo para o comando selecionado.
Sintaxe:
$ which [comando]
Exemplos de uso:
Para sabermos o caminho completo para comando grep, usamos:
$ which grep
/bin/grep
uname
Mostra o nome e a versão do kernel em uso.
Sintaxe:
$ uname [opções]
Opções:
-a: Exibe todas as informações;
-s: Exibe apenas o nome do kernel;
-n: Exibe apenas o nome da máquina na rede;
-r: Exibe apenas a série do kernel;
-v: Exibe apenas a versão do kernel;
-m: Exibe apenas a arquitetura de hardware;
-o: Exibe apenas o nome do sistema operacional.
Exemplos de uso:
$ uname -a
Linux geolix-athlon 2.6.8-2-k7 #1 Mon Jan 24 03:29:52 EST 2005 i686 GNU/Linux
7.4. Comandos de administração do sistema
fuser
Esse programa é utilizado para descobrir quais processos estão utilizando determinados
38
arquivos ou soquetes.
Sintaxe:
$ fuser [-a/-s/-c] [-4/-6] [-n [espaço]] [-k [-i] [-[sinal]] ] [-muvf]
Parâmetros:
-a: Mostra todos os arquivos especificados na linha de comando. Por padrão, somente os
arquivos que estão sendo usados por pelo menos um processo são mostrados;
-s: Modo silencioso;
-c: O mesmo que -m, usado para compatilidade com o padrão POSIX;
-4: Procura apenas por sockets de IPv4;
-6: Procura apenas por sockets de IPv6;
-n [espaço]: Especifica o espaço de nomes a usar. Pode ser:
. file: o modo padrão, procura por arquivos;
. udp: procura por portas UDP;
. tcp: Procura por portas TCP:
-k: Matar os processos que estão acessando o arquivo;
-i: Pergunta antes de matar o processo;
-[sinal]: Informa qual o sinal deve ser usado para matar os processos. Só pode ser usado
junto com o parâmetro -k;
-m: Utilize quando estiver se referindo ao um sistema de arquivos montado ou a um
dispositivo de blocos montado;
-u: Exibe o nome do usuário que iniciou o processo que está utilizando o arquivo;
-v: Modo detalhado, com diversas informações sobre os processos.
Exemplos de uso:
Uma utilidade grande desse programa é a seguinte: suponhamos que você queria
desmontar o disquete, e seja surpreendido por uma mensagem de erro, dizendo que o
dispositivo de disquete está ocupado:
$ umount /dev/fd0
umount: /media/floppy0: device is busy
umount: /media/floppy0: device is busy
Se você não conseguir descobrir qual o processo que está "travando" o disquete, você
pode fazer isso utilizando o fuser. Você precisará ser o administrador do sistema.
# fuser -m /dev/fd0
/dev/fd0: 2877
39
Agora, você pode matar o processo:
# kill 2877
Ou, se quiser, pode matar o comando automaticamente com o fuser:
# fuser -m -k /dev/fd0
Se o processo não for encerrado, utilize o sinal -9 para destrui-lo:
# fuser -m -k -9 /dev/fd0
Repare que, nesse caso, utilizamos -m porque se trata de um dispositivo de blocos,
/dev/fd0. Se fosse um arquivo comum, esse parâmetro não seria usado.
Outro uso que pode ser usado por administrador de rede é procurar por processos que
estejam utilizando determinadas portas. Por exemplo, pra saber qual o processo que está
utilizando a porta TCP 445, utilizamos:
# fuser -n tcp 445
445/tcp: 2674
df
Mostra o espaço utilizado de cada partição.
Sintaxe:
$ df [opção] [partição]
Opções:
-a: Inclui na verificação os sistemas de arquivos com 0 blocos;
-B [tamanho]: Usa blocos do tamanho especificado;
-h: Exibe os tamanhos num formato de fácil compreensão (1K, 23M, 2G);
-H: Igual ao -h, mas usa múltiplos de 1000 ao invés de 1024;
-i: Mostra as informações dos inodes;
-k: O mesmo que -B 1K;
-l: Só exibe informações dos sistemas de arquivos locais;
-P: Usa o formato de saída POSIX;
--sync: Executa o sync antes de obter as informações;
-t [tipo]: Só mostra informações dos sistemas de arquivos do tipo especificado;
-T: Mostra qual o tipo do sistema de arquivos de cada partição exibida;
-x [tipo]: Mostra todos os tipos de sistemas de arquivos exceto o tipo especificado aqui.
40
Exemplos de uso:
Um exemplo simples:
$ df -h
Sist. Arq. Tam Usad Disp Uso% Montado em
/dev/hda1 267M 245M 22M 92% /
udev 10M 148K 9,9M 2% /dev
tmpfs 237M 0 237M 0% /dev/shm
/dev/hda 66G 49G 18G 74% /home
/dev/hda8 385M 33M 352M 9% /tmp
/dev/hda5 4,7G 3,8G 951M 81% /usr
/dev/hda6 2,8G 1,8G 1,1G 63% /var
/dev/sda1 488M 488M 0 100% /media/dis
k
du
Esse comando, sigla de disk usage (uso de disco), é usado para estimar o espaço em
disco usado pelos arquivos. Em outras palavras, usamos o du para saber o tamanho dos
arquivos.
Sintaxe:
$ du [opções] [arquivo] Opções:
-a: Exibe o tamanho de todos os arquivos dentro dos subdiretórios do diretório
especificado, e não somente dos arquivos imediatamente dentro do diretório;
--aparent-size: Exibe o tamanho aparente, que pode ser maior ou menor que o tamanho
real, dependendo de fatores com fragmentação, blocos indiretos e similares;
-B [tamanho]: Exibe o tamanho dos arquivos em blocos do tamanho especificado;
-b: Igual a -B 1;
-c: Exibe uma linha com o tamanho total de todos os arquivos contabilizados;
-D: Quando usado para links simbólicos, considera o local para onde o link aponta e não
o link em si. Só considera arquivos;
-h: Mostra os tamanhos de forma comprensível (2K, 32M, 1G);
-H: O mesmo que -h, mas usa blocos de 1000 ao invés de 1024;
-k: O mesmo que -B 1K;
-L: O mesmo que -D, mas considera qualquer tipo de arquivo;
41
-S: Não mostra o tamanho dos subdiretórios;
-s: Mostra apenas o tamanho total de cada item (arquivo ou diretório);
-x: Ignora arquivos que estejam em outro sistema de arquivos;
-X [padrão]: Não contabiliza os arquivos que correspondam ao padrão informado;
-m: O mesmo que -B 1M.
Suponha que você esteja no diretório /home/ana/, que contenha os seguintes arquivos e
diretórios:
$ ls
arquivo_teste Desktop exe iso src tmp
deb doc img music.m3u teste
Se quisermos ver o tamanho do arquivo playlist.m3u:
$ du music.m3u
8 music.m3u
O tamanho é exibido em KB. No caso, o arquivo tem 8 KB.
Se quisermos ver o tamanho do diretório img/:
$ du img
14374 modis/imgs-143-1108-2007
229 modis/espectroradiometria/science_arquivos
229 modis/espectroradiometria/science1_arquivos
2203 modis/espectroradiometria
71919 modis
Veja que o tamanho em KB não é muito confortável. Usamos o parâmetro -h para que os
valores sejam exibidos de uma forma compreensível:
$ du -h modis
15M modis/imgs-143-1108-2007
229K modis/espectroradiometria/science_arquivos
229K modis/espectroradiometria/science1_arquivos
2,2M modis/espectroradiometria
71M modis
Podemos também querer que sejam contabilizados os arquivos dos subdiretórios
modis/espectroradiometria/ e modis/imgs-143-1108-2007/. Nesse caso, usamos o parâmetro -a:
$ du -h -a modis
42
8,1M modis/imgs-143-1108-2007/crefl1_143.A2007223135000-2007223135500.250m.jpg
6,1M modis/imgs-143-1108-2007/crefl1_143.A2007223135500-2007223140000.250m.jpg
15M modis/imgs-143-1108-2007
228K modis/espectroradiometria/science.html
40K modis/espectroradiometria/science_arquivos/x.js
4,0K modis/espectroradiometria/science_arquivos/tree.gif
4,0K modis/espectroradiometria/science_arquivos/quicklink_a.gif
4,0K modis/espectroradiometria/science_arquivos/clear.gif
4,0K modis/espectroradiometria/science_arquivos/emailarticle_a.gif
4,0K modis/espectroradiometria/science_arquivos/0.gif
16K modis/espectroradiometria/science_arquivos/css_gen_v01.css
4,0K modis/espectroradiometria/science_arquivos/a.gif
4,0K modis/espectroradiometria/science_arquivos/nextterm.gif
4,0K modis/espectroradiometria/science_arquivos/space.gif
4,0K modis/espectroradiometria/science_arquivos/arrow_small_a.gif
4,0K modis/espectroradiometria/science_arquivos/citedby_a.gif
4,0K modis/espectroradiometria/science_arquivos/icon_doi.gif
4,0K modis/espectroradiometria/science_arquivos/css_art_v01.css
4,0K modis/espectroradiometria/science_arquivos/0_002.gif
4,0K modis/espectroradiometria/science_arquivos/0_003.gif
4,0K modis/espectroradiometria/science_arquivos/0_004.gif
4,0K modis/espectroradiometria/science_arquivos/0_005.gif
4,0K modis/espectroradiometria/science_arquivos/0_006.gif
4,0K modis/espectroradiometria/science_arquivos/0_007.gif
4,0K modis/espectroradiometria/science_arquivos/0_008.gif
4,0K modis/espectroradiometria/science_arquivos/0_009.gif
4,0K modis/espectroradiometria/science_arquivos/0_010.gif
4,0K modis/espectroradiometria/science_arquivos/0_011.gif
8,0K modis/espectroradiometria/science_arquivos/0_012.gif
4,0K modis/espectroradiometria/science_arquivos/0_013.gif
4,0K modis/espectroradiometria/science_arquivos/exportarticle_a.gif
4,0K modis/espectroradiometria/science_arquivos/gw_ol_rts.gif
4,0K modis/espectroradiometria/science_arquivos/REemail.gif
4,0K modis/espectroradiometria/science_arquivos/prevterm.gif
4,0K modis/espectroradiometria/science_arquivos/sign_minus.gif
4,0K modis/espectroradiometria/science_arquivos/btn_go1.gif
4,0K modis/espectroradiometria/science_arquivos/saveascitationalert_a.gif
4,0K modis/espectroradiometria/science_arquivos/REcor.gif
12K modis/espectroradiometria/science_arquivos/capeslogo.html
4,0K modis/espectroradiometria/science_arquivos/logo.gif
4,0K modis/espectroradiometria/science_arquivos/btn_clear1.gif
4,0K modis/espectroradiometria/science_arquivos/blankhtml.html
4,0K modis/espectroradiometria/science_arquivos/qs_tips.gif
43
4,0K modis/espectroradiometria/science_arquivos/sign_plus.gif
4,0K modis/espectroradiometria/science_arquivos/rsscite.gif
4,0K modis/espectroradiometria/science_arquivos/204e.gif
229K modis/espectroradiometria/science_arquivos
228K modis/espectroradiometria/science1.html
40K modis/espectroradiometria/science1_arquivos/x.js
4,0K modis/espectroradiometria/science1_arquivos/tree.gif
4,0K modis/espectroradiometria/science1_arquivos/quicklink_a.gif
4,0K modis/espectroradiometria/science1_arquivos/clear.gif
4,0K modis/espectroradiometria/science1_arquivos/emailarticle_a.gif
4,0K modis/espectroradiometria/science1_arquivos/0.gif
16K modis/espectroradiometria/science1_arquivos/css_gen_v01.css
4,0K modis/espectroradiometria/science1_arquivos/a.gif
4,0K modis/espectroradiometria/science1_arquivos/nextterm.gif
4,0K modis/espectroradiometria/science1_arquivos/space.gif
4,0K modis/espectroradiometria/science1_arquivos/arrow_small_a.gif
4,0K modis/espectroradiometria/science1_arquivos/citedby_a.gif
4,0K modis/espectroradiometria/science1_arquivos/icon_doi.gif
4,0K modis/espectroradiometria/science1_arquivos/css_art_v01.css
4,0K modis/espectroradiometria/science1_arquivos/0_002.gif
4,0K modis/espectroradiometria/science1_arquivos/0_003.gif
4,0K modis/espectroradiometria/science1_arquivos/0_004.gif
4,0K modis/espectroradiometria/science1_arquivos/0_005.gif
4,0K modis/espectroradiometria/science1_arquivos/0_006.gif
4,0K modis/espectroradiometria/science1_arquivos/0_007.gif
4,0K modis/espectroradiometria/science1_arquivos/0_008.gif
4,0K modis/espectroradiometria/science1_arquivos/0_009.gif
4,0K modis/espectroradiometria/science1_arquivos/0_010.gif
4,0K modis/espectroradiometria/science1_arquivos/0_011.gif
8,0K modis/espectroradiometria/science1_arquivos/0_012.gif
4,0K modis/espectroradiometria/science1_arquivos/0_013.gif
4,0K modis/espectroradiometria/science1_arquivos/exportarticle_a.gif
4,0K modis/espectroradiometria/science1_arquivos/gw_ol_rts.gif
4,0K modis/espectroradiometria/science1_arquivos/REemail.gif
4,0K modis/espectroradiometria/science1_arquivos/prevterm.gif
4,0K modis/espectroradiometria/science1_arquivos/sign_minus.gif
4,0K modis/espectroradiometria/science1_arquivos/btn_go1.gif
4,0K modis/espectroradiometria/science1_arquivos/saveascitationalert_a.gif
4,0K modis/espectroradiometria/science1_arquivos/REcor.gif
12K modis/espectroradiometria/science1_arquivos/capeslogo.html
4,0K modis/espectroradiometria/science1_arquivos/logo.gif
4,0K modis/espectroradiometria/science1_arquivos/btn_clear1.gif
4,0K modis/espectroradiometria/science1_arquivos/blankhtml.html
4,0K modis/espectroradiometria/science1_arquivos/qs_tips.gif
44
4,0K modis/espectroradiometria/science1_arquivos/sign_plus.gif
4,0K modis/espectroradiometria/science1_arquivos/rsscite.gif
4,0K modis/espectroradiometria/science1_arquivos/204e.gif
229K modis/espectroradiometria/science1_arquivos
1,3M modis/espectroradiometria/science.htm
2,2M modis/espectroradiometria
25M modis/MRTLinux.zip
25M modis/tools.asp
3,8M modis/tools1.asp
96K modis/unzip1
220K modis/5839-5845.pdf
16K modis/install1
71M modis
Essa lista ficou muito extensa. Se quisermos exibir somente o tamanho total de cada
diretório, retiramos o parâmetro -a, acrescentamos o parâmetro -s, e nos referenciamos a
modis/* ao invés de modis:
$ du -h -s modis/*
220K modis/5839-5845.pdf
2,2M modis/espectroradiometria
15M modis/imgs-143-1108-2007
16K modis/install1
25M modis/MRTLinux.zip
3,8M modis/tools1.asp
25M modis/tools.asp
96K modis/unzip1
Dessa última forma, porém, o tamanho total do diretório não foi informado. Para isso,
basta acrescentar o parâmetro -c:
$ du -h -s -c modis/*
220K modis/5839-5845.pdf
2,2M modis/espectroradiometria
15M modis/imgs-143-1108-2007
16K modis/install1
25M modis/MRTLinux.zip
3,8M modis/tools1.asp
25M modis/tools.asp
96K modis/unzip1
71M total
45
free
Comando muito utilizado para análise do desempenho do sistema, o free exibe
informações sobre o uso de memória pelo computador.
Sintaxe:
$ free [-b / -k / -m] [-o] [-s delay ] [-t]
Parâmetros:
-b: Exibe as quantidades em bytes;
-k: Exibe as quantidades em kilobytes;
-m: Exibe as quantidades em megabytes;
-o: Não exibe a linha -/+ buffers/cache;
-s [tempo]: Especifica o intervalo de tempo, em segundos, entre as atualizações das
informações. Se esse parâmetro não for usado, é exibida apenas uma informação. Se usado,
vai exibindo as informações indefinidamente no intervalo de tempo definido, até que o usuário
pressione CTRL + C;
-t: Exibe uma linha com os valores totais;
Vejamos o uso mais comum do free:
$ free
total used free shared buffers cached
Mem: 484408 477704 6704 0 64948 148356
-/+ buffers/cache: 264400 220008
Swap: 1421712 828 1420884
Das linhas acima, interpreta-se as seguintes informações:
. Memória RAM total: 484408 KB
. Memória RAM usada: 477704 KB
. Memória RAM livre: 6704 KB
. Informações em buffer: 64948 KB
. Informações em cache: 148356 KB
. Memória swap total: 1421712 KB
. Memória swap usada: 828 KB
. Memória swap livre: 1420884 KB
. Buffers/Cache usados: 264400 KB
. Buffers/Cache livres: 220008 KB
46
A exibição em KB pode não ser muito confortável. Se quiser que os tamanhos sejam
exibidos em MB, utilize o parâmetro -m:
$ free -m
total used free shared buffers cached
Mem: 496 489 7 0 66 145
-/+ buffers/cache: 277 219
Swap: 1906 0 1905
time
Esse é um comando muito útil para medir o desempenho do sistema. Com o time
podemos medir o tempo, em segundos, necessários para executar um processo ou programa.
Sintaxe:
$ time [opções] [comando]
Opções:
-o [arquivo]: Grava as estatísticas coletadas durante a execução do comando para o
arquivo especificado, para análise posterior;
-a: Quando usado junto com o parâmetro -o, não apaga o conteúdo do arquivo ao
gravar as estatísticas;
-v: Exibe os detalhes da execução do comando.
Assim, suponha que você tenha um script de backup, e queira saber quanto tempo ele
demora para ser executado:
$ time backup
real 0m39.054s
user 0m28.560s
sys 0m0.689s
O campo real nos mostra quanto tempo o processo demorou para ser executado. No
caso, 39,054 segundos. O campo user informa quanto tempo a CPU gastou processando
apenas os dados do comando. Nesse exemplo, 28,560 segundos. O campo sys informa qual o
intervalo média de espera da CPU entre cada ciclo de processamento dos dados do comando.
Aqui, o tempo foi de 0,689 segundos.
uptime
47
Mostra o período em que o sistema permaneceu em processamento desde que foi
ligado.
Uso:
$ uptime
O uptime não possui parâmetros. Basta digitar uptime no terminal. Veja um exemplo:
$ uptime
16:40:18 up 7:48, 3 users, load average: 0.43, 0.29, 0.26
Aqui, vemos que o computador esteve ligado por 16:40 horas, mas só esteve em
processamento durante 7:48 horas. Durante esse período, 3 usuários acessaram o sistema, e a
carga média do sistema, que vai de 0 a 1, foi de 0,43 no último 1 minuto, 0,29 nos últimos 5
minutos e 0,26 nos últimos 15 minutos.
dmesg
Esse comando é utilizado para ver as mensagens de inicialização do sistema. Útil para
analisar eventuais mensagens de erro exibidas devido a qualquer problema que esteja
ocorrendo durante a inicialização.
Sintaxe:
Como as mensagens são muito extensas, utilize o more ou o less para visualizar as
informações:
$ dmesg | more
$ dmesg | less
echo
Exibe mensagens na tela. Esse comando é utilizado principalmente para a construção
de scripts de sistema.
Sintaxe:
$ echo [opções] [cadeia de caracteres]
Opções:
-n: Não insere uma nova linha;
-e: Ativa a interpretação de caracteres de escape, listados a seguir:
\NNN: Código ASCII octal do caracter;
48
\\: Barra invertida (\);
\a: Alerta sonoro (beep);
\b: Backspace;
\c: Não exibe a linha de final de arquivo;
\f: Alimentação de formulário (form feed);
\n: Nova linha;
\r: Retorno de carro (carriage return);
\t: Tabulação horizontal;
\v: Tabulação vertical.
Exemplos de uso:
$ echo "Projeto geolix"
Projeto geolix
$ echo -e "Primeira linha\nSegunda linha\n\tTerceira linha com tabulação horizontal"
Primeira linha
Segunda linha
Terceira linha com tabulação horizontal
Com o uso de direcionadores, pode-se usar o echo para inserir texto em arquivos, com a
seguinte sintaxe:
$ echo [mensagem] [> / >>] [arquivo]
Onde > apaga o conteúdo o arquivo, se existir, e >> adiciona o texto no final do
arquivo.
Exemplos de uso:
$ echo -n > /etc/modules
Apaga o conteúdo do arquivo /etc/modules.
$ echo -e "192.168.0.35\tana.geolix.org\tana" >> /etc/hosts
Adiciona a seguinte linha no arquivo /etc/hosts:
192.168.0.35 ana.geolix.org ana
su
Esse comando é utilizado para um usuário assumir os privilégios de outro usuário do
sistema.
49
Sintaxe:
$ su [opções] [usuário]
A digitar o comando é necessário digitar a senha do usuário selecionado. Se nenhum
usuário for especificado, o sistema entende que o usuário quer assumir os privilégios de
administrador do sistema (root).
Uma opção muito útil é o parâmetro -c, que permite executar um comando específico
com os privilégios do usuário selecionado, e ao término da execução perder esses privilégios.
Exemplos de uso:
Um exemplo é a compilação de um pacote. O comando make install, que faz a
instalação propriamente dita do pacote, só pode ser executado pelo usuário root. Assim, temos
que fazer o seguinte:
$ su
password:
# make install
# exit
Ao invés disso, podemos simplesmente digitar:
$ su -c "make install"
password:
O comando será executado e, ao seu término, perdemos os privilégios de administrador
de sistema.
sync
Esse comando é utilizado para gravar os dados armazenados em cache nos locais
apropriados. O uso mais comum é para gravar os dados em unidades de disco removível,
geralmente disquete.
Uso:
O sync não possui parâmetros. Para usá-lo, execute:
$ sync
50
reboot
Reinicia o computador. Por padrão, somente o root pode executar esse comando.
Sintaxe:
# reboot
shutdown
Usado para desligar o sistema. Por padrão, somente o root pode executar o shutdown.
Sintaxe:
# shutdown [opções] [hora] [mensagem de alerta]
Opções:
-t [tempo]: Espera o tempo especificado (em segundos) entre matar os processos e
mudar de nível de execução;
-k: Não desliga o sistema, apenas envia a mensagem de alerta a todos os usuários que
estão conectados;
-r: Reinicia o sistema após o desligamento;
-h: Desliga o computador;
-f: Não roda o utilitário fsck no caso de reiniciar o sistema;
-F: Força o uso do fsck no reinício do sistema;
-c: Cancela um processo de desligamento que esteja sendo executado no momento.
Em [hora] você pode especificar o horário exato para o sistema desligar, como 12:34,
por exemplo, ou então utilizar +[n], para desligar o sistema daqui a [n] minutos. Para desligar o
sistema imediatamente, use +0 ou a palavra now.
A mensagem de alerta será enviada a todos os usuários conectados ao sistema, para
que eles tenham tempo de salvar seus arquivos e se desconectarem.
Exemplos de uso:
O uso mais comum do shutdown é para desligar o sistema o computador
imediatamente:
# shutdown -h now
51
7.5. Comandos de terminal
clear
Limpa a tela do terminal.
Uso:
$ clear
history
O comando history (histórico) mostra a lista dos últimos comandos executados pelo
usuário corrente. Isso é útil quando há a necessidade de executar um comando extenso, com
muitos parâmetros, do qual não consigamos nos lembrar, ou para fazer auditoria.
Sintaxe:
$ history [opções]
Exemplos de uso:
$ history
104 su -
105 exit
106 vim teste.php
107 cp teste.php /var/www/
108 su -
109 su -
110 find / -name my.snf
111 find / -name my.cnf
112 su -
113 man psql
114 psql template1 postgres
115 psql template1
116 zmore /usr/share/doc/postgresql-8.2/README.Debian.gz
117 mysql -u root
118 cat /etc/apt/sources.list
119 su -
120 exit
121 su -
122 visudo
123 su -
52
124 exit
Para executar novamente o comando man psql, basta anotar o seu número, e dar o
comando:
$ !113
Para procurar um determinado comando, use o history em conjunto com o grep.
Considerando um outro exemplo e, um outro trecho resultante do comando history, pode-se
procurar pelo comando normalize, pra ver quais parâmetros devemos usar:
$ history | grep normalize
480 normalize-ogg --bitrate 192 creed_-_say_i.ogg
485 normalize-mp3 --ogg --bitrate 192 creed_-_the_wall.mp3
493 normalize-mp3 --ogg --bitrate 192 vento_aragano.mp3
503 history | grep normalize
Agora, podemos ver os parâmetros que usamos anteriormente.
Existem outros métodos de utilização do history, que podem ser vistos na sua página de
manual:
$ man history
7.6.
1.1
1.2 Formato padrão de uma linha de comando
1.3 Comparação DOS X LINUX
7.6 Formato padrão de uma linha de comando
Geralmente os comando no LINUX, observam letras minúsculas. Assim, o Shell, poderá
interpretar corretamente. Essa observância, é válida também, para o nome de arquivos.
Exemplo: “arquivo.txt” e “ARQUIVO.TXT”, são considerados arquivos distintos.
Os comandos em LINUX, não podem ser abreviados, sendo seu formato padrão,
constituído pelo nome do comando, seguido de opções e argumentos. Dessa forma, pode ser
simplificado em sentença, da seguinte forma:
geomatica@katrina:~$ comando [- opção...] [argumento...]
A opção, ou opções, são letras que redefinem ou modificam a ação do comando,
enquanto que o argumento, ou argumentos, são os objetos que sofrerão a ação do comando.
53
Os nomes dos argumentos devem ser separados por espaços em branco, não podendo
ser utilizada a vírgula. Pode-se porém, digitar mais de um comando em uma única linha, desde
que sejam separados por ponto e vírgula (;).
7.7 Comparação entre os comandos DOS e LINUX
O objetivo é apresentar uma relação de comandos equivalentes no DOS e o seu
correspondente no sistema operacional LINUX.
Tabela 2 – Correspondência entre os comandos DOS e LINUX
Comando do DOS Correspondente no LINUX
ATTRIB chmod
CD cd
CLS clear
COMP diff
COPY cp
DATE date
DEL rm
DELTREE rm –rf
DIR ls
ECHO echo
EDIT vi
EDLIN ed
HELP man
MD mkdir
MORE more
MOVE mv
PRINT lp, lpr
RD rmdir
REN mv
SORT sort
TIME date
TYPE cat
VER uname –a
XCOPY cp –r
Obs.: Esta tabela mostra uma correspondência entre alguns comandos do DOS e os
comandos do LINUX e não uma equivalência. Os comandos do LINUX são, em geral, mais
complexos e poderosos do que os correspondentes no DOS.
54
8. Redirecionamento, filtros e pipes
8.1 Redirecionamento
Normalmente, quando um comando é executado, a saída é direcionada para a tela do
terminal e a entrada direcionada do teclado. Em várias situações, se faz necessário
redirecionar a entrada e/ou saída de um comando. O LINUX permite fazê-lo de maneira simples
e elegante, utilizando símbolos de redirecionamento de entrada e saída:
Tabela 3 - símbolos de Redirecionamento
Símbolo Descrição
> Redireciona a saída. Caso o arquivo já exista, seu conteúdo é sobreposto, caso
contrário o arquivo é criado.
>> Redireciona a saída. Caso o arquivo já exista, seu conteúdo não é sobreposto,
mas sim inserido no final do arquivo.
< Redireciona a entrada.
2> Redireciona a saída de mensagens de erros.
Exemplos:
$ ls -l > diretor.lis
$ cat diretor.lis
$
Redireciona a saída do comando ls da tela para o arquivo diretor.lis.
$ ls -l >> diretor.lis
$ cat diretor.lis
$
Redireciona a saída do comando ls da tela para o final do arquivo diretor.lis.
$ cat < arq.txt
$
Redireciona a entrada do comando cat do teclado para o arquivo arq.txt.
$ date > arq.lis 2> arq.err
$
Redireciona a saída do comando date para o arquivo arq.lis e redireciona qualquer
55
mensagem de erro para arquivo arq.err.
8.2 Filtros
Filtros são comandos ou utilitários que manipulam dados de entrada e geram uma nova
saída. A seguir apresentamos os principais filtros:
Sort:
O comando sort permite ordenar um ou mais arquivos de entrada e gerar um novo
arquivo de saída.
Exemplo:
$ cat alunos.txt
Francisco
LP
Berra
$ sort -o alunos.ord alunos.txt
$ cat alunos.ord
Berra
Francisco
LP
$
Grep
O comando grep (global regular expression printer) procura todas as ocorrências de um
determinado padrão (string) em um ou mais arquivos de entrada. A saída do comando é uma
lista das linhas a onde o padrão foi encontrado.
Exemplo:
$ cat arq.txt
amo
amor
amora
amoroso
clamor
namoro
ramo
$ grep 'moro' arq.txt
amoroso
56
namoro
$
8.3 Pipes
Suponha que você queira utilizar a saída de um comando como entrada de um segundo
comando. Uma maneira é criar um arquivo temporário para armazenar a saída do primeiro
comando, utilizar o mesmo arquivo como entrada no comando seguinte e, posteriormente,
eliminar o arquivo temporário.
Exemplo:
$ who > temp.txt
$ wc -l < temp.txt
10
$ rm temp.txt
$
O comando who, que lista todos os usuários conectados ao sistema, cria o arquivo
temporário temp.txt. O comando wc -l, que conta o número de linhas do arquivo, utiliza o
mesmo arquivo temporário para informar quantos usuários estão conectados ao sistema.
O LINUX permite que esse tipo de processamento seja implementado de forma bastante
simples, utilizando o conceito de pipeline. Através da barra vertical ( | ), ou pipe, a saída de um
comando pode ser direcionada para entrada de um outro comando sem a utilização de
arquivos temporários. A idéia do pipeline pode ser comparada a uma linha de montagem, onde
uma linha de produção fornece insumos para outra linha, sucessivamente.
Exemplos:
$ who | wc -l
10
$ ls -l | grep '\.txt$' | sort | lpr
O comando ls gera uma listagem completa dos arquivos e subdiretórios do diretório de
trabalho. O comando grep seleciona os arquivos que terminam com '.txt', a partir da saída
comando ls. O comando sort ordena os arquivos selecionados pelo grep. Finalmente a lista dos
arquivos é impressa através do comando lpr.
$ ls -l | sort +4n | grep '\.c$'
O comando ls gera uma listagem completa dos arquivos e subdiretórios de trabalho. O
comando sort ordena a saída em função do tamanho de cada arquivo (+4n). O comando pega
57
a saída ordenada e seleciona apenas aqueles que terminem com '.c'.
$ ls -l | sort +8 | grep '^d'
O comando exibe uma lista de subdiretórios ordenados crescentemente.
$ who | sort | tee usuarios.txt | wc -l
O comando tee permite recuperar resultados intermediários de pipes, permitindo,
inclusive, armazenar a saída de um pipe em um arquivo.
9. Montando e Desmontando Dispositivos
Muitos usuários, ao visitarem sites sobre o sistema operacional ou ao ouvirem o relato
de colegas que já usam o Linux, sentem-se incentivados a experimentarem o sistema. A
grande maioria já tem o sistema operacional Windows instalado e decide compartilhar o
computador também com o Linux. Mas quase sempre, o usuário necessita acessar arquivos
presentes na partição do Windows. Isso é perfeitamente possível, através de um processo
conhecido como montagem da partição. Algumas distribuições Linux montam as partições
Windows automaticamente, mas em outras, é necessário que o usuário faça isso
manualmente. Esse processo é simples e será explicado aqui. Os procedimentos a seguir
devem ser executados como usuário root ou outro que tenha permissões de administrador.
9.1 Discos
O primeiro passo é saber como identificar os discos (HD, CD-ROM, disquete) no Linux.
Tais dispositivos, além de outros (como a porta LPT1) são tidas como existentes no diretório
/dev/. O HD é identificado como o dispositivo hda0 (hdb para outro HD no mesmo computador
e assim por diante). O número 0, indica a partição no HD. Com isso, a segunda partição deve
ser identificada como hda1, a terceira como hda2, enfim. No caso de HDs SCSI, as letras hd
devem ser trocadas por sd, ficando da seguinte forma: sda0, sda1, sda2, etc.
No caso do drive de disquete, a sigla para sua identificação é fd0. Se houver outro drive,
este deve ser identificado como fd1. No caso dos CD-ROMS, eles são identificados como HDs.
Assim, se por exemplo, em seu computador há um HD e um CD-ROM, o HD poderá ser
reconhecido como hda e o CD como hdb.
9.2 Montando a partição
Agora que já se sabe o que são e como funcionam os dispositivos no Linux, serão
estudados os comandos mount e umount, que são os responsáveis pela montagem dos
dispositivos. Mas, antes de montar qualquer dispositivo, é preciso saber quais dispositivos
estão ligados a ele. Primeiramente, os arquivos que mapeiam dispositivos estão no diretório
/dev da estrutura de diretórios de seu Linux. Serão mostrados a seguir os dispositivos que são
58
mais freqüentemente utilizados para montagem. A Tabela 4 apresenta os dispositivos mais
usados no cotidiano, com seus respectivos periféricos.
Tabela 4 - Periféricos
Arquivo Mapeia qual periférico
hda Primeiro disco rígido instalado na máquina (master).
hdaX A partição X do primeiro disco rígido instalado. hda1 mapeia a primeira partição
do disco.
hdb O segundo disco rígido/CD-ROM instalado na máquina (slave).
hdbX A partição X do primeiro disco rígido instalado. hdb1 mapeia a primeira partição
do disco.
fd0 O primeiro drive de disquete.
fd1 O segundo drive de disquete.
cdrom O drive de CD-ROM instalado na máquina (caso exista).
Vale aqui uma lembrança: em hd?X, o item X pode variar de acordo com o número de
partições existentes no disco rígido e ? pode variar de acordo com o número de discos rígidos
instalados na máquina.
Para a partição Windows, você deve saber qual das existentes é ela. Em nosso exemplo,
vamos supôr que o Windows está na partição hda0 e o Linux na partição hda1. Tendo ciência
disso, agora é necessário que você crie um diretório no Linux por onde a partição Windows
deverá ser acessada, ou seja, o ponto de montagem. Geralmente, este diretório é criado dentro
da pasta /mnt/ mas pode ser criado em outro. Para o nosso exemplo, vamos chamar este
diretório de win. Assim, seu caminho é /mnt/win.
O próximo passo é comando de montagem:
mount - t [tipo] [caminho da partição] [ponto de montagem]
Em nosso exemplo, o comando acima ficaria assim:
mount -t vfat /dev/hda0 /mnt/win
O tipo indica o sistema de arquivos utilizados na partição. Partições fat e fa32 são
identificados como vfat. No caso de CD-ROM, o tipo deve ser especificado como iso9660. Por
exemplo: mount -t iso9660 /dev/hdb /mnt/cdrom. As partições NTFS podem teriocamente,
serem montadas do mesmo jeito. No entanto, existem problemas de compatibilidade entre o
kernel do Linux e o sistema de arquivos NTFS, motivo pelo qual, a montagem desse tipo de
partição deve seguir procedimentos especiais, que não serão explicadas aqui. Se a partição
59
que você deseja montar for ext2 ou ext3, basta especificar estes nomes como tipo.
No exemplo a seguir, será demonstrado o procedimento para a montagem de um
disquete formatado para Windows:
# mount -t vfat /dev/fd0 /mnt/floppy
Este comando instrui o kernel para que ele inclua o sistema de arquivos encontrado em
/dev/fd0, que é do tipo vfat, disponibilizando-o no diretório /mnt/floppy. Caso haja algum
arquivo no diretório onde foi montado o disquete (ou outro sistema de arquivos), esse
conteúdo ficará indisponível enquanto o sistema de arquivos estiver montado. O diretório
/mnt/floppy referenciará o diretório raiz ("/") do sistema de arquivos montado.
Existem vários tipos de dispositivos que podem ser montados. Na Tabela 5, Tipos de
sistemas de arquivos constam os tipos mais utilizados.
Tabela 5 - Tipos de sistemas de arquivos
Tipo Descrição
vfat Disquete formatado para Windows.
ext2 Disquete formatado para Linux.
ext3 Disquete formatado para Linux.
reiserfs Formato usado para Linux
xfs Formato usado para Linux
jfs Formato usado para Linux
iso9660 CD-ROM.
Dica Para montar dispositivos automaticamente, ou melhor, na hora do boot na
máquina, você deve editar o arquivo /etc/fstab, onde deverá acrescentar uma nova
linha, indicando a montagem do dispositivo. Esta opção é interessante para HDs com mais de
uma partição.
Nota É importante não remover um dispositivo (físico), como um disquete de seu drive,
enquanto ele permanecer montado. Existem operações que são efetuadas quando um
dispositivo é desmontado. Uma delas é a gravação de dados que possam estar no
buffer de armazenamento, esperando ser gravados.
Depois que um sistema de arquivos é montado, pode-se utilizá-lo normalmente. Ao final
da utilização do sistema de arquivos, deve-se desmontá-lo para que se possa, por exemplo,
remover o CD do drive. Para isso é utilizado o comando umount, que desmonta o sistema de
arquivos. A sintaxe do comando umount é:
umount dispositivo
60
ou então:
umount diretório
Normalmente, apenas o superusuário poderá montar e desmontar um sistema de
arquivos. Existe uma maneira simples para que o usuário comum acesse o disquete. São
os comandos do pacote mtools. O mtools é uma coleção de ferramentas que permite ao Linux
manipular arquivos MS-DOS.
Sempre que possível o comando tenta simular o comando equivalente a esse sistema.
Por exemplo, comandos como mdir a: funcionam na unidade de disquetes a: sem qualquer
montagem ou inicialização prévia. Alguns dos comandos suportados pelo pacote mtools são:
mattrib, mbadblocks, mcat, mcd, mclasserase, mcopy, mdel, mdeltree, mdir, mdoctorfat, mdu,
mformat, minfo, mlabel, mmd, mmount, mpartition, mrd, mread, mmove, mren, mshowfat,
mtoolstest, mtype, mwrite, mzip. Para utilizá-los, basta digitar o comando desejado em um
terminal como no exemplo abaixo:
$ mdir
10. Pacotes DEB
O sistema operacional Debian GNU/Linux conta com uma das mais eficientes
ferramentas de atualização do sistema, tanto no que se refere a atualizações críticas de
segurança colocadas em servidores/repositórios pelo pessoal do desenvolvimento, como na
instalação/remoção de programas. É o chamado apt-get.
A tecnologia implementada "engenharia" deste sistema é simples de se entender. O
Debian ao receber um comando da família apt-get, fará a leitura do arquivo
/etc/apt/sources.list onde está a configuração de repositórios que deverão ser consultada para
a realização do comando executado. O arquivo sources.list possui as linhas descrevendo uma
lista de repositórios (oficiais ou não) previamente editados segundo sua preferência ou ainda,
podem estar em um CD/DVD ou na web (mais comum).
O Debian conta com 3 árvores de desenvolvimento: stable, unstable e testing. Ele é
famoso pela sua chatice na busca pela perfeição e estabilidade, por isso da demora de anos
entre o lançamento de uma versão e outra (entre o Woody e o Sarge foram 3 anos, sendo que
o normal entre as outras distros Linux é de 6 meses a 1 ano). Atualmente a versão estável
recebeu o nome Etch, a testing o nome Lenny. Os pacotes baixados a partir da árvores stable,
foram exaustivamente testados, transferindo-se todos os aspectos de confiabilidade de
funcionamento bem como asseguradas as questões relativas a segurança do sistema
operacional.
Na árvore seguinte, encontram-se os pacotes que já se encontram em um nível
adiantado de testes e desenvolvimento (segundo os padrões Debian, não é verdade universal
61
para todas distros, pois muitas delas apresentam pacotes aqui relatados como
unstable/testing, como default em seus lançamentos - o que nunca vai ocorrer no Debian, você
escolhe os seus riscos). O testing, por sua vez, contém pacotes menos testados e com maior
probabilidade de "bugs".
Como eu estava cansado de travamentos, erros e falhas no "outro" sistema, eu sempre
uso apenas pacotes stable, salvo raras exceções e recomendo que o façam também. É o forte
deste sistema operacional: estabilidade.
10.1 Editando o arquivo sources.list
Você pode editar o sources.list com o editor gedit, da seguinte maneira:
# gedit /etc/apt/sources.list
Não vou descrever aqui o por quê destes comandos, pois sei que você já leu o Guia Foca
Linux e já está craque no shell, não? :) Note que deve ser feito como root, portanto preste
atenção. Com grandes poderes, você automaticamente ganha grandes responsabilidades.
Cada linha que você enxerga é um repositório Debian. Caso a linha esteja com um símbolo "#"
na frente, significa que ela será ignorada.
A linha com a referência security updates é especialmente importante, porque é neste
repositório que o pessoal do desenvolvimento lança versões com correção a nível de
segurança. Deixe-a sempre desmarcada. Marque a linha referente ao CD-ROM, pois
geralmente, as atualização serão obtidas direto da web. Adicione as seguintes linhas no
arquivo:
deb http://ftp.br.debian.org/debian/ etch main
deb http://ftp.us.debian.org/debian/ etch main
São os repositórios brasileiro e norte-americano da árvore stable. Eu prefiro sempre
deixar dois ou três servidores em aberto, porque você não fica sem o pacote desejado caso
algum deles esteja fora do ar. Mais repositórios você encontra na página oficial do projeto.
Salve o arquivo.
10.2 Atualizando o sistema com o apt-get
Primeiro comando: o apt-get update
62
Entre em um terminal, como root, e digite:
# apt-get update
O sistema procurará nos repositórios os pacotes que eles contém e formará uma lista
para sua análise.
Agora que sua lista de pacotes está sincronizada com os repositórios Debian,
experimente o próximo comando:
# apt-get install gnome-audio
Significa que que o apt-get vai carregar o binário gnome-audio (pacote), verificar suas
dependências e depois instalá-lo para você. Este pacote é o responsável por eventos de som
no Gnome, pode instalá-lo sem problemas.
Mais um comando para sua lista:
# apt-get remove gnome-audio
Este comando, por sua vez, removerá aquele pacote de seu sistema. Se quiser que até
arquivos de configuração sejam removidos:
# apt-get remove --purge gnome-audio
Vamos atualizar seu sistema agora, com novas versões de pacotes transferidas para a
árvore stable, bem como as de segurança:
# apt-get dist-upgrade
Dependendo da versão instalada em sua máquina, ao executar este comando, fará com
que o processo de atualização irá requerer muitos megabytes para atualizar. Vai depender da
data de lançamento da versão que está sendo usada e da data que var ser realizada a
atualização.
Caso o usuário não saiba o nome do pacote, pode ser aplicado então o comando abaixo:
# apt-cache search games
63
10.3 O synaptic
Caso não tenha se sentido confortável com o terminal de comandos, o Gnome oferece
um “front-end” para o apt-get chamado Synaptic. Instale-o primeiramente:
# apt-get install synaptic
Depois da instalação ele já aparece no seu menu "Sistema". Lá você vai ver,
graficamente, tudo o que acontece e pode dar uma passeada nas seções de pacotes, muito
bem organizadas. Para instalar um pacote, basta clicar com o mouse em cima do quadrado à
esquerda de seu nome e seleciona: marcar para instalação. Pronto, simples e prático.
Caso se queira maiores detalhes sobre o apt, digite no terminal o comando:
# man apt-get
Esse comando apresenta um manual completo de uso do apt-get com opções e
argumentos.
NOME
apt-get - APT pacote utilitário – interface linha de comando
SINOPSE
apt-get [-hvs] [-o=config string] [-c=file] {[update] | [upgrade] | [dselect-upgrade] |
[install pkg...] | [remove pkg...] | [purge pkg...] | [source pkg...] | [build-dep pkg...]
| [check] | [clean] | [autoclean] | [autoremove]}
DESCRIÇÃO
apt-get é uma ferramenta por linha de comando para obtenção de pacotes, e pode ser
considearda pelos usuários de “back-end” para outras ferramentas usando a biblioteca APT.
Outras interfaces em modo terminal existem com “front-end”, como o dselect, o aptitude,
synaptic, gnome-apt e o wajig.
A opção -h ou --help, apresenta informações sobre a funcionalidade dos argumentos
mostrados abaixo.
Argumentos
update
É usado para resincronizar os índices dos pacotes a partir de suas fontes. Os índices são
avaliados para os pacotes obtidos de localização específica em /etc/apt/sources.list. Por
exemplo, quando estiver usando um arquivo Debian, esse comando faz uma varredura e
retorna arquivos Packages.gz disponíveis. Uma atualização mostra os pacotes novos e
64
atualizados. Essa opção update, deve ser sempre executada antes das opções upgrade e dist-
upgrade.
upgrade
É usado para instalar versões mais recentes de todos os pacotes atualmente instalados
a partir do /etc/apt/sources.list. Em nenhuma circunstância, pacotes instalados no sistema,
serão removidos a não ser que as novas versões apresentem alterações nas suas
dependências. Assim, uma atualização com update deve ser efetuada antes, com o objetivo de
ser reconhecido pelo sistema uma nova atualização.
dselect-upgrade
O deselect-upgrade é usado em conjunção com o front-end, deselect. O deselect-
upgrade segue as alterações pelo deselect para os pacotes e permite ações necessárias para
realizar remoção de pacotes antigos e instalação de novos.
dist-upgrade
O dist-upgrade permite realizar uma atualização de sistema de forma inteligente
alterando quando necessário as novas versões dos pacotes. O arquivo sources.list do diretório
/etc/apt/ deverá conter uma lista de localizações dos pacotes desejados. Essas preferências do
usuário devem ser editadas nesse arquivo antes de executar esta opção.
install
A opção install é seguida de um ou mais nomes de pacotes desejados para a instalação.
Cada pacote tem um nome, e não é completamente qualificado por um nome de
arquivo (por instância, no sistema Debian GNU/Linux, libc6 pode ser o argumento provido, e
não libc6_1.9.6-2.db). Todos os pacotes requeridos por um pacote específico para instalação
deverá ser recuperado e instalado. O arquivo /etc/apt/sources.list é usado para localizar o
pacote desejado. Uma versão específica do pacote pode ser instalada utilizando-se o nome
completo do pacote evidenciando-se no nome a sua versão (estável, teste, instável).
remove
O remove, é idêntico ao install, exceto que os pacotes são removidos se estiverem
instalados. Se um sinal de “+” estiver associado ao nome do pacote separado antecedido por
um espaço, o pacote deverá ser instalado se não foi removido.
purge
A opção purge é idêntica ao remove exceto que os pacotes serão removidos com todas
suas dependências e arquivos ligados, entre esses, aqueles arquivos de configuração dos
65
pacotes removidos.
source
O argumento source faz com que o apt-get faça o download dos pacotes fontes. O APT
deverá examinar os pacotes disponíveis para decidir qual pacote fonte deverá ser procurado.
Isto, fará a busca de pacotes em versões mais recentes para fazer o download do código fonte.
Os pacotes fontes, são obtidos a partir da edição de linhas no arquivo sources.list iniciadas por
deb-src. Quando utilizada a opção --compile, o pacote deverá ser compilado para um pacote
binário com a extensão .deb usando-se o dpkg-buildpackage. Se for utilizada a opção –
download-only, o pacote não será descompactado.
build-dep
O build-dep faz com que o apt-get instale ou remova pacotes satisfazendo e
considerando as dependências para um pacote fonte.
check
É uma ferramenta de diagnóstico; ela atualiza o cache e verifica dependências
quebradas.
clean
O clean apaga o respositório local dos pacotes instalados. Isso faz com que seja liberado
espaço de disco.
autoclean
Da mesma maneira que o clean, o autoclean, remove do repositório local os pacotes. A
diferença está que esse, somente remove os arquivos de pacote que não foram totalmente
baixados e são largamente utilizados.
autoremove
O autoremove é usado para remover pacotes que foram automaticamente instalados
para satisfazer dependências para alguns pacotes não mais necessários.
OPÇÕES
Toda a linha de comando pode ser estabelecida usando um arquivo de configuração, em
66
que as descrições indicam as opções de configuração fixadas. Para opções boolean você pode
sobreescrever o arquivo config usando -f, --no-f, -f=no ou outras variações.
-d, --download-only
Realiza somente o download; os arquivos são somente recuperados (download) sem
serem descompactados ou instalados.
-f, --fix-broken
Fixa. Confere a correção ao sistema de dependências quebradas. Essa opção quando
usada com os argumentos install/remove, pode omitir pacotes para permitir a solução no APT.
Qualquer pacote terá o problema completamente corrigido. Existe a possibilidade que
estrutura de dependências possa estar corrompida e, nesse caso, é necessário uma
intervenção manual para corrigir essa situação. Para isso, geralmente utiliza-se o comando
dpkg --remove para eliminar alguns pacotes com problemas.
-m, --ignore-missing, --fix-missing
Ignora pacotes conflitantes; Se esses pacotes não puderem ser recuperados ou falhar a
verificação da sua integridade depois de recuperados (arquivos de pacotes corrompidos), use a
opção -f que deverá produzir um erro para algumas das situações.
--no-download
Desabilita o download de pacotes. Isto é melhor usado com --ignore-missing para forçar
o APT a usar somente os pacotes .deb já utilizados.
-q, --quiet
Silencioso; produz uma saída para logging, omitindo indicadores de progresso. Pode-se
usar a opção -q=# onde o # é o nível (número) que se deseja para produzir uma saída.
-s, --simulate, --just-print, --dry-run, --recon, --no-act
Sem ação; executa uma simulação de eventos que deverá ocorrer no sistema mas sem
executar alterações no sistema instalado. Simula impressões com a saída de uma série de
linhas cada uma, representando uma operação dpkg, configura(conf), remove (remv), unpack
(inst). Sinais de raiz quadrada, indicam pacotes quebrados que são de ocorrências raras.
67
-y, --yes, --assume-yes
Automatiza o prompt para yes; assume “yes” como resposta para todos os prompts e
execuções de processamentos não interativos.
-u, --show-upgraded
Mostra pacotes atualizados; Apresenta uma lista de todos os pacotes que foram
atualizados.
-V, --verbose-versions
Mostra as versões completas para os pacotes instalados e atualizados.
-b, --compile, --build
Compila os pacotes fontes depois de executar o downloads deles.
--ignore-hold
Ignora pacotes; Isso faz com que o apt-get ignore um pacote substituído. Deve ser
utilizado em conjunção com o dist-upgrade para sobreescrever um número grande e
indesejado.
--no-upgrade
Não atualiza pacotes; Quando usado em conjunção com o install, a opção no-upgrade
fará com que os pacotes não sofram atualizações se eles já estiverem instalados.
--force-yes
Força “yes”; Essa opção pode ser perigosa pois deverá fazer com que o apt continue o
processo sem solicitar intervenção do usuário. Isso, não deve ser usado a não ser em situações
muito especiais.
--print-uris
68
Em vez de buscar os arquivos, são mostradas as usas URIs. Cada URI terá seu caminho,
o nome do arquivo de destino, o tamanho e o md5 (chave para verificação de integridade).
Observe que o nome do arquivo a ser escrito não necessariamente será o mesmo existente no
sítio remoto. Essa opção também funciona com os argumentos source e update. Quando usado
com o comando update, o MD5 e o tamanho não são incluídos, faz com que o usuário deva
fazer a descompressão dos arquivos.
--purge
Use purge em vez de remove, para qualquer pacote a ser removido. Um asterisco
deverá aparecer ao lado do pacote a ser eliminado.
--reinstall
Reinstala pacotes que sempre estiveram instalados na versão mais recente.
--list-cleanup
Essa opção padrão (default) ligada, use --no-list-cleanup para tornar desligado. Quando
ligado (on) o apt-get deverá automaticamente gerenciar os conteúdos de /var/lib/apt/lists para
assegurar que esses arquivos obsoletos seja apagados. Por essa razão, somente o torne
desligado, se constantemente for alterada a lista de configuração.
-t, --target-release, --default-release
Essa opção controla a entrada padrão. É um controle sobre qual distribuição dos
pacotes deve ser instalados. Exemplo: -t unstable.
--trivial-only
Somente para operações triviais, assume a opção “yes”. Logicamente, isso pode estar
relacionado com a resposta “yes” para qualquer prompt.
--no-remove
Se algum pacote deve ser removido o apt-get imediatamente aborta sem o prompt.
--auto-remove
69
Se o comando for instalar ou remover, as ações deste argumento de comando deverá
remover dependências e pacotes não utilizados.
--only-source
Somente tem o significado para os argumentos do comando source e build-dep. Indica
que os nomes que iniciam com o nome fonte, não serão mapeados para a tabela binária. Isso
significa que esta opção é específica, que será aceita somente para nome de pacotes como
argumentos.
--diff-only, --dsc-only, --tar-only
Faz o download somente o diff, dsc, ou arquivo tar de um arquivo fonte.
--arch-only
Somente processa a dependência da arquitetura, construindo as dependências.
--allow-unauthenticated
Ignora se os pacotes não são autenticados.
-h, --help
Mostra um pequeno resumo de uso.
-v, --version
Mostra a versão do programa.
-c, --config-file
Arquivo de configuração; Especificar um arquivo de configuração para uso. O programa
deverá ler a configuração padrão e essa, o arquivo de configuração.
-o, --option
70
Estabelece uma opção de configuração; Essa deverá estabelecer uma opção de
configuração arbitrária.
ARQUIVOS
/etc/apt/sources.list
Determinar de onde os pacotes devem ser buscados.
/etc/apt/apt.conf
Arquivo de configuração do APT.
/etc/apt/apt.conf.d/
Fragmentos do arquivo de configuração do APT.
/etc/apt/preferences
Arquivo de preferências versão. Esse arquivo poderá especificar o “pinning”, isto é, a
preferência para buscar certos pacotes de uma fonte separada ou de uma versão diferente de
uma distribuição.
/var/cache/apt/archives/
Área de armazename o dos arquivos de pacotes baixados.
/var/cache/apt/archives/partial/
Área de armazenamento transitória para os pacotes.
/var/lib/apt/lists/
Área que armazena a informação para o estado de cada pacote fonte especificado em
sources.list.
/var/lib/apt/lists/partial/
71
Área para armazenamento da informação do estado temporário.
11. Permissões
Cada arquivo no LINUX apresenta três níveis de proteção definidos por três categorias
de usuários. Todo arquivo ou diretório tem um dono (user) e pertence a um grupo (group).
Qualquer usuário do sistema que não seja o dono do arquivo e não pertença ao grupo do
arquivo enquadra-se na categoria outros (others). O administrador do sistema, o chamado
superusuário (root), não pertence a nenhuma das categorias acima, tendo acesso irrestrito a
todos os arquivos do sistema.
Para cada categoria de usuário, existem três tipos de acesso que podem ser concedidos:
leitura (read), escrita (write) e execução (execute). O sistema LINUX não faz distinção entre os
acessos de escrita e a eliminação, ou seja, um arquivo que pode ser alterado também pode ser
eliminado.
As tabelas abaixo mostram as permissões para arquivos e diretórios:
Tabela 6: Permissões de arquivos
Arquivos Descrição
r Permissão para ler e copiar o arquivo.
w Permissão para alterar ou eliminar o arquivo.
x Permissão para executar o arquivo.
Tabela 7 - Permissões de diretórios
Diretórios Descrição
r Permissão para ler o conteúdo do diretório (listar o nome dos arquivos).
w Permissão para criar, remover e renomear arquivos no diretório.
x Permissão de busca: O usuário que não possuir esta permissão não poderá
se posicionar no diretório nem acessar os arquivos na árvore abaixo deste
diretório.
Através da opção -l do comando ls podemos visualizar o código de proteção dos
arquivos. Este código está representado pelos 9 caracteres que seguem o tipo de cada arquivo
(primeiro caractere). Os três primeiros caracteres correspondem a proteção para o dono (user)
do arquivo, os três próximos definem a proteção para a categoria grupo (group) e os últimos
três caracteres especificam a proteção do arquivo em relação ao demais usuários (other).
Então, as setenças abaixo, significam:
72
-rwxrwxrwx – é um arquivo no qual usuários, grupos e outros possuem acesso para
leitura, escrita e execução.
-rwxr-xr-x – é um arquivo no qual só o usuário possue todas as permissões de leitura,
escrita e execução. No entanto, grupos e outros usuários, só possuem permissões para leitura
e execução.
Exemplo: Usando o comando ls com a opção -al:
$ ls -al
rudiney@katrina:~/cnpq$ ls -al
total 3213
drwxr-xr-x 3 rudiney rudiney 176 2007-08-10 17:28 .
drwxr-xr-x 74 rudiney rudiney 3504 2007-08-19 17:39 ..
-rw-r--r-- 1 rudiney rudiney 350208 2007-08-04 16:48 ana.doc
drwxr-xr-x 8 rudiney rudiney 280 2007-08-10 17:28 PROJETO_CNPQ
-rw-r--r-- 1 rudiney rudiney 1408512 2007-08-04 16:52 renata.doc
$
No exemplo acima, o comando aplicado no diretório “cnpq” do usuário “rudiney” na
máquina “katrina”, mostra algumas informações. Para o arquivo “ana.doc” o usuário “rudiney”
(dono do arquivo), no grupo “rudiney” pode ler e alterar, porém não pode executar. Para o
arquivo “renata.doc” o usuário “rudiney” (dono do arquivo) possui acesso para leitura e escrita
mas, não tem acesso para execução, enquanto grupo “rudiney” e outros, só possuem acesso
para leitura.
A proteção assinalada ao arquivo diretório determina o primeiro nível de proteção para
todos os arquivos deste diretório e tem prioridade sobre as proteções associadas
individualmente a cada arquivo. Por exemplo, caso um usuário não tenha permissão de escrita
em um arquivo diretório, não poderá eliminar nenhum arquivo deste diretório, ainda que as
proteções dos arquivos indiquem o contrário.
11.1 Alteração das Permissões
Para alterarmos as permissões em um arquivo utilizamos o comando chmod (change
file mode). Ele possui dois formatos:
Formato 1
$ chmod [ugoa] [+=-] [rwx ugo] arquivos
A letra u representa os privilégios do dono do arquivo; a letra g os privilégios do grupo e
a letra o os privilégios dos demais usuários. A letra a (all) representa todas as categorias de
73
usuários. O sinal + significa a adição de um privilégio e o sinal - a retirada de um privilégio.
As opções r, w e x representam respectivamente as permissões de leitura,
escrita(alteração) e execução. Podemos alterar vários privilégios em um único comando,
separando-os por vírgulas. Classes de usuários e níveis de proteção que não forem
especificados no comando não serão alterados.
Exemplo:
$ ls -l
-rw-rw-rw- 1 ana alunos 138 Ago 14 16:15 arquivo
$ chmod g-w,o-rw arquivo
$ ls -l
-rw-r----- 1 ana alunos 138 Ago 14 16:30 arquivo
$
Formato 2
$ chmod nnn arquivo
Onde nnn é o código em hexadecimal que representa os tipos de acesso concedidos à
cada categoria de usuário. Cada permissão tem um número associado:
execute = 1
write = 2
read = 4.
A tabela abaixo ilustra as combinações possíveis:
Tabela 8 - Representação de permissões através de número hexadecimal.
Número em
hexadecimal
Permissões Descrição
0 --- Nenhum acesso permitido.
1 --x Acesso para execução
2 -w- Acesso para escrita
3 -wx Acesso para escrita e execução
4 r-- Acesso para leitura
5 r-x Acesso para leitura e execução
6 rw- Acesso para leitura e execução
7 rwx Acesso para leitura, escrita e execução
74
Exemplo:
$ ls -l
-rw-rw-rw- 1 ana alunos 138 Ago 14 16:15 arquivo
$ chmod 640 arquivo
$ ls -l
-rw-r----- 1 ana alunos 138 Ago 14 16:30 arquivo
$
11.2 Alteração do Grupo e Dono
Se você é membro de mais de um grupo, você pode eventualmente precisar alterar o
grupo de um arquivo. Isto é feito através do comando chgrp. Sua sintaxe é:
$ chgrp grupo arquivo
Exemplos:
$ ls -l arquivo
-rw-r----- 1 ana alunos 138 Ago 14 16:15 arquivo
$ chgrp monitores arquivo
$ ls -l arquivo
-rw-r----- 1 ana monitores 138 Ago 14 16:25 arquivo
$
Caso se deseja pesquisar quais grupos existem no sistema, pode-se utilizar o comando
cat /etc/group da seguinte forma:
$ cat /etc/group
É importante ressaltar que para utilizar o comando chgrp, o usuário deve pertencer ao
novo grupo especificado e ser o dono do arquivo, ou então o superusuário.
Enquanto o comando chgrp permite a alteração do grupo do arquivo, o comando chown
permite alterar o seu owner (dono).
# chown dono arquivo
75
Exemplos:
# ls -l arquivo
-rw-r----- 1 ana alunos 138 Jan 14 16:15 arquivo
# chown luiz arquivo
# ls -l arquivo
-rw-r----- 1 paulo alunos 138 Jan 14 16:25 arquivo
#
Este comando só pode ser utilizado pelo superusuário, pois só ele tem acesso a todas as
contas e usernames do sistema.
12. Referências para consulta
Como o Linux é um software gratuito, existem vários sites com manuais e explicações
gratuitas sobre o mesmo, ou seja, grande parte dos assuntos discutidos sobre o Linux pode ser
encontrada nestes sites.
Abaixo podemos conferir alguns desses sites:
1. http://focalinux.cipsga.org.br/ : site com vários manuais para downloads.
2. http://www.linux.org/ : site oficial do Linux onde todas as distribuições podem ser
baixadas gratuitamente sem dificuldades.
3. http://www.softwarelivre.gov.br/links : site com vários links importantes sobre o
Linux.
4. http://www.debian.org : site oficial de suporte da distribuição DEBIAN com um
conjunto de informações e documentação muito completa sobre esta distribuição.
5. http://www.rau-tu.unicamp.br/linux/ : site de perguntas e respostas sobre Linux.
Caso não encontre a resposta no site, você pode formular e enviar sua pergunta e
aguardar uma resposta de um colaborador.
6. http://www.dicas-l.com.br : site de dicas sobre linux atualizado diariamente.
Possui lista de usuários, área de documentação e pesquisa sobre soluções de
problemas.