Linux笔记

界面设置

关闭防火墙及SELinux
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># systemctl  stop  firewalld  # 临时关闭</span>
​
[root@server ~]<span style="color:#aa5500"># systemctl  disable   firewalld  # 取消开机启动</span>
​
[root@server ~]<span style="color:#aa5500"># setenforce  0  # 临时关闭,重启失效</span></span></span>
设置主机名
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># hostnamectl  set-hostname  新主机名</span>
[root@server ~]<span style="color:#aa5500"># reboot  # 重启系统</span></span></span>

常见快捷键命令

快捷键作用
tab单词补全
ctrl+c终止当前任务
ctrl+l清屏
ctrl+insert复制
shift+insert粘贴
ctrl+shift+=放大字号
ctrl+-缩小字号
ctrl+z终止进程

正确的关机与重启

  • 重启:reboot

  • 关机:shutdown now

shell命令提示符

  • 例:[root@localhost ~]#

  • root :当前登录的账户名,root为管理员

  • localhost:主机名,默认为localhost

  • ~ :该位置表示当前工作目录,~表示/root(普通账户 ~ :/home/普通账户名)

  • 提示符标志:#或$ ,表示账户身份,#表示root,$表示普通账户

使用命令操作linux系统

  • 在终端窗口上输入命令,命令的格式:主命令 参数 操作对象

  • 查看当前linux的发行版信息

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cat  /etc/redhat-release</span>
Red Hat Enterprise Linux release <span style="color:#116644">9</span>.1 (Plow)
<span style="color:#aa5500"># Plow时RHEL9的代号</span></span></span>
  • 查看内核版本

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># uname  -r</span>
<span style="color:#116644">5</span>.14.0-162.6.1.el9_1.x86_64</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 分析</span>
<span style="color:#116644">5</span> <span style="color:#0000cc">-</span> 内核版本.
<span style="color:#116644">14</span> <span style="color:#0000cc">-</span> 主修订版本.
<span style="color:#116644">0</span><span style="color:#0000cc">-162</span> <span style="color:#0000cc">-</span> 次要修订版本.
<span style="color:#116644">6</span>.1 <span style="color:#0000cc">-</span> 补丁版本.
x86_64  <span style="color:#0000cc">-</span> 适用平台</span></span>
  • 查看shell的类型

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 方法1:</span>
[root@server ~]<span style="color:#aa5500"># cat /etc/shells</span>
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
​
​
<span style="color:#aa5500"># 方法2:</span>
[root@server ~]<span style="color:#aa5500"># chsh -l</span>
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash</span></span>
  • 查看当前默认的shell

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo $SHELL</span>
/bin/bash</span></span>
  • 查看网卡信息以及获取ip地址

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">#查看ip地址</span>
[root@server ~]<span style="color:#aa5500"># ip a</span>
<span style="color:#116644">1</span>: lo: <LOOPBACK,UP,LOWER_UP> mtu <span style="color:#116644">65536</span> qdisc noqueue state UNKNOWN group default qlen <span style="color:#116644">1000</span>
    link/loopback <span style="color:#116644">00</span>:00:00:00:00:00 brd <span style="color:#116644">00</span>:00:00:00:00:00
    inet <span style="color:#116644">127</span>.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
<span style="color:#116644">2</span>: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu <span style="color:#116644">1500</span> qdisc mq state UP group default qlen <span style="color:#116644">1000</span>
    link/ether <span style="color:#116644">00</span>:0c:29:c1:d9:32 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet <span style="color:#116644">192</span>.168.48.130/24 brd <span style="color:#116644">192</span>.168.48.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec1:d932/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
​
<span style="color:#aa5500">#注:lo网卡是环回网卡,主要用来本地测试;ens160才是我们远程连接的网卡。</span></span></span>
切换目录--cd
  • 更改当前的工作目录,即切换目录

  • 绝对路径(以/开始的路径)

  • 相对路径(以当前工作目录开始的路径)

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cd /</span>
[root@server /]<span style="color:#aa5500"># cd /root</span>
[root@server ~]<span style="color:#aa5500"># cd /home</span>
[root@server home]<span style="color:#aa5500"># cd ~</span>
[root@server ~]<span style="color:#aa5500"># cd  /etc</span>
[root@server etc]<span style="color:#aa5500"># cd ..</span>
[root@server /]<span style="color:#aa5500"># cd  .</span></span></span>
查看当前的工作目录--pwd
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># pwd</span>
​
[root@server ~]<span style="color:#aa5500"># su - fox</span>
​
[centos@server ~]<span style="color:#0000ff">$ pwd</span>
/home/centos
<span style="color:#aa5500"># 注意:windows和linux系统的目录路径表示的不同</span></span></span>
浏览目录内容--ls
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># ls</span>
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg
[root@server ~]<span style="color:#aa5500"># ls  /</span>
afs  bin  boot  dev  dvd.repo  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var</span></span>
修改密码--passwd
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server /]<span style="color:#aa5500"># passwd</span>
更改用户 root 的密码 。
新的密码: 
无效的密码: 密码少于 <span style="color:#116644">8</span> 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
[root@server /]<span style="color:#aa5500"># passwd fox</span>
更改用户 fox 的密码 。
新的密码: 
无效的密码: 密码未通过字典检查 <span style="color:#0000cc">-</span> 太简单或太有规律
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
[root@server /]<span style="color:#aa5500"># passwd -d fox  # 清除fox账户密码</span>
清除用户的密码 fox。
passwd: 操作成功</span></span>

重置root密码

方法1:rd.break
  • 第1步 重启系统,在下图所示界面按e键,在屏幕上显示内核启动参数

  • 第2步 找到linux这行,末尾空格后 输入 rd.break,然后按ctl+x

  • 第3步 以读写方式挂载/sysroot

  • 第4步:设置密码

  • 第6步 强制重置文件系统的上下文

  • 第7步退出,输入2次exit

  • 系统会在此处稍微卡一会后进入正常登录界面。

方法2:init方法
  • 第1步:启动系统,并在GRUB2启动屏显时,按下e键进入编辑模式

  • 第2步:在linux所在参数行尾添加以下内容:

    • 将ro修改为rw

    • 末尾添加init=/bin/sh

  • 第3步:按Ctrl+x启动到shell

  • 第4步:运行passwd,并按提示修改root密码或者使用如下命令修改密码:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">echo</span> <span style="color:#aa1111">"pwd"</span> | passwd <span style="color:#0000cc">--stdin</span> root</span></span>
  • 第5 步:重置文件系统上下文

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">touch</span> /.autorelabel</span></span>
  • 第6步:运行命令exec /sbin/init来正常启动,或者用命令exec /sbin/reboot重启

第二章 linux中执行命令

命令格式

命令本身 -选项 参数

命令分类

  • 内置命令:由shell程序自带的命令

  • 外部命令:有独立的可执行程序文件,文件名即命令名

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">主命令  参数   操作对象
​
<span style="color:#aa5500"># 注意:</span>
下面是对于命令的语法的一些符号的说明:
[] :表示的是可选
...: 表示的可以存在多个参数
|:表示是可选的
<>:必填
{}:表示作为一个整体存在的</span></span>
参数
  • 指定命令的运行特性,指明要运行命令中的哪一个功能代码。

  • 短选项:例如:-l,-d,如果同一命令同时使用多个短选项,多数可合并。【注:有些命令的选项没有-】

  • 长选项:例如--help,--human-readable

操作对象
  • 作用:命令的作用对象,即命令对什么生效。

  • 有些命令可同时带多个操作对象,多个操作对象之间以空白字符分隔

命令 --help

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cat  ——help</span>
示例如下:cat [OPTION]... [FILE]...  表明cat后面可以加上多个可选的选项以及多个可选的文件参数</span></span>

man

  • man命令用来提供在线帮助,使用权限是所有用户。

  • 使用man命令可以调阅其中的帮助信息,非常方便实用。

在man命令帮助信息的界面中,所包含的常用操作按键如下:

按键作用
空格键,PaGe down向下翻一页
PaGe up,b向上翻一页
home直接前往首页
end直接前往尾页
/从上至下搜索某个关键词,如“/linux”
?从下至上搜索某个关键词,如“?linux”
n定位到下一个搜索到的关键词
N定位到上一个搜索到的关键词
q退出帮助文档
  • man命令的帮助信息的结构如下:

结构名称代表意义
NAME命令的名称
SYNOPSIS参数的大致使用方法
DESCRIPTION介绍说明
EXAMPLES演示(附带简单说明)
OVERVIEW概述
DEFAULTS默认的功能
OPTIONS具体的可用选项(带介绍)
ENVIRONMENT环境变量
FILES用到的文件
SEE ALSO相关的资料
HISTORY维护历史与联系方式

man手册的几个部分

区段1:用户指令,查看命令的帮助 区段2:系统调用,查看可被内核调用的函数的帮助 区段3:程序库调用,查看函数和函数库的帮助 区段4:设备,查看特殊文件的帮助(主要是/dev目录下的文件) 区段5:文件格式,查看配置文件的帮助 区段6:游戏,查看游戏的帮助 区段7:杂项,惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明 区段8:系统指令,查看系统管理员可用的命令的帮助 区段9:内核内部指令,查看内核相关文件的帮助

使用如下命令可以知道某个命令在man的哪个区段有相关帮助文档: [root@server ~]# whatis man man (7) - macros to format man pages man (1) - an interface to the on-line reference manuals man (1p) - display system documentation [root@server ~]# man -f man man (7) - macros to format man pages man (1) - an interface to the on-line reference manuals man (1p) - display system documentation

[root@server ~]# man 1 man    [root@server ~]# man 7 man

info page

  • info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。

  • 但是与man page不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。

  • 不过你要查询的目标数据的说明文件必须要以info的格式来写成才能够使用info的特殊功能(例如超链接)。 而这个支持info命令的文件默认是放置在/usr/share/info/这个目录当中的。

[root@server info]# info info

  • 第一行的信息表示:

    • Next:下一个节点的名称为Stand-alone Info,你也可以按 n 到下个节点去;

    • Up:回到上一层的节点总揽画面,你也可以按 u 回到上一层;

  • 输入n/N后显示如下:

  • Prev:前一个节点,输入 p 可回到前一个节点。

  • info page当中可以使用的按键:

快 捷 键作 用
上箭头向上移动一行
下箭头向下移动一行
PgUp向上翻一页
PgDn向下翻一页
Tab在有“*”符号的节点间进行切换
回车进入有“*”符号的子页面,查看详细帮助信息
u进入上一层信息
n进入下一小节信息
p回到上一小节信息
s或者/在info page中使用关键字搜索
查看帮助信息
q退出 info 信息

date命令

作用:

  • date命令用于显示或设置系统的时间与日期

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">date  <span style="color:#0000cc">-</span>参数  <span style="color:#981a1a">+</span>显示日期时间格式参数</span></span>
  • 用户只需在强大的date命令后输入以 + 号开头的格式参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。

常见参数:

参数作用
%Y完整年份(例如:2020)
%m月份(1~12)
%d本月中的第几天
%H小时(00~23)
%M分钟(00~59)
%j今年中的第几天
%X相当于%H:%M:%S
%Z显示时区
%A星期几 (Sunday-Saturday)
%p显示本地AM或PM

timedatectl命令

作用
  • timedatectl命令用于设置系统的时间,英文全称为:“time date control”,若发现电脑时间跟实际不符?如果只差几分钟的话,我们可以直接调整,但如果差几个小时,那么除了调整当前的时间,还有必要检查下时区了

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">timedatectl [OPTIONS...] COMMAND ...</span></span>

timedatectl命令中的参数以及作用:

参数作用
status显示状态信息
list-timezones列出已知时区
set-timezone设置生效时区
set-time设置系统时间
查看系统时间与时区:
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># timedatectl status</span>
               Local time: 一 <span style="color:#116644">2023</span><span style="color:#0000cc">-02-20</span> <span style="color:#116644">16</span>:43:52 CST
           Universal time: 一 <span style="color:#116644">2023</span><span style="color:#0000cc">-02-20</span> <span style="color:#116644">08</span>:43:52 UTC
                 RTC time: 一 <span style="color:#116644">2023</span><span style="color:#0000cc">-02-20</span> <span style="color:#116644">08</span>:43:52
                Time zone: Asia/Shanghai (CST, <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>)
System clock synchronized: <span style="color:#3300aa">yes</span>
              NTP <span style="color:#3300aa">service</span>: active
          RTC <span style="color:#770088">in</span> local TZ: no</span></span>
设置时区
  • 如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500">#  timedatectl set-timezone Asia/Shanghai</span></span></span>
  • 如果时间还是不正确,我们可以手动的修改系统日期:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># timedatectl set-ntp no           # 先关闭ntp时间同步</span>
[root@server ~]<span style="color:#aa5500"># timedatectl set-time 2021-05-18</span></span></span>
  • 而如果想修改时间的话,也很简单:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># timedatectl set-time 9:30</span>
[root@server ~]<span style="color:#aa5500"># date </span>
Tue May <span style="color:#116644">18</span> <span style="color:#116644">09</span>:30:01 CST <span style="color:#116644">2021</span>
[root@server ~]<span style="color:#aa5500"># timedatectl set-ntp yes</span></span></span>

查看日历

  • 格式:cal 月份 年份

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cal 05 2023</span>
​
[root@server ~]<span style="color:#aa5500"># cal  2023</span></span></span>

查看目录下的文件:ls(list)

作用
  • 查看目录下的内容

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">ls</span>  <span style="color:#0000cc">-</span>参数  操作对象</span></span>
参数
参数功能
-l以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。
-d显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。
-c按文件的修改时间排序后,予以显示。
-h以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节,使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出结果。
-R以递归的方式显示指定目录及其子目录中的所有内容。
-a显示所有子目录和文件的信息,包括名称以“.”开头的隐藏目录和隐藏文件。
-A与-a选项的作用类似,但不显示表示当前目录的“.”和表示父目录的“..”。
-i显示文件索引节点号(inode)。一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode。
-s按照文件大小排序
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># ls /</span>
[root@server ~]<span style="color:#aa5500"># ls   -dl    /root</span></span></span>

ls浏览后颜色表示

  • 白色:普通文件

  • 蓝色:目录

  • 红色:压缩包文件

  • 黄色:设备文件

  • 绿色:可执行文件

第三章 linux文件类型和根目录结构

Linux文件类型

第一个字符文件类型说明
-普通文件类似于Windows的记事本
d目录文件类似于windows文件夹
c字符设备文件串行端口设备,顺序读写,键盘
b块设备文件可供存储的接口设备,随机读写,硬盘
p管道文件用于进程间的通信
s套接字文件通常用于网络上的通信。可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信
l符号链接又叫软链接,和原文件不是一个文件例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。

Linux系统的目录结构

FHS

概念
  • filesystem hierarchy standard文件系统层级标准,定义了在类Unix系统中的目录结构和目录内容,即让用户了解到已安装软件通常放置于哪个目录下。

Linux目录结构的特点
  • 使用树形目录结构来组织和管理文件。

  • 整个系统只有一个根目录(树根),Linux的根目录用“/”表示

  • 其他所有分区以及外部设备(如硬盘、光驱等)都是以根目录为起点,挂接在目录树的某个目录中的,通过访问挂载点目录,即可实现对这些分区的访问。

  • 结构图:

常见目录用途
文件名描述
/Linux文件系统的最上层根目录,其他所有目录均是该目录的子目录
/boot存放系统启动时所需的文件,这些文件若损坏常会导致系统无法启动,一般不要改动
/root超级用户的个人目录,普通用户没有权限访问
/home存放一般用户的个人目录
/binBinary的缩写,存放普通用户可执行的程序或命令
/sbin和/bin类似,这些文件往往用来进行系统管理,只有root可使用
/lib是库(library)英文缩写,存放系统的各种库文件
/lib64存放系统本身需要用到64位程序的共享函数库(library)
/usr一般用户程序安装所在的目录,用于安装各种应用程序
/opt该目录通常提供给较大型的第三方应用程序使用,例如Sun Staroffice、Corel WordPerfect,这可避免将文件分散至整个文件系统
/etc存放了系统管理时要用到的各种配置文件和子目录
/var通常各种系统日志文件放在这里
/run保存自系统启动以来描述系统信息的文件
/devdev 是设备(device)的英文缩写。包含所有的设备文件
/mnt和/media可以临时将别的文件系统挂在这个目录下,即为其他的文件系统提供安装点
/tmp用来存放不同程序执行时产生的临时文件
/srvsrv 是服务(server)的简写,服务启动之后需要访问的数据目录
/sys本目录是将内核的一些信息映射文件,以供应用程序所用
/proc可以在这个目录下获取系统信息,详解网址:Linux下一个重要目录“/proc”,你还不知道作用?
注意:
  • 系统自带的目录不要随意删除

  • 目录的名称是区分大小写的

  • FHS标准并不是一种强制约束标准,但是一种经验的总结,应灵活使用

路径以及工作目录

路径
  • 用“路径”来表示某个文件(或目录)在目录结构中所处的位置。顾名思义,路径是指从树型目录中的某个目录层次到达某一文件或子目录的一条线路,路径由以“/”为分隔符的多个目录名构成。

  • 路径可分为:

    • 绝对路径:是指以根目录“/”为起点来表示系统中某个文件(或目录)的位置的方式

    • 相对路径:是以当前目录为起点,表示系统中某个文件或目录在目录结构中的位置的方式。

工作目录
  • 用户当前所处的位置,使用pwd命令查看

  • 更改当前的工作目录,即切换目录:cd 路径

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]<span style="color:#aa5500"># pwd</span>
/root
[root@localhost ~]<span style="color:#aa5500"># cd   /</span>
[root@localhost /]<span style="color:#aa5500"># pwd</span>
/
​
<span style="color:#aa5500"># 回到当前用户的家(主)目录</span>
[root@localhost /]<span style="color:#aa5500"># cd ~    </span>
[root@localhost ~]<span style="color:#aa5500"># pwd</span>
/root
​
<span style="color:#aa5500"># 回到当前目录的上一级目录</span>
[root@localhost ~]<span style="color:#aa5500"># cd   ..</span>
​
<span style="color:#aa5500"># 切换到之前的目录</span>
[root@localhost /]<span style="color:#aa5500"># cd   -</span>
/root
​
<span style="color:#aa5500"># 回到当前目录</span>
[root@localhost ~]<span style="color:#aa5500"># cd .</span></span></span>

第四章 从命令行管理文件

文件命名规则

  • 不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的

  • 文件名不能超过255个字符

  • 区分大小写file File FILE fIle root Root ROOT rOOt ROOT

  • 目录也是文件,在同一路径下,两个不同类型文件不能同名

创建链接文件

Linux系统中硬盘文件存储原理

硬盘数据分类
  • 用户数据(user data):即文件的数据块(data block),存储数据真实空间

  • 元数据(metadata):存储文件附加属性,如:文件的大小、创建的时间、所有者等信息

硬连接

原理:
  • linux系统允许多个文件指向同一个inode,即允许一个文件拥有多个有效地路径名

  • 理解:硬连接就是指向原始文件inode的指针

查看方法
  • ll 文件名

  • stat 文件名

建立硬连接
  • 格式:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">ln</span>  <span style="color:#0000cc">-</span>参数   源文件   目标连接文件</span></span>
  • 例1:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># touch  m1.txt</span>
[root@server ~]<span style="color:#aa5500"># stat  m1.txt</span>
  文件:m1.txt
  大小:0          块:0          IO 块:4096   普通空文件
设备:fd00h/64768d Inode:16802638    硬链接:1  <span style="color:#aa5500"># 初始连接数为1</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-12-13 <span style="color:#116644">18</span>:30:25.883879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近更改:2022-12-13 <span style="color:#116644">18</span>:30:25.883879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近改动:2022-12-13 <span style="color:#116644">18</span>:30:25.883879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
创建时间:2022-12-13 <span style="color:#116644">18</span>:30:25.882879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
​
​
[root@server ~]<span style="color:#aa5500"># ln   m1.txt   m2.txt   # 建立m2.txt指向m1.txt的硬连接</span>
[root@server ~]<span style="color:#aa5500"># stat  m1.txt</span>
  文件:m1.txt
  大小:0          块:0          IO 块:4096   普通空文件
设备:fd00h/64768d Inode:16802638    硬链接:2   <span style="color:#aa5500">#  连接数加1</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-12-13 <span style="color:#116644">18</span>:30:25.883879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近更改:2022-12-13 <span style="color:#116644">18</span>:30:25.883879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近改动:2022-12-13 <span style="color:#116644">18</span>:31:22.487877027 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
创建时间:2022-12-13 <span style="color:#116644">18</span>:30:25.882879146 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span></span></span>
注意
  • 硬连接建立后,删除其中的一个后数据依然可以访问,只有硬连接为0时,数据旧无法访问了

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo "hello"  >   k1.txt</span>
[root@server ~]<span style="color:#aa5500"># cat  k1.txt</span>
hello
[root@server ~]<span style="color:#aa5500"># stat  k1.txt</span>
  文件:k1.txt
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:16802639    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0
​
[root@server ~]<span style="color:#aa5500"># ln  k1.txt   k2.txt   # 建立硬连接</span>
[root@server ~]<span style="color:#aa5500"># cat  k2.txt</span>
hello
[root@server ~]<span style="color:#aa5500"># stat  k1.txt</span>
  文件:k1.txt
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:16802639    硬链接:2   <span style="color:#aa5500">#  硬连接数变更</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0
​
[root@server ~]<span style="color:#aa5500"># rm  -f  k1.txt    #  删除文件,相当于删除一个硬连接</span>
[root@server ~]<span style="color:#aa5500"># cat  k2.txt</span>
hello
​
[root@server ~]<span style="color:#aa5500"># stat  k2.txt</span>
  文件:k2.txt
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:16802639    硬链接:1   <span style="color:#aa5500"># 硬连接变更</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0</span></span>
  • 硬连接不能给目录建立

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir  n1</span>
[root@server ~]<span style="color:#aa5500"># ln  n1  n2</span>
<span style="color:#3300aa">ln</span>: n1: 不允许将硬链接指向目录</span></span>
  • 目录自带2个硬连接,即目录中的 . .. ,表示当前目录和上一级目录

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cd  n1</span>
[root@server n1]<span style="color:#aa5500"># ls  -a</span>
.  ..
[root@server4 n1]<span style="color:#aa5500"># stat  .   #  查看. 的硬连接,即当前目录的硬连接</span>
  文件:.
  大小:6          块:0          IO 块:4096   目录
设备:fd00h/64768d Inode:2777695     硬链接:2
权限:(0755/drwxr-xr-x)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0
​
[root@server n1]<span style="color:#aa5500"># stat  ..   #  查看.. 的硬连接,即上一级目录的硬连接</span>
  文件:..
  大小:4096       块:8          IO 块:4096   目录
设备:fd00h/64768d Inode:16797825    硬链接:22
权限:(0550/dr-xr-x---)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:system_u:object_r:admin_home_t:s0</span></span>
  • 不可以在不同的文件系统内建立硬连接,由于inode是当前文件在本文件系统的索引值即只能在本分区使用,应以硬连接不能跨越文件系统

软连接

原理:
  • 软连接是一种符号连接,类似于windows的“快捷方式”,仅包含所连接的路径名

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">ln</span>  <span style="color:#0000cc">-s</span>   源文件  目标连接名</span></span>
例1:
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo  "china"  >  h1.txt   #  新建文件</span>
[root@server ~]<span style="color:#aa5500"># ln  -s  h1.txt   h2.txt    # 创建软连接,指向h2.txt</span>
[root@server ~]<span style="color:#aa5500"># ll  h2.txt</span>
lrwxrwxrwx. <span style="color:#116644">1</span> root root <span style="color:#116644">6</span> <span style="color:#116644">12</span>月 <span style="color:#116644">13</span> <span style="color:#116644">18</span>:52 h2.txt <span style="color:#0000cc">-</span>> h1.txt   <span style="color:#aa5500">#  查看连接关系</span>
[root@server ~]<span style="color:#aa5500"># stat  h1.txt</span>
  文件:h1.txt
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:2777696     硬链接:1   <span style="color:#aa5500"># 硬连接还是1,没有变化</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
环境:unconfined_u:object_r:admin_home_t:s0</span></span>
例2:建立网卡配置文件的软连接
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># ln  -s  /etc/NetworkManager/system-connections/ens160.nmconnection   /root/nic</span>
[root@node4 ~]<span style="color:#aa5500"># ll  /root/nic</span>
lrwxrwxrwx. <span style="color:#116644">1</span> root root <span style="color:#116644">43</span> <span style="color:#116644">12</span>月 <span style="color:#116644">13</span> <span style="color:#116644">18</span>:56 /root/nic <span style="color:#0000cc">-</span>> /etc/sysconfig/network-scripts/ifcfg-ens160
[root@server ~]<span style="color:#aa5500"># cat  nic</span></span></span>
注意
  • 软连接只是一种指向关系,删除源文件则数据不可访问

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo  "china"  >  d1.txt</span>
[root@server ~]<span style="color:#aa5500"># ln  -s  d1.txt  d2.txt  </span>
[root@server ~]<span style="color:#aa5500"># ll  d2.txt</span>
lrwxrwxrwx. <span style="color:#116644">1</span> root root <span style="color:#116644">6</span> <span style="color:#116644">12</span>月 <span style="color:#116644">13</span> <span style="color:#116644">19</span>:00 d2.txt <span style="color:#0000cc">-</span>> d1.txt
[root@server ~]<span style="color:#aa5500"># cat  d2.txt</span>
china
[root@server ~]<span style="color:#aa5500"># rm  -f  d1.txt</span>
[root@server ~]<span style="color:#aa5500"># cat  d2.txt   #  连接失效</span>
<span style="color:#3300aa">cat</span>: d2.txt: 没有那个文件或目录</span></span>
  • 可以通过ll命令查看软连接实际执行文件及位置

  • 更改软连接方法:ln -snf 新文件名 软连接名

  • 删除软连接,只是删除指向关系,源数据依然可以访问

软硬连接的区别

  • 硬连接中源文件与连接文件公用一个inode号,是同一个文件,软连接中源文件与连接文件拥有不同inode号,是2个不同的文件

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo  "hello"  >  s1  </span>
[root@server ~]<span style="color:#aa5500"># ln  s1  s2   # 建立硬连接</span>
[root@server ~]<span style="color:#aa5500"># stat  s1</span>
  文件:s1
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:16802662    硬链接:2
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
​
[root@server ~]<span style="color:#aa5500"># stat  s2</span>
  文件:s2
  大小:6          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:16802662    硬链接:2    <span style="color:#aa5500">#  s1  s2  indoe号相同:16802662</span>
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
​
[root@server ~]<span style="color:#aa5500"># ln  -s  s1  s3</span>
[root@server ~]<span style="color:#aa5500"># stat  s3</span>
  文件:s3 <span style="color:#0000cc">-</span>> s1
  大小:2          块:0          IO 块:4096   符号链接
设备:fd00h/64768d Inode:16802663    硬链接:1   <span style="color:#aa5500"># 软连接s3 inode:16802663不同</span></span></span>
  • 软连接的指向关系可以查看,硬连接不可以查看

  • 连接数不同,软连接数不会增加

  • 文件大小不同,硬连接文件大小与源文件一样

  • 软连接不受任何文件系统的影响,任何用户都可以创建指向目录的软连接

目录操作命令

创建目录(make directory)

格式:
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">mkdir</span>  [-p]  [/路径/]目录名</span></span>
参数
  • -p 可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖

  • -v 显示创建目录的详细过程

例:
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir  t1</span>
[root@server ~]<span style="color:#aa5500"># mkdir  t2  t3  t4   #  批量一次性新建</span>
[root@server ~]<span style="color:#aa5500"># mkdir  -p  n1/n2/n3   # 新建递归目录</span></span></span>

du命令

  • 作用:统计目录及文件的空间占用情况,查看某个目录中的各级子目录所占用的磁盘空间数。

  • 命令格式: du [参数] [目录名]

  • 参数:

选项功能
-a统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录。
-s只统计每个文件所占用空间总的大小,而不是统计每个子目录、文件的大小。
-h以K,M,G为单位显示磁盘使用情况,以提高信息的可读性。

新建文件

创建普通文件

touch用法1:
  • 如果文件已存在,更新文件的三个时间,stat可以查看文件的详细信息

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># stat /etc/hostname</span>
  File: /etc/hostname
  Size: <span style="color:#116644">22</span>              Blocks: <span style="color:#116644">8</span>          IO Block: <span style="color:#116644">4096</span>   regular file
Device: 10302h/66306d   Inode: <span style="color:#116644">8608116</span>     Links: <span style="color:#116644">1</span>
Access: (0644/-rw-r--r--)  Uid: (    <span style="color:#116644">0</span>/    root)   Gid: (    <span style="color:#116644">0</span>/    root)
Context: system_u:object_r:hostname_etc_t:s0
Access: <span style="color:#116644">2022</span><span style="color:#0000cc">-06-09</span> <span style="color:#116644">11</span>:19:35.484027446 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
Modify: <span style="color:#116644">2022</span><span style="color:#0000cc">-04-16</span> <span style="color:#116644">14</span>:46:36.153011877 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
Change: <span style="color:#116644">2022</span><span style="color:#0000cc">-04-16</span> <span style="color:#116644">14</span>:46:36.153011877 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
 
 [root@server ~]<span style="color:#aa5500"># stat /etc/hostname</span>
  文件:/etc/hostname
  大小:7          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:17805263    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
最近访问:2023-04-23 <span style="color:#116644">10</span>:01:42.285018639 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近更改:2023-03-22 <span style="color:#116644">11</span>:20:57.098407291 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近改动:2023-03-22 <span style="color:#116644">11</span>:20:57.098407291 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
创建时间:2023-03-22 <span style="color:#116644">11</span>:20:57.097407349 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
​
<span style="color:#aa5500"># 分析</span>
<span style="color:#aa5500"># atime,即access time,访问文件的时间,查看了一下文件内容(cat),文件的atime时间会更新    </span>
​
<span style="color:#aa5500"># mtime,即modify time,修改内容的时间,文件内容被改变了,ctime会更新</span>
​
<span style="color:#aa5500"># ctime,即change time,修改文件元数据的时间</span></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># touch /etc/hostname</span>
[root@server ~]<span style="color:#aa5500"># date</span>
<span style="color:#116644">2023</span>年 <span style="color:#116644">04</span>月 <span style="color:#116644">24</span>日 星期一 <span style="color:#116644">09</span>:37:38 CST
[root@server ~]<span style="color:#aa5500"># stat /etc/hostname</span>
  文件:/etc/hostname
  大小:7          块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:17805263    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    <span style="color:#116644">0</span>/    root)   Gid:(    <span style="color:#116644">0</span>/    root)
最近访问:2023-04-24 <span style="color:#116644">09</span>:37:36.800493399 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近更改:2023-04-24 <span style="color:#116644">09</span>:37:36.800493399 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
最近改动:2023-04-24 <span style="color:#116644">09</span>:37:36.800493399 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span>
创建时间:2023-03-22 <span style="color:#116644">11</span>:20:57.097407349 <span style="color:#981a1a">+</span><span style="color:#116644">0800</span></span></span>
touch用法2
  • 如果文件不存在,则表示创建文件

  • 格式:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">touch</span> 文件名1 文件名2 文件名3
​
<span style="color:#3300aa">touch</span> {文件名1,文件名2,文件名3}</span></span>
  • 例1:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># touch  p1.txt</span>
[root@server ~]<span style="color:#aa5500"># touch  p2.txt  p3.txt  p4.txt</span>
[root@server ~]<span style="color:#aa5500"># touch  {p5,p6,p7}.txt</span>
[root@server ~]<span style="color:#aa5500"># touch  {1,2}{3,4}</span>
[root@server ~]<span style="color:#aa5500"># touch  abc{1..100}</span></span></span>
示例
  • tree命令

    • 作用:显示目录下文件的树形拓扑图及摘要

    • 格式:

    • <span style="background-color:#f8f8f8">tree  -参数 路径</span>
    • 参数

    • <span style="background-color:#f8f8f8"><span style="color:#0000cc">-a</span> : 所有文件包含显示隐藏文件
      <span style="color:#0000cc">-f</span> : 列出文件的完整路径内容
      <span style="color:#0000cc">-d</span> :只显示目录
      <span style="color:#0000cc">-L</span> : 设置显示最大深度,如:tree <span style="color:#0000cc">-f</span> <span style="color:#0000cc">-L</span> <span style="color:#116644">2</span> </span>
  • 按照下面的结构新建文件及目录

创建大容量文件

作用
  • 制作指定个数及容量的空文件

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">dd    <span style="color:#0000ff">if</span><span style="color:#981a1a">=</span>来源  <span style="color:#0000ff">of</span><span style="color:#981a1a">=</span>新文件名  <span style="color:#0000ff">count</span><span style="color:#981a1a">=</span>数据块个数  <span style="color:#0000ff">bs</span><span style="color:#981a1a">=</span>块容量</span></span>
分析
  • if=/dev/zero zero空数据设备文件,可以向其它文件中填充无数个数据0

  • of=新文件名,一般给出存储路径

  • count=:新文件由几个数据块组成

  • bs=:一个数据块容量

示例
  • 例1:制作100MB空数据文件

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># dd  if=/dev/zero  of=/root/z1  count=2  bs=50M</span></span></span>
  • 例2:制作2G文件

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># dd  if=/dev/zero  of=/z2  count=1  bs=2GB</span></span></span>
  • 例3:制作光盘镜像

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># dd  if=/dev/sr0  of=/RHEL8.5.iso</span></span></span>

删除文件

格式:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">rm</span>  <span style="color:#0000cc">-</span>参数  文件名</span></span>

用法:

  • 删除文件: rm 文件名

  • 删除目录:rm -r 目录名

  • 强制删除不确认:rm -f 文件名

注意
  • 删除前必须确认路径及名称

  • 删除文件时必须将文件名及扩展名写全

vi/vim文本编辑器

格式

vim 文件名

文件存在,则直接打开文件进行编辑,若文件不存在,则直接进行创建文件

vim编辑器的三种模式

命令模式

输入模式

末行模式

命令模式的快捷键

光标跳转按键
功能按键
光标按单个字符移动↑、↓、←、→
光标按照单词向后跳转w
光标按照单词向前跳转b
光标跳转至行首^
光标跳转至行尾$
文档首行第一个字符gg
文档最后一行第一个字符G
跳转到指定行行号gg 或者 行号G
复制、粘贴、删除
功能按键
删除光标所在行dd
删除从光标处开始的n行数字dd
删除光标前至行首字符d^
删除光标及之后的所有字符d$
复制光标所在行yy
复制从光标处开始的n行数字yy
将缓冲区的内容粘贴到光标所在行的下一行p(小写)
将缓冲区的内容粘贴到光标所在行的上一行P(大写)
撤销操作u

编辑模式的快捷键

  • 可通过如下任意一种功能键从命令模式切换到编辑模式

  • 按esc键可从编辑模式切换到命令模式

功能按键
在光标前插入i
在光标所在行行首第一个非空字符前插入I(大写字母i)
在光标后插入a
在光标所在行末尾插入A
在光标所在行上一行插入O(大写字母)
在光标所在行下一行插入o(小写字母)
删除光标所在字符并进入插入模式s(小写字母)
删除当前行并进入插入模式S(大写字母)

末行模式的快捷键

  • 或者/可从命令模式切换到末行模式

  • 按esc键可从末行模式切换到命令模式。

查找关键字并替换
功能按键
从上而下查找字符串“word”(可按n键定位到下一个匹配的的字符串)/word
将当前行中查找到的第一个字符“old”替换为“new”:s /old/new
将当前行中查找到的所有字符“old”替换为“new”:s /old/new/g
在行号“n1,n2”范围内替换所有的字符串“old”为“new”:n1,n2 s/old/new/g
将整个文件内的字符串“old”替换为“new”:% s/old/new/g
保存退出
功能按键
退出vi/vim编辑器,未对文件做任何编辑操作才可退出:q
不保存文档内容,强制退出vi/vim编辑器:q!
保存文件:w
将文件另存为/dir/file:w /dir/file
保存文件内容并退出vi/vim编辑器:wq 或者 ZZ
强制保存并退出:wq!
其他操作
功能按键
在当前文件中读入其他文件内容:r /dir/file
查找含有"word"的行并删除:g/word/d
显示行号:set nu
关闭行号显示:set nonu
删除n1-n2行内容:n1,n2 d
复制n1-n2行到第n行后面:n1,n2 co n

vim的配置文件

[root@server ~]# vim /etc/vimrc 或者 vim ~/.vimrc

set hlsearch "高亮度反白 set backspace=2 "可随时用退格键删除 set autoindent "自动缩排 set tabstop=4 "缩进 set softtabstop=4 softtabstop是“逢4空格进1制表符”,前提是你tabstop=4 set shiftwidth=4 自动缩进空格长度 set mouse=a "使用鼠标 set selection=exclusive set selectmode=mouse,key set ruler "可显示最后一行的状态 set showmode "左下角那一行的状态 set nu "可以在每一行的最前面显示行号啦! set bg=dark "显示不同的底色色调 syntax on "进行语法检验,颜色显示

vim 的异常处理

模拟异常
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># vim  test</span>
<span style="color:#aa5500"># 输入一些内容,正常保存退出</span>
[root@server ~]<span style="color:#aa5500"># vim  test</span>
<span style="color:#aa5500"># 点击ctrl+z 键 模拟异常退出</span>
[root@server ~]<span style="color:#aa5500"># vim  test  # 此时出现问题</span>
E325: 注意
发现交换文件 <span style="color:#aa1111">".test.swp"</span>
            所有者: root    日期: Sun Dec <span style="color:#116644">18</span> <span style="color:#116644">14</span>:05:17 <span style="color:#116644">2022</span>
            文件名: ~root/test
            修改过: 否
            用户名: root      主机名: node3
           进程 ID: <span style="color:#116644">8532</span> (仍在运行)
正在打开文件 <span style="color:#aa1111">"test"</span>
              日期: Sun Dec <span style="color:#116644">18</span> <span style="color:#116644">14</span>:05:05 <span style="color:#116644">2022</span>
​
(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session <span style="color:#770088">for</span> this file crashed.
    如果是这样,请用 <span style="color:#aa1111">":recover"</span> 或 <span style="color:#aa1111">"vim -r test"</span>
    恢复修改的内容 (请见 <span style="color:#aa1111">":help recovery"</span>)。
    如果你已经进行了恢复,请删除交换文件 <span style="color:#aa1111">".test.swp"</span>
    以避免再看到此消息。
​
交换文件 <span style="color:#aa1111">".test.swp"</span> 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 退出((Q)), 中止((A)): </span></span>
原因
  • 在编辑过程中,某些原因倒置vim中断退出,下次打开时,同名的交换文件(.swp)与源文件内容不一致,需要进行后续设置

处理流程
  • 正常打开

  • 点击R键,后回车

  • 正常编辑,保存退出

  • 删除隐藏的交换文件

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 如上例的test文件</span>
[root@server ~]<span style="color:#aa5500"># ls  -a</span>
[root@server ~]<span style="color:#aa5500"># rm  -f .test.swp   #  删除对应隐藏的交换文件</span>
[root@server ~]<span style="color:#aa5500"># vim  test  # 再次尝试打开,结果显示正常</span></span></span>

浏览普通文件

文件内容查看

cat 命令
  • 作用:查看文件内容,适合数据量较少

  • 格式:cat -参数 文件名

  • 参数:

    • -n:显示行号,加上

    • -b:文件中所有非空行增加行号,编号从1开始

  • 将显示结果重定向输出到另一个文件中

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># touch  pwd.txt</span>
[root@server ~]<span style="color:#aa5500"># cat  /etc/passwd  >  pwd.txt  # > 为重定向符</span>
[root@server ~]<span style="color:#aa5500"># cat  pwd.txt</span></span></span>
  • 合并文件:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]<span style="color:#aa5500"># touch  t1.txt  t2.txt  t3.txt</span>
[root@node1 ~]<span style="color:#aa5500"># echo  "hello"  >  t1.txt</span>
[root@node1 ~]<span style="color:#aa5500"># echo  "world"  >  t2.txt</span>
[root@node1 ~]<span style="color:#aa5500"># cat  t1.txt  t2.txt  >  t3.txt</span>
[root@node1 ~]<span style="color:#aa5500"># cat  t3.txt</span>
hello
world</span></span>
tac
  • 作用:倒叙访问文件内容

  • 格式:tac 参数 文件名

  • 例如: tac /etc/passwd

more 命令
  • 作用:翻页查看文件内容,适合内容较多的文件查看

  • 格式:more 文件名

  • 注意:使用回车则一行一行查看,使用空格则整页查看,点击q键退出查看

less命令
  • 作用:同more命令

  • 格式:less 文件名

  • 注意:可以使用上下键进行浏览,点击q退出浏览

head命令
  • 作用: 查看文档前n行的内容

  • 格式:head -数字 文件名

tail命令
  • 作用:查看文档后n行内容

  • 格式:tail -参数 文件名

  • 参数

    • -数字:查看倒数行数

    • -f:动态刷新, 实时显示日志文件并且能动态更新

文件信息查看

file 命令
  • 作用:查看文件类型

  • 格式:file -参数 文件名

  • 文件类型:

    • ASCII file :ASCII文本字符文件

    • empty:空文件

    • block special :块设备文件

    • character special :字符设备文件

    • diretory:目录

stat 命令
  • 作用:显示文件属性信息

  • 格式:stat 文件名

  • 注意:一般通过该命令查看大小、Inode、硬链接、软连接

文件内容过滤显示—grep

作用:

  • 在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">grep</span>   <span style="color:#0000cc">-</span>参数  查找条件  文件名</span></span>
参数
选项说明
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v反向选择——仅列出没有“关键词”的行
-A-A 2 搜索时显示匹配到的那一行以及下2行
-B-B 2 搜索时显示匹配到的那一行以及上2行
-C-C 2 搜索时显示匹配到的那一行以及上下2行

/etc/passwd文件含义

作用
  • 记录用户账户信息:共分为7段,使用冒号分割

含义
  • 文件内容意义:账户名:密码代号x:UID:GID:注释:家目录:SHELL

  • 第7列/sbin/nologin:不允许登录

使用特殊符号匹配

cp /etc/passwd /test/test.txt

匹配模式说明
grep h 文件名查找文件里有字符h的行
grep ^[q] 文件名匹配以q开始的行
grep ^[qf] 文件名匹配以q或者f开头的行
grep ^[ ^qf ] 文件名不匹配以q或者f开头的行
grep ^[0-9] 文件名匹配以数字开头的行
grep q$ 文件名匹配以q结束的行
grep ^$过滤空白行
grep -r h ./*如果要明确搜索当前目录中的子目录有h的行
grep -d s kip h ./*忽略当前目录下的子目录下的普通文件

切割显示-cut

作用
  • cut命令用于按列提取文本内容

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">cut</span>  <span style="color:#0000cc">-d</span>  <span style="color:#aa1111">"分隔符"</span>  <span style="color:#0000cc">-f</span>列数字  文件名</span></span>

排序显示-sort

作用
  • sort命令用于对文本内容进行排序显示

格式:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">sort</span>  <span style="color:#0000cc">-</span>参数  文件名</span></span>
参数
选项作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围

去重显示-uniq

作用
  • uniq命令用于去除文本中连续的重复行

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">uniq <span style="color:#0000cc">-</span>参数 文件名</span></span>

文件中字符替换显示-tr

作用
  • tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">tr  <span style="color:#0000cc">-</span>参数  替换内容  新内容</span></span>
参数
  • -c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换

  • -d :删除指令字符

  • -s :缩减连续重复的字符成指定的单个字符

文本内容统计wc

作用
  • wc命令用于统计指定文本文件的行数、字数或字节数

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">wc</span> <span style="color:#0000cc">-</span>参数 文件名</span></span>
参数
选项作用
-l只显示行数
-w只显示单词数
-c只显示字节数

复制、移动文件

复制文件或目录

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">cp</span>  <span style="color:#0000cc">-</span>参数  源文件   目标文件</span></span>
参数
选项功能
-a通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录
-d拷贝时保留链接
-f在覆盖已经存在的目标文件时不提示
-i在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝
-p除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中
-r若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名

移动文件或目录

作用
  • mv命令用于剪切或重命名文件

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">mv</span> [选项] 源文件名称 目标文件名称</span></span>
注意
  • 剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。

  • 如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。

查找文件

查找文件路径

whereis命令
  • 作用:可以搜索系统命令的可执行文件路径和说明文档

  • 格式

<span style="background-color:#f8f8f8"><span style="color:#333333">whereis  命令名</span></span>
which命令
  • 作用:搜索系统命令的可执行文件

  • 格式

<span style="background-color:#f8f8f8"><span style="color:#333333">which  命令名</span></span>

查找文件-find

作用
  • 按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">find</span>  查找路径   查找条件  具体条件  操作</span></span>
注意
  • find命令默认的操作是print输出

  • find是检索文件的,grep是过滤文件中字符串

参数
参数作用
-name根据文件basename匹配名称
-size匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-mtime [+|-]n匹配修改内容的时间(-4指小于等于4天内的文件名;+4,大于等于5天前的文件名;4指前4~5那一天的文件)
-atime [+|-]n匹配访问文件的时间
-ctime [+|-]n匹配修改文件权限的时间
-newer f1 !f2匹配比文件f1新但比f2旧的文件
-perm匹配权限(mode为完全匹配,-mode为包含即可)
-user匹配所有者
-group匹配所有组
-nouser匹配无所有者的文件
-nogroup匹配无所属组的文件
-type b/d/c/p/l/f匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-depth先从该目录子目录下查找,再查找该目录
-maxdepth levels -mindepth levels最多查找多少层目录;最少查找多少层目录
-delete将找到的文件删除,如果是目录只能删除找到的空目录。
-exec …… {}\;后面可跟用于进一步处理搜索结果的命令

压缩和解压缩

zip和unzip命令

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">zip FILE  <span style="color:#aa5500"># 压缩</span>
unzip FILE   <span style="color:#aa5500"># 解压缩</span></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">​</span></span>

gzip命令

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 例1: 使用gzip压缩文件</span>
[root@server test]<span style="color:#aa5500"># gzip test1.txt </span>
​
<span style="color:#aa5500"># 例2: 使用gzip压缩目录下文件</span>
[root@server test]<span style="color:#aa5500"># gzip -r dir1</span>
[root@server test]<span style="color:#aa5500"># ls dir1</span>
<span style="color:#aa5500">#注意: 以上压缩之后原始文件就没有了。</span>
​
<span style="color:#aa5500"># 例3: 压缩但保留原始文件</span>
[root@server test]<span style="color:#aa5500"># gzip -c test2.txt > test2.txt.gz</span></span></span>

bzip2命令

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># bzip2是更新的Linux压缩工具,比gzip有着更高的压缩率。</span>
​
[root@server test]<span style="color:#aa5500"># [root@server test]# bzip2  test3.txt  # 源文档不保留</span>
​
[root@server test]<span style="color:#aa5500"># bzip2  -9  -c test3.txt > test3.txt.bz2 # 用最佳的压缩比压缩,并保留原本的档案</span></span></span>

xz、unxz命令

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 例1:压缩文件</span>
[root@server test]<span style="color:#aa5500"># xz test5.txt</span>
​
<span style="color:#aa5500"># 例2:压缩dir1目录下文件</span>
[root@server test]<span style="color:#aa5500"># xz dir1/*</span>
[root@server test]<span style="color:#aa5500"># ls dir1</span>
​
<span style="color:#aa5500"># 例3:查看压缩文件内容</span>
[root@server test]<span style="color:#aa5500"># xzcat test5.txt.xz </span>
test1
​
<span style="color:#aa5500"># 例4:解压缩(xz -d等价于unxz)</span>
[root@server test]<span style="color:#aa5500"># unxz test5.txt.xz </span></span></span>

tar归档命令

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">tar  <span style="color:#0000cc">-</span>参数  [args]……</span></span>
参数
常用参数
选项功能
-c创建.tar格式的包文件
-x释放.tar格式的包文件
-t查看包中的文件列表
必选参数
选项功能
-f用于指定打包文件名。 当与-c选项一起使用时,创建的tar包文件使用该选项指定的文件名 当与-x选项一起使用时,则释放该选项指定的tar包文件

辅助参数
选项功能
-v表示在命令执行时显示详细的提示信息
-p打包时保留文件及目录的权限
z调用gzip程序,以gzip格式压缩或解压缩文件(.tar.gz)
-j调用bzip2程序,以bzip2格式压缩或解压缩文件(.tar.bz2)
-J使用xz压缩或解压缩文件(.tar.xz),xz的压缩率通常比bzip2更高
-C(大写字母C)和-x选项一起使用,表示释放包时指定释放的目标路径
额外参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 打包时排除某个文件</span>
tar cf 文件名.tar <span style="color:#0000cc">--exclude</span><span style="color:#981a1a">=</span>路径/文件 路径
注:此处的路径前后需要保持保持一致,统一使用绝对路径或者相对路径</span></span>
格式
打包
  • 作用:创建(非压缩的)打包文件,将指定的一个或多个文件或目录备份生成为一个指定的包文件

<span style="background-color:#f8f8f8"><span style="color:#333333">tar  cvf/cfv/-cvf  文件名.tar  要打包的目录或文件名
​</span></span>
  • 列出包文件中的文件列表

<span style="background-color:#f8f8f8"><span style="color:#333333">tar  t[v]f  包文件名<span style="color:#009900">`</span>
​</span></span>
打包压缩
  • 作用:为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式

<span style="background-color:#f8f8f8"><span style="color:#333333">tar  czf/-czf 文件名.tar.gz  要打包压缩的目录或文件名……
tar  cjf/-cjf 文件名.tar.bz2  要打包压缩的目录或文件名……
tar  cJf/-cJf 文件名.tar.xz  要打包压缩的目录或文件名……
​</span></span>
  • 提取包文件到指定目录

<span style="background-color:#f8f8f8"><span style="color:#333333">tar  xf/-xf/-xzf 文件名.tar.gz  [-C 目标路径]
tar  xf/-xf/-xjf 文件名.tar.bz2  [-C 目标路径]
tar  xf/-xf/-xJf 文件名.tar.xz  [-C 目标路径]
​</span></span>
示例
  • 将/etc下所有内容打包压缩到/root目录中

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># tar   -cvf  taretc.tar.gz   /etc</span>
​</span></span>
  • 解压缩

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir temp</span>
[root@server ~]<span style="color:#aa5500"># mv taretc.tar.gz  temp</span>
[root@server ~]<span style="color:#aa5500"># cd temp</span>
[root@server temp]<span style="color:#aa5500"># </span>
[root@server temp]<span style="color:#aa5500"># tar   -xvf  taretc.tar.gz</span>
​</span></span>
  • 注意:参数中-c 与 -x 不能同时使用

第七章 命令解释器-shell

概述

概念
  • shell:壳,命令解释器,负责解析用户输入的命令

  • 图:

分类:

  • 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多

  • 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件

type 命令

作用
  • 查看命令是内置命令、外置命名、alias命令

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">type  <span style="color:#0000cc">-</span>参数  命令名
​</span></span>
参数
  • type -a列出当前命令可以如何执行

  • type -t仅列出命令按照哪种方式执行

<span style="background-color:#f8f8f8"><span style="color:#333333">​</span></span>

执行原理

  • 系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中,使得shell知道命令的可执行文件位置

  • PATH环境变量:当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到。

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># echo $PATH</span>
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
​</span></span>

Linux 中的特殊符号

特殊符号功能说明
;可使用分号分隔多条命令在一行上输入和执行多条较短的命令,可使用分号来分隔命令
*匹配任意零个或者多个字符不能用于创建文件
匹配任意单个字符不能用于创建文件
[]匹配方括号中的任意一个字符,表示范围可以用"-”不能用于创建文件
[^]或者[!]匹配方括号中的任意一个字符或数字后进行取反用于查找和删除文件,不用于创建文件
{string,string}匹配括号中的任意一个字符串,表示一个范围时,字符串之间个".."可用于创建、查看、删除文件 touch {1,4}.txt
\使\后面的特殊字符失效例如:可以在命令行后面加一个\,再按回车键时并不表示执行该命令,而是表示换行,通过此方式将一个较长的命令分成多行表达,增强命令的可读性。换行后系统自动显示提示符>
`反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行,与$()作
'单引号,将单引号内的所有内容都原样输出所有特殊字符在单引号里面都会失去特殊含义
"双引号,除了几个特殊字符外,将双引号内的几乎所有内容都原样输出”$“和“\”以及“ ` ”在双引号里面仍然保留自己的特殊含义

命令别名

作用
  • 别名:命令的快捷方式,对于需要经常执行,且要很长时间输入的长命令很有用。

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">alias 别名<span style="color:#981a1a">=</span><span style="color:#aa1111">'原命令 - 参数'</span>
​</span></span>

查看设置的别名

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># alias</span>
alias <span style="color:#0000ff">cp</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'cp -i'</span>
alias <span style="color:#0000ff">egrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'egrep --color=auto'</span>
alias <span style="color:#0000ff">fgrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'fgrep --color=auto'</span>
alias <span style="color:#0000ff">grep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'grep --color=auto'</span>
alias l.<span style="color:#981a1a">=</span><span style="color:#aa1111">'ls -d .* --color=auto'</span>
alias <span style="color:#0000ff">ll</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'ls -l --color=auto'</span>
alias <span style="color:#0000ff">ls</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'ls --color=auto'</span>
alias <span style="color:#0000ff">mv</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'mv -i'</span>
alias <span style="color:#0000ff">ping</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'ping -c 5'</span>    <span style="color:#aa5500"># 上例新建的</span>
alias <span style="color:#0000ff">rm</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'rm -i'</span>
alias <span style="color:#0000ff">xzegrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'xzegrep --color=auto'</span>
alias <span style="color:#0000ff">xzfgrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'xzfgrep --color=auto'</span>
alias <span style="color:#0000ff">xzgrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'xzgrep --color=auto'</span>
alias <span style="color:#0000ff">zegrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'zegrep --color=auto'</span>
alias <span style="color:#0000ff">zfgrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'zfgrep --color=auto'</span>
alias <span style="color:#0000ff">zgrep</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'zgrep --color=auto'</span>
​</span></span>

常用的别名

untar
  • 由于 tar 命令的参数太多不好记忆,所以将解压缩设为如下:

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">untar</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'tar -zxvf '</span>
​</span></span>
wget
  • 下载大文件时的断点续连,防止网络异常中断:

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">wget</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'wget -c '</span>
​</span></span>
getpass
  • 生成 20 个字符的随机数密码,使用 openssl 命令,但命令又很长不方便,可以设置别名:

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">getpass</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"openssl rand -base64 20"</span>
​</span></span>
ping
  • ping url时会无限次输出,但其实没多大意义,可以使用 -c 命令将其限制为 5 次输出:

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">ping</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'ping -c 5'</span>
​</span></span>
speed
  • 测试网速命令speedtest-cli ,为了方便使用可以设置别名:

  • 安装: speedtest-cli是基于python编写的需要使用pip工具下载

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># pip install  speedtest-cli</span>
<span style="color:#3300aa">bash</span>: pip: command not found...
Install package <span style="color:#aa1111">'python3-pip'</span> to provide command <span style="color:#aa1111">'pip'</span>? [N/y] y
​
​
 * Waiting <span style="color:#770088">in</span> queue... 
 * Loading list of packages.... 
The following packages have to be installed:
 python3-pip-21.2.3-6.el9.noarch    A tool <span style="color:#770088">for</span> installing and managing Python3 packages
Proceed with changes? [N/y] y
​
​</span></span>
  • 查看手册

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># speedtest-cli  --help</span>
​
<span style="color:#aa5500"># 常用参数</span>
<span style="color:#0000cc">--list</span>:根据距离显示speedtest.net的测试服务器列表
​
<span style="color:#0000cc">--server</span>:指定列表中id的服务器来做测试
​
<span style="color:#0000cc">--share</span>:分享你的网速,该命令会在speedtest网站上生成网速测试结果的图片
​
<span style="color:#0000cc">--simple</span>:只显示ping和上下行速度
​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># speedtest-cli  --list</span>
Retrieving speedtest.net configuration...
<span style="color:#116644">36646</span>) China Unicom HeNan 5G (Zhengzhou, China) [434.03 km]
<span style="color:#116644">16145</span>) Lanzhou,China Mobile,Gansu (Lanzhou, China) [505.69 km]
<span style="color:#116644">35527</span>) China Broadcasting Network Group Sichuan (Chengdu, China) [606.95 km]
<span style="color:#116644">23844</span>) China Telecom Wuhan Branch (Wuhan, China) [648.22 km]
 <span style="color:#116644">4870</span>) 湖南联通5G (Changsha, China) [776.52 km]
<span style="color:#116644">51451</span>) Viettel Network (Bac Ninh, Vietnam) [1481.67 km]
<span style="color:#116644">34705</span>) ZHOST.VN (Ha Noi, Vietnam) [1502.17 km]
<span style="color:#116644">11430</span>) VIETPN CO, LTD (Ha Noi, Viet Nam) [1502.17 km]
<span style="color:#116644">55023</span>) GEENET COMMUNICATION (Dibrugarh, India) [1533.77 km]
<span style="color:#116644">45929</span>) Lao Telecom (Muang Xai, Laos) [1655.95 km]
​
[root@server ~]<span style="color:#aa5500"># speedtest-cli  --list  |  grep  China   # 过滤中国地区的ISP</span>
<span style="color:#116644">36646</span>) China Unicom HeNan 5G (Zhengzhou, China) [434.03 km]
<span style="color:#116644">16145</span>) Lanzhou,China Mobile,Gansu (Lanzhou, China) [505.69 km]
<span style="color:#116644">35527</span>) China Broadcasting Network Group Sichuan (Chengdu, China) [606.95 km]
<span style="color:#116644">23844</span>) China Telecom Wuhan Branch (Wuhan, China) [648.22 km]
 <span style="color:#116644">4870</span>) 湖南联通5G (Changsha, China) [776.52 km]
​
​
<span style="color:#aa5500"># 36646) China Unicom HeNan 5G (Zhengzhou, China) [434.03 km]  解释:</span>
<span style="color:#aa5500"># 36646: 服务器id</span>
<span style="color:#aa5500"># China Unicom HeNan 5G:网络ISP,中国联通(河南)</span>
<span style="color:#aa5500"># Zhengzhou, China:服务器所在地址</span>
<span style="color:#aa5500"># 434.03 km:两台服务器地理位置之间距离</span>
​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 分享,可以在网站查看生成的图片</span>
[root@server ~]<span style="color:#aa5500"># speedtest-cli --server 36646 --share   #  需要更换服务器id</span>
Retrieving speedtest.net configuration...
Testing from China Telecom (113.132.176.202)...
Retrieving speedtest.net server list...
Retrieving information <span style="color:#770088">for</span> the selected server...
Hosted by China Unicom HeNan 5G (Zhengzhou) [434.03 km]: <span style="color:#116644">30</span>.326 ms
Testing download speed................................................................................
Download: <span style="color:#116644">155</span>.98 Mbit/s
Testing upload speed......................................................................................................
Upload: <span style="color:#116644">85</span>.31 Mbit/s
Share results: http://www.speedtest.net/result/14700390192.png  <span style="color:#aa5500"># 图片url</span>
​</span></span>

  • 设置别名:需要更换id

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">speed</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'speedtest-cli --server 36646 --simple'</span>
​
[root@server ~]<span style="color:#aa5500"># speed</span>
Ping: <span style="color:#116644">367</span>.255 ms
Download: <span style="color:#116644">194</span>.83 Mbit/s
Upload: <span style="color:#116644">96</span>.23 Mbit/s
​</span></span>
ipe
  • 公网 IP别名设置:

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">ipe</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'curl ipinfo.io/ip'</span>
​
[root@server ~]<span style="color:#aa5500"># alias ipe='curl ipinfo.io/ip'</span>
[root@server ~]<span style="color:#aa5500"># ipe</span>
<span style="color:#116644">113</span>.132.176.202[root@server ~]<span style="color:#aa5500"># </span>
​</span></span>
c
  • 清屏,一般使用 ctrl + l 快捷键,也可以将 clear 命令定义得更短,这样使用起来更直接,更粗暴。

<span style="background-color:#f8f8f8"><span style="color:#333333">alias <span style="color:#0000ff">c</span><span style="color:#981a1a">=</span><span style="color:#aa1111">'clear'</span>
​</span></span>

删除别名

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">unalias 别名
​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># alias </span>
[root@server ~]<span style="color:#aa5500"># unalias ping</span>
[root@server ~]<span style="color:#aa5500"># alias </span>
​</span></span>

注意:

  • 在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。

  • 在linux中提供alias永久化的方法:

    • 将别名命令写入到~/.bashrc和/etc/bashrc文件中

    • 执行 source ~/.bashrc 和 source ~/etc/bashrc 生效

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># alias ping='ping -c 5'</span>
[root@server ~]<span style="color:#aa5500"># ping  www.qq.com</span>
<span style="color:#aa5500"># 关闭shell,重新打开</span>
[root@server ~]<span style="color:#aa5500"># ping  www.qq.com  # 别名失效</span>
[root@server ~]<span style="color:#aa5500"># vim  ~/.bashrc</span>
<span style="color:#aa5500"># 写入别名</span>
[root@server ~]<span style="color:#aa5500"># source  ~/.bashrc   # 生效,注意切换仅对当前账户生效</span>
[root@server ~]<span style="color:#aa5500"># vim  /etc/bashrc</span>
<span style="color:#aa5500"># 写入别名</span>
[root@server ~]<span style="color:#aa5500"># source   /etc/bashrc   </span>
<span style="color:#aa5500"># 切换到普通账户测试</span>
​</span></span>

命令历史

作用
  • history命令可以查阅命令历史记录

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">history <span style="color:#0000cc">-</span>参数
​</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333">number:显示最近number条命令历史
<span style="color:#0000cc">-c</span>:清空当前历史命令
​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># history  5</span>
   <span style="color:#116644">13</span>  <span style="color:#3300aa">vim</span>  ~/.bashrc
   <span style="color:#116644">14</span>  <span style="color:#3300aa">ping</span>  www.baidu.com
   <span style="color:#116644">15</span>  <span style="color:#3300aa">source</span>  ~/.bashrc
   <span style="color:#116644">16</span>  <span style="color:#3300aa">ping</span>  www.baidu.com
   <span style="color:#116644">17</span>  history  <span style="color:#116644">5</span>
​
[root@server ~]<span style="color:#aa5500"># !16   # 将第16命令在执行一遍</span>
​</span></span>

设置history记录命令条数

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># vim  /etc/profile</span>
​
<span style="color:#aa5500"># 定位:HISTSIZE=1000</span>
​
<span style="color:#aa5500">#退出后重启:reboot</span>
​</span></span>

账户和工作组的分类

用户分为三类:

  • 超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。

  • 系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。

  • 普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。

工作组分析两类:

  • 基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组

  • 扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。

账户和工作组的配置文件

  • 账户名、密码、工作组信息和工作组密码存储在以下配置文件中

文件功能文件名称
用户账号文件/etc/passwd
用户密码文件/etc/shadow
工作组账号文件/etc/group
工作组密码文件/etc/gshadow
用户账号文件
  • /etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。

  • /etc/passwd文件中字段说明

    • 由7个字段组成,字段之间用“:”分隔,意义:账号名:密码:UID:GID:个人资料:主目录:Shell

    • 账号名:用户登录Linux系统时使用的名称。

    • 密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。

    • UID:账户的ID值,是一个数字标识,相当于账户的“身份证编号”,具有唯一性

      • root账户UID——0

      • 系统账户的UID——1~999

      • 普通账户的UID——≥1000

      • 注意:普通账户从1000开始编号,连续编号,即使系统管理员某些账户号码未使用,普通账户也不可使用

    • GID:基本组的ID值,用来区分不同的工作组,相同的组具有相同的GID。

    • 个人资料:注释信息,可以记录账户的完整姓名、地址、办公室电话、家庭电话等个人信息。

    • 家目录:类似Windows 的个人目录,通常是/home/账户名

    • Shell:定义用户登录后激活的Shell,默认是Bash Shell

  • id 命令

    • 作用:查看账户的UID、GID等信息

    • 格式

    • <span style="background-color:#f8f8f8">id  账户名</span>
用户密码文件
  • /etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击

/etc/shadow文件中的每行9个字段的含义为:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

工作组账号文件
  • /etc/group文件存储每个组工作组信息

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># ll  /etc/group</span>
<span style="color:#0000cc">-rw-r--r--</span>. <span style="color:#116644">1</span> root root <span style="color:#116644">810</span>  <span style="color:#116644">4</span>月 <span style="color:#116644">26</span> <span style="color:#116644">14</span>:39 /etc/group</span></span>
  • 字段说明:

字段说明
Groupname组的名字
Passwd组的加密口令
GID是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定账户的基本组
Userlist是用“,”分开的账户名,列出的成员以该组为附加组

用户管理

添加新用户

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">useradd   <span style="color:#0000cc">-</span>参数  账户名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-c</span> 注释信息:设置相关的说明信息,如,:真实姓名、邮箱地址等。
<span style="color:#0000cc">-d</span>:目录:设定账户的家目录(默认为/home/用户名)。
<span style="color:#0000cc">-e</span> YYYY-MM-DD:设置用户的失效日期,此日期后将不能使用该账号。
<span style="color:#0000cc">-f</span> 天数:指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定   为-1,则表示账号过期后不被禁用(即密码永不过期)。
<span style="color:#0000cc">-g</span> 组名或GID号:为账户指定所属的基本组,该组在指定时必须已存在。
<span style="color:#0000cc">-G</span>:组名或GID号列表:为账户指定所属的扩展组,各组在指定时已存在,附加组可以有多个,组之间用“,”分隔。
<span style="color:#0000cc">-M</span>:不创建账户家目录。
<span style="color:#0000cc">-N</span>:不创建与账户名同名的基本组。
<span style="color:#0000cc">-p</span>:密码:指定账户的登录密码。
<span style="color:#0000cc">-s</span> shell名:指定账户登录后使用的Shell,默认是bash。
<span style="color:#0000cc">-u</span> 用户号:设置账号的UID,默认是已有账户的最大UID加1。如果同时有-o选项,则可以重复使用其他用户的标识号。</span></span>

修改账户信息

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">usermod   <span style="color:#0000cc">-</span>参数   账户名</span></span>
参数
  • 常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同

  • -l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用

  • -L:锁定(暂停)用户账户,使其不能登录使用

  • -U:解锁用户账户

账号设置密码

原则
  • Linux的账户必须设置密码后,才能登录系统

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">passwd  <span style="color:#0000cc">-</span>  参数  账户名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-d</span>:清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。
<span style="color:#0000cc">-e</span>:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
<span style="color:#0000cc">-i</span>:口令过期后多少天停用账户。
<span style="color:#0000cc">-l</span>:锁定(停用)用户账户。
<span style="color:#0000cc">-n</span>:指定口令的最短存活期。
<span style="color:#0000cc">-x</span>:指定密码的最长使用期限。
<span style="color:#0000cc">-u</span>:解锁用户账户。</span></span>
示例
  • 例1:设置root账户密码

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># passwd root</span>
更改用户 root 的密码 。
新的密码: 
无效的密码: 密码少于 <span style="color:#116644">8</span> 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。</span></span>
  • 例2:为上例test2、test4设置密码

  • 例3:锁定账户test2,尝试登录

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># passwd  -l  test2</span></span></span>
注意
  • 密码不能为空

  • 密码不要写成回文

  • 可以使用以下命令设置密码

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">echo</span> 密码 | passwd  <span style="color:#0000cc">--stdin</span> 用户名</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">echo</span> 密码 | passwd  <span style="color:#0000cc">--stdin</span> 用户名  >  /dev/null    <span style="color:#aa5500"># 无信息提示</span></span></span>
  • 只有 root 用户才能指定用户名

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># useradd test5</span>
[root@server ~]<span style="color:#aa5500"># passwd  test5</span>
更改用户 test5 的密码 。
新的密码: 
无效的密码: 密码少于 <span style="color:#116644">8</span> 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]<span style="color:#aa5500"># su test5</span>
[test5@server root]<span style="color:#0000ff">$ passwd</span>  test5
passwd:只有 root 户才能指定用户名。</span></span>

删除账号

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">userdel  账户名</span></span>
参数
  • -r:在删除该账户的同时,一并删除该账户对应的家目录

账户切换

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">su</span>   账户名</span></span>
su和su - 命令区别
  • 区别:加载的配置文件不一样

  • su切换方式加载的文件:~/.bashrc,/etc/bashrc

  • su -切换方式加载的文件:/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile

  • 注意:su - 相当于重新建立环境,若全局变量需要继续使用则不能使用su - 命令

注意
  • 从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。

控制用户对系统命令的使用权限

作用
  • 使用sudo命令可以提高普通用户的操作权限,使用前需要root进行配置

sudo的执行流程如下:
  • 当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)

  • 若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限

  • 若用户具有执行sudo的权限,便开始sudo后续接的命令;

配置/etc/sudoers文件方式
  • 执行visudo 或 vim /etc/sudoers

工作组管理

创建工作组

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">groupadd   <span style="color:#0000cc">-</span>参数  工作组名</span></span>
参数
  • -g GID:指定新工作组的GID,默认值是已有的最大的GID加1

  • -r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID

修改工作组

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">groupmod  <span style="color:#0000cc">-</span>参数   工作组名</span></span>
参数
  • -g GID——为用户组指定新的组标识号

  • -n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值

添加/删除组成员

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">gpasswd <span style="color:#0000cc">-</span>参数  账户  工作组</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-r</span> : 删除组密码
<span style="color:#0000cc">-a</span> : 把用户加入组
<span style="color:#0000cc">-d</span> : 把用户从组中删除。
<span style="color:#0000cc">-M</span> : 可同时添加多个用户
<span style="color:#0000cc">-A</span> : 给组指派管理员。</span></span>
注意
  • 只有root用户和组管理员才能够使用该命令

删除工作组

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">groupdel  工作组名</span></span>
注意
  • 被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组

查看用户登录系统的情况

users命令

作用
  • 查看当前登录系统的用户

last命令

作用
  • 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来

lastlog命令

作用
  • 查看每个账号的最近登录时间,该命令会读取/var/log/lastlog文件

w命令

作用
  • 显示登录到系统的用户信息

结果分析
  • 第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)

  • 第二行只是各个项目的说明

    • USER:表示登录系统的用户

    • TTY:表示用户使用的TTY名称

    • FROM:表示用户从哪里登录进来

    • LOGIN@:用户登录的日期和时间

    • idle:表示空闲时间

    • JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间

    • PCPU:当前活动进程使用的系统时间

    • WHAT:表示当前用户执行的进程名称和选项

  • 第三行以后,每行代表一个用户登录的信息。

who命令

作用
  • 显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息

结果分析
who命令的输出格式名称状态终端时间活动进程标识主机名
说明用户的登录名表明终端是否对用户都是可写的类似于pts/1、pts/2等用户登录系统的时间某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是".",表示一分钟内的终端活动用户登录shell的进程id登录到linux系统上的客户端机器标识
权限针对三类对象定义
  • owner:所有者,缩写u

  • group :所属组,缩写g

  • other :其他人,缩写o

访问者三种权限

组成模式分析
字符表示二进制表示数字表示
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

文件与目录权限含义
权限对文件的影响对目录的影响
r(read)可以读取文件的内容可以列出目录的内容,即目录下的文件的文件名
w(write)可以更改文件的内容可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用)
x(execute)可以作为可执行文件,如脚本可以切换到目录,如cd命令
文件可能出现的权限目录可能出现的权限
---、r--、r-x、rw-、rwx---、r-x、rwx
注意
  • root账户不受文件权限的读写限制,执行权限受限制

chmod命令

作用
  • chmod(change mode):修改文件或目录的权限

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 格式1</span>
<span style="color:#3300aa">chmod</span>  [选项]  [ugoa][<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span><span style="color:#981a1a">=</span>][rwx]  文件或目录...
​
<span style="color:#aa5500"># 格式2</span>
<span style="color:#3300aa">chmod</span>  [选项]  nnn  文件或目录...<span style="color:#009900">`</span></span></span>
参数
  • -R:递归修改指定目录下所有文件、子目录的权限

  • ugoa:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)

  • +或-或=:表示设置权限的操作动作,+代表添加;-代表取消;=表示只赋予给定的权限,并取消原有的权限。

  • rwx:用字符形式表示的所设置的权限,可以是其中一个字母或组合

  • nnn:用数字表示的权限

[root@server ~]# chmod 6 t2.txt

会自动在6的前面进行补00,也就是说实际上设置的权限是006

chown命令

作用
  • 修改文件或目录的所有者和属组

格式
  • 修改文件或目录的所属者

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">chown</span>   <span style="color:#0000cc">-</span>参数  所有者:所属组  文件名或目录名
<span style="color:#aa5500"># 参数-R递归设置</span></span></span>

总结:其他用户是否能够删除该文件,不是取决于该文件对其的权限设置,而是该文件的所属目录对该用户的权限设置。

权限掩码

新建文件权限与umask关系

  • 在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关

    第一位0表示的是特殊权限位

  • 新建文件的默认权限=0666-umask值 (减去)

  • 新建目录的默认权限=0777-umask值

查看默认umask值

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># umask</span>
<span style="color:#116644">0022</span>
​
<span style="color:#116644">0022</span>
[root@server ~]<span style="color:#aa5500"># touch  file1</span>
[root@server ~]<span style="color:#aa5500"># mkdir  dir1</span>
​
[root@server ~]<span style="color:#aa5500"># ll  -d  file1 dir1</span>
drwxr-xr-x. <span style="color:#116644">2</span> root root <span style="color:#116644">6</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:23 dir1    <span style="color:#aa5500">#  755</span>
<span style="color:#0000cc">-rw-r--r--</span>. <span style="color:#116644">1</span> root root <span style="color:#116644">0</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:23 file1   <span style="color:#aa5500">#  644</span>
​</span></span>

修改默认umask

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># umask 000     # 临时修改</span>
[root@server ~]<span style="color:#aa5500"># touch  file2</span>
[root@server ~]<span style="color:#aa5500"># mkdir  dir2</span>
[root@server ~]<span style="color:#aa5500"># ll -d  file2  dir2</span>
drwxrwxrwx. <span style="color:#116644">2</span> root root <span style="color:#116644">6</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:26 dir2
<span style="color:#0000cc">-rw-rw-rw-</span>. <span style="color:#116644">1</span> root root <span style="color:#116644">0</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:25 file2</span></span>

suid

对于一个可以执行的文件添加上suid权限后,普通用户在执行该文件时,会临时拥有该文件所有者的权限

普通用户可以使用passwd改命令,但是/etc/shadow文件对普通用户没有写的权限???

which passwd 查看命令文件的路径

ll /usr/bin/passwd

会发现在所属者的权限位置上存在s,表示suid权限

SGID

SetGID(SGID):当对一个可执行的程序文件设置了SGID后,普通用户在执行该文件时临时拥有 其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份

当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所 属组相同

SetGID权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s

设置SetGID命令格式:chmod g+s 文件名

##Sticky BIT特殊权限:

针对目录的,一旦目录存在BIT特殊权限,即使其他用户具有文件的rwx,也只能删除自己创建的文件

chmod o+t 目录名

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">#为目录设置SBIT</span>
​
[root@localhost ~]<span style="color:#aa5500"># chmod o+t /test</span>
​
[root@localhost ~]<span style="color:#aa5500"># ll -d /test</span>
​
drwxrwxrwt. <span style="color:#116644">2</span> root root <span style="color:#116644">6</span> <span style="color:#116644">4</span>月  <span style="color:#116644">11</span> <span style="color:#116644">16</span>:07 /test
[lisi@localhost test]<span style="color:#0000ff">$ ls</span>
​
kenji.txt laowang.txt lisi.txt
[lisi@localhost test]<span style="color:#0000ff">$ rm</span> <span style="color:#0000cc">-rf</span> *
​
<span style="color:#3300aa">rm</span>: 无法删除<span style="color:#aa1111">"kenji.txt"</span>: 不允许的操作
​
<span style="color:#3300aa">rm</span>: 无法删除<span style="color:#aa1111">"laowang.txt"</span>: 不允许的操作</span></span>

FACL访问控制列表

单独为每一个用户量身定制一个权限(不是你们部门的,但是需要一些权限)

命令格式:setfacl 选项 归属关系:用户名:权限 文档 常用选项:

-m 设置权限

-x 删除指定用户权限

-b 删除所有用户权限

查看ACL权限
  • 格式

<span style="background-color:#f8f8f8"><span style="color:#333333">getfacl  文件名</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># touch  temp.cfg</span>
​
[root@server ~]<span style="color:#aa5500"># getfacl  temp.cfg   # getfacl命令</span>
<span style="color:#aa5500"># file: temp.cfg</span>
<span style="color:#aa5500"># owner: root</span>
<span style="color:#aa5500"># group: root</span>
user::rw-
group::r--
other::r--</span></span>

设定ACL权限
  • 格式

<span style="background-color:#f8f8f8"><span style="color:#333333">setfacl  <span style="color:#0000cc">-</span>参数  文件名</span></span>
  • 参数

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-m</span>:设定 ACL 权限
    给用户设定 ACL 权限:setfacl <span style="color:#0000cc">-m</span> u:用户名:权限 指定文件名
    给用户组设定 ACL 权限:setfacl <span style="color:#0000cc">-m</span> g:组名:权限 指定文件名
​
<span style="color:#0000cc">-x</span>:删除指定的 ACL 权限;
​
<span style="color:#0000cc">-b</span>:删除所有的 ACL 权限;
​
<span style="color:#0000cc">-d</span>:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
​
<span style="color:#0000cc">-k</span>:删除默认 ACL 权限;
​
<span style="color:#0000cc">-R</span>:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效</span></span>
示例
  • 例:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir /project</span>
[root@server ~]<span style="color:#aa5500"># useradd zhangsan</span>
[root@server ~]<span style="color:#aa5500"># useradd lisi</span>
[root@server ~]<span style="color:#aa5500"># groupadd QQgroup</span>
[root@server ~]<span style="color:#aa5500"># gpasswd -M zhangsan,lisi QQgroup</span>
[root@server ~]<span style="color:#aa5500"># chown root:QQgroup /project</span>
[root@server ~]<span style="color:#aa5500"># chmod 770 /project</span>
[root@server ~]<span style="color:#aa5500"># ll -d /project</span>
drwxrwx---. <span style="color:#116644">2</span> root QQgroup <span style="color:#116644">6</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:12 /project
[root@server ~]<span style="color:#aa5500"># useradd pt   # 新建旁听账户</span>
[root@server ~]<span style="color:#aa5500"># setfacl -m u:pt:rx /project</span>
[root@server ~]<span style="color:#aa5500"># ll -d /project  # 注意:某文件下有+标志则说明其具有acl权限</span>
drwxrwx---<span style="color:#981a1a">+</span> <span style="color:#116644">2</span> root QQgroup <span style="color:#116644">6</span>  <span style="color:#116644">5</span>月  <span style="color:#116644">6</span> <span style="color:#116644">18</span>:12 /project
[root@server ~]<span style="color:#aa5500"># getfacl /project</span>
getfacl: Removing leading <span style="color:#aa1111">'/'</span> from absolute path names
<span style="color:#aa5500"># file: project</span>
<span style="color:#aa5500"># owner: root</span>
<span style="color:#aa5500"># group: QQgroup</span>
user::rwx
user:pt:r-x
group::rwx
mask::rwx
other::---
​</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:</span>
[root@server ~]<span style="color:#aa5500"># su - pt</span>
[pt@server ~]<span style="color:#0000ff">$ cd</span> /project
[pt@server project]<span style="color:#0000ff">$ touch</span> test.txt
<span style="color:#3300aa">touch</span>: 无法创建 <span style="color:#aa1111">'test.txt'</span>: 权限不够</span></span>

删除acl权限

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 删除指定用户的 ACL 权限setfacl -x u:用户名 文件名</span>
<span style="color:#aa5500"># 删除指定用户组的 ACL 权限setfacl -x g:组名 文件名</span>
<span style="color:#aa5500"># 删除文件的所有 ACL 权限setfacl -b 文件名</span></span></span>

配置网络

方法
nmcli命令

作用:nmcli,可以实现创建,显示,编辑,删除,激活和停用网络连接以及控制和显示网络设备状态等

可视化配置
  • 命令:nmtui

注意:通过键盘方向键和回车设置选项

ping命令

作用
  • 用来检测网络的连通情况和分析网络速度

  • 根据域名得到服务器 IP

  • 根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量。

  • 格式

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">ping</span>  <span style="color:#0000cc">-</span>参数  目标主机IP或域名</span></span>
参数
  • -c 数字:用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令。

  • -s 字节数:设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置值为65507B

  • -i 时间间隔:设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒

  • -t:设置存活时间TTL(Time To Live)

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># ping -c 2  www.baidu.com</span></span></span>
显示内容分析
  • bytes 值:数据包大小,也就是字节

  • time 值:响应时间,时间越小,速度越快

  • TTL 值:Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。通过TTL 值判断目标系统类型:默认情况下,Linux 系统的 TTL 值为 64 或 255,win11 系统值为644,UNIX 主机的 TTL 值为 255

通过域名访问主机

dns

静态解析

作用
  • 通过配置/etc/hosts文件实现域名解析

方法
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># vim  /etc/hosts</span>
<span style="color:#116644">127</span>.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
<span style="color:#116644">192</span>.168.48.134   www.openlab.com
​
[root@server ~]<span style="color:#aa5500"># ping  www.openlab.com</span></span></span>

简述DNS域名解析

wget命令

作用
  • 用于在终端命令行里下载网络文件,英文全称为:“web get”

格式
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#3300aa">wget</span>  <span style="color:#0000cc">-</span>参数  URL</span></span>
参数

-P 下载到指定目录 -t 最大尝试次数 -b 后台下载模式 -c 断点续传 -p 下载页面内所有资源,包括图片、视频等 -r 递归下载

curl命令

  • curl命令是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件

VMware三种网络模式

vmware提供三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)

虚拟机添加新硬盘

过程
  • 关机

  • 编辑虚拟机设置

  • 点击添加

  • 选择硬盘后下一步

  • 选择磁盘类型:SATA(A)

  • 创建新虚拟磁盘

  • 20GB,单个文件

  • 默认命名,点击完成

注意
  • 在添加3块硬盘,最终共4个硬盘

硬盘分区概述

MBR分区

概念
  • MBR(Master Boot Record,主引导记录)包含硬盘一系列参数和一段引导程序,硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序

  • MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存

  • MBR位于整个硬盘的0磁道0柱面1扇区

    • 主引导扇区512B

    • MBR=446B

    • DPT(Disk Partition Table硬盘分区表)=64B

    • 最后两个字节“55,AA”是分区的结束标志

MBR分区类型

  • 主分区(primary partition)

    • 一块硬盘最多4个主分区,主分区不可以再进行二次分区

    • 主分区可以直接建立文件系统,存放数据

    • 可以用来引导、启动操作系统

  • 扩展分区(extended partition)

    • 一块硬盘最多一个扩展分区,加主分区最多4个

    • 不能创建文件系统

    • 可以划分逻辑分区

  • 逻辑分区(logical partition)

    • 可以创建文件系统,存放数据

    • 逻辑分区的数量没有限制。

  • 支持的分区数量:4个主分区或者3个主分区1个扩展分区

  • 为什么MBR最多只能有4个主分区: 因为分区表占据64个字节,其中每个分区的信息占用16个字节,分区表里面可以记录四个分区信息描述。

GPT分区

产生原因
  • MBR分区表中最高支持磁盘容量为2.2TB 4T 1.8:

  • MBR分区表中,没有备份机制,分区表被干掉则磁盘全部死光光

  • MBR中存储开机管理程序的容量只有446B,无法存储较多内容

mbr ()

gpt

概念
  • GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式

  • GPT分区表使用LBA(Logical Block Address)逻辑区块地址来记录磁盘引导、分区的相关信息

    • LAB区块大小(512B-4KB),默认为512B

    • LAB区块共68个,前34个记录分区信息,后34个进行备份

    • 图:

  • 不在区分主分区与其它分区,默认情况下,GPT最多可支持128个分区

  • 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)

  • GPT分区机制在较老的BIOS中不能识别,则提供了一个UEFI (Unified Extensible Firmware Interface)统一的可扩展固件接口,来取代传统的BISO,又称为UEFI BIOS,UEFI使用C语言编写,支持较多的平台

lsblk命令

作用
  • 查看磁盘信息

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">lsblk  参数  设备名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-d</span> :仅列出硬盘本身信息,不显示分区信息
<span style="color:#0000cc">-f</span> :列出磁盘的内的文件系统名称
<span style="color:#0000cc">-i</span> : 使用ASCII码格式输出信息
<span style="color:#0000cc">-t</span> :显示磁盘的详细信息
<span style="color:#0000cc">-p</span> :显示设备完整名称</span></span>
示例
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0            <span style="color:#116644">11</span>:0    <span style="color:#116644">1</span>  <span style="color:#116644">8</span>.4G  <span style="color:#116644">0</span> rom  
nvme0n1       <span style="color:#116644">259</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─nvme0n1p1   <span style="color:#116644">259</span>:1    <span style="color:#116644">0</span>  400M  <span style="color:#116644">0</span> part /boot
└─nvme0n1p2   <span style="color:#116644">259</span>:2    <span style="color:#116644">0</span> <span style="color:#116644">19</span>.6G  <span style="color:#116644">0</span> part 
  ├─rhel-root <span style="color:#116644">253</span>:0    <span style="color:#116644">0</span> <span style="color:#116644">15</span>.6G  <span style="color:#116644">0</span> lvm  /
  └─rhel-swap <span style="color:#116644">253</span>:1    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> lvm  [SWAP]</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 显示内容分析</span>
NAME :设备名称,默认省略前导/dev 目录名
MAJ:MIN :主要:次要 设备代码
RM :是否可以卸载
SIZE : 容量
RO :是否为 只读 
TYPE : 设备类别(磁盘、分区、光盘等)
MOUNTPOINT :挂载点</span></span>

硬盘分区

使用fdisk管理分区

作用
  • fdisk命令工具默认将磁盘划分为==MBR==格式的分区

  • 命令:fdisk 设备名

  • 注意:fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可

指令作用指令作用
a调整磁盘的启动分区p显示当前磁盘的分区信息
d删除磁盘分区t更改分区类型
l显示所有支持的分区类型u切换所显示的分区大小单位
m查看所有指令的帮助信息n创建新分区
q不保存更改,退出fdisk命令w把修改写入磁盘分区表,然后退出fdisk命令
g新建一个空的GPT分区表o新建一个空的DOS分区表
示例
  • 例1:对/dev/sdb硬盘进行分区,方式:P+P+P+E(l+l+l),容量自定

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># fdisk  /dev/sda</span>
​
欢迎使用 fdisk (util-linux <span style="color:#116644">2</span>.37.4)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
​
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x4cd88da9 的新 DOS 磁盘标签。
​
命令(输入 m 获取帮助):n   <span style="color:#aa5500"># 输入n表示新建</span>
分区类型   
   p   主分区 (0 primary, <span style="color:#116644">0</span> extended, <span style="color:#116644">4</span> free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p    <span style="color:#aa5500"># 输入p或直接回车</span>
分区号 (1-4, 默认  <span style="color:#116644">1</span>):   <span style="color:#aa5500"># 默认回车</span>
第一个扇区 (2048-41943039, 默认 <span style="color:#116644">2048</span>):    <span style="color:#aa5500"># 默认回车</span>
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (2048-41943039, 默认 <span style="color:#116644">41943039</span>): <span style="color:#981a1a">+</span>2G  <span style="color:#aa5500"># 直接输入+容量及单位</span>
​
创建了一个新分区 <span style="color:#116644">1</span>,类型为“Linux”,大小为 <span style="color:#116644">2</span> GiB。
命令(输入 m 获取帮助):n   <span style="color:#aa5500"># 同上</span>
分区类型
   p   主分区 (1 primary, <span style="color:#116644">0</span> extended, <span style="color:#116644">3</span> free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):
​
将使用默认回应 p。
分区号 (2-4, 默认  <span style="color:#116644">2</span>): 
第一个扇区 (4196352-41943039, 默认 <span style="color:#116644">4196352</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (4196352-41943039, 默认 <span style="color:#116644">41943039</span>): <span style="color:#981a1a">+</span>3G
​
创建了一个新分区 <span style="color:#116644">2</span>,类型为“Linux”,大小为 <span style="color:#116644">3</span> GiB。
​
命令(输入 m 获取帮助):n  <span style="color:#aa5500"># 同上</span>
分区类型
   p   主分区 (2 primary, <span style="color:#116644">0</span> extended, <span style="color:#116644">2</span> free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):
​
将使用默认回应 p。
分区号 (3,4, 默认  <span style="color:#116644">3</span>): 
第一个扇区 (10487808-41943039, 默认 <span style="color:#116644">10487808</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (10487808-41943039, 默认 <span style="color:#116644">41943039</span>): <span style="color:#981a1a">+</span>2G
​
创建了一个新分区 <span style="color:#116644">3</span>,类型为“Linux”,大小为 <span style="color:#116644">2</span> GiB。
​
命令(输入 m 获取帮助):n   
分区类型  
   p   主分区 (3 primary, <span style="color:#116644">0</span> extended, <span style="color:#116644">1</span> free)   
   e   扩展分区 (逻辑分区容器)
选择 (默认 e):e   <span style="color:#aa5500"># 选择e新建扩展分区</span>
​
已选择分区 <span style="color:#116644">4</span>
第一个扇区 (14682112-41943039, 默认 <span style="color:#116644">14682112</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (14682112-41943039, 默认 <span style="color:#116644">41943039</span>):   <span style="color:#aa5500"># 回车,剩余容量全部分配</span>
​
创建了一个新分区 <span style="color:#116644">4</span>,类型为“Extended”,大小为 <span style="color:#116644">13</span> GiB。
​
命令(输入 m 获取帮助):n
所有主分区都在使用中。
添加逻辑分区 <span style="color:#116644">5</span>      <span style="color:#aa5500"># 新建逻辑分区</span>
第一个扇区 (14684160-41943039, 默认 <span style="color:#116644">14684160</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (14684160-41943039, 默认 <span style="color:#116644">41943039</span>): <span style="color:#981a1a">+</span>2G
​
创建了一个新分区 <span style="color:#116644">5</span>,类型为“Linux”,大小为 <span style="color:#116644">2</span> GiB。
​
命令(输入 m 获取帮助):n
所有主分区都在使用中。
添加逻辑分区 <span style="color:#116644">6</span>
第一个扇区 (18880512-41943039, 默认 <span style="color:#116644">18880512</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (18880512-41943039, 默认 <span style="color:#116644">41943039</span>): <span style="color:#981a1a">+</span>3G
​
创建了一个新分区 <span style="color:#116644">6</span>,类型为“Linux”,大小为 <span style="color:#116644">3</span> GiB。
​
命令(输入 m 获取帮助):n
所有主分区都在使用中。
添加逻辑分区 <span style="color:#116644">7</span>
第一个扇区 (25174016-41943039, 默认 <span style="color:#116644">25174016</span>): 
最后一个扇区,<span style="color:#981a1a">+</span>/-sectors 或 <span style="color:#981a1a">+</span>size{K,M,G,T,P} (25174016-41943039, 默认 <span style="color:#116644">41943039</span>):   <span style="color:#aa5500"># 回车,剩余全部分配</span>
​
创建了一个新分区 <span style="color:#116644">7</span>,类型为“Linux”,大小为 <span style="color:#116644">8</span> GiB。
​
命令(输入 m 获取帮助):p   <span style="color:#aa5500"># 显示分区列表</span>
Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / <span style="color:#116644">1</span> * <span style="color:#116644">512</span> <span style="color:#981a1a">=</span> <span style="color:#116644">512</span> 字节
扇区大小(逻辑/物理):512 字节 / <span style="color:#116644">512</span> 字节
I/O 大小(最小/最佳):512 字节 / <span style="color:#116644">512</span> 字节
磁盘标签类型:dos
磁盘标识符:0x4cd88da9
​
设备       启动     起点     末尾     扇区 大小 Id 类型
/dev/sda1           <span style="color:#116644">2048</span>  <span style="color:#116644">4196351</span>  <span style="color:#116644">4194304</span>   2G <span style="color:#116644">83</span> Linux
/dev/sda2        <span style="color:#116644">4196352</span> <span style="color:#116644">10487807</span>  <span style="color:#116644">6291456</span>   3G <span style="color:#116644">83</span> Linux
/dev/sda3       <span style="color:#116644">10487808</span> <span style="color:#116644">14682111</span>  <span style="color:#116644">4194304</span>   2G <span style="color:#116644">83</span> Linux
/dev/sda4       <span style="color:#116644">14682112</span> <span style="color:#116644">41943039</span> <span style="color:#116644">27260928</span>  13G  <span style="color:#116644">5</span> 扩展
/dev/sda5       <span style="color:#116644">14684160</span> <span style="color:#116644">18878463</span>  <span style="color:#116644">4194304</span>   2G <span style="color:#116644">83</span> Linux
/dev/sda6       <span style="color:#116644">18880512</span> <span style="color:#116644">25171967</span>  <span style="color:#116644">6291456</span>   3G <span style="color:#116644">83</span> Linux
/dev/sda7       <span style="color:#116644">25174016</span> <span style="color:#116644">41943039</span> <span style="color:#116644">16769024</span>   8G <span style="color:#116644">83</span> Linux
​
[root@server ~]<span style="color:#aa5500"># lsblk  # 查看</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
├─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda4          <span style="color:#116644">8</span>:4    <span style="color:#116644">0</span>    1K  <span style="color:#116644">0</span> part 
├─sda5          <span style="color:#116644">8</span>:5    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda6          <span style="color:#116644">8</span>:6    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
└─sda7          <span style="color:#116644">8</span>:7    <span style="color:#116644">0</span>    8G  <span style="color:#116644">0</span> part 
sdb             <span style="color:#116644">8</span>:16   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdc             <span style="color:#116644">8</span>:32   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sr0            <span style="color:#116644">11</span>:0    <span style="color:#116644">1</span>  <span style="color:#116644">8</span>.4G  <span style="color:#116644">0</span> rom  
nvme0n1       <span style="color:#116644">259</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─nvme0n1p1   <span style="color:#116644">259</span>:1    <span style="color:#116644">0</span>  400M  <span style="color:#116644">0</span> part /boot
└─nvme0n1p2   <span style="color:#116644">259</span>:2    <span style="color:#116644">0</span> <span style="color:#116644">19</span>.6G  <span style="color:#116644">0</span> part 
  ├─rhel-root <span style="color:#116644">253</span>:0    <span style="color:#116644">0</span> <span style="color:#116644">15</span>.6G  <span style="color:#116644">0</span> lvm  /
  └─rhel-swap <span style="color:#116644">253</span>:1    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> lvm  [SWAP]
​</span></span>
  • fdisk 设备(设备文件的路径 /dev/)

  • 例2:对/dev/sda,进行分区,P+P+E (l+l) P:1G P:3G L: 10G L:剩余

  • p:主分区

  • l :逻辑分区

  • e:扩展分区

lsblk

注意
  • 若无法查看,则表示分区信息还未写入内核(常见情况),输入==partprobe==命令 进行手动将分区信息同步到内核,再不行就重启

使用gdisk管理分区

注意
  • 注意:gdisk命令针对GPT分区格式,若在MBR分区格式下进行添加分区,则所有数据会全部丢失,切记:一块硬盘中fdisk与gdisk不能混用

  • 格式:gdisk 设备名

示例
  • 例:对/dev/sdd进行gdisk分区,3个分区,容量自定

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># gdisk  /dev/sdc</span>
GPT fdisk (gdisk) version <span style="color:#116644">1</span>.0.7
​
Partition table scan:  <span style="color:#aa5500"># 显示已存在的分区类型</span>
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
​
Creating new GPT entries <span style="color:#770088">in</span> memory.
​
Command (? <span style="color:#770088">for</span> help): n   <span style="color:#aa5500">#新建</span>
Partition number (1-128, default <span style="color:#116644">1</span>): 
First sector (34-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">2048</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: 
Last sector (2048-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">41943006</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: <span style="color:#981a1a">+</span>3G
Current type is <span style="color:#116644">8300</span> (Linux filesystem)
Hex code or GUID (L to show codes, Enter <span style="color:#981a1a">=</span> <span style="color:#116644">8300</span>): 
Changed type of partition to <span style="color:#aa1111">'Linux filesystem'</span>
​
Command (? <span style="color:#770088">for</span> help): n
Partition number (2-128, default <span style="color:#116644">2</span>): 
First sector (34-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">6293504</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: 
Last sector (6293504-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">41943006</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: <span style="color:#981a1a">+</span>2G
Current type is <span style="color:#116644">8300</span> (Linux filesystem)
Hex code or GUID (L to show codes, Enter <span style="color:#981a1a">=</span> <span style="color:#116644">8300</span>): 
Changed type of partition to <span style="color:#aa1111">'Linux filesystem'</span>
​
Command (? <span style="color:#770088">for</span> help): n
Partition number (3-128, default <span style="color:#116644">3</span>): 
First sector (34-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">10487808</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: 
Last sector (10487808-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">41943006</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: <span style="color:#981a1a">+</span>4G
Current type is <span style="color:#116644">8300</span> (Linux filesystem)
Hex code or GUID (L to show codes, Enter <span style="color:#981a1a">=</span> <span style="color:#116644">8300</span>): 
Changed type of partition to <span style="color:#aa1111">'Linux filesystem'</span>
​
Command (? <span style="color:#770088">for</span> help): p
Disk /dev/sdc: <span style="color:#116644">41943040</span> sectors, <span style="color:#116644">20</span>.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): <span style="color:#116644">512</span>/512 bytes
Disk identifier (GUID): 9FCD84E9-064C-416F-8829-34D7F7BE3542
Partition table holds up to <span style="color:#116644">128</span> entries
Main partition table begins at sector <span style="color:#116644">2</span> and ends at sector <span style="color:#116644">33</span>
First usable sector is <span style="color:#116644">34</span>, last usable sector is <span style="color:#116644">41943006</span>
Partitions will be aligned on <span style="color:#116644">2048</span><span style="color:#0000cc">-sector</span> boundaries
Total free space is <span style="color:#116644">23068605</span> sectors (11.0 GiB)
​
Number  Start (sector)    End (sector)  Size       Code  Name
   <span style="color:#116644">1</span>            <span style="color:#116644">2048</span>         <span style="color:#116644">6293503</span>   <span style="color:#116644">3</span>.0 GiB     <span style="color:#116644">8300</span>  Linux filesystem
   <span style="color:#116644">2</span>         <span style="color:#116644">6293504</span>        <span style="color:#116644">10487807</span>   <span style="color:#116644">2</span>.0 GiB     <span style="color:#116644">8300</span>  Linux filesystem
   <span style="color:#116644">3</span>        <span style="color:#116644">10487808</span>        <span style="color:#116644">18876415</span>   <span style="color:#116644">4</span>.0 GiB     <span style="color:#116644">8300</span>  Linux filesystem
​
Command (? <span style="color:#770088">for</span> help): w  <span style="color:#aa5500"># 保存退出</span>
​
Final checks complete. About to <span style="color:#3300aa">write</span> GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
​
Do you want to proceed? (Y/N): y   <span style="color:#aa5500"># 输入y</span>
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
├─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda4          <span style="color:#116644">8</span>:4    <span style="color:#116644">0</span>    1K  <span style="color:#116644">0</span> part 
├─sda5          <span style="color:#116644">8</span>:5    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda6          <span style="color:#116644">8</span>:6    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
└─sda7          <span style="color:#116644">8</span>:7    <span style="color:#116644">0</span>    8G  <span style="color:#116644">0</span> part 
sdb             <span style="color:#116644">8</span>:16   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdc             <span style="color:#116644">8</span>:32   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sdc1          <span style="color:#116644">8</span>:33   <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
├─sdc2          <span style="color:#116644">8</span>:34   <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
└─sdc3          <span style="color:#116644">8</span>:35   <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part </span></span>
注意
  • 实际工作中,硬盘分区是应保留一定的自由空间,以备将来分区空间不足时可以临时扩容

格式化

概念
格式化的目的
  • 当我们拿到了一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要先画格,这里的“白纸”就是原始的硬盘,而“裁剪”意味着分区,然后的“画格”就是格式化,最后写入内容

  • 格式化是对分区建立文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法

文件系统组成-ext2
  • 组成:super block(超级块)、inode (索引块)、block(数据块)

  • super block:又称为“硬盘地图”,记录文件系统的整体信息,如:inode/block块的总量、使用量、空闲块量、文件系统格式等相关信息

  • inode:记录文件的属性,一个文件占用一个inode块,并且记录次文件的数据所在的block块的号码,默认为128B大小,存储:文件访问权限、文件所有者与所属组、文件大小、创建时间或修改内容时间、最有一次访问时间、特殊权限、真实数据地址

  • block块:记录实际文件的内容,在EXT2文件系统中分为1KB、2KB、4KB容量,文件太大时,会占用多个数据块

  • 图:

查看文件系统格式
  • 方法:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkfs    # 点击2次tab</span>
mkfs  mkfs.cramfs  mkfs.ext2  mkfs.ext3  mkfs.ext4  mkfs.fat  mkfs.minix   mkfs.msdos   mkfs.vfat  mkfs.xfs     </span></span>

格式化命令

<span style="background-color:#f8f8f8"><span style="color:#333333">mkfs.xfs  <span style="color:#0000cc">-</span>参数   硬盘分区名
​
mkfs.ext4  <span style="color:#0000cc">-</span>参数  硬盘分区名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-f</span>:强制格式化,已存在文件系统时需要使用
<span style="color:#0000cc">-c</span>:建立文件系统前先检查坏块。
<span style="color:#0000cc">-V</span>:输出建立文件系统的详细信息</span></span>
示例
  • 例1:恢复快照,删除之前的虚拟硬盘文件,添加新硬盘,分区后格式化

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># gdisk  /dev/sda   (2G+3G+4G)</span>
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
└─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part 
​
[root@server ~]<span style="color:#aa5500"># mkfs.xfs  /dev/sda1</span>
<span style="color:#0000ff">meta-data</span><span style="color:#981a1a">=</span>/dev/sda1              <span style="color:#0000ff">isize</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>    <span style="color:#0000ff">agcount</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span>, <span style="color:#0000ff">agsize</span><span style="color:#981a1a">=</span><span style="color:#116644">131072</span> blks
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sectsz</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>   <span style="color:#0000ff">attr</span><span style="color:#981a1a">=</span><span style="color:#116644">2</span>, <span style="color:#0000ff">projid32bit</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">crc</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>        <span style="color:#0000ff">finobt</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>, <span style="color:#0000ff">sparse</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>, <span style="color:#0000ff">rmapbt</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">reflink</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>    <span style="color:#0000ff">bigtime</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span> <span style="color:#0000ff">inobtcount</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
data     <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">524288</span>, <span style="color:#0000ff">imaxpct</span><span style="color:#981a1a">=</span><span style="color:#116644">25</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sunit</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>      <span style="color:#0000ff">swidth</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span> blks
naming   <span style="color:#981a1a">=</span>version <span style="color:#116644">2</span>              <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">ascii-ci</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>, <span style="color:#0000ff">ftype</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
log      <span style="color:#981a1a">=</span>internal log           <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">2560</span>, <span style="color:#0000ff">version</span><span style="color:#981a1a">=</span><span style="color:#116644">2</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sectsz</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>   <span style="color:#0000ff">sunit</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span> blks, <span style="color:#0000ff">lazy-count</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
realtime <span style="color:#981a1a">=</span>none                   <span style="color:#0000ff">extsz</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>, <span style="color:#0000ff">rtextents</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># mkfs.xfs  /dev/sda2</span>
​
[root@server ~]<span style="color:#aa5500"># mkfs.ext4  /dev/sda3</span></span></span>
  • 例2:格式化/dev/sda2 ,并使用inte的cpu多线程技术进行多数据流读写系统

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># grep 'processor' /proc/cpuinfo    # 查看核心数</span>
processor   : <span style="color:#116644">0</span>
processor   : <span style="color:#116644">1</span>
​
[root@server ~]<span style="color:#aa5500"># mkfs.xfs  -d agcount=2  /dev/sda2</span>
<span style="color:#aa5500"># -f:强制格式化</span>
<span style="color:#aa5500"># -d:指定核心数</span></span></span>
  • 例3:制作大文件/filedev,容量2G,格式化为xfs文件系统

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server /]<span style="color:#aa5500"># dd  if=/dev/zero  of=/filedev  count=2 bs=1G</span>
​
[root@server /]<span style="color:#aa5500"># mkfs.xfs -f /filedev </span>
<span style="color:#aa5500"># -f: 最好加上-f强制格式化</span></span></span>

blkid命令

作用
  • 显示设备的UUID值和文件系统名称

UUID
  • UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的UUID值,以方便挂载

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">blkid  设备名</span></span>
示例
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># blkid  /dev/sda1</span>
/dev/sda1: <span style="color:#0000ff">UUID</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"2f3bfdcc-b4ff-488f-aa4d-7137c2b4fd7d"</span> <span style="color:#0000ff">TYPE</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"xfs"</span> <span style="color:#0000ff">PARTLABEL</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"Linux filesystem"</span> <span style="color:#0000ff">PARTUUID</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"96058c70-ea76-41d4-a677-9e5574a06220"</span>
​
<span style="color:#aa5500"># 显示内容:设备名    UUID值    文件系统类型(TYPE)</span>
​
[root@server ~]<span style="color:#aa5500"># blkid  # 全部查看</span></span></span>

挂载

概念
  • mount point:挂载点,是一个目录,该目录是进入磁盘分区(文件系统)的入口

  • 挂载:将一个分区或者设备挂载至挂载点目录,建立连接,通过挂载点目录进入分区空间

mount命令

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">mount  [-t  文件系统类型]  设备名   挂载点目录</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-a</span>:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
<span style="color:#0000cc">-t</span>:指定文件系统类型
<span style="color:#0000cc">-o</span> 特殊设备选项:挂载设备时使用逗号分割输入额外参数</span></span>

示例
  • 例1:新建挂载目录,挂载/dev/sda1

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir  /msda1</span>
[root@server ~]<span style="color:#aa5500"># mount  /dev/sda1  /msda1</span>
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part 
└─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part </span></span>
  • 例2:使用UUID值挂载/dev/sda2

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># blkid  /dev/sda2</span>
/dev/sda2: <span style="color:#0000ff">UUID</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"27301fb0-2d51-40a7-8508-fd11550c4aaa"</span> <span style="color:#0000ff">TYPE</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"xfs"</span> <span style="color:#0000ff">PARTLABEL</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"Linux filesystem"</span> <span style="color:#0000ff">PARTUUID</span><span style="color:#981a1a">=</span><span style="color:#aa1111">"93b2b535-d875-44e4-9134-87b0c203d046"</span>
[root@server ~]<span style="color:#aa5500"># mkdir  /msda2</span>
[root@server ~]<span style="color:#aa5500"># mount UUID="27301fb0-2d51-40a7-8508-fd11550c4aaa"  /msda2</span>
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part /msda2
└─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part </span></span>
  • 例3:挂载光盘

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mount  /dev/sr0  /media</span>
mount: /media: WARNING: <span style="color:#3300aa">source</span> write-protected, mounted read-only.<span style="color:#aa5500"># 只读挂载</span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part /msda2
└─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part 
sr0            <span style="color:#116644">11</span>:0    <span style="color:#116644">1</span>  <span style="color:#116644">8</span>.4G  <span style="color:#116644">0</span> rom  /media</span></span>
  • 例4:查看挂载信息

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mount</span>
​
[root@server ~]<span style="color:#aa5500"># mount | grep /dev/sda</span></span></span>
注意
  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中

  • 单一目录不应该重复挂载多个文件系统

  • 作为挂载点的目录,应为空目录,否则原有数据会隐藏

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkdir  /msda3</span>
[root@server ~]<span style="color:#aa5500"># echo  "hello"  >  /msda3/test.txt</span>
[root@server ~]<span style="color:#aa5500"># ls  /msda3</span>
test.txt
[root@server ~]<span style="color:#aa5500"># mount  /dev/sda3  /msda3</span>
[root@server ~]<span style="color:#aa5500"># ls  /msda3  # test.txt隐藏,卸载设备后恢复</span>
lost<span style="color:#981a1a">+</span>found
​
<span style="color:#aa5500"># lost+found目录作用:使用标准的ext文件系统格式才会产生的一个目录,当软件或者硬件出现错误,导致文件系统不一致时会把有问题的文件放到lost+found目录种,所以是一种恢复丢失文件的方法,误删除时可使用mklost+found创建</span></span></span>

umount命令

作用
  • 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">umount  参数   设备名称[挂载点]</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-f</span> :强制卸载</span></span>
示例
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># umount  /dev/sda1</span>
[root@server ~]<span style="color:#aa5500"># umount  /dev/sda2</span>
[root@server ~]<span style="color:#aa5500"># umount  /dev/sr0</span></span></span>
注意
  • 若正使用文件系统,则应使用cd命令离开该目录后再卸载

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># cd  /msda3</span>
[root@server msda3]<span style="color:#aa5500"># ls</span>
lost<span style="color:#981a1a">+</span>found
[root@server msda3]<span style="color:#aa5500"># umount  /dev/sda3</span>
umount: /msda3: 目标忙.
[root@server msda3]<span style="color:#aa5500"># cd  ~   # 离开需要卸载的目录</span>
[root@server ~]<span style="color:#aa5500"># umount  /dev/sda3</span>
[root@server ~]<span style="color:#aa5500"># ls  /msda3   # 原先隐藏的文件,卸载设别后会显示</span>
test.txt</span></span>

开机挂载

作用
  • 由于mount为手动挂载,重启后就会卸载,则修改/etc/fstab配置文件,实现开机自动挂载

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mount   /dev/sda1  /msda1</span>
[root@server ~]<span style="color:#aa5500"># lsblk </span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1  <span style="color:#aa5500"># 已挂载</span>
……
​
[root@server ~]<span style="color:#aa5500"># reboot</span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part 
……</span></span>
配置文件分析
  • 路径:/etc/fstab

  • 共六列,分别为:

    • 设备名称或其UUID值

    • 挂载点目录

    • 文件系统名称

    • 文件系统参数:default

    • 是否备份,0

    • fsck:开机是否用fsck进行扇区检查,但xfs文件系统不支持则为 0

示例
  • 将/dev/sda1挂载到/msda1中,并设置开机挂载,重启后检查

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># vim   /etc/fstab</span>
/dev/sda1        /msda1  xfs     defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># mount  -a  # 挂载所有,进行测试,</span>
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1
[root@server ~]<span style="color:#aa5500"># reboot</span>
[root@server ~]<span style="color:#aa5500"># lsblk</span>
<span style="color:#aa5500"># 注意:为了防止语法错误,必须进行测试,否则开机无法启动</span></span></span>
注意
  • 根目录/ 是必须挂载的﹐而且一定要先于其它mount point 被挂载

  • 其它mount point 必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则(FHS)

  • 所有mount point 在同一时间之内﹐只能挂载一次。

  • 所有partition 在同一时间之内﹐只能挂载一次。

特殊挂载

挂载大文件
  • 当只有一个分区,剩余空间还很大,自由空间很小不能进行新的分区,则可以在当前分区制作一个大文件,在进行挂载,相当于一个新的分区来使用

  • 例:建立根目录下新建1GB大文件,挂载并开机挂载使用

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># dd  if=/dev/zero  of=/loopdev  count=1  bs=1G</span>
​
[root@server ~]<span style="color:#aa5500"># mkfs.xfs  -f  /loopdev </span>
​
[root@server ~]<span style="color:#aa5500"># mkdir  /mloop</span>
​
[root@server ~]<span style="color:#aa5500"># mount -o loop /loopdev  /mloop </span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
​
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab</span>
/loopdev        /mloop  xfs     defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># mount  -a</span>
​
[root@server ~]<span style="color:#aa5500"># reboot</span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span></span></span>
增加swap分区
  • swap分区:类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为swap毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢

  • 查看:

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># free -h</span>
        total        used        free      shared  buff/cache   available
Mem:    <span style="color:#116644">1</span>.9Gi       733Mi       985Mi       15Mi       380Mi       <span style="color:#116644">1</span>.2Gi
Swap:   <span style="color:#116644">4</span>.0Gi          0B       <span style="color:#116644">4</span>.0Gi</span></span>
  • 添加过程:新建分区->格式化该分区->启用新的swap->查看系统信息->挂载

  • 例1:/dev/sda中划分5G空间为swap分区,并开机挂载使用

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># gdisk  /dev/sda</span>
GPT fdisk (gdisk) version <span style="color:#116644">1</span>.0.7
​
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
​
Found valid GPT with protective MBR; using GPT.
​
Command (? <span style="color:#770088">for</span> help): n
Partition number (4-128, default <span style="color:#116644">4</span>): 
First sector (34-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">18876416</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: 
Last sector (18876416-41943006, default <span style="color:#981a1a">=</span> <span style="color:#116644">41943006</span>) or {<span style="color:#981a1a">+</span><span style="color:#0000cc">-</span>}size{KMGTP}: <span style="color:#981a1a">+</span>5G
Current type is <span style="color:#116644">8300</span> (Linux filesystem)
Hex code or GUID (L to show codes, Enter <span style="color:#981a1a">=</span> <span style="color:#116644">8300</span>): 
Changed type of partition to <span style="color:#aa1111">'Linux filesystem'</span>
​
Command (? <span style="color:#770088">for</span> help): W
​
Final checks complete. About to <span style="color:#3300aa">write</span> GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
​
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
[root@server ~]<span style="color:#aa5500"># lsblk  # 若未显示sda4则使用partprobe命令更新</span>
​
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0           <span style="color:#116644">7</span>:0    <span style="color:#116644">0</span>    1G  <span style="color:#116644">0</span> loop /mloop
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─sda1          <span style="color:#116644">8</span>:1    <span style="color:#116644">0</span>    2G  <span style="color:#116644">0</span> part /msda1
├─sda2          <span style="color:#116644">8</span>:2    <span style="color:#116644">0</span>    3G  <span style="color:#116644">0</span> part /msda2
├─sda3          <span style="color:#116644">8</span>:3    <span style="color:#116644">0</span>    4G  <span style="color:#116644">0</span> part 
└─sda4          <span style="color:#116644">8</span>:4    <span style="color:#116644">0</span>    5G  <span style="color:#116644">0</span> part 
……
​
[root@server ~]<span style="color:#aa5500"># mkswap  /dev/sda4   # swap格式化</span>
正在设置交换空间版本 <span style="color:#116644">1</span>,大小 <span style="color:#981a1a">=</span> <span style="color:#116644">5</span> GiB (5368705024  个字节)
无标签<span style="color:#0000ff">,UUID</span><span style="color:#981a1a">=</span>b9eaced8-4e7a-4ce3-9287-ac848c5f04ae
​
[root@server ~]<span style="color:#aa5500"># swapon  /dev/sda4    # 启用</span>
​
[root@server ~]<span style="color:#aa5500"># free  -h   # 查看容量</span>
​
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab   # 开机挂载</span>
/dev/sda4       swap    swap    defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># reboot</span>
​
[root@server ~]<span style="color:#aa5500"># free  -h</span></span></span>
  • 例2:使用大文件建立swap

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># dd  if=/dev/zero  of=/swapdev  count=1  bs=1G</span>
​
[root@server ~]<span style="color:#aa5500"># mkswap  /swapdev</span>
​
[root@server ~]<span style="color:#aa5500"># chmod  600  /swapdev   # 更改权限,否则不安全</span>
​
[root@server ~]<span style="color:#aa5500"># swapon  /swapdev</span>
​
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab</span>
/swapdev        swap    swap    defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
<span style="color:#aa5500"># fstab中设备来源于大文件,则fstab中不能使用UUID值作为挂载设备名</span>
​
[root@server ~]<span style="color:#aa5500"># free  -h  </span>
<span style="color:#aa5500"># 注意,若free显示swap容量为及时增加,可使用下列命令查看</span>
​
[root@server ~]<span style="color:#aa5500"># swapon -s   # 此时列表中有对应swao新空间即可</span></span></span>
注意
  • swap在服务器中有时会关闭,如数据库服务器,但一般用于服务器内存剩余空间有一定压力时会触发使用swap空间,则swap空间大小设置一般为:当物理内存小于2G时,swap分区大小为物理内存的2倍;超过2G的部分,swap分区大小跟物理内存相等

  • 可以使用 swapoff命令停用部分swap空间

查看磁盘空间使用量

df命令

作用
  • 列出文件系统的磁盘空间占用情况

  • df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">df <span style="color:#0000cc">-</span>参数 目录或文件名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"> <span style="color:#0000cc">-a</span>:列出所有的文件系统,包括系统特有的/proc等文件系统
 <span style="color:#0000cc">-k</span>:以KB的容量显示各文件系统
 <span style="color:#0000cc">-m</span>:以MB的容量显示各文件系统
 <span style="color:#0000cc">-h</span>:以人们较易阅读的GB,MB,KB等格式自行显示
 <span style="color:#0000cc">-H</span>:<span style="color:#0000ff">以M</span><span style="color:#981a1a">=</span>1000K替<span style="color:#0000ff">代M</span><span style="color:#981a1a">=</span>1024K的进位方式
 <span style="color:#0000cc">-T</span>:连同该分区的文件系统名称(例如ext3)也列出
 <span style="color:#0000cc">-i</span>:不用硬盘容量,而以inode的数量来显示
​
<span style="color:#aa5500"># 由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要是在Super block内的信息,所以这个命令显示结果的速度非常快速。</span></span></span>
示例
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># df  -h</span>
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               <span style="color:#116644">4</span>.0M     <span style="color:#116644">0</span>  <span style="color:#116644">4</span>.0M    <span style="color:#116644">0</span>% /dev
tmpfs                  968M     <span style="color:#116644">0</span>  968M    <span style="color:#116644">0</span>% /dev/shm
tmpfs                  388M  <span style="color:#116644">9</span>.7M  378M    <span style="color:#116644">3</span>% /run
/dev/mapper/rhel-root   16G  <span style="color:#116644">8</span>.5G  <span style="color:#116644">7</span>.2G   <span style="color:#116644">54</span>% /
/dev/sda2              <span style="color:#116644">3</span>.0G   54M  <span style="color:#116644">3</span>.0G    <span style="color:#116644">2</span>% /msda2
/dev/sda1              <span style="color:#116644">2</span>.0G   47M  <span style="color:#116644">2</span>.0G    <span style="color:#116644">3</span>% /msda1
/dev/loop0            1014M   40M  975M    <span style="color:#116644">4</span>% /mloop
/dev/nvme0n1p1         395M  235M  160M   <span style="color:#116644">60</span>% /boot
tmpfs                  194M   52K  194M    <span style="color:#116644">1</span>% /run/user/42
tmpfs                  194M   36K  194M    <span style="color:#116644">1</span>% /run/user/0</span></span>

du命令

作用
  • du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。

  • du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">du  <span style="color:#0000cc">-</span>参数   文件或目录名</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-a</span> : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
<span style="color:#0000cc">-h</span> : 以人们较易读的容量格式(G/M)显示;
<span style="color:#0000cc">-s</span> : 列出总量,而不列出每个个别的目录占用了容量;
<span style="color:#0000cc">-S</span> : 不包括子目录下的总计,与-s有点差别;
<span style="color:#0000cc">-k</span> : 以KB列出容量显示;
<span style="color:#0000cc">-m</span> : 以MB列出容量显示。</span></span>

RAID

概念

1、文件传输速度

2、数据的安全性

  • 当今CPU性能每年可提升30%-50%但硬盘仅提升7%

  • 硬盘在服务器中需要持续、频繁、大量的I/O操作,故障机率较大,则需要对硬盘进行技术改造,提升读写性能、可靠性

  • 1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术概念

  • 原理:RAID(Redundant Array of Independent Disks)将多个硬盘设备组成一个大容量、安全更好的磁盘阵列,并将数据切割成多个片段后分别存储到不同的物理硬盘上,利用分散读写技术来来提升硬盘性能,同时也备份了多个副本到不同硬盘中,拥有了备份冗余功能

常见RAID组建方案

RAID0
  • 原理:把至少2块硬盘通过硬件或软件方式串联,组成一个大的卷组,并将数据依次写入到各个硬盘

  • 优点:数据同步传输,读取/写入分开,性能大大提升

  • 缺点:若任意一块硬盘故障会导致整个系统的数据损坏,无备份冗余能力错误修复能力

  • 总结:使用率100%,至少2块磁盘才能使用,优点是快,提升磁盘的读写速度,缺点是不安全

  • 图:

RAID1
  • 产生原因:若生产环境对硬盘的读写速度没有较大要求,但希望增加数据安全性时可使用RAID

  • 原理:把至少2块硬盘绑定起来,写入数据时将数据同时也写入另一或多块硬盘中,

  • 本质:多个硬盘作为镜像备份

  • 优点:数据备份冗余安全性大大提升

  • 缺点:硬盘利用率下降

  • 总结:是镜像,使用两块磁盘,一式两份的方式,支持容错,冗余,数据安全不丢失,缺点是速度不快,使用率50%,成本较大。

  • 图:

RAID5
  • 产生原因:兼顾“读写速度”、“数据安全”、“成本”的一种折中方式

  • 原理:需至少三块硬盘,将数据分块存储到不同硬盘中,硬盘中必须存储其它一个硬盘的parity(奇偶校验信息)

  • 优点:兼顾性能,通过“奇偶校验”替代“镜像备份”

  • 缺点:硬盘数据安全性较低

  • 总结:使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会恢复

  • 图:

RAID10 (主流)
  • 本质:RAID1+RAID0 的组合

  • 原理:至少需要4块硬盘,先制作两两的RAID1阵列,以保证安全性,在两两制作RAID0,以提高读写速度

  • 优点:兼具速度和安全性

  • 缺点:成本较高

  • 图:

mdadm命令

作用
  • 管理系统中的RAID磁盘阵列

格式
<span style="background-color:#f8f8f8"><span style="color:#333333">mdadm   [模式]   <RAID设备名>   <span style="color:#0000cc">-</span>参数   [成员设备名称]</span></span>
参数
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#0000cc">-a</span> :检测设备名称   
<span style="color:#0000cc">-n</span> :指定硬盘数量
<span style="color:#0000cc">-l</span> :指定RAID级别   
<span style="color:#0000cc">-C</span> :创建RAID
<span style="color:#0000cc">-v</span> :显示过程     
<span style="color:#0000cc">-f</span> :模拟设备损坏
<span style="color:#0000cc">-r</span> :移除设备     
<span style="color:#0000cc">-Q</span> : 查看摘要
<span style="color:#0000cc">-D</span> :查看详细信息   
<span style="color:#0000cc">-S</span> :停止RAID磁盘阵列 </span></span>
示例
  • 例1:关机后添加4块硬盘,创建RAID10

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># lsblk </span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdb             <span style="color:#116644">8</span>:16   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdc             <span style="color:#116644">8</span>:32   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdd             <span style="color:#116644">8</span>:48   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sde             <span style="color:#116644">8</span>:64   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
……</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mdadm  -Cv /dev/md0  -a yes -n 4 -l 10 /dev/sda  /dev/sdb  /dev/sdc  /dev/sdd</span>
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size <span style="color:#770088">set</span> to 20954112K
mdadm: Defaulting to version <span style="color:#116644">1</span>.2 metadata
mdadm: array /dev/md0 started.
<span style="color:#aa5500"># 分析</span>
<span style="color:#0000cc">-Cv</span>:创建RAID 并显示过程
/dev/md0:新的RAID阵列名
<span style="color:#0000cc">-a</span>  <span style="color:#3300aa">yes</span>:检测并自动创建RAID设备文件
<span style="color:#0000cc">-n</span> <span style="color:#116644">4</span>:硬盘数量为4块
<span style="color:#0000cc">-l</span> <span style="color:#116644">10</span>:RAID级别为RAID10
​
[root@server ~]<span style="color:#aa5500"># mdadm  -D  /dev/md0   # 查看信息</span></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkfs.xfs  /dev/md0</span>
[root@server ~]<span style="color:#aa5500"># mkdir   /RAID</span>
[root@server ~]<span style="color:#aa5500"># mount    /dev/md0   /RAID</span>
[root@server ~]<span style="color:#aa5500"># df  -h</span>
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               <span style="color:#116644">4</span>.0M     <span style="color:#116644">0</span>  <span style="color:#116644">4</span>.0M    <span style="color:#116644">0</span>% /dev
tmpfs                  968M     <span style="color:#116644">0</span>  968M    <span style="color:#116644">0</span>% /dev/shm
tmpfs                  388M  <span style="color:#116644">9</span>.7M  378M    <span style="color:#116644">3</span>% /run
/dev/mapper/rhel-root   16G  <span style="color:#116644">4</span>.2G   12G   <span style="color:#116644">27</span>% /
/dev/nvme0n1p1         395M  235M  160M   <span style="color:#116644">60</span>% /boot
tmpfs                  194M   52K  194M    <span style="color:#116644">1</span>% /run/user/42
tmpfs                  194M   36K  194M    <span style="color:#116644">1</span>% /run/user/0
/dev/md0                40G  319M   40G    <span style="color:#116644">1</span>% /RAID
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab  </span>
/dev/md0        /RAID   xfs     defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span></span></span>
  • 例2:修复损坏的RAID

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 模拟某个硬盘损坏</span>
mdadm   /dev/md0   <span style="color:#0000cc">-f</span>  /dev/sdb
[root@server ~]<span style="color:#aa5500"># mdadm   /dev/md0   -f  /dev/sdb</span>
mdadm: <span style="color:#770088">set</span> /dev/sdb faulty <span style="color:#770088">in</span> /dev/md0
<span style="color:#aa5500"># 此期间不影响RAID的使用</span>
​
[root@server ~]<span style="color:#aa5500"># mdadm   -D  /dev/md0</span>
[root@server ~]<span style="color:#aa5500"># umount  /RAID</span>
[root@server ~]<span style="color:#aa5500"># mdadm  /dev/md0  -a  /dev/sde  # 添加新硬盘</span>
mdadm: added /dev/sde
[root@server ~]<span style="color:#aa5500"># mdadm   -D  /dev/md0</span>
[root@server ~]<span style="color:#aa5500"># mount  -a   # 重新挂载</span></span></span>
取消RAID
  • 注意:实际生产环境中,若取消RAID10之前必须备份出其数据,否则已存在数据无法使用

  • 例:上例RAID10解散

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># umount /dev/md0</span>
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab   # 删除开机挂载项,切记</span>
[root@server ~]<span style="color:#aa5500"># mdadm  -S /dev/md0  # 停止</span>
mdadm: stopped /dev/md0</span></span>

RAID备份盘技术

产生原因
  • 在RAID10中若RAID1中的某个硬盘损坏,在修复完毕前恰巧另一块RAID1的硬盘也损坏,则数据就彻底丢失

原理
  • 在RAID中添加一个大容量的备份盘来预防此类事故,某块硬盘故障,备份盘同步恢复,无须人工干预。

  • 分析RAID10需要4块硬盘,备份盘需要1块硬盘,共5块硬盘

创建RAID10+备份盘阵列系统
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mdadm  -Cv  /dev/md1  -a  yes  -n  4  -l  10  -x  1   /dev/sda  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde</span>
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: /dev/sda appears to be part of a raid array:
       <span style="color:#0000ff">level</span><span style="color:#981a1a">=</span>raid10 <span style="color:#0000ff">devices</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span> <span style="color:#0000ff">ctime</span><span style="color:#981a1a">=</span>Mon May <span style="color:#116644">15</span> <span style="color:#116644">14</span>:00:24 <span style="color:#116644">2023</span>
mdadm: /dev/sdb appears to be part of a raid array:
       <span style="color:#0000ff">level</span><span style="color:#981a1a">=</span>raid10 <span style="color:#0000ff">devices</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span> <span style="color:#0000ff">ctime</span><span style="color:#981a1a">=</span>Mon May <span style="color:#116644">15</span> <span style="color:#116644">14</span>:00:24 <span style="color:#116644">2023</span>
mdadm: /dev/sdc appears to be part of a raid array:
       <span style="color:#0000ff">level</span><span style="color:#981a1a">=</span>raid10 <span style="color:#0000ff">devices</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span> <span style="color:#0000ff">ctime</span><span style="color:#981a1a">=</span>Mon May <span style="color:#116644">15</span> <span style="color:#116644">14</span>:00:24 <span style="color:#116644">2023</span>
mdadm: /dev/sdd appears to be part of a raid array:
       <span style="color:#0000ff">level</span><span style="color:#981a1a">=</span>raid10 <span style="color:#0000ff">devices</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span> <span style="color:#0000ff">ctime</span><span style="color:#981a1a">=</span>Mon May <span style="color:#116644">15</span> <span style="color:#116644">14</span>:00:24 <span style="color:#116644">2023</span>
mdadm: /dev/sde appears to be part of a raid array:
       <span style="color:#0000ff">level</span><span style="color:#981a1a">=</span>raid10 <span style="color:#0000ff">devices</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span> <span style="color:#0000ff">ctime</span><span style="color:#981a1a">=</span>Mon May <span style="color:#116644">15</span> <span style="color:#116644">14</span>:00:24 <span style="color:#116644">2023</span>
mdadm: size <span style="color:#770088">set</span> to 20954112K
Continue creating array? y   <span style="color:#aa5500"># 输入y</span>
mdadm: Defaulting to version <span style="color:#116644">1</span>.2 metadata
mdadm: array /dev/md1 started.
<span style="color:#aa5500"># 注意:-x  1  表示备份盘  1块硬盘 ,一般命令最后一个硬盘为备份盘</span>
​
[root@server ~]<span style="color:#aa5500"># mdadm  -D  /dev/md1</span></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mdadm  /dev/md1  -f /dev/sdb  # 模拟损坏</span>
mdadm: <span style="color:#770088">set</span> /dev/sdb faulty <span style="color:#770088">in</span> /dev/md1
​
[root@server ~]<span style="color:#aa5500"># mdadm  -D  /dev/md1   # 发现/dev/sdf正在同步恢复中</span></span></span>

管理逻辑卷

工作原理

产生原因
  • 硬盘分区或部署为RAID后在修改分区大小时就非常不容易,此时用户随着实际的需求变化而动态调整硬盘分区大小时受到限制,无灵活性

  • LVM(Logical Volume Manager )允许用户对硬盘资源进行动态调整

认识Linux逻辑卷
  • LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。

  • 通过LVM技术,屏蔽了磁盘分区的底层差异,管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统

  • 管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。

  • 假设有三块磁盘/dev/sdb、/dev/sdc和/dev/sdd用来划分逻辑卷,LVM模型如图所示:

LVM基本概念
  • PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致

  • 物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数

  • 卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义

  • 逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以属于同一个卷组,也可以属于不同的多个卷组

部署逻辑卷

常用的LVM部署命令
功能/命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce
示例
  • 例1:恢复快照,在虚拟机中添加3块新硬盘,2块硬盘创建物理卷及卷组,划分出150MB空间的逻辑卷并格式化挂载使用

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
sdb             <span style="color:#116644">8</span>:16   <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
​
[root@server ~]<span style="color:#aa5500"># pvcreate   /dev/sda  /dev/sdb    # 创建物理卷</span>
  Physical volume <span style="color:#aa1111">"/dev/sda"</span> successfully created.
  Physical volume <span style="color:#aa1111">"/dev/sdb"</span> successfully created.
  
[root@server ~]<span style="color:#aa5500"># vgcreate  VG1  /dev/sda   /dev/sdb   # 创建卷组/dev/VG1</span>
  Volume group <span style="color:#aa1111">"VG1"</span> successfully created
​
[root@server ~]<span style="color:#aa5500"># vgdisplay /dev/VG1   # 查看信息</span>
​
[root@server ~]<span style="color:#aa5500"># lvcreate   -n   lv1   -L   150M    VG1  # 创建逻辑卷</span>
  Rounding up size to full physical extent <span style="color:#116644">152</span>.00 MiB
  Logical volume <span style="color:#aa1111">"lv1"</span> created.
​
[root@server ~]<span style="color:#aa5500"># lvdisplay  /dev/VG1/lv1    # 查看信息</span>
​
[root@server ~]<span style="color:#aa5500"># mkfs.xfs  /dev/VG1/lv1    # 格式化</span>
 
[root@server ~]<span style="color:#aa5500"># mkdir   /LVM1   # 创建挂载目录</span>
​
[root@server ~]<span style="color:#aa5500"># mount  /dev/VG1/lv1   /LVM1  # 挂载</span>
​
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab   # 配置开机挂载</span>
/dev/VG1/lv1    /LVM1   xfs     defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
└─VG1-lv1     <span style="color:#116644">253</span>:2    <span style="color:#116644">0</span>  152M  <span style="color:#116644">0</span> lvm  /LVM1</span></span>
  • 例2:基于上例,VG1卷组划分出200MB空间的逻辑卷并格式化挂载使用

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># lvcreate   -n   lv2   -l   50    VG1 # </span>
  Logical volume <span style="color:#aa1111">"lv2"</span> created.
<span style="color:#aa5500"># 注意:</span>
<span style="color:#0000cc">-l</span> :表示以PE物理卷基本存储单位4MB为单位划分,给出4MB的倍数
<span style="color:#0000cc">-L</span> :直接给出容量,如150MB,注意实际容量趋近于150MB</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># mkfs.xfs  /dev/VG1/lv2</span>
​
[root@server ~]<span style="color:#aa5500"># mkdir  /LVM2</span>
​
[root@server ~]<span style="color:#aa5500"># vim  /etc/fstab</span>
/dev/VG1/lv2    /LVM2   xfs     defaults        <span style="color:#116644">0</span>       <span style="color:#116644">0</span>
​
[root@server ~]<span style="color:#aa5500"># mount  -a</span>
​
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─VG1-lv1     <span style="color:#116644">253</span>:2    <span style="color:#116644">0</span>  152M  <span style="color:#116644">0</span> lvm  /LVM1
└─VG1-lv2     <span style="color:#116644">253</span>:3    <span style="color:#116644">0</span>  200M  <span style="color:#116644">0</span> lvm  /LVM2</span></span>

调整逻辑卷大小

扩展卷组
  • 例:将/dev/sdc扩容到VG1卷组中

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@server ~]<span style="color:#aa5500"># pvcreate /dev/sdc</span>
  Physical volume <span style="color:#aa1111">"/dev/sdc"</span> successfully created.
​
[root@server ~]<span style="color:#aa5500"># vgextend  /dev/VG1  /dev/sdc</span>
  Volume group <span style="color:#aa1111">"VG1"</span> successfully extended
[root@server ~]<span style="color:#aa5500"># vgdisplay /dev/VG1</span></span></span>
逻辑卷的扩大与缩小
  • 例1:xfs文件系统类型的lvm的扩容

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 将lv1逻辑卷扩容到300MB</span>
[root@server ~]<span style="color:#aa5500"># umount  /dev/VG1/lv1</span>
[root@server ~]<span style="color:#aa5500"># lvextend -L 300M /dev/VG1/lv1</span>
  Size of logical volume VG1/lv1 changed from <span style="color:#116644">152</span>.00 MiB (38 extents) to <span style="color:#116644">300</span>.00 MiB (75 extents).
  Logical volume VG1/lv1 successfully resized.
  
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─VG1-lv1     <span style="color:#116644">253</span>:2    <span style="color:#116644">0</span>  300M  <span style="color:#116644">0</span> lvm  /LVM1
└─VG1-lv2     <span style="color:#116644">253</span>:3    <span style="color:#116644">0</span>  200M  <span style="color:#116644">0</span> lvm  /LVM2
​
[root@server ~]<span style="color:#aa5500"># lvdisplay   </span>
​
<span style="color:#aa5500"># 注意:使用 -L +100M增加了100M,如果增加到400M,使用-L 400M</span>
​
[root@server ~]<span style="color:#aa5500"># lvextend -L +100M /dev/VG1/lv1</span>
  Size of logical volume VG1/lv1 changed from <span style="color:#116644">300</span>.00 MiB (75 extents) to <span style="color:#116644">400</span>.00 MiB (100 extents).
  Logical volume VG1/lv1 successfully resized.
[root@server ~]<span style="color:#aa5500"># lsblk</span>
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             <span style="color:#116644">8</span>:0    <span style="color:#116644">0</span>   20G  <span style="color:#116644">0</span> disk 
├─VG1-lv1     <span style="color:#116644">253</span>:2    <span style="color:#116644">0</span>  400M  <span style="color:#116644">0</span> lvm  /LVM1
└─VG1-lv2     <span style="color:#116644">253</span>:3    <span style="color:#116644">0</span>  200M  <span style="color:#116644">0</span> lvm  /LVM2
​
<span style="color:#aa5500"># 注意:此时文件系统没有扩容</span>
[root@server ~]<span style="color:#aa5500"># df -h  |  grep  lv1</span>
/dev/mapper/VG1-lv1    147M  <span style="color:#116644">8</span>.9M  138M    <span style="color:#116644">7</span>% /LVM1
​
<span style="color:#aa5500"># 使用xfs_growfs文件系统扩容</span>
[root@server ~]<span style="color:#aa5500"># xfs_growfs  /dev/VG1/lv1</span>
<span style="color:#0000ff">meta-data</span><span style="color:#981a1a">=</span>/dev/mapper/VG1-lv1    <span style="color:#0000ff">isize</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>    <span style="color:#0000ff">agcount</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span>, <span style="color:#0000ff">agsize</span><span style="color:#981a1a">=</span><span style="color:#116644">9728</span> blks
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sectsz</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>   <span style="color:#0000ff">attr</span><span style="color:#981a1a">=</span><span style="color:#116644">2</span>, <span style="color:#0000ff">projid32bit</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">crc</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>        <span style="color:#0000ff">finobt</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>, <span style="color:#0000ff">sparse</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>, <span style="color:#0000ff">rmapbt</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">reflink</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>    <span style="color:#0000ff">bigtime</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span> <span style="color:#0000ff">inobtcount</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
data     <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">38912</span>, <span style="color:#0000ff">imaxpct</span><span style="color:#981a1a">=</span><span style="color:#116644">25</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sunit</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>      <span style="color:#0000ff">swidth</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span> blks
naming   <span style="color:#981a1a">=</span>version <span style="color:#116644">2</span>              <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">ascii-ci</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>, <span style="color:#0000ff">ftype</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
log      <span style="color:#981a1a">=</span>internal log           <span style="color:#0000ff">bsize</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">1368</span>, <span style="color:#0000ff">version</span><span style="color:#981a1a">=</span><span style="color:#116644">2</span>
         <span style="color:#981a1a">=</span>                       <span style="color:#0000ff">sectsz</span><span style="color:#981a1a">=</span><span style="color:#116644">512</span>   <span style="color:#0000ff">sunit</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span> blks, <span style="color:#0000ff">lazy-count</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
realtime <span style="color:#981a1a">=</span>none                   <span style="color:#0000ff">extsz</span><span style="color:#981a1a">=</span><span style="color:#116644">4096</span>   <span style="color:#0000ff">blocks</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>, <span style="color:#0000ff">rtextents</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>
data blocks changed from <span style="color:#116644">38912</span> to <span style="color:#116644">102400</span>
​
[root@server ~]<span style="color:#aa5500"># df -h  |  grep  lv1</span>
/dev/map:per/VG1-lv1    395M   11M  384M    <span style="color:#116644">3</span>% /LVM1
​
[root@server ~]<span style="color:#aa5500"># mount  /dev/VG1/lv1  /LVM1</span></span></span>
  • 例2:对lv2逻辑卷缩容到200MB

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500"># 相对于扩容,对逻辑卷缩容有风险,则最好提前备份</span>
[root@server ~]<span style="color:#aa5500"># umount  /dev/VG1/lv2</span>
​
[root@server ~]<span style="color:#aa5500"># lvreduce -L 200M /dev/VG1/lv2</span>
  New size (50 extents) matches existing size (50 extents).
​
[root@server ~]<span style="color:#aa5500"># mount /dev/VG1/lv2   /LVM2   </span></span></span>

### 如何在 Typora 中创建 Linux 笔记 #### 创建新笔记 为了在 Typora 中创建新的 Linux 笔记,可以按照如下方式操作: 打开 Typora 应用程序,在菜单栏中选择 `File` -> `New File` 或者直接使用快捷键 `Ctrl+N` (Windows/Linux) 或 `Cmd+N` (Mac),这将开启一个新的空白文档。 #### 设置文档元数据 可以在文档顶部设置一些基本的元数据来帮助管理和分类笔记。例如: ```markdown --- title: "Linux 学习笔记" date: 2023-10-07T18:48:39Z tags: - Linux - Notes --- # Linux 学习笔记 ``` 这部分内容有助于日后通过标签或其他属性快速查找特定主题的学习记录[^2]。 #### 组织结构化的内容 利用标题、子标题以及列表等功能使笔记条理清晰。对于 Linux 笔记来说,可以从介绍 Linux 的基础知识入手,逐步深入探讨命令行工具的应用技巧等专题领域。比如这样构建章节框架: ```markdown ## 目录 * [简介](#introduction) * [安装与配置](#installation-and-setup) * [常用命令](#common-commands) ## 简介 <a name="introduction"></a> 这里描述什么是 Linux 及其特点... ## 安装与配置 <a name="installation-and-setup"></a> 讲述如何获取并安装 Linux 发行版... ## 常用命令 <a name="common-commands"></a> 列举日常工作中经常使用的 shell 指令... ``` 这种层次化的布局不仅便于阅读理解,也方便后续更新维护资料库中的知识点[^4]。 #### 插入代码片段 当涉及到具体的操作实例时,应该采用 fenced code blocks 来展示代码样例,确保格式美观易读。例如显示一段简单的 bash 脚本: ```bash #!/bin/bash echo "Hello, world!" ``` 这样做可以让读者更容易复制粘贴执行这些例子,同时也提高了可读性和专业度。 #### 添加图片说明 如果有必要的话,还可以上传截图或者其他形式的视觉辅助材料至云端存储空间(如七牛云),并通过链接嵌入到文中相应位置作为补充解释的一部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值