最常用、最可靠的方式是使用环境变量 $HOME;它自动指向当前用户家目录,支持直接引用如 echo $HOME,而 ~ 是其等价简写,动态获取应优先用 getent passwd "$USER" | cut -d: -f6。

在Linux Shell中,获取当前用户的家目录最常用、最可靠的方式是使用环境变量 $HOME。
直接使用 $HOME 变量
$HOME 是系统自动设置的环境变量,指向当前登录用户的家目录(如 /home/username 或 /root)。它无需额外命令,直接引用即可:
-
echo $HOME—— 输出家目录路径 -
cd $HOME—— 切换到家目录(等价于cd) -
cp file.txt $HOME/Documents/—— 复制文件到家目录下的 Documents 文件夹
用 ~(波浪号)作为简写
Shell 中 ~ 是 $HOME 的等价简写,常用于路径中,支持扩展:
-
echo ~—— 输出当前用户家目录 -
ls ~/Downloads—— 列出家目录下 Downloads 文件夹内容 -
~username—— 可扩展为指定用户(如~john)的家目录(需有权限且该用户存在)
需要动态获取时:用 getent 或 eval(不推荐常规使用)
极少数场景下(例如脚本中 $HOME 被意外清空),可借助系统数据库获取:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
getent passwd "$USER" | cut -d: -f6—— 从 /etc/passwd 查询当前用户家目录字段 -
eval echo ~$USER—— 安全扩展用户名对应的家目录(比直接拼接更稳妥)
⚠️ 注意:避免使用 ~"$USER" 这类写法——双引号会阻止波浪号展开,导致字面输出。
不推荐的方法:pwd、whoami 配合拼接
像 "$(whoami)" 拼出 /home/$(whoami) 是**不可靠的**:
- root 用户家目录是
/root,不是/home/root - 某些系统自定义了非标准家目录(如
/users/jane) - LDAP/NIS 用户家目录可能完全不在 /home 下
这类硬编码路径绕过了系统真实配置,容易出错。










