Linux常用工具(LTS)

本文详细介绍了Linux系统中的常用工具,如netstat用于网络状态监控,ps用于进程管理,awk进行文本处理,grep进行文本搜索,date和echo处理时间和输出,top监控系统性能,sysdig提供高级监控,sed用于文本流编辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux常用工具

netstat

netstat 是一个用于显示网络连接状态、路由表、网络接口统计信息等的命令行工具。

  • -a 实现连接类型
  • -c 持续显示netstat信息
  • -g 显示多播组成员身份信息
  • -i 显示网络接口统计信息
  • -l 显示监听状态的嵌套字(listen)
  • -n 使用数字形式显示IP和端口号
  • -p 显示每个嵌套子关联的PID和进程名
  • -r 显示内核路由表
  • -s 显示网络统计信息
  • -t 显示TCP连接
  • -u 显示UDP连接
  • -x 显示UNIX域嵌套字
  • -4 显示IPv4连接
  • -6 显示IPv6连接

示例

#显示当前正在占用的端口和IP
netstat -tunlp

ps

查看系统运行的进程信息

  • -e-A: 显示所有进程
  • -f: 显示完整格式的进程信息,包括父进程ID(PPID)、启动时间等
  • -l: 显示长格式的进程信息,包括进程的优先级、Nice值等
  • -u--user: 显示指定用户的进程
  • -p--pid: 显示指定PID的进程
  • -C--command: 显示指定命令名的进程
  • -o--format: 自定义输出格式,可以选择显示的字段
  • -a: 显示所有进程,包括未关联终端的进程
  • -x: 显示没有控制终端的进程

示例:

#显示所有进程与它们的详细信息
ps -Af
#显示PID为123456的进程
ps -p 123456
#按PID降序排列进程,并显示PID、用户和命令
ps -eo pid,user,cmd --sort=-pid

awk

文本处理工具

基本语法: awk [options] 'pattern {action}' file

模式(pattern)可以是:

  • 正则表达式: /regular expression/
  • 关系表达式: $1 == "foo"
  • 组合表达式: $1 == "foo" && $2 == "bar"
  • 行范围: NR == 1, NR == 10NR % 2 == 0

动作(action)可以是:

  • 打印: print, printf
  • 变量赋值: var = value
  • 条件语句: if (condition) {actions} else {actions}
  • 循环语句: for (init; condition; increment) {actions}

内置变量:

  • $0: 整个文本内容
  • $1, $2, …: 第1、2、…个字段
  • NF: 当前行的字段数
  • NR: 当前行的行号
  • FS: 输入字段分隔符,默认为空格或制表符
  • OFS: 输出字段分隔符,默认为空格
  • RS: 输入记录分隔符,默认为换行符
  • ORS: 输出记录分隔符,默认为换行符

示例文本文件file1.txt:

1 Alice 25 New York 75000
2 Bob 32 Chicago 82000
3 Carol 27 Los Angeles 69000
4 David 41 Houston 95000
5 Emma 36 Philadelphia 88000
6 Frank 29 Phoenix 71000
7 Grace 33 San Antonio 79000
8 Henry 38 San Diego 86000
9 Ivy 30 Dallas 76000
10 Jack 43 San Jose 98000
  • 打印整个文本
awk '{print $0}' file1.txt
  • 打印第一列、第二列
awk '{print $1,$2}' file1.txt
  • 打印第五列与第六页,当列数不存在时显示
[root@bigdata fishpie]# awk '{print $1,$5}' file1.txt 
1 York
2 82000
3 Angeles
4 95000
5 88000
6 71000
7 Antonio
8 Diego
9 76000
10 Jose
[root@bigdata fishpie]# awk '{print $1,$6}' file1.txt 
1 75000
2 
3 69000
4 
5 
6 
7 79000
8 86000
9 
10 98000
  • 打印所有包含New York的行
awk '/New York/' file1.txt
  • 打印第三列等于 25 的行
awk '$3 == 25' file1.txt

或是

awk '$3 == "25"' file1.txt

(bash shell的流程控制语法很严格,但是bash命令的语法不是那么严格UwU)

  • 打印行号在 5-15 之间的行
awk 'NR >= 5 && NR <= 15' file1.txt

如果行数不存在的话就显示存在的行数
在这里插入图片描述

  • 统计文件file1.txt第一列值出现的次数
awk '{count[$1]++} END {for (key in count) print key, count[key]}' file

在这里插入图片描述

(可使用管道符 | 与sort命令来实现正序输出结果)

awk '{count[$1]++} END {for (key in count) print key,count[key] | "sort -n"}' file1.txt

在这里插入图片描述


为了更详细地演示awk的 NF、NR、FS、OFS、RS、ORS的用法,我们这里创建一个新的 file2.txt 文件

John,Doe,25,New York
Alice,Smith,30,Chicago
Bob,Johnson,27,Los Angeles
  • 显示第三行的字段数(以 , 分割)

NF、NR、FS 的使用
注:-v FS=‘,’ 相当于 -F ',' ,但还是推荐写为 -v FS

awk -F ',' 'NR == 3 {print NF}' file2.txt
[root@bigdata fishpie]# cat file2.txt 
John,Doe,25,New York
Alice,Smith,30,Chicago
Bob,Johnson,27,Los Angeles
[root@bigdata fishpie]# awk -F ',' 'NR == 3 {print NF}' file2.txt 
4
  • 输出 file2.txt 第一列、第二列,设置输出结果以 | 做分割

OPS的使用

awk -v FS=',' -v OFS='|' '{print $1,$2}' file2.txt

在这里插入图片描述

OFS设置的分隔符可以有空格
在这里插入图片描述


为了更详细地演示awk的RS、ORS的用法,我们这里创建一个新的 file3.txt 文件

John,Doe,25,New York|Alice,Smith,30,Chicago|Bob,Johnson,27,Los Angeles
  • 设置记录的分割规则为 | ,且输出每条记录的第一第二列

RS(输入记录分隔符)
RS用法,设置记录被分成条的规则,默认是换行符\n ,
就是说一般awk会将每行数据看作一条记录,如果是一整行长数据数据就需要手动设置记录的分割规则,不然awk默认会看作一条记录

这对于文本处理非常非常有用

awk -v RS='|' -v FS=',' '{print $1,$2}' file3.txt

在这里插入图片描述


  • 将上面的输出结果以 --- 分割

ORS(输入记录分隔符)

ORS用法,规定每条记录之间的分割方式,默认是换行符 \n

awk -v RS='|' -v FS=',' -v ORS=' ---UwU--- ' '{print $1,$2}' file3.txt

在这里插入图片描述

UwU

(为什么命令提示符被移到行尾了)


vim

文本编辑工具

模式切换:

  • i : 进入插入模式,在当前光标位置开始编辑
  • Esc : 退出插入模式,返回普通模式
  • : : 进入命令行模式,可以执行各种Vim命令

普通模式下光标移动:

  • 0: 移动到行首
  • $ : 移动到行尾
  • w: 移到到下一个单词的开头
  • b: 移动到上一个单词的开头
  • G: 移动到文件的最后一行
  • gg: 移动到文件的第一行
  • Ctrl+f: 向下翻页
  • Ctrl+b: 向上翻页

普通模式下进行文本编辑:

  • x: 删除当前光标所在字符
  • dd: 删除当前行
  • dw: 删除当前单词
  • d$: 删除从当前光标位置到行尾的内容
  • yy: 复制当前行
  • p: 粘贴之前复制或删除的内容
  • u: 撤销上一次操作
  • Ctrl+r: 重做上一次撤销的操作
  • o: 在当前行下方插入新行
  • O: 在当前行上方插入新行
  • >: 将选中的文本向右缩进
  • <: 将选中的文本向左缩进
  • :set number: 显示行号
  • :set nonumber: 隐藏行号

普通模式下搜索与替换:

  • /pattern: 搜索指定的模式(pattern)
  • n: 移动到下一个匹配项
  • N: 移动到上一个匹配项
  • :s/old/new: 将当前行中的第一个old替换为new
  • :s/old/new/g: 将当前行中的所有old替换为new
  • :%s/old/new/g: 将文件中的所有old替换为new

普通模式下保存与退出

  • :w: 保存当前文件
  • :q: 退出文件
  • :q!: 不保存强制退出
  • :wqZZ: 保存并退出文件
  • wq!: 强制保存退出(例如修改sudoers文件)

普通模式下查看Vim更多信息

  • :help: 查阅Vim帮助文档

find

根据名称找文件和目录

  • type d 类型为目录
    f 类型为文件
  • name 文件或目录名称
  • iname 忽略大小写的文件或目录名称
  • size 文件或目录的大小
  • mtime 文件修改时间范围(天)
  • mmin 文件修改时间范围(分钟)
  • exec 可执行命令
  • print 打印找到的文件的路径名
#查找当前目录中的所有目录和文件
find .

#只查找 /home/apps 目录下
find /home/apps/ -type d	#目录
find /home/apps/ -type f	#文件

