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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 手把手教你在腾讯云上搭建hive3.1.2的方法

    手把手教你在腾讯云上搭建hive3.1.2的方法

    这篇文章主要介绍了手把手教你在腾讯云上搭建hive3.1.2的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • linux命令实现音频格式转换和拼接的方法

    linux命令实现音频格式转换和拼接的方法

    今天小编就为大家分享一篇linux命令实现音频格式转换和拼接的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Apache访问机制配置小结

    Apache访问机制配置小结

    本文主要介绍了Apache访问机制配置小结,包括如何设置访问控制、认证和授权,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 在Linux和Windows下安装nc(netcat)的详细步骤

    在Linux和Windows下安装nc(netcat)的详细步骤

    本文详细介绍了在Linux和Windows系统下安装netcat(nc)的方法,对于Linux系统,使用APT包管理器安装,推荐使用netcat-openbsd;对于Windows系统,推荐使用Nmap自带的Ncat或者下载独立版Netcat,需要的朋友可以参考下
    2025-10-10
  • Linux I2C驱动注册详解

    Linux I2C驱动注册详解

    文章介绍了I2C驱动注册机制,核心是structi2c_driver结构体,需填充name、probe和id_table字段,name用于显示驱动名称,probe在设备匹配后调用(无论设备是否存在),通过设备树或静态注册识别设备,最终触发驱动探针流程
    2025-07-07
  • 101个脚本之建立linux回收站的脚本

    101个脚本之建立linux回收站的脚本

    众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题
    2016-08-08
  • Linux如何开启路由转发功能

    Linux如何开启路由转发功能

    这篇文章主要介绍了Linux如何开启路由转发功能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Apache中启用Server Status配置示例

    Apache中启用Server Status配置示例

    这篇文章主要介绍了Apache中启用Server Status配置示例,本文首先讲解了什么是Apache Server Status,然后给出了配置示例,需要的朋友可以参考下
    2014-09-09
  • linux(centos)下SVN服务器如何搭建

    linux(centos)下SVN服务器如何搭建

    linux(centos)下SVN服务器如何搭建?说到SVN服务器,想必大家都知道,可以是在LINUX下如何搭建SVN服务器呢?那么今天给大家分享一下linux(centos)搭建SVN服务器的思路!
    2015-09-09
  • Linux切换用户环境变量消失问题及解决

    Linux切换用户环境变量消失问题及解决

    这篇文章主要介绍了Linux切换用户环境变量消失问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论