Linux常用命令参考
当做个人字典使用, 会进行不定期更新!
tar
打包与压缩命令。
常用参数:
- -c (–create) 建立新的备份文件
- -x (–extract) 从备份文件中还原文件
- -z (–gzip或–ungzip) 通过gzip指令处理备份文件
- -v (–verbose) 输出执行过程中的详细信息
- -f (–file) 指定备份文件
1 | 将/home文件夹下所有内容打包压缩成home.tar.gz文件 |
getops
该命令可以用来解析命令行参数。
以下表示获取命令行参数 -d -t的值
1 | while getopts 'd:t:' OPT; do |
其中getopt和getopt的区别以及getopt的详细用法示例见:https://blog.sigoden.com/how-to-use-getopt-to-build-cli/
awk
工作流程: 读入有\n换行符分割的一条记录,然后将该记录按指定的域分隔符划分域(默认的域分隔符是空格符)
语法
awk 参数 ‘BEGIN{ commands } pattern { commands} END{commands}’
参数: -F 指定字段定界符,默认是空格,可以是正则表达式, 注意分隔符直接跟在后面, 不需要任何符号
pattern: 模式,可以是正则表达式,用来匹配每一行,使用//包裹, 如 /^tcp/表示匹配每一行开头以tcp开始
BEGIN内指定参数:
- FS 同-F; FS=”” 表示以空行切分记录
特殊参数:
- $0 所有域, $1 第一个域, $2 第二个域,以此类推
- $NF 表示一行中的最后一个字段
流程控制语法:
if(condition){} else if(condition){} else{}
循环语法:
for (i=0; i<3;i++){}
指定分隔符
有三种方法,下面分别是指定分隔符为逗号时的写法:
- 使用 -F 指定,注意其后不需要任何符号, 语法:
awk -F, file
- 使用FS指定,加上-v参数, 语法:
awk -v FS="," file
- 在BEGIN内部指定, 语法:
awk 'BEGIN {FS=","}' file
字符串函数
length(string) 获取字符串长度(字符数)
拼接字符串时不需要使用任何修饰符,直接即可
printf() 格式化输出,默认不输出换行符.
%s 字符; %d 整数,小数取整直接去除尾数; %.2f 小数,2表示小数点保留两位,最后一位四舍五入
printf(“%.2f\n”, 1.3374) 输出1.34split(string,array [,r]) 字符串拆分,返回拆分后数组大小string:待拆分的字符串,array:拆分后结果保存的数组,r:分隔符,可选,默认FS值;拆分后的数组下标从1开始,
for(k in arr){print arr[k]}
substr(s,i [,n]) 字符串截取
s:待截取字符串;i:索引位置,从1开始;n:要截取的长度.默认截取到字符尾。字符串查找:index(s,t), match(s,r [,a])
返回第一次匹配成功的索引位置,从1开始,失败返回0
s: 待查找的字符串;t:目标子串
r: 查询的正则表达式, a 结果二维数组字符串替换
- sub(r,s[,t]) 替换首次匹配到的子串,返回成功替换子串的数目,r 用于匹配的正则表达式,s 要替换的字符串值,t 目标字符串n,默认$0
- gsub(r,s[,t]) 用法同sub,替换所有匹配到的子串
- gensub(r,s,h[,t]) h: “g”表示全局替换,或是用数字指定子串出现的位置
时间函数
- systime() 返回精确到秒的当前时间戳
- mktime(date) 获取指定时间的时间戳,date格式: “YYYY MM DD HH MM SS”
- strftime() 转化时间字符串
注意
中间命令的编写一定要用单引号包裹,不能用双引号
当字符串中含有单引号,转义写法如下:
1
2此为打印单引号,比较字符串的单引号同理
awk '{print "'\''"}'awk中比较在一个范围之内不能用连写方式,如 2<x<7是错误的,应写成 x>2 && x<7
awk 使用外部变量,需要在Action之后定义变量,如下所示使用外部test变量:
1
2test=hhhhfudfhdhf
awk '{print test}' test="$test" filename
示例
1 | 假设一个目录下的文件按照时间进行命名, 如202204011628.tar.gz,现在要取出每个文件名的前8位(也就是年月日), 操作如下 |
grep
在命令之前加上LANG=C之后可大幅提高检索速度, 如 LANG=C grep -ia -B 1 Exception filename
参数说明:
- -i 忽略大小写
- -a 显示文本(当使用通配符搜索文件内容时,有时只显示匹配的文件名而不显示匹配的内容,用此参数即可)
- -e 指定多个匹配样式
- -c 计算找到的符合行的次数
- -n 输出匹配行的行号
- -v 反转查找
- -w 只显示全字符合的列
- -A n 打印匹配行和匹配行之后的n行
- -B n 打印匹配行和匹配行之前的n行
- -C n 打印匹配行和匹配行之前,之后的n行,共2n+1
- -h 在显示匹配行的那一列之前,不显示该列的文件名称
- -o 只输出文件中匹配到的部分
示例:
1 | 过滤时间段内的数据, 例如[15:10:00,15:20:00) |
zgrep
可以搜索gz压缩文件内的内容。用法同grep
sed
语法
sed options script file
默认不对原文件进行修改,处理的是原文件的拷贝
options参数:
- -n 取消默认的输出,仅显示处理后的结果
- -e 以选项中指定的script处理
- -i 直接修改原文件,慎用
script 参数:
- d 删除
- p 打印
- s 替换
注意
- 若在sed命令中使用外部的变量,此时匹配规则必须使用双引号
示例
1 | 打印第三行 |
echo
-n 省略结尾的换行符,直接在文本后面输入
read
read value 读取用户输入
df
显示磁盘信息
- -a 所有
- -h 可读性较好显示
tail & head
从文件开头或文件结尾查看文件
1 | 显示文件最后n行 |
zip
压缩文件
- -q 不显示指令执行过程
- -r 递归处理
示例
1 | 将 /home/db2/ddl目录下所有文件和文件夹压缩至当前目录的test.zip文件 |
typeset
设置变量
ps
显示系统进程信息(linux中线程是伪线程,用轻量级进程来实现的,所以查看线程信息也是用此命令)
参数
- -ef 显示系统运行的所有进程信息
返回信息
- PID :该进程的进程ID号
- %CPU:该进程使用掉的 CPU 资源百分比
- %MEM:该进程所占用的物理内存百分比
- VSZ :该进程使用掉的虚拟内存量 (单位KB)
- RSS :该进程占用的固定的内存量 (单位KB)
- TTY :该进程表示在哪个终端机上面运作,其取值可能有如下几种
- ? 与终端机无关
- tty1-tty6 本机上面的登入者程序
- pts/0 由网络连接进主机的程序
- STAT:该程序目前的状态,主要的状态有
- R :该程序目前正在运作,或者是可被运作
- S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒
- T :该程序目前正在侦测或者是停止了
- Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
- START:该进程被触发启动的时间
- TIME :该进程实际使用 CPU 运作的时间
crontab
定时任务
参数
- -l 查看现有cron表中的内容
- -e 编辑
cron文件的语法如下:
1 | f1 f2 f3 f4 f5 program |
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
示例
1 | 每一分钟执行一次 |
创建定时任务步骤
crontab -e
其他常用命令:
1 | 当有service命令 |
tee
将命令运行结果同时输出到终端和文件
ls |tee log.log
du
显示文件或目录大小
- -c 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
- -h 按友好模式显示
- -s 只显示目录总大小
- -l 重复计算硬件连接的文件
- –max-depth 超过指定层数的目录后,予以忽略
1 | 查看当前目录总大小 |
scp
Linux服务器之间传输文件
1 | 传输aa.txt文件到206服务器的home目录下 |
sort
排序. 排序时以行为单位
- -r 下降排序,默认升序
- -n 按照数值大小排序
- -k 指定排序所依据的列数,从1开始
- -t 指定排序时的列分隔符
- -u 输出行中去除重复行
示例:
1 | 按照文件大小从大到小进行排序 |
uniq
忽略文件中的重复行,常与sort一起使用
- -c 在每列旁边显示该行重复出现的次数
- -d 仅显示重复出现的行
- -u 仅显示唯一出现的行
注意: uniq的去重是将当前行与上一行进行对比, 所以为了得到整体去重, 需要先进行排序,在执行去重
top
实时显示系统进程情况.
以下命令为进入该命令之后执行:
- M 根据内存大小进行排序
- P 根据CPU使用百分比进行排序
- T 根据时间/累计时间排序
输出参数说明:
- 第一行相当于uptime命令输出
- 第一列时间表示当前系统时间
- 第二列 up 6 days 58min, 表示系统已经运行时间
- 第三列 2 users, 表示表示当前有2个用户在登陆
- 第四列 load average三个值分别表示系统1分钟,5分钟,15分钟平均负载
- 第二行 tasks信息表示系统运行的整体进程数量和状态信息
- zombie 僵尸进程数.
- 第三行 %Cpu(s)表示的是总体CPU使用情况
- us user 表示用户态的CPU时间比例. 当us很高时,证明CPU时间主要消耗在用户代码,需要优化用户代码
- sy system 表示内核态的CPU时间比例. 说明CPU时间都消耗在内核,要么是频繁的系统调用,要么是频繁的CPU切换(进程切换/线程切换)
- wa iowait 表示处于IO等待的CPU时间比例. 很高时,说明有进程在进程频繁的IO操作,有可能是磁盘IO,也有可能是网络IO
- ni nice 表示运行低优先级进程的CPU时间比例
- id idle 表示空闲CPU时间比例
- hi hard interrupt 表示处理硬中断的CPU时间比例
- si soft interrupt 表示处理软中断的CPU时间比例
- st steal 表示当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例
- 第4行. 内存使用情况, 单位KiB
- totol 表示总内存
- free 表示没使用过的内容
- used是已经使用的内存
- buff表示用于读写磁盘缓存的内存
- cache表示用于读写文件缓存的内存
- avail表示可用的应用内存
- 第5行, swap使用情况, 单位KiB, Swap原理是把一块磁盘空间或者一个本地文件当成内存来使用. 这三个值都为0表示系统关闭了swap功能,虚拟机一般都关闭swap功能
- Swap total表示能用的swap总量
- swap free表示剩余
- used表示已经使用的
- 之后为各个进程具体的信息.各字段说明如下
- PID 进程ID
- USER 进程所有者的用户名,例如root
- VIRT 虚拟内存, virtual memory usage。单位KB. 表示当前进程能够访问到的最大内存大小
- RES 物理内存(不包括共享内存), resident memory usage,单位KB。表示当前有多少物理内存被这个进程消费。如果申请 100m 的内存,实际使用 10m,那么RES = 10m,VIRT=100M。 一般情况下看此值大小即可
- SHR 进程使用的共享内存. 单位KB
- CPU 进程使用的CPU占比
- MEM 进程使用的内存占比
- TIME 进程启动后到现在所用的全部CPU时间
- COMMAND 进程的启动命令(默认只显示二进制,top -c能够显示命令行和启动参数)
ls
ls -l 的输出内容格式如下:
-rw-r--r-- 1 root root 25934 Jun 26 10:35 X120
参数:
- -h 友好方式显示大小
- -a 所有
- -l 详细格式列表
- -t 用文件和目录的更改时间排序
- -r 反向排序
添加-l参数时详细输出参数说明:
- 第一列
- 第一个, 文件类型
- d 目录
- -文件,
- c 字符型文件
- b 块设备
- l 链接文件
- 接下来三个为一组,用来表示权限信息,其中 r 读, w 写, x 执行. 具体如下:
- 2,3,4:文件所有者权限
- 5,6,7:同用户组的权限
- 8,9,10:非本用户组的权限
- 第一个, 文件类型
- 第二列:有多少文件名连接到此节点
- 第三列:所有者账号
- 第四列:文件所属的用户组
- 第五列:文件大小,默认B
- 第六列:最近修改日期
示例:
1 | 仅显示目录名 |
stat
查看文件属性,包括文件创建时间
- Access 访问时间,每读一次这个文件内容,就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间
- Modify 修改时间,对文件内容进行写操作,就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。
- Change 状态改变时间,通过chmod命令更改一次文件属性,这个时间就会更新。
split
分割大文件为多个小文件
参数:
- -b value 按value大小分割文件,即分割后每个文件大小为value(单位为byte)
- -l value 按行数分割文件,即分割后每个文件行数为value
- -d 使用数字作为文件名后缀
curl
不带任何参数, 默认发送get请求
参数:
-d 发送post请求的数据体
1
curl -d 'login=emma&password=123' -X POST https://google.com/login
-H 设置请求头
1
curl -H 'Content-Type: application/json' https://google.com/login
-o 将服务器回应保存成文件, 等同于wget
-s 不输出错误和进度信息
-X 指定请求的方法
1
curl -X POST https://www.example.com
xargs
语法: xargs [-options] [command]
作用是将标准输入转为命令行参数
管道符|将左侧的标准输出转化为标准输入, 供右边命令使用, 但是这需要右边命令支持标准输入作为参数, 如grep是支持的, 下面命令是可以的.
1 | ps -ef|grep java |
但是很多命令不支持标准输入作为参数, 如echo, 下面这条命令没有任何输出
1 | echo "sdsd"|echo |
下面这条命令输出 sdsd
1 | echo "sdsd"|xargs echo |
参数:
- -d 指定分隔符,默认将换行符和空格作为分隔符,如制表符为”\t”
示例:
1 | 保留当前目录下所有txt格式的文件, 删除所有其他类型的文件 |
lsof
查看某个端口占用情况.一般查看端口冲突时可使用该软件.
lsof -i:port
nohup
后台执行命令,即使退出此终端, 仍然会执行。
示例:
1 | nohup输出的信息不输出到文件 |
htop
相比于top显示的信息更加详细
注意几点:
- htop默认会把一个进程里的线程当做一个进程来显示出来,若要关闭线程,只显示进程,按F2,再选择 Display options,再选择 Hide userland threads
nload
查看各个网络设备的当前网络速率,也会展示流经设备的总流量 。
也可指定网卡, 如查看网卡eth0的流量 nload etho
注意:页面上显示的速率单位MBit/s, 是M比特每秒, 换算成正常的MB/s(M字节每秒)需要除以8
date
1 | 格式化成 2020-01-12 23:23:34 |
查看系统发型版本
1 | cat /etc/*release* |
iostat
用于查看系统设备的IO负载情况, 同时也会显示出CPU处理器的使用情况。
数据来源是 /proc/diskstats
语法:iostat [参数] 设备名
常用参数:
- -d 显示设备利用率
- -c 显示CPU使用情况
- -h 使用NFS网络文件系统来输出报告
- -N 显示LVM逻辑卷管理器设备信息
- -p 显示块设备和分区的状态
- -t 显示报告产生时的时间
- -x 显示更为详细的信息, 一般情况下都需要带上这个参数,方便分析
- -k 以 KB 为单位显示
- -m 以 M 为单位显示
输出关键参数说明:
avg-cpu行表示总体cpu的使用情况, 对于多核,这里指的是平均值:
- %user CPU在用户态执行进程的时间百分比
- %nice CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比
- %system CPU处在内核态执行进程的时间百分比
- %iowait CPU用于等待I/O操作占用CPU总时间的百分比, 若该值过高,表示硬盘可能存在I/O瓶颈
- %idle CPU空闲时间百分比, 若该值高但系统响应慢,可能是cpu等待分配内存,此时应该加大内存;若该值持续低于1,则系统的cpu处理能力相对较低,应该加大cpu
Device行表示磁盘设备的情况:
- tps 每秒IO数, 表示 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和
- kB_read/s 每秒从磁盘读取数据大小,单位KB/s
- kB_wrtn/s 每秒写入磁盘的数据的大小,单位KB/s
- kB_read 从磁盘读出的数据总数,单位KB
- kB_wrtn 写入磁盘的的数据总数,单位KB
- r/s 每秒读操作的次数
- rkB/s 同kB_read/s
- %util 代表磁盘繁忙程度。越大越繁忙。一般地,如果该参数是100%表示设备已经接近满负荷运行(如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
- await 平均每次IO请求的等待时间(包括等待时间和处理时间,单位为毫秒), 这里可以理解为响应时间,一般的系统应该低于5ms,若超过10ms则比较大。一般情况下await与svctm差值(真正的等待时间)越大,队列的时间越长,系统可能存在问题
- svctm 平均每次IO请求的处理时间(单位为毫秒)
示例:
1 | 每隔2秒报告一次所有硬盘的使用情况 |
netstat
查看网络情况。
显示项Recv-Q, Send-Q表示网络接受队列,发送队列.一般情况下为0, 可接受短暂的非0状态。
示例
1 | 统计各个Tcp状态的连接有多少个 |
tcpdump
抓包工具。
常用参数:
- -i 指定网卡, 如果设置为any则表示抓取所有网卡
- -w 将结果保存为wireshark可识别的文件, 可直接用wireshark进行分析
当有多个过滤条件时, 进行连接的操作符有:
- and 且
- or 或
- not 非
过滤条件:
- host 主机IP, 包含出和入
- port 端口号
- src ip包的源地址
- dst ip包的目标地址
示例:
1 | 抓取所有网卡流量,并且过滤主机为192.168.1.23,端口为8123,将结果保存为dd.cap文件 |