Os comandos para manipular arquivos e diretórios no Linux consistem em mover, remover, copiar e criar os itens utilizando a interface CLI (command-line interface). Alguns dos comandos mais comuns são: rm, mv, cp e mkdir.
Quem já conhece o Linux em nível superficial percebeu que a recorrência do uso de comandos no terminal é muito maior em relação aos populares Mac OS e Windows. São múltiplas as razões para usuários e administradores recorrerem ao terminal, sendo as principais delas:
- o terminal é necessário para instalar programas; e
- é a camada que mais aproxima o usuário do kernel.
Ao longo da série de publicações disponíveis no blog sobre o assunto, foram apresentados vários tipos de ferramentas e comandos úteis para gerenciar usuários e serviços, entre outros para lidar com processos de redes, downloads, compactação etc.
Desta vez, vou mostrar como utilizá-los a fim de manipular arquivos e diretórios no Linux; portanto, aprenderemos a fazer tarefas como mover, remover, copiar e criar tais elementos apenas digitando instruções no terminal. Vamos praticar? Então confira, abaixo, cinco comandos básicos.
1. mkdir
O comando mkdir é um utilitário do Linux que nos possibilita criar diretórios. Com ele, podemos rapidamente gerar múltiplos diretórios de uma só vez e configurar as suas respectivas permissões.
Vale frisar que o usuário que aciona o mkdir precisa ter permissão de acesso ao diretório pai (parent directory); do contrário, o sistema rejeitará a solicitação enviando a mensagem “permission denied”.
A sintaxe do comando é simples; primeiramente, digita-se mkdir no terminal, seguido do caminho do diretório a ser criado. Além disso, a ferramenta oferece algumas opções que podem ser aplicadas no processo, sendo elas:
-m (–mode=MODE): usada a fim de estabelecer regras e permissões ao diretório criado, de modo similar ao comando chmod;
-p (–parents): a opção -p habilita a criação de diretórios parentes quando necessário;
-v (–verbose): imprime em tela uma mensagem para cada diretório criado;
-Z: ajusta o contexto de segurança SELinux de cada diretório criado para o seu tipo padrão.
Temos outras opções à disposição além dessas mencionadas acima, como –version (exibe a versão do mkdir), –help (apresenta as opções existentes) e –context (faz o mesmo que a opção -Z ao ajustar o contexto do diretório com o SELinux).
Agora que já conhecemos um pouco os recursos oferecidos pelo mkdir, vejamos, abaixo, alguns exemplos de uso.
Criando um diretório simples
A forma mais simples de se utilizar o mkdir é criando um diretório sem nenhuma especificação além do próprio caminho. Exemplo:
mkdir Music
mkdir ~/Music
# isso fará com que o item seja criado no diretório em que você está navegando no momento
Criando uma sequência de subdiretórios
Agora nós vamos utilizar a opção -p a fim de criar subdiretório dentro do diretório Music, expandindo para vertentes musicais e outros detalhes que ajudem na organização dos arquivos. Exemplo:
mkdir -p Music/Rock/Punk/Clash
Por meio do comando o usuário consegue criar quantos diretórios desejar e sem interligá-los, necessariamente. Veja:
mkdir -p Music/Rock/Indie Music/80s/A-Ha Music/Rock/Nacional/Nação Zumbi Music/Rap/2Pac
ou
cd Music/Rock
mkdir -p ~/Punk Pop Metal Indie Hardcore Classic Classic/60s Classic/70s
Comparado ao método convencional via interface gráfica, por exemplo, o mkdir nos ajuda a economizar bastante tempo com a organização de diretórios.
Aplicando permissões aos diretórios recém-criados
Suponha-se que o computador no qual criamos as pastas acima seja compartilhado, sendo que cada usuário tem as suas próprias credenciais de acesso, e todos devem ter acesso aos conteúdos (no caso, músicas). Vamos usar a opção -m e conceder as permissões necessárias?
mkdir -m a=rwx Music
Note que há presença de outros elementos fora o m. Começando pelo a (all), este é um parâmetro que estabelece a aplicação das permissões a todos os usuários da máquina. Já as letras r, w e x significam read, write e execute, respectivamente — em outras palavras, elas são as permissões para leitura, escrita e execução dos arquivos presentes no diretório.
2. rmdir
Quando desejamos remover diretórios, um dos comandos que podemos utilizar é o rmdir, porém existe um critério impeditivo para que ele funcione: os diretórios a serem removidos não devem conter arquivos ou subdiretórios.
Logo, se você tentar deletar o diretório “Rock” que criamos nos exemplos anteriores, aparecerá a mensagem de erro <failed to remove ‘Rock’: Directory not empty>. Por mais que isso torne o comando, digamos, “menos eficiente”, dependendo do caso é possível contornar o problema.
Quando a árvore de diretórios é composta por muitos subdiretórios, é necessário especificar as últimas pastas, primeiramente, usando a opção p (cuja função é a mesma do mkdir), deixando o diretório parent para o final de modo a esvaziá-lo. Vamos a um breve exemplo:
cd Music rmdir -p Rock/Classic/60s Rock/Classic/70s Rock/Classic Rock Rock
É bem provável que tenham surgido mensagens de erro após a operação acima, correto? Em contrapartida, os diretórios desapareceram dali, não é mesmo? Isso significa que fomos efetivos. Mas como evitar as mensagens? Elas podem ser ignoradas ao digitarmos –ignore-fail-on-non-empty. Exemplo:
rmdir -p --ignore-fail-on-non-empty Rock/Classic/60s Rock/Classic/70s Rock/Classic Rock Rock
Cabe uma observação: este não é o único jeito de remover diretórios e, mais do que isso, o rmdir não é o comando mais utilizado para a tarefa.
3. rm
O comando rm é próprio para remoção de objetos em um sistema baseado em Linux ou Unix. Isso significa que tanto dados quanto os pontos de referência a eles no sistema de arquivos, como um link simbólico. Até por isso, o item em questão tem de ser especificado com os detalhes necessários para que seja desassociado incorretamente.
Tomar essa precaução é muito importante quando se decide utilizar o comando rm, justamente porque, ao ser deletado, , o espaço liberado passa a ficar disponível para armazenar dados futuros; portanto o arquivo removido se torna inacessível e, então, irrecuperável. Não há nada a fazer para reciclá-lo quando isso acontece.
Se lembra do que falei há pouco sobre o rmdir não ser o comando mais utilizado para remover diretórios? Pois então, o rm, embora não o faça por padrão, é bastante utilizado para isso, mais precisamente a sua correspondência no sistema de arquivos.
Porém, antes de aprendermos a realizar essa e outras tarefas com o rm, vamos ver as opções que a ferramenta oferece?
Opções disponíveis no comando rm
Digitando rm –help, uma série de informações são exibidas na tela, dentre as quais quero destacar:
-f (–force): ignora arquivos e argumentos inexistentes, sem prompt;
-r, -R (–recursive): remove diretórios e respectivos conteúdos recursivamente;
-d, –dir: remove diretórios vazios;
-v (–verbose): explique as ações promovidas com o uso do comando rm;
–preserve-root: não remove o diretório root;
–one-file-system: ao remover uma hierarquia recursivamente, o comando pula qualquer diretório que se encontre em um sistema de arquivos diferente daquele argumentado.
Com as informações acima é possível termos uma noção de como aplicar o comando rm de maneira mais efetiva e prudente — isto é, sem correr riscos com a remoção, como a exclusão do diretório root, embora esta opção seja padrão justamente para não acontecer um desastre do tipo.
Exemplos de uso do comando rm
Depois da introdução e da apresentação de algumas opções, chegou a hora de praticar o comando rm; abra o seu terminal e, de preferencia, crie arquivos e diretórios especialmente para testes. Vamos começar?
Removendo arquivos
O processo de remoção de arquivo é bastante simples. A sintaxe consiste no próprio comando rm acompanhado da opção e o item a ser excluído. Exemplo:
rm arquivo.txt
Perceba que a função básica nem mesmo requer a escolha de uma opção. Além disso, o comando também não retornará nenhuma mensagem a menos que ocorra um erro (arquivo ou diretório inexistente, por exemplo).
Contudo, se o arquivo tem o nome iniciado por um traço / dash (“-“), é preciso evitar que o caractere faça com que a ferramenta interprete-o como uma opção. Para isso, digite um traço duplo ou ponto + barra (“./”) antes de declarar o arquivo. Exemplo:
rm -- -arquivo.pdf
ou
rm ./-arquivo.pdf
Uma alternativa a isso é declarar o caminho para o referido arquivo. Exemplo:
rm /Documents/Downloads/-arquivo.pdf.
Removendo múltiplos arquivos
Agora vejamos uma situação de múltiplos arquivos. Suponha-se que os itens existentes em um diretório sejam listados com o comando ls.
ls
draft.doc hello-world.txt programming_in_lua.pdf xyz.txt
Dentre os elementos acima, há um arquivo que não é descartável, mas não faço questão de manter os demais. Então vou simplesmente declarar:
rm draft.doc hello-world.txt xyz.txt
Pronto. Com isso, excluí o que desejava e mantive um ótimo livro no disco rígido.
Excluindo um diretório
Como remover diretórios com o comando rm sendo que, por padrão, ele não o faz? Existem duas maneiras de prosseguir, cada uma adequada a uma situação; a primeira delas é a remoção de correspondências dos diretórios e os conteúdos que eles armazenam.
rm -r /diretório/arquivos/dados
Estando o diretório vazio (após o uso do comando a fim de limpar a pasta, por exemplo), use a opção -d e, então, o diretório será definitivamente removido.
4. mv
O comando mv é utilizado no Linux para mover e renomear objetos, os quais podem ser arquivos e diretórios. É, sem dúvidas, das ferramentas mais comuns entre os usuários acostumados a navegar pelo terminal.
A sua sintaxe é muito similar a tudo que vimos até aqui; o comando é acompanhado, geralmente, de uma opção e, necessariamente, do item a ser movido e do diretório de destino. Exemplo:
mv -f arquivo.png /Pictures/Projects/Design
A instrução acima executa a transferência do arquivo de imagem (arquivo.png) do local atual para o diretório /Pictures/Projects/Design sem prompt antes de sobreposição (opção -f), ou seja, se o elemento está sendo gravado por cima de outro com o mesmo nome e mesma extensão, a ferramenta prosseguirá sem solicitar confirmação.
O mesmo procedimento pode ser feito com múltiplos arquivos e com um único comando. Para isso, digite os nomes dos dados que deseja mover e declare o diretório destino. Exemplo:
mv texto.txt script.sh book.pdf song.mp3 /Documents/Files
Simples, não é mesmo?
Moção de diretórios
A lógica é a mesma quanto a mover diretórios no Linux; aplicando a mesma sintaxe, basta digitarmos o comando mais a opção, se houver, e os diretórios de origem e destino, respectivamente. Vejamos um breve exemplo:
mv /Documents/Projects/Design Works/Design
Renomeação de arquivos e diretórios
Como eu disse no início do tópico, o comando mv tem a capacidade de renomear arquivos, também. Supondo que o usuário pretenda mover o item ciente de que no diretório destino existe outro com o mesmo nome, conforme o exemplo anterior, mas não queira substituí-lo; basta ele fazer o seguinte:
mv arquivo.png /Pictures/Projects/Design/logotipo_3.png
Nesse caso, o uso da opção -f é desnecessário, pois o arquivo foi renomeado antes de ser movido para a nova pasta.
Já a renomeação de diretórios é similar à moção, porém o destino é até então inexistente, sendo ele criado durante o processo de modo que a pasta de origem se torna o seu subdiretório. Exemplo:
mv /Documents/Projects /Documents/Works
5. cp
O comando cp é próprio para cópia de arquivos e diretórios. Um recurso bem legal do cp, considerando o fator CLI, é a cópia de um ou mais itens com opção de cópias de segurança (backups) e preservação das suas características.
Falando em características, os comandos elencados neste artigo têm a sintaxe em comum, isto é, comando + opção (se houver) + objeto, o que não é diferente quando copiamos arquivos e diretórios no terminal usando o cp. Por exemplo, se o usuário deseja copiar um ou mais arquivos:
ls foo.rar txt.doc book.pdf ubuntu.iso cp foo.rar ubuntu.iso
ou
cp foo.rar ubuntu.iso /Diretório/Destino
# nesse caso, copiamos os arquivos para outro diretório
Se a intenção é copiar um diretório, pode-se aplicar a opção -r ou -R, que aciona a recursividade, e declarar os diretórios de origem e destino. Exemplo:
cp -r /home/mp3 /Documents/Music
Quer fazer um backup dos arquivos enquanto eles são copiados para o endereço de destino? Para isso, temos a opção –backup=, que deve ser acompanhada de uma opção de backup :— normalmente, usa-se o controle “simple”. Exemplo:
cp --backup=simple /home/mp3/song_2.mp3 /Documents/Music/Blur
Encerramos aqui mais um artigo onde ensinamos comandos básicos de terminal; neste conteúdo em especial, foram apresentados comandos para manipular diretórios e arquivos no Linux, imprescindíveis a profissionais que gerenciam redes e sistemas.
Quer se aprofundar ainda mais em Linux? Aproveite para conhecer os cursos oferecidos na página Profissionais Linux!