Gerenciar Arquivos e Diretórios no Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as habilidades fundamentais para gerenciar arquivos e diretórios dentro de um ambiente de linha de comando Linux. Você ganhará experiência prática na criação e remoção de estruturas complexas de diretórios usando mkdir e rm, bem como na cópia e movimentação de arquivos e diretórios com cp e mv.

Além disso, este laboratório oferece uma exploração detalhada sobre vinculação de arquivos. Você criará links simbólicos (soft links) e links físicos (hard links) usando o comando ln, analisará o conceito subjacente de inodes e observará os comportamentos distintos de cada tipo de link quando o arquivo de origem é modificado. Isso proporcionará uma compreensão mais profunda de como o sistema de arquivos do Linux organiza e referencia os dados.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 93%. Ele recebeu uma taxa de avaliação positiva de 99% dos alunos.

Criar e Remover Estruturas de Diretórios com mkdir, rmdir e rm

Nesta etapa, você aprenderá como criar e remover diretórios. Organizar arquivos em uma estrutura hierárquica de diretórios é uma tarefa fundamental no Linux. Usaremos o comando mkdir para criar diretórios, rmdir para remover diretórios vazios e rm para remover diretórios e todo o seu conteúdo. Todos os comandos serão executados a partir do seu diretório padrão, ~/project.

Primeiro, vamos criar um diretório simples. O comando mkdir significa "make directory" (criar diretório).

No seu terminal, execute o seguinte comando para criar um diretório chamado cars:

mkdir cars

Para verificar se o diretório foi criado, você pode usar o comando ls -ld. A opção -l fornece um formato de listagem longa e a opção -d lista a entrada do próprio diretório, não seu conteúdo.

ls -ld cars

Você deve ver uma saída semelhante a esta, confirmando a criação do diretório cars. O d no início da string de permissões indica que se trata de um diretório (directory).

drwxr-xr-x 2 labex labex 4096 May 20 10:30 cars

Agora, vamos remover este diretório. O comando rmdir é usado para remover diretórios vazios.

rmdir cars

Verifique a remoção executando o comando ls -ld novamente.

ls -ld cars

Desta vez, você receberá uma mensagem de erro porque o diretório não existe mais. Isso confirma que o rmdir foi bem-sucedido.

ls: cannot access 'cars': No such file or directory

O comando rmdir só funciona em diretórios vazios. E se tivermos uma estrutura de diretórios aninhados? Vamos tentar criar uma estrutura de diretórios pastry/pies/cakes. Para criar diretórios pai conforme necessário, devemos usar a opção -p (parents) com o mkdir.

Execute o seguinte comando:

mkdir -p pastry/pies/cakes

Para visualizar toda a estrutura de diretórios que você acabou de criar, use o comando ls com as opções -l (formato longo) e -R (recursivo).

ls -lR pastry

A saída mostrará o diretório pastry e seus subdiretórios, pies e cakes.

pastry:
total 4
drwxr-xr-x 3 labex labex 4096 May 20 10:35 pies

pastry/pies:
total 4
drwxr-xr-x 2 labex labex 4096 May 20 10:35 cakes

pastry/pies/cakes:
total 0

Agora, vamos tentar remover o diretório pastry usando o rmdir.

rmdir pastry

Por que este comando falhou? O terminal exibirá uma mensagem de erro:

rmdir: failed to remove 'pastry': Directory not empty

Isso ocorre porque o rmdir só pode excluir diretórios vazios, e pastry contém o subdiretório pies.

Para remover um diretório e todo o seu conteúdo (incluindo subdiretórios e arquivos), você deve usar o comando rm com a opção -r (recursivo). Tenha muito cuidado com este comando, pois ele pode excluir dados permanentemente.

rm -r pastry

Este comando não produzirá nenhuma saída se for bem-sucedido. Você pode verificar se o diretório pastry foi completamente removido executando ls -ld pastry novamente, o que deve resultar em um erro de "No such file or directory".

ls -ld pastry

Nesta etapa, você criará um arquivo usando o editor de texto vi e, em seguida, criará um link simbólico para ele. Um link simbólico, também conhecido como symlink ou soft link, é um tipo especial de arquivo que aponta para outro arquivo ou diretório. É semelhante a um atalho em outros sistemas operacionais.

Primeiro, vamos criar um arquivo de texto simples chamado filea usando o vi. O vi é um editor de texto poderoso orientado por tela. Ele possui dois modos principais: modo de Comando e modo de Inserção. Você começa no modo de Comando, onde as teclas pressionadas são interpretadas como comandos. Para digitar texto, você deve entrar no modo de Inserção.

  1. No seu terminal, que deve estar no caminho ~/project, inicie o vi para criar o arquivo filea:
vi filea
  1. Seu terminal agora exibirá a interface do editor vi. Para começar a digitar, você precisa mudar para o modo de Inserção. Pressione a tecla i uma vez. Você poderá ver -- INSERT -- na parte inferior da tela.
  2. Agora, digite o seguinte texto:
This is filea.
  1. Para salvar o arquivo e sair do vi, você deve primeiro retornar ao modo de Comando pressionando a tecla Esc. Em seguida, digite ZZ (mantenha Shift pressionado e aperte Z duas vezes). Este comando salva o arquivo e encerra o editor.

Agora que você está de volta ao prompt de comando, vamos verificar se o arquivo foi criado e contém o conteúdo correto.

Primeiro, liste o arquivo:

ls filea

A saída deve ser simplesmente o nome do arquivo:

filea

Em seguida, exiba seu conteúdo usando o comando cat:

cat filea

A saída deve corresponder ao texto que você inseriu:

This is filea.

Agora, vamos criar um link simbólico. Criaremos um link chamado fileb que aponta para o nosso arquivo original, filea. O comando é ln -s <source_file> <destination_link>.

ln -s filea fileb

Para testar os resultados, use o comando ls -il. A opção -i mostra o número do inode, que é um identificador exclusivo para um arquivo ou diretório no sistema de arquivos.

ls -il file[ab]

Examine a saída cuidadosamente.

131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea

Observe alguns pontos-chave:

  • Tipo de Arquivo: A string de permissões para filea começa com -, indicando um arquivo regular. A string para fileb começa com l, indicando um link simbólico (link).
  • Ponteiro do Link: A saída mostra claramente fileb -> filea.
  • Números de Inode: Observe a primeira coluna. Os números de inode para filea e fileb são diferentes. Por quê? Porque um link simbólico é um arquivo separado que simplesmente armazena o caminho para o arquivo de destino. Ele não é o arquivo em si, portanto, recebe seu próprio inode exclusivo.

Finalmente, vamos ver se conseguimos ler o conteúdo através do link.

cat fileb

A saída é o conteúdo de filea:

This is filea.

Este é o comportamento esperado. Quando você executa uma operação como cat em um link simbólico, o sistema segue automaticamente o link até o arquivo de origem e executa a operação nele.

Nesta etapa, você criará um link físico (hard link) e aprenderá como ele difere do link simbólico que você criou anteriormente. Ao contrário de um link simbólico, que é um ponteiro para um nome de arquivo, um link físico é outro nome para o próprio arquivo. Ambos os nomes apontam diretamente para os mesmos dados no disco, que são identificados por um número exclusivo chamado inode.

Continuaremos trabalhando com os arquivos filea e fileb da etapa anterior no diretório ~/project.

Primeiro, vamos criar um link físico chamado filec que aponta para o mesmo inode que filea. Para fazer isso, usamos o comando ln sem a opção -s.

ln filea filec

Agora, vamos visualizar o conteúdo de todos os três arquivos: o original filea, o link simbólico fileb e o novo link físico filec.

cat filea
cat fileb
cat filec

Você verá o mesmo conteúdo impresso três vezes, o que é esperado.

This is filea.
This is filea.
This is filea.

A real diferença fica clara quando inspecionamos as propriedades dos arquivos. Use o comando ls -il novamente para visualizar os números de inode e outros detalhes de todos os três arquivos.

