Comment savoir si un dossier est en fait un lien symbolique et comment le corriger s'il est cassé?

28

Comment savoir si j'ai un lien symbolique, un raccourci quelconque ou un dossier sous Linux? Veuillez voir la capture d'écran suivante.

lien symbolique dans le shell Linux

Comme vous pouvez le voir, la lscommande répertorie les objets dont certains sont colorés en bleu foncé tandis que d'autres sont colorés en bleu clair (cyan). Quels sont ces objets de couleur cyan? S'agit-il de véritables liens symboliques?

Comme vous pouvez le voir, je ne peux pas cdcelui appelé hdd.

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

Je pense qu'il doit rediriger vers /media/hddet j'ai remarqué que le dossier hdd est manquant.

Y'a t'il un moyen d'arranger cela?

Mise à jour: Voici les résultats de la ls -alcommande.

lien symbolique dans le shell linux 2

Comme vous pouvez le voir, il est dit hdd -> /media/hddet il est coloré en rouge. Est-ce à dire qu'il est cassé ou qu'il est monté automatiquement, c'est-à-dire lorsqu'un disque dur physique est connecté?

Mise à jour: Voici le résultat de la grep media /etc/auto*commande.

lien symbolique dans le shell linux 3

Que font ces entrées /etc/auto.master:/media/netet ces /etc/auto.networkentrées?

Voici les résultats de la ls -Fal /mediacommande.

lien symbolique dans le shell linux 4

Est-ce utile? ...

Voici les résultats de statet les filecommandes, ainsi que les listes de / usr et / bin.

lien symbolique dans le shell linux 5

Est-ce que cela m'aide d'une quelconque façon? ... Est-ce que cela vous aide à m'aider? ...

Par ailleurs, ce que vous devez savoir, c'est que c'est un STB basé sur Linux avec BusyBox, c'est un système embarqué. Par conséquent, toutes les commandes ne sont pas prises en charge.

Mise à jour: dernière capture d'écran, montrant les fichiers et les commandes prises en charge dans / sbin et / usr / sbin.

lien symbolique dans le shell linux 6

Mise à jour: nouveau partage ajouté ...

J'ai maintenant supprimé cet ancien partage et en ai recréé un avec le même nom qu'avant et j'ai également ajouté un deuxième partage maintenant. Alors maintenant, j'en ai deux.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

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

Les enregistrements sont placés dans / media / net / dream1 / movie.

De plus, pour le partage dream2, j'ai choisi de ne pas le monter comme remplacement de disque dur dans le Mount Manager, car je soupçonne qu'il n'est pas possible d'avoir plus d'un acte comme disque dur. Où enregistrerait-il? Aux deux endroits? Avec le double du débit? ... Je ne pense pas que ce soit possible.

Donc, pour cette raison, il n'y a pas de sous-dossier nommé film pour le partage dream2. Seuls ceux qui sont spécifiés comme remplacement du disque dur lors de la création obtiennent le sous-dossier du film.

Si je cdvers hdd à partir de la racine, il passe à /media/net/dream1. Si je cdà ..(parent) , il retourne à root (/).

À la racine ls -aldonne hdd -> media/hdd. ls -al hdddonne hdd -> media/hdd. ls -al mediadonne /media/net/dream1.

, Si je aussi cdà /mediail y a un autre hddlien symbolique. Je ne l'avais pas remarqué auparavant. Je pense que cela est créé automatiquement lorsqu'un partage est monté. Et si je cdà ce disque dur, il va /media/net/dream1.

Un lien symbolique hdd(/ hdd) qui pointe vers un autre hddlien symbolique (/ media / hdd), qui à son tour pointe vers le dossier de partage (/ media / net / dream1)? ..... Je deviens étourdi ...

Ce n'était pas comme ça avant la version 3.2.3 ou au moins 3.2.0 de l'image Enigma2.

Modifier: en configurant le deuxième partage pour qu'il remplace le disque dur, il devient le partage actif pour l'enregistrement. Dans le même temps, le partage qui était précédemment défini pour agir comme remplacement de disque dur n'est plus actif, même s'il est toujours défini sur "oui" (agir comme remplacement de disque dur).

Si dream1 a d'abord été utilisé comme remplacement de disque dur ("oui" pour remplacer), puis dream2 est configuré pour agir comme remplacement de disque dur, il devient le nouveau partage pour l'enregistrement. Je peux toujours voir et visualiser les fichiers vidéo stockés dans dream1 mais je ne peux plus y enregistrer. Si je veux recommencer à utiliser dream1 pour l'enregistrement, je dois d'abord régler dream2 sur "non" (arrêter d'agir comme remplacement de disque dur), puis réinitialiser dream1 sur "oui".

Donc non, il ne peut pas enregistrer sur deux parts en même temps. L'un d'eux doit partir. C'est donc dream1 ou dream2, pas les deux. Bien que je devrais mentionner qu'il est possible d'enregistrer plus d'un service (chaîne de télévision) s'ils sont tous les deux sur le même transpondeur, sinon vous obtenez le message "pas de tuner gratuit". Il s'agit d'un décodeur avec un seul tuner.

Samir
la source
3
veuillez ne pas coller de captures d'écran pour le texte. copiez et collez le texte à la place et utilisez les balises ou les balises pre ou code pour conserver l'indentation / la mise en forme. et modifiez le texte au minimum requis pour montrer tout ce que vous essayez de montrer. BTW, un problème avec les captures d'écran est que les minuscules polices deviennent encore plus minuscules - au point d'être illisibles - lorsqu'elles sont affichées sur des écrans de plus haute résolution (par exemple 1920x1200 ou 2566x1440) ... les pixels sont fixes, le texte peut être mis à l'échelle.
cas
@CraigSanders Sanders Votre résolution est élevée! ;) Merriblement, je vous entends mec! Je n'y ai pas vraiment pensé. Merci pour le conseil. Je vais essayer d'utiliser un bloc de code la prochaine fois.
Samir
Ce ls -alqui fait vraiment, c'est qu'il montre tous les fichiers (-a) dans une longue liste (-l). Oui, cela me donne plus d'informations, mais cela m'aide-t-il à identifier un lien symbolique? S'il a une flèche à droite, c'est comme ça que je dis s'il s'agit d'un lien symbolique? L'autre identifiant est évidemment le code couleur, mais certains d'entre vous suggèrent que la couleur n'est pas digne de confiance.
Samir
Ce n'est plus un problème. J'ai monté un partage Windows CIFS via le plugin Mount Manager (Dreambox, Enigma 2, version 3.2.3) et j'ai choisi de l'utiliser comme remplacement de disque dur. Après cela, la ls -alcommande a montré hdd -> media/hdd. Et maintenant, il est possible cdde hdd et le lien fonctionne. Mais ce qui est intéressant, c'est que ça se ls -al mediavoit hdd -> /media/net/mydreamet c'est en fait là où ça va quand je cdvers hdd. Le "mydream" est le nom du partage. Pourquoi est-ce que j'obtiens des résultats différents?
Samir
Je suppose qu'il existe un mécanisme (peut-être une règle udev) pour s'assurer que le lien symbolique / hdd est mis à jour pour pointer vers le périphérique ou le partage monté, de sorte que d'autres programmes et scripts puissent simplement utiliser / hdd (après avoir testé que le répertoire il pointe vers un fs monté). juste par curiosité, que se passe-t-il si vous montez un deuxième lecteur ou partagez? Fait-il un lien symbolique / hde? ou la dreambox est-elle limitée à un répertoire d'enregistrement?
cas

Réponses:

29

Vous pouvez utiliser file, stat ou ls.

fichier:

La commande file permet de classer les fichiers selon leur type (lien symbolique, répertoire, périphérique) ou leur contenu (texte, gzip, image, tar, ..., quelle que soit leur extension):

$ file / dev / stdout
/ dev / stdout: lien symbolique vers `/ proc / self / fd / 1 '
$ file / proc / self / fd / 1
/ proc / self / fd / 1: lien symbolique vers `/ dev / pts / 0 '
$ fichier / dev / pts / 0
/ dev / pts / 0: caractère spécial (136/0)
$ file / etc / passwd
/ etc / passwd: texte ASCII

ls:

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

stat:

la commande stat imprime les métadonnées des fichiers comme les autorisations, la taille, le nombre de blocs et ainsi de suite ...

$ stat / dev / stdout
  Fichier: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Taille: 15 Blocs: 0 IO Block: 4096 lien symbolique
Appareil: 5h / 5d Inode: 1212 Liens: 1
Accès: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Accès: 2014-01-27 11: 22: 47.971187828 -0200
Modifier: 2014-01-27 07: 55: 13.996981285 -0200
Modification: 2014-01-27 07: 55: 13.996981285 -0200
 Naissance: -
filipenf
la source
À quoi fait file hddréférence? Je ne comprends pas ...
Samir
Le stat hddme donne -sh: stat: not found.
Samir
Je pense que vous n'avez pas la commande stat (ou elle n'est pas dans votre $ PATH). Quoi qu'il en soit, la commande file peut vous donner un coup de feu ...
filipenf
Pour bash sur le terminal Mac, la commande file suit les liens symboliques par défaut. Si vous voulez voir s'il s'agit d'un lien symbolique, ajoutez la commande -h. Qui ne suit pas les liens symboliques.
ClintM
7

frapper:

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
glenn jackman
la source
3

La façon la plus simple de voir quel type d'entité est un fichier donné serait d'utiliser le file commande. Il a une sortie claire et saine sans vous obliger à vous rappeler ce que sont les lsmarques du classificateur, ou à compter sur une sortie colorée qui peut varier d'un utilisateur à l'autre et d'une machine à l'autre. Par exemple:

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'

Si vous vous trouvez sur un système sans file vous pouvez utiliser la statcommande qui vous dira de quel type d'entrée de fichier il s'agit et où il pointe. Pour savoir si un lien est rompu, vous devrez ensuite exécuter des stat -Lliens de déréférencement, ce qui donnera une erreur si le lien est rompu.

Quant à la deuxième partie de votre question, le mediarépertoire est souvent géré par des monteurs automatiques d'une certaine sorte. L' /media/hddentrée peut être utilisée par votre système pour les périphériques de stockage de masse USB ou peut même attendre le bon type de disque dur (ATA vs SCSI vs Xen block device). Les liens brisés ne blesseront rien à moins qu'un programme n'essaye de les utiliser, et les liens multimédias sont vraiment pour votre commodité. Vous pouvez laisser le /hddlien en toute sécurité ou le supprimer à votre guise.

joruffin
la source
Vous avez raison, on dirait que le fichier n'est pas une commande ici, il dit -sh: file: not foundquand je fais fileet entre.
Samir
Cela ressemble un peu à votre $ PATH est un peu limité. Essayez de l'exécuter directement à la place:/usr/bin/file
joruffin
Je vois dans votre autre commentaire que vous êtes sur un décodeur. Il se peut que rien d'autre que Busybox ne soit installé, et Busybox n'émule pas la filecommande, mais prend en charge la statcommande si elle a été compilée. Elle peut toujours être en dehors de votre $ PATH, ou vivre dans un endroit obscur comme / sbin / stat ou / usr / sbin / stat.
joruffin
Il ne semble pas qu'il soit compatible avec fileou stat. J'ai vérifié les chemins que vous mentionnez (voir capture d'écran ci-dessus). Quoi qu'il en soit ... ce que vous dites, c'est que dans un système Linux idéal, la filecommande, suivie du chemin de recherche du fichier ou du dossier cible, me révélerait de quel type d'entité il s'agit?
Samir
2
En ce qui concerne les commandes prises en charge dans Busybox, vous pouvez l'exécuter /usr/bin/busyboxet il vous montrera toutes les commandes qu'il prend en charge, même si les commandes ne sont pas installées. Pour utiliser une commande busybox, vous pouvez exécuter /usr/bin/busybox <command> <parameters>. Donc, s'il dit qu'il prend en charge la commande stat, vous pouvez l'exécuter /usr/bin/busybox stat /hdd. Pour une utilisation facile, vous pouvez créer des liens symboliques pour Busybox avec le nom de la commande à appeler. S'il prend en charge la commande stat, vous pouvez le rendre facile à utiliser ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Oui cyan sont des liens symboliques
  2. Pour voir où ils pointent: ls -Fal
  3. Sortie ls -Fal /media

Il s'agit probablement d'un point de montage automatique quelconque.

grep media /etc/auto* pourrait produire un coup.

Nils
la source
Qu'est-ce qu'un point de montage automatique? Vous voulez dire que ... quand je branche un lecteur de disque SATA physique, il est monté à ce point? ... c'est un décodeur Linux et il n'a pas de disque dur intégré, mais il dispose d'un port eSATA à l'arrière. Cela pourrait être dédié à cet effet.
Samir
@Sammy Yes /mediaest le point de montage standard pour les appareils PnP.
Nils