Manipulação de arquivos e diretórios

De MediaWiki do Campus São José
Revisão de 21h40min de 21 de agosto de 2017 por Msobral (discussão | contribs) (Criação e edição de arquivos)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

O manual online do Linux

Todo sistema operacional da família Unix possui um manual online acessível pela linha de comando. Esse manual contém documentação sobre programas, comandos, bibliotecas de programação, arquivos de sistema e outros assuntos. Ele é acessível pelo comando man. Ele deve ser executado da seguinte forma:

man o_que_se_deseja_consultar

Por exemplo, para saber o manual do comando cd, pode-se fazer isto:

man cd


Deve-se notar que o manual apresentado está em inglês. Isso serve como motivação para se acostumar a ler nesse idioma (muito importante para um técnico !). Mas existem manuais traduzidos para português, ainda que incompletos.

Arquivos e diretórios

Arquivos são como caixas, onde se guardam dados de um certo tipo. Arquivos podem conter programas, textos, imagens, videos, músicas, ou qualquer outro tipo de dado necessário aos usuários. E arquivos são um bom exemplo de algo que chega a parecer um objeto físico, mas na verdade é uma criação do sistema operacional. Quer dizer que não existem fisicamente arquivos - o que existem são discos rígidos, CD e DVD, pendrives, e possivelmente outros dispositivos de armazenamento. O sistema operacional apresenta cada arquivo como uma parte da capacidade desses dispositivos. Mas isso são detalhes internos do sistema operacional, e para os usuários interessa saber como usar esses arquivos.

Um arquivo se define como:

  • um conteúdo, que são os dados nele armazenados
  • informações sobre o arquivo, tais como nome, usuário dono, data de criação, permissões de acesso, entre outras.
  • ações que pode ser feitas sobre ele: criar, remover, renomear, copiar, mover, mudar permissões, modificar conteúdo, mostrar conteúdo, ...

Nomes de arquivos e extensões

Nomes de arquivos, por convenção, são formados por duas partes: nome e extensão. No exemplo abaixo, o nome está destacado em azul e a extensão em vermelho:

mulher_de_40.mp3

O conceito de extensão surgiu para informar o tipo de conteúdo do arquivo. No caso do Unix (incluindo o Linux), extensões são opcionais porém muito úteis. Elas ajudam os usuários a identificarem os tipos de arquivos (ex: se contêm música, video, texto, ou algum outro conteúdo). Muitos programas gráficos também usam as extensões para classificarem arquivos. Por isso, mesmo não sendo obrigatórias nos nomes de arquivos, é uma boa ideia usá-las sempre que possível.

Ao longo do tempo muitas extensões foram definidas, pois muitos tipos diferentes de arquivos foram inventados. Aproveitando o tema do projeto 1, identifiquem o maior número de extensões para música e video que puderem:

  • Música (audio): mp3, wma, wav, aac, dat, ogg, m4a, flac, ami, au, mid, ac3
  • Video: avi, mkv, mp4, mpg, vob, ogm, m4v, wmv, 3gp, flv, rmvb, mov, yuv, mjpg

Outras (muitas !) extensões podem ser encontradas em:

Procurando arquivos ou diretórios

Uma tarefa usual em um sistema operacional é localizar arquivos. Essa procura pode ser baseada no nome ou parte do nome de arquivo, na data de criação ou última modificação, no nome do usuário ou grupo dono, ou outros atributos do arquivo. Pode ser inclusive baseada numa combinação dessas informações. Por exemplo, pode ser necessário procurar todos os arquivos de música ou video, ou então todos os programas (arquivos executáveis) que pertençam ao superusuário (usuário root). Existem programas capazes de fazer tais buscas tanto no ambiente gráfico quanto no modo texto.

As buscas a serem realizadas são:

  1. Arquivos de música
  2. Arquivos de música ou video
  3. Arquivos de texto ou planilha do Openoffice que não tenham sido modificados a 7 dias ou mais
  4. Arquivos executáveis (programas)
  5. Arquivos executáveis pertencentes ao usuário root

Para iniciar, vamos usar programas gráficos para fazer buscas.

Usando o ambiente gráfico

O primeiro programa gráfico a ser usado é o caja (ou nautilus em outras versões do Ubuntu que não o Mate), o gerenciador de arquivos disponível no Ubuntu Linux. Para usá-lo para fazer buscas selecione a opção de pesquisa:


Pesquisa1.png


No caja aparecerá uma caixa de texto onde se deve digitar o nome ou parte do nome dos arquivos a serem procurados.


Pesquisa2.png


