目录
------------------------------------------------------------------------------
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
脚本格式要求
1)脚本以#!/bin/bash开头
2)脚本需要有可执行权限
编写第一个Shell脚本 需求说明:创建一个Shell脚本,输出hello world! vim hello.sh #!/bin/bash echo "hello,world~"
脚本的常用执行方式
方式1:输入脚本的绝对路径或相对路径
说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本
比如./hello.sh或者使用绝对路径/root/shcode/hello.sh
方式2:sh+脚本
说明:不用赋予脚本+x权限,直接执行即可
比如sh hello.sh,也可以使用绝对路径
Linux Shell中的变量分为,系统变量和用户自定义变量
系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME等
set #显示当前shell中所有变量
shell 变量的定义
定义变量:变量名=值
撤销变量:unset变量
声明静态变量:readonly变量,注意:静态变量不能unset
案例1:定义变量A #!/bin/bash A=100 echo "A=$A" 案例2:撤销变量A #!/bin/bash A=100 echo "A=$A" unset A echo "A=$A" 案例3:声明静态的变量B=2,不能unset readonly B=2 echo "B=$B" unset B #会报错
#再shell加多行注释 :<<:! 代码体 !
定义变量的规则
①变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
②等号两侧不能有空格
③变量名称一般习惯为大写,这是一个规范,我们遵守即可
将命令的返回值赋给变量
A='date' #反引号,运行里面的命令,并把结果返回给变量A A=$(date) #等价于反引号
设置玩环境变量之后,再其他的shell脚本里也可以调用,可以理解为全局变量
基本语法
export变量名=变量值 #将shell变量输出为环境变量/全局变量 source 配置文件 #让修改后的配置信息立即生效 echo $变量名 #查询环境变量的值
①在/etc/profile文件中定义TOMCAT_HOME环境变量 vim /etc/profile export TOMCAT_HOME=/opt/tomcat source /etc/profile ②查看环境变量TOMCAT_HOME的值 $TOMCAT_HOME #如此设计即可在另外一个shell程序中使用TOMCAT_HOME #注意:在输出TOMCAT_HOME环境变量前,需要让其生效source /etc/profile
当我们执行一个shell脚本时,如果希望获取到再命令行中输入的参数信息,就可以使用到位置参数变量
./myshel.sh 100 200 #这个就是一个执行shell的命令行,可以在myshell脚本中获取到100和200这两个参数的信息
基本语法
$n(功能描述: n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
S@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
#编写一个shell脚本 my.sh ,在脚本中获取到命令行的各个参数信息 echo "命令本身=$0 第一个参数=$1 第二个参数=$2" echo "所有的参数=$*" echo "所有的参数=$@" echo "参数的个数=$#"
是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
$$ #当前进程的进程号(PID) $! #后台运行的最后一个进程的进程号(PID)) $? #最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确
#!/bin/bash echo "当前执行的进程id:$$" /root/shcode/myshell.sh & #&表示以后台的方式运行一个脚本,并获取他的进程号 echo "最后一个后台方式运行的进程id=$!" echo "执行的结果是=$?"
S((运算式)) $[运算式] expr m + n expr *,/,% 乘,除,取余 #注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``
案例1:计算(2+3)X4的值 #方式一 echo $(((2+3)*4)) #方式二 echo $[(2+3)*4] #方式三 RES=`expr 2 + 3` RESULT=`expr $RES * 4` echo $RESULT 案例2:请求出命令行的两个参数[整数]的和20 50 #!/bin/bash SUM=$[$1+$2] echo "sum=$SUM"
[ condition ] #注意condition前后都有空格 #非空返回true,可使用$?验证(0为true,>1为 false) [ hspEdu ] #返回true [ ] #返回false [ condition ] && echo OK ll echo notok #条件满足,执行后面的语句 && #且 || #或
判断语句
1)=:字符串比较
2)两个整数的比较
-lt:小于
-le:小于等于(little equal)
-eq:等于
-gt:大于
-ge:大于等于
-ne:不等于
3)按照文件权限进行判断
-r:有读的权限
-w:有写的权限
-x:有执行的权限
4)按照文件类型进行判断
-f:文件存在并且是一个常规的文件
-e:文件存在
-d:文件存在并是一个目录
#案例1: "ok"是否等于"ok"判断语句 vim csae.sh if [ "ok"="ok" ] then echo "equal" fi chmod u+x case.sh ./case.sh #案例2:23是否大于等于22判断语句 vim csae.sh if [ 23 -gt 22 ] then echo "大于" fi chmod u+x case.sh ./case.sh #案例3:/root/shcode/aaa.txt目录中的文件是否存在判断语句 vim csae.sh if [ -f /root/shcodel/aaa.txt ] then echo "存在" fi chmod u+x case.sh ./case.sh
#单分支 if [ 条件判断式 ] then 代码 fi #多分支 if [ 条件判断式 ] then 代码 elif [ 条件判断式 ] then 代码 fi #注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
#案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出“及格了",如果小于60,则输出"不及格"if [ $1 -lt 60 ] then echo "不及格" elif [ $1 -gt 60 ] then echo "及格了" fi
case $变量名 in "值1") ;; 如果变量的值等于值1,则执行程序1 "值2") ;; 如果变量的值等于值2,则执行程序2 *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
#案例:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出"other" case $1 in "1") echo "周一" ;; "2") echo ""周二” ;; *) echo "other" ;; esac
基本语法1
for 变量 in 值1 值2 值3... do 程序/代码 done
#案例:打印命令行输入的参数「这里可以看出$*和 $@的区别] for i in "$*" do echo "*=$i" done for i in "$@" do echo "@=$i" done
基本语法2
for (( 初始值;循环控制条件;变量变化 )) do 程序/代码 done
#案例:从1加到100的值输出显示 SUM=0 for (( i=1; i<=$1; i++ )) do SUM=$[$SUM+$i] done echo "sum=$SUM"
while [ 条件判断式 ] do 程序/代码 done 注意: while 和 [ 之间有空格,条件判断式 和 [ 直接按也有空格
#案例:从命令行输入一个数n,统计从1+……+n的值是多少? NUM=1 SUM=0 while [ $NUM -le $1 ] do SUM=$[$SUM+$NUM] NUM=$[$NUM+1] done echo "result=$SUM"
read (选项) (参数) 选项: -p #指定读取值时的提示符 -t #指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
#案例1:读取控制台输入一个NUM1值 read -p "请输入NUM1=" NUM1 #将用户输入的值赋给NUM1 echo "你输入的NUM1=$NUM1" #案例2:读取控制台输入一个NUM2值,在10秒内输入 read -t 10 -p "请输入NUM2=" NUM2 echo "你输入的NUM2=$NUM2"
上图中第4行为超过十秒没输入内容的结果
shell编程和其它编程语言一样,有系统函数,也可以自定义函数
系统函数
basename的基本语法
basename [pathname] [suffix] #返回完整路径最后人的部分,常用于获取文件名 basename [string] [suffix] #功能描述: basename命令会删掉所有的前缀包括最后一个(/)字符,然后将字符串显示出来 选项: suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
#案例1:请返回/home/aaa/test.txt的"test.txt"部分 basename /home/aaa/test.txt #案例2:请返回/home/aaa/test.txt的"test"部分 basename /home/aaa/test.txt .txt
dirname基本语法
dirname用于返回完整路径最后/的前面的部分,常用于返回路径部分 dimame 文件绝对路径 #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
#案例1:请返回/home/aaa/test.txt 的/home/aaa dirname /home/aaa/test.txt
自定义函数
基本语法
[ function ] funname[()] { Action; [return int;] } 调用直接写函数名:fiunname [值]
#案例1:计算输入两个参数的和(动态的获取),getsum function getsum() { SUM=$[$N1+$N2] echo "sum=$SUM" } read -p "请输入第一个数字:" N1 read -p "请输入第二个数字:" N2 getsum $N1 $N2
需求分析
1、每天凌晨2:30备份数据库hspedu到/data/backup/db
2、备份开始和备份结束能够给出相应的提示信息
3、备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz
4、在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
#!/bin/bash #设置备份目录 BACKUP=/data/backup/db #处理当前时间 DATETIME=`date +%Y-%m-%d_%H%M%S` echo $DATETIME #设置数据库地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=root #备份的数据库名 DATABASE=hk9527 #创建备份目录,如果不存在此目录,就创建 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库 mysqldump -u${DB_USER} -P${db_pw} --host=${HOST} -q -R --datebase ${DATEBASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz #将文件处理成 tar.gz cd ${BACKUP} tar -zcvf ${DATETIME}.tar.gz ${DATETIME} #删除对应的备份目录 rm -rf ${BACKUP}/${DATETIME} #删除10天前的备份文件 find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf{}; echo "备份数据库${BACKUP}成功。"
1)日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
2)日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
3)可以这样理解:日志是用来记录重大事件的工具
/var/log/目录就是系统日志文件的保存位置
#应用案例 使用root 用户通过xshell6登陆,第一次使用错误的密码,第二次使用正确的密码登录成功看看在日志文件/var/log/secure里有没有记录相关信息
CentOS7.6日志服务是rsyslogd ,CentOS6.x日志服务是syslogd,rsyslogd功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd服务兼容的。
ps -aux | grep "rsyslog" l grep -v "grep" #查询Linux中的rsyslogd_服务是否启动 systemctl list-unit-files | grep rsyslog #查询rsyslogd服务的自启动状态 | grep -v "grep" #-v表示反向查找,即除了结果grep之外全部显示出来
配置文件:/etc/rsyslog.conf
编辑文件时的格式为:
** 存放日志文件
其中第一个*代表日志类型,第二个*代表日志级别
日志类型分为:
auth #pam产生的日志 authpriv #ssh、ftp等登录信息的验证信息 corn #时间任务相关 kern #内核 lpr #打印 mail #邮件 mark(syslog)-rsyslog #服务内部的信息,时间标识 news #新闻组 user #用户程序产生的相关信息 uucp #unix to nuix copy主机之间相关的通信 local 1-7 #自定义的日志设备
日志级别分为:
debug #有调试信息的,日志通信最多 info #一般信息日志,最常用 notice #最具有重要性的普通条件的信息 warning #警告级别 err #错误级别,阻止某个功能或者模块不能正常工作的信息 crit #严重级别,阻止整个系统或者整个软件不能正常工作的信息 alert #需要立刻修改的信息 emerg #内核崩溃等重要信息 none #什么都不记录 注意:从上到下,级别从低到高,记录信息越来越少
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列
①事件产生的时间
②产生事件的服务器的主机名
③产生事件的服务名或程序名
④事件的具体信息
查看一下/var/log/secure日志,这个日志中记录的是用户验证和授权方面的信息来分析如何查看
在/etc/rsyslog.conf 中添加一个日志文件/var/log/zrh.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存,演示重启,登录的情况,看看是否有日志保存
<<root@HK9527 ~>># touch /var/log/zrh.log <<root@HK9527 ~>># vim /etc/rsyslog.conf
然后进行重启、登录操作,查看日志情况
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
日志轮替文件命名
1)centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf 配置文件中 “daeext”参数
2)如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀
例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
3)如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。
当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。
当第二次进行日志轮替时,“secure.1"会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建"secure”日志,用来保存新的日志,以此类推。
logrotate配置文件
/etc/logrotate.conf为logrotate的全局配置文件 # rotate log files weekly:每周对日志文件进行一次轮替 weekly #keep 4 weeks worth of backlogs:共保存4份日志文件,当建立新的日志文件时,旧的将会被删除 rotate 4 #create new (empty) log files after rotating old ones:创建新的空的日志文件,在日志轮替后 create #use date as a suffix of the rotated file:使用日期作为日志轮替文件的后缀 dateext #uncomment this if you want your log files compressed:日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩 #compress #RPM packages drop log rotation information into thisdirectory include /etc/logrotate.d #包含/etc/logrotate.d目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来. #下面是单独设置,优先级更高 # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly #每月对日志文件进行一次轮替 create 0664 root utmp #建立的新日志文件,权限是0664,所有者是root ,所属组是_utmp 组 minsize 1M #日志文件最小轮替大小是1MB。也就是日志一定要超过lMB才会轮替,否则就算时间达到一个月,也不进行日志转储 rotate 1 #仅保留一个日志备份。也就是只有wtmp和wtmp.1日志保留而已 } /var/log/btmp { missingok #如果日志不存在,则忽略该日志的警告信息 monthly create 0600 root utmp rotate 1 }
参数 #参数说明 daily #日志的轮替周期是每天 weekly #日志的轮替周期是每周 monthly #日志的轮替周期是每月 rotate 数字 #保留的日志文件的个数。0指没有备份 compress #日志轮替时,旧的日志进行压缩 create mode owner group #建立新日志,同时指定新日志的权限与所有者和所属组。 mail address #当日志轮替时,输出内容通过邮件发送到指定的邮件地址 missingok #如果日志不存在,则忽略该日志的警告信息 notifempty #如果日志为空文件,则不进行日志轮替 minsize 大小 #日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 size 大小 #日志只有大于指定大小才进行日志轮替,而不是按照时间轮替 dateext #使用日期作为日志轮替文件的后缀 sharedscripts #在此关键字之后的脚本只执行一次 prerotate/endscript #在日志轮替之前执行脚本命令 postrotate/endscript #在日志轮替之后执行脚本命令
把自己的日志加入日志轮替
1)第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略
2)第二种方法是在/etc/logrotate.d目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
3)推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
案#例:在/etc/logrotate.conf进行配置、或者直接在letc/logroate.d下创建文件zrhlog编写如下内容 cd /etc/logrotate.conf touchu zrhlog vim zrhlog /var/log/zrhlog { missingok daily rotate 7 } :wq
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。
在/etc/cron.daily/目录,就会发现这个目录中是有logrotate 文件(可执行),logrotate 通过这个文件依赖定时任务执行的。
有一部分日志是在内存中的,是实时变化的,是与当前系统相关的日志,内存日志重启后会被清空
常用的指令 journalctl #查看全部 journalctl -n 3 #查看最新3条 joumalctl--since 19:00 --until 19:10:10 #查看起始时间到结束时间的日志可加日期 journaletl -p err #报错日志 journalctl -o verbose #日志详细内容 journalctl_PID=1245 _COMM=sshd #查看包含这些参数的日志(在详细日志查看)或者 journalctl | grep sshd #注意: journalctl查看的是内存日志,重启清空
演示案例: 在内存日志中查看看用户登录清空,重启系统,再次查询,看看日志有什么变化没有 #journalctl | grep sshd 或者 #journalctl _COMM=sshd
首先,需要向现有的Linux系统添加一块大小为20G的硬盘,注意将虚拟磁盘存储为单个文件,并且将磁盘名字需要记住
这里的磁盘名字设置为CentOS-7.6-diy.vmdk
然后进入到现有Linux系统进行系统设置
<<root@HK9527 ~>># lsblk <<root@HK9527 ~>># fdisk /dev/sdb 命令(输入 m 获取帮助):n Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+500M 分区 1 已设置为 Linux 类型,大小设为 500 MiB 命令(输入 m 获取帮助):n Select (default p): p 分区号 (2-4,默认 2): 起始 扇区 (1026048-41943039,默认为 1026048): 将使用默认值 1026048 Last 扇区, +扇区 or +size{K,M,G} (1026048-41943039,默认为 41943039): 将使用默认值 41943039 分区 2 已设置为 Linux 类型,大小设为 19.5 GiB 命令(输入 m 获取帮助):w <<root@HK9527 ~>># mkfs -t ext4 /dev/sdb1 <<root@HK9527 ~>># mkfs -t ext4 /dev/sdb2 <<root@HK9527 ~>># lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 6a3be652-f197-44e3-bfe6-55ee2d541d53 /boot ├─sda2 swap 7a56735e-9dfa-4f4d-a03a-45d64d7a111c [SWAP] └─sda3 ext4 389b48a4-a970-4b94-aa6b-b209d9c5358d / sdb ├─sdb1 ext4 28754a89-4191-4052-a3b4-df9d1c04058c └─sdb2 ext4 7e095501-0466-4ed9-81d6-3a5c242180ce <<root@HK9527 ~>># mkdir -p /mnt/boot /mnt/sysroot <<root@HK9527 ~>># mount /dev/sdb1 /mnt/boot <<root@HK9527 ~>># mount /dev/sdb2 /mnt/sysroot <<root@HK9527 ~>># grub2-install --root-directory=/mnt /dev/sdb <<root@HK9527 ~>># hexdump -C -n 512 /dev/sdb <<root@HK9527 ~>># cp -rf /boot/* /mnt/boot/ <<root@HK9527 ~>># vim /mnt/boot/grub2/grub.cfg 进入到cfg配置文件之后,可利用vim的底线命令模式进行批量替换 :g/6a3be652-f197-44e3-bfe6-55ee2d541d53/s//28754a89-4191-4052-a3b4-df9d1c04058/g :g/389b48a4-a970-4b94-aa6b-b209d9c5358d/s//7e095501-0466-4ed9-81d6-3a5c242180ce/g 然后在"linux16"关键词所在行之后添加 selinux=0 init=/bin/bash <<root@HK9527 ~>># mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root} <<root@HK9527 ~>># cp /lib64/*.* /mnt/sysroot/lib64/ <<root@HK9527 ~>># cp /bin/bash /mnt/sysroot/bin/ <<root@HK9527 ~>># init 0 #关机之后,拷贝新的命令 <<root@HK9527 ~>># mount /dev/sdb2 /mnt/sysroot <<root@HK9527 ~>># cp /bin/ls /mnt/sysroot/bin/ <<root@HK9527 ~>># cp /bin/systemctl /mnt/sysroot/bin/ <<root@HK9527 ~>># cp /sbin/reboot /mnt/sysroot/sbin/ <<root@HK9527 ~>># init 0
最后将磁盘挂载到一个新的虚拟机上,开机即可
内核地址: https://www.kernel.org/
下载&解压最新版的内核 #wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz #tar -zxvf linux-5.8.16.tar.gz
升级内核不是说自己想升级到那个版本的内核就升级对的,系统会根据自身的情况去判断此设备可以升级到哪些内核
升级内核步骤
uname -a #查看当前的内核版本 yum info kernel -q #检测内核版本,显示可以升级的内核 yum update kernel #升级内核 yum list kernel -q #查看已经安装的内核
升级之后在Linux启动界面可以选择相应的内核进入系统
更换内核重启后,其他配置都不会改变,只是内核改变了
实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术
linux的备份和恢复很简单,有两种方式:
1、把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可
2、使用 dump 和 restore 命令
如果linux上没有dump和restore指令,需要先安装 #yum -y install dump #yum -y install restore
dump支持分卷和增量备份〈所谓增量备份是指备份上次备份后修改/增加过的文件,也称差异备份)
#语法说明 dump [-cu] [-123456789] [-f<备份后文件名>] [-T<日期>] [目录或文件系统] dump -w/w #-c:创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789:备份的层级,参数c具体的值,0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件,到9后,可以再次轮替. #-f<备份后文件名>:指定备份后文件名 #-j:调用bzlib库压缩备份文件,也就是将备份后的文件压缩成bz2格式,让文件更小 #-T<日期>:指定开始备份的时间与日期 #-u:备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等 #-t:指定文件名,若该文件已存在备份文件中,则列出名称 #-W:显示需要备份的文件及其最后一次备份的层级,时间,日期 #-w :与-W类似,但仅显示需要备份的文件
#应用案例1:将/boot 分区所有内容备份到/opt/boot/bak0.bz2文件中,备份层级为"0" dump -0uj -f /opt/boot.bak0.bz2 /boot #应用案例2:在/boot目录下增加新文件,备份层级为“1”(只备份上次使用层级"0"备份后发生过改变的数据),注意比较看看这次生成的备份文件boot.bak1有多大 dump -1uj -f /opt/boot.bak1.bz2 /boot
通过dump命令在配合crontab 可以实现无人值守备份
dump -W #显示需要备份的文件及其最后一次备份的层级,时间,日期
cat /etc/dumpdates #查看备份时间文件
dump备份文件或者目录
前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份,即只能使用0级别备份 #案例:使用dump备份/etc整个目录 dump -0j -f /opt/etc.bak.bz2 /etc/ #下面这条语句会报错,提示DUMP: Only level 0 dumps are allowed on a subdirectory dump-1j -f /opt/etc.bak.bz2 /etc/
如果是重要的备份文件,比如数据区,建议将文件上传到其它服务器保存,确保数据安全性
restore命令用来恢复已备份的文件,可以从dump 生成的备份文件中恢复原文件
restore [模式选项] [选项] #说明下面四个模式,不能混用,在一次命令中,只能指定一种。 -C:使用对比模式,将备份的文件与已存在的文件相互对比 -i:使用交互模式,在进行还原操作时,restors指令将依序询问用户 -r:进行还原模式 -t:查看模式,看备份文件有哪些文件 选项 -f<备份设备>:从指定的文件中读取备份数据,进行还原操作
应用案例1:restore命令比较模式,比较备份文件和原文件的区别
<<root@HK9527 boot>># mv case.txt case01.txt <<root@HK9527 boot>># restore -C -f /opt/back1.ba2 Label: none filesys = /boot restore: unable to stat ./case.txt: No such file or directory Some files were modified! 1 compare errors <<root@HK9527 boot>># mv case01.txt case.txt <<root@HK9527 boot>># restore -C -f /opt/back1.ba2 Label: none filesys = /boot
Some files were modified! 1 compare errors 表示有1个文件不同
应用案例2:restore命令查看模式,看备份文件有哪些数据/文件
restore -t -f /opt/back1.ba2
应用案例3:restore命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。
mkdir /opt/boottmpcd /opt/boottmp restore -r -f /opt/back0.bz2 #恢复到第1次完全备份状态 restore -r -f /opt/back1.bz2 #恢复到第2次增量备份状态
应用案例4:restore命令恢复备份的文件,或者整个目录的文件
<<root@HK9527 boot>># dump -0j -f /opt/etcback.bz2 /etc/ <<root@HK9527 boot>># mkdir etcback <<root@HK9527 boot>># cd etcback/ <<root@HK9527 etcback>># restore -r -f /opt/etcback.bz2 <<root@HK9527 etcback>># cd etc/ <<root@HK9527 etc>># ls
Webmin是功能强大的基于Web的Unix linux系统管理工具
管理员通过浏览器访向Webmin的各种管理功能并完成相应的管理操作
除了各版本的 linux以外还可用于:AIX、HPUX、Solaris、 Unixware、lrix和FreeBSD等系统
#①下载地址 http:/ldownload.webmin.com/download/yum/ ,用下载工具下载即可 也可以使用 wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm #②安装:rpm -ivh webmin-1.700-1.noarch.rpm #③重置密码 /usr/libexec/webmin/changepass.pl /etc/webmin root hk9527 #root是webmin的用户名,不是OS的,这里就是把 webmin 的root 用户密码改成了hk9527 #④修改webmin服务的端口号(默认是10000出于安全目的) vim /etc/webmin/miniserv.conf #修改端口 将port=10000修改为其他端口号,如port=66666 #⑤重启webmin /etc/webmin/restart #重启 /etc/webmin/start #启动 /etc/webmin/stop #停止 #⑥防火墙放开6666端口 firewall-cmd --zone=public --add-port=6666/tcp -permanent #配置防火墙开放6666端口 firewall-cmd --reload #更新防火墙配置 firewall-cmd --zone=public --list-ports #查看已经开放的端口号 #⑦登录webmin http://ip:6666可以访问了 用root账号和重置的新密码test
修改端口时修改以下红色框中的内容
登录时使用root与修改后的密码登录
对webmin进行语言配置
bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/IAVA等多项服务器管理功能。
#①安装 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh #②安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录
访问不了的话就要去防火墙开放[8888]端口
在宝塔上安装mysql数据库
#一——-------安装Mysql依赖【perl net-too1s 】 yum install perl net-tools -y #一——-------卸载mariadb rpm -qa l grep mariadb rpm -e --nodeps mariadb-libs-5.5.60-1.e17_5.x86_64 #-—--------安装mysq1 tar -xvf mysq1-8.0.18-1.e17.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-8.0.18-1.e17.x86_64.rpm rpm -ivh mysq1-community-libs-8.0.18-1.e17.x86_64.rpm rpm -ivh mysq1-community-client-8.0.18-1.e17.x86_64 .rpmr pm -ivh mysq1-community-server-8.0.18-1.e17.x86_64.rpm ---------启动mysq1 systemct1 start mysqld #-—--------查找密码并登陆mysq1 cat /var/log/mysqld.log l grep password mysql -u root -p #----------修改Mysql密码8.0版本输入命令: set global validate_password.po1icy=LOW; set global validate_password.length=6; #更改加密方式 ALTER USER 'root' @ 'localhost’ IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;#更新用户密码 ALTER USER 'root' @ 'loca1host' IDENTIFIED WITH mysql_native_password BY '123456‘ #刷新权限 FLUSH PRIVILEGES; #—---------修改Mysq1密码5.7版本输入命令: set global validate_password_policy=LOW; set global validate_password_length=6; alter user root@1ocalhost identified by '123456'; #-―--------修改Mysql链接地址 use mysql; update user set host='%' where user = 'root '; commit; exit; systemctl restart mysqld; #----------使用Navicat连接Mysql
找回mysql数据库的root用户密码
vim /etc/my.cnf skip-grant-tables #在文本最后加入这句话,这句话是跳过权限列表的意思 systemcrl restart mysqld mysql -u root -p 然后输入空密码即可进入数据库 show databases; use mysql; show tables; desc user; mysql> update user set authentication_string=password("hk9527") where user='root'; mysql> flush privileges; mysql> exit
八、tcpdump
tcpdump:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析
它支持针对网络层、协议、主机、网络或端口的过滤
tcpdump -i ens33 #监视指定网络接口的数据包 如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是ens33
监视指定主机的数据包,也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1
#使用tcpdump监听本机,将来自ip 192.168.200.1,tcp端口为22的数据,保存输出到tcpdump.log ,用做将来数据分析(美团) tcpdump -i ens33 host 192.168.200.1 and port 22 >> /tmp*tcpdump.log