Atividades Práticas sobre Sistemas de Arquivos em Sistemas Operacionais
1. Comando touch e ls -l
1. Crie um arquivo vazio chamado relatorio.txt usando touch.
2. Use ls -l relatorio.txt. Quais informações são exibidas?
3. Adicione texto ao arquivo com echo "Olá" > relatorio.txt e repita ls -l. O que mudou?
2. Comando mkdir e tree
1. Crie um diretório chamado projetos com mkdir projetos.
2. Crie dois subdiretórios dentro dele: mkdir projetos/doc e mkdir projetos/src.
3. Use tree projetos (instale o pacote tree se necessário). O que a saída mostra?
3. Comandos ln e ls -i
1. Crie um arquivo original.txt com touch original.txt.
2. Crie um link rígido com ln original.txt copia.txt e um link simbólico com ln -s original.txt link.txt.
3. Execute ls -li. Compare os inodes de cada arquivo. O que você observa?
4. Comando df e du
1. Execute df -h. O que cada coluna da saída representa?
2. Crie um diretório com arquivos (ex.: mkdir teste && echo "teste" > teste/arq1.txt).
3. Use du -sh teste/. Qual é a diferença entre df e du?
5. Comando tar
1. Crie um diretório backup com dois arquivos (touch backup/a.txt backup/b.txt).
2. Compacte o diretório com tar -cvf backup.tar backup/.
3. Extraia os arquivos em outro diretório com mkdir novo && tar -xvf backup.tar -C novo/. Verifique o resultado.
6. Comando stat
1. Crie um arquivo info.txt com touch info.txt.
2. Execute stat info.txt. Quais são os principais atributos exibidos?
3. Modifique o arquivo (echo "novo" >> info.txt) e repita stat. O que mudou?
7. Manipulação de Arquivos em C
1. Escreva um programa em C que crie um arquivo chamado saida.txt e escreva "Hello, SO!" nele.
2. Compile e execute o programa. Verifique o conteúdo do arquivo com cat saida.txt.
#include
int main() {
FILE *fp = fopen("saida.txt", "w");
if (fp == NULL) {
printf("Erro ao abrir o arquivo!\n");
return 1;
}
fprintf(fp, "Hello, SO!\n");
fclose(fp);
return 0;
}
8. Leitura de Diretórios em C
1. Escreva um programa em C que liste os arquivos de um diretório fornecido como argumento.
2. Compile e execute o programa com ./programa . (diretório atual). O que ele retorna?
#include
#include
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Uso: %s \n", argv[0]);
return 1;
}
DIR *dir = opendir(argv[1]);
if (dir == NULL) {
printf("Erro ao abrir o diretório!\n");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
9. Comando df e du - Análise
1. Qual é a diferença entre os comandos df e du no Linux? Quando você usaria cada um?
2. Execute df -h e du -sh /home. Compare os resultados e explique.
10. Permissões de Arquivos
1. Crie um arquivo perm.txt com touch perm.txt.
2. Altere as permissões para que apenas o proprietário possa ler e escrever, e outros só possam ler. Mostre o comando.
3. Verifique o resultado com ls -l perm.txt.
11. Sistemas de Arquivos Journaling
1. O que é um sistema de arquivos journaling e por que ele é importante?
2. Execute df -T e identifique um sistema de arquivos journaling em seu sistema (ex.: ext4).
12. Comando tar - Criação e Extração
1. Qual é a diferença entre tar -cvf e tar -xvf? Dê um exemplo de uso para cada um.
2. Crie um arquivo meusdados.tar com um diretório e extraia-o em outro local.
13. Comando fsck
1. Execute fsck --help. O que esse comando faz?
2. Por que você não deve executar fsck em um sistema de arquivos montado em leitura/escrita?
14. Verificação de Inodes
1. Crie dois arquivos e um link rígido entre eles (touch arq1.txt && ln arq1.txt arq2.txt).
2. Use ls -li para verificar os inodes. O que isso indica sobre links rígidos?