ls -il file[a-c]

A saída será algo parecido com isto. Preste muita atenção à primeira e à segunda colunas.

131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filec

Vamos analisar esta saída:

  • Números de Inode (Coluna 1): Observe que filea e filec possuem o exato mesmo número de inode (ex: 131075). Esta é a característica definidora de um link físico. Eles não são arquivos separados; são dois nomes diferentes apontando para os dados idênticos do arquivo no disco. O link simbólico fileb possui seu próprio inode exclusivo.
  • Contagem de Links (Coluna 2): Observe o número para filea e filec. Agora é 2. Este número é a contagem de links físicos (hard link count), e ele rastreia quantos nomes (links físicos) apontam para este único inode. Quando você criou filec, a contagem de links para este inode aumentou de 1 para 2.
  • Tipo de Arquivo (Coluna 1 das permissões): Note que filec é listado como um arquivo regular (suas permissões começam com -), assim como filea. Ele não é um tipo de link especial como fileb (que começa com l).

Nesta etapa, você observará as diferenças críticas de comportamento entre links simbólicos e links físicos quando o arquivo de origem original é removido e depois recriado. Isso consolidará sua compreensão de como cada tipo de link funciona. Continuaremos usando filea, fileb e filec no diretório ~/project.

Primeiro, vamos remover o arquivo original, filea.

rm filea

Agora, vamos examinar o status dos nossos três arquivos. Use o comando ls -l. Você provavelmente verá um erro para filea porque ele não existe mais, o que é esperado.

ls -l file[a-c]

A saída será muito reveladora:

ls: cannot access 'filea': No such file or directory
lrwxrwxrwx 1 labex labex 5 May 20 10:41 fileb -> filea
-rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Link Simbólico fileb: O link agora está "quebrado". Ele ainda aponta para o nome filea, mas esse nome não corresponde mais a um arquivo existente. Em muitos terminais, o nome do arquivo fileb ficará colorido em vermelho para indicar este estado quebrado. Se você tentar executar cat fileb, receberá um erro.
  • Link Físico filec: O arquivo filec não foi afetado. Sua contagem de links (a segunda coluna) simplesmente diminuiu de 2 para 1, mas o arquivo e seus dados ainda estão intactos. Isso ocorre porque a remoção de filea removeu apenas um dos nomes que apontavam para o inode; os dados não são excluídos até que a contagem de links caia para zero. Você pode provar isso visualizando seu conteúdo:
cat filec

A saída ainda é o conteúdo original:

This is filea.

Agora, vamos recriar o filea, mas com um conteúdo diferente. Use o vi para criar um novo arquivo chamado filea.

  1. Inicie o vi: vi filea
  2. Pressione i para entrar no modo de Inserção.
  3. Digite o novo conteúdo: This is the new filea.
  4. Pressione Esc para retornar ao modo de Comando e digite ZZ para salvar e sair.

Com o novo filea no lugar, vamos inspecionar todos os três arquivos novamente com ls -il.

ls -il file[a-c]

A saída mostrará uma nova situação:

131080 -rw-r--r-- 1 labex labex 20 May 20 11:05 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Novo filea: Um novo arquivo filea existe, mas observe que seu número de inode (ex: 131080) é diferente do inode de filec (ex: 131075). Este é um arquivo completamente novo que por acaso tem o mesmo nome do antigo.
  • Link Simbólico fileb: O link não está mais quebrado! Ele aponta automaticamente para o novo arquivo chamado filea.
  • Link Físico filec: filec permanece inalterado. Ele ainda aponta para o inode original e contém os dados originais.

Finalmente, vamos verificar o conteúdo de todos os três arquivos para ver o resultado.

cat filea
cat fileb
cat filec

A saída demonstra claramente a diferença:

This is the new filea.
This is the new filea.
This is filea.

O link simbólico fileb seguiu o nome até o novo arquivo, enquanto o link físico filec manteve sua conexão com os dados originais.

