Come trovare e rimuovere collegamenti simbolici interrotti in Linux

Contenuti

Una finestra di terminale su un laptop Linux.

I collegamenti simbolici in Linux sono una caratteristica fantastica, ma possono essere rotti e lasciati puntati verso il nulla. Prossimo, Ti diciamo come individuare i collegamenti simbolici interrotti, rivederli e rimuoverli dal sistema se necessario.

collegamenti simbolici 101

Collegamenti simbolici, chiamato anche “link soavi” e “collegamenti simbolici”, sono una forma di scorciatoie che possono puntare a file e directory. Un collegamento simbolico ha l'aspetto di un normale file o directory in una finestra del file manager. Appare anche come voce in un elenco di file in una finestra di terminale. Il file o la directory a cui punta il collegamento simbolico può trovarsi ovunque nell'albero del file system.

Come esempio, Supponiamo che tu abbia un collegamento simbolico nella tua directory home chiamato "dave-link" che punta a un file chiamato "text-file.txt" che si trova da qualche altra parte nell'albero del filesystem.. I comandi che usi nel collegamento simbolico vengono applicati automaticamente al file a cui punta. Se provi a usare cat oh less nel link simbolico, vedrai il contenuto del file “file-di-testo.txt”.

Un'installazione standard di Linux contiene molti collegamenti simbolici. Anche se non ci credi tu stesso, il sistema operativo li usa. Le routine di installazione delle applicazioni utilizzano spesso collegamenti simbolici per puntare a file eseguibili. Quando il software viene aggiornato, il file binario viene sostituito dalla nuova versione e tutti i collegamenti simbolici continuano a funzionare come prima, purché il nome del nuovo file sia lo stesso di quello vecchio.

Possiamo facilmente vedere alcuni collegamenti simbolici usando ls nella directory principale. Alcuni dei biglietti sono mostrati in un colore diverso; sulla nostra macchina di prova Ubuntu 20.10, mostrato in azzurro.

Scriviamo quanto segue:

ls /

Possiamo dare un'occhiata più approfondita usando il -l (lunga lista) opzione. Scriviamo il seguente comando per vedere tutte le voci “libi” e l'unico ingresso “bidone”:

ls -l / lib * / bin

All'inizio di ogni riga c'è a “io”, che indica che l'elemento è un collegamento simbolico. Il testo dopo “->”Mostra a cosa punta il collegamento simbolico. Nel nostro esempio, le destinazioni sono tutte directory.

I permessi sono elencati come letti, atto ed esecuzione per il proprietario, il gruppo e gli altri. Queste sono voci fasulle predefinite. Non riflettono i permessi effettivi sugli oggetti puntati dai collegamenti simbolici. Sono i permessi sul file o sulla directory di destinazione che hanno la priorità e sono rispettati dal file system.

collegamenti simbolici interrotti

Un collegamento simbolico è interrotto (o viene lasciato in sospeso) quando il file a cui punta viene eliminato o spostato in un'altra posizione. Se la routine di disinstallazione di un'app non funziona correttamente o viene interrotta prima del completamento, potresti rimanere con collegamenti simbolici interrotti.

Se qualcuno elimina manualmente un file senza sapere che i collegamenti simbolici puntano ad esso, quei collegamenti simbolici smetteranno di funzionare. Saranno come segnali stradali che indicano una città che è stata rasa al suolo.

Possiamo facilmente vedere questo comportamento usando un collegamento simbolico chiamato “Ciao” La virgoletta singola o l'apostrofo della parola. Scriviamo quanto segue, usando ls vedere:

ls -l

Indica un programma chiamato “htg” in una directory chiamata “bidone”. Se "eseguiamo" il collegamento simbolico, esegui il programma per noi:

./Ciao

Ora possiamo verificare se questo è ciò che sta accadendo eseguendo direttamente il programma:

../cestino/htg

Come potremmo aspettare?, otteniamo la stessa risposta. Cancelliamo il file del programma:

rm ../bin/htg

Ora, quando guardiamo il collegamento simbolico, vediamo che è in rosso perché Linux sa che è rotto. Ci dice anche a cosa mirava, così possiamo sostituire il file, ricompilare il programma o fare tutto il necessario per riparare il collegamento simbolico.

Nota che se proviamo a eseguire il collegamento simbolico, l'errore che otteniamo si riferisce al nome del collegamento simbolico, al posto del nome del programma a cui punta il collegamento simbolico.

Scriviamo quanto segue:

./Ciao

Trova collegamenti simbolici interrotti

