su [用户名]或
sudo -u [用户名] [命令]切换用户,前者需输入目标用户密码,后者需当前用户有sudo权限并输入其密码
Linux系统中,cd命令的核心功能是切换当前工作目录,而非直接用于切换用户身份,通过结合特定语法和路径规则,可以间接实现“跳转到其他用户的目录”的效果,以下是详细说明及操作方法:
使用 cd 切换至其他用户的主目录
-
通过用户名缩写(带波浪号 )
输入形如cd ~username的命令(将username替换为目标用户的用户名),即可快速定位到该用户的个人主目录。cd ~john # 切换到用户 john 的主目录(通常位于 /home/john)
此方法利用了Linux对 的特殊解析规则——默认扩展为
/home/用户名,若目标用户的家目录不在标准位置(如自定义路径),则需改用绝对路径方式。 -
指定绝对路径
直接使用完整的文件系统路径访问任意用户的目录结构,典型场景包括:cd /home/alice # 进入 alice 用户的主目录 cd /root # 切换到超级用户的专属目录(需具备相应权限)
这种方式不依赖用户配置,适用于所有符合POSIX标准的Linux发行版。
-
相对路径导航
当已知当前所在位置与目标的位置关系时,可采用相对路径高效移动,比如从/home层级开始:cd ../bob # 若当前在 /home/parent_dir,则转入同级下的 bob 用户目录
配合其他命令实现完整交互式切换
若不仅需要改变目录,还希望以特定用户身份执行后续操作,应组合以下工具:
| 命令 | 作用描述 | 示例 | 注意事项 |
|————–|————————————————————————–|—————————————|——————————|
| su user | 完全切换至指定用户的登录会话(含环境变量、Shell配置等) | su lily → 输入密码后获得其终端 | 需要知道目标用户的密码 |
| sudo -iu user | 以目标用户的身份启动一个交互式Shell会话 | sudo -iu mike | 当前用户必须有sudo授权 |
| sudo -u user command | 单次以某用户权限运行某个可执行程序或脚本 | sudo -u admin ls /etc | 仅临时赋予该命令相关权限 |
️ 关键区别:
cd只修改当前终端的工作目录;而su/sudo会创建新的进程上下文,彻底接管用户环境。
特殊符号与快捷操作技巧
以下是提升效率的实用技巧汇总:
- 返回上级目录:
cd ..(逐级向上)或cd ../..(多级跳跃)。 - 回到前一个目录:
cd -(利用Shell自动保存的OLDPWD变量)。 - 直达根目录:
cd /。 - 自动补全支持:输入部分路径后按
Tab键,系统将尝试猜测完整名称(如输cd d+ Tab可能补全为cd documents)。 - 环境变量引用:
cd $HOME等同于cd ~,均指向当前登录用户的主文件夹。
常见错误及解决方案对照表
| 现象 | 可能原因 | 修复建议 |
|---|---|---|
cd: No such file or directory |
路径拼写错误或目录不存在 | 检查大小写、空格等细节,试用 ls 确认结构 |
| “Permission denied” | 无权访问目标目录 | 使用 sudo cd path(无效!因cd是内置命令),应改用 sudo ls查看权限后再调整策略 |
| 切换后未感知变化 | 并行进程间的环境隔离 | 确保在正确的终端窗口中操作,可用 pwd验证实际位置 |
| 软链接循环导致无限递归 | 错误配置的象征链接形成闭环 | 添加 -P参数强制解析物理路径:cd -P link_name |
相关问答FAQs
Q1: 为什么直接运行 sudo cd 会报错?
A: 因为 cd 是一个Shell内置命令,不属于独立的可执行文件。sudo只能修饰外部程序(如 sudo ls),无法直接增强内置命令的权限,正确做法是通过 sudo su user启动新会话来获取高权限用户的完整环境。
Q2: 如何快速在多个常用目录间切换?
A: 除手动输入外,还可利用两种自动化策略:
- 别名设置:在
~/.bashrc中添加类似alias proj='cd /path/to/project'的规则,重载配置后直接使用proj代替长路径; - 目录栈管理:先用
pushd /target/path压入地址栈,再用popd按序弹出并跳转,特别适合频繁往返
