用户与环境:whoami、id、env、echo、history
whoami 与 id:查看用户身份
whoami
whoami
# 输出:user
显示当前登录的用户名。简单直接,常用于脚本中判断执行者。
id
id
# 输出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo)
显示当前用户的 UID(用户 ID)、GID(组 ID)和所属的所有组。
UID 的特殊值
| UID | 用户 | 作用 |
|---|---|---|
| 0 | root | 超级用户,拥有所有权限 |
| 1-999 | 系统用户 | 运行系统服务(如 www-data, mysql) |
| 1000+ | 普通用户 | 人类用户 |
env:查看环境变量
环境变量是 Shell 和程序运行时的配置参数,影响命令的查找路径、语言设置、编辑器选择等。
env
# 输出所有环境变量
关键环境变量
| 变量 | 作用 | 示例 |
|---|---|---|
| PATH | 命令搜索路径 | /usr/local/bin:/usr/bin:/bin |
| HOME | 家目录 | /home/user |
| USER | 当前用户名 | user |
| SHELL | 当前 Shell | /bin/bash |
| LANG | 系统语言 | zh_CN.UTF-8 |
| EDITOR | 默认编辑器 | vim |
| PS1 | 命令提示符格式 | \u@\h:\w\$ |
PATH 的工作原理
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# 当你输入 ls 时,Shell 按顺序查找:
# 1. /usr/local/bin/ls
# 2. /usr/bin/ls ← 找到了!
# 3. /bin/ls
修改环境变量
# 临时修改(仅当前终端)
export PATH=$PATH:/home/user/bin
# 永久修改(写入配置文件)
echo 'export PATH=$PATH:/home/user/bin' >> ~/.bashrc
source ~/.bashrc
echo:输出与变量查看
echo 用于打印文本或变量值,是调试和脚本中最常用的命令。
# 打印普通文本
echo "Hello, Linux!"
# 查看环境变量
echo $PATH
echo $HOME
echo $USER
# 查看上一个命令的退出状态(0=成功,非0=失败)
echo $?
# 不换行输出(-n)
echo -n "Loading..."
# 解释转义字符(-e)
echo -e "Line 1\nLine 2\tTabbed"
退出状态码
| 状态码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 通用错误 |
| 2 | 误用命令 |
| 126 | 命令不可执行 |
| 127 | 命令未找到 |
| 130 | 被 Ctrl+C 终止 |
history:命令历史
history 显示当前会话和之前会话执行过的命令列表。
# 显示所有历史命令
history
# 显示最近 20 条
history 20
# 搜索历史命令(Ctrl+R 反向搜索)
# 按 Ctrl+R 后输入关键词,如 "ssh"
# 执行历史中的第 n 条命令
!100
# 执行上一条命令
!!
# 执行最近以 "ls" 开头的命令
!ls
# 清除历史记录
history -c
历史命令的存储
# 当前会话的历史保存在内存中
# 退出时写入 ~/.bash_history
# 查看历史文件
cat ~/.bash_history
# 历史记录数量限制
echo $HISTSIZE # 内存中保存的数量(默认 1000)
echo $HISTFILESIZE # 文件中保存的数量(默认 2000)
本篇小结
whoami:当前用户名;id:UID、GID、所属组- root 的 UID=0,系统用户 UID=1-999,普通用户 UID=1000+
env:查看所有环境变量;echo $VAR:查看单个变量PATH:命令搜索路径,按顺序查找,找不到报 command not foundecho $?:查看上条命令的退出状态,0=成功history:命令历史,!n执行第 n 条,!!执行上一条,Ctrl+R 搜索
动手实践
查看你的用户身份:
whoami id查看关键环境变量:
echo $PATH echo $HOME echo $SHELL echo $LANGPATH 实验:
# 创建一个自定义命令 mkdir ~/bin echo '#!/bin/bash\necho "Hello from my bin!"' > ~/bin/hello chmod +x ~/bin/hello # 未添加 PATH 时 hello # command not found # 添加 PATH export PATH=$PATH:~/bin hello # Hello from my bin!退出状态码实验:
ls /tmp echo $? # 0(成功) ls /notexist echo $? # 2(错误)历史命令练习:
history 10 # 最近 10 条 !1 # 执行历史第 1 条(谨慎) !! # 执行上一条 # 按 Ctrl+R,输入 "echo",看能否找到之前的 echo 命令思考:为什么
echo $PATH输出中用冒号:分隔路径,而不是空格或其他符号?如果 PATH 中有两个目录都有同名命令,会执行哪个?