>
Olá lá novamente. Nesta introdução aos links duros e simbólicos, vamos primeiro tentar aprender e definir o que cada um deles significa. Depois discutiremos quais são as diferenças entre os dois.
Então o que é um link rígido e o que exatamente ele faz na shell?
Um link rígido é apenas um nome adicional para um arquivo existente no Linux ou em outros sistemas operacionais do tipo Unix.
Um número qualquer de links rígidos, e assim qualquer número de nomes, pode ser criado para qualquer arquivo. Links rígidos também podem ser criados para outros links rígidos. Entretanto, eles não podem ser criados para diretórios e não podem cruzar os limites do sistema de arquivos ou atravessar partições.
Talvez o aplicativo mais útil para links rígidos seja permitir que arquivos, programas e scripts (ou seja, programas curtos) sejam facilmente acessados em um diretório diferente do arquivo original ou arquivo executável (ou seja, a versão pronta para execução de um programa). Digitar o nome do link rígido fará com que o programa ou script seja executado da mesma forma que usar seu nome original. (http://www.linfo.org/hard_link.html)
Queres ler esta história mais tarde? Salve-o no Journal.
Então o que esta definição realmente significa? Bem, você pode criar um link rígido para um arquivo existente usando o comando ln file_name hardlink. Eu forneci um exemplo abaixo de como criar um link rígido em ação. No exemplo abaixo eu criei um hardlink aka um atalho para o arquivo chamado file1 com o hardlink chamado hlink1.
Agora vamos ls -i
. Para que liste todos os arquivos com inode.
INODE Definição: O inode é uma estrutura de dados em um sistema de arquivos estilo Unix que descreve um objeto do sistema de arquivos, como um arquivo ou um diretório. Cada inode armazena os atributos e a(s) localização(ões) do bloco de disco dos dados do objeto. Os atributos do objeto do sistema de arquivos podem incluir metadados (tempos da última modificação, acesso, modificação), assim como dados de proprietário e permissão.
Diretórios são listas de nomes atribuídos aos inodes. Um diretório contém uma entrada para si mesmo, seu pai, e cada um de seus filhos. (https://en.wikipedia.org/wiki/Inode)
Se você olhar para o arquivo1 e o hlink1 você pode ver o inode no lado esquerdo é o mesmo. Em essência, os hardlinks atuam como um atalho para aquele arquivo que está fortemente ligado.
Agora passando para “Soft Links”
Soft links é um tipo especial de arquivo que aponta para outro arquivo, muito parecido com um atalho. Ao contrário de um link rígido, um link simbólico não contém os dados no arquivo de destino. Ele simplesmente aponta para outra entrada em algum lugar no sistema de arquivos. Esta diferença dá aos links simbólicos certas qualidades que os links rígidos não têm, como a capacidade de se ligar a directórios, ou a ficheiros em computadores remotos ligados em rede através do NFS. Além disso, quando você apaga um arquivo de destino, links simbólicos para esse arquivo se tornam inutilizáveis, enquanto links rígidos preservam o conteúdo do arquivo. (https://kb.iu.edu/d/abbe)
Agora vamos criar um link suave para comparar com o link rígido que criámos acima.
Agora vamos abrir um terminal. Vá para o finder ou procure e introduza o terminal que deve aparecer, clique nele e abra.
Para o nosso exemplo, vamos primeiro criar um ficheiro. Se nós digitarmos touch example1
pressione enter. Nós podemos criar um arquivo. Agora para criar o soft link.
Se escrevermos na shell ln -s example1 softlink1
criamos um soft link entre os ficheiros. Veja o exemplo abaixo.
Agora se digitarmos ls -i
também notaremos que apenas o arquivo hardlink tem o mesmo inode que o hardlink enquanto o arquivo soft link tem inodes diferentes.
quais são as diferenças entre links rígidos e suaves?
Um link suave não contém os dados no arquivo de destino.
Um link soft aponta para outra entrada em algum lugar no sistema de arquivos.
Um link soft tem a capacidade de se ligar a diretórios, ou a arquivos em computadores remotos ligados em rede através do NFS.
Apagar um ficheiro de destino para um link simbólico torna esse link inútil.
Um link rígido preserva o conteúdo do ficheiro.
Um link rígido não pode ser criado para directorias, e estas não podem ultrapassar os limites do sistema de ficheiros ou atravessar partições.
Num hardlink pode usar qualquer um dos nomes de hardlink criados para executar um programa ou script da mesma forma que o nome original dado.
Em essência:
“Por baixo dos ficheiros do sistema de ficheiros são representados por inodes
Um ficheiro no sistema de ficheiros é basicamente um link para um inode.
Um link rígido então apenas cria outro ficheiro com um link para o mesmo inode subjacente.Quando se elimina um ficheiro remove um link para o inode subjacente. O inode só é eliminado (ou eliminável/sobre-escrito) quando todas as ligações ao inode tiverem sido eliminadas.
Um link simbólico é um link para outro nome no sistema de ficheiros.
Após um link rígido ter sido feito, o link é para o inode. eliminar a renomeação ou mover o ficheiro original não afectará o link rígido, uma vez que este se liga ao inode subjacente. Quaisquer alterações aos dados no inode são reflectidas em todos os ficheiros que se referem a esse inode.
Nota: Links rígidos só são válidos dentro do mesmo Sistema de Ficheiros. Links simbólicos podem abranger sistemas de arquivos, pois eles são simplesmente o nome de outro arquivo”
(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)
Examinando a Shell e como ela executa um comando
- A shell lê sua entrada de um arquivo, de uma string ou do terminal do usuário.
- A entrada é dividida em palavras e operadores, obedecendo as regras de citação. Estes tokens são separados por metacaracteres. A expansão do alias é executada.
- A shell analisa (analisa e substitui) os tokens em comandos simples e compostos.
- A shell executa várias expansões da shell, quebrando os tokens expandidos em listas de nomes de arquivos e comandos e argumentos.
- Redirecionamento é executado se necessário, operadores de redirecionamento e seus operandos são removidos da lista de argumentos.
- Comandos são executados.
- Oficialmente a shell espera que o comando seja concluído e recolhe o seu estado de saída.