AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1837008
Accepted
Dominique
Dominique
Asked: 2024-03-29 00:20:03 +0800 CST2024-03-29 00:20:03 +0800 CST 2024-03-29 00:20:03 +0800 CST

Existe uma maneira de usar links simbólicos do tipo Linux em um computador Windows, referindo-se a um local em outro computador?

  • 772

Meu aplicativo está gravando logs em um diretório, que é "Logs" codificado e está presente no diretório de tempo de execução do meu aplicativo.
Hoje um cliente me perguntou se era possível ter esses logs em outro local (em outro computador).

Como primeiro teste, tentei criar um link simbólico:

  1. Parei o aplicativo.
  2. Eu removi o diretório "Logs".
  3. Usando um WSL no meu computador, criei um link simbólico, algo como ln -s /mnt/c/Temp_Folder/TestLog/ /mnt/c/<Application>/Logs.
  4. Eu iniciei meu aplicativo.

Não vi nenhum log aparecendo no diretório C:\Temp_Folder\TestLog\.

Vejo diferentes razões:

  • Ou é uma ideia completamente estúpida tentar usar a tecnologia Linux em um computador Windows.
  • Pode funcionar, mas algumas coisas extras precisam ser levadas em consideração.

Espero que seja a segunda opção, mas nesse caso, o que preciso levar em consideração?

Edite após a resposta de Harry
: Por que usar WSL ln -sse você pode usar a tecnologia Windows, como mklink? :-)

Gosto da ideia, mas infelizmente parece não estar funcionando, como você pode ver nas seguintes experiências:

C:\<Runtime_Dir>mklink /D Logs E:\TestLog\
=> result:
29/03/2024  08:21    <SYMLINKD>     Logs [E:\TestLog\]

=> Então, de fato, o Logslink simbólico do diretório é criado, mas quando eu inicio meu aplicativo, ele parece não gravar mais nenhum log (eu os vejo sendo criados em uma janela do console, mas eles não são gravados em um arquivo).

Algumas outras experiências: (Lembro-me de algo sobre um cruzamento de antes, mas os detalhes escaparam da minha mente)

C:\<Runtime_Dir>mklink /D /J Logs E:\TestLog\
Local volumes are required to complete the operation.
C:\<Runtime_Dir>mklink /D /H Logs E:\TestLog\
The system cannot find the path specified.
C:\<Runtime_Dir>mklink /J Logs E:\TestLog\
Local volumes are required to complete the operation.

Edit2 depois de mais algumas experiências:
Parece não funcionar ao me referir a outra unidade, mas parece funcionar quando me refiro a outro diretório no mesmo computador, como você pode ver aqui:

C:\<Runtime_Dir>mklink /D Logs C:\Temp_Folder\TestLog\
symbolic link created for Logs <<===>> C:\Temp_Folder\TestLog\

C:\<Runtime_Dir>mklink /D /J Logs C:\Temp_Folder\TestLog\
Junction created for Logs <<===>> C:\Temp_Folder\TestLog\

Posso confirmar que, em ambos os casos, os logs estão sendo criados!

Em outras palavras, o problema não é que o link simbólico/junção do Windows não esteja funcionando: o problema está no fato de o link simbólico/junção estar se referindo a outra unidade.
Lembro que existem duas, até três maneiras de criar um drive no Windows (um mapeamento de drive, um subst (?) e outro (???), isso tudo está muito embaçado na minha cabeça), e estou pensando se a história do link simbólico/junção pode estar funcionando em um tipo de unidade, mas não no outro, e se há uma maneira de contornar isso.

Edit3 após a resposta de u1686_gravity :
Mesmo usando o caminho UNC e tendo o comportamento configurado "correto", ainda parece não funcionar:

fsutil behavior query symlinkEvaluation
Local to local symbolic links are enabled.
Local to remote symbolic links are enabled. => That's the one, isn't it?
Remote to local symbolic links are disabled.
Remote to remote symbolic links are disabled.
C:\<Runtime_Dir>mklink /D Logs \\petrvs01\Log\TestLog\
symbolic link created for Logs <<===>> \\petrvs01\Log\TestLog\

O link é criado, mas nenhum arquivo de log está sendo criado ali.

Então, como acho que estou no caminho certo aqui, resolvi fazer outro teste: usar o Windows Explorer para entrar no Logsdiretório/symlink/junction e criar um arquivo de texto simples, usando o menu de contexto do explorer. Isso não funciona devido à seguinte mensagem de erro:

insira a descrição da imagem aqui

Aprendi três coisas até agora:

  1. Para criar um link simbólico no Windows, use mklinkem vez do WSL ln -s. Abra um prompt de comando como administrador para isso.
  2. Para criar um link simbólico/junção para um diretório remoto, você precisa usar o caminho UNC, não a letra da unidade.
  3. A permissão para criar links simbólicos/junções de e para diretórios remotos é verificada, usando o fsutilcomando fsutil behavior query symlinkEvaluation.

