Come faccio a sapere se una cartella è in realtà un link simbolico e come posso ripararla se è rotta?


28

Come faccio a sapere se ho un collegamento simbolico, un collegamento di qualche tipo o una cartella in Linux? Si prega di vedere la seguente schermata.

collegamento simbolico nella shell di linux

Come puoi vedere, il lscomando elenca gli oggetti in cui alcuni sono colorati in blu scuro mentre altri sono colorati in azzurro (ciano). Quali sono questi oggetti di colore ciano? Sono questi veri e propri collegamenti simbolici?

Come puoi vedere, non riesco cda quello chiamato hdd.

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

Penso che debba reindirizzare a /media/hdde ho notato che manca la cartella hdd.

C'è un modo per risolvere questo problema?

Aggiornamento: ecco i risultati del ls -alcomando.

collegamento simbolico nella shell linux 2

Come puoi vedere dice hdd -> /media/hdded è colorato in rosso. Questo significa che è rotto o che è montato automaticamente, cioè quando un hdd fisico è collegato?

Aggiornamento: ecco il risultato del grep media /etc/auto*comando.

collegamento simbolico nella shell di linux 3

Cosa fanno queste /etc/auto.master:/media/nete le /etc/auto.networkvoci?

Ecco i risultati del ls -Fal /mediacomando.

collegamento simbolico nella shell linux 4

È di qualche aiuto? ...

Ecco i risultati state i filecomandi, nonché gli elenchi di / usr e / bin.

collegamento simbolico nella shell linux 5

Questo mi aiuta in qualche modo? ... ti aiuta ad aiutarmi? ...

Da un lato no, quello che dovresti sapere è che questo è un STB basato su Linux con BusyBox, è un sistema incorporato. Quindi non tutti i comandi potrebbero essere supportati.

Aggiornamento: ultimo screenshot, che mostra i file e i comandi supportati in / sbin e / usr / sbin.

collegamento simbolico nella shell linux 6

Aggiornamento: nuova condivisione aggiunta ...

Ora ho rimosso quella vecchia condivisione e ne ho ricreata una con lo stesso nome di prima e ora ho aggiunto una seconda condivisione. Quindi ora ne ho due.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

Le registrazioni sono collocate in / media / net / dream1 / movie.

Inoltre, per la condivisione dream2 ho scelto di non montarlo come sostituto dell'HDD in Mount Manager, poiché sospetto che non sia possibile avere più di un atto come HDD. Dove registrerebbe? In entrambe le località? Con il doppio della velocità dei dati? ... Non credo sia possibile.

Quindi per questo motivo non esiste una sottocartella denominata movie per la condivisione dream2. Solo quelli che vengono specificati come sostitutivi dell'HDD quando vengono creati ottengono la sottocartella del film.

Se io cda hdd dalla radice va /media/net/dream1. Se io cda ..(genitore) torna a root (/).

Alla radice ls -alhdd -> media/hdd. ls -al hddhdd -> media/hdd. ls -al media/media/net/dream1.

Inoltre, se io cda /mediac'è un altro hddlink simbolico. Non l'ho notato prima. Penso che questo venga creato automaticamente quando viene montata una condivisione. E se io cda questo disco rigido va /media/net/dream1.

Un collegamento simbolico hdd(/ hdd) che punta a un altro hddcollegamento simbolico (/ media / hdd), che a sua volta punta alla cartella di condivisione (/ media / net / dream1)? ..... Mi gira la testa ...

Non era così prima della versione 3.2.3 o almeno 3.2.0 dell'immagine Enigma2.

