07Linux常用命令(软件包安装、定时任务、日志轮转)

Linux常用命令(软件包安装、定时任务、日志轮转)

安装软件
rpm【管理方式】
yum

rpm介绍:

rpm软件包名称:
软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律
#有依赖关系,不能自动解决依赖关系。
举例:openssh-6.6.1p1-31.el7.x86_64.rpm  
数字前面的是名称
数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。  
noarch : 32位64位都支持
x86_64 :  64位
i4-686的包 :32位
devel:表示这个RPM包是软件的开发包;
======

#用rpm安装需要考虑如下信息:
1.需要考虑系统的版本需要与rpm对应
2.系统的架构:如32位还是64位
3.需要考虑依赖关系

rpm安装

语法 # rpm -ivh 软件包名称
-i 表示安装,instll的意思
-v显示安装信息,还可以”-vv”、vvv”, v提供的越多显示信息越多
-h显示安装进度,以#显示安装的进度
-U 升级或升级包
-F 只升级己安装的包
-test 测试是否能够成功安装指定的rpm包
-force 强制动作
--replacepkgs 替换安装,即重新覆盖安装
查找rpm包的网站:http://rpmfind.net/  http://pkgs.org
1.通过rpm安装
可以先下载下来
[root@xiaoqiang ~]# wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-2017.3.23-11.el7.x86_64.rpm
#wget下载命令
#wget -O 指定存放路径
[root@xiaoqiang ~]# rpm -ivh ntfs-3g-2017.3.23-11.el7.x86_64.rpm  #本地安装rpm包

2.直接通过连接安装rpm包
[root@xiaoqiang ~]# rpm -ivh http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-2017.3.23-11.el7.x86_64.rpm

3.升级与更新RPM软件包
升级:rpm -Uvh package_name,如果后面接的软件没有安装过,则系统直接安装;如果安装过,则系统自动更新至新版。
更新:rpm -Fvh package_name,如果后面接的软件没有安装过,则软件不会被安装;如果安装过,则系统自动更新至新版。

rpm查询

==查询   
(从本地的rpm数据库)
-q[p] -q查询已安装的包,-qp查询未安装的包。它们都可接下面的参数
	-a 查询所有已安装的包,也可以指定通配符名称进行查询
	-i 查询指定包的信息(版本、开发商、安装时间等)。从这里面可以查看到软件包属于哪个包组。
	-l 查询包的文件列表和目录(包在生产的时候就指定了文件路径,因此可查未装包)
	-R 查询包的依赖性(Required)
	-c 查询安装后包生成的配置文件
	-d 查询安装后包生成的帮助文档
-f 查询系统文件属于哪个已安装的包(接的是文件而不是包)
--scripts 查询包相关的脚本文档。脚本文档分四类:安装前运行、安装后运行、卸载前运行、卸载后运行


# rpm -qa | grep 软件名    # 查找软件是否安装
# rpm -ql httpd           #查询http安装的文件与目录所在完整文件名(list
# rpm -qf /usr/share/httpd/noindex     #查询该文件属于哪个包
# rpm -qf /etc/passwd  #查询某一个文件是哪个软件产生的:只能查询已经安装好的软件

# rpm -qRp zip-3.0-1.el6.x86_64.rpm 查询某个未安装包的依赖性如zip-3.0-1.el6.x86_64.rpm的依赖性

rpm卸载软件包

语法:# rpm -e 软件名称
-e erase
--nodeps 忽略依赖性强制安装或卸载(no dependencies)
rpm -e `rom -qa | grep nginx`

rpm工具管理软件包总结:
1. 很难解决包依赖关系 
2. 如果某个文件没有,很难知道它由哪个rpm包提供

如果该package被其他package依赖,会有报错.
如果RPM文件经常安装/删除/升级,某些操作可能会导致RPM数据库/var/lib/rpm/内的文件损坏,可以使用—rebuilddb这个参数来重建数据库:
rpm –rebuilddb

安装包后的文件分布

