shell和js、python有很多类似之处,可类比学习掌握
index:
1、who
2、echo与printf
3、九大重定向(<,<<,>,>>,2>,2>>,&>,|,&1)
4、预定义变量-特殊符号($$,$0,$?,$!)
5、追踪限制(set -x ; set +x)
6、BRE-基本正则:行首行尾-^ $,词首词尾-\< \>
7、shell脚本四大运行方式(./ bash . source)
8、shell变量
9、环境变量
10、PS1的设置
11、位置变量
12、环境变量配置文件与启动执行顺序
13、数组
14、特殊字符
15、运算符
16、test测试
17、if分支
18、case分支
19、for循环
20、while 循环
21、自定义函数
22、fork炸弹
23、捕获信号(备份脚本不希望被执行中断)
24、一次性计划任务
25、周期性计划任务
26、脚本加锁
95、学习记录截图
1、who
who:终端初始身份检查,显示出各终端的初始登录身份(就算su也没用,始终标记初始登录身份)
who | wc -lwc:
2、echo与printf
echo 自带换行,默认接双引号字符串(不完全引用引号-双引号,类似python的三引号-‘’‘);
printf 不会换行,默认接双引号字符串(不完全引用引号-双引号,类似python的三引号-’‘’);
3、九大重定向(<,<<,>,>>,2>,2>>,&>,|,&1)
默认的标准输入是键盘,默认的标准输出是屏幕,默认的错误输出是屏幕,而改变这个行为就是重定向。
< 文件输入重定向
<< 命令行输入重定向
> 输出重定向
>> 追加重定向
2> 错误重定向
2>>错误追加重定向
&> 全部重定向
| 管道重定向
&1 引用重定向
由于引用重定向-“&1”的存在,会使得下面几个命令等价:
command > file 2> file(要打开两次file,效率较低)
command 2> file > file(要打开两次file,效率较低)
command > file 2> &1(只打开一次file,效率较高)
command 2> file > &1(只打开一次file,效率较高)
command &> file (只打开一次file,效率最高)
普通用法:
echo 正文(默认双引号) > test.sh (覆盖)
echo 正文(默认双引号) >> test.sh (追加)
举例1(覆盖):
cat > ./test.text << EOF (同 cat << EOF > ./test.sh)
正文内容
EOF (同 Control + D)
举例2(追加):
cat >>./test.text << EOF (同 cat << EOF >> ./test.sh)
正文内容
EOF (同 Control + D)
4、预定义变量-特殊符号($$,$0,$?,$!)
$$: 当前进程PID
$0: 当前shell名/路径
$?: 上个命令的结束代码(0-true,1-false)
$!: 后台运行的最后一个进程PID
5、追踪限制(set -x ; set +x)
set -x : 去除追踪限制→打开追踪内容
set +x : 增加追踪限制→关闭追踪内容
6、BRE-基本正则:行首行尾-^ $,词首词尾-\< \>
7、shell脚本四大运行方式(./ bash . source)
./ 使用当前shell(即#!申明的shell)执行脚本,在新产生的子进程中运行脚本,需要可执行权限;
bash 使用bash运行脚本,在新产生的子进程中运行脚本,可以跳过执行权限验证;
. 在当前进程运行脚本,可以跳过执行权限验证;
source 在当前进程运行脚本,可以跳过执行权限验证;
8、shell变量
shell和python一样,shell也是解释型语言,变量是弱类型的,不限制类型;
shell脚本的计算效率非常低,对非整数的计算支持较差(如同SQL,默认是整数计算);
变量的定义和引用是2回事;
赋值方法1(人机交互式):
read 变量名
# 读取屏幕标准输入作为 变量值
赋值方法2(推荐):
变量名=变量值 (注意:中间无空格,因为空格是unix中常用分隔符,有特殊含义,不可乱用)
赋值方法3(不推荐):
let 变量名=整数1+整数2+整数3+… (非整数会导致let命令报错)
赋值方法4(推荐):
变量名=命令执行的结果
①变量名=$(命令)
②变量名=`命令` (反引号)
变量默认作用范围:当前终端的当前shell;
导出变量给当前终端的 子进程shell 使用:
export 变量名
9、环境变量
环境变量都是默认进行了export导出的,即当前终端所有进程shell、子进程shell都可用;
env 查看正常环境变量;
set == (set | more) 查看更多环境变量;
常用环境变量:USER,PATH,SHELL,LANG…
PATH: 命令搜索路径,当命令(即shell脚本,如:/usr/bin/cd,x1.sh, …)不在PATH这个环境变量中时,必须输入完整路径才能执行该命令(脚本);
命令的本质是文件,是shell脚本;
10、PS1的设置
PS1='\[\e[35;47m\][\u@\h \w \t 第\#个命令]\$\[\e[0m\]'
11、位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} …
12、环境变量配置文件与启动执行顺序
13、数组
定义和引用是2回事;
14、特殊字符
# 注释
; 连接命令,连接脚本
\ 转义字符
" " 不完全引用 == python的 f" " == python的 f' ' == python的 ''' '''
' ' 完全引用 == python的 r' ' == python的 r" "
\n \r \t \$ \" \' \\ 转义字符的应用
` ` (反引号) 把命令的结果赋值给变量
(cmd) 单小括号 : 创建子进程命令
[root@localhost ~ 00:05:52 第36个命令]#cmd1=$(ls)
[root@localhost ~ 00:11:57 第37个命令]#echo $cmd1
anaconda-ks.cfg position.sh test.sh tt1 tt1.sh tt2 tt2.sh tt2.txt tt3 tt3.txt tt4 tt4.txt tt4.txt1 tt5 tt6 tt7 x1
[root@localhost ~ 00:12:08 第38个命令]#cmd1=`ls`
[root@localhost ~ 00:12:20 第39个命令]#cmd2=`ls`
[root@localhost ~ 00:12:36 第40个命令]#echo $cmd2
anaconda-ks.cfg position.sh test.sh tt1 tt1.sh tt2 tt2.sh tt2.txt tt3 tt3.txt tt4 tt4.txt tt4.txt1 tt5 tt6 tt7 x1
[root@localhost ~ 00:12:40 第41个命令]#
cmd1 && cmd2 : 逻辑与,命令1成功了才做命令二;
cmd1 || cmd2 : 逻辑或,命令1失败了才做命令二;
cmd1 ; cmd2 : 逻辑分隔连接,按顺序都要执行;
15、运算符
变量的定义和引用是2回事;
16、test测试
test是测试命令, test expression == [ expression ]
当表达式是整数比较时,可以用特殊写法 [[ expression ]]
具体用法可以通过 man test查看
实例:
17、if分支
18、case分支
19、for循环
C语言风格的for(同js风格):
[root@localhost ~ 12:16:46 第118个命令]#for (( i=1; i<=6; i++ )) ;do echo $i ; done
1
2
3
4
5
6
[root@localhost ~ 12:17:04 第119个命令]#for ((i=1; i<=6; i++)) ;do echo $i ; done
1
2
3
4
5
6
Python风格的for:
[root@localhost ~ 12:04:10 第98个命令]#touch {a,b,c,d}.mp3
[root@localhost ~ 12:05:07 第99个命令]#ls [a-d]*
a.mp3 anaconda-ks.cfg b.mp3 c.mp3 d.mp3
[root@localhost ~ 12:05:22 第100个命令]#for file in $(ls *.mp3) ; do mv $file `basename $file .mp3`.mp4 ; done
[root@localhost ~ 12:08:13 第101个命令]#ls [a-d]*
a.mp4 anaconda-ks.cfg b.mp4 c.mp4 d.mp4
[root@localhost ~ 12:08:18 第102个命令]#for file in `ls *.mp3` ; do mv $file $(basename $file .mp4).mp3 ; done
ls: 无法访问*.mp3: 没有那个文件或目录
[root@localhost ~ 12:08:53 第103个命令]#for file in `ls *.mp4` ; do mv $file $(basename $file .mp4).mp3 ; done
[root@localhost ~ 12:09:08 第104个命令]#ls [a-d]*
a.mp3 anaconda-ks.cfg b.mp3 c.mp3 d.mp3
[root@localhost ~ 12:09:12 第105个命令]#for file in $(ls *.mp*) ; do mv $file `basename $file .mp*`.mp9 ; done
[root@localhost ~ 12:09:40 第106个命令]#ls [a-d]*
a.mp3.mp9 anaconda-ks.cfg b.mp3.mp9 c.mp3.mp9 d.mp3.mp9
[root@localhost ~ 12:09:43 第107个命令]#basename a.mp3 .mp*
a.mp3
[root@localhost ~ 12:10:31 第108个命令]#ls *.mp*
a.mp3.mp9 b.mp3.mp9 c.mp3.mp9 d.mp3.mp9
[root@localhost ~ 12:10:57 第109个命令]#for file in $(ls *.mp*) ; do mv $file `basename $file .mp9`.mp机 ; done
[root@localhost ~ 12:11:28 第110个命令]#ls [a-d]*
a.mp3.mp机 anaconda-ks.cfg b.mp3.mp机 c.mp3.mp机 d.mp3.mp机
[root@localhost ~ 12:11:33 第111个命令]#ls *.机
ls: 无法访问*.机: 没有那个文件或目录
[root@localhost ~ 12:11:45 第112个命令]#ls *机
a.mp3.mp机 b.mp3.mp机 c.mp3.mp机 d.mp3.mp机
20、while 循环
while : ;do echo 无限循环 ; done
while true ; do echo 无限循环 ; done
until [ 9 -gt 10 ] ; do echo 无限循环 ; done
until false ;do echo 无限循环 ; done
[root@localhost ~ 12:45:16 第5个命令]#while [ $a -lt 9 ] ;do echo ${a}小于9 ; ((a++)) ;done
0小于9
1小于9
2小于9
3小于9
4小于9
5小于9
6小于9
7小于9
8小于9
[root@localhost ~ 12:46:28 第9个命令]#a=0
[root@localhost ~ 12:47:02 第10个命令]#until [ $a -ge 9 ] ; do echo $a仍然小于9 ; ((a++)) ;done
0仍然小于9
1仍然小于9
2仍然小于9
3仍然小于9
4仍然小于9
5仍然小于9
6仍然小于9
7仍然小于9
8仍然小于9
/root
83081小于9
/root
83082小于9
/root
83083小于9
/root
83084小于9^C
[root@localhost ~ 12:49:51 第21个命令]#while pwd ;do echo ${a}小于9 ; ((a++)) ;done^C
/root
83085小于9
/root
83086小于9
/root
83087小于9
/root
83088小于9^C
[root@localhost ~ 12:59:38 第28个命令]#for file in /etc/profile.d/*.sh ; do echo $file ; if [ -x $file ] ;
> then . $file ;echo 已执行$file ; else echo $file不可执行 ; fi ; done ;
/etc/profile.d/256term.sh
/etc/profile.d/256term.sh不可执行
/etc/profile.d/colorgrep.sh
/etc/profile.d/colorgrep.sh不可执行
/etc/profile.d/colorls.sh
/etc/profile.d/colorls.sh不可执行
/etc/profile.d/lang.sh
/etc/profile.d/lang.sh不可执行
/etc/profile.d/less.sh
/etc/profile.d/less.sh不可执行
/etc/profile.d/vim.sh
/etc/profile.d/vim.sh不可执行
/etc/profile.d/which2.sh
/etc/profile.d/which2.sh不可执行
[root@localhost ~ 13:01:03 第29个命令]#for i in ls ; do echo $i ; done
ls
[root@localhost ~ 13:02:03 第30个命令]#for i in ls [a-d].* ; do echo $i ; done
ls
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp机
[root@localhost ~ 13:02:23 第31个命令]#for i in `ls [a-d].*` ; do echo $i ; done
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp机
[root@localhost ~ 13:03:13 第32个命令]#for i in $(ls [a-d].*) ; do echo $i ; done
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp机
[root@localhost ~ 13:03:22 第33个命令]#
[root@localhost ~ 13:05:17 第33个命令]#a=0
[root@localhost ~ 13:05:23 第34个命令]#while :;do echo 执行中;((a++));if [ $a -eq 3 ] ; then break ;else continue ;fi; done
执行中
执行中
执行中
[root@localhost ~ 13:08:02 第37个命令]#a=0
[root@localhost ~ 13:08:36 第38个命令]#while :;do echo 执行中,此时a=$a;((a++));if [ $a -eq 3 ] ; then break ;else continue ;fi; done
执行中,此时a=0
执行中,此时a=1
执行中,此时a=2
[root@localhost ~ 13:08:50 第39个命令]#
[root@localhost ~ 13:11:24 第41个命令]#for((i=0;i<9;i++)); do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是0
我是1
我是2
我是3
我是4
我是6
我是7
我是8
[root@localhost ~ 13:12:01 第42个命令]#for i in {1..9}; do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是1
我是2
我是3
我是4
我是6
我是7
我是8
我是9
[root@localhost ~ 13:14:18 第43个命令]#a=(1 2 3 4 5 6 7 8 9)
[root@localhost ~ 13:14:47 第44个命令]#for i in ${a[*]}; do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是1
我是2
我是3
我是4
我是6
我是7
我是8
我是9
[root@localhost ~ 14:39:45 第98个命令]#vim help.sh
[root@localhost ~ 14:52:42 第99个命令]#cat -n help.sh
1 #!/bin/bash
2 #help.sh
3
4 # for i in $*
5 # do
6 # if [ $i = 'help' ]
7 # then echo $i ${i}
8 # else echo $i
9 # fi
10 # done
11
12 while [ $# -ge 1 ]
13 do
14 if [ "$1" = "help" ]
15 then echo $1 $1
16 else echo $1
17 fi
18 #shift做参数左移,即干掉第一个未知参数了
19 shift
20 done
[root@localhost ~ 14:52:48 第100个命令]#. help.sh h help gg help
h
help help
gg
help help
[root@localhost ~ 14:53:16 第101个命令]#
21、自定义函数
[root@localhost ~ 18:54:04 第34个命令]#function cdls(){ cd ~ ; ls; }
[root@localhost ~ 18:56:34 第35个命令]#cdls
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost ~ 18:56:38 第36个命令]#cdls kk
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost ~ 18:56:41 第37个命令]#function cdls(){
> cd $1
> ls
> }
[root@localhost ~ 18:57:19 第38个命令]#function cdls(){ cd $1 ; ls; }
[root@localhost ~ 18:57:24 第39个命令]#cdls /tmp
systemd-private-490787597bb74272afb199a9beec95e2-chronyd.service-dRtV2i tt1.sh
[root@localhost /etc 18:57:38 第41个命令]#unset cdls
[root@localhost /etc 18:59:04 第42个命令]#cdls
-bash: cdls: 未找到命令
[root@localhost /etc 18:59:10 第43个命令]#cdls /tmp
-bash: cdls: 未找到命令
[root@localhost /etc 18:59:13 第44个命令]#cdls(){
> cd $1
> ls
> }
[root@localhost /etc 18:59:27 第45个命令]#cdls ~
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost ~ 18:59:42 第46个命令]#
[root@localhost ~ 19:06:50 第69个命令]#[ -d /proc/2029 ]
[root@localhost ~ 19:07:24 第70个命令]#echo $?
0
[root@localhost ~ 19:07:25 第71个命令]#[ -d /proc/65533 ]
[root@localhost ~ 19:07:33 第72个命令]#echo $?
1
[root@localhost ~ 19:07:34 第73个命令]#ps -aux | grep -in 2029
109:root 2029 0.0 0.0 115804 2252 pts/3 S 15:10 0:00 -bash
115:root 2429 0.0 0.0 112828 1016 pts/3 R+ 19:08 0:00 grep --color=auto -in 2029
[root@localhost ~ 19:08:17 第74个命令]#ps -aux | grep -in 65533
114:root 2432 0.0 0.0 112828 1016 pts/3 R+ 19:08 0:00 grep --color=auto -in 65533
[root@localhost ~ 19:08:59 第75个命令]#function value(){
> value=777
> }
[root@localhost ~ 19:12:25 第76个命令]#value
[root@localhost ~ 19:12:31 第77个命令]#echo $value
777
[root@localhost ~ 19:12:46 第78个命令]#value=999
[root@localhost ~ 19:12:54 第79个命令]#function value(){ local value=777; }
[root@localhost ~ 19:13:04 第80个命令]#value
[root@localhost ~ 19:13:08 第81个命令]#echo $value
999
[root@localhost ~ 19:13:11 第82个命令]#function value(){ value=777; }
[root@localhost ~ 19:13:29 第83个命令]#echo $value
999
[root@localhost ~ 19:13:33 第84个命令]#value
[root@localhost ~ 19:13:36 第85个命令]#echo $value
777
[root@localhost ~ 19:13:37 第86个命令]#cdls
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost ~ 19:24:39 第87个命令]#(cdls)
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost ~ 19:24:47 第88个命令]#cd /
[root@localhost / 19:24:54 第89个命令]#(cdls)
4 anaconda-ks.cfg help.sh tt1.sh tt3 tt4.sh tt6
7 b.mp3.mp机 position.sh tt2 tt3.sh tt4.txt tt7
99 c.mp3.mp机 test.sh tt2.sh tt3.txt tt4.txt1 x1
a.mp3.mp机 d.mp3.mp机 tt1 tt2.txt tt4 tt5 x1.x1
[root@localhost / 19:24:57 第90个命令]#
[root@localhost /etc/init.d 19:33:16 第106个命令]#vim functions
[root@localhost /etc/init.d 19:35:06 第107个命令]#echo -n $" ok "
ok [root@localhost /etc/init.d 19:44:28 第108个命令]#echo -n " ok "
ok [root@localhost /etc/init.d 19:44:40 第109个命令]#
22、fork炸弹
[root@localhost /etc 20:14:44 第131个命令]#ulimit
unlimited
[root@localhost /etc 20:35:56 第132个命令]#ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14988
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14988
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@localhost /etc 20:35:58 第133个命令]#
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
^C
[1]+ 完成 . | .
[liuyuan1@localhost /]$ ulimit
unlimited
[liuyuan1@localhost /]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14988
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[liuyuan1@localhost /]$
23、捕获信号(备份脚本不希望被执行中断)
24、一次性计划任务
[root@localhost / 21:28:02 第165个命令]#echo $date
[root@localhost / 21:28:49 第166个命令]#echo $DATE
[root@localhost / 21:28:53 第167个命令]#echo date
date
[root@localhost / 21:28:58 第168个命令]#echo "date"
date
[root@localhost / 21:29:07 第169个命令]#echo `date`
2021年 09月 12日 星期日 21:29:44 CST
[root@localhost / 21:29:44 第170个命令]#echo $(date)
2021年 09月 12日 星期日 21:29:54 CST
[root@localhost / 21:29:54 第171个命令]#
[root@localhost /tmp 22:14:31 第249个命令]#at -l #(查看计划)
2 Mon Sep 13 20:21:00 2021 a root
3 Mon Sep 13 20:21:00 2021 a root
4 Sun Sep 12 21:44:00 2021 a root
5 Sun Sep 12 21:44:00 2021 a root
[root@localhost /tmp 22:14:35 第250个命令]#at -d 2 3 #(删除计划)
[root@localhost /tmp 22:14:40 第251个命令]#at -l
4 Sun Sep 12 21:44:00 2021 a root
5 Sun Sep 12 21:44:00 2021 a root
[root@localhost /tmp 22:14:49 第252个命令]#at -d 4 5
[root@localhost /tmp 22:15:01 第253个命令]#at -l
[root@localhost /tmp 22:15:06 第254个命令]#man at #(查看at手册)
[root@localhost /tmp 22:15:25 第255个命令]#
[root@localhost /tmp 22:19:12 第261个命令]#at 22:20
at> pwd #at计划没有终端,所以没法进行屏幕标准输出,只能通过重定向输出到文件
at> echo 已执行at `date` >> tt2.txt #at计划没有终端,所以没法进行屏幕标准输出,只能通过重定向输出到文件
at> <EOT> #Control D 提交
job 17 at Sun Sep 12 22:20:00 2021
[root@localhost /tmp 22:19:41 第262个命令]#at -l #(查看计划)
17 Sun Sep 12 22:20:00 2021 a root
[root@localhost /tmp 22:19:45 第263个命令]#ll
总用量 20
-rwxrwxrwx. 1 liuyuan1 liuyuan1 108 9月 12 21:15 sign.sh
drwx------. 3 root root 17 9月 12 10:28 systemd-private-490787597bb74272afb199a9beec95e2-chronyd.service-dRtV2i
-rwxrwxrwx. 1 root root 194 9月 9 00:46 tt1.sh
-rw-r--r--. 1 root root 54 9月 12 22:11 tt2?3.txt
-rwxrwxrwx. 1 liuyuan1 liuyuan1 88 9月 12 22:03 tt2.sh
-rw-r--r--. 1 root root 167 9月 12 22:20 tt2.txt
[root@localhost /tmp 22:20:34 第264个命令]#cat -n tt2.txt
1 已执行脚本 at 2021年 09月 12日 星期日 22:08:26 CST
2 exe at 2021年 09月 12日 星期日 22:12:25 CST
3 已执行at 2021年 09月 12日 星期日 22:20:25 CST #(执行结果)
[root@localhost /tmp 22:20:43 第265个命令]#
25、周期性计划任务
[root@localhost /tmp 22:46:45 第320个命令]#crontab -e #(编辑周期计划,同vim编辑器)
crontab: no changes made to crontab
[root@localhost /tmp 22:46:53 第321个命令]#crontab -l #(查看周期计划,同vim编辑器)
* * * * * echo 开始执行date命令 >> /tmp/tt2.txt
* * * * * /usr/bin/date >> /tmp/tt2.txt
[root@localhost /tmp 22:46:57 第322个命令]#cat -n tt2.txt #(查看周期计划执行结果)
1 开始执行date命令
2 2021年 09月 12日 星期日 22:44:27 CST
3 开始执行date命令
4 2021年 09月 12日 星期日 22:45:26 CST
5 开始执行date命令
6 2021年 09月 12日 星期日 22:46:26 CST
[root@localhost /tmp 22:47:01 第323个命令]#
[root@localhost /tmp 23:01:47 第330个命令]#cd /var/spool
[root@localhost /var/spool 23:03:59 第331个命令]#ll
总用量 0
drwxr-xr-x. 2 root root 63 8月 9 2019 anacron
drwx------. 3 root root 31 9月 12 22:20 at
drwx------. 2 root root 18 9月 12 22:49 cron
drwxr-xr-x. 2 root root 6 4月 11 2018 lpd
drwxrwxr-x. 2 root mail 150 8月 7 18:48 mail
drwxr-xr-x. 2 root root 6 10月 2 2020 plymouth
drwxr-xr-x. 4 root root 35 8月 2 02:23 postfix
drwxr-xr-x. 3 root root 19 8月 21 20:35 rhsm
[root@localhost /var/spool 23:04:00 第332个命令]#cd /var/spool/cron #所有用户的周期性计划都在这
[root@localhost /var/spool/cron 23:04:06 第333个命令]#ll
总用量 4
-rw-------. 1 root root 95 9月 12 22:43 root
[root@localhost /var/spool/cron 23:04:08 第334个命令]#cat -n root
1 * * * * * echo 开始执行date命令 >> /tmp/tt2.txt
2 * * * * * /usr/bin/date >> /tmp/tt2.txt
[root@localhost /var/spool/cron 23:04:20 第335个命令]#
26、脚本加锁
95、学习记录截图