在Linux命令行操作中,“切换”是高频操作,涵盖用户身份、工作目录、运行模式、Shell环境等多个维度,掌握这些切换方法能显著提升操作效率,以下是详细说明。
用户身份切换
Linux是多用户系统,不同用户拥有不同权限,切换用户是常见需求,主要有两种方式:su
和sudo
。
su
命令:切换为其他用户(包括root)
su
(substitute user)用于完全切换目标用户身份,需输入目标用户密码。
- 基础用法:
su - username # 切换到目标用户,并加载其环境变量(推荐带-参数)
示例:
su - test
切换到用户test
,输入test
的密码后,当前Shell会完全切换为test
的环境(家目录、PATH等均改变)。 - 参数说明:
- 或
-l
:模拟登录Shell,加载目标用户的环境配置(如.bashrc
),若省略则仅切换身份,不加载环境变量。 -c
:执行命令后退出,不进入交互Shell。su - root -c "apt update"
以root身份执行更新命令后退出。- 直接
su
:默认切换为root,需输入root密码。
- 或
sudo
命令:以其他用户身份执行命令
sudo
(superuser do)允许普通用户以root(或其他用户)身份执行命令,需输入当前用户密码(而非root密码),且需在sudoers
文件中配置权限(默认管理员用户在sudo
组)。
- 基础用法:
sudo command # 以root身份执行command sudo -u username command # 以指定用户身份执行command
示例:
sudo apt install vim
以root权限安装vim;sudo -u test ls /home/test
以用户test
身份查看其家目录。 - 参数说明:
-i
:模拟root登录Shell,加载root环境变量,常用于需要完整root环境的场景(如sudo -i
)。
-v
:刷新sudo权限缓存(默认5分钟内无需重复输入密码)。
su
与sudo
对比
特性 | su |
sudo |
---|---|---|
密码要求 | 需输入目标用户密码 | 需输入当前用户密码 |
权限范围 | 完全切换用户身份,持续有效 | 临时提升权限,单条命令有效 |
安全性 | 需共享root密码,风险较高 | 权限精细控制,无需共享密码 |
适用场景 | 长期需要目标用户权限时 | 短期执行特权命令时 |
工作目录切换
cd
(change directory)是切换工作目录的核心命令,通过路径定位目标目录。
绝对路径与相对路径
- 绝对路径:从根目录开始的完整路径,如
/home/user/docs
。 - 相对路径:从当前目录开始的路径,如
./docs
(当前目录下的docs
)、../parent
(上级目录下的parent
)。
cd
常用语法
cd /path/to/directory # 切换到绝对路径 cd ../.. # 向上两级目录 cd ~ # 切换到当前用户家目录(如/home/user) cd - # 切换到上一次所在的目录(快速来回切换) cd ~username # 切换到指定用户的家目录(需权限)
示例:当前在/home/user/docs
,执行cd ../..
后切换到/home
;执行cd -
可返回/home/user/docs
。
目录栈管理(pushd
/popd
)
当需要在多个目录间频繁切换时,可用目录栈暂存路径:
pushd /path
:将目录压入栈顶并切换到该目录,栈内路径可通过dirs
查看。popd
:弹出栈顶目录并切换到下一个目录。
示例:pushd /home/user/docs # 压入并切换 pushd /var/log # 压入并切换,栈内顺序:/var/log /home/user/docs popd # 弹出/var/log,切换到/home/user/docs
运行模式切换
Linux主要运行模式包括图形界面(GUI)和命令行界面(CLI),可根据需求切换。
从图形界面切换到命令行(CLI)
- Ubuntu/Debian(使用systemd):
sudo systemctl set-default multi-user.target # 设置默认启动为CLI模式 sudo systemctl isolate multi-user.target # 立即切换到CLI模式(不重启)
- CentOS/RHEL(使用systemd):
sudo systemctl isolate multi-user.target # 立即切换到CLI模式
- 临时切换:在图形界面按
Ctrl+Alt+F1~F6
(F7通常为图形界面),可进入不同的文本终端TTY。
从命令行切换到图形界面
- Ubuntu/Debian:
sudo systemctl set-default graphical.target # 设置默认启动为GUI模式 sudo systemctl isolate graphical.target # 立即切换到GUI模式
- CentOS/RHEL:
sudo systemctl isolate graphical.target # 立即切换到GUI模式
- 从TTY切换:按
Ctrl+Alt+F7
(或F8
,取决于发行版)返回图形界面。
Shell环境切换
Shell是Linux命令行的解释器,默认为bash,但可切换至zsh、fish等增强型Shell。
临时切换Shell
直接输入目标Shell名称即可进入新Shell,退出后恢复原Shell:
bash # 进入bash zsh # 进入zsh(需已安装) exit # 退出当前Shell,返回原Shell
永久切换默认Shell
- 查看当前Shell:
echo $SHELL
(输出如/bin/bash
)。 - 修改默认Shell:使用
chsh
(change shell)命令:chsh -s /bin/zsh # 将默认Shell改为zsh(需输入当前用户密码)
修改后需重新登录生效,若需安装新Shell(如zsh),可先用
sudo apt install zsh
(Ubuntu)或sudo yum install zsh
(CentOS)安装。
虚拟终端切换
Linux支持多个虚拟终端(TTY),每个终端是独立的登录会话,适合多任务处理。
- 切换TTY:按
Ctrl+Alt+F1
~Ctrl+Alt+F6
(F1-F6为文本终端,F7通常为图形界面)。 - 查看当前TTY:
tty
命令,输出如/dev/tty1
。 - 在TTY间传递信息:使用
write
命令,如write username tty2
向用户username
在TTY2的终端发送消息。
相关问答FAQs
Q1:忘记root密码怎么办?如何通过命令行切换到root权限重置?
A:可通过单用户模式重置root密码:
- 重启系统,在GRUB启动菜单按
e
进入编辑模式; - 找到以
linux
或linuxefi
开头的行,在行尾添加init=/bin/bash
(忽略ro
只读参数); - 按
Ctrl+X
启动,进入root Shell(无需密码); - 执行
mount -o rw,remount /
重新挂载根目录为读写模式; - 用
passwd
命令重置root密码,完成后执行exec /sbin/init
重启系统。
Q2:使用cd
切换目录时提示“No such file or directory”,可能的原因及解决方法?
A:常见原因及解决方案如下:
- 路径拼写错误:检查目录名大小写(Linux区分大小写)、特殊字符(如空格需用
转义或加引号);
- 权限不足:若目标目录无访问权限,可用
sudo cd /path
(但cd
本身是内置命令,无法用sudo
,需用sudo ls -ld /path
确认权限,或通过su -
切换到有权限的用户); - 软链接失效:若路径包含软链接,用
ls -l /path
检查链接目标是否存在,或直接切换到实际路径; - 文件名含特殊字符:如
my dir
,需用cd "my dir"
或cd my dir
处理。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16902.html