Linux
Linux
Linux的应用领域
- linux在服务器领域的应用是最强的.
- linux免费、稳定、高效等特点在这里得到很好的体现.
- 在嵌入式领域的应用得到了飞速的提高,例如机顶盒、数字电视等.
Linux的基本介绍
- linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并发非常强悍,很多企业级的项目基本都是部署在linux服务器中运行.
- 常见的两款发行版本:优班图与centOS
安装vm和centOS
- 去BIOS修改设置开启虚拟化设备支持
- 安装虚拟机软件vm
linux的目录结构
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下载创建其他的目录.在linux的世界里,一切皆文件.
- bin 是Binary的缩写,这个目录存放着最经常使用的命令.
- sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序.
- home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命令的.
- root 该目录为系统管理员,也称作超级权限者的用户主目录.
- lib 系统开机所需要最基本的动态链接共享库,其作用类似于windows的dll文件,几乎所有的应用程序都需要用到这些共享库
- lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- etc 所有的系统管理所需要的配置文件和子目录
- usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录.
- boot 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- proc 这个目录是一个虚拟的目录,是系统内存的映射,访问这个目录来获取系统信息
- srv service缩写,该目录存放一些服务启动之后需要提取的数据
- sys 这是linux2.6内核的一个很大的变化,该目录安装了2.6内核中新出现的一个文件系统sysfs
- tmp 这个目录是用来存放一些临时文件
- dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储
- media linux系统会自动识别一些设备,u盘、光驱等,当识别后,linux会把识别的设备挂载到这个目录下
- mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了.
- opt 这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可以放到该目录下,默认为空
- usr 这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
- /usr/bin 存放应用程序
- /usr/share 存放共享数据
- /usr/lib 存放不能直接运行的,却是许多程序运行所必须的一些函数库文件
- /usr/local 存放软件升级包
- /usr/share/doc 系统说明文件存放目录
- usr/share/man 程序说明文件存放目录
- var 这个目录中存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
- /var/log 随时更改的日志文件
- /var/spool/mail 邮件存放的目录
- /var/run 程序或服务启动后,其PID存放在该目录下
- /selinux selinux是一种安全子系统,能控制程序只能访问特定文件.
远程登录上传及下载
- 远程登录 xshell5与putty(在连接之前需要linux开启sshd服务,该服务会监听22号端口)
- 远程上传及下载 filezilla与xftp5
起步操作
- 查看ip地址
- vi /etc/sysconfig/network-scripts/ifcfg-ens33(此以下修改虚拟机网络配置)
- i进入insert模式修改onboot改为yes
- 退出insert模式
- :wq!
- 重启网络服务 systemctl restart network
- 查看网络服务 systemctl status network
- 修改网络适配器 NAT改为桥接
- 重启网络服务 systemctl restart network
- :ip addr
- 防火墙启用、关闭、禁用
- systemctl stop firewalld 关闭防火墙
- systemctl disable firewalld 禁用防火墙
- ps -ef | grep firewalld 查看防火墙进程
- systemctl start firewalld 开启防火墙
- systemctl status firewalld 查看防火墙状态
vi和vm编辑器
所有的linux系统都会内建vi文本编辑器,vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完、编译及错误跳转等方便变成的功能特别丰富,在程序员中被广泛使用.
具体相关指令操作
- yy拷贝当前行;5yy拷贝当前行向下的5行(p粘贴)
- dd删除当前行;5dd删除当前行向下5行
- /关键字表示在文件中查找某个单词,回车查找,输入n查找下一个
- 设置文件的行号:set nu;取消文件的行号:set nonu(注意有冒号,冒号不能省略)
- 使用快捷键到文档的尾行G;到文档的开头gg
- 输入一段文字后,进行撤销当前的操作u
- 将光标移动到指定行数
- 先输入命令 :set nu
- 在输入项指定的行数12
- 快捷键shift+g,跳到指定的行数
关机重启与注销
- 基本命令
- shutdown -h now 立即进行关机
- shutdown -h 1 1分钟后会关机
- shutdown -r now 现在重启计算机
- reboot 现在重启计算机
- sync 把内存的数据同步到磁盘
- 细节
- 当我们关机或者重启时,都应该先执行以下sync指令,把内存的数据写入磁盘,防止数据丢失.
- 登录时尽量少用root账号登录,避免操作失误.可以先利用普通用户登录,登录后在用"su-用户名"命名来切换成系统管理员身份
- 在提示符下输入logout即可注销用户
创建用户指定密码
linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.
- 基本命令
- useradd wupeng 创建一个用户名为wupeng的账户
- passwd wupeng 指定用户修改密码
- usermod -l wupeng12 wupeng 将原来的wupeng账户名修改为wupeng12
- 细节
- 当创建用户成功后,会自动创建和用户同名的家目录
- 也可以通过useradd -d /name wupeng1,给新创建的用户指定家目录
- 无法对正在启用的用户名进行修改
删除用户
- 基本命令
- userdel wupeng 删除用户(保留家目录)
- userdel -r wupeng 删除用户(不保留家目录)
- 细节
- 删除用户以及用户主目录需要加-r
- 在删除用户时,一般不会将家目录删除.
查询切换用户
- 基本命令
- id wupeng 查询吴鹏用户
- su - root 切换到root用户
- 细节
- 当查询的用户不存在,返回无此用户
- 在操作linux中,如果当前用户的权限不够,可以通过su -指令,切换到高权限用户,比如root
- 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要.
- 当需要返回原来用户时,使用exit指令
组的管理
- 基本指令
- whoami/who am i 查看当期那用户/登录用户
- groupadd test 添加组
- groupdel test 删除组
- useradd -g test wupeng 创建一个组为test用户名为wupeng的用户
- usermod -g test1 wupeng 修改wupeng用户原来的组名为test改为test1
- 文件/目录所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者.- 查看文件所有者 ls -ahl
- 修改文件所有者 chown wupeng name.txt 将原先name.txt的用户改成wupeng用户
- 修改文件所在组 chgrp wupenggroup name.txt 将原先name.txt所在的组改成wupenggroup组
- 修改用户所在组 usermod -g usergroup username 将username的所在组改成usergroup组
- 修改用户登录的初始目录 usermod -d dir username 改变username用户的初始登录的目录
- 修改用户下的文件所有者与所在组 chown wupeng:wupenggroup name.txt 改变name.txt文件下的所有者和所有组
- 修改用户的目录所有者与所在组 chown -R wujuan:wujuangroup wupengdir 改变wupengdir目录下的所有者和所有组
- 修改目录下的所有文件所在组 chgrp -R wupenggroup wupengdir 将原先wupengdir目录所在的组改成wupenggroup组
- 细节 在创建一个用户附带组的时候,如果组不存在,则该用户创建失败
- 用户和组的相关文件
- /etc/passwd文件 用户的配置文件,记录用户的各种信息,每行的含义→用户名:口令:标识号:组标识号:注释性描述:主目录:登录shell
- /etc/shadow文件 口令的配置文件,每行的含义→登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- /etc/group文件 组的配置文件,记录linux包含的组的信息,每行含义→组名:口令:组标识号:组内用户列表
- 运行级别 常用运行级别是3和5,要修改默认的运行级别可改文件 /etc/inittab的id:5:initdefault:这一行的数字,命令:init+数字
- 0表示关机
- 1表示单用户[找回丢失密码]
- 2表示多用户状态没有网络服务
- 3表示多用户状态有网络服务
- 4表示系统未使用保留给用户
- 5表示图形界面
- 6表示系统重启
- 文件目录类操作指令
- pwd 显示当期那工作目录的绝对路径
- ls
- -a 显示当前目录所有的文件和目录,包括隐藏的
- -l 以列表的方式显示信息
- cd
- cd ~或cd: 回到自己的家目录
- cd .. 回到当前目录的上一级目录
- mkdir
- mkdir dir 创建单级目录
- mkdir -p dir/dir 创建多级目录
- rmdir
- rmdir dir 删除空目录
- rm -rf dir 如果dir是非空目录,那么就需要使用rm -rf删除目录
- touch touch hello.txt
- cp
- cp hello.txt hellodir 拷贝hello文件到hellodir文件夹
- cp -r hellodir hellodir2 拷贝hellodir整个文件夹到hellodir2文件夹
- rm(常规使用rm -rf,慎用)
- rm -r 递归删除整个文件夹
- rm -f 强制删除不提示
- mv
- mv hello1.txt hello2.txt 修改文件
- mv hellodir/hello1.txt hello2.txt 将hellodir文件夹下的hello1.txt修改为hello2.txt并移动到当前目录下
- cat
1. cat hello.txt 查看文件
2. cat -n hello.txt 查看待行号的文件
3. cat只能浏览文件,而不能修改文件,未来了浏览方便,一般会带上管道命令|more - more
- more指令是一个基于vi编辑器的文本过滤器,以全屏的方式按页显示文本文件的内容,more指令中内置了若干快捷键
- more hello.txt,内置快捷键如下:
- space键 代表下翻一页
- Enter键 代表向下翻一行
- q键 代表立即离开more,不在显示读文件内容
- ctrl+F 向下滚动一屏
- ctrl+B 返回上一屏
- = 输出当前行的行号
- :f 输出文件名和当前行的行号
- less指令
- 用来分屏查看文件内容,功能与more指令类似,但是比more指令更加强大,支持各种显示终端.less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据现实需要加载内容,对于显示大型文件具有较高的效率
- less hello.txt,内置快捷键如下:
- space键 向下翻动一页
- 上下键 向上下翻动一页
- /字符串 向下搜寻字符串的功能,n向下查找,N向上查找
- ?字符串 向上搜寻字符串的功能,n向下查找,N向上查找
- q 离开less
- >和>>
1. ls -l>文件 列表的内容写入文件hello.txt中(覆盖写)
2. ls -al>>文件 列表的内容追加到文件hello.txt中的末尾
3. cat hello.txt>hello1.txt 将hello.txt的内容覆盖到hello1.txt文件中
4. echo "内容">>文件 写入指定内容到文件中 - echo
1. scho输出内容到控制台
2. 一般结合>>与>使用效果会更佳 - head
1. head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
2. head hello.txt
3. head -n 5 hello.txt 查看文件头5行内容 - tail
1. tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
2. tail -n 5 hello.txt 查看文件后5行内容
3. tail -f hello.txt 实时追踪该文档的所有更新 - ln
1. 软链接也叫符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
2. ln -s 源文件或目录 软链接名 (功能是给源文件创建一个软链接)
3. 给目录添加软链接后,可以通过cd 软链名,进入到该目录,同样对于文件,也可以通过vi 软链名,编辑该文件 - history
1. history 查看所有的历史命令
2. history 10 查看最近使用的10个命令
3. !3 执行历史编号为3的命令 - sed
1. 查看文件下的具体行数(第一种方法) sed -n '2p' filename 表示获取file文件中的第2行
2. 查看文件下的具体行数(第二种方法) awk 'NR==1' filename filename 表示获取file文件中的第1行
时间日期类
- date
- date 显示当前时间
- date +%Y 显示当前年份
- date +%m 显示当前月份
- date +%d 显示当前哪一天
- date "+%Y-%m-%d %H:%M:%S"
- cal
- cal 查看当前日历
- cal 2018 显示2018年的日历
搜索查找类
- find
- find指令将从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端
- find /root -name hello.txt 查找root目录下名称为hello.txt的文件
- find /root -user root 查找root目录下用户名为root的文件
- find /root -size +20M 查找root目录下查找大于20M的文件(+n大于,-n小于,n等于)
- find+路径+ -mtime+ -n 表示查询更改文件n天以内的 find / -mtime -5
- find+路径+ -mtime+ +n 表示查询更改文件n天以外的 find / -mtime +5
- find / -name *.txt -exec rm -rf {} \ 表示查找根目录下后缀名为.txt的文件,并删除
- locate
- locate指令可以快速定位文件路径.locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件.locate指令无需遍历整个文件系统.查询速度较快,为了保证查询结果的准确度,管理员必须定期更新locate时刻.
- 由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
- updatedb命令不存在,需要使用yum进行安装 yum install mlocate
- 第一步:updatedb;第二步:locate name.txt
- grep和|
- grep过滤查找,管道符|表示将前一个命令的处理结果输出传递给后面的命令处理
- grep hello test.txt 在某个文件中查找包含hello的内容,只要一行中有hello会把整行显示
- grep -niv hello test.txt n显示查找到的内容的行号,i查找时不区分大小写,v反向查找,查找不包含hello的行,c表示匹配的计数
- grep -n hello /home/admin -r 查找整个目录中所有文件中包含hello的内容
- grep+"正则表达式"+文件名 grep -v "^$" 表示查找不包括空行
- ^[a-zA-Z0-9] 表示以任意字母数字开头
grep '^[g]' a.txt
在a.txt中查找以字母g开头的所有行 - [a-zA-Z0-9]$ 表示以任意字母数字结尾
grep '[g]$' a.txt
在a.txt中查找以字母g结尾的所有行 - [^a-zA-Z0-9] 表示不以任意字母数字
grep "[^g]" a.txt
在a.txt中查找不以g开头的所有行 - grep+"正则表达式"+文件名+|+grep+"正则表达式" 使用管道|进行连接查找,可以结合-c或-n或-i或-v使用
- grep+-r+test+/root/* 表示从root下查找单词为test的文件
- grep+"o*"+文件名 表示会显示所有文件文本(着重会显示≥1个带有o的文本)
- grep+"oo*"+文件名 表示会显示带有≥一个o的文件文本
- grep+"..o"+文件名 表示会着重显示o前面有两个字符的文件文本
- grep+"o\ {2 \ }"+文件名 表示出现2个o的文件文本
- grep+"o\ {2,\ }"+文件名 表示出现≥2个o的文件文本
- grep+"o\ {2,3\ }"+文件名 表示出现≥2个o≤3个o的文件文本
- ^[a-zA-Z0-9] 表示以任意字母数字开头
- grep -v grep 为了去除包含grep的进程行,避免影响最终数据的准确性
- less name.txt|grep -ni hello 查看name.txt文件找出字符串为hello(-i表示忽略大小写,-n显示行号)
- grep过滤查找,管道符|表示将前一个命令的处理结果输出传递给后面的命令处理
压缩和解压类
- gzip与gumzip
- gzip name.txt 压缩文件,只能将文件压缩为*.gz文件
- gunzip name.txt.gz 解压缩文件命令
- zip与unzip
- zip -r mydir.zip namedir 将当前目录下的namedir目录压缩成mydir.zip文件
- unzip -d /opt/tmp/ mydir.zip 将mydir.zip解压到opt下的tmp目录
- tar
- tar指令是打包指令,最后打包后的文件是tar.gz的文件
- tar -zcvf myfile.tar.gz name.txt name1.txt 将name与name1的文件压缩成myfile.tar.gz包
- tar -zcvf mydir.tar.gz namedir/ 将namedir的整个目录下的内容打包成mydir.tar.gz包
- tar -zxvf mydir.tar.gz 解压到当前目录下
- tar -zxvf mydir.tar.gz -C mydir2/ 解压到指定目录下
文本分析工具
awk的基本介绍
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,就显得非常强大.简单那的来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分在进行各种分析处理.
awk的用法
用法一
# awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
# 基本文件
# 2 this is a test
# 3 Are you like awk
# This's a test
# 10 There are orange,apple,mongo
# 实例
# 每行按空格或TAB分割,输出文本中的1、4项(如果第4项不存在就截掉)
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
# 格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
%-8s表示显示最小长度为8-10个字符串,不足补空格
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法二
# 基本语法
awk -F #-F相当于内置变量FS, 指定分割字符
# 基本实例
# 使用","分割
$ awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 或者使用内建变量
$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
用法三
# 基本语法
awk -v # 设置变量
# 基本实例
$ awk -va=1 '{print $1,$1+a}' log.txt (如果变量a是数字,且$1也是数字,那么会进行运算,如果不是数字,那么$1+a就会直接为a的值)
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt (如果变量b不是数字,不管$1是数字还是字母,都作为拼串处理)
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
综合案例
# 过滤第一列大于2的行
$ awk '$1>2' log.txt #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo
# 过滤第一列等于2的行
$ awk '$1==2 {print $1,$3}' log.txt #命令
#输出
2 is
# 过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
#输出
3 Are you
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a
# 输出包含 "re" 的行
$ awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo
# 忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
---------------------------------------------
2 this is a test
This's a test
# 模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
权限类
- ll中显示的内容 drwxr-xr-x. 4 root root 52 9月 30 10:48 sitespeed-result 0-9位解释如下:
- 第0位确定文件类型(-,d,l,c,b)
- 第1-3位确定所有者拥有该文件的权限. ---User
- 第4-6位确定所属组拥有该文件的权限. ---Group
- 第7-9位确定其他用户拥有该文件的权限. ---Other
- rwx作用到文件(可用数字表示:r=4,w=2,x=1)
- r代表可读:可以读取,查看
- w代表可写:可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
- x代表可执行:可以被执行
- rwx作用到目录(可用数字表示:r=4,w=2,x=1)
- r代表可读:可读取,ls查看目录内容
- w代表可写:可以修改,目录内创建+删除+重命名目录
- x代表可执行:可以进入该目录
- chmod
- 通过chmod指令,可以修改文件或者目录的权限
- 通过+、-、=给u、g、o、a变更权限(u表示所有者、g表示所有组、o表示其他人、a表示所有人,也就是ugo的总和)
- 另一种方式通过数字变更权限 chmod u=rwx,g=rw,o=x mydir等同于chmod 751 mydir
crondtab
crontab进行定时任务的设置
概述
- 任务调度:是指系统在某个时间执行的特定的命令或程序
- 任务调度分类
- 系统工作:有些重要的工作必须周而复始的执行,如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份.
- 基本语法 crontab [选项],相关选项如下:
- -e 编辑crontab定时任务
- -l 查询crontab任务
- -r 删除当前用户所有的crontab任务
crond任务调度
- 快速入门
- 设置任务调度文件 /etc/crontab
- 设置个人任务调度
- 执行命令 crontab -e
- 输入任务到调度文件 */1 * * * * ls -l /etc/>/tmp/to.txt
- 参数细节说明
- 第一个*表示一小时当中的第几分钟,范围0~59
- 第二个*表示一天当中的第几个小时,范围0~23
- 第三个*表示一个月当中的第几天,范围1~31
- 第四个*表示一年当中的第几个月,范围1~12
- 第五个*表示一周当中的星期几,范围0~7(0和7都代表星期日)
- 特殊符号的说明
- * 代表任何时间,比如第一个*就代表一小时中每分钟都执行一次的意思
- , 代表不连续的时间.比如0 8,12,16 * * *这条命令就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- - 代表连续的时间范围.比如0 5 * * 1-6这条命令就表示周一至周六的凌晨5点0分执行命令
- */n 代表每个多久执行一次命令,比如*/10 * * * *代表每隔10分钟就执行一遍命令
- 特定时间执行任务案例
- 45 22 * * * 在22点45分执行命令
- 0 17 * * 1 每周1的17点0分执行命令
- 0 5 1,15 * * 每月1号和15号的凌晨5点0分执行命令
- 40 4 * * 1-5 每周一至周五的凌晨4点40分执行命令
- */10 4 * * * 每天的凌晨4点,每隔10分钟执行一次命令
- 0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行命令.注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱
- crond任务调度应用实例
- 每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中
- 先写一个myshell.sh脚本 date >> /tmp/mydate
- 添加执行权限 chmod 744 /home/myshell.sh
- 定时任务执行 */1 * * * /home/myshell.sh
- 每隔1分钟,将当前日期和日历都追加到/home/mycal文件中
- 先写一个myshell2.sh脚本 date >> /tmp/mydate2 cal >> /tmp/mydate2
- 添加执行权限 chmod 744 /home/myshell2.sh
- 定时任务执行 */1 * * * /home/myshell2.sh
- 每天凌晨2:00将mysql数据库testdb备份到文件中mydb.bak
- 先写一个mysql.sh脚本 /usr/local/mysql/bin/mysqldump -u root -p 123456 testdb > /tmp/mydb.bak
- 添加执行权限 chmod 744 /home/mysql.sh
- 定时任务执行 0 2 * * * /home/mysql.sh
- 每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中
- crond相关指令
- crontab -r 终止任务调度
- crontab -l 列出当前有哪些任务调度
- service crond restart[重启任务调度]
Linux磁盘分区、挂载
分区的方式
- mbr分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有最好的兼容性
- gpt分区
- 支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
- 最大支持18EB的大容量(EB=1024PB,PB=1024TB)
- windows7 64位以后支持gpt
分区原理介绍
- linux来说无论有几个分区,分给哪一个目录使用,归根结底就只有一个根目录,一个独立且唯一的文件结构,linux中每个分区都是用来组成整个文件系统的一部分.
- linux采用了一种叫载入的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系气力啊,这时要载入一个分区将使它的存储空间在一个目录下获得.
硬盘说明
- linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为"hdx",其中"hd"表明分区所在设备的类型,这里是指IDE硬盘了."x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),"~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区.例:hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
- 对于SCSI硬盘则标识为"sdx",SCSI硬盘是用"sd"来表示分区所在设备的类型,其余则和IDE硬盘的表示方法一样.
挂载
- 查看所有设备挂载情况 lsblk或lsblk -f
- 挂载的经典案例 增加一块硬盘为例来熟悉磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念,具体如何增加一块硬盘,操作如下
- 虚拟机添加硬盘 虚拟机→设置→硬盘→添加→SCSI→创建新虚拟磁盘→分配内存
- 分区 fdisk /dev/sdb→m→n(增加一个新的分区)→p(划一个主分区)→1→默认→默认→w(分区信息写入硬盘并退出)
- 格式化 mkfs -t ext4 /dev/sdb1
- 挂载 先创建一个目录(mkdir /home/newdisk),其次进行挂载 mount /dev/sdb1 /home/newdisk
- 设置可以自动挂载 首先打开文件 vim /etc/fstab,其次复制一份并进行修改 /dev/sdb1 /home/newdisk ext4 defaults 0 0,保存退出后生效命令mount -a(卸载命令 umount /home/newdisk)
磁盘情况查询
- 查询系统整体磁盘使用情况 df -lh
- 查询指定目录的磁盘占用情况 fu -h /目录,不加目录,默认是当前目录,其他参数如下
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- --max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
- 应用实例
- 查询/opt目录的磁盘占用情况 du -cah --max-depth=1 /opt
- 统计/home文件夹下文件的个数 ls -l /home | grep "^-" | wc -l
- 统计/home文件夹下目录的个数 ls -l /home | grep "^d" | wc -l
- 统计/home文件夹下文件的个数,包括子文件夹 ls -lR /home | grep "^-" | wc -l
- 统计文件夹下目录的个数,包括子文件夹 ls -lR /home | grep "^d" | wc -l
- 以树状显示目录结构 tree /
网络通信
- ifconfig 查看网卡地址(需要先安装net-tools工具)
- hostname 查看主机名称
- ping+ip地址 虚拟机与本机通信连接情况(虚拟机命令下+本机ip地址,本机命令下+虚拟机ip地址)
- 启动网卡 ifconfig eth0 up
- 禁用网卡 ifconfig eth0 down
系统资源查看
- top 查看系统CPU、内存使用情况等
- top & 后台运行top
- ps 查看系统进程
- ps -ef | more 分页显示进程信息
- ps -ef | grep 1190 显示进程信息并查看进程号为1190
- kill -9 进程号 结束进程
- free 查看内存情况
- netstart an|grep 8080 查看端口号为8080
磁盘管理
- df 查看磁盘使用情况
- du 查看文件已有容量
系统信息查询
- whoami 查看自己是谁
- who am i 查看自己账户及登录信息
- who 查看当前系统在线用户
- last 查看这个月的用户登录信息
- hostname 查看主机名
- uname [-a] 列出系统信息,加上-a表示列出所有系统信息
- id 查看自己以及所属组的信息
- groups 查看自己属于哪些组
- history 查看历史
- history [数字n] 查看最后的n条数据
- history | tail -10 显示最后10行历史
网络配置
查看网络ip和网关
- 修改ip 点击虚拟网络编辑器
- 修改网关 点击NAT设置
linux网络环境配置
- 自动获取ip linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样.
- 指定固定ip 直接修改配置文件来指定ip,并可以连接到外网
- 打开文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 修改文件中BOOTPROTO=static
- 修改IPADDR=192.168.3.34
- 填好网关GATEWAY
- 填好域名解析器DNS1
进程管理
基本介绍
- 在linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
- 每个进程都可能以两种方式存在,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,后台级才能拿则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束.
显示系统执行的进程
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况,可以不加任何参数.
- ps显示的信息选项
- PID 进程识别号
- TTY 终端机号
- TIME 此进程消耗的CPU时间
- CMD 正在执行的命令或进程名
- ps相关命令
- ps -a 显示当前终端的所有进程信息
- ps -u 以用户的格式显示进程信息
- ps -x 显示后台进程运行的参数
- ps -aux 显示的信息比较全面的展示
- ps -aux详解
- 指令:ps -aux | grep xxx
- 指令说明
- USER: 用户名称
- PID: 进程号
- %CPU: 进程占用cpu的百分比
- %MEM: 进程占用物理内存的百分比
- VSZ: 进程占用的虚拟内存大小(单位:KB)
- RSS: 进程占用的无理内存大小(单位:KB)
- TT: 终端名称缩写
- STAT: 进程状态,其中S-睡眠,s-表示该级才能拿是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- STARTED: 进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
- ps -ef详解
- 指令 ps -ef | grep xxx
- 指令说明
- UID: 用户ID
- PID: 进程ID
- PPID: 父进程ID
- C: cpu用于就散执行优先级的因子,数值越大,表明进程是cpu密集型运算,执行优先级会降低,数值越小,表明进程是I/O密集型运算,执行优先级会提高
- STIME: 进程启动时间
- TTY: 完整的终端名称
- TIME: cpu时间
- CMD: 启动进程所用的命令和参数
终止进程
- 介绍:若是某个进程执行一般需要停止时,或是已经消了很大的系统资源时,此时可以考虑停止该进程,使用kill命令来完成此项任务.
- 基本语法:
- kill [选项] 进程号(功能描绘苏:通过进程号杀死进程)
- killall 进程名称(功能描绘苏:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时会很有用)
- 常用选项 -9 表示强迫进程立即停止
查看进程树
- 基本语法 pstree [选项] 可以更加直观的来看进程信息
- 常用选项
- -p 显示进程的PID
- -u 显示进程的所属用户
服务管理
- 介绍 服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysql与sshd防火墙等,因此我们又称为守护进程,是linux中非常重要的知识点
- service管理指令
- service 服务名 start|stop|restart|reload|status
- systemctl(在centos7 不在使用service服务,而是systemctl)
- 细节
- 关闭或者启用防火墙后,立即生效
- 这种方式只是临时生效,当重启系统后,还是会回归到以前对服务的设置
- 如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令.
- chkconfig指令
- 介绍 通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
- 查看服务 chkconfig --list|grep xxx
- 查看指定服务 chkconfig 服务名 --list(等价于chkconfig --list|grep 服务名)
- 将network服务在运行级别为5的情况下,不要自启动 chkconfig --level 5 network off
- 动态监控进程
- 介绍 top与ps命令很相似,都是用来显示正在执行的进程.最大的区别就是在于top在执行一段时间可以更新正在运行的进程.
- 基本语法 top [选项]
- -d 秒数 指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
- -i 使top不显示任何闲置或者僵死进程
- -p 通过指定监控进程ID来查看监控某个进程的状态
- 交互操作说明
- P 以cpu使用率排序,默认就是此项
- M 以内存的使用率排序
- N 以PIO排序
- q 退出top
- 监控网络状态
- 基本语法 netstat [选项]
- -an 按一定顺序排列输出
- -p 显示哪个进程在调用
- 检测主机连接命令 ping 地址
- 基本语法 netstat [选项]
RPM包管理
- 介绍 一种用户互联网下载包的打包及安装工具,它包含在某些Linux分发版中,生成具有.RPM扩展名的文件.RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat标志,但是理念是通用的,Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了.
- rpm包的简单那查询指令 rpm -qa | grep xx
- rpm包名基本格式 firefox-45.0.1-1.el6.centos.x86_64.rpm
- 名称: firefox
- 版本号: 45.0.1-1
- 适用操作系统: el6.centos.x86_64
- rpm包其他查询指令
- rpm -qa: 查询所安装的所有rpm软件包
- rpm -qa | more
- rpm -q firefox: 查询谷歌包是否安装
- rpm -qi firefox: 查询谷歌包信息
- rpm -ql firefox: 查询谷歌包中的文件
- rpm -qf /etc/passwd: 查询文件所属的软件包
- rpm包的卸载
- 基本语法 rpm -e rpm包的名称
- 如果其他软件包依赖于卸载的软件包,卸载时会产生错误信息
- 如果就是要删除指定的rpm包,可以增加参数-nodeps就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行.
- rpm包的安装
- 基本语法 rpm -ivh rpm包全路径名称
- 参数说明
- i=install 安装
- v=verbose 提示
- h=hash 进度条
yum管理
- 介绍 yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包.
- yum的基本指令
- 查询yum服务器是否有需要安装的软件 yum list | grep xx
- 安装指定的yum包 yum install xxx 下载安装
- 写在指定的yum包 yum uninstall xxx
shell入门
- 通过编写shell脚本可以进行程序或者是服务器的维护.
- 对于测试人员来讲,需要编写shell程序,通过定时任务来实施对服务器进行监控.
- shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序.
shell脚本的执行方式
- 脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本需要有可执行文件
- 执行shell脚本(root下myshell.sh脚本)
- 第一种: 先赋予权限,chmod 777 myshell.sh,在执行shell ./myshell.sh
- 第二种:没有权限的情况下(但是不推荐) sh ./myshell.sh
shell输出的两种方式
- echo
- printf(优点:printf的脚本比使用echo移植性好)
基本介绍printf
- printf 命令模仿 C 程序库(library)里的 printf() 程序。
- printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
- printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
基本实例
# 常规实例
echo "Hello, Shell"
printf "Hello, Shell\n"
# 特殊实例
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
`%s`、`%c`、`%d`、`%f`都是格式替代符,`%s`输出一个字符串,`%d`整型输出,`%c`输出一个字符,`%f`输出实数,以小数形式输出.
`%-10s`指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来
`%-4.2f`指格式化为小数,其中.2只保留2位小数.
shell变量
shell变量的介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量
- 系统变量:
$HOME
、$PWD
、$SHELL
、$USER
等等,比如echo "$HOME" - 显示当前shell中所有变量: set
shell变量的定义
- 定义变量: 变量=值
- 撤销变量: unset 变量
- 声明静态变量: readonly 变量,注意不能unset
定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
将命令的返回值赋给变量
- A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls -la) 等价于反引号
设置环境变量
- 基本语法
- export 变量名=变量值(功能描述:将shell变量输出为环境变量)
- source 配置文件(功能描述:让修改后的配置信息立即生效)
- echo $变量名(功能描述:查询环境变量的值)
- 快速入门
- 在/etc/profile文件中定义TOMCAT_HOME环境变量
- 查看环境变量TOMCAT_HOME的值
- 在另外一个shell程序中使用TOMCAT_HOME
- 在输出JAVA_HOME环境变量前,需要让其生效 source /etc/profile
shell位置参数变量
- 介绍 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell 100 200,这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息.
- 基本语法
$n
(功能描述:n为数字,$0
代表命令本身,$1-$9
代表第1到第9个参数,10以上的参数需要用大括号包含,如${10}
)$*
(功能描述:这个变量也代表命令行中所有的参数,$*
把所有的参数看成一个整体)$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待)$#
(功能描述:这个变量代表命令行中所有参数的个数)
- 应用实例 编写一个shell脚本myshell.sh,在脚本中获取到命令行的各个参数信息
# 注意的是`$0`打印出来的是命令行,不作为参数.执行shell需要加上参数 ./myshell 10 20 30
#!/bin/bash
echo "$0 $1 $2 $3"
echo "$*"
echo "$@"
echo "参数个数=$#"
shell预定义变量
- 基本介绍 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用.
- 基本语法
$$
(功能描述:当前进程的进程号)$!
(功能描述:后台运行的最后一个进程的进程号)$?
(功能描述:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行,如果这个变量的值为非0(具体是那个数,由命令自己决定),则证明上一个命令不正确)
- 应用实例 在一个shell脚本中简单使用预定义变量
#!/bin/bash
echo "当前的进程号:$$"
# 后台的方式运行myshell.sh
./myshell.sh &
echo "最后的进程号:$!"
echo "执行的值是:$?"
shell运算符
- 基本语法
"$((运算式))"
或"$[运算式]"
- `expr m + n` 需要注意的是expr运算符间要有空格
- `expr m - n`
- expr
\*
、/
、%
乘除取余
- 应用实例
- 计算(2+3)*4的值
- 求出命令行的两个参数的和
# 第一种方式计算出(2+3)*4先进行计算,在执行
A="$(((2+3)*4))"
echo "$A"
# 第一种方式计算出(2+3)*4先进行计算,在执行
A="$[(2+3)*4]"
echo "$A"
# 第三种方式计算出(2+3)*4
B=`expr 2 + 3`
result1=`expr $B \* 4`
echo "$result1"
# 求出命令行的两个参数的和,第一步编写脚本,第二步执行命令 ./myshell.sh 10 20
C=$[$1+$2]
echo "$C"
shell中&&和||的用法
- &&前面的命令执行成功后会执行&&后面的命令
- ||表示的是前面的命令执行不成功,就会执行||后面的命令
# 如果不存在,就创建文件夹
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 如果存在,就删除文件夹
[ -d "$BACKUP/$DATETIME" ] && rmdir -p "$BACKUP/$DATETIME"
shell中cut的用法
cut是以每一行为一个处理对象,这种机制与sed是类似的.
cut命令主要是接受三个定位方法,也就是有三个选项:
- 字节 -b
- 字符 -c
- 设置间隔符号 -d(该选项默认间隔符就是制表符,所以当你就是使用制表符的时候,完全可以省略-d选项,如果设定一个空格为间隔符,可以-d ""即可)
- 域 -f
# 如果想获取who中每一行的第3个字节
who | cut -b 3
# 如果我想提取第3、4、5和第8个字节
who | cut -b 3-5,8
# 截出获取who中一行中的前三个字节(包括第三个)
who | cut -b -3
# 接触获取who中一行中的第三个字节之后的字节(包括第三个)
who | cut -b 3-
# 在观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。于是有如下的方式
cat /etc/passwd|head -n 5|cut -d : -f 1 表示查看etc/passwd下的前五条信息,并按照间隔符号冒号来截取每个第一个域
# 遇到空格和制表符,如何分辨?
sed -n l tab_space.txt(如果是制表符会显示`\t`,如果是空格,就会原样显示)
shell判断语句
- 两个整数比较
=ne
不等于-lt
小于-le
小于等于-eq
等于-gt
大于-ge
大于等于
- 按照文件权限进行判断
-r
有读的权限-w
有写的权限-x
有执行的权限
- 按照文件类型进行判断
-f
文件存在并且是一个常规的文件-e
文件存在-d
文件存在并是一个目录-s
文件存在且至少有一个字符串-c
如果文件存在且为字符型特殊文件则为真-b
如果文件存在且为块特殊文件则为真
- 按照字符串比较
=
等于则为真!=
不相等则为真-z
字符串的长度为0,则为真-n
字符串的长度不为0,则为真
- 应用实例
# 案例1:"ok"是否等于"ok",注意的是:在[]里面的前后需要加空格,习惯的可以在字符串以及判断符前后都有空格
if [ "ok" = "ok" ]
then
echo "相等"
fi
# 案例2:判断23是否大于22
if [ 23 -gt 22 ]
then
echo "确实大于"
fi
# 案例3:判断文件夹下是否有myshell1.sh
if [ -e /root/myshell1.sh ]
then
echo "是存在的"
fi
shell流程控制语句
流程控制if
# 基本语法 单if
if [ 条件判断式 ]
then
程序
fi
# if elif
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
程序
fi
# 案例:编写一个shell程序,如果输入的参数,大于等于60,则输出"及格",如果小于60,则输出"不及格"
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
流程控制case
# 基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
# 案例:当命令行参数为70的时候,输出需要该值,如果值为60,输出该值无用,如果值为其他的值,输出最终结果
case $1 in
"70")
echo "需要该值"
;;
"60")
echo "该值无用"
;;
*)
echo "最终结果"
;;
esac
流程控制for
# 基本语法1
for 变量 in 值1,值2,值3...
do
程序
done
# 实例:打印命令行输入的参数(输出结果:10 20 30)
for i in "$*"
do
echo "结果:$i"
done
# 实例:打印命令行输入的参数(输出结果:10,输出结果:20,输出结果:30)
for i in "$@"
do
echo "结果:$i"
done
# 基本语法2
for((初始值;循环控制条件;变量变化))
do
程序
done
# 实例:从1加到100的值输出显示
SUM=0
for((j=1;j<=100;j++))
do
SUM=$[ $SUM + $j ]
done
echo "$SUM"
流程控制while
# 基本语法
while [条件表达式]
do
程序
done
# 实例:从命令行输入一个数n,统计从1+...+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[ $SUM + $i ]
i=$[ $i + 1 ]
done
echo "$SUM"
shell读取控制台输入
# 基本语法
read(选项)(参数)
选项
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有指定的时间内输入,就不在等待.
参数
变量:指定读取值的变量名
# 应用实例
1. 读取控制台输入的一个num值
2. 读取控制台输入的一个num值,在10秒内输入
read -p "请输入你要输入的数字:" NUM1
echo "你输入的值是NUM1=$NUM1"
read -t 10 -p "请输入你要输入的数字:" NUM2
echo "你输入的值是NUM2=$NUM2"
shell系统函数
# basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名(功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来)
basename[pathname][suffix]
basename[string][suffix]
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
# 实例:请返回/root/test.txt的"test.txt"部分
basename /root/test.txt 返回test.txt
basename /root/test.txt .txt 返回test
# dirname基本语法
功能:返回完整路径最后/的前面的部分,常用于返回路径部分(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
dirname 文件绝对路径
实例:请返回/root/test.txt的/root
dirname /root/test.txt
自定义函数
# 基本语法
function funname()
{
程序
}
实例:计算两个数的和
function getSum(){
SUM=$[$n1+$n2]
echo "和为:$SUM"
}
read -p "请输入第一个值:" n1
read -p "请输入第二个值:" n2
getSum $n1 $n2
shell编程综合案例
需求分析
- 每天凌晨2:10备份数据库znjt到/root/myshell
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打爆成.tar.gz的形式,比如:2018-03-12_230201.tar.gz
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除.
BACKUP=/root
# 获取当前时间
DATETIME=$(date+%y_%m_%d_%H%M%S)
# 数据库地址、用户名、密码
HOST=localhost
DB_USER=root
DB_PWD=""
DATABASE=myshell
# 创建备份的路径,如果路径存在就是用,不存在就添加
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 执行mysql的备份数据库的指令
mysqldump -u $DB_USER -P $DB_PWD --host=$HOST $DATABASE | gzip>$BACKUP/$DATETIME.sql.gz
# 打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
# 删除临时目录
rm -rf $BACKUP/$DATETIME
# 删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \