一、打包、压缩
#打包文件,文件名为命名+当前系统时间年月日时分秒
tar -czvf 归档文件名_$(date +%Y%m%d%h%m%s) 源文件或目录
#解压文件到目录/dir
tar xf 归档文件 -C /dir
tar选项说明
-c 创建.tar 格式的包文件
·-x 解开.tar 格式的包文件
·-v 输出详细信息
·-f 表示使用归档文件(后面需紧跟归档文件名)
·-p 打包时保留原始文件及目录的权限(不建议使用)
·-t 列表查看包内的文件
·-C 解包时指定释放的目标目录
·-z 调用 gzip 程序进行压缩或解压
·-j 调用 bzip2 程序进行压缩或解压
·-P 打包时保留文件及目录的绝对路径(不建议使用)
#压缩文件
gzip filename 、 bzip2 filename
#解压文件
gunzip filename 、 bunzip2 filename
#选项为 1-9 的数字控制压缩级别
gzip -9 filename
#查看gzip压缩的文件
zcat filename
二、过滤
很多时候会有一些过滤需求,比如说过滤某个时间的日志
grep “8:2[5-9]:00 " file #过滤8点25 - 8点29
grep “8:{25,26,27}”
sed -n ‘/20160824 08:25:00/,/20160824 08:30:00/p’ # 过滤25分到30分的日志
三、合并
例如:web服务器一个小时截取一个日志,你要查几个服务器10几个小时的内容,这样可以先合并在做其他操作
cat ~/***.*..{1,2,3} /2019_01_11_[2-13] > /filename
gzip 压缩后的日志可以用zcat
四、匹配
两个不同的文件有一列是相同的,把两个拥有相同列的文件,匹配成一个文件
举个栗子 一个文件 A 1 2 3 一个文件是 B C D A E ,合并成一行 123 ABCDE
经常有这个需求,写SHELL脚本太浪费时间了,数量大的话要好长时间才能匹配出来,如果使用awk脚本很快就能完成匹配。
awk脚本的栗子:
NR多个文件加起来的行数 ,FNR单个文件的行数
BEGIN {FS=”|"} # | 分隔符
NR<=FNR { # NR <= FNR时 ,说明正在读取第一个文件
a[$1]=$0; # 类似于建立一个字典 a {A=A123,…}
}
NR>FNR { # NR > FNR ,说明不在第一个文件里了,因为例子只是匹配 两个文件,所以说明读到了第二个文件
if( a[$4]) # 如果字典a里 有第二个文件的第4个字段,(说明文件1里的第一个字段,和第二个文件里的第4个字段相同)
{
split(a[$4],b,"|");print($1"|"$4"|"$19"|"$22"|“b[1]”|“b[2]”|"b[3]);
} # 把列表a里关键字是文件2里第四个字段匹配的值取出来(实际上是当文件1的第一个字段和文件2的第四个字段相同时,把文件1的整行拿出来),第一个文件里的整行以“|”为分割符新建一个列表b;打印文件二的第一列,第4列。。。和列表b的第一列。。。
}
保存成1个脚本,假设起名为test.awk
awk -f test.awk filename1 filename2
有的时候还能遇见这种语法 substr($5,1,10) 表示 截取第5列的第1个字符到第10个字符
五、很多时候都会查系统状态
df -hT 查看硬盘状态没什么好说的
top %wa < 30% io等待所占用的CPU时间比
ps -aux
STAT: 该行程的状态,linux的进程有5种状态:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
注: 其它状态还包括W(无驻留页), <(高优先级进程)
N 低优先级
L 有些页被锁进内存
s 包含子进程
- 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
查询目录下那些文件大小
du -h --max-depath=1 ./ |sort -hr