Le versioni più moderne di find avere il xtype opzione (tipo esteso), che semplifica la ricerca di collegamenti simbolici interrotti. Useremo il l bandiera con xtype, per istruirti a cercare i link. Usando find e xtype nel prossimo modo, senza nessuno degli altri type banderas, forze xtype per restituire collegamenti interrotti:

trova . -xtype l

Quando si esegue il comando nella nostra directory home di prova, ci sono parecchi collegamenti simbolici interrotti. Nota che la ricerca è ricorsiva per impostazione predefinita, quindi cerca automaticamente tutte le sottodirectory.

Il legame simbolico “Ciao” che abbiamo rotto apposta appare nell'elenco, come ci aspettavamo. Uno degli altri collegamenti simbolici è relativo al browser Firefox, e il resto è legato alle istantanee.

Se inviamo l'output attraverso wc con il -l (Linee), possiamo contare le linee, che equivale a contare i collegamenti simbolici interrotti.

Scriviamo quanto segue:

trova . -xtype l | wc -l

Siamo informati che abbiamo 24 collegamenti simbolici interrotti che non puntano a nulla.

Cercare, rivedi e poi rimuovi

Prima di affrettarti a rimuovere tutti i collegamenti simbolici interrotti, vedere i risultati del find comando. Vedi se c'è una ragione valida per uno qualsiasi dei collegamenti simbolici interrotti.

Qualche volta, il collegamento simbolico potrebbe essere il problema, invece del file di destinazione. Se il collegamento simbolico è stato creato in modo errato, è fattibile che non miri a nulla, ma il vero obiettivo è presente. Quindi, la risposta sarebbe ricreare il collegamento simbolico.

È anche possibile che un collegamento simbolico apparentemente interrotto venga utilizzato come qualcos'altro, come indicatore di blocco dei file o altro indicatore di attivazione / non andare. Firefox fa questo; questo è il primo collegamento simbolico della nostra lista. Nonostante questo, Firefox non è utilizzato sulla nostra macchina di prova, quindi è sicuro per noi rimuoverlo.

È anche possibile che il target sia presente solo periodicamente, e questo è il comportamento previsto (e desiderato) di quel particolare software. Forse il file di destinazione è stato copiato da un'altra macchina o dal cloud, svolge la sua funzione e poi viene nuovamente rimosso, solo per essere sostituito da un programma diverso nel ciclo successivo.

Il collegamento simbolico interrotto può anche essere un sintomo di un'installazione del software non riuscita.. Quindi, invece di rimuovere il collegamento simbolico, è necessario ripararlo manualmente o ripetere l'installazione.

Dopo aver corretto i collegamenti interrotti, è necessario mantenere, ripeti il ​​comando per cercare. I collegamenti simbolici fissi dovrebbero essere assenti dai risultati di ricerca.

Per motivi di sicurezza, è meglio limitare la rimozione dei collegamenti simbolici alle proprie directory. Fai molta attenzione quando esegui questi comandi come root o nelle directory di sistema.

Elimina i collegamenti simbolici interrotti

il -exec L'opzione (correre) eseguire comandi sul find Risultati di ricerca. Utilizzeremo rm per rimuovere ogni collegamento simbolico interrotto. il {} La stringa viene sostituita con il nome di ogni collegamento simbolico interrotto man mano che ciascuno viene scoperto da find.

Dobbiamo usare un punto e virgola (;) per finire l'elenco dei comandi che vogliamo -exec correre. Useremo una barra rovesciata () per “fuga” punto e virgola, quindi è trattato come parte del find comando, invece di qualcosa Bash deve agire.

Scriviamo quanto segue:

trova . -xtype l -exec rm {} ;

Torniamo al prompt dei comandi senza alcuna indicazione che sia successo qualcosa. Per verificare che i collegamenti interrotti siano stati rimossi, ripetiamo il comando per cercarli, nel prossimo modo:

trova . -xtype l

Nessun risultato corrispondente, il che significa che i collegamenti simbolici interrotti sono stati rimossi.

Ricordati di controllare prima

Ancora, prenditi sempre il tempo di rivedere un elenco di collegamenti simbolici prima di eseguire il comando per rimuoverli. Puoi evitare di rimuovere quelli incerti eseguendo il comando per rimuoverli nelle directory appropriate.

Come esempio, sopra, avremmo potuto eseguire il comando nella directory “.affrettato” e quindi ho rimosso manualmente il collegamento simbolico solitario “Ciao”. Ciò avrebbe lasciato intatto il collegamento simbolico di blocco di Firefox.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.