【3、Linux文件系统及其管理】

1. linux文件系统层次结构(重要 记忆)

1.1 文件目录结构组成

Linux的所有文件都存储在文件系统中,文件系统的层次结构是树根在顶部,树枝在下方,由根延伸出目录和子目录分支的颠倒树
在这里插入图片描述

文件描述
boot引导文件,系统启动过程所需的文件
dev设备文件,保存linux系统设备文件信息,所有硬件设备(如磁盘、USB、硬盘,网卡)的虚拟文件接口
etc系统配置文件,cat /etc/ssh/sshd_config,MySQL–etc–config
home所有普通用户的家目录,不是当前普通用户的主目录,当前user1用户的主目录是/home/user1
root/root超级用户的主目录,单独的
run运行时数据,存放系统运行进程ID文件和锁定文件,程序退出/重启后清空
bin用户命令,存放普通用户可用的普通命令和实用程序(如ls, cp等)
sbin仅root用户可用的系统管理命令(如fdisk, iptables)
tmp临时文件,所有用户可访问,10天内未曾访问、更改或修改的文件将自动从 该目录中删除。/var/tmp目录也是一个临时目录,其中的文件如果在30天内未 曾访问、更改或修改过,将被自动删除。
usr系统和用户的默认软件安装目录共享的(包括文件)和只读程序数据。/usr目录中的重要子目录 包括下列命令:·/usr/bin:用户命令,·/usr/sbin:系统管理命令,·/usr/local:本地自定义软件
var保存频繁更新/改的数据,可变数据如数据 库、缓存目录、日志文件、打印机后台处理文档和网站内容

1.2 重要目录及命令解释

(1)/根目录

/作用1:根目录,linux所有文件的顶级目录;
/作用2:目录分隔符,/tmp

[kiosk@foundation0 ~]$ ssh root@servera
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboar
Last login: Mon Sep 29 22:28:40 2025 from 172.25.250.250
[root@servera ~]# cd /
[root@servera /]# pwd
/
[root@servera /]# ll -a

ll长选项解析(可区分文件还是目录或其他)

total 36(并不是某个文件的名字,而是说明 当前目录中所有文件的“磁盘块占用总数,不是字节(磁盘是按块分配的,磁盘占用=数据块 + inode + 目录项等元数据)”。这个目录下的所有文件和子目录,总共占用了 36 个磁盘块(block)。在 Linux 中,一个块(block)通常是 1KB(也可能是 4KB,取决于文件系统)。所以 total 36 大约等于 36KB 磁盘空间。只是文件元数据占用的空间,不等于文件大小的总和:ls -l 输出里每个文件有一个 大小(比如 4096 字节),那 total 不直接等于这些大小加起来,文件大小(比如 4096)是逻辑大小,表示文件内容占多少字节。磁盘块占用是实际磁盘存储的开销。即使文件大小是 0,也需要一个 inode 和目录项,仍会占用磁盘块。

文件大小是指文件内容真正需要多少字节存储,这些内容会被存放在磁盘数据块 (data block) 中。Linux 文件系统(ext4, xfs 等)按块分配磁盘空间,每块通常 4KB(ext4 默认)。如果文件大小 < 块大小,仍然会占用整块。如果文件大小 > 块大小,会占用多个连续块(分块)。

如何区分 文件 和 目录: ll=ls -l,第一个字符对应的含义,file也可显示文件类型。
[文件类型][权限位][SELinux标记],长度一般是 10 个字符,第一位 文件类型,接下来的 9 位权限位(3 组三组:属主/属组/其他人,分成 3 组,每组 3 位:rwx rwx rwx),最后一位 “.” 或 “+” 表示 ELinux 安全上下文或 ACL。
举例:d r-x r-x r-x .:

字符描述
-普通文件
d目录 (directory)
l符号链接 (symlink)
c字符设备 (char device)
b块设备 (block device)
p命名管道 (FIFO)
s套接字 (socket)
字符描述
r可读 (read)
w可写 (write)
x可执行 / 进入目录 (execute)
-没有该权限
/根目录内容

dr-xr-xr-x. 19 root root 246 May 23 2022 .
dr-xr-xr-x. 19 root root 246 May 23 2022 …
dr-xr-xr-x. 2 root root 6 Aug 9 2021 afs
lrwxrwxrwx. 1 root root 7 Aug 9 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 23 2022 boot
drwxr-xr-x. 18 root root 3220 Oct 2 22:39 dev
drwx------. 3 root root 16384 Dec 31 1969 efi
drwxr-xr-x. 105 root root 8192 Oct 2 22:39 etc
drwxr-xr-x. 4 root root 35 May 18 2022 home
lrwxrwxrwx. 1 root root 7 Aug 9 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Aug 9 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Aug 9 2021 media
drwxr-xr-x. 2 root root 6 Aug 9 2021 mnt
drwxr-xr-x. 2 root root 6 Aug 9 2021 opt
dr-xr-xr-x. 195 root root 0 Oct 2 22:39 proc
dr-xr-x—. 3 root root 140 Sep 29 05:17 root
drwxr-xr-x. 37 root root 1160 Oct 2 22:39 run
lrwxrwxrwx. 1 root root 8 Aug 9 2021 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Aug 9 2021 srv
dr-xr-xr-x. 13 root root 0 Oct 2 22:39 sys
drwxrwxrwt. 9 root root 4096 Oct 2 22:40 tmp
drwxr-xr-x. 12 root root 144 May 3 2022 usr
drwxr-xr-x. 20 root root 279 May 18 2022 var

(2)boot目录及dev

bios加电以后,查找到引导磁盘,读取引导的文件系统就是boot,bios查找boot,boot一般是单独的一个分区,

[root@servera /]# df -h(显示磁盘分区的使用情况,参数 -h 表示 人类可读(human-readable),会把容量显示成 KB/MB/GB)
Filesystem 哪个文件系统/分区) Size Used Avail Use% Mounted on(挂载点/目录)
devtmpfs 844M 0 844M 0% /dev(是 Linux 的设备文件系统(动态生成 /dev 下的设备节))
tmpfs 888M 0 888M 0% /dev/shm(tmpfs是内存中的临时文件系统,/dev/shm用来做 共享内存,进程间通信)
tmpfs 355M 9.5M 346M 3% /run(/run 目录,存放运行时数据(PID 文件、socket 等,也是基于内存的临时文件系统)
/dev/vda4 9.4G 1.7G 7.7G 18% /(/是根分区,设备 /dev/vda4 表示虚拟磁盘的第 4 个分区)
/dev/vda3 495M 160M 335M 33% /boot (/boot 分区,存放内核和引导程序。)
/dev/vda2 200M 7.0M 193M 4% /boot/efi(EFI 系统分区,UEFI 引导用,用来存放启动所需的 EFI 文件)
tmpfs 178M 0 178M 0% /run/user/0(用户 root 的运行时数据存放目录,当 root 登录时,会在 /run/user/0 下创建也是临时的,系统重启会清空。)
总结:devtmpfs、tmpfs → 内存型文件系统,重启后数据会消失。/dev/vdaX → 真正的磁盘分区,存储系统数据。/ → 根分区,存大部分文件。/boot、/boot/efi → 系统启动相关分区。/run、/dev/shm → 临时运行时空间。

区分设备文件、分区、目录、挂载点
名称描述
设备文件在 Linux 里,一切都是文件,包括硬件,/dev/xxx 目录下的东西就是设备文件,用来代表真实的硬件。例如:/dev/sda → 整个硬盘;/dev/sda1 → 硬盘第 1 个分区;/dev/vda2 → 虚拟磁盘的第 2 个分区;它不是普通的文本文件,而是一个接口,操作它就是在操作真实的硬件。
分区把一个物理硬盘切成几块区域,每一块就是分区。分区相当于一个“独立的小硬盘”,可以格式化成文件系统(ext4, xfs, fat32 等)。例如:/dev/sda → 整个磁盘,/dev/sda1、/dev/sda2 → 分区,分区必须 格式化(mkfs.ext4 / mkfs.xfs)之后,才能存放文件。
目录Linux 没有 C: D: E: 盘符的概念。所有东西都放在一个 树形目录 里(从 / 根开始)。分区/设备要用之前,必须“挂载”到一个目录上,这个目录就叫 挂载点。比如:/dev/sda1 → /boot,/dev/sda2 → /,/dev/sda3 → /home,这样进入 /home,其实就是在访问 /dev/sda3 这个分区。
挂载点就是日常看到的文件夹,比如 /home、/etc、/boot/efi。目录本身只是一个逻辑路径。挂载点本质上就是“选择一个目录”,把设备的内容贴到这个目录下

[root@servera /]# lsblk(list block devices,列出系统里的 块设备,硬盘、分区、U 盘等存储设备)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
├─vda3 252:3 0 500M 0 part /boot
└─vda4 252:4 0 9.3G 0 part /
vdb 252:16 0 5G 0 disk
vdc 252:32 0 5G 0 disk
vdd 252:48 0 5G 0 disk(vdb、vdc、vdd:三块 空的虚拟磁盘,每个 5GB。目前没有分区,也没有挂载点(MOUNTPOINTS 是空的)。如果要用它们,需要先 fdisk 分区,再 mkfs 格式化,然后 mount 到某个目录。)

(3)home目录

参考基础Linux访问命令行的2.区分:普通用户与超级用户提示符

[root@servera /]# cd home
[root@servera home]# ll
total 0
drwx------. 4 devops devops 111 Sep 29 05:03 devops
drwx------. 3 student student 77 May 18 2022 student
[root@servera home]# useradd test(添加一个test用户)
[root@servera home]# ll
total 0
drwx------. 4 devops devops 111 Sep 29 05:03 devops
drwx------. 3 student student 77 May 18 2022 student
drwx------. 2 test test 62 Oct 3 07:11 test
[root@servera home]# su - devops
Last login: Mon Sep 29 04:51:24 EDT 2025 on pts/0
[devops@servera ~]$ ll
total 0
[devops@servera ~]$ ll -a
total 16
drwx------. 4 devops devops 111 Sep 29 05:03 .
drwxr-xr-x. 5 root root 47 Oct 3 07:11 …
drwx------. 3 devops devops 17 May 18 2022 .ansible
-rw-------. 1 devops devops 71 Sep 29 05:03 .bash_history
-rw-r–r–. 1 devops devops 18 Nov 5 2021 .bash_logout
-rw-r–r–. 1 devops devops 141 Nov 5 2021 .bash_profile
-rw-r–r–. 1 devops devops 492 Nov 5 2021 .bashrc
drwx------. 2 devops devops 25 Sep 29 05:01 .ssh
[devops@servera ~]$ ll /home/student/
ls: cannot open directory ‘/home/student/’: Permission denied(普通无法查看其他用户数据,root用户可以看任何人的数据)
[devops@servera ~]$ ll /home/
total 0
drwx------. 4 devops devops 111 Sep 29 05:03 devops(rwx------所有者拥有完全权限,组内用户和组外用户没有任何权限)
drwx------. 3 student student 77 May 18 2022 student
drwx------. 2 test test 62 Oct 3 07:11 test

(4)bin目录

/bin(根目录下的bin是软连接,虚的)---->/us目录r/bin(挪)在这里插入图片描述

(5)usr目录

usr目录下的内容:

[root@servera bin]# cd
[root@servera ~]# cd /usr
[root@servera usr]# ll
total 140
dr-xr-xr-x. 2 root root 28672 May 18 2022 bin
drwxr-xr-x. 2 root root 6 Aug 9 2021 games
drwxr-xr-x. 3 root root 23 May 3 2022 include
dr-xr-xr-x. 34 root root 4096 May 18 2022 lib
dr-xr-xr-x. 53 root root 32768 May 18 2022 lib64
drwxr-xr-x. 34 root root 4096 May 18 2022 libexec
drwxr-xr-x. 12 root root 131 May 3 2022 local
dr-xr-xr-x. 2 root root 16384 May 18 2022 sbin
drwxr-xr-x. 105 root root 4096 May 18 2022 share
drwxr-xr-x. 4 root root 34 May 3 2022 src
lrwxrwxrwx. 1 root root 10 Aug 9 2021 tmp -> …/var/tmp

1.3 符号链接部分(docker不理解 日后解释)

[kiosk@foundation0 ~]$ ll /proc/$$/ns
total 0
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 cgroup -> ‘cgroup:[4026531835]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 ipc -> ‘ipc:[4026531839]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 mnt -> ‘mnt:[4026531840]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 net -> ‘net:[4026531992]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 pid -> ‘pid:[4026531836]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 pid_for_children -> ‘pid:[4026531836]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 time -> ‘time:[4026531834]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 time_for_children -> ‘time:[4026531834]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 user -> ‘user:[4026531837]’
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 uts -> ‘uts:[4026531838]’

ll /proc/$$/ns:是 Linux 命名空间(namespace) 的信息

/proc/$$/ :当前shell进程的/proc目录,两个美元符是当前进程ID
/proc//ns/ → 存放该进程所处的各种 namespace 的符号链接

每一行是一个命名空间的符号链接lrwxrwxrwx),指向类似 ‘xxx:[数字]’ 的对象。
cgroup 这个链接指向的是一个命名空间对象,类型是 cgroup,ID 是 4026531835。

