Comandos para Manipulação de Arquivos
Um tutorial sobre vários dos comandos necessários para lidar com arquivos e diretórios no Linux.
Uma das coisas essenciais ao usar um sistema operacional é saber como lidar os arquivos e diretórios dentro dele. Em sistemas operacionais como o Linux, mexer com arquivos é essencialmente tudo o que você vai fazer ao configurar o sistema e seus serviços.
pwd – Exibe o diretório atual
Sintaxe: $ pwd
Mostra de forma simples em qual diretório o usuário está localizado no momento.
cd – Navegando entre diretórios
Sintaxe: $ cd [nome_do_diretório]
Muda o diretório atual.
Exemplos:
$ pwd /usr/games $ cd ~ $ pwd /home/eitch
No exemplo acima, estávamos no diretório /usr/games e com um simples cd para o diretório ~, fomos para o diretório HOME (/home/eitch). Neste caso utilizamos o ~ que é uma espécie de atalho para o diretório HOME do usuário. Alguns destes “atalhos”:
. (ponto) Diretório atual .. (dois pontos) Diretório anterior (um nível acima) ~ (til) Diretório HOME do usuário / (barra) Raiz do sistema - (hífen) Último diretório (Voltar)
Se você deseja ir para um diretório que está na raiz diretamente, usa-se a / antes, exemplo:
$ pwd /usr/local/bin $ cd /etc/rc.d $ pwd /etc/rc.d $ cd - $ pwd /usr/local/bin
Ao utilizar uma barra antes do diretório, especificamos o caminho absoluto do diretório, ou seja, todo o seu caminho desde a raiz. Se não colocamos a barra para especificar a raíz, quer dizer que estamos especificando um caminho relativo, ou seja, de acordo com o diretório atual. Em outras palavras, se eu estou no diretório /home/eitch, os dois comandos a seguir farão a mesma coisa, só que um usando o caminho relativo e o outro o caminho absoluto:
$ cd .. $ cd /home
ls – Listar arquivos
Sintaxe: $ ls [opções] [arquivo/diretório]
Lista os arquivos e diretórios. Se executarmos apenas o comando ls sozinho, ele mostrará todos os arquivos existentes no diretório atual. Há também alguns parâmetros extras:
-l Lista os arquivos em formato detalhado. -a Lista os arquivos ocultos (que começam com um .) -h Exibe o tamanho num formato legível (combine com -l) -R Lista também os subdiretórios encontrados
Exemplo de uma listagem detalhada:
$ ls -l total 9916 drwxrwxr-x 5 hugo hugo 1302 Aug 16 10:15 diretorio -rw-r--r-- 1 hugo hugo 122631 Jul 12 08:20 Database.pdf -rw-r--r-- 1 hugo hugo 2172065 Jul 12 08:20 MySQL.pdf -rw-r--r-- 1 hugo hugo 2023315 Jul 12 08:20 PHP.pdf
No exemplo acima, os arquivos e diretórios são listados com outras informações antes de seus nomes. Estas informações são separadas por um ou mais espaços (para uma melhor formatação) e apresentam os seguintes dados: tipo de arquivo e permissões, número de hard links, usuário dono, grupo dono, tamanho, data de modificação e por último o nome do arquivo.
Podemos ver acima que a segunda linha (diretorio) inicia com a letra d, o que significa que ele é um diretório, ao contrário dos outros arquivos que não contém nenhuma letra (-) e por isso são arquivos comuns. É possível identificar o tipo de arquivo desta maneira e as letras podem ser: b para arquivo especial de bloco, c para arquivo especial de caracter, d para diretório, l para link simbólico, p para um FIFO, s para socket.
Podemos também usar no ls o que chamamos de wildcards (caracteres coringa), ou seja, caracteres que substituem outros.
Exemplo, listar todos os arquivos que têm a extensão .txt:
$ ls *.txt debian-install.txt manualito.txt named.txt plip.txt seguranca.txt ipfw.txt mouse.txt placa_de_video.txt rede.txt sis.txt
O wildcard neste caso é o “*”, que representa “tudo”.txt. Existem outros wildcards, como por exemplo o ponto de interrogação “?”, que substitui apenas 1 caractere. Exemplo:
$ ls manual?.txt manual1.txt manual2.txt manual3.txt manualx.txt manualP.txt
Ou ainda os colchetes, que substituem uma faixa de caracteres:
$ ls manual[3-7].txt manual3.txt manual4.txt manual6.txt manual7.txt
mkdir – Cria um diretório
Sintaxe: $ mkdir <nome_do_diretório>
Cria um diretório. Exemplo, criar um diretório dentro do HOME do usuário:
$ mkdir ~/paginas
rmdir – Remove um diretório vazio
Sintaxe: $ rmdir <nome_do_diretorio>
Apaga um diretório que esteja vazio.
Exemplo, apagando o diretório /tmp/lixo apenas se ele estiver vazio:
$ rmdir /tmp/lixo
Para apagar um diretório com seu conteúdo, usa-se o comando rm.
cp – Cópia de arquivos e diretórios
Sintaxe: $ cp [opções] <arquivo_origem> <arquivo_destino>
Copia arquivos e diretórios. Como parâmetros, temos:
-i Modo interativo. Pergunta se você quer sobrescrever ou não (confirmações) -v Mostra o que está sendo copiado. -R Copia recursivamente (diretórios e subdiretórios)
Exemplo, copiando o arquivo brasil.txt para livro.txt, com a opção de modo interativo:
$ cp -i brasil.txt livro.txt cp: sobrescrever `livro.txt'?
Como o arquivo livro.txt já existia, o comando pergunta se quer sobrescrever, responda y (sim) ou n (não).
Copiar o diretório /home/ftp e todo seu conteúdo (incluindo seus subdiretórios) para /home/ftp2:
$ cp -R /home/ftp /home/ftp2
mv – Move arquivos e diretórios
Sintaxe: $mv <arquivo_origem> <arquivo_destino>
Move um arquivo para outro lugar. Ele também é usado para renomear um arquivo.
Exemplo, renomear o arquivo industria.txt para fabrica.txt:
$ mv industria.txt fabrica.txt
Mover o arquivo industria.txt para /home/usuario com o mesmo nome:
$ mv industria.txt /home/usuario
rm – Remove arquivos e diretórios
Sintaxe: $ rm [opções] <arquivo>
Este comando apaga definitivamente o arquivo ou diretório. Exemplo:
$ rm arquivo.bin
Para apagar um diretório com todo seu conteúdo, usa-se a opção -r:
$ rm -r /tmp/lixo
Cuidado! O comando “rm -rf” é muito perigoso, use-o com cuidado. Ele remove um diretório e todo seu conteúdo sem perguntar. Por exemplo, fazer isso na raiz não seria uma boa idéia. find – Procura arquivos
Sintaxe: $ find <diretorio> [-name nomedoarquivo]
Procura por arquivos no diretório especificado. Em seu uso mais simples, ele procura pelos nomes dos arquivos, mas pode também procurar por tipos, permissões, última modificação, entre outros.
Exemplo, procurar o arquivo nota.txt dentro do diretório /home/eitch:
$ find /home/eitch -name nota.txt -print
Procurar por todos os diretórios dentro do /etc:
$ find /etc -type d -print
Procurar por todos os arquivos que foram modificados nos últimos 2 dias:
$ find / -mtime 2 -print
Procurar por arquivos que podem ser escritos por todo mundo:
$ find / -perm -222
Os wildcards também podem ser usados, por exemplo, procurar por todos os arquivos que começam com o nome de documento e terminam com .odp:
$ find /home/eitch -name documento*.odp
ln – Cria links entre arquivos
Sintaxe: $ ln -s <arquivo_origem> [link simbólico]
Usado para gerar links simbólicos, ou seja, links que se comportam como um arquivo ou diretório, mas são apenas redirecionadores que mandam seu comando para outro arquivo ou diretório.
Exemplo: Criar um link em /tmp/apostila-linux, apontando para o diretório /apostila:
$ ln -s /apostila /tmp/apostila-linux
Também é utilizado para criar links físicos (hard-links). Um link físico funciona não como um atalho, mas como um arquivo apontando para um mesmo lugar no disco e funciona apenas em arquivos. Por depender de uma posição física no disco, só pode ser utilizado em uma mesma partição. Exemplo:
$ ln arquivo linkdoarquivo
cat – Exibe o conteúdo de um arquivo
Sintaxe: $ cat <arquivo>
Mostra o conteúdo de um arquivo, ou faz uma cópia deste arquivo, ou uma junção.
Exemplo: Mostrar o conteúdo de /home/eitch/contato:
$ cat /home/eitch/contato
Hugo Cisneiros hugo@devin.com.br http://www.devin.com.br
O cat também pode servir como redirecionador para outro arquivo. Os caracteres especiais de redirecionadores são utilizados para este fim.
O “>” redireciona a saída de um comando para um arquivo. Como o comando cat mostra exatamente o conteúdo de um arquivo, isso seria equivalente a fazer uma cópia do arquivo:
$ cat contato1 > contato2
O “>>” acrescenta a saída de um comando à um arquivo, mantendo seu conteúdo anterior:
$ cat contato1 >> contato3
Um outro exemplo divertido é tocar sons com o cat. Redirecionando o conteúdo de um arquivo para o dispositivo de som reproduz o som pelos alto-falantes e vice-versa. Para testar este caso, primeiro gravamos com um microfone o som:
$ cat gravacao.au < /dev/audio
O comando acima direcionou o dispositivo de som “no caso, a captura por microfone” para o arquivo gravacao.au. Agora escute o som gravado com o comando:
$ cat gravacao.au > /dev/audio
Os redirecionadores podem ser utilizados em todos os outros comandos na shell.
head, tail – Mostra o começo e fim do arquivo
Sintaxe: $ head [opções] <arquivo> Sintaxe: $ tail [opções] <arquivo>
Talvez pelo arquivo poder ser muito grande, as vezes é necessário apenas visualizar parte dele. Em arquivos de log por exemplo, visualizar o final para ver os últimos acontecimentos é uma prática comum.
O comando head, como o nome diz (cabeçalho), mostra o começo de um arquivo. O comando tail (calda) mostra o final de um arquivo. Por padrão, ambos comandos mostram as 10 linhas correspondentes.
Por exemplo, exibindo as 10 últimas linhas do arquivo /var/log/messages:
# tail /var/log/messages
Ou as 10 primeiras linhas do /etc/profile:
$ head /etc/profile
Quando utilizado o parâmetro -n, podemos especificar a quantidade de linhas, ao invés de 10. O comando a seguir mostrará as 50 últimas linhas do arquivo /var/log/messages:
# tail -n 50 /var/log/messages
Quanto utilizado com o parâmetro -f, o comando tail mostra as linhas mas não para, continua mostrando as linhas na medida que o arquivo é atualizado. Útil para visualizar logs em constante atualização. Exemplo:
# tail -f /var/log/httpd/access_log
more, less – Visualiza arquivos por páginas
Sintaxe: $ more <arquivo> Sintaxe: $ less <arquivo>
Parecidos com o cat, mas ao invés de jogarem todo o conteúdo na tela de uma vez só, criam uma espécie de paginação.
No comando more, a tecla ESPAÇO vai passando as páginas, até quando o fim do arquivo chega e o o comando finaliza.
No less, a paginação funciona como em uma página de manual (na verdade, a visualização das páginas de manual é feita com o less): é possível utilizar as setas para navegar no documento para cima e para baixo, utilizar as teclas PgUp e PgDown para paginar, o comando /pesquisa para pesquisar por uma palavra no documento e a tecla q para sair.
file – Indica o tipo de arquivo
Sintaxe: $ file <arquivo>
Identifica o tipo de arquivo ou diretório indicado pelo usuário conforme os padrões do sistema operacional.
Há varios tipos de retorno, exemplos: ASCII text, C Program source, directory, ELF-Executable, data, Bourn-again shell-script, JPEG Image File, entre outros.
Exemplo:
$ file linux.txt ASCII Text
touch – Muda timestamps
Sintaxe: $ touch [opções] <arquivo>
Quando um arquivo é criado, o sistema de arquivos reserva para ele algumas informações que chamamos de timestamps: hora do último acesso e hora da última modificação. O comando touch muda estes valores.
Sem argumentos, o touch muda os dois atributos para a hora atual. Quando não existe o arquivo, o comando cria um novo arquivo vazio. Este parece ser o método preferido de criação de arquivos vazios.



