LPIC 1 - 103.3 GERENCIAMENTO BÁSICO DE ARQUIVOS

Neste tópico veremos comandos básicos para gerenciar arquivos e diretórios. Veremos como copiar, mover, renomear arquivos e diretórios individualmente e recursivamente, deletar arquivos e diretórios, compactar e descompactar arquivos e localizar arquivos.

Peso 4

Antes de começarmos a gerenciar arquivos e diretórios, temos que saber que podemos acessar esses arquivos através do seu caminho absoluto ou pelo seus caminho relativo.

Caminho absoluto - é o caminho que é usado por completo. Quando usamos o barra (/- raiz) para indicarmos um caminho, estamos usando seu caminho absoluto. Por exemplo, se você quer editar o arquivo hosts.conf que fica dentro do diretório /etc/, digitamos vim /etc/host.conf. Ou para acessarmos o diretório do banco de dados da biblioteca compartilhada, cd /usr/lib/.

Caminho relativo - é aquele que é usado quando já estamos dentro do diretório corrente. Vamos supor que você já está dentro do diretório /etc/ e deseja editar/visualizar o arquivo hostname, basta digitar vim hostname (cat hostname para visualizar o conteúdo).

Podemos usar também o ponto (.), que indica o diretório atual. Exemplo: você está dentro do seu diretório pessoal, /home/usuario/, e quer copiar o arquivo .bashrc que está dentro do diretório /etc/skel/, basta usarmos o comando cp /etc/skel/.bashrc . que o arquivo será copiado para o seu diretório atual.

O uso de dois pontos (..) indica o diretório superior ao atual. Exemplo: estamos dentro do diretório /home/usuario/ e queremos ir para o /home/, usamos o comando:
cd ../

COPIAR, MOVER, RENOMEAR, DELETAR

Para copiar arquivos e diretórios usamos o comando cp.

Sintaxe:
cp [opções] arquivo destino
cp /etc/passwd /home/usuario/passwd.bkp - copia o arquivo passwd para o diretório /home/usuario/ com o nome de passwd.bkp.

Opções mais usadas:
-i - pergunta antes de sobrescrever um arquivo
-p - copia os atributos do arquivo original
-r - copia recursivamente o conteúdo do diretório de origem

Mover diretórios e arquivos (MV)

Usamos o comando mv.
Sintaxe:
mv [opções] arquivo destino

Opções mais usadas:
-i - pergunta antes de sobrescrever um arquivo
-n - não substitui arquivos já existentes

Exemplo:
mv -i /etc/host.conf /home/ - copia o arquivo host.conf para o diretório home e, se existir algum arquivo com esse nome, ele vai perguntar se deseja substituir.


Renomear (MV)


O comando mv pode ser usado para renomear arquivos também. Por exemplo:
mv /etc/apt/sources.list /etc/apt/sources.list.bkp - renomeia o arquivo sources.list para sources.list.bkp

Deletar (RM e RMDIR)

Para deletarmos arquivos e diretórios, usamos o comando rm.

Sintaxe:
rm [opções] arquivo
-r - remove recursivamente arquivos e diretórios
-f - remove sem pedir confirmação

