Linux常用实践扫盲
- 一、Linux系统简介与安装
- 二、CentOS7的基础使用
- 1. 常用命令总图Xmind
- [1.1 Linux命令之——用户与权限](https://blog.csdn.net/DuanQingCI/article/details/119136257)
- [1.2 Linux命令之——文件操作](https://blog.csdn.net/DuanQingCI/article/details/119136474)
- [1.3 Linux命令之——防火墙、网络、进程](https://blog.csdn.net/DuanQingCI/article/details/119136984)
- [1.4 Linux命令之——查看日志、常用快捷键与命令、重启关闭系统](https://blog.csdn.net/DuanQingCI/article/details/119137163)
- 2. linux软件与配置文件
- 3. 前后台系统灵活切换命令 &、nohup、ctrl+Z、jobs、bg、fg
- 4. 定时和延时执行at、atq、atrm、corntab
- 5. 忘记root密码进入救援模式
- 三、CentOS7的安装与网络
- 四、Shell脚本
- 五、系统服务
- 六、内存与磁盘管理
- 七、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连接远程服务器的两种验证方式
- 基于口令的验证:帐户和密码登录
- 基于密钥的验证:公钥验证登录
基于密钥的验证:
- 在客户机中生成密钥对(公钥和私钥):ssh-keygen 会在.ssh目录下生成id_rsa和id_rsa.pub两个文件
- 把客户机的公钥传输到服务器: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 菜鸟教程