文章目录
- 一. Linux 进程
- 1. 通过进程名查找进程号
- 1.1 ps aux & ps -ef:diff
- 1.2 ps aux & ps -aux:什么?它们不一样?
- 1.3 grep & awk:取出进程号、取出进程号并 Kill
- 2. 通过进程号查看进程信息:/proc/pid
- 3. 通过进程号查找进程名
- 4. 监控进程占用情况
- 二、Linux 文件
- 1. 监控日志文件:动态跟踪
- 2. 替换文件 字符 || Word
写在前面:一下截图执行结果均基于 阿里云 CentOS7 系统。
一. Linux 进程
1. 通过进程名查找进程号
通过进程名查找进程号当然非 Linux 进程管理命令 ps 啦!!!当然也可以 pidof+具体进程名。
1.1 ps aux & ps -ef:diff
- ps aux | grep process_name (以 BSD 语法显示进程信息)
- ps -ef | grep process_name (以标准语法查看系统进程信息,System V)
1.2 ps aux & ps -aux:什么?它们不一样?
在大多数现代的Linux系统上,ps -aux 和 ps aux 被视为等效的命令,因为 -a 选项已经默认包含了-x 选项的功能,但是还是建议使用 ps aux
不会吧?不会吧?到现在还不知道它们不一样?
实际上,通过 man ps 查看 ps 命令手册,能够看到这么一句话:
Note that “ps -aux” is distinct from “ps aux”. The POSIX and UNIX standards require that “ps -aux” print all processes owned by a user named “x”, as well as printing all processes that would be selected by the -a option. If the user named “x” does not exist, this ps may interpret the command as “ps aux” instead and print a warning. This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.
稍稍翻译一下:
请注意,ps -aux
与 ps aux
是不同的。POSIX 和 UNIX 标准要求 ps -aux
打印所有由用户名 x
拥有的进程,并打印所有通过 -a
选项选择的进程。如果名为 x
的用户不存在,则此 ps
可能会将命令解释为 ps aux
并打印警告。此行为旨在帮助过渡旧的脚本和习惯。它是脆弱的,可能会发生变化,因此不应依赖它。
POSIX:Portable Operating System Interface of UNIX
官方都这么说了?它两不一样。那我们用 Docker 实际体验一下:
在一些较老的 Unix 系统上,如 Solaris 和 AIX,ps -aux 和 ps aux 是不同的命令,具有不同的语法和输出格式,docker 似乎体验不到
-
Redhat 系列 之 CentOS7 (包管理方式 rpm/yum):它两执行结果一样
-
CentOS6:ps -aux 打印警告信息
-
RRedhat 系列 之 RHEL (Red Hat Enterprise Linux):它两执行结果一样
-
Debian 系列之 Debian (社区类 Linux 的典范,是迄今为止最遵循 GNU 规范的 Linux 系统,包管理方式为 apt-get & dpkg):它两执行结果一样
-
Debian 系列之 Ubuntu 22.04 (基于 Debian 的 unstable 版本加强而来):它两执行结果一样
-
Alpine:它两执行结果一样
1.3 grep & awk:取出进程号、取出进程号并 Kill
ps aux | grep mysql | grep -v grep | awk '{print $2}'
kill -9 $(ps aux | grep mysql | grep -v grep | awk '{print $2}')
2. 通过进程号查看进程信息:/proc/pid
通过进程号查找进程信息进入 /proc/pid 目录即可
-
ll /proc/pid
-
cwd (link):进程运行目录
-
exe (link):执行程序的绝对路径
-
cmdline:程序运行时输入的命令行命令
-
fd:打开的文件描述符目录,文件描述符链接到了打开的文件,cat + 文件描述符编号可以查看文件
-
fdinfo:打开的文件描述符
-
-
cat /proc/pid/status:内存使用情况
3. 通过进程号查找进程名
通过进程名查找进程号当然也可以用 Linux 进程管理命令 ps 啦!!!
-
ps -p pid
- comm:COMMAND
- comm=:COMMAND 等于
-
ps aux | grep pid
:可以过滤,若 pid 存在的话 (固定的两个:grep 进程及 pid 所属进程),输出结果可能多于两个,不适合于脚本使用
4. 监控进程占用情况
-
top:-d 选项可以修改刷新时间
-
watch & ps:CPU 占用 top 15,五秒刷新一次,
watch -n 5 'ps aux --sort -pcpu | head -15'
二、Linux 文件
1. 监控日志文件:动态跟踪
- Shell 脚本模拟日志文件 Append:date_log.sh
while true
do
cur_time=`date +"%Y-%m-%d,%H:%M:%S"`
echo "[INFO]" $cur_time >> date_log.log
sleep 1s
done
- 后台启动 date_log.sh:sh date_log.sh &
- tail
-
tail -n5 file
ortail -5 file
:打印文件最后 5 行
-
tail -f -n5 file:
-f
——--follow[={name|descriptor}]
(伴随着文件增长输出追加数据,缺省为 descriptor 文件描述符)
-
tail -F -n5 file:
-F
——--follow=name --retry
(–retrykeep trying to open a file if it is inaccessible
如果文件不可访问,不断重试打开文件)- 如果文件名称改掉之后,还想继续跟踪原文件名称对应的尾部内容,就得使用 -F 选项而不是 -f 选项 (即,要想跟踪会更名的日志的话,用 tail -F 而不是 tail -f,如 采用 log4j 日志时,每隔 1 个小时生成一个新的日志文件,当前的日志输出在 LOG4J.LOG 中,当一个小时过去后,log4j 会将 LOG4J.LOG 改名成 LOG4J.yyyy-mm-dd-HH 的形式)
- 手动改名,
tail -F -n file
的输出如下
2. 替换文件 字符 || Word
SED:参考 https://blog.csdn.net/Olivia_Vang/article/details/104091358 & man
- sed 命令
-i[SUFFIX], --in-place[=SUFFIX]
:edit files in place (makes backup if SUFFIX supplied),在某位置编辑文件,即会更改原文件- sed s 命令
s/regexp/replacement/
:Attempt to match regexp against the pattern space,即查找替换命令,“(作用范围)s/替换目标/替换值/替换目标选项”- 作用范围:单个数字;数字,数字;数字,+数字(某数字行及下数几行);数字,$(某数字行到最后一行)
- 替换目标选项:g —— 作用范围内行的所有查找目标,而不仅是第一个查找目标
- sed y 命令:略
- pet.txt
dog,dog
cat,cat
dog,cat
cat,dog
dog,cat,cat
cat,dog,dog
dog,cat,cat,dog,cat
monkey
3. sed 's/cat/dog/' pet.txt
:作用于 pet.txt 的每一行并替换每行出现的第一个 cat
4. sed 's/cat/dog/g' pet.txt
:作用于 pet.txt 的每一行并替换每行所有的 cat
5. sed '1,5s/cat/dog/g' pet.txt
:作用于 pet.txt 的 1 到 5 行并替换每行所有的 cat
6. sed '5,$s/cat/dog/g' pet.txt
:作用于 pet.txt 的 5 到最后一行并替换每行所有的 cat
7. sed '4,+2s/cat/dog/g' pet.txt
:作用于 pet.txt 的 指定行 4 及其后 2 行并替换每行所有的 cat
8. sed '7s/.*/dog/g' pet.txt
:作用于第 7 行,整行替换 (.*
) 为 dog,可以不带 g
sed '8s/./dog/g' pet.txt
:作用于第 8 行,整行字符替换 (.
) 为 dog,不带 g 替换第一个字符