Criando Múltiplos Hard Links no Ubuntu: Como Fazer????

Iniciado por Samuel Ubuntu do Sur, 30 de Maio de 2013, 08:24

tópico anterior - próximo tópico

Samuel Ubuntu do Sur

Pessoal, bom dia!

No link: http://www.hardware.com.br/livros/entendendo-linux/criando-links.html eu pude entender um pouco a questão dos links. E já percebi que, no Ubuntu, "por padrão", o modo gráfico cria apenas link simbólico, e não hard link.

Então, lá vão as perguntas:

1) Existe possibilidade de criar hard links pelo modo gráfico? Se a resposta for não:

2) Pela linha de comando, eu consigo criar hard link para mais de uma pasta ao mesmo temo? (por exemplo: pasta1, pasta2 ... pasta n - com um único comando, criar os hard links: linkpasta1, linkpasta2, linkpastan)

E, por curiosidade: Há como "transformar" um link simbólico em hard link?

Estou perguntando isso pois tenho uma coleção de Músicas enorme e gosto de separar os artistas por estilo, criando as pastas com o nome dos estilos e colocando dentro os links que apontam para o artista, presente em outra pasta com todo o acervo.

Eu conseguia fazer tudo isso no modo gráfico no Windowns, mas eram links simbólicos e, portanto, menos robustos (é muito interessante poder mudar o arquivo de lugar e mesmo assim não perder o link no caso dos hard links).

No mais, agradeço toda e qualquer ajuda (inclusive bibliográfica).

Att,

EdvaldoSCruz

Citação de: Samuel Ubuntu do Sur online 30 de Maio de 2013, 08:24
Pessoal, bom dia!

No link: http://www.hardware.com.br/livros/entendendo-linux/criando-links.html eu pude entender um pouco a questão dos links. E já percebi que, no Ubuntu, "por padrão", o modo gráfico cria apenas link simbólico, e não hard link.

Então, lá vão as perguntas:

1) Existe possibilidade de criar hard links pelo modo gráfico? Se a resposta for não:

2) Pela linha de comando, eu consigo criar hard link para mais de uma pasta ao mesmo temo? (por exemplo: pasta1, pasta2 ... pasta n - com um único comando, criar os hard links: linkpasta1, linkpasta2, linkpastan)

E, por curiosidade: Há como "transformar" um link simbólico em hard link?

Estou perguntando isso pois tenho uma coleção de Músicas enorme e gosto de separar os artistas por estilo, criando as pastas com o nome dos estilos e colocando dentro os links que apontam para o artista, presente em outra pasta com todo o acervo.

Eu conseguia fazer tudo isso no modo gráfico no Windowns, mas eram links simbólicos e, portanto, menos robustos (é muito interessante poder mudar o arquivo de lugar e mesmo assim não perder o link no caso dos hard links).

No mais, agradeço toda e qualquer ajuda (inclusive bibliográfica).

Att,


Resposta:

Link simbólico e hardlink


O link é um mecanismo que faz referência a outro arquivo ou diretório em outra localização. Os links são arquivos especiais e podem ser identificados com um "l" quando executado o comando: "ls -la".

Exemplo:

$ ls -la
lrwxr-xr--  1 roberto    roberto     5 2006-10-12 22:40 link -> teste.txt

Veja abaixo a descrição do dois tipos de links existentes no Linux.

Tipo simbólico

No link tipo simbólico, o link é um arquivo especial de disco do tipo link, que tem como conteúdo o caminho para chegar até o arquivo alvo.

Características:

   * Pode-se fazer links simbólicos em arquivos e diretórios;
   * O link simbólico e o arquivo alvo não precisam estar na mesma partição de disco;
   * Se o link simbólico for apagado/movido. Somente o link será apagado/movido;
   * Qualquer usuário pode criar/desfazer um link simbólico (respeitando as permissões).


Tipo hardlink

No link tipo hardlink, o link é apontado para o mesmo inode do arquivo alvo, sendo assim, os dois arquivos serão o mesmo.

