Linux学习入门

一:web架构全景

1.0 用户请求链路

当运维把应用程序部署完成后,用户请求链路如图:

  1. 首先用户在浏览器上输入域名,进行访问。
  2. 然后通过DNS进行解析域名,把域名解析成服务器IP地址。
  3. 当DNS解析成功后,用户客户端会给服务器进行TCP三次握手建立链接。
  4. 当链接成功后,会给服务器发送http请求报文。
  5. 服务器收到请求报文后,域名代理服务器首先进行判断路由。
  6. 如果路由是动态资源,则会访问后端服务。
  7. 后端服务先判断Redis缓存数据库中是否有数据,如果有则发送响应报文给用户客户端进行渲染显示。
  8. 如果Redis缓存数据库中没有数据,则从MySQL数据库中进行读取数据并且发送响应报文给客户端进行渲染显示,并且把数据缓存给Redis数据库。

image-20260904200805406

1.1Dns解析域名

Dns域名解析是把域名解析成服务器的IP地址,具体解析步骤如下(如图):

  • 首先用户在浏览器上输入www.baidu.com进行访问。
  • 先查看本地缓存中和本地/etc/host文件中是否有www.baidu.com域名记录,如果直接跳转到页面。
  • 如果没有,则会向递归DNS发送解析www.baidu.com请求。
  • 当递归接收到解析请求,先向根DNS发送解析.com的请求,根DNS收起请求后,会向递归dns发送.com顶级域名的地址。
  • 递归dns则会向.com顶级域名发送baidu.com解析请求,顶级域名则会向递归DNS响应权威DNS地址。
  • 递归DNS向权威dns发送解析www.baidu.com请求,权威DNS进行解析并且把解析地址响应给递归DNS。
  • 递归DNS接收到解析的IP地址,保持到缓存中,以便下次进行解析,并且响应给用户。
  • 用户收到递归DNS的解析的地址,并且保存到缓存中,以便下次进行解析

image-20260904205654434

1.2 三次握手

当dns解析成功后,客户端向服务器端发送三次握手请求。

  • 客户端向服务端送上请求(SYN)连接,这时客户端进入SYN_SENT状态。
  • 服务端收到客户端口请求,并且向客户端发送SYN+ACK响应,服务的进入了SYN_RCVD状态。
  • 客户端收到服务的的响应,进入了ENTABLISHED状态,并且向服务端发送ACK,客户端准备就绪。
  • 服务端收到客户端的ACK,并且进入ENTABLISHED状态,链接建立成功。

image-20260904210721641

二:Linux系统安装

2.2 Linux服务器系统安装

2.2.1 rockyLinux服务器系统安装

rockylinux镜像系统下载地址: https://rockylinux.org/download

2.2.1.0 rockylinux 10桌面版安装:

  • VM虚拟机创建:

image-20260905073558165

image-20260905073654616

image-20260905073737299

image-20260905073814889

image-20260905073954758

image-20260905074113003

image-20260905074151990

image-20260905074226215

image-20260905074301642

image-20260905074326884

image-20260905074422657

image-20260905074455333

image-20260905074537082

image-20260905075132693

  • 安装系统:

开启虚拟机:

image-20260905075301343

image-20260905075446270

选择语言:

image-20260905075850556

选择软件安装:

image-20260905080247992

磁盘进行分区:

image-20260905080342489

image-20260905080450943

网络主机名设置:

image-20260905080801485

root用户设置,在生产环境中root用户是禁用的:

image-20260905080932894

image-20260905081148827

普通用户设置:

image-20260905081500822

image-20260905081436113

进行安装系统:

image-20260905081533819

安装的软件包:

image-20260905081717951

安装成功后进行重启:

image-20260905084951202

把熄屏时间设置成永久不关闭,否则桌面点击不进去:

image-20260905085912273

image-20260905085951843

2.2.1.1 安装rockyLinux 10 server版

  • 虚拟机创建根据桌面版进行创建,此处不在书写操作步骤

选择的操作系统是:

image-20260905081926806

  • 安装系统:

开启虚拟机:

image-20260905082229082

选择语言:

image-20260905082735463

软件选择:

自定义对硬盘分区:

image-20260905083020334

image-20260905083237669

image-20260905083631190

image-20260905084141136

image-20260905084243364

image-20260905084314256

image-20260905083835307

设置网络和主机名:

image-20260905084422244

设置root用户:

image-20260905084742167

设置普通用户:

image-20260905084832356

进行安装系统:

image-20260905084854191

重启系统:

image-20260905090853177

查看是否能登进去:

image-20260905091033707

2.2.2 Ubuntu服务器系统安装

Ubuntu镜像下载地址:https://ubuntu.com/navigation#products-navigation

image-20260905082639081

2.2.2.1 Ubuntu26桌面安装:

  • 新建虚拟机,新建的步骤不详细,只写注意的事项:

安装前,先把网络断开 :

image-20260905103726310

image-20260905085240155

选择对应的操作系统镜像:

image-20260905090421211

  • 进行安装系统:

开启虚拟机:

image-20260905090523049

设置语言:

image-20260905091150670

image-20260905091220155

image-20260905091258810

链接互联网:

image-20260905103412851

更新可用:

image-20260905091419263

安装系统:

image-20260905091500354

image-20260905091522563

安装的应用软件:

image-20260905091605815

image-20260905091622491

磁盘分区:

image-20260905091711800

image-20260905091750881

创建用户:

image-20260905091845097

选择时区:

image-20260905091954488

进行安装系统:

image-20260905092035045

image-20260905092056066

安装成功:

image-20260905112930207

重启:

image-20260905113139451

进行登录:

image-20260905113329620

解决每隔5分钟黑屏,并且怎么点无法进入桌面:

image-20260905114149531

image-20260905114237740

打开网络:

image-20260905114929736

image-20260905114758598

image-20260905114817745

image-20260905115110901

image-20260905115142578

image-20260905115210554

2.2.2.2 Ubuntu26 server版安装:

  • 新建虚拟机:和桌面版安装基本一样,只记录不一样的

开启虚拟机:

image-20260905092141311

  • 安装系统:

image-20260905092235118

选择语言:

image-20260905092738864

是否更新:

image-20260905092822315

选择键盘方式:

image-20260905092926053

选择安装的系统:

image-20260905093125298

配置网络:

image-20260905093210699

image-20260905093239727

安装软件:

image-20260905093336285

磁盘分区:

image-20260905093431063

image-20260905093529804

image-20260905093558161

用户配置:

image-20260905093738625

是否升级到专业版:

image-20260905093839678

是否安装openssh,桌面版是没有安装的:

如果没有安装,系统安装成功手动安装,手动安装方式如下:

image-20260905094000837

安装其他软件:

image-20260905094157101

安装系统:

image-20260905094225357

安装成功:

image-20260905113050679

查看是否安装成功:

image-20260905113922695

三. Linux基础-文件管理、链接机制与归档压缩

3.1 shell与终端及命令通用格式和命令帮助

3.1.1 shell与终端

终端:终端是命令行的窗口。

shell:shell是解释器,当我们在终端窗口输入命令后,shell会把指令解释成内核所识别的字符,内核执行完成并且通过shell输出到终端。

内核:执行shell所给的指令。

3.1.2 shell提示符:

打开终端会看到shell提示符:

wmn@strudy:~$ 
字段 含义
wmn 当前登录服务器的用户名
strudy 服务器的主机名
~ 当前所在的目录,~是当前所在位置是用户的家目录
$ 提示符,$代表的是普通用户,#代表的是root用户(超级用户)

3.1.3 命令格式与帮助

3.1.3.1 命令格式

通用的命令格式由三部分组成:

组成部分 含义
command 执行的命令
[options] 命令的选项,根据实际情况可有可无
[arguments] 命令的参数,根据实际情况可有可无

3.1.3.2 命令的帮助

  • --help/-h:快速查看帮助

应用实例:

1)查看ls的帮助:
wmn@strudy:~$ ls --help
  • man: 命令的帮助手册:

常用的章节:

章节 含义 什么时候用
1 查看命令的帮助手册,默认的章节 查看普通的指令,如ls,tar,grep等用法
5 查看配置文件的手册 修改/etc/passwd等文件使用
8 查看系统管理命令的手册 使用fdisk分区、iptable等配置查看参数

常用的参数:

-f: 查看手册的章节

例子:

1)查看passwd的帮助:
wmn@strudy:~$ man passwd
2)查看passwd的章节:
wmn@strudy:~$ man -f passwd
passwd (1)           - 更改用户密码
passwd (5)           - 密码文件
passwd (1ssl)        - OpenSSL application commands
3)查看passwd的第5章节:
wmn@strudy:~$ man 5 passwd

3.2 Linux的文件管理

3.2.1 Linux的目录

  • 目录结构

Linux的目录结构像倒挂的树一样,如下图:

image-20260906150822673

常用的目录:

目录名称 用途
/etc 主要存放系统和服务的配置文件
/home 用于存放普通用户家目录
/root root用户家目录
/var 主要存放一些经常数据变化的文件,比如说日志文件、缓存文件等
/tmp 临时目录,主要用于存放进程运行时临时数据文件,运行完自动删除,或者系统30日自动删除,用户都可以进行存放,但是只能自己删除自己存放的文件
/bin 主要存放普通用户能执行的二进制指令文件
/sbin 主要存放超级用户执行的二进制指令文件
/boot 主要存放系统和引导程序文件。vmlinuz:内核文件。initrd.img:初始化文件。grub:引导程序
/lib 开发使用的库
/proc 虚拟目录。主要存放系统正在运行进程的文件,进程不运行自动删除。
/usr 应用程序安装的位置
  • 路径:

路径分为相对路径和绝对路径。

路径 含义 例子
绝对路径 以/开头的路径是绝对路径 /etc/sysconfig
相对路径 不是以/开头的路径是相对路径 etc/sysconfig

路径特殊符号:

符号 含义
~ 家目录
. 当前目录
.. 上一级目录
- 上一次所在的目录,cd能使用

3.2.2 文件和目录指令

3.2.2.1 导航与查看

3.2.2.1.0 pwd(查看当前所在的目录)

pwd是查看当前所在的目录。

例子:

wmn@strudy:/etc/default$ pwd
/etc/default
3.2.2.1.1 cd(切换目录)

cd是切换目录,默认是切换到家目录。

  • 例子:

切换到绝对路径目录:

wmn@strudy:/etc/default$ cd /etc/default/
wmn@strudy:/etc/default$ pwd
/etc/default

切换到用户的家目录:

wmn@strudy:/etc/default$ cd ~
wmn@strudy:~$ pwd
/home/wmn
或者:
wmn@strudy:/etc/default$ cd 
wmn@strudy:~$ pwd
/home/wmn

切换到根目录:

wmn@strudy:~$ cd /
wmn@strudy:/$ pwd
/

切换到相对路径etc目录(当前在/目录)

wmn@strudy:/$ cd etc
wmn@strudy:/etc$ pwd
/etc

切换到上级目录:

wmn@strudy:/etc$ cd ../
wmn@strudy:/$ pwd
/

切换到上一次所在的目录:

wmn@strudy:/$ cd -
/etc
wmn@strudy:/etc$ pwd
/etc

切换到某个用户的家目录:

root@strudy:~# cd ~wmn
root@strudy:/home/wmn# pwd
/home/wmn
3.2.2.1.2 ls(查看目录内容)

ls是查看目录内容,默认是查看当前所在目录的内容。

  • 常用的参数:
选项 说明
-l 显示详细信息
-a 显示目录下所有的内容,包括隐藏文件和目录(以.开头)
-h 以人类可查看形式显示信息,一般和-l一起使用才能看出效果
-d 查看目录本身的信息,不是查看目录内容下的信息
-S 按照文件大小进行排序,一般和-l一起使用才能看出效果
-t 按照文件修改时间进行排序,一般和-l一起使用才能看出效果
-r 逆向排序,一般和-l,-t或-S一起使用才能看出效果
  • 例子:

查看当前目录下的内容:

wmn@strudy:~$ ls 
snap  下载  公共  图片  文档  桌面  模板  视频  音乐

查看/tmp目录下的内容:

wmn@strudy:~$ ls /tmp/
VMwareDnD
snap-private-tmp
systemd-private-417320f212634de38215ead676bbdcf8-ModemManager.service-nG2FqP
systemd-private-417320f212634de38215ead676bbdcf8-chrony.service-EiqwgC
systemd-private-417320f212634de38215ead676bbdcf8-colord.service-o3D4IP
systemd-private-417320f212634de38215ead676bbdcf8-fwupd.service-6JQclp
systemd-private-417320f212634de38215ead676bbdcf8-polkit.service-lO6aPC
systemd-private-417320f212634de38215ead676bbdcf8-power-profiles-daemon.service-zqmBGG
systemd-private-417320f212634de38215ead676bbdcf8-switcheroo-control.service-FbiNSs
systemd-private-417320f212634de38215ead676bbdcf8-systemd-logind.service-BiNo1m
systemd-private-417320f212634de38215ead676bbdcf8-upower.service-hI4LjG
vmware-root_1125-4022177662

查看当前目录下所有内容,包括隐藏文件:

wmn@strudy:~$ ls -a 
.   .bash_history  .bashrc  .config  .profile  snap  公共  文档  模板  音乐
..  .bash_logout   .cache   .local   .ssh      下载  图片  桌面  视频

详细显示目录下所有文件内容:

wmn@strudy:~$ ls -la 
total 76
drwxr-x--- 15 wmn  wmn  4096 Sep  5 11:46 .
drwxr-xr-x  3 root root 4096 Sep  5 10:47 ..
-rw-------  1 wmn  wmn   524 Sep  5 12:17 .bash_history
-rw-r--r--  1 wmn  wmn   220 Feb 13  2026 .bash_logout
-rw-r--r--  1 wmn  wmn  3771 Feb 13  2026 .bashrc
drwx------ 13 wmn  wmn  4096 Sep  5 12:06 .cache
drwx------ 14 wmn  wmn  4096 Sep  5 11:50 .config
drwx------  4 wmn  wmn  4096 Sep  5 11:40 .local
-rw-r--r--  1 wmn  wmn   807 Feb 13  2026 .profile
drwx------  2 wmn  wmn  4096 Sep  5 11:32 .ssh
drwx------  5 wmn  wmn  4096 Sep  5 12:00 snap
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 下载
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 公共
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 图片
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 文档
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 桌面
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 模板
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 视频
drwxr-xr-x  2 wmn  wmn  4096 Sep  5 11:40 音乐

以人类可读的形式显示内容信息:

wmn@strudy:~$ ls -lah 
total 76K
drwxr-x--- 15 wmn  wmn  4.0K Sep  5 11:46 .
drwxr-xr-x  3 root root 4.0K Sep  5 10:47 ..
-rw-------  1 wmn  wmn   524 Sep  5 12:17 .bash_history
-rw-r--r--  1 wmn  wmn   220 Feb 13  2026 .bash_logout
-rw-r--r--  1 wmn  wmn  3.7K Feb 13  2026 .bashrc
drwx------ 13 wmn  wmn  4.0K Sep  5 12:06 .cache
drwx------ 14 wmn  wmn  4.0K Sep  5 11:50 .config
drwx------  4 wmn  wmn  4.0K Sep  5 11:40 .local
-rw-r--r--  1 wmn  wmn   807 Feb 13  2026 .profile
drwx------  2 wmn  wmn  4.0K Sep  5 11:32 .ssh
drwx------  5 wmn  wmn  4.0K Sep  5 12:00 snap
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 下载
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 公共
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 图片
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 文档
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 桌面
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 模板
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 视频
drwxr-xr-x  2 wmn  wmn  4.0K Sep  5 11:40 音乐

按照文件大小进行排序显示内容信息:

1)正向排序
wmn@strudy:~$ ls -lhS /etc/
total 1.2M
-rw-r--r--  1 root                 root                  77K Oct 14  2025 mime.types
-rw-r--r--  1 root                 root                  62K Sep  5 11:53 ld.so.cache
-rw-r--r--  1 root                 root                  31K Mar 20 18:33 brltty.conf
-rw-r--r--  1 root                 root                  13K Mar 16  2025 services
-rw-r--r--  1 root                 root                  12K Nov 21  2025 nanorc
-rw-r--r--  1 root                 root                  11K Feb  3  2026 sensors3.conf
-rw-r--r--  1 root                 root                 9.6K Mar 13 19:02 sudo_logsrvd.conf
-rw-r--r--  1 root                 root                 9.5K Sep  5 11:32 locale.gen
2)逆向排序:
wmn@strudy:~$ ls -lhSr /etc/
total 1.2M
-rw-r--r--  1 root                 root                    0 Apr 23 09:15 subuid-
-rw-r--r--  1 root                 root                    0 Apr 23 09:15 subgid-
-rw-r--r--  1 root                 root                    7 Sep  5 10:47 hostname
-rw-r--r--  1 root                 root                   10 Apr 20 16:46 debian_version
lrwxrwxrwx  1 root                 root                   13 Feb 20  2026 rmt -> /usr/sbin/rmt
-rw-r--r--  1 root                 root                   14 Sep  5 11:32 timezone
lrwxrwxrwx  1 root                 root                   16 Apr 23 09:15 vconsole.conf -> default/keyb

按照修改时间进行排序:

1)正向排序:
wmn@strudy:~$ ls -lht /etc/
total 1.2M
drwxr-xr-x  5 root                 lp                   4.0K Sep  6 15:41 cups
drwxr-xr-x  4 root                 root                 4.0K Sep  5 12:01 ssh
drwxr-xr-x  2 root                 root                 4.0K Sep  5 12:01 rc3.d
drwxr-xr-x  2 root                 root                 4.0K Sep  5 12:01 rc4.d
drwxr-xr-x  2 root                 root                 4.0K Sep  5 12:01 rc5.d
drwxr-xr-x  2 root                 root                 4.0K Sep  5 12:01 rc2.d
2)逆向排序:
wmn@strudy:~$ ls -lhtr /etc/
total 1.2M
-rw-r--r--  1 root                 root                 3.1K Oct 18  2022 protocols
-rw-r--r--  1 root                 root                  911 Oct 18  2022 rpc
-rw-r--r--  1 root                 root                  460 Jan 20  2023 zsh_command_not_found
-rw-r--r--  1 root                 root                 4.4K Apr 16  2024 hdparm.conf
-rw-r--r--  1 root                 root                   27 Jun 13  2024 libao.conf
-rw-r--r--  1 root                 root                   20 Feb 21  2025 fprintd.conf

查看目录详细信息:

wmn@strudy:~$ ls -ld /
drwxr-xr-x 20 root root 4096 Sep  5 10:46 /
  • ls -l查看出内容说明:

image-20260907162721808

根据上图的序列号进行说明:

序列号 说明
序列1 显示类型,-是文件类型,d是目录类型,l是链接类型
序列2 默认显示是B
序列3 文件或目录最后修改时间
3.2.2.1.3 tree(以树形式查看目录)

tree是以树形结构进行查看目录,默认查看目录下所有内容。

  • 常见的选项参数:
选项 说明
-d 只看目录
-l 查看目录几级内容
  • 例子:

查看目录树:

wmn@strudy:~$ tree 
.
├── 公共
├── 模板
├── 视频
├── 图片
├── 文档
├── 下载
├── 音乐
├── 桌面
└── snap
    ├── firmware-updater
    │   ├── 226
    │   ├── common
    │   └── current -> 226
    ├── prompting-client
    │   ├── 204
    │   ├── 222
    │   ├── common
    │   └── current -> 222
    └── snapd-desktop-integration
        ├── 361
        ├── common
        └── current -> 361

只查看目录内容下的目录:

wmn@strudy:~$ tree /var -d

查看目录下2级内容:

wmn@strudy:~$ tree -L 2 /etc

查看多个目录的树形结构:

wmn@strudy:~/wmn-dir$ cp -r  dir1 dir1_backup
wmn@strudy:~/wmn-dir$ tree dir1 dir1_backup/
dir1
└── docs
    └── images
dir1_backup/
└── docs
    └── images

3.2.2.2 文件目录操作

3.2.2.2.0 目录文件创建
3.2.2.2.0.1 mkdir创建目录

mkdir默认是创建空目录,可以创建多个空目录。

  • 选项参数
选项参数 用途
-p 递归创建多级目录
  • 例子:

创建一个空目录:

wmn@strudy:~/wmn-dir$ mkdir dir1
wmn@strudy:~/wmn-dir$ ls 
dir1

创建多个空目录:

wmn@strudy:~/wmn-dir$ mkdir  dir2 dir3 dir4 backup
wmn@strudy:~/wmn-dir$ ls 
backup  dir1  dir2  dir3  dir4

递归创建多级目录:

wmn@strudy:~/wmn-dir$ mkdir -p dir1/docs/images
wmn@strudy:~/wmn-dir$ tree dir1
dir1
└── docs
    └── images

3 directories, 0 files

在dir2目录下批量创建dir1到dir10目录:

wmn@strudy:~/wmn-dir$ mkdir dir2/dir{1..10}
wmn@strudy:~/wmn-dir$ tree dir2/
dir2/
├── dir1
├── dir10
├── dir2
├── dir3
├── dir4
├── dir5
├── dir6
├── dir7
├── dir8
└── dir9

在dir3目录下创建dirw和dirm、dirn目录:

wmn@strudy:~/wmn-dir$ mkdir dir3/dir{w,m,n}
wmn@strudy:~/wmn-dir$ tree dir3/
dir3/
├── dirm
├── dirn
└── dirw
3.2.2.2.0.2 touch(创建文件)

touch是创建空文件,该命令没有常用的选项参数。

  • 例子:

创建一个空文件:

wmn@strudy:~/wmn-dir$ touch file1.txt
wmn@strudy:~/wmn-dir$ ls 
backup  dir1  dir2  dir3  dir4  file1.txt

创建多个空文件:

wmn@strudy:~/wmn-dir$ touch file2.txt file3.txt file4.txt
wmn@strudy:~/wmn-dir$ ls *.txt
file1.txt  file2.txt  file3.txt  file4.txt

在dir4目录下批量创建file01...file10空文件:

wmn@strudy:~/wmn-dir$ touch dir4/file{01..10}
wmn@strudy:~/wmn-dir$ tree dir4/
dir4/
├── file01
├── file02
├── file03
├── file04
├── file05
├── file06
├── file07
├── file08
├── file09
└── file10

1 directory, 10 files

在backup目录下创建file01,file02,file10空文件:

wmn@strudy:~/wmn-dir$ touch  backup/file{01,02,10}
wmn@strudy:~/wmn-dir$ tree backup/
backup/
├── file01
├── file02
└── file10

1 directory, 3 files
3.2.2.2.1 cp(复制文件或目录)

cp是把文件或目录复制到某个目录下,也叫备份,默认是只能复制文件,在覆盖已存在的文件默认是不进行提示的。

  • 常用选项参数:
选项参数 含义
-r 递归复制目录及目录下的内容
-i 在复制是出现覆盖提示确认
-v 显示复制过程
  • 例子:

把file1.txt复制到同目录下,并且复制名为file1_backup.txt,这种叫改名:

wmn@strudy:~/wmn-dir$ cp file1.txt file1_backup.txt
wmn@strudy:~/wmn-dir$ ls file1*
file1.txt  file1_backup.txt

把file1.txt复制到/tmp目录下:

wmn@strudy:~/wmn-dir$ cp file1.txt /tmp/
wmn@strudy:~/wmn-dir$ ls /tmp/file*
/tmp/file1.txt

把/etc/passwd复制到当前目录下:

wmn@strudy:~/wmn-dir$ cp /etc/passwd .
wmn@strudy:~/wmn-dir$ ls 
backup  dir2  dir4       file1_backup.txt  file3.txt  passwd
dir1    dir3  file1.txt  file2.txt         file4.txt

把/etc/passwd文件复制到/tmp目录,并且复制名称为passwd_tmp

wmn@strudy:~/wmn-dir$ cp /etc/passwd /tmp/passwd_tmp
wmn@strudy:~/wmn-dir$ ls /tmp/passwd*
/tmp/passwd_tmp

把dir1目录复制到当前目录下,并且改名为dir1_backup:

wmn@strudy:~/wmn-dir$ cp -r  dir1 dir1_backup
wmn@strudy:~/wmn-dir$ tree dir1 dir1_backup/
dir1
└── docs
    └── images
dir1_backup/
└── docs
    └── images

把dir1目录复制到/tmp目录下:

wmn@strudy:~/wmn-dir$ cp -r dir1 /tmp/
wmn@strudy:~/wmn-dir$ tree /tmp/dir1/
/tmp/dir1/
└── docs
    └── images

3 directories, 0 files

复制/etc/passwd文件到当前目录下,并且显示复制过程:

wmn@strudy:~/wmn-dir$ cp -v /etc/passwd .
'/etc/passwd' -> './passwd'
wmn@strudy:~/wmn-dir$ ls
backup  dir1_backup  dir3  file1.txt         file2.txt  file4.txt
dir1    dir2         dir4  file1_backup.txt  file3.txt  passwd

复制/etc/passwd文件到当前目录下,并且覆盖前提示确认:

wmn@strudy:~/wmn-dir$ cp -i /etc/passwd .
cp:是否覆盖'./passwd'? y
3.2.2.2.2 mv移动

mv含义是移动,把文件或目录移动到某个位置,在Linux中重命名也叫移动。

  • 例子:

把file1.txt文件重命名为data.txt:

wmn@strudy:~/wmn-dir$ mv file1.txt data.txt
wmn@strudy:~/wmn-dir$ ls 
backup    dir1         dir2  dir4              file2.txt  file4.txt
data.txt  dir1_backup  dir3  file1_backup.txt  file3.txt  passwd

把data.txt移动到/tmp目录下:

wmn@strudy:~/wmn-dir$ mv data.txt /tmp/
wmn@strudy:~/wmn-dir$ ls /tmp/data*
/tmp/data.txt

把所有的txt结尾的文件移动到/tmp目录下:

wmn@strudy:~/wmn-dir$ mv *txt /tmp/
wmn@strudy:~/wmn-dir$ ls /tmp/*txt
/tmp/data.txt   /tmp/file1_backup.txt  /tmp/file3.txt
/tmp/file1.txt  /tmp/file2.txt         /tmp/file4.txt

把dir1目录移动到/tmp目录下:

wmn@strudy:~/wmn-dir$ mv dir1 /var/tmp/
wmn@strudy:~/wmn-dir$ ls /var/tmp/
dir1

当移动已存在的目录会报错:

wmn@strudy:~/wmn-dir$ mv dir1 /tmp/
mv: 无法进行跨设备的移动:'dir1' 至'/tmp/dir1';无法删除目标: 目录非空
3.2.2.2.3 rm(删除文件或目录)

rm是删除意思,默认只能删除文件,注意使用这个指令,删除掉了无法恢复,建议删除之前要进行备份

  • 常用的选项:
选项 说明
-i 交互式删除:删除前进行确认是否删除
-r 删除目录
-f 强制删除
  • 例子:

删除/tmp/file1.txt文件:

wmn@strudy:~/wmn-dir$ rm /tmp/file1.txt 
wmn@strudy:~/wmn-dir$ ls /tmp/*txt
/tmp/data.txt  /tmp/file1_backup.txt  /tmp/file2.txt  /tmp/file3.txt  /tmp/file4.txt

交互式删除文件:

wmn@strudy:~/wmn-dir$ rm -i /tmp/*.txt
rm:是否删除regular empty file '/tmp/data.txt'? y
rm:是否删除regular empty file '/tmp/file1_backup.txt'? y
rm:是否删除regular empty file '/tmp/file2.txt'? y
rm:是否删除regular empty file '/tmp/file3.txt'? y
rm:是否删除regular empty file '/tmp/file4.txt'? y
wmn@strudy:~/wmn-dir$ ls /tmp/*txt
ls: cannot access '/tmp/*txt': No such file or directory

删除目录:

wmn@strudy:~/wmn-dir$ rm -r /tmp/dir1
wmn@strudy:~/wmn-dir$ ls -d /tmp/dir1
ls: cannot access '/tmp/dir1': No such file or directory

删除多个目录:

wmn@strudy:~/wmn-dir$ rm -r dir2 dir3 dir4 
wmn@strudy:~/wmn-dir$ ls 
backup  dir1_backup  passwd

强制所有的文件和目录: -rf 在生产环境中建议使用,容易把服务器/删除掉,容易跑路。

wmn@strudy:~/wmn-dir$ ls 
backup  dir1_backup  passwd
wmn@strudy:~/wmn-dir$ rm -rf *
wmn@strudy:~/wmn-dir$ ls

删除空目录(rmdir):

wmn@strudy:~/wmn-dir$ ls
dir5
wmn@strudy:~/wmn-dir$ rmdir dir5/
wmn@strudy:~/wmn-dir$ ls 
3.2.2.4 查看文件内容

3.2.2.4.1 cat(一次性显示整个文件)

cat查看文件内容,它是一次性显示整个文件内容,查看大型文件不建议使用,它适合查看小文件。

  • 常用选项参数:
选项参数 含义
-n 查看文件显示行号
  • 例子

查看/etc/hosts文件内容:

[wmn@studry ~]$ cat /etc/hosts
# Loopback entries; do not change.
# For historical reasons, localhost precedes localhost.localdomain:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# See hosts(5) for proper format and other examples:
# 192.168.1.10 foo.example.org foo
# 192.168.1.13 bar.example.org bar

查看/etc/hosts并显示行号:

[wmn@studry ~]$ cat -n /etc/hosts
     1  # Loopback entries; do not change.
     2  # For historical reasons, localhost precedes localhost.localdomain:
     3  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     4  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
     5  # See hosts(5) for proper format and other examples:
     6  # 192.168.1.10 foo.example.org foo
     7  # 192.168.1.13 bar.example.org bar
3.2.2.4.2 less(分页查看大文件内容)

less查看文件内容,它适合大文件内容,比如说查看日志文件内容,less的功能比more的功能更强,所以使用less

  • less视图使用:
按键 作用
空格 向下翻页
b 向上翻页
向下箭头/回车键 向下逐行移动
向上箭头 向上逐行移动
/关键字 向下搜索关键字(按n跳到下一个)
q 退出
3.2.2.4.3 head和tail

head:显示文件前几行内容

head是显示文件前几行内容,默认是显示文件的前10行内容。

  • 选项参数:
参数 说明
-n 行数或者-n行数或者-行数 显示前几行文件内容
  • 例子:

显示/etc/passwd前10行文件内容:

wmn@strudy:~/wmn-dir$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

显示/etc/passwd的前5行文件内容:

wmn@strudy:~/wmn-dir$ head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
wmn@strudy:~/wmn-dir$ head -n5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

tail:显示文件后几行内容

tail是显示文件后几行内容,默认也是后10行文件内容,它可以实时跟踪文件的变化,主要用来查看日志的。

  • 选项参数:
选项参数 含义
-n 行数或-行数或-n行数 显示文件后几行内容
-f 实时追踪文件最新内容,ctrl +c结束追踪
  • 例子:

查看服务器安全日志后10行内容:

1)rockyLinux系统:
wmn@study:~$ sudo tail /var/log/secure
[sudo] wmn 的密码:
Sep  6 14:13:53 study sshd[1369]: Server listening on 0.0.0.0 port 22.
Sep  6 14:13:53 study sshd[1369]: Server listening on :: port 22.
Sep  6 14:13:54 study (systemd)[1437]: pam_unix(systemd-user:session): session opened for user gdm(uid=42) by gdm(uid=0)
Sep  6 14:13:55 study gdm-launch-environment][1409]: pam_unix(gdm-launch-environment:session): session opened for user gdm(uid=42) by (uid=0)
Sep  6 16:29:09 study sshd-session[3340]: Accepted password for wmn from 10.0.0.1 port 64492 ssh2
Sep  6 16:29:09 study (systemd)[3346]: pam_unix(systemd-user:session): session opened for user wmn(uid=1000) by wmn(uid=0)
Sep  6 16:29:10 study sshd-session[3340]: pam_unix(sshd:session): session opened for user wmn(uid=1000) by wmn(uid=0)
Sep  6 16:30:13 study sudo[3402]:     wmn : TTY=pts/0 ; PWD=/home/wmn ; USER=root ; COMMAND=/bin/dnf install -y tree
Sep  6 16:30:13 study sudo[3402]: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
Sep  6 16:30:31 study sudo[3402]: pam_unix(sudo:session): session closed for user root
2)Ubuntu系统:
wmn@strudy:~/wmn-dir$ sudo tail /var/log/auth.log 
[sudo: authenticate] 密码:         
2026-09-06T16:37:35.436673+08:00 strudy sudo: wmn : TTY=/dev/pts/1 ; PWD=/home/wmn/\u{684c}\u{9762} ; USER=root ; COMMAND=/usr/bin/apt install tree
2026-09-06T16:37:43.598355+08:00 strudy sudo: pam_unix(sudo:session): session closed for user root
2026-09-06T16:39:51.872628+08:00 strudy pkexec: pam_unix(polkit-1:session): session opened for user root(uid=0) by wmn(uid=1000)
2026-09-06T16:39:51.877031+08:00 strudy pkexec[7572]: wmn: Executing command [USER=root] [TTY=unknown] [CWD=/home/wmn] [COMMAND=/usr/lib/update-notifier/package-system-locked]
2026-09-06T17:17:01.107600+08:00 strudy CRON[7831]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2026-09-06T17:17:01.121578+08:00 strudy CRON[7831]: pam_unix(cron:session): session closed for user root
2026-09-06T17:30:01.152332+08:00 strudy CRON[7934]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2026-09-06T17:30:01.162349+08:00 strudy CRON[7934]: pam_unix(cron:session): session closed for user root
2026-09-06T18:06:49.759820+08:00 strudy sudo: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
2026-09-06T18:06:49.762278+08:00 strudy sudo: wmn : TTY=/dev/pts/3 ; PWD=/home/wmn/wmn-dir ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log

查看后5行服务器安全日志:

1)Ubuntu系统:
wmn@strudy:~/wmn-dir$ sudo tail -n 5 /var/log/auth.log 
2026-09-06T18:06:49.759820+08:00 strudy sudo: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
2026-09-06T18:06:49.762278+08:00 strudy sudo: wmn : TTY=/dev/pts/3 ; PWD=/home/wmn/wmn-dir ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
2026-09-06T18:06:49.775257+08:00 strudy sudo: pam_unix(sudo:session): session closed for user root
2026-09-06T18:08:28.382217+08:00 strudy sudo: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
2026-09-06T18:08:28.382741+08:00 strudy sudo: wmn : TTY=/dev/pts/3 ; PWD=/home/wmn/wmn-dir ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/auth.log
2)rockyLinux系统:
wmn@study:~$ sudo tail -5  /var/log/secure
Sep  6 16:30:13 study sudo[3402]: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
Sep  6 16:30:31 study sudo[3402]: pam_unix(sudo:session): session closed for user root
Sep  6 18:07:16 study sudo[3658]:     wmn : TTY=pts/0 ; PWD=/home/wmn ; USER=root ; COMMAND=/bin/tail /var/log/secure
Sep  6 18:07:16 study sudo[3658]: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
Sep  6 18:07:16 study sudo[3658]: pam_unix(sudo:session): session closed for user root

实时查看系统的安全日志:

1)ubuntu:
wmn@strudy:~/wmn-dir$ sudo tail -f /var/log/auth.log 
2026-09-06T18:10:35.649617+08:00 strudy sshd-session[8160]: Accepted password for wmn from 10.0.0.1 port 53804 ssh2
2026-09-06T18:10:35.654860+08:00 strudy sshd-session[8160]: pam_unix(sshd:session): session opened for user wmn(uid=1000) by wmn(uid=0)
2026-09-06T18:10:35.669171+08:00 strudy systemd-logind[1524]: New session '14' of user 'wmn' with class 'user' and type 'tty'.
2)rockyLinux:
wmn@study:~$ sudo tail -f /var/log/secure 
Sep  6 18:11:59 study sshd-session[3688]: Accepted password for wmn from 10.0.0.1 port 53917 ssh2
Sep  6 18:11:59 study sshd-session[3688]: pam_unix(sshd:session): session opened for user wmn(uid=1000) by wmn(uid=0)
3.2.2.4.4 grep根据关键字查找文件

grep是Linux系统中的三剑客之一,它是根据关键字进行搜索文件内容。

  • 常用参数:
选项参数 说明
-i 忽略大小写
-C 显示根据匹配关键字的行及上下各几行内容
-c 统计根据关键字匹配的行数
  • 例子:

搜索包含fail的行:

wmn@strudy:~/wmn-dir$ grep "fail" /var/log/auth.log 
2026-09-06T18:22:08.518674+08:00 strudy unix_chkpwd[8326]: password check failed for user (wmn)
2026-09-06T18:22:08.521514+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
wmn@strudy:~/wmn-dir$ grep "fail" /var/log/auth.log 
2026-09-06T18:22:08.518674+08:00 strudy unix_chkpwd[8326]: password check failed for user (wmn)
2026-09-06T18:22:08.521514+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:25.041572+08:00 strudy unix_chkpwd[8328]: password check failed for user (wmn)
2026-09-06T18:22:30.120994+08:00 strudy unix_chkpwd[8334]: password check failed for user (wmn)
2026-09-06T18:22:30.123707+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:32.142762+08:00 strudy unix_chkpwd[8335]: password check failed for user (wmn)
2026-09-06T18:22:34.508912+08:00 strudy unix_chkpwd[8336]: password check failed for user (wmn)

搜索远程登录服务器成功的日志:

wmn@strudy:~/wmn-dir$ grep -i "accepted" /var/log/auth.log 
2026-09-05T12:06:14.196261+08:00 strudy sshd-session[5907]: Accepted password for wmn from 10.0.0.1 port 58489 ssh2
2026-09-05T12:10:45.585713+08:00 strudy sshd-session[6116]: Accepted password for wmn from 10.0.0.1 port 59098 ssh2
2026-09-05T12:16:26.682227+08:00 strudy sshd-session[6280]: Accepted password for wmn from 10.0.0.1 port 59547 ssh2
2026-09-06T16:03:47.101874+08:00 strudy sshd-session[6753]: Accepted password for wmn from 10.0.0.1 port 62817 ssh2
2026-09-06T18:10:35.649617+08:00 strudy sshd-session[8160]: Accepted password for wmn from 10.0.0.1 port 53804 ssh2

显示匹配行的上下3行:

wmn@strudy:~/wmn-dir$ grep -C 3 -i "fail" /var/log/auth.log 
2026-09-05T11:54:22.910584+08:00 strudy systemd-logind[1441]: Session c1 logged out. Waiting for processes to exit.
2026-09-05T11:54:22.914136+08:00 strudy systemd-logind[1441]: Removed session c1.
2026-09-05T11:54:33.231921+08:00 strudy systemd-logind[1441]: Removed session 1.
2026-09-05T12:00:30.558291+08:00 strudy dbus-daemon[1386]: [system] Failed to activate service 'org.bluez': timed out (service_start_timeout=25000ms)
2026-09-05T12:01:23.173641+08:00 strudy sudo: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=1000)
2026-09-05T12:01:23.174809+08:00 strudy sudo: wmn : TTY=/dev/pts/2 ; PWD=/home/wmn/\u{684c}\u{9762} ; USER=root ; COMMAND=/usr/bin/apt install openssh-server
2026-09-05T12:01:37.374834+08:00 strudy sudo: pam_unix(sudo:session): session closed for user root
--
2026-09-06T14:42:50.453638+08:00 strudy systemd-logind[1524]: Session c1 logged out. Waiting for processes to exit.
2026-09-06T14:42:50.460627+08:00 strudy systemd-logind[1524]: Removed session c1.
2026-09-06T14:43:00.869770+08:00 strudy systemd-logind[1524]: Removed session 1.
2026-09-06T14:45:38.375766+08:00 strudy dbus-daemon[1451]: [system] Failed to activate service 'org.bluez': timed out (service_start_timeout=25000ms)
2026-09-06T15:17:01.917129+08:00 strudy CRON[6077]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2026-09-06T15:17:01.927511+08:00 strudy CRON[6077]: pam_unix(cron:session): session closed for user root
2026-09-06T15:30:01.959497+08:00 strudy CRON[6134]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
--
2026-09-06T18:10:57.486197+08:00 strudy sudo: pam_unix(sudo:session): session closed for user root
2026-09-06T18:17:01.211230+08:00 strudy CRON[8308]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2026-09-06T18:17:01.219662+08:00 strudy CRON[8308]: pam_unix(cron:session): session closed for user root
2026-09-06T18:22:08.518674+08:00 strudy unix_chkpwd[8326]: password check failed for user (wmn)
2026-09-06T18:22:08.521514+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:25.041572+08:00 strudy unix_chkpwd[8328]: password check failed for user (wmn)
2026-09-06T18:22:30.120994+08:00 strudy unix_chkpwd[8334]: password check failed for user (wmn)
2026-09-06T18:22:30.123707+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:32.142762+08:00 strudy unix_chkpwd[8335]: password check failed for user (wmn)
2026-09-06T18:22:34.508912+08:00 strudy unix_chkpwd[8336]: password check failed for user (wmn)

统计匹配行数:

wmn@strudy:~/wmn-dir$ grep -c "fail" /var/log/auth.log 
7
wmn@strudy:~/wmn-dir$ grep -c  -i "accepted" /var/log/auth.log 
5

实战中常用的组合:从最近安全日志中找登录失败的日志:

wmn@strudy:~/wmn-dir$ tail -100 /var/log/auth.log |grep "fail"
2026-09-06T18:22:08.518674+08:00 strudy unix_chkpwd[8326]: password check failed for user (wmn)
2026-09-06T18:22:08.521514+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:25.041572+08:00 strudy unix_chkpwd[8328]: password check failed for user (wmn)
2026-09-06T18:22:30.120994+08:00 strudy unix_chkpwd[8334]: password check failed for user (wmn)
2026-09-06T18:22:30.123707+08:00 strudy sudo: pam_unix(sudo:auth): authentication failure; logname=wmn uid=1000 euid=0 tty=/dev/pts/5 ruser=wmn rhost=  user=wmn
2026-09-06T18:22:32.142762+08:00 strudy unix_chkpwd[8335]: password check failed for user (wmn)
2026-09-06T18:22:34.508912+08:00 strudy unix_chkpwd[8336]: password check failed for user (wmn)

3.2.2.3 辅助命令

3.2.2.3.1 type(查找命令的类型)

命令分类:

命令分为内置命令、外部程序、别名、函数、关键字等。

内置命令: 它执行比较快,当运行shell时候就把命令加入到了内存中。

外部程序:外部程序命令是需要安装的,执行外部程序命令先去从PATH环境变量中查找命令是否存在,如果存在就加入内存中进行执行,执行速度比较慢。

别名alias: 就是给命令提了个另外一个名字,执行速度比较快。

查找设置别名方式:

1)查找别名:
wmn@strudy:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
2)添加别名:
临时添加:
wmn@strudy:~$ alias w='ls -l /etc/passwd'
wmn@strudy:~$ w
-rw-r--r-- 1 root root 2818 Sep  5 12:01 /etc/passwd

查看命令类型:

查看内置命令:

wmn@srudy:~$ type cd 
cd is a shell builtin

查看外部程序指令:

wmn@srudy:~$ type -a  passwd
passwd is /usr/bin/passwd
passwd is /bin/passwd

查看别名:

wmn@srudy:~$ type ls 
ls is aliased to `ls --color=auto'

查看关键字指令:

wmn@srudy:~$ type for 
for is a shell keyword
3.2.2.3.2 file(查看文件真实类型)

文件类型:

在Linux中文件不依赖扩展名来区分文件类型的,主要还是看文件真实情况。

文件类型分为: 文本文件、目录文件、二进制文件、块设备文件、字符设备文件等。

  • 例子:

查看文本文件类型:

wmn@srudy:~$ file /etc/passwd
/etc/passwd: ASCII text

查看二进制文件:

wmn@study:~$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=26a58fc999a5e6368b74d9a33da93e996ff5800f, for GNU/Linux 3.2.0, stripped

查看目录属性:

wmn@study:~$ file /usr
/usr: directory

查看块设备属性:

wmn@study:~$ file /dev/sda
/dev/sda: block special (8/0)

查看字符设备属性:

wmn@study:~$ file /dev/tty
/dev/tty: character special (5/0)
3.2.2.3.3 which(查看命令所在的位置)

查看cd命令所在的路径:

wmn@study:~$ which cd 
/usr/bin/cd

3.2.2.4 文件类型与inode

3.2.2.4.1 使用ls查看到文件类型

使用ls -l 查看的第一个字符是文件类型字符,分别是:

首字符 文件类型 示例
- 普通文件类型 /etc/passwd
d 目录文件类型 /etc/
l 软链接文件类型 system-release -> rocky-release
b 块设备文件类型 /dev/sda
c 字符设备文件类型 /dev/tty
3.2.2.4.2 inode

inode是文件的身份证,链接文件名与块数据的主要桥梁,主要记录文件的元数据(文件大小、权限、修改时间、数据块的位置)。

inode有inode编号的,通过ls -i 查看到文件的inode编号,inode编号和文件名是存放在上一级目录中,注意:inode号在同一分区里是唯一的。

查看文件内容原理:

  • 文件名和文件inode编号在上一级目录中记录,并且形成对应关系。
  • 当我们查看或修改文件内容,通过文件名与inode编号找到对应的inode数据。
  • 通过查看inode的数据,确认是否有权限进行文件进行操作。
  • 当有权限操作,通过块指针,查找到对应的数据进行对文件进行操作。

image-20260907165451208

查看inode号:

wmn@study:~$ ls -i wmn.txt 
145 wmn.txt
wmn@study:~$ ls -il wmn.txt 
145 -rw-r--r--. 1 wmn wmn 0 Sep  7 16:59 wmn.txt
#说明:
3.2.4.3 硬链接与软链接
3.2.4.3.1 硬链接

image-20260907171427746

硬链接的特点:

  • 硬链接是创建不同文件名,但是使用同一个数据块文件内容的文件,硬链接文件的inode号相同。
  • 删除一个文件,另外文件不受影响。
  • 修改一个文件内容,其他文件内容也跟着一起使用。
  • 硬链接不能是目录,不能跨分区做硬链接。
  • 硬链接文件不占用空间,只有一个文件内容占用空间。

硬链接操作:

1)创建硬链接:
wmn@study:~$ ln wmn.txt wmn_backup.txt 
wmn@study:~$ ls -li *.txt
145 -rw-r--r--. 2 wmn wmn 0 Sep  7 16:59 wmn.txt
145 -rw-r--r--. 2 wmn wmn 0 Sep  7 16:59 wmn_backup.txt
                这个是硬链接数量 
2)修改文件内容:
wmn@study:~$ vim wmn.txt 
wmn
222
333
3)查看另一个文件内容是否修改: 也跟着修改
wmn@study:~$ cat wmn_backup.txt 
wmn
222
333
4)删除一个,另一个会不会受影响:另外一个文件不受影响。
wmn@study:~$ rm wmn_backup.txt 
wmn@study:~$ ls *.txt
wmn.txt
wmn@study:~$ cat wmn.txt 
wmn
222
333
5)是否能对目录做硬链接:
wmn@study:~$ ln wmn_dir wmn_dir2
ln: wmn_dir: hard link not allowed for directory
6)是否能跨分区做硬链接:
wmn@study:~$ sudo ln wmn.txt /wmn.txt
ln: failed to create hard link '/wmn.txt' => 'wmn.txt': Invalid cross-device link
3.2.4.3.2 软链接

软链接相当于Windows系统中的快捷方式,在生产环境中软链接链接的源文件要用绝对路径。

软链接原理:

  • 当我们创建软链接,重新创建个文件,inode号和文件名都和原文件不一样,是一个新的文件。
  • 但是软链接文件的数据块内容存放的是原文件路径。
  • 当我们访问软链接文件内容,直接跳到原文件数据块中,读取原文件内容。

image-20260907173139699

软链接例子:

1)创建软链接:
wmn@study:~$ ln -s /home/wmn/wmn.txt wmn_backup.txt
wmn@study:~$ ls -l *.txt
-rw-r--r--. 2 wmn wmn 12 Sep  7 17:17 wmn.txt
lrwxrwxrwx. 1 wmn wmn 17 Sep  7 17:39 wmn_backup.txt -> /home/wmn/wmn.txt
2)创建个目录软链接:
wmn@study:~$ ln -s /home/wmn/wmn_dir wmn_dir_backup
wmn@study:~$ ls -ld wmn_dir*
drwxr-xr-x. 2 wmn wmn  6 Sep  7 17:20 wmn_dir
lrwxrwxrwx. 1 wmn wmn 17 Sep  7 17:40 wmn_dir_backup -> /home/wmn/wmn_dir
3)跨分区创建软链接:
wmn@study:~$ sudo ln -s /home/wmn/wmn_dir /wmn_dir_backup
[sudo] password for wmn: 
wmn@study:~$ sudo ls -ld /wmn_dir_backup
lrwxrwxrwx. 1 root root 17 Sep  7 17:42 /wmn_dir_backup -> /home/wmn/wmn_dir
4)删除原文件是否影响软链接:
wmn@study:~$ rm wmn.txt 
wmn@study:~$ ls -l wmn_backup.txt 
lrwxrwxrwx. 1 wmn wmn 17 Sep  7 17:39 wmn_backup.txt -> /home/wmn/wmn.txt
wmn@study:~$ cat wmn_backup.txt 
cat: wmn_backup.txt: No such file or directory
3.2.4.3.3 硬链接与软链接对比
对比 软链接 硬链接
inode 和源文件不同inode号 同一个inode号,同一个数据块
删除原文件 会受到影响 不受影响
目录操作 可以给目录做链接 不能给目录做链接
跨分区 可以跨分区做链接 不可以跨分区做链接
修改内容 修改内容跟着改变 修改内容跟着改变
用途 主要用于配置文件备份,防止误删除 主要用于版本切换、日志统一路径

3.2.2.5 压缩与归档

Linux指令一般用于对文件目录进行归档和压缩,常用的选项:

选项 说明
c 创建归档
v 显示创建的信息
f 指定文件目录名
x 解包
z 以gzip压缩形式进行压缩文件目录
j 以bzip2压缩形式进行压缩文件目录
J 以xz压缩形式进行压缩文件目录
a 根据压缩后缀名,自动选择使用压缩形式
-C 解压到指定目录
-t 查看归档的内容

压缩形式对比:

压缩形式 压缩比率 压缩速度 用途
gzip 中等 快 主要用于日志文件归档使用
bzip2 高 慢 不建议使用
xz 较高 较慢 主要用于备份使用,因为压缩比率比较高

归档实例:

把/etc目录归档到当前目录下:

wmn@study:~$ sudo tar cf etc.tar /etc
[sudo] password for wmn: 
tar: Removing leading `/' from member names
wmn@study:~$ ls *.tar
etc.tar
wmn@study:~$ ls  -l *.tar
-rw-r--r--. 1 root root 27146240 Sep  7 18:02 etc.tar

查看归档内容:

wmn@study:~$ tar tf etc.tar

解包归档的内容:

wmn@study:~$ tar xf etc.tar 
wmn@study:~$ ls etc
DIR_COLORS               crypto-policies       group           lvm                       profile                 subgid
DIR_COLORS.lightbgcolor  crypttab              group-          machine-id                profile.d               subgid-

解包到指定的位置:

wmn@study:~$ tar xf etc.tar -C /tmp/
wmn@study:~$ ls /tmp/etc/
DIR_COLORS               crypto-policies       group           lvm                       profile                 subgid
DIR_COLORS.lightbgcolor  crypttab              group-          machine-id                profile.d               subgid-

压缩实例:

使用gzip方式进行压缩:

wmn@strudy:~$ sudo tar zcf etc_gz.tar.gz /etc
tar: 从成员名中删除开头的“/”

wmn@strudy:~$ ls -lh etc_gz.tar.gz 
-rw-r--r-- 1 root root 1.3M Sep  7 18:10 etc_gz.tar.gz

使用bzip2方式进行压缩:

需要安装bzip2安装包:
wmn@strudy:~$ sudo apt install bzip2 -y
进行压缩:
wmn@strudy:~$ sudo tar cjf etc_bzip2.tar.bz2 /etc
tar: 从成员名中删除开头的“/”
wmn@strudy:~$ ls -lh etc_bzip2.tar.bz2 
-rw-r--r-- 1 root root 1.1M Sep  7 18:12 etc_bzip2.tar.bz2

使用xz的方式进行压缩:

wmn@strudy:~$ sudo tar cJf etc_xz.tar.xz /etc
tar: 从成员名中删除开头的“/”
wmn@strudy:~$ ls -lh etc_xz.tar.xz 
-rw-r--r-- 1 root root 894K Sep  7 18:13 etc_xz.tar.xz

根据后缀名自动选择压缩的方式:

wmn@strudy:~/yasuo$ sudo tar caf etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
wmn@strudy:~/yasuo$ ls -lh etc.tar.gz 
-rw-r--r-- 1 root root 1.3M Sep  7 18:18 etc.tar.gz
wmn@strudy:~/yasuo$ sudo tar caf etc.tar.bz2 /etc
tar: 从成员名中删除开头的“/”
wmn@strudy:~/yasuo$ ls -lh etc.tar.bz2 
-rw-r--r-- 1 root root 1.1M Sep  7 18:18 etc.tar.bz2
wmn@strudy:~/yasuo$ sudo tar caf etc.tar.xz /etc
tar: 从成员名中删除开头的“/”
wmn@strudy:~/yasuo$ ls -lh etc.tar.xz
-rw-r--r-- 1 root root 894K Sep  7 18:18 etc.tar.xz

解压:不管压缩什么方式,直接使用xf就可解压:

wmn@strudy:~/yasuo$ tar xf etc.tar.bz2 
wmn@strudy:~/yasuo$ ls
etc  etc.tar.bz2  etc.tar.gz  etc.tar.xz

wmn@strudy:~/yasuo$ tar xf etc.tar.xz -C /tmp/
wmn@strudy:~/yasuo$ ls /tmp/
etc

wmn@strudy:~/yasuo$ tar xf etc.tar.xz -C /var/tmp/
wmn@strudy:~/yasuo$ ls /var/tmp/
etc

3.2.2.6 vim使用

vim是vi编辑器的升级版,主要用来对文件的修改等使用。vim分为三种模式,分别是:command(命令模式)、编辑模式(插入模式)、扩展命令模式。默认的是命令模式。

image-20260907202342163

在命令模式常用操作

按键 作用
i 进入插入模式,在光标所在的位置进行编辑
a 进入插入模式,光标所在的位置后移一位进行编辑
o 进入插入模式,向下插入一行进行编辑
: 进入特殊插入模式
G 跳转到最后一行
gg 跳转到第一行
dd 删除(剪切)光标所在的行,3dd:删除光标所在的下两行,包括光标所在的行
yy 复制光标所在的行,3yy:复制光标所在下两行,包括光标所在的行
p 复制
$ 跳转到行尾
0 跳转到行首
u 撤到上一次操作
/ 搜索关键字,按n搜索下一个,按回车,跳到搜索的位置

扩展命令模式操作

按键 说明
: set nu 设置行号
:set nonu 取消设置行号
:w 保存
:q 退出
:wq 保存并退出
! 强制。wq! :强制保存并退出,q!: 强制退出,x!:强制保存并退出
x 保存并且退出
:set cuc 高亮光标所在的列,用于格式内容对齐
:set cul 高亮光标所在的行,不建议使用
:%s#新内容#替换的内容#g 全局替换。5,10s#新内容#替换内容#g:5到10行进行替换。5,10s#新内容#替换内容#:替换5到10行的首字符

3.2.2.7 若依实战项目:

创建标准化目录:

wmn@strudy:~/yasuo$ cd /opt/
wmn@strudy:/opt$ ls
wmn@strudy:/opt$ sudo mkdir -p ruoyi/{backend,frontend,logs,config,backup}
[sudo: authenticate] 密码:         
wmn@strudy:/opt$ ls
ruoyi
wmn@strudy:/opt$ tree ruoyi
ruoyi
├── backend
├── backup
├── config
├── frontend
└── logs

6 directories, 0 files

创建配置文件模板:

wmn@strudy:/opt$ sudo vim ruoyi/config/application.yaml
wmn@strudy:/opt$ cat ruoyi/config/application.yaml
spring:
  application:
    name: ruoyi-admin
  profiles:
    active: druid

server:
  port: 8080

硬链接保护配置文件:

wmn@strudy:/opt$ sudo ln /opt/ruoyi/config/application.yaml /opt/ruoyi/config/application_backup.yaml
wmn@strudy:/opt$ ls -li /opt/ruoyi/config/application*
3282990 -rw-r--r-- 2 root root 97 Sep  7 21:03 /opt/ruoyi/config/application.yaml
3282990 -rw-r--r-- 2 root root 97 Sep  7 21:03 /opt/ruoyi/config/application_backup.yaml

软链接统一日志路径

wmn@strudy:/opt$ sudo ln -s /opt/ruoyi/logs /var/log/ruoyi
wmn@strudy:/opt$ ls -l /var/log/ruoyi
lrwxrwxrwx 1 root root 15 Sep  7 21:06 /var/log/ruoyi -> /opt/ruoyi/logs

压缩归档日志

wmn@strudy:/opt$ sudo tar zcf /opt/ruoyi/backup/ruoyi-logs-`date +%F`.tar.gz ruoyi/logs
wmn@strudy:/opt$ ls -l /opt/ruoyi/backup/
total 4
-rw-r--r-- 1 root root 117 Sep  7 21:08 ruoyi-logs-2026-09-07.tar.gz
wmn@strudy:/opt$ sudo tar tf /opt/ruoyi/backup/ruoyi-logs-2026-09-07.tar.gz 
ruoyi/logs/

四:用户与用户组管理及权限管理

4.1 用户与用户组管理

为什么用用户管理:

如果大家都是要root用户(超级管理员)进行操作系统,对系统都有超级操作权限,1. 当某个人无意间删除东西,无法追溯到哪个人操作的。2. 再者使用root用户运行程序,这个程序对操作系统有超级权限,很容易攻破系统,造成数据泄露风险。所以我们要使用用户进行管理。

4.1.0 用户与组的配置文件

用户与组有三个配置文件,分别是:

  • /etc/passwd: 用于存放用户的信息。如用户名,用户ID,家目录,shell
  • /etc/shadow: 用于存放密码及密码策略信息。如用户名,加密的密码,创建密码的天数,密码策略
  • /etc/group: 用于存放组信息。如:用户组名,用户组ID,用户组成员

三个配置文件的关系:

image-20260909161005655

4.1.0.1 /etc/passwd文件内容说明

wmn@study:~$ head -5 /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/sbin/nologin
daemon:x:2:2:daemon:/sbin:/usr/sbin/nologin
adm:x:3:4:adm:/var/adm:/usr/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/usr/sbin/nologin
字段 含义 例子
1 用户的名称 root
2 密码占位符 x
3 用户的ID(UID) 0
4 用户主组的ID 0
5 描述信息 Super User
6 用户的家目录 /root、/home/wmn
7 用户的shell,登录用户第一个执行的程序 /bin/bash

用户的ID(UID)分配规则:

用户的ID 类型 说明
0 超级用户,如root 超级管理员
1-999 系统用户 用于启动进程的用户,不能登录,使用的shell是nologin或者是false
1000+ 普通用户 可以登录

4.1.0.2 /etc/shadow文件内容说明

wmn@study:~$ sudo tail -5 /etc/shadow
[sudo] wmn 的密码:
sshd:!:20701::::::
chrony:!:20701::::::
dnsmasq:!:20701::::::
tcpdump:!:20701::::::
wmn:$y$j9T$gNID7zqPQPG6mClmfN4g5Z4L$kVlZ9gsZxqRdAfaBn2GMXwj1akqgeSw6IXxgP9VmqFD::0:99999:7:::
字段 含义
1 用户名
2 加密密码,它是有三部分组成,$y$是加密使用的算法(在rocky9和ubuntu使用的sha-512($6$),rocky10使用的是yescrypt)。j9T$gNID7zqPQPG6mClmfN4g5Z4L 是加密使用的salt。加密的密码。 !是不允许登录
3 最后修改密码的天数(从1970-1-1开始算的天数)
4 密码的最小年龄,如果5,5天之内不允许修改密码
5 密码的最大年龄,如果是30,30天之后进行修改密码
6 过期之前多少天进行警告,如果7是过期前7进行警告修改密码
7 过期后锁定的天数
8 账号过期时间
9 保留字段

4.1.0.3 /etc/group文件内容说明

wmn@strudy:~$ sudo tail -5 /etc/group
gnome-initial-setup:x:976:
gdm:x:975:
lxd:x:114:wmn
wmn:x:1000:
gamemode:x:974:
字段 含义
1 组名
2 组密码占位符
3 组ID(GID)
4 组成员,记录是附加组成员,用逗号隔开,主成员默认不记录

组ID(GID)分配规则:

ID号 说明
0 超级用户组
1-999 系统用户组
1000+ 普通用户组

4.1.1用户与用户组管理命令

4.1.1.0 用户组管理命令:

4.1.1.0.1 groupadd创建组

创建用户组,默认是从1000开始,创建用户时想要加入组,组必须存在。

  • 参数:
参数 说明
g 指定Gid
r 创建系统用户组,GID从1-999
  • 例子:

创建一个op组:

wmn@strudy:~$ sudo groupadd op
wmn@strudy:~$ sudo groupadd devops
wmn@strudy:~$ tail -3 /etc/group
ops:x:973:
op:x:1001:
devops:x:1002:

创建一个系统组:

wmn@strudy:~$ sudo groupadd -r ops
wmn@strudy:~$ tail -1 /etc/group
ops:x:973:

创建一个指定GID为3000的用户组:

wmn@studry:~$ sudo groupadd -g 3000 dba
wmn@strudy:~$ tail -1 /etc/group
dba:x:3000:
4.1.1.0.2 groupmod修改组

groupmod修改组,他是修改的是/etc/group文件信息。

  • 参数:
选项 说明
-n [组新名] [组旧名] 修改组的名字
-g 修改组的ID(GID)
  • 例子:

把ops组名修改成opss:

wmn@strudy:~$ sudo groupmod -n opss ops
wmn@strudy:~$ grep "opss" /etc/group
opss:x:973:

修改opss组ID为3000:

wmn@strudy:~$ sudo groupmod -g 3001 opss
wmn@strudy:~$ !grep
grep "opss" /etc/group
opss:x:3001:
4.1.1.0.3 groupdel删除组

注意事项:删除用户的时候,默认和主组一块删除,首先确认删除的组是否有附加成员,如果有成员的组,删除用户不会把主组删除掉,再使用groupdel直接把组删除掉。

  • 例子:

删除用户的主组:

1)当删除有用户的主组,会报错,报错如下:
wmn@strudy:~$ sudo groupdel wmn2
groupdel:不能移除用户“wmn2”的主组
2) 删除用户的时候,默认会把主组删除掉:
wmn@studry:~$ id wmn2
uid=1001(wmn2) gid=3002(wmn2) 组=3002(wmn2)
wmn@studry:~$ tail -1 /etc/group
wmn2:x:3002:
wmn@studry:~$ sudo userdel wmn2
wmn@studry:~$ tail -1 /etc/group
opss:x:3001:
3)删除有成员的组:
当有成员组,删除用户不会把用户主组删除,只删用户,当把成员删除掉,才能删除组。
查看用户和组信息:
wmn@studry:~$ id wmn1
uid=1001(wmn1) gid=3002(wmn1) 组=3002(wmn1)
wmn@studry:~$ id wmn2
uid=1002(wmn2) gid=3003(wmn2) 组=3003(wmn2),3002(wmn1)
wmn@studry:~$ tail -2 /etc/group
wmn1:x:3002:wmn2
wmn2:x:3003:
删除wmn1用户,查看组会不会删除:
wmn@studry:~$ sudo userdel wmn1
userdel:组“wmn1”没有移除,因为它包含其它成员。
wmn@studry:~$ tail -2 /etc/group
wmn1:x:3002:wmn2
wmn2:x:3003:
wmn@studry:~$ id wmn1
id: "wmn1": 无此用户
这时wmn1组可以删除:
wmn@studry:~$ sudo groupdel wmn1
wmn@studry:~$ tail -2 /etc/group
opss:x:3001:
wmn2:x:3003:

删除没有用户主组和附加成员的组:

1)查看用户组信息:
wmn@strudy:~$ tail -3 /etc/group
devops:x:1002:
dba:x:3000:
opss:x:3001:
2)删除opss组:
wmn@strudy:~$ sudo groupdel opss
wmn@strudy:~$ !tail
tail -3 /etc/group
op:x:1001:
devops:x:1002:
dba:x:3000:
4.1.1.0.4 groups(查看用户所属组)
  • 例子:

查看wmn3用户所属组:

wmn@strudy:~$ groups wmn3
wmn3 : sudo
可以使用id进行查看:
wmn@strudy:~$ id wmn3
uid=1002(wmn3) gid=27(sudo) groups=27(sudo)
4.1.1.0.5 getent:查看组有哪些附加成员:
  • 例子:

查看wheel组有哪些附加成员:

wmn@study:~$ getent group wheel
wheel:x:10:wmn,wmn3

4.1.1.1 用户管理命令

在创建用户的时候,如果不指定主组,默认会创建和用户同名的主组。

如果把用户添加到附加组中,需要确认附加组是否存在,不存在则会报错。

创建用户后,会有一个主组,0个或多个附加组。主组是用户的默认组,附加组是用户附加的权限,在创建文件,默认所属组就是用户的主组。

4.1.1.1.0 useradd创建用户
  • 常用的选项参数
选项 说明 备注
-m 创建家目录 rocky非必须,自动会创建。Ubuntu必须
-s 指定shell rocky非必须,自动指定/bin/bash。Ubuntu不指定,默认使用/bin/sh
-M 不创建家目录 一般用于系统用户,用来管理程序进程
-u 指定用户的ID,UID
-g 指定主组 不加这个参数,默认是创建和用户同名的组。不建议使用
-G 指定附加组,加入附加组中 如果个,用逗号分开
-r 创建系统用户 它不创建家目录
-d 指定家目录的位置 通常要与-m配合使用
-c 添加描述信息
  • 例子:

创建的用户:

1)rocky默认是创建家目录及指定shell是/bin/bash
wmn@study:~$ sudo useradd wmn520
[sudo] wmn 的密码:
wmn@study:~$ ls /home/wmn520 -d 
/home/wmn520
wmn@study:~$ grep "wmn520" /etc/passwd
wmn520:x:1002:1002::/home/wmn520:/bin/bash
2)Ubuntu:
wmn@strudy:~$ sudo useradd wmn520
[sudo: authenticate] 密码:         
wmn@strudy:~$ ls /home/wmn520
ls: cannot access '/home/wmn520': No such file or directory
wmn@strudy:~$ grep "wmn520" /etc/passwd
wmn520:x:1003:1003::/home/wmn520:/bin/sh
wmn@strudy:~$ sudo su - wmn520
$ 
3)Ubuntu创建用户及指定shell是/bin/bash
wmn@strudy:~$ sudo useradd wmn521 -m -s /bin/bash
wmn@strudy:~$ ls /home/wmn521 -d 
/home/wmn521
wmn@strudy:~$ grep "wmn521" /etc/passwd
wmn521:x:1004:1004::/home/wmn521:/bin/bash
wmn@strudy:~$ sudo su - wmn521
wmn521@strudy:~$ 

指定UID:

wmn@study:~$ sudo useradd wmn521 -u 3001
[sudo] wmn 的密码:

wmn@study:~$ id wmn521
uid=3001(wmn521) gid=3001(wmn521) 组=3001(wmn521)

指定主组(不建议使用):

创建用户前需要确认主组是否创建,不存在则会报错:
wmn@study:~$ sudo groupadd wmn523
wmn@study:~$ sudo useradd wmn522 -g wmn523
wmn@study:~$ id wmn522
uid=3002(wmn522) gid=3002(wmn523) 组=3002(wmn523)

指定附加组:

1)查看组:
wmn@study:~$ tail -3 /etc/group
devops:x:2000:
ops:x:2001:
dba:x:2003:
2)创建用户:
wmn@study:~$ sudo useradd wmn524 -G devops,dba,ops
wmn@study:~$ id wmn524
uid=3003(wmn524) gid=3003(wmn524) 组=3003(wmn524),2000(devops),2001(ops),2003(dba)
wmn@study:~$ sudo groups wmn524
wmn524 : wmn524 devops ops dba

创建系统用户,不允许登录:

wmn@study:~$ sudo useradd wmn525 -r -s /sbin/nologin
wmn@study:~$ grep "wmn525" /etc/passwd
wmn525:x:983:981::/home/wmn525:/sbin/nologin
wmn@study:~$ sudo su - wmn525
su: warning: cannot change directory to /home/wmn525: 没有那个文件或目录
This account is currently not available.
wmn@study:~$ ls /home/wmn525
ls: 无法访问 '/home/wmn525': 没有那个文件或目录

创建用户,并且指定家目录:

wmn@study:~$ sudo useradd wmn526 -d /opt/wmn525
wmn@study:~$ ls /opt/wmn525 -ld 
drwx------. 3 wmn526 wmn526 78  9月 9日 17:56 /opt/wmn525
wmn@study:~$ grep "wmn526" /etc/passwd
wmn526:x:3004:3004::/opt/wmn  525:/bin/bash
4.1.1.1.1 usermod(修改用户)
  • 选项参数
选项参数 说明
-aG 把用户添加到附加组中
-g 修改用户的主组
-L 锁定用户,不让用户登录
-U 解锁用户
-u 修改用户的id
-s 修改用户的shell
-m 修改家目录时,创建家目录,与-d一起使用
-l [新的名称] [旧的名称] 修改用户的名称
-d 修改用户的家目录
  • 例子:

修改shell:

wmn@study:~$ sudo usermod  wmn520 -s /sbin/reboot
[sudo] wmn 的密码:
wmn@study:~$ grep "wmn520" /etc/passwd
wmn520:x:1002:1002::/home/wmn520:/sbin/reboot

把用户添加到附加组中:

wmn@study:~$ sudo usermod wmn520 -aG ops
wmn@study:~$ id wmn520
uid=1002(wmn520) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

修改用户的家目录:

wmn@study:~$ sudo usermod wmn520 -m -d /opt/wmn520 

wmn@study:~$ sudo su -
root@study:~# cd /opt/
root@study:/opt# ls
wmn520 

修改用户名:

root@study:/opt# usermod -l wmn5200 wmn520
root@study:/opt# id wmn5200
uid=1002(wmn5200) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

修改用户的ID:

root@study:/opt# usermod wmn5200 -u 1003
root@study:/opt# id wmn5200
uid=1003(wmn5200) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

锁定与解锁用户:

1)锁定用户: 说明,如果没有密码,重新设置密码(root用户重新设置密码)会把锁定的用户自动解锁
root@study:/opt# usermod wmn5200 -L
root@study:/opt# grep "wmn5200" /etc/shadow
wmn5200:!:20705:0:99999:7:::
!是不让用户登录。
2)解锁用户:
root@study:/opt# usermod wmn5200 -U
说明:如果没有密码的用户,解锁需要设置密码才能解锁。

修改用的组主(不建议使用)

root@study:/opt# usermod wmn5200 -g dba
root@study:/opt# id wmn5200
uid=1003(wmn5200) gid=2003(dba) 组=2003(dba),2001(ops)
4.1.1.2 userdel(删除用户)

userdel默认不删除家目录,使用选项参数-r是删除家目录。

  • 选项参数:
选项 说明
-r 删除用户时,把家目录一同删除
  • 实例:

创建两个用户用于测试:

root@study:/opt# useradd user01
root@study:/opt# useradd user02
root@study:/opt# tail -2 /etc/passwd
user01:x:3005:3005::/home/user01:/bin/bash
user02:x:3006:3006::/home/user02:/bin/bash

删除user01用户,不删除家目录和邮箱文件:再次创建user01用户会使用同名的家目录。

root@study:/opt# userdel user01

root@study:/opt# ls /home/user01 -ld
drwx------. 3 3005 3005 78  9月 9日 20:49 /home/user01
root@study:/opt# ls -ld /var/spool/mail/user01
-rw-rw----. 1 3005 mail 0  9月 9日 20:49 /var/spool/mail/user01

删除user02用户,删除家目录和邮箱文件:

root@study:/opt# userdel user02 -r 
root@study:/opt# 
root@study:/opt# ls -dl /home/user02
ls: 无法访问 '/home/user02': 没有那个文件或目录
root@study:/opt# ls -dl /var/spool/mail/user02
ls: 无法访问 '/var/spool/mail/user02': 没有那个文件或目录
4.1.1.3 passwd 修改用户的密码

使用passwd修改密码,如果root及wheel或sudo组下的用户进行修改密码是没有限制,如果普通用户修改密码需要老密码,新密码需要满足复杂性要求。

普通用户无法给自己设置密码,只能修改密码。

  • 例子:

使用root给普通用户user01修改密码:

root@study:/home# passwd user01
新的密码: 
重新输入新的密码: 
passwd:已成功更新密码

普通用户修改自己设置密码:

root@study:/home# su user01 
user01@study:/home$ passwd
当前的密码: 
新的密码:   #需要符合密码的复杂性要求
无效的密码: 密码少于 8 个字符
1passwd:身份验证令牌操作错误
passwd:密码未更改

非交互式设置密码:

1)rocky设置密码:
方法一: 注意使用这种方式需要符合密码复杂性
root@study:/home# echo "123456" |passwd --stdin user01
无效的密码: 密码少于 8 个字符
root@study:/home# echo "wo211314" |passwd --stdin user01
方法二:
root@study:/home# echo "user01:123456"|chpasswd
2)Ubuntu修改密码: 需要符合密码复杂性
wmn@strudy:~$ echo "user01:wo211314"|sudo chpasswd
wmn@strudy:~$ echo "user01:123456"|sudo chpasswd
无效的密码: 密码少于 8 个字符
4.1.1.4 gpasswd组成员管理

gpasswd可以把用户添加到某个组中,也可以把用户从某个组中进行删除。

  • 常用的参数:
选项参数 说明
-a 把用户添加到某个组中
-d 把用户从某组中删除
  • 实例:

把user01用户添加到devops组中:

wmn@study:~$ sudo gpasswd -a user01 devops
正在将用户“user01”加入到“devops”组中
wmn@study:~$ sudo id user01
uid=3005(user01) gid=3005(user01) 组=3005(user01),2000(devops)

把user01用户从devops组中删除:

wmn@study:~$ sudo gpasswd devops -d user01
正在将用户“user01”从“devops”组中删除
wmn@study:~$ id user01
uid=3005(user01) gid=3005(user01) 组=3005(user01)

4.2 su切换用户与sudo命令提权

4.2.1 su 切换用户

su是用来切换用户,su [用户]:进行切换用户,它的环境变量及家目录或配置文件信息没有切换过去,还是使用前一个用户的。su - 是切换用户并且把环境变量及家目录、配置文件信息一并切换过去。

su 与su -对比:

对比项 su wmn su - wmn
切换用户 切换 切换
环境变量 不切换,使用上一个用户的 切换
家目录 不切换,在上一个用户的家目录 切换
配置文件 不加载 加载.bashrc .bash_profile等文件
  • 例子:

切换用户,保留了上一个用户的家目录:

wmn@study:~$ sudo su user01
[sudo] wmn 的密码:
user01@study:/home/wmn$ pwd
/home/wmn
user01@study:/home/wmn$ echo $PATH
/home/user01/.local/bin:/home/user01/bin:/sbin:/bin:/usr/sbin:/usr/bin

切换用户,不保留了上一个用户的家目录:

wmn@study:~$ sudo su - user01
上一次登录: 2026年09月09日 星期三 21:36:26 CST 于 pts/3
user01@study:~$ pwd
/home/user01
user01@study:~$ echo $PATH
/home/user01/.local/bin:/home/user01/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

使用su不切换到用户,执行命令:

wmn@study:~$ sudo su - -c "ls -la /"
总计 24
dr-xr-xr-x.  18 root root  257  9月 7日 17:42 .
dr-xr-xr-x.  18 root root  257  9月 7日 17:42 ..
dr-xr-xr-x.   2 root root    6 2025年 4月 2日 afs
lrwxrwxrwx.   1 root root    7 2025年 4月 2日 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096  9月 5日 08:51 boot
drwxr-xr-x.  20 root root 3460  9月 9日 14:59 dev
drwxr-xr-x. 134 root root 8192  9月 9日 21:20 etc
drwxr-xr-x.  10 root root  128  9月 9日 21:02 home
lrwxrwxrwx.   1 root root    7 2025年 4月 2日 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 2025年 4月 2日 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 2025年 4月 2日 media
drwxr-xr-x.   3 root root   18  9月 5日 08:20 mnt
drwxr-xr-x.   3 root root   20  9月 9日 20:29 opt
dr-xr-xr-x. 404 root root    0  9月 9日 14:59 proc
dr-xr-x---.   4 root root  140  9月 5日 08:50 root
drwxr-xr-x.  49 root root 1280  9月 9日 15:22 run
lrwxrwxrwx.   1 root root    8 2025年 4月 2日 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 2025年 4月 2日 srv
dr-xr-xr-x.  13 root root    0  9月 9日 14:59 sys
drwxrwxrwt.  27 root root 4096  9月 9日 21:41 tmp
drwxr-xr-x.  12 root root  144  9月 5日 08:17 usr
drwxr-xr-x.  20 root root 4096  9月 5日 08:50 var
lrwxrwxrwx.   1 root root   17  9月 7日 17:42 wmn_dir_backup -> /home/wmn/wmn_dir

切换root:

wmn@study:~$ sudo su -
上一次登录: 2026年09月09日 星期三 21:41:37 CST 于 pts/3

4.2.2 sudo提权

sudo是用来临时提权的,临时提权执行某个命令的,并且把执行的命令记录到/var/log/secure(rocky操作系统)或/var/log/auth.log(ubuntu操作系统)日志中。

  • Ubuntu与rockyLinux默认配置对比
发行版 管理员 默认sudoer配置
rockyLinux wheel %wheel ALL=(ALL) ALL
Ubuntu sudo %sudo ALL=(ALL:ALL) ALL
  • visudo配置说明
root@study:~# visudo
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
#%wheel        ALL=(ALL)       NOPASSWD: ALL
字段 说明
1 指定使用的用户组或用户,%是用来指定用户组
2 第一个ALL是指所有主机,第二个是不管什么身份
3 ALL是可以执行所有命令。NOPASSWD:ALL:不输入密码进行确认,执行所有命令
  • sudo命令参数:
选项 参数
-l 列出sudo权限配置
-U 指定用户,一般是root用户使用的,普通用户不需要
  • visudo配置实例

给用户添加sudo权限,不管使用任何主机,不管以什么用户身份,可以执行所有指令:

user01 ALL=(ALL) ALL

给组添加sudo权限,不管使用任何主机,不管以什么用户身份,可以执行所有指令:

%devops         ALL=(ALL)       ALL

限制只能执行特定的命令:只能重启NGINX,只能查看NGINX的状态:

user02 ALL=(ALL)  NOPASSWD: /usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx  
#说明注意: 命令要写全路径,NOPASSWD:在执行指令的时候不输入密码进行确认。
如果user02 ALL=(ALL)  NOPASSWD: /usr/bin/systemctl  #这个意思是,user02使用sudo可以执行systemctl指令

限制某个组只能管理MySQL:

%dba   ALL=(ALL)  NOPASSWD: /usr/bin/systemctl restart mysql,/usr/bin/systemctl status mysql

禁止执行某些命令:

user03 ALL=(ALL)  NOPASSWD: !/usr/bin/passwd root,!/usr/bin/su -
  • sudo进行验证:

验证前先安装NGINX:

root@study:~# dnf install  nginx -y 

进行验证:

1)root用户查看user02的sudo权限
root@study:~# sudo -l -U user02
匹配 study 上 user02 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 user02 可以在 study 上运行以下命令:
    (ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
2)进入user02查看sudo的权限:
user02@study:~$ sudo -l
匹配 study 上 user02 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 user02 可以在 study 上运行以下命令:
    (ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
3)user02执行指令:
user02@study:~$ sudo systemctl restart nginx

4)开一个窗口,查看日志:
Sep  9 22:30:49 study sudo[7042]:  user02 : TTY=pts/4 ; PWD=/home/user02 ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx
Sep  9 22:30:49 study sudo[7042]: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=3006)
Sep  9 22:30:49 study sudo[7042]: pam_unix(sudo:session): session closed for user root

4.3 实战案例:创建标准化用户

4.3.1 需求

为后台管理系统创建用户体系:

组名 组成员 权限需求
devops ruoyi-admin 可以重启NGINX
dba ruoyi-dba 可以管理MySQL
developer ruoyi-dev 可以查看日志

4.3.2 实施步骤

创建用户组:

1)进行创建
[root@studry ~]# groupadd devops
[root@studry ~]# groupadd dba
[root@studry ~]# groupadd developer
2)查看是否创建成功:
[root@studry ~]# tail -3 /etc/group
devops:x:1001:
dba:x:1002:
developer:x:1003:

创建用户组成员:

[root@studry ~]# useradd ruoyi-admin -G devops 
[root@studry ~]# id ruoyi-admin
uid=1001(ruoyi-admin) gid=1004(ruoyi-admin) 组=1004(ruoyi-admin),1001(devops)
[root@studry ~]# useradd ruoyi-dba -G dba
[root@studry ~]# id ruoyi-dba
uid=1002(ruoyi-dba) gid=1005(ruoyi-dba) 组=1005(ruoyi-dba),1002(dba)
[root@studry ~]# useradd ruoyi-dev -G developer
[root@studry ~]# id ruoyi-dev
uid=1003(ruoyi-dev) gid=1006(ruoyi-dev) 组=1006(ruoyi-dev),1003(developer)

给用户设置密码:

[root@studry ~]# echo "ruoyi-admin:wo211314.."|chpasswd
[root@studry ~]# echo "ruoyi-dba:wo211314.."|chpasswd
[root@studry ~]# echo "ruoyi-dev:wo211314.."|chpasswd

权限设置:

[root@studry ~]# vi /etc/sudoers.d/ruoyi
%devops  ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart nginx
%dba     ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart mysql,/usr/bin/systemctl status mysql,/usr/bin/systemctl stop mysql
%developer ALL=(ALL) NOPASSWD:/usr/bin/tail   /opt/ruoyi/logs/*,/usr/bin/cat /opt/ruoyi/logs/*

五:Linux基本权限

在Linux系统中,每个文件或目录都有一个属主和属组、其他人权限的概念。这三类组成了一套独立的权限,也就是UGO模型。

5.1 文件基本权限表示方法

查看文件权限:

wmn@study:~$ ll etc.tar 
-rw-r--r--. 1 root root 27146240  9月 7日 18:02 etc.tar

权限的类型:

权限的符号 对应的数字表示 对文件的含义 对目录的含义
r 4 只有读取文件权限,如cat、tail等查看文件权限 查看目录下的内容,比如ls等
w 2 可以编辑文件内容权限,如vim等 可以在目录中创建、删除、修改、重命名、等权限
x 1 可以运行文件(程序或者脚本) 可以切换到目录下,如cd

权限的表示

字符表示:

  • rw-前三位是文件或目录的所属主
  • r--中三位是文件或目录的所属组
  • --中三位是文件或目录的其他人

数字表示: 764

  • 将每组有权限的看成二进制1,没有权限的是0,在转换十进制

rwx-rw--r--:

rwx=111=7

rw-=110=6

r--=100=4

5.2 修改文件权限的命令

5.2.1 chown(修改文件或目录的所属主和所属组)

  • 参数:
选项参数 说明
-R 修改目录本身及递归修改目录下内容的权限
  • 实例:

创建用户和组:

root@study:~# groupadd qa
root@study:~# groupadd op
root@study:~# groupadd devops
root@study:~# useradd tianyun
root@study:~# useradd jinghui
root@study:~# 
root@study:~# touch  file1.txt
root@study:~# mkdir dir1
root@study:~# touch dir1/file{1..10}

chown命令:

1)把file1.txt文件所属主修改成tianyun:
root@study:~# chown tianyun file1.txt 
root@study:~# ls -l file1.txt
-rw-r--r--. 1 tianyun root 0  9月10日 07:38 file1.txt
2)把file1.txt文件属组修改成op:
root@study:~# chown :op file1.txt
root@study:~# ls -l file1.txt
-rw-r--r--. 1 tianyun op 0  9月10日 07:38 file1.txt
3)把file1.txt文件所属主修改成jinghui,属组修改成devops
root@study:~# ls -l file1.txt
-rw-r--r--. 1 jinghui devops 0  9月10日 07:38 file1.txt
4)递归修改dir1目录下所属主和属组:
root@study:~# chown -R jinghui:op dir1
root@study:~# ls -ld dir1
drwxr-xr-x. 2 jinghui op 137  9月10日 07:38 dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file9

5.2.2 chgrp:修改文件属组

  • 选项参数:
选项参数 说明
-R 递归修改目录及目录下的内容所属组,不加这个参数是修改本目录
  • 例子:

将文件file1.txt属组修改成qa:

1)查看文件属性
root@study:~# ls -l file1.txt 
-rw-r--r--. 1 jinghui devops 0  9月10日 07:38 file1.txt
2)进行修改:
root@study:~# chgrp qa file1.txt 
root@study:~# ls -l file1.txt 
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

将目录dir1属组修改成qa

1)查看目录属性
root@study:~# ls -ld dir1
drwxr-xr-x. 2 jinghui op 137  9月10日 07:38 dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file9
2)进行修改:
root@study:~# chgrp -R  qa dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file9

5.2.3 chmod(修改文件的权限)

修改文件的权限由所属主和root用户才能修改,chmod修改文件权限有两种模式,一种是字符模式,另一种是数字模式。

字符模式修改权限:

  • 操作对象:
操作对象 说明
u 属主
g 属组
o 其他人
a 所有人
  • 操作符
操作符 说明
+ 添加权限
- 移除权限
= 设置精确权限
  • 权限
权限 说明
r 只读权限
w 写,修改权限
x 可执行权限
  • 例子

给file1.txt属主添加可执行权限:

root@study:~# chmod u+x file1.txt 
root@study:~# ls -l file1.txt 
-rwxr--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt属组移除可读权限:

root@study:~# chmod g-r file1.txt
root@study:~# ls -l file1.txt 
-rwx---r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt其他人设置可读可写权限:

root@study:~# chmod o=rw file1.txt 
root@study:~# ls -l file1.txt
-rwx---rw-. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt所有人设置可读可写可执行权限:

root@study:~# chmod a=rwx file1.txt 
root@study:~# ls -l file1.txt
-rwxrwxrwx. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt所属组和属主设置可读可写其他人设置成可读权限:

root@study:~# chmod ug=rw,o=x file1.txt 
root@study:~# ls -l file1.txt
-rw-rw---x. 1 jinghui qa 0  9月10日 07:38 file1.txt

root@studry:~# chmod ug=rw,o=r file1.txt
root@studry:~# ls -l file1.txt 
-rw-rw-r--. 1 jinghui qa 0  9月10日 21:35 file1.txt

数字模式:

直接使用三位八进制数字设置权限:

  • 例子

给file1.txt设置成755权限

root@study:~# chmod 755 file1.txt
root@study:~# ls -l file1.txt
-rwxr-xr-x. 1 jinghui qa 0  9月10日 07:38 file1.txt
755是:rwx-r-x-r-x权限

给file1.txt设置成644权限

root@study:~# chmod  644 file1.txt
root@study:~# ls -l file1.txt
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt
644是:rw--r---r--权限

给file1.txt设置成700权限

root@study:~# chmod 700 file1.txt
root@study:~# ls -ls file1.txt
0 -rwx------. 1 jinghui qa 0  9月10日 07:38 file1.txt
700是:rwx--------权限

给file1.txt设置成600权限

root@study:~# chmod 600 file1.txt 
root@study:~# ls -l file1.txt 
-rw-------. 1 jinghui qa 0  9月10日 07:38 file1.txt
700是:rw---------权限

5.3 umask权限掩码

umask是决定创建新文件和新目录的默认权限。

  • 在ubuntu服务器中,root用户默认的umask是0022,普通用户umask是0002。
  • 在rockyLinux中,root用户和普通用户默认umask是0022。
  • 文件默认起始值是666,创建文件默认权限是666-022=644,除了Ubuntu普通用户新创建的文件默认的权限是666-002=664
  • 目录起始值是777,在rocky服务器所有用户和ubuntu的root用户新创建目录默认值是777-022=755,Ubuntu普通用户新创建目录值是775。

查看当前的umask:

1)rockyLinux:
root@study:~# umask
0022
root@study:~# su - wmn
上一次登录: 2026年09月10日 星期四 08:13:23 CST 于 pts/1
wmn@study:~$ umask
0022
2)ubuntu用户:
root@strudy:~# umask
0022
root@strudy:~# su - wmn
wmn@strudy:~$ umask
0002

修改umask:

1)临时修改了,rocky和ubuntu只能root用户才能修改root用户的,其他用户不能修改:
root@strudy:~# umask 0027
root@strudy:~# umask
0027
查看创建的文件及目录:
root@strudy:~# touch file1.txt
root@strudy:~# ls -l file1.txt
-rw-r----- 1 root root 0 Sep 10 08:29 file1.txt
root@strudy:~# mkdir dir01
root@strudy:~# ls -ld dir01
drwxr-x--- 2 root root 4096 Sep 10 08:29 dir01
2)永久修改:
wmn@study:~$ vim .bashrc 
umask 0027
wmn@study:~$ source .bashrc
wmn@study:~$ source .bashrc
wmn@study:~$ umask
0027

5.4 实战案例:

5.4.1 需求:

为若依项目配置合理的权限:

目录文件 属主 属组 权限 说明
/opt/ruoyi ruoyi ruoyi 755 应用根目录
/opt/ruoyi/config ruoyi ruoyi 750 配置文件(组内可以访问)
/opt/ruoyi/logs ruoyi ruoyi 755 日志目录
/opt/ruoyi/backend/ruoyi-admin.jar ruoyi ruoyi 644 jar包

5.4.2 实施步骤

1)创建用户和组:
wmn@study:~$ sudo useradd ruoyi
[sudo] wmn 的密码:
wmn@study:~$ id ruoyi
uid=3010(ruoyi) gid=3013(ruoyi) 组=3013(ruoyi)
2)创建目录结构:
wmn@study:~$ sudo mkdir -p  /opt/ruoyi/{config,logs,backend}
wmn@study:~$ sudo touch /opt/ruoyi/backend/ruoyi-admin.jar
wmn@study:~$ sudo tree /opt/ruoyi
/opt/ruoyi
├── backend
│   └── ruoyi-admin.jar
├── config
└── logs
3)配置属组和属主:
wmn@study:~$ sudo chown -R ruoyi:ruoyi /opt/ruoyi
wmn@study:~$ ls -ld /opt/ruoyi
drwxr-x---. 5 ruoyi ruoyi 47  9月10日 08:44 /opt/ruoyi
4)配置权限:
wmn@study:~$ sudo chmod 755 /opt/ruoyi
wmn@study:~$ ls -ld /opt/ruoyi
drwxr-xr-x. 5 ruoyi ruoyi 47  9月10日 08:44 /opt/ruoyi

wmn@study:~$ sudo chmod 750 /opt/ruoyi/config
wmn@study:~$ ls -ld /opt/ruoyi/config
drwxr-x---. 2 ruoyi ruoyi 6  9月10日 08:44 /opt/ruoyi/config

wmn@study:~$ sudo chmod 755 /opt/ruoyi/logs
wmn@study:~$ ls -ld /opt/ruoyi/logs
drwxr-xr-x. 2 ruoyi ruoyi 6  9月10日 08:44 /opt/ruoyi/logs

wmn@study:~$ sudo chmod 644 /opt/ruoyi/backend/ruoyi-admin.jar
wmn@study:~$ sudo ls -ld /opt/ruoyi/backend/ruoyi-admin.jar
-rw-r--r--. 1 ruoyi ruoyi 0  9月10日 08:46 /opt/ruoyi/backend/ruoyi-admin.jar

5.5 删除文件要有目录权限

  • 说明

因为目录存放的是文件名和inode号对应关系,当我们删除文件的时候,是删除的文件名和inode号对应的关系,而块数据和inode处于待释放状态。所以想要删除文件需要目录的可读可写权限。

  • 案例:

实验一目录有权限,文件权限是000

1)创建目录及授权:
root@study:~# mkdir -p /opt/data
root@study:~# echo "wmn12345" >>/opt/data/file1.txt
root@study:~# chmod 777 /opt/data
root@study:~# chmod 000 /opt/data/file1.txt 
root@study:~# ls -ld /opt/data /opt/data/file1.txt 
drwxrwxrwx. 2 root root 23  9月10日 08:59 /opt/data
----------. 1 root root  9  9月10日 08:59 /opt/data/file1.txt
2)进行测试:
root@study:~# su - jinghui 
jinghui@study:~$ ls -l /opt/data/file1.txt 
----------. 1 root root 9  9月10日 08:59 /opt/data/file1.txt
jinghui@study:~$ touch /opt/data/jinghui.txt
jinghui@study:~$ echo "12345" >> /opt/data/jinghui.txt
jinghui@study:~$ ls -ld /opt/data/*
----------. 1 root    root    9  9月10日 08:59 /opt/data/file1.txt
-rw-r--r--. 1 jinghui jinghui 6  9月10日 09:01 /opt/data/jinghui.txt
jinghui@study:~$ rm -rf  /opt/data/*
jinghui@study:~$ ls /opt/data/ -l
总计 0

实验二:目录无权限,文件777

1)设置目录权限及文件创建及权限:
root@study:~# mkdir -p /opt/data2
root@study:~# touch /opt/data2/file2.txt
root@study:~# chmod 000 /opt/data2
root@study:~# chmod 777 /opt/data2/file2.txt
root@study:~# ls -dl /opt/data2/file2.txt /opt/data2
d---------. 2 root root 23  9月10日 09:04 /opt/data2
-rwxrwxrwx. 1 root root  0  9月10日 09:04 /opt/data2/file2.txt
2)进行测试:
root@study:~# mkdir -p /opt/data2
root@study:~# touch /opt/data2/file2.txt
root@study:~# chmod 000 /opt/data2
root@study:~# chmod 777 /opt/data2/file2.txt
root@study:~# ls -dl /opt/data2/file2.txt /opt/data2
d---------. 2 root root 23  9月10日 09:04 /opt/data2
-rwxrwxrwx. 1 root root  0  9月10日 09:04 /opt/data2/file2.txt

posted on 2026-09-12 16:56  wangmengnan  阅读(16)  评论(0)    收藏  举报

导航