描述
l表示这是一个 符号链接(link) 文件,而不是普通文件
rwxrwxrwx权限,说明任何人都能读写执行(符号链接的权限一般不重要)
.表示有 SELinux 上下文
1硬链接数(对符号链接通常是 1)
kiosk kiosk文件的属主和属组(这里是用户 kiosk)
0文件大小(符号链接大小一般显示为 0)
Oct 3 10:07文件最后修改时间
cgroup文件名(即 namespace 类型)
-> ‘cgroup:[4026531835]’符号链接指向它

这些代表进程所在的不同 命名空间类型:
cgroup:控制组命名空间,用于资源限制和隔离。
ipc:进程间通信命名空间(System V IPC、POSIX message queues)。
mnt:挂载命名空间(隔离挂载点)。
net:网络命名空间(隔离网卡、IP、路由表等)。
pid:进程 ID 命名空间(容器里常见 PID 隔离)。
pid_for_children:子进程使用的 PID 命名空间。
time / time_for_children:时间命名空间(隔离时钟、CLOCK_MONOTONIC 等)。
user:用户命名空间(隔离 UID/GID)。
uts:UTS 命名空间(隔离主机名和域名)。

后面的数字(如 [4026531835])是 namespace 的唯一标识符(inode 号)。
如果两个进程的 /proc//ns/xxx 链接指向同一个 [数字],说明它们处于同一个命名空间。

📌为什么要有这些?(不太理解,链接、命名空间,容器,疑点)
Linux 命名空间是 容器技术(Docker, Kubernetes, LXC) 的核心机制,用来提供隔离:让容器里的进程有自己的 网络、挂载、PID、用户、主机名,互不干扰。它和 cgroups 一起构成了 Linux 容器的基础。
👉 举个例子:
你在 Docker 容器里运行 ll /proc/$$/ns,会看到和宿主机不一样的 PID/NET namespace ID。这就是容器“看起来像独立机器”的原因。

2. 通过名称指定文件

2.1绝对路径和相对路径

文件和目录的路径是其在文件系统中的位置,会遍历多个子目录,用/分隔,目录也称文件夹,包含其他文件和子目录。

绝对路径:文件在文件系统中的确切位置,他是从根/目录开始,遍历的每个子目录。
相对路径:不以/根开头的路径,从当前工作目录到达该文件所需路径

Linux 文件系统(包括ext4、XFS、GFS2和 GlusterFS) 是区分大小写的。在同一目录中创建FileCase.txt和 filecase.txt文件将生成两个不同的文件。

[root@servera ~]# cd /
[root@servera /]# cd /var/log
[root@servera log]# ll
total 1876
drwx------. 2 root root 23 May 18 2022 audit

[root@servera log]# cat sshd_config
cat: sshd_config: No such file or directory
[root@servera log]# cat /etc/ssh/sshd_config
(任何位置可以访问绝对路径对应的有访问权限的文件,不能访问子目录之外相对路径对应的文件)
$OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
… …
[root@servera log]#cd …
[root@servera var]# cat log/messages
(/var/log/messages,可以访问当前工作目录的子目录,这是相对路径)
… …
[root@servera var]# cat /varlog/messages(这是绝对路径,也行)
… …

2.2 浏览文件系统的路径–pwd,ls,cd,touch,df

pwd:显示当前工作目录的绝对路径
ls:列出指定目录的目录内容,如果未指定目录,则列出当前工作目录的内容。
ll=ls -l
ls 后可接选项:-l长列表格式,-a显示隐藏文件(a=all,显示所有文件),-R递归方式,包含所有子目录内容。
以.开头的文件是隐藏文件,加上-a选项才能看到。

ls -Rl / | wc -l(|管道,wc统计,-l按行)(来自前一篇文章:linux访问命令行----wc)

[root@servera var]# pwd
/var
[root@servera var]# ls -R
.:
account adm cache crash db empty ftp games kerberos lib local lock log mail nis opt preserve run spool tmp yp
./account:
pacct
./adm:
./cache:
app-info bpf cloud-what dnf fwupd insights krb5rcache ldconfig libX11 man private realmd
… …

cd:可更改/切换工作目录,如果没有指定任何参数(目录),将切换到家(主)目录( 回到当前用户的主目录(例如超级用户的 :/root 或 user1用户的:/home/user1))
cd -: 返回到上一次所在的工作目录,在两个工作目录之间来回切换。

[root@servera ~]# cd /home/devops
[root@servera devops]# pwd
/home/devops
[root@servera devops]# cd /var/log
[root@servera log]# cd -
/home/devops
[root@servera devops]#

cd . : 留在/切换到当前目录
cd . . :进入父目录/回到上一级目录,(. 表示当前目录,. .当前目录的上一级目录)
cd …/… → 回到上两级目录。
家home目录可用~表示。

touch:用于创建空文件,更新文件的时间戳(可创建多个,不能创建目录用mkdir)

[root@servera devops]# su - devops
Last login: Fri Oct 3 07:12:05 EDT 2025 on pts/0
[devops@servera ~]$ pwd
/home/devops
[devops@servera ~]$ touch 1.txt
[devops@servera ~]$ ls
1.txt
[devops@servera ~]$ touch 1(1是文件,不是目录)
[devops@servera ~]$ ls
1 1.txt
[devops@servera ~]$

df -h:df = disk free,用于显示文件系统的磁盘空间使用情况,-h = human readable(人类可读),以 KB / MB / GB 的形式显示,而不是纯字节。(df -h 在 :本节boot目录及dev处)

3.使用命令行工具管理文件

mkdir cp mv rm

mkdir:创建单个或者多级目录,不是文件
mkdir test/1/2/3:如果1/2是没有的,则不能建立起这个多级目录的。如果该目录存在,或者尝试创建的目录(2)的父目录(1)不存在,则mkdir 命令将失败并显示错误。(make dir)
mkdir -p test/1/2/3创建多级目录,-p (父级)选项将为请求的目标位置创建缺失的父目录。-p可以建目录树,需要注意拼写错误。
tree: 查看目录的树形结构。
在这里插入图片描述

[user@host Documents]$mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3 (可创建多个目录)

cp: 复制文件和目录
copy,复制并创建新文件,(保留原文件,再新生成一个副本)可在当前目录或者指定目录中创建生成新文件内容和被复制文件内容一样);可以将多个文件复制到一个新的已存在的目录里面,最后一个参数必须是目录。如果目标文件已存在,cp命令会覆盖该文件。
在这里插入图片描述

[kiosk@foundation0 ClassroomDocs]$ cp ClassPrep.txt ClassPrep1.txt copy(copy必须已存在,copy是目录)

cp -r:递归,复制目录及其子目录
cp -r 源目录 目标目录,复制整个目录到指定位置:cp -r mydir /home/student/;复制到当前目录,并改名字:cp -r mydir mydir_backup;只复制目录里的内容,不要目录本身:cp -r mydir/. targetdir/;同时复制多个目录:cp -r dir1 dir2 dir3 /tmp/;加上 -v 查看过程:cp -rv mydir /tmp/。

[user@host Documents]$ cd ProjectY
[user@host ProjectY]$cp -r . ./Thesis/.(把上一级目录中的 Thesis 文件夹里的所有内容复制到当前目录 ProjectY 里,不包含Thesis;没有写目标路径,默认就是复制到当前目录。cp -r . ./Thesis (空格) . → 会把整个 Thesis 文件夹复制到当前目录。cp -r . ./Thesis/. (空格) . → 复制 Thesis 文件夹里面的内容到当前目录(不包含 Thesis 文件夹本身)。)

mv: 移动文件和目录
可将原文件从一个位置移动到另一个位置,如果位置相同实际上是重命名(修改文件名称)。(把来的文件****“搬走”或者“改名”。)(只有一个文件,原来的名字消失,变成新名字)

rm:删除文件和目录
rm:删除文件,(写保护权限的文件需要输入yes确定),rm 目录 是不允许的
rm -r:递归删除目录及其子目录
rm -f:强制删除文件,不能是目录,没有提示
rm -rf:强制递归删除目录
rmdir:仅仅删除空目录
rm -ri Thesis :以交互方式提示确认后再删除,与-f相反
要保留 friends 目录本身,只删除里面的所有内容:rm -r friends/,rm -rf friends/{,.*}(如果有隐藏文件)

4. 文件链接

[kiosk@foundation0 ~]$ ll /proc/$$/ns(ns命名空间)
total 0
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 cgroup -> ‘cgroup:[4026531835]’(第一个字符 l就是符号链接/软链接)
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 ipc -> ‘ipc:[4026531839]’

链接:可以创建指向同一文件的多个名称。一个文件可以同时多个人拥有(房子与住户),

硬链接