#查找当前目录下名为yum.log文件位置(支持 通配符* 查找)
find . -name "yum.log"
find . -iname "yum.log" #忽略大小写

#查找当前目录下文件大小小于 1M 的文件和目录
find . -size -1M

#查找当前目录中 7 天内有改动的文件
find . -type f -mtime -7
find . -type f -mtime +7	#7天外有改动的文件
#查找并删除 7 天外有改动的文件
find . -type f -mtime +7 -exec rm -rf {} \;

#查找当前目录下所有者为Tom的文件
find . -user Tom

#查找当前目录下权限为644的文件
find . -perm 644

grep

搜索匹配文本模式,支持正则表达式
常用于文本处理和分析,在文件或输入中查找和过滤符合条件的内容

常与管道符 | 配合使用

非常非常重要

  • -i: 忽略大小写进行匹配
  • -v: 反向匹配,输出不匹配的行
  • -n: 显示匹配行的行号
  • -c: 统计匹配行的数量
  • -l: 只输出包含匹配内容的文件名
  • -L: 只输出不包含匹配内容的文件名
  • -w: 匹配整个单词,而不是字符串的一部分
  • -x: 匹配整行,而不是行中的一部分
  • -E--extended-regexp: 使用扩展正则表达式进行匹配
  • -F--fixed-strings: 将模式视为固定字符串,而不是正则表达式
  • -r--recursive: 递归搜索目录及其子目录
  • -h--no-filename: 输出匹配行时不显示文件名
  • -H--with-filename: 输出匹配行时显示文件名
  • -o--only-matching: 只输出匹配的部分,而不是整行
  • -q--quiet--silent: 不输出任何结果,只返回状态码
  • -A NUM--after-context=NUM: 输出匹配行及其后面的NUM行
  • -B NUM--before-context=NUM: 输出匹配行及其前面的NUM行
  • -C NUM--context=NUM: 输出匹配行及其前后各NUM行

示例文件file1.txt:

1 Alice 25 New York 75000
2 Bob 32 Chicago 82000
3 Carol 27 Los Angeles 69000
4 David 41 Houston 95000
5 Emma 36 Philadelphia 88000
6 Frank 29 Phoenix 71000
7 Grace 33 San Antonio 79000
8 Henry 38 San Diego 86000
9 Ivy 30 Dallas 76000
10 Jack 43 San Jose 98000

  • 过滤文件中包含 25 的行
[root@bigdata workspace]# grep 25 file1.txt 
1 Alice 25 New York 75000
  • 过滤/home/fishpie/workspace/目录中包含25
grep -r 25 /home/fishpie/workspace/

在这里插入图片描述

  • 反向匹配,匹配 file1.txt 不包括 25 的行
grep -v 25 file1.txt 

在这里插入图片描述

  • 反向匹配,匹配 file1.txt 不包括 25 的行,同时显示行号
grep -n -v 25 file1.txt

在这里插入图片描述

  • 反向匹配,匹配 file1.txt 不包括 25 的行,同时显示行号,并将结果保存到 result.txt 文件
grep -n -v 25 file1.txt > result.txt

在这里插入图片描述

  • 匹配包含 25 和 32 的行
[root@bigdata workspace]# grep -E "25|32" file1.txt 
1 Alice 25 New York 75000
2 Bob 32 Chicago 82000
  • 显示正在监听的 80 端口
netstat -tunlp | grep :80

date

用于显示和设置系统日期和时间

像curl、wget那种涉及到 SSL 证书的命令,一定要保证日期的准确性(日期不准确这俩命令很可能不能用)

导致时间不一致的原因可能可运行时快照的创建有关

示例:

  • 显示当前日期和时间
date
  • 设置日期显示格式
date +"%Y-%m-%d %H:%M:%S"

%Y: 年份(四位数)
%m: 月份(两位数,01-12)
%d: 日期(两位数,01-31)
%H: 小时(两位数,00-23)
%M: 分钟(两位数,00-59)
%S: 秒(两位数,00-59)
  • 设置系统日期和时间
sudo date -s "2023-05-30 12:34:56"
  • 显示指定日期的时间
date -d "2023-05-30"
  • 计算时间差
date -d "2023-05-30 12:34:56" +%s
  • 显示日期的其他信息
date +"%A, %B %d, %Y"  # 显示星期、月份、日期和年份
date +"%j"  # 显示一年中的第几天
date +"%U"  # 显示一年中的第几周(以周日为一周的开始)
date +"%W"  # 显示一年中的第几周(以周一为一周的开始)

通过ntdate工具一键矫正时间

先下载 ntpdate 工具

sudo yum install ntpdate

