让你的 环境变量 更合理

简介: 让你的 环境变量 更合理

PATH

PATH 环境变量由 shell 或 libc 读取来查找并执行程序,这就是当在终端中键入 ls 时 shell 可以找到 /bin/ls 的方式。

在基于 Debian 的桌面系统上,默认 PATH 变量如下所示:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

实际上,很多设置并不是必需的。

在现代的操作系统中,/{bin,sbin}/ 文件夹通常是 /usr/{bin,sbin}/ 的符号链接。

来说,/usr/local 文件夹没什么用,如果我编译或安装软件,我更倾向于将它们放在默认的位置。

有时候在编译之前我会忘记运行 ./configure --prefix=/usr 命令,因此我把 /usr/local 设置成了指向 /usr 的符号链接(通过在 /usr 目录下执行 ln -s /usr local 命令)。

对于那些在公共软件仓库中找不到,且需要作为后台进程运行的软件,我会使用 /opt 目录。

这样做可以使得路径更短:

PATH=/usr/sbin:/usr/bin:/usr/games

为了更进一步地优化系统,我删除了 /usr/games 目录,因为我是通过 .desktop 文件来启动图形用户界面程序(例如游戏)。这些 .desktop 文件通常存放在${XDG_DATA_DIRS}/applications目录下。

到了 2024 年,我的做法就是这样,我计划利用根目录下的符号链接,以便得到更简短的路径字符串:

PATH=/sbin:/bin

最终,/usr/sbin 可能会合并到/usr/bin,因此只需要/bin。

仅仅在 /etc/environment 文件中配置 PATH 环境变量是不够的。

当 shell 启动后,它还会读取 /etc/profile 和用户的 ~/.profile 文件。

像 Rust 或 Python 这样的现代编程环境,往往会自动向 PATH 环境变量添加新的路径。

不过,我更喜欢明确控制 PATH 中的内容,因此我会通过创建符号链接的方式来管理:

$ file ~/bin ~/bin-rust ~/bin-py ~/bin-go ~/bin-js
~/bin:      directory
~/bin-rust: symbolic link to .cargo/bin
~/bin-py:   symbolic link to .local/bin
~/bin-go:   symbolic link to .golang/bin
~/bin-js:   symbolic link to .nvm/versions/node/v22.1.0/bin

我还希望系统二进制文件优先于用户一,因此我的 .profile 在重新分配时确保 $PATH 首先出现:

# ...

# Hide default GOPATH
if [ -d "$HOME/.golang" ] ; then
    GOPATH="$HOME/.golang"
fi

# User's local bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

# RUST local bin if it exists
if [ -d "$HOME/bin-rust" ] ; then
    PATH="$PATH:$HOME/bin-rust"
fi

# Python local bin if it exists
if [ -d "$HOME/bin-py" ] ; then
    PATH="$PATH:$HOME/bin-py"
fi

# Golang local bin if it exists
if [ -d "$HOME/bin-go" ] ; then
    PATH="$PATH:$HOME/bin-go"
fi

# NodeJs local bin if it exists
if [ -d "$HOME/bin-js" ] ; then
    PATH="$PATH:$HOME/bin-js"
fi

export GOPATH
export PATH
相关文章
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
1219 2
|
存储 Rust 安全
服务网格eBPF应用探索之(一)eBPF基础知识
1)技术背景在eBPF诞生之前,对内核的调试和开发有着相当高的门槛,不仅要十分熟悉庞大的内核代码及开发流程,同时重新编译内核后若希望生效还需要重启OS,开发效率也相当低下。而eBPF提供了相当友好的内核开发/观测机制,即:由用户编写符合一定规范的代码,编译后加载至内核,内核会在指定的时机执行这段代码,内核同时还会将Hook点相关的上下文传递给这段代码供使用,代码可以修改上下文,或是通过返回值来改变
1397 0
服务网格eBPF应用探索之(一)eBPF基础知识
|
移动开发
【软考】校验码之详细总结
【软考】校验码之详细总结
1560 0
|
3月前
|
缓存 分布式计算 调度
技术深度报道:解析云器Lakehouse如何实现超越Spark 10倍性能提升
云器科技2024年末发布TPC-DS 10TB基准测试报告,Lakehouse引擎性能达Spark的10倍。核心源于四大技术:C++向量化引擎(3×)、Cascades成本优化器(2×)、DAG直连调度(1.3×)与自适应缓存(1.3×),实现全栈协同优化。(239字)
170 0
|
3月前
|
人工智能 缓存 运维
当 CPU 莫名抖动时,SysOM Agent 如何 3 分钟定位元凶?
本文揭秘一个真实生产案例:CPU周期性飙升但top无高负载进程。根源是高频访问不存在文件导致negative dentry堆积,引发VFS锁竞争风暴。传统排查耗时数小时,而SysOM Agent通过火焰图+调用栈分析,3分钟精准定位至`native_queued_spin_lock_slowpath`热点,并给出根因与解决方案。
当 CPU 莫名抖动时,SysOM Agent 如何 3 分钟定位元凶?
|
分布式计算 安全 OLAP
7倍性能提升|阿里云AnalyticDB Spark向量化能力解析
AnalyticDB Spark如何通过向量化引擎提升性能?
|
编解码 Linux 调度
实时组调度 【ChatGPT】
实时组调度 【ChatGPT】
|
存储 缓存 分布式计算
HDFS优化方案
HDFS优化方案
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
2211 0
|
机器学习/深度学习 自然语言处理
“大模型+强化学习”最新综述!港中文深圳130余篇论文:详解四条主流技术路线
【4月更文挑战第17天】香港中文大学(深圳)研究团队发表综述论文,探讨大型语言模型(LLMs)与强化学习(RL)结合的四条技术路线:信息处理器、奖励设计者、决策制定者和生成器。LLMs提升RL在多任务学习和样本效率,但处理复杂环境时仍有挑战。它们能设计奖励函数,但预训练知识限制在专业任务中的应用。作为决策者和生成器,LLMs提高样本效率和行为解释,但计算开销是问题。
1250 1
“大模型+强化学习”最新综述!港中文深圳130余篇论文:详解四条主流技术路线

热门文章

最新文章