rpm包被安装后,会在/var/lib/rpm下会建立己装rpm数据库,以后有任何rpm的升级、查询、版本比较等包的操作都是从这个目录下获取信息并完成 相应操作的。
rpm安装完成后,相关的文件会复制到多个目录下(具体复制的路径是在制作rpm包时指定的)。一般来说,分布形式差不多如下表。
/etc	放置配置文件的目录
/bin> /sbin、/usr/bin 或/usr/sbin	一些可执行文件
/lib、 /lib64、 /usr/1ib(/usr/lib64)	-些库文件
/usr/include	-些头文件
/usr/share/doc	一些基本的软件使用手册与帮助文件
/usr/share/man	一些man page档案

yum方式管理

#可以自动解决rpm软件依赖关系,虽然是通过yum安装的但是最后执行的还是rpm,也就是说没有rpm命令yum也就不能用了。yum /et	
分类:本地yum和远程yum
本地yum:
file://
远程yum:
http://
ftp://

yum操作

安装好环境之后我们有centos自带的官方yum源,我们也可以自行更换或者制作自己的yum源
格式:yum [options] COMMAND

清理yum缓存:#yum clean all

缓存软件包信息,提高搜索/安装软件的速度:# yum makecache fast
    
查询yum源信息: # yum repolist  all 列出所有仓库
    #yum repolist  
列出包的依赖关系:# yum deplist
        
查找软件:# yum search  mysql   
此命令会搜索到系统已经安装和yum源里没有安装的软件信息,可以用他简单测试yum是否好用

查看命令属于哪个软件(包):# yum provides rz    

查看系统已经安装好的软件和没有安装的软件(源里存在即可查到):# yum list all #一般会结合grep来搜索包,如yum list all | grep -i zabbix
安装软件:# yum install 软件名称
        # yum install mysql mysql-server -y			
重装:# yum -y reinstall 软件名        
    
卸载软件:# yum erase  mysql-server 
	    # yum -y remove mysql-server

yum卸载rpm查找出来所有与httpd相关的软件包全部卸载掉:# yum -y remove `rpm -qa | grep httpd` 

本地包安装:#yum localinstall -y *.rpm 

查看装的包的命令,排错:#yum history 
                      #yum history undo 22

更新包:#yum update 

检车是否有可更新的rpm软件:#yum check-update 

查看软件包信息:#yum info 软件包名称   




安装yum-config-manager命令
系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令
yum -y install yum-utils  --yum扩展
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum源配置

yum需要记住的目录或文件:
/etc/yum.repos.d/ #存放yum源目录,该目录里面的文件必须以.repo结尾
/etc/yum.conf #yum配置文件
/etc/cache/yum  #yum的包缓存的目录

