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 其他

⏹查看当前终端启动的时间

apluser@FengYeHong-HP:~$ echo "$SECONDS"
2234

⏹查看在当前脚本中的行号

apluser@FengYeHong-HP:~$ echo "当前所在的行是: $LINENO"
当前所在的行是: 76

二. 路径

2.1 /dev/null

/dev/null 在 Linux(以及类 Unix 系统)里是一个 特殊设备文件,常被称为 黑洞位桶 (bit bucket)。它的主要作用是:

  • 丢弃输出,往 /dev/null 写入的所有数据都会被直接丢弃,不会保存也不会报错。
    echo "hello" > /dev/null
    
  • 清空文件
    cat /dev/null > file.txt
    
  • 把不需要的标准输出或标准错误重定向到 /dev/null
    • > /dev/null:丢掉正常输出
    • 2>&1:丢掉错误输出
    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
    
    • 在 Bash 里,if 并不是判断输出结果,而是判断命令的退出状态码 ($?)
    • 0 表示成功(条件成立),非0 表示失败(条件不成立)
    • printenv 用来打印环境变量
      • 如果环境变量 USERNAME 存在,就会输出它的值,并返回状态码 0。
      • 如果环境变量不存在,就会返回状态码 非 0
      • 因为我们使用/dev/null 2>&1来丢弃标准和错误输出,因此即使变量不存在也不会报错。
    if printenv USERNAME > /dev/null 2>&1; then
      echo "环境变量 USERNAME 存在"
    else
      echo "环境变量 USERNAME 不存在"
    fi
    

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.confDNS 配置。
/etc/fstab文件系统挂载表。
/etc/shadow用户密码哈希(仅 root 可读)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值