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.
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
Criar Arquivos e Links Simbólicos com vi e ln -s
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.
- No seu terminal, que deve estar no caminho
~/project, inicie ovipara criar o arquivofilea:
vi filea
- 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 teclaiuma vez. Você poderá ver-- INSERT --na parte inferior da tela. - Agora, digite o seguinte texto:
This is filea.
- Para salvar o arquivo e sair do
vi, você deve primeiro retornar ao modo de Comando pressionando a teclaEsc. Em seguida, digiteZZ(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
fileacomeça com-, indicando um arquivo regular. A string parafilebcomeça coml, 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
fileaefilebsã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.
Criar e Analisar Links Físicos com ln e Inodes
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
fileaefilecpossuem 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ólicofilebpossui seu próprio inode exclusivo. - Contagem de Links (Coluna 2): Observe o número para
fileaefilec. 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ê crioufilec, 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 comofilea. Ele não é um tipo de link especial comofileb(que começa coml).
Observar o Comportamento dos Links Após Modificar o Arquivo de Origem
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 nomefilea, mas esse nome não corresponde mais a um arquivo existente. Em muitos terminais, o nome do arquivofilebficará colorido em vermelho para indicar este estado quebrado. Se você tentar executarcat fileb, receberá um erro. - Link Físico
filec: O arquivofilecnã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 defilearemoveu 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.
- Inicie o
vi:vi filea - Pressione
ipara entrar no modo de Inserção. - Digite o novo conteúdo:
This is the new filea. - Pressione
Escpara retornar ao modo de Comando e digiteZZpara 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 arquivofileaexiste, mas observe que seu número de inode (ex:131080) é diferente do inode defilec(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 chamadofilea. - Link Físico
filec:filecpermanece 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.
- Primeiro, crie um arquivo simples para trabalhar usando o comando
touch. Otouchcria um arquivo vazio se ele não existir.
touch source_file
- 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
- Em seguida, copie o
source_filepara um novo arquivo chamadocopied_file.
cp source_file copied_file
- 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.
- Vamos renomear
source_filepararenamed_file.
mv source_file renamed_file
- 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
- Agora, vamos mover este arquivo. Primeiro, crie um diretório de destino.
mkdir move_destination
- Mova o
renamed_filepara dentro do diretóriomove_destination.
mv renamed_file move_destination/
- 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).
- Vamos tentar copiar o
copied_filesobre o arquivo dentro do nosso diretóriomove_destination.
cp -i copied_file move_destination/renamed_file
- 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.



