Linux系统基础

Linux系统基础

1.10 Linux简介及常见版本

GUN外围程序/Linux内核

创始人: 林纳斯·托瓦兹

常见版本: redhat 红帽、ubuntu乌班图、debian、centos

linux 发展史

Linux诞⽣于1991-林纳斯·托⽡兹(Linus Torvalds)

林纳斯·托⽡兹

1、著名的电脑程序员、⿊客

2、Linux内核的发明⼈及该计划的合作者

3、现受聘于开放源代码开发实验室(OSDL)

1994年,正式发布了Linux 1.0版本,使⽤企鹅作为Linux的logo

企鹅的由来:

1、林纳斯·托⽡兹想起曾经在澳⼤利亚的⼀个动物园⾥被企鹅咬过,就以企鹅来当吉祥物

2、企鹅代表南极,⽽南极⼜是全世界共有个⼀块陆地,不属于任何国家。也就是说Linux不属于任何商业公司,是全⼈类每个⼈都可以分享的⼀项技术成果。

Linux的前⾝-Unix

1965年前后,贝尔实验室、⿇省理⼯⼤学和通⽤电⽓发起了Multics的计划。

1969年,Ken Thompson使⽤汇编语⾔完成了Unix(当时称Unics)。

1973年,Ken Thompson和Dennis Ritchie合作,使⽤⾼级的C语⾔来编写,然后发型处unix正式版本。

1977年,Unix和加州伯克莱⼤学合作,增加和很多软件和编译⼯具,最终命名为BSD(Berkeley,Software Distribution)。

1979年,unix-system V 第七版,可以运⾏在x86架构的个⼈计算机上,AT&T由于商业考虑,该系统不可对学⽣提供原始代码。

1984年,⼤学教授(Andrew tannenbaum-谭宁邦)为了⽅便教学,⾃⼰写了Minix的系统,并且出版了相关书籍。1984年,GNU计划于FSF基⾦会成⽴-Bash shell

1988年,图形接⼝Xfree86计划。

Xfree86=X Window system + free + x86

1991年,林纳斯·托⽡兹(Linus Torvalds)开发了Linux内核

1994年,林纳斯·托⽡兹(Linus Torvalds)终于发布了Linux 1.0版本,并且还加⼊了 X window System的功能

1996年,林纳斯·托⽡兹(Linus Torvalds)发布了Linux 2.0版本,并且使⽤企鹅为Linux的吉祥物

Linux的发⾏版本

Red Hat(红帽)公司(NYSE:RHT)是⼀家开源解决⽅案供应商,也是标准普尔500指数成员。总部位于美国北卡罗来纳州的罗利市,截⽌2015年3⽉3⽇,共有80多个分公司。红帽公司为诸多重要IT技术如操作系统、存储、中间件、虚拟化和云计算提供关键任务的软件与服务。红帽的开放源码模式提供跨物理、虚拟和云端环境的企业运算解决⽅案,以帮助企业降低成本并提升效能、稳定性与安全性。红帽公司同时也为全球客户或通过领先合作伙伴为客户提供技术⽀持、培训和咨询服务。

CentOS(Community Enterprise Operating System,中⽂意思是:社区企业操作系统)是Linux发⾏版之⼀,它是来⾃于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译⽽成。由于出⾃同样的源代码,因此有些要求⾼度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使⽤。两者的不同,在于CentOS并不包含封闭源代码软件。

Fedora 是⼀个 Linux 发⾏版,是⼀款由全球社区爱好者构建的⾯向⽇常应⽤的快速、稳定、强⼤的操作系统。它允许任何⼈⾃由地使⽤、修改和重发布,⽆论现在还是将来。它由⼀个强⼤的社群开发,这个社群的成员以⾃⼰的不懈努⼒,提供并维护⾃由、开放源码的软件和开放的标准。Fedora 项⽬由 Fedora 基⾦会管理和控制,得到了 Red Hat 的⽀持。

Debian是指⼀个致⼒于创建⾃由操作系统的合作组织及其作品,由于Debian项⽬众多内核分⽀中以Linux宏内核为主,⽽且 Debian开发者所创建的操作系统中绝⼤部分基础⼯具来⾃于GNU⼯程,因此 “Debian” 常指Debian GNU/Linux。Ubuntu是⼀个以桌⾯应⽤为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,⽀持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。

Linux的实际应⽤

⽹络服务器---WWW,FTP,Mail等

关键任务的应⽤---⾦融⼤数据库,⼤型企业⽹管环境

学术机构

桌⾯计算机

⼿机系统

Linux基本命令补充

查看文件/目录的命令

*ls /cat/more/less/pwd(查看)

1.ls 列出指定路径或当前目录下的子目录和文件

-h 做单位转换

-a 显示所有文件,包括隐藏文件

-l 以长格式显示

-R 递归显示

-d 显示目录属性

2.cat 一般用来查看小文件

*less 用来查看长文件 less 可以上下翻页***

*more 用来查看长文件 ,只能向下翻*

*head 默认查看前十行 可以指定查看几行*

*tail 默认查看看文件末尾世行 可以指定查看几行*

例: head -3 /etc/passwd 查看文章前三行

tail -3 /etc/passwd 查看文章后3行

head -10 /etc/passwd | tail -5 取出前10行并截取后5行

  1. .more

    *直接敲q退出

    *回车一行一行的翻页

    *空格一页一页的翻页

    less

    前后都可以翻页 q退出

    .head 默认显示头10行

    -n 5 等价 -5 显示前5行

    tail 默认显示后10行

    -n 5 等价 -5 显示后5行

    -f 显示文件最新追加的内容

*补充:命令别名 alias

可以为一个执行的具体命令另外起一个名字;

例:alias myls =“vim /etc/sysconfig/network-scripts/ifcfg-ens33”

取消别名 unalias

unalias myls

*vim/vi(编辑+查看)

vim: 打开里面内容是彩色的

vi:打开里面是黑白的

命令模式、编辑模式、末行模式

*模式: 命令模式* (按 i,a,o 都能进入编辑模式 | 按 : 进入末行模式)

切换 i 在光标签插入 I 在 行首插入

a 在光标后插入 A 在行尾插入

o 在下一行插入 O 在上一行插入

* 跳转行: *gg 快速定位到首行 G 定位到末行*

*4gg 定位到 第4行*

*编辑:* *u 撤销操作*

2yy 复制包含光标所在行往下的两行

p粘贴

dd 删除光标所在行 3dd 删除三行 (剪切)

查询: /string 找到或者定位 string 内容

/^r 查找以r 开头的行

/t$ 查找以 t 结尾的行

*编辑模式 (按 esc 键退到命令模式)*

*末行模式* (按 esc 键退到命令模式)

*保存 :w*

*保存退出 :wq 或 :x*

*退出 :q*

*强制退出 :q!*

*替换*: :1,3 s/bin/bbb 将1-3行中第一次出现的bin 换成 bbb

:1,3 s/bin/bbb/g 将1-3行中出现的所有 bin 换成 bbb

:3 s/bin/bbb 只替换第三行中的内容

:% s/do/ds/g 将文本中所有的do 换成ds

:% s/do/xue/gi 将文本中所有do 换成 xue 并忽略do 的大小写

显示行号 :set nu

取消行号 :set nonu

调用外部命令 :! 外部命令

du/df 、 top、 ps、 free\pid 命令

  1. top 性能分析工具,能够实时显示系统中各个进程的资源占用情况;

  2. ps 最基本的进程查看命令;(瞬间进程)

    -u 显示当前用户的进程状态;

    -x 显示当前用户在所有终端下的信息;

    -a:显示当前终端下的所有进程信息,包括其他用户的进程信息。与x选项结合使用可以显示系统中所有进程的信息。

    用于查看系统进程 PID

    ps -aux

    ps -ef

    3.du显示每个文件和目录的磁盘使用空间,

    4.df 显示磁盘分区上可以使用的磁盘空间,

    5.free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存

    *Pid 进程标识符(process identifider),用于标识正在运行的每个进程。每个进程在系统中都有一个唯一的pid,可以通过pid来识别和管理进程。通常在系统启动时自动分配给进程,并且在一个给定的时间内是唯一的。*

切换目录cd

例1:切换到根目录 cd /

例2:切换到根目录下的家目录 cd /home

linux中的文件类型

d 目录文件

l 链接文件

b 块设备

c 字符设备

p 管道文件

–普通文件

2024.1.15实例

1.内容

2.加粗

3.斜体

4.h2o

5.x^2 x ^ 2 32 62

6.网络配置

BOOTPROTO=none #static 静态 dhcp自动获取

ONBOOT=yes #是否开启网卡,是否开机启动网络

IPADDR=192.168.86.10 #IP地址设置 PREFIX=24 #子网掩码长度 GATEWAY=192.168.86.254 #网关 DNS1=8.8.8.8 # DNS配置

xshell/虚拟机配置网卡 实例:(远程连接/ping 的时候需要修改网络适配适配器nat模式)

方法一:[root@localhost ~]# nmtui

方法二:vim /etc/sysconfig/network-scripts/ifcfg-ens33

2024.1.16实例

软链接 硬链接 区别

软链接 ln -s硬链接 ln
1.可以跟源文件不在一个分区;删除源文件,链接文件失效;1.必须跟源文件在一个分区;删除源文件,链接文件有效;
2.可以给文件或目录添加软链接2.只能给文件添加硬链接
3.找的是文件名字3.找的是文件在硬盘里的位置

网络配置2024.1.15

<span style="background-color:#f8f7e9"><span style="color:black">  ONBOOT=yes                        #是否开启网卡,是否开启-网络
  IPADDR=192.168.86.10                 #IP地址设置
  PREFIX=24                         #子网掩码长度
  GATEWAY=192.168.86.254                #网关
  DNS1=8.8.8.8                       # DNS配置 
  
  [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
 ​
 TYPE=Ethernet       # TYPE:网络类型,这里是以太网
 PROXY_METHOD=none   # PROXY_METHOD:代理方式,这里是没有代理
 BROWSER_ONLY=no     # BROWSER_ONLY:是否仅限浏览器使用代理
 BOOTPROTO=none      #BOOTPROTO:启动时获取 IP 地址的方式,这里是不启用
 DEFROUTE=yes        # DEFROUTE:默认路由是否可用
 IPV4_FAILURE_FATAL=no 
                     # IPV4_FAILURE_FATAL:IPv4 是否必须要配置成功
 IPV6INIT=yes        # IPV6INIT:是否启用 IPv6
 IPV6_AUTOCONF=yes   # IPV6_AUTOCONF:是否启用 IPv6 自动获取地址
 IPV6_DEFROUTE=yes   # IPV6_DEFROUTE:IPv6 是否启用默认路由
 IPV6_FAILURE_FATAL=no 
                     # IPV6_FAILURE_FATAL:IPv6 是否必须要配置成功
 IPV6_ADDR_GEN_MODE=stable-privacy
                     # IPV6_ADDR_GEN_MODE:IPv6 地址生成方式,这里是稳定随机地址
 NAME=ens33          # NAME:网络接口名称
 UUID=7ebb3482-92bd-490c-9c87-018203161ea3 
                     # UUID:网络接口 UUID
 DEVICE=ens33        # DEVICE:网络接口设备名称
 ONBOOT=yes          # ONBOOT:是否在系统启动时自动启用该网络接口
 IPADDR=192.168.8.10 # IPADDR:IPv4 地址
 PREFIX=24           # PREFIX:IPv4 掩码长度
 GATEWAY=192.168.8.2 # GATEWAY:IPv4 网关地址
 DNS1=8.8.8.8        # DNS1:首选 DNS 服务器地址
 IPV6_PRIVACY=no     # IPV6_PRIVACY:是否开启 IPv6 隐私模式。</span></span>

typora常用快捷键1.15

<span style="background-color:#f8f7e9"><span style="color:black"> ==内容==   荧光标注
 ** 加粗**   加粗字体
 ***粗斜体***    
 +++或者***或者---     分割线
 ~~  需要加删除线的文本 ~~  
 <u>下划线</u>
 -或者+或者*     无序列表
 | | |   表格
 字体颜色及大小    <font color="red">hongse</font>
 ​</span></span>

xiahuaxian

zhjjkkk

hjw

hahaha

1.16 linux基础权限

1.16修改属主和属组

只有root权限才能修改其他用户文件的属主和属组

#chown 属主:属组 -R 目录 #chown 属主.属组 -R 目录

<span style="background-color:#f8f7e9"><span style="color:black"> 只有root权限才能修改其他用户文件的属主和属组
 chown 用法: #chown   属主:属组   文件         例:chown   lily:lily  tem.txt(改一个文件)
             #chown   属主:属组  -R  目录
             #chown   属主.属组   -R  目录     例:chown tom.tom  -R   dir01
 chgrp用法:  #chgrp   属组  -R  目录          *递归修改目录中所有的文件和目录属主和属组
             #chgrp   属组   目录</span></span>
修改权限指令
<span style="background-color:#f8f7e9"><span style="color:black"> chmod     755   hjw
 chmod  u+rwx   hjw</span></span>

操作可以执行的用户
chmodroot用户和文件的所有者
chgrproot用户和文件的所有者(必须是组成员)
chown只有root用户

例1:使用chown命令将”testfile”的所有者更改为“user1”

chown user1 testfile

例2:使用chgrp命令将”testfile”的所属组更改为“testgroup”.

chgrp testgroup testfile

例3:使用chmod命令将”testfile”

基本权限
字母表示法

  • <span style="background-color:#f8f7e9"> 【对象】:
     U:User    属主 用户
     g:group   属组  小组
     o:other   其他用户(可以用acl控制访问)
     a:all    
     对于文件和目录      查(读read):cat 查看文件,ls查找目录;
                    写(write):touch创建文件,mkdir创建目录,vim编辑文件
     ​
     【什么权限】:             
     基础权限:* 读r4  写w2 执行x1 权限:         
     -rwxr-xr-x. 1 root root       2859 5月  12 2022 zmore
     -rwxr-xr-x. 1 root root       5343 5月  12 2022 znew
     从左到右:
     第1位代表文件类型: -普通文件;d目录;l链接文件;b块文件;s网络文件;P 管道文件;
     第2-10:,3位一组,属主的权限,属组  其他用户的权限,-表示没有权限,r读,w写,x执行;
     第11位:.  代表SELinux安全 // +代表拥有ACL权限
     第12位数字:硬链接数;
     13,14位:属主  属组
     15位:文件大小;
     16位:修改时间
     17位:文件名
     ​
     要想文件没有权限,它的上层目录必须也没有权限;
     r--4   w--2 x--1
     ​
     【特殊权限】:
     S s  允许其他用户执行该程序
     T t</span>
权限文件目录
r4读查看文件中内容,可以用cat/more/less等命令查看目录中文件ls
w2写可写可修改其他用户拥有该目录w权限时,是可以创建 、移动、删除、复制文件,通过修改文件属主 属组实现修改内容。
x1执行可执行,对脚本和二进制程序是否可以进入该目录;若无x权限,查看权限受限,只能看到文件名。
特殊权限文件目录
s/S*允许其他用户执行该程序;s表示生效;必须有x执行权限才能生效。s 这个特殊权限只针对命令/程序有用,如:/etc/Passwd 例1:chmod u+s 程序 #让其他用户以属主(root)的身份运行该程序。 * chmod g+s 程序 #让其他用户以属组(group)的身份运行该程序。对目录无效
t/T对文件无效粘贴权限,拥有该权限的目录,只允许属主删除自己的文件,其他用户不能删除 /tmp 例: chmod o+t 目录 (只允许root和属主对该目录下的文件进行修改和删除)

数字表示法
数值权限特殊权限
0- x0
1- - x- - -|- - -|- -t
2- w -- - -|- - s|- - -
3- w x- - -|- - s|- - t
4r - -- - s|- - -|- - -
5r - x- - s|- - -|- -t
6r w -- - s|- -s|- - -
7r w x- - s|- - s|- - t
1777-rwx|rwx|rwt.
数值权限特殊权限
2777-rwx|rws|rwx.
3777-rwx|rws|rwt.
4777-rws|rwx|rwx.
5777-rws|rwx|rwt.
6777-rws|rws|rwx.
7777-rws|rws|rwt.

命令的含义

命令-->shell (bash zsh csh)-> 执行对应的程序

*linux 一切皆文件

查看文件类型

type命令判断一个命令是否是shell自带的命令

file命令查看文件的类型

#空文件 :empty; ​ #纯英文的文件:ASCII text; ​ #非英文文件:UTF-8 Unicode 字符集 ​ #目录:directory ​ #块文件 block

例:file /dev/sda 查看硬盘类型

*可执行文件:1.二进制执行文件(源代码编译生成),可以被cpu直接执行,执行速度块;难写 2.脚本【shell,python,js,lua...】 (由语言对应的解释器调用执行) 执行速度慢;相对二进制简单

1.17 su和sudo切换用户

【su 切换用户】 *su 用户 #在当前目录下直接切换用户 例: su hjw ---- [tom@localhost tmp]$ *su - 用户 #切换用户并到用户自己的家目录,加载自己环境变量

【sudo 提权】(让普通用户临时拥有root的部分或所有权限)

(*使用sudo时,修改的是root的密码

例:sudo passwd;**修改root的密码,

例:sudo passwd lily 修改Lily 的密码)

**/etc/sudoers 配置文件,可以添加命令使得普通用户能临时拥有root部分或全部权限。

visudo相当于 vim /etc/sudoers

例1:虽然tom有root权限,但不能修改密码。 !/usr/bin/passwd

例2: 普通用户切换root用户登录时 不需要输入密码 NOPASSWD:

例3:设置小组的一些权限

<span style="background-color:#f8f7e9"><span style="color:black"> su    切换用户
 su 用户     #在当前目录下直接切换用户   例:  su  hjw ---- [tom@localhost tmp]$ 
 su - 用户   #切换用户并到用户自己的家目录,加载自己环境变量
 ​
 *普通用户切换其他用户需要密码
 *root用户切换其他用户不需要密码
 ​
 *需要将普通用户配置到/etc/sudoers中才能生效。
 sudo  提权(让普通用户临时拥有root的部分或所有权限)
 ​
 这是一个关于linux系统中sudo配置文件 /etc/sudoers中的一行规则。
 ​
 root    ALL=(ALL)     ALL     的解释如下:
 root:表示这条规则适用于root用户;
 ALL=(ALL):表示root用户可以作为 任意用户(ALL)执行任意命令(ALL)。
 所有主机名=(所有用户)
 ALL:表示root用户可以在任意主机执行 任意命令,没有限制。
 ​
 *换句话说:这行规则授予了root用户在Linux系统中完全的管理员权限,可以执行任何命令,无论是在本地还是远程环境中。这是非常高级和危险的权限设置,只应该在必要的情况下给予。
 ​</span></span>

1.17隐藏权限的设置和查看

chattr的用户与我们之前讲的chmod,chown这些命令相似,都是直接对需要修改的文件进行操作就可以了

  • chattr命令:为文件设置隐藏权限

<span style="background-color:#f8f7e9"><span style="color:black"> 命令选项
 + 增加权限
 - 删除权限
 = 赋予什么权限,文件最终权限
 A 文件或目录的atime不可被修改
 S 硬盘I/O同步选项,功能类似sync。
 a 只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
 d 文件不能成为dump程序的备份目标。
 i 设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。</span></span>
  • lsattr命令: 查看文件隐藏权限

通过案例学习命令用法:

<span style="background-color:#f8f7e9"><span style="color:black"> 给file1文件添加AaiSd权限
 [root@zuolaoshi test]# chattr +AaiSd file1
 ​
 查看文件file1隐藏权限
 [root@zuolaoshi test]# lsattr file1 
 --S-iadA---------- file1
 ​
 设置删除file1文件隐藏权限
 - 可以使用-号  
 - 可以使用=为空设置
 [root@zuolaoshi test]# chattr = file1
 [root@zuolaoshi test]# lsattr file1 
 ------------------ file1</span></span>

通过上面的例子可以看到查看的时候使用的是lsattr,chattr还有很多参数,各位可以在man手册中获取到帮助,另外有些参数的使用是有局限性的。

系统信息查看命令补充

查看内存/磁盘利用率

cat /proc/cpuinfo** (查看cpu进程信息)

1. free 查看系统内存占用其概况】 例: free -h 【- h根据大小显示合适单位: K M G T P Z S】

  1. df -h查看磁盘利用率

  2. 3.ps【ps查看进程】例: ps -aux | grep "python" (PID 进程号, kill - 9 强制杀死)

  3. top实时监控系统的一个运行状态】 进去之后敲m ,t

    m 查看内存占用

    t 查看CPU的运行状态

    q 退出

    5.查询命令所对应的程序所在路径(查询命令的位置) which passwd

which init

创建用户/组,删除用户/组

*useradd 创建用户

例:useradd tom 【创建用户tom】

*passwd 设定用户密码

例:passwd tom 【给tom用户设定密码】

*groupadd 创建组

*userdel 删除用户

*groupdel删除组

查看,新建,删除用户/组
usermod -aG 组名 用户名

例1:将tom和lily添加到新建的组中

usermod -aG admin tom 【将用户tom添加到admin组里】

usermod -aG admin lily 【将用户lily添加到admin组里】

-a append 将用户追加到组中

-G 指定组名

【查看组成员 cat /etc/group】

例2:查看group1组的用户

grep group1 /etc/passwd

例3:删除用户user3及家目录

usermod -r user3

例4:创建组/创建用户—–将用户添加进组

groupadd yun4

usermod -aG yun4 zjx

例5:查看某个组的成员列表

grep tom /etc/group

例6:更改用户user1的登录权限

usermod -s /bin/bash user1

例7:将用户从组中删除

gpasswd -d 用户 组名

gpasswd -d user1 testgroup

例8:禁用user1用户的登录权限

usermod -s /sbin/nologin user1

例9:为group1组创建一个新目录“folder”

mkdir folder

例10:添加用户usr4,同时指定其主组为usr1,uid为2014,并验证用户创建是否正确

useradd usr4(创建用户)

useradd -g usr1 -u 2014 (设定主组)

id usr4 (验证用户)

例11: 创建一个linux用户hello – uid为 1500 – 附加组为 hello – 家目录为 /home/hello – 登陆shell为 /bin/bash – 描述为 “this is a test user”

useradd -u 1500 -G hello -d /home/hello -s /bin/bash -c "this is a test user" hello

1.18 ACL权限的设置和查看

getfacl 取得 /setfacl设置文件/目录权限

setfacl 命令:设置文件或目录的ACL权限

命令选项:-m : 设置acl;

-x: 删除指定的acl;

-b : 删除所有的acl;

例1:给所有用户设置允许”读写执行“权限

setfacl -m u::rwx file1

例2:给tom设置rw 读写 权限;

setfacl -m u:tom:rw file1

例3:d:u:tom:rw 默认tom 用户一直有 rw读写权限;

setfacl -m d:u:tom:rw file1

例4:

getfacl:用来查看文件的acl权限

getfacl file1

1.18软件包

rpm/yum安装

rpm简介

rpm(Red Hat Package Manager)是一种常用的软件包管理工具,用于在基于RPM的Linux发行版(如Fedora、Red Hat、CentOS)中安装、升级、查询和卸载软件包。

rpm包安装步骤

安装包前面的步骤,就是将光盘里的软件包下载下来;/或者是从网上直接下载)

