当前位置:   article > 正文

Linux2_snabtxt

snabtxt

gzip命令:只能对文件进行压缩,不能对目录进行压缩(压缩txt文件最好的命令,对于其他二进制文件压缩没有作用)
只有完全压缩完成之后,才会把源文件删除掉,如果压缩到一半断电了,源文件和压缩的文件都会显示,只是压缩的文件里面只有一半内容
[root@YangQQ home]# cd vi/
[root@YangQQ vi]# ls
1.txt 2.txt 3.txt anaconda-ks.cfg
[root@YangQQ vi]# du -sh * #查看压缩之前文件的大小
16M 1.txt
1.9M 2.txt
4.0K 3.txt
4.0K anaconda-ks.cfg
[root@YangQQ vi]# gzip * #gzip *(通配符)进行压缩,压缩之后文件后缀名加. gz
[root@YangQQ vi]# du -sh * #查看压缩之后文件的大小
44K 1.txt.gz
8.0K 2.txt.gz
4.0K 3.txt.gz
4.0K anaconda-ks.cfg.gz

[root@YangQQ vi]# ls
txt.gz 2.txt.gz 3.txt.gz anaconda-ks.cfg.gz
[root@YangQQ vi]# gunzip 3.txt.gz #gunzip 文件名称,表示进行解压,只有内容完全解压之后,才会把源文件删除掉
[root@YangQQ vi]# ls
txt.gz 2.txt.gz 3.txt anaconda-ks.cfg.gz

tar -zcvf 压缩名参数 目录名参数:表示将目录打包之后进行gzip压缩(f一定要写在最后,因为f后面跟参数;v表示进度;c表示打包(或者创建);-z表示进行压缩)(tar是一个危险命令)
[root@YangQQ home]# ls
la.txt sort test vi yangqq yqq1 yqq2
[root@YangQQ home]# cd test/
[root@YangQQ test]# ls
d1 d2
[root@YangQQ test]# cd d2/
[root@YangQQ d2]# ls
20181205.log 20181206.log d21 d22
[root@YangQQ d2]# cd …
[root@YangQQ test]# tar -zcvf d2.tar.gz d2 #将d2目录打包之后进行gzip压缩
d2/
d2/d21
d2/d22
d2/20181205.log
d2/20181206.log
[root@YangQQ test]# ls
d1 d2 d2.tar.gz
把上面打包之后的压缩包拷走到另外一个目录下,然后在这个目录下进行解包
[root@YangQQ test]# cp d2.tar.gz /home/sort/ #将压缩包d2.tar.gz拷到/home/sort/下
[root@YangQQ test]# cd …
[root@YangQQ home]# cd sort/
[root@YangQQ sort]# ls #在这个目录下已经显示了压缩包
d2.tar.gz sort1.txt
[root@YangQQ sort]# tar -zxvf d2.tar.gz #进行解包:tar -zxvf 压缩包名称
d2/
d2/d21
d2/d22
d2/20181205.log
d2/20181206.log
[root@YangQQ sort]# ls
d2 d2.tar.gz sort1.txt

重定向的命令:
讲重定向之前先讲下标准输出和标准错误
第一个命令:标准输出;第二个命令:标准错误;第三个命令:标准错误和标准输出同时出现
在这里插入图片描述
下面是重定向
重定向的符号:>表示覆盖
先找到一个文件的标准输出,把标准输出重定向到另外一个文件中,然后查看这个文件
在这里插入图片描述

重定向的前面使用任何命令都可以,只要是命令输出的内容都可以重定向到后面的文件中
在这里插入图片描述

上面圈中的既有标准输出,又有标准错误,这个时候重定向到一个文件里面,文件中只有有标准输出,漏掉标准错误,可以用下面固定的写法:把标准错误(用2代替)重定向到标准输出(用1代替)中
在这里插入图片描述

重定向的符号:>>表示追加

第二讲 掌握系统状况、系统安全

一、 系统状况

  1. 用户
    用户管理
    a) whoami命令
    表示查看自己是什么用户(可以进行切换)
    [root@YangQQ ~]# whoami
    root
    [root@YangQQ ~]# su yqq1
    [yqq1@YangQQ root]$ whoami
    yqq1
    注意:这里需要添加多个用户(需要知道添加用户的命令),才能使用su切换到其他的用户

b) logname命令
表示查看自己是以什么用户登录的机器(即ssh 什么用户登录@ip)
[yqq1@YangQQ root]$ logname
root
[yqq1@YangQQ root]$ su root
密码: #输入的密码(yqq418@qq.com)不会显示出来
[root@YangQQ ~]# logname
root
注意仔细查看上述两个命令的区别:logname和whoami将是运维工作中自定义审计系统的重要命令。

c) who命令或者w命令
表示查看当前登录账户(即ssh 什么用户登录@ip)(这个命令简单看下就可以了)
[root@localhost ~]# who
root :0 2020-03-11 16:33 (:0)
root pts/0 2020-03-11 16:34 (:0)
root pts/1 2020-03-11 16:35 (192.168.47.1)
yqq1 pts/2 2020-03-11 17:10 (192.168.47.1)
[root@localhost ~]# w
17:11:30 up 40 min, 4 users, load average: 0.00, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 16:33 ?xdm? 1:29 1.04s /usr/libexec/gnome-session-binary --session gnome-classic
root pts/0 :0 16:34 37:06 0.11s 0.11s bash
root pts/1 192.168.47.1 16:35 2.00s 0.29s 0.02s w
yqq1 pts/2 192.168.47.1 17:10 18.00s 0.06s 0.06s -bash
第一行显示当前时间,机器启动时长,当前有多少用户在线,和1分钟、5分钟、15分钟load。(load在后面会讲到,这里不讲解)
其中,USER指的是logname;tty是登陆的模式,tty1是从本地登录,pts从远程登录;from是登陆来源IP;login@是登陆时间;idle是空闲时间,也就是上一次执行命令的时间;jcpu是占用cpu时间总和;pcpu是当前进程占用cpu时间;what指当前这个链接在执行什么程序(不准确)。

d) last命令
表示查看历史登录用户,机器之前的登陆状态,以及重启机器的历史记录
[root@YangQQ ~]# last
root pts/1 192.168.47.1 Mon Jan 13 16:40 still logged in
root pts/0 :0 Mon Jan 13 16:39 - 16:41 (00:01)
root pts/1 192.168.47.1 Fri Jan 10 15:08 - 18:03 (02:55)
root pts/0 :0 Fri Jan 10 10:19 - 16:39 (3+06:19)
root :0 :0 Fri Jan 10 10:19 still logged in
reboot system boot 3.10.0-1062.el7. Fri Jan 10 10:17 - 20:48 (3+10:31)
root pts/1 192.168.47.1 Wed Dec 4 14:38 - down (00:15)
第一列logname;第二列登陆方式,system boot意味着这时候启动机器;第三列来源ip,第四列之后,登陆时间,结束登陆时间和持续时间,括号中为持续时间,小时:分钟的格式。其中down代表该用户非主动退出,而是关机造成。

e) useradd命令
表示增加用户的命令
useradd需要root用户来执行,普通用户没有权限;passwd如果使用root用户执行,可对所有用户修改密码;如果是用普通用户,只能对该用户本身修改密码,并且在修改密码前需要输入原有密码。一般使用root执行useradd命令后,紧接着使用passwd命令为用户设置密码。
passwd命令后面跟用户名为指定用户修改密码,不加参数为自己修改密码。
[root@YangQQ ~]# useradd yqq3 #yqq3为用户名
[root@YangQQ ~]# passwd yqq3
更改用户 yqq3 的密码 。
新的 密码: #输入密码时,不会显示出来
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

注意:useradd命令执行之后会在/etc/passwd文件(任何用户都有权限查看)和/etc/shadow (只有root用户有权限查看)中增加一行,从而建立用户。
[root@YangQQ ~]# cat /etc/passwd
root❌0:0:root:/root:/bin/bash
……
yangqq❌1000:1000:yangqq:/home/yangqq:/bin/bash
yqq1❌1001:1001::/home/yqq1:/bin/bash
yqq2❌1002:1002::/home/yqq2:/bin/bash
yqq3❌1003:1003::/home/yqq3:/bin/bash
以冒号分隔,其中:
第一列是用户名,在useradd命令执行时指定用户名是已经确定;
第二列是密码,由于现在linux都使用/etc/shadow文件加密存放密码,这一列已经没有实际作用;
第三列是用户id,如果在建用户时没有指定,就按照系统规则顺序排序;
第四列是用户组id,如果在建用户时没有指定组,就默认新建一个和用户名一样的组名,如果指定,用户将有指定的默认组;
第五列是用户的家目录,没有指定的话默认在/home/username下;
第六列是用户默认使用的shell,默认是bash。
除用户名外,其它属性均可以使用usermod等命令改变。

[root@YangQQ ~]# cat /etc/shadow
root: 6 6 6WKjspC0D6yyX9tEt$wRh1Qu3O9f9cqlrfJVYXMkhk8bs8GvQ21G8nLKhjA5.cquK6YBf7N.3rTvalRrkRexb0oXUUr
bin::17834:0:99999:7:::
daemon:
:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
……
yangqq: 6 6 6o.iMxi6sZveqZXDh$x1JOtKY8p0apSKFo/joGKU9j6p6zOAk7K9aqSrkug.6iKPGiqI/TGB3AyfETNxh1bKcyXqi
yqq1:$6 9 A x Y 1 v y e 9AxY1vye 9AxY1vyekEw0OxpGQPF28ij57A3BugyEqZT8XOjbiJ46yGFiFpPf17QKzUY6gBwS.FzzM4tBYHZHE6fmiswfHtWsR
yqq2: 6 6 6anRKCETd$Iv/GcYkMvYceIdSNaBMGc3wlqx3Hk4qsCFKXmmShFzjQvwYxkQhSTwN/SGg90oWAlpVWvZu4zsZy4zwik
yqq3: 6 6 6k3Iei.rO$zvimF3lmAfW2dxXMQmjsyuopM7mYq62XywWp2MqSD9EuVm9s.e9jzWDGpKprnFSF5fiPDFbrlzxJ4Z9K
以冒号分隔,其中:
第一列是:用户名;
第二列是:密码的MD5加密码,可以认为就是密码;
第三列是:密码最近一次修改的时间,使用标准时间。标准时间指从1970.1.1日期到这个时间的天数(秒数);
第四列是:指密码可被修改的最少天数,0代表可随时修改;
第五列是:密码的有效期,99999(274年)可以认为永不过期;
第六列是:提示密码过期的天数,这里是前七天开始提示密码过期;
第七列是:密码过期后,系统禁用账户的天数,空表示一直禁用;
第八列是:密码过期后,账户已经被禁用的天数;
第九列是:暂时没有使用,供以后新增功能。
该文件为用户密码限制的文件,以上参数可以通过chage和usermod命令修改。

f) userdel命令
删除用户(userdel),删除的并不彻底,还需要执行rm -rf /home/用户名彻底删除
[root@YangQQ ~]# userdel yqq3
[root@YangQQ ~]# cd /home
[root@YangQQ home]# ls
la.txt sort test vi yangqq yqq1 yqq2 yqq3
[root@YangQQ home]# rm -rf /home/yqq3
[root@YangQQ home]# ls
la.txt sort test vi yangqq yqq1 yqq2
切换用户(su命令)
su命令切换用户
su使一个用户跳转到另外一个用户,如果是从root用户向其他用户跳转,不需要目标用户的密码;如果从普通用户向其他用户(root用户+普通用户)跳转,需要目标用户的密码。
[root@YangQQ /]# su yqq1 #从root用户切换到其他用户
[yqq1@YangQQ /]$ su root #从普通用户切换到其他用户
密码:
[root@YangQQ /]# su yqq1
[yqq1@YangQQ /]$ exit #退出当前yqq1用户,回到root用户
exit
[root@YangQQ /]# exit #退出当前root用户,回到yqq1用户
[yqq1@YangQQ /]$

“su –“ 命令的用途
“su –“ 命令可以使用目标用户的环境变量。(关于环境变量,在shell script中详细介绍。)环境变量定义了用户可执行命令的目录,被定义目录中的命令可以直接执行而不必输入路径。查看环境变量可以简单地使用echo $PATH。
[root@YangQQ /]# echo KaTeX parse error: Expected 'EOF', got '#' at position 103: …[root@YangQQ /]#̲ su yqq1 [yqq1@… echo P A T H / u s r / l i b 64 / q t − 3.3 / b i n : / u s r / l o c a l / s b i n : / u s r / l o c a l / b i n : / u s r / s b i n : / u s r / b i n : / r o o t / b i n [ y q q 1 @ Y a n g Q Q / ] PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [yqq1@YangQQ /] PATH/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[yqq1@YangQQ/] exit
exit
[root@YangQQ /]# su - yqq1
上一次登录:四 3月 12 10:34:26 CST 2020pts/1 上
[yqq1@YangQQ ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yqq1/.local/bin:/home/yqq1/bin
可以看到,如果不使用”-”参数,环境变量不发生变化,即使从root账户su到普通账户,仍然使用的root账户的环境变量,但这个时候有些命令就没有权限执行了;使用”-”参数后,切换用户后将使用新用户的环境变量。
注意:推荐使用su –命令来切换用户。每个用户的环境变量都是不一样的,都是有目的的。用自己的环境变量套用其他的账户会出现一些麻烦。在shell script中尤为明显。
特殊的用法:切换到root的时候,可以不写root,直接写su -就表示切换到root用户
2. 硬件状态查看
磁盘状态
a) fdisk命令 磁盘管理
fdisk 是一个强大的危险命令,所有涉及磁盘的操作都由该命令完成,包括:新增磁盘、增删改磁盘分区等。这里仅作简单介绍。
fdisk -l 表示查看磁盘分区情况
[root@YangQQ yqq1]# fdisk -l

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0008daf0

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM

磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:2952 MB, 2952790016 字节,5767168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-home:49.7 GB, 49652170752 字节,96976896 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到,该机器上的硬盘只有一块,命名为/dev/sda,可用107.4G。该磁盘分为两个分区,第一个分区从第2048个柱面开始到第2099199个柱面结束,占据1048576个数据块,为linux分区……这样的信息在某些紧急情况下是有用的。
b) df命令 查看分区使用情况
[root@YangQQ yqq1]# df #表示全部以k为单位(基本不用这个)
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 698696 0 698696 0% /dev
tmpfs 715744 0 715744 0% /dev/shm
tmpfs 715744 10708 705036 2% /run
tmpfs 715744 0 715744 0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 8853556 43549644 17% /
/dev/sda1 1038336 175708 862628 17% /boot
/dev/mapper/centos-home 48464772 38324 48426448 1% /home
tmpfs 143152 4 143148 1% /run/user/42
tmpfs 143152 36 143116 1% /run/user/0
/dev/sr0 4554702 4554702 0 100% /run/media/root/CentOS 7 x86_64
tmpfs 143152 0 143152 0% /run/user/1001
tmpfs 143152 0 143152 0% /run/user/1002
tmpfs 143152 0 143152 0% /run/user/1000

[root@YangQQ yqq1]# df -k #表示全部以k为单位,和上面的df一样
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 698696 0 698696 0% /dev
tmpfs 715744 0 715744 0% /dev/shm
tmpfs 715744 10708 705036 2% /run
tmpfs 715744 0 715744 0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 8854060 43549140 17% /
/dev/sda1 1038336 175708 862628 17% /boot
/dev/mapper/centos-home 48464772 38324 48426448 1% /home
tmpfs 143152 4 143148 1% /run/user/42
tmpfs 143152 36 143116 1% /run/user/0
/dev/sr0 4554702 4554702 0 100% /run/media/root/CentOS 7 x86_64
tmpfs 143152 0 143152 0% /run/user/1001
tmpfs 143152 0 143152 0% /run/user/1002
tmpfs 143152 0 143152 0% /run/user/1000

[root@YangQQ yqq1]# df -m #表示全部以m为单位(基本不用这个)
文件系统 1M-块 已用 可用 已用% 挂载点
devtmpfs 683 0 683 0% /dev
tmpfs 699 0 699 0% /dev/shm
tmpfs 699 11 689 2% /run
tmpfs 699 0 699 0% /sys/fs/cgroup
/dev/mapper/centos-root 51175 8647 42529 17% /
/dev/sda1 1014 172 843 17% /boot
/dev/mapper/centos-home 47329 38 47292 1% /home
tmpfs 140 1 140 1% /run/user/42
tmpfs 140 1 140 1% /run/user/0
/dev/sr0 4448 4448 0 100% /run/media/root/CentOS 7 x86_64
tmpfs 140 0 140 0% /run/user/1001
tmpfs 140 0 140 0% /run/user/1002
tmpfs 140 0 140 0% /run/user/1000

[root@YangQQ yqq1]# df -h #自动显示单位(M、G等),该是多少就是多少(比较常用)
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 683M 0 683M 0% /dev
tmpfs 699M 0 699M 0% /dev/shm
tmpfs 699M 11M 689M 2% /run
tmpfs 699M 0 699M 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 8.5G 42G 17% /
/dev/sda1 1014M 172M 843M 17% /boot
/dev/mapper/centos-home 47G 38M 47G 1% /home
tmpfs 140M 4.0K 140M 1% /run/user/42
tmpfs 140M 36K 140M 1% /run/user/0
/dev/sr0 4.4G 4.4G 0 100% /run/media/root/CentOS 7 x86_64
tmpfs 140M 0 140M 0% /run/user/1001
tmpfs 140M 0 140M 0% /run/user/1002
tmpfs 140M 0 140M 0% /run/user/1000
-h参数是以人类可理解方式显示磁盘空间。第一列为分区,第二列为分区大小,第三列为使用量,第四列为剩余量,第五列为使用百分比,最后是挂载点。一目了然,反应磁盘使用情况。
其中tmpfs是个特殊分区,可以理解为2.6内核带来的新特性,更高效率的使用内存和虚拟空间的技术。系统偶尔用到,某些特殊应用有需求,比如:oracle。

[root@YangQQ yqq1]# df -I
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 174674 419 174255 1% /dev
tmpfs 178936 1 178935 1% /dev/shm
tmpfs 178936 1026 177910 1% /run
tmpfs 178936 16 178920 1% /sys/fs/cgroup
/dev/mapper/centos-root 26214400 244682 25969718 1% /
/dev/sda1 524288 384 523904 1% /boot
/dev/mapper/centos-home 24244224 230 24243994 1% /home
tmpfs 178936 6 178930 1% /run/user/42
tmpfs 178936 21 178915 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
tmpfs 178936 1 178935 1% /run/user/1001
tmpfs 178936 1 178935 1% /run/user/1002
tmpfs 178936 1 178935 1% /run/user/1000

上面的Inode表示这个分区下所有文件的索引,会占用一定空间。如果使用df -h查看分区的可用空间还有,但是一直提示no space left on 某个目录下(表示在某个目录下没有剩余空间),可以使用df -I查看Inode是否满了(处理方法:扩大磁盘空间)

c) du命令 显示文件目录大小
对于目录,不加-s参数会将目录下所有目录依次列出。加了-s参数后仅仅显示目标目录的大小。
[root@YangQQ home]# du
#列举出home目录下的所有目录(包括子目录)以及对应的大小(一般不这么用)
0 ./yangqq/.mozilla/extensions
0 ./yangqq/.mozilla/plugins
0 ./yangqq/.mozilla
4 ./yangqq/.cache/gdm
……
24 ./yqq1
0 ./yqq2/.mozilla/extensions
0 ./yqq2/.mozilla/plugins
0 ./yqq2/.mozilla
4 ./yqq2/.cache/abrt
4 ./yqq2/.cache
0 ./yqq2/.config/abrt
0 ./yqq2/.config
0 ./yqq2/.local/share
0 ./yqq2/.local
24 ./yqq2
5200 .

[root@YangQQ home]# du -s #仅仅显示目标目录的大小
5200 .

[root@YangQQ home]# du -s *
#只会显示home目录下的文件或者目录的大小(不会显示子目录)
4 la.txt
4 sort
0 test
72 vi
5048 yangqq
24 yqq1
24 yqq2
[root@YangQQ home]# ls #查看下home下的目录或者文件,和上面的是对应的
la.txt sort test vi yangqq yqq1 yqq2

[root@YangQQ home]# du -sk * # du -sk *(和du -s * 是一样的)比较常用
k表示单位。也可以写成du -sm *或者du -sh *。
4 la.txt
4 sort
0 test
72 vi
5048 yangqq
24 yqq1
24 yqq2
经典面试题:一个目录下方的文件或者目录占空间最大的前5位(使用管道)
[root@YangQQ home]# du -sk |sort -nr|head -n 5
5048 yangqq
72 vi
24 yqq2
24 yqq1
4 sort
内存情况
free命令查看当前内存使用情况
[root@YangQQ ~]# free
total used free shared buff/cache available
Mem: 1431492 997912 86688 14904 346892 232960
Swap: 2883580 10760 2872820
[root@YangQQ ~]# free -m #表示单位是M
total used free shared buff/cache available
Mem: 1397 973 85 14 338 228
Swap: 2815 10 2805
[root@YangQQ ~]# free -g #表示单位是G
total used free shared buff/cache available
Mem: 1 0 0 0 0 0
Swap: 2 0 2
free列表示实际剩余的内存(已经除掉了buff/cache),used表示实际使用的内存,buff/cache列表示新应用启动的时候能分的内存,可以被释放掉
total-used == free+buff/cache
cpu情况
a) uptime命令查看开机时间
[root@YangQQ ~]# uptime
17:08:27 up 7:49, 4 users, load average: 0.00, 0.01, 0.05
load表示在cpu里面跑的进程数,load average表示这一段时间内有几个进程在cpu里面跑。
load average:平均负载,被定义为在特定时间间隔内(一个cpu周期)运行队列中的平均进程数。这个数值关系到cpu是否还能胜任。分为1分钟平均值(对应上面的0.00)、5分钟平均值(对应上面的0.01)和15分钟平均值(对应上面的0.05)三个数值。(这三个值是会发生变化的,对应的是趋势,从后往前看(也就是从第三个值往前看到第一个值,这中间值的趋势))
load的健康值:不能超过cpu的个数
cpu的核数
任何进程都不会长时间占用cpu

b) vmstat 查看机器实时综合情况
[root@YangQQ ~]# vmstat
procs -----------memory---------- —swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 13064 100276 68 320984 0 0 19 2 32 55 0 0 100 0 0
vmstat是一个常用的运维命令,可以从进程数(load)、内存、swap、cpu使用率等方面考虑机器的使用情况。
在这里插入图片描述

如上图所示,其中参数1代表每一秒钟取一回数值。第一行数值为数据在之前一段时间的平均值,之后每一行列出的为当前的值。
字段说明:
procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
swap(交换区):
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
io(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
system(系统):
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间
st: 不用管(是虚拟机的东西)

lvm使用

  1. 查看进程情况
    a) ps 查看进程命令
    [root@YangQQ ~]# ps aux
    截图只是截取了一部分
    在这里插入图片描述

USER:表示进程的属主
PID :表示进程的ID
PPID :表示父进程
%CPU :表示进程占用的CPU百分比
%MEM :表示占用内存的百分比
VSZ :表示进程使用的虚拟內存量(KB)
RSS :表示进程占用的固定內存量(KB)(驻留中页的数量)
TTY :表示进程在哪个终端上运行,若与终端无关,则显示(?)
START:表示进程启动时间
TIME:表示进程实际使用CPU运行的时间
COMMAND:表示命令的名称和参数

STAT状态位含义:
D:表示无法中断的休眠状态(通常 IO 的进程)
R:表示正在运行可中在队列中可过行的
S:表示处于休眠状态
T:表示停止或被追踪;
W:表示进入内存交换 (从内核2.6开始无效)
X:表示死掉的进程 (基本很少见)
Z:表示僵尸进程
<:表示优先级高的进程
N:表示优先级较低的进程
L:表示有些页被锁进内存
s:表示进程的领导者(在它之下有子进程)
l:表示多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+:表示位于后台的进程组
[root@YangQQ ~]# ps -ef
截图只是截取了一部分
在这里插入图片描述

PPID:表示父进程id号
C:表示占用cpu百分比
注意:ps参数和含义很复杂,一般不去记忆。Ps有两套参数,一个是标准参数,一个是基于BSD的参数。Ps –ef命令就满足日常需要,ps aux可提供不少的扩展,这两个命令就能基本满足运维需求,使用好这两个组合即可。

b) top 查看进程对系统资源使用情况
TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

[root@YangQQ ~]# top
截图只是截取了一部分
在这里插入图片描述

一、TOP前五行统计信息
统计信息区前五行是系统整体的统计信息。

  1. 第一行是任务队列信息
    同uptime 命令的执行结果:
    [root@localhost ~]# uptime
    11:13:11 up 32 min, 2 users, load average: 0.40, 0.39, 0.29

  2. 第二、三行为进程和CPU的信息
    当有多个CPU时,这些内容可能会超过两行。内容如下:
    Tasks:
    249 total 进程总数
    1 running 正在运行的进程数
    247 sleeping 睡眠的进程数
    1 stopped 停止的进程数
    0 zombie 僵尸进程数
    Cpu(s):
    0.1% us 用户空间占用CPU百分比
    0.1% sy 内核(系统)空间占用CPU百分比
    0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
    99.9% id 空闲CPU百分比
    0.0% wa 等待输入输出的CPU时间百分比
    0.0% hi hard interrupt 硬件中断
    0.0% si soft interrupt 软件中断

  3. 第四五行为内存信息。
    在这里插入图片描述
    二. 进程信息
    1.默认显示的信息
    在这里插入图片描述
    以上是默认显示的进程信息,另外还有更多的进程信息可供选择:
    2.可选择显示的信息
    在这里插入图片描述
    3.增加显示信息和改变显示信息的顺序
    在top显示视图中,按字母“f”,进入增加\减少信息和排序选项。如下图所示:
    在这里插入图片描述

增加或减少列信息:
上下移动光标,比如选中“TIME+”,再按空格,可以将TIME+清除。
然后输入“q”,可退回到信息页面。
如下图,TIME+列没有了
在这里插入图片描述

再次按下“f”,回到选择页面。
上下调整光标到TIME项,按空格选中。
在这里插入图片描述

然后按方向键 “右”,整体选中这一行,再次按下上下键就可以调整改行的显示顺序
在这里插入图片描述

按下方向键“左”,可以退出对TIME的顺序调整。
然后“q”退出,可以看到用TIME代替了 TIME+
在这里插入图片描述

默认进程的排序是按照CPU使用量,如果需要按照MEM排序,做法如下:
按下f键,进入选择页面,注意看右上角位置
在这里插入图片描述

上下移动光标,选中MEM,然后按键“s”,就可将排序改为MEM
在这里插入图片描述

按“q”,退回显示页面,即为使用mem排序显示进程。
在这里插入图片描述

一般都是按照MEM或者CPU进行排序
4. 查看网络
a) Ip 网络配置命令
注意:不提倡使用ip命令来直接更改适配器的配置。一方面,命令比较复杂,存在大量误操作的风险,误操作后往往失去和主机的链接而无法修正错误;另一方面,ip命令配置的网络参数无法保存,在重启机器后失效。
通常用ip a命令查看ip地址
b) Ifconfig 网络配置命令
ifconfig命令功能很多,主要是查看网络适配器情况和配置网络适配器。
注意:不提倡使用ifconfig命令来直接更改适配器的配置。一方面,命令比较复杂,存在大量误操作的风险,误操作后往往失去和主机的链接而无法修正错误;另一方面,ifconfig命令配置的网络参数无法保存,在重启机器后失效。
一般使用ifconfig命令查看网络适配器的配置情况。
[root@YangQQ home]# ifconfig #下面复制一部分ifconfig命令的内容
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.47.130 netmask 255.255.255.0 broadcast 192.168.47.255
inet6 fe80::c573:b868:f930:9492 prefixlen 64 scopeid 0x20
ether 00:0c:29:f2:2c:11 txqueuelen 1000 (Ethernet)
RX packets 4197 bytes 355596 (347.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3178 bytes 1554073 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中,比较重要的信息包括:
ip地址、mac地址等网络基本信息;
RX packets、接收包,以及该行的errors,dropped等信息;
TX packets、发送包,以及该行的errors,dropped等信息;

其中,errors和dropped是判断网络异常的第一个检查点。在碰到网络异常的时候,应该首先从终端检查,然后排查网络设备。对linux服务器,从终端检查往往是查看ifconfig中的dropped值。最后发送和接受的字节数可以清楚地知道该机器的流量压力。
c) ss 查看网络、连接情况
ss -lnt(看监听状态的网络和连接情况)
ss -ant(看所有状态的网络和连接情况)
在这里插入图片描述

Listen:监听状态
ESTABLISHED:已经连接
TIME_WAIT:连接断开,处于等待释放阶段

  1. 查看系统日志
    [root@YangQQ ~]# cd /var/log
    在系统/var/log中存放着大量系统日志,用来记录系统中的重大事件。所有默认安装的软件都会在这里记录日志,一般情况下,即使有自定义安装的软件且日志不在此目录下,也会在此目录做一个软连接指向日志所在。
    这个目录下的日志会按照时间和大小自动轮转、删除。
    这里只对常见日志文件做简单用途说明,对其中内容不做详细介绍:
    messages:系统最常用的日志,各种故障、报警、安全、性能等都会在此记录。无论查任何日志,看一眼该日志是好习惯。
    Secure:安全相关,比如登陆信息、登陆失败信息等。
    Dmesg:硬件信息。
    Boot:启动过程中的日志。
    cron:自动运行的日志。
    Maillog:邮件系统日志。
    Audit:安全方面的审计日志。
    其它
  2. 其他查看
    查看系统版本
    [root@YangQQ log]# cat /etc/redhat-release
    CentOS Linux release 7.7.1908 (Core)

打印系统信息
[root@YangQQ log]# uname -a #在哪个目录下都可以直接打印
Linux YangQQ 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

查看和修改时间
[root@YangQQ log]# date #查看时间
2020年 03月 12日 星期四 20:53:47 CST
[root@YangQQ log]# date -s 20190418 #修改时间(年月日)一般不修改时间,都是查看
2019年 04月 18日 星期四 00:00:00 CST
[root@YangQQ log]# date -s 23:59:59 #修改时间(时分秒)
2019年 04月 18日 星期四 23:59:59 CST

查看和修改机器名
[root@YangQQ log]# hostname #查看主机名
YangQQ
hostname 名称:表示修改主机名(一次性修改),不是永久修改(只能在关机前生效,而且需要重新连接终端才能看到root@training),在配置文件(vi /etc/sysconfig/network,编辑之后直接输入名称,保存,同时也需要在/etc/hosts中做相应修改,以让机器自己知道training指向自己。)中可以永久修改(需要重启才能生效)

二、 系统安全

  1. 权限管理
    a) 属组权限管理chown命令
    密码管理:(对测试没什么用,组管理运维都不用,不需要看)
    在linux下,谁建的文件或者目录,该文件或者目录就有相应的所有者属性。例如,使用root用户建立的文件,其所有者就是root,其所有组也是root。
    在很多情况下,尤其是root用户所做的新建操作,需要把新建的文件或者目录所有者交给普通用户,这时候需要用到chown命令。

格式:chown <-option> username.groupname /path/to/file
参数 –R 递归参数,对目录下的所有目录和文件进行操作
注意:非root用户不能修改文件的所有者

[yqq1@YangQQ home]$ ls
ha.txt la.txt sort test vi yangqq yqq1 yqq2
[yqq1@YangQQ home]$ ls -l ha.txt
-rw-r–r--. 1 root root 9 3月 13 16:23 ha.txt #ha.txt文件所有者和文件所有组是root
[yqq1@YangQQ home]$ echo “hello”>>ha.txt
-bash: ha.txt: 权限不够
[yqq1@YangQQ home]$ su - root
密码:
上一次登录:五 3月 13 14:46:38 CST 2020从 192.168.47.1pts/1 上
[root@YangQQ ~]# cd /home
[root@YangQQ home]# chown yqq1.yqq1 ha.txt #把文件的所有者交给普通用户yqq1
[root@YangQQ home]# echo “hello”>>ha.txt
[root@YangQQ home]# cat ha.txt
lovelove
hello
[root@YangQQ home]# ls -l ha.txt
-rw-r–r--. 1 yqq1 yqq1 15 3月 13 16:31 ha.txt #文件所有者和文件所有组改成了yqq1,
b) 文件权限管理chmod 命令
格式:
chmod <-option> mode /path/to/file
-R 递归参数

chmod <-option> +/- [xwr] /path/to/file
但是使用+/-的话三组数据都会同时增加或减少某个权限,这通常是不希望看到的。

回忆ls –l中的第一列数值:drwxr-xr-x,除第一个字母外,其余9个代表三个范围的权限,三个一组:拥有者权限、拥有组权限和其他人权限。其中r代表可读、w代表可写、x代表可执行,-代表不具有该权限。
为了在执行chmod是方便表述这三种权限,linux规定:r的数值是4,w的数值是2,x的数值是1、不具有权限为0,同一组权限的三个数值相加,得出一个代表该组权限的数字。那么,rwxr-xr-x用数值表示就是755,其中7代表拥有者具有可读(w:4)+可写(r:2)+可执行(x:1)=7;5代表可读(w:4)+可执行(x:1)=5

各种组合:
7=w+r+x=4+2+1 可读可写可执行,最高权限
6=w+r=4+2+0 可读可写,几乎是最高权限,只是不能直接执行该文件或目录(无法打开目录)
5=r+x=4+0+1 可读可执行,受限制的权限,只是可以看、可以用,但是不能改,比较常用
4=r=4+0+0 可读,受限制的权限,仅仅能看
3=w+x=0+2+1 可写可执行,受限制的权限,一般少用,常见于日志文件存放的目录。只是让用户可以进入目录并向文件中写入内容,但是无法查看目录内容
2=w=0+2+0 和3类似,受限制的权限,用于日志文件
1=x=0+0+1 仅可执行,只用于目录,对于文件来说,仅有可执行权限没有意义,任何可执行的文件都必须有可读权限才可以顺利执行。对于目录意义也不大,仅仅是可以进入目录,进入后不可浏览目录内容,也无法创建文件或者目录。
0=-±±=0+0+0 完全没有权限,常用

chmod –R 755 /path/to/dir 可以将一个文件夹的权限属性改为拥有者可读可写可执行,拥有组可读可执行,其他用户可读可执行;
chmod 644 /path/to/file可以将一个文件的权限属性改为拥有者可读可写,拥有组可读,其他用户可读。

常用权限注意事项:

  1. root对任何文件都有可读、可写权限,并有权更改其所属属性和权限属性。
    [root@YangQQ home]# ls
    ha.txt la.txt sort test test_chmod.txt vi yangqq yqq1 yqq2
    [root@YangQQ home]# ll test_chmod.txt
    -rw-r–r--. 1 root root 22 3月 14 10:14 test_chmod.txt
    [root@YangQQ home]# chown yqq1.yqq1 test_chmod.txt
    [root@YangQQ home]# ll test_chmod.txt
    -rw-r–r--. 1 yqq1 yqq1 22 3月 14 10:14 test_chmod.txt
    [root@YangQQ home]# chmod 000 test_chmod.txt (对于不是自己的文件,root可以修改其权限属性)
    [root@YangQQ home]# ll test_chmod.txt
    ----------. 1 yqq1 yqq1 22 3月 14 10:14 test_chmod.txt
    [root@YangQQ home]# cat test_chmod.txt (对于不可读文件,root可以读取其内容)
    我就测试一下!
    [root@YangQQ home]# echo “没有写的权限也可以添加”>>test_chmod.txt
    [root@YangQQ home]# cat test_chmod.txt (对于不可写文件,root可以写内容到该文件)
    我就测试一下!
    没有写的权限也可以添加

  2. 文件拥有者对自己的文件有权利更改其权限属性,但是如果不具有读写权限的话无法读或者写。但是,由于拥有者可以更改文件的权限属性,所以虽然不能直接读写无读写权限的文件,却可以修改权限属性后读写该文件。
    [yqq1@YangQQ home]$ ll test_chmod.txt (yqq1用户对a.txt权限为0,但是a.txt属于yqq1)
    ----------. 1 yqq1 yqq1 56 3月 14 10:20 test_chmod.txt
    [yqq1@YangQQ home]$ cat test_chmod.txt
    cat: test_chmod.txt: 权限不够
    [yqq1@YangQQ home]$ echo “哈哈!”>>test_chmod.txt
    -bash: test_chmod.txt: 权限不够
    [yqq1@YangQQ home]$ chmod 644 test_chmod.txt (但是yqq1可以修改权限)
    [yqq1@YangQQ home]$ cat test_chmod.txt
    我就测试一下!
    没有写的权限也可以添加
    [yqq1@YangQQ home]$ echo “哈哈!”>>test_chmod.txt (修改后就可以读写,也可以让别人读写,比如改成777权限)
    [yqq1@YangQQ home]$ cat test_chmod.txt
    我就测试一下!
    没有写的权限也可以添加
    哈哈!

  3. 权限对于目录和文件的区别:
    对于目录来说,可读可以在该目录下列出所有内容;可写意味着可以在该目录下新建内容;可执行意味着可以打开该目录。
    对于文件来说,可读可以查看该文件内容;可写可以修改该文件内容;可执行意味着可以直接输入该文件路径和名称,然后系统自动执行文件中的内容。
    对于可执行文件:系统在第一行开头找形如:“#!/bin/bash”或者”#!/usr/bin/perl”的字样,这是可执行文件的语言解释器标示,即以下文字用什么语言来执行。如果有这样的文字,系统自动的以解释器中的语言或者命令执行之后的文字,如果没有这样的文字,系统默认使用当前的shell(默认为bash)执行之后的文字。
    [yqq1@YangQQ home]$ cat ha.txt
    #!/bin/bash 解释器
    echo “lovelove” 正确语句
    error! 错误语句
    [yqq1@YangQQ home]$ ./ha.txt yqq1执行文件ha.txt
    bash: ./ha.txt: 权限不够
    [yqq1@YangQQ home]$ ll ha.txt
    -rw-r–r--. 1 yqq1 yqq1 35 3月 14 11:23 ha.txt yqq1没有ha.txt的可执行权限
    [yqq1@YangQQ home]$ su -
    密码:
    上一次登录:六 3月 14 11:24:58 CST 2020pts/3 上
    [root@YangQQ ~]# chmod 755 /home/ha.txt root用户修改yqq1的文件权限
    [root@YangQQ ~]# su yqq1
    [yqq1@YangQQ root]$ ll /home/ha.txt
    -rwxr-xr-x. 1 yqq1 yqq1 35 3月 14 11:23 /home/ha.txt
    [yqq1@YangQQ root]$ cd /home
    [yqq1@YangQQ home]$ ./ha.txt
    lovelove 正确语句执行出结果
    ./ha.txt:行3: error!: 未找到命令 错误语句报错
    c) 细化超级权限sudo命令
    sudo命令对测试用途不大,了解下就可以了
    在讲sudo之前,先学习一下怎么设置禁止root用户登录
    (运维有个规定,不允许直接使用root用户登录。但是一定要先添加一些普通用户之后,再设置禁止root用户登录。设置之后,可以切换root用户登录(su - root))
    [root@YangQQ ~]# cd /etc/ssh
    [root@YangQQ ssh]# ls
    moduli ssh_host_ed25519_key
    ssh_config ssh_host_ed25519_key.pub
    sshd_config ssh_host_rsa_key
    ssh_host_ecdsa_key ssh_host_rsa_key.pub
    ssh_host_ecdsa_key.pub
    [root@YangQQ ssh]# vi sshd_config
    编辑这个配置文件,搜索(vi sshd_config执行之后,在最后输入/Permin就能搜索找到)找到PermitRootLogin,将yes改成no,然后重启ssh
    在这里插入图片描述

经典的linux或者unix权限管理里面,有一个很重要的思想:root身份一般不需要登录,普通用户通过提权命令获得部分权限,即可完成所有系统级的操作。
这个提权命令就是sudo,sudo的含义就是当前用户要以root身份执行之后的命令。前提是root在/etc/sudoers文件中规定了某个用户具有某些权限。Sudo有以下特点:
Sudo能够限制用户只在某台主机上运行某些命令;
Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器;
Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变);
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。

[root@YangQQ /]# vi /etc/sudoers
在最后一行输入内容,sudors配置文件虽然是只读文件,但是root用户可以编辑,保存需要加!,(即wq!)
内容分以下三种情况:
1、用户名ALL=(root) NOPASSWD:bin/vi #给用户赋予不需要输入密码的vi权限(bin下面的配置文件)
ALL=(root)表示所有的机器都以root身份执行
2、用户名ALL=(root) NOPASSWD:ALL #给用户赋予不需要输入密码的所有权限
3、用户名ALL=(root) NOPASSWD:/bin/su #可以免密码的把用户切换成root
[yqq1@YangQQ bin]$ sudo su -
上一次登录:六 3月 14 14:20:01 CST 2020从 192.168.47.1pts/1

四、 shell script
(shell这个语法和python是互斥的)
学之前先学几个命令,作为前置的学习条件
1、sh命令
sh执行某个脚本,相当于使用bash执行该脚本
在这里插入图片描述

可以看到,实际上sh只是个软连接,真正的命令是bash。
基本用法:
sh scriptname相当于使用bash执行scriptname这个文件,如果这个文件中的内容符合shell脚本的规范,就会被正确执行。(即使这个文件没有执行权限,使用sh也可以执行该文件)
sh –x scriptname 仍然是执行scriptname文件,但是执行的详细过程会打印出来,包括变量的赋值、判断和循环的执行过程等,通常用于调试脚本。

Sh还可以接受来自管道的内容。比如一些shell命令(例如echo haha),这些命令作为输入内容从键盘输入到系统,然后回车就会显示结果;但是当这些命令是另外一些命令的输出结果时,这些命令并不会被执行,如果这时把这个结果管道给sh,就可以将输出内容当成命令重新执行。
在这里插入图片描述
在这里插入图片描述
2、ssh命令
需要先看下两台机器是不是通的,在一个机器里面ping另外一个机器的ip,然后ssh 另外一个机器的ip

ssh是OpenSSH工具的客户端,可以使用ssh协议,远程登录到另外的一台有ssh server的unix服务器上,打开一个终端。这是大型局域网登陆机器的通常做法。
ssh登录到远程服务器,打开一个终端的命令格式为:
ssh username@xxx.xxx.xxx.xxx <-p port>
其中:
username@可以指定登录到远程机器后使用哪个用户名登陆,为空的话默认为当前用户;命令执行完成之后,需要输入远程机器的root密码
-p port 省略的话为默认的22端口,如果对方服务器指定了特殊的ssh端口,需要输入指定的端口。

ssh有一个重要的用途,该用途是自动化运维的基础。ssh username@xxx.xxx.xxx.xxx cmd可以将任意的命令发送到远程服务器执行,并返回结果。在shell script中会大量用到。
注意:多个命令使用分号隔开,如果命令中有空格,需要使用双引号
执行完成之后,自动退出远程服务器,重新回到当前机器
在这里插入图片描述

3、scp命令
scp命令和cp命令比较类似,不同的是scp的拷贝是远程机器和本机之间的传输。

下面是将当前机器下的aaa.txt文件拷贝到远程机器的tmp目录下方
在这里插入图片描述

下面是将远程机器的文件拷贝到当前机器下方(./表示当前目录,即script目录)
注意:一定要保证远程机器下有那个文件
在这里插入图片描述

4、crontab命令
crontab可以自动执行命令或者脚本。shell script要实现完全的自动化,需要借助crontab的帮助。
每一个用户都有一个crontab文件,写在不同用户的crontab中的命令,相当于该用户执行命令。
使用crontab –l查看当前用户的crontab,使用crontab –e编辑当前用户的crontab,-e参数使用后,相当于使用vi打开了crontab文件,编辑后需要保存退出。
crontab的基本格式:

          • cmd
            第1列表示分钟1~59(每分钟用或者 /1表示)
            第2列
            表示小时1~23(0表示0点)
            第3列表示日期1~31
            第4列
            表示月份1~12(月份一般很少改)
            第5列*表示星期0~6(0表示星期天)
            第6列cmd表示要运行的命令

常用例子:
*/2 * * * * sh /home/zhangzhe/rsync-yum.sh
每两分钟执行rsync-yum.sh这个脚本

0 3 * * * scp –r zhangzhe@192.168.1.102:/var/log/httpd /data/log/
每天3:00拷贝远程httpd日志到本地

0 1 * * 1 sh /home/zhangzhe/allscan.sh
每周一1:00执行allscan.sh这个脚本。

0 1-9 * * * sh /home/zhangzhe/backup.sh
每天1:00-9:00的0分执行backup.sh这个脚本。
5、echo命令
Echo命令用来打印一串字符,这串字符可以直接跟在echo命令后,也可以在引号中,或者在命令替换的反引号中。

单引号中的内容没有特殊含义,里面有变量不会被解释,是什么就显示什么;双引号才会解释变量。linux中的变量需要在前面加$,才能显示一个变量
在这里插入图片描述

换行符生效需要加参数-e
echo命令默认的关闭解释转义符的特殊含义,通过echo –e参数可以打开解释功能。注意,被echo的内容需要用双引号引用才可以使用解释转义的功能:
在这里插入图片描述

双引号还可以保证双引号里面的内容格式不变
在这里插入图片描述

除了上面的单引号、双引号,还有一个命令引号(也叫反引号)(在数字1左边符号`)
``这对引号用来替换命令,即在命令中嵌套另外一个或者多个命令,但是反引号内不能再次嵌套命令。
经典例子,kill掉所有bash进程:
我们可以使用ps来查看bash的进程,然后逐个kill
(ps -ef表示查看进程情况,grep http表示把包含关键字http的行显示出来)
(grep -v grep:-v表示把不包含关键字grep的行显示出来)
然后用命令引号给引起来,然后前面加上kill(注意练习的时候不要真的kill)
在这里插入图片描述
第四讲 jenkins和nginx简单介绍
一、 Linux中安装jdk、tomcat、jenkins
nginx作为容器(静态页面的发布)和转发器(负载均衡)
如何安装jenkins到linux上:在Linux上安装,需要选择.tar.gz的包
在/opt目录下放程序包,在/usr/local 放用户自定义安装的东西
1)Jdk下载包时,官网总是打不开,可以多试几次,下载下来之后,直接拖到opt目录下
2)tomcat:复制版本8的链接(在bin目录下),然后在opt目录下执行命令:wget 链接
3)jenkins:在opt目录下执行以下命令:
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
上面123都是先下载包到opt目录下面
下面是这三个包的安装(tomcat依赖jdk,所以必须先安装jdk)

  1. 安装jdk
     先在opt目录下解开jdk的包:tar -zxvf jdk-8u231-linux-x64.tar.gz
    在这里插入图片描述
     将解开的jdk包复制到/usr/local/目录下
    在这里插入图片描述
     然后做一个软链接
    在这里插入图片描述
    做软链接的目的:因为jdk经常升级,尤其是后面的小版本,如果以后有了其他新的版本,这个新的版本也放在这个目录下,然后只需要把软链接指向新的版本,整体的环境变量不用做任何修改,程序也不受影响
    设置环境变量
    在这里插入图片描述

 编辑etc目录下的profile文件,把执行目录/usr/local/java/bin拷到环境变量里面

[root@YangQQ etc]# vi profile(注意在最后一行修改)
加到最前面,然后再加上原来的值,注意用冒号分割环境变量(就是这样规定的)
为什么加到最前面:系统默认带有openjdk(这个java环境并不能满足jenkins的需求),需要把新的java的执行目录(即环境变量)放在所有环境变量的最前面,谁在前面谁先生效
在这里插入图片描述

注意:保存之后,使用source /etc/profile重新加载一下脚本里面所有的变量
查看一下环境变量:echo $PATH
用java -version看下是否是装的版本,然后java环境就配置好了
在这里插入图片描述

  1. 安装tomcat(涉及到两个安全方面的配置)
    (其实不用安装,直接解开包就可以了 )
     先在opt目录下解开tomcat的包:tar -zxvf apache-tomcat-8.5.53.tar.gz
    在这里插入图片描述

 将解开的tomcat包复制到/usr/local/目录下
在这里插入图片描述

 然后做一个软链接
-ln s 链的目标地址 新建的软链接
在这里插入图片描述

删除软链接的方法:rm 新建的软链接名称(例如rm tomcat,注意tomcat后面不要加\),执行会询问是否删除,输入是就可以了。(这是最好用的删除软链接的方法)
做软链接的目的:以后升级tomcat,只需要把软链接重新指向新的版本就可以了

 在bin里面启动tomcat(sh catalina.sh start)
在这里插入图片描述
在这里插入图片描述

可以在/usr/local/tomcat/logs/catalina.out下查看tomcat所有的日志(尤其服务出现异常的时候,查看这个日志可以得到想要的信息)
在这里插入图片描述

 访问一下默认的欢迎页面
在这里插入图片描述

欢迎页面能够正常加载出来,则说明jdk和tomcat安装完成

 最后是两个关于安全方面的配置

  1. 修改conf/server.xml文件里大写的SHUTDOWN
    在这里插入图片描述

进入编辑页面,输入/shutdown可找到这个节点,然后按i修改shutdown的密码进行保存
(改一个记不得的密码(这个密码不需要记住):胡乱敲的最不容易破解,键盘输入字母+shift123这种最容易破解)
在这里插入图片描述

为什么要修改:如果把8005端口暴露出去,并且没有修改shutdown,别人是可以把tomcat给直接shutdown掉

  1. 删除webapps/下的所有文件,然后再新建一个ROOT,ROOT下随便新建一个文件,里面写上一行字保存退出,然后再访问下
    所有文件里面有默认的欢迎页面等,欢迎页面很危险,全是漏洞,很容易被攻击
    注意:windows下的tomcat也要删除默认页面
    在这里插入图片描述

下方显示是访问成功的
在这里插入图片描述

  1. 安装jenkins
    在这里插入图片描述
    war包是java的工程包,是一定要放在tomcat下来进行使用的
    (1) 安装jenkins不推荐的方法:自动解包
     和大写的ROOT放在同一个目录下方(注意:将ROOT目录下之前创建的index.html文件删除掉)
    在这里插入图片描述

 关闭tomcat
在这里插入图片描述

关闭之后,一定要ps下看下java的进程,如果进程还在,先等十几秒钟再去ps看下(因为这个时候可能有人在访问tomcat),然后再去stop下,如果还不行,再kill
在这里插入图片描述

 启动tomcat
在catalina.out日志下面看下有没有加载(因为一旦启动tomcat,会自动解开war包)
在这里插入图片描述

下面是catalina.out的日志信息
在这里插入图片描述

 在webapps目录下查看显示出了jenkins,说明自动解包完成
在这里插入图片描述

注意:自动解包之后,如果以后在jenkins里面修改了配置文件的内容,再进行启动tomcat服务,修改的内容可能并没有生效(所以不推荐这种手动解包的方式)

 访问一下,出现下面的说明安装成功(输入192.168.43.201:8080\jenkins)
在这里插入图片描述

(2)安装jenkins推荐的方法
 在tomcat外边解开包, 解开的包拷贝到tomcat目录中。
使用jar命令进行解包(这个命令在装完jdk以后自动就有的),参数和tar命令是一样的,去掉tar中的z,因为这个包没有zip压缩。
注意解包之前先创建一个和文件一样的目录jenkins,将jenkins.war包放在这个目录jenkins下方,然后使用jar命令进行解包(因为这个war包进行解包的时候,不会自动建一个jenkins目录;如果不新建一个jenkins目录,会把解开的所有文件直接散在opt目录下方)
在这里插入图片描述

 删除jenkins目录中的源文件
进入jenkins目录下方查看一下文件,目录下方会显示源文件:jenkins.war,这个源文件必须删除掉
在这里插入图片描述
在这里插入图片描述

 在opt目录下,将解压的包jenkins拷贝到/usr/local/tomcat/webapps/目录下方
在这里插入图片描述

执行的命令:cp -r jenkins /usr/local/tomcat/webapps/
在这里插入图片描述

 在tomcat的bin目录下启动tomcat,然后看下catalina.out的日志
在这里插入图片描述

看下日志里面,已经启动起来了
在这里插入图片描述

注意:如果不删除,进行访问的时候(192.168.43.201:8080/jenkins/jenkins.war),会暴露这个文件,这个文件里有关于数据库的机器、账号和密码的配置文件,一旦暴露出去很危险(jenkins.war里面没有这种配置文件,开发开发的包里面有这种配置文件)
在这里插入图片描述
二、 nginx的使用
nginx已经成为主流的静态web容器、转发器、cache。在web容器上完全超越apache、在转发上代替传统硬件设备、在cache已经可以媲美squid。加之大量的开源社区不断地贡献,使nginx功能不断完善和强大,已经有逐步成为统一平台的趋势。

nginx虽然被f5收购了,但是作为转发器和web容器还是开源免费的。f5做负载均衡。

  1. nginx的安装
    nginx有好几种安装方法,下面用最麻烦但是最灵活的方法进行安装(即源码安装)
    注意:源码安装有一个弊端,就是如果要对nginx版本升级,一定要重启一下。
    a) 在安装之前,先安装必要的前置包,均采用yum安装即可。
    下面三个命令执行的过程中的询问都写y
     安装gcc
    编译安装必备工具。
    默认已经安装,需要确认。
    在这里插入图片描述

 安装pcre
为了支持访问url的 rewrite功能,我们需要安装pcre。
在这里插入图片描述

 安装openssl(支持 443\加密\ssl\https)
需要ssl的支持,如果不需要ssl支持,请跳过这一步。
在这里插入图片描述

b) 下载nginx压缩包
nginx推荐使用最新最稳定版,如果用的nginx的版本比较高,操作系统的版本最好也跟着升上来,这样匹配的包的版本也跟着升级,装新版本的包才能顺利安装。
查看操作系统的版本命令:
在这里插入图片描述

这里使用的nginx版本是1.14版本
下载压缩包执行的命令:wget http://nginx.org/download/nginx-1.14.0.tar.gz
在这里插入图片描述
在这里插入图片描述

c) 安装nginx
i. 先解开压缩包
在这里插入图片描述
在这里插入图片描述

ii. 执行configure命令进行配置,指明安装路径和安装包
进入nginx-1.14.0目录,执行以下命令:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
命令的解释:
configure是当前目录下的一个配置文件,可以直接执行。
–prefix=/usr/local/nginx 表示指明安装路径
–with-http_stub_status_module 安装的包,表示支持nginx状态查询
–with-http_ssl_module 安装的包,表示支持https
–with-pcre 安装的包,表示支持rewrite重写功能
在这里插入图片描述

执行命令的过程中,注意看是否有报错,只要出现error,该次配置即为失败,需要纠正报错中提示的问题。重新configure才可。如果出现error,注意查看是不是哪个包出现了error,有可能是nginx的版本和这个包的版本不匹配(包的版本和操作系统的版本有关系)。如果用的nginx的版本比较高,操作系统的版本最好也跟着升上来,这样匹配的包的版本也跟着升级,装新版本的包才能顺利安装。
两种解决办法:(1)将包给without (2)重新整一个低版本的nginx
在这里插入图片描述

iii. 执行make命令进行编译
在nginx-1.14.0目录下执行make命令,make为编译命令,后面的参数是开启多进程进行编译。可以和自己机器的cpu核数保持一致。只要没有error,编译即为成功。注意如果这个过程报错,会很麻烦。
在这里插入图片描述

iv. 执行make install命令进行最后的安装
在nginx-1.14.0目录下执行make install命令,之前步骤如果未出现error,这一步通常不会出问题。
在这里插入图片描述

make install命令执行成功之后,在之前指定的安装路径/usr/local/下面会有一个nginx目录,最主要的是sbin下面的启动文件nginx。
conf中存放所有配置文件
html为默认的静态页面存放目录
logs中存放访问日志和错误日志
sbin下为nginx命令(sbin目录下的nginx文件很重要)
在这里插入图片描述

v. 在sbin目录下启动nginx,直接输入目录直接就可以启动
输入的命令:/usr/local/nginx/sbin/nginx
在这里插入图片描述

启动之后,ps看下nginx的进程在不在
在这里插入图片描述

然后看下监听在不在:ss -lnt(默认的就是80端口)
在这里插入图片描述

vi. 最后访问一下,是一个欢迎页面,表示nginx安装成功了
在这里插入图片描述

下面讲最简单的nginx配置
需要简单修改下配置文件
vii. 安装成功之后,需要修改下主配置文件nginx.conf
主配置文件将作为全局变量的配置存在,今后任何对虚机(某个站点)的修改,均在conf.d中的xxx.com.conf中修改。只有全局变量才会写入主配置文件。不能每次在主配置文件中修改nginx的server(或nginx的虚拟机)(因为主配置文件有一些全局的参数,如果不小心修改了全局参数,会影响nginx的性能或者功能)
在这里插入图片描述

编辑配置文件nginx.conf,进入编辑页面,
 删除所有的server模块
server模块是nginx配置文件的核心,下面会单独创建server模块
第一个删除的server(注意特别长,图没有截全)
在这里插入图片描述

第二个server,图中的全部删除
在这里插入图片描述

第三个server,图中的全部删除
在这里插入图片描述

 打开http模块里面的main格式,在http模块里面写include conf.d/*.conf;
最后进行保存退出。(这里使用的是相对路径)
在这里插入图片描述

解释log_format所在行:log_format表示来的访问日志的格式
$remote_addr:表示哪个ip访问的
r e m o t e u s e t 和 remote_uset和 remoteusettime_local这两个不会被记录
$request:表示访问的url是什么
$status:表示返回的状态200 404等
$body_bytes_user:表示多少个字节被发送
$http_user_agent:表示用什么浏览器访问,浏览器的版本等
$http_x_forwarded_for:表示访问过来途径过来所有的转发器(或者表示访问过来途径的所有的负载均衡),都会在x_forwarded加一个ip
2. nginx作为web容器(用的很多)
i. 先规划web站点的目录结构
下图是我先创建好的站点目录,并且创建了一个站点a.test.com,站点里面有一个html文件
在这里插入图片描述

Index.html文件的内容如下
在这里插入图片描述

ii. 在conf目录下创建目录conf.d,进入目录conf.d中,创建server
server通常建议是以域名命名的文件(前面的步骤创建了一个站点:a.test.com)
使用vi 文件名就可以创建文件
在这里插入图片描述

文件的内容如下:
在这里插入图片描述

server_name建议使用域名
端口使用默认的80
root指的是静态网站的站点位置(图中的路径和文件都是提前创建好的)
注意:每一行的行尾一定要写英文分号(因为英文分号表示结束),如果不写分号,进行-tc测试会报下面大括号的错误,在文件中根据行号找到这个大括号,然后往上找查看哪个内容出问题了
怎么显示行号:编辑页面直接输入:set number,就会显示行号
在这里插入图片描述

iii. 进行启动nginx
启动之前,需要先看下之前的nginx进程,杀掉以前启动的,因为已经改了配置文件(nginx本身没有用start和stop命令,可以直接使用kill,进行kill的时候,先杀主进程(kill 主进程id)),这样会直接把子进程也杀掉了
在这里插入图片描述

杀完之后,执行命令指定到主配置文件nginx.conf进行启动,注意启动之前,先进行测试一下,需要在-c后面加一个-t参数(注意假设在参数1后面加参数2,需要把参数1放在最后面)
-c:表示指定配置文件的位置
-t:表示在启动之前测试一下修改的配置文件是不是正确的
执行的命令:/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf
启动以后,ps查看下nginx的进程
在这里插入图片描述

iv. 访问站点
在地址栏里输入站点:a.test.com进行访问查看,访问不了,因为之前把默认的server删除了。需要将这个域名指Host访问(网站域名a.test.com不可能做解析),在host中添加192.168.47.134 a.test.com
在这里插入图片描述

最后访问域名看下效果,如果发现还没有访问成功,需要检查下配置文件(主配置文件nginx.conf或者自己创建的配置文件a.test.com.conf),看看有没有问题,改完之后,需要重启下nginx(注意要进行平滑重启)
下面kill -HUP 12187(表示主进程)表示平滑重启,-HUP表示所有的子进程停止接受新的请求,但是保持现有请求处理,直接启动新的所有子进程接受新的请求,老的所有子进程处理完当前的请求,直接被kill掉。所以不会影响用户的访问。
在这里插入图片描述

但是平滑重启之后,通常只能加载一部分参数,全局的参数好像是加载不了的。这个时候需要把nginx停掉,然后再启动
停掉的操作
在这里插入图片描述

启动的操作(好习惯先-tc测试一下,然后再-c启动)
在这里插入图片描述

最后访问下,是成功的
在这里插入图片描述

  1. nginx作为转发器(用的很多)
    1.2(lookip)
    1.3 lvs

1.4 nginx 1.5 nginx

上面一台机器可以配置多个ip。其中1.2是lookip(即伪装的ip),入口只有1.2,而真正的ip是1.3。出口有1.4和1.5,发包的时候在出口那里伪装成1.2。
四层转发就是ip和端口的转发
lvs做4层转发:所有的请求过来的时候,lvs只针对ip和端口往下做转发(lvs是轻量级的转发)
四层转发的路由模式(三角转发:进来的和出去的不是一个路径):
lvs收包(1.2),nginx发包(1.4,1.5)
收包的流量特别小,发包的流量特别大
需要注意的是nginx发包的时候,会把自己伪装成lvs的ip(即1.2)

redis:纯内存的nosql数据库,只存简单的key和value,直接往内存里面写

正向代理(翻墙):写一个代理服务器,通过这个代理服务器往外访问网站。(也叫代理)

反向代理(nginx就是反向代理):我作为一个反向代理(代理上也没有,我只是做了一个桥梁的作用),把接收到的所有客户端请求请求转给后端服务器,后端服务器再把内容传给我,我再传给客户。
其实反向代理就是7层转发。
反向代理的瓶颈点:接收所有的出入流量。所以反向代理要达成一个集群,即需要一批机器来完成这个动作。
反向代理有以下作用:
1-可以使用一个域名代理后端多个站点内容
2-隐藏后端服务器
3-增加缓存(给后端服务器加缓存,再访问的时候,从缓存拿东西,速度很快)
4-为后端服务器做七层负载均衡
(1) 转发
i. 准备两个站点(a.test.com和b.test.com)
之前nginx作为web容器,已经新建了一个a站点,下面开始新建一个b站点。
新建b站点的配置文件(即通过复制来实现新建b站点的配置文件,需要改下内容)
在这里插入图片描述

b.test.com.conf配置文件内容如下:
在这里插入图片描述

新建b站点(即通过复制来实现新建b站点,需要改下内容)
在这里插入图片描述

Index.html的内容如下:
在这里插入图片描述

我电脑上加上b站点的host(和之前a站点的host配置一起),然后进行启动,再访问下这个b站点
在这里插入图片描述

启动之前先看下nginx的进程,然后测试一下,再进行-c启动,最后再看下nginx的进程
/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf
在这里插入图片描述

访问下两个站点,见下图,两个站点都能访问成功,站点配置完成
在这里插入图片描述

ii. 新建www.test.com站点,模拟对外公布的唯一地址。
该站点向外提供服务,向内做负载均衡。该站点的server配置文件中不需要使用root参数,但是需要增加location参数。

新建一个www的server配置文件www.test.com.conf
在这里插入图片描述
在这里插入图片描述

注意:配置文件中的内容表示www.test.com这个域名监听上端口80,但是域名下面没有root(即没有页面),只做反向代理转发。如果下面访问的目录是以a开头的,就把它转发给http://a.test.com/这个站点上。如果访问的目录是以b开头的,就把它转发给http://b.test.com/这个站点上。

配置完成之后,先测试一下,最后平滑重启HUP
在这里插入图片描述

访问一下www.test.com显示的是一个nginx的默认欢迎页面,说明访问成功,因为www本身没有站点,就会去访问默认页面
在这里插入图片描述

iii. 在虚拟机上配置a和b两个站点的hosts
由于a.test.com 和b.test.com并没有真正做域名解析,同时反向代理要求www.test.com站点需要访问到a.test.com和b.test.com,所以要在虚拟机上配置hosts。
在这里插入图片描述
在这里插入图片描述

同时在我电脑上的PC端去掉a站点和b站点的host(之前配置Host,是为了验证配置完成站点之后,可以正常访问站点),我的电脑上的PC端只需要配置www站点的host
在这里插入图片描述

下面需要重载一下,不重载访问可能加载不出来(这一步可以先不做,先访问看下)
在这里插入图片描述

然后再访问www.test.com/a www.test.com/b 就会显示到对应的站点
(实际上www站点下面没有做网站,即没有root)
在这里插入图片描述

(2) 绝对转发和相对转发
i. 新建一个other.test.com站点
在other.test.com站点下新建目录juedui,并在juedui目录下新建juedui.html文件;
在other.test.com站点下再新建目录other,并在other目录中新建目录xiangdui,最后在xiangdui目录中新建xiangdui.html文件。
在这里插入图片描述

ii. 新建othe.test.com的server配置文件
在这里插入图片描述

iii. 重启服务进行访问(因为改了配置文件)
在这里插入图片描述

我的电脑上PC端配置other.test.com的host,然后访问other.test.com,会发现页面显示403。是因为站点other.test.com是目录jeudui和目录other,目录是禁止访问的。(如果目录能访问,会显示出来jeudui和other,这样不安全)
在这里插入图片描述

需要在站点other.test.com目录下方添加一个静态页面,对于静态页面的修改,不需要重启nginx
在这里插入图片描述

再进行访问站点other.test.com,就会默认显示index.html的内容
在这里插入图片描述

访问juedui目录下的文件
在这里插入图片描述

访问other目录下的文件
在这里插入图片描述

上面正确访问表示other.test.com站点创建成功(注意把我的电脑上PC端配置的other.test.com的host取消)
iv. 在虚拟机上配置other.test.com站点的host
在/etc/hosts加入other.test.com站点的host,使其认到other站点
在这里插入图片描述
在这里插入图片描述

v. 配置绝对转发(不推荐)
修改www.test.com的server配置文件的内容,加入location /other(注意location后面的那个目录other)
在这里插入图片描述
在这里插入图片描述

修改保存完配置文件,重启一下服务
在这里插入图片描述

重启完之后,在我的电脑上PC端添加www.test.com的
由www.test.com站点开始进行访问,访问到了other下方juedui目录的文件juedui.html。但是judui目录并没有在other下方。
在这里插入图片描述
在这里插入图片描述

绝对路径的解释:www.test.com的server配置文件中写的是绝对路径(即最后加上/),后端服务器只会接受前面的域名www.test.com和juedui/jeudui.html的内容,不会接受other
vi. 配置相对转发(推荐)
修改www.test.com的server配置文件的内容,在前面绝对路径的基础上,将/去掉
在这里插入图片描述

修改保存完配置文件,重启一下服务
在这里插入图片描述

由www.test.com站点开始进行访问,访问到了other下方xiangdui目录的文件xiangdui.html。并且xiangdui目录在other下方。
在这里插入图片描述
在这里插入图片描述

相对路径的解释:www.test.com的server配置文件中写的是相对路径(即最后不加上/),所有的内容都会转发给后端服务器

总结下:有/的时候,不会全部转发给后端服务器;没有/的时候,所有的内容都会转发给后端服务器。工作中习惯上是不加/,这样设计的目录结构和后端服务器的结构总是保持一致,访问的内容全部转发给后端

(3) 负载均衡
balance.test.com启动81端口和82端口,模拟后端两台服务器的情况。得到两个端口不同的balance.test.com域名。使用www.test.com的主域名,对balance.test.com:81和balance.test.com:82在页面上进行轮询访问。
注意:因为只有一台机器,按照端口来区分不同的域名。
正常情况:需要3台机器,两台机器作为底层的两台机器,另外一台机器做负载均衡。
i. 修改主域名www.test.com.conf配置文件
下面是实现访问根目录,然后转发到81和82(注意需要配置81端口和82端口的服务)。
upstream的位置表示配置了一个负载均衡的集群,里面的机器(ip和端口)由server开头。
里面的机器可以使用同一台机器,不同的端口;不同的机器,相同的端口(这两种方式都代表不同的机器)。
注意:修改的内容并没有显示任何域名,需要在主配置文件中改。
在这里插入图片描述

开通新端口,需要先把防火墙打开,然后使用命令永久新增端口(看收藏的csdn地址)
https://blog.csdn.net/Searchin_R/article/details/83933232
https://blog.csdn.net/hello_world_wbg/article/details/85061852
ii. 新建balance.test.com站点
在这里插入图片描述

下面是配置81端口和82端口的服务
在这里插入图片描述

还需要创建balance.test.com81和balance.test.com82这两个站点(之前已经创建好了)
在这里插入图片描述

iii. 修改主配置文件nginx.conf的内容
在这里插入图片描述

注意是在http里面添加,本次例子中我只添加了图中圈中的部分。
proxy_redirect off; 这个参数表示可以不用在www的配置文件中绑定域名,不用在/etc/hosts文件配置host),它可以把访问的域名信息传给后端
这就是负载均衡和反向代理(需要在配置文件中绑定域名,需要在/etc/hosts文件中配置域名的host)的区别

参数如下:(最后4个proxy比较重要,中间的三个buffer比较重要,还有connect、read、send这3个值比较重要,其他的还好,使用默认值就可以,如果默认值不够,可以改下)
client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 300s;
proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
proxy_ignore_client_abort on; #不允许代理端主动关闭连接
proxy_redirect off; #重要,可以使host中请求的域名保持传递给后端
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
iv. 启动nginx服务进行轮询访问
/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf
在这里插入图片描述

(1)在主机中进行访问
在这里插入图片描述

刷新一下会转发到82端口
在这里插入图片描述

(2)在虚拟机中进行访问
需要在/etc/hosts加上www.test.com的host,见下方使用curl命令多次访问
在这里插入图片描述

PS:真正在工作中,需要两台机器作为底层站点的两台机器,另外一台机器做负载均衡。真正的负载均衡配置的内容应该是一样的,例子中不一样是为了显示出轮询的效果)(后端某个机器down掉,用户访问是是感知不到的)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号