Modifica: per impostazione predefinita, la seconda condivisione fungerà da sostituto dell'HDD e diventa la condivisione attiva per la registrazione. Allo stesso tempo, la condivisione precedentemente impostata come sostituto dell'HDD non è più attiva, anche se è ancora impostata su "sì" (agisce come sostituzione dell'HDD).

Se dream1 è stato inizialmente utilizzato come sostituto dell'HDD ("sì" per fungere da sostituto) e quindi dream2 è impostato come sostituto dell'HDD, diventa la nuova condivisione per la registrazione. Riesco ancora a vedere e visualizzare i file video archiviati in dream1 ma non riesco più a registrarli. Se voglio tornare a utilizzare dream1 per la registrazione, devo prima impostare dream2 su "no" (smettere di agire come sostituto dell'HDD) e quindi ripristinare dream1 su "sì".

Quindi no, non è possibile registrare su due condivisioni contemporaneamente. Uno di loro deve andare. Quindi è o dream1 o dream2, non entrambi. Anche se dovrei menzionare che è possibile registrare più di un servizio (canale televisivo) se sono entrambi sullo stesso transponder, in caso contrario viene visualizzato il messaggio "nessun sintonizzatore gratuito". Questo è un STB con un solo sintonizzatore.


3
per favore non incollare schermate per il testo. copia e incolla invece il testo e usa i tag o backtick pre o code per conservare rientro / formattazione. e modifica il testo fino al minimo richiesto per mostrare qualunque cosa tu stia cercando di mostrare. A proposito, un problema con gli screenshot è che i caratteri minuscoli diventano ancora più piccoli - al punto di illeggibili - se visualizzati su schermi a risoluzione più elevata (ad esempio 1920x1200 o 2566x1440) ... i pixel sono fissi, il testo può essere ridimensionato.
Cas

@CraigSanders Sanders Sei in alto ... in risoluzione! ;) Seariously, ti sento amico! Non ci ho pensato davvero. Grazie per il consiglio. Proverò a usare un blocco di codice la prossima volta.
Samir,

Quello ls -alche fa davvero è che mostra tutti i file (-a) in un lungo elenco (-l). Sì, questo mi dà ulteriori informazioni, ma mi aiuta a identificare un collegamento simbolico? Se ha una freccia a destra, è così che dico se si tratta di un collegamento simbolico? L'altro identificatore è ovviamente il codice colore, ma alcuni di voi suggeriscono che il colore non è affidabile.
Samir,

Questo non è più un problema. Ho montato una condivisione CIFS di Windows tramite il plug-in Mount Manager (Dreambox, Enigma 2, versione 3.2.3) e ho scelto di usarlo come sostituto dell'HDD. Dopo aver fatto questo il ls -alcomando ha mostrato hdd -> media/hdd. E ora è possibile eseguire cdl'hdd e il collegamento funziona. Ma ciò che è interessante è che ls -al mediamostra hdd -> /media/net/mydreame questo è in realtà dove va quando devo cdhdd. "Mydream" è il nome della condivisione. Perché ottengo risultati diversi?
Samir,

La mia ipotesi è che ci sia qualche meccanismo (possibilmente una regola udev) per assicurarsi che il link simbolico / hdd sia aggiornato per puntare a qualsiasi dispositivo o condivisione sia montato, in modo che altri programmi e script possano semplicemente usare / hdd (dopo aver testato che la directory indica un fs montato). solo per curiosità, cosa succede se monti una seconda unità o condividi? Crea un symlink / hde? o il dreambox è limitato a una directory di registrazione?
CAS

Risposte:


29

È possibile utilizzare file, stat o ls.

file:

Il comando file viene utilizzato per classificare i file in base al loro tipo (link simbolico, directory, dispositivo) o contenuto (testo, gzip, immagine, tar, ..., indipendentemente dalla loro estensione):

$ file / dev / stdout
/ dev / stdout: collegamento simbolico a `/ proc / self / fd / 1 '
$ file / proc / self / fd / 1
/ proc / self / fd / 1: collegamento simbolico a `/ dev / pts / 0 '
$ file / dev / pts / 0
/ dev / pts / 0: speciale personaggio (136/0)
$ file / etc / passwd
/ etc / passwd: testo ASCII

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1 radice radice 15 gennaio 27 07:55 / dev / stdout -> / proc / self / fd / 1

statistica:

il comando stat stampa i metadati dei file come permessi, dimensioni, numero di blocchi e così via ...

$ stat / dev / stdout
  File: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Dimensione: 15 blocchi: 0 IO Block: 4096 link simbolico
Dispositivo: 5h / 5d Inode: 1212 Collegamenti: 1
Accesso: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Accesso: 27/01/2014 11: 22: 47.971187828 -0200
Modifica: 27/01/2014 07: 55: 13.996981285 -0200
Modifica: 27/01/2014 07: 55: 13.996981285 -0200
 Nascita: -

A cosa si file hddriferisce? Non capisco ...
Samir,

Il stat hddmi dà -sh: stat: not found.
Samir,

Penso che non hai il comando stat (o non è nel tuo $ PATH). Comunque il comando file può darti una possibilità ...
filipenf,

Per bash sul terminale Mac il comando file segue i collegamenti simbolici per impostazione predefinita. Se vuoi vedere se è un link simbolico aggiungi il comando -h. Che non segue i symlink.
ClintM,

7

bash:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi

3

Il modo più semplice per vedere che tipo di entità è un determinato file sarebbe usare il filecomando. Ha un output chiaro e sano senza la necessità di ricordare quali sono i lssegni di classificazione o di fare affidamento su output colorati che possono variare da utente a utente e da macchina a macchina. Per esempio:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Se ti trovi su un sistema senza filepuoi usare il statcomando che ti dirà che tipo di voce di file è e dove punta. Per scoprire se un collegamento è interrotto, dovrai eseguire i stat -Lcollegamenti di dereference, che genereranno un errore se il collegamento è interrotto.

Per quanto riguarda la seconda parte della tua domanda, la mediadirectory è spesso gestita da automounter di qualche tipo. La /media/hddvoce può essere utilizzata dal sistema per dispositivi di archiviazione di massa USB o potrebbe anche essere in attesa del giusto tipo di disco rigido (dispositivo ATA vs SCSI vs Xen). I collegamenti interrotti non danneggeranno nulla a meno che un programma non provi a usarli e i collegamenti multimediali sono davvero per tua comodità. Puoi tranquillamente lasciare il /hddlink o rimuoverlo come preferisci.


Hai ragione, sembra che il file non sia un comando qui, dice -sh: file: not foundquando lo faccio fileed entro.
Samir,

Sembra un po 'come se il tuo $ PATH fosse un po' limitato. Prova invece a eseguirlo direttamente:/usr/bin/file
joruffin,

Vedo dal tuo altro commento che sei su un set top box. Che potrebbe non avere niente di diverso da Busybox installato, e Busybox non emula il filecomando, ma ha il supporto per il statcomando se è stato compilato. Potrebbe comunque essere al di fuori di $ PATH o vivere in un posto oscuro come / sbin / stat o / usr / sbin / stat.
joruffin,

Non sembra che abbia il supporto per fileo stat. Ho controllato i percorsi che menzioni (vedi screenshot sopra). Comunque ... quello che stai dicendo è che in un sistema Linux ideale, il filecomando, seguito dal percorso di ricerca del file o della cartella di destinazione, mi rivelerebbe che tipo di entità è?
Samir,

2
Per quanto riguarda i comandi supportati in Busybox puoi eseguire /usr/bin/busyboxe ti mostrerà tutti i comandi per cui ha il supporto, anche se i comandi non sono installati. Per utilizzare un comando busybox è possibile eseguire /usr/bin/busybox <command> <parameters>. Quindi, se dice che supporta il comando stat, è possibile eseguire /usr/bin/busybox stat /hdd. Per un facile utilizzo è possibile creare collegamenti simbolici per Busybox con il nome del comando da richiamare. Se supporta il comando stat potresti semplificare l'esecuzione ln -s /usr/bin/busybox /usr/bin/stat.
joruffin,

1
  1. Sì, i ciano sono collegamenti simbolici
  2. Per vedere dove stanno puntando: ls -Fal
  3. Produzione ls -Fal /media

Questo è probabilmente un punto di automount di qualche tipo.

grep media /etc/auto* potrebbe produrre un successo.


Che cos'è un punto di montaggio automatico? Intendi come ... quando collego un'unità disco SATA fisica viene montata a questo punto? ... questo è un STB Linux e non ha un HDD incorporato, ma ha una porta eSATA sul retro. Questo potrebbe essere dedicato a questo scopo.
Samir,

@Sammy Sì /mediaè il mountpoint standard per i dispositivi PnP.
Nils,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.