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 / unix / Perguntas / 448661
Accepted
Faxopita
Faxopita
Asked: 2018-06-09 07:17:42 +0800 CST2018-06-09 07:17:42 +0800 CST 2018-06-09 07:17:42 +0800 CST

Problema Perl no OS X El Capitan

  • 772

Por algum motivo estranho, o OS X de repente me mostra:

Can't locate strict.pm:   Permission denied at /usr/bin/shasum5.18 line 100.
BEGIN failed--compilation aborted at /usr/bin/shasum5.18 line 100.

ao jogar com Homebrew ( brew doctorpor exemplo)

Tenho certeza de que está relacionado à Apple e não ao Homebrew. Como sempre, nunca entendi a lógica da Apple ao lidar com permissões versus outros *nix!

Antes, eu poderia executar como usuário comum este comando:

% perl -V

Agora, eu tenho que executá-lo como root, o que é terrivelmente chato. Algo aconteceu sob o capô sem o meu conhecimento.

Se eu executar o comando como um usuário comum, tenho:

% /usr/bin/perl -V
Can't locate Config.pm:   Permission denied.
BEGIN failed--compilation aborted.

Eu ficaria satisfeito se alguém pudesse me ajudar a executar este comando como um usuário regular.

Obrigado pela ajuda.


Obrigado Professores @thrig, Arkadiusz Drabczyk!

Isto é o que eu fiz:

% /usr/bin/perl -le 'print for @INC' | while read d; do ls -ld -- "$d"; done
drwxr-xr-x  6 root  wheel  204  1 fév 10:59 /Library/Perl/5.18/darwin-thread-multi-2level
drwxr-xr-x  4 root  wheel  136 17 sep  2015 /Library/Perl/5.18
ls: /Network/Library/Perl/5.18/darwin-thread-multi-2level: No such file or directory
ls: /Network/Library/Perl/5.18: No such file or directory
ls: /Library/Perl/Updates/5.18.2: Permission denied
drwxr-xr-x  56 root  wheel  1904 25 mai 15:03 /System/Library/Perl/5.18/darwin-thread-multi-2level
drwxr-xr-x  130 root  wheel  4420 23 aoû  2015 /System/Library/Perl/5.18
drwxr-xr-x  66 root  wheel  2244 17 sep  2015 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level
drwxr-xr-x  109 root  wheel  3706 23 aoû  2015 /System/Library/Perl/Extras/5.18
drwx------+ 37 Nathalie  staff  1258  8 jui 22:26 .

Bom Deus! A saída /Library/Perl/Updates/5.18.2foi a culpada! Eu não posso acreditar!

Felizmente, consegui comparar as permissões relacionadas com as obtidas do meu outro sistema com Perl ininterrupto…

Em seguida, instalei as novas permissões:

sudo chmod 775 /Library/Perl/Updates

Agora posso perl -Vcomo usuário regular e começar a jogar.

perl osx
  • 1 1 respostas
  • 1180 Views