更换网络yum源–aliyun

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11WaK1yM  --阿里yum源地址
[root@xiaoqiang ~]# cd /etc/yum.repo.d
[root@xiaoqiang yum.repos.d]# mkdir back
[root@xiaoqiang yum.repos.d]# mv *.repo back
[root@xiaoqiang yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  #下载aliyun的yum源
参数解释
curl -o  指定存放路径
或者
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装扩展源--epel.repo
[root@xiaoqiang ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@xiaoqiang ~]# cd /etc/yum.repos.d/
[root@xiaoqiang yum.repos.d]# ls
CentOS-Base.repo  epel.repo

制作本地Yum源方式

yum仓库模板

#vim CentOS-Base.repo
[base]	#仓库ID, ID必须保证唯一性
name	#仓库名称,可随意命名
mirrorlist	#该地址下包含了仓库地址列表,包含一个或多个镜像站点,和baseurl使用一个就可以了
baseurl	#仓库地址。网络上的地址则写网络地址,本地地址则写本地地址,格式为"file://”后接路径,如file:///mnt/cdrom
gpgcheck=l	#指定是否需要gpg签名,1表不需要,0表示不需要
gpgkey =	#签名文件的路径
enable	#该仓库是否生效,enable=l表示生效,enable=O表示不生效
cost=	#开销越高,优先级越低




repo配置文件中可用的宏:
$releasever	:程序的版本(release version),对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6. 5则替换为6
$arch:系统架构
$basharch:	系统基本架构,如i686, i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用

通过镜像制作本地yum源:

mkdir /opt/xiexie #创建挂载目录
mount /dev/cdrom /opt/xiexie #将镜像挂载到创建的目录
或者:将镜像上传到/opt/ 并mount CentOS-7-x86_64-DVD-1708.iso /opt/xiexie/
#rm -rf /etc/yum.repos.d/*

#手动编写文件
[root@xiaoqiang ~]# cd /etc/yum.repos.d/   #yum源配置文件存放目录
[root@xiaoqiang yum.repos.d]# vim CentOS.Base.repo  #在编写yum配置文件是必须是.repo
[centos7u4]  #yum源区别名称,用来区分其他的yum源,
name=centos7u4  #yum源描述   yum源名字
baseurl=file:///opt/xiexie #指定本地yum源的路径,镜像挂载目录
enabled=1  #是否使用此yum源(1为打开,0为关闭)
gpgcheck=0 #检查软件

#自动生成yum源
#yum-congif-manager 
##yum install -y yum-utils   
#yum-congif-manager --add-repo 'file:///mnt'

yum排错:

1.yum配置文件必须以.repo结尾      
2.yum.conf里面8,9行的值设置成0
3.配置文件关键字错误
4.检查yum源是否存在
5.baseurl路径是否正确
6.镜像大小是否正确
7.当有Yum进程存在的时,无法同时再打开一个Yum进程

配置****epel****仓库

系统发行商在系统中放置的rpm包一般版本都较老,可能有些包有较大的延后性。而epel是由fedora社区维护的高质量高可靠性的安装源,有很多包 是比系统包更新的,且多出很多系统没有的包。总之,用到epel的机会很多很多,所以就拿来当配置示例了。
#注意:安装yum install yum-priorities
Yum Priorities 插件可以用来强制保护源。它通过给各个源设定不同的优先级,使得系统管理员可以将某些源(比如 Linux 发行版的官方源)设定为最高优先级,从而保证系统的稳定性(同时也可能无法更新到其它源上提供的软件最新版本)。

有两种方式可以使用epel源。
查询版本安装:yum provides epel-release
方法一: 安装 epel-release-7-11.noarch 或者 epel-release
repo文件的配置格式如下:
shell> rpm -ivh epel-release-latest-6.noarch.rpm
安装后会在/etc/yum. repo, d/目录下生成两个epel相关的repo文件,其中一个是epel. repo«此文件中epel的源设置在了 fedora的镜像站点上,这 对国内网来说可能会较慢,可以修改它为下面的内容。
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirrors, sohu. com/fedora-epel/6Server/$basearch/
#mirrorlist=https://mirrors, fedoraproject, org/metalink?repo=epel-6&arch=$basearch
failovermethod=priori ty
enabled=l
gpgcheck=l
gpgkey=file:///etc/pk i/rpm-gpg/RPM-GPG-KEY-EPEL-6

方法二:直接增加epel仓库
在/etc/yum. repos, d/下任意一个repo文件中添加上epel的仓库即可。
[epel]
name=epel
baseurl=http://mirrors, sohu. com/fedora-epel/6Server/$basearch/
enabled=l
gpgcheck=O
然后清除缓存再建立缓存即可。
yum clean all ; yum makecache

源码包管理:

而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。
源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。
源码安装的优点,编译安装过程,可以设定参数按照需求增加功能,进行安装,并且可以指定安装的版本,可以指定安装路径,灵活性比较大。

获得源码包途径 官方网站,可以获得最新的软件包

mysql: http://www.mysql.com/

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz

Nginx: www.nginx.org /mariadb

安装源码包 
准备工作(去Nginx官网下载Nginx软件的源码包) 
1.编译环境如编译器gcc、make 
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel  #编译环境的准备

gcc是编译工具,编译单个文件
make工具可以看成是一个智能的批处理工具,通过调用makefile文件中用户指定的命令来进行编译和链接的。(将这种高级语言写的代码编译成二进制语言)
pcre支持正则表达式
zlib-devel,有些应用依赖于这个库才能正常运行,因此需要安装zlib-devel
openssl-devel 某些库文件等跟开发相关的东西。

2. 准备软件 nginx-1.16.0.tar.gz 
3. 部署安装Nginx软件服务
实战:                                                                       
[root@xiaoqiang ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@xiaoqiang ~]# tar xzf nginx-1.16.1.tar.gz
[root@xiaoqiang nginx-1.16.1]# ./configure --user=www --group=www --prefix=/usr/local/nginx
[root@xiaoqiangr nginx-1.16.1]# make  #编译文件
[root@xiaoqiang nginx-1.16.1]# make install  #安装文件
[root@xiaoqiang ~]# useradd www   #创建nginx用户
[root@xiaoqiang ~]# /usr/local/nginx/sbin/nginx  #启动nginx
[root@xiaoqiang ~]# systemctl stop firewalld  #关闭防火墙


停止nginx
[root@xiaoqiang nginx-1.16.1]# /usr/local/nginx/sbin/nginx -s stop
不同的程序,其conf igure选项不尽相同,应使用/configure—heIp”获取具体的信息。
详解源码安装三步曲 
# ./configure   #相对路径执行安装

 a. 指定安装路径,例如 --prefix=/usr/local/nginx     
 b. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求    最终生成:Makefile
 c. 软件模块或者功能的启用禁用

#make			  //按Makefile文件编译,产生可执行的文件。但是这个文件在当前目录中

#make install	    //按Makefile定义的文件路径安装,将产生的可执行文件,安装到合适的位置,相当于拷贝

#将安装路径做环境变量

时间自动同步阿里云

yum  install -y ntpdate
ntpdate ntp6.aliyun.com

局域网远程yum源制作(企业案例)

操作系统:centos7.4

资源: CentOS-7-x86_64-DVD-1708.iso镜像
实验服务器两台:

192.168.246.170  (作为vsftpd服务端)

192.168.246.169  (客户端)

首先测试两台主机可否ping通

在192.168.246.170上操作
[root@192 ~]# ping 192.168.246.169
PING 192.168.246.169 (192.168.246.169) 56(84) bytes of data.
64 bytes from 192.168.246.169: icmp_seq=1 ttl=64 time=0.644 ms
[root@192 ~]# systemctl stop firewalld
[root@192 ~]# setenforce 0  #关闭selinux

在192.168.246.169上操作:
[root@xiaoqiang ~]# ping 192.168.246.170
PING 192.168.246.170 (192.168.246.170) 56(84) bytes of data.
64 bytes from 192.168.246.170: icmp_seq=1 ttl=64 time=0.374 ms
[root@xiaoqiang ~]# systemctl stop firewalld
[root@xiaoqiang ~]# setenforce 0

==========================================================
在192.168.246.170上操作---制作本地yum源,作为yum服务端

将CentOS-7-x86_64-DVD-1708.iso 上传到/opt目录下

[root@192 ~]# mkdir /opt/yum-iso   #创建挂载点

[root@192 ~]# mount /opt/CentOS-7-x86_64-DVD-1708.iso /opt/yum-iso/

[root@192 ~]# yum install -y vsftpd

[root@192 ~]# systemctl start vsftpd

[root@192 ~]# cp -r /opt/yum-iso/* /var/ftp/pub/

[root@192 ~]# cd /var/ftp/

[root@192 ftp]# yum install -y createrepo

[root@192 ftp]# createrepo pub/

[root@192 ftp]# cd /etc/yum.repos.d/
[root@192 yum.repos.d]# vim myyum.repo
[ftpYum]
name=ftpYum
baseurl=file:///opt/yum-iso
enabled=1
gpgcheck=0
[root@192 yum.repos.d]# yum clean all
[root@192 yum.repos.d]# yum makecache
[root@192 yum.repos.d]# yum repolist 
===================================================================
yum客户端
在192.168.246.169上操作:
[root@xiaoqiang ~]# cd /etc/yum.repos.d/
[root@xiaoqiang yum.repos.d]# vim my.repo
[ftpYum]
name=centos
baseurl=ftp://192.168.246.170/pub
enabled=1
gpgcheck=0
[root@xiaoqiang yum.repos.d]# yum clean all
[root@xiaoqiang yum.repos.d]# yum makecache
[root@xiaoqiang yum.repos.d]# yum repolist

计划任务

计划任务概念解析

在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、crontab软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。

计划任务分为一次性和循环性的计划任务

一、一次调度执行-----at

yum install -y at

作用:  计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据 

一次性调度执行 at—实战

时间定义:

at允许使用一套相当复杂的指定时间的方法。
● 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
● 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
● 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm
● 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009-03-1
● 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm + 3 days
● 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
语法格式
at <时间规格>
  now +5min
  teatime tomorrow (teatime is 16:00) noon
  5pm august 3 2019 
  
  
#● atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号、日期、小时、队列和用户名
#● atrm:根据Job number删除at任务
#● batch:在系统负荷允许的情况下执行at任务,换言之,就是在系统空闲的情况下才执行at任务
# at 5pm+3 days    #三天后的下午5点,执行 /bin/ls
at> /bin/ls
at> 
job 7 at 2016-01-08 17:00

# at 17:20 tomorrow    #明天17点钟,输出时间到指定文件内
at> date >/root/date.log         
at> 
job 8 at 2016-01-06 17:20


# atq      #查看任务
8       2016-01-06 17:20 a root
7       2016-01-08 17:00 a root

# atrm 7     #删除任务

# atq 
8       2016-01-06 17:20 a root

# 指定在今天下午5:30执行某命令。以下命令格式,结果都一样:

# at 5:30pm 

# at 17:30 

# at 17:30 today 

# at now + 5 hours 

# at now + 300 minutes 

# at 17:30 24.2.99 

# at 17:30 2/24/99 

# at 17:30 Feb 24 

# at -f /home/test/work 4pm + 3 days     #在三天后下午4点执行文档work中的作业
#at sunday +10 minutes 将工作安排在比当前时间晚十分钟的下一个星期日进行:
# at 12:30 102120   安排作业在2020年10月21日12:30运行:
#at now +1 hours安排一个作业从现在开始运行一小时:

您也可以在中[[CC]YY]MMDDhhmm[.ss]使用-t选项指定时间和日期。这是一个例子:

at -t 202005111321.32

#查看计划任务 at -l
例1: 
[root@xiaoqiang ~ ]# yum -y install at
[root@xiaoqiang ~]# systemctl status atd    #查看启动状态
[root@xiaoqiang ~ ]# systemctl start atd		#首先要启动服务

[root@xiaoqiang ~]# at now +1min    #一分钟后开始执行
at> useradd uuuu  
at> <EOT>     	#Ctrl+D
job 1 at Sat Mar 21 22:34:00 2015

[root@xiaoqiang ~]# id uuuu

从命令行输入at

例2: 
[root@xiaoqiang ~]# vim at.jobs 
useradd u99 
useradd u00 
touch /a.txt

[root@xiaoqiang ~]# at 20:33 < at.jobs

从文件输入at

例3:
1. 准备sudo用户
[root@xiaoqiang ~]# id xiexie
uid=1007(xie) gid=1012(xie) groups=1012(xie)
[root@xiaoqiang ~]# useradd xiexie  #如果不存在创建
#usermod -aG wheel xiexie
[root@xiaoqiang ~]# visudo
  91 ## Allow root to run any commands anywhere
  92 root    ALL=(ALL)       ALL
  93 xie    ALL=(ALL)       NOPASSWD: ALL  #添加内容

[root@xiaoqiang ~]# su - xiexie 
2. 以sudo 用户jack创建at任务
   [jack@xiaoqiang ~]$ vim xiexie.at
   sudo useradd u200
   sudo useradd u300
   sudo touch /home/xiexie.txt
   [jack@xiaoqiang ~]$ at 20:38 < xiexie.at                                   

循环调度执行cron 用户级

linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
###管理方式: 
crontab -l	List the jobs for the current user. //列出当前用户的计划任务
crontab -r	Remove all jobs for the current users. //删除当前用户所有的计划任务
crontab -e	Edit jobs for the current user.  	//编辑当前用户的计划任务
crontab -i:删除条目时提示是否真的要删除
管理员可以使用 -u username, 去管理其他用户的计划任务
丢了就在这里找看看:/var/log/cron

命令:
crond是允许接受选项的。
crond [-n][-円[-x flags]
-n:让crond以前端方式运行,即不依赖于终端。
-P:不重设环境变量PATH,而是从父进程中继承。
-X:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch”。
:其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。
先看看启动脚本启动crond的方式。

例如:
crontab -u root -l # root 查看自己的 cron 计划任务
crontab -u san -r # root 想删除 san 的 cron 计划任务
安装软件
  #  yum -y install crontabs  #如果软件不存在安装
启动服务
    rhel5/6:
#  /etc/init.d/crond status
#  /etc/init.d/crond start

    rhel7:
#  systemctl start crond.service
#  systemctl status crond.service
#  systemctl enable crond.service

开机启动(rhel5/6)
# chkconfig crond on

# systemctl status crond.service  #查看服务状态

# ps -ef | grep crond 
root        755      1  0 20:18 ?        00:00:00 /usr/sbin/crond -n

#crond进程每分钟会处理一次计划任务

存储位置:
# cd /var/spool/cron/

语法格式 :        (一个月中的某天)           星期几
Minutes   Hours    Day-of-Month    Month    Day-of-Week    Command 
 分钟	     小时	        日()	   月		周(星期)	执行的命令,最好是命令的绝对路径
 0-59	  0-23  	  1-31         1-12	      0-7
* * * * *  /usr/bin/mkdir /opt/`date +%F-%X`代表每分钟都执行
*/5 * * * * 每五分钟执行


时间:
*:使用”*”表示每单位,即每分钟,每小时,每天,每月,每周几(仍然是每天)。

*/5 每隔分钟
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”[表示,:不同的时间段]

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”[表示范围]

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

实战

[root@xiaoqiang ~]# vim /home/soso.sh
#!/bin/bash
touch /opt/a.txt
[root@xiaoqiang ~]# chmod +x /home/soso.sh

创建计划任务

[root@xiaoqiang ~]# crontab -e			//当前用户编写计划任务
每天6:00执行
0 6 * * *  /home/soso.sh

每周六凌晨4:00执行
0 4 * * 6  /home/soso.sh

每天0:30
30 0 * * *    /home/soso.sh
每周一到周五8:00,每周一到周五9:00
0 8,9 * * 1-5   /home/soso.sh

每周六23:59
59 23 * * 6      /home/soso.sh

[root@xiaoqiang ~]# crontab -l      #列出计划任务

实例

00 00 * * * /home/soso.sh			#每天凌晨

00 02 * * * ls			            #每天2:00整 

00 02 1 * * ls  			        #每月1号2:00整 

00 02 14 2 * ls	                    #每年2月14号2:00整

00 02 * * 7 ls  			        #每周日2:00整 

00 02 * 6 5 ls  			        #每年6月的周五2:00整

00 02 * * * ls			            #每天2:00整 

*/5 * * * * ls				        #每隔5分钟 

00 02 1,5,8 * * ls		                #每月1,5,8号的2:00整 

00 02 1-8 * * ls                    #每月1到8号的2:00整
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart

使用其他用户创建

[root@xiaoqiang ~]# crontab -u jack -e  #使用jack用户创建
[root@xiaoqiang ~]# crontab -u jack -l  #查看jack用户的计划任务
[root@xiaoqiang ~]# crontab -r  #删除当前用户的计划任务
[root@xiaoqiang ~]# crontab -u jack -r #删除jack用户的计划任务
使用者权限文件:
文件:
/etc/cron.deny
说明:
该文件中所列用户不允许使用crontab命令

文件:
/etc/cron.allow(优先级比cron.deny高)
说明:
该文件中所列用户允许使用crontab命令

系统本身的计划任务
 /etc/crontab

日志轮转

审计日志(赚钱)。诊断日志(排错)

日志重要性

Linux系统日志对管理员来说,是了解系统运行的主要途径,因此需要对 Linux 日志系统有个详细的了解。

Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息,这些各种信息都应该记录到日志文件中,完成这个过程的程序就是 rsyslog,rsyslog 可以根据日志的类别和优先级将日志保存到不同的文件中。

二、日志系统rsyslog

日志管理基础

rsyslog 日志管理 systemctl status rsyslog #vi /etc/rsyslog.conf
logrotate日志轮转 #1:不希望日志变得太大 2:安全 vim /etc/logrotate.d

**一、处理日志的进程 **

rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron... httpd/nginx/mysql: 可以自己的方式记录日志
[root@xiaoqiang ~]# ps aux |grep rsyslogd
root        752  0.0  0.2 216440  5548 ?        Ssl  20:18   0:00 /usr/sbin/rsyslogd -n

日志配置主文件:
/etc/rsyslog.conf 

二、常见的日志文件(系统、进程、应用程序)

#tail -f /var/log/messages		        	#动态查看日志文件的尾部,系统主日志文件

#tail -f /var/log/secure		            #记录认证、安全的日志

tail /var/log/maillog			            #跟邮件postfix相关

tail /var/log/cron			                #crond、at进程产生的日志

tail /var/log/dmesg			              	#和系统启动相关

tail /var/log/yum.log                       #yum的日志

tail -f /var/log/mysqld.log                 #MySQL日志

tail /var/log/xferlog                  		#和访问FTP服务器相关

/var/log/boot.log                           #系统启动过程日志记录存放

[root@xiaoqiang ~]#w					   #当前登录的用户 /var/log/wtmp

[root@xiaoqiang ~]#last				   #最近登录的用户 /var/log/btmp
第一列,用户名;
第二列,终端位置,/pts/0 (伪终端)意味着从诸如ssh或者telnet的远程链接的用户,tty(teletypewriter)意味着直接连接到计算机或者本地链接的用户;
第三列,登录的ip或者内核。
第四列,开始时间;
第五列,结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)[root@xiaoqiang ~]#lastlog			   #所有用户的登录情况 /var/log/lastlog

日志优先级

日志级别分为:7种日志级别代号0-7

0 debug             #有调试信息的,日志信息最多

1 info              #一般信息的日志,最常用

2 notice            #最具有重要性的普通条件的信息

3 warning           #警告级别

4 err               #错误级别,阻止某个功能或者模块不能正常工作的信息

5 crit              #严重级别,阻止整个系统或者整个软件不能工作的信息

6 alert             #需要立刻修改的信息

7 emerg             #内核崩溃等严重信息

none                #什么都不记录

三、logrotate日志轮转

什么是日志轮转? 自动切日志
注:可以针对任何日志文件(rsyslog 日志、Nginx访问或错误日志...)
一、logrotate (轮转,日志切割) 
1. 如果没有日志轮转,日志文件会越来越大
2. 将丢弃系统中最旧的日志文件,以节省空间 
3. logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
logrotate 配置文件:
主配置文件:/etc/logrotate.conf (决定每个日志文件如何轮转)
配置日志轮转# vim /etc/logrotate.d 子配置文件

[root@xiaoqiang ~]# vim /etc/logrotate.conf	 主配置文件
weekly     			#轮转的周期,一周轮转,单位有年,月,日 
rotate 4			#保留4份 
create				#轮转后创建新文件 
dateext             #使用日期作为后缀 
#compress			#日志轮替时,旧的日志进行压缩 
include /etc/logrotate.d  			 #包含该目录下的配置文件,会引用该目录下面配置的文件

/var/log/wtmp {			          	#对该日志文件设置轮转的方法    
 monthly			                #一月轮转一次  
 minsize 1M	 #maxsize size		            	#最小达到1M才轮转,否则就算时间到了也不轮转
 create 0664 root utmp		        #轮转后创建新文件,并设置权限   
 rotate 2			                #保留2份 
}

/var/log/btmp {    
 missingok			              	#丢失不提示    
 monthly			                
 create 0600 root utmp		        
 rotate 1			                
} 

实战案例

例1:轮转文件/var/log/yum.log

[root@xiaoqiang ~]# vim /etc/logrotate.d/yum	   
/var/log/yum.log {
 missingok                                #丢失不提醒
 #notifempty                              #空文件不轮转 
 #size 30k									#只要到了30k就轮转
 #yearly
 daily      y                               #每天轮转一次   
 rotate 3      
 create 0644 root root 
}
/logrotate /etc/logrotate.conf	  #手动轮转
测试:logrotate 
[root@xiaoqiang ~]# /usr/sbin/logrotate /etc/logrotate.conf	  #手动轮转
[root@xiaoqiang ~]# ls /var/log/yum*
/var/log/yum.log  /var/log/yum.log-20191110

[root@xiaoqiang ~]# grep yum /var/lib/logrotate/logrotate.status #查看记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2019-11-10-21:26:14

2:日志安全,操作日志的隐藏权限
[root@xiaoqiang log]# cd /etc/logrotate.d/
[root@xiaoqiang logrotate.d]# vim syslog
建议测试时先把/etc/logrotate.d/syslog中messages删除,然后在下面添加如下:
/var/log/messages{
    prerotate
       chattr -a /var/log/messages
    endscript
    #notifempty
    daily
        create 0600 root root
        missingok
        rotate 3

    postrotate
        chattr +a /var/log/messages
    endscript
}
[root@xiaoqiang logrotate.d]# /usr/sbin/logrotate /etc/logrotate.conf  #手动轮转
[root@xiaoqiang logrotate.d]# cd /var/log/
[root@xiaoqiang log]# ls mess*
messages  messages-20200805  messages-20200806

参数解释:
prerotate/endscript - 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript - 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

作业

1.测试当日期和星期发生冲突的时候以哪个为准,还是取或的关系,全部都执行?
取或。只先执行其中一个
2.计划每星期天早8点服务器定时重启,如何实现?
crontab -e
0 8 * * 0 /usr/bin/reboot
3.某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1).从下午 4:50 删除/abc 目录下的全部子目录和全部文件;
crontab -e
50 16 * * */usr/bin/rm -rf /abc/*
(2).每逢周一下午 5:50 将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
crontab -e
50 17 * * 1/usr/bin/tar cvzf backup.tar.gz /data 
(3).在早上 8:00 开机后启动crontab。
crontab -e
0 8 0 0 0/usr/bin/systemctl start crond.service

/var/log/messages
endscript
#notifempty
daily
create 0600 root root
missingok
rotate 3

postrotate
    chattr +a /var/log/messages
endscript

}
[root@xiaoqiang logrotate.d]# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
[root@xiaoqiang logrotate.d]# cd /var/log/
[root@xiaoqiang log]# ls mess*
messages messages-20200805 messages-20200806

参数解释:
prerotate/endscript - 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript - 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行


**作业**

```shell
1.测试当日期和星期发生冲突的时候以哪个为准,还是取或的关系,全部都执行?
取或。只先执行其中一个
2.计划每星期天早8点服务器定时重启,如何实现?
crontab -e
0 8 * * 0 /usr/bin/reboot
3.某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1).从下午 4:50 删除/abc 目录下的全部子目录和全部文件;
crontab -e
50 16 * * */usr/bin/rm -rf /abc/*
(2).每逢周一下午 5:50 将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
crontab -e
50 17 * * 1/usr/bin/tar cvzf backup.tar.gz /data 
(3).在早上 8:00 开机后启动crontab。
crontab -e
0 8 0 0 0/usr/bin/systemctl start crond.service
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BLXXQQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值