标签: path

PATH 变量在 bash 中的设置位置的完整视图

我已经在几个地方读过PATH设置/etc/profile.profile主目录中的文件。

这些是路径设置的唯一地方吗?我想更好地理解它。

/etc/profile文件中,如以下注释所述"system-wide .profile file for the Bourne shell"。这是否意味着配置文件是 bash 的主要配置文件?

在那个文件中,我根本没有看到PATHvar 被设置。在.profile主目录中的文件中有这一行:

PATH="$HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

这是PATH通过外观重置的,因为它将已经设置的$PATH字符串与$HOME/bin:正确的字符串连接起来?但是,如果etc/profile~/.profile是唯一的文件上设置PATH其中$PATH在该行的代码来了,如果它不定义/etc/profile

有经验的人可以对PATH变量进行广泛而详细的解释吗?谢谢!

path environment-variables

23
推荐指数
3
解决办法
5万
查看次数

为什么 root 路径中没有 /usr/local ?

我注意到我的虚拟机和服务器上 root 的默认路径不包括 /usr/local/bin

sudo -s  
echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

而服务器上的普通用户确实有 /usr/local/bin

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/sowen/bin
Run Code Online (Sandbox Code Playgroud)

为什么 root 在路径中不需要 /usr/local ?

用户定义的默认路径在哪里?

root path

22
推荐指数
1
解决办法
9897
查看次数

几乎没有任何命令工作,没有名为“apt_pkg”的模块

我不知道我做了什么,但是像“ls”和“sudo”这样的基本命令不再起作用,现在向我抛出这个错误消息。

File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import …
Run Code Online (Sandbox Code Playgroud)

path python kernel-modules apt

22
推荐指数
1
解决办法
6238
查看次数

路径独立shebangs

我有一个脚本,希望能够在两台机器上运行。这两台机器从同一个 git 存储库中获取脚本的副本。脚本需要使用正确的解释器(例如zsh)运行。

不幸的是,这两个 envzsh住在本地和远程计算机不同的位置:

远程机器

$ which env
/bin/env

$ which zsh
/some/long/path/to/the/right/zsh
Run Code Online (Sandbox Code Playgroud)

本地机

$ which env
/usr/bin/env

$which zsh
/usr/local/bin/zsh
Run Code Online (Sandbox Code Playgroud)

如何设置shebang以便像/path/to/script.sh往常一样运行脚本使用Zsh可用的PATH

shell cron zsh path

21
推荐指数
2
解决办法
2305
查看次数

有没有办法将目录添加到我的 zsh 中的 PATH 仅当它不存在时?

仅当目录尚不存在时,zsh 中是否有一种简单的方法可以将目录添加到我的 PATH 中?(或更一般地说,任何环境变量)。我试过了:

PATH+=/my/directory
Run Code Online (Sandbox Code Playgroud)

...但如果执行两次,它会被添加两次。

zsh path

20
推荐指数
2
解决办法
5797
查看次数

为什么 PATH 在 sudo 命令中重置?

在经历了令人沮丧的头砖墙接触之后,我发现了这一点:

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin

$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)

$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

我从另一篇文章中收集到sudo路径是从中读取的/etc/sudoers- 但为什么呢?设置是否$PATH/root/.profile任何意义,或者是只是上面的混乱配方(即产卵实际外壳导致不同$PATH的是,在不经意中使用sudo的命令......)?

我在 RHEL 6.4 上使用 bash。

security sudo path

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

我的 `which` 命令可能是错误的(有时)?

我已经从源代码 (v24.2) 编译了最后一个 emacs 版本,因为我机器上安装的版本对我来说(v21.3)(相当)旧。我已经做了通常的:

$configure --prefix=$HOME
make 
make install
Run Code Online (Sandbox Code Playgroud)

现在我正在测试 emacs 并意识到它仍然启动以前的版本......而我的$HOME/bin路径应该覆盖系统路径(因为它在我的.bashrc文件中被添加到 $PATH )。

我的第一个想法是查看which命令输出。令人惊讶的是,它为新的 emacs 提供了路径。我不明白这里的差异在哪里。在同一会话中,这里是不同的输出:

$ emacs --version
GNU Emacs 21.3.1

$ `which emacs` --version
GNU Emacs 24.2.1
Run Code Online (Sandbox Code Playgroud)

我没有涉及 emacs 的别名。在所有。

$ alias | grep emacs
$
Run Code Online (Sandbox Code Playgroud)

知道发生了什么吗?

bash emacs path which

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

bash: iptables: 命令未找到

如何解决iptables: command not foundDebian 7.6 发生的问题?

batman@gotham:~$ uname -a
Linux gotham 3.14-0.bpo.2-amd64 #1 SMP Debian 3.14.13-2~bpo70+1 (2014-07-31) x86_64 GNU/Linux
batman@gotham:~$ iptables -L
bash: iptables: command not found
batman@gotham:~$ sudo apt-get install iptables
[sudo] password for batman: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
iptables is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
batman@gotham:~$
Run Code Online (Sandbox Code Playgroud)

我在谷歌上进行了广泛的搜索,大部分答案都是针对可追溯到 2005 年和 2009 年的 CentOS 和 Fedora。

iptables path

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

为 systemd 单元设置 PATH

如何在 CentOS 7 中为非登录 shell 设置 PATH?

具体来说,我有一个 systemd 单元,它需要/usr/local/texlive/2016/bin/x86_64-linux.

我试图将它设置为/etc/environmentwithPATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH但后来我的 PATH 是/usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

我创建/etc/profile.d/texlive.shexport PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"但仅适用于登录外壳。

我查看了所有用户的设置路径(登录和非登录外壳),但上面已经尝试了解决方案。

我查看了如何在 debian 上为所有用户的非登录 shell 和登录 shell 添加系统 $PATH 的路径,但没有公认的解决方案,我不确定是否要修改,/etc/login.defs因为它可能会在更新中更改。

centos path systemd

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

--strip-components -C 在 tar 中是什么意思?

我想确保我理解以下代码:

tar xvzf FILE --exclude-from=exclude.me --strip-components 1 -C DESTINATION
Run Code Online (Sandbox Code Playgroud)

这是在这个答案中发布的。

来自man tar

--strip-components=NUMBER
提取时从文件名中去除 NUMBER 个主要成分

-C,--directory=DIR
切换到目录 DIR

我不明白--strip-components.

关于-C,我理解它的意思是“将剥离的组件放在指定的目录中”。

什么--strip-components -C意思?

tar directory path

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