FYI: ln -n /path/to/filecria um arquivo nomeado fileno diretório atual e é uma abreviação de ln --no-dereference /path/to/file. Isso significa que, se /path/to/filefor um link simbólico, o novo hardlink criado apontará para esse link simbólico, em vez do destino do link simbólico.
Lekensteyn
Respostas:
37
Você pode excluí-lo com rmas usual: rm NameOfFile. Observe que, nos links físicos, não há distinção entre "o arquivo original" e "o link para o arquivo": você só tem dois nomes para o mesmo arquivo e a exclusão de apenas um nome não excluirá o outro.
Além disso, você precisará rm-lo como root (use sudo), se você o criou com o comando que forneceu (como superusuário).
Rafał Cieślak 5/11
3
@ RafałCieślak: Errado. Todos os links físicos para um inode compartilham as mesmas permissões de acesso, as do inode. Para excluir, ou seja, "desvincular", uma entrada de diretório de um arquivo, você precisa de permissões de gravação no inode desse arquivo e no diretório que contém a entrada que deseja excluir. Portanto, é irrelevante quais privilégios foram usados para criar o link físico. Eles podem acontecer (ainda) ser o mesmo que no momento da criação.
David Foerster
2
Eu tenho esse script para remover links físicos redundantes. Mas tome cuidado - é bastante perigoso.
#!/bin/bash
clear
echo Reduce redundant hardlinks in the current folder
echo ------------------------------------------------
echo
echo " $(basename $0) [-R]"
echo " -R means recursive"
echo
read -p "You can break by pressing Ctrl+C"
echo
ask=1if[ a$1 =="a-R"];then recursive=" -R ";fifor i in $(ls -i $recursive | awk '{print $1}'| uniq --repeated | sort);do
echo "Inode with multiple hardlinked files: $i"
first=1for foundfile in $(find .-xdev -inum $i);doif[ $first ==1];then
echo " preserving the first file: $foundfile"
first=0else
echo " deleting the redundant file: $foundfile"#rm $foundfile fidoneif[ $ask ==1];then
read -p "Delete all the rest of redundant hardlinks without asking? y/N "if[ a${REPLY,,}=="ay"];then ask=0;fifi# read -p "pause for sure"
echo
done
echo "All redundant hardlins are removed."
echo
Tem certeza de que o seu foi um link direto? Os links físicos são como arquivos iirc.
Seth
@ Set, na verdade não me lembro o que foi isso, mas ele não quer remover como você pode ver. Alguém me disse para usar o unlink e funcionou. :)
Bunyk
Provavelmente porque o AZP era um arquivo, não um diretório, mas eu não podia ter certeza sem mais informações. Desvincular sempre deve funcionar, portanto, não há problemas.
Seth
1
AZP/parece um diretório, o rm não opera em diretórios sem o sinalizador recursivo. Também de acordo com os documentos coreutills. >>> A maioria dos sistemas proíbe a criação de um link físico para um diretório; naqueles em que é permitido, apenas o superusuário pode fazê-lo (e com cuidado, pois a criação de um ciclo causará problemas a muitos outros utilitários).
ThorSummoner
2
Links físicos para diretórios são proibidos. Se AZPé um link simbólico para um diretório (ou qualquer outra coisa) rm AZP/não funcionará porque rmpensa que é um diretório (por causa do /no final). No entanto, rm AZPirá funcionar muito bem. -1
David Foerster
0
Se você deseja remover apenas o link e, assim, manter o arquivo original, precisará desvincular.
Você leu o que unlink(1)faz? É um invólucro superficial em torno da unlink(2)chamada do sistema, a mesma chamada de sistema rm(1)usada para todos os arquivos que não são diretórios.
David Foerster
1
Esta resposta é enganosa. Nos arquivos com links físicos, não há distinção entre "link" e "arquivo original"; todos os hardlinks se referem ao mesmo arquivo / conteúdo / inode, representado por diferentes entradas de diretório. unlink, apesar do nome, não separará um link físico em dois arquivos separados, mas removerá a entrada de diretório "desvinculada" (mas não o arquivo / content / inode, contanto que a contagem de links seja> 1).
ln -n /path/to/file
cria um arquivo nomeadofile
no diretório atual e é uma abreviação deln --no-dereference /path/to/file
. Isso significa que, se/path/to/file
for um link simbólico, o novo hardlink criado apontará para esse link simbólico, em vez do destino do link simbólico.Respostas:
Você pode excluí-lo com
rm
as usual:rm NameOfFile
. Observe que, nos links físicos, não há distinção entre "o arquivo original" e "o link para o arquivo": você só tem dois nomes para o mesmo arquivo e a exclusão de apenas um nome não excluirá o outro.fonte
sudo
), se você o criou com o comando que forneceu (como superusuário).Eu tenho esse script para remover links físicos redundantes. Mas tome cuidado - é bastante perigoso.
fonte
Na verdade
rm
não funciona:O que funciona é
unlink AZP
.fonte
AZP/
parece um diretório, o rm não opera em diretórios sem o sinalizador recursivo. Também de acordo com os documentos coreutills. >>> A maioria dos sistemas proíbe a criação de um link físico para um diretório; naqueles em que é permitido, apenas o superusuário pode fazê-lo (e com cuidado, pois a criação de um ciclo causará problemas a muitos outros utilitários).AZP
é um link simbólico para um diretório (ou qualquer outra coisa)rm AZP/
não funcionará porquerm
pensa que é um diretório (por causa do/
no final). No entanto,rm AZP
irá funcionar muito bem. -1Se você deseja remover apenas o link e, assim, manter o arquivo original, precisará desvincular.
fonte
unlink(1)
faz? É um invólucro superficial em torno daunlink(2)
chamada do sistema, a mesma chamada de sistemarm(1)
usada para todos os arquivos que não são diretórios.unlink
, apesar do nome, não separará um link físico em dois arquivos separados, mas removerá a entrada de diretório "desvinculada" (mas não o arquivo / content / inode, contanto que a contagem de links seja> 1).