Linux命令积累
记录一些常用的linux shell命令, 做个备忘
抓取命令 grep
命令形式: grep [-acinv] [--color[=auto]] "搜寻内容" filename
, 其中搜索串可以是正则表达式
常用参数:
- -a: 将 binary 文件以 text 文件的方式搜寻数据
- -c: 计算找到 '搜寻内容' 的次数
- -i: 忽略大小写的不同
- -n: 顺便输出行号
- -v: 反向选择,亦即显示出没有"搜寻内容"内容的那一行, 配合管道使用很方便
- -A: 多显示后面的num行
- -B: 多显示前面的num行
- -C: 多显示前面和后面的num行, 相当于AB合起来
常用示例:
向前显示5行: grep "2016-6-23 12:00:00" -B5 --color access.log
抓取时间大于某个值
配合sed
命令和awk
命令
$ grep "运行时间为" qcredit.log | sed 's/ms//' | awk -F ':' '{if($5>100) print}'
通过sed
命令把字符串里的ms
换成空串, awk
命令 -F ':'
表示用:
对文本分割, $5
对应分割后的时间那一列
awk
- 使用方式:
awk [-F 分隔符] 'commands' filename
, 其中-F
可选, 不写默认以空格
或制表符
分割
内置变量(具体参考man
手册):
- FS : 域分隔符, 即-F选项指定的分隔符
- RS : 记录分隔符
- NF : 当前记录域的个数
- NR : 已读的记录数
- FNR : 当前行在文件中的行号
常用示例:
# 以 : 分割, 打印第7列($0表示整行)
cat /etc/passwd | awk -F ':' '{print $7}'
# 打印列数超过10列的行
awk '{if(NF>10) print $0}'
# 在开头和结尾打印一些东西
cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "aaa,bbb"}'
去重排序
组合使用sort
和uniq
, 如:sort test.txt | uniq -c | sort -rn
其中:
uniq
命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起:sort test.txt
- 去掉相邻的重复行:
sort test.txt | uniq
uniq -c
可以实现对重复次数进行统计, 文本行去重并按重复次数排序:sort test.txt | uniq -c
sort -n
可以识别每行开头的数字,并按其大小对文本行进行排序。默认是按升序排列,如果想要按降序要加-r
选项(sort -rn
)
链接命令 ln
- 软链接: 可链接目录、可跨文件系统、相当于快捷方式
- 硬链接: 文件副本、不占空间、不可链接目录、不可跨文件系统
软链接: ln -s src_name link_name
硬链接: ln file_name link_name
打包命令 tar
常用参数:
- -c: 创建
- -x: 解压
- -f: 指定文件
- -v: 显示进度
- -t: 显示列表
- -z: 使用gzip压缩
- -j: 使用bzip2压缩
常用示例:
打包: tar -cvf output.tar inpt1 input2 ...
压缩: tar -zcvf output.tar directory/input
解压: tar -xvf input.tar
远程拷贝 scp
常用参数:
- -r: 递归拷贝,若文件夹下有文件,则底下文件也一起拷贝
常用示例:
上传: scp -r local_file username@remote_ip:remote_file
下载: scp -r username@ip:remote_file local_file
修改权限 chmod
递归修改权限,比如,将某目录下面的所有文件修改为644,所有目录修改为755
find ./mydir -type f | xargs chmod 644
find ./mydir -type d | xargs chmod 755
查看端口占用情况
不用sudo
看不到PID/Program name
sudo netstat -tunlp
查看磁盘空间
# 查看硬盘剩余空间
df -h
# 查看目录占用空间
du -hs dir
# 列出一级目录所占空间
du -ah --max-depth=1 dir