Linux笔记 —— Shell(日期,重定向,定时器)

日期

  1. 获取当前的日期时间
    在这里插入图片描述
  2. 格式化当前的日期时间
    在这里插入图片描述
date +"%Y-%m-%d %H:%M:%S"

这里的%Y,%m,%d分别指代年,月,日。 %H,%M,%S分别指代时,分,秒

%Y,%m,%d之间的符号可以修改,可以用 - ,也可以用~,汉字等作为分隔符

date +"%Y年%m月%d日 %H:%M:%S"

像这样用汉字作为分隔符号也是可以的
在这里插入图片描述

对日期进行加减操作

  1. 加一天 date +"%Y-%m-%d" --date="+1 day"
    在这里插入图片描述
    里面的数字也可以修改,修改增加的天数,下面几项同理
    在这里插入图片描述

  2. 减一天 date +"%Y-%m-%d" --date="-1 day"
    在这里插入图片描述

  3. 显示下一个月的日期
    在这里插入图片描述

  4. 显示上一个月的日期
    在这里插入图片描述

  5. 显示下一年的日期
    在这里插入图片描述

  6. 显示上一年的日期
    在这里插入图片描述

重定向

linux的重定向需要借助 > 和 >> 两个符号

command >> file	将command的结果以追加的方式重定向输出到file文件中
command > file	将command的结果以覆盖的方式重定向输出到file文件中

要说明重定向,先要说明以下三个概念:

  • 终端的标准输入流stdin(standard input),文件描述符为0,默认从stdin读取数据。比如vim指令
  • 终端的标准输出流stdout(standard out),文件描述符为1,默认向stdout输出数据。比如cat指令。向stdout输出数据就相当于将结果打印在终端上。
  • 终端的标准错误输出流stderr(standard error),文件描述符为2,向stderr流中写入错误信息。比如ll 文件名查询一个不存在的文件时,就会将错误信息打印在终端。

重定向的作用是将输出在终端上的信息转为输出到一个文件里面
在这里插入图片描述
第一条命令查询文件 1.txt 的信息,用的是标准输出流stdout将相关的文件信息输出打印在终端
具体的文件信息就是-rw-r–r--. 1 1001 1002 0 11月 2 19:51 1.txt

第二条命令查询了一个存在的文件 1.txt 和一个不存在的文件 a.txt,因此利用了标准输出流stdout打印正确的文件信息,又利用标准错误输出流stderr在终端打印错误信息
具体的错误信息就是这句ls: 无法访问a.txt: 没有那个文件或目录

现在希望这些信息不要打印在终端,而是都输出到一个文件中,比如说自己创建一个out.txt文件用来接收这些信息
在这里插入图片描述
利用 command > file 进行输出重定向后,发现只有正确的文件信息被输出到了out.txt问价里面,而错误信息依旧打印在了终端。

这是因为输出重定向默认是标准输出流stdout,也就是文件描述符为1的情况。这里如果希望让标准错误输出流stderr的信息也输出到文件中,就要把错误信息当正确信息使用。
方法是在输出重定向的语句的后面加上 2>&1
在这里插入图片描述
这样就可以发现没有在终端打印信息,而是将信息都写入了out.txt文件中

这时,如果希望执行命令后什么结果都不会打印,也不保存在某个文件中,就可以借助/dev/null文件

/dev/null :或称空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据(但报告写入操作成功)

可以把这个文件当成一个垃圾回收站,把信息都丢入其中,然后就都消失了。将输出重定向,定向到/dev/null,就相当于屏蔽了标准输出流stdout和标准错误输出流stderr
在这里插入图片描述

有输出重定向,自然也有输入重定向,command1 < file
输入重定向会让command,从键盘获取输入转为到文件读取内容。

定时器

假如我现在要利用shell脚本往一个文件里面输入一句话

#!/bin/sh
echo "hello,shell" > /usr/local/test/1.txt

在这里插入图片描述
查看一下目标文件,发现这句话确实是写入成功了。

但如果我希望,每隔一个固定的时间,就往这个文件里面,写入这句话呢?

利用crontab命令,我们可以实现定时器的效果

  1. crontab -e:修改crontab文件,如果文件不存在时会先创建文件
  2. crontab -l:显示crontab文件的相关设置信息
  3. crontab -r:删除crontab文件

利用 crontab -e 命令创建crontab文件后,编写定时器的格式为
*(分钟) * (小时) * (日) * (月) * (星期) commend
具体的含义为:
第一个星号 * ,指分钟,取值范围是 0 ~ 59
第二个星号 * ,指小时,取值范围是 0 ~ 23
第三个星号 * ,指多少日,取值范围是 1 ~ 31
第四个星号 * ,指月份,取值范围是 1 ~ 12
第五个星号 * ,指第几周,取值范围是 0 ~ 7 (周日可以是0或者7)
command,用来被定时执行的命令

现在输入crontab -e 命令,然后编辑crontab文件

* * * * * sh /usr/local/test/shell/timetest1.sh

这里用sh /usr/local/test/shell/timetest1.sh是因为之前编写了shell脚本,这里改为echo “hello,shell” > /usr/local/test/1.txt也是可以的

编写好crontab文件后保存退出,然后利用tail -f /var/log/cron 查看相关的日志信息,来看看具体的动向
在这里插入图片描述
输入命令后,就可以在终端查看相关的日志记录了。发现这里各在21点02分和21点03分打印了一条日志
在这里插入图片描述
在这里插入图片描述
因为我用的是 > 而不是 >> ,所以覆盖了之前的输出结果,因此这里就一行结果

另外需要注意一件事情,如果只是为了学习练习,那么设置完定时器之后是要关闭的
具体的关闭措施可以用crontab -e 再编辑一下cron文件,然后清空里面的所有语句,再保存退出
在这里插入图片描述

修改定时器的时间

直接输入五个型号*****的含义是每隔一分钟执行一次语句
也可以通过将星号改为具体的值来修改定时器执行语句的时间

15 21 * * * echo "hello,java" > /usr/local/test/1.txt

需要注意的是这里的路径都必须写成绝对路径

这里设置的是每月每天的21点15分来指定echo语句,往1.txt文件内写入“hello,java”
同样的,用 tail -f /var/log/cron 来监控日志记录
在这里插入图片描述
发现这里新增了一条日志记录,到1.txt文件里面进行查看
在这里插入图片描述
写入成功

同理也可以改为其他的时间,不同部分的取值范围再前面都已经给出

另外如果想写多个日期,比如每个星期的周一到周四,执行语句,就可以这么写
15 21 * * 1,2,3,4 command
也可以写成15 21 * * 1-4 command的形式

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值