Apostila Linux
Apostila Linux
1
CONTEÚDO 3 4 CONTEÚDO
5
8 COMANDOS
Divisão do Conteúdo
A seguir estão listados os pontos principais de cada capı́tulo. Ao final dos capı́tulos
3, 4 e 5 são propostos exercı́cios; alguns deles desafios, pois exigem informações
sobre comandos que não serão apresentadas.
Cápiulo 2 Documentação
Descreve algumas maneiras de obter informações sobre comandos.
Mesmo com um significativo aumento do uso do Linux em Cápiulo 3 Linux em Sua Essência
computadores domésticos, e de sua vasta divulgação, é co- Apresenta a estruturação dos arquivos dentro do sistema e o espaço des-
mum perceber o quanto as pessoas se intimidam ao se tinado aos usuários; modos de permissões, e alguns comandos para a
deparar com este famigerado Sistema Operacional. A ver- administração do sistema.
dade é que toda esta fama de “mau” deriva de tempos em
Cápiulo 4 Mexendo Um pouco Mais
que sua interface mantinha-se a “quilômetros” de distância
Tratamento da entrada e saı́da padrão de dados, redirecionamento; Gerência
do habitual sistema difundido em nossos computadores.
de processos.
Hoje, o Ubuntu por exemplo, uma das distribuições Li-
nux, apresenta uma interface gráfica com suas funcionali- Cápiulo 5 Terminal do Linux, Uma Mão na Roda
dades muito semelhantes às de sistemas operacionais pro- São descritos diversos comandos úteis para a manipulação de informações
prietários, tornando a “migração” do conhecimento intui- de arquivos contendo texto, os chamados filtros; trata da busca de arquivos
tiva. Deixando as “aparências” de lado. . . e tabém da transferência de dados remotamente.
Linux é Software Livre. Esta poderia ser uma boa razão para a sua preferência a Apêndices
outros Sistemas Operacionais. Deixamos esta conclusão a cargo do leitor e vamos Notas sobre a instalação de uma distribuição Linux e sobre a instalação
adiante. Em plena “Era Digital”, não podemos deixar de falar em segurança, de programas; breve descrição de alguns editores de texto “clássicos” do
no que se refere a sistemas de computadores, uma das caracterı́stica primárias Linux.
visadas no desenvolvimento do Linux e seus aplicativos. Seja pelo resultado da
comparação de prós e contras, ou até por necessidades profissionais, observamos
cada vez mais usuários motivados a utilizá-lo.
Sugestões?
Para que as diferenças relevantes entre o modo de uso dos Sistemas Operacio-
nais não se tornassem um obstáculo acentuado, barrando a adoção do Linux como Esta apostila faz parte de um projeto do PET Computação que visa o constante
ferramenta cotidiana, seguindo a filosofia de Software Livre do Departamento de aperfeiçoamento deste conteúdo, portanto crı́ticas e sugestões são bem-vindas!
Informática da UFPR, os alunos do PET do curso de Ciência da Computação, ela- Nosso e-mail? [email protected].
boraram uma apostila básica sobre o assunto. Mais tarde, os alunos do PET
passaram a oferecer curos semestrais, abertos à comunidade com este mesmo
propósito.
Sobre a Apostila
Esta apostila foi escrita pelos integrantes do PET Computação da UFPR e é uma
reformulação do mateiral escrito anteriormente. Abrange os conceitos fundamen-
tais de organização do Linux e suas aplicações, voltadas ao modo texto. Além
de uma referência aos interessados em adquirir conhecimento sobre este Sistema
Operacional, esta nova abordagem segue a estrutura das aulas apresentadas, tra-
dicionalmente pelo PET Computação na primeira semana de aulas, aos calouros
do curso de Ciência da Computação, e este ano também, aos calouros do novo
curso da UFPR, Informática Biomédica. Curitiba, 6 de março de 2012
7
10 CAPÍTULO 1. INTRODUÇÃO
1.2 O Linux
Capı́tulo 1
Linux é o termo geralmente usado para designar qualquer sistema operacional que
utilize o núcleo Linux. Este núcleo foi desenvolvido pelo finlandês Linus Torvalds,
inspirado no sistema Minix. O seu código fonte está disponı́vel sob licença GPL
Introdução para qualquer pessoa que utilizar, estudar, modificar e distribuir de acordo com
os termos da licença, i.e., simplificadamente, você pode alterar qualquer parte do
Linux, construir qualquer sistema baseado nele e até comercialiazá-lo, mas você
não pode fechá-lo, publica-lo sob uma licença proprietária e não permitir que
outros usuários o modifiquem.
• A concha, ou casca, mais comumente referenciada pelo seu nome original 1.4 História do Linux
em inglês, Shell, que cumpre as funções de interface com o usuário, é o meio
pelo qual o humano interage com o sistema. Pode apresentar-se em seu Na década de 1960 o Massachusets Institute of Technology (MIT), a General Eletric
formato cru, via linha de comando, diretamente pelas entrada e saı́da padrão (GE), os laboratórios Bell (Bell Labs) e a American Telephone na Telegraph (AT&T)
(teclado e monitor, respectivamente, no caso do PC), ou em roupagens mais começaram o projeto de um sistema operacional de tempo compartilhado, onde
amigáveis, tanto em modo texto quanto gráfico, com suporte a gerenciamento vários usuários pudessem acessar os recursos de um único computador, sendo
de janelas, e dispositivos de entrada e saı́da auxiliáres (mouse, dispositivos assim, o sistema mais arrojado da época. Seu nome era Multics, que em 1969,
de áudio, leitores de linha braile, dentre outros.) já rodava em um computador GE645. Os recursos computacionais disponı́veis
na época, no entanto, revelaram-se insuficientes para as pretensões do projeto e
Segundo alguns autores, existem dois modos distintos de conceituar um sis- neste mesmo ano a Bell Labs se retirou do projeto.
tema operacional, no caso, a função do Kernel: Apesar disto, um de seus pesquisadores, Ken Thompson, continuou seus es-
tudos no sistema com a intenção de criar algo menor mas que conservasse as
• Pela perspectiva do usuário ou programador, visão top-down: é uma abstração suas idéias básicas. Usando um ocioso computador PDP-7, começou a escrever o
do hardware, fazendo o papel de intermediário entre o aplicativo (programa) Unics usando linguagem de montagem (assembly). Mais tarde, Brian Kernighan,
e os componentes fı́sicos do computador (hardware); também pesquisador da Bell Labs, rebatizou o novo sistema de Unix.
9
1.5. UMA VISÃO GERAL 11 12 CAPÍTULO 1. INTRODUÇÃO
Um marco importante foi estabelecido em 1973 quando Dennis Ritchie, outro robustos, com mais de duas décadas de desenvolvimento - contribui muito para a
pesquisador da Bell, e Ken Thompson reescreveram o Unix, usando a linguagem sua confiabilidade e estabilidade. Se configurado corretamente, o sistema não irá
de alto nı́vel C, para um computador PDP-11. A linguagem C havia sido desenvol- travar. Este é outro ponto muito importante a favor do sistema: o fato de poder
vida por Ritchie para substituir e superar as limitações da linguagem B, desen- ser configurado e adaptado segundo a necessidade de cada um.
volvida por Thompson. O seu uso é considerado uma das principais razões para
É possı́vel instalar o Linux juntamente com outro sistema operacional. Por
a rápida difusão do Unix.
exemplo, pode-se instalar Linux em uma máquina que já contenha Windows e
Entre 1977 e 1981, a AT&T alterou o Unix e lançou o System III. Em 1983, utilizar os dois sistemas sem que nenhum dado seja perdido. O Linux consegue
após mais uma série de modificações, foi lançado o conhecido Unix System IV, que acessar os arquivos usados no windows. Além disso, é possı́vel utilizá-lo através
passou a ser vendido. Até hoje esse sistema é usado no mercado como o padrão de um CD sem que seja necessária a sua instalação.
internacional do Unix. É comercializado por empresas como IBM, HP, Sun, etc.
O Linux, assim como todos os sistemas operacionais, utilizava inicalmente ape-
O Unix é um sistema operacional caro e é usado em computadores poderosos por
nas interfaces de modo texto. A diferença é que no Linux a interface de modo texto
diversas multinacionais.
evoluiu junto com o restante do sistema e se integrou de uma forma bastante con-
Em 1987, Andrew Stuart Tanenbaum, escreveu um clone do Unix, chamado sistente com os aplicativos gráficos. Quanto mais você aprende, mais tempo você
Minix, para o IBM PC com o intuito de ensinar a estudantes de ciência da computação acaba passando no terminal; não por masoquismo, mas porque ele é realmente
como funciona um sistema operacional. O Minix foi escrito desde o começo, sem mais prático para fazer muitas coisas.
apreveitar nenhum código proprietário já existente do Unix. Consequentemente
O grande atrativo do terminal é que, com exceção de alguns poucos aplicativos
Tanenbaum escreveu um livro que descreve o sistema em detalhes e disponibizou
especı́ficos, os comandos são sempre os mesmos. Isso faz com que ele seja um
o código em disquetes. Em três meses, na Usenet, um meio de comunicação se-
porto seguro, com o qual você pode contar, sem importar em qual distribuição do
melhante a uma lista de discussão que data dos primórdios da Internet, milhares
Linux você está. O terminal é também a forma mais natural de ”conversar”com
de leitores do mundo inteiro estavam discutindo e aprimorando o sitema. Um des-
o sistema sempre que você precisa de qualquer coisa além do arroz com feijão.
ses leitores era o estudante finlandês de ciência da computação Linus Torvalds da
Através dele é possı́vel realizar qualquer operação.
Universidade de Helsinki.
Apesar disso, a utilização do terminal não é intuitiva. É preciso um conheci-
No fim dos anos 80, Linus teve contato com computadores compatı́veis com o
mento prévio para conseguir realizar as tarefas mais simples, o que não é atrativo
IBM PC, em 1990 começou a aprender C em seus estudos e em 1991 comprou um
para um leigo em computação. Isto levou a criação de uma mı́stica de que o Linux
Intel 80386. Com 21 anos, ele tinha contato com o Sistema Unix da Universidade,
é um sistema operacional muito complexo. O que muita gente ainda não sabe é
o SunOS, atualmente Solaris, e desejava rodar a versão de Tannenbaum, Minix,
que o Linux já dispõe de uma quantidade de ferramentas muito mais abrangente
no seu recém adquirido 80386. Entretanto, descontente com os recursos do Minix,
que a quantidade de ferramentas para Windows.
especialmente em relação ao emulador de terminal que ele utilizaria para acessar
remotamente o Unix da Universidade, começou a desenvolver o seu próprio emu- Nas distribuições mais atuais existem programas capazes de emular interfaces
lador de terminal que não rodava sobre o Minix, mas diretamente no hardware do gráficas, proporcionando ao usuário um ambiente mais amigável, com janelas,
PC 386. Este projeto pessoal foi sendo modificado gradualmente e adquirindo ca- botões e menus. Ao contrário do Windows, no Linux podemos escolher a interface
racterı́sticas de um Sistema Operacional independente do Minix. Este foi o inı́cio gráfica que mais nos agrada em termos de beleza e facilidade de uso.
do desenvolvimento do núcleo Freax (Free + Freak + X do Unix). Posteriormente
batizado de Linux por Ari Lemmke, administrador do site ftp.funet.fi, que deu
esse nome ao diretório FTP onde o núcleo Linux estava inicialmente disponı́vel.
O projeto foi lançado em 1991 em uma famosa mensagem para a Usenet em que
Linus divulgou que estava disposto a disponibilizar o código-fonte e contar com a
colaboração de outros programadores. Desde os primeiros dias, ele recebeu ajuda
de hackers do Minix e hoje recebe contribuições de milhares de programadores
dos mais diversos locais do mundo.
OPÇÕES
Mostra todas as opções disponı́veis e suas respectivas funções.
Para se ter acesso as páginas de manual, é preciso utilizar o comando man (co-
mando 2.1, p. 12).
A mesma estrutura sintática é seguida pelas páginas de manual na hora de
Capı́tulo 2 apresentar a estrutura de um comando. Além disso, as páginas de manual tem
uma notação própria para indicar se um parâmetro ou opção é opcional e destacar
texto a ser substituı́do: opções e parâmetros aparecem entre colchetes quando
opcionais. Texto a ser substituı́do aparece sublinhado.
Documentação As páginas de manual ajudam muito o usuário Linux a conhecer mais sobre
um certo comando e encontrar uma referência rápida a respeito de suas opções e
parâmetros.
Além das páginas de manual existe uma outra fonte de informação disponı́vel
no sistema, contendo um material mais extenso e detalhado, com textos explica-
Qualquer instalação do sistema Linux vem, por padrão, com diversos aplicativos tivos. Para acessar esse conteúdo usamos o comando info, que não está docu-
já instalados, além de existirem milhares e milhares de pacotes disponı́veis para mentado nesta apostila. Tente man info.
instalação. Na hora de utilizar todas essas ferramentas sempre surgirão dúvidas
a respeito da funcionalidade de certo aplicativo ou de seus parâmetros e opções.
Para sanar essas dúvidas e servir como guia de referência para todas as ferra- 2.2 /usr/share/doc
mentas e aplicativos instalados o sistema oferece uma documentação detalhada:
as man pages.
Uma outra alternativa na busca por informações sobre aplicativos é consultar
o material encontrado no diretório /usr/share/doc/, que contém os arquivos
LEIAME e informações sobre os autores de diversos programas instalados no sis-
tema; além disso, é comum encontrar material no formato html com a documen-
2.1 Páginas de manual tação completa desses programas.
Cada ferramenta tem sua própria página de manual, e todas seguem o mesmo Comando 2.1 man Acessa páginas de manual.
padrão, com a mesma formatação e, em geral, as mesmas seções para tornar o
NOME
uso dos manuais mais simples. Todas as páginas de manual seguem mais ou
man
menos a seguinte estrutura:
NOME SINTAXE
Nome do comando. man [seção] comando
man -k palavra chave
SINTAXE DESCRIÇÃO
Exemplo da sintaxe genérica de uso do comando. Nesta seção há uma notação
O man acessa a página de manual do comando. É possı́vel especificar a
especial de representação:
seção onde será buscada a página de manual. Os comandos estão organi-
negrito
zados em seções cujos nomes são números de 1 a 9 e cada seção contém
indica que deve-se digitar extamente como está escrito;
conjuntos de comandos com determinadas caracterı́sticas. Mais detalhes
sublinhado man man.
deve ser substituı́do pelo conteúdo adequado; O comando man também busca páginas de manual que contenham a
palavra chave em sua seção de descrição.
... indica a possibilidade de repetição do conteúdo precedente;
NOTAS
[ ] todo o conteúdo entre colchetes é opcional; Para sair da página de manual digite q . Outras funcionalidades de
navegação estão disponı́veis, e para conhecê-las veja as páginas de manual
| o contéudo delimitado pela barra vertical não pode ser usado em conjunto.
do comando less.
DESCRIÇÃO
Breve descrição de sua funcionalidade.
13
16 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
super usuário. Por fim, temos os usuário comuns, que não possuem previlégios.
Capı́tulo 3
Comando 3.1 whoami Identifica o usuário logado.
SINTAXE
whoami
Vimos no capı́tulo anterior nosso primeiro comando, o man. Da mesma forma que
DESCRIÇÃO
este, todos os outros comandos apresentados são executados em modo texto, por
O comando é utilizado para o usuário identificar-se na máquina. Normal-
um aplicativo chamado terminal, que será nossa forma de comunicação com o
mente, enta informação é apresentada no prompt a
sistema Linux. O modo texto é o ambiente clássico de interface entre o usuário
e sistemas baseados em UNIX, conhecido como shell, constituı́do por um inter- a Veja sobre sobre prompt na seção [?]
pretador de comandos textuais. Muitas distribuições Linux possuem interface
gráfica, mas o bom e velho shell é superior em número de funcionalidades, pos- Comando 3.2 hostname Mostra o nome da máquina.
sibilitando ao usuário, após um breve perı́odo de adaptação, trabalhar de forma
mais eficiente em diversas tarefas. NOME
Mas antes de abrirmos um terminal, é fundamental que estejam bem enten- hostname
didos alguns conhecimentos básicos sobre Linux. Devemos ter em mente a es-
SINTAXE
trutura de organização dos arquivos no sistema e onde está o nosso espaço de
hostname [-i|novo nome]
trabalho dentro desta organização. Ainda, quais as restrições de acesso a este
espaço e como é feita sua interação com os demais usuários. Na sequência do
DESCRIÇÃO
capı́tulo, serão explicados alguns conceitos básicos e tarefas simples, pois an-
Mostra o nome da máquina na rede ou altera seu nome para novo nome.
tes de conhecer outras funcionalidades, o usuário deve saber como manter seus
arquivos e se “localizar” no sistema.
OPCOES
-i mostra o endereço de IP da máquina.
15
3.1. QUEM ESTÁ NO CONTROLE? 17 18 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
Comando 3.4 who Mostra os usuários que estão logados. 3.2 Arquivos e Pastas
NOME
Cada usuário do sistema possui uma pasta pessoal. Esta pasta, chamada home,
who
é o local destinado ao armazenamento de todos os arquivos pessoais, com acesso
SINTAXE restrito, se assim desejado, ao seu respectivo dono. Na linha de comando, a home
pode ser representada com o metacaractere ˜, e a home de outros usuários, como
who
a de Pedro, por exemplo, ˜pedro. Veremos abaixo onde se localizam estas pastas,
DESCRIÇÃO e toda a estrutura de organização do sistema.
Mostra quais usuário estão logados na máquina.
SINTAXE
su [usuário]
DESCRIÇÃO
O comando su troca de um usuário para outro no terminal corrente. Se o
usuário não for especificado, será trocado para o root do sistema.
NOTAS
No sistema operacional Ubuntu, inicialmente não está definida uma senha
do root. Para defini-la digite sudo bash e em seguida entre com a sua senha
(caso você tenha feito a instalação do sistema). Em seguida use o comando
passwd para definir a senha de root.
Exercı́cio Resolvido 3.3 O diretório /pasta exercicios está na sua home. Como
/boot Encontramos o kernel e outros arquivos de inicialização;
excluir todos os arquivos e diretórios contidos nesta pasta?
/bin estão os executáveis mais simples; $ cd ˜ $ rm -r pasta exercicios/*
/usr a maior parte dos executáveis instalados; Juntamente com o comando rm, a opção -r irá excluir o diretório e todos diretórios
abaixo dele.
/etc guarda os arquivos de configuração;
O formato dos arquivos não é decidido pela sua extensão, como no Windows, mas
pela sua estrutura interna. Logo, a extensão de um arquivo serve apenas para fins Comando 3.8 pwd Mostra o endereço completo do diretório atual.
de organização e para facilitar futuras buscas. Outro ponto importante é que em NOME
nomes de arquivos ou pastas há distinção entre letras maiúsculas e minúsculas.
pwd
Um arquivo chamado RincaoAlegre.jpg não será encontrado se referenciado
como rincaoAlegre.jpg, por exemplo. SINTAXE
Cada arquivo guarda três informações de tempo: access, modify e change. pwd
Access é atualizado quando se acessa um arquivo. Modify é quando o conteúdo do
arquivo é modificado. Change é modificado quando modify se atualiza ou quando DESCRIÇÃO
ocorre uma alteração das propriedades externas do arquivo, como permissões, ou Mostra o endereço completo do diretório atual.
quando ele é movido para outro diretório.
3.2. ARQUIVOS E PASTAS 21 22 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
-d Não lista o conteúdo de diretórios, mas sim suas informações. Comando 3.14 mv Move arquivos e diretórios.
NOME
Comando 3.11 mkdir Cria diretórios. mv
NOME SINTAXE
mkdir mv [-i] arquivo ... destino
mv [-i] arquivo destino/novo nome
SINTAXE
mkdir diretório ... DESCRIÇÃO
mkdir -p diretórios/subdiretório ... O comando mv move o arquivo para o diretório destino. Se mais de um
arquivo for passado como parâmetro, destino deve ser um diretório. Caso
DESCRIÇÃO
contrário é possı́vel renomear o arquivo com o novo nome ao movê-lo para
Cria diretórios. destino.
OPÇÕES OPÇÕES
-p Ao criar o subdiretório, cria também todos os diretórios inexis- -i Pede confirmação antes de sobrescrever qualquer arquivo.
tentes.
3.2. ARQUIVOS E PASTAS 23 24 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
SINTAXE
cp [-ri] arquivo ... destino Comando 3.18 touch Atualiza as datas de um arquivo.
cp [-ri] arquivo destino/novo nome
NOME
DESCRIÇÃO touch
O comando cp copia o arquivo para o diretório destino. Se mais de um
arquivo for passado como parâmetro, destino deve ser um diretório. Caso SINTAXE
contrário é possı́vel nomear a cópia do arquivo como novo nome. touch arquivo ...
OPÇÕES
DESCRIÇÃO
-r Copiar diretórios, com todo seu conteúdo, recursivamente. Atualiza os tempos modify, change e access do arquivo. Se o arquivo não
existir, será criado.
-i Pede confirmação antes de sobrescrever arquivos existentes.
SINTAXE
file arquivo ...
DESCRIÇÃO
Mostra o formato do arquivo.
Comando 3.19 ln Cria links de arquivos.
NOME
ln
Comando 3.17 stat Mostra informações sobre arquivos. SINTAXE
NOME ln [-s] arquivo link
stat
DESCRIÇÃO
SINTAXE Cria um link do arquivo. Se for usado sem opções, cria um hard link.
stat arquivo ...
OPÇÕES
DESCRIÇÃO -s Cria um link simbólico.
Este comando mostra o formato do arquivo, o tamanho, a posição no HD, as
permissões, o login e o grupo do dono e os tempos access, modify e change.
OPÇÕES
-f, --file-system
Mostra status de um sistema de arquivos ao invés de um arquivo.]
3.3. PERMISSÕES 25 26 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
Somente o root tem ações irrestritas no sistema. Naturalmente, a especificação w Significa permissão de gravação (write);
do que cada usuário ou grupo do sistema pode fazer é determinada através de per-
missões. Ao listar as permissões de um arquivo ou pasta, estas serão mostradas x Significa permissão de execução (execution);
no seguinte formato:
- Significa permissão desabilitada.
$ ls -l
drwxr-xr-x 2 chapolin pet-user 4096 2011-02-25 16:22 Comandos
-rw-r--r-- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile Ja para diretórios:
O primeiro item que aparece em cada linha, drwxr-x-r-x e -rw-r--r-- acima,
é a forma usada para mostrar as permissões do diretório Comandos e do arquivo r Significa permissão para listar o conteúdo (read);
Makefile.Um ponto interessante é que o Linux trata todos os diretórios como
arquivos1 , portanto, as permissões se aplicam de igual forma para ambos. Tais w Significa permissão para criar e excluir arquivos e diretórios (write);
permissões podem ser divididas em quatro partes para indicar: tipo, proprietário,
x Significa permissão para entrar no diretório (execution);
grupo e outras permissões.
- Significa permissão desabilitada.
Leitura permite ao usuário ler o conteúdo do arquivo mas não alterá-lo, ou listar
o conteúdo se for uma pasta. Gravação permite que o usuário altere o arquivo ou
o interior do diretório. Execução, como o nome diz, permite que o usuário execute
o arquivo, no caso de ser executável e, no caso de pastas, acessá-la.
Estas permissões,r, w e x, não funcionam isoladamente, ou seja, de forma que
o usuário tenha ou permissão de leitura ou de gravação ou de execução, elas
funcionam em conjunto.
Existem duas maneiras de expressar as permissões: forma textual e forma
octal.
O primeiro caractere da string indica o tipo de arquivo: se for d representa um 3.3.1 Notação Textual
diretório, caso seja - equivale a um arquivo. Entretanto, outros caracteres podem
aparecer para indicar outros tipos de arquivos, conforme abaixo. A notação textual é mais maleável, e pode ser escrita de algumas formas, como
veremos abaixo.
d Diretório; $ chmod (ugoa)(+-=)(rwx) arquivos
b arquivo de bloco; O primeiro grupo de caracteres refere-se a quem a permissão será alterada.
- arquivo “comum”. a Permissão de todos os usuários, ou seja, proprietário, grupo e outros usuários.
1 Portanto,
os comandos da apostila que se aplicam a “arquivos”, certamente valem para diretórios,
a menos que seja explicitado no texto. O segundo grupo de caracteres refere-se ao tipo de alteração que será feita.
3.3. PERMISSÕES 27 28 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
+ Adiciona uma permissão; Para exemplificar, vamos utilizar a permissão rw-, cujo valor em binário é 110,
que por sua vez, em decimal corresponde ao número 6. Então, em vez de usar
- Remove uma permissão; rw- ou 110 para criar a permissão, simplesmente usa-se o número 6. Repare
que, com o método numérico, usamos somente um dı́gito para representar uma
= Define estado final da permissão de tipo de usuário; permissão, em vez de três. Assim, a string de permissões r--r--r-- pode ser
representa por 444, pois r-- em decimal é igual a quatro. Caso você desconheça
O terceiro grupo de caracteres refere-se ao tipo de permissão, já comentado acima. o sistema numérico binário, existe outra maneira de pensar:
Para melhor entendimento, veja o exemplo:
$ ls -l 4 Permissão de leitura;
-rw-rw-r-- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile
$ chmod o-r Makefile 2 permissão de escrita;
$ ls -l
-rw-rw---- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile 1 permissão de execução;
$ chmod g=r Makefile
$ ls -l 0 indica sem permissões.
-rw-r----- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile
$ chmod og+w Makefile
Agora é simples, é só somar as permissões. A permissão rwxrw-r-- em octal, por
$ ls -l
exemplo, ficaria assim: 4 + 2 + 1 = 7 (permissão de rwx), 4 + 2 = 6 (permissão rw)
-rw-rw--w- 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
$ chmod o=rx Makefile 4 = (permissão r). Para que não fique dúvidas, veja mais um exemplo com a figura
$ ls -l abaixo.
-rw-rw-r-x 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
Para realizar trocar completas, devem ser utilizadas vı́rgulas para separar os
usuários:
$ ls -l
-rw-rw-r-x 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
$ chmod u=rw,g=r,o= Makefile
$ ls -l
-rw-r----- 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
Além da forma textual para descrever as permissões vista acima, existe também
o modo numérico, chamada de forma octal. Basicamente deve se pensar no sis-
tema numérico binário, substituindo-se os tipos de permissões por 0s ou 1s. Se
determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se
o valor 0. Assim, a string de permissões r-xr----- na forma numérica torna-se
Exercı́cio Resolvido 3.4 Estando em sua home, como alterar as permissões de
101100000. Essa combinação de 1’s e 0’s é um número binário. Mas temos ainda
todos os diretórios e arquivos do diretório /home/user/pasta exercicios?
que acrescentar a forma decimal (ou seja, representados por números de 0 a 9).
Para isso, observe a tabela abaixo: $ chmod -R 744 pasta exercicios
A partir de sua home, com o comando chmod e a opção -R, é possı́vel alterar as
permissões de todos os arquivos do diretório /pasta exerciciosrecursivamente,
ou seja, alteraremos as permissões de todos os diretórios e arquivos existentes
dentro do diretório /pasta exercicios.
3.3. PERMISSÕES 29 30 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
-R Troca a permissão dos arquivos e diretórios recursivamente. -R Troca o proprietário e/ou o grupo dos arquivos e diretórios recursi-
vamente.
NOTAS
O caractere : é equivalente ao caractere . neste comando, podendo ser
utilizado em sua sintaxe.
3.3. PERMISSÕES 31 32 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA
3.4 Exercı́cios
Para resolver esses desafios, utilize as man pages, juntamento com as informaçoes
da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
panha a apostila.
Comando 3.22 umask Determina as permissões padrão para novos arquivos e Exercı́cio 3.6 Como ficariam as permissões de um arquivo que está definido como
diretórios criados. somente leitura para o grupo do dono do arquivo e também para os outros usuários
que não fazem parte deste grupo, e leitura e escrita para o dono do arquivo?
NOME
umask Exercı́cio 3.7 Você fez o download de um filme, mas na pasta deste filme veio um
arquivo deconhecido, que pode ou não ser do seu interesse. Como pode-se obter
SINTAXE
informações desse arquivo sem executá-lo? Quais as implicações da ação anterior
umask permissões
na segurança do sistema?
DESCRIÇÃO
Quando o usuário cria um arquivo ou diretório, o sistema associa ao objeto Exercı́cio 3.8 Você é o administrador de um sistema, e o problema é o seguinte:
criado um conjunto de permissões padrão de acesso. Este valor padrão é existe um arquivo importante na home de um usuário, você conhece o login deste
definido pelo comando umask. Este comando pode ser executado de duas usuário. A partir desta única informação, qual a sequência de comandos apropriada
maneiras: forma textual e forma octal. Na forma textual, este funciona para copiar este arquivo para sua home, ou ao menos ter acesso a esse arquivo a
como explicado nesta seção, exemplo: partir de sua home?
$umask u=rwx,g=rx,o=
Já na forma octal existe um pequeno detalhe que faz uma grande diferença.
Deve-se informar as permissões que não serão dadas, ao invés das per-
missões desejadas. Outra forma de se pensar é subtrair a permissão dese-
jada da permissão máxima (777). Vamos refazer o exemplo acima, agora na
forma octal:
$umask 027
A permissão desejada é 750, então subtrai-se 750 da permissão máxima
(777), obtendo-se o valor do umask 027.
NOTAS
É muito importante saber que o comando umask funciona apenas no termi-
nal executado, após seu encerremento o efeito do comando é perdido. Para
alterar em todos os terminais é necessário alterar o arquivo de configuração
de seu usuárioa .
a ver seção da nicoly
34 CAPÍTULO 4. MEXENDO UM POUCO MAIS
O comando cat admite como parâmetro apenas a entrada, a saı́da será por padrão
o terminal. Esta saı́da pode ser alterada por meio de redirecionamentos, que
veremos mais adiante.
Mexendo um pouco Mais Caso um arquivo de entrada não seja fornecido, esse programa irá esperar
dados serem digitados no próprio
terminal,
para depois serem impressos. Para
interromper, deve-se utilizar Control + d 1 . Vejamos o exemplo a seguir:
$cat
Testando texto
Neste capı́tulo trataremos de um assunto que é muito importante quando se quer Testando texto
entender como linhas de comandos funcionam, que é a entrada e saı́da de dados. Denovo
Basicamente, estas duas palavras são o essencial para o entendimento de como Denovo
funciona o terminal. Normalmente uma entrada é fornecida, e um resultado é ˆD
gerado. A partir do momento em que o usuário conseguir entender essa lógica Como o cat não recebeu nenhum parâmetro ele leu os dados da entrada padrão
básica, a utilização de comandos se tornará mais simples e sem mistérios. e então os enviou para a saı́da padrão, por isso todo texto digitado é duplicado.
Além disso, aqui também será explicado a fundo como o interpretador de co-
mandos shell trabalha, a importância de suas variáveis de ambiente e dos seus 4.1.2 Redirecionamento destrutivo e não-destrutivo
arquivos de configuração, além de como saber analisá-los e configurá-los para me-
lhor atender cada usuário. Essa personalização é de grande utilidade, pois gera
Um artifı́cio muito útil é a possibilidade de redirecionar entradas e saı́das utili-
uma boa economia de tempo para o usuário.
zando sı́mbolos.
Outro ponto importante que será abordado diz respeito à administração de
Os sı́mbolos > e >> são usados para modificar a saı́da de um comando, envi-
um sistema operacional. Será mostrado e exemplificado como aplicativos podem
ando os dados para um arquivo, ao invés de utilizar a saı́da padrão. Observe este
ser controlados através do terminal, e até mesmo por simples combinações de
exemplo:
teclas. Além do citado acima, uma facilidade muito grande que o shell nos oferece
é em respeito ao controle dos dados do sistema. Tarefas que envolvem unidades $ls
de armazenamento e controle de dados em disco se mostram práticas quando
Usado deste modo, o resultado é uma lista de arquivos e pastas do diretório
executadas via shell.
atual mostrada no próprio terminal das informações (saı́da padrão). Utilizando
os sı́mbolos, temos:
$ls > arquivos.txt
4.1 Nada se Cria Tudo se Transforma!
Esta linha de comando não imprimirá nada no terminal. Ao invés disso, irá criar
o arquivo arquivos.txt, com as informações de saı́da do comando ls.
4.1.1 Entrada e saı́da de dados
O sı́mbolo > é chamado de redirecionador destrutivo, pois caso seja fornecido
A grande maioria dos comandos utilizados em terminal requer dados passados um arquivo já existente, ele apaga todas as informações do mesmo para inserir as
como parâmetros para sua execução. Estes dados são fornecidos por uma enti- novas.
dade chamada de entrada, que pode ser o teclado ou um arquivo. Já o sı́mbolo >> é chamado de não-destrutivo. Ele concatena as informações
A execução de um comando utiliza os dados fornecidos pela entrada para gerar no final do arquivo, caso o mesmo já exista.
um resultado, que é mostrado através de uma entidade chamada de saı́da. Esta Quando estamos falando de dados de entrada, o sı́mbolo < pode nos poupar
saı́da pode ser a própria tela do terminal ou um arquivo também. muito tempo. Seu funcionamento é muito simples, ele redireciona os dados con-
A escolha do tipo de entrada e saı́da depende do comando que está sendo tidos em um arquivo para a entrada de um comando. Imagine que o comando é
utilizado. Alguns comandos nos permitem escolher estas informações através dos 1 Quando um programa está lendo dados de um arquivo ele termina a entrada de dados quando lê
parâmetros. Outros já possuem entrada e saı́da definidas, as quais são chamadas um valor especı́fico que representa o final do arquivo. Quando estamos entrando os dados via teclado,
de entrada e saı́da padrão. precisamos pressionar Control + D para simular a leitura deste valor.
33
4.1. NADA SE CRIA TUDO SE TRANSFORMA! 35 36 CAPÍTULO 4. MEXENDO UM POUCO MAIS
executado e a cada vez que a entrada padrão é solicitada, a leitura é feita direta- o seguinte exemplo: imagine que queremos guardar em um arquivo o nome de
mente no arquivo. Veja o exemplo a seguir. todos os arquivos e pastas do diretório corrente, mas em ordem alfabética. Uma
tarefa simples, realizada com os seguintes comandos:
O comando sort recebe dados de entrada e os ordena, enviando para a saı́da
padrão: $ls > dados.txt
$sort dados.txt > ordenados.txt
$sort
O resultado é o terminal esperando dados serem digitados, e só então a ordenação A tarefa foi executada, porém tivemos que utilizar dois comandos e ainda um
é realizada. arquivo temporário.
$sort < arquivo.txt Utilizando pipe a mesma tarefa é executada pela seguinte linha de comando:
Neste caso o resultado será imediato. Os dados contidos no arquivo serão orde- $ls | sort >> ordenados.txt
nados e impressos na saı́da padrão. Agora observe o seguinte exemplo:
$sort < arquivo1.txt > arquivo2.txt Observe que neste caso não há arquivo temporário, apenas o destino final. O
funcionamento deste sı́mbolo é simples, vamos passo a passo na linha de comando
Este comando não irá imprimir nada, apenas ordenar os dados do arquivo1 anterior:
e jogá-los no arquivo2. Observe que é possı́vel combinar os sı́mbolos para obter
O comando ls por padrão imprime os dados no terminal, porém a presença
resultados diferentes.
do pipe faz com que esses dados sejam redirecionados para a entrada do próximo
Analisando a sintaxe do comando sort, observamos que ele aceita como parâmetro comando. O sort é executado sem a utilização de um parâmetro, pelo fato de
um arquivo de entrada, então é possivel utilizar o comando: que os dados já foram enviados do comando anterior. Nesta etapa, os dados são
ordenados e redirecionados para o arquivo final.
$sort arquivo.txt
Vale ressaltar que vários pipes podem ser utilizados, tornando possı́vel a realização
O resultado será o mesmo de $sort < arquivo.txt. de tarefas complexas com apenas uma linha de comando.
Quando estamos trabalhando com programas em C ou outras linguagens, po-
demos utilizar o redirecionador de entrada para fazermos testes ao alterarmos
partes do código. Observe a seguinte situação:
Imagine que você fez um programa que recebe como entrada 100 números e 4.1.4 Saı́da de erros
imprima a média aritmética deles. Você o compilou e precisa testar seu funcio-
namento. Você o executa e deve digitar os 100 números, um a um. Imagine que Além da entrada e saı́da padrão, existe uma entidade chamada saı́da de erros, que
ocorra um erro no 98o número. O próximo passo é achar o erro e testar novamente. serve para a impressão de erros. A saı́da de erros padrão é a tela do terminal.
O problema é que em cada teste, cem números devem ser digitados. Cansativo!
Alguns comandos podem emitir mensagens de erro, caso não funcionem como
É muito mais prático criar um arquivo com os cem números, e simplesmente esperado e não retornem o resultado desejado. Por exemplo o comando ls:
redirecioná-lo como entrada de dados:
$ls Teste
$./calcula_media < dados.txt
E neste caso utilizar um redirecionamento da entrada padrão é muito interes- Esta linha de comando faz com que seja impresso todos os arquivos e pastas
sante por tornar a construção do programa em C ou qualquer linguagem muito contidos na pasta Teste. Mas, e se a pasta Teste não existisse?
mais simples. Criar um programa que lê os dados da entrada padrão é muito Neste caso, seria impresso na saı́da de erros a seguinte mensagem:
fácil, enquanto criar um programa que lê os dados de um arquivo exige o uso de
diversas rotinas de manipulação de arquivos. $ls: Teste: No such file or directory
SINTAXE
xargs [opcões] comando [entradaDoComando]
DESCRIÇÃO
O comando xargs é usado para construir e executar linhas de comando a
Comando 4.3 less Visualizar arquivos. partir da entrada padrão. Os dados da entrada padrão servirão de argu-
mento para o comando utilizado com o xargs.
NOME
Por exemplo:
less $xargs rm
Esta linha irá executar o comando rm para cada dado digitado na entrada
SINTAXE
padrão.
less [opcões] [entrada]
Utilizando pipe para redirecionarmos a saı́da, poderı́amos construir o se-
guinte comando:
DESCRIÇÃO
$ls | xargs rm
O comando realiza a tarefa básica do comando more porém com algumas Deste modo, cada arquivo ou pasta encontrada pelo ls seria utilizada como
funcionalidades a mais. Possui a capacidade de exibir o arquivo com opção argumento para o comando rm.
de rolagem para trás e para frente. Como não necessita ler todo o arquivo de
entrada antes de exibı́-lo, consegue maior desempenho comparado a outros NOTAS
Apesar de poderoso, é preciso entender o comando para saber quando usá-
visualizadores e editores quando manipulam arquivos grandes.
lo.
OPÇÕES Por exemplo:
-N Enumera todas as linhas $ls | cat
O comando cat imprime dados da entrada padrão, neste caso com o uso do
-s Suprime linhas em branco repetidas. pipe, o cat irá imprimir os dados da saı́da do comando ls, que é o nome de
EM EXECUÇÃO todos os arquivos e pastas do diretório corrente. Então basicamente este
comando é o mesmo que utilizar
$ls
ESPACE
próxima página Mas se utilizarmos o xargs:
$ls | xargs cat
ENTER A interpretação será outra. Neste caso o comando cat irá imprimir o
próxima linha conteúdo de cada arquivo encontrado pelo ls.
b
topo
Comando 4.5 tee Envia conteúdo para saı́da padrão e arquivo simultaneamente.
v editor de texto vi
NOME
sair tee
q
lista todos os comandos SINTAXE
h
tee [opcões] [arquivo]
DESCRIÇÃO
O comando canaliza a entrada padrão para o arquivo fornecido como argu-
mento e também para a saı́da padrão. É normalmente utilizado com pipes
para redirecionamento.
Por exemplo:
$ls | tee arquivos.txt
Neste caso os nomes dos arquivos e pastas encontrados pelo ls são impres-
sos na tela e salvos no arquivo “arquivos.txt”.
4.2. MINHA PASTA PESSOAL 41 42 CAPÍTULO 4. MEXENDO UM POUCO MAIS
4.2 Minha Pasta Pessoal Um shell não interativo é aquele invocado para que um shell script seja execu-
tado, por exemplo. É fechado assim que a execução termina.
4.2.1 Shell Um shell com login é aquele que pede ‘usuario’ e ‘senha’ para que possa ser
executado, ou que aquele que possui a opção ‘-login’.
O Shell é um interpretador de comandos que possibilita a interação entre o usuário
e o sistema, pois repassa ao kernel os comandos escritos pelo usuário ou coman- Terminal ou console, é onde é mostrado o shell. Quando está em modo texto
dos presentes em um arquivo executável. pode ser chamado também de Terminal Virtual.
No Linux, é possivel alternar
As três camadas dum sistema baseado no kernel Linux são: entre os terminais virtuais usando Alt + Fn , onde n é o número do terminal
escolhido. Existem alguns programas que emulam o console no modo gráfico,
como por exemplo o Xterm e o Eterm.
O Shell padrão do GNU/Linux é o Bash, mas existem muitos tipos diferentes 4.2.3 Shell Script
de Shell:
sh “Bourne shell” , escrito por Stephen Bourne. Ainda presente em muitos siste- Daqui até o fim dessa seção, consideraremos que o shel utilizado seja o bash.
mas.
Um Shell Script é um arquivo que contém uma sequência de comandos e
csh “C shell”, escrito por Bill Joy. Possui sintaxe muito parecida com a linguagem estruturas lógicas (if, for, while) - comumente encontradas em linguagens de
de programação C. programação. Serve para formarmos conjuntos de comandos que serão execu-
tados em sequência. Podemos, por exemplo, fazer um Shell Script para que um
ksh “Korn shell” , escrito por David Korn. Evolução do sh com comandos avançados. diretório seja criado , e dentro dele 2 arquivos texto. Esse arquivo poderá conter
os comandos cd, mkdir, touch, chmod, dentre outros, e substituirá várias linhas
bash “Bourne Again shell”, escrito por . É uma extensão do sh. É o Shell padrão
de comando que, uma a uma, deveriam ser digitadas pelo usuário. Esse é um
do sistem operacional GNU/Linux.
exemplo muito simples, pois o poder do Shell Script aumenta muito quando in-
serimos estruturas lógicas. Para que o shell reconheça o arquivo como um Shell
Antes de repassar a linha de comando para o kernel, o Shell executa alguns Script, é necessário que na primeira linha do arquivo haja um shbang ‘#!’ seguido
passos: substitui os caracteres especiais, alias e variáveis por seus possı́veis va- do diretório onde se encontra o shell padrão. Geralmente criamos arquivos de
lores; Verifica se o programa/função existe e depois quais são as permissões dos Shell Script com extensão ‘.sh’.
arquivos envolvidos; Chama o kernel para executar a linha de comando em um
“shell-filho” ganhando um PID(número de processo); Permanece inativo até que o Acompanhe um exemplo simples de Shell Script com comandos usuais do
comando seja executado, a não ser que a execução seja feita em background(Ver bash:
subseção 4.3.4). #!/bin/bash
Se o shell não conseguir executar a linha de comando por não ter encontrado # Função: Informa diretório corrente, lista arquivos e
a função ou programa, devolverá uma mensagem de erro. # imprime mensagem
pwd
ls -l
echo "fim do script."
4.2.2 Algumas definições importantes
As linhas iniciadas por ’#’ são comentários, ou seja, não serão executadas. Acom-
Um shell interativo é aquele pelo qual o usuário pode inserir uma linha de co- panhe um exemplo mais elaborado de Shell Script, usando comandos do bash e
mando por vez, como o terminal X por exemplo. estruturas lógicas de programação.
4.2. MINHA PASTA PESSOAL 43 44 CAPÍTULO 4. MEXENDO UM POUCO MAIS
#!/bin/bash padrão de cada usuário. Existem muitas opções para configuração do ambiente de
# Autor: Vinicius Freire Função: soma 2 + 2 até chegar
cada usuário. Fazemos tudo isso modificando e criando aliases, variáveis e outros
# em 30
echo ’Deseja realizar uma operação de loop finita?[s / n]’
comandos nos arquivos de configuração correspondentes, que serão executados
read resposta assim que o shell for invocado.
if [ \$resposta = s ] then Outro arquivo importante é o $HOME/.bash history, que guarda os últimos
soma=0 comandos digitados pelo usuário. O número de comandos guardados é definido
while ["\$soma" -le 30]
pela variável $HISTSIZE.
do
echo "\$soma"
soma=‘expr \$soma + 2‘
done 4.2.5 Variáveis de ambiente
echo "Que pena! Fim do script."
fi Em um computador, variáveis sao espaços da memória que guardam alguma
informação. Existem muitas variáveis já definidas pelo sistema, como por exemplo
O arquivo do Shell Script pode ser executado diretamente com o comando
$HOST e $OSTYPE, que guardam o nome do computador e o tipo de sistema opera-
‘source’, ou pode ser colocado em um arquivo de configuração, que é executado
cional usado, respectivamente. Para o shell existem algumas variáveis especiais,
após o login.
como as citadas acima, chamadas variáveis de ambiente, porque armazenam ca-
racterı́sticas do ambiente do usuário. Essas variáveis existem para que quando
4.2.4 Arquivos importantes de configuração o usuário logar no sistema, sempre encontre determinadas caracterı́sticas, como
por exemplo um determinado tipo de shell. Algumas dessas variáveis de ambiente
guardam caracterı́sticas definidas para todos os usuários. Elas se encontram
Existem muitos arquivos importantes de configuração usados quando o shell é
no arquivo /etc/profile. Outras guardam caracterı́sticas definidas para cada
inicializado.
usuário do sistema, e podem estar nos arquivos .bash profile ou .bashrc, pre-
Quando um shell interativo com login ou um shell não interativo com a opção sentes na home de cada usuário. As variáveis de ambiente ja definidas sao escritas
-login é invocado, para o usuário root por exemplo, o primeiro arquivo executado é com letra maiúscula e ao serem referenciadas, sao escritas com um $ na frente.
/etc/profile, que guarda informações de configurações para todos os usuários
do sistema. Depois de executar os comandos desse arquivo, o shell busca um dos Algumas variáveis de ambiente do Linux:
seguintes arquivos, nesta ordem: $HOME/.bash profile, $HOME/.bash login e
$HOME/.profile, que guardam informações caracterı́sticas do usuario que está $ARCH descrição da arquitetura da máquina;
logando. O primeiro que for encontrado e puder ser lido, será executado. Quando
um shell com login é fechado, o shell procura pelo arquivo $HOME/.bash logout $TERM tipo de terminal usado;
e o executa, se ele existir.
$HOST nome do computador;
Quando o shell é invocado como sendo interativo sem login, um terminal X por
exemplo, o shell procura pelo arquivo home/.bashrc, que guarda caracterı́sticas $LANG código da lı́ngua padrão;
padrão para qualquer shell sem login.
$PRINTER nome da impressora padrão;
Quando o shell é invocado como sendo não interativo, para executar um script
por exemplo, procura pela variável $SHELL ENV, que guarda o caminho do ar- $SHELL caminho do shell padrão;
quivo que deve ser executado para esse tipo de shell, se ela existir.
$PATH lista de diretórios percorridos para executar comandos;
Os arquivos $HOME/.bash profile, $HOME/.bash login, $HOME/.profile guar-
dam caracterı́sticas do usuário atualmente logado - comandos que devem ser exe- $OSTYPE nome do sistema operacional usado;
cutados ao iniciar um novo shell, alias e variáveis definidas - por isso estão no
diretório home de cada usuário. $HOME caminho do diretório do usuário atual;
Por que isso é importante? Porque podemos configurar coisas interessantes $USER usuário atual;
para cada usuário do sistema, que serão executados assim que o shell for invo-
cado, ou no caso dos shells com login, fechado. Por exemplo, posso fazer com que $HISTSIZE número de comandos guardados no histórico;
todos os arquivos temporários sejam apagados quando eu me deslogar do sistema
colocando alguns comandos no arquivo $HOME/.bash logout, e toda vez que me $PS1 configuração do prompt do usuário atual.
deslogar, isso será executado. Posso determinar que para qualquer shell sem lo-
gin (terminais X abertos por exemplo), a cor das letras da linha de comando será Podemos criar uma nova variável com qualquer valor que nos possa ser útil,
verde, e que para o usuário root, será azul. Posso determinar que determina- como por exemplo o caminho de um diretório, um valor numérico ou um texto.
dos usuários usam o shell bash, e outros usam o shell csh, que alguns usam o $CAMINHO=˜/Arquivos/Nomes
vi como editor de texto padrão, outros usam o gedit. Posso determinar o email $cd $CAMINHO
4.2. MINHA PASTA PESSOAL 45 46 CAPÍTULO 4. MEXENDO UM POUCO MAIS
Lembrando que não há espaço antes ou depois do ‘=’ e que é uma boa prática
escrever o nome da variável com letras maiúsculas. Essas novas variáveis es-
tarão disponı́veis enquanto o usuário estiver logado e usando o mesmo terminal,
a nao ser que sejam criadas no arquivo $HOME/.bash profile , $HOME/.bashrc
ou etc/profile. Comando 4.6 source Executa um script
NOME
source
4.2.6 Alias
SINTAXE
Muitas vezes é necessário escrever uma linha de comando muito grande várias source arquivo
vezes. Para facilitar essa tarefa, podemos dar um “apelido” para essa linha, ou . arquivo
seja, podemos criar uma maneira mais simples de chamar uma linha de co-
mando útil. O comando ls é um exemplo de alias que vem como padrão do DESCRIÇÃO
sistema. É interessante para o usuário perceber a lista gerada pelo ls divi- Executa o conteúdo de arquivo como comandos do BASH. Ponto “.” é um
dida por cores conforme o tipo de arquivo, então ao digitar ls no terminal, na sinonimo para source.
verdade o comando executado é ls -color. Esse é um tipo de alias perma-
nente. Para tornar um alias permanente basta criá-lo diretamente no arquivo
$HOME/.bash profile , $HOME/.bashrc ou etc/profile, ou ainda criar um
arquivo chamado $HOME/.bash aliases apenas para guardar os aliases. Caso
contrário, o alias será perdido ao se fechar o terminal.
Exercı́cio Resolvido 4.3 Crie um pequeno Shell Script que crie um novo diretorio.
#!/bin/bash
# Script cria diretorio.sh - cria diretório para guardar Comando 4.7 history Mostra histórico de comandos.
documentos.
NOME
cd ˜
NOME="$USER-Documentos" history
mkdir $NOME
cd $NOME SINTAXE
echo "Olá, nesse diretório você pode guardar todos os seus history [opções]
textos."
DESCRIÇÃO
Mostra histórico de comandos.
Para criar um Script em Shell, apenas devemos prestar atenção em alguns de-
talhes, como o shbang no inicio do script seguido do diretório do Shell padrão e a OPÇÕES
maneira como podemos fazer comentários. Também é bom lembrar que, embora o
Linux não reconheca o arquivo pela extensão que está em seu nome, é bom criarmos -c Apaga o histórico.
o arquivo do script com a extensão .sh, e que para executá-lo basta usar o comando
source. Segue um exeplo de um Shell Script que utiliza apenas comandos simples -d n Deleta a linha de numero “n” do histórico.
do Bash. NOTAS
Pressionar flecha para cima recupera o ultimo comando usado.
Exercı́cio Resolvido 4.4 Qual a diferença entre as duas linhas de comando abaixo?
EXEMPLOS
$ ./Script cria diretorio.sh Para recuperar alguns comandos do histórico:
$ .Script cria diretorio.sh
$!30 Se refere ao comando da linha do histórico de número 30;
A primeira linha executa o script, a segunda apenas é o nome de um arquivo oculto.
$!! Se refere ao comando anterior;
$!echo
Se refere ao comando mais recente que começa com “echo”.
4.2. MINHA PASTA PESSOAL 47 48 CAPÍTULO 4. MEXENDO UM POUCO MAIS
Comando 4.8 echo Mostra uma mensagem Comando 4.11 export Determina uma variável de ambiente.
NOME NOME
echo export
SINTAXE SINTAXE
echo string export [opções] [nome[=valor]]
DESCRIÇÃO DESCRIÇÃO
Imprime string na tela. Se nenhum valor for passado ao comando, ’export’ irá imprimir todas vari-
aveis exportadas.
NOTAS
Um ponto interessante do echo se refere ao exit status de um comando,
um valor que todo comando recebe após ser executado, onde 0 significa
Tudo ok e um número diferente de 0 Você tem alguns problemas . Podemos
recuperar esse valor com a variável $?. Dessa forma, será mostrado o exit Comando 4.12 alias Cria um alias
status do último comando usado. NOME
EXEMPLOS alias
Recuperando o valor de uma variável:
$echo $VARIAVEL SINTAXE
alias [opções] nome=valor
DESCRIÇÃO
O comando valor poderá ser executado atravéz de nome Se nenhum valor for
Comando 4.9 env Variáveis ambiente passado ao comando, ’alias’ irá imprimir todos os alias definidos. O nome
NOME do alias não pode ser “alias” ou “unalias”. O nome do alias e o seu conteúdo
env podem conter metacaracteres, com excessão do “=”. Para tornar um alias
permanente, você pode criá-lo em um dos arquivos de configuração existen-
DESCRIÇÃO tes em sua home, ou criar um arquivo chamado home/.bash aliases para
Altera as variáveis de ambiente para que certo comando seja rodado nas guardar todos os seus aliases.
variáveis alteradas, depois o processo pode ser desfeito. EXEMPLOS
Um alias para intalação:
SINTAXE
env [opções] Variável=Valor Comando $ alias instalar=‘‘sudo apt-get install’’
-a Mostra variaveis que foram criadas ou modificadas pelo export. -a Remove todos os alias.
4.3. GERÊNCIA DE PROCESSOS 49 50 CAPÍTULO 4. MEXENDO UM POUCO MAIS
4.3 Gerência de Processos tornando possı́vel a execução de outras tarefas na sessão atual do terminal. Para
isso, usamos alguns atalhos de teclado:
Um processo nada mais é do que um programa˜(comando) em execução. É fácil
perceber que no Linux é possı́vel que vários processos sejam executados ao mesmo Ctrl + Z
tempo. Os processos possuem alguns atributos, usados pelo SO em sua tarefa Suspende o processo em execução atualmente (muda estado para “Pa-
de gerenciá-los. São estes alguns dos principais: identificador único (Process rado”);
IDentifier=PID), proprietário (User IDentifier=UID) e estado.
Ctrl + C
Termina a execução do processo.
4.3.1 PID e PPID
Quando se suspende a execução de um processo, é possı́vel voltar a executá-
O identificador único de cada processo é um número. Às vezes é preciso duplicar lo usando o comando (comando 4.19, p. 52). Com isso voltamos à situação
um processo. Ao se fazer uma cópia, o processo copiado é chamado de processo inicial. Uma outra alternativa, é deixar a aplicação rodando em segundo plano, ou
pai e o novo de processo filho. O filho possui um identificador dizendo qual é o background. Fazemos isso usando o comando (comando 4.18, p. 51). A situação
seu pai: PPID (Parent Process IDentifier). Caso o processo pai seja interrompido, o é como a ilustrada abaixo:
mesmo acontece com todos os seus filhos. (Isso explica porque todos os programas $ browser
abertos em uma sessão do terminal são encerrados quando ele é fechado.)
Aqui o browser é chamado e a janela dele é aberta.
ˆZ
4.3.2 Estados
Em seguida suspendemos sua execução (Ctrl+Z), e a seguinte mensagem aparece:
Os estados em que um processo pode se encontrar são: [1]+ Stopped browser
Em execução [1] é o número de job do processo (Jobs não serão abordados nesta apostila. Para
Está sendo executado em primeiro ou segundo plano; mais informações veja man jobs) que é usado para identificar qual comando colo-
car em background ou foreground. Stopped é o novo status do processo (Parado).
Zumbi Deveria estar morto, porém continua existindo por algum motivo; E browser é o nome da aplicação.
Parado $ bg
Teve sua execução interrompida mas pode ser reativado.
Agora o colocamos para executar em background. Por padrão o comando bg se
aplica ao último processo suspenso. E a seguinte mensagem é exibida:
4.3.3 Sinais $ [1]+ browser &
$
Para interferir na execução dos processos ou comunicação entre estes, são envi-
ados sinais. Após receber um, o processo realiza a tarefa a ele determinada, de Novamente temos o número de job e o nome, mas agora com uma novidade, o &,
acordo com o sinal. Alguns exemplos: que será explicado em seguida.
Finalmente, você pode continuar navegando no browser e executando coman-
STOP Interrompe a execução de um processo para posterior reativação; dos no terminal.
CONT Reativa um processo interrompido por STOP; Outra maneira, mais direta, de se rodar o programa em segundo plano é acres-
centar o sı́mbolo & ao final do comando. A execução procede da seguinte maneira:
TERM Termina o processo, porém alguns são programados para ignorar este si- $ browser &
nal; [3] 5940
$
KILL “Mata” o processo. Não pode ser ignorado.
Nesse exemplo, 5940 é o PID do processo.
DESCRIÇÃO
Exibe, em tempo real, informações sobre seu sistema Linux, processos em
andamento e recursos do sistema, incluı́dos CPU, memória RAM e uso do
swap, além do número total de tarefas sendo executadas.
Por padrão, sobre cada processo são exibidos vários campos. Alguns deles:
Comando 4.14 ps Retorna os processos correntes.
PID O identificador;
SINTAXE
ps [opções] USER O proprietário;
Comando 4.16 kill Manda um sinal para um processo a partir de seu PID.
SINTAXE
kill [-sinal] PID ...
kill -l [-sinal] ...
DESCRIÇÃO
Por padrão o comando envia um sinal TERM (se nenhuma opção de sinal
for escolhida). O kill aceita 3 formas de se especificar os sinais; o kill por
exemplo pode ser: -KILL, -SIGKILL e -9. Para saber a numeração de cada Comando 4.19 fg Roda tarefas em foreground.
sinal, veja man kill.
SINTAXE
fg [job id], ...]
-l - Por padrão, exibe uma lista de sinais disponı́veis. Se especificar um
número, converte-o para o nome do sinal e vice-versa.
DESCRIÇÃO
EXEMPLOS Por padrão move o processo com maior número de job para foreground.
kill -9 -1 Mata todos os processos que você pode matar.
VEJA TAMBÉM
(comando 4.17, p. 51)
Comando 4.17 pkill Envia um sinal para processos a partir de nome e outros
atributos.
SINTAXE
pkill [-sinal] [-opção atributo, ...] [expressão]
DESCRIÇÃO
Por padrão envia o sinal TERM para cada processo e o campo expressão
procura por nome do processo. Para selecionar processo por outro atri-
buto além do nome, usa-se uma opção e um filtro desejado (por exemplo:
processos do usuário pet).
-u UID, ... Comando 4.20 nohup Executa o comando de forma imune ao sinal HUP.
Filtra por processos cujo UID real corresponde ao fornecido. Aceita tanto
UID como nome. SINTAXE
nohup comando [argumentos], ...
-t terminal, ...
Filtra por processos controlados pelo terminal fornecido. DESCRIÇÃO
Evitando sinais HUP, o processo continua rodando mesmo após o usuário
VEJA TAMBÉM ter se desconectado do sistema.
(comando 4.16, p. 51), pgrep, (comando 4.14, p. 49).
VEJA TAMBÉM
man nohup.
DESCRIÇÃO
Por padrão move o processo com maior número de job para background.
4.4. SISTEMAS DE ARQUIVOS 55 56 CAPÍTULO 4. MEXENDO UM POUCO MAIS
4.5 Exercı́cios
Comando 4.24 mount Monta um sistema de arquivos.
Para resolver esses desafios, utilize as man pages, juntamente com as informaçoes
SINTAXE da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
mount [opções] dispositivo diretório panha a apostila.
DESCRIÇÃO
Exercı́cio 4.6 Crie um novo arquivo com as mesmas informações do arquivo
Monta um dispositivo no diretório especificado. Por padrão, sem nenhuma
opção, mostra todos os dispositivos montados atualmente. pasta\_exercicios/Poesias/PoemaLeminski.txt
OPCOES porém que contenha o número de cada linha no inı́cio da linha, apenas pelo terminal.
-a Monta todos os dispositivos encontrados no arquivo /etc/fstab .
Exercı́cio 4.7 Observando a seguinte linha de comando no diretorio
-r Monta o dispositivo em modo somente leitura. $ ls pasta\_exercicios/Diversos/novo_diretorio.tx
novo_diretorio.txt
-t Usado para especificar qual o tipo de sistema de arquivos a ser mon- $ cat novo\_diretorio.txt | xargs mkdir
tado. Os tipos suportados atualmente são:adfs, affs, autofs, cifs,
coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, De que maneira é possivel modificar essa linha de modo que seja pedido ao usuário
hfs, hfsplus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, a confirmação para se criar o diretório /pasta exercicios/Diversos/Textos?
proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, ums-
dos, usbfs, vfat (fat32), xenix, xfs, xiafs. Exercı́cio 4.8 Usando apenas o comando less, execute os seguintes passos: abra
o arquivo pasta exercicios/Empresa/produtos.txt com o comando less e bus-
EXEMPLO DE USO
mount /dev/fd0 /mnt/floppy Torna acessı́vel o sistema de arquivos en- que as palavras da lista abaixo. A cada palavra, encontre um jeito de marcar essa
contrado no dispositivo /dev/fd0 (normalmente o disquete) no diretório posição, referenciando-a com a letra maiúscula correspondente. Se necessário, volte
/mnt/floppy. ao inı́cio do arquivo para encontrar todas as palavras. Depois disso, vá para o final
do arquivo e encontre uma maneira de voltar em todas as marcações que você fez,
VEJA TAMBÉM
sem fazer referência à palavra que havia sido buscada para essa marcação, mas
(comando 4.25, p. 55). sim referenciando a letra correspondente. Verifique se você está mesmo no lugar
certo do arquivo (a posição em que aparece a palavra correspondente), fazendo uma
nova busca pela palavra referenciada por aquela letra.
DESCRIÇÃO Exercı́cio 4.10 Configure seu prompt de modo que ele contenha a sequência de
Desmonta um sistema de arquivos, especificando o diretório onde foi mon- caracteres “=D” na cor roxa, seguido do nome do usuário na cor branca e por último,
tado ou o dispositivo. O umount não executa se o sistema de arquivos o caracter “¿”. Faça com que essa configuração seja permanente.
estiver ocupado (executando alguma operação).
Exercı́cio 4.11 Recuperando a variável $?, só conseguimos recuperar o valor de
-a Desmonta todos os sistemas de arquivos descritos em /etc/mtab . exit status do último comando executado, portanto embora uma das linhas de co-
mando abaixo esteja errada, o valor da variavel $? é 0, pois o comando tee é
-t Indica que as ações devem apenas ser tomandas em sistemas do tipo espe- executado corretamente nas duas linhas . Como é possı́vel recuperar o valor de exit
cificado. Mais de um tipo pode ser usado, fazendo-se uma lista separada status dos outros comandos dessas linhas?
por vı́rgulas. \$ whoami | xargs finger | tee info.txt
\$ echo \$?
-f Força o sistema a ser desmontado. 0
\$ whoami | xrg finger | tee info.txt
VEJA TAMBÉM \$ echo \$?
(comando 4.24, p. 55). 0
contém informações sobre o comando que você acabou de executar. O que significa
o valor da coluna STAT dessa linha?
SINTAXE
find [Endereco] Argurmento
Capı́tulo 5
DESCRIÇÃO
O comando find procura por itens no sistema. O endereço é por onde ele irá
começar a busca e o argumento define qual informação do item, ele irá usar
-perm Permissao
5.1 Busca de Arquivos Procura pela permissao do arquivo;
-type Tipo
Conforme usamos um sistema operacional é muito comum acumularmos diversos
Procura por arquivos comum;
arquivos pessoais. Mesmo mantendo uma boa organização, se ficarmos muito
tempo sem acessar um determinado arquivo ou tivermos milhares de diretórios e -atime Tempo
arquivos em nossa pasta pessoal, é bastante provável que tenhamos problemas Procura pelo tempo access do arquivo;
ao procura-los.
-ctime Tempo
Para auxiliar o usuário neste tipo de busca, o Linux nos oferece uma ótima fer-
Procura pelo tempo change do arquivo;
ramenta: o comando find, que permite que façamos buscas por inúmeras carac-
terı́sticas como nome, tipo de arquivo, permissões, datas de criação, modificação -mtime Tempo
ou último acesso ao arquivo. Procura pelo tempo modify do arquivo;
Com o uso correto do find a tarefa de encontrar um arquivo qualquer no sis- LEGENDA
tema fica fácil, porém certos cuidados devem ser tomados. Como o find realiza Expr. Qualquer expressão aceita pelo console, veja mais na sessão .....;
buscas recursivas, percorrer uma árvore de diretórios muito extensa pode ser de-
morado em demasia. Além disso, ao tentar buscar por diretórios em que não Permissao
posuı́mos permissões ele emite muitas mensagens de erro. Nestes casos é reco- -[gou]=[wrx] ou em octal (-777);
mendado enviar todas as mensagens de erro para um arquivo ou para /dev/null procurar por arquivos, ...
(conforme seção 4.1.4). Vale também ressaltar que na busca por nomes o find onde o usuario tem permissao de leitura: -u=r;
utiliza expressões regulares. onde o usuario e o grupo tem permissao de escrita -ug=w;
onde o outros tem permissao de escrita e leitura -o=rw;
Um outro comando importante, é o whereis, que nos ajuda a localizar em
qual diretório se encontra um executável e onde fica armazenada sua página de
manual. Com o bom uso destes dois comandos, localizar dados torna-se rápido, e Tipo d (diretorio) ou f (arquivo comum) ou l (link simbolico);
eficiente.
Tempo [+-]n * 24horas;
procurar por arquivos, ...
antes de 3 dias atras: -3;
depois de 6 dias atras: +6;
exatamente a 2 dias atras: 2;
EXEMPLOS
Procura um item com nome arquivo.txt e começa a busca no diretorio
/home/usuario
find /home/usuario -iname ”arquivo.txt”
61
Procura um diretorio e começa a busca no diretorio HOME
find -type d
Procura um item com nome ”xorg.*”, lembrando que * pode ser qualquer
coisa, e começa a busca no diretorio /etc
find /etc -iname ”xorg.*”
5.1. BUSCA DE ARQUIVOS 63 64 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
SINTAXE
Comando 5.2 find Busca por arquivos, parte 2.
find Endereco [OPCOES] Argumentos... -exec Comando {}
NOME
find DESCRIÇÃO
O comando find junto com a opção -exec procura itens no sistema e para
SINTAXE cada item encontrado executa o Comando, que receberá o nome do item
find [Endereco] [OPCOES] Argurmento1 [[OP] [Argumento2] [OP] através do .
[Argumento3]...] EXEMPLOS
DESCRIÇÃO Procura por arquivos, que tem a extensão txt e para cada item encontrado
O comando find também pode ser utilizados com vários argumentos para executa o comando file ItemEncontrado.
refinar a busca. find -iname *.txt -exec file ;
OPCOES
-mindepth N Comando 5.4 locate Busca arquivos pelo nome.
Define a altura minima da árvore para começar a procurar;
NOME
-maxdepth N locate
Define a altura maxima da árvore para terminar a busca;
SINTAXE
Obs: Normalmente utilizados essas opções para agilizar a busca. locate arquivo
OP
-a Argumento1 e Argumento2; DESCRIÇÃO
O comando locate procura por arquivos assim como o comando find, mas
-o Argumento1 ou Argumento2; difere por ter uma sintaxe mais fácil, porém mais restrita. Ele busca pelo
nome do arquivo através de um banco de dados que contém as localizações
OBS: Caso oculte o campo OP, será utilizado por padrão a opção -a; dos arquivos.
EXEMPLOS
Procura por um item do tipo diretorio e com o nome ”fotos”
find -type d -a -iname ”fotos” Comando 5.5 whereis Busca por arquivos pertencentes ao sistema.
Procura por arquivos, que o grupo tem permissão de leitura ou de escrita NOME
find -perm -g=r -o -perm -g=w whereis
Procura por arquivos, que o grupo tem permissão de leitura ou de escrita e SINTAXE
limita a busca no maximo de 2 subdiretorios whereis [opções] arquivo
find -maxdepth 2 -perm -g=r -o -perm -g=w
DESCRIÇÃO
OBSERVAÇÃO O comando whereis procura por manuais, programas ou codigo-fontes liga-
As vezes é interessante redirecionar a saı́da de arquivos para /dev/null, dos ao sistema operacional. Por exemplo, para obter informações sobre o
pois existem muitas pastas no sistema, que não permite a sua visualização comando ls pode-se usar a seguinte linha:
e, portanto, o resultado estará no meio de vários erros de permissões, o que $ whereis ls
atrapalha a visualização do resultado. OPÇÕES
-b Procura somente por programas;
Uma tarefa muito frequente que realizamos, principalmente quando estamos di-
ante de listas, é localizar certas palavras. Esta tarefa é simples se pensarmos
que nossa lista contém dezenas de itens, como o nome e telefone do pessoal do
trabalho, por exemplo, e mais simples ainda se esta lista estiver ordenada. Os
problemas começam a aparecer conforme aumenta o tamanho do texto em que
buscamos as palavras, e principalmente quando não se tem uma regularidade
apresentada no documento, como colunas que separam informações especı́ficas
ou uma ordenação sobre os dados, tornando assim a tarefa manual inviável. Exis-
tem ferramentas que realizam buscas sobre textos e indicam a localização de suas
ocorrências, isto não é novidade, observamos isso, por exemplo, em diversos edi-
tores de texto e navegadores web.
Mas se ao invés de procurarmos por uma palavra, procurarmos por um con-
junto de palavras com determinadas caracterı́sticas? Podemos procurar apenas
números de telefones, ou então, e-mails que aparecerem em um arquivo de texto,
por exemplo. Vamos chamar estas caracterı́sticas, seja elas quais forem, de
padrão de busca, e para representá-lo utilizaremos as expressões regulares.
. [ ] ˆ $ ? * + { } | ( )
[ ] Os colchetes formam uma lista, que casa com qualquer caractere que es-
tiver contido nela. Uma lista que inicia com um acento circunflexo [ˆ ]
é uma lista negada, ou seja, casa com qualquer caracter que não estiver
contido nela. Dentro de uma lista, caracteres especiais perdem seu signi-
ficado, com exceção do acento circunflexo na primeira posição, que indica
uma lista negada, e do hı́fen -, que entre dois caracteres indica um inter-
valo. Assim [a-dACE] casa com as letras minúsculas a, b, c e d e também
com as maiúsculas A, C e E.
5.2. BUSCA DENTRO DE ARQUIVOS 67 68 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
Podemos ter em expressões regulares conjuntos, formados por uma ou mais uni-
dades e também operadores. Estes operadores, listados abaixo, tratam do nú-
meros de repetições dos elementos que os precedem. Chamaremos itens estes
elementos, que podem ser unidades ou conjuntos, e veremos na sequência como Comando 5.7 grep Busca por padrões de caracteres em cada linha do texto de
representá-los. entrada.
NOME
? A interrogação torna o item que a precede opcional; grep, egrep, fgrep
* O asterisco faz com que o item que o precede ocorra zero ou mais vezes; SINTAXE
grep [opções] padrão [arquivo] ...
+ O mais faz com que o item que o precede ocorra uma ou mais vezes;
DESCRIÇÃO
{n} As chaves fazem com que o item que as precedem ocorra n vezes.
Grep busca pelo padrão de caracteres no arquivo especificado ou na en-
trada padrão se este parâmetro estiver ausente, e imprime as linhas que
Para representarmos uma lista de conjuntos, utilizamos a | (barra vertical) como casam com este padrão.
separador, dentro das expressões contidas entre parênteses. Assim como uma As alternativas grep, egrep e fgrep se diferenciam no modo de
lista entre colchetes, que casa somente um entre os caracteres listados, esta nova interpretação do padrão a ser casado.
lista também só casa com um dos seus conjuntos.
grep trata este padrão como uma expressão regular básica;
(exp) Os parênteses transformam a expressão exp em um conjunto.
egrep trata este padrão como uma expressão regular estendida e é equiva-
(exp|exp|...) lente a grep -E;
A barra vertical entre as expressões forma uma lista de conjuntos, que casa
fgrep trata este padrão como a sequência de caracteres é literalmente,
com qualquer uma das expressões exp.
sem interpretar nenhum caracer como especial, e é equivalente a
grep -F.
Para encerrar a apresentação dos caracteres especiais, apresentaremos duas ân-
OPÇÕES
coras, que só podem ser colocadas no inı́cio ou no fim de uma expressão regular.
-i Ignora a diferença entre caracteres maiúsculos e minúsculos na
ˆ O acento circunflexo é colocado no inı́cio da expressão e casa com o inı́cio busca.
da linha;
-v Inverte a lógica da busca, imprimindo todas as linhas que não con-
$ O cifrão é colocado no fim da expressão e casa com o fim da linha. tenham o padrão de busca.
Um dos grandes atrativos do sistema operacional Linux, é a possibilidade de reali- 5.3.2 Seleção de Colunas
zar diversas operações sobre volumes significativos de dados de forma organizada
e eficiente. O sistema oferece por padrão diversos aplicativos interessantes para
Quando estamos lidando com dados armazenados em arquivos é muito comum
automatizar operações sobre arquivos, que permitem a realização de muitas tare-
organiza-los em colunas, usando espaços ou outros caracteres como : (dois pon-
fas simples como contar o número de bytes, caracteres, palavras e linhas de um
tos) para separá-las. Esse modelo também aparece na saı́da de alguns comandos.
arquivo ou entrada padrão, além de nos ajudar (e muito) em tarefas um pouco
Exemplo dessa formatação é o arquivo de sistema que é responsável pelos grupos:
mais complexas, através da combinação de comandos.
/etc/group.
Com os comandos apresentados nesta seção, é possı́vel filtrar conteúdo de ar-
O comando cut é muito útil para lidar com esse modelo em colunas, pois ele
quivos, eliminando colunas, ordenando resultados, mudando a formatação, subs-
permite que você filtre um arquivo ou saı́da de comando de forma que apenas
tituindo caracteres, entre outras coisas. Essas ferramentas são extremamente
algumas colunas sejam exibidas. Seu uso é bastante simples, basta especificar
poderosas para lidar com grandes massas de dados, facilitando muito tal tarefa.
qual o caractére responsável pela separação das colunas e quais colunas você
quer que sejam mostradas, contando a partir do número 1. Por exemplo, para
filtrar o conteúdo do arquivo /etc/group para que apenas a segunda coluna seja
5.3.1 Manipulação de Linhas mostrada na tela devemos utilizar o seguinte comando:
\$ cut /etc/group -d":" -f2
Uma tarefa muito comum quando estamos lidando com arquivos através do ter-
minal do Linux é a contagem de linhas e para isso temos o comando nl (comando O comando cut é muito simples, não tem mistério. Através da opção -d indi-
5.11, p. 76). Além deste ser um comando útil ao lidarmos com arquivos, ele pode camos qual é o caractere que separa as colunas e através da opção -f indicamos
ser combinado com a saı́da de outros comando. Podemos, por exemplo, combi- quais colunas queremos visualizar. A maior utilidade do comando cut é usá-lo
nar o nl com o comando ls -l (comando 3.10, p. 19) para contar o número de em conjunto com a saı́da de algum outro comando (ver 4.1.3).
arquivos existentes em um diretório.
Apesar do comando nl nos ajudar na realização de diversas tarefas ele é limi-
tado, pois conta apenas o número de linhas e nada mais. Existe um comando 5.3.3 Ordenação
similar porém mais versátil, o comando wc. Através das opções do wc, podemos
contar além do número de linhas o número de palavras, bytes ou caracteres de Ao lidarmos com listas (cadastros de nomes, telefones, entre outros) é, em geral,
um arquivo ou saı́da de comando, e com isso ganhamos diversas novas funciona- muito interessante manter essa lista ordenada. Para ordenar uma lista o comando
lidades. usado é o sort. Este comando permite a ordenação de uma lista de linhas de texto
em ordem alfabética ou ainda, ordenar uma lista numericamente, além de oferecer
Vamos agora veremos as ferramentas para selecionar linhas de um texto. Ve- algumas opções úteis como ordenação invertida e até “ordenação aleatória”.
remos dois comandos que permitem visualizar as n primeiras ou as n últimas
linhas de um arquivo. Por exemplo, para visualizar as 10 primeiras linhas do
arquivo texto.txt poderı́amos utilizar a seguinte linha de comando: 5.3.4 Operações Aritméticas
\$ cat texto.txt | head -n 10
Existe uma aplicação do sistema Linux chamada bc que é uma calculadora de
O comando head mostra as n primeiras linhas do arquivo ou da entrada padrão, precisão utilizada através da linha de comando. Ela é extremamente útil para a
e se especificarmos um número negativo de linhas, ele vai imprimir todas menos escrita de alguns scripts, mas também pode ser utilizada para operações em geral.
as n últimas linhas, agindo como o comando tail ao contrário. O comando tail, Existem duas principais formas de utilização do bc. A primeira é mais simples,
mostra as n últimas linhas ou todas menos as n primeiras linhas se colocarmos basta digitar bc na linha de comando para ter acesso ao prompt do bc e então
um + na frente do número: digitar as operações a serem realizadas.
\$ cat texto.txt | tail -n +5 A segunda forma é mais utilizada em scripts, mas também pode ser usada
na linha de comando. Ela consiste em utilizar o comando echo para gerar a linha
Por exemplo, um arquivo que possua 30 linhas. Para imprimir as suas 10 com as operações desejadas e passar isso para o bc através do pipe. Por exemplo,
primeiras pode-se usar: para executar a operação ”10+2”:
\$ cat texto.txt | head -n 10 \$ echo 10+2 | bc
Ou pode-se pensar em imprimir todas as linhas menos as 20 últimas, o que neste
Além do bc efetuar operações padrões (divisão, multiplicação, soma e subtração),
caso, obteria o mesmo resultado.
é possı́vel realizar diversas operações mais complexas envolvendo variáveis e sentenças
\$ cat texto.txt | head -n -20 lógicas.
5.3. CAIXA DE FERRAMENTAS 71 72 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
O tr só lê da entrada padrão, e só escreve na saı́da padrão. Ele não abre # Endereçamento direto, imprimindo da linha 5 até a primeira linha contendo
arquivos diretamente, é sempre preciso usar o comando cat (comando 4.1, p. 36) # a palavra "abobrinha":
para passar um arquivo para o tr. \$ cat texto.txt | sed ’5,/abobrinha/p’
Além de executar substituições de caracteres, o tr tem algumas outras fun- Se você executou os comandos acima percebeu que as linhas são duplicadas,
cionalidades interessantes, como a possibilidade de deletar caracteres e eliminar isso acontece porque por padrão o sed joga para a saı́da padrão todas as linhas do
repetições. arquivo, o que geralmente causa alguma confusão (e nesse caso gera duplicação
de linhas). Para resolver este problema basta chamar o sed com a opção -n, que
faz com que o sed não imprima nada automaticamente na saı́da padrão. Se adi-
cionássemos este parâmetro nos exemplos acima, apenas as linhas especificadas
para a função p seriam impressas.
Outra caracterı́stica importante do sed é a possibilidade de executar diversas
5.3.6 Manipulação avançada de texto funções ao mesmo tempo, separando-os por ponto-e-vı́rgula:
# Imprimir todas as linhas contendo "abobrinha",
# assim como as linhas de 1 a 10:
SED \$ cat texto.txt | sed ’1,10p;/abobrinha/p’
Agora que já conhecemos a estrutura básica do comando sed vamos ver al-
O sed é o comando de edição de fluxo (Stream EDitor) do Linux, e permite a gumas outras funções importantes, começando com a função s, que realiza a
realização de diversas tarefas de transformação de textos de forma automática. substituição de padrões encontrados. A função s do sed é composto por duas par-
Além disso, sua versatilidade é grande, tanto que existem até jogos escritos através tes que podem ser divididas por qualquer caractere, para que seja possı́vel usar
dele. um separador que não aparece no padrão buscado ou no texto de substituição,
por exemplo, se quiséssemos substituir um diretório, o caractere / não seria o
separador mais indicado pois terı́amos que evitar que as barras normais sejam
Usando o sed tratadas como separadores, o que pode nos levar a uma linha complicada. Por
exemplo, para substituir todas as ocorrências de /etc/passwd por /var/lib/:
O sed funciona como um filtro, especifica-se algumas regras de transformação \$ sed ’s/\/etc\/passwd/\/var\/lib\//’
do texto, ele recebe o texto de entrada, aplica as regras e joga o texto resultante
na saı́da padrão. As regras do sed sempre seguem a seguinte sintaxe: Um pouco confuso, não acha? Seria muito melhor neste caso usar um outro
caractere como separador, para nos livrar da necessidade de escapar as barras
sed [opções] regras [arquivo] com contra-barras. Usar um underline, por exemplo, resolveria o problema:
\$ sed ’s_/etc/passwd_/var/lib/_’
E as regras são da seguinte forma:
[endereço 1[, endereço 2]] função [argumento] Remover linhas inteiras do texto é muito simples, bastando usar a função d.
Antes de passarmos para o próximo comando, vale a pena dar uma olhada em
O sed analisa linha a linha, de cima para baixo, da esquerda para a direita. O alguns detalhes importantı́ssimos do sed:
endereço serve para aplicar a função apenas às linhas indicadas, que podem ser
especificadas pelo número da linha ou por parte do seu conteúdo entre / (barras)
O sed diferencia maiúsculas de minúsculas.
(O sed utiliza expressões regulares nessa busca por padrões, o que o torna mais
poderoso ainda). Vamos ver alguns exemplos de endereçamento com a função p,
que imprime linhas: Existem duas maneiras de fazer com que o sed passe a ignorar a diferença
5.3. CAIXA DE FERRAMENTAS 73 74 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
(tornar-se case-insensitive), o primeiro é indicando todas as possibilidades, como Da mesma forma que o sed, é possı́vel escrever os comandos awk em um ar-
no seguinte exemplo: quivo separado, usualmente com extensão .awk, e então chamar o interpretador
awk da seguinte forma:
\$ cat texto.txt | sed ’/[Ee][Rr][Rr][Oo]/d’
$ awk -f=comandos.awk [arquivo de entrada 1] ...
Isso removeria todas as linhas contendo a palavra erro, escrita de qualquer
É possı́vel também utilizar o awk direto da linha de comando, sempre utilizando
forma (Erro, ERRO, eRRo, etc). Uma outra solução, muito mais prática, é usar
a seguinte sintaxe:
a label I, que diz ao sed que ele não deve diferenciar maı́usculas de minúsculas
ao tentar casar o padrão com o que ele encontrar no texto de entrada. A linha do $ awk ’condiçãofunção’ [arquivo de entrada 1] ...
exemplo anterior ficaria assim:
Onde condição pode ser literalmente uma condição (uma comparação), um
\$ cat texto.txt | sed ’/erro/Id’ padrão a ser encontrado nas linhas dos arquivos de entrada ou ainda uma das
condições especiais do awk como BEGIN e END que servem para que uma ou mais
O que é muito mais simples, fácil e elegante. funções sejam executadas no inı́cio ou logo após o término do tratamento dos
arquivos de entrada, respectivamente. Se nenhuma condição for especificada as
funções serão executadas para todas as linhas do arquivo de entrada.
Cuidados ao usar o sed:
Com o awk nós podemos utilizar variáveis, o que permite realizar diversos pro-
cessamentos que não eram tão simples com os comandos vistos até agora. Vamos
Ao usar o sed no terminal, utilizar aspas simples envolvendo o comando é ver um exemplo simples usando as condições BEGIN, END e variáveis, além de
opcional, mas para evitar qualquer conflito com o shell, é recomendado utilizá-las operadores aritméticos.
sempre. Se não usarmos aspas simples, alguns caracteres como $,*,\ e ! serão
tratados como metacaracteres do shell antes mesmo de serem enviados ao sed, o Como seria o comando awk para simular o funcionamento do comando wc -l
que fará com que o comando gere resultados estranhos ou nem seja executado. (comando 5.10, p. 76)?
Se quisermos que algo seja interpretado no meio do comando, como uma Para começar, precisaremos de uma variável para armazenar o número de li-
variável, por exemplo, devemos envolver o comando com aspas duplas: nhas conforme andamos pelo arquivo de entrada. E precisaremos inicializá-la
com o valor 0 no inı́cio da execuçao do nosso comando, para isso precisaremos
\$ cat texto.txt | sed "s/abobrinha/\$CONTEUDO/" começar com a seguinte linha:
A seguir iremos ver uma terceira alternativa para resolver esse tipo de conflito: \$ awk ’BEGIN { numero_de_linhas = 0 } \
Note que a contrabarra ao final da linha serve apenas para escapar a mudança
Os comandos do sed podem ser colocados em arquivo de linha, e isso só é necessário ao utilizarmos o awk diretamente na linha de
comando ou embutido em um shell script. Agora que temos nossa variável criada
e devidamente inicializada, devemos incrementá-la a cada linha encontrada. Para
É possı́vel criar um arquivo executável com os comandos do sed e ao cha- isso, temos o seguinte continuação do comando:
marmos o sed na linha de comando, ao invés de escrever tudo na hora, basta
especificar o arquivo contendo os comandos através da opção -f do sed. > { numero_de_linhas++ }\
Como o sed é um comando complexo, cheio de opções e funções, merece um E, finalmente, ao terminar de passar pelo arquivo de entrada precisamos mostrar
tutorial só para ele, não será possı́vel cobrir nesta apostila tudo que o sed é capaz na tela o total de linhas que encontramos:
de fazer. Porém, se você quiser obter maiores informações sobre este comando, > END{ print numero_de_linhas}’ arquivo_de_entrada
vale a pena dar uma olhada na documentação disponı́vel. Além, é claro, de confe-
rir a referência presente nesta apostila. Além de podermos usar variáveis à vontade no awk ele já nos oferece algumas
especı́ficas que são extremamente úteis, como a NF, que guarda o número do
último campo da linha que está sendo processada, ou ainda a NR que guarda o
AWK número de linhas tratadas até o momento. Utilizando essas variáveis do awk o
exemplo anterior se resume a isto:
Assim como o sed, o awk não é exatamente um comando e está mais para uma \$ awk ’END{ print NR }’ arquivo_de_entrada
linguagem de programação e a forma de processamento é idêntica, ou seja, é
feita linha a linha. Esta linguagem é especialmente útil para extrair dados de Uma aplicação interessante da função print do awk é a possibilidade de impri-
arquivos organizados de forma sistemática em colunas com um separador fixo que mir um certo campo da linha que está sendo processada (similar ao cut) (comando
não aparece no conteúdo do arquivo, um exemplo desse formato são os arquivos 5.8, p. 75). Para fazer isso basta especificar o campo com um $ na frente:
/etc/group e /etc/passwd. Note que as linhas dos dois arquivos são compostas
\$ awk ’{ print \$2 }’ entrada
por conteúdo separado por sinais de igual, e o sinal de igual só aparece como
separador. Esse formato de arquivo é o ideal para se trabalhar com awk. Essa linha de comando imprime todos os segundos campos de todas as linhas do
5.3. CAIXA DE FERRAMENTAS 75 76 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
arquivo entrada. O separador de campos, por padrão é um espaço, mas é possı́vel das informações por quebras de linha (1). Desta forma temos uma informação por
modificar o separador. O awk utiliza uma variável para guardar o separador de linha, facilitando a leitura.
campos, chamada FS. Para mudar o separador de campos basta atribuir um novo
Após isso devemos filtrar os campos, para que apenas os registros dos Analistas
valor a essa variável:
Plenos sejam impressos. O uso de uma expressão regular juntamente com a função
\$ awk ’BEGIN{ FS = ","}’ p do sed em (2) resolve este problema.
Isso faria com que a vı́rgula fosse usada como separador de campos ao invés do Para finalizar, em (3) especificamos a opção -n para o sed pois sem ela ele pas-
espaço. Isso mostra como o awk é mais versátil que o cut e outras ferramentas. saria o arquivo todo para a saı́da padrão, inutilizando nossa busca, e passamos o
O separador de campos pode mudar conforme os arquivos de entrada são ana- arquivo com os dados (tabelaEmpresa.txti) como parâmetro. Este comando pode
lisados, e é possı́vel utilizar uma variável para especificar qual campo se deseja ser escrito em uma única linha.
imprimir.
Com o que vimos até aqui e com o conteúdo extra que pode ser encontrado
na referência deste apostila podemos criar diversos comandos awk para vários
fins, como calcular uma média entre vários valores armazenados em um arquivo,
imprimir somente algumas linhas de um arquivo efetuando qualquer comparação
de texto ou aritmética, entre outros.
Essa apostila vai se limitar ao básico do awk sem entrar em detalhes de progra-
mação avançada com awk, para saber mais sobre o programa existe uma extensa
documentação disponı́vel.
todas as pessoas que tenham o sobrenome Teixeira. Fazer dois novos arquivos cha-
mados Teixeiras aleatorios.txt e Teixeiras ordenados, apenas com o primeiro nome
dessas pessoas. No primeiro arquivo os nomes devem estar arranjados de maneira
aleatória e no segundo em ordem alfabética. Comparar quantos nomes iguais per-
maneceram na mesma linha, sendo o arquivo ordenado ou não.
$ cat aprovadosUFPR.txt | egrep TEIXEIRA | tr -s | \
> cut -d -f2 | sort -R | tee Teixeiras aleatorios.txt | \
> sort | tee Teixeiras ordenados.txt
$ diff -y Teixeiras aleatorios.txt Teixeiras ordenados.txt | \
> grep -v ’[<, >, |]’| wc -l
Com apenas duas linhas de comando, podemos resolver esse problema. Na pri-
meira, pesquisamos pelos nomes e formamos os arquivos pedidos. Na segunda
linha, comparamos os dois arquivos. Como o comando diff, com o parametro -
y, mostra quais linhas mudaram ou permaneceram iguais com os sinais ¡,¿ e —,
usamos uma expressao regular para excluir essas linhas.
Exercı́cio Resolvido 5.2 Você está responsável por entrar em contato com todos de
sua empresa que tenham entre suas funções a de “analista pleno”. Tudo que você
tem em mãos é uma lista muito confusa contendo os nomes, e-mails e atribuições
de cada funcionário (arquivo empresa/tabelaEmpresa.txt.
É possı́vel filtrar e melhorar a formatação das informações desta lista utilizando
apenas o comando sed:
$ sed ’s & \n /g; \ (1)
>/.*analista pleno.*/Ip’ \ (2)
>-n tabelaEmpresa.txt (3)
Para imprimir uma lista contendo apenas o contato dos Analistas Plenos com uma
formatação mais legı́vel, primeiro vamos trocar os & responsáveis pela separação
5.3. CAIXA DE FERRAMENTAS 77 78 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
SINTAXE
Comando 5.8 cut Remove seções de cada linha de arquivos. tr [opcões] Conjunto 1 [Conjunto 2]
NOME DESCRIÇÃO
cut O comando tr realiza substituição ou remoção de caracteres da en-
trada padrão, produzindo seu resultado na saı́da padrão. Para realizar
SINTAXE substituição de caracteres nenhum parâmetro deve ser especı́ficado e os
cut [opcões] [arquivo] ... dois conjuntos de caracteres devem estar presentes.
DESCRIÇÃO OPÇÕES
O comando cut imprime apenas as partes selecionadas das linhas de um -d Deleta os caracteres do Conjunto 1;
arquivo para a saı́da padrão, sendo possı́vel selecionar campos, caracteres
ou bytes. -s Substitui cada sequência de dois ou mais caracteres do Conjunto 1
As LISTAS que servem para selecionar as partes desejadas funcionam da por uma única ocorrência do caractere, removendo repetições.
seguinte forma:
Comando 5.10 wc Conta o número de linhas, bytes, caracteres ou palavras.
N Seleciona apenas a parte N;
NOME
-N Seleciona do começo da linha até N; wc
N-M Seleciona de N até M; SINTAXE
wc [opcões] [arquivo] ...
N- Seleciona de N até o fim da linha.
As listas podem ser combinadas através de vı́rgulas. Por exemplo, o co- DESCRIÇÃO
mando a seguir tem como DELIMITADOR o caractere : (dois pontos) e sele- O comando wc serve para contar o número de linhas, bytes, caracteres ou
ciona as colunas 1, 2, 3, 4, 6, 18, 19 e 20: palavras de um arquivo.
$ cut -d ":" -f 1-4,6,18-20 texto.txt OPÇÕES
OPÇÕES
-w Imprime a contagem de palavras;
-s Não imprime nenhuma linha que não contenha nenhum delimitador
de campo; -l Imprime a contagem de linhas;
-b LISTA -c Imprime a contagem de bytes;
Seleciona apenas estes bytes;
-m Imprime a contagem de caracteres;
-c LISTA
Seleciona apenas estes caracteres; -L Imprime o comprimento da linha mais longa.
-d DELIMITADOR
Utiliza DELIMITADOR ao invés de TAB como separador de campo; Comando 5.11 nl Numera linhas.
NOME
-f LISTA
Seleciona apenas estes campos. Imprime qualquer linha que não nl
contenha nenhum DELIMITADOR a não ser que a opção -s seja es-
SINTAXE
pecificada.
nl [arquivo] ...
DESCRIÇÃO
Mostra o conteúdo do arquivo na saı́da padrão com a numeração das li-
nhas ao lado de cada linha. Se nenhum arquivo for indicado, lê da entrada
padrão.
5.3. CAIXA DE FERRAMENTAS 79 80 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
SINTAXE
head [opções] [arquivo] ...
DESCRIÇÃO
Mostra as 10 primeiras linhas do arquivo na saı́da padrão, a não ser que
alguma opção seja utilizada. Se nenhum arquivo for especificado, lê da
entrada padrão.
OPÇÕES
Comando 5.14 sort Ordena arquivos por linha.
-v Imprime o nome do arquivo antes de qualquer outra saı́da;
NOME
-n [-]NUM sort
Imprime as NUM primeiras linhas do arquivo na saı́da padrão ou,
se o - for utilizado diante de NUM, imprime todas menos as NUM SINTAXE
últimas linhas na saı́da padrão; sort [opções] [arquivo] ...
-c [-]NUM DESCRIÇÃO
Imprime os NUM primeiros bytes do arquivo na saı́da padrão ou, se o
Ordena as linhas de um arquivo numérica ou alfabeticamente e mostra
- for utilizado diante de NUM, imprime todos menos os NUM últimos
o resultado na saı́da padrão. Se nenhum arquivo for especificado, lê da
bytes na saı́da padrão.
entrada padrão.
OPÇÕES
-d Ordena por ordem alfabética considerando apenas caractéres alfa-
Comando 5.13 tail Imprime as últimas linhas de um arquivo. numéricos;
NOME -f Desconsidera diferenças entre maı́usculas e minúsculas;
tail
-n Ordena numericamente;
SINTAXE
tail [opções] [arquivo] ... -h Considera números em formato legı́vel para humanos (ex: 20k, 1G,
etc.);
DESCRIÇÃO
Mostra as 10 últimas linhas do arquivo na saı́da padrão, a não ser que -R “Ordenação” aleatória;
alguma opção seja utilizada. Se nenhum arquivo for especificado, lê da
-r Inverte os resultados da ordenação.
entrada padrão.
OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da;
-n [+]NUM
Imprime as NUM últimas linhas do arquivo na saı́da padrão ou, se o
+ for utilizado diante de NUM, imprime todas menos as NUM primei-
ras linhas na saı́da padrão;
-c [+]NUM
Imprime os NUM últimos bytes do arquivo na saı́da padrão ou, se o +
for utilizado diante de NUM, imprime todos menos os NUM primeiros
bytes na saı́da padrão.
5.3. CAIXA DE FERRAMENTAS 81 82 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
SINTAXE DESCRIÇÃO
bc [-l] expressão
Comando usado para editar fluxos de texto de forma automática e eficiente. Se
DESCRIÇÃO nenhum arquivo for especificado, lê o conteúdo da entrada padrão. As funções
Permite a realização de operações diretamente na linha de comando, mos- do sed têm uma sintaxe especı́fica e não muito intuitiva. Para uma explicação
trando o resultado da expressão na saı́da padrão. detalhada ver a seção Manipulação avançada de texto (ver 5.3.6).
OPÇÕES
OPÇÕES
-n Desabilita a impressão automática na saı́da padrão;
-l Carrega a biblioteca matemática padrão.
-e função
PRINCIPAIS EXPRESSÕES Adiciona a função à lista de comandos a serem executados;
expr1 + expr2
Executa a operação de soma entre expr1 e expr2. Ex: 2 + 2; -f arquivo
Ao invés de escrever os comandos do sed na linha de comando, estes
expr1 - expr2 estarão armazenados no arquivo.
Executa a operação de subtração entre expr1 e expr2. Ex: 10 − 2;
RESUMO DAS PRINCIPAIS FUNÇÕES
expr1 / expr2
143 d Deletar linha(s);
Executa a operação de divisão entre expr1 e expr2. Ex: 5 ;
/padrão/
expr1 * expr2 Endereçar linhas que contenham o padrão (expressões regulares são
Executa a operação de multiplicação entre expr1 e expr2. Ex: 5 ∗ 4; suportadas);
expr1 ˆ expr2
s Busca e substituição de padrão: ’s/padrãoBuscado/novoConteúdo’
Executa a operação de potenciação entre expr1 e expr2. Ex: 25 ;
(percorre cada linha em busca do “padrãoBuscado” e caso encontre
expr1 % expr2 realiza sua substituição por “novoConteúdo”;
Executa a operação de módulo (o resultado é o resto da divisão) entre
expr1 e expr2. Ex: 4%2. p Imprimir linha(s);
q Sair do sed.
5.3. CAIXA DE FERRAMENTAS 83 84 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
-f arquivo Exercı́cio Resolvido 5.4 Como gerar um arquivo que una todos os diretórios abaixo
Ao invés de escrever o [‘texto do programa’] diretamente ao chamar o /pasta exercicios ?
awk, os comandos serão lidos do arquivo; $ cd /home/user $ tar -cf diretorios.tar pasta exercicios
-F valor O comando tar é o responsável pela concatenação, a opção -cf criam um novo tar e
O caractere separador de campos (FS) passa a ser valor; especifica o tar a ser usado. Após as opções indica-se o diretório a ser concatenado.
-v var=valor
A variável do programa var recebe o valor valor.
5.4. COMPACTAÇÃO E AFINS 85 86 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
SINTAXE
tar [opcões] [-f arquivo destinatário(.tar)] [-C diretório]
[arquivo 1] ...
DESCRIÇÃO
O comando tar basicamente empacota e desempacota arquivos. Porém
Comando 5.18 split Divide um arquivo em partes menores.
com algumas opções, este comando serve também para compactar o pacote
NOME gerado. Por exemplo, para criar um arquivo chamado backup.tar que con-
split tenha os arquivos 1.txt e 2.txt da pasta corrente, o arquivo 3.avi que
está na pasta Videos e a pasta Musicas inteira:
SINTAXE $ tar -cf backup.tar 1.txt 2.txt Musicas/ -C Videos/ 3.avi
split [opcões] [arquivo [prefixo]] O uso mais comum deste comando:
$ tar -czvf backup.tar.gz Home/
DESCRIÇÃO E para descompactar:
Este comando permite dividir um arquivo em várias partes. Por padrão, $ tar -xzvf backup.tar.gz
ele dividirá um arquivo a cada 1000 linhas, porém isso pode ser alterado Ou descompactar na pasta raiz:
com suas opções. O prefixo padrão é ‘x’, logo, os arquivos de saı́das são $ tar -xzvf backup.tar.gz -C /
denominados xaa, xab... OPÇÕES
OPÇÕES -f Este é mais que uma opção, é item quase que obrigatório, pois espe-
-b TAM cifica o arquivo tar a ser usado;
Divide o arquivo pelo tamanho desejado em bytes. Por exemplo,
-b512 irá colocar 512 bytes em cada arquivo de saı́da. Pode-se -c Cria um novo arquivo tar;
também usufruir das letras k, m e g para representar kilobytes, me-
-t Exibe o conteúdo de um arquivo tar;
gabytes e gigabytes, respectivamente. Por exemplo, -b500m divide
em partes de 500 megabytes; -x Extrai arquivos de um arquivo tar;
-l TAM
-C Especifica o diretório dos arquivos a serem armazenados;
Divide o arquivo pelo número de linhas. Por exemplo, -l650 irá colo-
car 650 linhas em cada arquivo de saı́da. -z Comprime ou extrai arquivos tar resultante com o gzip;
Exercı́cio Resolvido 5.5 Como acessar remotamente uma máquina, com disponi-
bilidade do acesso gráfico?
$ssh -X user@ip
SINTAXE
gunzip arquivo
DESCRIÇÃO
Serve para descompactar um arquivo .gzip.
$gunzip arquivo.gz
5.5. EXPANDINDO MEU TERRITÓRIO 89 90 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA
NOME SINTAXE
ssh sshfs usuário@hostname:diretório ponto de montagem
SINTAXE DESCRIÇÃO
ssh [-CX] usuário@hostname [comando] O comando sshfs é utilizado para montar pastas remotamente. Estas pastas
ficam sincronizadas, ou seja, qualquer alteração em uma afetará a outra.
DESCRIÇÃO O ponto de montagem deve ser uma pasta vazia que assumirá o papel do
Comando utilizado para acesso remoto utilizando o protocolo SSH. Caso o diretório sincronizado. Por exemplo, pode-se criar uma pasta remote no
comando não seja especificado a conexão será de acesso ao terminal, como seu Desktop para servir para isso. O que resultaria em uma linha de código
se estivesse com um terminal aberto e com o usuário em frente à máquina. assim:
Para encerrar a conexão, pode-se utilizar o comando exit. $ sshfs usuário@hostname:Desktop ˜/Desktop/remote
OPCOES $ sshfs usuário@hostname:/home/usuário/Desktop ˜/Desktop/remote
Para desmontar o diretório montado remotamente pode-se usar o comando
-C gera uma transmissão com dados compactados; fusermount desta maneira:
fusermount -u ponto de montagem
-X gera uma transmissão que suporta a parte gráfica.
Para o exemplo citado acima:
$ fusermount -u remote
5.6 Exercı́cios
Para resolver esses desafios, utilize as man pages, juntamento com as informações
da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
panha a apostila.
Exercı́cio 5.6 Procure na sua home por todos os arquivos que só possuem per-
missão de leitura.
Exercı́cio 5.7 Caso o seu computador desligue enquanto você faz um trabalho que
foi salvo algumas vezes, e não se tem certeza do nome nem de onde estão os ar-
quivos. Como encontrar todos arquivos acessados a menos de 30 minutos e que
tenham extensão .txt?
Exercı́cio 5.8 Para liberar espaco no HD, basta deletar alguns arquivos grandes
que sejam inúteis. O que deve-se fazer para listar todos os arquivos com mais de
100 Mb e que possuem permissão para que o usuário atual os exclua? rabalho.
Exercı́cio 5.9 Existe um arquivo em uma servidor remoto cujo conteúdo lhe inte-
ressa, porém você não sabe em que diretório se encontra este arquivo. Como copiar
o conteúdo desse arquivo para a sua máquina usando o menor número de linhas de
comando possı́veis?
Exercı́cio 5.10 Vários arquivos da sua home precisam ser transferidos para uni-
dades de armazenamento externos, que são em quantidade limitada, e em cada
uma dessas unidades tem pouco espaço disponı́vel. Como transferir estes arquivos
para as unidades? Existe mais de uma forma de executar esta ação? Se sim, qual
a maneira mais eficiente de se resolver este problema?
Exercı́cio 5.11 Você está cursando o segundo perı́odo do curso de Ciência da Computação,
e para se familiarizar com a linguagem de programação C, decidiu escrever um pe-
queno programa para simular o famoso Jogo da Vida (/Programacao/jogoDaVida.c).
Depois de algum tempo escrevendo código e alguns testes, você percebe que não de-
veria ter usado o tipo int em suas declarações de variáveis, e sim unsigned int. Para
não perder tempo procurando por cada ocorrência, escreva uma linha de comando
utilizando o sed que automatize esta tarefa.
Exercı́cio 5.12 Você tem uma lista com nomes, telefones, e-emails e endereços de
colegas /empresa/enderecos.txt. Você quer saber quantos destes contatos uti-
lizam o serviço de e-mail do departamento de informática da UFPR ( @inf.ufpr.br )
e quer saber o nome e telefone destas pessoas. Como você faria isso utilizando o
comando awk?
94 APÊNDICE A. INSTALAÇÃO DO UBUNTU
Apêndice A
Instalação do Ubuntu
A opção ”Instalar o lado a lado” irá pegar o espaço vazio da partição e criará uma
nova partição para o Ubuntu, isso sem apagar os dados, mas levará bastante
A.2 Instalação tempo. Caso o computador for interrompido, pode-se perder os dados do disco
rı́gido. Então recomenda-se, antes, salvar os dados mais importantes e desfrag-
mentar o disco.
Após baixar e fazer o cd ou pendrive bootável, reinicie o computador e configure
a bios para bootar pelo pendrive ou cd. Se não ocorrer nenhum erro, o computa-
dor estará executando o Ubuntu e você poderá usar o sistema como quiser sem
nenhum problema. Então para instalar o Ubuntu haverá no desktop um icone,
que inicializará o processo de instalação. A instalação é fácil, em grande parte só
pedirá algumas informações, mas o particionamento do disco rı́gido é um pouco Caso 2: Apagar e usar o Disco Inteiro
difı́cil e há o risco de se perder os dados do disco.
A.2.1 Particionamento
O disco rı́gido no computador pode ser dividido em várias partes. Cada parte Caso 3: Especificar particionamento manualmente
é chamada de partição, nela deverá ter apenas um sistema operacional e será
tratada como se fosse um outro disco rı́gido. Então para instalar o Ubuntu é
necessario criar uma partição apenas para o Ubuntu, de no mı́nimo 8gb, e no Na opção ”Particionamento manual”, você irá configurar as partições do disco
sistema de arquivos do linux (Ext3, Ext4 ou ReiserFS). como você quiser. Por exemplo:
93
A.2. INSTALAÇÃO 95 96 APÊNDICE A. INSTALAÇÃO DO UBUNTU
Dispositivo
Indica os discos rı́gidos e suas partições, por exemplo, sda1: disco A e
partição 1;
Instalação de Programas
B.1 Apt-Get
NOME SINTAXE
apt-get dpkg [Opcões] Pacote
SINTAXE DESCRIÇÃO
apt-get [opcões] programa O comando dpkg é a base do funcionamente do Apt-Get. Ele é capaz de
instalar e gerenciar os pacotes Deb.
DESCRIÇÃO OPÇÕES
O comando apt-get gerencia os pacotes e programas do computador, pode-
se instalar ou remover programas do sistema. Como a instalação de progra- -i Instala um novo pacote .deb;
mas envolve sempre arquivos do sistema, é necessario ser root ou utilizar
junto o comando sudo. -r Remove um pacote controlado pelo repositorio;
OPÇÕES -l Mostra os pacotes contidos no repositorio;
update
Atualiza a lista de pacotes e programas; -s Mostra o status de algum pacote do repositorio no sistema;
install --unpack
Baixa e instala algum pacote ou programa; Descompacta um pacote .deb.
EXEMPLOS
autoremove dpkg -i pacote.deb dpkg -r pacote dpkg -l texlive* dpkg -s openssh-server
Remove algum pacote ou programa já instalado.
97
B.3. NA UNHA 99 100 APÊNDICE B. INSTALAÇÃO DE PROGRAMAS
B.3 Na Unha
Resumindo
Descompacte o novo programa em algum lugar
Entre no diretorio, onde o programa foi descompactado
execute o arquivo configure
execute o comando make
execute o comando make install (sudo make install)
102 APÊNDICE C. COMANDOS DE REDE
DESCRIÇÃO
O comando ifconfig mostra como esta configurado os dispositivos de rede.
OPÇÕES
-a Mostra todos os dispositivos de rede;
up Dispositivo
liga o dispositivo de rede;
down Dispositivo
desliga o dispositivo de rede;
EXEMPLOS
ifconfig
Saida:
Dispositivo Informaçoes do Dispositivo
eth0 Link encap:Ethernet HWaddr 00:19:d1:26:ed:c5 (Tipo e MAC)
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 (IP)
inet6 addr: fe80::219:d1ff:fe26:edc5/64 (IPv6)
... RX bytes:484457852 (484.4 MB) TX bytes:36230552 (36.2 MB)
...
101
103 104 APÊNDICE C. COMANDOS DE REDE
Conecta ao servidor
Comando C.3 netcat Conecta em algum servidor
nc Servidor 5000
NOME
nc
SINTAXE
nc [Opcoes] Servidor Porta
Comando C.5 netcat Envia dados para um computador
DESCRIÇÃO
NOME
nc
OPÇÕES
SINTAXE
-v Mostra o log, se ocorreu algum erro ou não;
nc Servidor Porta Arquivo
EXEMPLOS
nc www.google.com.br 80 DESCRIÇÃO
após conectado envie o seguinte dados ????, então você receberá a pagina
do google em html
OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da.
105 106 APÊNDICE C. COMANDOS DE REDE
SINTAXE
nc -vz Servidor Portas -w Timeout
DESCRIÇÃO
O comando netcat dessa forma, cria um scanner pelas portas de algum
servidor e irá dizer quais portas estão abertas.
OPÇÕES
-v Mostra o log, se ocorreu algum erro ou não;
SINTAXE
nc -l Porta
DESCRIÇÃO
OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da.
108 APÊNDICE D. EDITORES DE TEXTO
MC - Arquivo
Apêndice D :e NomeArquivo
abre o arquivo NomeArquivo;
O Visual Interface (VI) foi criado no inicio da década de 80. Ele contém dois d recorta o texto a partir do cursor até o final da linha;
modos de operação: Modo de Comando e Modo de Inserção. O usuário só pode
estar em apenas um modo, que pode ser trocado. Cada modo altera o significado dw recorta a palavra sobre o cursor;
das teclas, por exemplo, a tecla ’D’ no modo de comando indica ao computador
para deletar uma linha, já no modo de inserção, o computador insere a letra ’D’ dd recorta a linha corrente;
no texto. Quando entrar no editor, por padrão, ele estará no modo de comando.
y$ copia o texto a partir do cursor até o final da linha;
107
D.1. VI 109 110 APÊNDICE D. EDITORES DE TEXTO
U desfaz todas as modificações feitas na linha atual; $ move o cursor para o final da linha atual;
Arquivo
MC - Navegação
Ctrl + x e Ctrl + f NomeArquivo
abre o arquivo NomeArquivo;
Ctrl + f
move o cursor para proxima página;
Ctrl + x e Ctrl + s NomeArquivo
salva o arquivo corrente no arquivo NomeArquivo;
Ctrl + b
move o cursor para página anterior; Ctrl
+ x e Ctrl + w NomeArquivo
salva como
H move o cursor para a primeira linha da página;
L move o cursor para a ultima linha da página; Ctrl + x e Ctrl + c
Salva e sai do emacs.
h move o cursor um caracter a esquerda;
Editar
j move o cursor para a proxima linha;
k move o cursor para linha anterior; ESQ + @ ou Mouse
seleciona um bloco;
l move o cursor um caracter a direita;
Ctrl + w
w move o cursor para o inicio da próxima palavra, ignorando a pontuacão; recorta o bloco selecionado;
W move o cursor para o inicio da próxima palavra, não ignorando a pon- ESQ + w
tuacão; copia o bloco selecionado;
b move o cursor para o inicio da palavra anterior, ignorando a pontuacão; Ctrl + y
cola o bloco;
B move o cursor para o inicio da palavra anterior, não ignorando a pontuacão;
Ctrl + d
0 move o cursor para o inicio da linha atual; deleta o caracter sob o cursor;
D.2. EMACS 111 112 APÊNDICE D. EDITORES DE TEXTO
ESC + d Ctrl + End
deleta a palavra sob o cursor; Ir ao fim do documento
Ctrl + k Ctrl + M + n
deleta a linha atual; Avança ao próximo parêntese que casa com aquele sob o cursor
Ctrl + w Ctrl + M + p
deleta os caracteres selecionados; Avança ao último parêntese que casa com aquele sob o cursor
Ctrl + x + u
desfaz a última modificação; Janela
Ctrl + x e 1
Deixa apenas uma janela;
Pesquisar
Ctrl + x e 2
Divide a tela na horizontal;
Ctrl + s
pesquisa por alguma string e avança para a próxima ocorrência;
Ctrl + x e 3
Divide a tela na vertical;
Ctrl + r
pesquisa por alguma string e avança para a ocorrência anterior;
Ctrl
+ o
Muda de janela;
ESQ + %
Inicia o processo de substituição;
D.3 Gedit
Espaço
Substitui e avança para a próxima ocorrência;
O Gedit é um editor de texto modo grafico, logo não existe muito segredo para
Delete editar, salvar ou abrir um arquivos. Mas é importante citar para aqueles, que
Não substitui e avança para a próxima ocorrência;
preferem utilizar o modo gráfico.
! Substitui todas as ocorrências;
.
Substitui e sai do processo de substituição;
ESQ Sai do processo de substituição.
Navegação
Alt + v ou PgUp
Voltar uma página
Ctrl + v ou PgDown
Avançar uma página
Ctrl + a ou Home
Ir ao inı́cio da linha
Ctrl + e ou End
Ir ao fim da linha
Ctrl + Home
Ir inı́cio do documento