Características:

   * Não é possível fazer um hardlink para um diretório;
   * Somente é possível fazer hardlink em arquivos que estejam em uma mesma partição de disco;
   * Se o hardlink for apagado/movido, você estará apagando/movendo o arquivo alvo;
   * Somente o usuário root pode criar/desfazer hardlinks.


Criando links

O comando ln é utilizado para criar links entre dois arquivos ou para um diretório.

Sintaxe:

ln [OPÇÕES]... [-T] ALVO NOME_LINK   (1a forma)
ln [OPÇÕES]... ALVO                  (2a forma)
ln [OPÇÕES]... ALVO... DIRETÓRIO     (3a forma)
ln [OPÇÕES]... -t DIRETÓRIO ALVO...  (4a forma)

Explicando:

   > ALVO: Diretório ou arquivo de onde será feito o link;
   > NOME_LINK: Nome do link que será criado;
   > OPÇÕES:
   -s
       Cria um link simbólico.
   -v
       Modo verbose.


Exemplos:

1 - Criando um link simbólico chamado "emulador" para o diretório /home/roberto/download/emulador_n64/:

$ ln -s /home/roberto/download/emulador_n64/ emulador

Note que o link simbólico é identificado com o "l" no início.

$ ls -lah | grep emulador lrwxrwx--x  1 roberto    roberto      36 2006-10-12 22:42 emulador -> /home/roberto/download/emulador_n64/

2 - Criando um hardlink chamado "texto.txt" apontando para o arquivo "alvo_hardlink.txt":

$ ln alvo_hardlink.txt texto.txt

Note que o arquivo "alvo_hardlink.txt" e o arquivo texto.txt possuem o mesmo Inode e o mesmo Device.

$ stat alvo_hardlink.txt | grep Inode
Device: 304h/772d       Inode: 3057948     Links: 2

$ stat texto.txt | grep Inode
Device: 304h/772d       Inode: 3057948     Links: 2

Site de referência: Viva o Linux
Ignorância é não aceitar e não submeter-se a CRISTO JESUS.
Para os Iniciantes, como eu, links de solucionar problemas rapidamente.

Samuel Ubuntu do Sur

OK Edwaldo, obrigado pelos comandos. Será que nessas opções ( ln [OPÇÕES] ) eu consigo criar hard link para mais de uma pasta ao mesmo temo? (por exemplo: pasta1, pasta2 ... pasta n - com um único comando, criar os hard links: linkpasta1, linkpasta2, linkpastan)?

Samuel Ubuntu do Sur

ss4@SDesk:/media/SXT4/S/Up/teste$ ls
pasta1  pasta2  pasta3

ss4@SDesk:/media/SXT4/S/Up/teste$ ln -t /media/SXT4/S/Up/teste /media/SXT4/S/Up/teste2
ln: "/media/SXT4/S/Up/teste2": não são permitidas ligações absolutas para diretórios

ss4@SDesk:~$ ln -t /media/SXT4/S/Up/teste /media/SXT4/S/Up/teste2

ln: "/media/SXT4/S/Up/teste2": não são permitidas ligações absolutas para diretórios
ss4@SDesk:~$


Vejam se o comando está certo: eu tentei criar hard links para as pastas:

pasta1, pasta2, pasta3

dentro da pasta teste2. Tá certo o comando? Não entendi bem a explicação abaixo...


Uso: ln [OPÇÃO]... [-T] ALVO NOME_LIGAÇÃO  (1ª forma)
ou: ln [OPÇÃO]... ALVO                    (2ª forma)
ou: ln [OPÇÃO]... ALVO... DIRETÓRIO       (3ª forma)
ou: ln [OPÇÃO]... -t DIRETÓRIO ALVO...    (4ª forma)
No primeiro formato, cria um link para TARGET com o nome LINK_NAME.
No segundo formato, cria um link para TARGET no diretório atual.
No terceiro e quarto formatos, cria links para cada TARGET no diretório DIRECTORY.