Linux基础使用

第一章、Linux介绍、虚拟机安装使用

一、Linux介绍

(一)计算机资源
  • 硬件资源:计算机的物理设备(CPU、GPU、磁盘…)
  • 软件资源:操作系统[内核空间](特殊的软件资源),应用程序[用户空间](根据特定的需求,使用计算机语言编写的程序,未启动的时候是一堆静态文件,保存在磁盘中,使用的时候从磁盘调入内存中)
(二)常见操作系统
  • Unix:多用户多任务的操作系统,支持多种架构
  • Linux:多用于服务器,开源
  • Windows:分个人用户[win7/8/10/xp](个人计算机)和企业用户[Windows server2008/2012/2016/2019](服务器)
  • MacOS:苹果系统,底层实现良好,半开源
  • IOS:苹果手机系统
  • Android:安卓系统,Linux系统的分支
(三)Linux简单介绍
  • Linux特点
    • 开源:Linux系统遵顼GPL协议,开放源代码
    • 安全高效稳定:Linux用户权限管理严格
    • 多用户多任务:Linux是一款多用户多任务实时性的操作系统
    • 兼容性良好支持多种硬件平台:Linux系统遵循posix协议,支持Unix环境下运行的软件移植到Linux环境。
  • Linux发行版
    • Redhat(企业)
    • CentOS(社区,国内用的最多,即将停止维护)
    • Fedora
    • SUSE
    • Ubuntu
    • Kali(社区,多用于安全相关方向,包含了很多专业的渗透测试和安全审计工具)
    • ArchLinux(社区,衍生版本Manjaro Linux,滚动发行)
  • 开源文化
    • GNU:一个自由软件项目工程,目的是为了创建一套完全自由(开源)的操作系统
    • GPL:GNU通用许可证,拥有该协议的程序是开源的,任何人可以根据源码进行修改,但经修改的代码也必须开源提供给任何人,但请记住开源 ≠ 免费&免费 ≠ 开源。
    • Linux:准确来说是Linux内核,Linux内核+GNU软件=GNU/Linux系统才是我们平时说的Linux系统

二、虚拟机安装使用

(一)虚拟机介绍
  • 虚拟机:根据当前主机虚拟出一台虚拟主机
  • 虚拟机架构
    • 原生架构:主机 → 虚拟机操作系统 → 操作系统(多台)
    • 寄居架构:主机 → 操作系统 → 虚拟机软件 → 操作系统(多台)
(二)常用虚拟机软件
  • VMware workstation(付费)
  • VitualBox(免费)
(三)VMware workstation安装
  • 官方链接:点击下载
  • 软件安装激活步骤
    package.png
    Linux基础使用_第1张图片
    Linux基础使用_第2张图片
    Linux基础使用_第3张图片
    Linux基础使用_第4张图片
    Linux基础使用_第5张图片
    Linux基础使用_第6张图片
    Linux基础使用_第7张图片
    Linux基础使用_第8张图片
  • 软件激活码:购买或者网上查询,建议购买。
    Linux基础使用_第9张图片
(四)VMware workstation常用设置

Linux基础使用_第10张图片
Linux基础使用_第11张图片
Linux基础使用_第12张图片

  • 其他设置按默认即可
(五)虚拟机安装红帽系统
  • 准备rhel8镜像文件
    • 下载链接:红帽官网,需要在红帽官网注册个人账号
  • 虚拟机安装红帽系统
(六)虚拟机创建快照
(七)虚拟机克隆
  • 克隆链接
  • 完全克隆

第二章、Linux桌面环境、文件系统

一、Linux桌面环境

  • 设置桌面快捷键
  • 设置终端(字体、颜色、快捷键)

二、Linux文件系统

目录 用途
/ Linux根目录是所有文件夹的最上一级
/root root用户目录相当于Windows系统上的administrator用户目录
/home 除root用户的家目录
/dev 设备文件目录
/boot 开机和启动项
/mnt 手动挂载文件挂载点
/media 移动设备挂载文件挂载点
/etc 配置文件
/bin 普通用户命令目录:/bin → /usr/bin 软连接
/sbin 超级用户命令目录:/sbin→/usr/sbin 软连接
/usr 第三方源码软件包存放目录
/opt 第三方协力软件存放目录
/proc 虚拟文件系统
/run 程序运行相关的存放目录
/var 可变的数据文件、日志文件存放目录
/sys 正在运行的系统内核信息映射
/srv service的缩写,一些服务启动后需要提取的数据
/tmp 临时文件存放目录
/lib 软连接、库文件
/lib64 软连接、库文件

第三章、Linux基础操作

一、关机重启命令

(一)关机命令(shutdown,init)
init 0
shutdown -h now(立即关机)
shutdown -h 60(60分钟后关机)
(二)重启命令(reboot,shutdown)
reboot
shutdown -r now(立即重启)
shutdown -r 60(60分钟后重启)
(三)取消关机重启命令
shutdown -c(取消重启关机)

二、帮助命令

