Introduzione
Un collegamento simbolico (symbolic), noto anche come (symlink), è un tipo speciale di file che punta a un altro file o directory. È qualcosa di simile a un collegamento in Windows. Un collegamento simbolico può puntare a un file o una directory sullo stesso o su un file system o su una partizione diversi.
In questa guida, vi mostreremo come cancellare e rimuovere i collegamenti simbolici in sistemi Linux/UNIX utilizzando i rm
, unlink
e comandi find
.
Prima di iniziare
Per rimuovere un collegamento simbolico, è necessario disporre delle autorizzazioni di scrittura sulla directory che contiene il collegamento simbolico. In caso contrario, verrà visualizzato l'errore "Operation not permitted".
Quando si rimuove un collegamento simbolico, il file a cui punta non è interessato.
Utilizzare il comando ls -l
per verificare se un determinato file è un collegamento simbolico e per trovare il file o la directory a cui punta il collegamento simbolico.
ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python -> python2.7
Il primo carattere "l" indica che il file è un collegamento simbolico. Il simbolo “->” mostra il file a cui punta il collegamento simbolico.
Rimuovere i collegamenti simbolici con rm
Il comando rm
rimuove determinati file e directory.
Per eliminare un collegamento simbolico con il comando rm
, invoca il comando seguito dal nome del collegamento simbolico come argomento:
rm symlink_name
In caso di successo, il comando termina con zero e non mostra alcun output.
Con rm
puoi cancellare più di un link simbolico contemporaneamente. Per fare ciò scrivere i nomi dei symlink come argomenti, separati da spazio:
rm symlink1 symlink2
Per ricevere una richiesta di conferma prima di rimuovere il collegamento simbolico, utilizzare l'opzione -i
:
rm -i symlink_name
Per confermare digitare y
e premere Enter
.
rm: remove symbolic link 'symlink_name'?
Se il collegamento simbolico punta a una directory, non aggiungere la barra /
finale alla fine. Altrimenti, riceverai un errore:
rm symlink_to_dir/
rm: cannot remove 'symlink_to_dir/': Is a directory
Se il nome dell'argomento termina con /
, il comando rm
presuppone che il file sia una directory. L'errore si verifica perché, se utilizzato senza l'opzione -d
o -r
, rm
non può eliminare le directory.
Per essere sicuri, non utilizzare mai l'opzione -r
quando si rimuovono i collegamenti simbolici rm
. Ad esempio, se si digita:
rm -r symlink_to_dir/
Il contenuto della directory di destinazione verrà eliminato.
Rimuovere i collegamenti simbolici con unlink
Il comando unlink
cancella un determinato file. Diversamente a rm
, unlink
accetta solo un singolo argomento.
Per eliminare un collegamento simbolico, eseguire il comando unlink
seguito dal nome del collegamento simbolico come argomento:
unlink symlink_name
Se il comando viene eseguito correttamente, non viene visualizzato alcun output.
Non aggiungere la barra finale /
alla fine del nome del collegamento simbolico perché unlink
non è possibile rimuovere le directory.
Trovare ed eliminare collegamenti simbolici interrotti
Se si elimina o si sposta il file di origine in una posizione diversa, il file simbolico rimarrà rotto (dangling - broken).
Per trovare tutti i collegamenti simbolici interrotti in una determinata directory, eseguire il comando seguente:
find /path/to/directory -xtype l
/path/to/directory/symlink1
/path/to/directory/subdir/symlink2
Il comando elencherà tutti i collegamenti interrotti nella directory e nelle sue sottodirectory.
Se si desidera escludere i collegamenti simbolici contenuti nelle sottodirectory, utilizzare l'opzione -maxdepth 1
con find
:
find /path/to/directory -maxdepth 1 -xtype l
/path/to/directory/symlink1
Una volta individuati i collegamenti simbolici non funzionanti, è possibile rimuoverli manualmente con rm
o unlink
oppure utilizzare l'opzione -delete
del comando find
:
find /path/to/directory -xtype l -delete
Conclusione
Per rimuovere un collegamento simbolico, utilizzare il comando rm
o unlink
seguito dal nome del collegamento simbolico come argomento. Quando si rimuove un collegamento simbolico che punta a una directory, non aggiungere una barra finale al nome del collegamento simbolico.