从初始名称到文件系统上的数据,每个文件都以一个硬链接开始,新的硬链接与原始文件的一切属性和内容完全相同,并同步更新。硬链接 = 文件的另一个名字,指向相同的数据块(inode)。只有当两个文件都位于同一文件系统时才能使用硬链接,不能跨文件系统。只能指向常规文件(文件类型是-开头的文件,ls命令),不能使用ln来创建指向目录和特殊文件的硬链接(c字符设备,b块设备, p,s套接字)。
ln file1 file2: 为现有文件创建新的硬链接,
ls -i file1( file2): 要确定两个文件是否被硬链接,请使用 ls 命令配合**-i** 选项列出每个文件的索引节点编号。如果 文件位于同一文件系统上,而且它们的索引节点编号相同,那么这两个文件就是指向同一数据的硬 链 接 。
ls -l :可显示文件硬链接数量。即使原始文件被删除,只要还存在至少一个硬链接,该文件的内容就依然可用。只有最后一个硬链接被删除时,数据才会从存储中删除,从而使任何硬链接都不会引用文件内容。数量为1才能从彻底删除。

[kiosk@foundation0 ~]$ cd Desktop/
[kiosk@foundation0 Desktop]$ ls
ClassroomDocs rht-slides.desktop
[kiosk@foundation0 Desktop]$ cd ClassroomDocs/
[kiosk@foundation0 ClassroomDocs]$ ls
ClassPrep1.txt ClassPrep.txt ClassRHAPrep.txt ClassroomReset.txt ClassroomSetup-RHCSA.txt ClassroomSetup.txt ClassroomTroubleshooting.txt History.txt
[kiosk@foundation0 ClassroomDocs]$ ln ClassPrep1.txt Prep1 (为已存在文件 创建一个硬链接)
[kiosk@foundation0 ClassroomDocs]$ ll
total 252
-rw-r–r–. 2 kiosk kiosk 33577 Oct 5 08:48 ClassPrep1.txt
-rw-rw-r–. 2 kiosk kiosk 33577 Nov 22 2022 ClassPrep.txt
-rw-rw-r–. 2 kiosk kiosk 10853 Nov 16 2021 ClassRHAPrep.txt
-rw-rw-r–. 2 kiosk kiosk 18852 Jul 7 2022 ClassroomReset.txt
-rw-r–r–. 2 root root 1760 Apr 7 2023 ClassroomSetup-RHCSA.txt
-rw-rw-r–. 2 kiosk kiosk 51766 Jul 7 2022 ClassroomSetup.txt
-rw-rw-r–. 2 kiosk kiosk 43774 May 24 2022 ClassroomTroubleshooting.txt
-rw-rw-r–. 2 kiosk kiosk 10226 Feb 16 2023 History.txt
-rw-r–r–. 2 kiosk kiosk 33577 Oct 5 08:48 Prep1
[kiosk@foundation0 ClassroomDocs]$ ls -i Prep1 ClassPrep1.txt
878458 ClassPrep1.txt 878458 Prep1
[kiosk@foundation0 ClassroomDocs]$ ls -li Prep1 ClassPrep1.txt
878458 - rw-r–r–. 2 kiosk kiosk 33577 Oct 5 08:48 ClassPrep1.txt
878458 - rw-r–r–. 2 kiosk kiosk 33577 Oct 5 08:48 Prep1 (还是普通文件)
[kiosk@foundation0 ClassroomDocs]$ ls -il Prep1
878458 -rw-r–r–. 2 kiosk kiosk 33577 Oct 5 08:48 Prep1

[kiosk@foundation0 ClassroomDocs]$ rm Prep1
[kiosk@foundation0 ClassroomDocs]$ ll
total 216
-rw-r–r–. 1 kiosk kiosk 33577 Oct 5 08:48 ClassPrep1.txt
-rw-rw-r–. 2 kiosk kiosk 33577 Nov 22 2022 ClassPrep.txt
-rw-rw-r–. 2 kiosk kiosk 10853 Nov 16 2021 ClassRHAPrep.txt
-rw-rw-r–. 2 kiosk kiosk 18852 Jul 7 2022 ClassroomReset.txt
-rw-r–r–. 2 root root 1760 Apr 7 2023 ClassroomSetup-RHCSA.txt
-rw-rw-r–. 2 kiosk kiosk 51766 Jul 7 2022 ClassroomSetup.txt
-rw-rw-r–. 2 kiosk kiosk 43774 May 24 2022 ClassroomTroubleshooting.txt
-rw-rw-r–. 2 kiosk kiosk 10226 Feb 16 2023 History.txt
[kiosk@foundation0 ClassroomDocs]$ ls -i ClassPrep1.txt
878458 ClassPrep1.txt
[kiosk@foundation0 ClassroomDocs]$ ls -il ClassPrep1.txt
878458 -rw-r–r–. 1 kiosk kiosk 33577 Oct 5 08:48 ClassPrep1.txt

软链接

(租房子,一定时间有使用权但房子不是你的)快捷方式(就像 Windows 的“快捷方式”,它存储的是路径,而不是数据本身)只是路径引用,可以跨文件系统(可链接位于不同文件系统上的两个文件),可以指向任何文件类型(可以指向目录或者特殊文件,不仅限于常规文件)****,软链接不是常规文件,而是指向现有文件或者目录的特殊类型的文件,只是一个符号,在磁盘上不占有存储空间,没有索引节点号。
ln -s:创建软链接,也称符号链接。
当原始文件被删除后,软链接依然指向该文件,但是是悬空的软连链接,可删掉。
符号链接可以指向目录:

lrwxrwxrwx. 1 root root 7 Aug 10 2021 lib -> usr/lib

[kiosk@foundation0 ~]$ cd Desktop/
[kiosk@foundation0 Desktop]$ ls
ClassroomDocs rht-slides.desktop
[kiosk@foundation0 Desktop]$ cd ClassroomDocs/
[kiosk@foundation0 ClassroomDocs]$ ls
ClassPrep1.txt ClassPrep.txt ClassRHAPrep.txt ClassroomReset.txt ClassroomSetup-RHCSA.txt ClassroomSetup.txt ClassroomTroubleshooting.txt History.txt
[kiosk@foundation0 ClassroomDocs]$ ln -s ClassPrep1.txt prep1 (已存在文件/目录在前 创建的符号链接在后 )
[kiosk@foundation0 ClassroomDocs]$ ll
total 216
-rw-r–r–. 1 kiosk kiosk 33577 Oct 5 08:48 ClassPrep1.txt
-rw-rw-r–. 2 kiosk kiosk 33577 Nov 22 2022 ClassPrep.txt
-rw-rw-r–. 2 kiosk kiosk 10853 Nov 16 2021 ClassRHAPrep.txt
-rw-rw-r–. 2 kiosk kiosk 18852 Jul 7 2022 ClassroomReset.txt
-rw-r–r–. 2 root root 1760 Apr 7 2023 ClassroomSetup-RHCSA.txt
-rw-rw-r–. 2 kiosk kiosk 51766 Jul 7 2022 ClassroomSetup.txt
-rw-rw-r–. 2 kiosk kiosk 43774 May 24 2022 ClassroomTroubleshooting.txt
-rw-rw-r–. 2 kiosk kiosk 10226 Feb 16 2023 History.txt
lrwxrwxrwx. 1 kiosk kiosk 14 Oct 5 16:38 prep1 -> ClassPrep1.txt(l类型是符号链接,硬链接的只能是普通文件)

[kiosk@foundation0 ClassroomDocs]$ df -h
Filesystem(磁盘设备或虚拟文件系统名字) Size Used Avail Use% Mounted on
devtmpfs (内存里的虚拟文件系统,用来存放设备文件(如 /dev/sda )) 6.4G 0 6.4G 0% /dev
tmpfs(内存里的临时文件系统) 6.4G 0 6.4G 0% /dev/shm
tmpfs 2.6G 19M 2.6G 1% /run
/dev/nvme0n1p3 191G 68G 123G 36% /
/dev/loop2 7.6G 7.6G 0 100% /content/rhel9.0/x86_64/rhel9-additional
/dev/loop1 8.0G 8.0G 0 100% /content/rhel9.0/x86_64/dvd
/dev/loop0 456K 456K 0 100% /content/rhel9.0/x86_64/rhcsa-practice
/dev/nvme0n1p1 2.0G 949M 1.1G 47% /boot
tmpfs 1.3G 84K 1.3G 1% /run/user/1000

5. 使用shell扩展匹配文件名

路径匹配 波浪符扩展 大括号扩展 变量扩展 命令替换
bash扩展命令行的方式:
路径名扩展,帮助按模式匹配选择一个或多个文件
波形符扩展,扩展至用户主目录路径
大括号扩展,可以生成多个字符串
变量扩展,将文本替换为shell 变量中存储的值
命令替换,将文本替换为命令的输出

路径匹配

成为通配,通配符。使用“扩展”的元字符来匹配要寻找的文件名和路径名,可以一次性针对集中的一组文件执行命令 。
元字符和匹配项表:

名称描述
D*ls D*,匹配D开头的文件或者目录
*d匹配以d结尾的文件或目录
* e *ls * e *,匹配包含e字符的文件或目录
????一个?代表一个字符,4个?代表四个字符,长度为四的所有文件和目录
[Ch]*以C和h开头的所有文件或目录

[user@host glob]$ls a*

able alfa
[user@host glob]$ ls * a *
able alfa baker bravo cast charlie delta
[user@host glob]$ls [ac]*
able alfa cast charlie

模式 匹配项
* 由零个或更多字符组成的任何字符串
? 任何一个字符
[abc…] 括起的类(位于两个方括号之间)中的任何一个字符
[labc…] 不在括起的类中的任何一个字符。
[^abc…] 不在括起的类中的任何一个字符。
[[:alpha:]] 任何字母字符
[:lower:]] 任何小写字符
[:upper:]] 任何大写字符
[:alnum:]] 任何字母字符或数字
[[:punct:]] 除空格和字母数字以外的任何可打印字符
[:digit:]] 从0到9的任何单个数字
[:space:]] 任何单个空格字符,可能包括制表符、换行符、回车符、换页符或空格

波浪符扩展

~,代表当前用户的主目录。

[user@host glob]$ echo ~root
/root
[user@host glob]$ echo ~user
/home/user

>[kiosk@foundation0 /]$ cd ~kiosk( ~加用户名不加/,是对用户的主目录进行操作)
[kiosk@foundation0 ~]$ pwd
/home/kiosk

大括号扩展

用于生成任意字符串,大括号扩展可以相互嵌套。双. . 可以扩展成一个序列,{m. . p}=m n o p

[user@host glob]$ echo {Sunday,Monday,Tuesday,Wednesday}.log Sunday.log Monday.log Tuesday.log >Wednesday.log
>[user@host glob]$echo file{1. .3}.txt

>file1.txt file2.txt file3.txt
[user@host glob]$ echo file{a…c}.txt
filea.txt fileb.txt filec.txt
[user@host glob]$ echo file{a,b}{1,2}.txt
filea1.txt filea2.txt fileb1.txt fileb2.txt
[user@host glob]$ echo file{a{1,2},b,c}.txt
filea1.txt filea2.txt fileb.txt filec.txt

变量替换

变量的作用类似于可以在内存中存储值的命名容器。通过变量,可以从命令行或在shell脚本内访问和修改存储的数据 。

如果字符串以美元符号($)开头,那么 shell就 会尝试将该字符串的其余部分用作变量名称,并将它替换为变量中包含的任何值。

[kiosk@foundation0 ~]$ VAR=123
[kiosk@foundation0 ~]$ echo $VAR
123

[kiosk@foundation0 ~]$ echo $USER
kiosk

[kiosk@foundation0 ~]$ echo V A R 123 [ k i o s k @ f o u n d a t i o n 0   ] {VAR} 123 [kiosk@foundation0 ~] VAR123[kiosk@foundation0 ] echo ${USER}
kiosk
避免与系统保留字冲突,可以将变量的名称放在大括号中,如 ${VARIABLENAME}。

命令替换

$(command)** ,'command’不推荐

[kiosk@foundation0 ~]$ echo Today is $(date +%A)
Today is Monday

防止参数被扩展

在 Bash shell中,许多字符有特殊含义。为防止命令行的某些部分上执行shell扩展,可以为字符 和字符串加引号或执行转义。
反斜杠()是Bash shell中的转义字符。它可以防止其后的字符被扩展。
如果要保护较长的字符串,则使用单引号’ 和" 扩起字符串,单引号阻止所有扩展,双引号阻止路径名扩展但仍允许进行命令替换($ (…))和变量扩展(不阻止:美元符号$,反斜杠,反引号 ` ,!),转义符 \n部分允许。

行为类型双引号会阻止?
路径名扩展(*?✅ 阻止
**重定向符号(>>><管道✅ 阻止
变量替换 $var❌ 不阻止
命令替换 $(cmd)`cmd`❌ 不阻止
算术替换 $((...))❌ 不阻止

[user@host glob]$ myhost=$(hostname -s);echo $myhost
host

[user@host glob]$echo “* * * * * hostname is ${myhost}* * * * *”
*****hostname host *****

[user@host glob]echo “will variable $myhost evaluate to $(hostname−s)?”
Will variable host evaluate to host?
[user@hostglob] echo ‘Will variable $myhost evaluate to $(hostname -s)?’
Will variable $myhost evaluate to $(hostname -s)?

" "里面的变量 加上() { } 区分

ls -lR Documents:-R→ 递归显示(会进入子目录,逐级列出所有内容)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值