1、type 命令(查看命令类型)
2、help 命令(内置命令) or 命令 --help(外来命令)
3、info 命令(命令的信息,help命令的补充)
4、man 命令(查看命令的man手册)
5、man man(查看man命令的man手册)
6、man n 命令(按章节查看man手册,每一章都有不同的含义,n[1-9]

三、文件基础操作

  • 知识铺垫(Linux的理念:Linux下一切皆文件)
    • 路径
      • 绝对路径:从根目录开始定位到目标目录,表示方法为:/usr/local/
      • 相对路径:从当前目录开始定位到目标目录,表示方法为:./(当前目录) …/(上级目录)
    • 终端:执行命令的载体
    • shell命令解释器终端中的命令通过解释翻译计算机理解指令,当命令输入错误时shell解释器会在终端中报错,CentOS/RadHat的shell解释器叫bash
    • 终端命令格式:命令 [选项] 参数
      • 命令:命令的主体
      • 选项:影响命令的行为
      • 参数:命令作用的对象
    • 文件类型
      • c(字符设备)输入输出设备
      • b(块文件)设备文件
      • d(目录文件)目录文件
      • f/-(普通文件)普通文件
      • l(链接文件)软连接
      • p(管道文件)
      • s(套接字文件)
    • 文件操作基础命令
查看文件类型:file
file 文件
显示当前路径:pwd
pwd

切换工作目录:cd
cd 切换到root目录
cd - 切换到上一工作目录
cd ./ 切换到当前目录下
cd ../ 切换到上衣目录

列出目录内容:ls
ls -a 列出所有文件包括隐藏文件
ls -l 以列表的形式列出文件
ls -h 以人性的方式列出文件及目录
ls -r 逆序排序的方式列出文件及目录
ls -d 按文件名
ls -m 按分隔符
ls -R 递归显示
ls -S 按文件大小显示
ls -t 按文件时间显示
注意:选项可以按需求组合

创建目录:mkdir
mkdir 目录
mkdir 目录,目录
mkdir -p 多级目录

移除目录:rmdir
rmdir 目录

创建文件、修改文件日期:touch
1、创建文件
touch file 
touch file{1..3}(创建多个文件)
2、修改文件日期
stat file(查看文件详细信息)
touch -a file -t ""(修改文件访问日期)
touch -m file -t ""(修改文件修改日期)
touch -d "" file(修改文件日期)

查看文件内容:cat/tac,more/less,head/tail,ldd
cat/tac file(查看小文件,cat正序,tac倒序)
more/less file(查看大文件)
head file(查看文件前10行)head -n 15 file or head -15 file(查看文件前15行)
tail(查看文件后10行)tail -n 15 file or tail -15 file(查看文件后15行)
ldd /usr/bin/ls (查看二进制文件的命令)

移动文件、重命名文件:mv
1、移动文件(不同目录)
mv /tmp/time.log /root/
2、重命名文件(同一目录)
mv /root/time.log /root/file.log

拷贝文件、目录:cp
cp -r (拷贝目录)
cp -v (显示拷贝内容)
cp -p (拷贝文件并拷贝文件权限)
cp -a (拷贝目录及权限=cp -pr)
注意:选项可以按需求组合

删除目录、文件:rm
rm -r(递归删除,删除目录,提示是否删除)
rm -v(显示删除内容)
rm -f(直接删除,不提示)
注意:该命令很危险,要注意使用方式

注意:使用命令前一定要明白的三件事:我是谁(当前账户)我在哪儿(当前工作路径)我在干什么(我在进行什么操作)

四、bash标准输入

(一)名词解释
  • 标准输入:键盘上的输入 文件描述符:0
  • 标准输出:屏幕中正确的输出 文件描述符:1
  • 标准错误:屏幕中错误的输出 文件描述符:2
(二)相关符号
  • > 标准输出覆盖重定向
  • 2> 标准错误重定向
  • > > 追加重定向,默认是标准输入的重定向追加
  • 2>> 标准错误的重定向追加
  • &> 标准输出,标准错误的重定向追加

五、重定向

1、在/tmp/目录下创建一个可执行文件1.sh和1.log日志文件:touch /tmp/1.sh
2、将'hostname\nhello'写入1.sh可执行文件中:echo -e 'hostname\nhello' > 1.sh
3、将1.sh标准输出重定向到1.log日志文件:./1.sh > 1.log
4、将1.sh标准错误重定向到1.log日志文件中:./1.sh 2> 1.log
5、将1.sh标准输出和标准错误一起重定向到1.log日志文件中:./1.sh &> 1.log
6、将1.sh标准输出追加到1.log文件中:./1.sh >> 1.log 
7、将1.sh标准错误追加到1.log文件中:./1.sh 2>> 1.log
8、将1.sh标准输出和标准错误追加到1.log文件中:./1.sh &>> 1.log 
/dev/null	linux系统下特殊的设备文件,空设备,看的见拿不出来

六、echo命令详解

1、echo的作用
打印字符串,默认将字符串送往标准输出,默认会打印一个换行符
2、echo的用法
echo可以和> >> 连用进行文件的创建或内容的增加
3、常见选线
echo -e	'str\nstr'解释转义字符\n
echo -n 'str'不打印换行符
4、举例说明
打印hello:echo hello
打印hello不换行:echo -n 'hello'
打印hello\nworld换行:echo -e 'hello\nworld'
将hello重定向到1.txt文件中:echo 'hello' > 1.txt
将world追加到1.txt文件中:echo 'world' >> 1.txt

第四章、Linux文件查找、打包压缩、时间相关命令

一、Linux文件查找

(一)命令查找(which,whereis)
1、which 命令(查找命令存放位置)
2、whereis 命令(查看命令存放位置及其他信息)
(二)文件查找(find)
  • 按需求查找文件
find 路径 [选项] 关键字
find --help(查看帮助信息)
find 路径 -name "filename"(按名字查找文件,区分大小写)
find 路径 -iname "filename"(按名字查找文件,不区分大小写)
find 路径 -size +2M(按文件大小查找文件,+2M表示查找所有大于2M和查找文件相匹配的文件)
find 路径 -type b(按文件类型查找文件)
find 路径 -mtime +2(按文件时间查找文件,+2表示2天以前的所有和查找选项相匹配的文件,-2表示两天内,2表示两天前当天)
find 路径 -user username -group groupname (按文件的属主和属组查找文件)
注意:选项可以按需求组合
  • 按需求查找文件并执行shell命令
find 路径 [选项] 关键字 命令
fing 路径 [选项] 关键字 -ls(列出查询目录列表)
fing 路径 [选项] 关键字 -delete(删除查询文件)
find 路径 [选项] 关键字 -print(打印查询文件,默认命令,可不写)
find 路径 [选项] 关键字 -ok shell命令 {} \;(询问是否执行该命令)
find 路径 [选项] 关键字 -exec shell命令 {} \;(不询问直接执行命令)
注意:选项可以按需求组合

二、Linux下打包压缩

(一)Linux下文件打包(tar)
  • tar工具介绍:在Linux系统下,某些情况下需要把多个文件或目录整理成一个进行管理,tar可以将多个文件进行打包
  • tar工具使用
tar [选项] filename.tar filename
tar -c(创建包)
tar -v(打包显示详细内容)
tar -f(选择打包文件)
tar -x(将打包文件进行还原)
tar -t(查看打包文件内容)
tar -r(追加打包文件,压缩后不能再进行追加)
创建包:tar -cvf file.tar file
还原包:tar xvf file.tar
查看包内容:tar -tf file.tar
追加包文件:tar -Pf file.tar -r 1.txt
(二)Linux下压缩工具及其使用(zip、gzip、bzip2、xz)
  • Linux下压缩工具介绍
压缩工具 特点 解压工具
zip 支持多个文件压缩,兼容Unix和Windows unzip
gzip 压缩单个文件,压缩率较低,CPU开销小 gunzip
bzip2 压缩单个文件,压缩率高,CPU开销高 bunzip2
xz 压缩单个文件,压缩率高,压缩时间长,解压速度快,CPU开销高 unxz
  • Linux下压缩工具使用
1、zip工具压缩及解压
压缩:zip -r(显示压缩内容) file.zip file
解压:unzip file.zip -d /path(指定解压路径)
2、gzip工具压缩及解压
压缩:gzip -r(递归压缩目录下所有文件) file.gz file
解压:gzip -d file.gz or gunzip file.gz
3、bzip2工具压缩及解压
压缩:bzip2 -r(递归压缩目录下所有文件) file.bz2 file
解压:bzip2 -d file.bz2 or bunzip2 file.bz2
4、xz工具压缩及解压
压缩:xz -r(递归压缩目录下所有文件) file.xz file
解压:xz -d file.xz or unxz file.xz
(三)Linux下文件打包压缩(tar)
1、使用gzip工具进行打包压缩并解压
打包压缩:tar -zcvf file.tar.gz file
解压:tar -zxvf file.tar.gz -C(指定解压目录)
2、使用bzip2工具进行打包压缩并解压
打包压缩:tar -jcvf file.tar.bz2 file
解压:tar -jxvf file.tar.bz2 -C(指定解压目录)
3、使用xz工具进行打包压缩并解压
打包压缩:tar -Jcvf file.tar.xz file
解压:tar -Jxvf file.tar.xz -C(指定解压目录)

三、时间相关命令

(一)date(设置系统时间)
  • 查看系统时间
1、先使用help命令查看date命令的用法
date --help
2、查看当前时间
date [选线] [打印格式]
date(打印当前时间)
date常用格式:%Y %m %d %F %H %M %S %T %C
例如:
    ①打印当前系统年份:date +'%Y-%-%d' or date +%F
    ②打印系统当前时间:date +'%H-%M-%S' or date +%T or date +%X
    ③打印当前年份+时间:date +'%Y-%m-%d %H-%M-%S'date +'%F %T' date +'%F %X'
    ④打印当前系统完整时间:date +'%c'
    注意点:①按自定义格式和多个格式连用的情况下打印时间需要用(+'格式选项')
           ②格式可自定义如用下划线或空格隔开年月日:date +'%Y_%m_n%' date +'%Y%m%d'
           ③打印格式+后面的内容用双引号和单引号都可以
3、查看非当前时间
date -d [打印格式] or date --date='打印时间' [打印格式]
date -d "+3days" [格式] 按格式打印三天前的日期
date -d "-3days" [格式] 按格式打印三天后的日期
date -d "3days" [格式] 不加加减号默认为加,按格式打印三天前的日期、
注意点:
    ①+表示前,-表示后
    ②不加加减号默认表示加
    ③-d选项后需要将要打印的时间放在单引号或者双引号中:-d "+60days" -d '+60days'
  • 设置系统时间
date -s 需设置的时间
date -s 20201010(只设置年月日,时分秒会清零:00:00:00)
date -s "2020-10-10 10:10:10"
date -s "20201010 10:10:10"
date -s "10:10:10 2020-10-10"
date -s "10:10:10 20201010"
注意:
    ①只有root用户才能设置系统时间,一般我们不会设置系统时间,而是利用时间同步
    ②设置系统时间时,年月日和时分秒没有顺序之分,可以时分秒在前也可以年月日在前,系统会自动匹配
  • 其他date命令选线
  %%	一个文字的 %
  %a	当前locale 的星期名缩写(例如: 日,代表星期日)
  %A	当前locale 的星期名全称 (如:星期日)
  %b	当前locale 的月名缩写 (如:一,代表一月)
  %B	当前locale 的月名全称 (如:一月)
  %c	当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
  %C	世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
  %d	按月计的日期(例如:01)
  %D	按月计的日期;等于%m/%d/%y
  %e	按月计的日期,添加空格,等于%_d
  %F	完整日期格式,等价于 %Y-%m-%d
  %g	ISO-8601 格式年份的最后两位 (参见%G)
  %G	ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
  %h	等于%b
  %H	小时(00-23)
  %I	小时(00-12)
  %j	按年计的日期(001-366)
  %k   hour, space padded ( 0..23); same as %_H
  %l   hour, space padded ( 1..12); same as %_I
  %m   month (01..12)
  %M   minute (00..59)
  %n   a newline
  %N   nanoseconds (000000000..999999999)
  %p   locale's equivalent of either AM or PM; blank if not known
  %P   like %p, but lower case
  %q   quarter of year (1..4)
  %r   locale's 12-hour clock time (e.g., 11:11:04 PM)
  %R   24-hour hour and minute; same as %H:%M
  %s   seconds since 1970-01-01 00:00:00 UTC
  %S	秒(00-60)
  %t	输出制表符 Tab
  %T	时间,等于%H:%M:%S
  %u	星期,1 代表星期一
  %U	一年中的第几周,以周日为每星期第一天(00-53)
  %V	ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
  %w	一星期中的第几日(0-6),0 代表周一
  %W	一年中的第几周,以周一为每星期第一天(00-53)
  %x	当前locale 下的日期描述 (如:12/31/99)
  %X	当前locale 下的时间描述 (如:23:13:48)
  %y	年份最后两位数位 (00-99)
  %Y	年份
  %z +hhmm		数字时区(例如,-0400)
  %:z +hh:mm		数字时区(例如,-04:00)
  %::z +hh:mm:ss	数字时区(例如,-04:00:00)
  %:::z			数字时区带有必要的精度 (例如,-04,+05:30)
  %Z			按字母表排序的时区缩写 (例如,EDT)
(二)hwclock(查看并设置硬件时间)
hwclock --help
hwclock		查看硬件时间	
hwclock -l	查看本地硬件时间
hwclock -u	查看utc时区
hwclock -s	--hctosys系统时间同步硬件时间
hwclock -w	--systohc硬件时间同步系统时间
谁的时间在前就以谁的时间为准.
--hctosys
--systohc
(三)timedatectl(设置系统和硬件时间)
timedatectl -h --help
timedatectl [选项] 命令
timedatectl status	查看当前系统硬件时间状态
timedatectl show 显示当前系统时间时区硬件时间ntp服务的状态
timedatectl set-time TIME 设置系统时间
timedatectl list-timezones 列出系统时区
timedatectl set-timezones ZONE 设置系统时区
timedatectl set-local-rtc BOOL 设置硬件时间是否为本地时间
timedatectl set-ntp BOOL 设置时间同步服务是否开启
(四)cal日历命令
cal / cal -1  打印当月日历
cal -3 打印前三个月日历
cal -n number 打印前n月的日历
cal -y 打印一整年的日历
(五)时间相关命令使用
当我们需要当前系统时间要如何调用当前时间?
$(command):优先执行括号内的命令
·command·:优先执行``内的命令
例如:
创建一个目录以当前系统时间作为目录名,目录内有一文件,文件名为三天前的日期.log进行打包压缩
mkdir $(date +%F)
cd 目录
touch $(date -d "+3days" +%T)
tar -zcvf 目录.tar.gz 目录

第五章、Linux用户管理、vim编辑器、可执行文件

一、用户管理

(一)Linux下用户管理
  • 用户概念和作用
    • 什么是用户:用户就是管理系统和服务的人。
    • 用户管理管理的是什么:Linux下一切皆文件,所以用户管理的是文件。
    • 用户怎样进行管理
      • 基础管理:对文件进行管理,文件的创建、查看、复制、粘贴、移动、拷贝、用户管理、权限。
      • 高级管理:对软件包进行管理,软件包的配置、安装、删除,目的是对外提供稳定的服务。
  • 用户分类
    • 超级用户:root用户,对系统具有完全操作权限,UID=0并永远会为0
    • 系统用户:程序用户,一般由程序创建,程序或服务运行是需要的身份,默认不能登陆系统。1<= UID <=499,Redhat/CentOS 1<=UID<=1000
    • 普通用户:超级用户创建的用户,具有系统的部分操作权限,默认可以登录系统,500
  • 用户基本管理
创建用户:useradd
useradd [选项] username
useradd -u username UID(创建用户指定UIDuseradd -g groupname username(创建用户添加到指定用户组)
useradd -G groupname username(创建用户并为用户添加附属组,一个用户可以有一个主组和多个附属组)
useradd -d username /path(创建用户及目录到指定位置)
useradd -m username(创建用户并在/home目录创建其用户目录)
useradd -s /usr/bin/sh username(创建用户并指定用户默认的shell)
注意:选项可以连用

设置用户密码:passwd
1、passwd(为当前用户创建密码)
2、passwd username(为指定用户创建密码)
3、echo "123456" > passwd --stdin username(使用管道方式为用户添加密码)
4、touch passwd.sh vim passwd.sh echo password | passwd --stdin username (使用shell脚本+管道批量为用户添加密码)
注意:由root用户身份创建的密码可不遵从密码创建规则,普通用户创建密码需要遵循密码创建规则

修改用户账号信息:chage
chage --help(查看chage命令帮助信息)
chage -d username(修改最后一次修改密码时间)
chage -E data username(修改账号过期时间的)
chage -l username(列出用户账号信息)

修改用户信息:usermod
usermod [选项] username
usermod -u UID username(修改用户UIDusermod -G groupname username(修改用户的附属组)
usermod -g groupname username(修改用户的主组)
usermod -m username(将家目录的文件移到另外的指定目录,仅与-d选项连用,只用-m的话用户对目录没有操作权限)
usermod -d /path/username username(修改用户目录,但要保证用户目录的上级目录存在,通常和-m选项连用)
usermod -s /sbin/nologin username(修改用户的默认shell)

删除用户:userdel
userdel [选项] username
userdel -r username(删除用户并移除其用户目录和用户邮箱)用户邮箱:/var/mail
userdel -f username(强制删除当前以登录的用户)
  • 用户信息文件存放路径及系统支持的shell
    • 用户信息存放位置:tail /etc/passwd
    • 用户密码保存位置:tail /etc/shadow
    • 系统支持的shell位置:cat /etc/shells
(二)Linux下用户组管理
  • 用户:管理系统或服务的人
  • 用户组:用户组是用户的一个属性,一个用户只有一个主组,可以有多个附属组
  • 用户的作用:方便管理用户
  • 用户组管理
创建用户组:groupadd
groupadd groupname
groupadd -g groupname(为用户指定GID)

新建用户并添加到用户组:useradd,groupadd
useradd -m -g groupname username

修改原有用户的用户组:usermod,groupadd
usermod -g groupname username

用户组密码及用户组管理:gpasswd
gpasswd [选项] username groupname
1、gpasswd groupname(为用户组添加密码)
2、gpasswd -a username groupname(添加用户到指定用户组)
3、gpasswd -M username01,username02,... groupname(同时添加多个用户到用户组)
4、gpasswd -A username groupname(将指定用户修改为用户组中的管理员)
5、gpasswd -d username groupname(将用户从组中删除)
6、gpasswd -r groupname(删除用户组密码)

删除用户组:groupdel
groupdel groupname(删除用户组,当用户组是其他用户的主组的时候不能被删除)
  • 用户组相关文件存放位置
    • 用户组信息文件存放位置:tail /etc/group
    • 用户组密码文件存放位置:tail /etc/gshadow

二、vim编辑器

(一)vim编辑器特点
  • 无图形化界面
  • 只能通过键盘操作,不能利用鼠标
  • 没有菜单,只有命名
  • 只能编辑文本文件
(二)vim编辑器打开新建文件
vim path
(三)vim编辑器打开文件定位到指定位置
vim path +lines
(四)vim编辑器删除编辑后产生的交换文件
进入vim界面后按提示操作,按“d”键,或回到当前文件目录,使用rm命令删除.开头的文件
(五)vim编辑器三种基本模式
  • 命令模式:vim编辑的入口,可以使用命令文件进行操作,移动、选择、复制、删除(剪切)、撤回、恢复等
  • 编辑模式:在此模式下可以对文本进行编辑
  • 末行模式:vim编辑器的出口,可通过该模式对文本进行保存,退出等操作。
  • 模式之间的切换
模式转换 转换方法
命令 → 编辑 a/A/i/I/o/O/s/S
命令 → 末行 :
编辑、末行 → 命令 ESC
编辑 → 末行 ESC,:
末行 → 编辑 ESC,a/A/i/I/o/O/s/S
(六)vim编辑器操作
  • 重复执行
    • number + x(执行)
  • 移动
    • 单个字符移动
      • h 左
      • j 下
      • k 上
      • l 右
    • 行内移动
      • w 向后移动一个单词
      • b 向前移动一个单词
      • $ 移动到当行最后一个字符
      • 0 移动到当行最前
      • ^ 移动到当行最前一个字符的位置
    • 行数移动
      • gg 移动到第一行
      • G 移动到最后一行
      • 行数+gg 移动到指定行数
      • 行数+G 移动到指定行数
      • :+行数 移动到指定行数
    • 翻页移动
      • Ctrl+f 向下翻页
      • Ctrl+b 向上翻页
      • H 回到顶部
      • M 回到中间位置
      • L 回到底部
    • 段落移动
      • { 移动到上一个段落
      • } 移动大下一个段落
    • 括号匹配
      • % 匹配与当前光标对应的括号
    • 标记回跳
      • m {mask} 标记{mask}
      • ` {mask} 回跳到{mask}位置
  • 选择
    • 可视模式
      • v 可视模式(选中光标所经过的文本)
      • V 可视行模式(选中光标所经过的行的文本)
      • Ctrl+v 可视块模式(选中垂直方向上的文本)
  • 编辑
    • 撤销和恢复撤销
      • u 撤销上一操作
      • Ctrl+r 恢复上次撤销操作
    • 删除(剪切)
      • x 删除光标处字符
      • d 删除文本和移动命令连用
      • dd 删除当前光标所在行,ndd删除当前光标及其后n-1行
      • D 删除至行尾
    • 复制、粘贴
      • y 复制文本,和移动命令连用
      • yy 复制当行,nyy复制当行包括其后的n行
      • p 粘贴
    • 替换文本
      • r 替换光标所在字符
      • R 替换光标所在单词
    • 缩排、重复执行
      • << 向左缩进(4个字符)
      • >> 向右所经
      • . 重复执行
    • 查找替换
      • 查找
        • /str 查找str
        • n 向下匹配str
        • N 向上匹配str
      • 匹配单词
        • * 向下匹配单词
        • # 向上匹配单词
      • 替换格式
        • :%s///g
      • 全局替换
        • :%s/oldstr/newstr/g
      • 可视区域替换
        • 1、通过可视模式选中文件
        • 2、:‘<,’>s/oldstr/newstr/g
      • 确认替换
        • :%s/oldstr/newstr/gc
      • 转义符替换
        • :%s/\/sbin\/nologin\/bin\/sh/g
      • 指定行数替换
        • :7s/oldstr/newstr/g
    • 插入文本
      • a 当前字符后插入
      • A 当行最后插入
      • o 当行下添加空行插入
      • O 当行上添加空行插入
      • i 当前字符前插入
      • I 当行最前方插入
      • s 删除当前字符插入
      • S 删除当前行插入
(七)vim末行模式
  • :w 保存文本
  • :q 退出当前编辑
  • :wq 保存并退出
  • :q! 强制退出
  • :x 保存并退出
  • :e file 不退出vim编辑界面编辑其他文件(常用::e ./)
  • :n file 在当前编辑界面新建文件并编辑
  • :w filename 另存为其他文件
(八)vim分屏操作
  • 终端中分屏

    • vim -on [file1] [file2]
    • vim -On [file1] [file2]
    • -o垂直分割
    • -O水平分割
    • -n窗口数量,可省略,会根据需打开的文件数量来确定打开的窗口数量
    • [file1] [file2] 需要打开的文件名
  • vim中分屏

    • :new [filename] 跟文件名表示在当前窗口上创建窗口并打开文件 不跟文件表示在当前窗口上创建新窗口
    • :sp/split [filename] or [CTRL] [W] s 水平创建窗口
    • :vsp/vsplit [filename] or [CTRL] [W] v 垂直创建窗口
    • :only or [CTRL] W o 关闭当前窗口外的其他窗口
    • :q/quit 关闭当前窗口
  • 窗口操作

命令 含义
[CTRL] [W] + 扩大窗口
[CTRL] [W] - 缩小窗口
[CTRL] [W] h 跳转到左边的窗口
[CTRL] [W] j 跳转到下边的窗口
[CTRL] [W] k 跳转到上边的窗口
[CTRL] [W] l 跳转到右边的窗口
[CTRL] [W] t 跳转到最顶上的窗口
[CTRL] [W] b 跳转到最顶下的窗口
(九)vim自定义设置
  • :set number 显示vim界面行数
  • :set list 显示控制符
  • :noh 取消高亮

三、可执行脚本

(一)可执行脚本概述
  • 什么是可执行脚本:通过脚本语言编写的可执行的文件
  • 可执行脚本的作用:方便操作、减轻工作量
  • 可执行脚本类别:shell脚本、Python脚本、perl脚本
  • 脚本解释器:脚本文件在执行的时候需要有一个脚本解释器将脚本翻译成计算机能理解并执行的指令
  • 常见脚本解释器:/bin/sh(shell解释器) /bin/python(Python解释器) /bin/perl(perl解释器)
(二)创建可执行脚本
  • shell脚本
#!/bin/sh	固定写法
echo "hello world!";	语言规范
  • Python脚本
#!/bin/python
print('hello world!');
  • perl脚本
#!/bin/perl
print "hello world!\n";
(三)执行可执行脚本
  • 方式一、直接执行
./shell.sh
./python.py
./perl.pl
  • 方式二、通过脚本解释器执行
/bin/sh		/shell.sh
/bin/python	/python.py
/bin/perl	/perl.pl

第六章、Linux权限管理

一、权限概述

(一)权限是什么
  • 权限:在计算机系统中,权限就是计算机给指定用户对指定软件资源的操作权力
  • 软件资源:操作系统(特殊的软件资源)、应用程序、当应用程序未启动时就是一堆静态文件,存放在磁盘中。
  • 文件资源:Linux下一切皆文件,所以软件资源就是文件资源
(二)权限的作用
  • 作用:权限给指定用户操作指定文件的权力,可以更好的管理软件资源,为计算机提供了更高的安全保障。
(三)权限的分类
  • 普通权限:用户正常对文件操作的操作权限
  • 高级权限:用户需要对文件进行一些特殊的操作,但是普通权限不能满时的权限
  • 默认权限:文件创建时就有的权限

二、普通权限

(一)了解rwx-的含义
  • r(读权限)
    • 对目录:可以进入目录,查看目录内文件信息
    • 对文件:可以查看文件内容
    • 数字表示:4
  • w(写权限)
    • 对目录:可以在目录内创建,删除,移动等文件操作权限
    • 对文件:可以编辑文件内容
    • 数字表示:2
  • x(可执行权限)
    • 一般针对可执行文件,添加该权限可以对文件进行执行操作
    • 数字表示:1
  • -(没有权限)
    • 对文件没有任何操作权限
    • 数字表示:0
(二)uoga的含义
  • u:当前文件属主
  • o:除当前文件属主和其属组成员的其他用户
  • g:当前文件属主的同组成员用户
  • a:所有用户
(三)修改普通权限(chmod)
  • 字母方式修改权限
chmod (a/u/o/g)(+/=/-)(r/w/x) file
  • 数字方式修改权限(数字会自动匹配,系统会自动计算)
chmod 777 file

三、文件属主和属组

(一)文件属主和属组
  • 属主:创建文件的用户
  • 属组:创建文件的用户的同组成员用户
(二)修改文件属主和属组(chown,chgrp)
chown [选项] username:groupname filename
chown -R username(递归修改文件属组)
chown -R username:groupname filename or chown -R username.groupname filename(递归修改文件的属主和属组)
chown -R :groupname filename or chown -R .groupname filename(递归修改文件的属组)
chgrp groupname filename(修改文件属组)

四、高级权限

(一)冒险位
  • 什么是冒险位:冒险位是指文件操作者临时拥有文件所有者的权限
  • 冒险位的作用对象:冒险位一般作用在命令或脚本文件上
  • 冒险位的表示方式:冒险位用字母s/S表示,用数字4表示
  • 冒险位的设置方法(chmod)
1、字母方法
chmod u+s/S usr/bin/touch
2、数字方法
chmod 4xxx /usr/bin//touch
3、关闭权限
chmod u-s/S /usr/bin/touch
chmod 0xxx /usr/bin/touch
注意:冒险位使用很危险。在临时使用后要记得关闭权限
(二)强制位
  • 什么是强制位:设置了强制位的目录,不论哪个用户目录内创建文件属组强制继承该目录的属组
  • 强制为的作用对象:针对文件
  • 强制位的表示方法:字母s/S表示,数字2表示
  • 强制位的设置方法(chmod)
1、字母方法
chmod g+s/S filename
2、数字方法
chmod 2xxx filename
3、关闭权限
chmod g-s/S filename
chmod 0xxx filename
(三)粘滞位
  • 什么是粘滞位:设置了粘滞位的目录,其目录下的文件操作权限只为root用户和文件创建者所有
    ​- 粘滞位的作用对象:针对公共目录
  • 粘滞位的表示方法:字母t/T表示,数字1表示
  • 粘滞位的设方法(chmod)
1、字母设置
chmod o+t/T filename
2、数字设置
chmod 1xxx filename
3、关闭权限
chmod o-t/T filename
chmod 0xxx filename

五、默认权限

(一)什么是文件的默认权限
  • 文件的默认权限:文件创建时的权限,文件一创建就有的权限
  • 目录的最高权限为0777,文件的最高权限为0666
(二)文件的默认权限由谁控制
  • 文件的默认权限由umask控制
  • 文件默认权限的计算方式:默认权限=最高权限-umask值
(三)文件默认权限查看和设置
  • 查看文件的默认权限:umask
  • 设置文件的默认权限
临时修改:
用户user01设置umask值为0005
切换到user01:su - user01
设置umask值为0003:umask 0005
创建文件:touch /tmp/test
查看文件权限:ll /tmp/test 会发现其他用户的权限为读权限
注意:
①临时设置的umask只对当前终端的当前用户生效
②权限用数字表示不能为负数,当权限为负数时用0表示
③文件的默认权限遵循Linux下权限最小化原则

永久修改:
1、针对所有用户设置umask
编辑配置文件:vim /etc/bashrc
最后一行添加:umask=指定数值
重载配置文件:source /etc/bashrc
2、针对指定用户设置umask
切换到指定用户:su - username
修改配置文件:vim ~/.bashrc
最后一行加:umask=指定数值
重载配置文件:source ~/.bashrc

六、ACL访问控制策略

(一)ACL策略的作用
  • ACL策略能够更加精细的控制文件权限
  • ACL策略可以设置指定用户在指定文件上的权限
  • ACL策略可以设置指定用户组在指定文件上的权限
(二)ACL策略相关命令
  • 查看文件的acl策略:getfacl
  • 设置文件的acl策略:setfacl
(三)设置文件的ACL策略
setfacl [选项] u:username:权限 filename(修改指定用户对文件的操作权限)
setfacl [选项] g:groupname:权限 filename(修改指定用户组对指定文件的操作权限)
setfacl [选项] mask::权限 filename(修改除其他人【o】和其文件属主以外的其他用户【同组成员】高权限)
setfacl -b filename(删除当前文件的所有acl策略)
setfacl -m(修改或设置acl策略)
setfacl -mR(递归授权,包括当前目录和其子文件(不包括新建文件)在内的所有文件都享有所设置的acl策略)
setfacl -md(默认acl,当前目录下(不包括当前目录)的子文件(包括新建文件)享有所设置的acl策略)
setfacl -x(删除某个用户或用户组的acl策略)
setfacl -b(删除当前文件的所有acl策略)

第七章、Linux基础环境配置

一、RHEL8web控制台

(一)RHEL8web控制台介绍
  • RHEL8web控制台是什么
    • 基于RHEL8系统的web管理界面,用来管理本地或处在网络环境的Linux服务器。
    • RHEL8web控制台是交互式服务器管理界面,可以实现浏览器和服务器之间的交互。
  • RHEL8web控制台能干什么
    • 监控基本系统功能,例如硬件信息、时间配置、性能配置等。
    • 检查系统日志
    • 管理网络接口和配置防火墙
    • 管理虚拟机
    • 管理用户账号
    • 监视和配置系统服务
    • 管理软件包
    • 配置SELinux
    • 更新软件
    • 访问终端
(二)安装RHEL8web控制台
yum -y install cockpit
(三)启动服务并登录RHEL8web控制台
  • 启动服务并设置开机自启
1、启动服务
systemctl start cockpit.service
2、设置开机自启
systemctl enable --now cockpit.scoket
  • 查看服务是否启动
systemctl status cockpit.service
  • 查看服务是否开机自启
systemctl list-unit-files | grep cockpit.service
  • 查看服务端口是否监听
1、使用netstat命令
netstat -nltp | grep :9090(port/servername)
2、使用lsof命令
lsof -i :9090(port / servername)
  • 关闭防火墙SELinux或者设置防火墙开放端口
关闭防火墙和SELinux:
1、关闭防火墙
systemctl stop firewalld.service
2、设置开机关闭防火墙
systemctl disable --now firewalld.service

开放防火墙端口:
1、临时开放
firewall-cmd --add-server=cockpit.service
2、永久开放
firewall-cmd --add-server=cockpit.service --permanent
3、永久开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
4、重启加载端口信息
firewall-cmd --reload
  • 在浏览器中登录RHEL8web控制台
浏览器中输入:http://ip:9090
在本机中输入:http://localhost:9090
(四)利用RHEL8web控制台对系统进行管理
  • 修改主机名
  • 关闭防火墙和SELinux
  • 按需求进行网络配置

二、使用终端命令管理系统

(一)修改主机名
  • 命令修改
hostnamectl set-hostname hostname
  • 修改配置文件
vim /etc/hostname
(二)配置网络
  • VMware workstation的三种网络模式
    • 桥接模式
      • 虚拟机网卡和本地物理网卡桥接,并给创建的虚拟机分配ip
      • 设置桥接模式的虚拟机和本地网卡处于同一网段
      • 设置了桥接模式的多台虚拟机可以和主机、以及主机同一网段设备、进行相互通信
      • 若主机能访问外部网络,则设置桥接模式的虚拟机也可以访问外部网络,但外部网络不能访问虚拟机
    • nat模式
      • 使用本地的VMnet0网卡作为交换机网卡,可以给设置了该模式的虚拟机分配ip
      • nat模式下可以自定义ip地址
      • nat模式下的ip与主机不在同一网段,通过nat路由转换技术将虚拟机ip转换为主机同一网段ip
      • nat模式下的虚拟机可以访问主机和同主机处于同一网段的设备,但同主机同一网段的设备不能访问虚拟机
      • 当主机能访问外部网络的时候,设置了nat模式的虚拟机也可以访问外部网络,但外部网络不能访问虚拟机
    • 仅主机模式
      • 使用本地的VMnet8网卡作为交换机网卡,可以给设置了该模式的虚拟机分配ip
      • 仅主机模式下可以自定义ip地址
      • 仅主机模式下的ip和主机不在同一网段
      • 仅主机模式下的虚拟机只能和主机进行相互通信,不能和同主机处于同一网段的设置和外部网络进行通信
  • VMware workstation自定义网络设置
    • 修改桥接模式下桥接的物理网卡
    • 修改nat模式下的网段
    • 修改仅主机模式下的网段
    • 添加、删除网卡
  • 配置静态IP
修改配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens160

TYPE=Ethernet	网络类型:以太网
BOOTPROTO=staticIP	获取方式
NAME=ens160	网卡名称
UUID=7ebb621a-84a0-41c6-bd78-2d5c0fe95b9d	网卡的位置标识
DEVICE=ens160	网卡设备名
ONBOOT=yes	网卡是否启动
IPADDR=xxx.xxx.x.x	静态ip地址
GATEWAY=xxx.xxx.x.x	网关地址
DNS1=8.8.8.8	dns服务器
PREFIX=21	子网掩码,也可设置为MASKNET=255.255.255.0

重新加载网卡配置文件
nmcli connection reload ens160 
重新激活网卡连接
nmcli connection up ens160

使用nmcli命令配置网络
1、查看系统当前网卡
nmcli connection show
2、查看当前已激活的网卡
nmcli c s --active
3、修改ip地址
nmcli c modify ens160 ipv4.address xxx.xxx.x.x
4、添加、删除IP地址(子接口)
nmcli c m ens160 +/-ipv4.address xxx.xxx.x.x
5、修改网关地址
nmcli c m ens160 ipv4.gateway xxx.xxx.xxx.x
6、修改dns服务器
nmcli c m ens160 ipv4.dns 8.8.8.8
7、添加、删除dns服务器
nmcli c m ens160 +/-ipv4.dns 114.114.114.114
8、同时修改一块网卡的多个属性
nmcli c m ens160 ipv4.address xxx.xxx.x.x ipv4.gateway xxx.xxx.x.x ipv4.dns 8.8.8.8
9、重载网卡配置信息
nmcli c reload ens160
10、重新激活网卡连接
nmcli c up ens160

使用nmtui文本图形化工具配置网络
nmtui	命令进行文本图形化界面
(三)软件包管理
  • Linux软件包的分类
    • 二进制包
      • 二进制包是已经编译后的软件包,可以直接安装使用
      • 二进制包不需要编译,可以直接安装使用
      • 二进制包的选择要根据系统版本,CPU架构,进行合理的选择
      • 二进制包的命名格式:example-5.1.3-42.el6.x86_64.rpm 软件名-版本.系统版本.CPU架构.二进制包后缀
      • 二进制包功能不能定制
    • 源码包
      • 源码包是程序员写的原始代码,需要经过编译后才能安装使用
      • 源码包可在任何计算机上安装,且经编译安装的软件非常适合当前机器
      • 源码包功能可以根据实际需求进行定制
      • 源码包常用格式 .tar.gz .tar.xz . tar.bz2 .zip
    • 二进制源码包
      • 二进制源码包是半成品的安装包,安装后不能直接使用
      • 要经过rpmbuild工具重构成二进制包,或者重构成源码包才能安装使用。
      • 命名方式:mysql-community-5.7.52-1.el7.src.rpm
    • 常见二进制包及二进制包和源码包的区别
Linux发行版 包类型 工具 安装工具
RedHat、CentOS、Fedora rpm rpm yum(dnf)
Ubuntu、Debian deb dpkg apt
包类型 是否需要编译 安装难易程度 可定制性
二进制包 易(直接安装)
源码包 是,按需求配置后编译 难(配置、编译、安装)
  • Linux软件包的安装
    • 二进制包安装
      • 获取rpm包,直接通过rpm包进行安装
      • 配置yum仓库(本地,远程【保证网络良好】),使用yum(dnf)工具进行安装
    • 源码包安装
      • 按实际需求配置文件(定制功能)
      • 编译配置后的文件(经过编译器将源码包编译成二进制文件)
      • 正式安装(安装到指定位置)
      • 源码包可以在任何平台下编译安装,源码包安装后非常适合当前机器
      • 源码包可以按需求配置相关文件,对某些功能进行定制,开启或关闭某些服务
  • 使用rpm工具管理二进制包(rpm工具需要手动解决依赖)
安装:
rpm -ivh software(安装软件包)

查看:
rpm -q software(查看软件包是否安装)

卸载:
rpm -e software(移除已安装的软件包)

升级:
1、未安装情况下升级软件
rpm -Uvh software
2、已安装情况下升级软件
rpm -Fvh software 

查看软件包内容:
rpm -q software(查看软件包是否安装)
rpm -qa software(查看已安装的所有软件包,通常用法:rpm -qa | grep xxx【查询xxx软件包安装信息】)
rpm -ql software(列出已安装软件包的详细内容)
rpm -qlp software(列出未安装软件包的详细内容)
rpm -qc software(列出软件包的配置文件位置)
rpm -qd software(列出软件包文档文件位置信息)
rpm -qi software(查看已安装软件包的详细信息)
rpm -qf file(查看某个文件属于哪个软件包)

其他选项:
1、--force(强制命令)
强制安装:rpm -ivh software --force
强制删除:rpm -e software --force
2、--nodeps(忽略依赖)
安装时忽略依赖:rpm -ivh software --nodeps(不建议使用,忽略依赖安装软件可能造成某些服务不能正常运行)
删除时忽略依赖:rpm -e software --nodeps

建议:
1、如何获取rpm包
RHEL/CentOS光盘自带的rpm包
推荐网站:findrpm.net、rpm.phone.net
2、如何选择合适的rpm包
要根据自己系统版本和CPU架构选择合适的rpm包
建议不要跨大版本安装rpm包
  • yum(dnf)工具管理
    • 介绍yum(dnf)工具
      • yum工具的有点:不需要手动解决依赖
      • 核心:使用yum(dnf)工具需要一个软件仓库,仓库里存放的是软件包和软件包的依赖关系
      • 软件仓库:本地仓库(本地yum源),远程仓库(保证网络联通信良好)
      • yum源:告诉yum工具软件仓库的位置
    • 配置本地yum源
      • 本地仓库分类
        • BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
        • Appstream存储库:用户空间应用程序,运行时的语言程序、数据库管理系统
      • 配置本地仓库
挂载镜像到指定挂载点,并设置开机自动挂载:
1、显示文件系统信息
df -h
2、显示所有文件系统信息
df -a
3、将镜像文件挂载到/mnt
mount -o ro /dev/sr0 /mnt(挂载到/mnt) 
ls /mnt(查看是否挂载成功)
4、设置开机自动将镜像文件挂载到/mnt
echo "mount -o ro /dev/sr0 /mnt" > /etc/rc.d/rc.local
chmod +x /etc/rc.local

修改yum配置文件指定本地存储库:
vim /etc/yum.d.repos/local.repo
编辑内容:
[BaseOS](仓库标识)
name=baseos yum(仓库名称)
baseusrl=file:///mnt/BaseOS/(基础软件库)
enabled=1(是否开启软件仓库)
gpgcheck=0(不需要校验软件签名)

[AppStream]
name=app yum 
baseurl=file:///mnt/AppStream/
enabled=1
gpgcheck=0
编辑完成保存并退出

验证是否配置成功:
yum clean all(清空yum仓库)
yum makecache(创建yum缓存)
yum repolist(查看yum源)
yum list(查看yum列表)

yum(dnf)工具的使用:
yum -y install(安装软件包)
yum -y groupinstall "包组名"(包组:大型软件包,包含很多子软件包,例如桌面环境)
yum -y remove(移除软件包)
yum -y groupremove "包组名"
yum search(查询软件包)
yum list | grep xxx(查看已安装的xxxx软件)
yum -y update(升级软件包) 
  • 源码包的安装
安装C语言编译器gcc:
1、安装:
yum -y install gcc automake autoconf libtool make
2、安装g++:
yum install gcc gcc-c++

下载源码包:进入软件包的官方网站找到与系统版本相对应的源码包
进入/usr/local/目录创建软件包名,并进入创建的目录
cd /usr/local/ && mkdir nginx
cd nginx

解压文件到创建的目录:
tar -zxvf /root/nginx-1.19.0.tar.gz -C ./

进入解压后的目录,根据需求指定安装位置,并编译安装
cd nginx-1.19.0
./configure
make 编译
make install 安装
make && make install 编译安装

测试验证安装结果:
/usr/local/nginx/sbin/nginx启动nginx服务
在浏览器中输入:ip:80查看服务是否启动
  • 补充扩展,脚本安装包的用法
下载脚本安装包:到对应软件的官网下载对应的软件

解压:
tar -zxvf software -C ./
cd software

执行脚本安装命令进行安装:
./setup.sh
根据需求填写内容,一直点击下一步即可

第八章、Linux程序进程、自带服务

一、Linux进程检测控制

(一)认识管道
  • 管道的概念
    • 是一种特殊的文件
    • 在Unix系统中管道文件是实现进程之间通信的一种方式或机制
  • 管道的分类
    • 匿名管道
      • 表示方式:在bash中用“|”表示
      • 作用对象:在同一终端下,用于父子进程之间通讯的一种方式
      • 作用:将上一命令的执行结果(标准输出)作为下一命令的标准输入,匿名管道没有数量限制
      • 用法:将上一命令的执行结果通过下一命令进行筛选:rpm -qa | grep xxx /yum list | grep xxx
    • 命名管道(mkfifo)
      • 作用对象:作用在不同终端下,可用于任何进程之间通讯
      • 作用:将通过mkfifo创建的管道文件可以在其他终端利用grep命令按需求取出该文件内容,取出文件内容后,源mkfifo文件内容清空
      • 用法
1、利用mkfifo命令在/tmp目录下创建p_file.log文件
mkfifo /tmp/p_file.log
2、将系统当前安装的全部软件包重定向到p_file.log文件
rpm -qa > /tmp/p_file.log
3、新建终端并利用grep查看openshh文件信息
grep openssh /tmp/p_file.log
4、使用echo命令将"hello world!"写入p_file.log文件中
echo "hello world!" > /tmp/p_file.log
5、在另一终端中查看p_file.log文件内容
cat /tmp/p_file.log
  • 引申(xagrs):将上条命令的执行结果作为下条命令的参数
1、/tmp/dir1目录下有一个目录文件aaa和file1,file2,file3,file4,file5,要求删除dir下的所有文件
方法1:find /tmp/dir1/ -type f -delete
方法2:find /tmp/dir1/ -type f -ok/exec rm -rvf {} \;
方法3:find /tmp/dir1/ -type f | xargs rm -rvf
2、将系统中以安装的httpd软件删除
rpm -qa | grep httpd | xargs yum -y remove
(二)进程概述
  • 什么是进程
    • 程序(静态):没有运行的程序就是一堆静态文件存储在磁盘中
    • 进程(动态):正在运行的程序,已启动的可执行文件
    • 线程:轻量级的进程,一个进程可以有多个线程,线程不具有资源他和进程共享资源,线程的执行是抢占式的,谁执行快谁就先执行。
    • 例子:盖大楼(进程),贴瓷砖,砌墙,安装水电气(线程)
  • 进程的特点
    • 独立性:每个进程都是计算机上都是独立的实体,都拥有独立的地址空间和独立的资源。
    • 动态性:程序是一个静态的指令集和,进程是运行的程序是在系统中活动的指令集合。
    • 并发性:多个进程可以在单个CPU上运行,但是多个进程不会相互影响。
  • 进程的生命周期
    • 父进程
      • 复制自己的地址空间创建一个新的子进程,每个继承都分配一个Id,用以保证其安全性
      • 父进程是子进程的环境元素,任何进程都可以创建子进程,所有进程都是第一个进程的后代
    • 子进程
      • 继承父进程的环境变量、文件描述符、端口、安全身份、资源、程序代码。
      • 子进程exec自己的程序代码的时候父进程处于睡眠状态。
      • 子进程在发出exit状态后,丢弃其环境资源,剩余的环境资源被称为僵停。
      • 父进程在受到子进程的信号后被唤醒,清理剩余资源,并执行自己的程序代码。
(三)进程信息查看
  • 静态查看(ps)
ps -ef(显示所有进程及其父子进程的关系,通常用法:ps -ef | grep xxx)
ps -eF(显示所有进程及其父子进程的关系)
ps -elf(详细显示所有进程何其父子进程的关系)
ps aux(显示当前终端所有进程+没有控制终端的所有进程,并显示出当前进程拥有者、状态、资源占用等详细信息)
ps auxf(显示当前终端所有进程+没有控制终端的所有进程,并显示出当前进程拥有者、状态、资源占用及其进程父子关系等详细信息)
ps auo pid ,nice(指定查看进程信息)
  • 动态查看(top)
top 1(显示所有进程以及逻辑CPU个数)
top -p PID(查看指定进程信息)
top -u UID(查看指定用户进程信息)
平均负载 1 5 15
CPU负载=平均负载/CPU逻辑个数
(四)管理控制进程
  • 控制进程优先级
控制正在运行时的进程优先级(renice):
1、创建一个sleep进程并设置3000s后在后台运行
sleep 3000 &
2、调整sleep进程优先级
renice 优先级 PID 
优先级分为:-20-19,数字越小优先级越高

控制进程启动时的优先级(nice):
nice -n 优先级 PID/进程名 [&](是否后台运行)
nice -n -5 sleep &
  • 控制进程状态
    • 如何控制进程状态:用户通过给进程发送信号来控制进程状态
    • 常见信号及如何发信号
常见信号 含义 解释
1 SIGHUP 默认终止控制终端进程(可用来重新加载文件)
2 SIGINT 键盘中断(Ctrl+C)
3 SIGQUIT 键盘退出(Ctrl+\)
9 SIGKILL 杀死进程
15 SIGTERM 正常的结束进程,默认信号
18 SIGCONT 继续
19 SIGSTOP 停止
20 SIGTSTP 暂停(Ctrl+z)
给进程发送信号:
1、kill
给vsftpd进程发送9信号:kill -9 vaftpd_PID
2、pkill
给当前终端所有进程发送9信号:pkill -9 -t pts/0
3、killall
给用户所有进程发送9信号:killall -9 -u username
  • 其他控制进程命令
1、jobs(查看后台进程)
2、bg(将暂停的后台进程依旧运行在后台)
bg PId将PID的对应进程放到后台运行
bg %n将后台编号为n的进程放在后台继续运行
3、fg(将后台进程放到前台来运行)
fg PID将PID对应的进程放到前台运行
fg %n将后台编号为n的进程放到前台来运行

二、Linux自带服务

(一)ssh服务
  • 知识铺垫
    • 客户端和服务端
      • 客户端:享受服务
      • 服务端:提供服务
      • B/S架构:Bowser → Server
      • C/S架构:Client → Server
      • 客户端如何通过网络找到服务端:客户端通过ip(小区)+端口(门牌号)找到对应的服务端
    • IP端口的设定
      • IP端口号只有整数,范围在:0-65535
      • 端口号范围和其作用
端口号 作用
1-255 一般是知名的端口号,ftp21 ssh22 web80 telnet23
256-1023 Unix占用用来提供特殊服务
1023-5000 客户端临时端口,随机产生
5001-65535 为互联网其他服务预留的端口
  • ssh服务概述
    • ssh服务:ssh服务是Linux下远程连接管理服务器的安全协议
    • ssh服务功能:远程连接管理服务器
    • ssh服务默认端口:默认端口22
    • ssh服务架构:ssh服务是C/S架构,客户端(Windows:secuerCrt fianlshell Linux:openssh-client)服务端:openssh-server
  • ssh服务启动
1、查看sshd服务是否启动
systemctl status sshd.service
2、启动sshd服务
systemctl start sshd.service 
3、设置sshd服务开机自启
systemctl enable --now sshd.service
4、重启sshd服务
systemctl restart sshd.service
5、关闭sshd服务
systemctl stop sshd.service
6、关闭sshd服务开机自启
systemctl disable --now sshd.service
7、查看sshd服务端口是否被监听
netstat -nltp | grep sshd
lsof -i :22
  • 修改ssh服务端口
1、查看openssh-server软件包的配置文件位置
rpm -qc openssh-server
2、查看配置文件修改方法
man 5 openssh
3、修改配置文件
vim /etc/ssh/sshd_config
port xxxx
4、重启sshd服务
systemctl restart sshd.service
5、验证查看端口是否改变
netstat -nltp | grep sshd
  • Linux下远程连接工具(ssh)
功能一:远程连接服务器
ssh [选项] [username@]远程IP
ssh -p 22 -l username 远程IP
ssh -p 22 username@远程IP

功能二:未登录情况下访问远程服务器执行命令
ssh [选项] [username@]远程IP 命令
ssh -p 22 username@远程IP ls /root/
  • Linux下远程拷贝工具(scp)
功能一:将本地文件拷贝到远程服务器(push)
scp [选项] 本地文件地址 远程IP:存放路径
拷贝文件到远程服务器:scp -P port /tmp/test.sh 远程IP:/tmp/
拷贝目录到远程服务器:scp -P port -r /tmp/test 远程IP:/tmp/

功能二:将远程服务器拷贝到本地(pull)
scp [选项] 远程IP:文件路径 本地路径
将远程服务器文件拷贝到本地:scp -P port 远程服务器:/tmp/test.txt /tmp/
将远程服务器文件拷贝到本地并改名:scp -P port 远程服务器:/tmp/test.txt /tmp/file.txt
(二)ftp服务
  • ftp概述
    • 什么是ftp协议:FTP(File Tranfer Protocol)文件传输协议,是一种旧的网络协议
    • ftp服务的作用:用于在计算机网络上客户端和服务端传输文件。
  • ftp服务搭建
查看是否以安装ftp软件:
rpm -qa | grep vsftpd

安装vsftpd软件包:
1、关闭防火墙和SELinux安全策略(实验环境),非学习环境需要开放防火墙端口
systemctl stop firewalld.service(关闭防火墙服务)
systemctl disable --now firewalld.service(设置防火墙服务开机自动关闭)
firewall-cmd --zone=public --add-port=21/tcp --permanent(永久开放21端口)
firewall-cmd --reload(重载防火墙)
getenforce(查看SELinux安全策略)
setforce 0 or vim /etc/selinux/config(设置SELinux安全策略)
2、配置本地yum仓库
df -h
mount -o ro /dev/sr0 /mnt
echo "mount -o ro /dev/sr0 /mnt" >> /etc/rc.d/rc.local
chmod +x /etc/rc.local
vim /etc/yum.repos.d/local.repo
[BaseOS]
name=baseos yum
baseurl=file:///mnt/BaseOS/
enabled=1
gpgcheck=0
3、安装vsftpd软件包
yum -y insatll vsftpd
4、启动vsftpd服务
systemctl start vsftpd.sevice
5、测试验证ftp服务是否开启
firefox ftp://localhost:21

修改配置文件:

重启vsftpd服务:

开放21端口:
(三)ntp时间同步服务
  • 时间同步服务的重要性
    • it系统中,准确的时间很重要,很多原因都要准确的时间
      • 网络传输中,数据包和事务日志需要准确的时间戳
      • 各种应用程序中,如订单信息和交易信息都需要准确的时间
    • Linux系统中,Network Time Protocol(NTP)NTP协议有在用户空间中运行的守护程序ntp和chrony实现,CentOS7(ntp/chrony)RedHat8(chrony)
  • 时间同步服务器:自己的服务器 → 上一级别的时间服务器 → 上上一级别的时间服务器 → 根时间服务器,推荐网站:www.ntp.org.cn
  • 同步当前系统时间
1、修改配置文件指定ntp服务器同步系统时间
查看chrony的配置文件:rpm -qc chrony
修改chrony的配置文件:vim /etc/chrony.conf
pool cn.ntp.org.cn iburst
server ip地址
重启服务:systemctl restart chronyd.service
2、临时指定ntp服务器同步系统时间
chronyd -q "server cn.ntp.org.cn iburst"
  • 搭建时间同步服务器
    • RHEL7和RHEL8时间同步服务的区别
      • RHEL7支持ntp和chrony工具
      • RHEL8不再支持ntp工具,使用chrony守护程序工具代替ntp实现NTP时间同步
    • ntp和chrony程序的区别
      • ntpd服务器在控制客户端访问方式上响应来自任何地址的请求,相对不安全
      • chrony默认情况下不允许客户端访问,只有在allow中指定的ip才能进行访问
      • chrony在各种条件下表现良好
    • RHEL8配置时间同步服务
服务器端
关闭防火墙和SELinux(实验环境)
systemctl -stop firewalld.service
systemctl disable --now firewalld.service
setenforce 0
配置软件仓库
df -h
mount -o ro /dev/sr0 /mnt
echo "mount -o ro /dev/sr0 /mnt" > /etc/rc.local
chmod +x /etc/rc.d/rc.local
ls /mnt
vim /yum.d.repos/local.repo
[BaseOS]
name=baseos yum 
baseurl=fiel:///mnt/BaseOs/
enabled=1
gpgcheck=0

yum clean all
yum makecache
yum repolist
查看是否安装chrony软件包
rpm -q chrony
安装chrony、确认是否安装成功、查看软件配置信息
yum -y install chrony
rpm -q chrony 
rpm -qc chrony
查看man手册如何对配置信息进行修改
man 5 /etc/chrony.conf
修改配置信息
vim /etc/chrony.conf
allow 允许的ip/子网掩码
重启服务器并设置开机自启
systemctl restart chronyd.service
systemctl enable --now chronyd.service
测试验证服务
客户端
修改配置文件:vim /etc/chrony.conf 
pool cn.ntp.org.cn iburst
server ip地址
重启chronyd服务:systemctl restart chronyd.service
显示当前ntp服务器配置源:chronyc source
手动同步时间:chronyc makestep(不建议使用,会造成时间同步服务冲突)
(四)计划任务服务(crond)
  • 计划任务服务crond的作用
    • 作用:解放双手,解放时间
    • 计划任何,让系统在未来指定时间执行指定的某些任务(程序),可以周期性的执行也可只执行一次
    • crond属于Linux内置服务,默认情况下是安装好的
  • 相关文件
目录&文件 作用
/etc/cron.d/
/etc/cron.d/Ohourly 系统每小时需要执行的任务
/etc/cron.d/raid-check
/etc/cron.deny 用户拒绝列表(在该文件中的用户不能使用cron服务)
/etc/crontab 可定义系统计划服务
/etc/cron.monthly/ 存放系统每个月需要执行的脚本
/etc/cron.weekly/ 存放系统每周需要执行的脚本
/etc/cron.hourly/ 存放系统每小时需要执行的脚本
/etc/cron.daily/ 存放系统每天需要执行的脚本
/var/spool/cron 存放各个用户自己设定的定时任务,普通用户无法访问
/var/log/cron 计划任务信息的日志文件
  • 创建、查看、修改、删除计划任务
1、用户创建、查看、修改、删除计划任务
crontab -e(用户创建、修改计划任务)
crontab -l(用户查看计划任务)
crontab -r(用户删除计划任务)
/var/spool/cron/(用户创建的计划任务的路径)
2、管理员用户给其他用户创建、修改、删除计划任务
crontab -e -u username(管理员用户给指定用户创建、修改计划任务)
crontab -l -u username(管理员用户查看指定用户的计划任务)
crontab -r -u username(管理员用户删除指定用户的计划任务)
  • 编写简单的计划任务
cat /etc/crontab(查看计划任务规则)
* * * * * 分别表示 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(1-7) 
特殊字符:,(分隔,间隔)-(表示一个段)/n(表示n的单位执行一次)
例如:
1、礼拜一和礼拜三每两小时执行一次任务:00 */2 * * 1,3
2、每个月1-15号和25号的早上8:00-18:00每隔两个小时执行一个任务:00 08-18/2 1-15,25 * * 

第九章、Linux实战(LAMP架构环境搭建+项目上线)

一、LAMP架构介绍

(一)什么是LAMP架构
  • L:Linux操作系统
  • A:Apache web服务器
  • M:MySQL数据库管理系统
  • P:PHP语言环境
(二)Apache、PHP、MySQL各自的作用
  • APache web服务器:处理用户的访问请求,解析网站静态页面,并将网站的静态资源反送给客户端。
  • PHP:调用libphpx(x是版本号).so模块对网站的静态资源进行解析,如果需要后台数据,php程序会连接数据库,最终PHP将解析好的资源发送给Apache(httpd)服务器,Apache再将数据返回给用户。
  • MySQL:关系型数据库管理系统,用于永久的数据存储。
(三)搭建LAMP环境
  • 准备Linux环境
  • 安装web服务器httpd
  • 安装PHP语言环境
  • 安装mysql数据库管理系统

二、部署LAMP环境

(一)关闭防火墙和SELinux
  • 关闭防火墙
systemctl stop firewalld.service
systemctl disable --now firewall.service
或者使用web控制台关闭防火墙
  • 关闭SELinux安全策略
setenforce 0(使用命令)
vim /etc/selinux/config(修改配置文件)
web控制台
(二)配置本地yum仓库
  • 显示文件系统信息:df -h
  • 挂在镜像到/mnt目录
mount -o ro /dev/sr0 /mnt 
echo "mount -o ro /dev/sr0 /mnt " > /etc/rc.local
chmod +x /etc/rc.d/rc.local 
  • 修改yum配置文件指定本地储存库
vim /etc/yum.d.repos/local.repo
[BaseOS]
name=baseos yum
baseurl=file:///mnt/BaseOS/
enabled=1
gpgcheck=0
  • 验证yum源是否配置完成
yum clean all
yum makecache
yum repolist
(三)部署LAMP环境
1、安装httpd软件包
yum -y install httpd
2、安装PHP语言环境
yum -y install php-xml-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-json-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-mysqlnd-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-common-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-fpm-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-bcmath-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-cli-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-7.2.11-1.module+el8+2561+1aca3413.x86_64 \
php-gd-7.2.11-1.module+el8+2561+1aca3413.x86_64 \
php-pdo-7.2.11-1.module+el8+2561+1aca3413.x86_64 \ 
php-devel-7.2.11-1.module+el8+2561+1aca3413.x86_64
3、安装MySQL数据库管理系统
yum -y install mariadb-server mariadb
(四)启动相关服务
  • 启动前端web服务
systemctl start httpd.service(开启httpd服务)
systemctl enable --now httpd.service(设置httpd服务开机自启)
web服务配置文件:/etc/httpd/conf/httpd.conf
网站存放位置:/var/www/html/
在浏览器中输入:http://ip地址:80,查看服务是否开启
  • 启动后台数据库服务
systemctl start mariadb.service(开启MySQL服务)
systemctl enable --now mariadb.service(设置服务开机自启)
mysql(验证服务是否开启)
mysqladmin -u root password 'xxxxxx'(给root用户设置密码)
mysql -u root -p(用root用户登录到MySQL)
(五)验证部署环境
  • 验证MySQL服务是否开启
netstat -nltp | grep :3306(查看mysql默认端口是否被监听)
systemctl status mariadb.service
  • 验证web服务是否开启且PHP页面是否可解析
在/var/www/html/目录下新建文件index.php:touch /var/www/html/index.php
编辑index.php文件:vim /var/www/html/index.php
编辑内容:
<?php
    phpinfo();
?>
打开浏览器对网站进行访问:firefox http://IP地址[:80]

三、上线商城项目

(一)上传源码到服务器
  • 使用远程连接工具连接到虚拟机
  • 在/root/目录西创建一个lamp目录用来存放网站源码压缩包
  • 将网站源码包上传到lamp目录下
(二)将源码解压到指定文件
zip -r /root/lamp/phpshe.zip -d /var/www/html/
(三)查看源码文档按需求进行配置
  • 查看源码文档:ls /var/www/html/
  • 查看apache是否有权对网站文件进行操作,如果没有权限就给apache添加权限
  • 重启网站服务
(四)安装网站
  • 每个网站的安装方式不同,需要根据网站的说明文档进行对应的操作
  • 当前网站项目安装方式为:ip地址/install
(五)验证网站是否上线成功
  • 打开浏览器输入:ip/index.php查看网站前台是否安装成功
  • 打开浏览器输入:ip/admin.php查看网站后台是否安装成功
(六)注意点
  • 上线一个网站前,应该先了解网站的架构,再进行对应的环境配置
  • 网站上线前一定要事先进过验证配置环境的可用性和完整性
  • 上线网站的时候一定要根据网站的说明文档进行操作

第十章、阿里云服务器、宝塔面板、网站建设

一、阿里云服务器

  • 说明:阿里云服务器需要钱
  • 注册登录阿里云
  • 购买阿里云ECS云服务器
  • 远程连接服务器
  • 搭建LAMP环境
1、关闭防火墙(或开启防火墙端口)和SElinux安全策略:
关闭防火墙:systemctl stop firewalld.service 
设置防火墙开机自动关闭:systemctl disable --now firewalld.service
查看SELinux策略:getenforce
设置SELinux策略:setenforce 0 or vim /etc/selinux/config
开放对应服务的防火墙:firewall-cmd --add-server=example --permanent(永久开放)
开放防火墙端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent(永久开放)
重载防火墙:firewall-cmd --reload
重新启动服务:systemctl restart example.service

配置本地yum源或者网络yum源:

安装软件:
①检查软件是否已经安装,如果安装则要先删除已安装的软件包:
查看软件是否安装:rpm -q xxxx
安装已删除的软件:rpm -qa | grep xxxx | xargs yum -y remove	
②安装软件包:
yum -y install httpd
yum -y install mariadb-server mariadb
yum -y install PHP语言环境
③查找配置文件位置:rpm -qc software
④查看配置文件文档:man 5 /etc/example.conf
⑤按需求修改配置文件:vim /etc/example.conf
⑥重启服务:
1、前台服务
systemctl restart httpd.service
systemctl enable --now httpd.service
2、后台服务
systemctl start mariadb.service
systemctl enable --now mariadb.service
mysqladmin -u root password 'passwd'
mysql -u root -p
⑦验证测试:
验证前台服务是否开启:浏览器中输入ip地址:80
验证网站动态资源是否可解析:
1、根据不同的web服务器查看其网站根目录
/var/www/html/
2、在网站根目录中创建一个index.php文件
touch /var/www/html/index.php
3、编辑index.php文件
vim /var/www/html/index.php
<?php
    phpinfo();
?>
4、浏览器中验证
浏览器中输入:ip:port/index.php
  • 项目上线,测试验证
    • 项目上线
      • 远程连接服务器
      • 将项目源码上传到服务器
      • 将源码解压到指定位置
      • 根据说明文档进行相关设置
      • 重启服务器
      • 根据说明文档安装网站
    • 测试验证
      • 查看网站前台是否安装成功
      • 查看网站后台是否安装成功

二、宝塔面板

  • 安装宝塔:按照系统的发行版和版本悬着合适的命令下载宝塔面板
  • 在阿里云安装组中放行宝塔端口
  • 一键部署LAMP/LNMP架构环境
  • 部署项目/网站
  • 放行80端口
  • 访问网站

第十一章、环境变量、Linux开发环境搭建

一、环境变量

(一)环境变量概述
  • 什么是环境变量
    • 变量:变量是计算机系统中用来存放可变值的数据类型,我们可以通过变量名来提取变量值。
    • 环境变量:环境变量是指在操作系统中指定操作系统运行时的环境的变量。
  • 环境变量的作用:定义命令执行的路径,可以不用加路径就执行该命令。
  • 常见的环境变量
环境变量名称 作用
HOME 用户的主目录(也称家目录)
SHELL 用户使用的 Shell 解释器名称
PATH 定义命令行解释器搜索用户执行命令的路径
EDITOR 用户默认的文本解释器
RANDOM 生成一个随机数字
LANG 系统语言、语系名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
PS1 Bash解释器的提示符
MAIL 邮件保存路径
(二)用户环境变量
  • 什么是用户环境变量:只针对当前用户的环境变量
  • 添加用户环境变量
用户环境变量存放位置:~/.bash_profile(RHEL、CentOS)~/.profile(Debian、Ubuntu)
编辑用户环境变量文件:vim ~/.bash_profile
添加环境变量:
PATH=/usr/local/node/node版本/bin:$PATH
重载用户环境变量:source ~/.bash_profile
验证环境变量:
1、使用版本查看命令:node -v && npm -v && npx -v
2、env查看所有环境变量
3、echo $PATH 查看PATH环境变量
注意:在Linux系统中环境变量名要以大写形式命名
(三)系统环境变量
  • 系统环境变量:针对当前系统中所有用户都有效的环境变量
  • 添加系统环境变量
系统环境变量文件位置:/etc/profile
编辑系统环境变量文件:vim /etc/profile
添加环境变量:
    方式一、直接在/etc/profile文件中添加环境变量
    JAVA_HOME=/usr/local/java/jdk-8u11-linux.64
    CLASSPATH=$JAVA_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin
    export JAVA_HOME CLASSPATH PATH
    方式二、在/etc/profile.d/目录下创建一个可执行脚本里添加变量
    vim /etc/profile.d/myprofile.sh
    #!/bin/sh
    JAVA_HOME=/usr/local/java/jdk-8u11-linux.64
    CLASSPATH=$JAVA_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin
    export JAVA_HOME CLASSPATH PATH
重载系统环境变量文件:source /etc/profile
验证环境变量:
1、使用版本命令查看:java -version
2、查看所有环境变量:env
3、查看指定环境变量的位置:echo $JAVA_HOME

二、Linux基础开发环境搭建

(一)Git项目管理工具环境安装
方式一、通过本地yum仓库安装
yum -y install git

方式二、通过源码包安装
1、查看并卸载已安装的Git软件包
rpm -qa | grep git 
yum -y remove 安装的git

2、上传源码包到指定目录下
使用远程工具将文件上传到/root/temp/目录下

3、解压源码包
tar -zxvf git-xxx-linux.x64.tar.gz -C ./

4、安装相关依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlibdevel gcc-c++ perl-ExtUtils-MakeMaker

5、编译安装git包
进入git解压目录:cd ./git-xxx-linux.x64
将git安装到/usr/local/git/目录下:
make ./configure
./configure --prefix=/usr/local/git
正式编译安装:
make profix=/usr/local/git
make install

6、配置git环境变量
vim /etc/profile.d/myprofile.sh

#!/bin/sh
export GIT_HOME=/usr/local/git/git-xxx-linux.64
export PATH=$PATH:$GIT_HOME/bin
source /etc/profile

7、验证git环境是否安装完成
git --version
(二)JDK环境安装
1、上传文件到指定位置
2、在/usr/local/目录下创建一个java目录
mkdir /usr/local/java

3、将jdk源码包解压到/usr/local/java目录下
tar -zxvf jdk-8u11-linux.64.tar.gz -C /usr/local/java/

4、配置jdk环境变量
vim /etc/profile.d/myprofile.sh

JAVA_HOME=/usr/local/usr/jdk-8u11-linux.64
CLASSPATH=$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH

5、重载环境变量
source /etc/profile

6、验证jdk环境
java --version
(三)Node环境安装
1、上传文件到指定目录下
2、在/usr/local/目录下创建一个node目录
mkdir /usr/local/node

3、将node源码包解压到node目录下
tar -Jxvf node-v12.18.1-linux.64.tar.xz -C /usr/local/node

4、配置node环境变量
vim ~/.bash_profile

PATH=/usr/local/node/node-v12.18.1-linux.64/bin:$PATH

5、重载环境变量
source ~/.bash_profile

6、验证node环境
node -v && npm -v && npx -v
(四)Python环境安装
1、将Python源码包上传到指定位置
2、解压Python源码包
tar -Jxvf Python-3.8.3.tar.xz -C ./

3、安装相关依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlitedevel readline-devel tk-devel gcc make

4、编译安装Python
cd /Python-3.8.3
./configure prefix=/usr/local/Python3
make && make install

5、创建软连接
ln -s /usr/local/Python3/bin/python3 /usr/bin/python3
ln -s /usr/local/Python3/bin/pip3 /usr/local/pip3

6、验证Python环境
python3
(五)Maven项目构建和管理工具部署
1、上传文件到指定位置
2、在/opt/目录下创建maven目录
mkdir /opt/maven

3、将maven源码包解压到/opt/maven/目录下
tar -zxvf apache-maven-3.6.3-bin-linux.64.tar.gz -C /opt/maven

4、配置maven加速镜像源
vim /opt/maven/apache-maven-3.6.3/conf/setting.xml
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

5、配置maven环境变量
vim /etc/profile.d/myprofile.sh

export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

6、验证maven环境变量
mvn -v
(六)MySQL数据库安装部署
1、将mysql安装包上传到指定的文件夹

2、查询并删除已安装的mariadb数据库
rpm -qa | grep mariadb
rpm -qa | grep mariadb | xargs yum remove -y

3、将mysql安装包解压到在/usr/local/目录下并重命名为mysql
tar -Jxvf /package/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz -C /usr/local
mv mysql-8.0.21-linux-glibc2.12-x86_64/ mysql

4、创建mysql数据存储目录&创建mysql用户和用户组并修改mysql目录的归属用户
mkdir /usr/local/mysql/data
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql/

5、编辑mysql配置文件
touch /etc/my.cnf
vim /etc/my.cnf
配置内容如下:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
#设置3306端⼝
port = 3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装⽬录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放⽬录
datadir=/usr/local/mysql/data
# 允许最⼤连接数
max_connections=200
# 服务端使⽤的字符集默认为8⽐特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使⽤的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M

6、创建MySQL默认的数据文档存储目录/var/lib/mysql,并修改权限
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql

7、正式安装mysql
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

8、复制启动脚本到资源目录并修改basedir和datadir的实际目录
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
修改内容如下:
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

9、设置mysql系统服务并开启自启
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
systemctl start mysqld
systemctl enable --now mysqld
systemctl status mysqld

10、将mysql的bin目录加入PATH环境变量
vim /etc/profile.d/myprofile.sh

export PATH=$PATH:/usr/local/mysql/bin

source /etc/profile

11、登录mysql修改root密码并设置远程登录
mysql -u root -p
登录上mysql后输入:
alter user user() identified by "需设置的密码";
flush privileges;
密码设置好后设置远程主机登录:
use mysql
update user set user.Host='%' where user.User='root';
flush privileges;
(七)Redis缓存安装部署
1、将redis源码包上传到服务器指定位置
2、在/usr/local/目录下创建redis目录
mkdir /usr/local/redis

3、将redis源码包解压到redis目录
cd /usr/local/redis
tar -zxvf redis-6.0.5.tar.gz -C./

4、编译安装redis
cd redis-6.0.5
make && make install

5、将redis安装为系统服务并后台启动
cd utils
./install_server.sh
如果出现以下错误:
This systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!

请编辑install_server.sh可执行文件
注释如下代码:
#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi
6、查看redis服务启动状态
systemctl status redis_6379.service

7、启动redis客户端并测试
启动自带的redis-cli客户端并测试
redis-cli
测试通过但此时还不能远程连接,还需要做部分设置

8、设置允许远程连接
编辑redis配置文件
vim /etc/redis/6379.conf
将127.0.0.1修改为0.0.0.0
重启服务:systemctl restart redis_6379.service

9、设置访问密码
编辑redis配置文件
vim /etc/redis/6379.conf
查找到#requirepass foobread
取消注释并将foobread修改为自己设置的密码
重启服务
systemctl restart redis_6379.service

10、验证测试
启动redis-cli客户端
输入:get foo
(error) NOAUTH Authentication required.(提示我们需要输入密码)
auth password(你自己设置的密码)
(八)消息队列Rabbit MQ安装
一、安装erlang环境
因为RabbitMQ需要erlang环境支持所以我们要先安装erlang环境
1、进入rabbit官网的erlang页面:https://packagecloud.io/rabbitmq/erlang

2、选择对应的版本:erlang-23.0.4-1.el8.x86_64.rpm进入该链接

3、安装erlang环境的yum源
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

4、安装erlang环境
yum -y install erlang

5、验证是否安装完成
erl

二、安装RabbitMQ
1、进入rabbitmq官网的rabbit页面:https://packagecloud.io/rabbitmq/rabbitmq-server

2、选择对应的版本:rabbitmq-server-3.8.8-1.el8.noarch.rpm,进入连接

3、安装rabbitmq的yum源
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

4、安装rabbitmq
yum -y install rabbitmq-server.noarch

5、启动rabbitmq-server,并设置开机自启
systemctl start rabbitmq-server.service
systemctl enable --now rabbitmq-server.service

6、开启web可视化管理插件,在浏览器中验证查看
开启web可视化管理插件:rabbitmq-plugins enable rabbitmq_management
浏览器验证:服务器IP:15672
(九)Tomcat 应用服务器安装
1、上传文件到指定位置
2、在/usr/local/目录下创建tomcat目录
mkdir /usr/local/tomcat

3、将tomcat源码包解压到/usr/local/tomcat/目录下
cd /usr/local/tomcat
tar -zxvf apache-tomcat-9.0.37.tar-gz -C ./

4、启动tomcat
/usr/local/tomcat/apache-tomcat-9.0.37/bin/startup.sh(开启tomcat)
/usr/local/tomcat/apache-tomcat-9.0.37/bin/shutdown.sh(关闭tomcat)

5、设置快捷操作和开机自启
(十)Nginx web服务器安装
1、上传Nginx源码包到指定位置
2、在/usr/local/目录下创建nginx目录
mkdir /usr/local/nginx

3、将Nginx源码包解压到nginx目录下
cd /usr/local/nginx
tar -zxvf nginx-1.19.0.tar.gz -C ./

4、安装额外的依赖
yum -y install pcre-devel
yum -y install openssl openssl-devel

5、编译安装nginx
cd nginx-1.19.0
./configure
make && make install

6、启动nginx
/usr/local/nginx/sbin/nginx(启动nginx)
/usr/local/nginx/sbin/nginx -s stop(关闭nginx)
/usr/local/nginx/sbin/nginx -s reload(重启nginx)
firewall-cmd --zone=public --add-port=80/tcp --permanent(放行服务器80端口)
firewall-cmd --reload(重载防火墙)

7、在浏览器中验证是否启动
firefox http://ip
注意:nginx的配置文件位置:/usr/local/nginx/conf/nginx.conf
(十一)Docker环境安装
1、安装Docker
yum -y install docker
2、启动Docker服务,并设置开机自启
systemctl start docker.service
systemctl enable --now docker.service
3、查看docker版本
docker version
4、配置docker镜像下载加速
vim /etc/docker/daemon.json

{
    "registry-mirrors":["http://hub-mirror.c.163.com"]
}
国内加速站点
https://registry.docker-cn.com
http://hub-mirror.c.163.com
https://3laho3y3.mirror.aliyuncs.com
http://f1361db2.m.daocloud.io
https://mirror.ccs.tencentyun.com

5、重载docker/deamon.json配置文件,并重启docker服务
(十二)Kubernetes集群安装部署
(十三)Elasticsearch集群安装部署
(十四)ZooKeeper安装部署
(十五)消息队列kafka安装部署

第十二章、前后端分离项目ruoyi部署

一、环境准备

二、修改配置文件

三、部署前端项目

四、部署后端项目

你可能感兴趣的:(Linux,linux)