运维常见命令和案例
一. echo
echo -n 输出不换行
echo -e 激活转义字符项,后面可接转义字符 比如 echo -e "oldboy\toldboy 输出结果是在中间加一个Tab空格(2个空格)
如果想在echo中执行命令并且输出结果,有两种方法可以实现
1. 在命令中添加反引号,Tab上方的字符
2. 使用$(命令)
二. date
date -s :修改时间 date -s "2016/08/09 但是此命令没写到BIOS中,会自动恢复,如果想写到BIOS,用hwclock命令
熟悉几个参数
date '+%y-%m-%d' 尝试%F--标准年月日,%T--标准时分秒, %Y--完整的年份, %w--周几da %H--时 %M--分 %S--秒
date +%Y-%m-%d\ %H:%M:%S等价于date +%F %T,注意%F后面有一个转义字符 \ 来处理后面的空格
延伸点:
1. cal命令可以显示日历
2. 打印以前或以后的日期
三天前:date +%F\ %w --date='3 day ago' 或者 date +%F\ %w -d '3 day ago' 或者date +%F\ %w -d '-3 day'
三天后;date +%F\ %w -d '+3 day' 不加 + - 默认是三天后
注意点:
1. -d后不加等号,后面的days单复数都行,单双引号都行
2. 后面的day可以替换成hour,min显示相应的时间,当然前面的参数也要修改是对应的时间显示出来 例如 date +%H -d '+3 hour' ; date +%w -d ' +4 day'---显示4天后是周几
三. 企业案例
1. 把指定文件夹每日进行备份打包
tar cvzf oldboy-$(date +%F).tar.gz ./oldboy
注意点:打包需要在oldboy的上级目录中执行,先定义打包后的名字,原文件的位置要写相对地址
2. 只保留最近7天的log内容
方法一:find /var/log -type f -name "*.log" -mtime +7 | xargs rm -f
日志文件一般存放在/var/log目录下 -mtime指修改时间,ll和ls命令默认显示的都是mtime;+7就是多于7天的,同理-7是少于7天,7就是刚好7天
方法二:把文件打包的时候按周几命名,那么下周会自动覆盖上周的记录
tar cvzf oldboy-$(date +%w).tar.gz ./oldboy
四:过滤掉文本中的空行,并输出其他文本
方法一:grep -v "^$" hong.txt -v表示取反, "^$"表示开头和结尾都为空,因为正则表达式是以行为单位进行处理,它就是表示空行
方法二:sed '/^$/d' hong.txt ^$表示空行, /.../选出空行, d进行删除
方法三:awk /^[^$]/ hong.txt [^]表示非, [^$]匹配一个不是$的字符,^[^$]就是匹配不以$开头的任意字符, 用/../套上就是非空行
方法四:awk '/^[^(.*)]/' hong.txt
随便玩玩的,居然这样也行,(,*)表示任意字符,[^(.*)]表示啥字符都不是,当然也不包括$,^[^(.*)]就表示以未知字符开头,但是这里shell只能理解为以非空字符开头,所以就得到正确输出咯,哇哈哈,好牛X的感觉。
/...../看来可以用在sed 和 awk中,表示取出指定字符的行,有机会试下grep中是否能用
努力生活,融于自然