1 respostas

  • Voted
  1. Best Answer
    thrig
    2018-06-09T08:40:32+08:002018-06-09T08:40:32+08:00

    Isso pode ser devido a um problema da Apple, alteração incorreta @INCdo homebrew de forma que o fornecedor fornecido /usr/bin/perlesteja percebendo essas alterações ou algum erro do usuário. @INCé uma lista de caminhos onde perlprocura por módulos, então

    % perl -E 'say for @INC'
    /Users/jhqdoe/perl5/lib/perl5/darwin-thread-multi-2level
    /Users/jhqdoe/perl5/lib/perl5
    /opt/local/lib/perl5/site_perl/5.26/darwin-thread-multi-2level
    /opt/local/lib/perl5/site_perl/5.26
    ...
    

    Ooops, essa é a versão MacPorts que eu tenho primeiro, PATHentão

    % /usr/bin/perl -E 'say for @INC'
    /Users/jhqdoe/perl5/lib/perl5/darwin-thread-multi-2level
    /Users/jhqdoe/perl5/lib/perl5
    /Library/Perl/5.18/darwin-thread-multi-2level
    /Library/Perl/5.18
    /Network/Library/Perl/5.18/darwin-thread-multi-2level
    /Network/Library/Perl/5.18
    ...
    

    Esses dois primeiros caminhos são dos local::libquais outras configurações podem ou não ter. Independentemente disso, para cada um desses diretórios, precisamos procurar problemas de permissão, pois essa é a mensagem de erro. Isso pode ser problemático se as coisas já estiverem quebradas, então você não pode correr perlpara ver o que @INCcontém. Ok, hora de quebrar meu sistema.

    % chmod 000 /Users/jhqdoe/perl5/lib/perl5
    % perl -E 'say for @INC'
    Can't locate feature.pm:   /Users/jhqdoe/perl5/lib/perl5/feature.pm: Permission denied.
    BEGIN failed--compilation aborted.
    

    formulários mais antigos que não carregam módulos (como feature.pm) podem ajudar, ou executar perl -V, ou executar perlem uma instalação não quebrada e então inspecionar esses caminhos no sistema quebrado. Aqui podemos usar uma forma de código mais antiga para obter a lista de caminhos:

    % perl -le 'print for @INC' | while read d; do ls -ld -- "$d"; done
    d---------  111 jhqdoe  nsd  3774 Jun  1 10:44 /Users/jhqdoe/perl5/lib/perl5
    ...
    

    Este erro é bastante óbvio. Em outros sistemas, você pode precisar inspecionar as permissões em cada diretório no caminho, pois alguém pode ter configurado incorretamente /ou /Users(e assim por diante) ou pode haver um problema sutil onde há permissões de grupo incorretas (e, por exemplo, grupos secundários não estão sendo aplicadas) ou algum sistema de arquivos sofisticado ACL envolvido. Novamente, eles podem estar em qualquer diretório do caminho.

    % chmod 750 /Users/jhqdoe/perl5/lib/perl5
    

    Ok, vamos quebrar de outra maneira. Desta vez, interromperei a instalação do MacPorts, pois a área da Apple pode ter restrições de segurança que impedem alterações aleatórias (para melhor ou para pior).

    % sudo chmod 000 "$(perl -Mstrict -E 'say $INC{"strict.pm"}')"
    % perl -Mstrict -E 'say "borked?"'
    Can't locate strict.pm:   /opt/local/lib/perl5/5.26/strict.pm: Permission denied.
    BEGIN failed--compilation aborted.
    

    A solução é a mesma, veja todos os caminhos do diretório @INCe também o nome do módulo que perlestá tentando carregar (aqui, strict.pm) e corrija qualquer problema de permissão. Pode haver vários erros. Você pode precisar usar um recurso de rastreamento do sistema ( dtrace, ou straceno Linux) para ajudar a encontrar os caminhos do sistema de arquivos que perlestão procurando.

    % sudo chmod 644 /opt/local/lib/perl5/5.26/strict.pm
    

    Se strict.pm, em vez disso, não estiver presente, esse é um problema diferente e pode indicar que arquivos críticos foram excluídos ou a instalação foi de alguma forma mal feita ou o disco rígido está falhando, ou você está em um sistema operacional estranho (como RedHat Linux) onde perlfoi foi dividido em uma variedade de pacotes pelo fornecedor.

    • 0

relate perguntas

  • calcule a soma de cada 2 linhas e substitua-as por outro valor se a soma for menor que um valor específico

  • Como 'ejetar' obtém processos para fechar identificadores de arquivo?

  • Maneira mais rápida de determinar se o conteúdo do diretório mudou desde a última vez

  • Como uso `at` para agendar um script para execução no macOS?

  • csplit não reconhece o regexp fornecido

Sidebar

Stats

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

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

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