openEuler常用操作

一、常用系统命令

1、echo命令

echo命令:在终端设备上输出字符串或变量提取后的值。

语法格式: echo [选项] [string 或 $variable]

  • $:提取变量的实际值。
  • -n:输出后不换行。(默认换行)
  • -e:启动转义字符(如 \n 换行符、\t 制表符等)。
  • -E:关闭转义字符。(默认开启)

引号规则:

  • 单引号 ' ':禁止变量和转义字符替换
  • 双引号 " ":允许变量和转义字符替换
# 显示普通字符串
[root@hqs-openEuler ~]# echo "Hello, openEuler!"
Hello, openEuler!

# 显示变量
[root@hqs-openEuler ~]# name="openEuler"
[root@hqs-openEuler ~]# echo "Welcome to $name"
Welcome to openEuler

# 不换行输出
[root@hqs-openEuler ~]# echo -n "Loading..." && echo " Done!"
Loading... Done!

# 转义字符处理
[root@hqs-openEuler ~]# echo -e "Line 1\nLine 2\tTabbed"  # \n 换行,\t 制表符
Line 1
Line 2	Tabbed
# 单引号不允许转义字符替换
[root@hqs-openEuler ~]# echo 'Line 1\nLine 2\tTabbed'
Line 1\nLine 2\tTabbed

# 显示命令执行结果
[root@hqs-openEuler ~]# echo "The current directory is: `pwd`"
The current directory is: /root

2、重启/关机命令

(1)reboot命令

reboot命令:重启系统。

# 语法:reboot [选项]
reboot     # 正常重启
reboot -f  # 强制重启(可能导致数据丢失)
选项说明
-f强制重启(跳过正常关闭流程)
-w模拟重启(只写日志,不实际执行)
(2)shutdown命令

shutdown命令:安全关闭或重启系统。支持定时操作和用户通知。

主要选项:

选项说明
-r重启系统(Reboot)
-h关闭系统(Halt)
-c取消已计划的关机/重启
-k仅发送警告消息,不实际执行操作

时间格式:

格式示例说明
nowshutdown -r now立即执行
+分钟数shutdown -h +1010分钟后执行
HH:MMshutdown -r 14:30指定具体时间(24小时制)
# 语法:shutdown [选项] [时间] [消息]

sudo shutdown -r +5 "系统将在5分钟后重启!"  # 5分钟后重启并通知用户
sudo shutdown -h 20:00                     # 20:00关闭系统
sudo shutdown -c                           # 取消计划操作
(3)poweroff和halt命令

halt:停止系统运行但不切断电源(需物理关闭电源)。poweroff:停止系统运行并切断电源(相当于关机)。

(4)init命令

init命令:通过改变运行级别实现系统的关闭、重启等操作。

# 语法:init [选项] [运行级别]
init 0  # 关机
init 6  # 重启
(5)systemctl命令

systemctl命令:用于管理系统服务。

# 语法:systemctl [选项] [服务名]
systemctl poweroff  # 关机
systemctl reboot    # 重启
systemctl halt      # 停止系统运行但不切断电源
systemctl suspend   # 休眠
(6)强制重启/关机

当系统完全无相应时:

echo 1 > /proc/sys/kernel/sysrq  # 启用SysRq功能
echo b > /proc/sysrq-trigger     # 强制重启(可能会导致数据丢失)
echo o > /proc/sysrq-trigger     # 强制关机(可能会导致数据丢失)
(7)查看关机/重启日志
journalctl -b -1  # 查看上次关机/重启日志

journalctl -u systemd-shutdown   # 查看关机/重启过程日志

last reboot  # 查看历史重启记录

3、ps命令

ps(Process Status)用于查看当前系统的进程状态信息,支持多种选项组合以灵活筛选和格式化输出。

常用选项:

选项说明
a显示所有用户的进程(包括其他用户)
u以用户友好的格式显示详细信息(如 CPU、内存占用)
x显示没有控制终端(TTY)的进程(如后台服务)
-e-A显示所有进程(等价于 ps aux)
-f显示完整格式(包括父进程 PID、启动时间等)
-l长格式输出(显示优先级、信号状态等)
-o自定义输出字段(如 pid,user,cmd,%cpu)
--forest以树形结构显示进程层级关系
--sort按指定字段排序(如 --sort=-%cpu 按 CPU 降序)
# 查看当前用户的进程
[root@hqs-openEuler ~]# ps
    PID TTY          TIME CMD
   1597 pts/0    00:00:00 bash
   2616 pts/0    00:00:00 ps

# 查看所有进程(BSD 风格)
[root@hqs-openEuler ~]# ps aux
进程所有者 进程ID  CPU占用率  内存占用率  虚拟内存  物理内存  终端    状态  启动时间  命令
USER         PID    %CPU    %MEM       VSZ        RSS     TTY    STAT   START   TIME COMMAND
root           1    0.0     1.0       71928      35936     ?      Ss    10:55   0:01 /usr/lib/systemd/systemd -
root           2    0.0     0.0        0          0        ?      S     10:55   0:00 [kthreadd]

# 查看所有进程(GNU 风格)
[root@hqs-openEuler ~]# ps -ef

# 查看指定进程
[root@hqs-openEuler ~]# ps -p | grep sshd

# 实时监控进程
[root@hqs-openEuler ~]# watch -n 1 'ps aux | grep sshd'

# 查看进程环境变量
[root@hqs-openEuler ~]# ps eww -p 913   # 显示指定进程的环境变量
    PID TTY      STAT   TIME COMMAND
    913 ?        S      0:00 /usr/sbin/chronyd LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin PIDFILE=/run/chrony/chronyd.pid USER=root INVOCATION_ID=c1f316ff55dd4e20b6493e043a608663 JOURNAL_STREAM=8:8963 SYSTEMD_EXEC_PID=880 OPTIONS=

# 显示线程信息
[root@hqs-openEuler ~]# ps -eLf  # 查看所有线程(`LWP` 字段为线程 ID)

输出字段:

字段说明
PID进程 ID
USER进程所有者
%CPUCPU 占用率
%MEM内存占用率
VSZ虚拟内存大小(KB)
RSS实际物理内存占用(KB)
TTY进程关联的终端(? 表示无终端,如守护进程)
STAT进程状态:R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸)、T(停止)、+(前台进程)
START进程启动时间
TIME累计 CPU 占用时间
COMMAND启动进程的命令([] 表示内核线程)

4、kill命令

kill 用于向进程发送信号以控制其行为(如终止、暂停、重新加载配置等)。默认发送 SIGTERM 信号(正常终止进程)。

常用信号:

信号名信号值说明场景
SIGTERM15 (默认)请求进程终止(允许进程清理资源)正常关闭进程 ★★★
SIGKILL9强制终止进程(立即停止,不可被捕获或忽略)进程无响应时 ★★
SIGHUP1挂起信号(常用于重新加载配置)重启服务(如 nginx -s reload) ★★
SIGINT2中断信号(等同于 Ctrl+C)终止前台进程 ★★
SIGSTOP19暂停进程(不可被捕获)调试进程状态 ★
SIGCONT18继续执行被暂停的进程恢复暂停的进程 ★
# 语法:kill [选项] [信号] <PID>...
# 选项:
# -l:列出所有支持的信号名和值
# -s <信号>:指定信号名或值

# 正常终止进程
kill 1234
# 等同于
kill -15 1234

# 强制终止进程
kill -9 1234
# 等同于
kill -SIGKILL 1234

# 终止所有同名进程
killall -9 nginx

# 重新加载配置(如 Web 服务器)
kill -1 $(pgrep nginx)  # 向所有 nginx 进程发送 SIGHUP(重新加载配置)


# 查找并终止进程
kill $(ps aux | grep 'python script.py' | awk '{print $2}')  # 终止指定命令的进程

# 暂停/恢复进程
kill -STOP 1234  # 暂停进程
kill -CONT 1234  # 恢复进程

5、pstree命令

pstree 命令:以树形图的形式展示进程之间的关系。

选项说明
-p显示进程的 PID
-u显示进程所属的用户名
-a显示进程的完整命令行参数
-n按 PID 数字排序(默认按进程名排序)
-h高亮当前进程及其祖先进程
-G使用 VT100 终端颜色高亮不同层级
-l不截断长命令行(默认超过屏幕宽度会截断)
-T仅显示线程(不合并相同进程名的线程)
-s显示指定进程的父进程链
# 语法:pstree [选项] [PID或用户名]

