Detecta todos os links que existem apontando para / tmp?

2

Eu quero descobrir quais links de arquivos existem que apontam para a minha pasta /tmp no Ubuntu.

Contexto:
Eu tive um problema, que meus privilégios de pasta /tmp foram alterados por algum acidente para 755. O sistema não estava sendo executado corretamente mais como um usuário diferente do root.

Talvez haja um link para /tmp em algum lugar e o comando

chmod 755 . -Rf 

chamado lá naquela pasta estava afetando a pasta principal /tmp .

Eu tive que consertar com:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

Eu tenho apenas um sistema de arquivos, então não deve haver um problema com isso.

    
por rubo77 22.09.2012 / 09:17

3 respostas

2

tente isto:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

Exemplo de saída:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: '/run/user/sergey/gvfs': Permission denied
    
por 22.09.2012 / 09:25
1

Até onde eu sei, não há maneira fácil de listar todos os links simbólicos apontando para um inode. Portanto, eu recomendaria usar o utilitário padrão find com os switches -L e -samefile :

  • -samefile irá comparar com base no inode do seu arquivo de destino,
  • -L incluirá links simbólicos na pesquisa, que é o que você está procurando.

Aqui está um exemplo com / bin / dash em / bin:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

A partir desta saída, você pode ver ambos com o número do inode (primeira coluna) e a seta (último) que / bin / sh em um link simbólico para o / bin / traço. Se fossem hardlinks, o número de inode seria o mesmo para arquivos diferentes e não haveria nenhuma seta na última coluna.

Finalmente, se eu precisasse procurar esses links em um sistema de arquivos inteiro, eu excluiria alguns diretórios como / dev , / proc e / sys da pesquisa. Isso seria feito com o -path e -prune swicthes (você pode adicionar quantos quiser com -o significado do switch ou ), 2 > / dev / null está aqui para mascarar erros em potencial:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

Como a pesquisa em um sistema de arquivos inteiro pode levar muito tempo (principalmente dependendo do tamanho), considerarei essa opção como último recurso. É como procurar uma agulha num palheiro: não é impossível, mas exige muito esforço ...

    
por 08.10.2012 / 20:49
0

Eu encontrei a resposta, graças a esta pergunta: Linux: Encontre todos os links simbólicos de um determinado arquivo 'original'? (reverse 'readlink')

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/
    
por 22.09.2012 / 09:28