GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il mio collegamento simbolico non funziona?

I collegamenti simbolici tendono ad apprezzare i percorsi completi o relativi al collegamento, altrimenti spesso possono cercare file-1.txt localmente (stranamente).

Vai a proper ed eseguire ls -l e puoi vedere che il collegamento simbolico sta cercando actual/file-1.txt , quando dovrebbe essere ../actual/file-1.txt .

Quindi hai due opzioni:

  1. Indica il percorso completo

    ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
    
  2. Passare alla cartella in cui si desidera inserire il collegamento e collegarsi da lì

    cd proper
    ln -s ../actual/file-1.txt ../actual/file-2.txt ./
    

Modifica :Un suggerimento per salvare la digitazione.

Potresti semplicemente fare ln -s ~/actual/file-{1,2}.txt ~/proper

Gli elementi nelle parentesi graffe vengono sostituiti e posizionati uno dopo l'altro, creando il comando

    ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
    

che collega entrambi i file alla directory di destinazione. Risparmia alcune digitazioni importanti man mano che avanzi nella shell.


Il problema è l'utilizzo di percorsi relativi. Se specifichi la creazione del collegamento con il percorso esplicito completo, funziona.

$ ln -s ~/actual/file1.txt ~/actual/file2.txt ~/proper/

$ cat corretto/file1.txt

file 1

$

Il tuo esempio crea collegamenti in proper che cercano una sottodirectory chiamata actual sotto la directory corrente, piuttosto che il genitore previsto di entrambi.


I collegamenti simbolici possono essere complicati. In sostanza, un collegamento simbolico è un file che contiene un nome file/percorso per un altro file (e che è contrassegnato per un trattamento speciale). Se il percorso nel file di collegamento inizia con "/ ', quindi viene trattato come un percorso assoluto e le cose sono abbastanza semplici. Se non inizia con una barra, viene trattato come un percorso relativo, relativo alla directory in cui si trova il collegamento. (Questo è vero indipendentemente dal fatto che il nome contenga o meno le barre.) Quindi, hai creato proper/file–1.txt come collegamento a "actual/file–1.txt ", e quando hai provato ad accedervi, il sistema ha tentato di accedere a proper/actual/file–1.txt . Avresti dovuto dire

ln –s  ../actual/file–1.txt  ../actual/file–2.txt  proper

A proposito, non ti serviva il touch comandi. echo "file 1" > actual/file–1.txt è sufficiente per creare actual/file–1.txt .


Linux
  1. Perché Nullglob non è predefinito?

  2. Perché Lsdel in Debugfs non funziona?

  3. Il collegamento simbolico non funziona come previsto quando si cambia utente?

  4. Variabili d'ambiente nei collegamenti simbolici

  5. collegamento simbolico:trova tutti i file che si collegano a questo file

Perché "\d" non funziona nelle espressioni regolari in sed?

Perché il mio collegamento simbolico crea un file e non una cartella?

Perché Bash `(())` non funziona all'interno di `[[]]`?

Perché creare un collegamento come questo:ln -nsf?

Perché hostname --fqdn non funziona sul mio computer Ubuntu?

perché il bridge linux non funziona