我最近开始使用 Linux 开发一个项目,目前面临目录中文件权限的一些问题。
我有一些.so
需要从文件夹访问的库文件/usr/local/lib
。当我手动检查文件夹中的文件时,文件显示我不是所有者,并且root
是所有者。
但是,在另一个目录中,我随后尝试在 处安装相同的库/home/jade/cb/lib/
,如果我检查这些库,我确实拥有权限。
我的 C++ 程序被卡住了,因为它无法访问这些库。我尝试使用sudo chmod 777 -R *.*
while inside更改权限,usr/local/lib
但权限或任何内容都没有改变。我该如何摆脱这个问题? (发行版:Ubuntu 12.10)
答案1
大多数需要您构建它的源都使用配置脚本。此配置脚本采用一个名为 的开关,--prefix
该开关采用一个参数,您可以覆盖该软件的安装位置。通常,您/usr/local
可以使用具有写入权限的目录覆盖默认位置(通常是)。
这是软件应用程序的示例节点.js。下载并解压/解压后的软件node.js
如下所示:
[saml@grinchy node-v0.8.12]$ ls
AUTHORS BSDmakefile common.gypi config.mk deps lib Makefile node.gyp README.md test vcbuild.bat
benchmark ChangeLog config.gypi configure doc LICENSE node out src tools
运行包含的配置脚本如下所示:
[saml@grinchy node-v0.8.12]$ ./configure --help
Usage: configure [options]
Options:
-h, --help show this help message and exit
--debug Also build debug build
--prefix=PREFIX Select the install prefix (defaults to /usr/local)
--without-npm Don't install the bundled npm package manager
--without-waf Don't install node-waf
--without-ssl Build without SSL
--without-snapshot Build without snapshotting V8 libraries. You might
want to set this for cross-compiling. [Default: False]
...
...
如果我想更改默认位置,我可以像这样调用配置:
[saml@grinchy node-v0.8.12]$ ./configure --prefix=/home/saml/my_node.js
生成的 Makefile 现在将以我的目录为目标,而不是默认的/usr/local
.
答案2
man chmod
:
chmod 永远不会更改符号链接的权限; chmod 系统调用无法更改其权限。这不是问题,因为符号链接的权限从未被使用过。但是,对于命令行上列出的每个符号链接,chmod 都会更改 指向文件
的权限。
相反,chmod 会忽略递归目录遍历期间遇到的符号链接。