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?