我已经在几个地方读过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变量进行广泛而详细的解释吗?谢谢!
我注意到我的虚拟机和服务器上 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 ?
用户定义的默认路径在哪里?
我不知道我做了什么,但是像“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) 我有一个脚本,希望能够在两台机器上运行。这两台机器从同一个 git 存储库中获取脚本的副本。脚本需要使用正确的解释器(例如zsh)运行。
不幸的是,这两个 env和zsh住在本地和远程计算机不同的位置:
$ 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?
仅当目录尚不存在时,zsh 中是否有一种简单的方法可以将目录添加到我的 PATH 中?(或更一般地说,任何环境变量)。我试过了:
PATH+=/my/directory
Run Code Online (Sandbox Code Playgroud)
...但如果执行两次,它会被添加两次。
在经历了令人沮丧的头砖墙接触之后,我发现了这一点:
$ 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。
我已经从源代码 (v24.2) 编译了最后一个 emacs 版本,因为我机器上安装的版本对我来说(v21.3)(相当)旧。我已经做了通常的:
$configure --prefix=$HOME
make
make installRun 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)
知道发生了什么吗?
如何解决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。
如何在 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.sh了export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"但仅适用于登录外壳。
我查看了所有用户的设置路径(登录和非登录外壳),但上面已经尝试了解决方案。
我查看了如何在 debian 上为所有用户的非登录 shell 和登录 shell 添加系统 $PATH 的路径,但没有公认的解决方案,我不确定是否要修改,/etc/login.defs因为它可能会在更新中更改。
我想确保我理解以下代码:
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意思?