小编sma*_*c89的帖子

执行与读取位。Linux 中的目录权限如何工作?

在我的 CMS 中,我注意到目录需要+x为用户设置可执行位 ( ) 才能打开它们。为什么读取目录需要执行权限,Linux 中的目录权限是如何工作的?

linux permissions directory

453
推荐指数
6
解决办法
33万
查看次数

找出 bash 在启动时运行的脚本

启动 bash 终端后,我注意到 PATH 变量包含重复的条目。我的终端启动了一个登录 shell,所以~/.bash_profile是 source ,然后是~/.profileand ~/.bashrc。只有在~/.profile我创建重复的路径条目时。

为了迂腐,这是应该获取的文件的获取顺序:

Sourced /etc/profile
Sourced /etc/bash.bashrc
Sourced .bash_profile
Sourced .profile
Sourced .bashrc
Run Code Online (Sandbox Code Playgroud)

在任何人将此标记为“PATH 变量包含重复项”的副本之前,请继续阅读。

起初,我认为这与~/.profile两次获取有关,所以每当获取时我都会将文件写入日志文件,令人惊讶的是它只记录了一个条目,这告诉我它只获取一次。更令人惊讶的是,当我注释掉 中的条目时~/.profile,这些条目仍然出现在PATH变量中。这使我得出三个结论,其中一个很快就被排除了:

  1. Bash 忽略有效的 bash 注释并仍然执行注释代码
  2. 有一个脚本可以读取~/.profile并忽略任何打印输出的代码(例如日志文件)
  3. 我的另一个副本~/.profile是从别处采购的

第一个,由于一些快速测试,我很快得出结论并非如此。第二个和第三个选项是我需要帮助的地方。

如何收集终端启动时执行的脚本日志?echo在我检查过的文件中使用了它们以了解它们是否来自 bash,但是我需要找到一个结论性的方法来跟踪终端准备好开始输入时的执行情况。

如果以上是不可能的,那么任何人都可以建议我可以在哪里查看正在运行的脚本


以后的参考

这是我现在用于添加到我的路径的脚本:

function add_to_path() {
    for path in ${2//:/ }; do
        if ! [[ "${!1}" =~ "${path%/}" ]]; then # ignore last / …
Run Code Online (Sandbox Code Playgroud)

bash profile

19
推荐指数
2
解决办法
3万
查看次数

如何在不关闭标准输入/标准输出的情况下关闭命名文件描述符?

exec {ec}< <(echo "puts 'hello'") && sudo ruby /proc/$$/fd/${ec}
Run Code Online (Sandbox Code Playgroud)

一旦我关闭它

exec <&"${ec}"-
Run Code Online (Sandbox Code Playgroud)

外壳退出。

在另一种情况下,我创建了这个文件描述符:

exec {gr}> >(/usr/bin/grep 'hello')
Run Code Online (Sandbox Code Playgroud)

然后我关闭它exec >&${gr}-,现在当我运行一个简单的命令时ls,没有打印任何内容。

我可以做,ls >&2并且肯定它显示了一些东西,但显然标准输出现在是 MIA。


我仍在学习所有这些文件描述符业务的工作原理,并希望得到一些指导。谢谢。

bash io-redirection file-descriptors

4
推荐指数
1
解决办法
208
查看次数

`man -H` 总是在浏览器中打开一个不存在的文件

我正在尝试使用命令 /usr/bin/man -H 3 free在浏览器中打开联机帮助页,但是每次运行该命令时,浏览器都会打开一个不存在的文件,当然该页面无法显示。

我究竟做错了什么?

我的man命令由man-db

man browser man-db

4
推荐指数
1
解决办法
91
查看次数