# 显示当前用户的进程树
[root@hqs-openEuler ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─3*[{NetworkManager}]
        ├─agetty
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─firewalld───{firewalld}
        ├─irqbalance───{irqbalance}
        ├─polkitd───3*[{polkitd}]
        ├─restorecond
        ├─rngd───3*[{rngd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───3*[{tuned}]

# 显示PID和用户名
[root@hqs-openEuler ~]# pstree -pu
systemd(1)─┬─NetworkManager(929)─┬─dhclient(1139)
           │                     ├─{NetworkManager}(935)
           │                     ├─{NetworkManager}(936)
           │                     └─{NetworkManager}(938)

# 查找指定进程的的子树
[root@hqs-openEuler ~]# pstree -p 951
tuned(951)─┬─{tuned}(1286)
           ├─{tuned}(1288)
           └─{tuned}(1289)

6、tracepath

tracepath 命令:用于跟踪数据包在网络中的路径。显示路径中的每一跳(hop)及对应延迟、MTU 等信息。

选项说明
-n禁用 DNS 反向解析(直接显示 IP 地址)
-b同时显示主机名和 IP 地址
-l <长度>设置初始数据包长度(单位:字节,默认基于 MTU 自动计算)
-m <跳数>设置最大跳数(默认 30)
-p <端口>指定目标端口(默认使用随机端口)
# 语法:tracepath [选项] <目标主机> [端口]
tracepath example.com
# 输出示例:
# 1?: [LOCALHOST]    0.023ms 
# 1:  192.168.1.1    5.123ms 
# 2:  10.100.0.1     12.456ms pmtu 1500

# 禁用 DNS 解析
tracepath -n 8.8.8.8

二、标准IO和管道

进程的 I/O(输入/输出)通道是操作系统提供的通信机制,允许进程与外部设备、文件、网络或其他进程交换数据。

管道符 | 是 Unix/Linux 中用于进程间通信的核心符号,允许将一个命令的输出直接传递给另一个命令的输入,形成命令流水线。

1、I/O通道类型

通道类型描述典型应用场景
标准流每个进程默认打开的 3 个文件描述符:stdin (0)、stdout (1)、stderr (2)控制台输入输出
文件 I/O通过文件描述符操作磁盘文件(如 open(), read(), write())读写本地文件
管道(Pipe)单向通信,用于父子进程或兄弟进程间数据传输(`` 符号)
命名管道(FIFO)具名管道,支持无关进程间通信(通过文件系统路径访问)跨进程持久化通信
套接字(Socket)支持网络通信(TCP/UDP)或本地进程间通信(Unix Domain Socket)客户端-服务器模型
设备文件通过 /dev 下的特殊文件与硬件交互(如 /dev/sda, /dev/ttyS0)磁盘操作、串口通信

2、I/O重定向

操作符说明示例
>重定向标准输出到文件(覆盖)ls > output.txt
>>追加标准输出到文件echo "log" >> app.log
<从文件读取标准输入sort < input.txt
2>重定向标准错误到文件grep * 2> errors.log
&>重定向标准输出和错误到同一文件command &> all_output.log
|管道:将前一个命令的输出作为下一个命令的输入ps aux | grep nginx

3、管道符

管道符(|)是命令行中用于将多个命令串联的工具,将前一个命令的标准输出作为后一个命令的标准输入。通过管道符,可以组合简单命令实现复杂操作。

  • 单向数据流:数据从左到右传递。
  • 并行执行:所有命令同时运行,通过缓冲区协调输入输出。
  • 仅传递标准输出:错误输出需手动重定向(如 2>&1)
# 列出当前目录下所有文件,并过滤出以 .bak 结尾的文件
[root@hqs-openEuler ~]# ls -l | grep ".bak"
-rw-r--r--. 1 root root    0 Feb 25 09:52 hcip.bak

# 统计当前目录文件数量
[root@hqs-openEuler ~]# ls | wc -l
5

# 多级处理
[root@hqs-openEuler ~]# ps aux | grep sshd | grep -v grep | awk '{print $2}'
951
1308
1480

# 分页显示
# 查看长文本使用分页器
[root@hqs-openEuler ~]# cat /etc/passwd | less

4、三通管道(Tee Pipe)

三通管道是命令行中实现「一输入多输出」的特殊操作,名称源于管道三通接头(TEE junction)。通过 tee 命令可将数据:

  1. 继续传递给后续管道
  2. 同时输出到文件/其他命令
# 语法:tee [选项] <文件名>

# 1.保存中间结果
# 示例:将标准输入输出重定向到文件并输出到屏幕
[root@hqs-openEuler ~]# echo "Hello World" | tee output.txt

# 将进程列表同时:
# - 输出到 processes.log
# - 传递给 grep 过滤
[root@hqs-openEuler ~]# ps aux | tee processes.log | grep "nginx"


# 2.多路处理
# 同时进行三种操作:
# - 原始数据存 all.log
# - 错误信息过滤存 error.log
# - 实时查看处理结果
[root@hqs-openEuler ~] python script.py 2>&1 | tee all.log | grep "ERROR" | tee error.log

# 3.多命令并行处理
# 使用进程替换实现三通:
# - 同时传递给 wc 和 grep
# - 最终结果排序
cat data.txt | tee >(wc -l) >(grep "key") | sort

三、shell

Shell 又称命令解释器,能识别用户输入的各种命令,并传递给操作系统。作用类似于Windows操作系统中的命令行。

在 Linux 中,Shell 既是用户交互的界面,也是控制系统的脚本语言。

Shell有多种不同的类型,其中Bash(Bourne Again Shell)是最常见的Shell之一。除此之外,还有C Shell(csh)、Korn Shell(ksh)和Z Shell(zsh)等。每种Shell都有其独特的特性和语法风格,但它们的基本功能相同:作为用户与Kernel之间的桥梁。

命令可以分为两大类:内置命令和外部命令。内置命令是Shell自身的一部分,不需要创建新的进程来执行;而外部命令则是独立的可执行文件,当执行时,Shell会根据PATH环境变量查找对应的文件并启动一个新的进程来运行该命令。无论是内置还是外部命令,它们都需要经过Shell进行解析后才能被Kernel理解和执行。

1、Bash优势

  1. 命令行编辑功能:Bash提供了强大的命令行编辑能力,允许用户使用方向键前后移动光标,并对命令进行任意的编辑操作。
  2. 历史命令功能:Bash会保存其会话中用户曾经执行过的命令,这使得用户可以方便地重复使用或修改以前输入的命令。
  3. 命令和文件名补全:Bash支持通过按下Tab键来自动补全命令或文件名。
  4. 变量和流程控制:Bash提供了一套完整的变量和流程控制语句,如if-else、for循环、while循环等
  5. I/O重定向及管道:Bash允许用户轻松地将程序的输出重定向到文件或其他程序中,从而实现数据处理的自动化。

2、bash shell 快捷键

Bash Shell 提供了丰富的快捷键,这些快捷键极大地提高了命令行操作的效率。

快捷键功能描述
Ctrl + a将光标移到命令行首
Ctrl + e将光标移到命令行尾
Ctrl + f按字符前移(右向)
Ctrl + b按字符后移(左向)
Alt + f按单词前移(右向)
Alt + b按单词后移(左向)
Ctrl + p上一个命令(历史记录中)
Ctrl + n下一个命令(历史记录中)
Ctrl + r搜索历史命令
Ctrl + l清屏
Ctrl + d删除光标所在位置的字符
Ctrl + h向前删除字符(退格键功能)
Ctrl + w删除光标前的一个单词
Ctrl + k删除从光标到行尾的所有字符
Ctrl + u删除从光标到行首的所有字符
Ctrl + t交换光标前后的两个字符
Alt + t交换光标前的两个单词
Ctrl + xx在行首和当前光标位置之间切换
Ctrl + x Ctrl + e编辑当前命令行(使用默认文本编辑器)

3、bash变量

变量类型对比

类型作用域生命周期声明方式示例
本地变量当前ShellShell进程结束默认声明var="value"
环境变量子进程可见Shell进程结束export声明export PATH=$PATH:/new
特殊参数全局随上下文变化系统预定义$0(脚本名)
位置参数函数/脚本内调用周期脚本/函数参数传入$1, $2
数组变量同普通变量同普通变量declare -aarr=(1 2 3)
关联数组同普通变量同普通变量declare -Adeclare -A dict=([k]=v)
(1)变量声明语法
语法形式作用注意事项等效写法
var=value基础赋值等号两侧不能有空格declare var=value
declare var=value显式声明变量支持类型声明(-i/-a等)-
readonly var=value创建只读变量不可修改/删除declare -r var=value
export var=value创建环境变量子进程可继承declare -x var=value
local var=value函数内声明局部变量只能在函数内使用-
(2)变量引用
引用形式功能描述防空白截断示例输出结果
$var | 基础引用 | ❌ | echo $varvalue
${var} | 标准引用 | ✅ | echo ${var}filevaluefile
"$var" | 保留空白引用 | ✅ | echo "$var"value(保留格式)
'$var' | 禁止变量扩展 | - | echo '$var'$var
$(cmd) | 命令替换 | ✅ | echo $(date)当前时间
`cmd`旧式命令替换(已不推荐)echo `date` 当前时间
(3)特殊参数
参数描述典型应用场景示例
$0 | 脚本/命令名称 | 获取当前执行脚本名 | echo "Script: $0"
$# | 参数个数 | 验证输入参数数量 | if [ $# -lt 2 ]; then
$@ | 所有位置参数(保留分隔) | 遍历所有参数 | for arg in "$@"; do
$* | 所有位置参数(合并) | 批量传递参数 | echo "$*"
$? | 上条命令退出状态 | 错误检查 | if [ $? -ne 0 ]; then
`$参数描述典型应用场景
-------------------------------------------------------------------------------------------
| 当前Shell进程ID           | 生成临时文件名             | `tmp="/tmp/$$.tmp"`      |

| $! | 最后一个后台进程PID | 管理后台进程 | kill $! |
| $- | 当前Shell选项设置 | 调试脚本 | echo "Options: $- " |

(4)数组
操作语法示例结果
声明数组declare -a arrarr=(a b c)创建索引数组
获取元素${arr[index]} | echo ${arr[0]}a
获取所有元素${arr[@]} | echo "${arr[@]}"a b c
获取元素个数${#arr[@]} | echo ${#arr[@]}3
追加元素arr+=(d)arr+=(d)(a b c d)
删除元素unset arr[index]unset arr[1](a c)
(5)关联数组
操作语法示例结果
声明关联数组declare -A dictdict=([k1]=v1 [k2]=v2)创建键值对
获取键列表${!dict[@]} | echo "${!dict[@]}"k1 k2
获取值列表${dict[@]} | echo "${dict[@]}"v1 v2
遍历操作for key in "${!dict[@]}"循环处理键值对-
(6)变量替换
语法格式功能描述示例结果
${var:-default} | 空值时使用默认值 | echo ${var:-100}var为空输出100
${var:=default} | 空时赋值默认值 | echo ${var:=100}var被设为100
${var:?error_msg} | 空时报错退出 | ${var:?未定义}终止并提示错误
${var:+replacement} | 非空时使用替代值 | echo ${var:+存在}var非空输出"存在"
${var:offset:length} | 子字符串提取 | ${str:2:3}第3字符起取3位
${#var} | 获取字符串长度 | echo ${#str}输出字符串长度
${var#pattern} | 删除最短前导匹配 | ${file#*/}去除第一个/前内容
${var##pattern} | 删除最长前导匹配 | ${file##*/}保留文件名
${var%pattern} | 删除最短后导匹配 | ${file%.*}去除扩展名
${var%%pattern} | 删除最长后导匹配 | ${file%%-*}去除最后-后内容
(7)数值运算方法对比
方法语法支持浮点数示例输出
$(( )) | echo $((1+2))echo $((3*4))12
letlet "res=5**2"let "x=10%3"x=1
exprexpr 10 + 20expr 100 / 520
bcecho "scale=2;7/3" | bcecho "1.2+3.8" | bc5.0
awkawk 'BEGIN{print 3.14*2}'awk 'BEGIN{print 1/3}'0.333333
(8)最佳实践和常见错误
✅ 推荐做法
  1. 变量引用始终加花括号:${var}
  2. 字符串比较使用双引号:[ "$var" = "test" ]
  3. 数值运算使用$(( ))sum=$((num1 + num2))
  4. 敏感信息避免硬编码:read -s passwd
❌ 常见错误
var = "value"  # 等号两侧有空格
echo $var      # 未加引号导致空白符解析异常
[ $var = "" ]  # 变量未加引号,空值时报错
export var=    # 创建空环境变量污染环境

4、通配符和转义字符

通配符是一种特殊的符号,用来匹配文件名或目录名中的某些模式。以下是几种常见的通配符:

  • *:代表任意数量的任意字符(包括零个字符)。例如,*.txt会匹配所有以.txt结尾的文件。
  • ?:代表单个任意字符。例如,file?.txt可以匹配file1.txt、file2.txt等,但不会匹配file10.txt。
  • [ ]:字符集,可以匹配方括号内列出的任何一个字符。例如,file[abc].txt可以匹配filea.txt、fileb.txt或filec.txt。
  • {}:花括号用于指定多个可能的字符串。例如,file{a,b,c}.txt将会匹配filea.txt、fileb.txt和filec.txt。

转义字符是用来告诉Shell不要解释紧跟在其后的特殊字符的特殊含义,而是将其视为普通字符。在Linux Shell中,最常用的转义字符是反斜杠\。例如,如果你想输出一个包含美元符号$的字符串,而不想让Shell尝试去解析它作为变量,你可以这样写:

echo "Price is \$5"

除了反斜杠外,还有其他几种转义方式:

  • 单引号'':单引号内的所有字符都会被视为普通字符,不进行任何变量替换或命令替换。
  • 双引号"":双引号内的字符保留其变量属性,即允许变量替换和命令替换。
  • 反引号 或者$(command):执行其中的命令并返回结果

4、环境变量

环境变量是操作系统级别的动态键值对,用于:

  1. 定义Shell及其子进程的运行环境
  2. 存储系统/用户级配置
  3. 实现进程间通信

关键操作命令

命令功能示例
export提升变量为环境变量export VAR=value
env显示当前环境变量env | grep PATH
printenv查看指定环境变量printenv USER
set显示所有变量(含非环境变量)set | less
unset删除变量unset TMPDIR
(1)常用环境变量
变量名用途描述默认值示例
PATH可执行文件搜索路径/usr/local/sbin:/usr/bin
HOME当前用户主目录路径/home/username
USER当前登录用户名ubuntu
SHELL默认Shell程序路径/bin/bash
LANG系统语言设置en_US.UTF-8
PWD当前工作目录/var/www
OLDPWD上一个工作目录/home
PS1主命令提示符格式\u@\h:\w\$
EDITOR默认文本编辑器vim
LD_LIBRARY_PATH动态链接库搜索路径/usr/local/lib
(2)环境变量永久和临时设置
  1. 永久设置:
    | 配置文件 | 作用范围 | 加载时机 |
    |----------|----------|---------|
    | ~/.bashrc | 当前用户(非登录Shell) | 每次打开新终端 |
    | ~/.bash_profile | 当前用户(登录Shell) | 登录时加载 |
    | ~/.profile | 当前用户(兼容性配置) | 登录Shell且无.bash_profile |
    | /etc/environment | 系统全局 | 所有用户登录时 |
    | /etc/profile | 系统全局 | 所有用户登录时 |

/etc/environment vs /etc/profile 深度对比:

特性/etc/environment/etc/profile
作用层级系统级 PAM 环境变量全局 Shell 配置脚本
适用Shell所有用户进程Bash 及其他兼容Shell
变量类型仅简单键值对可包含脚本逻辑
语法要求export 关键字需显式使用 export
变量扩展不支持 ${VAR} 扩展支持变量扩展
加载时机登录时最早加载登录Shell初始化时加载
典型应用基础路径配置复杂环境初始化

而且 /etc/environment 是 纯键值对,不支持变量扩展,所以 /etc/environment 适合于基础路径配置,而 /etc/profile 则适合于复杂环境初始化。

/etc/profile 可包含脚本逻辑,支持变量扩展,适合于复杂环境初始化。

  1. 临时设置:
# 临时环境变量(不影响当前Shell)
DEBUG=1 python script.py
(3)常用环境变量操作
# 1.查看环境变量
echo $PATH
printenv PATH

# 2.设置环境变量
export VAR=value
export PATH=$PATH:/new/path

# 3.删除环境变量
unset VAR

# 4.环境切换--多版本管理
# 环境切换脚本
activate_dev() {
    export API_ENDPOINT="https://dev.api.com"
    export DB_NAME="dev_db"
}
activate_prod() {
    export API_ENDPOINT="https://api.com" 
    export DB_NAME="prod_db"
}

# 5.动态路径设置
# 避免重复添加PATH
[[ ":$PATH:" != *":/new/path:"* ]] && PATH="/new/path:$PATH"

5、Shell脚本编程

Shell脚本结构:

#!/bin/bash            # 脚本头,指定脚本使用的解释器
# 注释内容              # 注释,用于解释脚本功能
name="John"            # 变量声明(等号两侧不能有空格)
echo "Hello, $name!"   # 使用变量
readonly age=30        # 创建只读变量
unset name             # 删除变量

脚本声明:告诉系统使用哪种shell解释器执行脚本。

注释信息:对脚本解释,对命令进行解释说明。

运行脚本:

# 赋予执行权限
chmod +x script.sh
# 执行脚本
./script.sh


# 或者直接使用解释器执行(不需要赋予执行权限)
bash script.sh
sh script.sh

四、文本处理工具

工具作用描述示例输出结果
sed流编辑器,用于文本替换和处理sed 's/old/new/g'替换所有匹配项
awk处理结构化文本数据(按列)awk -F: '{print $1}'提取第一列数据
grep文本搜索工具,支持正则表达式grep "pattern" file匹配行
cut文本分割工具,支持字段分割cut -d: -f1 file提取第一列数据
sort文本排序工具sort file按行排序
uniq去重相邻重复行sort file.txt | uniq去重排序后的重复行(需先排序)
tr字符替换工具tr 'a-z' 'A-Z'大小写转换
wc统计工具wc -l file统计行数
head显示文件前几行head -n 5 file显示前5行
tail显示文件后几行tail -n 5 file显示后5行
split文件分割工具split -l 100 file分割每100行
paste文件合并工具paste file1 file2合并文件
join文件连接工具join file1 file2连接文件
cat打印文件内容cat file打印文件内容
cat查看/合并文件内容cat file1.txt file2.txt合并 file1 和 file2 的内容并显示
more分页查看文件(仅向下翻页)more large_file.log逐页显示 large_file.log 的内容
less分页查看文件(支持上下翻页)less large_file.log可上下滚动浏览 large_file.log

补充说明:

  • sed: 支持正则替换(s/old/new/)、行删除(d)、插入(i)等,适合批量修改文本
  • awk: 支持条件判断、循环、变量,适合处理表格数据(如 CSV)和复杂计算
  • grep: 快速过滤行,常用参数:-i(忽略大小写)、-v(反向匹配)、-E(扩展正则)
  • less: 比 more 更强大,支持回退、搜索(/pattern)、跳转行号(:50)等操作
  • head: 默认显示前 10 行,-n 指定行数
  • tail: 常用 -f 实时追踪日志(如 tail -f app.log)

1、grep命令

grep命令用于在文件中搜索指定的字符串或正则表达式,并输出匹配的行。以下是一些常用的grep命令选项:

命令格式功能描述示例命令输出结果示例
grep "pattern" file在文件中搜索指定模式grep "error" app.log匹配包含"error"的行
grep -i "pattern" file忽略大小写grep -i "error" app.log匹配包含"error"的行(不区分大小写)
grep -v "pattern" file反向匹配grep -v "error" app.log打印不匹配的行
grep -n "pattern" file显示匹配行行号grep -n "fail" app.log输出格式:行号:行内容
grep -r "pattern" dir递归搜索目录中的文件grep -r "user" /var/log输出目录下所有文件中匹配的行
grep -c "pattern" file统计匹配行数grep -c "error" app.log输出匹配行数,如:3
grep -A n "pattern" 文件显示匹配行及后n行grep -A 2 "error" app.log匹配行及后两行
grep -B n "pattern" 文件显示匹配行及前n行grep -B 2 "error" app.log匹配行及前两行
grep -C n "pattern" 文件显示匹配行及前后n行grep -C 2 "error" app.log匹配行及前后两行
(1)正则表达式支持
正则类型语法示例作用描述示例命令匹配示例(输入行)
基础正则(BRE)grep "a.b" file匹配任意单个字符(.)grep "h.t" file.txt匹配 "hat"、"hot" 等
扩展正则(ERE)grep -E "a|b" file逻辑或(|)grep -E "err|warn" log.txt匹配含 "err" 或 "warn" 的行
行首/行尾锚定^start 或 `end正则类型语法示例作用描述
-------------------------------------------------------------------------------
基础正则(BRE)grep "a.b" file匹配任意单个字符(.)grep "h.t" file.txt匹配 "hat"、"hot" 等
扩展正则(ERE)grep -E "a|b" file逻辑或(|)grep -E "err|warn" log.txt匹配含 "err" 或 "warn" 的行
匹配行首或行尾grep "^2023" log.txt匹配以 "2023" 开头的行
字符集合[0-9][a-zA-Z]匹配指定范围内的字符grep "[A-Z]" file.txt匹配包含大写字母的行
量词a{2,4}匹配重复次数grep -E "x{3}" file.txt匹配 "xxx"
(2)高级用法
功能描述命令格式示例命令输出结果示例
同时匹配多个模式grep -e "pattern1" -e "pattern2" 文件grep -e "error" -e "warn" log.txt输出含 "error" 或 "warn" 的行
仅输出匹配的文本部分grep -o "pattern" 文件grep -o "[0-9]\+" file.txt输出纯数字部分(如 123)
静默模式(仅返回状态码)grep -q "pattern" 文件grep -q "ready" status.txt && echo "Yes"无输出,状态码决定后续操作
排除二进制文件grep -I "pattern" 文件grep -I "text" *仅搜索文本文件,忽略二进制文件
(3)与其他工具结合
组合工具示例命令作用描述
findfind . -name "*.log" -exec grep "error" {} \;在指定文件中搜索模式
awkgrep "GET" access.log | awk '{print $1}'先过滤行,再提取列数据
sortgrep "user" log.txt | sort | uniq -c搜索后排序并统计重复次数
xargsecho "file1 file2" | xargs grep "text"将参数传递给 grep 执行

2、cut 命令

功能描述命令格式示例命令输出结果示例(假设输入内容)
按列切割文本(默认制表符分隔)cut -f 列号 文件cut -f2 data.txt输出第二列内容(默认制表符分隔)
指定分隔符切割文本cut -d 分隔符 -f 列号 文件cut -d',' -f3 data.csv输出逗号分隔文件的第三列
按字符位置切割文本cut -c 起始-结束 文件cut -c1-5 file.txt输出每行的前5个字符
按字节位置切割文本cut -b 起始-结束 文件cut -b2-4 file.txt输出每行的第2到第4个字节
忽略不含分隔符的行cut -s -d 分隔符 -f 列号 文件cut -s -d':' -f1 /etc/passwd输出所有含":"行的第一列(如用户名)

3、wc 命令

wc命令用于统计文件中的行数、字数和字符数。

功能描述命令格式示例命令输出结果示例
统计文件行数、单词数、字节数wc 文件wc data.txt3 12 66 data.txt(行数 单词数 字节数)
仅统计行数wc -l 文件wc -l log.txt100 log.txt
仅统计单词数wc -w 文件wc -w text.txt500 text.txt
仅统计字节数wc -c 文件wc -c data.bin2048 data.bin
仅统计字符数(UTF-8等)wc -m 文件wc -m utf8.txt1500 utf8.txt
统计最长行的长度(字符)wc -L 文件wc -L code.py80 code.py

4、sort 命令

sort命令用于对文本进行排序。

选项作用描述示例命令输出说明
-n按数值大小排序(非字典序)sort -n data.txt正确排序 10 > 2
-r逆序排序(降序)sort -nr values.txt数值从大到小排列
-k指定排序字段(列号)sort -k3,3 -t',' file.csv按第三列排序(逗号分隔)
-t指定字段分隔符sort -t':' -k1 /etc/passwd以冒号分隔,按用户名排序
-u去重(保留唯一行)sort -u log.txt输出所有不重复的行
-o输出到文件(覆盖原文件)sort file.txt -o sorted.txt排序结果保存到 sorted.txt
-f忽略大小写sort -f mixed.txtAppleapple 视为相同
-m合并已排序文件sort -m file1 file2合并多个已排序文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

休耕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值