Copiar e Mover Arquivos com cp e mv

Nesta etapa final, você aprenderá a usar os comandos cp (copy) e mv (move), que são essenciais para gerenciar arquivos. O comando cp cria uma duplicata de um arquivo ou diretório, enquanto o comando mv renomeia um arquivo/diretório ou o move para um local diferente.

Vamos começar limpando os arquivos das etapas anteriores para ter um espaço de trabalho limpo. Todos os comandos serão executados a partir do seu diretório ~/project.

rm filea fileb filec

Copiando Arquivos com cp

O comando cp cria uma cópia nova e independente de um arquivo. O novo arquivo terá seu próprio inode.

  1. Primeiro, crie um arquivo simples para trabalhar usando o comando touch. O touch cria um arquivo vazio se ele não existir.
touch source_file
  1. Agora, vamos visualizar suas propriedades, prestando atenção ao número do inode (a primeira coluna).
ls -i source_file

A saída mostrará um número de inode exclusivo para este arquivo.

131081 source_file
  1. Em seguida, copie o source_file para um novo arquivo chamado copied_file.
cp source_file copied_file
  1. Agora, liste as propriedades de ambos os arquivos.
ls -i source_file copied_file

Você verá que eles são dois arquivos separados com números de inode diferentes.

131082 copied_file
131081 source_file

Movendo e Renomeando Arquivos com mv

O comando mv é versátil. Se o destino for um novo nome de arquivo no mesmo diretório, ele renomeia o arquivo. Se o destino for um diretório, ele move o arquivo para dentro dele. Ao renomear ou mover um arquivo dentro do mesmo sistema de arquivos, o número do inode não muda; o comando simplesmente atualiza o nome do arquivo ou o ponteiro de localização.

  1. Vamos renomear source_file para renamed_file.
mv source_file renamed_file
  1. Verifique o inode do arquivo recém-nomeado.
ls -i renamed_file

Você notará que o número do inode (ex: 131081) é o mesmo do source_file original. O arquivo em si não foi alterado, apenas seu nome.

131081 renamed_file
  1. Agora, vamos mover este arquivo. Primeiro, crie um diretório de destino.
mkdir move_destination
  1. Mova o renamed_file para dentro do diretório move_destination.
mv renamed_file move_destination/
  1. Verifique se o arquivo está agora dentro do diretório e cheque seu inode novamente.
ls -i move_destination/renamed_file

O número do inode permanece o mesmo, confirmando que o arquivo foi movido, não copiado.

131081 move_destination/renamed_file

Lidando com Sobrescritas

Por padrão, muitos sistemas criam um alias de cp para cp -i para evitar que você sobrescreva acidentalmente um arquivo existente. O -i significa "interactive" (interativo).

  1. Vamos tentar copiar o copied_file sobre o arquivo dentro do nosso diretório move_destination.
cp -i copied_file move_destination/renamed_file
  1. Devido ao alias -i, você será solicitado a confirmar.
cp: overwrite 'move_destination/renamed_file'?

Digite y e pressione Enter para confirmar a sobrescrita. Se quisesse cancelar, você digitaria n.

Resumo

Neste laboratório, você aprendeu os comandos fundamentais para gerenciar arquivos e diretórios em um ambiente Linux. Você praticou a criação de estruturas de diretórios usando mkdir, incluindo a opção -p para diretórios pai, e a remoção deles com rmdir para diretórios vazios e rm para os não vazios. Você também criou arquivos usando o editor vi e foi introduzido ao conceito de vinculação de arquivos.

O núcleo do laboratório concentrou-se na criação e análise dos dois tipos de links: links simbólicos (soft links) com ln -s e links físicos (hard links) com ln. Você observou suas principais diferenças examinando os inodes e notando como cada link se comporta quando o arquivo de origem é modificado ou excluído. Finalmente, você usou o comando cp para criar cópias independentes de arquivos e o comando mv para mover ou renomear arquivos e diretórios, completando uma visão abrangente das operações essenciais de gerenciamento de arquivos.