A próxima coisa que preciso aprender: onde verificar as permissões de destino do link simbólico/junção? Alguém tem uma ideia?

windows
  • 2 2 respostas
  • 613 Views

2 respostas

  • Voted
  1. Best Answer
    harrymc
    2024-03-29T01:06:10+08:002024-03-29T01:06:10+08:00

    Os links simbólicos no Linux são implementados de maneira diferente do Windows:

    • No Windows, um link simbólico é uma entrada na tabela de arquivos implementada e manipulada por chamadas do kernel
    • No Linux, um link simbólico é simplesmente um arquivo de texto com um sinalizador especial, cujo conteúdo é um caminho para o destino. (O caminho nem precisa ser válido.)

    Isso significa que links simbólicos (ou links simbólicos) criados por meio do Windows Subsystem for Linux (WSL) não podem ser seguidos pelo Windows.

    O Windows cria links simbólicos usando o comando mklink .

    Para obter mais informações, consulte o artigo
    O guia completo para a criação de links simbólicos (também conhecidos como links simbólicos) no Windows .


    Para o problema de "Acesso negado", cito a postagem criando links simbólicos na unidade de rede, parte da resposta de GambleNerd :

    Correção de acesso negado

    Se você executar o mklink /Dcomando como administrador e a Link parte do comando for um caminho de rede UNC e você receber Access Denied uma mensagem de erro, siga o procedimento abaixo para resolver esse problema.

    1. No servidor onde (e/ou no PC cliente Windows você está recebendo a mensagem de erro Acesso negado ao executar o comando) a Linkparte do comando está localizada, execute este comando como administrador no servidor:fsutil behavior query SymlinkEvaluation
    2. Se você vir Remote to remote symbolic links are disabled., execute este comando:fsutil behavior set SymlinkEvaluation R2R:1
    • Você pode executar isso no local onde está executando o comando MKLINK e obtendo acesso negado, seja no próprio Windows Server ou no PC cliente Windows
    1. Agora tente executar seu comando novamente e esperamos que funcione com sucesso agora.

    Referência do link: acesso negado no mklink

    • 5
  2. u1686_grawity
    2024-03-29T16:05:04+08:002024-03-29T16:05:04+08:00

    Existe uma maneira de usar links simbólicos do tipo Linux em um computador Windows, referindo-se a um local em outro computador?

    É possível, mas você precisa usar caminhos UNC em vez de letras de unidade, já que estas últimas não são necessariamente globais – embora os volumes físicos tenham atribuições globais, cada sessão de logon pode ter seus próprios mapeamentos privados (por exemplo, o usuário 1 pode ter Y :\representando um local e o usuário 2 pode representar outro). Pense nisso como se cada usuário tivesse seu próprio "namespace de montagem" no Linux (pam_namespace).

    Especificamente, todas as letras de unidade de "compartilhamento de rede mapeada" são privadas para sua sessão de logon e não serão compreendidas no contexto do kernel quando o link simbólico for seguido. Portanto, se o destino estiver em outra máquina, você precisará usar o caminho UNC bruto para ele:

    cmd /c mklink /d Logs \\FileServer\Trash\Logs
    

    Você também deve certificar-se de que a avaliação do link simbólico local para remoto não tenha sido desativada por meio do fsutil behavior query symlinkEvaluation.

    onde verificar as permissões de destino do link simbólico/junção? Alguém tem uma ideia?

    Execute icaclsno alvo – ou clique com o botão direito no Explorer e vá em "Propriedades > Segurança".

    icacls \\FileServer\Trash\Logs
    

    Além disso, links simbólicos e junções no Windows podem ter suas próprias permissões, que podem ser verificadas usando icacls Logs /l. Duvido que esse seja o problema, já que o link inicialmente herdaria as mesmas permissões que um diretório normal herdaria – mas pode valer a pena verificar.

    Portanto, primeiro certifique-se de que a criação de arquivos/pastas funcione sem o envolvimento de links simbólicos, ou seja, diretamente através do caminho UNC (ou de uma unidade mapeada, sem diferença), e somente depois de fazer isso funcionar, tente fazer o mesmo através de um link simbólico.

    Não esqueça que se seu aplicativo estiver rodando como um serviço, com credenciais próprias (conta de serviço), então as permissões deverão ser concedidas a essa conta; se estiver sendo executado como "NetworkService", as permissões deverão ser concedidas à conta da máquina (FOOBAR$). (E se estiver sendo executado como "LocalService", nunca terá acesso ao compartilhamento de rede.)

    • 3

relate perguntas

  • Como desativar a aceleração do mouse em um touchpad de precisão do Windows?

  • renomear em massa conjuntos de arquivos de imagem

  • Qual seria o equivalente em lote do argumento "pass" do Python?

  • Comunique-se com o daemon do Docker no Windows

  • atalho do shell da área de trabalho no painel lateral do explorer

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve