手册整理

界面设置
  • 活动->设置->隐私->锁屏

关闭防火墙及SELinux
[root@server ~]# systemctl  stop  firewalld  # 临时关闭
​
[root@server ~]# systemctl  disable   firewalld  # 取消开机启动
​
[root@server ~]# setenforce  0  # 临时关闭,重启失效
设置主机名
[root@server ~]# hostnamectl  set-hostname  新主机名
[root@server ~]# reboot  # 重启系统
制作快照
  • vmware设置->虚拟机菜单->快照->拍摄快照->命名(见名知意)->拍摄快照->等待左下角进度跑完

  • 恭喜你!!!到此所有的软件安装、操作系统的安装过程就结束了

常见快捷键命令

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

正确的关机与重启

  • 重启:reboot

  • 关机:shutdown now

linux操作系统学习大纲

第一章 简单使用linux

Linux的组成

  • Linux内核:内核是系统的核心,是运行程序和管理 像磁盘和打印机等硬件设备的核心程序。文件系统: 文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前浒的文件系统,如ext4、FAT、VFAT、ISO9660、NFS、SMB等。

  • Shell:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。

  • 应用程序:包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。

  • Linux的操作界面常称为Shell,Shell是操作系统提供给用户使用的界面(图形、字符),它提供了用户与内核进行交互操作的一种接口。当用户发出指令(命令或鼠标操作),先将这些指令发送给Shell,由Shell将用户的指令翻译后传送给内核,再由内核来控制硬件的工作。然后内核将硬件的工作情况发送给Shell,并由Shell返回硬件的工作信息和情况。

  • Shell的分类:

    • 图形界面的Shell :KDE、GNOME

    • 字符界面的Shell:bash等

使用桌面终端访问linux

终端

  • 终端:也称为终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。

  • 在活动中选择终端

  • 虚拟终端:同一台终端(物理设备)上虚拟出多个终端,它们之间互相不影响,这些终端就是虚拟终端,默认有6个,可通过ctrl + alt +f[1/2/3/4/5/6]来进行切换。

shell命令提示符

  • 例:[root@localhost ~]#

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

  • localhost:主机名,默认为localhost

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

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

使用命令操作linux系统

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

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

[root@server ~]# cat  /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)
# Plow时RHEL9的代号
  • 查看内核版本

[root@server ~]# uname  -r
5.14.0-162.6.1.el9_1.x86_64
# 分析
5 - 内核版本.
14 - 主修订版本.
0-162 - 次要修订版本.
6.1 - 补丁版本.
x86_64  - 适用平台
  • 查看shell的类型

# 方法1:
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
​
​
# 方法2:
[root@server ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
  • 查看当前默认的shell

[root@server ~]# echo $SHELL
/bin/bash
  • 查看网卡信息以及获取ip地址

#查看ip地址
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c1:d9:32 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.48.130/24 brd 192.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
​
#注:lo网卡是环回网卡,主要用来本地测试;ens160才是我们远程连接的网卡。
切换目录--cd
  • 更改当前的工作目录,即切换目录

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

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

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

重置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密码或者使用如下命令修改密码:

echo "pwd" | passwd --stdin root
  • 第5 步:重置文件系统上下文

touch /.autorelabel
  • 第6步:运行命令exec /sbin/init来正常启动,或者用命令exec /sbin/reboot重启

通过远程软件操控服务器

安装xshell
配置xshell进行远程登录
  • RHEL9.1终端中查看本机IP:ip address

  • xshell中选择文件菜单->新建->打开设置向导

    • 名称:自定

    • 主机:RHEL9.1的IP地址

    • 点击连接输入root(记住用户名打钩)及密码(记住密码打钩)

xshell中使用命令连接服务器
  • 格式:ssh root@服务器IP地址

  • 如图:

  • 输入用户名及密码

使用xftp上传文件
  • xftp是一款xshell自带的文件上传下载工具

  • 用法:点击按钮进入xftp,左边为windows,右边为linux,通过鼠标拖拽上传下载

  • 注意

    • 文件目录位置

    • 进入上传下载的进度条,完毕后才可关闭软件

    • 若无法上传,注意权限

练习

  • 重新安装系统,完成系统设置,制作快照

  • 虚拟机:典型->稍后安装操作系统->设置系统类型(Linux、RHEL9)->设置虚拟机名称(RHEL9_server)和存储路径->磁盘存储为单个文件->自定义硬件:

    • 内存:2G

    • cpu:1颗,2核心

    • CD/DVD:使用ISO映像文件,设置文件路径

    • 网卡:NAT模式

    • 显示器:去掉3D加速支持

  • RHEL9系统安装要求:

    • 硬盘分为三个分区:/boot 400M swap 4G / 剩余空间

    • 去掉KDUMP对钩

    • 设置root密码(123456),需要勾选ssh支持(第二个)

  • 系统设置

[root@server ~]# systemctl  stop  firewalld
[root@server ~]# systemctl  disable   firewalld
[root@server ~]# setenforce  0
[root@server ~]# hostnamectl  set-hostname  新主机名
[root@server ~]# reboot
​
# 制作快照:vmware设置->虚拟机菜单->快照->拍摄快照->命名(见名知意)->拍摄快照->等待左下角进度跑完

第二章 linux中执行命令

命令格式

命令本身 -选项 参数

--help

命令分为两类

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

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

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

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

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

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

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

注意:
  • 终止当前的命令:按【Ctrl+C】键可中断正在执行的命令

  • 两种补全:

    • 补全命令:输入命令关键字的前几个字符后,按Tab键,可实现命令自动补全

    • 补全文件名和目录名:输入文件的前几个字符后,按tab键可自动补全

  • 例:访问网卡配置文件

[root@server ~]# cat  /etc/NetworkManager/system-connections/ens160.nmconnection
[root@server ~]# cat   /etc/redhat-release
[root@server ~]# uname  -r

查看命令帮助

查看bash内部命令帮助

[root@server ~]# help  cd

命令 --help

[root@server ~]# cat  ——help
示例如下:cat [OPTION]... [FILE]...  表明cat后面可以加上多个可选的选项以及多个可选的文件参数

man

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

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

man command
[root@server ~]# man ls

  • 在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命令用于显示或设置系统的时间与日期

格式
date  -参数  +显示日期时间格式参数
  • 用户只需在强大的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
示例
[root@server ~]# date
2023年 02月 20日 星期一 16:39:09 CST
[root@kongd ~]# date "+%j"
306
# date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:
[root@server ~]# date "+%Y-%m-%d %H:%M:%S"
2023-02-20 16:39:32
[root@server ~]# date  –s  20170303   修改为2017-03-03
[root@server ~]# date  -s  15:03       修改时间为15:03
[root@server ~]# date  -s  “20180707   10:12”  合并修改
[root@server ~]# date  -d  “+2  day”  +%d 显示2天后日期
[root@server ~]# date  -d  “-5  day”  +%d 显示5天前日期

timedatectl命令

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

格式
timedatectl [OPTIONS...] COMMAND ...

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

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

[root@server ~]#  timedatectl set-timezone Asia/Shanghai
  • 如果时间还是不正确,我们可以手动的修改系统日期:

[root@server ~]# timedatectl set-ntp no           # 先关闭ntp时间同步
[root@server ~]# timedatectl set-time 2021-05-18
  • 而如果想修改时间的话,也很简单:

[root@server ~]# timedatectl set-time 9:30
[root@server ~]# date 
Tue May 18 09:30:01 CST 2021
[root@server ~]# timedatectl set-ntp yes

查看日历

  • 格式:cal 月份 年份

[root@server ~]# cal 05 2023
​
[root@server ~]# cal  2023

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

作用
  • 查看目录下的内容

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

ls浏览后颜色表示

  • 白色:普通文件

  • 蓝色:目录

  • 红色:压缩包文件

  • 黄色:设备文件

  • 绿色:可执行文件

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

Linux文件类型

第一个字符文件类型说明
-普通文件类似于Windows的记事本
d目录文件类似于windows文件夹
c字符设备文件串行端口设备,顺序读写,键盘
b块设备文件可供存储的接口设备,随机读写,硬盘
p管道文件用于进程间的通信
s套接字文件通常用于网络上的通信。可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信
l符号链接又叫软链接,和原文件不是一个文件例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。
[root@localhost ~]# ll   /usr/bin/ls
-rwxr-xr-x. 1 root root 143368 Apr 27  2020 /usr/bin/ls
[root@localhost ~]# ll  -d /home
drwxr-xr-x. 3 root root 20 Apr 16 14:46 /home
[root@localhost ~]# ll   /dev/tty
crw-rw-rw-. 1 root tty 5, 0 Jun  9 11:48 /dev/tty
[root@localhost ~]# ll   /dev/sr0
brw-rw----. 1 root cdrom 11, 0 Jun  9 11:48 /dev/sr0
[root@localhost ~]# ll  /dev/nvme0n1
brw-rw----. 1 root disk 259, 0 Jun  9 11:48 /dev/nvme0n1
[root@localhost ~]# ll   /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Aug  5  2020 /usr/bin/yum -> dnf-3

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 路径

[root@localhost ~]# pwd
/root
[root@localhost ~]# cd   /
[root@localhost /]# pwd
/
​
# 回到当前用户的家(主)目录
[root@localhost /]# cd ~    
[root@localhost ~]# pwd
/root
​
# 回到当前目录的上一级目录
[root@localhost ~]# cd   ..
​
# 切换到之前的目录
[root@localhost /]# cd   -
/root
​
# 回到当前目录
[root@localhost ~]# cd .

第四章 从命令行管理文件

文件命名规则

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

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

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

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

创建链接文件

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

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

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

硬连接

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

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

查看方法
  • ll 文件名

  • stat 文件名

建立硬连接
  • 格式:

ln  -参数   源文件   目标连接文件
  • 例1:

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

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

[root@server ~]# mkdir  n1
[root@server ~]# ln  n1  n2
ln: n1: 不允许将硬链接指向目录
  • 目录自带2个硬连接,即目录中的 . .. ,表示当前目录和上一级目录

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

软连接

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

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

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

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

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

软硬连接的区别

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

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

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

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

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

目录操作命令

创建目录(make directory)

格式:
mkdir  [-p]  [/路径/]目录名
参数
  • -p 可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖

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

例:
[root@server ~]# mkdir  t1
[root@server ~]# mkdir  t2  t3  t4   #  批量一次性新建
[root@server ~]# mkdir  -p  n1/n2/n3   # 新建递归目录

du命令

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

  • 命令格式: du 参数

  • 参数:

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

新建文件

创建普通文件

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

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

  • 格式:

touch 文件名1 文件名2 文件名3
​
touch {文件名1,文件名2,文件名3}
  • 例1:

[root@server ~]# touch  p1.txt
[root@server ~]# touch  p2.txt  p3.txt  p4.txt
[root@server ~]# touch  {p5,p6,p7}.txt
[root@server ~]# touch  {1,2}{3,4}
[root@server ~]# touch  abc{1..100}
示例
  • tree命令

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

    • 格式:

    • tree  -参数 路径
      
      
    • 参数

    • -a : 所有文件包含显示隐藏文件
      -f : 列出文件的完整路径内容
      -d :只显示目录
      -L : 设置显示最大深度,如:tree -f -L 2 
  • 按照下面的结构新建文件及目录

创建大容量文件

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

格式
dd    if=来源  of=新文件名  count=数据块个数  bs=块容量
分析
  • if=/dev/zero zero空数据设备文件,可以向其它文件中填充无数个数据0

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

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

  • bs=:一个数据块容量

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

[root@server ~]# dd  if=/dev/zero  of=/root/z1  count=2  bs=50M
  • 例2:制作2G文件

[root@server ~]# dd  if=/dev/zero  of=/z2  count=1  bs=2GB
  • 例3:制作光盘镜像

[root@server ~]# dd  if=/dev/sr0  of=/RHEL8.5.iso

删除文件

格式:

rm  -参数  文件名

用法:

  • 删除文件: rm 文件名

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

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

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

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

第五章 文件内容显示

浏览普通文件

文件内容查看

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

  • 格式:cat -参数 文件名

  • 参数:

    • -n:显示行号,加上

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

  • 例1:

[root@server ~]# cat   /etc/passwd
[root@server ~]# cat   -n  /etc/passwd
  • 例2:将显示结果重定向输出到另一个文件中

[root@server ~]# touch  pwd.txt
[root@server ~]# cat  /etc/passwd  >  pwd.txt  # > 为重定向符
[root@server ~]# cat  pwd.txt
  • 合并文件:

[root@node1 ~]# touch  t1.txt  t2.txt  t3.txt
[root@node1 ~]# echo  "hello"  >  t1.txt
[root@node1 ~]# echo  "world"  >  t2.txt
[root@node1 ~]# cat  t1.txt  t2.txt  >  t3.txt
[root@node1 ~]# cat  t3.txt
hello
world
  • 注意:tac命令是倒置输出文件内容

tac
  • 作用:倒叙访问文件内容

  • 格式:tac 参数 文件名

  • 例如: tac /etc/passwd

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

  • 格式:more 文件名

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

[root@server ~]# more  -sp  /etc/passwd #  -sp  减少空白行,先清屏后输出
less命令
  • 作用:同more命令

  • 格式:less 文件名

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

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

  • 格式:head -数字 文件名

  • 例:

[root@server ~]# head  /etc/passwd    #  默认查看文档前10行内容
[root@server ~]# head -5 /etc/passwd
tail命令
  • 作用:查看文档后n行内容

  • 格式:tail -参数 文件名

  • 参数

    • -数字:查看倒数行数

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

  • 例:

[root@server ~]# tail  /etc/passwd     # 默认查看文档后10行内容
[root@server ~]# tail  -1  /etc/passwd
[root@server ~]# tail  -f  /var/log/messages   # 监视日志
[root@server ~]# head  -6 /etc/passwd | tail -1  # 查看第6行

文件信息查看

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

  • 格式:file -参数 文件名

  • 文件类型:

    • ASCII file :ASCII文本字符文件

    • empty:空文件

    • block special :块设备文件

    • character special :字符设备文件

    • diretory:目录

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

  • 格式:stat 文件名

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

文件内容过滤显示—grep

作用:

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

格式
grep   -参数  查找条件  文件名
参数
选项说明
-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:不允许登录

示例
# 在passwd中检索包含root的行信息
[root@server ~]# grep   -n  “root”   /etc/passwd
​
# 在passwd检索不能登录的信息
[root@server ~]# grep  -n   "/sbin/nologin"   /etc/passwd
​
# 在passwd中检索可以登录的账户信息
[root@server ~]# grep  -nv   "/sbin/nologin"   /etc/passwd (反向)
​
# 检索包含“halt”的行及下3行信息
[root@server ~]# grep  -nA3  "halt"  /etc/passwd
​
# 检索包含“sshd”的行及上5行信息
[root@server ~]# grep  -nB5   “sshd”  /etc/passwd 
​
# 检索包含“ftp”的行及上下2行
[root@server ~]# grep   -nC2   “ftp”   /etc/passwd
​
# 检索不能登录的账户个数
[root@server ~]# grep   -c   “/sbin/nologin”  /etc/passwd  
# 相当于 grep  -n  “/sbin/nologin”  /etc/passwd | wc  -l
​
# 检索包含大小写字母d的行信息
[root@server ~]# grep  -ni  "d"  /etc/passwd
使用特殊符号匹配

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 ./*忽略当前目录下的子目录下的普通文件
[root@server ~]# grep  ^a /etc/passwd
​
[root@server ~]# grep  -n  “^root” /etc/passwd
​
[root@server ~]# grep  -n  "^#"  /etc/sos/sos.conf
​
[root@server ~]# grep  -n  [0-9]$  /etc/sos/sos.conf
​
[root@server ~]# grep  -n  ^$  /etc/sos/sos.conf

切割显示-cut

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

格式
cut  -d  "分隔符"  -f列数字  文件名
示例
  • /etc/passwd文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,如:

[root@server ~]# head  2 /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin
  • 基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可,但如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。

[root@kongd ~]# cut -d : -f1 /etc/passwd
root
bin
daemon
adm
lp
  • 例:提取内核版本号

[root@server ~]#uname -a | cut -d " " -f3
  • 例:提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d "/" -f1 | cut -d " " -f6
# 注意空格
  • 例:提取mac地址

[root@server ~]# ip a | grep link/ether | cut -d " " -f6

排序显示-sort

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

格式:

sort  -参数  文件名
参数
选项作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围
示例
  • sort命令执行后默认会按照字母顺序进行排序

[root@server ~]# cat fruit.txt 
banana
pear
apple
orange
[root@server ~]# sort fruit.txt 
apple
banana
orange
pear
​
[root@server ~]# cat  /etc/passwd | cut -d : -f1 | sort  # 取出所有账户名
  • sort -u参数进行去重操作:

[root@server ~]# cat sort.txt 
Welcome to openlab.com
Red Hat certified
Welcome to openlab.com
Free Linux Lessons
Linux Course
[root@server ~]# sort -u sort.txt 
Free Linux Lessons
Red Hat certified
Welcome to openlab.com
  • 数字排序

[root@server ~]# cat number.txt 
45
12
3
98
82
67
24
56
9
[root@server ~]# sort -n number.txt 
​
[root@server ~]# sort -nr number.txt  # 降序
  • 下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子:

[root@kongd ~]# cat user.txt 
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
  • 上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序来搞定:

[root@server ~]# sort -t : -k 3 -n user.txt 
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd

去重显示-uniq

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

格式
uniq -参数 文件名
示例
  • 对比两个文本内容进行操作

[root@server ~]# cat uq1.txt 
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@kongd ~]# uniq uq1.txt 
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course

文件中字符替换显示-tr

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

格式
tr  -参数  替换内容  新内容
参数
  • -c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换

  • -d :删除指令字符

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

示例
  • 小写字母全部转换成大写字母

[root@server ~]# cat /etc/passwd  | tr a-z A-Z 
  • 提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d /  -f1 | tr -s ' ' | cut -d ' ' -f3

第六章 文件的其它操作命令

文本内容统计wc

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

格式
wc -参数 文件名
参数
选项作用
-l只显示行数
-w只显示单词数
-c只显示字节数
示例
  • 统计所有

[root@server ~]# wc  /etc/passwd
  37     88     2083 /etc/passwd
# 行数  单词数    字节数  
  • 配合管道符计算

[root@server ~]# ll / | wc -l   # 文件数
​
[root@server ~]# grep  "/bin/bash"  /etc/passwd  |  wc -l
​
[root@server ~]# cat /etc/passwd | cut -d ":" -f1 | wc -l

复制、移动文件

复制文件或目录

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

<font color='gree'>复制到当前文件是否可以省略目标文件cp /etc/passwd . 这个.就表示的是当前的路径下面。cp可以和通配符进行连用</font>

[root@server ~]# cd  ~
[root@server ~]# touch  t1.txt
[root@server ~]# cp  t1.txt   /
[root@server ~]# touch  t2.txt
[root@server ~]# cp  t2.txt   /t3.txt   # 另存为
[root@server ~]# cp  p1   /   # 报错,目录需加-r
[root@server ~]# cp  -r  p1  /
[root@server ~]# cp  -r   p2   /p3    # 目录另存为
​
[root@server ~]# mkdir  -p  /t1/t2/t3
[root@server ~]# cp -a /t1  ~
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  t1
[root@server ~]# cd t1
[root@server t1]# ls
t2
[root@server t1]# cd t2
[root@server t2]# ls
t3
[root@server t2]# ll
总用量 0
drwxr-xr-x 2 root root 6  4月 25 10:39 t3

移动文件或目录

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

格式
mv [选项] 源文件名称 目标文件名称
注意
  • 剪切操作不同于复制操作,因为它会把源文件删除掉,只保留剪切后的文件。

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

[root@server ~]# touch  t3.txt
[root@server ~]# mv  t3.txt   /etc   #源为文件,目标为目录 ,为移动
​
[root@server ~]# touch  t3.txt
[root@server ~]# mv  t3.txt   t4.txt  # 源为文件 ,目标为文件,位置不变,为改名

查找文件

查找文件路径

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

  • 格式

whereis  命令名
[root@server ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@server ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
[root@server ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
which命令
  • 作用:搜索系统命令的可执行文件

  • 格式

which  命令名
[root@server ~]# which cd
/usr/bin/cd
[root@server ~]# which cat
/usr/bin/cat
[root@server ~]# which ls
alias ls='ls --color=auto'
    /usr/bin/ls
[root@server ~]# ls --color=auto   # ls是它的别名
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  t1

查找文件-find

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

格式
find  查找路径   查找条件  具体条件  操作
注意
  • 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<br />-mindepth levels最多查找多少层目录;最少查找多少层目录
-delete将找到的文件删除,如果是目录只能删除找到的空目录。
-exec …… {}\;后面可跟用于进一步处理搜索结果的命令
示例
  • 按照文件名搜索

    • -name: 按照文件名搜索

    • -iname: 按照文件名搜索,不区分文件名大小写

    • -inum: 按照 inode 号搜索

    • 没有那个文件或目录:find命令在执行时,在内存中自己产生的临时文件,执行完既消失

    • 注意:搜索位置越大,消耗系统资源越多,在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小

# /目录下检索名为passwd的文件
[root@server ~]# find  /  -name  "passwd" -print
​
# /etc下检索host开头的文件
[root@server ~]# find /etc -name "host*" -print
​
# 在/目录查找以a开头文件
[root@server ~]# find  /  -name  "a*"
​
# 在/目录中查找以b开头的不区分大小写的文件
[root@server ~]# find / -iname "b"
​
# 在/etc目录下检索以b开头共4个字符的文件
[root@server ~]# find  /etc  -name  "b???"
​
# 在/etc目录下检索第二个字母为c的文件
[root@server ~]# find  /etc  -name  "?c*"
​
# /目录下检索扩展名为.cfg的文件
[root@server ~]# find  /  -name  "*.cfg"
​
# /目录下检索扩展名为.txt的文件并统计个数
[root@server ~]# find  /  -name  "*.txt"  |  wc  -l
  • 按照文件大小搜索

    • -size [+|-]大小: 按照指定大小搜索文件,“+”的意思是搜索比指定大小还要大的文件, “-”的意思是搜索比指定大小还要小的文件

    • 单位:可以通过man find 查看size参数的单位

          #这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索。
          ' b':for 512-byte blocks(this is the default if no suffix is used)
          
          #搜索单位是c,按照字节搜索。
          'c':for bytes
        
          #搜索单位是w,按照双字节(中文)搜索。
          'w':for two-byte words
       
          #按照KB单位搜索,必须是小写的k。
          'k':for Kilobytes(units of 1024 bytes)
       
          #按照MB单位搜索,必须是大写的M
          'M':for Megabytes(units of 1048576 bytes)
       
          #按照GB单位搜索,必须是大写的G
          ' G':for Gigabytes(units of 1073741824 bytes)
      
      
[root@master ~]# find / -size -1k
​
[root@master ~]# find  /   -size  +100M
​
[root@server ~]# find . -empty  # 空文件
  • 按照修改时间搜索

    • -atime [+|-]时间: 按照文件访问时间搜索

    • -mtime [+|-]时间: 按照文件数据修改时间搜索

    • -ctime [+|-]时间: 按照文件状态修改时间搜索

    • -newer file: 把比file修改时间更新的文件列出来

    • 注意:时间范围问题

      • -5:代表 5 天内修改的文件。

      • 5:代表前 5~6 天那一天修改的文件。

      • +5:代表 6 天前修改的文件。

[root@master ~]# find  /  -mtime -10  -empty  10天以内的空文件
  • 按照权限搜索

    • -perm 权限模式: 查找文件权限刚好等于“权限模式”的文件 ,常用

    • -perm -权限模式: 查找文件权限全部包含“权限模式”的文件

    • -perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件

    • 如果要在整个系统中搜索权限中包括SUID权限的所有文件,只需使用-4000即可:

[root@server ~]# find . perm  755
[root@server ~]# find / -perm -4000
  • 按照所有者和所属组搜索

    • -uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件

    • -gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件

    • -user 用户名: 按照用户名查找所有者是指定用户的文件

    • -group 组名: 按照组名查找所属组是指定用户组的文件

    • -nouser: 查找没有所有者的文件 ,常用,主要用于查找垃圾文件,还有一种情况就是外来文件,比如光盘和U盘中的文件如果是由Windows复制来的(也就是文件是由windows建立的),在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者(由其他系统打的源码包)

[root@server ~]#  find . -user root
[root@server ~]#  find  / -nouser   # 查看无所有者的文件
  • 按照文件类型搜索

    • -type d: 查找目录

    • -type f: 查找普通文件

    • -type l: 查找软链接文件

    • ……

[root@server ~]# find  /dev  -type  b
[root@server ~]# find  ~  -type  d
[root@server ~]# find  /dev  -type  c  -size  -10k
  • 逻辑运算符

    • -a: and 逻辑与

    • -o: or 逻辑或

    • -not: not 逻辑非

    • 优先级:与>或>非

[root@server ~]# find  /  -size  +10k  -a  -size  -50k
[root@server ~]# find  /etc   -name  "e*"  -o  -name  "f*"
[root@server ~]# find  /etc   -name   "d*"   -user  root  # 默认为and  
  • -exec参数

    • 作用:用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,类似于管道符,该参数必须为带减号的长参数。

    • 使用-exec命令结尾必须为\;

# 将/root 目录下的属于root账户的文件检索出来后拷贝到/目录下的find1目录中
[root@server ~]# find ~ -user root -exec cp -a {} /find1/ \;

压缩和解压缩

zip和unzip命令

格式
zip FILE  # 压缩
unzip FILE   # 解压缩
示例
# 素材准备:
[root@server ~]# mkdir  /test
[root@server ~]# cd  /test
[root@server test]# for i in {1..5};do echo "test$i" > test$i.txt;done
[root@server test]# ls
test1.txt  test2.txt  test3.txt  test4.txt  test5.txt 
​
[root@server test]# mkdir dir1
[root@server test]# cp /etc/fstab dir1
# 例1: 使用zip压缩文件test1.txt
[root@server test]# zip test1.zip test1.txt
    
# 压缩率为最高压缩test2.txt,-1 : 最快压缩,压缩率最差,-9 : 最大压缩,压缩率最佳
[root@server test]# zip -9 test2.zip test2.txt
 
# 例2: 将当前目录dir1连同目录下文件一起压缩
[root@server test]# zip -r dir1.zip dir1
​
# 例3: 向压缩文件中test1.zip中添加test2. txt文件
[root@server test]# zip -m test1.zip test2.txt
​
# 例4: 删除压缩文件中的文件
[root@server test]# zip -d test1.zip test2.txt
    
# 例5: 压缩文件时排除某个文件
[root@server test]# zip test.zip *.txt -x test1.txt
​
# 例6: 解压文件test2.zip
[root@server test]# unzip test2.zip 
​
# 例7:将压缩文件text.zip在指定目录dir1下解压缩 
[root@server test]# unzip test.zip -d dir1
# 例8:  查看压缩文件目录,但不解压
[root@server test]# unzip -v test.zip 

gzip命令

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

bzip2命令

# bzip2是更新的Linux压缩工具,比gzip有着更高的压缩率。
​
[root@server test]# [root@server test]# bzip2  test3.txt  # 源文档不保留
​
[root@server test]# bzip2  -9  -c test3.txt > test3.txt.bz2 # 用最佳的压缩比压缩,并保留原本的档案

xz、unxz命令

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

tar归档命令

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

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

tar  cvf/cfv/-cvf  文件名.tar  要打包的目录或文件名
  • 列出包文件中的文件列表

tar  t[v]f  包文件名`
打包压缩
  • 作用:为节省存储空间,通常需要生成压缩格式的tar包文件,tar命令支持三种不同的压缩方式

tar  czf/-czf 文件名.tar.gz  要打包压缩的目录或文件名……
tar  cjf/-cjf 文件名.tar.bz2  要打包压缩的目录或文件名……
tar  cJf/-cJf 文件名.tar.xz  要打包压缩的目录或文件名……
  • 提取包文件到指定目录

tar  xf/-xf/-xzf 文件名.tar.gz  [-C 目标路径]
tar  xf/-xf/-xjf 文件名.tar.bz2  [-C 目标路径]
tar  xf/-xf/-xJf 文件名.tar.xz  [-C 目标路径]
示例
  • 将/etc下所有内容打包压缩到/root目录中

[root@server ~]# tar   -cvf  taretc.tar.gz   /etc
  • 解压缩

[root@server ~]# mkdir temp
[root@server ~]# mv taretc.tar.gz  temp
[root@server ~]# cd temp
[root@server temp]# 
[root@server temp]# tar   -xvf  taretc.tar.gz
  • 注意:参数中-c 与 -x 不能同时使用

第七章 命令解释器-shell

概述

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

  • 图:

分类:

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

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

type 命令

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

格式
type  -参数  命令名
参数
  • type -a列出当前命令可以如何执行

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

[root@server ~]# type -a  cd
cd 是 shell 内建
cd 是 /usr/bin/cd
​
[root@server ~]# type cd
cd 是 shell 内建
​
[root@server ~]# type -t  cd
builtin   # 内置命令
​
[root@server ~]# type tree
tree 是 /usr/bin/tree
[root@server ~]# type -t  tree
file
​
[root@server ~]# type wget
wget 是 /usr/bin/wget
​
[root@server ~]# type ls
ls 是“ls --color=auto”的别名
​
[root@server ~]# type ping
ping 是 /usr/sbin/ping
​
[root@server ~]# alias ping='ping -c 5'
​
[root@server ~]# type ping
ping 是“ping -c 5”的别名
​
[root@server ~]# ping  www.qq.com
PING ins-r23tsuuf.ias.tencent-cloud.net (101.91.22.57) 56(84) 比特的数据。
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=1 ttl=128 时间=31.0 毫秒
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=2 ttl=128 时间=29.2 毫秒
.........

执行原理

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

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

[root@server ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

Linux 中的特殊符号

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

命令别名

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

格式
alias 别名='原命令 - 参数'

查看设置的别名

[root@server ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias ping='ping -c 5'    # 上例新建的
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

常用的别名

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

alias untar='tar -zxvf '
wget
  • 下载大文件时的断点续连,防止网络异常中断:

alias wget='wget -c '
getpass
  • 生成 20 个字符的随机数密码,使用 openssl 命令,但命令又很长不方便,可以设置别名:

alias getpass="openssl rand -base64 20"
ping
  • ping url时会无限次输出,但其实没多大意义,可以使用 -c 命令将其限制为 5 次输出:

alias ping='ping -c 5'
speed
  • 测试网速命令speedtest-cli ,为了方便使用可以设置别名:

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

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

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

  • 设置别名:需要更换id

alias speed='speedtest-cli --server 36646 --simple'
​
[root@server ~]# speed
Ping: 367.255 ms
Download: 194.83 Mbit/s
Upload: 96.23 Mbit/s
ipe
  • 公网 IP别名设置:

alias ipe='curl ipinfo.io/ip'
​
[root@server ~]# alias ipe='curl ipinfo.io/ip'
[root@server ~]# ipe
113.132.176.202[root@server ~]# 
c
  • 清屏,一般使用 ctrl + l 快捷键,也可以将 clear 命令定义得更短,这样使用起来更直接,更粗暴。

alias c='clear'

删除别名

格式
unalias 别名
[root@server ~]# alias 
[root@server ~]# unalias ping
[root@server ~]# alias 

注意:

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

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

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

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

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

命令历史

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

格式
history -参数
参数
number:显示最近number条命令历史
-c:清空当前历史命令
[root@server ~]# history  5
   13  vim  ~/.bashrc
   14  ping  www.baidu.com
   15  source  ~/.bashrc
   16  ping  www.baidu.com
   17  history  5
​
[root@server ~]# !16   # 将第16命令在执行一遍

设置history记录命令条数

[root@server ~]# vim  /etc/profile
​
# 定位:HISTSIZE=1000
​
#退出后重启:reboot

第八章 账户和组管理

账户和工作组的分类

用户分为三类:

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

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

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

工作组分析两类:

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

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

账户和工作组的配置文件

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

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

[root@server ~]# ll  /etc/passwd
-rw-r--r--. 1 root root 2083  4月 26 14:39 /etc/passwd
​
[root@server ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • /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等信息

    • 格式

    • id  账户名
    • [root@server ~]# id root
      用户id=0(root) 组id=0(root) 组=0(root)
用户密码文件
  • /etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击

[root@server ~]# ll  /etc/shadow
----------. 1 root root 1130  4月 26 14:39 /etc/shadow
​
[root@server ~]# head  -1 /etc/shadow
root:$6$u6dOBCaz335byzFq$WcZK5t3EAHzCxy0AP8rscP/CrM/SZLzZZDCzkE2T6yiVpnSz92iWt/wd4jL9oBfFglbVrdhsUmRCVfWKTqNdv/::0:99999:7:::   
  • /etc/shadow文件中的每行9个字段的含义为:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
工作组账号文件
  • /etc/group文件存储每个组工作组信息

[root@server ~]# ll  /etc/group
-rw-r--r--. 1 root root 810  4月 26 14:39 /etc/group
[root@server ~]# head -1 /etc/group
root:x:0:
  • 字段说明:

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

用户管理

添加新用户

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

[root@server ~]# useradd test1
​
[root@server ~]# tail  -1  /etc/passwd
test1:x:1001:1001::/home/test1:/bin/bash
​
[root@server ~]# tail  -1  /etc/shadow
test1:!!:19483:0:99999:7:::   # 注意 :!!表示密码尚未设置
​
[root@server ~]# ls  -ld /home/test1
drwx------. 3 test1 test1 78  5月  6 13:55 /home/test1
​
[root@server ~]# ls  -A /home/test1
.bash_logout  .bash_profile  .bashrc  .mozilla
  • 例2:新建账户test2,指定UID为2001、登录Shell为/bin/bash,账号永不过期

[root@server ~]# useradd  -u  2001  -s  /bin/bash -e  -1  test2
  • 例3:新建用于访问FTP的test3账户,禁止其登录且不创建家目录

[root@server ~]# useradd  -M  -s /sbin/nologin  test3
  • 例4:新建账户test4,UID=3001, 工作组=test1 , 家目录=/test

[root@server ~]# useradd  test4  -u  3001  -g  test1  -d  /test 

修改账户信息

格式
usermod   -参数   账户名
参数
  • 常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同

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

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

  • -U:解锁用户账户

示例
  • 例1:将用户test1的名称修改为TEST1,并暂停使用该账号

[root@server ~]# usermod  test1  -l  TEST1  -L
  • 例2:将上例账户test4的家目录移至/home/test4目录下

[root@server ~]# ls /home
​
[root@server ~]# mkdir  /home/test4
​
[root@server ~]# usermod  test4  -d  /home/test4
​
[root@server ~]# tail  -1  /etc/passwd
test4:x:3001:1001::/home/test4:/bin/bash

账号设置密码

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

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

[root@server ~]# passwd root
更改用户 root 的密码 。
新的密码: 
无效的密码: 密码少于 8 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
  • 例2:为上例test2、test4设置密码

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

[root@server ~]# passwd  -l  test2
注意
  • 密码不能为空

  • 密码不要写成回文

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

echo 密码 | passwd  --stdin 用户名
echo 密码 | passwd  --stdin 用户名  >  /dev/null    # 无信息提示
  • 只有 root 用户才能指定用户名

[root@server ~]# useradd test5
[root@server ~]# passwd  test5
更改用户 test5 的密码 。
新的密码: 
无效的密码: 密码少于 8 个字符
重新输入新的密码: 
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# su test5
[test5@server root]$ passwd  test5
passwd:只有 root 户才能指定用户名。

删除账号

格式
userdel  账户名
参数
  • -r:在删除该账户的同时,一并删除该账户对应的家目录

示例
  • 例:删除上例的TEST1、test2、test3、test4

[root@server ~]# userdel    -r  TEST1
​
[root@server ~]# userdel    -r  test2
userdel: user test2 is currently used by process 33647
​
# 上述问题在于使用su登录了账户,可以通过ctrl+d多次退出再次尝试
[root@server ~]# userdel  -r  test2
[root@server ~]# userdel  -r  test3
[root@server ~]# userdel  -r  test4

账户切换

格式
su   账户名
su和su - 命令区别
  • 区别:加载的配置文件不一样

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

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

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

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

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

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

[root@server ~]# su  fox
[fox@server root]$ cd  /root
bash: cd: /root: 权限不够
[fox@server root]$ sudo  cd  /root
​
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
​
    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。
​
[sudo] fox 的密码:
fox 不在 sudoers 文件中。此事将被报告。

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

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

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

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

[root@server ~]# visudo
​
   root     ALL=(ALL)              ALL
# 账户名  允许使用的主机=(以谁的身份)  可执行的命令列表
​
#说明:ALL是关键字,代表任何身份、主机或命令。
示例
  • 例::上例继续

[root@server ~]#  vim /etc/sudoers
# 定位100行输入:
fox     ALL=(ALL)   ALL
# 需要wq!强制保存退出
[root@server ~]# su fox
[fox@server root]$ cd /root
bash: cd: /root: 权限不够
[fox@server root]$ sudo  cd /root
[sudo] fox 的密码:
[fox@server root]$ pwd
/root

工作组管理

创建工作组

格式
groupadd   -参数  工作组名
参数
  • -g GID:指定新工作组的GID,默认值是已有的最大的GID加1

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

示例
  • 例1:新建工作group1

root@server ~]# groupadd  group1
  • 例2:向系统中添加一个组ID为2000,组名为group2的新组

[root@server ~]# groupadd  group2  -g  2000 
[root@server ~]# tail  -2  /etc/group
group1:x:1002:
group2:x:2000:

修改工作组

格式
groupmod  -参数   工作组名
参数
  • -g GID——为用户组指定新的组标识号

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

示例
  • 例:将组group1的GID修改为3000,组名修改为group11

[root@server ~]# groupmod  -g  3000  -n  group11  group1
​
[root@server ~]# tail  -1  /etc/group
group11:x:3000:

添加/删除组成员

格式
gpasswd -参数  账户  工作组
参数
-r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除。
-M : 可同时添加多个用户
-A : 给组指派管理员。
示例
  • 例:新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员

[root@server ~]# gpasswd  -a  temp1  group2
正在将用户“temp1”加入到“group2”组中
​
[root@server ~]# gpasswd  -a  temp2  group2
正在将用户“temp2”加入到“group2”组中
​
[root@server ~]# gpasswd  -A  temp1  group2
注意
  • 只有root用户和组管理员才能够使用该命令

删除工作组

格式
groupdel  工作组名
示例
  • 例1:删除组group11

[root@server ~]# groupdel  group11
注意
  • 被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组

查看用户登录系统的情况

users命令

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

[root@server ~]# users
root

last命令

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

[root@server ~]# last
root     pts/0        192.168.48.1     Sat May  6 14:36   still logged in
test4    tty2         tty2             Sat May  6 14:26 - 14:33  (00:07)
root     pts/2        192.168.48.1     Sat May  6 10:51 - 14:34  (03:43)
root     pts/1        192.168.48.1     Wed Apr 26 15:40 - 12:40 (9+21:00)
root     tty2         tty2             Wed Apr 26 15:16 - 14:18 (9+23:01)
reboot   system boot  5.14.0-162.6.1.e Wed Apr 26 15:15   still running
root     tty2         tty2             Wed Apr 26 14:55 - down   (00:19)
reboot   system boot  5.14.0-162.6.1.e Wed Apr 26 14:54 - 15:15  (00:20)
root     tty2         tty2             Wed Apr 26 14:45 - crash  (00:09)
reboot   system boot  5.14.0-162.6.1.e Wed Apr 26 14:43 - 15:15  (00:32)
​
wtmp begins Wed Apr 26 14:43:13 2023
[root@server ~]# last  -2   # 最近2条登录信息
root     pts/0        192.168.48.1     Sat May  6 14:36   still logged in
test4    tty2         tty2             Sat May  6 14:26 - 14:33  (00:07)
​
wtmp begins Wed Apr 26 14:43:13 2023
[root@server ~]# last -f /var/log/wtmp  -n 3
root     pts/0        192.168.48.1     Sat May  6 14:36   still logged in
test4    tty2         tty2             Sat May  6 14:26 - 14:33  (00:07)
root     pts/2        192.168.48.1     Sat May  6 10:51 - 14:34  (03:43)
​
wtmp begins Wed Apr 26 14:43:13 2023

lastlog命令

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

[root@server ~]# lastlog
Username      Port     From             Latest
root          pts/0    192.168.48.1     六 5月  6 14:36:03 +0800 2023
bin                                     **从未登录过**
daemon                                  **从未登录过**
……

w命令

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

[root@server ~]# w
 15:04:43 up  5:27,  1 user,  load average: 0.00, 0.02, 0.04
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0     14:36    1.00s  0.20s  0.01s w
结果分析
  • 第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)

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

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

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

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

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

    • idle:表示空闲时间

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

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

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

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

who命令

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

[root@server ~]# who
root     pts/0        2023-05-06 14:36 (192.168.48.1)
[root@server ~]# who  -s
root     pts/0        2023-05-06 14:36 (192.168.48.1)
[root@server ~]# who  -a
           系统引导 2023-04-26 15:15
           运行级别 5 2023-04-26 15:16
           tty2         2023-05-06 14:33        33767 id=      终端=0 退出=0
           pts/1        2023-05-06 12:40        2470 id=ts/1  终端=0 退出=0
           pts/2        2023-05-06 14:34        32840 id=ts/2  终端=0 退出=0
root     + pts/0        2023-05-06 14:36   .    35228 (192.168.48.1)
结果分析
who命令的输出格式名称状态终端时间活动进程标识主机名
说明用户的登录名表明终端是否对用户都是可写的类似于pts/1、pts/2等用户登录系统的时间某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是".",表示一分钟内的终端活动用户登录shell的进程id登录到linux系统上的客户端机器标识
[root@server ~]# who -b  列出系统最近启动的日期
         system boot  2022-05-09 15:38
[root@server ~]# who -m  列出关于当前终端的信息
root     pts/0        2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am i
root     pts/0        2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am I
root     pts/0        2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -q   列出在本地系统上的用户和用户数的清单
root
# users=1 
​
[root@server ~]# who -r  显示当前系统的运行级别
         run-level 3  2022-05-09 15:38
[root@server ~]# who -u  显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名
root     pts/0        2022-05-09 15:38   .          1510 (192.168.168.1)
[root@nserver ~]# who -T  显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有者可写,“?”表示遇到终端故障
root     + pts/0        2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -w   和-T一样
root     + pts/0        2022-05-09 15:38 (192.168.168.1)

权限管理

文件的一般权限

文件详细信息

  • 使用命令ll或ls -l 查看

  • 结果分析:

文件权限构成

权限针对三类对象定义
  • 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账户不受文件权限的读写限制,执行权限受限制

示例
  • 例1:写出下列文件的字符权限

    • 764 : rwxrw-r--

    • 642: rw-r---w-

    • 153: --xr-x-wx

    • 731: rwx-wx--x

  • 例2:写出下列文件的数字权限

    • r-xrw-r-- : 564

    • rw--w--wx : 623

    • rw-r--r-- : 644

chmod命令

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

格式
# 格式1
chmod  [选项]  [ugoa][+-=][rwx]  文件或目录...
​
# 格式2
chmod  [选项]  nnn  文件或目录...`
参数
  • -R:递归修改指定目录下所有文件、子目录的权限

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

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

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

  • nnn:用数字表示的权限

示例
  • 例1

[root@server ~]# touch  t1.txt
[root@server ~]# ll  t1.txt
-rw-r--r--. 1 root root    0  5月  6 17:29 t1.txt
​
[root@server ~]# chmod  u+x  t1.txt
[root@server ~]# ll  t1.txt
-rwxr-xr-x. 1 root root 0  5月  6 17:29 t1.txt
​
[root@server ~]# chmod  o+w  t1.txt
[root@server ~]# ll  t1.txt
-rwxr-xrwx. 1 root root 0  5月  6 17:29 t1.txt
  • 例2

[root@server ~]# touch  t2.txt
[root@server ~]# ll  t2.txt
-rw-r--r--. 1 root root 0  5月  6 17:27 t2.txt
[root@server ~]# chmod  777  t2.txt
[root@server ~]# ll  t2.txt
-rwxrwxrwx. 1 root root 0  5月  6 17:27 t2.txt
[root@server ~]# chmod  000  t2.txt
----------. 1 root root 0  5月  6 17:27 t2.txt

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

<font color='red'>会自动在6的前面进行补00,也就是说实际上设置的权限是006</font>

  • 例3

[root@server ~]# mkdir  -p  m1/m2/m3
[root@server ~]# touch  m1/m2/m3/t3.txt
[root@server ~]# cd m1
[root@server m1]# tree
.
└── m2
    └── m3
        └── t3.txt
​
2 directories, 1 file
​
[root@server m1]# cd ..
[root@server ~]# ls -ld  m1
​
drwxr-xr-x. 3 root root 16  5月  6 17:33 m1
[root@server ~]# cd m1
​
[root@server m1]# ls -ld m2
drwxr-xr-x. 3 root root 16  5月  6 17:33 m2
​
[root@server m1]# cd m2
[root@server m2]# ls -ld m3
drwxr-xr-x. 2 root root 20  5月  6 17:34 m3
​
[root@server m2]# cd m3
[root@server m3]# ll t3.txt
-rw-r--r--. 1 root root 0  5月  6 17:34 t3.txt
​
[root@server ~]# chmod -R 755  m1   # 递归设置
[root@server ~]# ll m1
总用量 0
drwxr-xr-x. 3 root root 16  5月  6 17:33 m2
[root@server ~]# cd m1
[root@server m1]# ll m2
总用量 0
drwxr-xr-x. 2 root root 20  5月  6 17:34 m3
[root@server m1]# cd m2
[root@server m2]# ll m3
总用量 0
-rwxr-xr-x. 1 root root 0  5月  6 17:34 t3.txt

chown命令

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

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

chown   -参数  所有者:所属组  文件名或目录名
# 参数-R递归设置
示例
[root@server m2]# cd  ~
[root@server ~]# touch  t4.txt
[root@server ~]# ll t4.txt
-rw-r--r--. 1 root root 0  5月  6 17:40 t4.txt
[root@server ~]# chown  fox:fox t4.txt
[root@server ~]# ll t4.txt
-rw-r--r--. 1 fox fox 0  5月  6 17:40 t4.txt

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

取消掉other用户对/test目录的r权限, ll -d /test (-d 表示查看的是目录本身)

<font color='red'>发现other用户无法ls /test</font>

<font color='red'>依次展示其他的。</font>

<font color='gree'>一旦其他人对目录可以w,那么对目录下任何人创建的文件都可以进行删除(包括root用户创建的文件)</font>

<font color='red'>链接文件的权限不可信,因为取决于源文件的权限</font>

<font color='purple'>普通用户对于系统文件无法进行改动原因是::::查看一下权限发现文件夹其他人都是没有可写w的权限</font>

权限掩码

新建文件权限与umask关系

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

    <font color='red'>第一位0表示的是特殊权限位</font>

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

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

查看默认umask值

[root@server ~]# umask
0022
​
0022
[root@server ~]# touch  file1
[root@server ~]# mkdir  dir1
​
[root@server ~]# ll  -d  file1 dir1
drwxr-xr-x. 2 root root 6  5月  6 18:23 dir1    #  755
-rw-r--r--. 1 root root 0  5月  6 18:23 file1   #  644

修改默认umask

[root@server ~]# umask 000     # 临时修改
[root@server ~]# touch  file2
[root@server ~]# mkdir  dir2
[root@server ~]# ll -d  file2  dir2
drwxrwxrwx. 2 root root 6  5月  6 18:26 dir2
-rw-rw-rw-. 1 root root 0  5月  6 18:25 file2

suid

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

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

which passwd 查看命令文件的路径

ll /usr/bin/passwd

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

举例:普通用户不能用cat查看/etc/shadow

[gouxin@study ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
​
[root@study etc]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 37464  5月 31  2022 /usr/bin/cat
[root@study etc]# chmod u+s /usr/bin/cat
[root@study etc]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 37464  5月 31  2022 /usr/bin/cat
​
​

SGID

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

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

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

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

Sticky BIT特殊权限:

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

chmod o+t 目录名

#为目录设置SBIT
​
[root@localhost ~]# chmod o+t /test
​
[root@localhost ~]# ll -d /test
​
drwxrwxrwt. 2 root root 6 4月  11 16:07 /test
[lisi@localhost test]$ ls
​
kenji.txt laowang.txt lisi.txt
[lisi@localhost test]$ rm -rf *
​
rm: 无法删除"kenji.txt": 不允许的操作
​
rm: 无法删除"laowang.txt": 不允许的操作

FACL访问控制列表

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

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

-m 设置权限

-x 删除指定用户权限

-b 删除所有用户权限

查看ACL权限
  • 格式

getfacl  文件名
[root@server ~]# touch  temp.cfg
​
[root@server ~]# getfacl  temp.cfg   # getfacl命令
# file: temp.cfg
# owner: root
# group: root
user::rw-
group::r--
other::r--

设定ACL权限
  • 格式

setfacl  -参数  文件名
  • 参数

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

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

删除acl权限

# 删除指定用户的 ACL 权限setfacl -x u:用户名 文件名
# 删除指定用户组的 ACL 权限setfacl -x g:组名 文件名
# 删除文件的所有 ACL 权限setfacl -b 文件名

第十章 管理Linux的联网

RHEL9版本特点

  • 在RHEL7版本中,同时支持network.service和NetworkManager.service(简称NM)。

  • 在RHEL8上默认只能通过NM进行网络配置,包括动态ip和静态ip,若不开启NM,否则无法使用网络

  • RHEL8依然支持network.service,只是默认没安装,可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个rhel的大版本里将彻底废除,因此不建议用network.service。

  • 在RHEL9上,使用NM进行网络配置,ifcfg (也称为 文件)将不再是网络配置文件的主存储。虽然 ifcfg 样式仍然可用,但它不再是 NetworkManager 存储新网络配置文件的默认位置。从 RHEL 9.0 开始,RHEL 以 key-file 格式在 /etc/NetworkManager/system-connections/ 中存储新的网络配置。配置以旧格式存储在 /etc/sysconfig/network-scripts/ 中的连接仍然可以正常工作。对现有配置集的修改会继续更新旧的文件。

NM特点

  • NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,能自动发现网卡并配置ip地址。

  • NetworkManager的特点 nmcli

    • NM能管理各种网络

      有线网卡、无线网卡动态ip、静态ip以太网、非以太网物理网卡、虚拟网卡

    • 工具齐全:命令行、文本界面、图形界面、web

    • 广纳天地:管理各种网络,有线、无线、物理、虚拟

    • 参数丰富:多达200多项配置参数(包括ethtool参数)

    • 一统江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持

    • 大势所趋:下一个大版本的rhel只能通过NM管理网络

      网卡-----------会话ens160

      会话171


配置网络

概念
  • 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口,一般是指计算机的网络接口即网卡设备

  • 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该方式可以根据固件、设备拓扑、设备类型和位置信息分配固定的名字。网络接口的名称的前两个字符为网络类型符号,如:

  • ip a ifconfig

    ens160

    • en——表示以太网(Ethernet)

    • wl表示无线局域网(wlan)

    • ww表示无线广域网(wwan);

  • 接下来的字符根据设备类型或位置选择,如:

    • o<index>——表示内置(onboard)于主板上的集成设备(即集成网卡)及索引号;

    • s<slot>——表示是插在可以热拔插的插槽上的独立设备及索引号;

    • x<MAC>——表示基于MAC地址命名的设备;

    • p<bus>——表示PCI插槽的物理位置及编号。

  • 注意:一个网络接口,可以有多个网络连接,但同一时间只能有一个网络连接处于活动状态。

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

  • 查看网卡信息

[root@server ~]# nmcli  c  show          # 全写为:nmcli connection show
[root@server ~]# nmcli con show ens160  # 查看指定网卡的详细信息,q键退出
[root@server ~]# nmcli dev status       # 查看已有设备的连接状态
[root@server ~]# nmcli dev show         # 看所有网络设备详情,q键退出
  • 激活和关闭网络连接

[root@server ~]# nmcli c up 网卡名    # 激活,也是重启网卡的一种方法
[root@server ~]# nmcli c down 网卡名  # 关闭
  • 添加网络连接

# 例:添加网络连接ens161
[root@server ~]# nmcli c add type ethernet ifname ens160 con-name ens161 autoconnect yes  ip4 192.168.48.135/24  gw4 192.168.48.2
连接 "ens161" (37bc8e79-92ea-4c01-a4af-1dfd7c687014) 已成功添加。
​
[root@server ~]# nmcli  c  up  ens161   # 不能在xshell操作,否则ssh连接断掉
[root@server ~]# nmcli  c show
[root@server ~]# nmcli  c  up  ens160
  • 设置静态IP

[root@server ~]# nmcli c modify ens160 ipv4.method manual  ipv4.addresses '192.168.48.134/24'  ipv4.gateway '192.168.48.2'  ipv4.dns  '114.114.114.114'
[root@server ~]# nmcli  c  up  ens160
[root@server ~]# ip a
​
# ipv4.method manual:手动获取
  • 增加ip地址

[root@server ~]# nmcli c mod ens160 +ipv4.addresses 192.168.48.136/24
[root@server ~]# nmcli  c  up  ens160
[root@server ~]# ip a
  • 删除网络连接

# 删除上例的ens161
[root@server ~]# nmcli  c  show
NAME    UUID                                  TYPE      DEVICE 
ens160  0f83fcfd-bc6d-3866-b82b-fc4b09df2068  ethernet  ens160 
ens161  37bc8e79-92ea-4c01-a4af-1dfd7c687014  ethernet  --     
[root@server ~]# nmcli  c  del  ens161
成功删除连接 "ens161" (37bc8e79-92ea-4c01-a4af-1dfd7c687014)。
[root@server ~]# nmcli  c  show
NAME    UUID                                  TYPE      DEVICE 
ens160  0f83fcfd-bc6d-3866-b82b-fc4b09df2068  ethernet  ens160 
修改配置文件
# 设置静态IP
​
[root@server ~]# cd /etc/NetworkManager/system-connections
[root@server system-connections]# ls
ens160.nmconnection
[root@server system-connections]# vim ens160.nmconnection 
​
[connection]
id=ens160
uuid=d97d603d-5bb5-3d11-bfeb-11fbc8cb867d
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1682493359
​
[ethernet]
​
[ipv4]
address1=192.168.48.134/24,192.168.48.2
dns=114.114.114.114;
method=manual
​
[ipv6]
addr-gen-mode=eui64
method=auto
​
[proxy]
​
​
[root@server ~]# nmcli c reload 
[root@server ~]# nmcli c up ens160 
​
# 会话和网卡的关系:一个网卡可以有多个会话,但是一个时刻只能连接到一个会话
可视化配置
  • 命令:nmtui

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

ping命令

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

  • 根据域名得到服务器 IP

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

  • 格式

ping  -参数  目标主机IP或域名
参数
  • -c 数字:用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令。

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

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

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

[root@server ~]# ping -c 2  www.baidu.com
显示内容分析
  • bytes 值:数据包大小,也就是字节

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

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

通过域名访问主机

dns

www.baidu.com -------------------------ip

www.baidu.com .

13

www.baidu.com. ---->hosts---->设置的dns服务器------》根域名服务器====》.com

====>baidu.com. ====>www.

ip

静态解析

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

方法
[root@server ~]# vim  /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.48.134   www.openlab.com
​
[root@server ~]# ping  www.openlab.com

简述DNS域名解析

从网站下载文件

wget命令

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

格式
wget  -参数  URL
参数
-P  下载到指定目录 
-t  最大尝试次数 
-b  后台下载模式
-c  断点续传  
-p  下载页面内所有资源,包括图片、视频等 
-r  递归下载
[root@server ~]# wget  https://dldir1.qq.com/qqfile/qq/QQNT/2355235c/linuxqq_3.1.1-11223_x86_64.rpm
​
# 下载qq软件

curl命令

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

[root@server ~]# curl  www.baidu.com -o index.html
​
[root@server ~]# ll  index.html 
-rw-r--r--. 1 root root 2381  5月  6 19:12 index.html

VMware三种网络模式

概述

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

  • vmware->编辑菜单->虚拟网络编辑器

Bridged(桥接模式)

概念
  • 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信

  • 在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰

  • 在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致

分析图

注意
  • 虚拟交换机必须桥接到本机电脑使用的网卡,不要选自动

  • 虚拟机的ip跟本机同一个网段,网关相同

  • 桥接模式配置简单,如果网络环境中ip资源很缺少或对ip管理比较严格,则桥接模式就不太适合

NAT(地址转换模式) vm8

工作原理
  • NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图:

注意
  • NAT模式是利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟机连接外网,VMware Network Adapter VMnet8虚拟网卡是用来与虚拟机通信的

  • 如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择

Host-Only(仅主机模式)

概念
  • Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的

  • Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯

工作原理

第十一章 管理Linux软件包和进程

源码下载安装软件

概念

.c ===>编译===》安装

  • 源码文件:程序编写者使用C或C++等语言编写的原始代码文本文件

  • 源码文件使用.tar.gz或.tar.bz2打包成压缩文件===》解压、编译执行

特点

  • 源码包可移植性好,与待安装软件的工作环境依赖性不大

  • 由于有编译过程,其代码运行效率较高,是针对当前使用者环境的“量体裁衣”

  • 安装功能可以定制,可以选择需要的功能进行安装

  • 卸载方便,只需删除对应安装目录即可,没有Windows“注册表”的概念

  • 安装过程较为麻烦

安装过程

  • 下载解压缩源码压缩包

  • 分析安装软件环境

  • 编译软件

  • 安装软件

例:安装Apache源码包

准备工作
  • 安装必备的编译软件

[root@server ~]# yum  install  gcc   gcc-c++  -y
下载apache源码包
[root@server ~]# wget  https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
[root@server ~]# wget https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.gz
解压缩
[root@server ~]# tar  xzvf  httpd-2.4.57.tar.gz 
[root@server ~]# cd   httpd-2.4.57
安装环境分析
  • 软件包目录中有configure可执行文件,用于对安装环境进行测试、检测所需库文件、工具文件是否存在、检测依赖关系、编译器汇编器连接器的检查

  • 执行方式:./configure

[root@server httpd-2.4.57]# ./configure
# 提示缺少apr软件,则安装
[root@server httpd-2.4.57]# yum install  apr* -y
[root@server httpd-2.4.57]# ./configure  # 重新检测
# 提示缺少pcre软件,下载安装
[root@server httpd-2.4.57]# yum  install  pcre*  -y
[root@server httpd-2.4.57]# ./configure
编译软件
  • 作用:安装./configure命令生成的Makefile文件中记录的信息进行编译,生成二进制安装文件

  • 格式:make

  • 注意:make过程中若报错,需要查看提示信息,根据信息修改,一般为缺少头文件等问题

[root@server httpd-2.4.57]# make
# 提示缺少redhat-rpm-config软件包
[root@server httpd-2.4.57]# yum install redhat-rpm-config
[root@server httpd-2.4.57]# make
安装软件
  • 根据make命令生成的二进制安装文件,进行软件安装,默认安装目录:usr/local或者/usr/loacl/bin目录下

  • 方法:make install

[root@server httpd-2.4.57]# make  install
  • 注意:也可以使用符号连接多条语句

./configure  &&  make  &&  make  install  

RPM管理工具

概念
RPM
  • RPM(Redhat Package Manager)由Red Hat公司提出的一种软件包管理标准

  • 是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。

  • 产生原因:软件制作者在其工作环境下将软件编译完毕后再进行发布,以此减少安装编译时间,要求:软件安装环境与编译时的环境要相同

RPM安装软件要求
  • 软件安装环境必须与打包软件环境一致

  • 必须满足软件依赖性

  • 软件卸载时必须小心,最底层软件不能先卸载

rpm软件包命名格式
  • 含义:软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm

  • 如:zsh-5.0.2-14.el7.x86_64.rpm

  • QQ3.2.13241023x8664_01.rpm

  • zsh-5.0.2-14.el7.x86_64.rpm

zsh-50214el7x8664
软件名主版本号次版本号修订号软件发布次数发行商RHEL7CPU架构平台支持系统位数
rpm包相关网站

rpm软件安装

格式
rpm   -参数   软件包名
参数
参数说明
-i, --install安装软件包
--nodeps不验证软件包依赖
--force安装时提示已安装则重新覆盖安装
-v, --verbose提供更多的详细信息输出
-U软件包升级
-e软件包卸载
安装过程:
  • 读取PRM软件包头部数据,进行软件依赖性查询

  • 若满足条件则安装否则安装失败

示例
安装nginx
[root@server ~]# wget  http://nginx.org/packages/rhel/9/x86_64/RPMS/nginx-1.24.0-1.el9.ngx.x86_64.rpm
​
[root@server ~]# rpm  -ivh  nginx-1.24.0-1.el9.ngx.x86_64.rpm 
安装qq
[root@server ~]# cd  /
[root@server /]# wget  https://dldir1.qq.com/qqfile/qq/QQNT/2355235c/linuxqq_3.1.1-11223_x86_64.rpm
​
[root@server /]# rpm  -ivh  linuxqq_3.1.1-11223_x86_64.rpm 
错误:依赖检测失败:
    libXScrnSaver 被 linuxqq-3.1.1_11223-1.x86_64 需要
[root@server /]# yum install  libXScrnSaver
[root@server /]# rpm  -ivh  linuxqq_3.1.1-11223_x86_64.rpm 

直接下载并安装wps
[root@server /]# rpm  -ivh  https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11698/wps-office-11.1.0.11698-1.x86_64.rpm

卸载
[root@server /]# rpm  -evh  tree

rpm查询功能

格式
rpm  –q  包名
# -q常与下面参数组合使用
参数说明
-a查询所有已安装的软件包
-l显示已安装软件包的相关文件列表和信息
-f查询文件所属软件包
-i显示已经安装的rpm软件包信息
示例
# 查询某个包有没有安装(包名不能写错)
[root@server ~]# rpm -q httpd
​
# 查询所有已经安装的包
[root@server ~]# rpm -qa
​
# 查询安装该包后会产生哪些文件
[root@server /]# rpm -ql gcc
​
#查询该文件由哪个软件包产生
[root@server /]# rpm -qf /usr/bin/ls
coreutils-8.30-12.el8.x86_64

YUM/DNF管理工具

概念
YUM
  • YUM (Yellow dog Updater,Modified)

  • RHEL9中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM),原有的yum命令仅为dnf的软链接,当然依旧可以使用。

[root@server /]# ll `which yum`
​
lrwxrwxrwx. 1 root root 5  9月 15  2022 /usr/bin/yum -> dnf-3
YUM/DNF 功能
  • 在线下载、 安装、 卸载、 升级rpm软件包

  • 自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包

工作原理
  • 将编译好的软件放置在YUM服务器中,并将这些软件的依赖性等信息记录下来形成表格组成数据库

  • 用户安装软件时会向网络中的YUM服务器下载对应表格并与本机RPM数据库进行比较,最后一同下载全部软件进行安装,自动解决依赖性

  • YUM软件仓库:记录软件依赖性等信息的数据库

yum 、dnf====》 /etc/yum.repo.d/ .repo

  • 系统会去读取/etc/yum.repos.d/目录下的.repo结尾的文件,从该文件中读取以下内容实现装包:

    • 包含各种rpm安装文件的软件仓库(rhel8开始有两个仓库,rhel7只有一个仓库)

      • BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库

      • AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库

命令

# 查看包、包组相关信息
yum repolist [all]  # 查看系统中yum资源库配置信息
yum list all  # 列出仓库里所有可安装的软件包
yum list installed [包名]  # 列出己经安装的所有的或指定的rpm包(包名中可使用匹配符)
yum info 包名  # 查看指定软件包的详细信息
yum grouplist  # 查看仓库里而所有包组
yum groupinfo 包组名  #查看指定包组里而的详细信息
​
# 安装、更新包和包组
yum install [-y] 包名 # 安装指定的软件包,-y则在工作过程中需要使用者响应, 这个选个参数可以直接回答yes
yum update [-y] 包名 # 升级指定的软件包或主机中所有已安装的软件包
yum groupinstall 包组名 # 安装指定包组里面的所有包
​
# 卸载软件包
yum remove [-y] 包名 # 卸载已经安装在系统中的指定的软件包
​
# 搜索文件由哪个包产生
yum provides 文件名   # 查找指定的文件属于哪个包
yum whatprovides /etc/fstab   # 查看这个文件是由那个包提供的
​
# 模糊搜索包名
yum search 模糊包名 #  查看模糊包名的软件包
#  清空缓存
yum clean packages all #  清除下载到本机的指定的软件包或所有软件包的yum源缓存

配置yum源

建立本地源
# 将本地光盘挂载至本地目录/media下
[root@server /]# mount /dev/cdrom /media
mount: /media: WARNING: source write-protected, mounted read-only.
​
# 注意有2个yum源
[root@server /]# cd /media/
[root@server media]# ls
AppStream  EFI   extra_files.json  images    media.repo               RPM-GPG-KEY-redhat-release
BaseOS     EULA  GPL               isolinux  RPM-GPG-KEY-redhat-beta
​
# 移动到yum源配置文件路径
[root@server media]# cd /etc/yum.repos.d
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo  redhat.repo
​
# 备份已存在yum源配置文件,使其失效
[root@server yum.repos.d]# mv CentOS-9-Stream.repo CentOS-9-Stream.repo.back
[root@server yum.repos.d]# mv redhat.repo redhat.repo.back
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo.back  redhat.repo.back
​
# 新建本地yum源配置文件
[root@server yum.repos.d]# vim  dvd.repo
​
[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=0
​
[Appstream]
name=Appstream
baseurl=file:///media/AppStream
gpgcheck=0
​
# 重建缓存
[root@server yum.repos.d]# yum  makecache
[root@server yum.repos.d]# yum repolist
​
# 验证能否装包成功
[root@master ~]# yum install tree -y
建立网络源
  • Redhat9暂时无公开的网络源,可以使用Centos9的yum源

  • 使用xftp将配置文件上传到/etc/yum.repos.d目录

  • 重建缓存生效

安装EPEL红帽扩展源
[root@master ~]# yum  install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

第十二章 磁盘管理

磁盘简介

概念
  • 硬盘是由一片或多篇带有磁性的铝合金制的盘片构成,是一种大容量、永久性的外部存储设备

  • 组成:盘片、马达驱动、缓存、控制电路、接口

  • 光盘:0 1

逻辑结构

  • 磁道:由内到外的同心圆

  • 扇区:半径组成的扇形磁道存储区

  • 柱面:多个盘片的统一磁道

  • 图:

虚拟机添加新硬盘

物理设备的命名规则

传统设别

固态硬盘
  • nvmen磁盘号[p1-10]

虚拟机添加新硬盘

过程
  • 关机

  • 编辑虚拟机设置

  • 点击添加

  • 选择硬盘后下一步

  • 选择磁盘类型: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命令

作用
  • 查看磁盘信息

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

硬盘分区

使用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),容量自定

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

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

格式化

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

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

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

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

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

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

  • 图:

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

[root@server ~]# mkfs    # 点击2次tab
mkfs  mkfs.cramfs  mkfs.ext2  mkfs.ext3  mkfs.ext4  mkfs.fat  mkfs.minix   mkfs.msdos   mkfs.vfat  mkfs.xfs     

格式化命令

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

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

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

[root@server /]# dd  if=/dev/zero  of=/filedev  count=2 bs=1G
​
[root@server /]# mkfs.xfs -f /filedev 
# -f: 最好加上-f强制格式化

blkid命令

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

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

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

挂载

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

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

mount命令

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

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

[root@server ~]# mkdir  /msda1
[root@server ~]# mount  /dev/sda1  /msda1
[root@server ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    2G  0 part /msda1
├─sda2          8:2    0    3G  0 part 
└─sda3          8:3    0    4G  0 part 
  • 例2:使用UUID值挂载/dev/sda2

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

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

[root@server ~]# mount
​
[root@server ~]# mount | grep /dev/sda
注意
  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中

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

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

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

umount命令

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

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

[root@server ~]# cd  /msda3
[root@server msda3]# ls
lost+found
[root@server msda3]# umount  /dev/sda3
umount: /msda3: 目标忙.
[root@server msda3]# cd  ~   # 离开需要卸载的目录
[root@server ~]# umount  /dev/sda3
[root@server ~]# ls  /msda3   # 原先隐藏的文件,卸载设别后会显示
test.txt

开机挂载

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

[root@server ~]# mount   /dev/sda1  /msda1
[root@server ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    2G  0 part /msda1  # 已挂载
……
​
[root@server ~]# reboot
​
[root@server ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    2G  0 part 
……
配置文件分析
  • 路径:/etc/fstab

  • 共六列,分别为:

    • 设备名称或其UUID值

    • 挂载点目录

    • 文件系统名称

    • 文件系统参数:default

    • 是否备份,0

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

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

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

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

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

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

特殊挂载

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

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

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

  • 查看:

[root@server ~]# free -h
        total        used        free      shared  buff/cache   available
Mem:    1.9Gi       733Mi       985Mi       15Mi       380Mi       1.2Gi
Swap:   4.0Gi          0B       4.0Gi
  • 添加过程:新建分区->格式化该分区->启用新的swap->查看系统信息->挂载

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

[root@server ~]# gdisk  /dev/sda
GPT fdisk (gdisk) version 1.0.7
​
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
​
Found valid GPT with protective MBR; using GPT.
​
Command (? for help): n
Partition number (4-128, default 4): 
First sector (34-41943006, default = 18876416) or {+-}size{KMGTP}: 
Last sector (18876416-41943006, default = 41943006) or {+-}size{KMGTP}: +5G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'
​
Command (? for help): W
​
Final checks complete. About to write 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 ~]# lsblk  # 若未显示sda4则使用partprobe命令更新
​
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0           7:0    0    1G  0 loop /mloop
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    2G  0 part /msda1
├─sda2          8:2    0    3G  0 part /msda2
├─sda3          8:3    0    4G  0 part 
└─sda4          8:4    0    5G  0 part 
……
​
[root@server ~]# mkswap  /dev/sda4   # swap格式化
正在设置交换空间版本 1,大小 = 5 GiB (5368705024  个字节)
无标签,UUID=b9eaced8-4e7a-4ce3-9287-ac848c5f04ae
​
[root@server ~]# swapon  /dev/sda4    # 启用
​
[root@server ~]# free  -h   # 查看容量
​
[root@server ~]# vim  /etc/fstab   # 开机挂载
/dev/sda4       swap    swap    defaults        0       0
​
[root@server ~]# reboot
​
[root@server ~]# free  -h
  • 例2:使用大文件建立swap

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

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

查看磁盘空间使用量

df命令

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

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

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

du命令

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

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

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

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磁盘阵列

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

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

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

  • 例:上例RAID10解散

[root@server ~]# umount /dev/md0
[root@server ~]# vim  /etc/fstab   # 删除开机挂载项,切记
[root@server ~]# mdadm  -S /dev/md0  # 停止
mdadm: stopped /dev/md0

RAID备份盘技术

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

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

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

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

管理逻辑卷

工作原理

产生原因
  • 硬盘分区或部署为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空间的逻辑卷并格式化挂载使用

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

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

调整逻辑卷大小

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

[root@server ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
​
[root@server ~]# vgextend  /dev/VG1  /dev/sdc
  Volume group "VG1" successfully extended
[root@server ~]# vgdisplay /dev/VG1
逻辑卷的扩大与缩小
  • 例1:xfs文件系统类型的lvm的扩容

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

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

综合项目--搭建论坛

项目架构

整体结构

  • 使用LNMP环境+Discuz论坛源程序

  • LNMP= Linux + Ngnix + mariadb + PHP

Nginx

  • 最初于2004年10月4日为俄罗斯知名门户站点而开发的

  • Nginx是一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,

  • 特点:低系统资源、占用内存少且并发能力强,是目前主流网站使用的http服务程序

Mariadb

  • Mariadb是一种数据库软件

  • 由开源社区维护,是MySQL的分支,几乎完全兼容MySQL,两者性能基本一致,操作十分相似

PHP

  • PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言,发明于 1995年,它吸取了 C 语言、Java 语言及 Perl 语言的很多优点,具有开源、免费、快捷、跨平台性强、效率高等优良特性,是目前 Web 开发领域最常用的语言之一

  • Discuz默认使用PHP编写

Discuz

  • Discuz一套通用的社区论坛软件系统

  • 自2001年6月面世以来,Discuz!已拥有15年以上的应用历史和200多万网站用户案例,是全球成熟度、覆盖率最大的论坛软件系统之一

  • 2010年8月23日被腾讯收购

  • 网址:Discuz!官方网站 - 开放、连接、共赢

项目准备

安装RHEL9系统

配置系统

  • 关闭安全软件

[root@localhost ~]# systemctl  stop  firewalld     # 关闭防火墙
[root@localhost ~]# systemctl  disable  firewalld  # 取消开机启动
[root@localhost ~]# setenforce 0                   # 关闭SELinux
  • 修改主机名

[root@localhost ~]# hostnamectl  set-hostname  server  # 设置主机名位server
[root@localhost ~]# reboot         # 重启系统
[root@server ~]# setenforce 0      # 重新关闭SELinux
  • 使用xftp上传CentOS-9-Stream.repo的yum配置文件到/etc/yum.repos.d

[root@server ~]# cd  /etc
[root@server etc]# rm   -rf  yum.repos.d
[root@server etc]# mkdir   yum.repos.d
​
# 使用xftp上传文件
[root@server etc]# yum  clean all
​
[root@server ect]# yum  makecache
  • 测试网络连通性:ping www.qq.com

  • 制作快照

下载所需软件

部署项目

部署LNMP环境

  • 解压缩

[root@server ~]# ls  /
bin   dev  home  lib64                media  opt   root  sbin  sys  usr
boot  etc  lib   lnmp1.9-full.tar.gz  mnt    proc  run   srv   tmp  var
[root@server ~]# cd /
[root@server /]# tar  xvf  lnmp1.9-full.tar.gz 
  • 安装

[root@server /]# cd  lnmp1.9-full/
[root@server lnmp1.9-full]# ./install.sh   # 执行安装脚本
+------------------------------------------------------------------------+
|          LNMP V1.9 for RHEL Linux Server, Written by Licess          |
+------------------------------------------------------------------------+
|        A tool to auto-compile & install LNMP/LNMPA/LAMP on Linux       |
+------------------------------------------------------------------------+
|           For more information please visit https://lnmp.org           |
+------------------------------------------------------------------------+
You have 11 options for your DataBase install.
1: Install MySQL 5.1.73
2: Install MySQL 5.5.62 (Default)
3: Install MySQL 5.6.51
4: Install MySQL 5.7.38
5: Install MySQL 8.0.30
6: Install MariaDB 5.5.68
7: Install MariaDB 10.3.35
8: Install MariaDB 10.4.25
9: Install MariaDB 10.5.16
10: Install MariaDB 10.6.8
0: DO NOT Install MySQL/MariaDB
Enter your choice (1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or 0):  # 数据库安装版本:回车默认
​
===========================
Please setup root password of MySQL.
Please enter: 123456   # 设置数据库的密码为123456
​
===========================
Do you want to enable or disable the InnoDB Storage Engine?
Default enable,Enter your choice [Y/n]: y  # 是否启用mysql innodb引擎,输入y
You will enable the InnoDB Storage Engine
===========================
You have 9 options for your PHP install.
1: Install PHP 5.2.17
2: Install PHP 5.3.29
3: Install PHP 5.4.45
4: Install PHP 5.5.38
5: Install PHP 5.6.40 (Default)
6: Install PHP 7.0.33
7: Install PHP 7.1.33
8: Install PHP 7.2.34
9: Install PHP 7.3.33
10: Install PHP 7.4.30
11: Install PHP 8.0.20
12: Install PHP 8.1.7
Enter your choice (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12): # 选择php版本,默认回车
​
===========================
You have 3 options for your Memory Allocator install.
1: Don't install Memory Allocator. (Default)
2: Install Jemalloc
3: Install TCMalloc
Enter your choice (1, 2 or 3):    # 选择是否安装内存优化,不安装,回车
​
Press any key to install...or Press Ctrl+c to cancel  # 按任意键开始安装
​
#  等待……
Checking ...
Nginx: OK
MySQL: OK
PHP: OK
PHP-FPM: OK
Clean Web Server src directory...
+------------------------------------------------------------------------+
|          LNMP V1.9 for RHEL Linux Server, Written by Licess          |
+------------------------------------------------------------------------+
|           For more information please visit https://lnmp.org           |
+------------------------------------------------------------------------+
|    lnmp status manage: lnmp {start|stop|reload|restart|kill|status}    |
+------------------------------------------------------------------------+
|  phpMyAdmin: http://IP/phpmyadmin/                                     |
|  phpinfo: http://IP/phpinfo.php                                        |
|  Prober:  http://IP/p.php                                              |
+------------------------------------------------------------------------+
|  Add VirtualHost: lnmp vhost add                                       |
+------------------------------------------------------------------------+
|  Default directory: /home/wwwroot/default                              |
+------------------------------------------------------------------------+
|  MySQL/MariaDB root password: 123456                          |
+------------------------------------------------------------------------+
+-------------------------------------------+
|    Manager for LNMP, Written by Licess    |
+-------------------------------------------+
|              https://lnmp.org             |
+-------------------------------------------+
nginx (pid 350414) is running...
php-fpm is runing!
 SUCCESS! MySQL running (351009)
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5          127.0.0.1:631       0.0.0.0:*          
LISTEN 0      128        127.0.0.1:6010      0.0.0.0:*          
LISTEN 0      128        127.0.0.1:6011      0.0.0.0:*          
LISTEN 0      50           0.0.0.0:3306      0.0.0.0:*          
LISTEN 0      128          0.0.0.0:111       0.0.0.0:*          
LISTEN 0      128          0.0.0.0:80        0.0.0.0:*          
LISTEN 0      128          0.0.0.0:80        0.0.0.0:*          
LISTEN 0      32     192.168.122.1:53        0.0.0.0:*          
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*          
LISTEN 0      5              [::1]:631          [::]:*          
LISTEN 0      128            [::1]:6010         [::]:*          
LISTEN 0      128            [::1]:6011         [::]:*          
LISTEN 0      128             [::]:111          [::]:*          
LISTEN 0      128             [::]:22           [::]:*          
Install lnmp takes 24 minutes.
Install lnmp V1.9 completed! enjoy it.
# 成功

设置论坛安装文件

  • 使用xftp将Discuz_X3.5SC_UTF820230316目录中的upload目录上传到nginx的启动目录/home/wwwroot/default内

  • 设置nginx

[root@server /]# cd  /home/wwwroot/default
[root@server default]# chmod  -Rf  777  upload
[root@server default]# chown  www:www  -R  /home/wwwroot/default/upload
[root@server default]# vim   /usr/local/nginx/conf/nginx.conf
# 定位第69行将 /home/wwwroot/default  修改为  /home/wwwroot/default/upload
[root@server default]# cd  /usr/local/nginx/sbin
[root@server sbin]# ./nginx  -s   reload  # 重启nginx

安装论坛软件

  • windows中打开浏览器输入服务器ip ,按照Discuz安装向导提示操作

  • 下一步后成功

  • 直接访问站点,测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值