当前位置:网站首页 > Vue.js开发 > 正文

redhat linux 7.2系统安装详细过程(怎么安装redhat linux)



前提:1虚拟机工作环境    2镜像文件准备好   3基础网络配置

安装虚拟机: 1创建虚拟机--挂载镜像   2开机【直接进入bios的开机方式】   3鼠标选择配置

4重启主机看效果

步骤:将前提准备好打开虚拟机【点击创建新的虚拟机】1选择典型安装或者自定义都可以

2点击安装程序光盘映像文件   

3下一步选择Linux客户机操作系统“版本选择不重要选哪个都可以”

   

4命名虚拟机及选择安装位置

 5磁盘空间200G的单个文件           完成开机!!!!

进入系统之后会有选择按照自己的需要配置。

加*是重点命令需要熟练使用

2.1.1设置root密码

Ubuntu系统可能没有root超级用户面对这样的情况就得创建root用户并设置root用户密码

sudo passwd root设置root用户密码

[sudo] password for ubuntu:这里输入当前普通用户密码

New password:这里输入想要设置的root用户密码

Retype new password:再次确认密码

2.1.2 linux登陆方式

linux是一个多任务,多用户的开源客户端可以用命令行登录和图像化登录,也可以用虚拟终端登录

在linux里面有两类用户一个是超级用户,一个是普通用户。管理员用户是有权限的普通用户

管理员角色是一个用户组      超级用户root   普通用户是自己装机时创建的用户

0-999是特殊用户

查看当前主机的ip地址

ip a

当前地址是10.0.0.100

2.1.3 whoami 查看当前系统用户是谁

whoami 查看当前用户是谁

用眼睛就可以看到鸡肋命令

 2.1.4 su 切换用户

su   切换用户 

普通用户切换到root用户需要密码---root切换普通不需要

 参数:

-  不带上一个用户的记忆切换

不带记忆切换到Ubuntu查看是谁,退出进入root,带着记忆进Ubuntu再输入exit会出现root输入的exit

 2.1.5 exit 退出

 exit  退出 

退出了Ubuntu用户

 2.1.6 tty 查看当前所在终端

tty 查看当前所在进程

伪终端

2.1.7 shell  命令解释器

 我理解为翻译官将我们打的命令解释给操作系统   shell存在两种操作方式命令行和脚本文件。

脚本命令中第一行是命令解释器#!/bin/bash  其他的是可以成功执行的命令

root@ubuntu:~# vim a.sh                    编辑一个a.sh的文件
root@ubuntu:~# cat a.sh                     查看a.sh
#!/bin/bash                                             
echo $SHELL
echo hahah1
echo hahah2
echo hahah3
root@ubuntu:~# /bin/bash a.sh            用/bin/bash命令解释器运行a.sh文件
/bin/bash
hahah1
hahah2
hahah3
 











vim编辑的a.sh文件的内容

echo $SHELL   查看当前系统的shell类型

cat /etc/shells   查看当前系统的shell类型

三个解释器sh和dash   rbash

更改系统默认shell

root@ubuntu:~# chsh ubuntu -s /bin/sh   修改Ubuntu默认dashe为sh
root@ubuntu:~# echo $SHELL                查看当前shell类型
/bin/bash                                                  
root@ubuntu:~# su ubuntu                      切换到Ubuntu用户
$ echo $SHELL                                        查看当前shell类型
/bin/sh
$ exit                                                         退出
 






 

 2.1.8 echo 输出

 echo 输出

选项

-n   不要在最后自动换行

-e    要是字符出现选项字符,则特别加以处理,而不会将他当成一般文字输出

     换行且光标移至行首

输出12345

 echo $变量名获取变量名

 

 2.1.9 chsh 允许用户更改其登录shell

shell 有很多种

bash

tcsh

sh

csh

 

 2.2.1 useradd创建用户

useradd  创建用户

选项

-m

 

 2.2.2 PS1 修改默认变量

 PS1 修改默认变量

选项

h   显示简写的主机名,如默认主机名localhost

示当前用户

W  显示当前所在的目录的最后一个目录

 

2.2.3 ls 显示当前目录下的文件

 ls   查看当前目录下的文件

选项

-a    将所有隐藏文件显示出来

 2.2.4 命令查看帮助

---help     查看命令选项

help         查看内部命令

whereis   查看命令是否在,若在显示命令存放位置

which      查看命令是否存在,若存在显示第一个显示的位置

man        查看命令帮助

 2.2.5关机与重启的选项

关机:halt     poweroff       shutdown     -hnow

重启:reboot       shutdown - r

2.2.6   ubuntu让root用户远程登陆

1.给root设密码        sudo  passwd  root

2切换到root用户      su - root或者sudo -i

3安装ssh服务          apt  install  openssh-server

4允许root登录          grep /etc/ssh/sshd_config      vim编辑 /etc/ssh/sshd_config 下方图片中#开头这段话改为yes

5重启服务                systemctl restart ssh

 

2.2.7软件的安装

安装用install

移除用remove

yum install适用于rocky  以及国产系统

yum 将会被dnf 取代操作方式是一样的

apt install适用于Ubuntu系统中

2.2.8查看用户各种信息

whoami 查看当前登录用户 

id           显示用户的身份标识信息

pwd       在哪里                                             *

who        显示当前登录系统的用户               *                              红色常用

w           查看当前用户的启动程序信息

last        显示上次登陆的用户列表信息

2.2.9查看系统信息

cpu                            命令lscpu              文件/proc/cpuinfo

mem                          命令free                文件/proc/meminfo          *

磁盘分区                    命令lsblk df          文件/proc/partitions         *

磁盘设备                    命令blkid                                                       

系统架构                    命令arch

内核信息                    命令uname -r         

操作系统发行版本     文件                       文件/etc/os-release[rocky操作系统]

2.3.1 history历史命令

history用过的命令

选项

!                   加命令编号快速执行命令

CTRL+R         输入命令前几个字母和TAB键差不多

-c                    清除历史命令

 2.3.2 pstree 会话管理

pstree   查看当前系统里的所有进程                  参数     -p

 

 screen /  tmux   会话解绑

screen  -s创建一个独立的会话后面加会话名

screen   -ls查看创建的会话

screen   -X加丢失的会话名字找回会话

2.3.3 printf 格式

 家目录 /root/home/

配置目录 /etc

命令目录 /bin  /sbin

临时目录/tmp

根   /

当前目录   .

上一级目录  https://blog.csdn.net/2301_/article/

家目录    ~

 各目录相关的文件

 

 系统相关的目录

/boot    存放着启动Linux时使用的一些核心文件

/etc       存放所有的系统管理所需的配置文件和子目录

/lib         存放着系统最基本的动态连接共享库

/sys        存放着2.6内核3种文件信息

 命令相关的目录

/bin            存放着常用命令

/sbin           存放着系统管理员使用的系统管理程序

/usr/bin        存放着系统用户使用的应用程序

/usr/sbin       存放着超级用户使用的比较高级的管理程序和系统守护程序

 程序相关的目录

/proc           存放着 当前内核运行的一些文件

/srv             存放着服务启动之后需要提取的数据 

/usr/src        存放着用户的很多应用程序和文件

/avr              存放着不断扩充着的东西

/run              存放着喜用启动以来的信息

/usr/share     存放着应用程序的帮助所在文件

 其他相关的目录

/lost+found    一般是空的系统非法关机后存放着一些文件

/opt                是给主机额外安装软件所摆放的额目录

/selinux          安全机制目录

/tmp                存放临时文件

/run                 运动目录

/var                 变动文件目录

 文件的操作和信息获取

查看文件

ls          目标目录位置

ls -a       查看隐藏文件

ls  -l        显示额外信息

ls  -R      查看所有目录文件信息

ls  -ld       目录和符号链接信息

tree       目标目录位置      查看大目录  -L

创建目录

mkdir    目标位置              选项  -p  递归创建目录

创建文件

touch     文件名

切换目录

cd          目标目录位置

.              当前目录

..            上级目录

-              回到之前目录月光宝盒

查看当前所在路径

pwd   查看当前所在位置

-p       显示当前工作目录的物理路径解析所有符号链接到他们的指向位置

-L       显示当前工作目录的逻辑路径,包含符号链接的路径

 3.1.1 文本编辑工具vi/vim

 vim与vi是相同的只不过vim有颜色

  

3.1.2 不同系统之间文件转换 

dos2unix文件转换

 3.1.3 正则符号

*           匹配任意字符不包括 “.” 开头的文件

{a..z}     表示a到z所有字符

[a-z]      表示a到z范围里的一个字符

[^a-b]    表示a到b以外的字符

?          隐藏文件匹配任意一个字符一个汉字也算一个字符

~           表示当前家目录

.*           表示所有字符

  [ ]    筛选范围中的一个字符

  { }    范围中的所有字符

()   临时的shell空间

 3.1.4 cp拷贝

 3.1.5 转移和改名

3.1.6  rename 改名

rename  文件改名

rocky系列改名方式如下

 

 Ubuntu改名方式如下

 3.1.7 ln 硬链接和软连接

ln        创建硬链接   硬链接所有信息相同inode号也一样,删除源文件inode号不胡会消失

ln -s    创建软链接   软链接只是目标文件指向源文件所有信息和inode号都不同,删除源文件对目标文件没有什么影响 

readlink 链接文件

 硬链接方式inode号一样其他内容也一样,不支持目录硬链接 

 软链接与硬链接不同inode号不相同查看nihao2时其实查看的是nihao1的内容

3.1.8 stat 查看文件状态

stat 查看文件状态

获取文件访问时间

修改文件时间

最后一次更改文件时间

inode号等各种信息

 3.1.9 file 查看文件类型

file 和 ll  命令效果一样

3.2.1 rm 删除文件

rm  -f       删除普通文件

rm  -rf      删除目录及所有文件

 3.2.2  vim /  vi编辑工具

vim / vi 写文件

i  按i键开始编辑

ese  键退出编辑模式

:加 w 保存

:加 q 不保存退出

:加 wq 保存退出

!强制执行

!可以与q / w / qw 任意组合使用

 3.2.3 管道符

 >         表示将左面的内容以覆盖的方式输出给右面

<          表示将右面的内容以覆盖的方式输出给右面 

>>        表示将左面的内容以追加的方式输出给右面

<<        表示将右面的内容以追加的方式输出给右面

|           表示将左面输出的结果传递给右面使用

| grep   过滤信息

 3.2.4将成功命令与不成功命令分别装到不同的文件夹

1>   文件名

2>   文件名

1     代表成功命令

2     代表错误命令

2&>1  代表所有输出信息

 3.2.5 特殊文件

特殊文件  /dev/null    垃圾桶无限容量

 3.2.6 临时shell

临时shell

 (命令列表)在shell里执行命令列表,退出shell后,不影响后续环境操作

临时shell环境---不启动子shell

   {命令列表}   在shell里执行命令列表,会影响当前shell的后续环境操作

()使用场景,临时划分一个独立的shell环境,安全相关的命令处理,比如加密解密场景

 

 3.2.7 EOF重定向

eof  大写小写都一样只要统一就好

 

3.2.8 tee 重定向

tee   选项   -a

tee "文件" <<-eof 和  cat "文件" <<-eof     效果一样

tee 命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中,tee命令可以重定向标准输 出到多个文件。要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取

 3.2.9 read 

 read -p "提示信息"  变量名

 加 -t  指定时间   指定时间内不输入自动结束

拆解两个变量 read 

 

指定时间内不输入自动结束

 3.3.1 tr 替换

tr 用于替换字符

3.3.2 alias定义别名

 alias     定义别名

unalias  取消别名

 3.3.3 软件的安装

 dnf makecache   更新软件源

 dnf search nginx   搜索软件

 dnf remove -y nginx    删除软件

 dnf install -y nginx   安装软件

 3.3.4查看文件系统磁盘使用情况

 df -h    查看存储空间

 df -i      查看inode号使用情况

4.1.1配置文件

/etc/passwd:用户及其属性信息(名称、UID、主组ID等)

sswang:x:1000:1000:sswang:/home/sswang:/bin/bash

用户名:密码:UID:GID:描述信息:宿主目录:命令解释器

/etc/shadow:用户密码及其相关属性

root:$6$VftC9gu7HNAEIc79$VdxTdcGlQFjiP.RdyZG6js7fHnzj3WDIDb3v6JGqyD1zhh6Rw/J1ik7 M06UFNhZ9ihxjIiKpBwz2UEYc8pOsa.::0:99999:7:::

用户名:密码:最后修改时间:最小时间间隔:最大时间间隔:警告时间:账号闲置时间:失效时间:标志

/etc/group:组及其属性xiang

root:x:0:

组名:组密码:GID:组内用户列表
 

/etc/gshadow:组密码及其相关属性

root:::

组名:组密码:管理员:组内用户列表

4.1.2 vipw|vigr及pwck

命令用于编辑/etc/passwd,/etc/group,/etc/shadow,/etc/gshadow

vipw 默认编辑 /etc/passwd 文件

vigr 默认编辑 /etc/group 文件

常见选项:  

-g |--group #编辑 group 文件    

-p |--passwd #编辑 passwd 文件  

-s |--shadow #编辑 /etc/shadow 或 /etc/gshadow 文件

 pwck

对用户相关配置文件进行检查,默认检查文件为 /etc/passwd     自动找到错误内容并询问是否修改

选项    

- q      只报告错误,忽略警告    

- r       显示错误和警告,但不改变文件    

- R     chroot 到的目录    

- s      通过 UID 排序项目

4.1.3 groupadd命令可以创建用户组

命令格式  groupadd  加要创建的组名

getent group 加组名    查看用户组

选项

- g     指定id建组

- r      指创建系统用户组

- f      已有组强制创建用户组

 4.1.4 groupmod命令用于修改group属性

groaddmod  选项   要改的组号  要改的组

选项

- g    修改组号

- n    修改组名

 4.1.5 groupdel命令可以删除用户组

选项

- f     强制删除

 4.1.6 id用于查看用户的基本信息

选项    

- d       查看默认的配置属性    useradd -D

- u       指定UID                       id uid

- g       指定用户组                  id gid

 4.1.7 useradd 命令可以创建新的Linux用户

useradd 加想创建的用户

选项

- m    创建用户默认会添加一个组

- g     指定组号创建用户

4.1.8  getent shadow查看用户密码信息

getent shadow 加想查看的用户名

第一部分: 指定加密算法 $6

第二部分: 指定二次校验选项 - salt 盐值 $cKdUJegv4ahdu0CD

第三部分:通过 加密算法(salt值 + 密码) 加密后的一段字符串 

4.1.9 crypt 主要用于加密和解密文件或密码

whatis crypt  查看生成密码的算法解读

man 5 crypt     man手册查看

根据密码提示,生成对应的passwd密码:

openssl passwd -salt  相同的盐值    加密算法编号    密码

 4.2.1 passwd修改密码

 命令使用

passwd 用户名

在root用户下修改可以忽略无效的密码: 密码少于 8 个字符

 4.2.2 chpasswd 更改用户命令

使用方法 chpasswd < 写一个文件

文件格式:用户名:密码

                  u1:

 4.2.3 usermod命令用于进行用户属性的修改动作

 使用方法:  

usermod 选项  想改的名字  要改的名 

修改shell       usermod  -s  要改的shell  -d    /home/要改的家目录名字    原来的名字

选项

- l   更改用户名字

- s  更改用户登录shell以及用户家目录 

- L  禁用用户

- U 解禁用户

 

 4.2.4 userdel 对用户删除

 命令格式   userdel 选项  目标

- f   强制删除

 -r    

 

 4.2.5 chage修改 密码策略

使用方法   chage  选项   目标

选项

- l   查看当前密码策略

 4.2.6 gpasswd 更改组成员密码

使用方法   gpasswd   选项    用户

选项

- a   将用户添加到一个指定的组里面

- d   将用户从组中删除

默认 : gpasswd 加组名 修改组密码

 groups查看属主属组

使用方法 groupps  加用户名

 

 4.2.7 groupmems 管理附加组成员信息

使用方法 groupmems  动作   组     选项

- g   指定组

- l    查看组成员列表

- d   从组中删除指定用户

- a    将用户添加到组内

 4.2.8 groups  查看用户组关系

 4.2.9 用户登录配置文件/etc/login.defs

 4.3.1 查看创建用户的配置文件 /etc/default/useradd

4.3.2 定制用户基本配置属性

定制用户基本配置属性

[root@rocky9 ~]# ls /etc/skel/

注意: 该目录保存了创建新用户后需要拷贝到 /home 目录下所需的相关文件。

 4.3.3 定制用户登录的显示页面

用于设置用户登录系统后显示给用户的提示信息,该文件默认为空。

[root@rocky9 ~]# cat /etc/motd

文件权限解读 

rwx  rwx   rwx       对应数字  421  421   421          - 为 0        

第一组rwx对应属主u      第二组rwx对应属组g       第三组rwx对应其他人o

r 读     w 写      x 执行

默认创建的文件权限是 644,也就是说,谁都可以读去文件内容  默认不是可执行文件

默认创建的目录权限是 755,也就是说,谁都可以进入目录查看  默认没有写权限

如果修改umask掩码 还是会按照默认状态创建如umask换成123那么

文件权限应该是 6 2 4

目录权限应该是7 5 5

 操作示例:    

u+r # 属主加读权限    

g-x # 属组去掉执行权限  

ug=rx # 属主属组权限改为读和执行  

o= # other用户无任何权限    

a=rwx # 所有用户都有读写执行权限  

u+r,g-x # 同时指定

4.3.4 chown 修改文件属主属组

使用方法   chown 要变成的用户或id号   文件名

选项

- R       批量修改将一个目录下所有文件修改

用户名后加   :        同时修改属主属组

通过用户id的方式修改文件归属

只修改所有者属性

[root@rocky9 ~]# chown sswang chown/a.txt

同时修改所有者和归属组的属性

[root@rocky9 ~]# chown sswang. chown/b.txt # . 的这种方式,虽然管用,但是不推 荐

 

 4.3.5 chmod  修改文件操作权限

使用方法   chomd   指定u/g/o加或减权限   文件名      或777这样指定权限 

选项

- R     递归操作

+        加权限

-         减权限

a         等于ugo

u+rwx或7  是加属主权限

g+rwx或7  是加属组权限

o+rwx或7  是加其他用户权限

 4.3.6 umask修改查看文件创建掩码

 使用方式 umask 加选项   或直接输入值

选项

- p    如果省略 MODE 模式,以可重用为输入的格式输入

- S    以字符显示

 4.3.7 特殊权限

在Linux文件系统中,除了基本的读(r)、写(w)、执行(x)权限外,还存在三种特殊权限,它们分 别是SUID(Set User ID)、SGID(Set Group ID)和Sticky Bit。这些特殊权限用于在特定情况下提 供更灵活的权限控制。

1.SUID权限设置在可执行文件上时,让其他用户拥有为文件所有者的权限       

u+s

2. SGID权限可以应用于可执行文件或目录。其他用户在下面创建文件目录会变成所有者的组

g+s

3. Sticky Bit权限仅对目录有效。当一个目录被设置为Sticky Bit时,其他用户只能查看其他都不可以   但是文件所有者和root用户除外

o+t

 4.3.8 chattr 改变文件目录扩展属性

使用方法    +-=    选项  文件名字

选项

- p

- R

- V

- f

- v

动作

+表示添加属性,-表示移除属性,=表示设置唯一属性,覆盖其他所有属性。

常用属性    

a:只允许追加数据,不能删除或修改文件内容。    

i:设置文件为不可修改,即不能删除、重命名、修改内容或添加链接。    

s:同步写入磁盘,修改立即生效,而非默认的非同步方式。    

u:当文件被删除时,其内容仍保留在磁盘上,直到空间被其他文件覆盖。    

A:访问文件时不更新访问时间。  

c:自动压缩文件。    

d:防止目录被dump备份。

这些属性可以增强文件的安全性,防止被意外修改、删除 或重命名。

+a只能追加内容其他都干不了

 4.3.9 lsattr命令用于查看文件或目录的扩展属性

使用方法  lsattr  选项   文件目录名

选项

- a     显示所有文件目录属性包括隐藏文件

- d     如果目标是目录只显示目录本身属性不显示目录内文件属性

- R    递归列出目录及目录下所有目录文件属性 

 4.4.1 ACL权限

5.1.1  vi与vim文本处理

 正常模式-默认模式

进入方式: 打开Vim时自动进入命令模式,或者从其他模式(如插入模式或底行模式)通过按Esc键返回命令模式。

操作示例:

光标移动:使用h、j、k、l键分别向左、下、上、右移动光标(或使用方向键)。

删除字符:按x删除光标所在位置的字符,按dd删除整行。

复制粘贴:使用yy复制当前行,p粘贴到光标所在位置。

编辑模式

进入方式: 从命令模式通过如下按键进入插入模式 - 按 i 在当前光标位置插入 - 按 a 在当前光标位置的下一个字符处插入 - 按 o 在当前光标所在行的下一行插入新行 退出方式: 按Esc键退出插入模式,返回到命令模式                                                                                               

 命令模式

底行模式允许用户执行一些高级的编辑和搜索操作,如文件保存、退出、搜索替换、设置选项等。

进入方式:

从命令模式通过按:(冒号)或/(表示查找)进入底行模式。

退出方式: 按Esc键退出底行模式,返回到命令模式。

操作示例:    保存文件:输入:w保存当前文件,:wq或:x保存并退出Vim    查找替换:输入:/搜索词进行查找,:s/原词/新词/g进行全局替换。    设置选项:输入:set nu显示行号,:set nonu取消显示行号。

编辑实践 

 使用方式 vim  加文件名  选项

+ 打开文件后让光标处于尾行

+N 打开文件后让光标处于第N行的行首,+默认尾行          使用频率最高

+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首

-d file1 file2 同时打开多个文件,相当于 vimdiff       

 qall 同时退出多个文件

 从正常模式进入编辑模式的方法

i         insert, 在光标所在处输入  

I         在当前光标所在行的行首输入  

a        append, 在光标所在处后面输入  

A        在当前光标所在行的行尾输入  

o        在当前光标所在行的下方打开一个新行

O       在当前光标所在行的上方打开一个新行

 查找内容

使用方法正常模式下直接输入

/关键字  从当前光标所在处向文件尾部查找      搜索完第一次继续按/会出现相同关键字回车向上查找

?关键字    从当前光标所在处向文件首部查找    搜索完第一次继续按/会出现相同关键字回车向下查找

n/N相当于上下键

n 与命令同方向

N 与命令反方向

扩展命令

: wq        写入并退出

:  q!      不存盘退出,即使更改都将丢失

下面这些鸡肋可以玩玩

r filename 读文件内容到当前文件中

w filename     将当前文件内容写入另一个文件

!command 执行命令

r!command 读入命令的输

筛选范围

常用属性

M,N                   从左侧M表示起始行,到右侧N表示结尾行

$                        最后一行

%                       全文, 相当于1,$

/pat1/,/pat2/       从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束 其他属性    

N                       具体第N行,例如2表示第2行    

M,+N                 从左侧M表示起始行,右侧表示从光标所在行开始,再往后+N行结束    

M,-N                  从左侧M表示起始行,右侧表示从光标所在行开始,-N所在的行结束    

M;+N                 从第M行处开始,往后数N行,2;+3 表示第2行到第5行,总共取4行    

M;-N                  从第M-N行开始,到第M行结束  

 .                        当前行  

 .,$-1                  当前行到倒数第二行    /pattern/   #从当前行向下查找,直到匹配pattern的第一行,即正则匹配    

/pat1/,/pat2/       从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束    N,/pat/            从指定行开始,一直找到第一个匹配pattern的行结束    

/pat/,$                向下找到第一个匹配patttern的行到整个文件的结尾的所有行

动作演示

:2d          删除第2行    

:2,4d       删除第2到第4行    

:2;+3y     复制第2到第5行,总共4行    

p             将复制的粘贴    

:2;+4w test          将第2到第6行,总共5行内容写入新文件    

:5r /etc/issue       将/etc/issue 文件读取到第5行的下一行    

:t2                       将光标所在行复制到第2行的下一行    

:2;+3t10              将第2到第5行,总共4行::内容复制到第10行之后    

:.d           删除光标所在行    

:$y          复制最后一行

 常用动作

d       删除  

p       粘贴    

y       复制

u       撤销刚才的动作

 

 重点内容替换

使用方法:  s/原内容/替换后内容/修饰符

内容替换方法

:s           /要查找的内容/替换为的内容/修饰符

:%s       表示全文查找替换

修饰符

i             忽略大小写

g           全局替换,默认情况下,每一行只替换第一次出现

gc         全局替换,每次替换前询问

常用示例

从全文替换

    :%s/原内容/替换后内容/g

从当前行到最后一行进行替换

    :,$s/原内容/替换后内容/g

正则匹配内容进行全文替换

     :/关键字/,$s/原内容/替换后内容/g

从第3到第6行内容进行替换

    :3,6s/原内容/替换后内容/g

,  代表当前行

$    代表末尾行

%   代表全文

%s/xxx/xxx/g常用

常用属性 

查看行号  

:set nu             #显示行号    

:set nonu         #取消显示行号

复制保留格式

:set paste              #复制时保留其他系统格式       作用将格式还原回来原样粘贴

:set nopaste          #禁用复制时保留其他系统格式选项

Tab 用空格代替      

:set et                 #使用空格代替Tab,默认8个空格    

:set noet         #禁用空格代替Tab

Tab用指定空格的个数代替    

:set ts=N            #指定N个空格代替Tab

查看帮助    

:help option-list    

:set all

:set cul        表示线

:set nocul    取消标识线

:set ai          启用自动缩进

:set noai      取消自动缩进

:set key=password   设置密码

行首跳转

^         #跳转至行首的第一个非空白字符

0         #跳转至行首

$         #跳转至行尾

行间移动:

:N #跳转至指定行,N表示正整数,比如 10G,或在扩展命令模式下:10,都表示跳转到第10 行

G #最后一行

1G #第一行

当前页跳转:

H #页首    

M #页中间行    

L #页底

命令模式翻屏操作

Ctrl+f #向文件尾部翻一屏,相当于Pagedown

Ctrl+b #向文件首部翻一屏,相当于Pageup

Ctrl+d #向文件尾部翻半屏

Ctrl+u #向文件首部翻半屏

 5.1.2 可视化模式

  ctrl-v(小写) 面向块

1、先将光标移动到指定的第一行的行首

2、输入ctrl+v 进入可视化模式

3、向下移动光标,选中希望操作的每一行的第一个字符

4、输入大写字母 I 切换至插入模式 5、输入 # 6、按 ESC 键

1、光标定位到要操作的地方

2、CTRL+v 进入“可视块”模式,选取这一列操作多少行

3、SHIFT+i(I)

4、输入要插入的内容

5、按 ESC 键

5.1.3  cat 查看文件内容

使用方法:  cat  选项   文件名

选项:

- n          对显示的每一行编号

- s           压缩连续的空行成一行

tac                     逆向显示文件内容

rev                     内容逆向显示,行内容也逆向显示

hexdump           以十六进制方式查看任意文件

 5.1.4 more 分页查看

使用方法: more   选项    文件名

选项:

- d      在底部显示提示

- s       压缩连续空行

常用动作  

空格键         #翻页    

回车键         #下一行    

q                  #退出

其他动作    

!cmd          #执行命令,在查看文档的时候,执行相关的命令  

 h               #显示帮助    

:f                #显示文件名和当前行号  

 =               #显示行号

 *5.1.5  head 可以显示文件或标准输入的前面行

使用方法   head   选项    文件名

常用选项

- n              指定获取后N行,如果写成n3,表示从第1行到3行

一般选项    

-c            指定获取前N字节    

-N           同上    

-q           不输出文件名    

-v           输出文件名    

-z           以NULL字符而非换行符作为行尾分隔符

与tail搭配使用

 5.1.6  tail 和 head 相反,查看文件或标准输入的倒数行

使用方法  tail   选项    文件

常用选项

-n             指定获取后N行,如果写成n3,表示从第1行到3行

一般选项

 -c        指定获取后N字节  

 -N       同上    

 -f        跟踪显示文件fd新追加的内容,常用日志监控,   #当删除再新建同名文件,将无法继续跟踪  

 -F       跟踪文件名,相当于--follow=name --retry,   #当删除文件再新建同名文件,可继续追踪  

 -q       不输出文件名    

 -z       以NULL字符而非换行符作为行尾分隔符

与head搭配使用

 head和tail组合使用

查看/etc/passwd文件中第三行

head -n3 将/etc/passwd 前三行取出  |   交给 tail -n1 将三行中的倒数第一行取出

 5.1.7cut 命令可以提取文本文件或STDIN数据的指定列

使用方法 cut  选项  选项  文件      或  |  cut   选项  选项

常用选项:

- c      选择指定字符

- d      选择指定字符为列分界

必须选项  

-f            指定第几列输出f1是第一列        

--output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入

 

 5.1.8 tr命令实现 字符转换、替换、删除

-c,          首先补足SET1  

-d,           删除匹配SET1 的内容,并不作替换  

-s            如果匹配连续的空格重复,在替换时会被统一缩为一个字符的长度  

-t            先将SET1 的长度截为和SET2 相等     

用法1:把commands命令输出做为tr输入进行处理 commands | tr  'string1'  'string2'

用法2:把文件中的内容输入给tr进行处理 tr  'string1'  'string2' < filename

用法3:把文件中的内容输入给tr进行处理,需要使用到选项 tr options 'string1' < filename

用法4: 删除不匹配的所有内容,仅留下有用的信息 tr -dc [:alnum:]

 总结head  tail  cut   tr 组合使用

ip a查看用户ip   head  -n10输出前十行    tail -n1输出倒数第一行      tr   -s " " 压缩多个空格为一个空格            cut -d " " 将空格作为分隔符       

 5.1.9 sort将相同信息整 |理在一起排序

使用方式   sort 选项  文件

常见选项:    

-u :去除重复行    

-r :降序排列,默认是升序    

-n :以数字排序,默认是按字符排序 其他选项    

其他选项

-o : 将排序结果输出到文件中  类似 重定向符号>    

-t :分隔符    

-k :第N列    

-b :忽略前导空格。    

-R :随机排序,每次运行的结果均不同。

只输入sort可以将相同的内容排在一起

 

 5.2.1 uniq命令 实现连续信息的去重动作

使用方法    uniq   信息

常用选项

空没有

一般选项  

-c, --count           统计重复行次数  

-d, --repeated        只显示重复行  

-i, --ignore-case     忽略大小写  

 

 5.2.2 paste合并文件行内容输出到屏幕,不会改动源文件

使用方法paste  文件一   文件二

-d     列表 改用指定列表里的字符替代制表分隔符  

-s     不使用平行的行目输出模式,而是每个文件占用一行 

 

 5.2.3 xargs命令

使用方式 xargs 选项  文件

选项

 -a       file 从文件中读入作为sdtin    

-E        flag flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。  

-p        当每次执行一个argument的时候询问一次用户。    

-n         num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。    

-t         表示先打印命令,然后再执行。    

-i         或者是-I,将xargs接收的每项名称,逐行赋值给 {},可以用 {} 代替。  

-r         no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。    

-d        delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分 隔符。

 

5.2.4 文本三剑客

1.grep  负责从数据源中检索对应的字符串,行过滤

