AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 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

OS X El Capitan 上的 Perl 问题

  • 772

出于某种奇怪的原因,OS X 突然向我展示了:

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.

玩 Homebrew 时(brew doctor例如)

我很确定它与 Apple 而不是 Homebrew 有关。与往常一样,我从不理解 Apple 在处理权限与其他 *nix 时的逻辑!

之前,我可以以普通用户身份运行以下命令:

% perl -V

现在,我必须以 root 身份运行它,这非常烦人。在我不知情的情况下发生了一些事情。

如果我以普通用户身份运行命令,我有:

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

如果有人可以帮助我以普通用户身份运行此命令,我会很高兴。

谢谢你的帮助。


谢谢@thrig 教授,Arkadiusz Drabczyk!

这就是我所做的:

% /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 .

好主!输出/Library/Perl/Updates/5.18.2是罪魁祸首!我简直不敢相信!

幸运的是,我设法将相关权限与使用完整 Perl 从我的其他系统获得的权限进行了比较……

然后,我安装了新权限:

sudo chmod 775 /Library/Perl/Updates

我现在可以perl -V作为普通用户开始玩了。

perl osx
  • 1 1 个回答
  • 1180 Views

1 个回答

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

    这可能是由于 Apple 问题、自制程序错误地更改@INC以使供应商提供/usr/bin/perl的更改正在接受这些更改或某些用户错误。@INC是一个perl查找模块的路径列表,所以

    % 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
    ...
    

    PATH哎呀,这是我第一个使用的 MacPorts 版本

    % /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
    ...
    

    前两条路径是local::lib其他设置可能具有或不具有的路径。无论如何,对于这些目录中的每一个,我们都需要查找权限问题,因为这是错误消息。如果东西已经损坏,这可能会有问题,因此您无法运行perl以查看@INC包含的内容。好吧,是时候打破我的系统了。

    % 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.
    

    不加载模块的旧形式(例如feature.pm)可能会有所帮助,或者运行perl -V,或者perl在未损坏的安装上运行,然后在损坏的系统上检查这些路径。在这里,我们可以使用旧形式的代码来获取路径列表:

    % 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
    ...
    

    这个错误相当明显。在其他系统上,您可能需要检查路径中每个目录的权限,因为有人可能配置错误/或/Users(等等),或者可能存在一个微妙的问题,即存在不正确的组权限(例如辅助组未应用)或涉及一些花哨的文件系统 ACL。同样,这些可以在路径的任何目录上。

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

    好吧,让我们以另一种方式打破它。这次我将破坏 MacPorts 安装,因为 Apple 区域可能对其有安全限制,以防止随机更改(无论好坏)。

    % 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.
    

    解决方案是相同的,查看所有目录路径@INC以及perl尝试加载的模块名称(此处为strict.pm)并更正任何权限问题。可能有多个错误。您可能需要使用系统跟踪工具( Linux 上的dtrace或strace)来帮助查找perl正在查看的文件系统路径。

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

    如果strict.pm不存在,这是一个不同的问题,并且可能表明关键文件已被删除或安装以某种方式拙劣或硬盘驱动器出现故障,或者您使用的是奇怪的操作系统(例如 RedHat Linux perl)被供应商分割成各种包装。

    • 0

相关问题

  • 如果总和小于特定值,则计算每 2 行的总和并用另一个值替换它们

  • “弹出”如何让进程关闭文件句柄?

  • 确定自上次以来目录内容是否已更改的最快方法

  • 如何使用 `at` 安排脚本在 macOS 上执行?

  • csplit 无法识别提供的正则表达式

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve