SHELL利器:比较常用的SHELL命令(持续更新)
博客专区 > Iuranus 的博客 > 博客详情
SHELL利器:比较常用的SHELL命令(持续更新)
Iuranus 发表于3年前
SHELL利器:比较常用的SHELL命令(持续更新)
  • 发表于 3年前
  • 阅读 347
  • 收藏 29
  • 点赞 1
  • 评论 2

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 这里主要是整理一些常用命令和相关参数,对具体原理和介绍可参看参考链接。

awk,说shell中的瑞士军刀不为过吧

# 实现SQL中的group by功能,例如对“姓名    地点    年龄”按照地点字段统计其年龄之和
awk '{arr[$2]+=$3} END{for(i in arr) print i,arr[i]}' source_file.txt
# 对下述数据peo.o,按照城市分组(组内年龄降序排序),并使得全局分组的排序以组内年龄最大值降序排序
# 姓名    城市    年龄    
# 老Q    上海    65
# 老K    南京    68
# 小A    上海    24
# 小M    西安    25
# 老M    西安    88
# 老A    南京    45
# 期望结果
# 姓名    城市    年龄
# 老M    西安    88(组与组之间最大)
# 小M    西安    25(组内降序)
# 老K    南京    68
# 老A    南京    45
# 老Q    上海    65
# 小A    上海    24
sort -t $'\t' -k 3nr peo.o > peo_sort.o   # 预处理,对年龄全局降序排序
awk 'NR==FNR{if(arr[$2]=="") arr[$2]=$3} NR>FNR{print $0,"\t",arr[$2]} ' peo_sort.o peo_sort.o | sort -t $'\t' -k 4nr -k 3nr | cut -f 1-3 > peo_rs.o 
# awk中第一次遍历文档得到同城年龄最大值集合,第二次重新输出文件,其中每行新添一字段用以标注其所在组的最大年龄,sort中对新添字段排序,这时结果将按照组内年龄最大值分组降序排序,cut中截取原文档字段进行输出。

# 待续

sort,对文档数据进行排序

# 对txt.o第三列(以tab符分割)按照数值降序排序,输出到sort.o文件中
sort -t $'\t' -r -n -k 3 txt.o > sort.o
# 对txt.o第三列(以冒号分割)按照数值降序,第一列数值升序,第二列字符降序排列
sort -t $':' -k 3nr -k 1n -k 2r txt.o > sort.o
# 精确地对某个域进行排序(-k 2n可能是对从第二个域到最后的范围进行排序)
sort -t $'\t' -k1,1 -k7,7nr txt.o > sort.o #(对第一个域1,1和第7个域7,7nr进行排序)

-r    # 默认为升序,该参数将其改为降序排序
-t    # 按照后面指定的字符进行行切分,例如要按照tab符分割,则用$'\t'
-k    # 指定按照切分后的某列(字段)进行排序,首列为1
-n    # 将设置以数值进行排序,不然10会在2前面
-o    # sort默认将结果输出至标准输出,重定向>则将结果写入新文件,若重定向到原文件,则会清空原文件;该参数可将结果写入原文件,如 sort -r number.txt -o number.txt
-u    # 排序时去除重复的行
-f    # 忽略大小写(将小写字母都转换为大写字母来进行比较) 
-c    # 检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C    # 检查文件是否已排好序,如果乱序,不输出内容,仅返回1 
-M    # 会以月份来排序,比如JAN小于FEB等 
-b    # 忽略每一行前面的所有空白部分,从第一个可见字符开始比较

参考和补充(例如以第二个字段第二个字符排序之类):Linux Shell之sort命令


df,显示目前所有档案系统的最大可用空间及使用情形

# 常用命令,以易读格式显示文件系统使用情况
df -h

-a    # 显示全部的档案系统和各分割区的磁盘使用情形
-i    # 显示i -nodes的使用量
-h    # 显示使用「Human-readable」的输出(GB、MB 等易读的格式)
-k    # 大小用k来表示 (默认值)
-m    # 大小用M表示
-t    # 显示某一个档案系统的所有分割区磁盘使用量
-x    # 显示不是某一个档案系统的所有分割区磁盘使用量
-T    # 显示每个分割区所属的档案系统名称

du,查询档案或目录的磁盘使用空间

# 常用命令,以易读格式显示文件的磁盘使用空间,最后附上总计
du -ch

-a    # 显示全部目录和其次目录下的每个档案所占的磁盘空间
-b    # 大小用bytes来表示 (默认值为k bytes)
-c    # 最后再加上总计 (默认值)
-h    # 显示使用「Human-readable」的输出(GB、MB 等易读的格式)
-s    # 只显示各档案大小的总合 (summarize)
-x    # 只计算同属同一个档案系统的档案
-L    # 计算所有的档案大小

参考和补充:df命令和du命令用法详解


tar,对文件目录进行打包备份 

# 将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
tar -cvf /tmp/etc.tar /etc        # 仅打包,不压缩!
tar -zcvf /tmp/etc.tar.gz /etc    # 打包后,以 gzip 压缩
tar -jcvf /tmp/etc.tar.bz2 /etc   # 打包后,以 bzip2 压缩
# 将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
cd /usr/local/src
tar -zxvf /tmp/etc.tar.gz

-c    # 建立新的归档文件 (create )
-x    # 从归档文件中解出文件
-r    # 向归档文件末尾追加文件    注意	#  在参数的下达中,c/x/t 仅能存在一个。
-O    # 将文件解开到标准输出
-v    # 处理过程中输出相关信息
-f    # 对普通文件操作
-z    # 调用gzip来压缩归档文件,与x联用时调用gzip完成解压缩
-Z    # 调用compress来压缩归档文件,与x联用时调用compress完成解压缩

参考和补充:tar命令的详细解


scp,主机之间拷贝文件

-a    # 尽可能将档案状态、权限等资料都照原状予以复制
-r    # 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地
-f    # 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制

参考和补充:SCP 命令


cron,定时执行任务

crontab -l    # 显示当前用户的cron服务
crontab -u    # 为某用户设置cron服务(一般root用户在执行cron命令时需要此参数)
crontab -e    # 编辑当前用户的cron服务(配合-u参数)
crontab -r    # 删除当前用户的所有cron服务(配合-u参数)
/sbin/service crond start/stop/restart/reload    # 启动/停止/重启/重新加载配置文件
# 单行为一个执行命令,前五个字段分别代表“分 时 日 月 周”,具体参看参考链接;
# 用户通过crontab -e设定的cron服务内容会被保存到/var/spool/cron/username文件中,在该文件被修改后,cron守护进程会重新读到内存;
# 在/etc/crontab文件中会有cron.hourly/cron.daily/cron.weekly/cron.monthly等内容,分别指定按时/日/周/月执行的内容文件;如果某cron服务需要根据调度来执行,而非按时/日/周/月执行,则可添加到/etc/cron.d目录中。

参考和补充:crontab 详解crontab命令详解


grep,全局正则搜索(Global search Regular Expression(RE) and Print out the line)

grep myword -r *    #在当前目录下面搜索所有含有myword的行
-n    # 在匹配的行前面打印行号
-r    # 递归搜索文件夹中目录及每个文件
-i    # ignore-case,忽略大小写
-h    # 打印时不显示文件名
-l    # 只显示包含匹配模板的行的文件名清单(不同项目之间用换行符分割)
-v    # 反检索,只显示不匹配的行
匹配tab符号:grep $'\t'

如果文章对你有用,请在收藏之余“顶/赞”一下以示鼓励吧 (/ω\)

标签: SHELL 命令 SORT AWK
共有 人打赏支持
粉丝 12
博文 41
码字总数 22439
评论 (2)
许雷神
支持
Iuranus

引用来自“许雷神”的评论

支持
×
Iuranus
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: