A resposta muito curta é:
- um arquivo é um blob anônimo de dados
- um hardlink é um nome para um arquivo
- um link simbólico é um arquivo especial cujo conteúdo é um nome de caminho
Arquivos e diretórios Unix funcionam exatamente como arquivos e diretórios no mundo real (e não como pastas no mundo real); Os sistemas de arquivos Unix são (conceitualmente) estruturados assim:
- um arquivo é um blob anônimo de dados; não tem nome, apenas um número (inode)
- um diretório é um tipo especial de arquivo que contém um mapeamento de nomes para arquivos (mais especificamente inodes); como um diretório é apenas um arquivo, diretórios podem ter entradas para diretórios, é assim que a recursão é implementada (note que quando sistemas de arquivos Unix foram introduzidos, isso não era óbvio, muitos sistemas operacionais não t permitir diretórios para conter diretórios naquela época)
- essas entradas de diretório são chamadas hardlinks
- um link simbólico é outro tipo especial de arquivo, cujo conteúdo é um nome de caminho; este nome de caminho é interpretado como o nome de outro arquivo
- outros tipos de arquivos especiais são: sockets, fifos, dispositivos de bloco, dispositivos de caractere
Mantendo esta metáfora em mente, e especificamente tendo em mente que os diretórios Unix funcionam como diretórios do mundo real e não como pastas do mundo real, explica muitas das "esquisitices" que os recém-chegados encontram, : por que posso excluir um arquivo para o qual não tenho acesso de gravação? Bem, por um lado, você não está excluindo o arquivo, você está excluindo um dos muitos nomes possíveis para o arquivo e, para fazer isso, você só precisa de acesso de gravação para o diretório, não o arquivo. Assim como no mundo real.
Ou, por que posso ter links simbólicos pendentes? Bem, o link simbólico simplesmente contém um nome de caminho. Não há nada que diga que realmente tem que haver um arquivo com esse nome.
My question is simply what is the difference of a file and a hard link ?
A diferença entre um arquivo e um link físico é a mesma diferença entre você e a linha com o seu nome na lista telefônica.
Hard link is pointing to an inode, so what is a file ? Inode entry itself ? Or an Inode with a hard link ?
Um arquivo é um dado anônimo. É isso aí. Um arquivo não é um inode, um arquivo tem um inode, assim como você não é um Social Security Number, você tem um SSN.
Um link físico é um nome para um arquivo. Um arquivo pode ter muitos nomes.
Let's say, I create a file with touch, then an Inode entry is created in the Inode Table.
Sim.
And I create a hard link, which has the same Inode number with the file.
Não. Um link físico não possui um número de inode, já que não é um arquivo. Apenas arquivos possuem números de inodes.
O hardlink associa um nome com um número de inode.
So did I create a new file ?
Sim.
Or the file is just defined as an Inode ?
Não. O arquivo tem um inode, não é um inode.