Quero descobrir quais links de arquivos existem que apontam para minha /tmp
pasta no Ubuntu.
Fundo:
Eu tive um problema: meus /tmp
privilé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 /tmp
algum lugar e o comando
chmod 755 . -Rf
chamado lá naquela pasta estava afetando a /tmp
pasta 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/