Linux常用命令大全

前言

工欲善其事必先利其器!人都有遗忘性,必须把以前学的整理,温故而知新,可以为师矣。本笔记整理了Linux系统中最常用的命令,按功能分类,便于查询和使用。

一、文件与目录管理

1. 目录操作

pwd - 显示当前工作目录

1
pwd

功能:输出当前所在的绝对路径

cd - 切换目录

1
cd [目录路径]

功能:改变当前工作目录

示例:

1
2
3
4
cd /etc              # 切换到/etc目录
cd ~ # 切换到用户主目录
cd .. # 切换到上级目录
cd ../.. # 切换到上上级目录

ls - 列出目录内容

1
ls [选项] [目录/文件]

功能:列出目录中的文件和子目录

常用选项:

  • -l:以长格式显示(包含权限、所有者、大小、修改时间等)
  • -a:显示所有文件,包括隐藏文件(以.开头的文件)
  • -h:以人类可读的格式显示文件大小
  • -r:反向排序
  • -t:按修改时间排序

示例:

1
2
ls -la /home/user    # 显示/home/user目录的所有文件(包括隐藏文件)的详细信息
ls -lh # 以人类可读格式显示当前目录文件大小

mkdir - 创建目录

1
mkdir [选项] 目录名

功能:创建新目录

常用选项:

  • -p:递归创建多级目录

示例:

1
2
mkdir newdir                  # 创建单个目录
mkdir -p dir1/dir2/dir3 # 递归创建多级目录

rmdir - 删除空目录

1
rmdir [选项] 目录名

功能:删除空目录

常用选项:

  • -p:递归删除多级空目录

示例:

1
2
rmdir newdir                      # 删除名为newdir的空目录
rmdir -p dir1/dir2/dir3 # 递归删除多级空目录

2. 文件操作

touch - 创建文件或更新时间戳

1
touch [文件名]

功能:如果文件不存在则创建空文件;如果文件存在,则更新其访问时间和修改时间

示例:

1
touch newfile.txt                 # 创建空文件或更新时间戳

cp - 复制文件或目录

1
2
cp [选项] 源文件 目标文件
cp [选项] 源目录 目标目录

功能:复制文件或目录

常用选项:

  • -r:递归复制目录及其内容
  • -i:覆盖前提示确认
  • -v:显示复制过程

示例:

1
2
3
cp file.txt backup.txt            # 复制file.txt为backup.txt
cp -r dir1 dir2 # 复制整个目录dir1到dir2
cp -iv *.txt backup/ # 复制所有txt文件到backup目录,并显示复制过程

mv - 移动或重命名文件/目录

1
mv [选项] 源文件/目录 目标文件/目录

功能:移动文件/目录或重命名

常用选项:

  • -i:覆盖前提示确认
  • -v:显示移动过程

示例:

1
2
3
mv file.txt /tmp                  # 将file.txt移动到/tmp目录
mv file.txt newfile.txt # 重命名file.txt为newfile.txt
mv dir1 dir2 # 如果dir2不存在,则重命名dir1为dir2;如果dir2存在,则将dir1移动到dir2下

rm - 删除文件或目录

1
rm [选项] 文件/目录

功能:删除文件或目录

常用选项:

  • -r:递归删除目录及其内容
  • -f:强制删除,无需确认
  • -i:删除前提示确认
  • -v:显示删除过程

示例:

1
2
3
4
rm file.txt                      # 删除单个文件
rm -r dir1 # 删除目录及其内容
rm -rf dir2 # 强制删除目录及其内容,无需确认
rm *.log # 删除当前目录下所有.log文件

ln - 创建链接

1
2
ln [源文件] [链接名]           # 创建硬链接
ln -s [源文件/目录] [链接名] # 创建软链接(符号链接)

功能:创建文件或目录的链接

  • 硬链接:通过索引节点号(Inode)链接到文件内容,删除源文件后链接仍可访问
  • 软链接:类似于Windows的快捷方式,链接指向源文件路径,删除源文件后链接失效

示例:

1
2
3
ln file.txt hardlink.txt         # 创建硬链接
ln -s file.txt symlink.txt # 创建软链接
ln -s /usr/local/bin bin-link # 为目录创建软链接

二、文件内容查看与处理

1. 文件内容查看

cat - 显示文件内容

1
cat [选项] 文件名

功能:显示文件的全部内容

常用选项:

  • -n:显示行号
  • -b:显示非空行的行号

示例:

1
2
cat file.txt                     # 显示文件内容
cat -n file.txt # 显示文件内容并带行号

less - 分页查看文件内容

1
less 文件名

功能:分页显示文件内容,支持上下滚动和搜索

常用操作:

  • 空格键:向下翻页
  • b:向上翻页
  • /关键词:向下搜索关键词
  • ?关键词:向上搜索关键词
  • n:查找下一个匹配项
  • N:查找上一个匹配项
  • q:退出

示例:

1
less large_file.txt              # 分页查看大文件内容

head - 显示文件开头

1
head [选项] 文件名

功能:显示文件的前几行内容

常用选项:

  • -n <行数>:显示指定行数的内容(默认10行)

示例:

1
2
head file.txt                    # 显示文件前10行
head -n 20 file.txt # 显示文件前20行

tail - 显示文件结尾

1
tail [选项] 文件名

功能:显示文件的最后几行内容

常用选项:

  • -n <行数>:显示指定行数的内容(默认10行)
  • -f:实时跟踪文件内容变化(常用于日志监控)

示例:

1
2
3
4
tail file.txt                    # 显示文件最后10行

tail -n 20 file.txt # 显示文件最后20行
tail -f /var/log/syslog # 实时监控系统日志

2. 文件内容搜索与处理

grep - 在文件中搜索匹配的行

1
grep [选项] "模式" 文件名

功能:在文件中搜索包含指定模式的行

常用选项:

  • -i:忽略大小写
  • -n:显示匹配行的行号
  • -v:显示不匹配的行
  • -r:递归搜索目录下的所有文件
  • -A <行数>:显示匹配行及其后的指定行数
  • -B <行数>:显示匹配行及其前的指定行数

示例:

1
2
3
grep "error" log.txt             # 搜索log.txt中包含"error"的行
grep -n "warning" log.txt # 搜索包含"warning"的行并显示行号
grep -r "function" /home/user # 递归搜索/home/user目录下所有包含"function"的文件

sed - 流编辑器,用于文本替换和处理

1
sed [选项] '命令' 文件名

功能:对文件内容进行替换、删除、插入等操作

常用选项:

  • -i:直接修改文件内容(否则仅显示修改结果)
  • -e:执行多个sed命令

示例:

1
2
3
sed 's/old/new/g' file.txt       # 将文件中所有"old"替换为"new"(仅显示结果)
sed -i 's/old/new/g' file.txt # 将文件中所有"old"替换为"new"(直接修改文件)
sed '/^#/d' file.txt # 删除所有以#开头的注释行

awk - 文本处理工具,用于数据提取和报告生成

1
awk '条件 {命令}' 文件名

功能:按行处理文本文件,支持字段提取、条件判断和计算

示例:

1
2
3
awk '{print $1, $3}' file.txt    # 打印文件中每行的第1和第3个字段
awk -F: '{print $1}' /etc/passwd # 以冒号为分隔符,打印/etc/passwd中每行的第1个字段(用户名)
awk '$3 > 1000 {print $1}' /etc/passwd # 打印UID大于1000的用户名

wc - 统计文件的字节数、字数、行数

1
wc [选项] 文件名

功能:统计文件的行数、字数、字节数等信息

常用选项:

  • -l:统计行数
  • -w:统计字数
  • -c:统计字节数
  • -m:统计字符数

示例:

1
2
3
4
wc -l file.txt                   # 统计文件行数
wc -w file.txt # 统计文件字数
wc -c file.txt # 统计文件字节数
wc -l *.txt # 统计当前目录下所有txt文件的总行数

三、权限管理

1. 文件权限查看

ls -l - 查看文件权限

1
ls -l 文件名

功能:显示文件的详细信息,包括权限、所有者、所属组等

权限表示格式:rwxrwxrwx

  • 前三位:文件所有者的权限
  • 中间三位:文件所属组的权限
  • 后三位:其他用户的权限

权限含义:

  • r:读权限(4)
  • w:写权限(2)
  • x:执行权限(1)
  • -:无权限(0)

示例:

1
2
3
ls -l file.txt                   # 查看文件权限
# 输出示例:-rw-r--r-- 1 user group 1024 Aug 28 12:00 file.txt
# 权限部分:rw-(所有者)r--(所属组)r--(其他用户)

2. 权限修改

chmod - 修改文件或目录的权限

1
chmod [选项] 权限 文件名/目录名

功能:修改文件或目录的访问权限

权限表示方式:

  • 数字表示法:如755、644
  • 符号表示法:如u+x、g-w、o=r

数字权限计算:

  • r=4, w=2, x=1, -=0
  • 所有者权限 + 所属组权限 + 其他用户权限

示例:

1
2
3
4
5
chmod 755 file.sh                # 设置文件权限为rwxr-xr-x
chmod u+x file.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除所属组的写权限
chmod o=r file.txt # 给其他用户设置只读权限
chmod -R 777 dir1 # 递归修改目录及其内容的权限为rwxrwxrwx

chown - 修改文件或目录的所有者和所属组

1
chown [选项] 所有者[:所属组] 文件名/目录名

功能:修改文件或目录的所有者和所属组

常用选项:

  • -R:递归修改目录及其内容的所有者和所属组

示例:

1
2
3
chown user file.txt              # 修改文件所有者为user
chown user:group file.txt # 修改文件所有者为user,所属组为group
chown -R user:group dir1 # 递归修改目录及其内容的所有者和所属组

chgrp - 修改文件或目录的所属组

1
chgrp [选项] 组名 文件名/目录名

功能:修改文件或目录的所属组

常用选项:

  • -R:递归修改目录及其内容的所属组

示例:

1
2
chgrp group file.txt             # 修改文件所属组为group
chgrp -R group dir1 # 递归修改目录及其内容的所属组

四、系统信息与管理

1. 系统信息查看

uname - 显示系统信息

1
uname [选项]

功能:显示系统的基本信息

常用选项:

  • -a:显示所有系统信息(内核名称、主机名、内核版本、内核发布日期、硬件架构等)
  • -r:显示内核版本
  • -m:显示硬件架构

示例:

1
2
uname -a                         # 显示所有系统信息
uname -r # 显示内核版本

hostname - 显示或设置主机名

1
hostname [选项]

功能:显示或设置系统主机名

示例:

1
2
hostname                         # 显示当前主机名
sudo hostname new-hostname # 临时设置主机名(重启后失效)

uptime - 显示系统运行时间和负载

1
uptime

功能:显示系统运行时间、用户数和系统负载

示例:

1
2
uptime                           # 显示系统运行时间和负载
# 输出示例:14:30:00 up 2 days, 10:15, 2 users, load average: 0.12, 0.08, 0.05

free - 显示内存使用情况

1
free [选项]

功能:显示系统内存和交换分区的使用情况

常用选项:

  • -h:以人类可读的格式显示
  • -m:以MB为单位显示
  • -g:以GB为单位显示

示例:

1
free -h                          # 以人类可读格式显示内存使用情况

df - 显示磁盘使用情况

1
df [选项]

功能:显示文件系统的磁盘使用情况

常用选项:

  • -h:以人类可读的格式显示
  • -T:显示文件系统类型

示例:

1
2
df -h                            # 以人类可读格式显示磁盘使用情况
df -hT # 显示磁盘使用情况和文件系统类型

du - 显示目录或文件的磁盘使用空间

1
du [选项] [目录/文件]

功能:显示目录或文件的磁盘使用空间

常用选项:

  • -h:以人类可读的格式显示
  • -s:仅显示总计
  • -c:显示总计并添加总和行

示例:

1
2
3
du -h                            # 显示当前目录下各文件和目录的大小
du -sh dir1 # 显示目录dir1的总大小
du -h --max-depth=1 # 显示当前目录下一级子目录的大小

top - 实时显示系统进程信息

1
top

功能:实时显示系统的进程状态,包括CPU、内存使用情况和进程列表

常用操作:

  • P:按CPU使用率排序
  • M:按内存使用率排序
  • N:按进程ID排序
  • k:终止指定进程
  • q:退出top

2. 用户和组管理

useradd - 创建新用户

1
sudo useradd [选项] 用户名

功能:创建新用户

常用选项:

  • -m:创建用户主目录
  • -s:指定用户的登录shell
  • -g:指定用户的初始所属组

示例:

1
sudo useradd -m -s /bin/bash newuser  # 创建新用户并指定主目录和shell

passwd - 设置用户密码

1
passwd [用户名]

功能:设置或修改用户密码

示例:

1
2
passwd newuser                   # 设置newuser的密码
sudo passwd root # 设置root用户密码

userdel - 删除用户

1
sudo userdel [选项] 用户名

功能:删除用户

常用选项:

  • -r:同时删除用户主目录

示例:

1
2
sudo userdel newuser             # 删除用户
sudo userdel -r newuser # 删除用户并同时删除其主目录

groupadd - 创建新组

1
sudo groupadd 组名

功能:创建新的用户组

示例:

1
sudo groupadd newgroup           # 创建新组

groupdel - 删除组

1
sudo groupdel 组名

功能:删除用户组

示例:

1
sudo groupdel newgroup           # 删除组

usermod - 修改用户属性

1
sudo usermod [选项] 用户名

功能:修改用户的属性,如所属组、shell、主目录等

常用选项:

  • -aG:将用户添加到指定的附加组
  • -s:修改用户的登录shell
  • -d:修改用户的主目录

示例:

1
2
sudo usermod -aG sudo newuser    # 将newuser添加到sudo组
sudo usermod -s /bin/zsh newuser # 修改newuser的shell为zsh

五、网络命令

1. 网络连接测试

ping - 测试网络连接

1
ping [选项] 目标地址

功能:测试与目标主机的网络连接是否正常

常用选项:

  • -c <次数>:发送指定次数的ICMP包后停止
  • -s <大小>:设置ICMP包的大小

示例:

1
2
ping www.google.com              # 测试与Google的连接
ping -c 5 www.google.com # 发送5个ICMP包后停止

curl - 发送HTTP请求并获取响应

1
curl [选项] URL

功能:发送HTTP/HTTPS请求,下载或上传文件

常用选项:

  • -O:将远程文件下载到本地,保持文件名不变
  • -L:跟随重定向
  • -I:仅显示HTTP头信息
  • -X:指定HTTP请求方法(GET、POST、PUT等)
  • -d:发送POST请求的数据

示例:

1
2
3
4
curl www.google.com              # 获取Google首页内容
curl -O https://example.com/file.txt # 下载文件
curl -I www.google.com # 显示HTTP头信息
curl -X POST -d "name=test" https://example.com/api # 发送POST请求

wget - 下载文件

1
wget [选项] URL

功能:从网络上下载文件

常用选项:

  • -O <文件名>:指定下载文件的保存名称
  • -c:断点续传
  • -r:递归下载整个网站

示例:

1
2
3
wget https://example.com/file.txt  # 下载文件
wget -O newname.txt https://example.com/file.txt # 下载文件并指定保存名称
wget -c https://example.com/largefile.zip # 断点续传大文件

2. 网络配置与信息

ifconfig - 显示或配置网络接口(较旧的命令)

1
ifconfig [选项] [网络接口]

功能:显示或配置网络接口的IP地址、子网掩码、MAC地址等信息

示例:

1
2
ifconfig                         # 显示所有网络接口信息
ifconfig eth0 # 显示指定网络接口信息

ip - 网络配置工具(替代ifconfig的新命令)

1
ip [选项] 命令 [网络接口]

功能:显示或配置网络接口、路由表、ARP表等

常用命令:

  • addr:显示或配置IP地址
  • link:显示或配置网络接口
  • route:显示或配置路由表

示例:

1
2
3
ip addr show                     # 显示所有网络接口的IP地址
ip link show # 显示所有网络接口信息
ip route show # 显示路由表

netstat - 显示网络连接、路由表、接口统计等

1
netstat [选项]

功能:显示网络连接、路由表、接口统计、伪装连接和多播成员等信息

常用选项:

  • -t:显示TCP连接
  • -u:显示UDP连接
  • -l:显示监听状态的连接
  • -n:使用数字形式显示地址和端口号
  • -p:显示进程ID和进程名

示例:

1
2
netstat -tlnp                    # 显示所有监听的TCP端口及对应的进程
netstat -rn # 显示路由表

ss - 显示套接字统计信息(替代netstat的新命令)

1
ss [选项]

功能:显示网络套接字的详细信息,比netstat更快更高效

常用选项:

  • -t:显示TCP套接字
  • -u:显示UDP套接字
  • -l:显示监听状态的套接字
  • -n:使用数字形式显示地址和端口号
  • -p:显示进程ID和进程名

示例:

1
2
ss -tlnp                         # 显示所有监听的TCP端口及对应的进程
ss -u # 显示所有UDP套接字

六、进程管理

1. 进程查看

ps - 显示进程状态

1
ps [选项]

功能:显示当前进程的状态

常用选项:

  • aux:显示所有用户的所有进程(BSD风格)
  • -ef:显示所有进程的完整信息(System V风格)
  • -l:显示长格式输出

示例:

1
2
3
ps aux                           # 显示所有用户的所有进程
ps aux | grep python # 查找与Python相关的进程
ps -ef | grep ffmpeg # 查找与ffmpeg相关的进程

top - 实时显示进程动态(详见系统信息部分)

htop - 交互式进程查看器(需要安装)

1
top

功能:交互式显示进程动态,比top更强大(需要先安装:sudo apt install htop)

2. 进程控制

kill - 终止进程

1
kill [选项] 进程ID

功能:向进程发送信号,默认发送TERM信号(终止进程)

常用信号:

  • -9-SIGKILL:强制终止进程
  • -15-SIGTERM:优雅终止进程(默认)
  • -1-SIGHUP:重新加载配置

示例:

1
2
3
kill 12345                       # 终止进程ID为12345的进程
kill -9 12345 # 强制终止进程
pkill -f process-name # 根据进程名终止进程

nohup - 在后台运行命令,忽略挂断信号

1
nohup 命令 &

功能:在后台运行命令,即使关闭终端也能继续运行

示例:

1
2
nohup python script.py &         # 在后台运行Python脚本
nohup ./server.sh > server.log 2>&1 & # 后台运行服务器,并将输出重定向到日志文件

jobs - 显示当前终端的后台作业

1
jobs [选项]

功能:显示当前终端的后台作业列表

示例:

1
jobs                             # 显示后台作业列表

fg - 将后台作业切换到前台

1
fg %作业号

功能:将后台运行的作业切换到前台运行

示例:

1
fg %1                            # 将作业号为1的后台作业切换到前台

bg - 将前台作业切换到后台

1
bg %作业号

功能:将暂停的作业切换到后台继续运行

示例:

1
bg %1                            # 将作业号为1的暂停作业切换到后台继续运行

七、软件包管理

1. APT包管理(Debian/Ubuntu系统)

apt update - 更新软件包列表

1
sudo apt update

功能:更新本地软件包列表,获取最新的软件包信息

apt upgrade - 升级已安装的软件包

1
sudo apt upgrade

功能:升级所有已安装的软件包到最新版本

apt install - 安装软件包

1
sudo apt install 软件包名

功能:安装指定的软件包

示例:

1
2
sudo apt install git             # 安装Git
sudo apt install nginx mysql-server # 安装Nginx和MySQL

apt remove - 卸载软件包

1
sudo apt remove 软件包名

功能:卸载指定的软件包,但保留配置文件

apt purge - 完全卸载软件包

1
sudo apt purge 软件包名

功能:卸载指定的软件包,并删除配置文件

apt autoremove - 自动删除不需要的依赖包

1
sudo apt autoremove

功能:删除不再需要的依赖包

2. YUM包管理(CentOS/RHEL系统)

yum update - 更新软件包

1
sudo yum update

功能:更新所有已安装的软件包

yum install - 安装软件包

1
sudo yum install 软件包名

功能:安装指定的软件包

yum remove - 卸载软件包

1
sudo yum remove 软件包名

功能:卸载指定的软件包

八、应用案例:后台服务管理

使用nohup后台运行服务

1
2
3
4
5
6
7
8
9
10
11
# 进入项目目录
cd ~/project

# 激活虚拟环境
source venv/bin/activate

# 使用nohup后台启动服务,并将输出重定向到日志文件
nohup uvicorn api_active:app --host 0.0.0.0 --port 8000 --workers 4 > api.log 2>&1 &

# 显示后台作业编号
echo "服务已启动,作业ID: $!"

使用screen管理会话(推荐用于开发)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装screen(如果未安装)
sudo apt update && sudo apt install screen

# 创建名为api的screen会话
screen -S api

# 在screen会话中启动服务
cd ~/project
source venv/bin/activate
uvicorn api_active:app --host 0.0.0.0 --port 8000 --workers 4

# 按 Ctrl+A 然后按 D 分离会话(服务继续运行)

# 重新连接到screen会话
screen -r api

# 查看所有screen会话
screen -ls

使用systemd管理服务(生产环境最佳)

  1. 创建systemd服务文件

    1
    2
    # 创建systemd服务文件
    sudo nano /etc/systemd/system/api-active.service
  2. 编写服务配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [Unit]
    Description=API Active Service
    After=network.target

    [Service]
    Type=simple
    User=ubuntu
    Group=ubuntu
    WorkingDirectory=/home/ubuntu/project
    Environment=PATH=/home/ubuntu/project/venv/bin
    ExecStart=/home/ubuntu/project/venv/bin/uvicorn api_active:app --host 0.0.0.0 --port 8000 --workers 4
    Restart=always
    RestartSec=5
    StandardOutput=journal
    StandardError=journal

    [Install]
    WantedBy=multi-user.target
  3. 管理服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 重新加载systemd配置
    sudo systemctl daemon-reload

    # 启用开机自启
    sudo systemctl enable api-active

    # 启动服务
    sudo systemctl start api-active

    # 查看服务状态
    sudo systemctl status api-active

    # 查看服务日志
    sudo journalctl -u api-active -f

    # 停止服务
    sudo systemctl stop api-active

    # 重启服务
    sudo systemctl restart api-active

验证服务是否运行

1
2
3
4
5
6
7
8
9
10
# 检查进程
ps aux | grep uvicorn

# 检查端口
netstat -tlnp | grep 8000
# 或
ss -tlnp | grep 8000

# 测试API
curl http://localhost:8000

九、常用快捷键

快捷键 功能
Ctrl + C 中断当前命令
Ctrl + Z 暂停当前命令,放入后台
Ctrl + D 退出当前终端或shell
Ctrl + L 清屏
Ctrl + A 移动光标到行首
Ctrl + E 移动光标到行尾
Ctrl + U 删除光标前的所有字符
Ctrl + K 删除光标后的所有字符
Ctrl + W 删除光标前的一个单词
Tab 自动补全命令或文件名
/ 浏览命令历史
Ctrl + R 搜索命令历史

