该文记录了自己常用的unix的命令
awk的使用
语法
用例
计算文件中某列的总和
|
|
使用awk对字符串进行拆分
|
|
在awk中打印单引号
|
|
AWK中使用判断
在AWK中是可以使用if判断语句的,if(判断条件) 执行语句; else if (判断条件) 执行语句; else 执行语句。
下面的例子,判断文件夹中的所有文件,如果文件的大小为0,则打印该文件的文件名。
逻辑操作
在使用AWK中使用if进行条件判断是,可以使用逻辑操作符进行组合判断,支持的逻辑操作符有:&&、||。
uniq命令
uniq用于对文件中的行进行去重,还可以对重复行求和,但是要求去重的时候重复的行必须是相邻的。
语法
uniq [-icu]
-i 忽略大小写
-c 对重复行进行计数
-u 只显示唯一的行
-d 只打印重复行的信息
-f 忽略N个字段
sort命令
sort用于对文件中的行进行排序,可以对多个文件合并排序。需要注意sort命令的数据结果无法进行重定向到文件,如果要输出到文件需要使用-o参数。
语法
sort [-fMnrtuk] [file or stdin]
-f 忽略大小写
-b 忽略前面的空格部分
-M 以月份的名字来排序
-n 以数字进行排序
-r 倒序排列
-u 去重
-t 分隔符,默认为tab键
-k 以哪一列进行排序
用例
按照文件中的第二列进行倒序排列
|
|
sort和uniq经常配合使用来计算一些东西,例如:
cat a.log | sort | uniq -i -c | sort -n -r -o output.log
cut命令
cut命令可以从一个文本文件或文本流中提取文本列
语法
cut -d 分隔符 -f fields || cut -c 字符区间
-d 指定分隔字符,配合-f 使用
-f 用于指定-d分隔符分割后的提取列
-c 以字符方式提取的区间,支持的格式有a,b a-b a-等
wc命令
wc用于统计文件中数据的信息
语法
wc [-lwm]
-l 列出行
-m 列出多少字符
-w 列出多少字
用例
计算文件的行数
|
|
grep命令
grep命令用于对内容进行过滤
语法
grep [-EiLC]
-E 用于指定过滤字段或的关系 grep -E ‘abc|123’
-i 不区分大小写
-l 列出匹配的文件名
-L 列出不匹配的文件名
-w 只匹配单词,而不是包含关系
-v 过滤不符合条件的数据
-C 显示行信息
用法
过滤文件中包含指定字符的数据
|
|
xargs命令
xargs用于将数据以指定的数量列出来,之所以用到这个命令是因为有很多命令不支持管道来传递参数
语法
-a file 从文件中读入作为stdin
-e flag 有的时候可能会是-E,flag必须是一个以空格分隔的标示,当xargs分析到含有flag标示的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示在执行的时候一次用的argument的个数,默认是用所有。
-t 表示先先打印命令,然后执行。
-s num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数。
-P 修改最大的进程数,主要是配合-s使用。
用法
批量文件解压
|
|
chmod
chmod用来修改文件或文件夹的访问权限。文件权限分为三个种角色:拥有者、组 和 其他。
语法
chmod [-cfvR] [–help] [–version] mode file…
主要参数说明
[ugoa…][[+-=][rwxX]…][,…]
u表示该文件的拥有者,g表示组,o表示其他人,a表示前面三种;同时为不同角色设置权限,使用逗号”,”分隔。
+表示增加权限,-表示取消权限,=表示设定权限
r表示可读,w表示可写,x表示可执行,X表示啥,没用过。(数字表示:r=4, w=2, x=1)
其他参数说明
[-cfvR] [–help] [–version]
-c表示如果文件权限确实已经更改,才显示其更改动作
-f表示若该文件权限无法被更改也不要显示错误信息
-v表示显示权限变更的详细信息
-R表示对目前目录下的所有文件与子目录进行相同的权限变更
–help表示显示辅助说明
–version表示显示版本
用法
将文件设置为所有人可读
|
|
将文件设置为拥有者和同组人可写入,其他人只可读
|
|
进程查找
在实际开发中常常需要查找服务请求的源程序,而查找请求的唯一线索也就是主机以及端口号。因此查找的思路就是,根据端口和主机ip,到目标主机上查找使用端口的进程号(PID)。
然后根据PID,使用ps命令进行查找
如此便找到了执行的进程,但是这里又有一个问题,那就是虽然知道了进程执行的命令,但是并不知道进程程序所在的位置。要解决这个问题提,可以cd到/proc/进程号 目录下,然后从列出的信息中找到这些信息
各个列表的信息:
cwd 连接的是进程运行的目录
exe 连接的是执行程序的绝对路径
cmdline 就是程序运行时输入的命令行命令
environ 记录了程序运行时的环境变量
fd 目录下时程序打开或使用的文件的符号连接
crontab
unix中crontab用来做一些调度任务
命令语法
crontab [-u user] file 或 crontab [-u user] {-l | -r | -e}
-e 执行文本编辑器来设定时程表,内置的文本编辑器是VI。
-r 删除目前的时程表。
-l 列出目前的时程表。
时程格式
f1 f2 f3 f4 f5 program
| | | | |
| | | | +—– 星期中星期几 (0 - 7) (星期天 为0)
| | | +———- 月份 (1 - 12)
| | +————— 一个月中的第几天 (1 - 31)
| +——————– 小时 (0 - 23)
+————————- 分钟 (0 - 59)
f1 表示分钟,f2表示小时,f3表示月份中的日,f4表示月份,f5表示星期中的天,program表示执行程序。
表示每个时间段都执行。
a-b表示从a到b时间段内都执行。 /n 表示每个n时间段执行。
a,b,c,d表示第a\b\c\d个时间段执行。·
一些具体的例子
1) 每个小时的0分钟执行一次
0 /bin/ls
2) 十二月份,每天早上6-12点,每隔3小时执行一次
0 6-12/3 12 /bin/ls
3)周一到周五每天下午4点执行一次
0 16 1-5 /bin/ls
4) 每两个小时执行一次
0 /2 /bin/ls
5) 每月1号和5号执行一次
0 0 1,5 /bin/ls
使用的注意点
1、脚本的调用最好使用命令的绝对路径。
2、shell脚本最好加上 #!/bin/sh ./ect/profile .~/.bash_profile这样的语句
3、多条命令可以使用分号“;”分隔。
paste命令
paste命令会把每个文件以列对列方式,一列列合并。
语法
paste [-s][ -d <间隔字符> ][–help][–version] file1 file2 …
参数说明
-d <间隔字符> 用指定的间隔字符取代tab字符。
-s 串型进行而非平行处理。
–help 帮助。
–version 版本信息。
file1 file2 要合并的文件列表。
用例
paste file1 file2
|
|
tr 命令
tr命令用于转换或删除文件中的字符。从标准输入读取,经过转换后输出到标准输出。
语法
tr [-cdst] [–help] [–version] [第一个字符集] [第二个字符集]
参数说明
-c 反转参数,符合第一字符集的不处理,不符合的处理。
-d 删除指令。
-t 削减SET1指定的范围,使之与SET2设定长度相同。
-s 缩减连续重复的字符成指定的单个字符。
–help 帮助信息
–version 版本信息
字符集说明
\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
\ 反斜杠
\a Ctrl-G 铃声
\b Ctrl-H 退格符
\f Ctrl-L 走行换页
\n Ctrl-J 新行
\r Ctrl-M 回车
\t Ctrl-I tab键
\v Ctrl-X 水平制表符
CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
[CHAR] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
[CHARREPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字
[=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)
用例
|
|
vimdiff
vimdiff以文本编辑的方式对比两个文件的不同。
语法
vimdiff file1 file2
vim -d file1 file2
子命令
Ctrl + w [h | l]:用于在左右两个窗口之间进行切换。
]c 跳转到下一个diff点,[c 跳转到上一个diff点。
dp 用当前替换另一个窗口的不同处。
一些组合使用
- 求两个文件数据的交集
cat a.log b.log | sort | uniq -d - 求两个文件的并集
cat a.log b.log | sort | uniq - 将文件夹下的所有tar文件依次解压
find . -name “*.tar.gz” | xargs -n 1 -t tar zxvf - 删除某个文件夹下,某年某月的文件夹
ls -lt | awk ‘{if(($6==”Jan” || $6==”Feb” || $6==”Mar” || $6==”Apr” || $6=”May”) && $8==”2019”){print $9}}’ | xargs -n1 rm -rf - 交叉合并两个文件1paste data1 data2 |tr "\t" "\n"