Tente fazer as buscas usando esse programa. Há alguma que não pode ser feita ?

Usando a linha de comando (modo texto)

O caja funciona como um gerenciador de arquivos e diretórios, possibilitando investigar que arquivos existem em cada diretório, entre outras coisas. Com ele é simples listar o conteúdo de um ou mais diretórios, bastando navegar por sua interface. Mas na linha de comando não há essa facilidade. Nela devem-se usar alguns programas para obter um resultado parecido. Para começar a usar a linha de comando, devem-se conhecer e saber usar programas para navegar por diretórios, listar diretórios, procurar arquivos e diretórios e copiar arquivos.


Diretório atual

Na linha de comando existe o conceito de diretório atual ou corrente. Quando se acessa esse tipo de interface, existe um diretório em que operações sobre arquivos são realizadas. Para descobrir o diretório atual usa-se o programa pwd, como mostrado a seguir:

msobral@turing:~$ pwd
/home/aluno

Listagem de diretório

No exemplo anterior, o diretório atual é /home/aluno. Qualquer operação sobre arquivos ou diretórios será feita tendo como base esse diretório. A operação mais simples é a listagem de diretório, que se faz com o programa ls. Aproveitando o exemplo acima, a listagem do diretório atual teria este resultado:

msobral@turing:~$ ls
001.jpg                iperf-2.0.5.tar.gz             prova4-2011-1.odt
002.jpg                juliano.tgz                    prova4-2011-1-rec.odt
003.jpg                klaus                          prr.log
004.jpg                livros                         public_html
005.jpg                Makefile.in                    quartus.cap
006.jpg                nhrp.tar                       radiusd_test.py
007.jpg                nohup.out                      rco2
008.jpg                passwd.web                     rmu
msobral@turing:~$

Mudança de diretório

A listagem apresentada revela vários arquivos e subdiretórios existentes no diretório atual. Sabendo que public_html é um subdiretório, pode-se desejar mudar o diretório atual de forma a entrar nesse subdiretório. Isso pode ser facilmente realizado com o programa cd:

aluno@turing:~$ cd public_html
aluno@turing:~/public_html$ pwd
/home/aluno/public_html


Diretório atual e diretório acima

O diretório imediatamente acima é referido com .. (dois pontos). Esse é um atalho que possibilita subir um nível de diretório sem conhecer o nome do diretório imediatamente superior. Assim, para voltar ao diretório imediatamente anterior ao diretório atual pode-se fazer isto:

aluno@turing:~/public_html$ cd ..
aluno@turing:~$ pwd
/home/aluno


O diretório atual possui também um atalho chamado . (um ponto). Assim, se for executado este comando ...

aluno@turing:~/public_html$ pwd
/home/aluno/public_html
aluno@turing:~/public_html$ cd .
aluno@turing:~/public_html$ pwd
/home/aluno/public_html

... nada acontecerá (o diretório atual não será modificado).

Criação e remoção de diretório

Um diretório pode ser criado com o comando mkdir. O uso desse comando pede apenas um argumento, que é o nome ou caminho do diretório a ser criado:

aluno@M2:~$ pwd
/home/aluno
aluno@M2:~$ mkdir teste
aluno@M2:~$ cd teste
aluno@M2:~$ pwd
/home/aluno/teste

Para remover um diretório usa-se o comando rmdir. Esse diretório deve estar vazio para o comando consiga removê-lo:

aluno@M2:~$ pwd
/home/aluno
aluno@M2:~$ rmdir teste
aluno@M2:~$ cd teste
cd: teste: Arquivo ou diretório não encontrado
aluno@M2:~$ rmdir Downloads
rmdir: falhou em remover “Downloads”: Diretório não vazio

Cópia de arquivos

A cópia de arquivos na linha de comando envolve usar o programa cp. Com ele podem-se copiar um ou mais arquivos para um diretório de destino. Por exemplo, para copiar o arquivo 001.jpg para dentro do diretório public_html pode-se fazer o seguinte:

aluno@M2:~$ cp 001.jpg public_html

O diretório de destino é sempre o último argumento passado ao programa cp. A cópia de múltiplos arquivos pode ser feita listando-os todos antes do diretório de destino:

aluno@M2:~$ cp 001.jpg 002.jpg 003.jpg public_html


... ou usando-se o caractere especial * (chamado de curinga ou wildcard no original em inglês):

aluno@M2:~$ cp *.jpg public_html


No exemplo acima, todos os arquivos cujos nomes terminem com .jpg serão copiados para dentro de public_html. Outra variação no uso do curinga é:

aluno@M2:~$ cp 00*.jpg public_html

... em que todos os arquivos cujos nomes iniciem com 00 e terminem com .jpg serão copiados.

Renomeação de arquivos

Arquivos podem ser renomeados com o comando mv. Ele pode ser usado de forma muito parecida com o comando cp. A diferença está na remoção do arquivo original, como se ele sumisse de seu diretório de origem e aparecesse no diretório de destino.

aluno@M2:~$ mv mulher_de_40.mp3 Musicas
aluno@M2:~$ ls Musicas
mulher_de_40.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado


Se os diretórios de origem e destino forem iguais, mas os nomes do arquivo de origem e destino forem diferentes, então o arquivo na verdade é renomeado.

aluno@M2:~$ mv mulher_de_40.mp3 musica_romantica.mp3
aluno@M2:~$ ls musica_romantica.mp3
musica_romantica.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado

Remoção de arquivos

Arquivos podem ser removidos com o comando rm. Cuidado ao utilizá-lo ! Uma vez removido, um arquivo não pode ser recuperado !

aluno@M2:~$ rm mulher_de_40.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado

Curingas (wildcards)

Curingas são caracteres especiais usados para selecionar vários arquivos ou diretórios de uma só vez. Os curingas podem ser usados em qualquer comando para especificar nomes de arquivos e diretórios. Dois curingas bastante usados são:

  • * : casa com uma sequência composta por 0 ou mais caracteres quaisquer.
  • ? : casa com um único caractere qualquer

Curingas são muito úteis para operações sobre arquivos e diretórios. Por exemplo, para copiar todos os arquivos de música MP3 pode-se usar o curinga *' da seguinte forma:

aluno@M2:~$ cp *.mp3 Musica


Para mover os arquivos cuja extensão seja mp4 ou mpg, podem-se usar os curingas * e ? desta forma:

aluno@M2:~$ mv *.mp? Videos

Procura por arquivos

A procura de arquivos e diretórios pode ser realizada na linha de comando com o programa find. Por exemplo, para localizar todos os arquivos ou diretórios chamados default, e que estejam abaixo de /etc:

aluno@D1:~$ find /etc -name default -print
/etc/default
/etc/calendar/default
/etc/X11/xinit/xinput.d/default
aluno@D1:~$


Uso do find :

find diretório [opões]


... sendo diretório o diretório abaixo de que se deseja fazer a busca. As opções servem para selecionar arquivos e diretórios durante a busca, e também para executar ações para cada um deles que for encontrado. Algumas opções mais comuns:

  • -name nome: seleciona arquivos ou diretórios cujos nomes sejam nome' . Essa opção aceita wildcards (* e ?)
  • -type tipo: seleciona apenas o tipo' indicado, que pode ser:
    • d: diretório
    • f: arquivo
    • l: link simbólico (ou atalho)
  • -perm modo: seleciona apenas arquivos ou diretórios que possuam as permissões indicadas em modo
  • -size tamanho: seleciona apenas arquivos com tamanho de acordo com o especificado (em bytes)
  • -mtime n: seleciona apenas arquivos ou diretórios modificados a n * 24 horas atrás
  • -atime n: seleciona apenas arquivos ou diretórios acessados a n * 24 horas atrás
  • -user usuario: seleciona apenas arquivos ou diretórios pertencentes a usuario
  • -exec comando \;: executa comando para cada arquivo ou diretório encontrado. Ex:
    • find /tmp -type f -mtime +7 -exec rm -f {} \; : remove todos os arquivos dentro de /tmp que estejam há 7 dias sem serem modificados. A sequência {} é substituída pelo nome do arquivo encontrado.

... e muitas outras (consulte o manual do find).

Exercícios

  1. Partindo do subdiretório /home/aluno/Desktop, e usando somente caminhos (pathnames) relativos, indique a sequência de comandos necessária para visitar sucessivamente os seguintes subdiretórios:
    • /home/aluno
    • /home
    • /etc/default
    • /usr/share/doc
    • /usr/share/doc/python/faq
    • /usr/lib/ubuntu-mate
    • /usr/local/etc
    • /usr/local/man
    • /usr/local/lib/python2.7
    • /usr/local/lib/python2.7/site-packages
    • /usr/local/lib/python2.7/dist-packages
    • /home/aluno
    • /home/aluno/Downloads
  2. Partindo do subdiretório /home/aluno, informe a sequência de subdiretórios (indique-os com seus caminhos absolutos) visitados se forem seguidos os seguintes caminhos relativos:
    • Imagens
    • ../Documentos
    • ../..
    • ../boot
    • grub
    • ../../usr/lib
    • ../share
    • ../local
    • lib/python2.7
    • ../..
    • ../../etc
    • ../lib/modules
    • ../../home
    • aluno/Downloads/..
  3. Organize estes arquivos, de forma que sejam colocados nos subdiretórios Imagens, Videos e Documentos, de acordo com seus tipos. Os arquivos devem ser movidos para esses diretórios.
  4. Remova o arquivo compactado transferido no exercício anterior.
  5. Renomeie os arquivos de imagens organizados no exercício 3. Dê um nome para cada imagem de acordo com seu conteúdo.
  6. No diretório /usr/share/sounds/ubuntu existem vários arquivos de áudio. Crie um diretório dentro de seu diretório pessoal e copie-os para esse novo diretório. Em seguida, reproduza-os para escutá-los.
  7. Encontre o arquivo lsusb, que se encontra em algum subdiretório dentro de /usr
  8. Encontre os subdiretórios lib, que estão dentro de /usr
  9. Localize todos os arquivos executáveis (i.e., os programas) que existem abaixo de /lib
  10. Localize todos os arquivos pertencentes ao usuário aluno e que estejam dentro de /tmp


Permissões de acesso a arquivos e diretórios

As permissões de acesso a arquivos e diretórios permitem proteger o sistema de arquivos do Linux do acesso indevido por pessoas ou programas não autorizados. O princípio da segurança está baseado no conceito de usuário dono ou proprietário, grupo e demais usuários. Um arquivo sempre possui um usuário que é o seu proprietário. Quando um usuário cria um arquivo ou diretório, ele passa a ser o seu dono. No entanto, o arquivo poderá ser repassado a outro usuário. O grupo permite atribuir permissões de acesso a arquivos e diretórios comuns a um grupo de usuários. Por fim, demais usuários (outros) são usuários que não são donos nem pertencem ao grupo do arquivo ou diretório.

Um usuário do sistema é identificado pelo seu nome de login, ao qual existe associado 
um número chamado UID (''user ID''). Uma coleção de usuários pode pertencer a um grupo. Um grupo 
também possui um nome e um identificador numérico (''GID'').


As permissões de arquivos e diretórios podem ser visualizadas usando-se o comando ls -l (comando ls com a opção -l). O exemplo a seguir mostra um possível resultado do uso desse comando:

aluno@M2:~$ cd Downloads
aluno@M2:~$ ls -l
-rw-r--r--  1 root    root     2520813 Jun  5  2013 rt5572sta.tgz
-rwxrwxr-x  1 aluno   aluno        453 Jun 27  2013 transmissor
-rw-rw-r--  1 aluno   aluno      69118 Jul 16  2013 vento.png
-rw-r--r--  1 aluno   aluno       7336 Abr 10  2014 vlan_simples(1).py
-rw-rw-r--  1 aluno   aluno      39864 Fev 19  2014 voip-pstn.png
drwxrwxr-x  3 aluno   aluno       4096 Dez 16  2013 wan
-rw-rw-r--  1 aluno   aluno       5454 Jul 30  2013 wan-2013-1.conf
-rw-rw-r--  1 aluno   aluno        933 Dez  5  2013 wan-2013-1.netkit
-rw-rw-r--  1 aluno   aluno       3969 Jul 29  2013 wan-2013-1_vTeste.conf
-rw-rw-r--  1 aluno   aluno        995 Dez  5  2013 wan-2013-2.netkit
aluno@M2:~$


As permissões são apresentadas na coluna da esquerda. Elas são mostradas como uma sequência de letras e traços. Seu efeito depende do caso de ser arquivo ou diretório. As permissões podem ser do tipo:

  • leitura (r):
    • arquivos: permite o acesso ao conteúdo (leitura) de arquivos
    • diretórios: permite listar diretório (mostrar a relação de arquivos e subdiretórios)
  • escrita (w):
    • arquivos: permite alterar o conteúdo de arquivo
    • diretórios: permite criar arquivos ou subdiretórios dentro de diretório
  • execução (x):
    • arquivos: permite executar um arquivo (caso seja um programa)
    • diretórios: permite entrar em diretório


A figura a seguir detalha o significado dessa coluna:

Pji-Permissoes2.png
Um arquivo e suas permissões


O acesso a um arquivo/diretório se dá da seguinte forma:

  1. Se o usuário que tentou o acesso for seu dono: verificam-se as permissões correspondentes ao proprietário do arquivo.
  2. Se o usuário pertence ao grupo dono do arquivo: verificam-se as permissões correspondentes a esse grupo
  3. Demais usuários: verificam as permissões para demais usuários (outros)

Exercício

  1. Usando os comandos ls -l e/ou find (o que você achar mais fácil ou adequado), localize e visualize as permissões de arquivos com as seguintes características:
    • Arquivos de programa (executáveis) dentro do diretório /bin
    • Arquivos modificáveis por qualquer usuário dentro de /var
    • Arquivos somente-leitura (mesmo para seus usuários donos) dentro de /etc
    • Arquivos dentro de /etc sem permissão de leitura para seu usuário

Editores de texto

Os editores a serem vistos servem pra criar e modificar arquivos de texto simples (contêm apenas texto e sem formatação). Esse tipo de arquivo é muito comum para arquivos de programa, manuais rápidos, e documentos escritos em linguagens de formatação de texto, como HTML e XML.

Alguns desses editores:

  • gedit ou pluma: um editor de texto simples para o ambiente gráfico. Possui recurso para ressaltar palavras e sentenças, chamado syntax highlight, de acordo com o tipo de texto (se programa em linguagem C, C++, Python, PHP, shll script, ou um texto HTML, entre outros).
  • vi: um editor de programas com recursos avançados de edição. Mas usa uma interface textual com comandos que devem ser memorizados ... algo anacrônico, mas funciona. Como motivação para usá-lo, praticamente todo computador com Unix (não somente Linux) vem com esse editor previamente instalado.
  • nano: um outro editor mais simples, também para modo texto e com menos funcionalidades que o vi, porém um pouco mais amigável.

Obs: os editores vi e nano apresentam uma interface baseada em combinações de teclas de controle. Essa era uma abordagem comum em editores dos anos 70 e 80, tais como o então famoso wordstar (e existe um quase-clone para Linux chamado joe).

pluma

Para executar o pluma deve-se selecioná-lo no menu de aplicativos ou na ferramenta de busca da interface gráfica.


Esse editor é bastante simples, porém útil para a edição de pequenos textos e programas. Algumas funções existentes são busca e substituição de palavras e impressão. Outras funcionalidades podem ser adicionadas por plugins.

Gedit2.png

Experimente editar diferentes tipos de arquivos de texto com o pluma:

nano

O editor nano serve para editar arquivos em modo texto. Sua tela apresenta uma área de trabalho, onde aparece o texto, com uma barra de ajuda embaixo. Nessa barra há os comandos que podem ser usados, que devem ser invocados com a combinação da tecla Ctrl e a letra indicada. Para terminá-lo basta teclar Ctrl X, fornecendo o nome do arquivo onde guardar o texto.

Nano.png


vi/vim

O editor vi (ou vim, sua versão incrementada) é bastante simples e muito utilizado por ser encontrado em todas as distribuições Linux. Poderíamos optar por um editor um pouco mais avançado, mas com o inconveniente de encontrarmos uma distribuição/instalação onde não dispuséssemos deste editor. O editor vi não tem como objetivo formatar textos: negritos, indentações, justificação, etc. Na prática o vi é muito usado para editar textos que não necessitam de formatação em nenhum momento, como por exemplo códigos fonte de programas em alguma linguagem de programação, e que não carreguem o texto com caracteres especiais. Assim, esse editor também é chamado de editor de programas.

Dicas:

Modos de operação

O editor vi tem três modos de operação distintos: modo insert , modo escape (também chamado de modo comando), modo last line;

  • insert: usado para a digitação do texto. Neste modo o vi funciona como uma máquina de escrever, com a diferença de que você pode retroceder sobre o texto já digitado para corrigir eventuais erros. Cada caracter que for digitado aparecerá na tela exatamente como foi digitado.
  • escape: os caracteres comuns (letras, números e sinais de pontuação) têm um significado especial e quase todos os caracteres funcionam como comandos; portanto, existem muitos comandos. Alguns comandos servem para passar para o modo insert, outros para movimentar o cursor sobre as linhas do texto, alterar trechos do texto, buscar palavras, etc.
  • last line: os comandos são digitados em uma linha especial que aparece no final da tela quando se digita : (dois pontos) no modo escape. Parte dos comandos do modo escape possuem similares no modo last line, como por exemplo os comandos de edição, que veremos mais adiante. Os comandos no modo last line devem ser seguidos por ENTER, contrariamente ao que acontece no modo escape.

Criação e edição de arquivos

Outro guia rápido sobre vi

Para criarmos um arquivo simplesmente digitamos vi seguido do nome do arquivo. Por exemplo:

vi primeiro.arquivo

Após isto será aberto o editor com conteúdo vazio, no modo comando. Para podermos editar qualquer coisa devemos entrar no modo inserção, para isto basta teclarmos <i> (aparecerá -- INSERT -- na base da janela). Em seguida digitamos o texto propriamente dito (exemplo abaixo), usando o teclado normalmente:

Um pedacinho de terra, Perdido no mar!... Num pedacinho de terra, Beleza sem par... Jamais a natureza Reuniu tanta beleza Jamais algum poeta Teve tanto pra cantar!</syntaxhighlight>

Para salvarmos o texto devemos teclar <Esc> (modo comando), <:> (modo last line> e <w> (write). Assim teremos o nosso texto salvo.

Após isso, para sairmos do vi teclamos <Esc> (modo comando), <:> (modo last line> e (quit).

Novamente, para criarmos um segundo arquivo simplesmente digitamos vi seguido do nome do arquivo. Por exemplo:

vi segundo.arquivo

Após isso, entramos novamente no modo inserção (teclarmos <i>) e digitamos o texto desejado (exemplo abaixo):

Tua lagoa formosa Ternura de rosa Poema ao luar, Cristal onde a lua vaidosa Sestrosa, dengosa Vem se espelhar...</syntaxhighlight>

Agora vamos a alguns comandos úteis:

  • Copiar algumas linhas do texto: colocamos o cursor no início do texto a ser copiado e, no modo de comando, teclamos <n>+<y>+<y>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <5>+<y>+<y> copiaremos 5 linhas para o buffer.
  • Colar o conteúdo do buffer para alguma parte do texto: colocamos o cursor no ponto onde pretendemos inserir o texto e, no modo de comando, teclamos <p> (paste) para inserirmos o texto abaixo da linha do cursor e <P> para inserir o texto acima da linha do cursor.
  • Excluir algumas linhas do texto: colocamos o cursor no início do texto a ser excuído e, no modo de comando, teclamos <n>+<d>+<d>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <3>+<d>+<d> apagaremos 3 linhas do texto mas que serão armazenadas no buffer.
  • Encontrar alguma palavra: no modo de comando, teclamos </> <palavra> <Enter>. O vi mostrará a primeira ocorrência da mesma. Para ir para a próxima ocorrência teclamos <n> (next), e para a ocorrência anterior teclamos <p> (previous)
  • Substituir uma palavra por outra: no modo de comando, teclamos <:s/><palavra></><outra><Enter>. Por exemplo se quisermos substituir velha por nova: <:s/><velha></><nova><Enter>, assim teremos a troca da primeira ocorrência de velha por nova. Para substituirmos todas as ocorrências acrescentamos <%> entre <:> e <s> do caso anterior. Exemplo: <:%s/><velha></><nova><Enter>
  • Inserir o conteúdo de um texto externo em nosso texto: no modo de comando, teclamos <:r>+<caminho/arquivo>+<Enter>.
  • Salvar com outro nome: no modo de comando, teclamos <:w>+<novo.nome>+<Enter>.


Uma lista de comandos resumida segue abaixo:

  • 0: vai para o início da linha
  • $: vai para o final da linha
  • gg: vai para a primeira linha
  • G: vai para a última linha
  • :n: vai para a linha n (n é um número)
  • w: vai para a próxima palavra
  • b: vai para a palavra anterior
  • x: apaga um caractere à direita do cursor
  • X: apaga um caractere à esquerda do cursor
  • dd: apaga-se uma linha inteira
  • D: apaga do cursor até o final da linha
  • dw: apaga até a próxima palavra
  • dfs: apaga até a próxima ocorrência do caractere s
  • a: entra-se em inserção uma posição à frente do cursor
  • i: entra-se em inserção uma posição antes do cursor
  • rc: substitui o caractere sob o cursor pelo caractere c
  • cwnova: substitui a palavra a partir do cursor pela palavra nova
  • :w: grava o arquivo
  • :w um_arquivo: grava o conteúdo no arquivo um_arquivo
  • :w! um_arquivo: grava o conteúdo no arquivo um_arquivo, sobrescrevendo-o caso exista
  • :r um_arquivo: lê um_arquivo e insere seu conteúdo a partir do cursor
  • :r!comando: executa comando no shell, e insere seu resultado a partir do cursor
  • :q: sai do vi (termina o editor)
  • :q!: sai do vi, descartando as modificações

Exercício - Editor vi

Objetivo: Familiarização com o editor e ser capaz de executar comandos simples, porém úteis para manipulação de arquivos.

  1. Crie um arquivo com o editor VI com o nome de poema.txt, e que dentro dele esteja o texto abaixo:

Desejo que você Não tenha medo da vida, tenha medo de não vivê-la. Não há céu sem tempestades, nem caminhos sem acidentes. Só é digno do pódio quem usa as derrotas para alcançá-lo. Só é digno da sabedoria quem usa as lágrimas para irrigá-la. Os frágeis usam a força; os fortes, a inteligência. Seja um sonhador, mas una seus sonhos com disciplina, Pois sonhos sem disciplina produzem pessoas frustradas. Seja um debatedor de ideias. Lute pelo que você ama.</syntaxhighlight>

  1. Salve o arquivo e saia do editor.
  2. Copie o arquivo do item anterior com o nome editadoPoema.txt.
  3. Entre no arquivo editadoPoema.txt, e saia sem salvar.
  4. Entre novamente no arquivo editadoPoema.txt, e no modo insert, faça uma alteração qualquer (Ex: deixe duas linhas em branco no início do arquivo). Saia do editor sem salvar a alteração feita.
  5. Entre no arquivo editadoPoema.txt, copie todo o poema e cole logo abaixo, sem deixar espaço entre os textos, utilizando os comandos nyy e p. Salve e saia do editor.
  6. Entre no arquivo editadoPoema.txt e exclua as 2 primeiras linhas. Desfaça a alteração, salve e saia do editor.
  7. Entre no arquivo editadoPoema.txt e exclua as 9 primeiras linhas. Salve as alterações e saia do editor.
  8. Entre no arquivo poema.txt e procure pela palavra sonhos, utilizando o comando /palavra_procurada. Navegando pela pesquisa com o comando n, responda quantas ocorrências dessa palavra existem no texto?
  9. No modo last line, substitua a palavra produzem por geram do arquivo poema.txt.
  10. No arquivo poema.txt, substitua todas as ocorrências da palavra digno por DIGNO.
  11. No arquivo editatoPoema.txt, copie todo o texto e cole 3 vezes, um embaixo do outro. Salve e saia do editor.
  12. Entre no arquivo poema.txt e salve-o com outro nome.

Outros editores ?

Há muitos outros editores de texto ! Se tiver curiosidade, faça um pesquisa na Web sobre os editores de texto que existem para o Linux.

Backups

Existem muitos programas para realizar cópias de segurança no Linux (chamadas de backup). Porém tradicionalmente a forma mais simples de realizar uma cópia pessoal de um conjunto de arquivos e diretórios faz uso de um programa simples chamado tar.

tar

O programa tar é um utilitário do mundo Unix originalmente criado para backups em fita (daí seu nome: TApe aRchiver, se bem que tar é também um trocadilho que pode significar piche, pois ele de certa forma gruda um arquivo ao outro). O resultado da execução do tar é um arquivo contendo todos os arquivos e diretórios que foram selecionados para inclusão. Esse arquivo tar pode ser então compactado, obtendo-se algo parecido com o que faz zip ou rar.

Mas porque não usar então zip e rar ? Afinal, eles existem também no Linux ... No entanto, esses compactadores nasceram no mundo do antigo MS-DOS, e assim não são capazes de armazenar todos os atributos de arquivos que existem em sistemas Unix (informações tais como usuário e grupo dono do arquivo, permissões de acesso, tipo do arquivo, datas de último acesso e modificação). O tar, pelo contrário, consegue preservar esses atributos, e por isto se torna mais adequado para uso no Unix em geral.

Uso do tar:

  • Criação de arquivo tar:
    tar cf nome_arquivo.tar arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
    
  • Mostrar o conteúdo de arquivo tar:
    tar tvf nome_arquivo.tar
    
  • Extrair conteúdo de arquivo tar:
    tar xf nome_arquivo.tar
    

Os usos acima não compactam os arquivos incluídos dentro do arquivo tar. Para compactá-los deve-se adicionar uma opção de compactação:

  • Criação de arquivo tar compactado:
    • Com compress:
      tar cZf nome_arquivo.tar.Z arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
    • Com gzip:
      tar czf nome_arquivo.tar.gz arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
    • Com bzip2:
      tar cjf nome_arquivo.tar.bz2 arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
    • Com xz:
      tar cJf nome_arquivo.tar.xz arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
  • Mostrar o conteúdo de arquivo tar:
    • Com compress:
      tar tvZf nome_arquivo.tar.Z
      
    • Com gzip:
      tar tvzf nome_arquivo.tar.gz
      
    • Com bzip2:
      tar tvjf nome_arquivo.tar.bz2
      
    • Com xz:
      tar tvJf nome_arquivo.tar.xz
      
  • Extrair conteúdo de arquivo tar:
    • Com compress:
      tar xZf nome_arquivo.tar.Z
      
    • Com gzip:
      tar xzf nome_arquivo.tar.gz
      
    • Com bzip2:
      tar xjf nome_arquivo.tar.bz2
      
    • Com xz:
      tar xJf nome_arquivo.tar.xz
      

Compactadores no modo texto

Vários compactadores de arquivos existem no Linux, e o nautilus simplifica sua seleção e uso. Esses compactadores podem ser usados também no modo texto ... aliás, eles originalmente foram criados para serem usados dessa forma ! O que o nautilus faz é facilitar seu uso por meio de uma interface gráfica.

Os principais compactadores são:

  • compress: compactador mais antigo e comum nos Unix em geral, porém em desuso. Gera arquivos compactados com extensão .Z. Precisa do pacote de software ncompress no Ubuntu. Exemplo de uso:
    msobral@curl2:~/tmp$ compress palavras.txt 
    msobral@curl2:~/tmp$ ls -l palavras.txt.Z 
    -rw-rw-r-- 1 msobral msobral 932433 Jun 29 14:59 palavras.txt.Z
    msobral@curl2:~/tmp$ uncompress palavras.txt.Z 
    msobral@curl2:~/tmp$ ls -l palavras.txt
    -rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
    
  • GNU zip: compactador bastante utilizado, com maior poder de compactação que compress. Gera arquivos compactados com extensão .gz. Já vem instalado no Ubuntu. Exemplo de uso:
    msobral@curl2:~/tmp$ gzip palavras.txt
    msobral@curl2:~/tmp$ ls -l palavras.txt.gz
    -rw-rw-r-- 1 msobral msobral 532756 Jun 29 14:59 palavras.txt.gz
    msobral@curl2:~/tmp$ gunzip palavras.txt.gz 
    msobral@curl2:~/tmp$ ls -l palavras.txt
    -rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
    
  • bzip2: vem sendo bastante usado por ter um poder de compactação ainda maior, porém à custa de maior processamento (compactação fica mais lenta). Gera arquivos compactados com extensão .bz2. Também já vem instalado no Ubuntu.
    msobral@curl2:~/tmp$ bzip2 palavras.txt
    msobral@curl2:~/tmp$ ls -l palavras.txt.bz2 
    -rw-rw-r-- 1 msobral msobral 720099 Jun 29 14:59 palavras.txt.bz2
    msobral@curl2:~/tmp$ bunzip2 palavras.txt.bz2 
    msobral@curl2:~/tmp$ ls -l palavras.txt
    -rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
    
  • xz: outro compactador bastante usado recentemente. Pode compactar ainda mais que bzip2, porém a um custo computacional maior. Isso significa que ele demora mais para compactar um arquivo que esse outro compactador. Gera arquivos com extensão .xz. Ele já vem instalado no Ubuntu.
    msobral@curl2:~/tmp$ xz palavras.txt 
    msobral@curl2:~/tmp$ ls -l palavras.txt.xz 
    -rw-rw-r-- 1 msobral msobral 387056 Jun 29 14:59 palavras.txt.xz
    msobral@curl2:~/tmp$ unxz palavras.txt.xz 
    msobral@curl2:~/tmp$ ls -l palavras.txt
    -rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
    
  • ... outros menos populares no mundo do Linux, tais como zip, rar e zoo.

Note que os compactadores compress, gzip, bzip2 e xz compactam um arquivo por vez. Assim, com eles não é possível juntar vários arquivos e diretórios dentro de um único arquivo compactado (o que se faz corriqueiramente com zip ou rar ...). Portanto, se for necessário compactar um diretório ou um conjunto de arquivos, o melhor é combinar um compactador com o programa tar.

Exercícios

Faça os exercícios abaixo usando o nautilus e os compactadores no modo texto:

  1. Procure um arquivo de texto (extensão .txt, .html, ou .doc) com ao menos 100 kB e compacte-o com compress, gzip e bzip2. Compare os tamanhos dos arquivos resultantes.
  2. Usando o programa tar, compacte todo o diretório home do usuário aluno. Experimente criar o arquivo tar sem compactação, e depois compactado com cada um dos compactadores vistos. Você terá portanto como resultado quatro arquivos tar diferentes ...
  3. Descompacte os arquivos tar gerados na questão anterior. Para evitar sobreposição, descompacte cada um deles em um diretório separado.