Linux常用实践扫盲

Linux常用实践扫盲

一、Linux系统简介与安装

1. 系统简介

苹果系统、windows系统、linux系统关系:苹果的macOS和Linux的设计是基于Unix、模仿了其运行模式。目前大部分的Windows版本是基于革命性的windows NT内核(MS-DOS)。

Linux的核心称之为内核,Linux系统能正常工作并不只包括内核,还包括一些外部基本程序包括:文本编辑器、编译器、外壳Shell。因为Linux是开源的,所以有很多版本。Linux发行版就是简化用户安装程序,并且配套内核、api、预装应用程序。

Linux发行版之间的主要区别:
安装的方法不一样(优秀的发行版安装简单)
安装应用程序的方式不一样
预装的应用程序不一样

不同的Linux发行版:
在这里插入图片描述

2. 安装

VirtualBox + CentOS7镜像 + Xshell:
virtualBox官网下载安装
下载使用阿里云的CentOS7镜像
远程工具连接终端

二、CentOS7的基础使用

1. 常用命令总图Xmind

在这里插入图片描述

1.1 Linux命令之——用户与权限

1.2 Linux命令之——文件操作

1.3 Linux命令之——防火墙、网络、进程

1.4 Linux命令之——查看日志、常用快捷键与命令、重启关闭系统

2. linux软件与配置文件

2.1 配置文件

Linux的配置文件、脚本文件一般在etc目录下

  • 比如bashrc终端配置文件
  • profile其他需登录终端配置
    profile配置加载时会加载bashrc,修改bashrc等于修改了profile
    配置文件修改后需重新登录生效,想要立即生效要用source命令 source .bashrc

2.2 软件仓库管理工具——yum命令

Linux用户一般都是软件仓库下载软件、CentOS系统会有默认的仓库但是下载速度较慢。我们编辑软件仓库文件更改成阿里镜像源方式。Linux下的软件都是一个软件安装包 .rpm 结尾。

yum命令操作软件仓库
yum update 软件名称
yum upgrade 软件名称
yum intall
yum remove
yum search
如果源仓库没用的.rpm软件就去官网下载,用rpm命令
rpm -i *.rpm 用于安装
rpm -e *.rpm 用于卸载

3. 前后台系统灵活切换命令 &、nohup、ctrl+Z、jobs、bg、fg

&和nohup在后台运行进程:优点是不用等待,挂到后台运行进程我们就可以做其他事

cp a.file b.file &
sudo find / -name "*.log" > log_output.txt 2>&1 &

&缺点:当用户注销或网络断开则后台进程取消,nohup防止了这种hup问题,对于远程连接需一直执行的命令一般使用nohup
ctrl+Z、jobs、bg、fg
linux中进程的五种状态:R S D T Z
如果没用把进程弄成&,又想的话,就ctrl+Z将此进程暂停,再bg默认最后一个进程或者 bg %进程号 重新开始
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
jobs命令显示此终端后台进程状态
在这里插入图片描述
fg和bg相反,将后台命令转为前台
在这里插入图片描述
前后台进程切换命令总结
在这里插入图片描述

4. 定时和延时执行at、atq、atrm、corntab

at:延时让一个程序执行一次
在指定时刻执行指令:at 22:10 回车后输入命令 touch date.txt 输出EFO结束符也就是ctrl+D

at 22:22 12/31/21 美国日期月//

在指定时间间隔后执行程序

at now +10 minutes/hours/years....

atq:列出正等待执行的at任务 q=quque
atrm:删除正在等待执行的任务 编号

; && || 命令连接的使用

touch file1.txt;sleep 10s;rm file1.txt
;无论前面的命令是否执行成功都执行后面的命令
&&前面的命令执行成功才执行后面的命令
||前面的命令执行失败执行的命令

crontab命令:定时执行程序
crontab包含corntab和corn
corntab是去维护每个用户的定时任务文件,corn是具体执行任务
corntab参数-l显示 -e编辑 -r删除
在这里插入图片描述
在这里插入图片描述

10 22 * * * touch /home/liur/file/file.txt

在这里插入图片描述

echo "export EDITOR=nano" >> ~/.bashrc
source .bashrc

5. 忘记root密码进入救援模式

忘记root密码或者因修改配置文件导致系统无法启动等原因进入救援模式
此时按下e键
在这里插入图片描述
进入编辑模式
在这里插入图片描述
设置selinux永久permission
vim /etc/selinux/config/
在这里插入图片描述
重新设置root密码

passwd  输入至少8位的新密码
// touch /.autorelabel
exit退出
reboot重启

其他问题进入救援模式:https://blog.csdn.net/hdyebd/article/details/83754257

三、CentOS7的安装与网络

1. 安装CentOS7

可以选择安装有图形界面的DVD.iso包
也可以选择安装只有黑底白字的minimal版本

2. 配置网络

普通模式下网络是NAT模式,所以进入的虚拟机是内网,与其他主机ping不通。NAT模式下的ip是:10.0.0.15的内网地址
所以此服务器的网络模式需改成”桥接模式“,此模式可以使此服务器连接到外网且可以ping通,桥接模式下变成了IPV4分配的192.168.0.105。内网下的其他服务器可以ping通这个主机的地址
在这里插入图片描述
virtualbox四种网络模式介绍

3. 连接远程终端SSH

服务器客户机之间的通信需遵循http(未加密)、https(加密)、talnet(未加密)、ftp(文件传输协议)、电子邮件协议等协议。linux中服务器客户机之间的通信一般遵循SSH协议

3.1 什么是ssh

ssh结合了对称加密与非对称加密方法,通过非对称加密安全的传递对称加密的公钥,之后都用对称加密的公钥传递数据
ssh加密解释:
A客户端 B服务器
(想使用对称加密密钥dcjm) (通过RSA算法生成了一对公私钥)
①B服务器将公钥rsagy传递给A客户端
②A客户端接收后用rsagy加密dcjm传输给B服务器
③B服务器用私钥解密出 对称加密的公钥是dcjm
④然后双方通信一直用对称加密的dcjm密钥。因为从没有把dcjm通过明文传输所以这样比较安全。

3.2 安装openssh工具

** 客户端和服务器端都需安装openssh工具 **
Windows客户端一般安装SSH工具,如Putty、XShell、SecureCRT。MacOS客户端已经有SSH工具不用安装。Linux客户端直接yum install openssh-clients。
远程服务器安装openssh-server。服务器openssh-server安装完成后会在后台启动一个守护进程sshd,也可手动开启

yum install openssh-server
sudo systemctl start sshd
sudo systemctl stop sshd
sudo systemctl status sshd
sudo systemctl enable sshd --开机自启动

3.3 openssh配置文件

SSH客户端配置:/etc/ssh/ssh_config
SSH客户端家配置:~/.ssh/config
SSH服务端配置:/etc/ssh/sshd_config

①客户端config常用配置参数
Host别名、HostName远程主机名、Port远程主机端口、User用户名

Host lianjie
    HostName 192.168.0.105
    Port 22
    User root

通过修改局部config文件访问其他主机:
在这里插入图片描述

②服务器端config常用配置参数及作用
Port:sshd服务端口号(默认是22)
PermitRootLogin:是否允许以root用户身份登录(默认是可以)
PasswordAuthentication:是否允许密码验证登录(默认是可以)
PubkeyAuthentication:是否允许公钥验证登录(默认是可以)
PermitEmptyPasswords:是否允许空密码登录(不安空。默认不可以)

3.4 linux客户机设置ssh免密码登录服务器

ssh连接远程服务器的两种验证方式

  • 基于口令的验证:帐户和密码登录
  • 基于密钥的验证:公钥验证登录
    基于密钥的验证:
  1. 在客户机中生成密钥对(公钥和私钥):ssh-keygen 会在.ssh目录下生成id_rsa和id_rsa.pub两个文件
  2. 把客户机的公钥传输到服务器:ssh-copy-id root@192.168.0.105 会在服务器下的~/.ssh/authorized_keys生成这个文件
    这样客户机对服务器就可以直接ssh root@ip 免密码登录了
    如果有了公钥验证登录还想输入密码登录就用客户端输入以下命令
    在这里插入图片描述
    参考:https://www.cnblogs.com/xubing-613/p/6846451.html

4. IP与网络

4.1 ipv4与ipv6

  • IPv4版本:0255.0255.0255.0255
  • IPv6版本:把IPv4的32位变成128位 如fe80::b8b7:95b2:c321:f8e9%11

4.2 ip与自定义解析域名

主机名(域名):www.github.com
IP:202.61.89.142
host 主机名 可以得到ip地址(会变)
host ip地址可以得到主机名
在这里插入图片描述
场景:每次远程连接linux服务器都要输入ip地址很麻烦,可以自定义解析域名
可以在/etc/hosts 自定义ip地址与主机名的解析,比如我这里转换连接就不用输入ip了,输入主机名即可:
在这里插入图片描述
whois 域名 :可以进行解析域名
在这里插入图片描述

4.3 DHCP动态分配IP及静态分配IP

如果在阿里云买的云服务器,IP地址是固定的。但是虚拟机IP地址是DHCP动态分配的

/etc/sysconfig/network-scripts/ifcfg-enp0s 网络配置文件下可以看到

在这里插入图片描述
修改网络连接,如从NAT网络模式变成桥接网卡模式(这个模式会默认DHCP动态分配ip)
DHCP:局域网内部的设别或者网络供应商自动分配IP
52机器的配置:
在这里插入图片描述
如果想变成静态ip,设置网关和dns:

BOOTPROTO=static
IPADDR=192.168.0.108
NETMASK=255.255.255.0  二进制形式:1111111.1111111.1111111.0000000
GATEWAY=192.168.0.1
DNS1=192.168.1.1
保存配置文件
systemctl restart network 重启

除了上述方法还可以使用nmtui以文字形式的用户界面来控制网络管理器
网络管理器查看设备联网服务是否启动

systemctl status NetworkManager
nmtui

四、Shell脚本

1. shell是什么

shell是管理命令行的程序
shell也有很多种版本,如下:
在这里插入图片描述
以rc结尾的命令多为配置文件,即软件运行之前会去读取的初始化文件
如:.bashrc(bash shell的初始化文件) .vimrc .zshrc等等

2. 安装shell

centos一般默认的是sh
切换shell:chsh

[liur@105 root]$ chsh
Changing shell for liur.
New shell [/bin/bash]: /bin/sh
由bash切换到sh

为什么要切换shell?脚本可能是通过各种shell语法写的

3. 第一个Shell脚本

3.1 创建脚本文件

vim test.sh
权限变成可执行 chmod +x test.sh
echo $PATH 显示当前环境变量路径
把test.sh拷贝到任意路径下可在任意地方直接运行,不用在当前目录下./test.sh运行

3.2 引号的作用

#!/bin/bash
message='Hello world'
message1=$'Hello \' world'
echo $message #输出变量
单引号' :会忽略变量中的所有特殊字符
双引号'' :会忽略变量中的大多数特殊字符,不包括$ \ ·。意味着可以对变量值进行替换(echo "xxx $message")
反引号`:执行命令,例如下
message3=·pwd·
echo "my dictionary is $message3"

echo ./test.sh
echo -e 'hello J \n hello M ’ :-e输出\n换行符

#!/bin/bash
read -p "please input your name:" -n 5 name
echo -e "\n$name"

3.3 变量、参数、数组

bash脚本中所有都是字符,没有数字运行。但是let可以使字符串变成数字进行运算

[liur@105 ~]$ let "a = 5*5"
[liur@105 ~]$ echo "$a"
25
如果要使用小数点运算,就使用bc命令

定义环境变量,在linux中的所有脚本中通用
env:显示shell中的所有环境变量
常用的环境变量:SHELL 、HOME
可以自定义环境变量:export EDITOR

定义参数变量,./test.sh 参数1 参数2 参数3
在脚本中如何使用呢? $#参数的数目 $0被运行的脚本名称 $1第一个参数 $2第二个参数 $N第N个参数

  1 #!/bin/bash
  2 
  3 echo "the jiaoben is $#,have $0 params."
  4 echo "param one $1 , param one $2"
  
  [liur@105 ~]$ ./test.sh 1 2
the jiaoben is 2,have ./test.sh params.
param one 1 , param one 2

shift参数变量一个接一个的被使用,常用于循环

echo "param one $1"
shift
echo "param one now $1"
  [liur@105 ~]$ ./test.sh 1 2
param one 1
param one now 2

数组,bash下标index从0开始,但是zsh等其他可能index是从1开始的
array=(‘value0,value1,value2’)
array[5]=‘value5’
echo ${array[*]}

3.4 条件语句

if[ xx ];
then
做这个
else
做这个
fi

if[ xx ]
then
做这个
elif[ xx ]
then
做这个
else
做这个
fi

case替换很多ifelse
#!/bin/bash

read -p "please input a filename : " file

case $file in
    "1" | "3")
        echo "Hello 1"
        ;;
    "2")
        echo "Hello 2"
        ;;
     *)
        echo "every"
        ;;
esac

if[ xx ] && [yy]
if[ xx ] || [yy]

测试字符串、数字、文件
字符串:
$string1 = $string2
$string1 != $string2
-z $string1 是否为空
-n $string1 是否不为空
数字:
-eq -ne -lt -le -gt -ge
文件:
在这里插入图片描述

#!/bin/bash
read -p "please input a filename : " file
if [ -e $file ]
then
echo -e "\n this is $file"
else
echo -e "\n there is no file"
fi

3.5 循环语句

while

while [ xx ]
do
做某事
done

#!/bin/bash
#直到输入yes才退出
while [ -z $response ] || [ $response != "yes" ]
do
 read -p "please inour response :" response
done

until

while相反

for

for in '字符串1' "变量1" "变量2"
do
对每一个字符串都循环做某事
done

for param in `ls *.sh`
do
 cp $param $param-copy.sh
done

常规for循环
for param in `seq 1 2 10`
1\3\5\7\9

3.6 Shell的函数

function 函数名{}
函数名(){} #括号里不能有参数

传递参数
testfunction(){
    echo $param
}
# 像运行shell脚本一样在后面跟上参数
testfunction 1 
testfunction 2

函数返回值 
#shell没有返回值,但是可以返回状态
./function.sh myFIle
myFIle文件作为$1参数传入函数体内

在这里插入图片描述
变量的作用范围:
local a=‘xx’; 函数内部使用
函数外定义var2=yy可在脚本任意函数内使用

重载函数:command

ls (){
    command ls -lh
}
#重写ls命令为显示文件按大小
ls

3.7 Shell实现图片展示网页

在这里插入图片描述
ImageMagic 中的 covert命令 生成缩略图 -thumbnail

#!/bin/bash

# Verification of parameter(验证参数)
# If no parameter, use a default value(如果没有给出参数,那么用默认值 gallery.html )
if [ -z $1 ]
then
    output='gallery.html'
else
    output=$1
fi

# Preparation of files and folders(准备文件和目录)
echo '' > $output

if [ ! -e thumbnails ]
then
    mkdir thumbnails
fi

# Beginning of HTML(HTML 文件的开头)
echo '<!DOCTYPE html>
<html>
  <head>
    <title>My Gallery</title>
  </head>
  <body>
    <p>' >> $output

# Generation of thumbnails and the HTML web page(生成图片的缩略图和 HTML 的页面主体)
for image in `ls *.jpg *.png *.jpeg *.gif 2>/dev/null`
do
    convert $image -thumbnail '200x200>' thumbnails/$image
    echo '      <a href="'$image'"><img src="thumbnails/'$image'" alt=""/></a>' >> $output
done

# End of HTML(HTML 文件的结尾)
echo '    </p>
  </body>
</html>' >> $output

3.8 用Shell做统计练习

grep -io a word.txt | wc -l
i忽略大小写 o一个单词可能有多个a,每个a都在每行展示 wc -l 统计行数

#!/bin/bash

# Verification of parameter
# 确认参数
if [ -z $1 ]
then
    echo "Please enter the file of dictionary !"
    exit
fi

# Verification of file existence
# 确认文件存在
if [ ! -e $1 ]
then
    echo "Please make sure that the file of dictionary exists !"
    exit
fi

# Definition of function
# 函数定义
statistics () {
  for char in {a..z}
  do
    echo "$char - `grep -io "$char" $1 | wc -l`" | tr /a-z/ /A-Z/ >> tmp.txt
  done
  sort -rn -k 2 -t - tmp.txt
  rm tmp.txt
}

# Use of function
# 函数使用
statistics $1

五、系统服务

1. 守护进程和初始化进程服务

之前学习的 ps和top可以静态和动态的查看进程
ps -o ppid,pid,tt,cmd
在linux中有些系统销毁才会停止的守护进程(PID为1),一般守护进程名字后面都会有个d,列入httpd、sysd

2. 管理系统服务systemd/systemctl

systemd/system V不是命令,是包含一组命令的集合
systemd-analyze blame 查看服务启动时间
systemd-analyze 查看系统内外核启动时间
systemctl就是其中管理服务的命令、ctl是control控制的缩写
在这里插入图片描述
在这里插入图片描述

systemctl list-units-files --type=service
systemctl list-units --type=target --all
[liur@105 ~]$ systemctl get-default
graphical.target
[liur@105 ~]$ systemctl set-default graphical.target

journalctl命令管理systemd日志

 journalctl -u chronyd.service
 指定服务日志

3. SELinux安全子系统

SELinux是一个MAC强制访问系统,防止一个下载的程序在后台偷偷收集信息。
①对服务程序功能进行限制
②文件资源的访问限制
防火墙和SELinux的区别?
防火墙是对外的,SELinux是对内程序的限制
在这里插入图片描述

[liur@105 conf]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31
[liur@105 conf]$ getenforce
Enforcing
#重启后就会默认用配置文件的selinux配置方式运行
[liur@105 conf]$ sudo setenforce 0 
[sudo] password for liur: 
[liur@105 conf]$ getenforce
Permissive
[liur@105 conf]$ vim /etc/selinux/config

为什么将Apache配置文件中的/var/www/html默认访问首页改成home/web下就不能访问了呢?
原因是这两个目录的安全上下文不同,SELinux限制了访问,将SELinux关闭即可,或者对此文件进行管理”SELinux“
-Z 目录安全上下文 -d显示目录本身,而不是内容
在这里插入图片描述
管理”SELinux“设置此目录的上下文

semanage [选项] [文件名]
semanage不存在
yum provides semanage #找到哪一个包提供的命令
yum install policycoreutils-python 安装完成即可使用semanage
semanage -i 查询 -a添加 -m修改 -d删除
semanage fcontext -a -t(类型) httpd_sys_content_t(通过-Z看到的类型) /home/web/* 
restorecon -Rv /home/web 重启SELinux安全策略的上线文

在这里插入图片描述
再看home/web的-Z可以看到安全上下文变成了我们刚才设置的

六、内存与磁盘管理

1. 查看登录用户、硬盘、内存、cup、主机硬件、磁盘分区等信息

查看连接此虚拟机用户 w
在这里插入图片描述
查看设备挂载目录情况 df -h
在这里插入图片描述
查看内存情况 free -g/-m
在这里插入图片描述
查看主机硬件信息

uname -a
cat /proc/cpuinfo
cat /proc/meminfo

查看磁盘分区 fdisk -l
在这里插入图片描述

2. 磁盘分区、物理设备和文件系统

磁盘分区:硬盘HDD/SSD 软盘
磁盘分区指把磁盘划分逻辑区域存储
磁盘分区格式:FAT16 FAT32 NTFS(最好用)https://www.ntfsformac.cn/changjianwenti/nf-qbssm.htm
文件系统:实现了软件与硬件的可视化
Windows就以上的磁盘分区格式
Linux:ext2 ext3(日志型文件系统) ext4(ext3的plus) xfs(Centos使用的默认文件系统)
磁盘分区:主分区/引导分区/swap分区(把硬盘当缓存用但速度慢)/根分区(相当于windows的c盘)

物理设备:
在这里插入图片描述
h开头是ide接口硬盘 s开头是sata接口硬盘
第二个总是d是设备的意思
第三个a/b/c表示第几块,第四个1/2/3表示第几个分区

3. 字符设备和块设备、dd命令

parted -l
gparted 需安全,可以图形界面查看磁盘分区情况

/dev下
字符设备:是指I/O传输过程中以字符为单位进行传输的设备,键盘、打印机、串口、tty都是字符设备。在dev下以c开头的文件

ls -l /dev/null 字符设备 
ls -l /dev/zero 字符设备 无线的二进制0

块设备:将信息存储在这些块中,文件熟悉标识是b

ls -l /dev/sda?

dd命令:磁盘拷贝并可以在中途进行转换
在这里插入图片描述
转储(复制)某个磁盘数据

dd if=/dev/sda1 of=backupfile
dd if=/dev/zero bs=5M count=10 of=aFile
创建带“黑洞”的文件
dd if=/dev/zero bs=5M count=10 seek=20 of=bFile

在这里插入图片描述
在这里插入图片描述
动态就属于文件空洞大小
ls 和 du 命令
ls -lh 和 du -h都可以查看文件大小
ls -lh 查看bFile是150M 因为seek也算进进去了
du -h 查看是50M
但为什么说du命令才是真正的呢?
ls统计文件逻辑大小(照理说的大小)
du是统计文件在硬盘中占有的实际大小

4. 挂载硬件设备mount和umount

硬件设备拿到后先分区、然后格式化磁盘、才能挂载硬件使用
所谓的挂载就是要用硬盘里的数据时,先将其与已存在的文件目录进行关联

mount挂载

mount 文件系统 挂载目录 感觉是创建了个软连接
mkdir backupdir
mount /dev/sda1 /backupdir 重启后失效

永久挂载:
格式:设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检
查/etc/fstab

在这里插入图片描述
umount 挂载点或者设备文件

5. 添加硬盘设备和交换分区fdisk和mkfs命令

在这里插入图片描述
fdisk命令用于管理磁盘分区,集增删转换于一身,命令格式为:fdisk 磁盘名称
在这里插入图片描述
管理新增的 fdisk dev/sdb 然后输入相应的参数
设置完成后查看分区 ls -l /dev/sd??

mkfs命令用于格式化了,指定文件系统,格式:mkfs.文件类型名称
在这里插入图片描述
设置xfs格式完成
在这里插入图片描述
然后硬盘挂载
在这里插入图片描述
最后查看挂载情况
在这里插入图片描述
从sdb分出一份空间作为swap交换分区用fdisk命令分区出sdb2
在这里插入图片描述
mkswap /dev/sdb2 创建swap分区
将sdb2添加到主Swap分区 swapon /dev/sdb2
在这里插入图片描述
记得设置永久挂载

七、Linux开发神器

1. 版本控制git/svn

版本控制软件SCM git分布式/svn集中式
集中式:一个服务器集中管理用户提交的代码(需联网)
分布式:每个用户本地都有全部的代码、但现在还是有个服务器管理用户代码
安装和配置Git

yum install git -y 
git --version
git config --global color.ui/diff/status auto
git config --global user.name "xxx"
git config --global --replace-all user.name "新名字"
git config --global user.email "xxx"
git config --list 或者查看家目录下的 vim ~/.gitconfig 文件查看或者编辑配置
设置git命令别名
git config --global alias.co checkout

Linux服务器连接到GitHub
申请一个GitHub账号
Linux通过ssh-keygen -C “你的git邮箱” 在家.ssh目录下生成公私钥
把公钥拷贝到github账号设置里的SSH设置
Linux验证是否成功输入 ssh -T git@github.com
git clone xxxxxx 通过git的ssh安装如nodejs等

2. apache服务器

2.1 安装Apache的服务程序

yum install httpd
systemctl start httpd
ps -ef | grep httpd
sudo systemctl enable httpd
sudo systemctl is-enable httpd
主机输入ip:80可以进入apache的测试页

问题?windows无法通过网页访问此虚拟机的测试页
答:因为虚拟主机开启了firewalld防火墙守护进程,进程没有把80端口开放给其他主机

firewalld
查看已开放的防火墙
sudo firewall-cmd --list-ports

解决①:关闭firewalld守护进程

systemctl stop firewalld

解决②:firewalld守护进程开放80端口

firewall-cmd --zone=public --add-port=5672/tcp --permanent   # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent  #关闭5672端口
firewall-cmd --zone=public --query-port=5672/tcp  #查看5672端口是否开放
firewall-cmd --reload   # 配置立即生效

端口开放关闭、防火墙查看,端口被进程占用情况

2.2 配置Apache服务器

主要配置在 /etc/httpd下,主配置文件 /etc/httpd/conf/httpd.conf,配置文件下的重要配置:
在这里插入图片描述
修改配置文件后,重启服务
systemctl reload httpd

2.3 Apache的虚拟主机功能

在这里插入图片描述
在这里插入图片描述
①配置apache的虚拟主机基于IP
为enp0s3进行edit更多的ip,然后重新查看配置文件会发现有多的ip
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为配置文件新增:
在这里插入图片描述
systemctl restart httpd
这样访问192.168.0.10等可以进到这个页面
在这里插入图片描述
②配置apache的虚拟主机基于域名
修改/etc/hosts文件

192.168.0.10 www.tfkj.com www.66.com
ping www.tfkj.com 回来的是192.168.0.10的包

配置跟上面差不多
在这里插入图片描述
然后通过网页访问域名就可以看到

2.4 https安全证书

http默认端口是80,https默认端口是443
开端口

firewall-cmd --zone=public --add-port=443/tcp --permanet
firewall-cmd --reload
firewall-cmd --list-ports

安装mod_ssl
重启
/etc/httpd/conf.d/ssl/conf
在这里插入图片描述
系统提供的证书:有效期1年
/etc/pki/tls/private/localhost.key 私钥
/etc/pki/tls/certs/localhost.crt 证书

自签名证书:openssl
httpd下pki生成私钥

openssl genrsa -out server.key 2048

生成签名证书请求文件

openssl req -new -key server.key -out server.csr

在这里插入图片描述
有了server.csr和server.key就生成证书server.crt

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

在这里插入图片描述
将生成的server.crt和server.key放进openssl对应目录
在这里插入图片描述
编辑http关于ssl的文件
/etc/httpd/conf.d/ssl/conf
在这里插入图片描述
systemctl restart httpd
在这里插入图片描述

3. Tomcat服务器

简单总结下,tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过tpmcat中间件,转发到最终的目的服务器上,响应消息再通过tomcat返回给浏览器。tomcat所做的事情主要有:开启监听端口监听用户的请求,解析用户发来的http请求然后访问到你指定的应用系统,然后你返回的页面经过tomcat返回给用户。

Apache,Nginx和Tomcat的区别:
Apache全称是 Apache Http Server Project, Tomcat全称是 Apache Tomcat。
Apache和 Nginx用于处理静态资源, tomcat用来处理动态资源。
Apache和Nginx相比,Nginx适合做前端服务器,适合做负载均衡。

一般情况下,使用的时候,都是 Apache+Tomcat一起使用或者 Nginx+tomcat一起使用。

安装jdk:

yum search java | grep openjdk
java运行时环境 java开发环境dev

安装tomcat:

yum install tomcat
tomcat version
systemctl enable tomcat
systemctl status tomcat 查看tomcat服务状态
rpm -ql tomcat 查看tomcat配置文件
这样安装tomcat会自动安装java运行环境
yum search java | grep openjdk 查看java的包

vim /etc/tomcat/server.xml 端口配置
vim /etc/tomcat/tomcat.conf 主配置文件

下载tomcat运行web的相关包
yum install tomcat-webapps tomcat-admin-webapps
开启8080端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

此tomcat的应用程序在此目录下
/var/lib/tomcat/webapps

4. Nginx服务器

4.1 Tomcat服务器的局限

tomcat作为服务器的局限:
tomcat的Coyote Web不能直接用于客户端连接
处理静态文件效率低
不支持https

解决办法:
使用Apache或Nginx作为代理服务器将请求转发到tomcat,Web服务器将管理https连接、访问限制和静态页面,只有对Java应用程序的请求会被转发到Tomcat
Web服务器和Tomcat应用服务器之间的通信方式

  • 使用http协议
  • Web服务器将会做一个Http重定向到Tomcat服务器
  • 使用某些特殊插件、例如仅适用于Apache的mod_jk插件,该插件用特殊协议在Apache和Tomcat之间通信

4.2 什么是反向代理?安装nginx

什么是代理服务器?
代理服务器是客户端和服务器的中介
apache、nginx、IIS称为服务器三巨头
相比Apache服务器,Nginx更适合高并发。Apache是阻塞性同步多进程的服务器。Nginx异步、非阻塞是事件驱动型的服务器

nginx是什么?
https://cnblogs.com/wcwnina/p/8728391.html

安装Nginx服务器
首先yum安装EPEL源,EPEL是基于Fedora的项目,为红帽系操作系统提供额外的软件如centos操作系统
yum install epel-release
yum install nginx
systemctl start nginx systemctl命令启动服务启动失败,因为之前安装了apache服务器,都是80端口
systemctl status httpd
systemctl stop httpd
systemctl start nginx
systemctl enable nginx
因为yum安装的nginx,所以可以使用rpm -ql nginx 查看配置文件所在位置

4.3 配置Apache监听其他端口

因为现在apache正占用80端口访问http,所以要设置nginx监听80端口的http以及443端口的https
①改变httpd(apache)监听的80和443端口为7080端口和7443端口

vim /etc/httpd/conf/httpd.conf 修改http监听为7080端口
vim /etc/httpd/conf.d/ssl.conf 修改https监听为7443端口
firewall-cmd --zone=public --add-port=7080/tcp --permanent
firewall-cmd --zone=public --add-port=7443/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
selinux设置  setenforce 0
start httpd.service
systemctl status httpd.service

4.4 配置nginx作为反向代理服务器

②改变nginx监听80和443

rpm -ql nginx看配置文件位置
/etc/nginx/nginx.conf主配置文件

查看配置文件 /etc/nginx/nginx.conf其中配置了所有conf.d下的配置文件都生效
新建www.test.com.conf文件 www.test2.com.conf文件
修改 主机名
修改 反向代理我们的服务器ip与端口

在主机上设置ip与主机映射配置文件 /etc/hosts
10.206.14.241 www.test.com www.test2.com
在window上C:\Windows\System32\drivers\etc\hosts设置10.206.14.241 www.test.com www.test2.com 否则window访问会报462错误

www.test.com.conf

server {
    listen       80;
    server_name  www.test.com;

    charset utf8;
    access_log  /var/log/nginx/www.test.com.access.log  main;

    location / {
        proxy_pass       http://10.206.14.241:8080;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

www.test2.com.conf

server {
    listen       80;
    server_name  www.test2.com;

    charset utf8;
    access_log  /var/log/nginx/www.test.com.access.log  main;

    location / {
        proxy_pass       http://10.206.14.241:7080;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重启nginx服务后,接下来就可以试验

http://10.206.14.241:8080/jenkins
http://10.206.14.241/jenkins
http://www.test.com/jenkins/

http://10.206.14.241:7080
http://10.206.14.241
http://www.test2.com

这里会遇到一个问题,我的浏览器在window访问都是https访问,https://10.206.14.241/jenkins无法请求到
所以配置https访问
首先设置https证书之前的章节有讲到
然后配置www.test.com.conf配置文件

server {
   listen       80;
   server_name  www.test.com;

   charset utf8;
   access_log  /var/log/nginx/www.test.com.access.log  main;
    #设置http请求转发到https
   return 301 https://$host$request_uri;

    location / {
        proxy_pass       http://10.206.14.241:8080;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
#
        #设置成生成证书的目录
        ssl_certificate "/etc/nginx/pki/server.crt";
        #设置成生成证书的目录
        ssl_certificate_key "/etc/nginx/pki/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass       http://10.206.14.241:8080;
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
现在无论访问
http://www.test.com/jenkins/
还是
https://www.test.com/jenkins/
都会默认转到https

5. jenkins

将jenkins.war放到tomcat的webapp下,启动tomcat即可
如果是用yum安装的tomcar,则需把jenkins.war的安全上下文修改成和yum安装的tomcat一样,不然会受SELinux的管制启动不起来。
避免此问题可以用wget安装
在这里插入图片描述
访问http://192.168.0.106:8080/jenkins
在这里插入图片描述

6. docker容器引擎

sudo yum remove docker-ce docker-ce-cli containerd.io
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
试试运行centos
docker run -it centos bash
exit 退出centos容器
docker images
docker ps -a 历史运行容器
docker ps 运行当中容器

https://www.runoob.com/docker/docker-tutorial.html 菜鸟教程

7. zabbix监控

学习
https://www.cnblogs.com/clsn/p/7885990.html

参考:
Linux之基本操作Xmind(转)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值