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
2
3
4
5
LSB Version:    n/a
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal

(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
2
3
uname -r

5.4.0-65-generic

文件管理

查看

  • 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
2
3
4
             total       used       free     shared    buffers     cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094

磁盘使用情况

(1)统计各个磁盘

1
df -h

查看磁盘设备的使用情况,例如

1
2
3
4
5
6
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1

(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
2
3
4
5
6
7
8
9
-  FS(Field Separator):输入字段分隔符, 默认为空白字符
- OFS(Out of Field Separator):输出字段分隔符, 默认为空白字符
- RS(Record Separator):输入记录分隔符(输入换行符), 指定输入时的换行符
- ORS(Output Record Separate):输出记录分隔符(输出换行符),输出时用指定符号代替换行符
- NF(Number for Field):当前行的字段的个数(即当前行被分割成了几列)
- NR(Number of Record):行号,当前处理的文本行的行号。
- FNR:各文件分别计数的行号
- ARGC:命令行参数的个数
- ARGV:数组,保存的是命令行所给定的各参数

使用:打印首行

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 #实时查看文件尾部内容
作者

Desirer

发布于

2023-12-22

更新于

2024-11-13

许可协议