为什么 bash 给我(显然)有关文件的冲突信息?

为什么 bash 给我(显然)有关文件的冲突信息?

背景

我正在开发 RHEL 5 集群。我希望我的 Fortran 程序能够读取该文件/home/bob/inputs/input_1

  1. 我请求鲍勃允许我阅读以下所有内容inputs

    [bob@server]$ chmod -R a+r /home/bob/inputs/*
    
  2. 我将它们链接到共享目录:

    [david@server]$ ln -s /home/bob/inputs/ /home/share/inputs/
    
  3. 我的(Fortran)程序尝试读取/home/share/inputs/input_1并说:

    File /home/share/inputs/input_1 not found!
    
  4. 我尝试自己找到该文件(在此过程中,鲍勃授予了a+rwx权限):

    [david@server]$ls -ltrh /home/share/inputs/input_1
    lrwxrwxrwx 1 bob bob 33 Oct 25 15:42 /home/share/inputs/input_1 -> /home/bob/inputs/input_1
    

    由此,我得出结论:a)inputs_1存在并且b)所有用户都有rwx权限。

  5. 我试着读一下:

    [david@server]$ more /home/share/inputs/input_1 
    /home/share/inputs/input_1: No such file or directory
    

    并被告知它不存在。

  6. 我寻找目标文件/home/bob/inputs/input_1,但权限被拒绝。

    [david@server]$ls -ltrh /home/bob/inputs/input_1
    ls: /home/bob/inputs/input_1 Permission denied
    
  7. 如果我查看ls目录内容,就会发生一些奇怪的事情:

    [david@server]$ls -ltrh /home/bob/inputs/
    ?--------- ? ? ? ?            ? input_1
    ?--------- ? ? ? ?            ? input_2
    ?--------- ? ? ? ?            ? input_3
    ... (n-4 lines omitted) 
    ?--------- ? ? ? ?            ? input_n
    

    尽管如果鲍勃这样做,他会得到:

    -rwxrwxrwx 1 bob bob  269 May 24  input_1
    ... (n-2 lines omitted) 
    -rwxrwxrwx 1 bob bob 2.0K Jan 19  input_n
    

问题:

  • 对于这种(对我来说)明显不一致的行为有一个简单的解释吗?
  • 我该去哪里?

答案1

您需要 的执行权限/home/bob/inputs。您可以通过以下方式设置:

chmod a+x /home/bob/inputs

答案2

跑步ls -ld /home/bob/inputs/。我想你会发现 bob 给了你对该目录的读取权限,但没有执行权限,即类似drwxr--r--.在目录上,读取权限允许您查看文件列表,而执行权限允许您访问目录中的文件。在极少数情况下,将目录设置为可执行但不可读是有用的;反之则毫无用处。几乎所有时候,目录要么是可访问的(可读且可执行),要么是不可访问的(既不可读也不可执行)。

为什么目录需要可执行(X)权限才能打开?以获得更多解释。

补救措施:让鲍勃跑chmod a+rx ~/inputs

相关内容