Linux命令
学习思路:
大类相关:系统资源查看、文件操作
命令基本知识,比如选项参数、输出情况
应用场景:针对特定需求写命令
你应该知道的linux技巧 https://coolshell.cn/articles/8883.html
杂项
sudo !! # 执行上条权限不够的命令
查看操作系统版本
(1)lsb_release
1 | lsb_release -a |
这个命令通过读取/etc/lsb-release
文件(如果存在的话),来显示Linux Standard Base (LSB) 信息,包括发行版的ID、版本号等。不是所有的Linux发行版都支持LSB,但许多常见的发行版(如Ubuntu、Debian、Fedora等)都支持。
1 | LSB Version: n/a |
(2)cat
1 | cat /etc/*release |
这个命令通过查看/etc/
目录下以release
结尾的文件,来获取操作系统的版本信息。这种方法更加通用,因为几乎所有Linux发行版都会在/etc/
目录下放置一个或多个包含版本信息的文件。
查看内核版本
1 | uname -a |
详细的内核信息(包括内核名称、主机名、内核版本、处理器类型等)
1 | Linux myhostname 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux |
利用-r选项可只显示版本信息
1 | uname -r |
文件管理
查看
- ls
- head、tail
- less、more、cat
ls只能查看文件的大小(当有目录时,显示的是目录的大小,而不是目录含有的文件大小);正确方法为使用du递归统计一个目录大小
管理
- chmod、chown
文件解压缩
压缩命令:tar -zcvf 压缩文件名.tar.gz 被压缩文件名
解压命令:tar -zxvf 压缩文件名.tar.gz -C /指定路径
1 | lz4 -d file.lz4 -o output_file |
系统资源管理
进程情况PS
(1)查询指定名称的进程pid,cpu 占用率和 memory 使用率
1 | ps aux | grep example |
(2)杀死指定pid进程
1 | kill process_pid |
(3)查看进程号为1172的相关线程
1 | ps -T -p 1172 |
注:
a
: 显示终端上的所有进程,包括其他用户的进程。u
: 以用户为中心的格式显示进程信息,通常包含用户ID、CPU和内存使用情况等信息。x
: 显示没有控制终端的进程。p
: 显示进程的PID(进程ID)-T
选项告诉ps
命令显示与指定进程相关的线程。
cpu使用情况top
(1)top与ps区别
top命令可以实时地展示系统当前的进程状态,它会不断更新,提供系统进程的动态信息。而ps命令则是系统在过去执行的进程的静态快照,它不能实时更新。
此外,top命令还具有交互性,允许用户输入控制命令,比如在top命令的模式下输入n5,就显示此时的5个最活跃的进程,top会持续运行直到用户按下“q”,退出top。
(2)top显示特定进程的线程情况
1 | top -Hp 16735 |
-H
:显示线程(而非仅显示进程)。这意味着top
会显示每个进程的线程信息,而不仅仅是进程本身。-p
:后面跟随一个或多个 PID(进程ID),用来指定top
命令只显示这些特定 PID 的信息。
内存使用情况
1 | free -h |
查看内存使用情况,例如
1 | total used free shared buffers cached |
磁盘使用情况
(1)统计各个磁盘
1 | df -h |
查看磁盘设备的使用情况,例如
1 | [root@LinServ-1 ~]# df -h |
(2)统计当前目录下,每个目录占用的大小
1 | du -sh ./* |
网络管理
查看端口占用
1 | lsof -i:8080 |
文本操作
grep查找,sed编辑,awk对数据分析并生成报告。
grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本。
grep
Grep能使用正则表达式搜索文本,并把匹配的行打印出来,全称是 Global Regular Expression Print,全局正则表达式打印。grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。
命令的基本格式:
1 | grep [option] pattern file |
常见参数:
-C
(context)
-B
(before)
-A
(after)选项
实例:
1、系统报警显示了时间,但是日志文件太大无法直接 cat 查看。(查询含有特定文本的文件,并拿到这些文本所在的行)
1 | grep -n '2019-10-24 00:01:11' *.log |
2、在文件夹 dir 中递归查找所有文件中匹配正则表达式 “pattern” 的行,并打印匹配行所在的文件名和行号:
1 | grep -r -n pattern dir/ |
awk
AWK是文本处理命令( pattern-directed scanning and processing language),名称取自三位创始人首字符。awk的大致逻辑是逐行读入文件,以空格为默认分隔符将每行切片,再对切开的部分再进行各种分析处理。
基本用法:
1 | awk '[pattern] {action}' {filenames} # 行匹配语句 awk '' 只能用单引号 |
pattern
是要匹配的模式,通常是基于正则表达式;action
是当模式匹配时要执行的动作;filename
是您要处理的文件名。
过滤
(1) 例子
提取第1列与第4列
1 | awk '{print $1, $4}' netstat.txt |
亦可格式化输出,格式化语义与C语言的printf语义一致
1 | awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.tx |
提取第3列为0且第6列为LISTEN的行的第1列信息
1 | awk '$3==0 && $6=="LISTEN"{print $1} ' netstat.txt |
取出文件中的第一万至两万行
1 | awk 'NR>=10000 && NR<=20000' <filename> |
(2)基本知识
比较运算符:!=, >, <, >=, <=, ==
内建变量
名称 | 作用 |
---|---|
$0 | 当前记录(这个变量中存放着整个行的内容) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格或Tab |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。 |
FNR | 当前记录数,与NR不同的是,这个值会是各个文件自己的行号 |
RS | 输入的记录分隔符, 默认为换行符 |
OFS | 输出字段分隔符, 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
FILENAME | 当前输入文件的名字 |
1 | - FS(Field Separator):输入字段分隔符, 默认为空白字符 |
使用:打印首行
1 | awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%s %s\n",NR,$4}' netstat.txt |
指定分割符,利用短选项-F
1 | awk -F: '{print $1,$3,$6}' /etc/passwd |
统计脚本
awk其实是一门脚本语言,有自己的语法结构,变量定义、条件循环等流程控制。
参考:https://www.bookstack.cn/books/junmajinlong-awk
(1)BEGIN 与 END
BEGIN
:当awk
开始处理任何输入行之前,BEGIN
模式下的代码块会执行一次。
END
:当awk
处理完所有输入行后,END
模式被触发。
BEGIN 和 END都放在要执行的代码块之前。
(2)自定义变量与流程控制
自定义变量,统计文件中含有字符串 abc 的总行数
1 | awk '/abc/ {count++} END {print count}' filename.txt |
自定义变量,统计目录下所有的C文件,CPP文件和H文件的文件大小总和。
1 | ls -l *.cpp *.c *.h | awk '{sum+=$5} END {print sum}' |
自定义数组,统计各个connection状态的个数
1 | awk 'NR!=1 {a[$6]++;} END { for (i in a) print i ", " a[i]; }' netstat.txt |
自定义数组,统计每个用户的进程的占了多少内存
1 | ps aux | awk 'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}' |
自定义数组,统计一个文件(IP TIME) 的每个IP出现次数,并按次数排序
1 | awk '{ip[$1]++} END {for (i in ip) print ip[i], i}' access.log | sort -k2 |
sed
sed全称(stream editor)流式编辑器,主要逻辑也是逐行匹配,编辑。玩sed主要还得熟练正则表达式。
sed最主要的场景就是匹配并替换。
more命令
- 回车 向下一行
- 空格 向下一页
- b 向上一页(back)
tail命令
1 | tail -f #实时查看文件尾部内容 |