É um symlink para um diretório de um arquivo ou diretório?

1

Eu tenho vários comandos que removem arquivos e diretórios. Um deles excluiu um link simbólico que apontava para um diretório.

Isso levantou a seguinte questão: qual comando a removeu? Aquele que remove arquivos ou aquele que remove diretórios?

Em outras palavras: o que é um link simbólico para um diretório: um arquivo ou um diretório?

Exemplo de tal comando:

find www -type f ! -name ".htaccess" -delete
    
por Matthieu Napoli 13.06.2015 / 10:22

2 respostas

3

É tecnicamente um arquivo , contendo uma string com uma referência a outro objeto do sistema de arquivos, mas é notável que os links simbólicos tem propriedades um pouco diferentes da maioria dos arquivos. por exemplo, você pode negar a gravação no symlink, enquanto retém a gravação no arquivo de destino. escrever com privilégios no link permitiria que você excluísse o link, mesmo que você não tenha escrito no arquivo de destino. para algumas operações, o link é transparente e, para outros, é opaco, portanto, há definitivamente alguma abstração do sistema de arquivos envolvida em seu funcionamento interno.

você pode querer verificar seu log de autenticação para determinar qual comando o excluiu.

Editar: Como você está tão interessado no comando find, observe que find não processa links simbólicos. veja aqui:

Minty17 ~ $ mkdir test
Minty17 ~ $ cd test
Minty17 ~/test $ mkdir testdir
Minty17 ~/test $ touch testdir/testfile1.txt
Minty17 ~/test $ ln -s testdir testlink
Minty17 ~/test $ ls
testdir  testlink
Minty17 ~/test $ find -type f | grep testlink
Minty17 ~/test $ find -type d | grep testlink
Minty17 ~/test $ find -type d 
.
./testdir
Minty17 ~/test $ find -type f 
./testdir/testfile1.txt
Minty17 ~/test $ cd ..
Minty17 ~ $ rm -rf ./test
    
por 13.06.2015 / 11:38
1

É um arquivo especial , um dos vários UNIX , muito antes do Linux, implementado. Além de arquivos e diretórios, os outros tipos de arquivos são links, pipes nomeados, sockets, arquivos de dispositivos (ainda mais divididos em dispositivos de caracteres e blocos) . Eu lhe digo isso para enfatizar que em * Nix nem tudo é um diretório ou um arquivo: existem outros personagens engraçados também.

Ele é usado de duas maneiras diferentes: primeiro, para fornecer a vários programas uma única versão de um arquivo, para que qualquer modificação precise ser feita apenas uma vez e, em seguida, tornar-se imediatamente disponível para todos os programas.

Em segundo lugar, para fornecer uma determinada funcionalidade através de um dos muitos programas diferentes equivalentes. Por exemplo, um comando como awk faz parte de qualquer sistema * Nix, mas existem muitas versões diferentes, com nomes ligeiramente diferentes. De fato,

 $ whereis awk
 awk: /usr/bin/awk /usr/bin/X11/awk /usr/share/awk /usr/share/man/man1/awk.1.gz
 $ file /usr/bin/awk
 /usr/bin/awk: symbolic link to '/etc/alternatives/awk' 
 $ file /etc/alternatives/awk
 /etc/alternatives/awk: symbolic link to '/usr/bin/gawk'
 $ file /usr/bin/gawk
 /usr/bin/gawk: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=76bb13aac7e212164bd6e0d7b8a5d92db44543c9, stripped

O arquivo real é gawk , mas para permitir que eu ignore todas as opções equivalentes que tenho, o link simbólico awk foi configurado para fornecer o uso de gawk , de uma forma totalmente transparente para mim.

Para evitar o TL normal, DR, vou apenas deixar o link acima fornecer mais informações, se você se importa.

EDITAR:

Para encontrar todos os links simbólicos, você pode usar:

  find /path/to/directory/ToBeSearched -type l

Para remover todos eles,

  Find /path/to/directory/ToBeSearched -type l -exec rm {} \;

ou algumas dessas variações (existem infinitas).

    
por 13.06.2015 / 12:13