2019-03-18到03-22 号课堂笔记

doy13

课堂笔记

2019月3月18日



.是标识selinux的符号

Selinux是什么?

安全规则,让Linux系统更安全的一套规则。

这个规则太严格了,一般都会关闭selinux。

怎么关掉selinux?

查看方法: getenforce enforcing

暂时关闭:setenforce

        setenforce 0

        getenfrce permissive

永久关闭:vim /etc/selinux/config

         Grep dis /etc/selinux/config


linux里防火墙 c6 iptables c7 firewalld

作用:防护计算机,防止被入侵。

Systemctl status firewalld.service


Linux里防火墙C6 iptables  C7 firewalld

作用:防护计算机,防止被入侵。

systemctl status firewalld.service

开启firewalld(C6 service iptables start 或者/etc/init.d/iptables start)

systemctl start firewalld.service

systemctl status firewalld.service

让firewalld开机自启动

systemctl enable firewalld.service

C6用法:chkconfig iptables off

C7就是一个命令systemctl



Ls -lhi第三列 硬链接数

[if !supportLists]1. [endif]什么是硬链接?

就是具有相同inode节点号的文件互为硬链接。

[if !supportLists]2. [endif]硬链接原理。

[if !supportLists]3. [endif]测试

创建硬链接:

ln源文件 硬链接文件

a.文件硬链接

# echo "I am oldboy." >oldboy.txt

# cat oldboy.txt

# ln oldboy.t

 # ln oldboy.txt oldboy_hard_link

# ls -lirt

作用

1.备份,防止误删。

# ln /etc/hostname /opt/hostname

# cat /opt/hostname

# rm -f /etc/hostname

# cat /etc/hostname

# cat /opt/hostname

# ln /opt/hostname /etc/hostname

# cat /etc/hostname

b.目录硬链接

不支持人工创建目录硬链接。

# ln oldboy oldgirl

软链接

实践:文件

# !echo

# cat oldboy.txt

# ln -s oldboy.txt  oldboy_soft_link

目录:是工作中的重点

# mkdir oldboy

# touch oldboy/test.txt

# ln -s oldboy  oldboy_soft_link_dir

# ls oldboy_soft_link_dir/

# ls oldboy

 

工作中为什么会使用软链接。

第一个用途:

安装软件:/application/nginx-1.10

过半年:/application/nginx-1.20

导致一个问题,工作中,开发等引用/application/nginx-1.10路径。

安装软件:/application/nginx-1.10===>/application/nginx(让开发用)

过半年:/application/nginx-1.20===>/application/nginx(让开发用)


第二个用途:

/etc/对应的分区要满了,没法放很多文件,但是程序还想通过/etc/目录访问文件。

此时,我们可以把文件放入/opt/oldboy下,然后做一个到/etc/oldboy的软链接。

本质是快捷方式,指向源文件实体,本身和源文件是不同的文件。

# mkdir /opt/oldboy

# touch /opt/oldboy/{1..3}.txt

# ln -s /opt/oldboy/ /etc/oldboy

# ls /etc/oldboy

# ll /opt/oldboy

 

 

 

 

 

 

Linux文件删除原理:

1.静态文件:没有进程或程序正在访问的文件。所有的硬链接数为0(I_link),即所有硬链接都被干掉了,包括自身。

硬链接的数量的代表变量符号i_link

Rm -f oldboy.txt oldboy hard link

执行完,其实文件也没删除,关机停止运行

a.系统定时清理没有文件名的inode。

b.磁盘检查会清理。

c.增加新文件时优先占用没有文件名的inode。

恢复的工具:debugfs,ext3grep等等。

亡羊补牢不可取,违背运维三大核心原则。

多备份,操作前备份,异服务器和异地备份。

2.动态文件:有程序或进程访问的文件

删除原理:a.所有硬链接删除。I_link为0。

b.i_count为0.i_count是

3.实践文件删除原理

环境准备,命令集合如下:

mkdir -p /app/logs                           #<==创建用于挂载的目录。

dd if=/dev/zero of=/dev/sdc bs=8K  count=10  #<==创建指定大小的文件。

mkfs.ext4 /dev/sdc                           #<==格式化。

mount -o loop /dev/sdc /app/logs             #<==挂载。

df -h                                        #<==检查挂载结果。

实践:

# cd /app/logs/

# touch nginx.log

# tail -f nginx.log

# cat /etc/services >>nginx.log

# df -h

明明删除了,结果还是100%。

# rm -f nginx.log

# lsof|grep nginx

# df -h

重来:

模拟进程读文件:

# touch nginx.log

# tail -f nginx.log

分区满了:清理,删除

 

删除源文件

[root@oldboyedu /app/logs]# rm -f nginx.log

结果:

i_link=1

i_count=1



ctrl+c中断 进程调用文件

结果:

i_link=1

i_count=0



删除硬链接文件

[root@oldboyedu /app/logs]# rm -f nginx_hard.log

结果:

i_link=0

i_count=0


[root@oldboyedu /app/logs]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3        19G  1.9G   18G  10% /

devtmpfs        980M   80K  980M   1% /dev

tmpfs           991M     0  991M   0% /dev/shm

tmpfs           991M  9.5M  981M   1% /run

tmpfs           991M     0  991M   0% /sys/fs/cgroup

/dev/sda1       253M  136M  118M  54% /boot

tmpfs           199M     0  199M   0% /run/user/0

/dev/loop0       73K   14K   54K  21% /app/logs



把他变成你的。

Web服务器磁盘满故障深入解析,地址为

http://oldboy.blog.51cto.com/2561410/612351


老师讲的就是你遇到的,你学习时遇到的就是你遇到的。



1、软硬连接区别。

2、文件删除原理。


1)掌握Linux文件属性的各个列的含义(ls -lhi结果)及对应知识概念。

2)磁盘空间不足故障的多重判断和解决(面试常考)。

3)请描述软链接和硬链接的特点及区别(面试常考)。

4)请描述Linux系统文件删除的原理(面试常考)。


基本含义

通配符简单说就是键盘上的一些特殊字符,可以实现某些特殊的功能,

列入,可以用*代表

反引号作用让系统把字符串当作命令反引号‘’等于$()

          day14

课堂笔记

2019年3月19日

正则表达式与三剑客知识


什么是正则表达式?

1.作用和特殊字符一样。

正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。

开发者

假设"@"代表“I am”,"!"代表“oldboy”,

则执行echo "@!"的结果就是输出“I am oldboy”。

三剑客的正则表达式特点

2.提高效率,快速获取到想要的内容。

3.适用于三剑客命令grep(egrep),sed,awk

4.以行为单位处理。

.

易混淆事项

1、和通配符区别。

2、开发人员正则,一般是Perl兼容正则表达式。

3、Linux系统三剑客正则表达式******。


环境准备:


export LC_ALL=C


正则表达式分类:

[if !supportLists]1、[endif]基本正则表达式BRE  grep

BRE对应的元字符 ^,$,[],.,*

[if !supportLists]2、[endif]扩展正则表达式ERE  egrep

ERE在BRE的基础上增加了 ?,{},|,(),+


BRE

^   尖角号

$  美元符

^$ 组合符,表示空行

.   匹配任意一个且只有一个字符

\   转义字符

*   匹配前一个字符0次或一次以上

.*  匹配所有内容

^.* 匹配以任意多个字符开头的内容

.*$  以任意多个字符结尾的内容

[abc] 匹配[]集合内的任意一个字符a或b或c

[^abc]匹配不包含^后的任意字符a或b或c,这里的^表示对[abc]取反


ERE  

+       匹配前一个字符一次1次或1次以上

[:/]+    匹配括号内的:或/字符1次或1次以上

|      表示或者,即同时过滤多个字符串

?       匹配前一个字符0次或1次

a{n,m} 匹配前一个字符最少n次,最多m次

a{n,}     匹配前一个字符最少n次

a{n}     匹配前一个字符正好n次

a{,m} 匹配前一个字符最多m次




Linux三剑客

awk  sed  grep


sed

Sed是操作、过滤和转换文本内容的强大工具。

常用功能有对文件实现快速增删改查(增加、删除、修改、查询),

其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。

                     


sed

常用参数

-n 取消默认sed的输出,常与sed内置命令的p连用※

-i 直接修改文件内容,而不是输出到终端。


如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※


sed的内置命令字符说明

s替换

g全局global

p打印print

d删除delete

        day15

课堂笔记

2019年3月20日

三剑客自身有特长的。

grep过滤查找内容。筛子

sed取行,替换,删除,追加

awk取列



cut按列切割

-d指定分隔符 -f指定哪列,多列用逗号

[root@oldboyedu ~]# cat a.txt

1 2 3 4 5 6 7 8 9 10

[root@oldboyedu ~]# cut -d" " -f1,3,5 a.txt

1 3 5

[root@oldboyedu ~]# cut -d" " -f3-5 a.txt

3 4 5


练习

[root@oldboyedu ~]# sed -n '1,5p' /etc/passwd >oldboyedu.txt

[root@oldboyedu ~]# cat oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@oldboyedu ~]# cut -d":" -f3,4 /etc/passwd

0:0

1:1

2:2


[root@oldboyedu ~]# cat b.txt

oldboy 49000448

[root@oldboyedu ~]# cut -c1-6,8- b.txt

oldboy4900044





awk语法:

awk  [option]   'pattern{action}' file ...

awk   [参数]      '条件{动作}'    文件 ...


参数:

-F指定分隔符

打印第一列:

[root@oldboyedu ~]# awk -F ":" '{print $1}' oldboyedu.txt

root

bin

daemon

adm

lp


[root@oldboyedu ~]# awk -F ":" '{print $3,$5}' oldboyedu.txt

0 root

1 bin

2 daemon

3 adm

4 lp


列:$1第一列 $2第二列 以此类推....

$0整行

$NF最后一列 倒数第一列

$(NF-1)倒数第二列

[root@oldboyedu ~]# awk -F ":" '{print $NF}' oldboyedu.txt

/bin/bash

/sbin/nologin

/sbin/nologin

/sbin/nologin

/sbin/nologin

[root@oldboyedu ~]# awk -F ":" '{print $0}' oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



练习:打印1 2和最后一列。

[root@oldboyedu ~]# awk -F ":" '{print $1,$2,$NF}' oldboyedu.txt

root x /bin/bash

bin x /sbin/nologin

daemon x /sbin/nologin

adm x /sbin/nologin

lp x /sbin/nologin


问题1:取test.txt文件的第2行到第3行的内容。

[root@oldboyedu ~]# awk 'NR>1&&NR<4' oldboyedu.txt

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@oldboyedu ~]# awk 'NR==2,NR==3' oldboyedu.txt

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin



问题2:过滤出含有root字符串的行※。

[root@oldboyedu ~]# awk '/root/' oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# awk /root/ oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]#

[root@oldboyedu ~]# awk "/root/" oldboyedu.txt

root:x:0:0:root:/root:/bin/bash


问题3:删除含有root字符串的行※。

[root@oldboyedu ~]# awk '/^[^r]/' oldboyedu.txt

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[^r]非r

^[^r]以非r字符卡头


问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。

[root@oldboyedu ~]# awk -F ":" '{print NR,$1,$3,$NF}' oldboyedu.txt

1 root 0 /bin/bash

2 bin 1 /sbin/nologin

3 daemon 2 /sbin/nologin

4 adm 3 /sbin/nologin

5 lp 4 /sbin/nologin


问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。

[root@oldboyedu ~]# ifconfig eth0|awk 'NR==2{print $2}'

10.0.0.201


C6

[root@oldboy ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:D0:87:20  

          inet addr:10.0.0.202  Bcast:10.0.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fed0:8720/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:243 errors:0 dropped:0 overruns:0 frame:0

          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:20674 (20.1 KiB)  TX bytes:8706 (8.5 KiB)


[root@oldboy ~]# ifconfig eth0|awk 'NR==2{print $2}'

addr:10.0.0.202

[root@oldboy ~]# ifconfig eth0|awk 'NR==2{print $2}'|awk -F ":" '{print $2}'

10.0.0.202


[root@oldboy ~]# ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'

10.0.0.202


问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出


awk -F ":" '$1~/root/ {print $NF}' test.txt

~匹配

    day16

课堂笔记

2019年3月21日



Linux基础权限是9个字符。

rw-r -- r--

前三个字符是表示用户权限位

中三个字符是表示用户组权限单位

后三个字符是其它用户权限位


同一组的三个字符权限也是有位置的


普通文件对应读,写,执行权限

可读r,   表示具有读取和浏览文件内容的权限

可写w,表示具有新增,修改,删除文件内容的权限

可执行x, 表示具有执行文件的权限


目录对应读,写,执行权限

可读r,   表示具有浏览目录下面文件及子目录内容的权限

可写w表示具有增加目录,删除或修改目录内文件的权限

可执行x表示具有进入目录的权限


设置及更改文件和目录权限的命令chmod

参数-R递归处理指定目录及其子目录下的所有文件



基于文件:默认权限规则

从666计算

umask都为偶数 默认权限用减法

umask有奇数 默认权限用减法 然后奇数为加1


基于目录:默认权限规则


r  4

w  2

x  1

-  0




测试准备:

incahome(家、组)

oldboy 家庭男主人,用来代表用户(User)角色,是文件的所有者

oldgirl 女主人(和所有者oldboy属于相同组,oldboy的家人)用来代表用户组incahome的角色

test其他人 其他(others)人,用来代表其他用户角色


权限修改:

777 +x -x  u=w  g-x


Linux权限有两种表现形式:

1、数字表示法 称为8进制权限

r 4

w 2

x 1

- 0

实际的权限表示就是将每3位相加即可。

rwxr-xr-x  755


rwx 7

r-x 5

r-x 5


2、字符表示法


rw-rw-r-x代表的数字权限为665

--xr-x-wx代表的数字权限为153

-wx--x--x代表的数字权限为311



而以下数字权限表示的字符权限如下:

755代表的字符权限为rwxr-xr-x

644代表的字符权限为rw-r--r--

134代表的字符权限为--x-wxr--



修改文件属性的用户和组

chown用户.用户组 文件  这里的点可以用:替换。

chown用户 文件

chown .用户组 文件   ====chgrp 用户组 文件



chgrp incahome test.txt



[root@oldboyedu /oldboy]# chown oldboy test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 oldboy root 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]# chown .incahome test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 oldboy incahome 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]# chown root:root test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 root root 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]#


安全权限临界点:

文件不想被修改被执行:644

[root@oldboyedu /oldboy]# touch oldboy.txt

[root@oldboyedu /oldboy]# ls -l

total 4

-rw-r--r-- 1 root    root  0 Oct  7 23:21 oldboy.txt

目录不想被修改(删除移动创建)被执行(进入):755


博客:写博客。。。服务器的博客目录和文件的权限,防止被恶意篡改。


企业真实案例:网站文件被恶意修改了。。。。打开网站后有弹窗广告(不是你网站的)

用户打开网站,报警。

原因:权限设置不到位。chmod -R 777目录 开发人员习惯


解决方案:

1、备份

tar zcvf /opt/oldboy_$(date +%F).tar.gz ./oldboy/


2、找到被修改的文件

[root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'

/oldboy/oldboy.txt:<script>ddddddddddddd</scripts>

/oldboy/test.sh:<script>ddddddddddddd</scripts>


3、批量删除

[root@oldboyedu /]# find /oldboy -type f |xargs sed -i '/ddddddddddddd/d'

[root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'


4、找到文件被篡改来源,并优化调整。

亡羊补牢。


5、写总结 故障报告。


控制默认权限的东西umask

[root@oldboyedu /oldboy]# umask

022




创建文件默认最大的权限为666(-rw-rw-rw-),其默认创建的文件没有可执行权限x位。

666

022 -

--------------------

644默认权限

[root@oldboyedu /oldboy]# umask 044    ====临时

[root@oldboyedu /oldboy]# touch abc

[root@oldboyedu /oldboy]# ls -l abc

-rw--w--w- 1 root root 0 Oct  7 23:42 abc


[root@oldboyedu /oldboy]# umask 044

[root@oldboyedu /oldboy]# touch abc

[root@oldboyedu /oldboy]# ls -l abc

-rw--w--w- 1 root root 0 Oct  7 23:42 abc

[root@oldboyedu /oldboy]# umask

0044

[root@oldboyedu /oldboy]# umask 043

[root@oldboyedu /oldboy]# umask

0043

[root@oldboyedu /oldboy]# touch a

[root@oldboyedu /oldboy]# ls -l a

-rw--w-r-- 1 root root 0 Oct  7 23:44 a


当umask中存在奇数位的时候,在计算完毕,奇数位加1


666

011

-------------------

655

 11

-----------------

666



基于文件:默认权限规则了解

从666计算

umask都为偶数 默认权限用减法

umask有奇数 默认权限用减法 然后奇数位加1


基于目录:默认权限规则


从777计算

默认权限用减法




Linux系统特殊权限位知识

9位基础权限


还有3位特殊权限位

suid位:

suid(setuid)位通过S字符标识,

存在于基本权限的用户权限位的x权限对应的位置,

如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识,

suid的s对应的数字权限为4,完整权限用八进制数4000表示。


sgid位:

sgid(setgid)位同样是通过S字符来标识,

但是,sgid位存在于基本权限的用户组权限位的x权限对应的位置,

如果用户组权限位对应的x权限位上有x权限,则sgid就用小写的s标识,

suid的s对应的数字权限为2,完整的权限用八进制数2000表示。


sticky(粘滞位)知识简介

sticky(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,

如果其他用户位的x权限位上有x权限,

则sticky(粘滞)位通过小写的t标识,对应的数字权限是1,

完整的权限用八进制数1000表示。



4 2 1,加和放在基础权限数字的前面。

修改方法:

[root@oldboyedu /oldboy]# chmod 7755 abc

预测:-rwsr-sr-t

[root@oldboyedu /oldboy]# chmod 7755 abc

[root@oldboyedu /oldboy]# ls -l abc

-rwsr-sr-t 1 root root 0 Oct  7 23:42 abc


[root@oldboyedu /oldboy]# chmod 7644 abc

[root@oldboyedu /oldboy]# ls -l abc

-rwSr-Sr-T 1 root root 0 Oct  7 23:42 abc



工作中有啥用?


suid到底有什么作用

简单地说,suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,

拥有和root管理员一样的身份和权限(默认情况)。




[oldgirl@oldboyedu /]$ ll -ld oldboy/

dr-x-wxrw-. 2 oldboy incahome 6 Oct  7 22:15 oldboy/


oldgirl属于incahome,增加一个用户属于incahome,是不是也和oldgirl有同样权限。


oldboy给一个新用户设置suid,这个新用户的权限就和oldboy一样。

   Day17

课堂笔记

2019年3月22日


作用之一:

sgid的作用就是让普通用户可以在执行某个设置了sgid位的命令时,

拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。


locate搜索内容,默认从updatedb对应的数据库中查找

updatedb更新locate查找内容对应的数据库。


[root@oldboyedu ~]# updatedb

[root@oldboyedu ~]#  ls -l /var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 1977042 Oct  8 00:47 /var/lib/mlocate/mlocate.db

[root@oldboyedu ~]# file /var/lib/mlocate/mlocate.db

/var/lib/mlocate/mlocate.db: data


sgid基于目录的作用:

让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限。



3W1H框架

Linux系统定时任务:


1、什么是定时任务?

周期性的执行任务计划的软件,Linux定时任务的常用软件crond。



2、使用定时任务软件,可以每天,每小时按你需求重复的执行一项工作。

例如:备份都是0点以后,2点爬起来备份,4点以后睡觉。

需要写一个程序实现自动备份,然后让定时任务软件帮你执行。

闹钟。。。。可以追女朋友。。。


3、怎样用。




(1)系统定时任务计划

1.不用管理员干预,系统自动执行。

2.也可以利用系统任务为管理员服务。

[root@oldboy ~]# ll /var/log/messages*

-rw-------. 1 root root  96594 Mar 21 12:40 /var/log/messages

-rw-------. 1 root root 485249 Mar 20 10:46 /var/log/messages-20190320

[root@oldboy ~]# ll /var/log/secure*

-rw-------. 1 root root 1430 Mar 21 12:50 /var/log/secure

-rw-------. 1 root root 2695 Mar 20 10:46 /var/log/secure-20190320


[root@oldboyedu /etc/cron.daily]# ll /etc/cron.daily/logrotate  /etc/logrotate.conf

-rwx------. 1 root root 219 Oct 31  2018 /etc/cron.daily/logrotate

-rw-r--r--. 1 root root 662 Jul 31  2013 /etc/logrotate.conf

按天切割日志,就可以用logrotate。


(2)用户定时任务计划

在Linux系统中,

cron是定时任务的软件名,

crond是服务进程名,真正实现定时任务服务。

crontab命令是用来设置定时任务规则的配置命令。


要想配置定时任务,首先启动crond服务。

systemctl start crond.service

systemctl stop crond.service

systemctl status crond.service


开启自启动:

systemctl disable crond.service

systemctl enable crond.service


[root@oldboyedu ~]# systemctl status crond

●crond.service - Command Scheduler

   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)

   Active: active (running) since Thu 2020-10-08 01:56:12 CST; 2min 26s ago

 Main PID: 13189 (crond)

   CGroup: /system.slice/crond.service

└─13189 /usr/sbin/crond -n


Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (RANDOM_DELAY will be...)

Oct 08 01:56:12 oldboyedu systemd[1]: Started Command Scheduler.

Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (running with inotify...)

Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (@reboot jobs will be...)

Hint: Some lines were ellipsized, use -l to show in full.



crontab命令是用来设置定时任务规则的配置命令。

内容存放哪里了。定时任务内容存放的位置/var/spool/cron/

以当前用户名作为文件名

[root@oldboyedu ~]# ll /var/spool/cron/

total 8

-rw------- 1 oldboy oldboy 10 Oct  8 02:04 oldboy

-rw------- 1 root   root    6 Oct  8 02:02 root

[root@oldboyedu ~]# cat /var/spool/cron/oldboy

###oldboy


-l l列表 查看已经设置的定时任务*

-e edit编辑定时任务*

-u user查看特定用户下定时任务


root:

crontab -l == cat /var/spool/cron/root

crontab -e == vim /var/spool/cron/root


编写定时任务的语法:

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  *  (command to be executed)


共六列:

第一列:分minute (0 - 59)

第二列:时hour   (0 - 23)

第三列:日day of month (1 - 31)

第四列:月month (1 - 12) OR jan,feb,mar,apr ...

第五列:周day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

第六列:要执行的任务命令或程序


特殊符号:

*表示的 每或每一 的意思

00 23 * * * cmd


-连续区间 1-10

00 8-23 * * * cmd


,列举 1,2,3,4,8

00 1,2,3,4,8 * * * cmd


/n n是数字。

n代表自然数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成

*/10 * * * * cmd



=============================================

*/1 * * * * /bin/sh /scripts/data.sh

30 3,12 * * * /bin/sh /scripts/oldboy.sh

30 */6 * * *    /bin/sh /scripts/oldboy.sh

30 8-18/2 * * * /bin/sh /scripts/oldboy.sh

30 21 * * *最强大脑

45 4 1,10,22 * * /application/apache/bin/apachectl graceful

10 1 * * 6,0 /application/apache/bin/apachectl graceful

0,30 18-23 * * * /application/apache/bin/apachectl graceful

00 */1 * * * /application/apache/bin/apachectl graceful

#################

* 23,00-07/1 * * * /application/apache/bin/apachectl graceful

00 */1 * * *

00 11 * 4 1-3 /application/apache/bin/apachectl graceful

每周日上午9:30去老男孩教育上课

每天上午8:30去老男孩教育上课,这是脱产班的上课频率。



命令实例1:*/1 * * * * /bin/sh /scripts/data.sh

在本例中除了数字与命令脚本外,还使用到了符号"*",*号的意思“每一”。

第一列的意思为分钟,特殊符号“/”表示每隔的意思,即表示每隔一分钟执行/bin/sh /scripts/data.sh程序。

命令实例2:30 3,12 * * * /bin/sh /scripts/oldboy.sh

在本例中,第一列为30,表示30分钟;第二列为 3,12,这代表3点及 12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本。

命令实例3:30 */6 * * * /bin/sh /scripts/oldboy.sh

在本例中,第一列为30,表示30分钟;第二列*/6代表每6个小时,也相当于 6、12、18、24 的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。

命令实例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh

在本例中,其中的第一列为30,表示30分钟;第二列8-18/2代表在早晨8点到下午18点之间每隔2小时,也相当于把8、10、12、14、16、18单独列出。

那么,此定时任务的意思就是早晨8点到下午18点之间,每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。

命令实例5:30 21 * * * /application/apache/bin/apachectl graceful

本例表示每晚的21:30重启apache。

命令实例6:45 4 1,10,22 * * /application/apache/bin/apachectl graceful

本例表示每月1、10、22日的凌晨4 : 45分重启apache。

命令实例7:10 1 * * 6,0 /application/apache/bin/apachectl graceful

本例表示每周六、周日的凌晨1 : 10分重启apache。

命令实例8:0,30 18-23 * * * /application/apache/bin/apachectl graceful

本例表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

命令实例9:00 */1 * * * /application/apache/bin/apachectl graceful

本例表示每隔一小时整点重启apache

命令实例10:* 23,00-07/1 * * * /application/apache/bin/apachectl graceful

本例并不表示晚上23点和早上0-7点之间每隔一小时重启Apache。

要说明的是,以上结果是不规范的,也是不对的。大家想想为什么?

以上定时任务的第一列为*,表示每分都执行任务即晚上23点和早上0-7点之间每隔一小时的每分都重启Apache,很可怕吧。

命令实例11:00 11 * 4 1-3 /application/apache/bin/apachectl graceful

本例表示4月的每周一到周三的上午11点整重启Apache。

命令实例12:30 09 * * 0 去老男孩教育上课

本例表示每周日上午9:30去老男孩教育上课,这是周末班的上课频率。

命令实例13:30 08 * * *去老男孩教育上课

本例表示每上午8:30去老男孩教育上课,这是脱产班的上课频率。

通过上述13个例子,相信读者已经能够理解定时任务的配置规则了。



实践:

1、每分钟追加一次oldboy字符串到/tmp/oldboy.log里。


解答:大象放冰箱分三步

a.命令行执行成功。

[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log

[root@oldboyedu ~]# cat /tmp/oldboy.log

oldboy

[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log

[root@oldboyedu ~]# cat /tmp/oldboy.log

oldboy

oldboy

b.配置定时任务crontab -e 编辑配置

 [root@oldboyedu ~]# crontab -l

#####

* * * * * echo "oldboy">>/tmp/oldboy.log

c.检查

[root@oldboyedu ~]# tail -f /tmp/oldboy.log

oldboy

oldboy

oldboy


老男孩思想:

1)先输入* * * * *

2)先命令行操作成功。

3)拷贝命令到定时任务编辑里。



范例13-2:让服务器时间每5分钟和互联网时间做一次同步。

安装时间服务软件:yum install ntpdate -y

更新互联网时间/usr/sbin/ntpdate ntp1.aliyun.com


/dev/null黑洞设备

MH370>/dev/null

&>/dev/null等价>/dev/null 2>&1


[root@oldboyedu ~]# crontab -l

*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null



范例13-3:每天晚上0点,把站点目录/var/www/html下的内容打包备份到/data目录下,并且要求每次生成不同的备份包名。


至少分三步:

1.命令行稿成功

准备工作:

[root@oldboyedu ~]# mkdir /var/www/html /data -p

具体命令:

[root@oldboyedu ~]# tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

tar: Removing leading `/' from member names

/var/www/html/

[root@oldboyedu ~]# ll /data

total 4

-rw-r--r-- 1 root root 117 Mar 22 11:59 html_2019-03-22.tar.gz

2、编写定时任务

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

错了,不执行。。。。

看报错日志。。。错误日志

定时任务没有执行,出错了日志在哪里?

出错日志/var/log/cron

Mar 22 12:03:01 oldboyedu CROND[18770]: (root) CMD (tar zcvf /data/html_$(date +)


定时任务对%的要求,百分号要转义。\%


正确答案:

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +\%F).tar.gz /var/www/html/

优秀的答案(企业里):

1.命令行执行

cd /var/www

tar zcf /data/html_$(date +%F).tar.gz ./html

2.尽量用脚本文件实现

#mkdir /server/scripts -p #存放脚本的文件


运维规范:

脚本位置:/server/scripts

软件位置:/server/tools

编译位置:/application/软件名字-版本,然后要软链接。


cd /server/scripts

#cat bak.sh

cd /var/www

tar zcf /data/html_$(date +%F).tar.gz ./html

命令行执行:

/bin/sh /server/scripts/bak.sh

3、编辑定时任务

#bak html dir by oldboy at 2020108

00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null

[root@oldboyedu /server/scripts]# crontab -l|tail -2

#bak html dir by oldboy at 2020108

00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null

4、检查正式结果

[root@oldboyedu /server/scripts]# ls -l /data



13.5生产环境下的定时Cron书写要领

13.5.1要领1:为定时任务规则加必要的注释

13.5.2要领2:所有的定时任务尽量都以脚本的形式执行

13.5.3要领3:在执行的Shell脚本前加上/bin/sh

13.5.4要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1

13.5.5要领5:在指定用户下执行相关定时任务

13.5.6要领6:生产任务计划程序中不要随意打印输出信息,有输出的想法去掉。

13.5.7要领7:定时任务执行的脚本要存放到规范路径下

13.5.8要领8:配置定时任务要规范操作过程,减少出错

13.5.9要领9:定时任务脚本中程序命令及路径尽量用全路径

13.5.10要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)

13.5.11要领11:若脚本中调用了系统环境变量,要重新定义

13.5.11要领12:出错或无法执行,就检查/var/log/cron日志

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 已然不记得是几年前写过东西了。很久以前在一个很不知名的博客上写过。不知名,是因为想找到一片安静的,属于自己的空间,...
    小小禾子阅读 2,498评论 0 2
  • 我不畏惧暴力有声,只害怕良知沉默”,喜欢这句文案,是因为它是当今社会对于暴力所采取行为态度的一个浓缩,围观和沉默是...
    _肥皂__阅读 1,150评论 0 0
  • 喜欢上纪实摄影,是因为上世纪八十年代,在当时《陕西画报》社潘科老师的家里,看到一本马克+吕布的纪实摄影画册,被其摄...
    王家老四1阅读 3,938评论 0 0