软件安装与文件详细信息

6016 字
30 分钟
软件安装与文件详细信息

软件安装&&文件详细信息#

[TOC]


yum安装#

特点:

✅️ 直接通过软件商店,无脑安装,一键下载

📌 yum可以自动解决依赖问题

  • 类似吃饭点外卖,已经是成品了 油盐酱醋

⚠️ 必须连接外网

用一台有网的Linux进行下载rpm包

Terminal window
[root@Kylin ~]# yum -y --downloaddir=./ --downloadonly install wget
--downloaddir #指定下载的路径
--downloadonly #只下载不安装
# 将wget的rpm包下载到当前目录
工具参数
curl-o
wget-O
Tip

如果你想把文件下载下来并重命名(或者指定保存路径)

  • 用 curl 就写:curl -o 新文件名 URL
  • 用 wget 就写:wget -O 新文件名 URL
Terminal window
[root@Rocky ~]# ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Aug 1 2025 /usr/bin/yum -> dnf-3
[root@Rocky ~]# ll /usr/bin/dnf
lrwxrwxrwx. 1 root root 5 Aug 1 2025 /usr/bin/dnf -> dnf-3
# 软链接都是执行dnf-3
Note

🧣 dnf与yum命令类似 —> 指向同一个🔗

yum -y install 软件名称#

🌰 案例.安装wget命令

Terminal window
[root@Kylin ~]# yum -y install wget

Terminal window
[root@oldboy ~]# yum -y install wget
Last metadata expiration check: 2:41:38 ago on Mon 08 Dec 2025 04:19:20 PM CST.
Package wget-1.20.3-6.ky10.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
# 这种是已经安装完了

🌰 案例.安装多个软件

  • 空格隔开
Terminal window
[root@Kylin ~]# yum -y install wget tree curl
# 空格隔开安装多个

🌰 案例.卸载wget命令

Terminal window
[root@Kylin ~]# yum -y remove wget tree
# 卸载多个,同理,用空格隔开
'会连同依赖一起卸载掉' <-- 没有软件用到这个依赖了

无法安装问题:#

(1)网络不通

Terminal window
ping www.baidu.com
# 域名不通,pingDNS服务器
ping 223.6.6.6
# DNS服务器能ping通,那就是域名解析有问题

DNS服务器也不通,那我们用虚拟机ping一下宿主机,再翻前面笔记找问题

(2)命令错误

单词、语法都不能错

正确的: yum -y install xxx

(3)软件名称错误

Terminal window
yum -y install wgea
# 包名wget,这是错误的拼写

(4)yum仓库问题、缓存问题

清理yum仓库缓存

Terminal window
[root@oldboy ~]# yum clean all
21 files removed
# 清除了21个缓存文件
[root@oldboy ~]# yum makecache
# 重构缓存

(5)安装的命令属于其他的软件包中

🌰 安装rz命令

Terminal window
[root@oldboy ~]# yum -y install rz
Last metadata expiration check: 2:58:46 ago on Mon 08 Dec 2025 04:19:20 PM CST.
No match for argument: rz
Error: Unable to find a match: rz
# 匹配不到,也找不到rz

不知道rz命令属于哪个包如何解决?

  1. 直接百度搜索
  • linux 系统安装rz命令
    • 💡 在Linux系统中安装rz命令,通常需要先安装 ==lrzsz软件包==,因为rz命令是lrzsz软件包的一部分

  1. yum -y search

使用命令查找: yum -y search rz

Terminal window
[root@Kylin ~]# yum -y search rz
Last metadata expiration check:.....
========= Name & Summary Matched: rz =========
lrzsz.x86_64 : The lrz and lsz modem
# 安装了lrzsz就相当于安装了rz
# netstat无法安装,和上面rz类似,无法直接安装
[root@oldboy ~]# yum search netstat
Last metadata expiration check:.....
No matches found. ⚠️ '模糊匹配,不一定能找到’
'netstat 也不在单独的包里'
[root@Kylin ~]# yum -y install net-tools
✅ netstat 属于 net-tools 包

👑yum provides 命令#

Terminal window
'和上面的search差不多!'
[root@Rocky ~]# yum provides rz
它会一个个仓库的去找
Extra Packages for Enterprise Linux 7 - x86_64 1.3 MB/s | 17 MB
Rocky Linux 10 - BaseOS 738 kB/s | 16 MB
Rocky Linux 10 - AppStream 572 kB/s | 12 MB
Rocky Linux 10 - Extras 576 B/s | 9.7 kB
lrzsz-0.12.20-66.el10.x86_64 : The lrz and lsz modem.......
'就是这个lrzsz!!!'
仓库 :baseos
匹配来源:
文件名 :/usr/bin/rz

yum -y reinstall#

覆盖安装、无法使用某个命令也无法卸载情况下尝试用此种方法

  • 适用于修复损坏的安装
    • 比如某些二进制文件被误删、权限错误、文件损坏等情况,reinstall 可以快速恢复
Terminal window
[root@Kylin ~]# yum -y reinstall wget
# 重新安装wget,覆盖已有文件

yum repolist#

查看系统当前所有的仓库

Terminal window
[root@Kylin ~]# yum repolist
repo id repo name
epel Extra Packages for Enterprise Linux 7 - x86_64
ks10-adv-os Kylin Linux Advanced Server 10 - Os
ks10-adv-updates Kylin Linux Advanced Server 10 - Updates

其实当我们对某个源有疑惑的时候,直接进入到/etc/yum.repos.d/目录中,直接cat查看对应源即可

Terminal window
[root@oldboy ~]# cd /etc/yum.repos.d/
[root@oldboy yum.repos.d]# ll
total 8
-rw-r--r-- 1 root root 664 Aug 4 2022 epel.repo
-rw-r--r-- 1 root root 701 Sep 8 2022 kylin_x86_64.repo
[root@oldboy yum.repos.d]# cat epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
# 直接查看仓库配置文件内容

yum list#

查看仓库中有哪些可以安装的软件列表

查找仓库中是否有net-tools包?

Terminal window
[root@oldboy ~]# yum list | grep net-tools
net-tools.x86_64 2.0-0.54.ky10 @anaconda
net-tools-help.noarch 2.0-0.54.ky10 @anaconda
# 配合管道符过滤
如果过滤不到,那么这个软件包就不在'可以安装的软件列表'

👑yum info#

Terminal window
yum info nginx
# 命令可以查看 nginx 软件包的详细信息
[root@Rocky ~]# yum info nginx
Available Packages
Name : nginx
Epoch : 2
Version : 1.30.3
Release : 1.el10.ngx
Architecture : x86_64
Size : 1.1 M
Source : nginx-1.30.3-1.el10.ngx.src.rpm
Repository : nginx-stable
Summary : High performance web server
URL : https://nginx.org/

🧣yum 撤销#

Terminal window
[root@Rocky ~]# yum history
ID | Command line | Date and time | Action(s)
----------------------------------------------------------
4 | | 2026-03-16 22:33 | Install
3 | -y install nginx | 2026-03-15 10:06 | Install
2 | -y install cockpit | 2026-03-05 10:50 | Upgrade
1 | | 2026-03-02 19:24 | Install
# 查看yum操作历史记录
'撤销操纵!'
[root@Rocky ~]# yum history undo 3
# 撤销第3个yum操作
'dnf同理!'
'后面跟的是编号,history的编号!!!'
========================================
Last metadata expiration check: ...
Remove 4 Packages
# 移除4个包!
Removed:
nginx-2:1.26.3-1.el10.x86_64 .......
Complete!

挂载光驱#

  • /dev/cdrom #光驱
    • 这个光驱,我们没有办法直接访问

Windows是当我们插上光驱后,比如说U盘,他就可以自动显示 & 并且可以查看U盘里面的内容

Linux它显示不了,这个光驱虽然放在这里,我们进不去里面,它也出不来,当然也无法查看里面的内容


再举一个例子:

  • 当给你的虚拟机加上一块磁盘的时候,你也是无法访问的.

如何能够访问他呢?

创建一个入口 # 比喻成戒指 把硬盘挂载到入口上 # 通过这个戒指就可以访问到里面的空间

我们是直接操控这枚戒指,并且可以跨过戒指,直接操作空间

📌 总结: 表面是在操作/mnt目录,实则在操控/dev/cdrom


🧣cdrom光驱

  • 挂载光驱是为了后面演示安装rpm包做准备
    • 因为光驱Packages里面有许多下载好的rpm包
Terminal window
'使用光驱作为本地的yum仓库!!!'
[root@Rocky ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 8.6G 0 rom
# 第一行这个就是光驱
[root@Rocky ~]# ll /mnt
total 0
# 挂载前查看这个目录什么都没有、
'这里我们只是临时的挂载了一下,并非永久挂载'
[root@Rocky ~]# mount /dev/cdrom /mnt
# 将光驱挂载到/mnt 相当于给光驱了开了一个入口
mount: /mnt: WARNING: source write-protected, mounted read-only.
# 挂载提示写保护、只读
只能看,不能往里面写东西!
[root@Rocky ~]# df -h
Filesystem Size Used Avail Use% Mounted on
....
/dev/sr0 8.7G 8.7G 0 100% /mnt

当挂载成功后,后面我们就一直都在操控/mnt目录.

Terminal window
[root@Rocky ~]# ll /mnt/
# 再次查看时,可以看到光驱中的文件
total 544
dr-xr-xr-x 3 root root 2048 Mar 15 2023 EFI
dr-xr-xr-x 3 root root 2048 Mar 15 2023 images
dr-xr-xr-x 2 root root 2048 Mar 15 2023 isolinux
dr-xr-xr-x 5 root root 2048 Mar 24 2023 kylin-sm-package
-r--r--r-- 1 root root 441 Mar 31 2023 LICENSE
dr-xr-xr-x 2 root root 2048 Mar 15 2023 manual
dr-xr-xr-x 2 root root 538624 Mar 24 2023 Packages
dr-xr-xr-x 2 root root 4096 Mar 24 2023 repodata
-r--r--r-- 1 root root 2883 Mar 31 2023 TRANS.TBL
[root@Rocky ~]# cd /mnt/Packages
# 进入到光驱中的Packages目录
[root@Rocky Packages]# ll
total 3409391
# 百万个rpm包
-r--r--r-- 1 root root abattis-xxx-1.ky10.noarch.rpm
-r--r--r-- 1 root root abrt-2.13.0-9.ky10.x86_64.rpm
Terminal window
[root@Rocky ~]# ls /mnt
AppStream boot EFI extra_files.json LICENSE RPM-GPG-KEY-Rocky-10
BaseOS COMMUNITY-CHARTER EULA images media.repo RPM-GPG-KEY-Rocky-10-Testing
# 这里重点两个目录
=================================
'AppStream、BaseOS'
BaseOS:包含系统运行所必需的基础 RPM
AppStream:包含应用程序、开发工具、语言运行时等附加软件包
我们后面要make cache建立元数据,而这两个目录下面就有元数据!
/mnt
├── BaseOS/
└── repodata/ 元数据在这里
├── AppStream/
└── repodata/ 元数据在这里
└── ...
'而我们的 baseurl 必须指向 包含 元数据目录(repodata) 的那个上级目录'
=================================
本地的 baseurl 后面是三个斜杠(file:///),因为第一个 / 是协议分隔符,后面两个 / 表示本地绝对路径的开始
如果你用的别的阿里和清华镜像,则用https://
# 两个 /
=================================
# 这里参考红帽yum仓库的配置!!
# 他也是手动的指出这两个目录
cat >/etc/yum.repos.d/redhat9.repo<<EOF
[yumlocal]
name = "内部yum源"
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
enabled=1
gpgcheck=0
[yun]
name = "内部yum源"
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
enabled=1
gpgcheck=0
EOF
yum clean all
yum makecache
=================================
'创建本地的yum仓库'
cat > /etc/yum.repos.d/local.repo <<EOF
[local_app]
name=local app
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[local_base]
name=local base
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
EOF
[root@Rocky ~]# ll /etc/yum.repos.d/local.repo
-rw-r--r-- 1 root root 156 Mar 18 08:19 /etc/yum.repos.d/local.repo
[root@Rocky ~]# cd /etc/yum.repos.d/
[root@Rocky yum.repos.d]# ll
total 24
-rw-r--r-- 1 root root 156 Mar 18 08:19 local.repo
-rw-r--r--. 1 root root 5490 Nov 5 08:00 rocky-addons.repo
-rw-r--r--. 1 root root 1168 Nov 5 08:00 rocky-devel.repo
-rw-r--r--. 1 root root 2393 Nov 5 08:00 rocky-extras.repo
-rw-r--r--. 1 root root 3426 Nov 5 08:00 rocky.repo
[root@Rocky yum.repos.d]# rm -rf /home/*
[root@Rocky yum.repos.d]# ll /home/
total 0
[root@Rocky yum.repos.d]# mv rocky* /home/
# 我们把原来本地的yum仓库移走
'当然你也可以进去把它们的enabled置为0'
[root@Rocky yum.repos.d]# ll
total 4
-rw-r--r-- 1 root root 156 Mar 18 08:19 local.repo
⚠️ 只剩下一个我们本地的yum仓库
[root@Rocky yum.repos.d]# yum makecache
local app 122 MB/s | 1.5 MB 00:00
local base 144 MB/s | 1.5 MB 00:00
Metadata cache created.
# 缓存已建立!
'进行下载测试!'

Terminal window
'成功!当然本地yum仓库,他完全可以不用联网,就可以进行下载!!'
# 大家也可以试着把网关了!
[root@Rocky yum.repos.d]# mv /home/rocky* .
[root@Rocky yum.repos.d]# ll
total 20
-rw-r--r-- 1 root root 156 Mar 18 08:19 local.repo
-rw-r--r-- 1 root root 761 Nov 5 08:00 rocky-addons.repo.gz
-rw-r--r-- 1 root root 370 Nov 5 08:00 rocky-devel.repo.gz
-rw-r--r-- 1 root root 578 Nov 5 08:00 rocky-extras.repo.gz
-rw-r--r-- 1 root root 641 Nov 5 08:00 rocky.repo.gz
# 我把他们移回来之后发现!他们自动被压缩了,可能是我之前,误压缩了!
[root@Rocky yum.repos.d]# gzip -d rock*
[root@Rocky yum.repos.d]# ll
total 24
-rw-r--r-- 1 root root 156 Mar 18 08:19 local.repo
-rw-r--r-- 1 root root 5490 Nov 5 08:00 rocky-addons.repo
-rw-r--r-- 1 root root 1168 Nov 5 08:00 rocky-devel.repo
-rw-r--r-- 1 root root 2393 Nov 5 08:00 rocky-extras.repo
-rw-r--r-- 1 root root 3426 Nov 5 08:00 rocky.repo
# 重新解压回来就好了!!
[root@Rocky yum.repos.d]# yum makecache
local app 3.8 MB/s | 3.9 kB 00:00
local base 3.8 MB/s | 3.9 kB 00:00
Rocky Linux 10 - BaseOS 398 B/s | 4.3 kB 00:11
Rocky Linux 10 - AppStream 400 B/s | 4.3 kB 00:11
Rocky Linux 10 - Extras 280 B/s | 3.1 kB 00:11
Rocky Linux 10 - Extras 375 B/s | 6.0 kB 00:16
Metadata cache created.
[root@Rocky yum.repos.d]# yum repolist
# 查看已有的yum仓库列表!
repo id repo name
appstream Rocky Linux 10 - AppStream
baseos Rocky Linux 10 - BaseOS
extras Rocky Linux 10 - Extras
local_app local app
local_base local base
[root@Rocky yum.repos.d]# yum repolist enabled
# 查看已启用的仓库
[root@Rocky yum.repos.d]# yum repolist disabled
# 查看已禁用的仓库
# enabled=1 ----> 启用
# enabled=0 ----> 禁止
[root@Rocky yum.repos.d]# yum repolist disabled | wc -l
31
# 统计未启用的源

rpm#

特点:

✅️ 必须提前下载.rpm结尾软件包

⚠️ rpm不支持自动解决依赖问题、需要我们手动解决

  • 点外卖、相当于点速冻水饺半成品

Centos和Kylin都是rpm结尾, Ubuntu是 .deb —> 不能混用

问: 既然rpm包那么麻烦,为什么还用它进行安装呢?

📌 答: 因为那些仓库中没有对应的软件、或者版本不兼容,所以我们企业,往往通过下载.rpm包的方式,进行软件的安装

rpm -ivh 包.rpm#

Terminal window
[root@Kylin Packages]# rpm -ivh zip-3.0-26.ky10.x86_64.rpm
-i #安装
-v #显示过程
-h #显示进度
'v和h可以省略'
Verifying... ########## [100%]
Preparing... ########## [100%]
Updating / installing...
1:zip-3.0-26.ky10 ########## [100%]
# 这个成功安装,也没有提示缺少依赖,非常顺利!

依赖安装#

我们之前使用yum安装的,那么在使用rpm安装之前我们需要用yum卸载掉

Terminal window
[root@oldboy Packages]# yum -y remove wget
# 先用yum卸载wget

(1) 第一次尝试安装wget的rpm包

Terminal window
[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpm
error: Failed dependencies: # 失败依赖
libmetalink.so.3()(64bit) is needed by wget-1.20.3-3.ky10.x86_64
# 我们刚才remove卸载的时候,同时它的依赖也卸载掉了
# rpm安装wget时,因为缺少它的依赖,所以没有办法安装成功

(2) 安装所需依赖

Terminal window
[root@Kylin Packages]# yum -y install libmetalink
# 不是所有的依赖,都能简单的通过yum来安装
Tip

📌 能用yum安装就用yum安装,如果yum仓库里面没有它的依赖,那么只能去找这个依赖的rpm包去了,一个一个解决,才能把最终的软件安装成功

(3) 安装完所需依赖后,重新安装wget的rpm包

Terminal window
[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpm
Verifying... ########## [100%]
Preparing... ########## [100%]
Updating / installing...
1:wget-1.20.3-3.ky10 ########## [100%]
# 这样就算是成功安装了

安装包的位置#

安装的时候注意安装包所在的位置

错误示范:

Terminal window
[root@oldboy home]# ll
total 0
# 当前目录为空
[root@oldboy home]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpm
error: open of wget-1.20.3-3.ky10.x86_64.rpm failed: No such file or directory
# 当前路径就没有这个rpm包,自然不可能安装成功!

(1)相对路径安装

相对路径 进入到rpm包所在的路径安装

Terminal window
[root@Kylin ~]# cd /mnt/Packages/
[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpm
# 进入到包所在目录后安装

(2)绝对路径安装

Terminal window
[root@Kylin ~]# rpm -ivh /mnt/Packages/wget-1.20.3-3.ky10.x86_64.rpm
# 绝对路径安装,即使当前不在包所在目录也可以
推荐

rpm -qa 包名#

查看软件包是否安装成功

📌 特性

Note

都能查看那些途径来的软件包?

  • 直接使用 rpm -ivh package.rpm 安装的包;
  • 通过 yum install(或在较新系统中的 dnf install)安装的包;
  • 系统初始安装时就包含的 RPM 包
  • ⚠️ 不会显示通过源码编译安装(如 ./configure && make && make install)的软件
Terminal window
[root@Kylin ~]# rpm -qa wget
wget-1.20.3-3.ky10.x86_64
# 如果有这个包,就是安装成功了,否则就是没有安装成功
[root@Kylin ~]# rpm -qa wget tree
wget-1.20.3-3.ky10.x86_64
tree-1.8.0-2.ky10.x86_64
# 空格隔开即可
# 查看多个软件是否安装
[root@oldboy home]# rpm -qa | wc -l
1103
# 查看系统中安装的所有软件数量

⭐rpm -e 包名#

卸载软件

Terminal window
'erase: 擦拭删除'
rpm -e --nodeps httpd
-e: # 卸载
--nodeps: # 忽略依赖
[root@Kylin ~]# rpm -e wget
# rpm方式卸载wget
[root@Kylin ~]# yum -y remove wget
# yum方式卸载wget
Tip
  • 不管是yum还是rpm安装的软件都可以用yum或者rpm卸载

  • yum卸载时自动解决掉依赖问题、rpm卸载不支持自动解决依赖

📌 yum卸载依赖的✅ 核心原则: “是否还有其他包依赖它” yum 在卸载一个包时,只会自动卸载那些**“不再被任何已安装包需要”**的依赖包

rpm -qc wget#

查看安装包的配置文件

Terminal window
[root@oldboy home]# rpm -qc wget
/etc/wgetrc
# wget的配置文件路径

rpm -ql wget#

查看指定软件包安装的所有文件及其路径

Terminal window
[root@oldboy home]# rpm -ql wget
/etc/wgetrc
/usr/bin/wget
/usr/share/doc/wget
/usr/share/doc/wget/AUTHORS
..........省略
# 列出了wget安装的所有文件

上传 & 下载#

rz 上传命令#

将windows的文件上传到linux系统中

⚠️ 注意不能上传空文件到linux系统中

Terminal window
[root@Kylin ~]# yum -y install lrzsz
# 安装了lrzsz就相当于安装了rz
# lrzsz包含rz命令

(1)rz 直接回车

选择windows中的文件上传即可


(2)直接拖拽

直接拖拽windows文件到xshell窗口即可**(不能拖拽到虚拟机)**


(3)rz -bye

避免出现乱码

⚠️ 不加参数,可能会出现乱码!


sz下载命令#

将linux中的文件下载到windows系统中

Terminal window
sz 文件名称
# 将文件从Linux下载到Windows


Linux文件详细信息#

image-20260510182258
image-20260510182258

ll -i#

查看文件的详细信息以及inode号码

Terminal window
[root@Kylin ~]# ll -i oldboy.txt
67157818 -rw-r--r-- 1 root root 12 Nov 4 11:46 oldboy.txt
# 第一列: inode号码 索引文件
# 第二列: 文件类型
# 第三列: 文件权限
# 第四列: 硬连接个数
# 文件默认1个硬链接、目录默认2个硬链接
# 第五列: 属主
# 第六列: 属组
# 第七列: 大小
# 第八列: 时间
# 第九列: 文件名称

🧣stat 文件路径#

使用stat查看文件的详细信息(面试题)

Terminal window
[root@Kylin ~]# stat oldboy.txt
File: 'oldboy.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 67157818 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
# 权限 用户id 组id
Access: 2025-11-04 11:46:25.338211369 +0800 # 访问时间
Modify: 2025-11-04 11:46:25.338211369 +0800 # 修改时间
Change: 2025-11-04 11:46:25.338211369 +0800 # 改变时间

📌 文件的三种时间:

Access: 访问时间 cat vim(未修改) less more

Modify: 修改时间 vim(已修改) echo

Change: 详细文件属性的改变时间

inode号和block#

  • 📌 inode号相当于书本目录它是索引文件

inode号有限,相比总的block块的50G(实际达不到)小很多.

  • block负责具体存放数据的位置.书中的内容

一个block块4KB

  • 一个空的文件至少要占用一个inode号和一个block

  • 想要找到具体存放数据的地方,需要先找到inode号,这个inode指向我们具体存放数据的位置

inode号存放着具体内容的指针指向

  • 新文件不能占用旧的block(已存放数据,但未存满的块),如果占用旧的块,则会读取到本不属于它的内容!

inode号码#

索引文件

inode号中存放着文件内容具体的指针指向、详细信息

inode类似藏宝图

安装系统、格式化磁盘分配了定量的inode号和block

当我们扩展一块新的磁盘时,就又有了新的inode号和block

⚠️ 注意: 系统inode号或者block块,任意一个满,那么就无法正常写入数据

df -i#

查看inode号

Terminal window
[root@oldboy home]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 246339 466 245873 1% /dev
tmpfs 250387 1 250386 1% /dev/shm
tmpfs 250387 697 249690 1% /run
tmpfs 250387 17 250370 1% /sys/fs/cgroup
/dev/mapper/klas-root 24619008 123957 24495051 1% /
# 跟下的inode号最多

df -h#

block就是块的大小,也是存储空间的大小

查看磁盘剩余存储空间

Terminal window
[root@Kylin ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 963M 0 963M 0% /dev
tmpfs 979M 0 979M 0% /dev/shm
tmpfs 979M 8.9M 970M 1% /run
tmpfs 979M 0 979M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.7G 44G 8% /
# 根分区,整个磁盘空间的大小,基本上都给它了

文件类型#

s # 接口文件 了解

p # 管道文件 了解

-#

表示普通文件、压缩包、视频音频、图片、命令

d#

表示目录

image-20260624102021137
image-20260624102021137

  • 这个根目录也有inode号,对应一个block块
    • 里面存放的是下面所有子目录子文件名称不存放具体的数据,只是用来存放名称
  • 当我们找到**/opt/目录后,他也有个inode号**,对应的block存放这着1.txt和2.txt的名称
    • 这个1.txt和2.txt的block块存放这具体的数据.
  • 📌 目录的大小和文件大小没有关系,目录只存放名称,占不了多少磁盘空间!

l#

表示软链接(windows称为快捷方式)

b#

块设备 硬件设备(块存储)

Terminal window
[root@oldboy home]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 Dec 9 09:06 /dev/cdrom -> sr0
# l打头,这个光驱就是一个软连接,是./sr0(当前目录下sr0)的快捷方式
[root@oldboy home]# ll /dev/sr0
brw-rw---- 1 root cdrom 11, 0 Dec 9 09:06 /dev/sr0
# b打头,这个是它的本体,也就是块设备

c#

字节设备

常用的字节文件

/dev/zero#

生成大的文件进行测使用, 压力测试我们服务器, 测试磁盘性能

Terminal window
[root@oldboy home]# ll /dev/zero
crw-rw-rw- 1 root root 1, 5 Dec 9 09:06 /dev/zero
# c打头,字节设备

dd命令#

生成指定大小的文件(不多也不少)

Terminal window
if # input file
of # output file
bs # block size
count # 读取多少次

🌰 案例:生成10M的文件

Terminal window
[root@Kylin ~]# dd if=/dev/zero of=1.txt bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.00313154 s, 3.3 GB/s
# 在当前目录下的1.txt中生成了10M的空数据
[root@Kylin ~]# ll -h 1.txt
-rw-r--r-- 1 root root 10M Nov 4 14:46 1.txt
# 看不了文件里面的内容,但是它是实实在在的占用了我们的磁盘空间
# "无色无味,真实存在"

🌰 案例:生成1G的文件

Terminal window
[root@Kylin ~]# dd if=/dev/zero of=2.txt bs=1M count=1000
# 只有最后的count读取次数变了,1M×1000=1G

/dev/null#

作用可以将不想看的结果,定向到/dev/null, 类似于黑洞

Terminal window
[root@oldboy home]# ll /dev/null
crw-rw-rw- 1 root root 1, 3 Dec 9 09:06 /dev/null
# c打头,字节设备
[root@Kylin ~]# yum -y install wget > /dev/null
# 它是把安装软件执行过程中输出到屏幕上的东西,定向到null里面

🧣$?

#表示上一条命令执行的结果、0为成功、非0失败

(命令或者结果都有影响)

(1)命令错误

Terminal window
[root@oldboy home]# ll
total 0
drwxr-xr-x 2 root root 6 Dec 9 11:32 hh.txt
# 有这个文件,我们想要查看它
[root@oldboy home]# llll hh.txt
-bash: llll: command not found
# 压根儿,没有这个命令,命令本身是错误的!
[root@oldboy home]# echo $?
127
# 返回127,非0表示失败

(2)结果错误

Terminal window
[root@Kylin ~]# ll aaa
ls: cannot access 'aaa': No such file or directory
# 没有这个文件或目录,命令结果是错误的
[root@Kylin ~]# echo $?
2
# 即使ll命令本身是对的,那也是非0数

重定向#

📌 概念: 改变输出的方向.最常见的就是往文件里面写东西,或者追加内容.

image-20260624102156693
image-20260624102156693

  • 我们通过这个通道1和2我们就可以控制这些输出

1>#

🌰 只接收正确的结果 >

Terminal window
[root@Kylin ~]# echo aaa > test.log
[root@Kylin ~]# cat test.log
aaa
# 查看这个文件,有对应的内容

🌰 不要错误的结果

Terminal window
[root@Kylin ~]# llll > test.log
-bash: llll: command not found
# 压根儿没有这个命令,他直接报错输出至屏幕上,而并非写入文件
[root@Kylin ~]# cat test.log
[root@Kylin ~]#
# 报错并没有写入至对应文件中.默认只写正确的
# 不管命令本身,还是结果都得是正确的

2>#

🌰 只要错误的结果 2>

先将test.log清空、再接收错误的结果正确的不会写入文件,直接输出到屏幕

Terminal window
[root@oldboy home]# echo bbb 2> test.log
bbb
# 为什么直接输出到屏幕上了呢? 2>只要错误的结果
[root@oldboy home]# echo $?
0
# 说明上一条命令是正确的 ✅
[root@oldboy home]# cat test.log
# 里面什么都没有

只接收错误的结果

Terminal window
[root@Kylin ~]# llll 2> test.log
# 命令本身是错误的 ❌
[root@Kylin ~]# cat test.log
-bash: llll: command not found
# 会把错误的信息,写入到文件中

🌰 *将正确的输出**追加>>到test.log 错误的输出追加>>*到test.txt

Terminal window
[root@Kylin ~]# echo aaa >>test.log 2>>test.txt
# 命令本身还是结果都没有问题
[root@Kylin ~]# ech aaa >>test.log 2>>test.txt
# 命令本身错误,"找不到命令ech"
[root@Kylin ~]# cat test.log
aaa
# 只有正确的输出
[root@Kylin ~]# cat test.txt
-bash: ech: command not found
# 报错在这里面

&>>#

不管正确还是错误都追加>>到bb.txt

注意,两种用法的使用位置

(1) 通过2>&1实现

Terminal window
[root@Kylin ~]# cat bb.txt
aaa
# 刚开始只有这一行
[root@Kylin ~]# echo aaa >>bb.txt 2>&1
'在整个命令的后面加'
# >>bb.txt,这个是追加文件!
[root@Kylin ~]# cat bb.txt
aaa
aaa
# 成功的把正确的追加进来了
[root@Kylin ~]# ech aaa >>bb.txt 2>&1
# 命令本身错误."ech"
[root@Kylin ~]# cat bb.txt
aaa
aaa
-bash: ech: command not found
# 把错误的信息也追加过来了

(2) &>>

Terminal window
'非常方便,推荐用这个'
[root@Kylin ~]# ech aaa &>> bb.txt
# 功能同上,不过多赘述!

🧣对比#

解释 2>&1 >file>file 2>&1 的区别

Terminal window
# 错误信息输出至屏幕,丢弃正常输出
find / -name "*.conf" 2>&1 > /dev/null | grep "permission denied"
# 脚本可以考虑一下!
命令执行顺序输出结果
2>&1 >file先 2>&1(fd 2 → 终端),再 >file(fd 1 → file)✅ 标准输出 → 文件
❌ 错误输出 → 终端
>file 2>&1先 >file(fd 1 → file),再 2>&1(fd 2 → fd 1)✅ 标准输出 → 文件
✅ 错误输出 → 文件

/dev/urandom#

了解

  • 和上面的/dev/null对比来记,上面那个是黑洞,一直吃你的信息
  • 这个/dev/urandom一直往外输出,各种符号,乱码
Terminal window
[root@Kylin ~]# ll /dev/urandom
crw-rw-rw- 1 root root 1, 9 Nov 4 08:32 /dev/urandom
# c打头,字符设备

⚠️ 千万别尝试直接cat /dev/urandom

直接给我电脑干死机了,我丢,太狠了

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

软件安装与文件详细信息
https://www.kpyun.fun/posts/basics/core/core08/
作者
久棹
发布于
2025-07-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录