Elmord's Magic Valley

Computers, languages, and computer languages. Às vezes em Português, sometimes in English.

Inodes, hard links, symlinks

2010-11-23 21:30 -0200. Tags: comp, unix, em-portugues

Muitas pessoas já me perguntaram qual é a diferença entre um hard link e um link simbólico. No intuito de elucidar este duradouro mistério sobre a natureza do Unix, apresento-vos este singelo post.

No Unix, cada arquivo é associado a um inode. O inode é uma estrutura que contém diversas meta-informações sobre o arquivo, tais como seu tamanho, dono, grupo, permissões, datas de acesso e modificação, e ponteiros para o conteúdo do arquivo do disco. O inode, entretanto, não contém o nome do arquivo. Cada inode possui um número que o identifica dentro de um dado sistema de arquivos.

Um diretório é um arquivo que contém uma lista de nomes de arquivos e os números de seus respectivos inodes. Cada entrada dessa lista é um hard link para o arquivo em questão. É possível que haja mais de uma entrada, no mesmo diretório ou não, para o mesmo arquivo; o inode contém uma contador de referências (o valor na segunda coluna do ls -l, conhecido como link count), que indica quantas entradas apontam para ele. Enquanto houver referências para o arquivo, ele continuará existindo, mesmo que a referência "original" seja apagada. Apenas quando o contador de referências atingir zero (e nenhum processo estiver com o arquivo aberto), ele será removido do sistema de arquivos. Isso explica por que a syscall que "apaga" um arquivo no Unix se chama unlink.

Enquanto um hard link é uma referência direta ao arquivo, um link simbólico, ou symlink, é uma referência a um nome de arquivo. Essencialmente, um symlink é como um "atalho" em um suposto sistema operacional, com a diferença de que o symlink é tratado transparentemente pelo sistema. Se a entrada para a qual um symlink aponta for apagada, o symlink fica quebrado. É possível criar symlinks entre sistemas de arquivos (pois apenas o nome é usado), mas não um hard link (pois o inode deve estar no mesmo sistema de arquivos que a referência).

Uma observação interessante é que o link count de um diretório é igual ao número de subdiretórios que possui mais 2. Isso acontece porque, além da entrada no diretório que o contém, o diretório contém uma entrada . apontando para si mesmo, e cada subdiretório possui uma entrada .. apontando para o diretório pai. A maior parte dos sistemas não permite a criação de novos hard links para um diretório, para evitar ciclos na "árvore" de diretórios.

E termina assim o conto.

Comentários / Comments (0)

Deixe um comentário / Leave a comment

Main menu

Recent posts

Recent comments

Tags

em-portugues (213) comp (148) prog (71) in-english (62) life (49) unix (38) pldesign (37) lang (32) random (28) about (28) mind (26) lisp (25) fenius (22) mundane (22) web (20) ramble (18) img (13) rant (12) hel (12) scheme (10) privacy (10) freedom (8) esperanto (7) music (7) lash (7) bash (7) academia (7) copyright (7) home (6) mestrado (6) shell (6) android (5) conlang (5) misc (5) emacs (5) latex (4) editor (4) etymology (4) php (4) worldly (4) book (4) politics (4) network (3) c (3) tour-de-scheme (3) security (3) kbd (3) film (3) wrong (3) cook (2) treta (2) poem (2) physics (2) x11 (2) audio (2) comic (2) lows (2) llvm (2) wm (2) philosophy (2) perl (1) wayland (1) ai (1) german (1) en-esperanto (1) golang (1) translation (1) kindle (1) pointless (1) old-chinese (1)

Elsewhere

Quod vide


Copyright © 2010-2024 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Powered by Blognir.