Skip to content

gustavoimada/linux-file-system-simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🐧 InodesFS

O InodesFS é um simulador acadêmico de sistema de arquivos inspirado no funcionamento de sistemas Linux. O projeto foi desenvolvido em C e deve ser executado em ambiente Debian/Linux, pois utiliza chamadas POSIX como fork(), wait() e bibliotecas como unistd.h e sys/wait.h.

A proposta é demonstrar, de forma prática, como um sistema de arquivos pode organizar diretórios, arquivos, inodes, blocos de dados, permissões, links físicos, links simbólicos e relatórios de integridade.

🎯 Objetivo

Simular conceitos de gerenciamento de arquivos no Linux, com ênfase em:

  • estrutura de inode;
  • alocação de blocos;
  • blocos livres e defeituosos;
  • diretórios como tabelas de entradas;
  • permissões no estilo Unix;
  • hard links e symbolic links;
  • navegação por caminhos absolutos e relativos;
  • relatórios de uso e integridade do disco.

🧠 Conceitos de Linux Aplicados

  • inode como estrutura central de metadados.
  • Ponteiros diretos, indiretos simples, indiretos duplos e indiretos triplos.
  • Diretórios como arquivos especiais que apontam nomes para inodes.
  • Permissões no formato semelhante a -rw-r--r-- e drwxr-xr-x.
  • Separação entre nome de arquivo e inode.
  • Hard link compartilhando o mesmo inode.
  • Symlink apontando para outro caminho.
  • Blocos defeituosos e arquivos corrompidos.
  • Relatórios semelhantes a ferramentas de administração de sistemas.
  • Execução Linux/POSIX com processo filho usando fork().

✨ Funcionalidades

  • Inicialização de um disco virtual com quantidade de blocos e tamanho de bloco configuráveis.
  • Criação de arquivos regulares.
  • Criação e remoção de diretórios.
  • Navegação com cd, pwd e ls.
  • Listagem detalhada com atributos via ls -l.
  • Alteração de permissões com chmod.
  • Criação de hard links.
  • Criação de symbolic links.
  • Remoção com rm, rmdir e unlink.
  • Marcação de blocos defeituosos.
  • Visualização de arquivos com vi.
  • Relatórios de espaço, integridade, blocos, árvore e links.

🧱 Arquitetura Interna

flowchart LR
    CLI["Prompt inodesfs"] --> CMD["Parser de comandos"]
    CMD --> FS["Sistema de Arquivos Virtual"]
    FS --> INODE["Tabela de Inodes"]
    FS --> DIR["Blocos de Diretório"]
    FS --> DATA["Blocos de Dados"]
    FS --> FREE["Pilha de Blocos Livres"]
    FS --> REPORT["Relatórios"]
    INODE --> DIRECT["Ponteiros Diretos"]
    INODE --> INDIRECT["Indiretos Simples/Duplos/Triplos"]
Loading

🗃️ Modelo Conceitual

erDiagram
    INODE ||--o{ BLOCO_DADOS : aponta
    INODE ||--o{ INODE_EXTENSAO : usa
    DIRETORIO ||--o{ ENTRADA_DIRETORIO : contem
    ENTRADA_DIRETORIO }o--|| INODE : referencia
    INODE ||--o{ HARD_LINK : compartilha
    SYMLINK }o--|| CAMINHO : aponta
Loading

🧩 Principais Structs

InodePrincipal

Representa o inode principal de um arquivo, diretório ou link simbólico.

Guarda:

  • tipo do inode;
  • permissões;
  • data e hora de modificação;
  • tamanho em bytes;
  • usuário e grupo;
  • contador de hard links;
  • ponteiros diretos;
  • ponteiros indiretos simples, duplos e triplos;
  • inode do diretório pai.

InodeExtensao

Representa os níveis de indireção usados para arquivos maiores.

O projeto simula:

  • indireção simples;
  • indireção dupla;
  • indireção tripla.

BlocoDisco

Representa um bloco físico do disco virtual.

Cada bloco pode estar:

  • livre;
  • defeituoso;
  • usado como inode;
  • usado como dado.

BlocoDiretorio e EntradaDiretorio

Representam diretórios no estilo Unix: um diretório guarda entradas que ligam um nome a um inode.

Isso mostra uma ideia importante do Linux: o nome do arquivo fica no diretório, enquanto os metadados e blocos ficam no inode.

PilhaBlocos

Controla os blocos livres. Quando um bloco é alocado, sai da pilha; quando é liberado, volta para ela.

💻 Comandos Suportados

ajuda                         Lista comandos disponíveis
pwd                           Exibe diretório atual
ls                            Lista diretório atual
ls -l                         Lista com atributos
mkdir NomeDir                 Cria diretório
rmdir NomeDir                 Remove diretório vazio
touch nomeArquivo tamanho     Cria arquivo regular
vi nomeArquivo                Visualiza arquivo regular
rm NomeArq                    Remove arquivo
cd NomeDir | . | ..           Navega nos diretórios
chmod (+/-)ugo RWX caminho    Altera permissões
link -h origem destino        Cria hard link
link -s origem destino        Cria link simbólico
unlink -h nomeArquivo         Remove hard link
unlink -s nomeArquivo         Remove link simbólico
bad numeroBloco               Marca bloco como defeituoso
df                            Mostra espaço livre e ocupado
blks caminho                  Mostra blocos ocupados por arquivo
maxfile                       Mostra maior arquivo possível
integridade                   Lista arquivos íntegros/corrompidos
perdidos                      Mostra blocos perdidos
mapa                          Exibe mapa completo do disco
alocados                      Mostra arquivos e diretórios alocados
arvore                        Mostra árvore com atributos
links                         Mostra links simbólicos e físicos
sair                          Encerra o simulador

🧪 Exemplo de Uso

mkdir home
cd home
touch notas.txt 35
ls -l
link -h notas.txt notas-hard.txt
link -s notas.txt notas-link.txt
df
blks notas.txt
links
arvore
sair

🛠️ Tecnologias Utilizadas

  • C
  • Debian/Linux
  • GCC
  • POSIX
  • fork/wait
  • Simulação de filesystem com inodes

🧹 Organização do Repositório

TrabalhoSOII/
├── inodesfs.c
├── build.sh
├── TrabalhoInode.docx
├── .gitignore
└── README.md

About

C terminal application that simulates a Linux file system with inodes, blocks, permissions, hard links and symlinks. Designed to be compiled and executed locally.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages