Como posso saber se uma pasta é realmente um link simbólico e como corrigi-la se estiver quebrada?

28

Como posso saber se tenho um link simbólico, um atalho de algum tipo ou uma pasta no Linux? Por favor, veja a captura de tela a seguir.

link simbólico no shell linux

Como você pode ver, o lscomando lista objetos em que alguns são coloridos em azul escuro, enquanto outros são em azul claro (ciano). Quais são esses objetos coloridos em ciano? Esses links simbólicos são reais?

Como você pode ver, eu não posso cdaquele chamado HDD.

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

Eu acho que tem que redirecionar para /media/hdde notei que a pasta HDD está faltando.

Existe uma maneira de corrigir isso?

Atualização: Aqui estão os resultados do ls -alcomando.

link simbólico no shell linux 2

Como você pode ver, diz hdd -> /media/hdde está colorido em vermelho. Isso significa que está quebrado ou que é montado automaticamente, ou seja, quando um disco rígido físico está conectado?

Atualização: Aqui está o resultado do grep media /etc/auto*comando.

link simbólico no shell linux 3

O que essas /etc/auto.master:/media/nete as /etc/auto.networkentradas fazem?

Aqui estão os resultados do ls -Fal /mediacomando.

link simbólico no shell linux 4

Isso é de alguma ajuda? ...

Aqui estão os resultados state filecomandos, bem como as listagens de / usr e / bin.

link simbólico no shell linux 5

Isso me ajuda de alguma maneira? ... ajuda você a me ajudar? ...

Como um lado não, o que você deve saber é que este é um STB baseado em Linux com BusyBox, é um sistema incorporado. Portanto, nem todos os comandos podem ser suportados.

Atualização: Última captura de tela, mostrando arquivos e comandos suportados em / sbin e / usr / sbin.

link simbólico no shell linux 6

Atualização: novo compartilhamento adicionado ...

Agora removi esse compartilhamento antigo e recriei um com o mesmo nome de antes e também adicionei um segundo compartilhamento agora. Então agora eu tenho dois deles.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

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

As gravações são colocadas em / media / net / dream1 / movie.

Além disso, para o share dream2, optei por não montá-lo como um substituto do HDD no Mount Manager, pois suspeito que não é possível ter mais de um ato como um HDD. Onde gravaria? Para os dois locais? Com o dobro da taxa de dados? ... Não acho que seja possível.

Portanto, por esse motivo, não há subpasta chamada movie para o compartilhamento dream2. Somente os que são especificados como substitutos do HDD quando criados obtêm a subpasta de filme.

Se eu cdHDD a partir da raiz, ele vai para /media/net/dream1. Se eu cda ..(pai) ele vai voltar para root (/).

Na raiz ls -alhdd -> media/hdd. ls -al hddhdd -> media/hdd. ls -al media/media/net/dream1.

Além disso, se eu cdpara /medialá é uma outra hddligação simbólica. Eu não notei isso antes. Eu acho que isso é criado automaticamente quando um compartilhamento é montado. E se eu cdpara este disco rígido vai /media/net/dream1.

Um link simbólico hdd(/ hdd) que aponta para outro hddlink simbólico (/ media / hdd), que por sua vez aponta para a pasta de compartilhamento (/ media / net / dream1)? ..... Estou ficando tonto ...

Não era assim antes da versão 3.2.3 ou pelo menos 3.2.0 da imagem Enigma2.

Editar: Ao definir o segundo compartilhamento para atuar como um substituto do disco rígido, ele se torna o compartilhamento ativo para gravação. Ao mesmo tempo, o compartilhamento que foi definido anteriormente para atuar como uma substituição do HDD não está mais ativo, mesmo se ainda estiver definido como "sim" (atuar como substituição do HDD).

Se o dream1 foi usado pela primeira vez como substituto do HDD ("yes" para atuar como substituto) e o dream2 foi configurado para atuar como substituto do HDD, ele se tornará o novo compartilhamento para a gravação. Ainda consigo ver e visualizar arquivos de vídeo armazenados no dream1, mas não consigo mais gravar nele. Se eu quiser voltar a usar o dream1 para gravar, primeiro preciso definir o dream2 como "não" (parar de atuar como substituto do disco rígido) e depois redefinir o dream1 para "yes".

Portanto, não, ele não pode gravar em duas ações ao mesmo tempo. Um deles tem que ir. Então é sonho1 ou sonho2, não os dois. Embora eu deva mencionar que é possível gravar mais de um serviço (canal de TV) se ambos estiverem no mesmo transponder, caso contrário, você receberá a mensagem "no free tuner". Este é um STB com apenas um sintonizador.

Samir
fonte
3
não cole capturas de tela para texto. copie e cole o texto e use as tags ou reticulares pré ou de código para preservar o recuo / formatação. e edite o texto no mínimo necessário para mostrar o que você está tentando mostrar. Aliás, um problema com as capturas de tela é que fontes minúsculas se tornam ainda menores - a ponto de ficarem ilegíveis - quando exibidas em telas de alta resolução (por exemplo, 1920x1200 ou 2566x1440) ... os pixels são fixos e o texto pode ser redimensionado.
cas
@CraigSanders Sanders Você está em alta ... em resolução! ;) Seariously, eu ouço você cara! Eu realmente não pensei sobre esse aspecto. Obrigado pela dica. Vou tentar usar um bloco de código na próxima vez.
Samir
O que ls -alrealmente faz é mostrar todos os arquivos (-a) em uma longa lista (-l). Sim, isso me fornece mais informações, mas ajuda a identificar um link simbólico? Se tem uma seta para a direita, é assim que eu digo se é um link simbólico? O outro identificador é obviamente o código de cores, mas alguns de vocês sugerem que a cor não é confiável.
Samir
Isso não é mais um problema. Montei um compartilhamento CIFS do Windows através do plug-in Mount Manager (Dreambox, Enigma 2, versão 3.2.3) e optei por usá-lo como substituto do HDD. Depois de fazer isso, o ls -alcomando apareceu hdd -> media/hdd. E agora é possível cdfazer o disco rígido e o link funciona. Mas o interessante é que ls -al mediamostra hdd -> /media/net/mydreame isso é de fato onde vai quando eu cdHDD. O "sonho" é o nome do compartilhamento. Por que obtenho resultados diferentes?
Samir
Meu palpite é que existe algum mecanismo (possivelmente uma regra do udev) para garantir que o link simbólico / hdd seja atualizado para apontar para qualquer dispositivo ou compartilhamento montado, para que outros programas e scripts possam usar o / hdd (depois de testar o diretório aponta para é um fs montado). por curiosidade, o que acontece se você montar uma segunda unidade ou compartilhar? Faz um link simbólico / hde? ou a dreambox está limitada a um diretório de gravação?
cas

Respostas:

29

Você pode usar file, stat ou ls.

Arquivo:

O comando file é usado para classificar os arquivos com base em seu tipo (link simbólico, diretório, dispositivo) ou conteúdo (texto, gzip, imagem, tar, ..., independentemente de sua extensão):

$ arquivo / dev / stdout
/ dev / stdout: link simbólico para `/ proc / self / fd / 1 '
$ arquivo / proc / self / fd / 1
/ proc / self / fd / 1: link simbólico para `/ dev / pts / 0 '
$ arquivo / dev / pts / 0
/ dev / pts / 0: caractere especial (136/0)
$ arquivo / etc / passwd
/ etc / passwd: texto ASCII

ls:

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

stat:

o comando stat imprime os metadados do arquivo, como permissões, tamanho, número de blocos e assim por diante ...

$ stat / dev / stdout
  Arquivo: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Tamanho: 15 Blocos: 0 Bloco IO: 4096 link simbólico
Equipamento: 5h / 5d Inode: 1212 Links: 1
Acesso: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Acesso: 2014-01-27 11: 22: 47.971187828 -0200
Modificar: 2014-01-27 07: 55: 13.996981285 -0200
Alteração: 2014-01-27 07: 55: 13.996981285 -0200
 Nascimento: -
filipenf
fonte
A que se file hddrefere? Eu não entendo ...
Samir
O stat hddme dá -sh: stat: not found.
Samir
Eu acho que você não tem o comando stat (ou não está no seu $ PATH). De qualquer forma o comando file pode dar-lhe um tiro ...
filipenf
Para o bash no terminal Mac, o comando file segue links simbólicos por padrão. Se você quiser ver se é um link simbólico, adicione o comando -h. O que não segue links simbólicos.
ClintM
7

bater:

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
fonte
3

A maneira mais fácil de ver que tipo de entidade é um determinado arquivo seria usar o filecomando Possui saída nítida e clara, sem exigir que você se lembre de quais lssão as marcas do classificador ou se baseia em saídas coloridas que podem variar de usuário para usuário e de máquina para máquina. Por exemplo:

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 você se encontra em um sistema sem, filepode usar o statcomando que informará que tipo de entrada de arquivo é e para onde ele aponta. Para descobrir se um link está quebrado, você precisará executar os stat -Llinks de desreferência, o que causará um erro se o link estiver quebrado.

Quanto à segunda parte da sua pergunta, o mediadiretório geralmente é gerenciado por montadores automáticos de algum tipo. A /media/hddentrada pode ser usada pelo seu sistema para dispositivos de armazenamento em massa USB ou pode até estar aguardando o tipo certo de disco rígido (dispositivo de bloco ATA vs SCSI vs Xen). Links quebrados não prejudicam nada, a menos que um programa tente usá-los, e os links de mídia são realmente para sua conveniência. Você pode deixar o /hddlink com segurança ou removê-lo como quiser.

joruffin
fonte
Você está certo, parece que o arquivo não é um comando aqui, diz -sh: file: not foundquando eu faço filee entro.
Samir
Parece que seu $ PATH é um pouco restrito. Tente executá-lo diretamente:/usr/bin/file
joruffin 27/09/12
Vejo no seu outro comentário que você está em um decodificador. Isso pode não ter nada além de Busybox instalado, e o Busybox não emula o filecomando, mas tem suporte para o statcomando se ele foi compilado. Ainda pode estar fora do seu $ PATH ou estar em algum lugar obscuro como / sbin / stat ou / usr / sbin / stat.
precisa saber é o seguinte
Não parece ter suporte para um fileou outro stat. Eu verifiquei os caminhos mencionados (veja a captura de tela acima). Enfim ... o que você está dizendo é que, em um sistema Linux ideal, o filecomando, seguido pelo caminho de pesquisa do arquivo ou pasta de destino, me revelaria que tipo de entidade é?
Samir
2
Quanto aos comandos suportados no Busybox, você pode executar /usr/bin/busyboxe ele mostrará todos os comandos aos quais ele suporta, mesmo que os comandos não estejam instalados. Para usar um comando busybox, você pode executar /usr/bin/busybox <command> <parameters>. Portanto, se ele diz que suporta o comando stat, você pode executar /usr/bin/busybox stat /hdd. Para facilitar o uso, você pode criar links simbólicos para o Busybox com o nome do comando a ser chamado. Se ele suportar o comando stat, você poderá facilitar a execução ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Sim ciano são links simbólicos
  2. Para ver para onde eles estão apontando: ls -Fal
  3. Saída ls -Fal /media

Este é provavelmente um ponto de montagem automática de algum tipo.

grep media /etc/auto* pode produzir um sucesso.

Nils
fonte
O que é um ponto de montagem automática? Você quer dizer ... quando eu conecto uma unidade de disco SATA física, ela é montada nesse ponto? ... esse é um STB do Linux e não possui HDD embutido, mas possui uma porta eSATA na parte traseira. Isso pode ser dedicado para esse fim.
Samir
@ Sammy Yes /mediaé o ponto de montagem padrão para dispositivos PnP.
Nils