1.挂载光盘镜像

image-20240118204812325

方法二:使用mount命令挂载光盘

#创建挂载目录

1) mkdir /media/cdrom

2)mount /dev/cdrom /media/cdrom

#查看磁盘使用情况

df -h

#取消挂载/卸载光盘

umount /dev/cdrom

#mount -r 以只读方式挂载

(加上—r 只是不显示 警告:以只读方式安装)

cp /media/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm ~

~ 代表 家目录,相当于下面这条命令

cp /media/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm /root

rpm -ivh tree-1.6.0-10.e.17.x86_64.rpm

-i 安装

-vh 显示过程

RPM常用选项:

-i:表示安装。

-v, -vv, -vvv:表示详细信息。

-h:以"#"号显示安装进度。

-q:查询指定包名。

-e:卸载指定包名。

-U:升级软件,若未软件尚未安装,则安装软件。

-F:升级软件。

-V:对RPM包进行验证。

--nodeps:忽略依赖关系。

--query:查询指定包名。同-q选项。

--hash:同-h。

--install:表示安装,同-i选项。

--test:仅作测试,不真正执行,可用于测试安装,测试卸载。

--replacepkgs:重新安装。替换原有的安装。

--force:忽略软件包及文件的冲突。

--initdb:新建RPM的数据库。

--rebuilddb:重建RPM的数据库。

--percent:以百分比的形式输出安装的进度。

RPM包的查询:

rpm -q:查询某一个RPM包是否已安装

rpm -qi:查询某一个RPM包的详细信息

rpm -ql:列出某RPM包中所包含的文件。

rpm -qf:查询某文件是哪个RPM包生成的。

rpm -qa:列出当前系统所有已安装的包

安装或卸载时,可能出现如下类似警告信息:warning:/etc/sysconfig/named created as /etc/sysconfig/named.rpmnew

该警告信息表示:rpm的配置文件被另存为了一份文件。

rpm安装范例

例题:rpm安装tree软件——-思路整理

*一、安装前的步骤

1.挂载光盘镜像

(挂载后可查看挂载情况/查看磁盘使用情况 df -h)

(挂载后卸载:umount /dev/cdrom)

mount /dev/cdrom /media/cdrom

2.切换路径

cd /media/cdrom/Packages

3.复制软件包到家目录 , 切换到Packages下

(复制后可查看软件包大小/行数 ls | wc -l)

cp /media/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm ~

~ 代表 家目录,相当于下面这条命令

cp /media/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm /root

*二、rpm安装

rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

*三、删除软件包方式

rpm -e tree (删除命令文件和软件包)

四、rpm常用查询命令

1.安装软件包

rpm -i package.rpm

2.升级软件包

rpm -U package.rpm

3.查询软件包信息

rpm -qi

4.列出已安装的软件包名称

rpm -qa

查询已安装的**RPM软件信息

格式:**rpm -q[子选项] [软件名]**

*用法:结合不同的子选项* *完成不同查询**

*-qa:查看系统中已安装的所有RPM软件包列表**(思考:如何统计当前主机安装的r**pm**包数量?)***

*-qi:查看指定软件的详细信息***

*-ql:查询指定软件包所安装的目录、文件列表***

*-qc:仅显示指定软件包安装的配置文件***

*-qd:仅显示指定软件包安装的文档文件***

*-qf**: 查询文件或目录属于哪个****RPM软件\格式:**rpm -qf 文件或目录名*

查询未安装的**RPM包文件

格式:**rpm -qp[子选项] RPM包文件***

*用法:结合不同的子选项* *完成不同查询*

*-qpi:通过.rpm包文件查看该软件的详细信息*

*-qpl:查看.rpm安装包内所包含的目录、文件列表*

*-qpc:查看.rpm安装包内包含的配置文件列表*

*-qpd:查看.rpm安装包内包含的文档文件列表*

*3)安装或升级**RPM软件**,格式:**rpm [选项] RPM包文件...***

*用法:不同选项适用于不同情况*

*-i:安装一个新的rpm软件包*

*-U:升级某个rpm软件,若原本未装,则进行安装*

*-F:更新某个rpm软件,若原本未装,则放弃安装*

*-v**:显示软件安装过程中的详细信息***

*-h**:在安装或升级软件包的过程中,以“#”好显示安装进度***

*-**e**:卸载指定的**RPM软件**,格式:**rpm -e 软件名***

*--force:强制安装所指定的rpm软件包*

*--nodeps:安装、升级或卸载软件时,忽略依赖关系*

Yum

配置本地光盘yum源(新)

vim /etc/yum.repos.d/CentOS-Media.repo

(进入文件后写下面的内容)

[c7-media]

name=CentOS-$releasever - Media

# 设置软件源的路径

baseurl=file:///media/cdrom/

gpgcheck=0 # 禁用检测

enabled=1 #开启该软件源

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

yum makecache # 创建软件源的缓存

yum install 软件名 # 安装软件

yum remove 软件名 # 卸载软件

*配置本地yum源(简便)

1.关闭防火墙

systemctl stop firewalld

2.关闭沙盒

setenforce 0

3.挂载光盘

mount /dev/sr0 /media

4.切换目录,清空目录

cd /etc/yum.repos.d

5.在当前目录下查看 ls

6.切换到上一目录

cd /etc

7.在/etc下创建一文件夹

mkdir network

8.切换到 /etc/yum.repos.d目录下,移动内容

mv * /etc/network

9.在当前目录(yum.repos.d)下查看 ls

10..在当前目录(yum.repos.d),编辑yum源

vim yum.repo

内容:

[yum]

baseurl=file:///media

gpgcheck=0

enabled=1

保存并退出

11.安装软件

yum -y install httpd

常用命令

yum –help查询可得到以下结果

yum makecache #创建软件源的缓存

yum install 软件名 #安装软件

yum remove 软件名 #卸载软件

yum search java #查询所有包含”Java“的软件包

yum update #更新系统中所有的软件

yum list | grep python #列出所有安装过的软件,并在其中筛选包含python的软件包

yum grouplist 组名 #软件包组列表

yum groupinstall 组名 #按组安装软件

re

网络yum源

华为来源镜像站软件开发服务 华为云

(huaweicloud.com)

https://mirrors.huaweicloud.com/home

RPM和YUM安装方式的区别

1.依赖关系:

rpm:无法自动解决软件包之间的依赖关系;如果要安装一个软件包,它依赖于其他的软件包,那么我们需要手动解决这些依赖关系,确保所需的软件包已经安装。相比之下,yum可以自动解决依赖关系,当使用yum安装一个软件包时,它会自动检查并下载所需的依赖软件包;

2.直接控制:rpm:用户可以精确控制所需的每个软件包;灵活性高:支持多种操作选项和配置;

tree 命令补充

tree命令是一个用于在命令行中显示目录结构的基本命令。它可以显示指定目录下的所有文件和子目录,并以树状结构进行展示。

基本的tree命令语法如下:

<span style="background-color:#f8f7e9"><span style="color:black"> tree [选项] [目录]</span></span>

一些常用的选项包括:

  • -d:只显示目录,不显示文件。

  • -L <级别>:限制显示的层级深度。

  • -a:显示所有文件和目录,包括隐藏文件。

例如,要显示当前目录下的所有文件和子目录的树状结构,可以使用以下命令:

<span style="background-color:#f8f7e9"><span style="color:black"> tree
 tree -L  2   显示两层</span></span>

如果要显示指定目录下的目录结构,可以使用以下命令:

<span style="background-color:#f8f7e9"><span style="color:black"> tree /etc</span></span>

这些是tree命令的一些基本用法,你可以根据自己的需求使用不同的选项来定制输出的格式。

1.19 linux 四剑客

find/grep/sed/awk

Linux 中的 find、grep、sed、awk 是非常强大和常用的命令行工具,用于处理文件和文本,被称为Linux四剑客。

find

find 命令是Linux中用于查找文件和目录的强大工具;

-name/-type/-size/-exec/正则regex…..

用于查找文件和目录

find 路径 参数1 查询条件1 参数2 查询条件2

1)-name 按文件查找文件或目录 iname 不区分大小写

2)-type 按照类型,一般和别的参数一起用,f 文件 d 目录

3)-size 按照文件大小 +1M 大于一兆,-1M 小于一兆;k M G

例1:find /etc/ -name passwd

例2:find /etc/ -type d -name ssh(代表通配符)

例3:[root@localhost ~]# find /etc -size +1M

image-20240119105445208

4)-mtime 根据文件或目录的修改时间来查询文件 -1(一天内)/ +7 (7天以上)

-mmin 根据分种查询 -60 (60分钟以内) +60 (60分钟以前)

5)-exec 将找到的文件交给其他命令进行处理

6)-maxdepth 指定查找深度

7)-perm:按照文件权限匹配查找**

8)-user-group:按照文件属主和所属组匹配查找

9).-iname:按照文件名匹配查找,不区分大小写。

*10)-regex:按照正则表达式匹配查找。

例4:find /etc -mtime -1(一天内)

例4:[root@localhost ~]# find /etc -mmin -50

例5:[root@localhost ~]# find /etc -name *ssh* -exec cp -r {} bak \;

【按名字查找 包含ssh的内容,找到后将内容复制到 bak 下;】

{}占位符,表示前方find找到的所有内容放进去

\; 按行执行,依次执行所有行;

例6:find /etc -maxdepth 2 -name "*.txt"

例7:find /etc -perm 644

例8:find /etc -user username

例9:查找以.jpg结尾的内容,不区分大小写;

find /etc -iname "*.jpg"

例10:

find /etc -regex ".*\.conf"

例:查找所有数字开头的文件

find /abc123/dir1 -regex '.*/[0-9].*'

在当前目录下以数字开头的文件

image-20240130085407369

find -regex “.*/[0-9].txt”

正则表达式
<span style="background-color:#f8f7e9"><span style="color:black"> #全部是英文模式下的字符
 ^      尖角号,匹配字符的开头
 $      美元符号,匹配字符串的结尾
 ^$      匹配空白行
 .       表示任意字符一次
 *       星号  匹配任意次
 +       加号,1到任意次
 ?      问号,匹配一次
 {5}      匹配5次
  {1,6}   匹配1~5次
 {n,}     至少匹配n次
 ​
 ​
 #
 ^A.*Z$   
 ​</span></span>

".":匹配任意单个字符

"^":匹配行的开头。

"$":匹配行的结尾

"*":匹配前一个字符的零个或多个实例。 "+":匹配前一个字符的一个或多个实例。 "?":匹配前一个字符的零个或一个实例。

"[]":用于指定字符集合,

例如 [abc] 匹配字母 a、b 或 c。 "a|b":

用于匹配 a 或 b 中的一个。

"{n}":匹配前一个字符的 n 次。

"{n,m}":匹配次数,最少 n 次,最多 m 次。 "{n,}":匹配前一个字符的至少 n 次。 "()":分组匹配

1.22grep

(缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行)

(用于在文件中搜索匹配的文本模式;)

  • -i:忽略大小写匹配

  • -v:只显示不匹配的行,反向匹配

    例:grep -v "keyword" file.txt

    #上述命令会在 file.txt 文件中查找不包含关键词 "keyword" 的行,并将其显示出来

  • -n:显示匹配行的行号

    例:grep -n "keyword" file.txt

    #上述命令会在 file.txt 文件中查找包含关键词 "keyword" 的行,并显示行号

  • -E:使用扩展正则表达式

    例:

    <span style="background-color:#f8f7e9">  grep -E "key(word|phrase)" file.txt</span>

    上述命令会在 file.txt 文件中查找包含 "keyword" 或 "keyphrase" 的行。

  • -r 查找目录下的所有文件的内容

    例题1:查找etc下 所有带“passwd”的内容

image-20240122102056736

-n 会显示行号

image-20240122102127769

实例:例1:生成26个字母

image-20240122095533688

image-20240122095215521

例2:修改前先备份(cp b.txt $(date "+%F").txt) ,

将修改后的文件重定向到另一个文件中

grep -v “^$” a.txt > b.txt

-v 取反

【 grep -v “^$” a.txt > a.txt(错误写法,会导致文件被丢失)】

sed

对文件中的内容进行查找、替换、删除、增加等操作。