Exemplo:
rm arquivo - apaga o arquivo.txt
rm -f /teste/arquivo.txt - apaga o arquivo arquivo.txt sem confirmação
rm -rf /* - NUNCA FAÇA ISSO!
rm -r /home/usuario/Downloads/*.txt - remove todos os arquivos com a extensão .txt.
rm /home/usuario/Imagens/img* - remove todos os arquivos que começam com img.

PS: veremos mais a frente o uso dos caracteres curinga.


Os comandos rm e rmdir só removem diretórios se os mesmos estiverem vazios. Para remover diretórios que contem arquivos utiliza-se a opção -r.


RMDIR - o rmdir remove diretórios SOMENTE se estiverem vazios. Igual ao comando rm -p.

MKDIR e TOUCH

Para criar pastas, usamos o comando mkdir.

Sintaxe:
mkdir [opções] pasta
-p - cria pastas recursivamente
-m - cria pasta determinando a permissão

Exemplo:
mkdir -p /home/usuario/Documentos/Trabalho/ - foram criadas recursivamente as pastas Documentos e dentro dela, a pasta Trabalho.
mkdir -m 644 teste - foi criada a pasta teste, determinando as permissões dos arquivos.

TOUCH

É usado para criar arquivos e/ou alterar a data e hora de acesso e modificação dos arquivos.

Sintaxe:
touch [opções] arquivo

Opções mais utilizadas:
-t - usa o timestamp no seguinte formato: YYYYMMDDHHMM.SS. Altera hora e data de acesso e modificação.
-m - altera somente a hora de modificação. Se usado sem especificar a data, será usado a data e hora atual.
-a - muda somente a hora de acesso. Se usado sem especificar a data, será usado a data e hora atual.

PS: Muito importante entender o timestamp dos arquivos. Em um arquivo nós temos a data e hora em que ele foi acessado; temos a data e hora em que ele foi modificado; e temos também as permissões, se foram alteradas ou não.

Para sabermos o timestamp dos arquivos digitamos o comando stat. A saída será algo assim:





Repare nas informações Access, Modify e Change. Esses são os timestamp.

Exemplos:
touch -a codigo.txt - define a data e hora de acesso para a data e hora atual.
touch -t 200807151230.10 -m codigo.txt - define a data e hora de MODIFICAÇÃO para 15 de Julho de 2008, as 12:30 e 10 segundos.
touch -t 201010101010.10 -a codigo.txt - define a data e hora de ACESSO para 10 de Outubro, as 10:10 e 10 segundos.

FILE

Informa qual o tipo de conteúdo está contido no arquivo.

file arquivo
arquivo: ASCII text

LS

Lista arquivos contidos nos diretórios e exibe detalhes dos arquivos e diretórios.

Sintaxe:
ls [opções] diretório/arquivo

Opções mais comuns:
-l - formato de lista longa com várias informações
-a - exibe arquivos ocultos
-h - exibe o tamanho dos arquivos em formato mais simples para humanos
-i - exibe o índice de cada arquivo - inode
-s - mostra o tamanho alocado para cada arquivo em bloco

Exemplo de um ls -ilhas /etc/



1ª coluna - mostra o inode do arquivo/diretório
2º coluna - tamanho alocado para cada arquivo em bloco. Por causa da opção -h, mostra o tamanho de forma mais compreensível
3º coluna - mostra as permissões
4º coluna - número de harlinks para o arquivo
5º coluna - mostra o dono do diretório/arquivo
6º coluna - mostra o grupo do diretório/arquivo
7º coluna - tamanho dos arquivos
8º  e 9º coluna - data e hora da última modificação feita no arquivo
10º coluna - mostra o nome do arquivo. Se for um link simbólico, mostrará uma seta para o qual esse arquivo aponta.

TAR

Juntam (aglutinam) arquivos e diretórios em um só arquivo e depois podem extrair esses mesmos arquivos.

Sintaxe: tar [opções] nome_do_arquivo arquivos_para_serem_compactados

Opções:
-c - cria o arquivo
-f - indica o caminho e nome do arquivo a ser criado
-v - mostra os arquivos a serem incluídos
- t - lista o conteúdo do arquivo aglutinado
-z - compacta utilizando o comando gzip
-j - compacta utilizando o comando bzip2
-x - extrai/descompacta

Exemplo:
Juntar os arquivos filme.mkv, audio.mp3, texto.pdf em um único arquivo
tar -cvf /home/usuario/compactar.tar filme.mkv audio.mp3 texto.pdf

Arquivo compactar.tar criado dentro do diretório /home/usuario/.

PS: Apesar de juntar vários arquivos em um só, eles não estão compactados.

GUNZIP e GZIP

Para compactar os arquivos, utilizamos o gzip. Para descompactarmos, o gunzip. Com esse comando, o arquivo a ser salvo terá a extensão .gz.

Exemplo:
gzip compactar.tar - compacta o arquivo compactar.tar
gunzip compactar.tar.gz - descompacta o arquivo .gz

BZIP2 e BUNZIP2

Realiza a mesma coisa do gzip. A diferença fica por conta do tipo de compressão: o gzip é mais rápido para compactar, enquanto o bzip2 oferece uma compressão melhor. A extensão a ser salva com esse programa será .bz2.

Exemplo:
bzip2 compactar.tar - compacta o arquivo compactar.tar
bunzip2 compactar.tar.bz2 - descompacta o arquivo compactar.tar.bz2

Para simplificar ainda mais, podemos passar os argumentos para o comando tar, para que este, realize a compressão com os compactadores listados acima. Basta que informemos a letra z se quisermos compactar utilizando a compressão do gzip e a letra j para o método de compressão do bzip2.

Exemplo:
Usando o gzip com o tar

tar zcvf compactar.tar.gz compactar.tar - cria o arquivo arquivo compactar.tar.gz
tar xvf compactar.tar.gz - descompacta o arquivo

Usando o bzip2 com o tar

tar cvjf compactar.tar.bz2 compactar.tar - cria o arquivo compactar.tar.bz2
tar xvjf compactar.tar.bz2 - descompacta o arquivo

CPIO (Copy in, Copy out)

Cria, extrai e copia arquivos. Parecido com o tar, ele não compacta arquivos. Apenas junta os mesmos em um único arquivo.

Sintaxe: 
cpio -o [opções] > arquivo - criar
cpio -i < arquivo - extrair
cpio -p destino < arquivo - copiar

Exemplos:
ls *.txt | cpio -ov > bkp.cpio - cria o arquivo bkp.cpio com todos os arquivos .txt dentro do diretório
cpio -t < bkp.cpio - lista os arquivos contidos em bkp.cpio
cpio -i < bkp.cpio - extrai todos os arquivos contidos dentro do arquivo bkp.cpio
find . -depth | cpio -pmdv /home/usuario/CPIO - copia toda a estrutura de diretórios e arquivos do diretório atual para a pasta /home/usuario/CPIO (Se a pasta não existir, ele será criada) 

Outras opções:
-d - cria diretórios quando necessário
-v - modo verbose. Mostra os arquivos sendo adicionados/extraídos/copiados
-m - preserva a hora de modificação dos arquivos

DD

O comando dd serve para realizar cópias byte a byte. Podemos realizar backups, clonar partições e até copiar arquivos.

Sintaxe:
dd [entrada] [saída] [bloco] opções
PS: Bloco é uma unidade que mede o número de bytes lidos, convertidos ou escritos de uma vez. O tamanho padrão de um bloco em sistemas Unix é 512 bytes.

Exemplo:
dd if=dev/sr0 of=/home/usuario/bkp bs=512 conv=noerror
if - input file - lê a partir do arquivo de entrada padrão
of - output file - saída para o arquivo (destino da cópia)
bs - quando se quer ler e gravar a mesma quantidade de bytes

Outras opções:
ibs=n - lê n bytes por vez
obs=n - grava n bytes por vez
conv=lista - realiza as conversões em uma lista
count=n - número de contagens que irá ser copiado. Por exemplo, se tiver count=3, quer dizer que ele vai gravar os 3 primeiros blocos especificados em bs, ou seja, se colocarmos bs=512 count=3, os 3 primeiros 512 bytes serão copiados.

Opções de lista:
Quando usamos a opção conv, podemos definir algumas sub-opções:
noerror - não para de copiar mesmo que ocorram erros
notrunc - não trunca o arquivo de saída
sync - padding em blocos parciais de entrada com nulos (insere nulos no meio fluxos se qualquer leitura não receber blocos completos de dados - especificados pela flag ibs)

FILE GLOBBING (Caracteres Curinga)

Quando realizamos operações com arquivos e diretórios, podemos usar alguns caracteres que tem funções especificas que nos ajudam na hora de fazermos uma filtragem mais precisa. São eles:

* - substituem qualquer sequência de caracteres
? - substitui apenas um caractere
{} - indicam um lista de termos separados por vírgula
[] - indica uma lista de caracteres
! - é usado quando se quer excluir o item pesquisado da busca
\ - não realizam substituição

Alguns exemplos:

ls /dev/sd/dev[2-6] - mostra os dispositivos sda em /dev/ de 2 até o 6
ls /dev/sda* - mostra todos os dispositivos sda's
ls /dev/{sda*,tty*} - mostra todos os dispositivos sda's e tty's.

FIND

Principal comando de localização de arquivos e diretórios.

Sintaxe:
find diretório critério opções

Critérios mais comuns:
-type - tipo do arquivo (d para diretório, f para arquivo, l para link)
-name - nome do arquivo
-iname - não faz diferenciação de minusculas e maiúsculas
-user - dono do arquivo
-atime -n ou +n - arquivo acessado antes ou depois de n (n = 24 horas)
-ctime -n ou +n - arquivo criado antes ou depois de n
-amin -n ou +n - arquivo acessado antes ou depois de n (neste caso, n = quantidade de minutos)
-cmin -n ou +n - arquivo criado antes ou depois de n
-perm modo - arquivo procurado tem permissão especificada igual a modo (r, w, x)
-perm -modo - arquivo procurado tem todas as permissões listadas em modo
-perm +modo - arquivo tem quaisquer permissões listadas em modo.
Exemplos:

find /home/usuario -name "*.jpg" - lista todas os arquivos com a extensão .jpg
find /home/usuario -atime -3 - lista os arquivos acessados nos últimos 3 minutos
find /home -user pablo - lista todos os arquivos que o pablo é dono
find . -perm g=r -type f -exec ls -l {} \; - procura arquivos com apenas permissão de leitura para o grupo

XZ

Ferramenta para compressão de dados, parecido com o gzip e bzip2.

Podemos usar tar para compactar arquivos diretamente usando o xz. Para isso, basta colocarmos a opção 
-J no comando.

Exemplo:

tar -Jcvf arquivo.tar.xz *.mkv - compacta todos os arquivos .mkv
tar -xvJf arquivo.tar.xz - descompacta todos os arquivos.



Comentários