软件安装与文件详细信息
软件安装&&文件详细信息
[TOC]
yum安装
特点:
✅️ 直接通过软件商店,无脑安装,一键下载
📌 yum可以自动解决依赖问题
- 类似吃饭点外卖,已经是成品了 油盐酱醋
⚠️ 必须连接外网
用一台有网的Linux进行下载rpm包
[root@Kylin ~]# yum -y --downloaddir=./ --downloadonly install wget--downloaddir #指定下载的路径--downloadonly #只下载不安装# 将wget的rpm包下载到当前目录| 工具 | 参数 |
|---|---|
| curl | -o |
| wget | -O |
如果你想把文件下载下来并重命名(或者指定保存路径)
- 用 curl 就写:curl -o 新文件名 URL
- 用 wget 就写:wget -O 新文件名 URL
[root@Rocky ~]# ll /usr/bin/yumlrwxrwxrwx. 1 root root 5 Aug 1 2025 /usr/bin/yum -> dnf-3[root@Rocky ~]# ll /usr/bin/dnflrwxrwxrwx. 1 root root 5 Aug 1 2025 /usr/bin/dnf -> dnf-3# 软链接都是执行dnf-3🧣 dnf与yum命令类似 —> 指向同一个🔗
yum -y install 软件名称
🌰 案例.安装wget命令
[root@Kylin ~]# yum -y install wget
[root@oldboy ~]# yum -y install wgetLast 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!# 这种是已经安装完了🌰 案例.安装多个软件
- 空格隔开
[root@Kylin ~]# yum -y install wget tree curl# 空格隔开安装多个🌰 案例.卸载wget命令
[root@Kylin ~]# yum -y remove wget tree# 卸载多个,同理,用空格隔开'会连同依赖一起卸载掉' <-- 没有软件用到这个依赖了无法安装问题:
(1)网络不通
ping www.baidu.com# 域名不通,pingDNS服务器
ping 223.6.6.6# DNS服务器能ping通,那就是域名解析有问题DNS服务器也不通,那我们用虚拟机ping一下宿主机,再翻前面笔记找问题
(2)命令错误
单词、语法都不能错
正确的: yum -y install xxx
(3)软件名称错误
yum -y install wgea# 包名wget,这是错误的拼写(4)yum仓库问题、缓存问题
清理yum仓库缓存
[root@oldboy ~]# yum clean all21 files removed# 清除了21个缓存文件[root@oldboy ~]# yum makecache# 重构缓存(5)安装的命令属于其他的软件包中
🌰 安装rz命令
[root@oldboy ~]# yum -y install rzLast metadata expiration check: 2:58:46 ago on Mon 08 Dec 2025 04:19:20 PM CST.No match for argument: rzError: Unable to find a match: rz# 匹配不到,也找不到rz不知道rz命令属于哪个包如何解决?
- 直接百度搜索
- linux 系统安装rz命令
- 💡 在Linux系统中安装rz命令,通常需要先安装 ==lrzsz软件包==,因为rz命令是lrzsz软件包的一部分
- yum -y search
使用命令查找: yum -y search rz
[root@Kylin ~]# yum -y search rzLast metadata expiration check:.....========= Name & Summary Matched: rz =========lrzsz.x86_64 : The lrz and lsz modem# 安装了lrzsz就相当于安装了rz
# netstat无法安装,和上面rz类似,无法直接安装[root@oldboy ~]# yum search netstatLast metadata expiration check:.....No matches found. ⚠️ '模糊匹配,不一定能找到’'netstat 也不在单独的包里'
[root@Kylin ~]# yum -y install net-tools✅ netstat 属于 net-tools 包👑yum provides 命令
'和上面的search差不多!'
[root@Rocky ~]# yum provides rz✅ 它会一个个仓库的去找Extra Packages for Enterprise Linux 7 - x86_64 1.3 MB/s | 17 MBRocky Linux 10 - BaseOS 738 kB/s | 16 MBRocky Linux 10 - AppStream 572 kB/s | 12 MBRocky Linux 10 - Extras 576 B/s | 9.7 kBlrzsz-0.12.20-66.el10.x86_64 : The lrz and lsz modem.......'就是这个lrzsz!!!'仓库 :baseos匹配来源:文件名 :/usr/bin/rzyum -y reinstall
覆盖安装、无法使用某个命令也无法卸载情况下尝试用此种方法
- 适用于修复损坏的安装
- 比如某些二进制文件被误删、权限错误、文件损坏等情况,reinstall 可以快速恢复
[root@Kylin ~]# yum -y reinstall wget# 重新安装wget,覆盖已有文件yum repolist
查看系统当前所有的仓库
[root@Kylin ~]# yum repolistrepo id repo nameepel Extra Packages for Enterprise Linux 7 - x86_64ks10-adv-os Kylin Linux Advanced Server 10 - Osks10-adv-updates Kylin Linux Advanced Server 10 - Updates其实当我们对某个源有疑惑的时候,直接进入到
/etc/yum.repos.d/目录中,直接cat查看对应源即可
[root@oldboy ~]# cd /etc/yum.repos.d/[root@oldboy yum.repos.d]# lltotal 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 - $basearchbaseurl=http://mirrors.aliyun.com/epel/7/$basearch# 直接查看仓库配置文件内容yum list
查看仓库中有哪些可以安装的软件列表
查找仓库中是否有net-tools包?
[root@oldboy ~]# yum list | grep net-toolsnet-tools.x86_64 2.0-0.54.ky10 @anacondanet-tools-help.noarch 2.0-0.54.ky10 @anaconda# 配合管道符过滤❗ 如果过滤不到,那么这个软件包就不在'可以安装的软件列表'👑yum info
yum info nginx# 命令可以查看 nginx 软件包的详细信息[root@Rocky ~]# yum info nginxAvailable PackagesName : nginxEpoch : 2Version : 1.30.3Release : 1.el10.ngxArchitecture : x86_64Size : 1.1 MSource : nginx-1.30.3-1.el10.ngx.src.rpmRepository : nginx-stableSummary : High performance web serverURL : https://nginx.org/🧣yum 撤销
[root@Rocky ~]# yum historyID | 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包
'使用光驱作为本地的yum仓库!!!'[root@Rocky ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsr0 11:0 1 8.6G 0 rom# 第一行这个就是光驱
[root@Rocky ~]# ll /mnttotal 0# 挂载前查看这个目录什么都没有、'这里我们只是临时的挂载了一下,并非永久挂载'
[root@Rocky ~]# mount /dev/cdrom /mnt# 将光驱挂载到/mnt 相当于给光驱了开了一个入口mount: /mnt: WARNING: source write-protected, mounted read-only.# 挂载提示写保护、只读✅ 只能看,不能往里面写东西!
[root@Rocky ~]# df -hFilesystem Size Used Avail Use% Mounted on..../dev/sr0 8.7G 8.7G 0 100% /mnt当挂载成功后,后面我们就一直都在操控/mnt目录.
[root@Rocky ~]# ll /mnt/# 再次查看时,可以看到光驱中的文件total 544dr-xr-xr-x 3 root root 2048 Mar 15 2023 EFIdr-xr-xr-x 3 root root 2048 Mar 15 2023 imagesdr-xr-xr-x 2 root root 2048 Mar 15 2023 isolinuxdr-xr-xr-x 5 root root 2048 Mar 24 2023 kylin-sm-package-r--r--r-- 1 root root 441 Mar 31 2023 LICENSEdr-xr-xr-x 2 root root 2048 Mar 15 2023 manualdr-xr-xr-x 2 root root 538624 Mar 24 2023 Packagesdr-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]# lltotal 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[root@Rocky ~]# ls /mntAppStream boot EFI extra_files.json LICENSE RPM-GPG-KEY-Rocky-10BaseOS 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=1gpgcheck=0
[yun]name = "内部yum源"baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/enabled=1gpgcheck=0EOF
yum clean allyum makecache=================================
'创建本地的yum仓库'cat > /etc/yum.repos.d/local.repo <<EOF[local_app]name=local appbaseurl=file:///mnt/AppStreamenabled=1gpgcheck=0
[local_base]name=local basebaseurl=file:///mnt/BaseOSenabled=1gpgcheck=0EOF[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]# lltotal 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]# lltotal 4-rw-r--r-- 1 root root 156 Mar 18 08:19 local.repo⚠️ 只剩下一个我们本地的yum仓库[root@Rocky yum.repos.d]# yum makecachelocal app 122 MB/s | 1.5 MB 00:00local base 144 MB/s | 1.5 MB 00:00Metadata cache created.# 缓存已建立!
'进行下载测试!'
'成功!当然本地yum仓库,他完全可以不用联网,就可以进行下载!!'# 大家也可以试着把网关了!
[root@Rocky yum.repos.d]# mv /home/rocky* .[root@Rocky yum.repos.d]# lltotal 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]# lltotal 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 makecachelocal app 3.8 MB/s | 3.9 kB 00:00local base 3.8 MB/s | 3.9 kB 00:00Rocky Linux 10 - BaseOS 398 B/s | 4.3 kB 00:11Rocky Linux 10 - AppStream 400 B/s | 4.3 kB 00:11Rocky Linux 10 - Extras 280 B/s | 3.1 kB 00:11Rocky Linux 10 - Extras 375 B/s | 6.0 kB 00:16Metadata cache created.[root@Rocky yum.repos.d]# yum repolist# 查看已有的yum仓库列表!repo id repo nameappstream Rocky Linux 10 - AppStreambaseos Rocky Linux 10 - BaseOSextras Rocky Linux 10 - Extraslocal_app local applocal_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 -l31# 统计未启用的源rpm
特点:
✅️ 必须提前下载.rpm结尾软件包
⚠️ rpm不支持自动解决依赖问题、需要我们手动解决
- 点外卖、相当于点速冻水饺半成品
Centos和Kylin都是rpm结尾, Ubuntu是 .deb —> 不能混用
问: 既然rpm包那么麻烦,为什么还用它进行安装呢?
📌 答: 因为那些仓库中没有对应的软件、或者版本不兼容,所以我们企业,往往通过下载.rpm包的方式,进行软件的安装
rpm -ivh 包.rpm
[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卸载掉
[root@oldboy Packages]# yum -y remove wget# 先用yum卸载wget(1) 第一次尝试安装wget的rpm包
[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpmerror: Failed dependencies: # 失败依赖 libmetalink.so.3()(64bit) is needed by wget-1.20.3-3.ky10.x86_64# 我们刚才remove卸载的时候,同时它的依赖也卸载掉了# rpm安装wget时,因为缺少它的依赖,所以没有办法安装成功(2) 安装所需依赖
[root@Kylin Packages]# yum -y install libmetalink# 不是所有的依赖,都能简单的通过yum来安装📌 能用yum安装就用yum安装,如果yum仓库里面没有它的依赖,那么只能去找这个依赖的rpm包去了,一个一个解决,才能把最终的软件安装成功
(3) 安装完所需依赖后,重新安装wget的rpm包
[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpmVerifying... ########## [100%]Preparing... ########## [100%]Updating / installing... 1:wget-1.20.3-3.ky10 ########## [100%]# 这样就算是成功安装了安装包的位置
安装的时候注意安装包所在的位置
错误示范:
[root@oldboy home]# lltotal 0# 当前目录为空[root@oldboy home]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpmerror: open of wget-1.20.3-3.ky10.x86_64.rpm failed: No such file or directory# 当前路径就没有这个rpm包,自然不可能安装成功!(1)相对路径安装
相对路径 进入到rpm包所在的路径安装
[root@Kylin ~]# cd /mnt/Packages/[root@Kylin Packages]# rpm -ivh wget-1.20.3-3.ky10.x86_64.rpm# 进入到包所在目录后安装(2)绝对路径安装
[root@Kylin ~]# rpm -ivh /mnt/Packages/wget-1.20.3-3.ky10.x86_64.rpm# 绝对路径安装,即使当前不在包所在目录也可以✅ 推荐rpm -qa 包名
查看软件包是否安装成功
📌 特性
都能查看那些途径来的软件包?
- 直接使用
rpm -ivh package.rpm安装的包; - 通过
yum install(或在较新系统中的dnf install)安装的包; - 系统初始安装时就包含的 RPM 包
- ⚠️ 不会显示通过源码编译安装(如
./configure && make && make install)的软件
[root@Kylin ~]# rpm -qa wgetwget-1.20.3-3.ky10.x86_64# 如果有这个包,就是安装成功了,否则就是没有安装成功[root@Kylin ~]# rpm -qa wget treewget-1.20.3-3.ky10.x86_64tree-1.8.0-2.ky10.x86_64# 空格隔开即可# 查看多个软件是否安装
[root@oldboy home]# rpm -qa | wc -l1103# 查看系统中安装的所有软件数量⭐rpm -e 包名
卸载软件
'erase: 擦拭删除'rpm -e --nodeps httpd-e: # 卸载--nodeps: # 忽略依赖
[root@Kylin ~]# rpm -e wget# rpm方式卸载wget[root@Kylin ~]# yum -y remove wget# yum方式卸载wget-
不管是yum还是rpm安装的软件都可以用yum或者rpm卸载
-
yum卸载时自动解决掉依赖问题、rpm卸载不支持自动解决依赖
📌 yum卸载依赖的✅ 核心原则: “是否还有其他包依赖它” yum 在卸载一个包时,只会自动卸载那些**“不再被任何已安装包需要”**的依赖包
rpm -qc wget
查看安装包的配置文件
[root@oldboy home]# rpm -qc wget/etc/wgetrc# wget的配置文件路径rpm -ql wget
查看指定软件包安装的所有文件及其路径
[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系统中
[root@Kylin ~]# yum -y install lrzsz# 安装了lrzsz就相当于安装了rz# lrzsz包含rz命令(1)rz 直接回车
选择windows中的文件上传即可

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

(3)rz -bye
避免出现乱码
⚠️ 不加参数,可能会出现乱码!
sz下载命令
将linux中的文件下载到windows系统中
sz 文件名称# 将文件从Linux下载到Windows
Linux文件详细信息

ll -i
查看文件的详细信息以及inode号码
[root@Kylin ~]# ll -i oldboy.txt67157818 -rw-r--r-- 1 root root 12 Nov 4 11:46 oldboy.txt# 第一列: inode号码 索引文件# 第二列: 文件类型# 第三列: 文件权限# 第四列: 硬连接个数# 文件默认1个硬链接、目录默认2个硬链接# 第五列: 属主# 第六列: 属组# 第七列: 大小# 第八列: 时间# 第九列: 文件名称🧣stat 文件路径
使用stat查看文件的详细信息(面试题)
[root@Kylin ~]# stat oldboy.txt File: 'oldboy.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty fileDevice: fd00h/64768d Inode: 67157818 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)# 权限 用户id 组idAccess: 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号
[root@oldboy home]# df -iFilesystem Inodes IUsed IFree IUse% Mounted ondevtmpfs 246339 466 245873 1% /devtmpfs 250387 1 250386 1% /dev/shmtmpfs 250387 697 249690 1% /runtmpfs 250387 17 250370 1% /sys/fs/cgroup/dev/mapper/klas-root 24619008 123957 24495051 1% /# 跟下的inode号最多df -h
block就是块的大小,也是存储空间的大小
查看磁盘剩余存储空间
[root@Kylin ~]# df -h文件系统 容量 已用 可用 已用% 挂载点devtmpfs 963M 0 963M 0% /devtmpfs 979M 0 979M 0% /dev/shmtmpfs 979M 8.9M 970M 1% /runtmpfs 979M 0 979M 0% /sys/fs/cgroup/dev/mapper/klas-root 47G 3.7G 44G 8% /# 根分区,整个磁盘空间的大小,基本上都给它了文件类型
s # 接口文件 了解
p # 管道文件 了解
-
表示普通文件、压缩包、视频音频、图片、命令
d
表示目录

- 这个根目录也有inode号,对应一个block块
- 里面存放的是下面所有子目录和子文件的名称,不存放具体的数据,只是用来存放名称
- 当我们找到**/opt/目录后,他也有个inode号**,对应的block存放这着1.txt和2.txt的名称
- 这个1.txt和2.txt的block块存放这具体的数据.
- 📌 目录的大小和文件大小没有关系,目录只存放名称,占不了多少磁盘空间!
l
表示软链接(windows称为快捷方式)
b
块设备 硬件设备(块存储)
[root@oldboy home]# ll /dev/cdromlrwxrwxrwx 1 root root 3 Dec 9 09:06 /dev/cdrom -> sr0# l打头,这个光驱就是一个软连接,是./sr0(当前目录下sr0)的快捷方式
[root@oldboy home]# ll /dev/sr0brw-rw---- 1 root cdrom 11, 0 Dec 9 09:06 /dev/sr0# b打头,这个是它的本体,也就是块设备c
字节设备
常用的字节文件
/dev/zero
生成大的文件进行测使用, 压力测试我们服务器, 测试磁盘性能
[root@oldboy home]# ll /dev/zerocrw-rw-rw- 1 root root 1, 5 Dec 9 09:06 /dev/zero# c打头,字节设备dd命令
生成指定大小的文件(不多也不少)
if # input fileof # output filebs # block sizecount # 读取多少次🌰 案例:生成10M的文件
[root@Kylin ~]# dd if=/dev/zero of=1.txt bs=1M count=1010+0 records in10+0 records out10485760 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的文件
[root@Kylin ~]# dd if=/dev/zero of=2.txt bs=1M count=1000# 只有最后的count读取次数变了,1M×1000=1G/dev/null
作用可以将不想看的结果,定向到/dev/null, 类似于黑洞
[root@oldboy home]# ll /dev/nullcrw-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)命令错误
[root@oldboy home]# lltotal 0drwxr-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)结果错误
[root@Kylin ~]# ll aaals: cannot access 'aaa': No such file or directory# 没有这个文件或目录,命令结果是错误的
[root@Kylin ~]# echo $?2# 即使ll命令本身是对的,那也是非0数重定向
📌 概念: 改变输出的方向.最常见的就是往文件里面写东西,或者追加内容.

- 我们通过这个通道,1和2我们就可以控制这些输出
1>
🌰 只接收正确的结果 >
[root@Kylin ~]# echo aaa > test.log[root@Kylin ~]# cat test.logaaa# 查看这个文件,有对应的内容🌰 不要错误的结果
[root@Kylin ~]# llll > test.log-bash: llll: command not found# 压根儿没有这个命令,他直接报错输出至屏幕上,而并非写入文件
[root@Kylin ~]# cat test.log[root@Kylin ~]## 报错并没有写入至对应文件中.默认只写正确的# 不管命令本身,还是结果都得是正确的2>
🌰 只要错误的结果 2>
先将test.log清空、再接收错误的结果,正确的不会写入文件,直接输出到屏幕
[root@oldboy home]# echo bbb 2> test.logbbb# 为什么直接输出到屏幕上了呢? 2>只要错误的结果
[root@oldboy home]# echo $?0# 说明上一条命令是正确的 ✅
[root@oldboy home]# cat test.log# 里面什么都没有只接收错误的结果
[root@Kylin ~]# llll 2> test.log# 命令本身是错误的 ❌
[root@Kylin ~]# cat test.log-bash: llll: command not found# 会把错误的信息,写入到文件中🌰 *将正确的输出**追加>>到test.log 错误的输出追加>>*到test.txt
[root@Kylin ~]# echo aaa >>test.log 2>>test.txt# 命令本身还是结果都没有问题
[root@Kylin ~]# ech aaa >>test.log 2>>test.txt# 命令本身错误,"找不到命令ech"
[root@Kylin ~]# cat test.logaaa# 只有正确的输出
[root@Kylin ~]# cat test.txt-bash: ech: command not found# 报错在这里面&>>
不管正确还是错误都追加>>到bb.txt
注意,两种用法的使用位置
(1) 通过2>&1实现
[root@Kylin ~]# cat bb.txtaaa# 刚开始只有这一行
[root@Kylin ~]# echo aaa >>bb.txt 2>&1'在整个命令的后面加'# >>bb.txt,这个是追加文件!
[root@Kylin ~]# cat bb.txtaaaaaa# 成功的把正确的追加进来了
[root@Kylin ~]# ech aaa >>bb.txt 2>&1# 命令本身错误."ech"
[root@Kylin ~]# cat bb.txtaaaaaa-bash: ech: command not found# 把错误的信息也追加过来了(2) &>>
'非常方便,推荐用这个'[root@Kylin ~]# ech aaa &>> bb.txt# 功能同上,不过多赘述!🧣对比
解释 2>&1 >file 与 >file 2>&1 的区别

# 错误信息输出至屏幕,丢弃正常输出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一直往外输出,各种符号,乱码
[root@Kylin ~]# ll /dev/urandomcrw-rw-rw- 1 root root 1, 9 Nov 4 08:32 /dev/urandom# c打头,字符设备⚠️ 千万别尝试直接cat /dev/urandom
直接给我电脑干死机了,我丢,太狠了
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!




