当前位置: 首页 > news >正文

~/ 路径和绝对路径

核心原理

Linux 中~/$HOME的指向,完全由/etc/passwd文件中对应用户的第 6 个字段(家目录配置)决定,而非固定绑定/home目录。只要该字段配置的是任意合法路径(比如/data/user1/opt/www/var/lib/mysql),~/就会动态指向这个路径。

核心区别:动态指代vs固定唯一

~/用户家目录的快捷符号会随当前登录用户变化而动态指向不同路径绝对路径(如/home/zhangsan/root)是从系统根目录/开始的完整路径指向唯一、固定的位置,不随用户变化

简单说:~/是「懒人快捷方式」,绝对路径是「精准门牌号」。


一、直观对比(不同用户登录时)

登录用户~/实际指向的路径(绝对路径)直接写绝对路径
普通用户zhangsan/home/zhangsan/home/zhangsan
普通用户lisi/home/lisi/home/lisi
超级用户root/root(root 家目录特殊,不在 /home)/root
系统用户www-data/var/www(自定义家目录)/var/www

关键:同一台机器,不同用户敲cd ~/,进入的是各自的家目录;但敲同一个绝对路径(如/home/zhangsan),所有人进入的都是同一个固定目录


二、使用场景差异(核心实用点)

✅ 用~/的场景(推荐)

  1. 操作「自己的家目录」:比如新建文件、存放个人脚本,~/test.txt比写完整的/home/xxx/test.txt更简洁,且换用户 / 换机器(同 Linux 系统)时,命令无需修改。例:touch ~/demo.shcd ~/Downloads
  2. 编写通用脚本 / 命令:比如给团队写操作手册,用~/能让所有用户直接复用,不用每个人替换成自己的用户名。

✅ 用绝对路径的场景(必须 / 推荐)

  1. 操作「其他用户的目录 / 系统公共目录」:比如访问lisi的家目录,不能写~/(会指向自己的),必须写绝对路径/home/lisi;操作系统目录(如/etc/usr/bin/var/log)也只能用绝对路径。
  2. 编写系统脚本 / 服务配置:比如定时任务(crontab)、后台服务(systemd),必须用绝对路径—— 因为这类脚本执行时「无当前登录用户」,~/会失效(无法识别指向哪里)。❌ 错误:* * * * * sh ~/script.sh(crontab 中执行会报错)✅ 正确:* * * * * sh /home/zhangsan/script.sh
  3. 明确指定唯一位置:避免路径歧义,比如机器上有同名目录时,绝对路径能精准定位。

三、补充知识点(避坑 + 拓展)

1.~~/无本质区别,~/更适合跟子目录 / 文件

  • cd ~=cd ~/=cd $HOME(三者完全等价,均指向当前用户家目录)
  • 写文件 / 子目录时,必须加/~/file.txt(正确),~file.txt(错误,系统会识别为普通字符串)。

2.~用户名/可快捷指向其他用户的家目录(实用技巧)

无需记完整绝对路径,直接用~用户名/即可,例:

cd ~lisi/ # 等价于 cd /home/lisi ls ~root/ # 等价于 ls /root

3. 绝对路径的核心特征:/开头

Linux 中路径的判定规则:

  • /开头 → 绝对路径(从根目录开始);
  • 不以/开头 → 相对路径(相对于当前所在目录,~/特殊的相对路径快捷符号)。

4. 特殊情况:susu -~/的影响

  • su 用户名切换用户但不切换环境~/仍指向原用户的家目录;
  • su - 用户名切换用户并加载其完整环境(推荐用法),~/指向新用户的家目录。
# 示例:当前是root用户 su zhangsan # 切换到zhangsan,echo ~ 输出 /root(原用户家目录) su - zhangsan # 切换到zhangsan并加载环境,echo ~ 输出 /home/zhangsan
  • 切换用户时需加-:只有su - 用户名(加载用户完整环境),~/才会切换为目标用户的家目录;如果直接su 用户名(不切换环境),~/仍指向原用户的家目录(和家目录是否在/home无关)。
  • ~用户名/同样适用:指向其他用户的家目录时,无论对方家目录在哪,~用户名/都能直接匹配,无需记完整路径
ls ~www-data/ # 直接指向/var/www,等价于ls /var/www cd ~mysql/ # 直接指向/var/lib/mysql,等价于cd /var/lib/mysql

5. 常见非/home家目录的场景(~/均有效)

  • 系统用户:www-data(家目录/var/www)、mysql(家目录/var/lib/mysql)、redis(家目录/var/lib/redis);
  • 自定义普通用户:为了数据分区隔离,将用户家目录放在/data/opt等挂载盘;
  • 超级用户root:默认家目录/root(本身就不在/home下),~root/root用户下的~/均指向/root

四、一句话总结

  • 想操作自己的家目录,追求简洁 → 用~/
  • 想操作别人的 / 系统的目录,或编写系统脚本 / 配置→ 用绝对路径
  • ~/系统配置家目录的 “全局快捷方式”,和家目录的物理路径(是否在/home下)毫无关系,只要/etc/passwd中配置了合法的家目录,~/就能精准指向。
  • ~/是动态的「用户专属快捷路径」,绝对路径是固定的「系统全局唯一路径」。
http://www.jsqmd.com/news/318820/

相关文章:

  • 基于最小均方算法的半球谐振子特征参数辨识方法
  • C++中的策略模式高级应用
  • Claude Code 初体验:安装、配置与第一个项目
  • 现代C++多线程编程实战
  • C++中的观察者模式
  • 一天一个开源项目(第6篇):SuperClaude Framework - 增强 Claude Code 的专业配置框架
  • 大数据领域元数据管理:推动数据驱动的组织变革
  • 数据结构空间复杂度
  • 搜维尔科技:集成Tesollo DG-5F机械手的类人平台
  • 原来PixPin不止能截图!配置快捷键后,OCR和翻译也能一键搞定
  • 提示工程架构师带继任者的3大误区,第1个90%管理者都犯过
  • 自定义分配器实战
  • 【服务器】为安全考虑,已锁定该用户帐户,原因是登录尝试或密码更。改尝试过多。请稍候片刻再重试,或与系统管理员或技术支持联系。
  • 卷王必备!SpringBoot极简审批流:1行代码搞定请假系统,摸鱼时间翻倍
  • python安卓的热门短视频播放平台小程序
  • 4589126
  • python安卓客户端室内定位APP_jrate小程序
  • 衡石科技ChatBI战略解码:以Agentic BI内核,定义企业级对话式分析的未来
  • C++中的函数式编程
  • python安卓的校园生活信息服务APP小程序
  • 衡石科技实践:如何基于统一指标平台,实现从传统BI到Agentic BI的架构演进
  • 用Python监控系统日志并发送警报
  • PCIe-FC Information Tracked by Transmitter
  • HarmonyOS 游戏里的“假异步”,为什么会卡
  • AI大模型应用开发工程师:技术与产业的“翻译官“,月薪可达60k的热门职业
  • Java计算机毕设之基于java+springboot+vue+mysql的高校院系学生信息管理系统 基于springboot的高校院系学生信息管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于java+springboot+vue+mysql的高校院系学生信息管理系统 基于springboot的高校院系学生信息管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 实用指南:Java Spring日志
  • 【大模型】-微调-BERT - 详解
  • 图神经网络传播优化新思路:ATP让大规模图学习更高效稳定