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"}'

去重排序

组合使用sortuniq, 如: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