背景
我正在开发 RHEL 5 集群。我希望我的 Fortran 程序能够读取该文件/home/bob/inputs/input_1
我请求鲍勃允许我阅读以下所有内容
inputs
:[bob@server]$ chmod -R a+r /home/bob/inputs/*
我将它们链接到共享目录:
[david@server]$ ln -s /home/bob/inputs/ /home/share/inputs/
我的(Fortran)程序尝试读取
/home/share/inputs/input_1
并说:File /home/share/inputs/input_1 not found!
我尝试自己找到该文件(在此过程中,鲍勃授予了
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
权限。我试着读一下:
[david@server]$ more /home/share/inputs/input_1 /home/share/inputs/input_1: No such file or directory
并被告知它不存在。
我寻找目标文件
/home/bob/inputs/input_1
,但权限被拒绝。[david@server]$ls -ltrh /home/bob/inputs/input_1 ls: /home/bob/inputs/input_1 Permission denied
如果我查看
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
。