Mudanças entre as edições de "Manipulação de arquivos e diretórios"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 238: Linha 238:
  
 
... e muitas outras (consulte o [http://manpages.ubuntu.com/manpages/karmic/en/man1/find.1.html manual do find]).
 
... e muitas outras (consulte o [http://manpages.ubuntu.com/manpages/karmic/en/man1/find.1.html manual do find]).
 +
 +
== Exercícios ==
 +
 +
# 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/administrador
 +
#* /home/administrador/Documentos
 +
#* /home/administrador/public_html/imagens
 +
#* /etc/default
 +
#* /usr/share/docs
 +
#* /usr/share/docs/python/manual/html
 +
#* /usr/lib/browser-plugins
 +
#* /usr/local/etc
 +
#* /usr/local/man/man1
 +
#* /home/aluno
 +
#* /home/aluno/Desktop
 +
#Partindo do subdiretório /home/aluno/Desktop, informe  a sequência de subdiretórios (indique-os com seus caminhos absolutos) visitados se forem seguidos os seguintes caminhos relativos:
 +
#* ../Imagens/Fotos
 +
#* 2010/07
 +
#* ../../2009
 +
#* ../../../bin
 +
#* ../../manuel/docs
 +
#* ../../../etc/init.d
 +
#* ../rc5.d
 +
#* ../../var/log/apache2
 +
#* ../../tmp
 +
#* ../../lib/modules
 +
#* ../../usr/bin
 +
#* ../lib/X11
 +
#* ../..
 +
# Encontre o arquivo ''lsusb'', que se encontra em algum  subdiretório dentro de ''/usr''
 +
# Encontre os arquivos dentro de ''/usr'' cujos tamanhos sejam maiores que 20 MB
 +
# Encontre os subdiretórios ''lib'', que estão dentro de ''/usr''
 +
# Localize todos os arquivos executáveis (i.e., os programas) que existem abaixo de ''/lib''
 +
# Localize todos os arquivos pertencentes ao usuário ''aluno''  e que estejam dentro de ''/tmp''
 +
# Localize todos os arquivos abaixo de ''/tmp'' que tenham sido criados (ou modificados) a um dia ou mais.
 +
# Localize somente arquivos dentro de ''/tmp'' que tenham menos de 1 kB.
 +
# Localize somente arquivos dentro de ''/tmp'' que tenham mais de 10 kB.
 +
# Localize somente arquivos dentro de ''/tmp'' que tenham mais de 10 kB e sejam do seu usuário.
 +
# Localize somente arquivos dentro de ''/tmp'' que tenham mais de 10 kB e não sejam do seu usuário.

Edição das 16h02min de 4 de abril de 2016

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, memso naõ 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, uma relação não exaustiva de extensões para música e video é:

  • 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 nautilus, o gerenciador de arquivos disponível no Ubuntu Linux. Para usá-lo para fazer buscas selecione a opção de pesquisa:


Pesquisa1.png


No nautilus 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 nautilus 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).

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:

msobral@turing:~$ 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:

msobral@turing:~$ 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):

msobral@turing:~$ 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 é:

msobral@turing:~$ 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/administrador
    • /home/administrador/Documentos
    • /home/administrador/public_html/imagens
    • /etc/default
    • /usr/share/docs
    • /usr/share/docs/python/manual/html
    • /usr/lib/browser-plugins
    • /usr/local/etc
    • /usr/local/man/man1
    • /home/aluno
    • /home/aluno/Desktop
  2. Partindo do subdiretório /home/aluno/Desktop, informe a sequência de subdiretórios (indique-os com seus caminhos absolutos) visitados se forem seguidos os seguintes caminhos relativos:
    • ../Imagens/Fotos
    • 2010/07
    • ../../2009
    • ../../../bin
    • ../../manuel/docs
    • ../../../etc/init.d
    • ../rc5.d
    • ../../var/log/apache2
    • ../../tmp
    • ../../lib/modules
    • ../../usr/bin
    • ../lib/X11
    • ../..
  3. Encontre o arquivo lsusb, que se encontra em algum subdiretório dentro de /usr
  4. Encontre os arquivos dentro de /usr cujos tamanhos sejam maiores que 20 MB
  5. Encontre os subdiretórios lib, que estão dentro de /usr
  6. Localize todos os arquivos executáveis (i.e., os programas) que existem abaixo de /lib
  7. Localize todos os arquivos pertencentes ao usuário aluno e que estejam dentro de /tmp
  8. Localize todos os arquivos abaixo de /tmp que tenham sido criados (ou modificados) a um dia ou mais.
  9. Localize somente arquivos dentro de /tmp que tenham menos de 1 kB.
  10. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB.
  11. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB e sejam do seu usuário.
  12. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB e não sejam do seu usuário.