直接矫正时间

sudo ntpdate pool.ntp.org

再次检查时间

date

ps:一定要注意时间的一致性,有些软件安装脚本里面有curl和wget命令,日期对不上真的坑的一批


echo

用于在终端或脚本中输出文本内容

  • -n: 不输出结尾换行符(还没想好它的应用场景)
  • -e: 启用 \ 的转义解释(字符串中的 \n 会看做换行,\t 看作制表符号-四个空格)
  • -E: 禁用用 \ 的转义解释(默认)

示例:

输出一些字符串

echo -e 'Hello World!\nApple\tBanana'

在这里插入图片描述

  • -n 的使用
    在这里插入图片描述

  • 将内容保存至 file1.txt 文件(会清空文件原内容

echo 'This is a new line!!' > file1.txt

在这里插入图片描述

  • 将内容追加到文件file1.txt
echo 'THIS IS A NEW LINE!!' >> file1.txt

在这里插入图片描述

  • 输出颜色和格式化文本(一般用不到)
echo -e "\033[31mRed text\033[0m"	#红色
echo -e "\033[1mBold text\033[0m"	#加粗

在这里插入图片描述

  • echo也常与变量使用
#格式化显示当前日期
echo "现在的日期是: $(date +%Y-%m-%d)"
echo "现在的时间是: $(date +%H:%M:%S)"

在这里插入图片描述


top

用于实时监控系统性能

命令模式下参数

  • -b: 以批处理模式运行top,可以将输出重定向到文件或其他命令
  • -c: 显示完整的命令行而不是只显示命令名
  • -d <秒>: 设置刷新间隔,以秒为单位
  • -n <次数>: 设置top命令的刷新次数,达到指定次数后退出
  • -p <进程ID>: 只监控指定的进程ID
  • -u <用户名>: 只监控指定用户的进程
  • -U <用户ID>: 只监控指定用户ID的进程
  • -o <字段>: 按指定字段对进程进行排序
  • -i: 忽略闲置和僵死进程
  • -H: 显示线程而不是进程

交互模式下控制

  • h键显示帮助信息
  • q键退出top命令
  • m键切换内存使用信息的显示方式
  • P键按CPU使用率对进程进行排序
  • M键按内存使用量对进程进行排序

示例

显示系统的实时状态

top

在这里插入图片描述

  • 设置刷新间隔为 2 秒,刷新 10 次后退出
top -d 2 -n 10
  • 只监控 PID 为1234 的进程
top -p 1234
  • 只监视用户 fishpie 的进程
top -u username
  • 按 CPU 使用率从高到底排序
top -o %CPU
  • 显示线程而不是进程
top -H

sysdig

很强大的系统监控工具,简洁高效

添加 sysdig 官方仓库

sudo tee /etc/yum.repos.d/draios.repo <<-'EOF'
[draios]
name=Draios Inc. - $basearch
baseurl=https://download.sysdig.com/stable/rpm/$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.sysdig.com/DRAIOS-GPG-KEY.public
EOF

更新 yum 包

yum update

安装 sysdig 0.36.0 版本,GitHub下载地址:https://github.com/draios/sysdig/releases

sudo yum install -y sysdig-0.36.0

常用命令:

  • 查看当前 CPU 使用最高的进程
sysdig -c topprocs_cpu
  • 查看当前网络使用最高的进程
sysdig -c topprocs_net
  • 查看当前磁盘使用最高的进程
sysdig -c topprocs_file
  • 显示所有网络连接,与直接使用netstat类似
sysdig -c netstat
  • 列出当前系统的所有进程
sysdig -c ps
  • 查看 /etc 目录与其中内容的打开情况
sysdig fd.name contains /etc

sed

流编辑器,常用于文本处理和转化

可以对文本文件进行逐行处理,修改、过滤、替换

语法

sed [options] 'command' input_file

option部分

  • -n: 抑制自动打印模式空间,只打印匹配的行
  • -e: 允许在命令行中指定多个sed命令
  • -f: 从文件中读取sed命令
  • -i: 直接修改输入文件,而不是将结果输出到标准输出
  • -r: 使用扩展正则表达式

command部分

  • p: 打印匹配的行
  • d: 删除匹配的行
  • s/pattern/replacement/: 替换匹配的文本
  • g: 全局替换,默认只替换每行的第一个匹配项
  • i: 在匹配行之前插入文本
  • a: 在匹配行之后追加文本
  • c: 用新文本替换匹配的行
  • y/set1/set2/: 将set1中的字符转换为set2中对应位置的字符
  • q: 退出sed

示例

有文件file2.txt

John,Doe,25,New York
Alice,Smith,30,Chicago
Bob,Johnson,27,Los Angeles
  • 打印文件的第 3 行
sed -n '3p' file.txt
  • 删除文件第 5 行
sed '5d' file.txt
  • 将 file2.txt 文件中的 New York 替换为 Washington
sed 's/New York/Washington/g' file2.txt

在这里插入图片描述

  • 在 file2.txt 第二行后追加一行文本
sed '2a New line' file2.txt

在这里插入图片描述

  • 删除 file2.txt 文件中包含 25 的行
sed '/25/d' file2.txt

systemctl

服务管理器,用于管理系统服务,可以自定义服务

  • 列出所有服务(包括运行中的和未运行的服务):
systemctl list-units --type=service
  • 仅列出运行中的服务:
systemctl list-units --type=service --state=running
  • 查看特定服务的状态:
systemctl status <服务名称>
#示例:
systemctl status NetworkManager

在这里插入图片描述

  • 设置服务开机自启动
systemctl enable <服务名称>

自定义自己需要的后台程序为一个服务,再将这个服务设置为开机自启动,相对于直接使用 nohup 命令使服务长时间后台运行效果要好

  • 关闭服务的开机自启动
systemctl disable <服务名称>
  • 自定义服务

需要管理员权限

例如创建一个名为 blog-backend.service 的自定义服务

  1. /etc/systemd/system/ 目录下创建 blog-backend.service 文件
vim /etc/systemd/system/blog-backend.service

blog-backend.service 文件内容

[Unit]
Description=这里是一个做成服务的后台程序

[Service]
ExecStart=/usr/bin/java -jar /home/fishpie/blog/backedn.jar
User=fishpie
Restart=always
StandardOutput=file:/home/fishpie/bloglog/logfile.log
StandardError=file:/home/fishpie/blog/log/logfile.log

[Install]
WantedBy=multi-user.target

[Unit] 中的 Description 是服务描述部分

[Service]部分
ExecStart ——— 指定启动服务所执行的命令
User ——— 运行这个服务的用户身份(即使使用 sudo 运行这个服务,该服务的运行身份依然是fishpie )
Restart ——— 服务的重启策略,always 表示无论服务是什么原因停止,都将自动重启服务
StandardOutput ———– 指定标准输出的文件
StandardError ——– 指定标准输出的错误文件

[Install]部分
WantedBy ———– 指定服务的目标单元,multi-user.target 表示当系统运行在多用户模式时,这个服务将被启用

此时可以启动该 blog-backend.service 服务

sudo systemctl start blog-backend.service

也可以查看服务状态与设置开机自启动

相对于 nohup 命令可靠性更高,因为在进程崩溃时会自动重启(服务设置文件中配置),日志收集也更加方便,便于管理


curl

用于请求 Web 服务器,命令行版 postman

语法:

curl [options] [URL]

参数:

请求方法与数据传输相关:

  • -X / --request :指定请求方法(默认为 GET 请求)
  • -d / --data :发送 POST 数据
  • --json :发送 JSON 数据
  • -H / --header :设置请求标头
  • -i / --include 显示请求标头
  • -u / --user :基本认证
  • -b / --cookie :发送 cookie
# 向网站 https://api.example.com/login 发送 POST 请求,并在请求头指定数据类型为 JSON 数据,参数为 {"username":"admin","password":"123456"}
方式一:
curl -X POST -H "Content-Type": application/json \
-d '{"username":"admin","password":"123456"}' \
https://api.example.com/login

方式二:
curl -X POST -json '{"username":"admin","password":"123456"}' \
https://api.example.com/login

# 发送 cookie 数据(session是存放在服务器端的特殊cookie)
curl -b "session=123" https://example.com

输出控制:

  • -o / --output :将服务器回应输出写入文件,可以当成 wget 命令来用
  • -O / --remote-name :将服务器回应输出写入文件,使用 URL 结尾部分作为文件名
# 将 http://fishpie.top 网页内容保存为 fishpie.html 文件
curl -o fishpie.html http://fishpie.top
# 将 https://example.com/file.zip 保存为 file.zip 文件
# 即下载 https://example.com/file.zip 文件
curl -O https://example.com/file.zip

调试相关:

  • -v / --verbose :显示详细信息
  • -I / --head :仅显示响应头

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代理相关:

  • -x [代理网站] [目标网站] :通过代理网站访问目标网站

重定向相关:

  • -L :跟随重定向,让 HTTP 请求跟随服务器的重定向(默认不进行重定向)

显示 curl 的版本信息:

curl -V

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值