sudo的含义及使用
sudo含义:尚方宝剑/大宝剑
可以让普通用户在执行某个或几个命令的时候临时成为root
如何使用
需要两个窗口 root oldboy(密码改成123456)
查看oldboy用户的sudo
[oldboy3@oldboy /home/oldboy2]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.##只有第一次会提示这个,意思是责任越大能力越大
[sudo] password for oldboy3: ##输入密码
Sorry, user oldboy3 may not run sudo on oldboy.##表示当前用户没有配置sudo
使用sudo需要输入当前用户密码
配置sudo
visudo ===vi /etc/sudoers
[root@oldboy ~]# visudo
root ALL=(ALL) ALL
oldboy ALL=(ALL) /bin/ls /bin/touch
oldboy1 ALL=(ALL) /bin/* !/bin/vim, !/bin/vi##!表示禁用
oldboy3 ALL=(ALL) NOPASSWD: ALL##表示oldboy用户所有命令使用sudo不需要输入密码
省略若干。。。。
[oldboy1@oldboy ~]$ sudo -l
[sudo] password for oldboy1:
User oldboy1 may run the following commands on oldboy:
(ALL) /bin/ls /bin/touch##已经配置sudo及
命令的路径可以使用\which 获取命令路径
[root@oldboy ~]# \which grep head tail
/usr/bin/grep
/usr/bin/head
/usr/bin/tail
使用sudo
sudo ls /root
重要
不要给普通用户配置所有命令,vi su -命令,因为普通用户可以直接切换到root.比较危险。只给他查看之类的命令
定时任务
分类:crontab(cronie)
CROND分类:用户定时任务与系统定时任务
系统定时任务重要目录
/etc/cron.hourly:系统定时任务每个小时运行这个目录里的内容
/etc/cron.daily:系统定时任务每天运行这个目录里的内容
/etc/cron.weekly:系统定时任务每周运行这个目录里的内容
/etc/cron.monthly:系统定时任务每个月运行这个目录里的内容
系统会自动运行里面的内容系统中毒的时候
定时检测
存放开机自启动
/etc/cron.deny定时任务的黑名单
/etc/crontab系统定时任务的配置文件之一
日志切割
含义:系统定时任务+logrotate命令 完成对 日志 日志的
日志切割/日志轮询(简单理解就是定时把日志进行拆分,为了不让日志过大)
[root@oldboy ~]# ll /var/log/messages* /var/log/secure* /var/log/cron*
-rw-------. 1 root root 45059 Apr 26 17:42 /var/log/cron
-rw-------. 1 root root 12073 Apr 10 09:15 /var/log/cron-20190410
-rw-------. 1 root root 172860 Apr 26 17:42 /var/log/messages
-rw-------. 1 root root 377944 Apr 10 09:15 /var/log/messages-20190410
-rw-------. 1 root root 30809 Apr 26 16:59 /var/log/secure
-rw-------. 1 root root 7412 Apr 30 2019 /var/log/secure-20190430
日志切割的配置文件
[root@oldboy ~]# ll /etc/cron.daily
total 8
-rwx------. 1 root root 219 Oct 31 03:12 logrotate
-rwxr-xr-x. 1 root root 618 Oct 30 22:55 man-db.cron
[root@oldboy ~]# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
个人定时任务
crontab -l===查看 当前用户的定时任务
crontab -e===配置定时任务
[root@oldboyedu59 ~]# crontab -l
no crontab for root===root用户没有定时任务
[root@oldboyedu59 ~]# crontab -e
no crontab for root - using an empty one===root用户没有定时任务 创建1个空的文件
3.crontab: installing new crontab===更新定时任务规则
配置例子:
[root@oldboy ~]# crontab -e
#show time by jiu at 20190203
*/2 * * * * date >>/tmp/time1.log##每两分钟执行一次
~
~
~
~
"/tmp/crontab.uBFaFG" 4L, 148C written
crontab: installing new crontab
[root@oldboy ~]# cat /tmp/time1.log
Fri Apr 26 18:34:01 CST 2019
Fri Apr 26 18:36:01 CST 2019
查看定时任务日志
[root@oldboy ~]# tail -f /var/log/cron
Apr 26 18:33:53 oldboy crontab[9975]: (root) BEGIN EDIT (root)
Apr 26 18:34:01 oldboy crond[6515]: (root) RELOAD (/var/spool/cron/root)
Apr 26 18:34:01 oldboy CROND[9979]: (root) CMD (date >>/tmp/time1.log)
Apr 26 18:36:01 oldboy CROND[9984]: (root) CMD (date >>/tmp/time1.log)
Apr 26 18:36:51 oldboy crontab[9975]: (root) REPLACE (root)
Apr 26 18:36:51 oldboy crontab[9975]: (root) END EDIT (root)
定时任务的格式
定时任务下的特殊符号
*表示每。例如*2表示每个两分钟
/表示隔。例如*/2表示每隔两分钟
-表示范围。例如08-11表示定时任务里表示8点到11点。
,表示不连接的范围 如1,3.表示1点和3点。
注意定时任务时间格式错误会有提示,如果脚本有问题退出定时任务的时候不会提示。
练习
每天晚上09点到12点运行 systemctl restart network 命令
00 21-23,00 * * * systemctl restart network
每天上午7点到12点每2个小时和晚上22点运行 systemctl restart network 命令
00 7-12/2,22 * * * * systemctl restart network
运维实际工作。每天晚上12点,打包备份/etc/目录到/tmp下面。
如何完成?
第一步:命令行测试 (测试命令是否ok)
[root@oldboy ~]# tar zcf /tmp/etc-`date +%F`.tar.gz /etc
tar: Removing leading `/' from member names
[root@oldboy ~]# ll /tmp
total 19972
-rw-r--r--. 1 root root 10219561 Apr 28 15:27 etc-2019-04-28.tar.gz
-rw-r--r--. 1 root root 10219561 Apr 28 15:27 etc-.tar.gz
-rw-r--r--. 1 root root 120 Apr 28 15:27 ip.log
[root@oldboy ~]# tar zxf /tmp/etc-2019-04-28.tar.gz -C /opt
[root@oldboy ~]# ll /opt
total 12
drwxr-xr-x. 80 root root 8192 Apr 28 08:54 etc
一定要检查看看备份能不能用,实际工作中很多备份了一年到网站出问题了却不能用。
第二步:书写脚本并测试脚本
[root@oldboy ~]# cat /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-`date +%F`.tar.gz /etc
测试脚本
[root@oldboy ~]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
[root@oldboy ~]# ll /tmp
total 19972
-rw-r--r--. 1 root root 10219561 Apr 28 15:41 etc-2019-04-28.tar.gz
第三步:写入定时任务先设置每分钟方便检查
[root@oldboy ~]# crontab -l
#bak /etc ---> /tmp gebf 20190428
* * * * * sh /server/scripts/bak-etc.sh
如何检查
看日志
[root@oldboy ~]# tail -f /var/log/cron
Apr 28 15:46:02 oldboy CROND[9185]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:46:46 oldboy crontab[9227]: (root) LIST (root)
Apr 28 15:47:01 oldboy CROND[9243]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:47:51 oldboy crontab[9290]: (root) BEGIN EDIT (root)
Apr 28 15:48:01 oldboy CROND[9302]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:48:02 oldboy crontab[9290]: (root) END EDIT (root)
Apr 28 15:49:01 oldboy CROND[9361]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:50:01 oldboy CROND[9419]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:51:01 oldboy CROND[9478]: (root) CMD (sh /server/scripts/bak-etc.sh)
Apr 28 15:52:01 oldboy CROND[9538]: (root) CMD (sh /server/scripts/bak-etc.sh)
看结果
[root@oldboy ~]# ll /tmp
total 59908
-rw-r--r--. 1 root root 10219561 Apr 28 15:50 etc-2019-04-28-50.tar.gz
-rw-r--r--. 1 root root 10219561 Apr 28 15:51 etc-2019-04-28-51.tar.gz
-rw-r--r--. 1 root root 10219561 Apr 28 15:52 etc-2019-04-28-52.tar.gz
-rw-r--r--. 1 root root 10219561 Apr 28 15:53 etc-2019-04-28-53.tar.gz
第4步-写入定时任务 根据要求修改时间
[root@oldboy ~]# crontab -l
#bak /etc ---> /tmp gebf 20190428
00 00 * * * sh /server/scripts/bak-etc.sh
在定时任务里面 每个命令或脚本 定向到空 或追加到文件
也就是定时任务中 执行的命令或脚本 的输出信息
原因
如果不定向到空或追加到文件
定时任务会以邮件的形式把 输出到屏幕的内容 发给你
You hava new mail in /var/spool/mail/root
预备知识
/dev/null 定向到黑洞
/dev/null 2>/dev/null 正确的信息 错误信息 定向到黑洞中
/dev/null 2>&1 正确的信息 错误信息 定向到黑洞中
&>/dev/null 正确的信息 错误信息 定向到黑洞中
追加到文件/tmp/cron.log 2>&1 正确的信息 错误信息 定向到文件中
如何写?
[root@oldboy ~]# crontab -e
#show time by jiu at 20190203
#* * * * * date +\%F-%w >>/tmp/time1.log >>dev/null 2>&1
#show time by2 ge at 20190204
#01 * * * * tar zcf /tmp/etc-`date +%T`.tar.gz /etc >>dev/null 2>&1
#bak /etc --> /tmp gebf 20190428
#* * * * * sh /server/scripts/bak-etc.sh >>/dev/null 2>&1
#print date ip a --> /tmp/ip.log
#* * * * * sh /oldboy/date.sh >>/tmp/ip.log 2>&1
#bak /etc ---> /tmp gebf 20190428
00 00 * * * sh /server/scripts/bak-etc.sh date >>/tmp/bak-etc.log 2>&1
企业故障案例:定时任务没有定向到空或追加到文件的故障
1.系统邮件服务开启
你就会不断收到邮件
You hava new mail in /var/spool/mail/root
2.系统邮件服务关闭(大部分情况)
把没有发送出去的邮件 临时放起来
/var/spool/postfix/maildrop (这个目录下面会有大量的小文件)
inode满了
故障演示】:You hava new mail in /var/spool/mail/root
邮件服务开启的时候
crontab -l
#print xxxx
* * * * * echo {1..100}
邮箱内容
Received: by oldboyedu59.localdomain (Postfix, from userid 0)
id 58C33405A0A6; Sun, 28 Apr 2019 11:28:01 +0800 (CST)
From: "(Cron Daemon)" <root@oldboyedu59.localdomain>
To: root@oldboyedu59.localdomain
省略若干
X-Cron-Env: <USER=root>
Message-Id: <20190428032801.58C33405A0A6@oldboyedu59.localdomain>
Date: Sun, 28 Apr 2019 11:28:01 +0800 (CST)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
【故障演示】系统邮件服务关闭(大部分情况)
把没有发送出去的邮件 临时放起来
定时任务内容:
此时定时任务 没有定向到空或追加到文件
crontab -l
#show cron errors by liyy at 20190101
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
* * * * * dae
查看日志
[root@oldboyedu59 ~]# tail /var/log/cron
Apr 28 11:48:34 oldboyedu59 CROND[32067]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32068]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32069]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32070]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32071]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32072]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32066]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32063]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32064]: (root) CMD (dae )
Apr 28 11:48:34 oldboyedu59 CROND[32065]: (root) CMD (dae )
查看临时目录
可以发现 邮件临时目录有大量小文件
日积月累会导致占用系统大量inode
[root@oldboyedu59 ~]# ll /var/spool/postfix/maildrop/|head -20
total 7208
-rwxr--r-- 1 root postdrop 447 Apr 28 11:48 003888026AC0
-rwxr--r-- 1 root postdrop 525 Apr 28 11:48 004DA8024270
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 0054D801F68B
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 005728025B34
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 0071F80268C6
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 0083C801F4DE
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 0084C8024D3B
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 00BDD8024F7E
-rwxr--r-- 1 root postdrop 526 Apr 28 11:48 00CB9802640D
-rwxr--r-- 1 root postdrop 525 Apr 28 11:48 00D0D8024006
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 00D1280253E9
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 00F4E80258F3
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 0164480253EA
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 018518026AC1
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 018BA802662F
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 019B08024F7F
-rwxr--r-- 1 root postdrop 448 Apr 28 11:48 01A45801F4DF
-rwxr--r-- 1 root postdrop 526 Apr 28 11:48 01B0B8025FAB
-rwxr--r-- 1 root postdrop 526 Apr 28 11:48 01BE680261D3
解决方案:定向到空或追加到文件
练习
每分钟 显示当前系统的时间和awk取出的ip地址 追加到 /tmp/ip.log中
[root@oldboy ~]# cat /server/scripts/ip.sh
#!/bin/bash
date +%F-%M
[root@oldboy ~]# crontab -l
#bak date ip > /tmp/ip.txt
\* * * * * sh /server/scripts/ip.sh >>/tmp/ip.txt 2>&1
[root@oldboy ~]# cat /tmp/ip.txt
2019-04-28-44
10.0.0.200
2019-04-28-45
10.0.0.200
2019-04-28-46
10.0.0.200
2019-04-28-47
10.0.0.200
2019-04-28-48
10.0.0.200
2019-04-28-49
10.0.0.200
ip命令要使用绝对路径的原因
定时任务运行脚本的时候 PATH只识别/usr/bin/和/bin下面的命令
解决:
脚本开头 重新设置PATH
. /etc/profile或source /etc/profile
1.1 定时任务练习题
1.1.1 选择
1.1.1.1 Linux下Crontab文件,每个域之间用空格分割,其排列如下正确的是:(B)
MIN HOUR DAY MONTH YEAR COMMAND
MIN HOUR DAY MONTH DAYOFWEEK COMMAND
COMMAND HOUR DAY MONTH DAYOFWEEK
COMMAND YEAR MONTH DAY HOUR MIN
1.1.1.2 编辑root任务调度命令vim /var/spool/cron/root
crontab -l
crontab -E
vim /var/spool/cron/root
1.1.1.3 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,其基本格式为:分时日月周command(命令),其中第五个星号代表(周)
- command >/dev/null 2>&1
- command &>/dev/null
- command >>/tmp/log 2>&1
- command 2>/tmp/log
1.1.1.4 以下crontab命令在何时会执行(D)
05 01 * * 1 sh /data/nginx_log/ftp_nginxlog.sh >/dev/null/ 2>&1
每天一点五分 每天五点一分 每星期一五点一分 每星期一一点五分
1.1.2 填空
1.1.2.1 由crontab命令定制()执行test用户家目录下的程序sum的格式为
- /home/test/sun >/dev/null 2>&1
- /home/test/sun &>dev/null
1.1.2.2 Linux系统计划任务编辑命令
crontab -e等于vim /var/spool/cron/root
编辑定时任务。一般都使用命令因为他有简单的语法检查
1.1.3 简答
1.1.3.1 以下字段可能和哪个服务有关,表示什么意思
*/5 * * * * ping -c 100 www.wanmei.com > /root/network.log 2>&1
和cron服务有关
表示:每隔五分钟ping 100次 www.wanmei.com。并且把正确的和错误的信息到定向到/root/network.log 每次这个文件都会被清空
1.1.3.2 如何备份生产环境的定时任务?(生产环境的定时任务默认跑在root用户下)
就是如何备份/var/spool/cron或者/var/spool/cron/root
cp备份不推荐
tar备份推荐用
1.1.3.3 写一条计划任务,在每天晚上的3:05分执行脚本/usr/script/tongji.sh
meitian lingcen3:05 zhixing tongji.sh
05 03 * * * sh /usr/script/tongji.sh >/dev/null 2>&1
1.1.3.4 crontab里0 2 * * 1 /data/postmall/shell/a.sh表示什么含义?
每周1的2点整执行 /data/postmall/shell/a.sh
1.1.3.5 写一条crontab条目,每天的22点钟删除/test/下的所有文件
mei tian 22dian rm/test/*
00 22 * * * rm -rf /test/* >>/tmp/log 2>&1
1.1.3.6 某系统管理员需每天做一定的重复工作,请按照下列要求,编织一个解决方案:
(1) 在下午4:50删除/abc目录下的全部子目录和全部文件
xiawu 4:50 rm /abc/*
50 16 * * * rm -rf /abc/* >>/dev/null 2>&1
(2) 每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz
bak /date/* tar
50 17 * * 1 tar zcf ./backup-date +\%F
.tar.gz /data >/dev/null 2>&1
1.1.3.7 在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句
15 03 * * 6 sh /home/shell/collect.pl >/dev/null 2>&1
1.1.3.8 设计一个shell程序,每月第一天执行
00 00 1 * * tar zcf /tmp/etc-
date +%F
.tar.gz /etc >>
1.1.3.9 有一个/opt/backup.sh脚本,如何在10月的每天早上06到18每3小时执行并在13点单独执行一次。
backup
00 06-18/3,13 * 10 * sh /opt/backup.sh
1.1.3.10每个月的一号,零点十五执行脚本/usr/bin/httpd.sh,如何实现?
EXEC httpd
15 00 1 * * sh /usr/bin/httpd.sh >/dev/null 2>&1
1.1.3.11在11月份内,每天的早上6点到12点中,每隔2小时执行一次/ust/bin/httpd.sh 怎么实现
exec httpd by gebf at 201911
00 6-10/2 * 11 * sh /usr/bin/httpd.sh >dev/null 2>&1
1.1.3.12linux服务器,如何实现每天早上5点重启
reboot
00 05 * * * /sbin/reboot
1.1.3.13在11月份每天早晨6点到10点 每隔两个小时 执行/usr/bin/httpd.sh
00 06-10/2 * 11 * sh /usr/bin/httpd.sh
1.1.3.14/var/www/html/是网站的发布目录。如何每天凌晨0点30对其进行自动备份。写出操作步骤?
30 00 * * * tar zcf /tmp/htm1-
date +%F
.tar.gz /var/www/html/
1.1.3.15用一普通用户想在每周日零点零分定期备份/user/backup 到 /tmp 目录下,该用户应如何做?
00 00 * * 7 tar zcf /tmp/backup-
date +%F
.tar.gz /user/backup
1.1.3.16Unix系统上需要创建以下crontab定时任务:在每周5的凌晨1:10执行命令,将当时系统中含有“asiainfo” 关键字的进程信息查询处理,并追加记录到/progress.log文件中
10 01 * * 5 ps -ef |grep 'asiainfo' >>/progress.log
1.1.3.17在每个月的第一天备份并压缩/etc目录下的所有内容,存放在/root/backup 目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
00 00 1 * * tar zcf /root/backup/etc-
date +%Y%m%d
.tar.gz
/etc
1.1.3.18说一下crontab的配置,尽可能多的写出来
crontab -e 配置定时任务。定时任务的格式为
分时日月周 命令
1.1.3.19以下字段可能和那个服务有关,表示什么意思
*/5 * * * * ping -c 100 ue.game.com > /root/network.log 2>&1
每个五分钟ping 100次这个ue.game.com网站,并把正确和错误结果到写入到/root/network.log 文件里
1.1.3.20/var/www/html/是网站的发布目录。如何每天凌晨0点30对其进行自动备份,写出操作步骤
30 00 * * * tar zcf /tmp/htm1-date +%F.tar.gz /var/www/html/
1.1.3.21请写出一条计划任务,每天将文件倒数1000行内容在10:00整的时候追加到/tmp的list文件内
00 10 * * * tail -n1000 >> /tmp/list