Sistema de Arquivos no Linux - Link simbólico e Hard Link - Parte 17

Aula 25 · GNU/Linux para Servidores

Transcrição do áudio

Link simbólico ou hardlink? Vou agora explicar essa questão de links e a diferença entre ambos. Bom, vamos lá. Bom, vamos pegar aqui um Linux. Clear. Ls bar raiz, certo? Desculpe, traço L, raiz. Repare, não é todo Linux que vai mostrar isso aqui, não, tá? Esse bin é um link simbólico. E ele aponta para barra ou SR bin. Legal. Init rd da inicialização do teu Linux. O Linux inicializa 5 init rd e aí logo em seguida ele vai chamar naturalmente o vm-linux. Isso é descrito lá para o capítulo 13 desse livro. Mas aí nós vamos chegar lá. Nós repare, é um link. É um link para barra boot. Init rd imad 61286 db3 md64. Repare que todo link simbólico, ah, desculpa, todo link simbólico, qualquer pessoa pode acessar porque a validação de permissão de acesso não é feito no link. É feito lá no arquivo destino. Legal? Então deu para dar uma noção aqui do que é um link simbólico. Então vamos lá. Então nós temos os links no mundo Linux e usamos para caramba, tá? No Linux db, por exemplo, puxa, como ele utiliza link simbólico para manter compatibilidade de versões muito anteriores com as versões atuais, principalmente. Então você tem um soft link ou link simbólico e os hard link que apontam diretamente. Olha só como funciona. Nós já vimos que todo arquivo aponta então para o iNote e o iNote aponta para outros iNotes ou a massa de dados, depende do tamanho do arquivo. Falei isso. Então olha só, então eu tenho um arquivo. Aludosaprovados.txt. Tá vazio, né? Tá vazio, coleguinha. Tô zoando. Tá, toma ouvidoria e fácil, né, coleguinha? Então tá aqui, né, o arquivo, então ele aponta pro iNote e tem os seus dados lá no armazenamento. Um soft link, ou seja, um link simbólico é um outro arquivo, é um outro iNote e que ele aponta para o hard link. Beleza? E esse arquivo, que é um hard link praticamente, aponta para o iNote. O hard link ele é um apontamento pro iNote, né? Então olha só, o hard link ele é um apontamento pro iNote, se você olhar. Todo arquivo teoricamente seria então um hard link pro iNote, se você olhar pela teoria. Beleza? Nós criamos essa distinção na prática, apenas para mostrar para vocês. Tem uma restrição. O hard link e o arquivo que tem o mesmo iNote, eles não podem estar no mesmo diretório. Lembra lá, por exemplo, volta na aula de iNodes, você vai ver que ele busca pelo número do iNote, do número do iNote, ele busca o bloco e do bloco, ele carrega o bloco e ele acha onde está, os dados, legal? É um apontamento direto, então hard link lá para o seu iNote. E aí nós podemos rapidamente provar isso aqui. Então vamos lá, vamos criar aqui, vou adicionar o tree, clear, apt, sudo, apt, install, tá? Vamos estar lá aqui o tree, opa, achei que ia vir o yes, né? Clear, legal, tree. E aí eu vi que ter mais nada. Desculpe, sudo, RM, traço R, não precisaria do sudo, que é meu, eu acredito que é meu público. Certo? Então quero remover essa joça, legal, está aqui. Então vamos entrar aqui e vamos criar, na verdade vamos criar aqui um arquivo, clear, mkdir, diretório 1, legal? mkdir, diretório 2, legal? Ls, está aqui, os dois estão ali, o tree mostraria eles aqui em lista. Você vai entender agora, então vamos lá, cd diretório 1, certo? Vamos no diretório 1 e vamos criar um arquivo, não, não. É team, bom, txt, certo? Com certeza não é botafogo, botafogo não é team. Puta que pariu, eu ia colocar um parâmetro aqui, mas deixa para lá, tá? Então legal, eu estou aqui, certo? cd.tree, repara, então que o diretório 1 está aqui, certo? E eu tenho ali um arquivo chamado team, legal? Legal, clear, txt, joga lá para cima, para você conseguir enxergar, é, foi o mais simples aqui, legal. Ls traço li de inodes, ou então do diretório 1, legal? Então eu estou aqui, inode 3517, legal? Então chegou a hora de fazer um hardlink, como é que funciona então? cd diretório 2, clear, aqui eu tenho nada, certo? Então o hardlink funciona assim, primeiro eu tenho que colocar o target, depois o nome do link. Então vamos lá, ln não precisa de sudo porque estou na minha área de usuário, tá? Então o que é que funciona? cd diretório 1, team, legal? target, e agora o onde fica o meu hardlink, exemplo. Exemplo txt, que é onde eu estou, estou dentro do diretório 2, legal? Agora o ls aqui repara que exemplo existe, não precisa necessariamente ambos terem o mesmo nome. Então eu tenho team.txt apontando para inode, e agora eu tenho um exemplo apontando para o mesmo inode, eles não precisam ter o mesmo nome, mas eles têm que estar em diretórios diferentes porque o inode deles é o mesmo, ls traço li repara, 3517, vamos pegar aqui, por exemplo, o ponto, ponto, barra, diretório 1, olha só, que o team tem o inode 3517 e exemplo tem o 3517 inode, eles apontam para o mesmo inode, acabei de mostrar a teoria para vocês aqui, beleza? isso é importante. Então isso é um hardlink, repare, se eu copiar esse arquivo, se eu copiar esse cara aqui, eu estou copiando os inodes, se eu copiar o hardlink eu estou copiando os inodes, e isso é normal, isso é muito normal, outra coisa, olha que interessante aqui coleguinha, pô você não consigo voltar no histórico, né? Está vendo esse 2 aqui? Ele diz quantas vezes um arquivo está sendo referenciado por hardlink, por links em geral, o próprio nome do arquivo, ele é um hardlink, se você olhar na teoria, né? Vamos lá, aqui eu vou criar um arquivo, é Coco, na nano, Coco, tá, é TXT, é Coco, deve ter assento, botafogo, legal? Contra o x, y, ok, legal? Ls traço li, olha só, que o Coco, o time do botafogo, ele só tem aqui uma referência no sistema de arquivos, esse tem 2, por que esse tem 2? Porque o Linux, ele sempre mostra quantas vezes algo está sendo referenciado no sistema de arquivos, aqui na tabela, a inode, coleguinha, então sempre quando isso aqui é feito, esse link aqui é feito, ele guarda a informação de quantas vezes esse inode está sendo referenciado no sistema de arquivos, aí você entende, porque você vem aqui, ls traço li na raiz, e você vai ver aqui, 3 vezes referenciado na tabela, do inode, desculpa, você não referenciou 3 vezes, esse aqui está sendo referenciado 17 vezes no sistema de arquivos, esse aqui está sendo 2 vezes, 127, lembrando que diretório naturalmente é 2, tá, galera? Arquivo naturalmente é 1, arquivo naturalmente é 1, diretório naturalmente é 2, porque ele sempre cria a entrada, ele e o ponto-ponto, então é natural que ele seja referenciado duas vezes, tá, todo diretório, todo diretório é 2, no mínimo, que é o normal, Arquivo é 1, mas olha isso aqui, 127 vezes o ETC está sendo referenciado no sistema, então ele coloca tudo isso aqui, como você vai saber? Não tem, não tem como saber, teria que buscar no sistema, pegar o inode desse cara e buscar no sistema, seria muito brutal fazer isso, seria brutal fazer isso, recursivamente, todos os arquivos do Linux, todos os diretórios, cara, seria brutal, tá? Já o link simbólico é diferente nesse ponto, ele vai criar um novo arquivo, tá, com inodes diferentes, então vamos lá, clear, ok, cd.ponto.am, traço r, diretório 2, certo? E diretório 1 vai pagar, tree, não existe mais, mkdir, torio 1, mkdir, diretório 2, certo? Mas podem me ver rando às vezes no teclado, assim, é porque é onde eu gravo vídeo, ele é muito curtinho, então tem que ficar torto pra gravar aula, aí na hora de escrever ficou uma bosta, pode ver que eu sempre reposiciono minha cadeira, aí tudo começa a andar, né? Legal, então vamos criar um arquivo, beleza, cd.diretório 1, legal? Aqui nano, né, team.txt, com, certeza, fogo é uma bosta, ok? Legal, nunca faça isso com seu filho, nunca ensine ele a ser botafoguense, por favor, você vai fazer um trauma na criança, que a criança vai usar botafogo pro resto da vida ali como um exemplo, legal? Ls, beleza? Ls, traço li, repare que eu voltei no inode 3517, porque ele apagou, então ele recriou, é como se ele fosse um contador, tudo bem? Porque, legal. Bom, vamos lá agora no diretório 2, cd.pontocd, diretório 2, certo? Ah, eu poderia executar um tree no diretório do usuário, eu iria me ver aqui no sistema de arquivos, onde eu estou, eu estou aqui, certo? Aqui é onde está o arquivo, então vamos lá. Ln, traço s de simbólico, o hardlink não tem s como parâmetro, e aí você coloca o target.bara, diretório 1, team txt, certo? E aqui, onde que vai ficar o link simbólico? Você poderia muito bem fazer assim, tá? Pra ficar bem claro que eu estou no diretório 2, tá? Então, um link.txt, certo? Poderia fazer assim, poderia, mas eu também poderia fazer assim, porque eu já estou no diretório 2, certo? E aí eu criei aqui o ls, beleza? Tá aqui o link, ele é azuzinho, ls, traço li, ele vai dizer, olha, que o link aponta lá pro outro lado. Legal, repare, permissão de arquivo total, aqui total, porque, conforme eu falei, ele não valida a permissão de acesso no link, ele valida a permissão de acesso lá no arquivo. Porque isso seria um ponto vulnerável do sistema, se eu tivesse validação nos dois, ou se eu acreditasse no link e não no arquivo, então seria muito fácil criar vulnerabilidades pro mundo lino, porque se estão com o link, permissão total, clicou, ele valida lá na outra, na outra. Ls, traço li, olha só, repare que aqui o inode ficou 20.06, ls, traço li, ponto, ponto, barra, diretório 2. Olha, eu já estou no diretório 2, vamos colocar o diretório 1, olha lá no diretório 1, 3517 o inode, olha a diferença, de inode. Então, os inodes são diferentes, e o que, naturalmente, corrobora com a teoria de que o softlink é um novo arquivo que aponta pra esse arquivo e daqui aponta pra lá. Legal, legal né cara, essa é a ideia então de trabalhar com o link simbólico, o link fica vermelhinho assim, quando ele está apontando pra algo que não existe, ele fica vermelhinho, tá? Isso só nos linux modernos, no linux raiz, bosta nenhuma, é tudo branco e se dane. Até mais, tchau.
Voltar ao curso