Detectar todos os links existentes apontando para/tmp?

Detectar todos os links existentes apontando para/tmp?

Quero descobrir quais links de arquivos existem que apontam para minha /tmppasta no Ubuntu.

Fundo:
Eu tive um problema: meus /tmpprivilégios de pasta foram alterados por acidente para 755. O sistema não estava mais funcionando corretamente como um usuário diferente de root.

Talvez haja um link para /tmpalgum lugar e o comando

chmod 755 . -Rf 

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

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 problema com isso.

Responder1

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

Responder2

Até onde eu sei, não há uma maneira fácil de listar todos os links simbólicos que apontam para um inode. Portanto, eu recomendaria usar o padrãoencontrarutilidade com o-EUe-mesmo arquivocomuta:

  • -mesmo arquivoirá comparar com base no inode do seu arquivo de destino,
  • -EUincluirá 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 tanto com o número do inode (primeira coluna) quanto com a seta (última) que /bin/sh em um link simbólico para /bin/dash. Se fossem hardlinks, o número do inode seria o mesmo para arquivos diferentes e não haveria seta na última coluna.

Finalmente, se eu tivesse necessidade de procurar esses links em todo um sistema de arquivos, excluiria alguns diretórios como/dev,/proce/sysda pesquisa. Isso seria feito com o-caminhoe-ameixa secaswicthes (você pode adicionar quantos quiser com-omudar significadoou),2>/dev/nuloestá aqui para mascarar possíveis erros:

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

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

Responder3

Encontrei a resposta graças a esta pergunta:Linux: Encontrar todos os links simbólicos de um determinado arquivo 'original'? (reverso 'readlink')

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

informação relacionada