十、注意事项

  1. 谨慎使用root权限:使用sudo命令时要格外小心,避免误操作导致系统问题
  2. 备份重要数据:在执行可能导致数据丢失的命令前(如rm -rf),确保已备份重要数据
  3. 注意路径:执行文件操作命令时,要注意当前工作目录和目标路径
  4. 查看命令帮助:使用命令 --helpman 命令查看命令的详细用法
  5. 网络安全:不要在生产环境中使用弱密码,定期更新系统和软件包

Ubuntu 24 环境变量设置指南

1. 临时环境变量(仅当前终端会话有效)

在当前终端中设置临时环境变量,重启终端后会失效:

1
2
export AES_KEY="nIpDDCrGKmN7d4nqRmIVfwHZgzCKDf/qdkGbL97/gEY="
export AES_IV="P2m/UNJ5x+FCuILTacX96w=="

2. 用户级永久环境变量(仅对当前用户有效)

编辑用户主目录下的 .bashrc 文件:

1
nano ~/.bashrc

在文件末尾添加以下行:

1
2
3
# AES加密配置
export AES_KEY="nIpDDCrGKmN7d4nqRmIVfwHZgzCKDf/qdkGbL97/gEY="
export AES_IV="P2m/UNJ5x+FCuILTacX96w=="

保存并退出(按 Ctrl+O 保存,Ctrl+X 退出)。

使更改生效:

1
source ~/.bashrc

3. 系统级永久环境变量(对所有用户有效)

编辑 /etc/environment 文件(需要管理员权限):

1
sudo nano /etc/environment

在文件中添加以下行(注意:不要使用 export 关键字):

1
2
AES_KEY="nIpDDCrGKmN7d4nqRmIVfwHZgzCKDf/qdkGbL97/gEY="
AES_IV="P2m/UNJ5x+FCuILTacX96w=="

保存并退出。更改将在下次登录后生效,或者可以使用以下命令立即生效:

1
source /etc/environment

4. 在 Python 代码中读取环境变量

修改 api_active.py 文件,使用 os 模块读取环境变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
from fastapi import FastAPI, HTTPException, Header, Depends, Request
# ... 其他导入

# 从环境变量读取AES配置
AES_KEY = os.environ.get("AES_KEY")
AES_IV = os.environ.get("AES_IV")

# 检查环境变量是否设置
if not AES_KEY or not AES_IV:
raise ValueError("请设置AES_KEY和AES_IV环境变量")

aes = AESUtils(AES_KEY, AES_IV)

同样,修改 check_active.py 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os
# ... 其他导入

class CardKeyAPI:
def __init__(self, base_url, api_key):
# ... 其他初始化代码

# 从环境变量读取AES配置
self.AES_KEY = os.environ.get("AES_KEY")
self.AES_IV = os.environ.get("AES_IV")

# 检查环境变量是否设置
if not self.AES_KEY or not self.AES_IV:
raise ValueError("请设置AES_KEY和AES_IV环境变量")

self.aes = AESUtils(self.AES_KEY, self.AES_IV)

5. 验证环境变量是否设置成功

在终端中执行以下命令查看环境变量:

1
2
echo $AES_KEY
echo $AES_IV

或者创建一个简单的Python脚本验证:

1
2
3
import os
print("AES_KEY:", os.environ.get("AES_KEY"))
print("AES_IV:", os.environ.get("AES_IV"))

6. 注意事项

  1. 安全性:不要在日志或错误消息中输出环境变量的值
  2. 权限:确保包含环境变量的配置文件具有适当的权限(特别是系统级配置文件)
  3. 版本控制:不要将包含敏感信息的环境变量文件提交到版本控制系统
  4. 备份:定期备份包含重要环境变量的配置文件