所有操作加-i 才会生效)

  • '-e'将多个命令一起使用( \ 代表换行):

    sed -e 's/old_text/new_text/g' -e 's/another_old_text/another_new_text/g' file.txt

  • 'd'表示删除文件中的指定行:

    例:sed '3d' file.txt

    例:sed ‘/age/d’ a.txt 删除age这一行

  • 's'表示替换文件中的文本,'g'表示全局:(前面的内容出现几次,则替换几次)

    例:sed 's/old_text/new_text/g' file.txt

  • 'a'只在匹配行之后添加文本:

    例:

    sed '/sex=man/a hjw' aa.txt

    #原内容:

    a hello ​ sex=man

    height=168

    class=yun4

    #新内容:

    a hello ​ ​ sex=man

    hjw

    height=168 ​ class=yun4

    上述命令中,将会在 file.txt 文件中 old_text 出现的每一行之后添加 new_text,而不会影响其他行。

  • .'i'在匹配行之前添加文本:

    例:sed '/old_text/i new_text' file.txt

  • 删除文件中所有空白行

    例: sed '/^$/d' file.txt

    修改文件中第n行到第m行以new代替old

    例:sed -i 'n,ms/old/new/g' filename

    sed -i 'n,ms/old/new/g' filename

    在不修改文件的情况下把a.txt中以a开头n结尾的行里带s的全部替换成666 sed '/^a.*n$/s/s/666/pg' a.txt

    【在这个sed命令中,pg是替换命令的标记。在sed中,标记可以用来指定替换命令的行为。在这个例子中,p标记告诉sed在完成替换后打印出结果。如果没有p标记,sed将只会打印被修改的行。】

awk

  • 伪装成命令的编程语言)

    用于处理和操作文本文件,支持强大的文本分析功能。它可以用于处理结构化的文本数据,还可以数据提取、转换、处理等。常用的语法如下:

  • 打印文件中的每一行:

    例:awk '{print}' file.txt

  • 打印指定列的内容:

    例:awk '{print $2}' file.txt

    根据指定的分隔符“,”处理行:

    例:awk -F ',' '{print $2}' file.txt

    (打印第二列)

Linux中常用符号

*代表任意字符串
代表任意字符
/代表根目录或作为路径间隔符使用
\转义字符。
\续行符。可以使用续行符将一个命令行分写在多行上
$变量值置换,如:$PATH表示环境变量PATH的值
在’…'中间的字符都会被当做普通字符处理
‘’在’’…’'中间的字符会被当做文字处理并允许变量值置换
| 命令替换,置换…`中命令的执行结果
<输入重定向字符
>输出重定向字符
|管道字符
&后台执行字符。在一个命令之后加上字符“&”,该命令就会以后台方式执行
;按照顺序执行的多个命令
()在子Shell中执行命令
{}在当前Shell中执行命令
!执行命令历史记录中的命令
~代表登录用户的宿主目录(自家目录)

反斜杠 \ 实例

image-20240122162053790

例1:内容太多需要换行,可用 \继续输入内容,输出效果还是一行。

[root@localhost ~]# echo hello \

world hello world [root@localhost ~]# echo -e "hello \nworld" hello world [root@localhost ~]# echo -e "hello \nworld!" hello world! [root@localhost ~]# echo -e 'hello \nworld!' hello world! [root@localhost ~]#

$修改环境变量

例1:将环境变量语言修改为英文

export LANG=en

例2:将环境变量语言修改为中文

export LANG=zh_CN.UTF-8

‘’单引号:直接输出

例:

[root@localhost ~]# echo 'hello LANG=EN' hello LANG=EN

root@localhost ~]# echo '今天是date +"%F"' 今天是date +"%F"

“ ”双引号:识别命令后输出

例:

[root@localhost ~]# echo "今天是date +"%F"" 今天是2024-01-22

{}与()的区别

{}:在当前Shell中执行命令;

():在子Shell中执行命令;

;同时执行两条命令

&& 与操作,执行完前面的操作,执行后面的操作;前面命令失败后,不执行后面命令;

& 在后台运行;

例:

image-20240123093947496

| | 或操作,无论前面操作是否成功,都执行后一步操作;

1.23重定向

输出重定向>

输出重定向 > 会覆盖> > 添加

例1:重定向> 文件不存在时,将左侧命令的输出结果写入到右侧的文件中,会覆盖原文件;

image-20240123095248485

[root@localhost ~]# ls -l > list.txt [root@localhost ~]# vim list.txt

例2:将空白文件追加到新文件中,相当于删除源文件内容;

root@localhost ~]# > list.txt

image-20240123095553681

例3:输出追加重定向> > 在原文件之后添加新内容

输入重定向<

< 命令(将文件中的内容交给某个bash/python去执行;

<< 在另一个命令中执行命令,将文本嵌入程序中去执行,EOF是结束符;

例: 将文本中的命令交给 bash 去执行;

image-20240123100820188

cc.txt文件中的内容

image-20240123100949255

例: bc 一个计算器

image-20240123101235428

EOF输入结束符(输入重定向 输出重定向 两个命令一起用)将屏幕上的内容 放到 ee.txt文件中;

例: [root@localhost ~]# cat << EOF >> ee.txt

>hahah >heihei >heihjw >EOF

标准输入0、标准输出1、标准错误2

标准输入可以用0来表示,

标准输出可以用1来表示,

标准错误可以用2来表示

语法作用
cmd < file从file重定向标准输入
cmd > file把标准输出重定向到file中,如果file存在的话,覆盖(损坏)它
cmd>>file把标准输出重定向到file中,如果file存在,附加给它
cmd 2>file把标准错误重定向到file,如果file 存在,覆盖(损坏)它
cmd 2>> file把标准错误重定向到file中,如果file 存在,附加给他
cmd>file 2>&1合并标准输出和标准错误,并且重定向到file中(可移植的语法)
cmd >& file合并标准输出和标准错误,并且重定向到file中(方便的语法)

例1:[root@localhost ~]# bash < cc.txt (标准输入)

将cc.txt里面的内容交给bash去执行;

image-20240123114627401

例2:把标准错误重定向输出到文件中;(标准错误)

[root@localhost ~]# cat / 2>ee.txt [root@localhost ~]# cat ee.txt cat: /: 是一个目录

image-20240123115241193

例3:将cc.txt中的内容ee.txt中(标准输出)

[root@localhost ~]# cat cc.txt 1>ee.txt [root@localhost ~]# cat ee.txt ls df -h free -h

image-20240123115708606

例4:不知道输出结果是正确还是错误,用&

[root@localhost ~]# cat cc.txt &>ee.txt [root@localhost ~]# cat ee.txt ls df -h free -h

数据处理常用工具
sort排序/uniq去重/xargs将列变成行
  • sort 排序, 对文件内容进行排序

    参数:

    -t 用指定的符号做为分隔符;

    -k 指定区间;

    -n 依照数值的大小排序;

    -r 以相反的顺序来排序。

    -c 检查文件是否已经按照顺序排序。

    例:

    [root@zuolaoshi ~]# sort passwd

    apache:x:48:48:Apache:/usr/share/httpd:/

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon ::x2:2:daemon:/sbin:/sbin/nologin

    例: -c 检查文件是否已经按照顺序排序

    [root@zuolaoshi ~]# sort -c passwd

    sort:passwd:2:无序: bin:x1:1:bin:/bin:

  • uniq 去重

  • xargs命令 将列变成行

1.23压缩工具

gzip压缩

-c 保留原文件,但是不能直接生成压缩包,我们需要利用重定向符号手动生成压缩文件;

-h 显示帮助

-v 显示压缩包的相关信息,包括压缩比等

-1 压缩最快,压缩比低

-9 压缩最慢,压缩比高

例1:压缩du.txt这个文件

[root@localhost ~]# gzip du.txt

例2:

[root@localhost ~]# gzip -c du.txt > du.txt.gz

例3:解压缩

diff 对比文件是否相同;

diff du du.txt 对比du和du.txt两文件是否相同;

bzip2 压缩

比gzip压缩率高点

xz 压缩工具

比bzip2压缩率高

*tar 打包压缩工具

参数功能
-c创建压缩包
-C指定压缩路径
x解压缩
v显示压缩/解压缩过程
f压缩/解压缩时,指定压缩包名称
z使用gzip算法
j使用bzip2算法
J使用xz算法
t查看tar包内的文件
小😀p不修改文件属性
大P允许压缩路径中包含有"/"

例1:使用指定压缩包gzip压缩 /etc目录

[root@localhost ~]# tar -czvf etc.tar.gz /etc/

[root@localhost ~]# ls anaconda-ks.cfg edit_ip_yum_7_v2.2.sh mysql.sh 视频 下载 du.gz etc.tar.gz 公共 图片 音乐 du.txt.gz initial-setup-ks.cfg 模板 文档 桌面

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#aa5500">#使用gzip算法压缩/etc目录得到了etc.tar.gz</span>
 tar <span style="color:#0000cc">-czvf</span> etc.tar.gz /etc/
 ​
 将其解压缩:(-C 指定解压缩路径,不加-C时,自动解压缩。会按照压缩之前的路径解压)
 tar <span style="color:#0000cc">-xvf</span> etc.tar.gz  
 ​
 <span style="color:#aa5500"># 解压缩时可以不加压缩算法</span>
 tar <span style="color:#0000cc">-zxvf</span> etc.tar.gz  <span style="color:#0000cc">-C</span>  路径
 tar <span style="color:#0000cc">-Jxvf</span> etc.tar.xz  <span style="color:#0000cc">-C</span>  路径</span></span>

<span style="background-color:#f8f7e9"><span style="color:black"> 1、*.tar 用 tar –xvf 解压 
 2、*.gz 用 gzip -d或者gunzip 解压
 3、*.tar.gz**和*.tgz 用 tar –xzf 解压 
 4、*.bz2 用 bzip2 -d或者用bunzip2 解压
 5、*.tar.bz2用tar –xjf 解压 
 6、*.Z 用 uncompress 解压
 7、*.tar.Z 用tar –xZf 解压
 8、*.rar 用 unrar e解压
 9、*.zip 用 unzip 解压</span></span>

源码包程序编译安装redis

1.下载,上传源码包到Linux

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#aa5500">#下载工具</span>
 <span style="color:#3300aa">wget</span>   下载地址
 ​
 <span style="color:#aa5500">#ftp/sftp/lrzsz  从真机,上传工具</span></span></span>

2.解压缩 tar

3.编译 make/cmake 需要先安装依赖开发工具,例如gcc,g++,python,java

4.安装 make install

5.配置

#安装步骤

<span style="background-color:#f8f7e9"><span style="color:black"> # 第一步:将redis的源码包下载或上传到linux系统
 wget https://download.redis.io/releases/redis-6.2.14.tar.gz
 (也可以直接将压缩包拖进去,解压 
 yum install -y  lrzsz
      rz -E
 )
 ​
 # 第二步:解压缩redis
 tar zxvf redis-6.2.14.tar.gz
 ​
 # 第三步:编译
 cd redis-6.2.14
 # 进入redis源码目录。
 make
 make test
 ​
 # 第四步:安装
 make install PREFIX=/usr/local/redis
 # 后面是你自己的安装路径。
 # PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下
 ​
 # 第五步:添加配置文件
 mkdir /usr/local/redis/etc
 mv redis.conf /usr/local/redis/etc
 ​
 # 第六步:配置redis为后台启动
 vi /usr/local/redis/etc/redis.conf 
 # 将daemonize no 改成daemonize yes
 ​
 # 第七步:将redis加入到开机启动
 vi /etc/rc.local 
 #在里面添加内容:
 /usr/local/redis/bin/redis-server  /usr/local/redis/etc/redis.conf 
 # (意思就是开机调用这段开启redis的命令)
 ​
 # 第八步:开启redis
 /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
 ​
 # 第九步:将redis-cli,redis-server拷贝到bin下,让redis-cli指令可以在任意目录下直接使用
 cp /usr/local/redis/bin/redis-server /usr/local/bin/
 cp /usr/local/redis/bin/redis-cli /usr/local/bin/</span></span>

1.24 磁盘使用

常见的硬件设备及其文件名称

dev 硬件设备文件所在目录

硬件设备文件名称
IDE设备/dev/hd[a-d]
SCSI/SATA/U盘/dev/sd[a-p]
软驱/dev/fd[0-1]
打印机/dev/lp[0-15]
光驱/dev/cdrom
鼠标/dev/mouse
磁带机(可数据备份)/dev/st0或/dev/ht0

image-20240124094601179

Raid独立磁盘冗余阵列

是一种将多个物理磁盘组合在一起提供数据冗余或性能增强的技术;

Raid0Raid1Raid5Raid10
几块硬盘两块或两块以上硬盘组成;每块硬盘的大小必须一致;由两块或者2的倍数,三块或三块以上硬盘构成,每块硬盘大小必须一致;必须有4块等大小的硬盘组成;
读写速度所有动态磁盘中,读写最快磁盘使用率只有50%,写入速度最慢磁盘利用率是n-1块盘磁盘利用率是n-2块盘
损坏率损坏相对高利用率低
冗错功能没有容错功能有冗错功能有冗错功能
追求最大容量和速度,任何一块盘损坏,数据全部异常;追求最大安全性,兼顾Raid0和Raid1的特点,

软raid和硬raid的区别:

软raid是由操作系统模拟的raid。一旦磁盘损坏,操作系统就会损坏,raid会丧失作用;

硬RAID是由独立于硬盘之外的,硬件raid卡组成,就算硬盘损坏,也不会导致raid卡损坏,磁盘冗错才能起作用。

fdisk管理磁盘分区

在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。

fdisk命令中的参数以及作用

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

常用命令

lsblk 查看硬盘是否添加成功;查看分区情况

添加硬盘

一、如何添加硬盘?

先关机——编辑虚拟机设置—-添加、硬盘、下一步—–下一步

增加完硬盘记得重启系统

1.25创建分区

二、使用 fdisk 命令创建分区

第一步: [root@zuolaoshi ~]# fdisk /dev/sdb

[root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。

命令(输入 m 获取帮助):q

(q 不保存直接退出)

n (创建分区)——p 主分区——–添加大小——–w 保存并退出

3.再次查看分区情况: lsblk

4.刷新分区表信息 partprobe /dev/sdb

5.格式话分区 mkfs.xfs /dev/sdb1

mkfs.ext4 /dev/sdb2

6.创建新的挂载点 mkdir /data (可以用来存放数据)

mkdir /bak (可以用来存放备份文件)

7.挂载使用

mount /dev/sdb1 /data

mount /dev/sdb2 /bak

8.查看挂载情况 df -h

重启

永久挂载

永久挂载

 若想要永久挂载,需要修改编辑配置文件

vim /etc/fstab

1.UUID(可选)表示硬盘的身份信息

2.设备路径(可选,和UUID二选一写) /dev/cdrom /dev/sdb1

3.挂载路径 (必选) /media/cdrom /data/bak

4.磁盘格式(必选) xfs / ext4/ swap/ iso9660

5.挂载的参数(必选) defaults ro rw

6.工具通过它决定何时做备份。dump 会检查其内容,允许的数字是0和1。0表示忽略,1则进行备份。

7.决定需要检查的文件系统的检查顺序。允许的数字是0,1, 和2。根目录应当获得最高的优先权 1,其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。

添加内容参考格式:

例1:UUID=xxxx (/dev/sdb1) /data xfs defaults 0 0

例2: /dev/sdb1 /data xfs defaults 0 0

添加后保存退出重启

自动生成UUID: uuidgen

查寻UUID:

blkid 或 查询某个uuid: blkid | grep "/dev/sdb1"

显示结果:

/dev/sdb1: UUID="647b3e48-086b-42bb-9f3a-68fe746d1b83" TYPE="xfs"

/dev/sdb2: UUID="569d4493-2c9e-43e9-a4b4-d5ff0855095b" TYPE="ext4"

image-20240124153059963

swap交换分区

SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。

查看内存占用率: free -h

关闭交换分区: swapoff 路径

开启交换分区: swapon 路径

创建新分区swap:

1.fdisk /dev/sdb

n——p—–+5G—–l (查看)——t(修改)—82—-w保存

2.更新磁盘信息,让系统识别

partprobe /dev/sdb

3.查看磁盘

lsblk

4.创建swap空间

mkswap /dev/sdb3

5.查看内存

free -h

6.开启

[root@linuxprobe ~]# swapon /dev/sdb3

7.若想系统重启后还生效,需要修改配置信息

vim /etc/fstab

/dev/sdb5 swap swap defaults 0 0

7.reboot

free -h

软链接 硬链接

硬链接(hard link)

** ln:**

通过创建新的inode节点,对应到已存在的block块上。实现一个文件的数据可以 以相同或不同的名称存在 在不同的目录中;源文件消失,硬链接依然存在。所有硬链接被删除,源文件才会消失。

目录不能创建硬链接;

-d 可以强制给目录创建硬链接;

软链接(也称为符号链接[symbolic link])

ln -s:

就是一个快捷方式。在不同目录下创建软链接,原文件一旦不存在,软链接就会失效。

文件和目录都可以创建软链接;/d

区别

(1)软链接:可以跟源文件不在一个分区;删除源文件,链接文件失效

硬链接:必须跟源文件在一个分区;删除源文件,链接文件有效

(2)软链接:可以给文件或目录添加软连接

硬链接:只能给文件添加硬链接

(3)软链接:找的是文件名字

硬链接:找的是文件在硬盘里的位置

例:给test.txt创建两个硬链接

touch test.txt

ln test.txt /tmp/ttt.txt

ln test.txt /opt/2t.txt

例:创建软链接

ln -s test.txt /tmp/ttt.txt

1.28 LVM逻辑卷

逻辑卷基本介绍

*逻辑卷概念:是一种用于管理逻辑卷的技术,它在Linux系统上提供了灵活和可扩展的磁盘存储管理功能。LVM允许将多个物理磁盘合并成一个逻辑卷组(VG),然后再将逻辑卷组划分为一个或多个逻辑卷(LV)。逻辑卷可以被格式化、挂载和使用,就像普通的硬盘分区一样。

优点:可以动态地调整逻辑卷的大小,即使在运行时也可以将物理空间从一个卷移动到另一个卷。这使得存储管理更加灵活,可以根据需要对逻辑卷进行调整,而无需停机或重新分区硬盘。

作用:在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。那么我们可以通过逻辑盘卷管理(LVM,Logical Volume Manager)的方式来非常完美的实现这一功能。

image-20240128095652950

image-20240128100422726

逻辑卷使用流程

真实的物理设备---->物理卷(pv)---->卷组(vg)---->逻辑卷(lv)------>逻辑卷格式化---->挂载使用

逻辑卷特点:1.动态在线扩容;2.离线裁剪;3.数据条带化;4.数据镜像;

LVM 实战

添加硬盘—安装Ivm—创建pv—-硬盘加组—–分割逻辑卷—格式化—挂载—-看状态—–文件、永久挂载

1.添加两个硬盘,一共三个硬盘

2.安装lvm

yum install lvm2

3.让新添加的两块硬盘设备支持LVM技术。

[root@zuolaoshi ~]# pvcreate /dev/sdb /dev/sdc

4.把两块硬盘设备加入到storage卷组中,然后查看卷组的状态.

[root@zuolaoshi ~]# vgcreate storage /dev/sdb /dev/sdc

[root@zuolaoshi ~]# vgdisplay

5.再切割出一个约为150MB的逻辑卷设备

【这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。】

[root@zuolaoshi ~]# lvcreate -n vo -l 37 storage

另一种写法:

可以使用容量单位来创建逻辑卷,另一种写法如下:

<span style="background-color:#f8f7e9"><span style="color:black"> lvcreate <span style="color:#0000cc">-n</span> vo <span style="color:#0000cc">-L</span> 185m storage</span></span>

这里假设每个物理块的大小为5MB,因此37个物理块对应的容量为185MB。

6.把生成好的逻辑卷进行格式化,然后挂载使用

[root@zuolaoshi ~]# mkfs.ext4 /dev/storage/vo

(如果使用xfs格式,扩容时,后面命令有变化;xfs不能缩容)

[root@zuolaoshi ~]# mkdir /data

[root@zuolaoshi ~]# mount /dev/storage/vo /data

【Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

对了,如果使用了逻辑卷管理器,则不建议用XFS文件系统,因为XFS文件系统自身就可以使用xfs_growfs命令进行磁盘扩容。这虽然不比LVM灵活,但起码也够用。在实测阶段我们发现,在有一些服务器上,XFS与LVM的兼容性并不好。】

7.查看挂载状态,并写入配置文件,使其永久生效。

[root@zuolaoshi ~]# df -h

[root@zuolaoshi ~]# echo "/dev/storage/vo /data ext4 defaults 0 0" >> /etc/fstab

[root@zuolaoshi ~]# cat /etc/fstab

扩容逻辑卷

【在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩容前请一定要记得卸载设备和挂载点的关联。】

取消挂载—手动扩容—-检查—重置—重新挂载

第1步把上一个实验中的逻辑卷vo扩展至290MB。

[root@zuolaoshi ~]# umount /data

[root@zuolaoshi ~]# lvextend -L 290M /dev/storage/vo

第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。

[root@zuolaoshi ~]# e2fsck -f /dev/storage/vo

(或者用这种:

[root@zuolaoshi ~]# xfs-repair -f /dev/storage/vo

第3步重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。

[root@zuolaoshi ~]# resize2fs /dev/storage/vo

(或者用这种:

[root@zuolaoshi ~]#xfs-grows /dev/storage/vo)

第4步重新挂载硬盘设备并查看挂载状态

[root@zuolaoshi ~]# mount -a

[root@zuolaoshi ~]# df -h

缩小逻辑卷

取消挂载—检查—通知缩容—-手动缩容—-重新挂载—查看状态

【相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外,Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证数据的安全)。在执行缩容操作前记得先把文件系统卸载掉。】

[root@zuolaoshi ~]# umount /data

第1步:检查文件系统的完整性。

[root@zuolaoshi ~]# e2fsck -f /dev/storage/vo

第2步:通知系统内核将逻辑卷vo的容量减小到120MB。

[root@zuolaoshi ~]# resize2fs /dev/storage/vo 120M

第3步:将LV逻辑卷的容量修改为120M。

[root@zuolaoshi ~]# lvreduce -L 120M /dev/storage/vo

第4步:重新挂载文件系统并查看系统状态。

[root@zuolaoshi ~]# mount -a

[root@zuolaoshi ~]# df -h

逻辑卷快照

【LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。】LVM的快照卷功能有两个特点:

快照卷的容量必须等同于逻辑卷的容量;

快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

在正式操作前,先看看VG(卷组)中的容量是否够用:

<span style="background-color:#f8f7e9"><span style="color:black"> root@zuolaoshi ~]# vgdisplay</span></span>

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# echo "Welcome to data.com" > /data/readme.txt
 [root@zuolaoshi ~]# ls -l /data</span></span>

第1步使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。

[root@zuolaoshi ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo

[root@zuolaoshi ~]# lvdisplay

第2步在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]<span style="color:#aa5500"># dd if=/dev/zero of=/data/files count=1 bs=100M</span>
 [root@zuolaoshi ~]<span style="color:#aa5500"># lvdisplay</span></span></span>

第3步为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@zuolaoshi ~]# umount /data

[root@zuolaoshi ~]# lvconvert --merge /dev/storage/SNAP

第4步快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# mount -a
 [root@zuolaoshi ~]# cd /data/
 [root@zuolaoshi data]# ls
 lost+found readme.txt
 [root@zuolaoshi data]# cat readme.txt 
 Welcome to data.com</span></span>

删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

[root@zuolaoshi ~]# umount /data

[root@zuolaoshi ~]# vim /etc/fstab

第2步:删除逻辑卷设备,需要输入y来确认操作。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# lvremove /dev/storage/vo </span></span>

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# vgremove storage</span></span>

第4步:删除物理卷设备。

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# pvremove /dev/sdb /dev/sdc</span></span>

VDO基础

VDO(Virtual Data Optimize虚拟数据优化):通过压缩或删除存储设备上的数据来优化存储空间

mount补充

:IBM公司(国际商业机器公司):硬盘是由IBM发明的;

mount -a命令用于挂载/etc/fstab文件中列出的所有文件系统。当系统启动时,通常会自动执行这个命令来挂载所有已定义的文件系统。如果需要手动挂载所有未挂载的文件系统,可以使用这个命令。

嵌⼊式系统

1.29常用基本命令

显示基本信息: uname -a

显示磁盘信息: df -h

查看当前网络端口情况:netstat

参数:-l 监听; -t tcp; -u udp

Linux复习总结

Linux基础复习

1.系统命令、

cd (change directory);切换目录

相对路径:从当前目录开始的路径;

绝对路径:从/ 开始的目录

特殊的路径:~ 家目录;

-返回上一次目录;

../ 上级目录

pwd (print name working directory)打印当前工作目录

ls  (list)列出目录内容

-l 以长格式显示;-a 显示全部信息,包括隐藏文件或目录;-h 易于人类阅读的格式;

2.目录文件操作命令、

3.vim、

4.用户权限操作命令、

5.磁盘操作命令

2.20 克隆

使用链接克隆,占用从盘空间少,克隆下的机器需要原机器在才能使用;

修改主机名

方法一:修改配置文件——重启生效

image-20240220144833038

reboot

方法二: nmtui——设置系统主机名—–systemctl restart systemd-hostnamed——-exit —–重新连接(ssh root )

(常用)方法三:

  1. hostnamectl set-hostname Server01

  2. bash

方法四:

1.nmcli general hostname 查看主机名

2.nmcli general hostname 主机名

方法五:1. hostname 主机名 2.bash

修改ip

方法一:修改配置文件

image-20240220150712990

vim /etc/sysconfig/network-scripts/ifcfg-ens33

# 删除UUID (唯一标识符);

#修改IP

#重启网卡 systemctl restart network

# 重新远程连接

方法二:nmtui

服务的启动方法

<span style="background-color:#f8f7e9"><span style="color:black"> # centos7 及以后的版本
 systemctl restart  network
 ​
 #centos6及以前的版本
 service  network  restart
 #使用脚本文件启动服务
 /etc/init.d/network   restart</span></span>

ssh和scp

ssh安全远程连接客户端

SSH是一种以安全的方式提供远程登录的协议,也是目前远程管理linux系统的首选方式。 在此之前,一般用FTP或telnet来进行远程登录,但因为它们以明文的形式在网络中传输账号密码和数据信息,因此不安全。 sshd是基于ssh协议开发的一款远程管理服务程序。想要使用SSH协议来远程管理linux系统,就需要部署sshd服务程序。

ssh 是安全远程连接客户端

sshd是安全远程连接服务端 (端口号 22)

远程连接

1.准备两台虚拟机—–2.设置在同一个网络模式下—-3.设置IP地址—–4.修改主机名—-5.ping查看是否连接成功—–6.远程登录

<span style="background-color:#f8f7e9"><span style="color:black"> 远程登录
 ssh  root@192.168.8.18
 ssh  root@192.168.8.18  -p  (指定端口登录)
 ​
 修改端口号
 vim  /etc/ssh/sshd_config
 重启服务
 systemctl restart  sshd</span></span>

image-20240220165809438

<span style="background-color:#f8f7e9"><span style="color:black"> 方法一:通过进程号 查看
 (查看22端口是否启动:)
      netstat    -lnutp | grep 22
 方法二:ps  -aux |grep sshd</span></span>

yum install openssh-server

禁用SSH密码登录,只允许密钥登录,可以按照以下步骤进行配置:

1.用root用户登录到SSH服务器。 2.编辑SSH服务器的配置文件sshd_config:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config文件:

<span style="background-color:#f8f7e9"><span style="color:black"> vim /etc/ssh/sshd_config</span></span>

3.在文件中找到并修改以下行:

  • PasswordAuthentication行的值改为no

<span style="background-color:#f8f7e9"><span style="color:black"> PasswordAuthentication (密码验证)no</span></span>
  • 确保PubkeyAuthentication的值为yes

<span style="background-color:#f8f7e9"><span style="color:black"> PubkeyAuthentication yes</span></span>

4.保存并退出配置文件:在vi中按下 Esc 键,然后输入 :wq 保存文件并退出。

5.重新启动SSH服务器:运行以下命令以应用更改:

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl restart sshd</span></span>

image-20240220215740960

如果您希望禁用root用户登录SSH服务器,可以按照以下步骤进行配置:

1.用root用户登录到SSH服务器。

2.编辑SSH服务器的配置文件sshd_config:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config文件:

<span style="background-color:#f8f7e9"><span style="color:black"> vi /etc/ssh/sshd_config</span></span>

3.在文件中找到并修改以下行:

  • PermitRootLogin行的值改为no

<span style="background-color:#f8f7e9"><span style="color:black"> PermitRootLogin no</span></span>

4.保存并退出配置文件:在vi中按下 Esc 键,然后输入 :wq 保存文件并退出。 5.重新启动SSH服务器:运行以下命令以应用更改:

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl restart sshd</span></span>

root用户不可以登录,其他用户可以登录;

image-20240220220349658

image-20240220220938844

公钥 私钥

1.本地客户端生成公私钥:

【ssh-keygen】

id_rsa (私钥)

id_rsa.pub (公钥)

2.上传公钥到服务器(1号客户端 远程登录2号服务端)

【ssh-copy-id root@192.168.8.20】

上面这条命令,就是将公钥写到了服务器上的.ssh/authorized_keys文件中。可以登录服务器后,查看该文件,可以在文件末尾看到客户端的公钥。因此,我们也可以直接将客户端公钥的内容直接拷贝到服务器上的.ssh/authorized_keys文件末尾,以实现相同的功能。

ssh免密登陆很简单,只需两步:

  1. 客户端生成公钥、私钥

  2. 将客户端公钥上传到服务器

    1.客户端生成公私钥

    本地客户端生成公私钥:(一路回车默认即可)

    <span style="background-color:#f8f7e9"> ssh-keygen</span>

    如上命令会在用户根目录下的.ssh文件夹下创建公私钥

    <span style="background-color:#f8f7e9"> cd ~/.ssh
     ls
     id_rsa (私钥)
     id_rsa.pub (公钥)</span>

    2.上传公钥到服务器

    这里测试用的服务器地址为:192.168.235.22,用户为:shirley

    方式一:执行ssh-copy-id将客户端公钥上传到服务器:

    <span style="background-color:#f8f7e9"> ssh-copy-id  root@192.168.8.20</span>

上面这条命令,就是将公钥写到了服务器上的.ssh/authorized_keys文件中。可以登录服务器后,查看该文件,可以在文件末尾看到客户端的公钥。因此,我们也可以直接将客户端公钥的内容直接拷贝到服务器上的.ssh/authorized_keys文件末尾,以实现相同的功能。

方式二:将客户端id_rsa.pub中的内容贴到~/.ssh/authorized_keys 文件末尾

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#3300aa">cat</span> ~/.ssh/authorized_keys
 ​</span></span>

允许指定用户进行登录(白名单)

在/etc/ssh/sshd_config 配置文件中设置AllowUsers选项,

在配置文件末尾添加行格式如下(例如允许用户tom通过192.168.8.30登录)。

<span style="background-color:#f8f7e9"><span style="color:black"> AllowUsers tom@192.168.8.30</span></span>

配置了指定用户或者用户组允许登录后,默认拒绝其他所有用户或者用户组。

禁止指定用户登录(黑名单)

在 /etc/ssh/sshd_config 配置文件中设置DenyUsers选项,

在配置文件末尾添加行格式如下(例如禁止用户lily登录)。

<span style="background-color:#f8f7e9"><span style="color:black"> DenyUsers lily</span></span>

scp远程安全拷贝命令

通过ssh协议在网络之间安全传输的命令

本地主机文件复制到目标主机去

scp root@192.168.1.2:/root/a.txt /root

scp /root/b.txt root@192.168.1.2:/root

2.21网络命令和定时任务

主机名配置文件 /etc/hostname

DNS配置文件 /etc/resolv.conf

临时启动或关闭网卡 ifconfig ens37 up/down

设置临时网卡 ifconfig ens37 192.168.18.10

查看windows网卡 ipconfig

显示路由 ip route show

ping命令 -c -n

netstat简介

Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况。

1) -a 列出所有当前的连接 # netstat -a

2)使用 -t 选项列出 TCP 协议的连接 # netstat -at

3)使用 -u 选项列出 UDP 协议的连接 # netstat -au

4)使用 -l 选项列出正在监听的套接字。现在我们可以看到处于监听状态的 TCP 端口和连接。如果你查看所有监听端口,去掉 -t 选项。如果你只想查看 UDP 端口,使用 -u 选项,代替 -t 选项。 # netstat -tnl

5)-p 选项查看进程信息 # netstat -nlpt

使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。

例:netstat -tuln 该命令将显示所有正在监听的TCP和UDP端口号。其中,-t参数表示显示TCP端口,-u参数表示显示UDP端口,-l参数表示只显示监听状态的端口,-n参数表示以数字形式显示端口号。**

ss -tuln

lsof -i:端口号

  1. 可以打印出网络统计数据 # netstat -sIp

    [root@zuolaoshi ~]# netstat -antulp

    a 查看所有服务以及对应的端口号

    n 将输出结果以数字的形式表示,而不是主机名,服务名等

    t 使用tcp协议

    u 使用udp协议

    l 只显示处于监听状态的

    p 显示程序的名称与进程号

    c 指定自动更新的间隔时间 秒

    r 查看路由表信息

crontab简介(定时器)

crontab 提交和管理用户的需要周期性执行的任务

选项

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#0000cc">-e</span>:编辑该用户的计时器设置;
 <span style="color:#0000cc">-l</span>:列出该用户的计时器设置;
 <span style="color:#0000cc">-r</span>:删除该用户的计时器设置;
 <span style="color:#0000cc">-u</span><用户名称>:指定要设定计时器的用户名称。</span></span>

image-20240221090511892

定时创建文件

(调用了vim编辑器进行操作的)

image-20240221103348446

[root@BASE ~]# crontab -l */5 * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null

minute hour day month week command

0-59 0-23 1-31 1-12 0-7

顺序:分 时 日 月 周

crontab -e 编辑该用户的计时器设置

15 9 * * * /usr/bin/mkdir /root/zuolaoshi

crontab -l 列出该用户的计时器设置

备份策略

1.强调备份的重要性

2.需要备份的内容

重要系统目录;/etc /home /root

mysql数据库(rpm安装/var/lib/mysql/ 源码安装的MySQL /usr/local/mysql/data/;

nginx/apache服务

3.备份策略与方法的选择

完整备份:cp tar

专用备份工具:dump xfsdump

增量备份:每次备份以前一次备份作为参照;版本6x:dump工具;版本7x:xfsdump工具;

差异备份:以第一次作为参照;

本地备份;异地备份

日志怎么备份?

日志切割logrotate;日志轮替;

监控工具dstat

atd 一次性的定时服务

(末尾加d 代表服务)

at 延迟时间 (回车)

输入你的命令 (> 不用你打,这个是系统自己出来的)

…. > 结束了就按 ctrl + D

然后 atq 查看延迟任务

例:明天17点钟,输出时间到指定文件内:

<span style="background-color:#f8f7e9"><span style="color:black"> [root@localhost ~]<span style="color:#aa5500"># at 17:20 tomorrow</span>
 at> date >/root/2013.log
 at> <EOT>
 job <span style="color:#116644">8</span> at <span style="color:#116644">2013</span><span style="color:#0000cc">-01-06</span> <span style="color:#116644">17</span>:20</span></span>

计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务:

<span style="background-color:#f8f7e9"><span style="color:black"> [root@localhost ~]<span style="color:#aa5500"># atq</span>
 <span style="color:#116644">8</span>       <span style="color:#116644">2013</span><span style="color:#0000cc">-01-06</span> <span style="color:#116644">17</span>:20 a root
 <span style="color:#116644">7</span>       <span style="color:#116644">2013</span><span style="color:#0000cc">-01-08</span> <span style="color:#116644">17</span>:00 a root</span></span>

删除已经设置的任务:

<span style="background-color:#f8f7e9"><span style="color:black"> [root@localhost ~]<span style="color:#aa5500"># atq</span>
 <span style="color:#116644">8</span>       <span style="color:#116644">2013</span><span style="color:#0000cc">-01-06</span> <span style="color:#116644">17</span>:20 a root
 <span style="color:#116644">7</span>       <span style="color:#116644">2013</span><span style="color:#0000cc">-01-08</span> <span style="color:#116644">17</span>:00 a root
 ​
 [root@localhost ~]<span style="color:#aa5500"># atrm 7</span>
 [root@localhost ~]<span style="color:#aa5500"># atq</span>
 <span style="color:#116644">8</span>       <span style="color:#116644">2013</span><span style="color:#0000cc">-01-06</span> <span style="color:#116644">17</span>:20 a root</span></span>

知识扩展

Linux下的任务调度分为两类: 系统任务调度用户任务调度

系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:

<span style="background-color:#f8f7e9"><span style="color:black"> /etc/cron.deny     该文件中所列用户不允许使用crontab命令
 /etc/cron.allow    该文件中所列用户允许使用crontab命令
 /var/spool/cron/   所有用户crontab文件存放的目录,以用户名命名</span></span>

搭建服务

  • 安装

    • yum安装

    • rpm安装

    • 源码安装

    • 二进制包安装(官方或其他组织个人编译好的程序)

  • 配置脚本 vim/sed脚本 修改配置文件

  • 启动/重启/加载配置

(* 启动失败 排错;)

系统优化

系统优化策略

禁用不需要的服务;

避免直接使用root用户,普通用户通过sudo授权操作;

同步时间服务器;

配置系统同时打开最大文件数,vi /etc/profile ulimit -SHn 65535

防火墙配置;

更改ssh远程端口;

进程管理

(进程—–正在进行的程序—静态的代码;进程—–正在运行的程序)

进程包含多个线程;每个进程至少包含一个或者多个线程;

*终端里面还可以启动多个终端

bash 启动新的终端

exit 退出

一个进程可能以两种方式存在:前台和后台。前台是指用户在屏幕上可以进行操作的,后台是指屏幕上看不到的实际操作。

一般系统的服务都是以后台进程的方式存在,并且常驻系统中,直到关机才结束

服务的概念

linux系统的服务(service)本质是一种运行在后台的进程,监听某个端口,等待其他应用的请求

ps命令

用途:查看静态的进程统计信息

[root@zuolaoshi ~]# ps aux #查看系统后台的所有进程

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.1 252828 11580 ? Ss 10月23 0:04 /us...

USER 开启进程的用户

PID 进程的识别号

%CPU 进程的cpu占用率

%MEM 进程的物理内存占用率

VSZ 虚拟内存用量,单位Kbytes

RSS 物理内存占用量 Kbytes

TTY 那个终端开启的

STAT 进程的状态

START 开启时间

TIME CPU占用时间

COMMAND 执行具体内容

[root@zuolaoshi ~]# ps -l 查看当前用户开启的进程

[root@zuolaoshi ~]# pstree

A 进程之间使用ASCII字符连接

U 进程之间使用UTF-8编码连接

p 显示进程号

u 显示用户

& 将当前的工作调到后台

[root@zuolaoshi ~]# cd /

[root@zuolaoshi /]# tar -czf /tmp/test.tar.gz etc & (&表示后台执行)

[1] 13568 [1]工作序号;13568进程号(PID)

[root@zuolaoshi /]# ls tmp/ | grep test test.tar.gz

执行完成后,会在下次敲回车的时候给用户一个反馈

[1]+ 已完成 tar -czpf /tmp/test.tar.gz etc

fg 将后台指定的工作调到前台
bg使用bg命令将之前的工作状态更改为运行

启动停止服务ntsysv

ntsysv命令是Linux系统中的一个命令行工具,用于管理系统服务的启动和停止。通过ntsysv命令,用户可以方便地查看当前系统中已安装的服务,并可以选择性地启动或停止这些服务。

ntsysv命令的主要作用如下:

查看系统服务:ntsysv命令可以列出当前系统中已安装的所有服务,并显示每个服务的状态(启动/停止)和级别(在哪些运行级别下自动启动)。

启动服务:通过ntsysv命令,用户可以选择性地启动某个服务。启动服务后,该服务将开始运行,并根据其在运行级别中的设定进行自动启动。

停止服务:ntsysv命令可以用于停止某个正在运行的服务。停止服务后,该服务将被终止运行,并不再自动启动。

配置服务:ntsysv命令提供了一个交互式的界面,允许用户对服务的运行级别进行配置。用户可以选择在哪些运行级别下自动启动或停止某个服务,以满足特定的需求。

管理服务:通过ntsysv命令,用户可以方便地管理系统中的服务。用户可以根据需要启动、停止、重启或重新加载某个服务,以及查看服务的状态和配置信息;

top动态查看

[root@zuolaoshi ~]# top

-d 指定两次刷新的时间间隔,默认是3秒

-p 后面跟进程号,查看指定进程的状态,最多20个PID

-n 刷新指定次数后退出

-b 批量模式,可以让top将内容输出到指定的位置

后台工作的查看及状态的更改

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi ~]# jobs     #查看后台工作
 [1]-  已停止               vim anaconda-ks.cfg
 [2]+  已停止               find / -print
 [root@zuolaoshi ~]# jobs -l  #查看后台工作,并显示进程号
 [1]- 13663 停止                  vim anaconda-ks.cfg
 [2]+ 13732 停止                  find / -print
 [root@zuolaoshi ~]# jobs -s  #仅查看状态为停止的后台工作
 [1]-  已停止               vim anaconda-ks.cfg
 [2]+  已停止               find / -print
 [root@zuolaoshi ~]# jobs -r  #仅查看状态为运行的后台工作
 ​
 +:  当使用命令将后台任务调到前台时,默认调用有此标记的任务,也就是最近被调到后台的
 -:  倒数第二个被调到后台的任务
 ​
 ​
 [root@zuolaoshi ~]# fg %工作序号(%可省略)  将后台指定的工作调到前台
 ​
 ​</span></span>
kill 杀死进程

我们可以通过kill命令配合适当的信号来管理后台的工作。

查看进程号:

pidof bash

pidof sshd

(补充)三次握手、四次挥手

TCP建立连接三次握手

1、PC1发送连接请求:

SYN=1,seq=x(随机数)

2、PC2响应PC1的请求,并发送另一个连接请求:

ACK=1,Ack=x+1:响应PC1的请求

SYN=1,seq=y:发起另一个方向的连接请求

3、PC1响应PC2的连接请求

ACK=1,Ack=y+1

TCP断开连接四次挥手:

1、PC1发送断开连接请求

FIN=1

2、PC2响应PC1的断开连接请求

ACK=1

TCP半关闭:PC1不能给PC2发送数据,PC2可以给PC1发送数据

3、PC2发送断开连接请求

FIN=1

4、PC1响应PC2的断开连接请求

ACK=1

SELinux

SELinux(Security-Enhanced Linux)是一种安全增强的 Linux 安全子系统,它提供了访问控制机制来保护系统资源免受未经授权的访问和提高系统的安全性。

SELinux 有三种工作模式可供选择

  • Enforcing:强制模式,强制执行 SELinux 策略,阻止不符合规则的访问。

  • Permissive:宽容模式,记录不符合规则的访问但不阻止。

  • Disabled:禁用 SELinux。

    要修改 SELinux 模式,可以编辑 **/etc/selinux/config** 文件,并将 SELINUX 行的值更改为所需的模式,保存文件后重启系统使更改生效。

    使用sed命令修改并关闭SELinux

    <span style="background-color:#f8f7e9"> 永久关闭方法一:
     vim  /etc/selinux/config
     reboot
     永久方法二:
     sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
     ​
     reboot
     临时关闭:
     setenforce 0  
     getenforce  获取状态</span>

firewalld防火墙

10款免费的开源软件防火墙应用推荐

  • 01 Perimeter 81

  • 02 pfSense

  • 03 Untangle Firewall

  • 04 OPNsense防火墙

  • 05 Iptables

  • 06 IPFire

  • 07 Shorewall

  • 08 SmoothWall

1.查看防火墙状态: 要查看防火墙状态

[root@localhost ~]# firewall-cmd --state

running

2.查看防火墙规则: 要查看当前的防火墙规则

[root@localhost ~]# firewall-cmd --list-all

public (active)

3.允许/拒绝服务或端口要允许或拒绝特定的服务或端口可以使用以下命令

<span style="background-color:#f8f7e9"><span style="color:black"> # 允许服务
 firewall-cmd --add-service=<service>
 # 例如
 firewall-cmd --add-service=httpd
 ​
 # 拒绝服务
 firewall-cmd --remove-service=<service>
 # 例如
 firewall-cmd --remove-service=http</span></span>

<span style="background-color:#f8f7e9"><span style="color:black"> firewall-cmd --add-port=<port>/tcp
 firewall-cmd --add-port=80/tcp
 ​
 firewall-cmd --remove-port=<port>/tcp
 firewall-cmd --remove-port=80/tcp</span></span>

<service> 替换为要允许/拒绝的服务名称,例如 httpssh。将 <port> 替换为要允许/拒绝的端口号

4.持久化配置更改: 临时更改防火墙规则后,重新启动系统后可能会还原为默认状态。为了使配置更改持久化,可以使用以下命令:

<span style="background-color:#f8f7e9"><span style="color:black"> firewall-cmd --runtime-to-permanent
 或者允许服务时,直接配置持久化
 firewall-cmd --add-port=22/tcp --permanent</span></span>

该命令将当前的临时配置更改保存为永久配置。

5.其他常用命令:

  • firewall-cmd --reload:重新加载防火墙规则。

  • firewall-cmd --zone=<zone>:切换到指定的防火墙区域。

  • firewall-cmd --list-services:列出当前启用的服务。

  • firewall-cmd --list-ports:列出当前允许的端口。

2.22服务部署基础

  • NTP:时间服务器,提供时间同步。

  • NFS:网络文件共享服务器,在N台主机(Linux)之间共享目录和文件

  • Samba:linux和windows之间进行目录和文件的共享

  • Rsync:远程数据同步服务器,增量同步,用于数据的备份(只把新文件或者是改变的文件同步,更节省磁盘空间,速度更快)

  • Scp:远程全量复制;

  • FTP :文件传输协议;文件上传下载服务

  • Nginx:Web服务器,代理服务器,反向代理服务器,http\https的服务器;

  • DNS:域名解析服务器,域名 方便网站的访问

  • DHCP:ip地址的自动分配。硬路由(路由器设备)、软路由(服务器上通过软件搭建的路由器)

    TCP/UDP常用端口

    TCP常用端口

    21:FTP连接控制端口

    20:FTP数据传输端口

    80:HTTP,超文本传输协议

    443:HTTPS,安全的超文本传输协议

    139、445:SMB,共享

    22:SSH,远程连接

    23:TELNET:远程控制端口

    25:SMTP:发送邮件

    110:POP3:接收邮件

    53:DNS迭代

    UDP常用端口

    69:TFTP,简单的数据传输协议

    111:RPC:远程过程调用

    123:NTP:网络时间协议

    1985:HSRP

    67:DHCP

    53:DNS 递归

    137、138:NMB,主机解析

NTP时间同步

ntp是什么?

是一种用于 同步计算机时间的协议,他是一种客户端-服务器协议,用于同步计算机时钟。

image-20240222195846352

使用场景:

image-20240222200017998

【思路整理:

多台服务器同步时间:一台为:服务端;其他为客户端

1)服务端/客户端:关闭防火墙和SElinux

2服务端/客户端:安装ntp和ntpdate

3)服务端:编辑配置文件vim /etc/ntp.conf

重启服务:systemctl restart ntpd

4)服务端:启动ntp服务

5)检查ntp服务状态

客户端:1.关闭防火墙和SELinux

2.安装ntpdate服务 yum -y install ntpdate

3.同步硬件时钟(可做可不做)

4.测试时间同步

1.显示当前的日期和时间:

<span style="background-color:#f8f7e9"><span style="color:black"> date</span></span>

2.以指定格式显示日期和时间:

<span style="background-color:#f8f7e9"><span style="color:black"> date +"%Y-%m-%d %H:%M:%S"</span></span>

3.设置系统时间为指定时间:

<span style="background-color:#f8f7e9"><span style="color:black"> date --set="2024-01-01 00:00:00"</span></span>

4.将系统时间与网络时间同步:

<span style="background-color:#f8f7e9"><span style="color:black"> ntpdate ntp.aliyun.com</span></span>

一、安装前准备

1、关闭SELinux服务

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#aa5500"># 关闭SELinux临时生效</span>
 [root@server01 ~]<span style="color:#aa5500"># setenforce 0</span>
 <span style="color:#aa5500"># 永久关闭SELinux(需重启生效)</span>
 [root@server01 ~]<span style="color:#aa5500"># sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config</span></span></span>

2、配置防火墙

1)关闭防火墙并禁止开机启动:

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#aa5500"># 停止Firewall服务</span>
 [root@server01 ~]<span style="color:#aa5500"># systemctl stop firewalld</span>
 ​
 <span style="color:#aa5500"># 禁止Firewall服务开机启动</span>
 [root@server01 ~]<span style="color:#aa5500"># systemctl disable firewalld</span>
 ​
 <span style="color:#aa5500"># 2)或者仅放行NTP服务端口:</span>
 <span style="color:#aa5500"># 添加NTP服务的UDP端口123到public区域,并设置为永久生效</span>
 ​
 [root@server01 ~]<span style="color:#aa5500"># firewall-cmd --add-port=123/udp --permanent</span>
 ​
 <span style="color:#aa5500"># 重新载入防火墙规则以使更改生效</span>
 [root@server01 ~]<span style="color:#aa5500"># firewall-cmd --reload</span></span></span>

二、安装NTP服务

1、查询是否已安装

<span style="background-color:#f8f7e9"><span style="color:black"> [root@server01 ~]<span style="color:#aa5500"># rpm -qa | grep ntp</span></span></span>

图片

如果输出包含ntp和ntpdate,则说明已经安装NTP服务。如果只有一个包被安装,建议卸载后重新安装。使用命令rpm -e xxx卸载。

2、YUM安装

<span style="background-color:#f8f7e9"><span style="color:black"> [root@server01 ~]<span style="color:#aa5500"># yum install ntp ntpdate -y</span></span></span>

三、修改NTP配置文件

(改前先备份

cp /etc/ntp.conf /etc/ntp.conf.bak

[root@server01 ~]# vim /etc/ntp.conf

【服务端配置】

(一)时间服务器连接互联网

# 允许本地网络的机器同步,但禁止修改、查询等操作

restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap

# 使用 ntp.aliyun.com 作为 NTP 服务器

#server 0.centos.pool.ntp.org iburst

#server 1.centos.pool.ntp.org iburst

#server 2.centos.pool.ntp.org iburst

#server 3.centos.pool.ntp.org iburst

server ntp.aliyun.com

server ntp1.aliyun.com

server ntp2.aliyun.com

【若后面修改时间后,同步不回去,先systemctl stop ntpd;再同步;再开启systemctl start ntpd;】

四、启动NTP服务并设置自动启动

<span style="background-color:#f8f7e9"><span style="color:black"> [root@server01 ~]# systemctl start ntpd
 [root@server01 ~]# systemctl enable ntpd
 [root@server01 ~]# systemctl daemon-reload  重新加载后台服务</span></span>

五、检查NTP服务器是否正常工作

运行以下命令检查NTP服务器是否正常工作:

<span style="background-color:#f8f7e9"><span style="color:black"> [root@server01 ~]# ntpq -p
 [root@server01 ~]# netstat
 ​</span></span>

如果返回结果中有时间服务器,表示NTP服务器已经正常工作。

六、同步硬件时钟与系统时间(服务端和客户端都可以,与两台时间同步并无影响)

NTP服务默认配置下主要负责同步Linux系统的内核时间。然而,为了确保在系统重启后硬件时钟(CMOS/RTC)也能保持准确的时间,可以设置让ntpd服务同时同步硬件时钟。

编辑/etc/sysconfig/ntpd文件,并确认添加以下内容:

<span style="background-color:#f8f7e9"><span style="color:black"> SYNC_HWCLOCK=yes</span></span>

这样一来,在ntpd服务运行过程中,每当系统时间被NTP同步更新时,硬件时钟也会随之更新,确保两者保持一致。

此外,若需要手动将当前已同步的系统时间写入到硬件时钟中,可使用如下命令:hwclock -w

七、测试时间同步

<span style="background-color:#f8f7e9"><span style="color:black"> [root@client01 ~]# date --set="2024-01-01 00:00:00"
 [root@client01 ~]# date
 [root@client01 ~]# ntpdate  192.168.8.18
 [root@client01 ~]# hwclock -w
 [root@client01 ~]# date</span></span>

NFS网络文件系统

(共享存储)

1.安装必要的软件;

2.配置NFS服务器

3.配置NFS客户端

4、启动相关服务

5.测试相关服务

它允许不同主机系统之间的文件或目录通过局域网络进行共享。NFS的主要特点是基于TCP/IP传输网络文件,具有简单易操作和适合局域网环境的特性。

image-20240222203032555

Network File System 网络文件系统

将NFS服务端的目录挂载到客户端,用于共享数据;

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#aa5500">#服务端和所有客户端安装rpcbind和nfs-utils</span>
 rpm <span style="color:#0000cc">-qa</span> | <span style="color:#3300aa">grep</span> nfs
 rpm <span style="color:#0000cc">-qa</span> | <span style="color:#3300aa">grep</span> rpcbind
 yum install <span style="color:#0000cc">-y</span> nfs-utils rpcbind
 ​</span></span>

服务端需要有一个目录用于共享

<span style="background-color:#f8f7e9"><span style="color:black"> mkdir   /data</span></span>

创建nfs的配置文件/etc/exports

<span style="background-color:#f8f7e9"><span style="color:black"> echo "/data *(rw,sync,no_root_squash,fsid=0)" >> /etc/exports
 ​
 “rw” 表示将目录以可读写的方式导出。
 “sync” 表示将数据同步写入到磁盘,确保写入的一致性。
 “no_root_squash” 表示允许 root 用户以 root 身份访问导出的目录。
 “fsid=0” 表示将此导出的文件系统标识符设为0,用于标识整个文件系统。
 注:挂载两个及以上fsid=1,fsid=2往后类推;
 fsid=0  这以参数可省略;</span></span>

只有服务端需要开始rpc服务和nfs服务,客户端不需要启动

服务端 192.168.8.18

<span style="background-color:#f8f7e9"><span style="color:black"> # 1.生效配置
 exportfs -r
 ​
 # 2.启动
 systemctl enable rpcbind 
 systemctl restart rpcbind
 systemctl enable nfs
 systemctl restart nfs
 ​
 # 3.服务器注册端口:111
 rpcinfo -p
 ​
 # 4.查看是否成功
 showmount -e localhost
 ​
 Export list for localhost:
 /data *
 ​
 # 5.查看启动挂载
 cat /var/lib/nfs/etab
 ​</span></span>

客户端 192.168.8.28

<span style="background-color:#f8f7e9"><span style="color:black"> 安装
 yum install -y nfs-utils rpcbind
 ​
 # 1.创建挂载目录
 mkdir  /data
 # 2.查看挂载ip(查看有哪些地方可以被挂载)
 showmount -e 192.168.8.18
 # 3.挂载(mount  -t 指定挂载类型)
 mount -t nfs 192.168.8.18:/data /data
 # 4.查看磁盘
 df -h
 # 5.启动挂载
 (编辑配置文件   永久挂载)
 vim /etc/fstab
 192.168.8.32:/data  /data  nfs  defaults  1 1
 ​
 ​</span></span>

2.23 Samba

Linux系统与Windows系统之间的文件共享问题

(在windows查看Linux的共享文件;也可以在linux查看Windows查看)

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

安装服务

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y install samba samba-client</span></span>

启动服务

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl start smb nmb </span></span>

新建一个用户用于文件共享

<span style="background-color:#f8f7e9"><span style="color:black"> useradd -s /sbin/nologin  test </span></span>

创建**smb共享密码**

<span style="background-color:#f8f7e9"><span style="color:black"> smbpasswd -a  test</span></span>

设置访问权限

<span style="background-color:#f8f7e9"><span style="color:black"> chmod -R 755 /home/test/</span></span>

修改配置文件

<span style="background-color:#f8f7e9"><span style="color:black"> vim /etc/samba/smb.conf</span></span>

配置文件类似如下

<span style="background-color:#f8f7e9"><span style="color:black"> [test]  # 共享名
 comment = "samba test"   # 描述信息
 path = /home/test     # 共享目录
 browseable = yes      # 所有人可见
 public = yes          # 是否公开
 writable = yes        # 是否允许修改</span></span>

重启服务

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl restart smb nmb</span></span>

在windows上操作

打开此电脑—-空白处右击——添加一个网络位置——下一步 下一步\\192.168.8.18\test——创建文件

rsync数据同步

Remote synchronize:即远程同步

rsync不搭建服务只能本地复制;

它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cpmv命令。

下载后可以远程复制;

.rsync简介—–增量拷贝

rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,⽽rsync可以增量拷⻉。

常用镜像站

校园联合网镜像站

华为开源镜像站

USTC 开源镜像站

# 注意结尾加"/"表示目录中的内容同步,不加"/"表示同步这个目录本身。

在本地同步目录中的文件

rsync -avz /test /test1

rsync -avz /test/ /test1

  • -a:表示以递归模式进行同步,保持文件属性、权限等信息。

  • -v:表示以详细模式进行同步,显示执行过程中的详细信息。

  • -z:表示压缩传输数据,有助于减少数据传输量。

  • -P: 保留那些因故没有完全传输的文件,以是加快随后的再次传输。

  • --delete: 用于删除目标中没有源中的文件

  • --exclude: 用于排除特定文件或目录等。

1.安装 rsync 以下操作在root用户下进行

<span style="background-color:#f8f7e9"><span style="color:black"> yum install rsync</span></span>

2.将本地文件同步到远程服务器

rsync -avz --delete /root/test1/ root@192.168.8.28:/root/test1

将远程服务器文件同步到本地

rsync -avz --delete root@192.168.8.28:/root/test1/ /root/test3

(这里的delete表示将同步时 不同的东西删掉)

3.验证同步结果:在同步完成后,您可以登录到远程服务器检查目标文件或目录是否成功同步过去。

rsync监听的端口:873

不同目录下共享文件

Rsync 服务器

<span style="background-color:#f8f7e9"><span style="color:black"> # 准本两台机器
 master     192.168.8.50
 slave      192.168.8.60
 ​
 # 修改master(192.168.8.50)的配置文件
 systemctl stop firewalld
 systemctl disable firewalld
 setenforce 0
 #关闭防火墙及安装机制
 ​
 yum install -y httpd rsync
 #rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
 mkdir -p /var/www/html          #创建共享文件目录
 chmod +r /var/www/html          #给共享目录加上读的权限
 ​
 vim /etc/rsyncd.conf
 # 编辑rsync配置文件
 uid = root
 gid = root
 use chroot = yes
 address = 192.168.8.50
 port 873
 log file = /var/log/rsyncd.log
 pid file = /var/run/rsyncd.pid
 hosts allow = 192.168.8.0/24
 [myhtml]
 path = /var/www/html
 comment = this is rsync
 read only = yes
 dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
 auth users = tom
 secrets file = /etc/rsyncd_users.db
 ************************************************************************************
 uid = root                                          #用户id
 gid = root                                          #组id
 use chroot = yes                                    #开启,禁锢在源目录
 address = 192.168.8.50                      #监听地址
 port 873                                            #默认端口号为873
 log file = /var/log/rsyncd.log                      #日志文件存放位置
 pid file = /var/run/rsyncd.pid                      #存放进程id的文件位置
 hosts allow = 192.168.8.0/24                        #允许访问的主机网段
 [myhtml]                                            #共享模块的名称
 path = /var/www/html                                #源目录路径
 comment = this is rsync                 #
 read only = yes                                     #是否为只读
 dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z    #同步时不再压缩的文件类型
 auth users = tom                                        #授权用户,多个账户以空格隔开
 secrets file = /etc/rsyncd_users.db                 #存放账号信息的数据文件,一行一个
 # 主服务器创建用户账号和密码
 ​
 vim /etc/rsyncd_users.db
 tom:123123
 #编辑用户账号文件,固定格式为[名称:密码],一行一个
 ​
 chmod 600 /etc/rsyncd_users.db
 #官方要求,最好只是赋权600!
 # 主服务器开启服务
 rsync --daemon
 #开启服务
 netstat -natp | grep rsync
 #检测端口号,确认服务是否成功开启
 ​
 cd /var/www/html
 #切换至共享目录下
 echo "zuolaoshi 666" > index.html
 #给共享文件夹下创建一个index.html文件输入内容</span></span>
  • 客户端查看内容

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#3300aa">mkdir</span> <span style="color:#0000cc">-p</span> /opt/abc
 rsync <span style="color:#0000cc">-avz</span> tom@192.168.8.50::myhtml /opt/abc  <span style="color:#aa5500">#用rsync登录</span>
 <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"123123"</span>> /etc/server.pass          <span style="color:#aa5500">#输入密码实现免交互</span>
 <span style="color:#3300aa">chmod</span> <span style="color:#116644">600</span> /etc/server.pass             <span style="color:#aa5500">#给密钥文件赋权600</span>
 rsync <span style="color:#0000cc">-avz</span> <span style="color:#0000cc">--delete</span> <span style="color:#0000cc">--password-file</span><span style="color:#981a1a">=</span>/etc/server.pass  tom@192.168.8.50::myhtml /opt/abc/
 ​
 <span style="color:#aa5500"># rsync,使用密钥文件/etc/server.pass对应tom用户,IP地址为192.168.8.50的共享模块文件进行压缩</span>
 <span style="color:#aa5500"># 并归档同步至当前服务器的/opt/abc目录下,同时删除差异内容,保持一致性</span></span></span>

2.26 FTP 文件传输协议

(VSFTP 非常安全的文件传输协议)

上传 默认使用 20端口

下载默认使用 21 端口

ssh 是22端口,scp使用ssh协议进行上传下载

lrzsz软件可以使用xshell拥有上传下载功能

<span style="background-color:#f8f7e9"><span style="color:black"> lrzsz  是使用xshell拥有上传 下载功能
 ​
 rz 上传
 sz 下载
 ​</span></span>

FTP是 File Transfer Protocol 文件传输协议的简称。

他最主要的功能是在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件。

VSFTP是 Very Security FTP 的缩写,即非常安全的文件传输协议。

一、linux与linux互传

服务端:

1.安装 VSFTP

2.开机自启动

3.防火墙

4.ftp配置

5.修改文件后重启服务

6.创建用户tom 设置密码;使用ftp进行传输

客户端:

1.安装ftp

2.客户端连接ftp服务端

ftp 192.168.8.28 #(服务端ip)

3.测试下载文件到客户端

4.客户端上传文件到服务端

二、Linux与windows互传

在windows终端使用ftp

ftp 192.168.8.28 #(服务端ip)

安装VSFTP服务

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y install vsftpd</span></span>

开机自启动

systemctl enable vsftpd

防火墙设置

<span style="background-color:#f8f7e9"><span style="color:black"> # 1.查看并关闭防火墙
 systemctl status firewalld
 systemctl stop firewalld
 systemctl disable firewalld
 # 2.永久关闭SELinux
 setenforce 0
 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
 ​
 # 如果需要开启防火墙则进行下列配置
 # 开启ftp服务
 # firewall-cmd --add-service=ftp --permanent
 # 防火墙生效
 # firewall-cmd --reload</span></span>

ftp配置

/etc/vsftpd/vsftpd.conf文件参数说明

  1. cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

  2. grep -v "^#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf

  3. vim /etc/vsftpd/vsftpd.conf

<span style="background-color:#f8f7e9"><span style="color:black"> ​
 anonymous_enable=NO         #是否开启匿名登录
 local_enable=YES            #是否允许本地用户登录
 write_enable=YES            #是否允许上传
 local_umask=022             #默认的umask码
 # 它将上传文件夹权限更改为777-022 = 755(rwxr-xr-x)
 # 并将上传文件权限更改为666-022 = 644(rw-r--r--)
 ​
 dirmessage_enable=YES       #是否显示目录说明文件
 xferlog_enable=YES          #是否记录ftp传输过程
 connect_from_port_20=YES    #是否确定端口传输来自20
 xferlog_std_format=YES      #是否使用标准的ftp xferlog模式
 chroot_list_enable=YES      #是否将系统用户限制在自己的home目录下
 listen=YES                  #是否开启监听
 pam_service_name=vsftpd     #服务名称
 anon_mkdir_write_enable=NO  #是否允许匿名用户创建目录</span></span>

修改配置文件后需要重启服务 systemctl restart vsftpd

<span style="background-color:#f8f7e9"><span style="color:black"> # 创建普通用户,使用ftp进行文件传输
 useradd tom
 passwd tom
 登录普通用户:创建文件  并查看</span></span>

客户端安装ftp

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y install ftp</span></span>

客户端连接ftp服务端

<span style="background-color:#f8f7e9"><span style="color:black"> ftp 192.168.8.35  #(服务端ip)
 用户名</span></span>

测试下载文件到客户端

<span style="background-color:#f8f7e9"><span style="color:black"> get 1.txt</span></span>

客户端上传文件到服务端

<span style="background-color:#f8f7e9"><span style="color:black"> put  a.txt</span></span>

局域网yum源

cd /etc/yum.repos.d/

vim yum.repo

wget http://192.168.3.200/mirrors/local.repo

yum makecache

yumm -y install ……

2.27DNS和DHCP

DNS

DNS:域名系统(英文:Domain Name System)是一个域名系统;域名本质:给ip地址起别名

DNS协议运行在UDP协议之上,使用端口号53;

知道ip改域名

Windows中:

方式一:此电脑—windows——system32—–drivers—–etc—–hosts——用记事本打开

方式二:直接打开记事本——打开后选路径

Linux中

vim /etc/hosts 进入配置文件(本地的dns解析)

补充 192.168.3.31 client01

192.168.8.30 server01

则可以直接ping server01或远程连接server 01

image-20240226160313818

##

13台根DNS服务器的具体信息

. 代表根域

根域名服务器(root name server)是互联网域名解析系统(DNS)中最高级别的域名服务器

根域中顶级域名: .com (商业) .cn(中国 .cn .hk .tw .mo) .net(网络) .org(非盈利) .gov(政府)

正向解析—— 通过域名 找ip

反向解析——-通过ip 找 域名

其它级别域名

除了顶级域名,还有二级域名(SLD,second-level domain),就是最靠近顶级域名左侧的字段。如:zh.wikipedia.org中,wikipedia就是二级域名(有资料认为,在顶级域名后面, 还存在一级域名,那么zh就是二级域名)。 [5]

再下来就是三级域名,即最靠近二级域名左侧的字段,从右向左便可依次有四级域名、五级域名等等。举个正在使用中的三级域名的实例,www.ncic.ac.cn,其中www前缀表明此域名对应着万维网服务,每一级域名由英文半角句号分区,“ncic”作为三级域名是“ac.cn”的子域名

配置dns

需要安装bind-utils

yum install bind-utils

dig

# 关防火墙关SELinux

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

【sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config】

需要安装软件包: bind

yum -y install bind*

systemctl restart named

systemctl enable named

修改四个配置文件

  • 第一个文件

  • vim /etc/named.conf

    (进入配置文件,修改以下两项内容)

listen-on port 53 { any; };

绑定的地址需要修改

allow-query { any; };

允许查询的服务地址

  • 第二个文件

    vim /etc/named.rfc1912.zones

    进入 辅助域配置文件

    粘贴两段内容

    定义正向解析域

    zone "test.com" IN {

    type master;

    file "test.com.zone"; 正向解析是设定好域名,通过域名从正向解析文件中找响应的IP地址。 

    allow-update { none; };默认不允许slave从服务器同步 

    }; # 别忘记加;

    定义反向解析域

    zone "8.168.192.in-addr.arpa" IN {

    type master;

    file "8.168.192.zone"; //设定好ip的网络段,通过ip找域名 

    allow-update { none; }; //默认不允许slave从服务器同步 

    }; # 别忘记加;

    第三个文件

    到/var/named 下创建并修改zone文件

    cd /var/named/

    touch test.com.zone 8.168.192.zone

    vim test.com.zone

    :r ./named.localhost

    $TTL 1D @ IN SOA test.com. root.test.com. ( 20240227; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS dns.test.com. www IN A 192.168.8.18 dns IN A 192.168.8.18 ftp IN A 192.168.8.18 blog IN A 192.168.8.18

    第四个文件

    vim 8.168.192.zone

    :r ./named.loopback

    $TTL 1D

    @ IN SOA test.com. root.test.com. ( 20240227 ; serial

    1D ; refresh

    1H ; retry

    1W ; expire

    3H ) ; minimum

    NS dns.test.com.

    18 PTR www.test.com.

    18 PTR mail.test.com.

    18 PTR dns.test.com.

    # 重启服务,检查dns是否生效

    systemctl restart named

    nslookup > www.test.com

    Server: 192.168.8.133

    Address: 192.168.8.133#53

    Name: www.test.com

    Address: 192.168.8.22

    DHCP服务搭建

    动态主机配置协议DHCP )服务器为网络上的每个设备动态分配IP地址和其他网络配置参数。

    DHCP协议采用客户端/服务器模型(C/S模型),服务端可以为客户端提供IP、掩码、网关、主机名、DNS等信息。客户端只需将IP获得方式设置为自动获取即可。

    1、安装dhcp服务

    <span style="background-color:#f8f7e9"> [root@dhcp ~]# yum -y install dhcp</span>

    2、设置dhcp配置文件(设置的dhcp网段需要和自己网卡在一个网段)

    <span style="background-color:#f8f7e9"> [root@dhcp /]# cp  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf
     cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
     [root@dhcp ~]# vim /etc/dhcp/dhcpd.conf
         #第47行
         #设置dhcp网段和子网掩码,注意必须和本机IP的网段保持一致
         subnet 192.168.8.0 netmask 255.255.255.0 {
         #设置dhcp地址池范围
         range 192.168.8.100 192.168.8.200;
         #dns服务器IP地址
         option domain-name-servers 114.114.114.114;
         #设置网关
         option routers 192.168.8.30;
         #广播地址
         option broadcast-address 192.168.8.255;
         #设置默认租约时间:4小时
         default-lease-time 14400;
         #设置最大租约时间:8小时
         max-lease-time 28800;
     }</span>

    3、启动dhcp服务

    <span style="background-color:#f8f7e9"> [root@dhcp ~]# systemctl start dhcpd</span>

    4、查看启动进程

    <span style="background-color:#f8f7e9"> [root@dhcp ~]<span style="color:#aa5500"># netstat -anptu|grep dhcpd</span></span>

2.27LNMP

LNMP 环境是指在 Linux 系统下,由

Nginx + MySQL/MariaDB + PHP 组成的网站服务器架构。

image-20240228084113589

yum搭建LNMP环境

1.关闭防火墙和SElinux

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl stop firewalld
 systemctl disable firewalld
 ​
 vi /etc/selinux/config
 SELINUX=disabled
 ​
 reboot</span></span>

Nginx

2.安装 Nginx

执行以下命令,在 /etc/yum.repos.d/ 下创建 nginx.repo 文件。

<span style="background-color:#f8f7e9"><span style="color:black"> vim /etc/yum.repos.d/nginx.repo</span></span>

i 切换至编辑模式,写入以下内容。

<span style="background-color:#f8f7e9"><span style="color:black"> [nginx] 
 name = nginx repo 
 baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/ 
 gpgcheck = 0 
 enabled = 1</span></span>

Esc,输入 :wq,保存文件并返回。

执行以下命令,安装 nginx。

<span style="background-color:#f8f7e9"><span style="color:black"> yum install -y nginx</span></span>

查看80端口是否被占用,若被占用,就关掉httpd

<span style="background-color:#f8f7e9"><span style="color:black"> netstat -lnutp | grep 80</span></span>

执行以下命令,打开 default.conf 文件。

<span style="background-color:#f8f7e9"><span style="color:black"> <span style="color:#3300aa">vim</span>  /etc/nginx/conf.d/default.conf</span></span>

修改第一处

server_name localhost;

localhost改为 主机IP192.168.8.28

修改第二处:

第九行 添加内容

location / {

index index.php index.html index.htm; }

修改第三处

解开注释:第65~71行,来启用虚拟主机功能。

执行以下命令启动 Nginx。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl start nginx</span></span>

在本地浏览器中访问以下地址,查看 Nginx 服务是否正常运行。出现welcome则为正常;

<span style="background-color:#f8f7e9"><span style="color:black"> http://IP</span></span>

MySQL

安装数据库

1.执行以下命令,查看系统中是否已安装 MariaDB。

<span style="background-color:#f8f7e9"><span style="color:black"> rpm -qa | grep -i mariadb</span></span>

返回结果类似如下内容,则表示已存在 MariaDB。

为避免安装版本不同造成冲突,请执行以下命令移除已安装的 MariaDB。

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y remove mariadb</span></span>

若返回结果为空,则说明未预先安装,则执行下一步。

2.执行以下命令,在 /etc/yum.repos.d/ 下创建 MariaDB.repo 文件。

<span style="background-color:#f8f7e9"><span style="color:black"> vim /etc/yum.repos.d/MariaDB.repo</span></span>

3.按 i 切换至编辑模式,写入以下内容,添加 MariaDB 软件库。

<span style="background-color:#f8f7e9"><span style="color:black"> # MariaDB 10.4 CentOS repository list - created 2019-11-05 11:56 UTC
 # http://downloads.mariadb.org/mariadb/repositories/
 [mariadb]
 name = MariaDB
 baseurl = https://mirrors.cloud.tencent.com/mariadb/yum/10.4/centos7-amd64
 gpgkey=https://mirrors.cloud.tencent.com/mariadb/yum/RPM-GPG-KEY-MariaDB
 gpgcheck=1</span></span>

4.按 Esc,输入 :wq,保存文件并返回。

5.执行以下命令,安装 MariaDB。此步骤耗时较长,请关注安装进度,等待安装完毕。

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y install MariaDB-client MariaDB-server</span></span>

6.执行以下命令,启动 MariaDB 服务。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl start mariadb</span></span>

7.执行以下命令,设置 MariaDB 为开机自启动。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl enable mariadb</span></span>

8.执行以下命令,验证 MariaDB 是否安装成功。

<span style="background-color:#f8f7e9"><span style="color:black"> mysql</span></span>

显示结果如下,则成功安装。

9.执行以下命令,退出 MariaDB。

<span style="background-color:#f8f7e9"><span style="color:black"> \q</span></span>

PHP

安装PHP

1.依次执行以下命令,更新 yum 中 PHP 的软件源。

<span style="background-color:#f8f7e9"><span style="color:black"> rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm
 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm</span></span>

2.执行以下命令,安装 PHP 7.2 所需要的包。

<span style="background-color:#f8f7e9"><span style="color:black"> yum -y install mod_php72w.x86_64 php72w-cli.x86_64 php72w-common.x86_64 php72w-mysqlnd php72w-fpm.x86_64</span></span>

3.执行以下命令,启动 PHP-FPM 服务。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl start php-fpm</span></span>

4.执行以下命令,设置 PHP-FPM 服务为开机自启动。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl enable php-fpm</span></span>

验证环境配置

当您完成环境配置后,可以通过以下验证 LNMP 环境是否搭建成功。

1.执行以下命令,创建测试文件。

<span style="background-color:#f8f7e9"><span style="color:black"> echo "<?php phpinfo(); ?>" >> /usr/share/nginx/html/index.php</span></span>

2.执行以下命令,重启 Nginx 服务。

<span style="background-color:#f8f7e9"><span style="color:black"> systemctl restart nginx</span></span>

3.在本地浏览器中访问如下地址,查看环境配置是否成功。

<span style="background-color:#f8f7e9"><span style="color:black"> http://IP/index.php</span></span>

显示结果如下,则说明环境配置成功。

手动搭建 WordPress 个人站点(Linux)

操作场景

WordPress 是一款使用 PHP 语言开发的博客平台,您可使用通过 WordPress 搭建属于个人的博客平台。

1.执行以下命令,进入 MariaDB。

<span style="background-color:#f8f7e9"><span style="color:black"> mysql</span></span>

2.执行以下命令,创建 MariaDB 数据库。例如 “wordpress”。

<span style="background-color:#f8f7e9"><span style="color:black"> CREATE DATABASE wordpress;</span></span>

3.执行以下命令,创建一个新用户。例如 “user”,登录密码为 123456

<span style="background-color:#f8f7e9"><span style="color:black"> CREATE USER 'user'@'localhost' IDENTIFIED BY '123456';</span></span>

4.执行以下命令,赋予用户对 “wordpress” 数据库的全部权限。

<span style="background-color:#f8f7e9"><span style="color:black"> GRANT ALL PRIVILEGES ON wordpress.* TO 'user'@'localhost';</span></span>

5.执行以下命令,设置 root 账户密码。

说明

MariaDB 10.4 在 CentOS 系统上已增加了 root 账户免密登录功能,请执行以下步骤设置您的 root 账户密码并牢记。

<span style="background-color:#f8f7e9"><span style="color:black"> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
 FLUSH PRIVILEGES;</span></span>

6.执行以下命令,使所有配置生效。

<span style="background-color:#f8f7e9"><span style="color:black"> FLUSH PRIVILEGES;</span></span>

7.执行以下命令,退出 MariaDB。

<span style="background-color:#f8f7e9"><span style="color:black"> \q</span></span>

下载 WordPress

说明

WordPress 可从 WordPress 官方网站下载 WordPress 最新中文版本并安装,本教程采用 WordPress 中文版本。

1.执行以下命令,删除网站根目录下用于测试 PHP-Nginx 配置的index.php文件。

<span style="background-color:#f8f7e9"><span style="color:black"> rm -rf /usr/share/nginx/html/index.php</span></span>

2.依次执行以下命令,进入/usr/share/nginx/html/目录,并下载与解压 WordPress。

<span style="background-color:#f8f7e9"><span style="color:black"> cd /usr/share/nginx/html
 wget https://cn.wordpress.org/wordpress-5.0.4-zh_CN.tar.gz
 tar zxvf wordpress-5.0.4-zh_CN.tar.gz</span></span>

修改 WordPress 配置文件

1.依次执行以下命令,进入 WordPress 安装目录,将wp-config-sample.php文件复制到wp-config.php文件中,并将原先的示例配置文件保留作为备份。

<span style="background-color:#f8f7e9"><span style="color:black"> cd /usr/share/nginx/html/wordpress
 cp wp-config-sample.php wp-config.php</span></span>

2.执行以下命令,打开并编辑新创建的配置文件。

<span style="background-color:#f8f7e9"><span style="color:black"> vim wp-config.php</span></span>

3.按 i 切换至编辑模式,找到文件中 MySQL 的部分,并将相关配置信息修改为配置 WordPress数据库 中的内容。

<span style="background-color:#f8f7e9"><span style="color:black">  // ** MySQL settings - You can get this info from your web host ** // 
  /** The name of the database for WordPress */ define('DB_NAME', 'wordpress');
  /** MySQL database username */ define('DB_USER', 'user');
  /** MySQL database password */ define('DB_PASSWORD', '123456');
  /** MySQL hostname */ define('DB_HOST', 'localhost');</span></span>

4.修改完成后,按 Esc,输入 :wq,保存文件返回。

验证 WordPress 安装

1.在浏览器地址栏输入http://IP/wordpress 文件夹,例如:

<span style="background-color:#f8f7e9"><span style="color:black"> http://192.xxx.xxx.xx/wordpress</span></span>

转至 WordPress 安装页,开始配置 WordPress。

2.根据 WordPress 安装向导提示输入以下安装信息,单击安装 WordPress,完成安装。

所需信息说明
站点标题WordPress 网站名称。
用户名WordPress 管理员名称。出于安全考虑,建议设置一个不同于 admin 的名称。因为与默认用户名称 admin 相比,该名称更难破解。
密码可以使用默认的密码或者自定义密码。请勿重复使用现有密码,并确保将密码保存在安全的位置。
您的电子邮件用于接收通知的电子邮件地址。

现在可以登录 WordPress 博客,并开始发布博客文章了。

2.28Mysql

什么是数据库?

数据库就是存储数据的仓库,由数据库表组成,其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 数据库非常重要,因为它存储着企业的钱、用户信息、业务数据、订单等非常重要的数据

  • DB(database) 数据库

  • DBMS 数据库管理系统

  • RDBMS 关系型数据库(Mysql、Oracle、SQL Server、PostgreSQL、DB2、SQLite)都是使用SQL语句进行操作的。

  • NoSQL 非关系型数据库(MongoDB、Redis)w文档数据库、KV数据库

  • NewSQL 这类数据库

MySQL服务端端口号——3306

MySQL安装

指定安装文件位置

将mysql安装包下载或上传到/usr/local/下面

#安装依赖 [root@zuolaoshi mysql]# yum install libaio libaio-devel ncurses ncurses-devel openssl openssl-devel -y

下载MySQL二进制安装包 [root@zuolaoshi ~]# cd /usr/local/

官网下载

[root@zuolaoshi local]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

局域网内下载 [root@zuolaoshi local]# wget http://192.168.3.200/Software/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

解压

[root@zuolaoshi local]# tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

创建用户创建组

1.useraddd mysql

2.passwd mysql

3.groupadd mysql

修改配置文件

vim /etc/my.cnf

[mysqld]

port = 3306

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

log-error = /usr/local/mysql/data/error.log

pid-file = /usr/local/mysql/data/mysql.pid

socket = /tmp/mysql.sock

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

default-storage-engine=InnoDB

default-authentication-plugin=mysql_native

_password sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

创建data文件夹

[root@zuolaoshi mysql]# mkdir data

更改mysql目录权限

chown mysql:mysql -R mysql

初始化数据库

[root@zuolaoshi mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

想要在任意目录执行mysql的命令需要修改/etc/profile

[root@zuolaoshi mysql]# vim /etc/profile

在最后一行添加指定PATH关联MySQL的bin目录 export PATH=$PATH:/usr/local/mysql/bin

配置完成后让系统重新加载/etc/profie文件 [root@zuolaoshi mysql]# source /etc/profile

执行完后查看初始密码:

<span style="background-color:#f8f7e9"><span style="color:black"> [root@zuolaoshi mysql]# vim /usr/local/mysql/data/error.log</span></span>

启动MySQL服务

# 将启动脚本复制到/etc/init.d/目录,这是启动脚本的默认目录。

[root@zuolaoshi mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld

[root@zuolaoshi mysql]# chmod +x /etc/init.d/mysqld

[root@zuolaoshi mysql]# /etc/init.d/mysqld start Starting MySQL... SUCCESS!

修改root密码

Mysql安装成功后,默认的密码为随机密码,你可以使用以下命令来创建新的root用户的密码:

方法一:

[root@zuolaoshi mysql]# mysqladmin -u root -p password "new_password" Enter password:初始密码 现在你可以通过以下命令来连接到Mysql服务器:

[root@zuolaoshi mysql]# mysql -u root -p Enter password:*** 注意:在输入密码时,密码是不会显示了,你正确输入即可。

方法二:

mysql> alter user 'root'@'localhost' identified by 'Root123456';

Query OK, 0 rows affected (0.05 sec)

Mysql常见问题

遇到以下情况时:

1.安装时初始化失败

2.初始密码遗失时,

<span style="background-color:#f8f7e9"><span style="color:black"> 做法:
 删除   /usr/local/mysql/data目录中的数据
 rm    /usr/local/mysql/mysql
 执行初始化命令:
 [root@zuolaoshi mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
 ​</span></span>

如何找回root密码?

【跳过Mysql的root密码,直接登录,用于修改密码;】

若忘记mysql登录密码,先停止服务:

./ support-files/mysql.server start/stop

忘记密码如何修改
vim /etc/my.cnf

[mysqld] #配置的最后添加,跳过密码登录的功能 skip-grant-tables #之后重启mysql服务

systemctl restart mysqld mysql -uroot

知道密码如何修改密码

第一种:

alter user 'root'@'localhost' identified by 'Root123456'; 密码设置成功后必须注释掉skip-grant-tables;

【若改不了,先刷新权限:

flush privileges;】

第二种:

mysqladmin -uroot -p password “root123”

数据库外!数据库外!数据库外!设置root用户密码

mysqladmin -u root password '123.com'

要重新修改密码:

mysqladmin -u root -p password '新密码'

会先输入旧密码

启动服务的几种方法:

用脚本启动的几种方法:

第一种

使用默认启动脚本路径

cd /usr/local/mysql

(一般会把他复制到这里 cp ./support-files/mysql.server /etc/init.d/mysqld)

./ support-files/mysql.server start/stop

第二种

./etc/init.d/mysqld

/etc/init.d/mysqld start/stop/restart

第三种:

service mysqld start/stop

第四种:

systemctl start /stop/restart mysqld

关服务:

关闭mysql的本质是杀死mysql的pid

killall mysql (不推荐,会导致数据丢失)

创建远程用户

MySQL的用户是由

用户名 @地址

第一种:

root@localhost localhost只能本机登录,不能远程登录;

第二种:

root@% %表示所有地址都可以登录;

表示所有主机都可以登录;

root@192.168.8.%

表示允许192.168.8这个网段的IP登录;

root@192.168.8.1

表示只允许192.168.8.1这个用户可以登录;

数据库中创建用户

设置远程连接

<span style="background-color:#f8f7e9"><span style="color:black"> **mysql> create user  'root'@'%' identified by 'Root123456';**
 Query OK, 0 rows affected (0.01 sec)
 ​
 ​
 ​
 **mysql>grant all privileges on  *.* to ‘root’@‘192.168.8.%’
 identified by “root123” ;
 ​
 Query OK, 0 rows affected (0.00 sec)
 ​
 ​
 ​
 **mysql> flush privileges;**
 Query OK, 0 rows affected (0.00 sec)</span></span>
查看数据库版本

[root@db01 ~]# mysql --version

查看创表语句

show create table 表名;

远程登录

mysql -uroot -p -h192.168.8.18

SQL简介

Structured Query Language,结构化查询语言

1.DDL(数据定义语言Data Definition Language)

库和表进行操作

Create 创建库和表

Drop 删除库和表的数据和结构

Alter 修改结构

2.DML(数据操纵语言Data Manipulation Language)

对表中的数据进行添加、修改、删除

Insert 添加、插入数据

Update 修改、更新数据

Delete 删除数据

3.DQL(数据查询语言Data Query Language)

Select 查询、选择

4.DCL(数据控制语言Data Control Language)

对数据库进行权限管理、用户管理、事务管理

Grant 权限设置

Commit 事务提交

Rollback 回滚

数据库内常见命令

? -- 客户端的帮助

\c -- 结束未完成的命令

\s -- 获取服务端的状态Status

\! -- 在MySQL客户端中执行系统的命令

\q -- 退出MySQL客户端

DDL(数据定义语言)

Create 创建库和表

Drop 删除库和表的数据和结构

Alter 修改结构

常见语句.:**

以行显示内容:

mysql> show create database test\G;

1.切换库:use test;

2.查看库:show database test;

查看库中所有的表:show tables;

查看表结构: desc stu;

查看表的数据

select * from stu; select id,name,sex from stu; select id,name,sex,birthday from stu;

删除库:drop database test;

删除表: drop table student;

修改表名:

alter table a rename to b;

创建库:

create database test;

create database test charset utf8mb4;

修改数据库字符集:

alter database school charset utf8;

添加字段:

alter table stu add phone char(11) not null;

固定位置添加字段:

alter table stu add phone char(11) after name;

删除已有字段:

alter table student drop phone;

DML(数据操纵语言)

(Data Manipulation Language)**

对表中的数据进行添加、修改、删除

Insert 添加、插入数据

Update 修改、更新数据

Delete 删除数据

DML(数据操纵语言)

数据添加

添加一条数据

insert into stu(id,name,gender,birthday) value(1,‘武大’,‘M’,‘2000-01-01’);

添加多条数据

insert into stu(id,name,gender,birthday) values(1,‘武大’,‘M’,‘2000-01-01’),

(2,‘王大’,‘M’,‘1988-01-01’),

(3,‘李大’,‘F’,‘2003-01-01’);

修改数据

所有数据都会改名;

update stu set name=“熊大”;

改其中一条数据:

update stu set name=“熊大” where id=2;

删除数据(delete)

delete from student where id=6;

伪删除(update):

为了数据的安全性,数据库中不允许出现delete,用update代替删除操作;

alter table stu add status emum(“0”,“1”) not null default “1”;

select * from stu where status=“1”;

update stu set name=“熊大” where status=“0”;

查看表时 这个数据不显示;

安全机制:

开启安全模式 set sql_safe_updates = 1;

关闭安全模式 set sql_safe_updates = 0;

若服务重启不来,可以修改文件:

vim /usr/local/mysql/init-file.sql

创建表

create table stu(

id int,

name varchar(32),

gender enum(‘M’,‘F’,‘N’),

birthday date

);

注释:enum可选的意思;

规范:关键字需要大写;如下:

CREATE TABLE user_info (

id int(10) unsigned NOT NULL AUTO_INCREMENT,

name varchar(30) COLLATE utf8mb4_bin NOT NULL,

sex enum('女','男') COLLATE utf8mb4_bin NOT NULL,

birythday date NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

关键字:

# 约束条件

行级约束

  1. unsigned 无符号,数字没有负数

  2. not null 数据不能为空

  3. auto_increment 自动增长

  4. collate utf8mb4_bin 排序规则 字符集 数字 -> 文字

  5. primary key 主键(主关键字),不能为空,唯一

  6. unique Key 唯一约束、唯一索引

  7. foreign key 外键约束,用于多表关联

    表级约束

    1.engine 数据库查询MySQL8引擎默认为InnoDB(支持事务,安全性高)

    2.charset 设置字符集

    3.collate 设置字符排序规则

create database yun4;

use yun4;

create table user_info( id int unsigned auto_increment primary key, name varchar(32) not null, sex enum("M","F","N") default "N", birthday date not null )engine=Innodb default charset utf8mb4;

alter table user_info add group varchar(10);

insert into user_info(name, sex, birthday, group) values ("唐僧", "M", "1000-1-1", "西游"), ("孙悟空", "M", "1000-2-1", "西游"), ("猪八戒", "M", "1000-3-1", "西游"), ("白骨精", "N", "1000-4-1", "西游"), ("女儿国王", "F", "1000-4-1", "西游"), ("曹操", "M", "1000-5-1", "三国"), ("刘备", "M", "1000-6-1", "三国"), ("貂蝉", "F", "1000-7-1", "三国"), ("诸葛亮", "M", "1000-8-1", "三国"), ("关羽", "M", "1000-9-1", "三国"), ("赵云", "M", "1000-10-1", "三国"), ("宋江", "M", "1200-1-1", "水浒"), ("武松", "M", "1200-1-2", "水浒"), ("潘金莲", "F", "1200-3-2", "水浒"), ("扈三娘", "F", "1200-3-3", "水浒"), ("李逵", "M", "1200-3-4", "水浒"), ("林冲", "M", "1200-3-4", "水浒"), ("林妹妹", "F", "1600-3-7", "红楼"), ("贾宝玉", "M", "1600-2-7", "红楼"), ("薛宝钗", "F", "1600-1-7", "红楼") ;

desc user_info;

select * from user_info where sex!="M";

insert into user_info(name,sex,birthday) values(小李”,“M”,“1973-07-17”),(“小王”,“F”,“1975-07-17”);

DQL数据查询语言

比较查询:

查询id=3的数据:

select * from 表名 where id=3;

查询id不等于2的数据:

select * from 表名 where id!=2;

查询年份:

select * from user_info where birthday > “1000-01-01”;

select * from user_info where birthday between “1000-01-01” and “1000-02-02”;

create table class(

id int primary key auto_increment,

name varchar(20),

sex enum(‘N’,‘M’,‘F’)

)engine=Innodb default charset utf8mb4;

范围 数字、日期

select * from student where birthday between '2003-01-01' and '2003-12-31';

in

select * from student where id in (1,3,5);

and &&

select * from student where id in (1,3,5) and sex='女';

or ||

select * from student where id in (2,4) or sex='女';

not !

select * from student where id not in (2,4); select * from student where not sex='女';

is null

select * from student where birthday is null;

is not null

select * from student where birthday is not null;

升序(小 -> 大)

select * from student order by birthday;

降序(大 -> 小)

select * from student order by birthday desc;

分页 limit

select * from student limit 0,2;

select * from student limit 2,2;

模糊查询

like

select * from student where name like '武%';

select * from student where name like '%郎';

select * from student where name like '%三%';

查询表中数据的数量

select count(*) from product;

逻辑查询

1.and / &&

与操作,全部满足

2.or / ||

或操作,满足一个

3.not / !

非操作,不满足的

排序查询

order by 列名 desc;

  • desc 降序排序,从大到小;

  • asc 升序排序,从小到大;

    例:select * from product order by price desc limit 1;

image-20240306113149309

分页查询

limit 数据量大的时候,可以使用分页查询;

limit 4,5 从第4行之后获取5条数据;

limit 10;从开头获取10条数据;

例1:查询表中前5条数据

select * from product limit 5;

image-20240306160845832

例2:按降序查询表中前5条数据;

select * from product order by id desc limit 5;

image-20240306161104975

聚合函数
函数名简介
count()查询数量或次数
max()最大值
min()最小值
avg()平均值
sum()求和

例:

count() select count(*) as '学生人数' from student where sex='女';

  • max()

select max(grade) from score;

  • min()

select min(grade) from score;

  • avg()

select avg(grade) from score;

  • sum()

select sum(grade) from score;

多表查询

指两个或更多个表一起完成查询操作;前提:表与表之间有联系;

主键

主关键字,同一张表中必须是唯一的(不能重复),不能为空

primary key(id) 主键约束 唯一性和完整性 添加数据时不满足条件会报错;

外键:

用于外表关联时,保证数据的完整性和有效性、一致性。

  1. 外键关联的必须是其他表的主键;

  2. 外键数据存储的类型必须和关联的数据的类型一致。

多表联查例题:

*表一:student

<span style="background-color:#f8f7e9"><span style="color:black"> ​
 CREATE TABLE <span style="color:#009900">`student`</span> (
   <span style="color:#009900">`id`</span> int(10) unsigned NOT NULL AUTO_INCREMENT,
   <span style="color:#009900">`name`</span> varchar(30) COLLATE utf8mb4_bin NOT NULL,
   <span style="color:#009900">`sex`</span> enum(<span style="color:#aa1111">'男'</span>,<span style="color:#aa1111">'女'</span>) COLLATE utf8mb4_bin NOT NULL,
   <span style="color:#009900">`birthday`</span> date DEFAULT NULL,
   PRIMARY KEY (<span style="color:#009900">`id`</span>)
 ) <span style="color:#0000ff">ENGINE</span><span style="color:#981a1a">=</span>InnoDB DEFAULT <span style="color:#0000ff">CHARSET</span><span style="color:#981a1a">=</span>utf8mb4;
 ​</span></span>

表一:插入数据

<span style="background-color:#f8f7e9"><span style="color:black"> INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (1, <span style="color:#aa1111">'武大郎'</span>, <span style="color:#aa1111">'男'</span>, <span style="color:#aa1111">'2000-1-1'</span>);
 INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (2, <span style="color:#aa1111">'李二牛'</span>, <span style="color:#aa1111">'男'</span>, <span style="color:#aa1111">'2001-2-2'</span>);
 INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (3, <span style="color:#aa1111">'张三丰'</span>, <span style="color:#aa1111">'男'</span>, <span style="color:#aa1111">'2002-3-3'</span>);
 INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (4, <span style="color:#aa1111">'黄四郎'</span>, <span style="color:#aa1111">'男'</span>, <span style="color:#aa1111">'2003-4-4'</span>);
 INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (5, <span style="color:#aa1111">'武则天'</span>, <span style="color:#aa1111">'女'</span>, <span style="color:#aa1111">'2004-5-5'</span>);
 INSERT INTO <span style="color:#009900">`student`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>, <span style="color:#009900">`sex`</span>, <span style="color:#009900">`birthday`</span>) VALUES (6, <span style="color:#aa1111">'燕小六'</span>, <span style="color:#aa1111">'男'</span>, NULL);</span></span>

表二:课程表 course id name

<span style="background-color:#f8f7e9"><span style="color:black"> create table course(
     id   tinyint unsigned primary key auto_increment,
     name varchar(30) not null
 ) <span style="color:#0000ff">engine</span><span style="color:#981a1a">=</span>InnoDB default <span style="color:#0000ff">charset</span><span style="color:#981a1a">=</span>utf8mb4;</span></span>

表二:插入数据

<span style="background-color:#f8f7e9"><span style="color:black"> INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (1, <span style="color:#aa1111">'Python'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (2, <span style="color:#aa1111">'Java'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (3, <span style="color:#aa1111">'C'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (4, <span style="color:#aa1111">'MySQL'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (5, <span style="color:#aa1111">'Docker'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (6, <span style="color:#aa1111">'Hadoop'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (7, <span style="color:#aa1111">'Linux'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (8, <span style="color:#aa1111">'PHP'</span>);
 INSERT INTO <span style="color:#009900">`course`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`name`</span>) VALUES (9, <span style="color:#aa1111">'OpenStack'</span>);</span></span>

表三: 成绩表 score id sid cid grade

<span style="background-color:#f8f7e9"><span style="color:black"> create table score(
     id    int unsigned primary key auto_increment,
     sid   int(10) unsigned,
     cid   tinyint unsigned,
     grade decimal(5,1),
     foreign key(sid) references student(id),
     foreign key(cid) references course(id)
 ) <span style="color:#0000ff">engine</span><span style="color:#981a1a">=</span>InnoDB default <span style="color:#0000ff">charset</span><span style="color:#981a1a">=</span>utf8mb4;</span></span>

表三:插入数据

<span style="background-color:#f8f7e9"><span style="color:black"> INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (1, <span style="color:#116644">1</span>, <span style="color:#116644">1</span>, <span style="color:#116644">77</span>.0);
 INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (2, <span style="color:#116644">1</span>, <span style="color:#116644">2</span>, <span style="color:#116644">66</span>.0);
 INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (3, <span style="color:#116644">1</span>, <span style="color:#116644">3</span>, <span style="color:#116644">88</span>.0);
 INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (4, <span style="color:#116644">2</span>, <span style="color:#116644">1</span>, <span style="color:#116644">90</span>.0);
 INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (5, <span style="color:#116644">2</span>, <span style="color:#116644">2</span>, <span style="color:#116644">80</span>.0);
 INSERT INTO <span style="color:#009900">`score`</span> (<span style="color:#009900">`id`</span>, <span style="color:#009900">`sid`</span>, <span style="color:#009900">`cid`</span>, <span style="color:#009900">`grade`</span>) VALUES (6, <span style="color:#116644">2</span>, <span style="color:#116644">3</span>, <span style="color:#116644">60</span>.0);</span></span>

查询:

<span style="background-color:#f8f7e9"><span style="color:black"> SELECT
     sc.id AS <span style="color:#aa1111">'编号'</span>,
     stu. NAME AS <span style="color:#aa1111">'姓名'</span>,
     co. NAME AS <span style="color:#aa1111">'课程名'</span>,
     sc.grade AS <span style="color:#aa1111">'成绩'</span>
 FROM
     score AS sc,
     course AS co,
     student AS stu
 WHERE
     sc.sid <span style="color:#981a1a">=</span> stu.id
 AND sc.cid <span style="color:#981a1a">=</span> co.id;</span></span>

交叉连接(笛卡尔积):可以将两个毫无关系的表格产生联系;

连接查询(join on):

内连接:只查询多张表中有关联的数据;

外连接:

左(外)连接:以左侧为主表显示所有数据,右侧表中只显示和左表右关联的数据,右侧表无关联则显示NULL;

右(外)连接:以右侧为主表显示所有数据,左侧表中只显示和右表有关联的数据;

union 多表联查;

select * from a表 union select * from b表 union select * from c表;

子查询

(查询套着查询)

想查看6-10条(去掉前五条的前五条)

select top 5 * from lz.grade where id not in (select top 5 id from lz.grade;

事务ACID原则

  • 事务就是将一组SQL语句放在同一批次内去执行

  • 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行

  • MySQL事务处理只支持InnoDB和BDB数据表类型

A:原子性(Atomic);

C:一致性(Consist)

I:隔离性(Isolated)

D:持久性(Durable)

mysql备份和恢复

备份命令

mysqldump 是MySQL自带的备份命令

mysqldump备份步骤
<span style="background-color:#f8f7e9"><span style="color:black"> 操作步骤:
 备份<span style="color:#981a1a">---</span>如何检测是否备份?删库<span style="color:#981a1a">--</span>建库<span style="color:#981a1a">--</span>切换库<span style="color:#981a1a">--</span>执行sql文件
 <span style="color:#999977">[</span>root<span style="color:#0055aa">@db01</span> ~<span style="color:#999977">]</span><span style="color:#aa5500"># mysqldump -u root -p yun4 > yun4.sql</span>
 <span style="color:#999977">[</span>root<span style="color:#0055aa">@db01</span> ~<span style="color:#999977">]</span><span style="color:#aa5500"># mysql -u root -p123</span>
 ​
 MariaDB <span style="color:#999977">[(</span>none<span style="color:#999977">)]</span><span style="color:#981a1a">></span> <span style="color:#770088">drop</span> <span style="color:#770088">database</span> yun4;
 MariaDB <span style="color:#999977">[(</span>none<span style="color:#999977">)]</span><span style="color:#981a1a">></span> <span style="color:#770088">create</span> <span style="color:#770088">database</span> yun4;
 MariaDB <span style="color:#999977">[(</span>none<span style="color:#999977">)]</span><span style="color:#981a1a">></span> <span style="color:#770088">use</span> yun4;
 MariaDB <span style="color:#999977">[</span>yun4<span style="color:#999977">]</span><span style="color:#981a1a">></span> <span style="color:#3300aa">source</span> yun4<span style="color:#0055aa">.sql</span>
 ​</span></span>

备份压缩

<span style="background-color:#f8f7e9"><span style="color:black"> mysqldump -uroot -p  yun4| gzip > yun4> yun4.sql.gz
 ​
 ### 添加备份时间
 mysqldump -uroot -p yun4 |gzip > yun4-`date +%Y-%m-%d-%H-%M-%S`.sql.gz</span></span>

备份同个库多(单)个表

<span style="background-color:#f8f7e9"><span style="color:black">  mysqldump <span style="color:#981a1a">-</span>uroot <span style="color:#981a1a">-</span>p  yun4 <span style="color:#981a1a">--</span><span style="color:#770088">tables</span> user_info <span style="color:#981a1a">></span> user_info<span style="color:#0055aa">.sql</span></span></span>

同时备份多个库

<span style="background-color:#f8f7e9"><span style="color:black"> mysqldump <span style="color:#981a1a">-</span>uroot <span style="color:#981a1a">-</span>p <span style="color:#981a1a">--</span><span style="color:#770088">databases</span> yun4  <span style="color:#981a1a">--</span><span style="color:#770088">databases</span> mysql <span style="color:#981a1a">--</span><span style="color:#770088">databases</span> test  <span style="color:#981a1a">></span> demo<span style="color:#0055aa">.sql</span></span></span>

备份所有数据库

<span style="background-color:#f8f7e9"><span style="color:black"> mysqldump <span style="color:#981a1a">-</span>uroot <span style="color:#981a1a">-</span>p <span style="color:#981a1a">--</span><span style="color:#770088">all</span><span style="color:#981a1a">-</span><span style="color:#770088">databases</span>  <span style="color:#981a1a">></span> <span style="color:#770088">all</span><span style="color:#0055aa">.sql</span></span></span>

备份数据库结构,不备份数据

<span style="background-color:#f8f7e9"><span style="color:black">  mysqldump -uroot -p --no-data  yun4  > yun4.sql</span></span>

还原数据(执行sql脚本)

<span style="background-color:#f8f7e9"><span style="color:black"> # 方法一
 ##1.进入数据库
 mysql -uroot -p
 ##2.执行SQL文件
 source yun4.sql
 ​
 # 方法二
 ## 不进入数据库恢复
 mysql -uroot -p yun4 < yun4.sql
 ## 恢复所有数据
 mysql -uroot -p < all.sql</span></span>
XtraBackup

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

  • 数据量非常大可以用它;

  • 全量备份和恢复数据库,速度很快;

  • 增量备份和恢复,主从时,从服务器可以当作备份;

  • 热备(主库开机时备份数据);

  • 冷备(关闭mysql服务进行备份)。

xtrabackup是percona开源的mysql物理备份工具。

xtrabackup 8.0支持mysql 8.0版本的备份和恢复;

xtrabackup-80-8.0.12支持MySQL8.0.20;

xtrabackup 2.4支持mysql 5.7及以下版本的备份和恢复。

安装Xtrabackup

<span style="background-color:#f8f7e9"><span style="color:black"> # 安装Percona yum存储库
 yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
 ​
 # 启用Percona Server 8.0存储库
 percona-release enable-only tools release
 percona-release setup ps80
 ​
 # 安装依赖环境
 yum -y install  libev perl-DBD-mysql perl-Digest-MD5 epel-release
 ​
 # 安装
  yum -y install percona-xtrabackup-80-8.0.12
 ​
 # 安装成功后测试版本
 xtrabackup --version
 ​
 #如果成功安装,则会显示Xtrabackup的版本信息。
 #安装完成后,我们就可以使用Xtrabackup进行MySQL数据库备份和恢复操作了。</span></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值