Linux特殊变量与路径使用及说明
更新时间:2025年11月11日 11:15:48 作者:fengyehongWorld
这篇文章主要介绍了Linux特殊变量与路径使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
一. 特殊变量
1.1 shell相关
查看当前shell解释器的路径
apluser@FengYeHong-HP:~$ echo "$SHELL" /bin/bash apluser@FengYeHong-HP:~$ echo "$BASH" /bin/bash
查看当前bash的版本号
apluser@FengYeHong-HP:~$ echo "$BASH_VERSION" 5.1.16(1)-release
1.2 登录用户名和服务器名
登录用户名
apluser@FengYeHong-HP:~$ echo "$USER" apluser apluser@FengYeHong-HP:~$ echo "$LOGNAME" apluser apluser@FengYeHong-HP:~$ id -un apluser
登录服务器名
apluser@FengYeHong-HP:~$ echo "$NAME" FengYeHong-HP apluser@FengYeHong-HP:~$ hostname FengYeHong-HP
1.3 路径相关
用户家目录
apluser@FengYeHong-HP:~$ echo "$HOME" /home/apluser apluser@FengYeHong-HP:~$ echo ~ /home/apluser
当前工作目录
apluser@FengYeHong-HP:~$ echo "$PWD" /home/apluser apluser@FengYeHong-HP:~$ echo ~+ /home/apluser
可执行文件的搜索路径 → $PATH
apluser@FengYeHong-HP:~$ echo "$PATH" | xargs -d ':' -L 1 | head /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /usr/lib/wsl/lib
1.4 随机数
apluser@FengYeHong-HP:~$ echo "$RANDOM" | md5sum | cut -c 1-8 3abe73c4
1.5$符号系列
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名(含路径)。在命令行执行时就是命令本身。 |
| $n | 第 n 个参数(如 $1 表示第一个参数)。 |
| $# | 传入脚本的参数个数。 |
| $* | 传入的所有参数,作为一个整体字符串。 |
| $@ | 传入的所有参数,每个参数独立展开。 |
| $$ | 当前 Shell 的进程 ID (PID)。 |
| $! | 最近一次在后台执行的命令的 PID。 |
| $? | 最近一条命令的返回状态(0 表示成功,非 0 表示失败)。 |
| $_ | 上一条命令的最后一个参数。 |
| $- | 当前 Shell 的选项标志。 |
1.6 其他
$SECONDS:查看当前终端启动的时间
apluser@FengYeHong-HP:~$ echo "$SECONDS" 2234
$LINENO:查看在当前脚本中的行号
apluser@FengYeHong-HP:~$ echo "当前所在的行是: $LINENO" 当前所在的行是: 76
$OSTYPE:查看当前环境的类型(git bash 还是 linux)
# git for bash $ echo "$OSTYPE" msys # linux apluser@FengYeHong-HP:~$ echo "$OSTYPE" linux-gnu
二. 路径
2.1/dev/null
/dev/null 在 Linux(以及类 Unix 系统)里是一个 特殊设备文件,常被称为 黑洞 或 位桶 (bit bucket)。它的主要作用是:
丢弃输出,往 /dev/null 写入的所有数据都会被直接丢弃,不会保存也不会报错。
echo "hello" > /dev/null
清空文件
cat /dev/null > file.txt
把不需要的标准输出或标准错误重定向到 /dev/null
apluser@FengYeHong-HP:~$ ls /root ls: cannot open directory '/root': Permission denied apluser@FengYeHong-HP:~$ apluser@FengYeHong-HP:~$ ls /root > /dev/null ls: cannot open directory '/root': Permission denied apluser@FengYeHong-HP:~$ apluser@FengYeHong-HP:~$ ls /root > /dev/null 2>&1 apluser@FengYeHong-HP:~$ echo "$?" 2
# 2> 表示 标准错误输出 重定向到 /dev/null # 如果 ls /root 成功 → 会显示目录内容 # 如果失败(比如没有权限) → 错误信息丢到 /dev/null # 也就是说:成功时会输出内容,但是失败时不会显示内容 ls /root 2> /dev/null # > /dev/null → 把 标准输出 丢弃 # 2>&1 → 把 标准错误 也重定向到 标准输出,而标准输出已经被丢到 /dev/null # 无论成功还是失败 → 任何输出都丢掉,终端上一点东西都不会显示 ls /root > /dev/null 2>&1
if printenv USERNAME > /dev/null 2>&1; then echo "环境变量 USERNAME 存在" else echo "环境变量 USERNAME 不存在" fi
> /dev/null:丢掉正常输出2>&1:丢掉错误输出- 在 Bash 里,
if并不是判断输出结果,而是判断命令的退出状态码 ($?) 0表示成功(条件成立),非0表示失败(条件不成立)
printenv 用来打印环境变量
- 如果环境变量
USERNAME存在,就会输出它的值,并返回状态码 0。 - 如果环境变量不存在,就会返回状态码 非 0
- 因为我们使用
/dev/null 2>&1来丢弃标准和错误输出,因此即使变量不存在也不会报错。
2.2/dev/urandom
获取随机数的路径,必须指定要获取的范围
apluser@FengYeHong-HP:~$ cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 12 KdBX3jPgX9EC
2.3 查看服务器的发行版
apluser@FengYeHong-HP:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy
2.4/etc下的系统路径
| 路径 | 作用 |
|---|---|
| /etc/os-release | 当前发行版信息。 |
| /etc/passwd | 用户账号信息。 |
| /etc/group | 用户组信息。 |
| /etc/hosts | 主机名解析。 |
| /etc/resolv.conf | DNS 配置。 |
| /etc/fstab | 文件系统挂载表。 |
| /etc/shadow | 用户密码哈希(仅 root 可读) |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
在Linux和Windows下安装nc(netcat)的详细步骤
本文详细介绍了在Linux和Windows系统下安装netcat(nc)的方法,对于Linux系统,使用APT包管理器安装,推荐使用netcat-openbsd;对于Windows系统,推荐使用Nmap自带的Ncat或者下载独立版Netcat,需要的朋友可以参考下2025-10-10


最新评论