使用方法  grep 选项  文件名

常见选项:

 -i:          输入要匹配的内容不区分大小写    

-n:          输入要匹配的内容显示匹配到的内容在源文件行号    

-r:           逐层遍历目录查找    

-v:          查找不包含指定内容的行,反向选择

-o:            打印匹配到的关键字    

-E:         使用扩展正则匹配    ^key:以关键字开头    key$:以关键字结尾    ^$:匹配空行

一般选项

-w:           按单词搜索        

-c:            统计匹配到的次数    

-A:           显示匹配行及后面多少行    

-B:           显示匹配行及前面多少行    

-C:           显示匹配行前后多少行    

-l:          只列出匹配的文件名    

-L:         列出不匹配的文件名    

-e:           使用正则匹配

 --color=auto :可以将找到的关键词部分加上颜色的显示

常用命令选项必知必会  示例:

# grep -i root passwd         忽略大小写匹配包含root的行

# grep -w ftp passwd         精确匹配ftp单词

# grep -wo ftp passwd       打印匹配到的关键字ftp

# grep -n root passwd       打印匹配到root关键字的行号

# grep -ni root passwd      忽略大小写匹配统计包含关键字root的行

# grep -nic root passwd    忽略大小写匹配统计包含关键字root的行数

# grep -i ^root passwd      忽略大小写匹配以root开头的行

# grep bash$ passwd       匹配以bash结尾的行 # grep -n ^$ passwd 匹配空行并打印行号

# grep ^# /etc/vsftpd/vsftpd.conf          匹配以#号开头的行

# grep -v ^# /etc/vsftpd/vsftpd.conf      匹配不以#号开头的行 # grep -A 5 mail passwd 匹配包含mail关键字及其后5行

 2 sed基础

使用方法:   sed [参数] ' [动作]' [文件名]

参数:

 参数为空             表示sed的操作效果,实际上不对文件进行编辑,缓存区所有信息都显示    

-n                         不输出模式空间内容到屏幕,即不自动打印所有内容    

-e                         基于命令实现对文件的多点编辑操作    

-f                          从指定文件中读取编辑文件的”匹配条件+动作”    

-r                          支持使用扩展正则表达式    

-i.bak                   复制文件原内容到备份文件,然后对原文件编辑    

-i                          表示对文件进行编辑

-g                         所有内容

匹配条件分为两种:数字行号或者关键字匹配

数字行号: 空 表示所有行          n 表示第n行         $ 表示末尾行

n,m 表示第n到m行内容              n,+m 表示第n到n+m行

~步进 1~2 表示奇数行                2~2 表示偶数行

关键字匹配格式

'/关键字/'    

注意:        

隔离符号 / 可以更换成 @、#、!等符号        

根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。        

/关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容        

n,/关键字2/ 表示从第n行到关键字2所在行之间的内容

/^/dev/sd/p   第一个 / 是匹配的意思   ^开头      转意 /      P打印  打印以/dev/sd 开头的文件

动作详解    

-a[ ext]            在匹配到的内容下一行增加内容,支持 实现多行追加    

-i[ ext]             在匹配到的内容当前行增加内容    

-c[ ext]            在匹配到的内容替换内容    

-d|p                  删除|打印匹配到的内容

-p                     打印匹配到的内容   

-s                     替换匹配到的内容    

W /path/somefile         保存模式匹配的行至指定文件  

r /path/somefile           读取指定文件的文本至模式空间中  

=                      为模式空间中的行打印行号    

!                       模式空间中匹配行取反处理

注意: 上面的动作应该在参数为-i的时候使用,不然的话不会有效果

 

 

编辑“1p/n3p”到 sed_script文件中   再用sed -f 读取sed_script文件中的 条件和动作   
!取反的意思

/sed4/这个内容属于第几行   =  打印行号
指定行替换内容

 sed替换

命令格式:

sed -i [替换格式] [文件名]

源数据 | sed -i [替换格式]

注意:替换命令的写法

's'  --->  's#原内容' ---> 's#原内容#替换后内容#'

隔离符号 / 可以更换成 @、#、!等符号

表现样式:    

样式一:替换指定匹配的内容        

             sed -i '行号s#原内容#替换后内容#列号' [文件名]        

                 echo "源数据" | sed -i '行号s#原内容#替换后内容#列号'    

样式二:替换所有的内容        

             sed -i 's#原内容#替换后内容#g' [文件名]  

                  echo "源数据" | sed -i '行号s#原内容#替换后内容#g'    

样式三: 替换指定的内容  

             sed -i '行号s#原内容#&新增信息#列号' [文件名]  

                  - 这里的&符号代表源内容,实现的效果是 '原内容+新内容'

替换指定匹配内容
加  g  替换所有内容

关于全部替换还有另外一种命令叫直接转换 y

指定第二行内容替换

匹配带有SED的第二列替换

 sed增加操作

追加

作用:

               在指定行号的下一行增加内容

格式:

               sed -i '行号a增加的内容' 文件名

注意:    

              如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如    sed -i '1,3a增加内容' 文件名

 插入

作用:

           在指定行号的当行增加内容

格式:

sed -i '行号i增加的内容' 文件名

注意:    

如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如    sed -i '1,3i增加内容' 文件名

 删除替换

作用:

            指定行号删除 格式: sed -i '行号d' 文件名

注意:  

           如果删除多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如    sed -i '1,3d' 文件名

 

 替换

作用:

          指定行号进行整行替换

格式:

           sed -i '行号c内容' 文件名

注意:  

           如果替换多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如    sed -i '1,3c内容' 文件名

 

指定1~2行都替换成一行内容
 加载保存

作用:

              加载文件内容到指定行号的位置

格式:

               sed -i '行号r 文件名1' 文件名

注意:    

               如果在多行位置加载,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如    sed -i '1,3r 文件名1' 文件名

由于缓存区中文件内容的顺序变化,导致加载的内容顺序不一致
 保存实践

 作用:

            指定行号保存到其他位置

格式:

            sed -i '行号w 文件名' 文件名

注意:    

            如果多行保存,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如    sed -i '1,3w 文件名' 文件名    文件名已存在,则会覆盖式增加

 

 

 匹配进阶

 内容匹配:

'/关键字内容/'    

注意:        

隔离符号 / 可以更换成 @、#、!等符号        

根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。        

/关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容        

n,/关键字2/ 表示从第n行到关键字2所在行之间的内容        

/关键字1/,n, 表示从关键字1所在行到第n行之间的内容        

/关键字1/,+n, 表示从关键字1所在行到(所在行+n行)之间的内容

查看匹配的内容

匹配内容间的多行信息

查看匹配内容到第6行的内容
查看第1行到匹配行的内容
查看匹配内容和下面二行的内容
通过 !p 去除空行匹配
文件处理

我们可以借助 '动作1;动作2' 或者 -e '动作1' -e '动作2' 的方式实现多操作的并行实施

5.2.5AWK基础

使用方法:    

         awk [参数] '[动作]' [文件名]    

         awk [参数] –f 动作文件 var=value [文件名]    

         awk [参数] 'BEGIN段 [动作] END段' [文件名]

注意:

         动作的格式  '匹配条件{打印动作}'

常见参数:    

-F           指定列的分隔符,默认一行数据的列分隔符是空格    

-f            file 指定读取程序的文件名    

-v           var=value 自定义变量

常见动作    

print           显示内容    

$0              显示当前行所有内容    

$n              显示当前行的第n列内容,如果存在多个$n,它们之间使用逗号(,)隔开

注意:

          如果打印的内容是变量,则无需在变量两侧加上双引号,其他的都应该加双引号

 字段提取:提取一个文本中的一列数据并打印输出,它提供了相关的内置变量。    

   $0 表示整行文本    

   $1 表示文本行中的第一个数据字段    

   $2 表示文本行中的第二个数据字段    

  $N 表示文本行中的第N个数据字段    

  $NF 表示文本行中的最后一个数据字段    

  NR 代表行的行号,在动作外部表示特定行

注意:  

    如果打印多列信息,需要使用逗号隔开,否则是内容合并

 

$NF代表最后一列

$0代表整行文本

打印第一列和第三列

     

打印第一行和第三行合并到一起

使用 实现内容的分割,t需要用""扩住
打印列外的信息

过滤/etc/fstab/以UUID开头的行传给awk取出第一列和第三列

     

显示awk.txt文件所有内容添加行号$0显示当前所有内容  NG行号

      

按行号打印对应列的信息

      

打印第一行中的    行号     第一列      第二列
定制查看

常见参数:    

-F                指定列的分隔符,默认一行数据的列分隔符是空格 常见内置变量    

FS               输入文件的列分隔符,缺省是连续的空格和Tab    

RS               输入的分隔符,指定输入时的 原换行符($)仍有效    

注意:  

                   一般情况下,在输出信息之前进行格式的调整,需要在BEGIN{}部分设定

以:为分割取passwd.txt中的第一列

  

-v可以定义一个变量   FS=“:”   取passwd。txt中第一列和第七列中间加FS就是加:
-F[/]+代表一到两个/为分隔符遇到//就代表两个/就代表一个 打印出第二列传给uniq -c统计使用次数
 显示语法

属性方法    

OFS 输出格式的列分隔符,缺省是空格    

ORS 输出记录分隔符,输出时用指定符号代替换行符

print方法

printf [-v var] format [item1,item2,...]

注意:

printf输出需要指定换行符号,format的格式必须与后面item对应

常见格式:

%c 显示字符的ASCII码                       %d|i 显示十进制整数

%e|E 显示科学计数法数值                  퉳无符号整数

%f 显示浮点数                                     %s 显示字符串

%% 显示%本身

修饰符:

%#[.#] 第一个#控制显示宽度,第二个#表示小数点后的精度,例如%3.1f

%- 左对齐,%-15s

%+ 显示数值的正负符号,%+d

BEGIN   先执行预处理

以冒号作为分割列符 -v  添加变量    OFS输出内容的列分隔符等于~~~  取第一列和第二列
BEGIN先预处理前面一个括号内容,内容以:为分割   OFS定义输出的内容以-为分割   NR==1 从源文件第一行打印内容    NR显示行号   $1第一列 $3第三列 $NF最后一列                                             

  

BEGIN先预处理前面一个括号内容   RS=""是将seq 7输出是的换行符变成空    打印第一列到第七列
-F":"是将一行四列变成一列了   BEGIN先预处理前面一个括号内容   OSR=“|” 将输出内容以|分割 
NR输出加行号      $0输出每一行的全部信息
 printf格式化输出实践
%s显示字符串 在每一串后面换行    输出第一列

%s后不加换行或者其他分割符每一条字符串会输出在一起

%d输出十进制整数行号就是整数           %d--%s--%s 在整数和字符串之间用--分割       NR行号
$1取第一列    $NR随着行号变化行号是1他就取第一列是二就取第二列 是三就取第三列            
 优先级

格式显示:

                       BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作    

                       {}: 逐行处理的执行命令    

                       END{}: 处理完最后以行文本后执行,一般用来处理输出结果

BEGIN预处理第一个{}中的内容 定义分隔符为:     NR行号, $0输出每一行全部信息
$1,$2代表输出文件第一行第二行          打印第一列:$1  ,逗号代表空格   打印第二列:$2
END结尾打印------------- 换行  打印行数总计     %2d   向右两个字符换行  NF打印行号

0是预处理还没有进文件所以行号是0        11是指定NR==11      24是文件一共有24 行

      

变量实践

内置变量

所谓的内置变量主要就是awk内部已经定制好的变量,我们可以直接拿过来使用,这些常见的方法我们基 本上都演示过了,比如:

FILENAME                    当前输入文件的文件名,该变量是只读的

FIELDWIDTHS              以空格分隔的数字列表,用空格定义每个数据字段的精确宽度    

NR                                 指定显示行的行号    

FNR                               多文件时候,分别计数    

NF                                  表示字段数量    

OFS                               输出格式的列分隔符,缺省是空格    

FS                                  输入文件的列分隔符,缺省是连续的空格和Tab    

RS                                  输入记录分隔符,指定输入时的换行符,原换行符($)仍有效    

ORS                               输出记录分隔符,输出时用指定符号代替换行符    

ARGC|ARGV[n]             获取命令的参数个数|参数内容

自定义变量

所谓的自定义变量,主要是根据实际情况,自己定义一些所谓的变量,然后再awk逻辑操作的过程中作为 辅助性的措施。自定义变量的定制方法:

          -v var=value

         它可以在 命令行、BEGIN、{}、END 等位置进行使用

整个awk选项就记住  NR NF OFS 这三个选项就可以其他的用不上

echo $PWD输出当前目录     awk 打印内容中最后一个字段
echo输出了文件的绝对路径     awk定义每列以/为分割 $NF取出最后一列
echo输出了文件的绝对路径     awk定义每列以/为分割 $NF-1取出倒数第二列

5.2.6正则表达式

通配符和正则

1 正则表达式用来在文件中匹配符合条件的字符串,主要是目的是包含匹配。

          - grep、awk、sed 等命令可以支持正则表达式。

2 通配符用来匹配符合条件的文件名,通配符是完全匹配。

                - ls、find、cp 之类命令不支持正则表达式,可以借助于shell通配符来进行匹配。

                                 .:匹配任意一个字符        

                                 *:匹配任意内容        

                                 ?:匹配任意一个内容        

                                 []:匹配中括号中的一个字符

创建以.sh为后坠的123.sh文件   创建以log为后坠的123log文件

     

查看以log结尾任意字符文件

     

查看叫us  r.sh任意一个内容的文件
字符匹配

单字符匹配

.             匹配任意单个字符,当然包括汉字的匹配

[]            匹配指定范围内的任意单个字符

                    - 示例:[shuji]、[0-9]、[a-z]、[a-zA-Z]

[^]          匹配指定范围外的任意单个字符 - 示例:[^shuji]

|             匹配管道符左侧或者右侧的内容

过滤st与e之间有两个任意字符的内容

     

过滤以i开头t结尾中间a到z任意字符

     

取反不要a-Z和0-5之中的内容

      

取state|priority这两个内容
锚定匹配

常见符号    

^                          行首锚定, 用于模式的最左侧    

$                          行尾锚定,用于模式的最右侧    

^                           PATTERN$ 用于模式匹配整行    

^$                         空行    

^[[:space:]]*$        空白行    

< 或 b                 词首锚定,用于单词模式的左侧    

> 或 b                 词尾锚定,用于单词模式的右侧    

<PATTERN>       匹配整个单词

 - v                         取反

注意:

        单词是由字母,数字,下划线组成

行首锚碇以work开头的行

      

行尾锚碇匹配以tml;结尾的行

     

匹配以http开头以{结尾的行

      

匹配空行

     

-v取反除了空白行剩下都要

     

b匹配单词以loca首部行   或用v

     

b匹配单词以tion尾部行   或用v
分组符号

所谓的分组,其实指的是将我们正则匹配到的内容放到一个()里面  

        - 每一个匹配的内容都会在一个独立的()范围中    

        - 按照匹配的先后顺序,为每个()划分编号    

        - 第一个()里的内容,用 1代替,第二个()里的内容,用2代替,依次类推    

        - 0 代表正则表达式匹配到的所有内容

注意:

         () 范围中支持|等字符匹配内容。从而匹配更多范围的信息

         关于()信息的分组提取依赖于文件的编辑工具,我们可以借助于 sed、awk功能来实现

提示: sed -r 's/原内容/修改后内容/'

过滤haha文件中有server.1的内容  sed -r支持正则扩展  ()中.*代表任意长度字符串用=和:隔开内容/是s/结束    是转义1/       1/代表第一个括号中的内容

        

限定符号

常见符号

*                   匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配    

.*                  任意长度的任意字符    

?                   匹配其前面的字符出现0次或1次,即:可有可无    

+                   匹配其前面的字符出现最少1次,即:肯定有且 >=1 次  

{m}                匹配前面的字符m次    

{m,n}             匹配前面的字符至少m次,至多n次    

{,n}                匹配前面的字符至多n次,<=n    

{n,}                匹配前面的字符至少n次

^ab*c$以ab开头中间任意字符c结尾

    

以ab开头     b?匹配b出现一次或不出现   c结尾

       

ab开头    b+匹配b出现最少一次或多次

     

ab开头    b至少出现两次    最多出现四次

     

匹配出现3次b的行

      

以a开头 中间是有b且至少出现两次的字符串
扩展符号

字母模式匹配    

[:alnum:] 字母和数字    

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z    

[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]    

[:upper:] 大写字母

数字模式匹配    

[:digit:] 十进制数字    

[:xdigit:]十六进制数字

符号模式匹配    

[:blank:] 空白字符(空格和制表符)    

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白    

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)    

[:graph:] 可打印的非空白字符    

[:print:] 可打印字符    [

:punct:] 标点符号    

注意:

在使用该模式匹配的时候,一般用[[ ]],

- 第一个中括号是匹配符[] 匹配中括号中的任意一个字符

- 第二个[]是格式 如[:digit:]

就记这两个

[:blank:] 空白字符(空格和制表符)    

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白  

以a开头c结尾  中间是空格或者TAB符字符  长度为三个字节的字符串

     

以a开头c结尾  中间是空格或者TAB符字符  长度为三个字节的字符串
目标检测

定制站点或目标主机的检测平台,在对站点域名和主机ip检测之前,判断输入的语法是否正确。

6.1.1 locate命令

命令格式: locate [OPTIONS] PATTERN

一般选项

   

-i:   忽略大小写地匹配模式。例如,locate -i myfile会同时匹配"myfile"、"MyFile"等。    

-c:  只显示匹配项的数量(count),而不是文件名。    

-l NUM:     限制输出的行数,每行显示一个匹配项。    

-n NUM:    限制输出的匹配项数目,只显示前NUM个结果。    

-r:    使用正则表达式模式匹配。例如,locate --regex '.*.txt$'会匹配所有以".txt"结尾的文 件。  

-b:        只匹配基准名,忽略路径。    

-w:        仅匹配完整单词。    

-A|--all             #输出所有能匹配到的文件名,不管文件是否存在

-b|--basename         #仅匹配文件名部份,而不匹配路径中的内容

-c|--count             #只输出找到的数量

-d|--database DBPATH     #指定数据库

-e|--existing          #仅打印当前现有文件的条目

-L|--follow             #遇到软链接时则跟随软链接去其对应的目标文件中查找 (默认)

-i|--ignore-case       #忽略大小写 -l|--limit|-n N #只显示前N条匹配数据

-P|--nofollow, -H     #不跟随软链

-r|--regexp REGEXP     #使用基本正则表达式

--regex           #使用扩展正则表达式

-s|--stdio             #忽略向后兼容

-w|--wholename         #全路径匹配,就是只要在路径里面出现关键字(默认)

  updatedb      更新数据库

 安装环境

Rocky系统 yum install -y mlocate

ubuntu系统 apt install -y Plocate

搜索ect目录中以a开头的文件或目录,路径包含写法

仅搜索文件名中包含share 的内容
显示数量
显示前10条

使用基本正则表达式

6.1.2 find命令

使用方法;   find [搜索路径] [选项] [表达式]

常用选项    

-name:按文件名匹配,区分大小写。支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来    

-type:按文件类型搜索。常用类型包括f(普通文件)、d(目录)、l(符号链接)等。    

-size:按文件大小搜索。单位可以是c(字节)、k(千字节)、M(兆字节)、G(千兆字节)等。例 如,-size +10M查找大于10MB的文件。    

-mtime:按天数查找文件最后修改时间。例如,-mtime -7查找最近7天内修改的文件

 -user:按文件所有者查找。    

-group:按文件所属组查找。    

-perm:按文件权限查找。    

-maxdepth:限制搜索的最大深度。    

-mindepth:限制搜索的最小深度。

-regextype type: 正则表达式类型,emacs|posix-awk|posix-basic|posiegrep|posixextended

 -regex pattern: 正则表达式

默认列出当前目录下的所有文件

     

先显示文件
指定文件名查找
指定文件名,忽略大小写

通配符
类型查找

-empty             #空文件或空目录

-prune              #跳过,排除指定目录,必须配合 -path使用      -path路径

-type TYPE      #指定文件类型   *

type 值    

f               #普通文件  

d              #目录文件    

l                #符号链接文件    

s               #套接字文件    

b               #块设备文件    

c                #字符设备文件    

p                #管道文件

查看当前目录下的所有目录文件
查找run 目录下所有管道文件

查找空目录

查找空文件
#排除 dir1 目录中的 txt 文件,
排除多个文件
组合查找

-a           #与,多条件默认就是与关系,可省略

-o           #或

-not|!    #非

查找*log和-type文件
查找test*log或test*txt文件
非     查找的66目录会将目录下的文件找到

按所有者查找或者*log结尾文件

按所有者查找或者*log结尾文件   加-ls  只会列出最后一个条件的匹配
按所有者查找或者*log结尾文件   加-ls  用括号括住列出所有                                                                     条件的匹配

文件属性查找

-size [+|-]N UNIT                # N为数字,UNIT为常用单位 k, M, G, c(byte) 等

#解释

10k                  #表示(9k,10k],大于9k 且小于或等于10k

-10k                 #表示[0k,9k],大于等于0k 且小于或等于9k

+10k                 #表示(10k,∞),大于10k

文件时间属性解读

以天为单位

-atime [+|-]N         -mtime [+|-]N     -ctime [+|-]N

以分钟为单位

-amin [+|-]N          -mmin [+|-]N      -cmin [+|-]N

#解释

N                   #表示[N,N+1),大于或等于N,小于N+1,表示第N天(分钟)

+N                 #表示[N+1,∞],大于或等于N+1,表示N+1天之前(包括)

-N                  #表示[0,N),大于或等于0,小于N,表示N天(分钟)内

大于2K,小于或等于3K的文件

小于或等于3k

大于2k

大于2k,小于或等于10k
查找十分钟前被访问过的文件
动作进阶

-print              #默认的处理动作,显示至屏幕

-print0            #不换行输出,常用于配合xargs

-ls                   #类似于对查找到的文件执行"ls -ils"命令格式输出

-fls file             #查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file

-delete             #删除查找到的文件,慎用!

-ok COMMAND {} ;         #对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之 前,都会交互式要求用户确认

-exec COMMAND {} ;       #对查找到的每个文件执行由COMMAND指定的命令

{}                      #用于引用查找到的文件名称自身

查找结果保存至文件
删除
备份以log结尾的文件
删除15分钟内没被访问过的文件

 6.1.3   xargs组合

使用方法    xargs 选项   文件 

#常用选项

-0|--null                               #用 assic 中的0或 null 作分隔符

-a|--arg-file=FILE                #从文件中读入作为输入

-d|--delimiter=CHARACTER           #指定分隔符

-E END                                #指定结束符,执行到此处时停止,不管后面的数据

-L|--max-lines=N                  #从标准输入一次读取N行送给 command 命令

-l                                           #同上

-n|--max-args=MAX-ARGS           #一次执行用几个参数

-p|--interactive                               #每次执行前确认

-r|--no-run-if-empty                        #当xargs的输入为空的时候则停止xargs,不用再去执行了

-s|--max-chars=MAX-CHARS        #命令行最大字符数

-t|--verbose                                     #显示过程,先打印要执行的命令

-x|--exit                                            #退出,主要配合-s使用

还可以让不支持标准输入的命令支持标输输入(ctrl+d 结束)

让命令支持标准输入重定向

      

辅助处理

指定分隔符
指定每次输出三各参数
批量创建用户
批量删除用户
批量创建十三万零七百五十二个文件    别尝试

6.1.4打包压缩

tar包

使用方法   tar  选项    (包类型.tar)   目标文件  

tar命令常见选项:

- c        创建一个压缩包

- t         不解压查看压缩包的文件列表

- z         tar.gz类型格式的压缩包

- v         显示压缩过程|解压过程

- x          解压一个压缩文件

- f           指定压缩包文件名

解压场景有专属选项 -C 我要解压到那个目录下

tar -tf  压缩为文件名           在不解压的情况下查看文件目录

将file压缩成名为file.tar 的压缩包
将file.tar文件解压到muli下面
先将file创建为gz压缩包   passwd.txt创建为tar压缩包    将两个压缩包解压到mulu目录下面
-tf在不解压的情况下查看压缩文件列表
zip包

使用方法:zip 选项   (指定名字。zip)  要压缩的文件名

选项:

-d   指定解压到哪里

-v    压缩文件

-r     递归压缩

unzip    解压文件

压缩file文件 压缩之后的文件叫file.zip 
解压file.zip 压缩文件
递归压缩file和file下的所有文件
将file解压到目录这个目录下面
zcat查看压缩内容

使用方法   zcat  选项   要查看的压缩文件

选项:

- l        查看压缩包的基本情况

tar -tvf       查看压缩文件详情

查看file.gz压缩包的基本情况
查看压缩文件基本详情

6.2shell基础

6.2.1 脚本执行

方法1:

bash /path/to/script-name        或             /bin/bash /path/to/script-name (强烈推荐使 用)

方法2:

/path/to/script-name                 或           https://blog.csdn.net/2301_/article/details/script-name (当前路径下执行脚本)

方法3:

source script-name                  或            . script-name (注意“.“点号)

方法1变种:

cat /path/to/script-name | bash

bash /path/to/script-name

方法1:

[root@rocky9 ~]# /bin/bash get_netinfo.sh

IP:  10.0.0.12

NetMask:  255.255.255.0

Broadcast:  10.0.0.255

MAC Address:  00:0c:29:23:23:8c

方法2:

[root@rocky9 ~]# https://blog.csdn.net/2301_/article/details/get_netinfo.sh

bash: https://blog.csdn.net/2301_/article/details/get_netinfo.sh: 权限不够

[root@rocky9 ~]# ll get_netinfo.sh

-rw-r--r-- 1 root root 521 6月   7 20:41 get_netinfo.sh

[root@rocky9 ~]# chmod +x get_netinfo.sh

[root@rocky9 ~]# https://blog.csdn.net/2301_/article/details/get_netinfo.sh

IP:  10.0.0.12

NetMask:  255.255.255.0

Broadcast:  10.0.0.255

MAC Address:  00:0c:29:23:23:8c

方法3:

[root@rocky9 ~]# source get_netinfo.sh

IP:  10.0.0.12

NetMask:  255.255.255.0

Broadcast:  10.0.0.255

MAC Address:  00:0c:29:23:23:8c

[root@rocky9 ~]# chmod -x get_netinfo.sh

[root@rocky9 ~]# ll get_netinfo.sh

-rw-r--r-- 1 root root 521 6月   7 20:41 get_netinfo.sh

[root@rocky9 ~]# source get_netinfo.sh

IP:  10.0.0.12

NetMask:  255.255.255.0

Broadcast:  10.0.0.255

MAC Address:  00:0c:29:23:23:8c

6.2.2 脚本调试

使用方法   /bin/bash   选项   要执行的文件

-n 检查脚本中的语法错误

-v 先显示脚本所有内容,然后执行脚本,结果输出,如果执行遇到错误,将错误输出。

-x 将执行的每一条命令和执行结果都打印出来

  记住x就好

[root@rocky9 ~]# /bin/bash -x get_netinfo-error.sh

+ :

+ ifconfig eth0 + awk '{print $2}'

+ grep -w inet

+ xargs echo 'IP: ' IP:  10.0.0.12

+ ifconfig eth0

+ grep -w inet

+ awk '{print $4}'

+ xargs echo 'NetMask: ' NetMask:  255.255.255.0

+ ifconfig eth0

+ grep -w inet

+ xargs echo 'Broadcast: '

+ awk '{print $6}' Broadcast:  10.0.0.25

6.2.3脚本开发规范

1、脚本命名要有意义,文件后缀是.sh

2、脚本文件首行是而且必须是脚本解释器 #!/bin/bash

3、脚本文件解释器后面要有脚本的基本信息等内容 脚本文件中尽量不用中文注释; 尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰 常见的注释信息:脚本名称、脚本功能描述、脚本版本、脚本作者、联系方式等

4、脚本文件常见执行方式:bash 脚本名

5、脚本内容执行:从上到下,依次执行

6、代码书写优秀习惯;    

1)成对内容的一次性写出来,防止遗漏。

如:()、{}、[]、''、``、""    

2)[]中括号两端要有空格,书写时即可留出空格[    ],然后再退格书写内容。    

3)流程控制语句一次性书写完,再添加内容

7、通过缩进让代码易读;(即该有空格的地方就要有空格)

shell脚本开发规范重点 2,4, 5

shell开发小技巧  3,6,7

6.2.4 shell 变量

变量场景:  用过变量名,快速获取对应的值

变量定义:  变量名=变量值

基本操作:

1,创建变量

2,查看变量:$变量名   "$变量名"    ${变量名}    "${变量名}"   标红这两个最标准   脚本里的环境变量最好使用最后这两个标红的

删除变量: unset  变量名

变量分类

shell 中的变量分为三大类:

本地变量       变量名仅仅在当前终端有效               自定义变量

全局变量       变量名在当前操作系统的所有终端都有效                系统级变量

shell内置变量        shell解析器内部的一些功能参数变量              man   bash  自己创建了一些变量,我们可以直接拿过来用

定义全局变量

全局变量是什么

           全局变量就是:在当前系统的所有环境下都能生效的变量

定义全局变量:

       export  变量名=变量值

查看全局变量

       echo $变量名

删除变量名

       unset  变量名

嵌套shell

父shell可以给子用   子shell只能自己用

脚本相关

$0 脚本文件名    $1第一个参数        $#所有参数的总数         

字符串相关

字符串计数

${#file}           获取字符串的长度

字符串截取

- 语法为${var:pos:length}       表示对变量var从pos开始截取length个字符,pos为空标示0   ${file:0:5}                              从0开始,截取5个字符    

${file:5:5}                               从5开始,截取5个字符    

${file::5}                                 从0开始,截取5个字符    

${file:0-6:3}                            从倒数第6个字符开始,截取之后的3个字符    

${file: -4}                               返回字符串最后四个字节,-前面是"空格"

默认值相关

格式一:${变量名:-默认值}

变量a如果有内容,那么就输出a的变量值

变量a如果没有内容,那么就输出默认的内容

格式二:${变量名+默认值}

无论变量a是否有内容,都输出默认值

实践1 - 有条件的默认值

购买手机的时候选择套餐:

            如果我输入的参数为空,那么输出内容是 "您选择的套餐是: 套餐 1"

            如果我输入的参数为n,那么输出内容是 "您选择的套餐是: 套餐 n"

子shell基础

临时shell

临时shell环境 - 启动子shell

(命令列表),在子shell中执行命令列表,退出子shell后,不影响后续环境操作。 临时shell环境 - 不启动子shell {命令列表}, 在当前shell中运行命令列表,会影响当前shell环境的后续操作。

 7.1运算符

7.1.1运算符基础

表达式

 语法格式

格式

           真实值 操作符 真实值 比较运算符 预期值

示例

           3 + 4 > 6

要点:

           表达式应该具有判断的功能

样式1:

test 条件表达式

样式2: [ 条件表达式 ]

注意:    

       以上两种方法的作用完全一样,后者为常用。    

       但后者需要注意方括号[、]与条件表达式之间至少有一个空格。    

        test跟 [] 的意思一样        

        条件成立,状态返回值是0        

        条件不成立,状态返回值是

test -v      语法测试变量有没有被设置值,亦可理解为变量是否为空。

1=1条件成立       1=2条件不成立

      

test -v 查看变量是否为空    不成立1    成立为0
7.1.1简单计算

简介:        

       $[]方法,常用于整数计算场景,适合不太复杂的计算,运算结果是小数的也会自动取整。 后面的几种也是一样

格式

    方法1:

            $[计算表达式]

    方法2:

            a=$[变量名a+1]

注意:

            这里的表达式可以不是一个整体

简单加减乘除用法都一样

    

运算结果取整
 let  简介

简介

         let是另外一种相对来说比较简单的数学运算符号了

格式

let 变量名a=变量名a+1

注意:

         表达式必须是一个整体,中间不能出现空格等特殊字符

简介

(())的操作与let基本一致,相当于let替换成了 (())

格式

定义i=1    let i=1+7   $i=7
 (())简介

简介

         (())的操作与let基本一致,相当于let替换成了 (())

格式

        ((变量计算表达式))

注意: 

        对于 $(())中间的表达式,可以不是一个整体,不受空格的限制

定义num1=85   num2=num1+56    mum2=141
 $(()) 简介

简介

      $(())的操作,相当于 (()) + echo $变量名 的组合

格式

       echo $((变量计算表达式))

注意:

        对于 $(())中间的表达式,可以不是一个整体,不受空格的限制

定义num1等于34       那么num2等于num1加34就等于68

7.1.2 赋值运算进阶

二元运算

简介

    所谓的二元运算,指的是 多个数字进行+-*/%等运算

加减乘除格式都一样

取余运算
 赋值运算

这里的赋值运算,是一种进阶版本的复制操作,常见的样式如下:

       样式1:+=、-=、*=、/=

              - 在自身的基础上进行二元运算,结果值还是自己

       样式2:++、--

              - 在自身的基础上进行递增和递减操作,结果值还是自己

        +=运算      相当于 let value=value+$num1
-=运算            # 相当于 let value=value-2

*=运算            # 相当于 let value=value*2
/=运算             # 相当于 let value=value/2 

i++运算           # 相当于 let value=value+1

++i运算             相当于 let value=value+1

i--运算           # 相当于 let value=value-1

--i运算         # 相当于 let value=value-1   

 7.1.3 基础知识

表达式

 语法格式

格式

           真实值 操作符 真实值 比较运算符 预期值

示例

           3 + 4 > 6

要点:

           表达式应该具有判断的功能

样式1:

test 条件表达式

样式2: [ 条件表达式 ]

注意:    

       以上两种方法的作用完全一样,后者为常用。    

       但后者需要注意方括号[、]与条件表达式之间至少有一个空格。    

        test跟 [] 的意思一样        

        条件成立,状态返回值是0        

        条件不成立,状态返回值是

test -v      语法测试变量有没有被设置值,亦可理解为变量是否为空。

1=1条件成立       1=2条件不成立

      

test -v 查看变量是否为空    不成立1    成立为0

7.1.4逻辑表达式

&&

        示例:命令1  &&  命令2

                     如果命令1执行成功,那么我才执行命令2 -- 夫唱妇随

                     如果命令1执行失败,那么命令2也不执行

||

        示例:命令1 || 命令2

                     如果命令1执行成功,那么命令2不执行 -- 对着干

                     如果命令1执行失败,那么命令2执行

!

        示例:! 命令

                      如果命令执行成功,则整体取反状态

使用样式:

                  命令1 && 命令2 || 命令3  

                          方便理解的样式  ( 命令1 && 命令2 ) || 命令3

功能解读:

                  命令1执行成功的情况下,执行

                  命令2 命令2执行失败的情况下,执行命令3

注意:

                  && 必须放到前面,|| 放到后面

命令一为真才会主星第二个   命令以为假不会i执行

     

命令一为真命令二不输出      命令一为假命令二才输出

       

取反成功为假   不成功为真
如果命令一为真输出目录存在    目录存在为假输出目录不存在
如果命令一为假不输出目录存在    目录存在为假   输出目录不存在

7.1.5字符串表达式

所谓的字符串表达式,主要是判断 比较运算符 两侧的值的内容是否一致,由于bash属于弱类型语言, 所以,默认情况下,无论数字和字符,都会可以被当成字符串进行判断。

符号解读

            内容比较判断    

                    str1 == str2 str1和str2字符串内容一致    

                    str1 != str2 str1和str2字符串内容不一致,!表示相反的意思

            内容空值判断    

                     -z str 空值判断,获取字符串长度,长度为0,返回真    

                     -n  "str" 非空值判断,获取字符串长度,长度不为0,返回真   

                      注意:str外侧必须携带"",否则无法判断

1为假不成立
aaa  不等于   bbb 成立为真        !=不等于的意思
num1等于num2判断为假
num1不等于num2判断为真
空判断获取字符串长度不为零判断为假
空判断获取字符串长度为零判断为真
判断内容是否为不空,可以理解为变量是否被设置    不为空为真   反之为假

7.1.6 文件表达式

文件属性判断

             -d  检查文件是否存在且为目录文件    

             -f  检查文件是否存在且为普通文件    

             -S 检查文件是否存在且为socket文件

             -L 检查文件是否存在且为链接文件    

             -O  检查文件是否存在并且被当前用户拥有    

             -G  检查文件是否存在并且默认组为当前用户组

文件权限判断      

           -r  检查文件是否存在且可读    

           -w  检查文件是否存在且可写    

           -x  检查文件是否存在且可执行

文件存在判断    

         -e  检查文件是否存在    

         -s  检查文件是否存在且不为空

文件新旧判断    

          file1 -nt file2  检查file1是否比file2新    

          file1 -ot file2  检查file1是否比file2旧    

          file1 -ef file2  检查file1是否与file2是同一个文件,判定依据的是i节点

&&命令一为真才会输出命令二         ||命令一为假才会输出命令二     所以weizhi.sh不是文件
&&命令一为真才会输出命令二         ||命令一为假才会输出命令二     所以weizhi.sh不是目录

一判断文件有没有执行权限       二判断文件有没有权限如果没有就加权限      三判断有没有权限有就执行脚本

判断文件中是否有内容
判断文件是否存在

7.1.7 数字表达式

简介:

         主要根据给定的两个值,判断第一个与第二个数的关系,如是否大于、小于、等于第二个数。

语法解读

n1 -eq n2   相等             n1 -ne n2   不等于              n1 -ge n2  大于等于    

n1 -gt n2   大于              n1 -lt n2   小于                    n1 -le n2   小于等于

等于

大于

7.1.8 表达式进阶

简介:

            我们之前学习过 test 和 [ ] 测试表达式,这些简单的测试表达式,仅仅支持单条件的测试。如果需 要针对多条件测试场景的话,我们就需要学习[[  ]] 测试表达式了。

            我们可以将 [[  ]] 理解为增强版的 [ ],它不仅仅支持多表达式,还支持扩展正则表达式和通配符。

基本格式:

             [[ 源内容 操作符 匹配内容 ]]

操作符解析:

             == 左侧源内容可以被右侧表达式精确匹配

             =~ 左侧源内容可以被右侧表达式模糊匹配

定制默认变量
[[]]支持通配符
使用""取消正则,则内容匹配失败
使用取消正则,则内容匹配失败

7.1.9集合基础

表现样式:

两个条件

1 - 真      0 - 假

三种情况:

与 - & 或 - | 非 - !

注意:

这里的 0 和 1 ,千万不要与条件表达式的状态值混淆 !!!!!!!!!!!!!!

与关系:

0 与 0 = 0            0 & 0 = 0

0 与 1 = 0            0 & 1 = 0

1 与 0 = 0            1 & 0 = 0

1 与 1 = 1            1 & 1 = 1

或关系:  

0 或 0 = 0            0 | 0 = 0    

0 或 1 = 1            0 | 1 = 1    

1 或 0 = 1            1 | 0 = 1    

1 或 1 = 1            1 | 1 = 1

非关系:    

非 1 = 0               ! true = false    

非 0 = 1               ! false = true

默认是零所以!0是真    !1是假

7.2.1 逻辑组合

简介:

      所谓的条件组合,指的是在同一个场景下的多个条件的综合判断效果

语法解析:

方法1:

[ 条件1 -a 条件2 ] - 两个条件都为真,整体为真,否则为假

[ 条件1 -o 条件2 ] - 两个条件都为假,整体为假,否则为真

方法2:

[[ 条件1 && 条件2 ]] - 两个条件都为真,整体为真,否则为假

[[ 条件1 || 条件2 ]] - 两个条件都为假,整体为假,否则为真

-a         两个条件都为真所以结果为真

-a       有一个为假所以结果为假
-o     两个条件一个为真一个为假  结果为真

-o        两个条件都为假结果才为假

8.1.1获取软件包

软件官网、github、第三方软件镜像站

系统发版的光盘或官方网站

CentOS镜像:    

https://www.centos.org/download/    

http://mirrors.aliyun.com    

http://mirrors.sohu.com    

http://mirrors.163.com

Ubuntu镜像:

http://cdimage.ubuntu.com/releases/

http://releases.ubuntu.com

第组织提供

Fedora-EPEL:Extra Packages for Enterprise Linux

                   https://fedoraproject.org/wiki/EPEL

                   https://mirrors.aliyun.com/epel/?spm=a2c6h..0.0.3bc47dfaZpesAr

Rpmforge:RHEL推荐,包很全,即将关闭

                   http://repoforge.org/

Community Enterprise Linux Repository:支持最新的内核和硬件相关包

                   http://www.elrepo.or

软件项目官方站点

http://yum.mariadb.org/10.4/centos8-amd64/rpms/

http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/

搜索引擎

注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性 http://pkgs.org http://rpmfifind.net

http://rpm.pbone.net

https://sourceforge.net/

8.1.2包管理器rpm

安装

命令格式

rpm {-i|--install} [install-options] PACKAGE_FILE…

常用选项

-q              # 检查软件是否安装

-ivh           # 安装软件

-evh          # 卸载软件

-Uvh          # 有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”

-Fvh          # 有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行安装操作

安装软件不需要依赖
安装软件需要依赖

升级新版本vsftpd

升级旧版本vsftpd      注意:如果已安装版本高,待安装版本低,默认不安装
卸载软件包
查看软件包是否安装

查看是否安装vsftpd软件包  如果安装了就卸载vsftpd软件
-Uvh     有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”

8.1.3 查询

命令格式:

rpm {-q|--query} [select-options] [query-options]

常用选项

-i       #information

-l       #查看指定的程序包安装后生成的所有文件

-f       #查看指定的文件由哪个程序包安装生成

-a      #所有包

-d      #查询程序的文档

常用组合:-qi、-qf、-ql、-qa

qa 查看所有安装好的包 

-qi  查看已安装的包信息

-qf  -qf 根据命令反查包文件

-ql   -ql 查看已安装软件生成的所有软件文件

查看所有安装的包
查看所有包从中过滤出passwd的包

查看软件是否安装
查看包详细信息
查看以安装软件的文件
查看未安装的包文件来源于哪里
查看已安装软件的配置文件
没安装的指定包文件
列出已安装软件的所有文件
查看已安装软件的文档文件
查看未安装文件的文档文件
查看安装脚本
查看软件的更新记录信息

8.1.4yum和dnf 

架构模式

yum/dnf 是基于C/S 模式    

             - yum 服务器存放rpm包和相关包的元数据库    

             - yum 客户端访问yum服务器进行安装或查询等

yum实现过程

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的 元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载 repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。

 配置环境

客户端配置

yum客户端配置文件

         /etc/yum.conf #为所有仓库提供公共配置

         /etc/yum.repos.d/*.repo #为每个仓库的提供配置文件

查看帮助

         man 5 yum.conf

获取软件源信息         同步软件源基本信息更新软件源

         yum makecache     谐音梅卡司

清理软件源信息

         yum clean all             除了清理软件源信息的功能还有自动清理无用软件的功能

谐音颗粒奥

查看仓库的信息

         yum repolist             查看仓库当前信息

         yum repolist -v          # 查看更多信息

同步软件源基本信息
查看厂库列表
查看仓库列表详细信息
清理软件源信息

定制软件源

Rocky9.4上配置aliyun的repo源

1,   cd /etc/yum.repos.d/         切换到 /etc/yum.repos.d/ 下

2,   mkdir bak                          创建一个文件夹

3,   mv *.repo bak/                   将所有以 .repo后缀的文件转移到bak目录中

4,   yum clean all                     清理软件源信息

5,   yum makecache                 获取软件源信息 看看还有没有仓库

6,   vim aliyun-baseos.repo       创建文件并在里面编写内容内容如下:

[aliyun-baseos]          阿里云  baseos
   name=aliyun baseos         名字阿里云 baseos
   baseurl=https://mirrors.aliyun.com/rockylinux/9.4/BaseOS/x86_64/os/       仓库地址
   gpgcheck=0        0是不需要校验
  
   [aliyun-Appstream]
   name=aliyun appstream
   baseurl=https://mirrors.aliyun.com/rockylinux/9.4/AppStream/x86_64/os/
   gpgcheck=0            0是不需要校验







7,yum makecache                   同步软件源

 本地源配置      

保证光盘是挂载的    设备状态  已连接    启动时连接

  1,     mount /dev/cdrom /mnt         将光盘文件挂载到mnt目录下

  2     vim  local-image.repo            创建文件并在里面编写内容内容和aliyun一样改名字

  3      开启一个新终端    ls /mnt/AppStream/     ls /mnt/BaseOS/   

           分别对应 file///mnt/AppStream/      file///mnt/BaseOS/    网址

其他与上面一样

   4        yum makecache        同步软件源

8.1.5yum命令

命令格式: yum [options] COMMAND

常用子命令    

autoremove               #卸载包,同时卸载依赖       个别配置文件可能不会被删除

clean                         #清除本地缓存       

install                        #包安装             

localinstall                   安装本地下载好的包

list                             #列出所有包    list --updates  可以让那些软件更新到最新版本

list --showduplicates 加软件名             可以查看有哪些可以安装的软件

         修丢不累坎特      

makecache               #重建缓存    

search                      #包搜索,包括包名和描述

一般子命令    

check-update             #检查可用更新    

downgrade                 #包降级 命令实践 显示仓库列表    

group                     #包组相关    

help                     #显示帮助信息    

history                   #显示history    

info                     #显示包相关信息    

reinstall                 #重装    

remove                   #卸载    

repolist                 #显示或解析repo源    search     

查看已安装到的所有包
查看可以让那些软件更新到最新版本
查看nginx有哪些可以安装的软件
软件组管理

常用:    

                 yum grouplist        #列出所有包组    

                 yum groupinstall   #包组安装    

一般命令:    

                 yum groupupdate [options] group1 [...] #包组升级    

                 yum groupremove [options] group1 [...] #包组卸载    

                 yum groupinfo [options] group1 [...] #包组查询

 yum grouplist        #列出所有包组操作   安装组

1,  echo $LANG

2      LANG=EN

3       yum groupinstall "Development Tools" "Security Tools" "System Tools"

           安装软件包组         开发工具             安全工具           System工具

查看所有组

8.1.6自建yum仓库

准备

1,  准备web环境      

2,  准备rpm软件----------从互联网获取-------从本地光盘获取          

3, 创建repodate数据库

4,  测试   ------客户端准备软件源配置为文件----------测试

操作流程

1,yum install -y httpd     下载httpd

2,systemctl disable --now firewalld.service      关闭防火墙

3,systemctl enable --now httpd.service     开启

4,yum reposync --repoid=nju-extras --download-metadata -p /var/www/html/    将阿里云的extras源的相关数据下载到本地 给客户端使用

5,cd /etc/yum.repos.d/   创建文件

文件内容:

[private-extras1]

name=private extras1

baseurl=http://10.0.0.13/nju-extras/

gpgcheck=0 

6,yum makecache    更新软件源

7, yum list --repo="private-extras2" anaconda-live       

列出所有  repo仓库   列出所有仓库="后面是仓库名"软件名

yum 故障处理

8.1.8Ubuntu软件管理

 基础知识 

Debian 软件包通常为预编译的二进制格式的扩展名“.deb”,类似 rpm 文件,因此安装快速,无需编 译软件。包文件包括特定功能或软件所必需的文件、元数据和指令

dpkg:

package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装, 删除和构建软件包,但无法自动下载和安装软件包或其依赖项

apt:

Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/ 服务器架构(c/s)

APT

APT工作原理

在服务器上先复制DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header) 信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。

客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到 客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件 后,会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的 时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以 升级的。

 APT包索引配置文件

 ubuntu 22.04 系统

root@ubuntu24:/etc/apt# cat /etc/apt/sources.list

deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe

multiverse

解读:

deb 代表二进制包的地址标识

deb-src 代表源码包的地址标识

 配置文件格式说明

deb URL section1 section2

#字段说明

deb                               #固定开头,表示是二进制包的仓库,如果deb-src开头,表示是源码库

URL                               #库所在的地址,可以是网络地址,也可以是本地镜像地址

section1                         #Ubuntu版本的代号,可用 lsb_release -sc 命令查看,也可以用 cat

/etc/os-release

section2                         #软件分类,main完全自由软件 restricted不完全自由的软件,universe社区支持 的软件,multiverse非自由软件

section1 #主仓

section1-backports        #后备仓,该仓中的软件当前版本不一定支持

section1-security           #修复仓,主要用来打补丁,有重大漏洞,需要在当前版本中修复时,会放此 仓

section1-updates          #非安全性更新仓,不影响系统安全的小版本迭代放此仓

section1-proposed        #预更新仓,可理解为新版软件的测试放在此仓,

                                     #测试一段时间后会移动到 updates仓或security仓,非专业人士勿用 

APT包结构

在ubuntu库中,有两个重要目录,分别是dists和 pool

dists 目录中存放的是该源仓库中的元数据,包括软件包的名称,适用的架构平台,版本号,依赖关系 等  

pool 目录中存放的是具体包文件

 8.1.9  dpkg 包管理器

dpkg命令

使用方式:dpkg 选项  要安装的包

选项:

  -i     |--install package.deb                 #安装包

 -r     |--remove packageName            #删除包,不建议,不自动卸载依赖于它的包

前提将包下载好

安装包
卸载已安装的软件包

 8.2.1本地安装 命令用法

使用方法: apt   选项     软件名

常见命令    

list                          #根据名称列出软件包 不加名默认列出全部   

search                   #搜索软件包描述    

show|info               #显示软件包细节    

install                     #安装软件包    

remove                  #移除软件包    

autoremove           #卸载所有自动安装且不再使用的软件包    

update                   #更新可用软件包列表,只更新索引文件,不具体

apt-cache madison        查看版本

apt-cache depends        查看依赖

 当遇到apt install 异常严重报错的时候,可以通过下面的命令来修复。

apt --fix-broken install

apt list 默认列出所有可安装包
apt list --installed 列出所有和installed相关的包
在包名和描述信息中搜索相关包
查看包的基本信息
显示指定软件的所有版本软件
安装一个软件

显示软件包细节
移除软件包
更新可用软件包列表,只更新索引文件,不具体
查看版本
查看包依赖

8.2.2 源码包部署

流程:

1 部署make编译环境

2 获取项目源代码文件

3 解压软件包

4 编译安装软件 - configure定制配置 -> make编译生成配置文件 -> make install转移文件到安装目录

5 将可执行文件路径加入PATH环境变量

6 测试效果

注意:

如果没有configure可执行文件

- autoconf: 生成confifigure脚本

对于大部分的开源软件项目来说,他们的编译工具是 make

对于特殊的编程语言来说,比如 java语言项目,编译工具是 ant|maven等专用工具

配置环境

Centos系统: 和基础编译环境有关系的软件 yum install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssldevel systemd-devel zlib-devel

和常用工具有关系的命令软件 yum install vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages

工具组方式 yum groupinstall "Development Tools" "System Tools"

Ubuntu系统:

和基础编译环境有关系的软件 apt install build-essential gcc g++ libc6 libc6-dev libpcre3 libpcre3-dev libssl-dev libsystemd-dev zlib1g-dev

和常用工具有关系的命令软件 apt install vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-common manpages-dev

软件组方式 apt install build-essential

1,下载

创建文件夹mkdir /softs; cd /softs

 下载   wget http://nginx.org/download/nginx-1.23.0.tar.gz

2, 解压

tar xf nginx-1.23.0.tar.gz

3, 配置

默认配置https://blog.csdn.net/2301_/article/details/configure

4, 编译

make

5,转移

make install

6, 环境变量

export PATH=/usr/local/nginx/sbin:$PATH

启动  nginx

9.1.1磁盘存储

设备文件

设备文件有自己的标识主设备号,次设备号

设备标号    sd | nvme | vd 

设备号

设备文件类型

磁盘设备的设备文件命名

 硬盘

简介:

          硬盘是计算机系统中一个至关重要的非易失性存储设备,即使计算机关闭,存储的数据也不会丢失。它主 要由一个或多个以铁氧体为材料的盘片组成,盘片表面涂有磁性材料,用于存储和检索大量的二进制数据。 硬盘负责长期存储大量数据,包括操作系统、应用程序、文档、图片、视频等。用户可以随时读取和写入 数据,以满足各种计算任务的需求。

硬盘接口类型:

- IDE:133MB/s,并行接口,早期家用电脑

- SCSI:640MB/s,并行接口,早期服务器

- SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线

- SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而 SATA中不包 含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行

- USB:480MB/s

- M.2:

注意:

速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

磁盘大小

- LFF:3.5寸,一般见到的那种台式机硬盘的大小

- SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘

注意:

L、S分别是大、小的意思,纯粹是物理层面的含义 目前服务器或者盘柜采用sff规格的硬盘主要是考虑增大单位密度内的磁盘容量、增强散热、减小功耗

机械硬盘(HDD)

Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数 据转换器,接口,缓存等几个部分组成。 机械硬盘中所有的盘片都装在一个旋转轴 上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁 头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个 磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指 定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反 方式读取。 硬盘为精密设备,进入硬盘的空气必须过滤。

固态硬盘(SSD)

Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、 DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺 寸上也与普通硬盘一致

关联区别

硬盘(Hard Disk Drive, HDD) 传统的硬盘类型,采用磁性存储技术,通过盘片的旋转和磁头的移动来读写数据。 存储容量大、价格相对较低,但读写速度相对较慢,且存在机械结构,易受震动影响。 固态硬盘(Solid State Drive, SSD) 采用闪存芯片作为存储介质的新型硬盘,没有机械结构,因此读写速度极快,抗震性能优越。 价格相对较高,但随着技术进步逐渐亲民;存储容量虽然有限,但已能满足大多数应用需求;适用于需要 高读写速度和稳定性的场景。

磁盘容量

硬盘容量以兆字节(MB)或千兆字节(GB)为单位,主流硬盘容量可达数TB(太字节)。硬盘容量的实 际值可能会因计算方法的差异(硬盘厂商采用1000进制而操作系统采用1024进制)而略小于标称值。例如, 标称1TB的硬盘在操作系统中可能显示为约0.93TB

存储术语

磁盘上寻址的两种方式

CHS(Cylinder-Head-Sector 柱面-磁头-扇区)也称为3D模式

- 它通过提供柱面号、磁头号和扇区号来唯一确定一个扇区的位置。    

- CHS采用 24 bit位寻址    

- 其中前10位表示cylinder,中间8位表示head,后面6位表示sector    

- 最大寻址空间 8 GB    

- 是硬盘最早采用的寻址模式之一。

LBA (logical block addressing)    

- LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址    

- ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到 128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes    

- 它基于扇区的线性编号来定位数据,不受柱面、磁头和扇区的限制。    

- 在现代硬盘中,LBA寻址方式已经成为主流。

在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;

在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

 磁盘术语

MBR     硬盘的第一个扇区(0道0头1扇区)

ZBR      区位记录,是一种物理优化硬盘存储空间的方法

 常见命令

文件管理工具

文件系统查看工具df

df  -Th      df查看文件系统

文件系统目录信息统计工具du

du -sh /etc      du查看文件系统目录

文件系统定制工具dd

dd if=SRC of=DEST bs=N count=N                dd定制文件系统文件

skip=blocks                                                      从开头忽略blocks个ids大小得块

seek=blocks                                                     从开头忽略blocks个ids大小得块

if=file           #从所命名文件读取而不是从标准输入    

of=file          #写到所命名的文件而不是到标准输出    

bs=size       #指定块大小(既是是ibs也是obs)    

count=n       #复制n个bs

hexdump -n 512 -Cv /dev/sda | tail -5            以十六进制方式展示查看文件二进制内容-n指定查看多少字节    

-v   表示以“verbose”模式显示

-c   表示以十六进制和ASCII字符混合显示

-n   512表示只显示前512字节

df查看文件系统相关信息
查看指定目录空间大小信息

 9.1.2 存储管理

基础知识

基本步骤:

当我们拿到一块物理磁盘的时候,我们可以按照如下的步骤,实现在服务器中使用使用磁盘空间的效果

1. 设备分区

2. 文件系统格式化

3. 挂载新的文件系统

磁盘分区

磁盘分区是指将一个硬盘划分为多个独立的存储区域,每个区域都拥有自己的文件系统和卷标。这种划分 方式使得用户可以更方便地管理和存储不同类型的文件。磁盘分区是计算机存储管理的重要基础,对于提高数 据存储的效率和安全性具有重要意义

 为什么要磁盘分区

使用磁盘分区的原因主要有以下几点:    

               数据管理:通过分区,用户可以将不同类型的文件存放在不同的分区中,便于分类管理和查找。    

             系统安全:将操作系统和用户数据分别存放在不同的分区中,可以在系统崩溃或需要重装时保护用户数据 不受影响。    

            性能优化:合理的分区策略可以减少磁盘碎片,提高磁盘的访问速度和效率。    

            多操作系统支持:通过分区,用户可以在同一台计算机上安装并运行多个操作系统,满足不同的应用需 求

 分区类型

 分区类型: 主分区    扩展分区       逻辑分区       

 分区实现方式

MBR 分区方式

简介       

       MBR是一种传统的分区模式,最早在1983年随着PC DOS 2.0对硬盘的支持而出现。它是IBM兼容机硬盘 或可移动磁盘分区时,在驱动器最前端的一段引导扇区。这段扇区包含了分区表、引导加载程序代码等重要信 息。

分区数量:

       MBR分区表最多支持4个主分区,或者3个主分区和1个扩展分区(扩展分区下可以创建多个逻辑分区)。 容量限制:

       由于MBR使用32位的LBA(Logical Block Addressing)寻址方式,其最大可寻址的存储空间只有 2TB(2^32个扇区,每个扇区512字节)。虽然一些硬盘制造商通过提高扇区大小(如4KB扇区)将MBR的有效 容量上限提升到16TiB,但这仍然是一个显著的限制。

      MBR分区方式在一些老旧的操作系统和硬件平台上具有较好的兼容性,如Windows 7、XP以及更早的 Windows版本。然而,随着硬件和软件的发展,MBR的兼容性优势逐渐减弱。

 GPT 分区方式

         GPT是一种现代的磁盘分区方案,由EFI(Extensible Firmware Interface,可扩展固件接口)标 准提出并推广。GPT旨在克服MBR所存在的一些限制,并提供更多的功能和灵活性。

大容量支持:

         GPT使用64位LBA寻址方式,理论上可以支持最大容量为9.4ZB(1ZB=1024^7字节)的硬盘,远超MBR 的2TB限制。 更多分区支持:

         GPT可以支持最多128个分区(在Windows系统中),而MBR最多只能有4个主分区(或3个主分区+1个扩 展分区)。 数据冗余与校验:

         GPT在硬盘两端各保存一份分区表副本,以及CRC32校验,有助于提高数据完整性和容错性。 兼容性:

         GPT不仅支持现代的操作系统和硬件平台(如Windows 10/11、macOS、Linux等),还提供了对 UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)的更好支持。

 

9.1.3 MBR方案

特点:

       每个扇区512字节

第一扇区:

-  446bytes: boot loader 启动相关

-  64bytes:分区表,其中每16bytes标识一个分区

-  2bytes: 55AA,标识位

分区标识:dos

分区样式:

最多四个分区,三个主分区一个扩展分区,扩展分区中可以有n个逻辑分区

3主分区+1扩展分区(N个逻辑分区)

 GPT 分区

特点:源自EFI标准的较新磁盘分区表结构,支持大硬盘、分区数量无限制、启动方便,分区标识gpt

结构:保护MBR,GPT头、分区表、GPT分区 、备份区域,分区表备份、GPT头备份

 9.1.4 命令解读

fdisk命令用于操作管理分区

命令格式:fdisk [options] -l []

创建分区:

前提:fdisk /dev/sda

进入分区操作:创建分区 n      选择分区:类型 p主 | 扩展        分区号: 默认是一而且是递增

起始扇区号  ;回车            结束扇区号: 回车      检查   p        保存   w

lsblk命令用于查看设备信息

命令格式: lsblk [options] [ ...]

 9.1.5 创建分区

fdisk分区

fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。它常 被用于创建、删除、调整磁盘分区,以及更改分区类型等操作。 fdisk主要使用传统的MBR(主引导记录)分区表格式。MBR分区表有一些限制,例如最多支持4个主分区 或

3个主分区和1个扩展分区

分区创建标准流程

进入手动分区交互模式

fdisk /dev/sdb

命令(输入 m 获取帮助):m # 输入m 查看命令帮助

进入分区操作:创建分区 n      选择分区:类型 p主 | 扩展        分区号: 默认是一而且是递增

起始扇区号  ;回车            结束扇区号: 回车或者+10G      检查   p        保存   w

更改分区类型标识 

更改标识 t

选择分区 4

确定分区标识号  86

保存 w

非交互模式创建分区

echo -e 'n p +10G w' | fdisk /dev/sdb

删除三个分区

echo -e 'd d d w' | fdisk /dev/sdb

 gdisk 分区

gdisk是GPT(GUID分区表)磁盘分区工具 - "GPT fdisk",适用于使用GPT分区表的系统。GPT是一 种新一代的磁盘分区方案,可以解决MBR的一些限制。与MBR相比,GPT支持更大的磁盘容量、更多的分区、更 可靠的数据恢复等特性。

进入手动分区交互模式

gdisk /dev/nvme0n1

其他与fdisk分区

 9.1.6文件系统

文件系统基础

基础知识

操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行 保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安 全控制,日志,压缩,加密等。

文件系统的组成

- 内核中的模块:ext4, xfs, vfat

- Linux的虚拟文件系统:VFS

- 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

 常见文件系统类型

 Linux常见文件系统类型:

ext4        ext 文件系统的最新版

xfs          支持最大8EB的文件系统

- EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本    

- Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB    

- 理论上支持无限数量的子目录    

- Ext4文件系统使用64位空间记录块数量和 inode数量    

- Ext4的多块分配器支持一次调用分配多个数据块    - 修复速度更快

XFS  

 - 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容    

- 用优化算法,日志记录对整体文件操作影响非常小    

- 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB    

- 能以接近裸设备I/O的性能存储数据

 9.1.7mkfs [必会] 格式化文件系统

命令格式 mkfs [options] [-t ] [fs-options] []

使用:

mkfs.ext4 /dev/sdb

mkfs.xfs /dev/nvme0n1p1

查看:

lsblk  -f /dev/sdb

 

 9.1.8mount挂载文件系统命令解读 

挂载命令格式:mount [-t 文件系统类型] [-o 特殊选项] 源文件系统 目标挂载点

只读挂载:mount /dev/sdb1 -o ro /mount/ext

xfs挂载 :mount -t xfs /dev/nvme0n1p2 /mount/xfs

卸载命令格式:umount [-f] [-l] [-n] 挂载点

卸载:umount /dev/sdb1

 查看已挂载的所有文件系统    mount
exT4挂载
xfs挂载
卸载

 9.1.9持久挂载

步骤:

1 打开/etc/fstab文件

2 添加挂载信息    挂载信息为要挂载的UUID   /mount/xfs      xfs     defaults     0  0

3 保存并关闭文件

4 验证挂载配置mount | grep /mount             mount -a                mount | grep /mount

fstab格式 : <文件系统设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>

fstab配置生效 : 

新增|删除属性:mount -a 

修改属性:mount -o remount

  

 9.2.1异常修复

检测ext4

fsck.ext4 /dev/sdb1

e2fsck /dev/sdb1

检测xfs

xfs_repair -n /dev/nvme0n1p2

修复硬盘

e2fsck /dev/sdb1

 9.2.2交换分区

简介:

交换分区是虚拟内存的一种特殊分区当物理内存不满足当前运行时操作系统会将暂时不使用的数据交换到虚拟分区中释放RAM空间供其他程序使用。但是配置过多的swap空间会造成浪费。

 9.2.2.1交换分区的实现过程

1. 创建交换分区或者文件

2. 使用mkswap写入特殊签名

3. 应用交换分区

- 永久使用:在/etc/fstab文件中添加适当的条目

- 临时使用:使用swapon|swapoff -a 激活|禁用交换空间

- 参数使用:/proc/sys/vm/swappiness的值为 0~100

 9.2.2.2启动swap分区命令解读

swapoff -a               临时禁用

swapon -a               临时启用

sed -i.bak '/swap/d' /etc/fstab              永久禁用

  vm.swappiness=0                 内核禁用 

swap使用策略:

CentOS7和8默认值为30

对于ubuntu和Rocky linux9来说,默认值是60

9.2.3RAID

定位:

在多个磁盘上分配数据,从而提升数据传输速度和存储性能

原理:

物理层面: 磁盘阵列

逻辑层面: 存储资源池动态管理

实现方式:

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID: 主板集成RAID控制器,安装OS前在BIOS里配置

软件RAID:通过OS实现,比如:群晖的NAS 

分类:

硬件RAID:

硬件驱动的RAID系统  :一个RAID控制器芯片   一组附加的驱动器组成

 RAID类型

常见类型:

RAID-0:n块盘的总容量的使用,没有冗余功能   其中一块盘坏了所有文件都没法使用了50%的使用率

RAID-1:n块盘的一半容量的使用,有冗余能力   一个使用一个做备份50%的使用率

RAID-5:数据和奇偶校验信息分散在多个磁盘上容错一个磁盘的故障   磁盘利用率高综合性能最佳

RAID-10:两组RAID-1组成RAID-0来使用   RAID-10也被称为RAID 1+0,是RAID 1与RAID 0的结合体。它首先创建多个RAID 1镜像对,然后将 这些镜像对组合成一个RAID 0阵列。这种结构既提供了RAID 0的高性能,又具备了RAID 1的数据冗余和容 错能力。 由于采用了RAID 0的条带化技术,RAID-10能够并行读写多个磁盘,从而显著提高数据传输速度

9.2.4LVM

 简介:

      LVM(Logical Volume Manager)即逻辑卷管理器

特点:

      LVM在硬盘分区和文件系统之间添加了一个逻辑层

原理解读:

物理存储介质:

     指系统的存储设备,如硬盘,是存储系统的最低层存储单元。

-----

     PV(Physical Volume,物理卷):    

         是LVM存储管理的最底层,可以是整个物理硬盘或实际物理硬盘上的分区。    

         物理卷在加入LVM之前需要经过特殊处理,以便LVM能够识别和管理。

    VG(Volume Group,卷组):    

        是建立在物理卷之上的一个逻辑层,它包含了一个或多个物理卷。    

        卷组将多个物理卷组合在一起,形成一个可管理的单元,类似于非LVM系统中的物理硬盘。

     LV(Logical Volume,逻辑卷):    

        是建立在卷组之上的一个逻辑层,它类似于非LVM系统中的硬盘分区。    

        逻辑卷可以在其上建立文件系统,并挂载到不同的挂载点,用于存储数据。

-----

    PE(Physical Extent,物理区域):    

       是物理卷中可用于分配的最小存储单元。PE的大小是可配置的,默认为4MB。     

      在建立卷组时,物理区域的大小会被指定,并且一旦确定就不能更改。    

       同一卷组中的所有物理卷的物理区域大小必须一致。 

    LE(Logical Extent,逻辑区域):    

      是逻辑卷中可用于分配的最小存储单元。    

      逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小,即一个LE对应一个PE。

9.2.4.1创建实践

准备工作:添加5块盘,然后进行分区

创建pv:

pvcreate /dev/sdb1 /dev/sdc1

查看信息     pvs     pvdisplay /dev/sdb1

创建vg:lvcreate -l 5G -n lv1 testvg 

查看信息;    lvs          lvscan             lvdisplay /dev/testvg/lv1

挂载实践:

格式化:mkfs.ext4 /dev/testvg/lv1

挂载:mount /dev/testvg/lv1 /mount/lvm/

9.2.4.2管理实践

扩容实践:

增加新pv       vgextend testvg /dev/sdd1

扩展逻辑卷 :      lvextend -L +1G /dev/testvg/lv1

扩容文件系统;       resize2fs /dev/testvg/lv1

扩展所有容量 :     lvresize -r -l +100%FREE /dev/testvg/lv1

 缩容实践:

取消挂载:umount /dev/resrvg/lv1

文件系统检测 :   e2fsck -f /dev/testvg/lv1

缩减文件系统:     resize2fs /dev/testvg/lv1 3G

缩减逻辑卷:      lvreduce -L 3G /dev/testvg/lv1

重新挂载:     mount /dev/testvg/lv1 /mount/lvm

精简动作:umount /dev/testvg/lv1
lvreduce  -L 1G -r /dev/testvg/lv1
mount /dev/testvg/lv1 /mount/lvm

9.2.4.3删除实践

逻辑:

解除 挂载:umount /mount/lvm

删除逻辑卷;  lvremove /dev/testvg/lv1

删除卷组:vgremove testvg

删除物理卷:pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1

删除指定pv:

数据转移:pvmove /dev/sdb1

移出vg:vgreduce testvg /dev/sdb1

删除pv: pvremove /dev/sdb1

9.2.4.4lvm快照

定位:对逻辑卷(LV)进行备份或创建数据的时间点副本

基本流程:

准备工作:lvs /dev/testvg/lv1

创建快照:lvcreate -n lv1_snapshot -s -L 100M -p r /dev/testvg/lv1

挂载快照:mount /dev/testvg/lv1_snapshot /mount/lvm_snapshot/

备份数据:对数据进行还原操作

恢复数据:

取消挂载:umount /mount/lvm         umount /mount/lvm_snapshot

恢复数据:lvconvert --merge /dev/testvg/lv1_snapshot

测试效果:mount /dev/testvg/lv1 /mount/lvm

10.1.1网络分层

分层的目与意义 

 简化设计:

通过将复杂的网络通信过程分解为若干个相对独立、功能明确的层次,可以简化网络的设计、实现和维 护。

模块化:

每一层都实现一种相对独立的功能,降低系统的复杂度,便于开发人员理解和实现。

可扩展性:

各层之间界面清晰,易于添加新的功能或协议,提高网络的扩展性。

灵活性:

各层功能的精确定义独立于具体的实现方法,可以采用最合适的技术来实现。

 层次划分的方法

 网络的层应当具有相对独立的功能

梳理功能之间的关系,使一个功能可以为实现另一个功能提供必要的服务,从而形成系统的层次结构 为提高系统的工作效率,相同或相近的功能仅在一个层次中实现,而且尽可能在较高的层次中实现 每一层只为相邻的上一层提供服务

OSI七层模型

ISO发布著名的OSI标准定义了网络互联的7层框架

1,物理层: 负责传输比特流,提供物理连接和传输介质,如电缆、光缆等。 包括了针脚、电压、线缆规范、集线器、中继器、主机接口卡等。

2,数据链路层: 在相邻的两个节点之间建立、维持和释放数据链路,进行差错控制和流量控制。 例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。

3,网络层: 为分组交换网上的不同主机提供通信服务,实现网络互联和路由选择。 例如:互联网协议(IP)等。

4,传输层: 为应用程序提供端到端的通信服务,确保数据在传输过程中的完整性和可靠性。 例如:传输控制协议(TCP)等。

5,会话层: 负责建立、管理和终止会话,实现数据同步等功能。

6,表示层: 负责数据的表示和转换,确保数据在不同系统之间的兼容性。

7,应用层:为应用软件提供网络服务,如文件传输、电子邮件等。 例如: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等

 OSI七层:

应用层:  应用软件生成的数据

表示层:  数据的表示和转换

会话层:  

传输层:     端口  --- 传输协议  TCP|UDP

网络层:  路由器       IP

数据链路层:网卡 身份表示 MAC 

物理层: 网卡 ,网络 ,等设备

 TCP/IP四层模型

 1,网络接口层(相当于OSI的物理层和数据链路层):负责物理连接和数据链路层的功能,如帧的封装和解封装 等。

2,网络层:与OSI模型的网络层功能相同,负责路由选择和分组转发。

3,传输层:与OSI模型的传输层功能相同,负责端到端的数据传输和流量控制。

4,应用层:与OSI模型的应用层功能相同,为用户提供网络服务,如HTTP、FTP等。

10.1.2组网设备

 常见的组网设备包括路由器(Router)、交换机(Switch)、集线器(Hub)、中继器(Repeater) 以及线缆等,它们在构建和管理网络中发挥着各自独特的作用。

设备 功能 场景 特点 路由器 连接不同网络的设备, 它根据路由协议和转发 表自动转发数据包,实 现不同网络之间的通 信。 各种网络环境 强大的路由功能,能够处理复杂的网络拓扑 结构和路由协议。同时,它还提供防火墙、 NAT(网络地址转换)等安全功能,保护网 络免受攻击。 交换机 连接局域网(LAN)中 的设备,它根据MAC地 址转发数据包,实现局 域网内部设备之间的快 速通信。 企业网络、数 据中心等需要 高效数据传输 的环境 多端口连接、学习和转发、全双工通信等特 点,能够提供高性能、低碰撞率的网络传 输。此外,一些高级交换机还支持虚拟局域 网(VLAN)技术,提高网络安全性和管理 灵活性。主要有 傻瓜交换机、二层交换、 三层交换机。 集线器 数据通信系统中的基础 设备,它像网卡一样工 作于OSI参考模型的物理 层,对接收到的信号进 行再生整形放大,以扩 大网络的传输距离 小型网络或家 庭网络,作为 网络中的连接 点。 采用广播方式发送数据,即把数据包发送到 与集线器相连的所有节点。因此,它不具备 交换机所具有的智能记忆能力和学习能力。 它是中继器的一种形式,可以认为集线器是 一个多端口的中继器。同享带宽+半双工。 中继器 工作在物理层上的连接 设备,它通过对数据信 号的重新发送或转发, 来扩大网络传输的距 离。 两个网络节点 之间物理信号 的双向转发工 作,特别是在 需要延长网络 距离的环境 中。 中继器只能对在线路上的信号进行"放大再 生",不能对信号进行任何处理或过滤。因 此,它只能用于连接相同的局域网网段。 线缆 连接设备、传输数据的 基础设施,包括光缆、 电缆等。 各种网络环境 线缆的种类和规格繁多,根据传输介质的不 同,可以分为铜缆(如以太网电缆)和光缆 (如光纤)。铜缆传输距离较短,但成本较 低;光缆传输距离长、速度快,但成本较 高。

 超五类线:

传输带宽为100MHZ近距离情况下传输速率可达1000Mbps,具有衰减小,串扰少,比五类线增加了近端串音功率和测试要求,所以它是当前应用最为广泛的网线

六类线:

传输带宽为250MHZ最适用于传输速率为1Gbps的应用改善了在串扰以及回波损耗方面的性能这一点对于新一代全双工的高速网络应用而言是极重要的还有一个特点是在4个双绞线中间加了十字形骨架

超六类线:

超六类线是六类线的改进版,同样是ANSI/TIA-568C.2和ISO/IEC  11801超六类/EA级标准中规定的一种双绞电缆主要应用于万兆网络中传输频率500MHZ 最大传输速度也可达10Gbpas,在外部串扰等方面有较大改善

目前使用范围最广的是超五类,六类等网线

10.1.3 分层网络

 层次划分与功能

核心层:

位于网络架构的最顶层,负责告诉转发数据包,提供网络之间的连接。核心层设备通常具有高雄能和高速转发能力以确保网络的高吞吐量和低延迟。

汇聚层:(也称为分发层或会聚层)

位于核心和接入层之间,负责处理和分发来自接入层的数据,并将其发送到核心层。汇聚层设备需要具有较高的处理能力,因为他们需要进行更复杂的决策,如基于网络策略的路由选择。汇聚层还负责实施安全策略和服务质量(QoS)控制,以及流量聚合和分发。

接入层(也称边缘层):

位于网络的最外层,扶着连接终端用户设备,如电脑,手机和其他网络设备。接入层设备通常处理大量的低速,低容量的连接,并提供各种服务,如动态主机配置协议(DHCP)和网络地址转换(NAT)。

·应用场景:

分层网络架构广泛应用与各种网络环境中,包括企业网络,数据中心,服务提供商网络等。在企业网络中,分层网络架构可以帮助企业实现网络隔离,优化性能和增强安全性。在数据中心中,分层网络架构可以提高网络的可靠性和性能,满足高负载和实施性要求。在服务提供商网络中,分层网络架构可以为不同用户提供独立的虚拟网络环境,满足其特定的网络需求。

10.1.4应用端

 TCP/IP

TCP/IP往往指的是网络层和传输层

TCP/IP传输控制协议/因特网互联协议,由于这两个协议在传输层和网络层用的非常的多,所以将这两者提取出来作为传输层+网络层的通信功能代号。所以说,我们一般说的TCP/IP 其实是一个protocol stack,包括TCP,IP,UDP,ICMP,RIP,TELNET,FTP,SMTP等许多协议。

TCP协议是一种面向连接的,可靠的,基于字节流的传输层通信协议它通常与IP一起使用构成了互联网中最核心的网络协议之一即TCP/IP协议簇。TCP协议在传输数据之前,会先建立一条虚拟的连接,然后会在这条连接上可靠的传输数据,并在数据传输结束后释放连接。

数据传输:

       TCP端口是数据传输的通道,它允许不同进程之间的数据传输。在TCP连接建立后,数据可以通过端口在 客户端和服务器之间传输。网络控制  流量控制  数据完整性

服务标识:

       每个TCP端口都对应一个特定的服务或应用程序。通过端口号,客户端可以请求连接到特定的服务。

安全性:

       TCP端口的安全性对于整个网络通信至关重要。通过限制哪些端口可以打开和哪些数据可以通过这些端口 传输,可以提高系统的安全性。

端口信息:

常用服务及端口对应关系 cat /etc/services

查看非特权用户可以使用起始端口

cat /proc/sys/net/ipv4/ip_unprivileged_port_start

查看客户端动态端口起始

cat /proc/sys/net/ipv4/ip_local_port_range

10.1.5

三开四断

 三次握手

第一次握手:

         A首先向B发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机 的),消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。

第二次握手:

         B收到A的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1, 确认序号为ack=x+1,然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后,B进入SYN_RCVD 状态,与连接消息一样,这条消息也不能携带数据,同时消耗一个序号。

第三次握手:

        A收到B的确认消息后,需要给B回复确认数据,这时TCP头部中的ACK标识位值为1,确认序号是 ack=y+1,自己的序号在连接请求的序号上加1,也就是seq=x+1,此时A进入ESTABLISHED状态,当B收到A 的确认回复后,B也进入ESTABLISHED状态,至此TCP成功建立连接,A和B之间就可以通过这个连接互相发送 数据了。

 

 四次断开

第一次挥手:

       A首先向B发送断开连接消息,这时TCP头部中的FIN标识位值为1,序号是seq=m,m为A前面正常发送数 据最后一个字节序号加1得到的,消息发送后A进入FNI_WAIT_1状态,FIN=1的报文段不能携带数据,但要消 耗一个序号。

第二次挥手:

       B收到A的断开连接请求需要发出确认消息,这时TCP头部中的ACK标识位值为1,确认号为ack=m+1,而 自己的序号为seq=n,n为B前面正常发送数据最后一个字节序号加1得到的,然后B进入CLOSE_WAIT状态,此 时就关闭了A到B的连接,A无法再给B发数据,但是B仍然可以给A发数据(此处存疑),同时B端通知上方应用 层,处理完成后被动关闭连接。然后A收到B的确认信息后,就进入了FIN_WAIT_2状态。

第三次挥手:

       B端应用层处理完数据后,通知关闭连接,B向A发送关闭连接的消息,这时TCP头部中的FIN和ACK标识位 值均为1,确认号ack=m+1,自己的序号为seq=k,(B发出确认消息后有发送了一段数据,此处存疑),消息 发送后B进入LAST_ACK状态。

第四次挥手:

       A收到B的断开连接的消息后,需要发送确认消息,这是这时TCP头部中的ACK标识位值为1,确认号 ack=k+1,序号为m+1(因为A向B发送断开连接的消息时消耗了一个消息号),然后A进入TIME_WAIT状态, 若等待时间经过2MSL后,没有收到B的重传请求,则表明B收到了自己的确认,A进入CLOSED状态,B收到A的 确认消息后则直接进入CLOSED状态。至此TCP成功断开连接。

 常见面试问题:

1.三次握手能不能减少一次

2.四次断开能不能减少一次

回答:

1.不能

2.TCP协议是可靠性连接请求连接和断开连接都是双方需要确认的少一次都不行

10.1.6有限状态机

简介:

          TCP有限状态机【FSM:Finite State Machine】是一个数学模型,用于描述TCP连接在生命周期内的 各种状态以及状态之间的转换。这些状态包括初始状态、连接建立状态、数据传输状态和连接关闭状态等。每 个状态都有特定的行为和条件,当满足特定条件时,TCP连接将从当前状态转换到下一个状态。

作用:

         TCP有限状态机的作用是确保TCP连接的可靠性和稳定性。通过定义各种状态和状态转换条件,TCP有限 状态机能够处理各种网络异常情况,如报文丢失、网络拥堵等。同时,它还能够确保数据传输的完整性和顺序 性,避免数据丢失和重复传输。

状态切换:

TCP有限状态机的状态转换是通过各种事件触发的。这些事件包括发送和接收报文段、超时等。例如:    

      当客户端发送SYN报文后,进入SYN_SENT状态。    

      当服务端接收到SYN报文并发送SYN+ACK报文后,进入SYN_RCVD状态。    

      当客户端接收到SYN+ACK报文并发送ACK报文后,进入ESTABLISHED状态。    

      当一方发送FIN报文后,进入FIN_WAIT_1状态或CLOSE_WAIT状态(取决于发送方是客户端还是服务 端)。    

     当另一方接收到FIN报文并发送ACK报文后,发送方进入FIN_WAIT_2状态或LAST_ACK状态(取决于发 送方是客户端还是服务端)。    

    当接收方发送完所有剩余数据并发送FIN报文后,进入TIME_WAIT状态或CLOSED状态(取决于发送方是 客户端还是服务端)。

 

 

10.1.7进程间通信

 Socket简介:

Socket是网络编程中一种重要的通信机制,它提供了在网络上进行通信的接口。Socket本质上是一种通 信的端点,它在网络上标识了一个通信链路的两端,并提供了通信双方所需的接口和功能。 通过使用Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换(网络通信)。

类型:

TCP Socket: 基于TCP(传输控制协议),使用三次握手建立连接,确保数据的可靠性和顺序性。TCP是一种面向连接 的协议,适用于需要可靠传输的场景。 UDP Socket: 基于UDP(用户数据报协议),无需建立连接,提供了简单的数据传输服务,但不保证数据的可靠性和顺 序性。UDP适用于一些实时性要求高、允许一定数据丢失的应用场景。

工作原理:

 客户端:

       首先创建一个Socket对象,用于与服务器端建立连接。 然后调用connect方法来连接服务器, - 并通过send方法发送数据, - recv方法接收数据。 通信结束后,调用close方法来关闭连接并释放资源。

服务器端:

       首先创建一个Socket对象,用于监听客户端的连接请求。 然后将Socket对象绑定到一个特定的地址和端口上,以便客户端能够连接到该地址和端口。 接着调用listen方法来开始监听客户端的连接请求。 一旦客户端发起连接请求,服务器端会调用accept方法来接受连接, 并创建一个新的Socket对象用于与该客户端进行通信。 之后,服务器端就可以通过新创建的Socket对象来接收和发送数据了。

常见方法

系统信号:用于通知进程某个事件已经发生

管道:  用于具有亲源关系进程间的数据传递

套接字:不仅可用于一台计算机上的进程间通信,还可以用于不同计算机之间的网络通信

文件锁:用于进程间对共享文件的同步访问

消息队列:允许一个或多个进程向它写入或从中读取信息

信号灯:用于进程间的同步与互斥

10.1.8网络层协议

 主要功能:

定义逻辑地址:网络层定义了基于IP协议的逻辑地址,即IP地址,用于标识网络中的设备。 连接不同网络:网络层能够连接不同的网络媒介类型,实现不同网络之间的通信。

路径选择:网络层负责选择数据通过网络的最佳路径,确保数据能够高效、准确地到达目的地。

数据包格式:网络层规定了IP数据包的格式,包括固定部分和可变长部分,用于封装和传输数据。

核心协议:

IP协议:

IP(Internet Protocol,互联网协议)是网络层的核心协议,它定义了数据包的格式、寻址方式和 路由选择等。IP协议使得不同网络之间的设备能够进行通信,是互联网的基础。

ICMP协议:

ICMP(Internet Control Message Protocol,互联网控制消息协议)是一个“错误侦测与回馈机 制”,用于发送错误和控制消息。ICMP协议封装在IP数据包中,用于测试两台主机之间的连通性,如ping命令 就使用了ICMP协议。

ARP协议:

ARP(Address Resolution Protocol,地址解析协议)用于将IP地址解析成MAC地址,实现局域网 中主机之间的通信。ARP协议通过发送ARP请求和ARP应答消息,使得设备能够获取对方的MAC地址,从而进行 数据传输。 注意: mac 属于物理地址,mac 地址不可变,一出厂就写死,标识惟一设备

10.1.9 ip地址

 IP地址由两部分组成:

- 网络ID:标识网络,每个网段分配一个网络ID,处于高位

- 主机ID:标识单个主机,由组织分配给各设备,处于低位

IP地址是指互联网协议地址又称网络协议地址。IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异

作用

网络寻址:IP地址是互联网上的设备惟一标识符,用于路由数据包并确保他们到达正确的目的地

广域网连接:IP地址允许设备在全球范围内进行广域网连接,包括互联网,公司内部网络和云服务

 IPV4,即互联网协议第4版,是互联网工程任务组(IETF)在1981年开发完成的网络协议版本

IPV4使用32位二进制数字表示IP地址,通常呈现为4个由点分开的十进制整数,每个整数的取值范围为0到255

IPV4的地址空间有限,只有约42亿个地址是可用的,随着互联网的快速发展IPV4地址空间在数年内就会被消耗完。

特点:

IPV4的地址易于理解和配置,已经广泛应用与各种网络环境

IPV4的地址格式已于扩展,允许不同的设备使用同一IP地址(通过NAT等技术实现)。

IPV4的安全性有限,缺乏内置的安全保护机制

IPV4地址按用途和范围分为A,B,C,D,E类,其中A类用于大型网络,B类用于中型网络,C类用于小型网络,D类用于组播,E类保留为实验用途

IP地址分类是根据IP地址的范围划分为不同的类别,共有5个不同的IP地址分类,分别是A类、B类、C类、D类和E类。

A类IP地址范围为1.0.0.0到126.0.0.0,用于较大规模的网络,可以分配给全球范围内的大型机构和公司。

B类IP地址范围为128.0.0.0到191.255.0.0,用于中等规模的网络,分配给大中型机构和公司。

C类IP地址范围为192.0.0.0到223.255.255.0,用于小型网络,分配给小型公司和组织。

D类IP地址范围为224.0.0.0到239.255.255.255,用于多播(Multicast)通信,用于向多个目标发送数据。

E类IP地址范围为240.0.0.0到255.255.255.255,保留作为未分配的地址空间,用于特殊用途。

通过IP地址分类,可以对不同规模的网络进行有效的管理和划分。

 IPV4使用32位二进制数表示IP地址,通常呈现为4个由点分开的十进制整数每个整数的取值范围为0到255它有两种表现样式:

表现形式1:

IPADDR=192.168.1.1

NETMASK=255.255.255.0

表现形式2:

IPADDR=192.168.1.1/24

 IP地址

IP地址由两部分组成

-网络ID:标识网络,每个网段分配一个网络ID,处于高位

-主机ID:标识单个主机,由组织分配给各设备,处于低位

特殊地址;

10.2.1子网掩码

简介:

CIDR是互联网中一种新的寻址方式,旨 在更高效地分配和管理IP地址空间。

CIDR无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16

CIDR通过变化的子网掩码来允许更加精细地划分和分配IP地址。子网掩码定义了IP地址中哪部分属于网 络地址,哪部分属于主机地址

在CIDR中子网掩码不再局限于传统的A类、B类、C类地址的固定格式(如255.0.0.0、 255.255.0.0、255.255.255.0等),而是可以根据需要灵活变化,从而创建包含不同数量主机的子网。

CIDR采用斜线记法来表示IP地址和网络ID的位数,即“IP地址/前缀长度”。前缀长度表示了网络前缀中 包含的连续比特数,也就是子网掩码中1的个数。例如,10.0.0.0/8表示子网掩码为255.0.0.0,对应网段 为10.0.0.0~10.255.255.255。

 子网掩码:

netmask子网掩码:

       32位或128位(IPv6)的数字,和IP成对使用,用来确认IP地址中的网络ID和主机ID,对应网络ID的 位为1,对应主机ID的位为0,范例:255.255.255.0 ,表现为连续的高位为1,连续的低位为0

相关公式:

- 一个网络的最多的主机数 =2 ^ 主机ID位数 - 2

- 网络(段)数 = 2 ^ 网络ID中可变的位数

- 网络ID = IP 与 netmask

10.2.2 子网划分

划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID位数变 多,网络ID位向主机ID位借n位,将划分2^n个子网

示例1:10.0.0.0/8

主机数:  2^24-2=

主机范围:10.0.0.1  --  10.255.255.254

黑客帝国的屏保效果

root@ubuntu24:~# apt install cmatrix

root@ubuntu24:~# cmatrix

root@ubuntu24:~# cmatrix -C blue | red | yellow

 

 好莱坞大片的屏保效果

root@ubuntu24:~# apt install hollywood

root@ubuntu24:~# hollywood

 

面试题:我在创建用户的时候,如何为新创建的用户,提供一个通用的提示文件

在 /etc/skel/ 目录下提供一个提示文件,这样每个新创建用户,都会在自动包含该文件。

 Linux中的目录和文件的权限区别?分别说明读,写和执行权限的区别

目录初始权限是755    文件初始权限是644   权限与umask默认值022(用户文件创建掩码)紧密相关

新文件的权限为666 - 022 = 644,

新目录的权限为777 - 022 = 755。

 MongoDB服务启动异常

 

 磁盘空间有但是显示没内存了          是inode号用完了

df -h 查看存储空间使用情况

df -i  查看inode号使用情况

1 Linux下一个每一个文件就会占用一个inode资源

2 inode资源数量是在格式化磁盘的时候就指定的(不指定的话,会有默认值)

3 如果某个磁盘的inode资源用尽,即便磁盘有空间,也不能进行任何文件或者文件夹的新增 4 删除一个文件夹或者文件就能释放一个inode资源 根据上面的过程分析,应该是/dev/vdb1在进行格式化的时候,用户不小心指定了一个比较小的inode 的范围值,导致明明有400G的存储空间,但是因为inode值过小,才65万个,导致inode空间没有了,从而无 法再该块空间进行文件增加了 --  因为MongoDB服务启动的时候,应用到了该目录

解决方法:

1 删除不用的文件和文件夹,释放被占用的inode

2 格式化新的磁盘,指定一个大一点的inode值

3 迁移部分数据到新的磁盘上。

4 根据服务配置文件的属性配置,对新磁盘的目录结构进行软连接配置,避免大规模数据迁移导致的配置路径 异常。

 Jeenkins应用异常

 jenkins运行的时候发现jenkins执行项目任务报错No space left on device

杀程序

1   df -h 查看磁盘占用空间大小

2   cd /var/log/jenkins     检查jenkins日志数据

3   du -sh https://blog.csdn.net/2301_/article/details/*

4   rm -f     删除相关日志文件

5   df -h  再次查看磁盘占用空间大小

如果空间任被占用是因为是虽然文件删除了,但是服务程序运行的时候,依然在使用这些文件,也就 是说,这些文件的inode文件一直被占用,可以通过 lsof 来检测死文件效果

6   lsof | gerg delete     删除大量jenkins占用的进程id

7   ki11 -9 2397 

8   systemctl restart jenkins   成功起jenkins服务

问题改善

对于jenkins服务器上,产生非常多日志问题的原因就找到了,因为程序上启用了DNS解析的功能,我们 只需要直接进入jenkins 系统日志管理页面,将javax.jmdns日志级别调整为 OFF即可。 这样,后期的设备没有空间的问题就彻底解决了。

软件安装失败

 

df -h   查看磁盘占用空间大小     如果满了的话

因为使用的是逻辑分区空间,所以可以自由的扩缩容,所以,向存储管理人员申请增加100G的新磁盘。再次查看

df -h    查看磁盘占用空间大小     还满的话

fdisk -i    查看磁盘分区效果         发现,新增的磁盘没有进行分区。对的话

解决办法

1 格式化磁盘

2 创建新的pv

3 将新的pv添加到vg组中

4 扩容逻辑磁盘

5 重载逻辑磁盘

6 测试后,问题解决fenqufen'qu

到此这篇redhat linux 7.2系统安装详细过程(怎么安装redhat linux)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue2生命周期的区别(vue生命周期分别做了什么)2025-07-24 08:18:10
  • Ubuntu源码下载(ubuntu21.04源)2025-07-24 08:18:10
  • ettercap打不开(ettercap 0.8.3教程)2025-07-24 08:18:10
  • spss27(spss27.0软件)2025-07-24 08:18:10
  • k8s版本升级(k8s版本升级1.27)2025-07-24 08:18:10
  • vuex安装 报错(vuecli3安装失败)2025-07-24 08:18:10
  • jsjsj是什么意思(jsjsjsjsj是什么意思)2025-07-24 08:18:10
  • pcie 5.0 显卡(显卡pcie2.0x4)2025-07-24 08:18:10
  • vue3.0钩子函数(vue钩子函数使用场景)2025-07-24 08:18:10
  • vue安装教程csdn(如何安装vue.js)2025-07-24 08:18:10
  • 全屏图片