当前位置:首页>Linux>Linux 入门必看:文件管理与 IO 重定向保姆级教程(小白也能看懂)

Linux 入门必看:文件管理与 IO 重定向保姆级教程(小白也能看懂)

  • 2026-10-11 07:40:27
Linux 入门必看:文件管理与 IO 重定向保姆级教程(小白也能看懂)

前言

刚接触 Linux 的小伙伴,是不是一打开终端就一脸懵?看着满屏的命令和奇怪的目录结构,完全不知道从哪下手?

别慌!今天这篇文章,我会用最通俗的大白话,带大家搞定 Linux 最基础也最重要的文件管理和标准输入输出重定向。这两个知识点是所有 Linux 操作的基石,不管你是做运维、开发还是测试,只要用 Linux 就绕不开它们。

全程没有晦涩的术语,每个命令都配了实际例子,跟着敲一遍就能学会。看完这篇,你再也不会对着/etc、/usr这些目录发呆,也不会因为手滑敲了rm -rf而慌到出汗~

一、先搞懂 Linux 的 “户型图”:文件系统目录结构

Windows 的文件是按 C 盘、D 盘划分的,而 Linux 完全不一样 —— 它所有的文件都放在一棵倒置的大树上,最顶端是根目录/,所有文件和目录都从这里衍生出来。

1.1 什么是 FHS?

为了让不同 Linux 发行版(比如 Ubuntu、CentOS)的目录结构统一,Linux 基金会制定了FHS(文件系统层次化标准)。简单说,FHS 就是 Linux 界的 “统一户型图”,规定了每个目录该放什么东西,这样不管你用哪个发行版,找文件都不会乱。

1.2 核心目录功能速查表

不用死记硬背,先混个脸熟,用多了自然就记住了:

目录
核心功能
新手必知
/root
管理员(root)的家目录
只有 root 用户能进,相当于 Windows 的 “管理员桌面”
/home/用户名
普通用户的家目录
比如你的用户叫 alice,家目录就是/home/alice,平时自己的文件都放这
/etc
系统配置文件目录
所有软件的配置文件基本都在这,比如网络配置、服务配置
/bin
和/sbin
系统命令目录
/bin
放所有用户都能用的命令(比如ls、cd),/sbin放只有管理员能用的命令(比如reboot)
/usr
系统软件和资源目录
相当于 Windows 的Program Files,安装的软件大部分都在这
/var
可变数据目录
放经常变化的文件,比如日志(/var/log)、缓存、进程 pid 文件
/tmp
临时文件目录
系统重启后会自动清空,临时文件可以放这
/dev
设备文件目录
Linux 里一切皆文件,你的硬盘、U 盘、键盘都会在这里变成一个文件
/boot
系统启动文件目录
存放内核和引导程序,删了系统就启动不了了!

1.3 新版本的小变化

现在的 CentOS 8+、Ubuntu 18.04 + 系统里,/bin、/sbin、/lib、/lib64都变成了软链接,实际指向/usr下面的对应目录。你可以敲这个命令验证一下:

ls -l /bin /sbin /lib /lib64

输出结果里会看到类 似lrwxrwxrwx 1 root root 7 May 11 2019 /bin -> usr/bin的内容,这就是软链接,相当于 Windows 的快捷方式。

1.4 一眼识别文件类型:颜色和标识符

Linux 终端里不同颜色的文件代表不同类型,不用敲命令就能快速判断:

颜色
文件类型
标识符(ls -l 第一个字符)
蓝色
目录
d
绿色
可执行文件
-
红色
压缩文件 / 安装包
-
浅蓝色
软链接(快捷方式)
l
黄色
设备文件(硬盘、U 盘等)
b/c
粉红色
套接字文件 / 图片
s
白色
普通文本文件
-
灰色
其他文件
-

二、新手必学的文件操作命令(从入门到熟练)

2.1 我在哪?pwd显示当前目录

刚打开终端,不知道自己在哪个目录?敲pwd就对了:

# 显示当前工作目录的绝对路径pwd# 输出示例:/root
  • -P
    :显示真实物理路径(如果当前目录是软链接,会显示它指向的实际目录)
  • -L
    :显示链接路径(默认)

2.2 怎么去?cd切换目录

cd是最常用的命令,记住这几个用法就够了:

# 切换到指定目录(绝对路径)cd /etc/apt# 切换到指定目录(相对路径,从当前目录出发)cd apt.conf.d# 回到上一级目录cd ..# 回到上上次所在的目录(超级实用!)cd -# 直接回到当前用户的家目录cd# 或者cd ~# 切换到指定用户的家目录(需要权限)

2.3 有什么?ls列出目录内容

ls用来查看当前目录里有什么文件和目录,常用选项一定要记牢:

# 列出当前目录的文件和目录(只显示名称)ls# 显示详细信息(权限、大小、修改时间等)ls -l# 很多系统里ll是ls -l的别名,直接敲ll更方便ll# 显示所有文件,包括隐藏文件(以.开头的文件)ls -la# 递归显示所有子目录的内容ls -R# 只显示目录本身,不显示里面的内容ls -ld /etc# 按文件大小从大到小排序ls -lhS# 按修改时间从新到旧排序

2.4 文件的 “身份证”:stat查看文件状态

每个文件都有两部分信息:元数据(属性)和内容。stat命令可以查看文件的完整元数据,包括三个非常重要的时间戳:

# 查看文件的详细状态stat /etc/fstab

输出结果里的三个时间:

  • Access
    (atime):最后一次访问文件内容的时间
  • Modify
    (mtime):最后一次修改文件内容的时间
  • Change
    (ctime):最后一次修改文件元数据(权限、属主等)的时间

2.5 这是什么文件?file判断文件类型

Linux 不根据后缀名判断文件类型,所以有时候你拿到一个没有后缀的文件,不知道怎么打开,用file命令就对了:

# 判断文件类型file test.sh# 输出:test.sh: Bourne-Again shell script, ASCII text executable# 只显示结果,不显示文件名file -b test.txt
实用技巧:Windows 和 Linux 的文本文件换行符不一样,Windows 是CRLF,Linux 是LF。用file命令可以看到这个区别,用dos2unix命令可以转换格式:
# 安装转换工具apt install dos2unix# 将Windows文本转成Linux格式dos2unix win.txt# 将Linux文本转成Windows格式unix2dos linux.txt

2.6 批量操作神器:文件通配符

想批量操作多个文件?不用一个个写文件名,用通配符就行:

通配符
作用
*
匹配任意多个字符(不匹配隐藏文件)
?
匹配任意单个字符
[0-9]
匹配 0-9 中的任意一个数字
[a-z]
匹配任意一个小写字母
[A-Z]
匹配任意一个大写字母
[^abc]
匹配除了 a、b、c 之外的任意字符

例子:

# 列出所有以.txt结尾的文件ls *.txt# 列出所有以a开头、中间有一个数字、以b结尾的文件ls a?b.txt# 列出所有文件名是3个字符的文件ls ???

2.7 创建空文件:touch

touch主要用来创建空文件,也可以刷新文件的时间戳:

# 创建一个空文件touch test.txt# 同时创建多个文件touch file1.txt file2.txt file3.txt# 创建带时间戳的文件(超级实用!)touch $(date +%F_%T).log# 输出示例:2026-05-15_14:30:00.log

2.8 复制粘贴:cp命令

cp用来复制文件和目录,新手最容易踩的坑是覆盖文件不提示,所以建议养成加-i选项的习惯:

# 复制文件到指定目录cp test.txt /tmp/# 复制文件并重命名cp test.txt /tmp/test_bak.txt# 复制目录(必须加-r选项递归复制)cp -r /etc/sysconfig/ /tmp/# 复制时保留文件的权限、时间等属性cp -p test.txt /tmp/# 复制前先备份原文件(防止覆盖)cp -b test.txt test_bak.txt# 保留多版本备份cp --backup=numbered test.txt test_bak.txt# 会生成test_bak.txt.~1~、test_bak.txt.~2~这样的备份文件

2.9 移动 / 重命名:mv和rename

mv命令既可以移动文件,也可以重命名文件:

# 重命名文件mv old.txt new.txt# 移动文件到指定目录mv test.txt /tmp/# 移动多个文件到目录mv file1.txt file2.txt /tmp/# 移动前先备份mv -b test.txt /tmp/
如果需要批量重命名,用rename命令更方便。注意:CentOS 和 Ubuntu 的rename用法不一样:
# CentOS用法:将所有.txt文件改成.logrename txt log *.txt# Ubuntu用法:将所有.txt文件改成.log(用正则表达式)rename 's/\.txt$/\.log/' *.txt

2.10 危险!删除命令rm

rm是 Linux 里最危险的命令,没有之一!因为 Linux 没有回收站,删了就很难恢复了。

新手必记的安全用法:

# 删除文件(会提示确认)rm -i test.txt# 强制删除文件(不提示,慎用!)rm -f test.txt# 删除目录(必须加-r递归删除)rm -rf testdir/
绝对不要执行的命令:
# 删根!会清空整个系统,生产环境执行这个直接跑路吧rm -rf /# 这个也一样危险,删根目录下所有内容rm -rf /*
防误删技巧:给rm定义别名,把删除改成移动到回收站:
# 临时生效alias rm='mv -t /tmp'# 永久生效,把上面这句话加到~/.bashrc文件里echo "alias rm='mv -t /tmp'" >> ~/.bashrcsource ~/.bashrc

2.11 目录操作:tree、mkdir、rmdir

  • tree:以树形结构显示目录

# 安装treeapt install tree# 显示当前目录的树形结构tree# 只显示2层目录tree -L 2 /# 只显示目录tree -d
mkdir:创建目录
# 创建单个目录mkdir testdir# 递归创建多级目录(最常用)mkdir -p a/b/c/d# 创建目录并指定权限mkdir -m 777 testdir
rmdir:删除空目录 只能删除空目录,如果目录里有文件,用rm -rf:
# 删除空目录rmdir testdir# 递归删除多级空目录rmdir -p a/b/c/d

三、搞懂 inode:Linux 文件的底层秘密

很多新手会遇到一个奇怪的问题:磁盘还有很多空间,但创建文件时却提示 “No space left on device”。这时候就要了解 inode 了。

3.1 inode 到底是什么?

你可以把 inode 想象成文件的身份证:

  • 每个文件都有一个唯一的 inode 号(身份证号)
  • inode 里存储了文件的元数据(权限、属主、大小、时间戳等,也就是身份证上的信息)
  • 文件的实际内容存在 **block(数据块)** 里(相当于房子里的东西)

磁盘格式化的时候,会分成两个区域:

  1. inode 区
    :存储所有文件的 inode,一般占磁盘空间的 1% 左右
  2. 数据区
    :存储文件的实际内容

所以,一个磁盘能存多少文件,不仅取决于磁盘大小,还取决于 inode 的数量。如果 inode 用完了,即使磁盘还有空间,也无法创建新文件。

3.2 查看 inode 信息

# 查看磁盘的inode使用情况df -i# 查看文件的inode号ls -i test.txt# 查看文件的详细inode信息stat test.txt

3.3 inode 和文件操作的关系

  • 复制文件
    :分配一个新的 inode,复制数据到新的 block
  • 删除文件
    :只是把 inode 的链接数减 1,数据并没有立刻删除,等有新文件覆盖时才会真正删除
  • 移动文件
    :如果在同一个分区,只是改变文件名和目录映射,inode 和数据都不变,所以速度非常快

3.4 生产踩坑:inode 耗尽怎么办?

inode 耗尽通常是因为产生了大量的小文件(比如日志、缓存)。解决方法:

  1. 找到并删除无用的小文件
  2. 重新格式化磁盘,调整 inode 数量(不推荐,会丢失数据)

四、标准输入输出与重定向:让命令听你指挥

4.1 什么是标准输入输出?

Linux 系统给每个程序都默认打开了三个 “文件”:

  • 标准输入(stdin,文件描述符 0)
    :默认是键盘,程序从这里读取数据
  • 标准输出(stdout,文件描述符 1)
    :默认是终端屏幕,程序把正常结果输出到这里
  • 标准错误(stderr,文件描述符 2)
    :默认是终端屏幕,程序把错误信息输出到这里

你可以敲这个命令验证一下:

ls -l /dev/std*

4.2 输出重定向:把结果写到文件里

默认情况下,命令的结果会显示在屏幕上。用输出重定向,可以把结果写到文件里:

操作符
作用
>
覆盖重定向,文件不存在就创建,存在就覆盖
>>
追加重定向,文件不存在就创建,存在就追加到末尾
2>
错误覆盖重定向,只把错误信息写到文件
2>>
错误追加重定向
&>
合并覆盖重定向,把标准输出和错误都写到同一个文件
&>>
合并追加重定向

例子:

# 把ls的结果写到out.txt里(覆盖)ls > out.txt# 把ls的结果追加到out.txt里ls >> out.txt# 把错误信息写到err.txt里,正常结果显示在屏幕ls fstab null 2> err.txt# 把正常结果和错误信息都写到all.log里ls fstab null &> all.log# 等价于ls fstab null > all.log 2>&1
实用技巧:清空大文件
# 最安全的清空大文件方法cat /dev/null > huge.log

4.3 输入重定向:从文件读数据

默认情况下,程序从键盘读取数据。用输入重定向,可以让程序从文件里读取数据:

# 从a.txt里读取数据,交给bc命令计算echo "1+2+3+4+5" > a.txtbc < a.txt# 输出:15

五、新手避坑总结

  1. 绝对不要在生产环境执行rm -rf /*
    ,测试也要在虚拟机里做
  2. 复制、移动、删除文件前,先用ls确认一下文件名和路径
  3. 重要文件一定要备份,cp的时候加-b选项保留备份
  4. 遇到 “磁盘满” 的提示,先看df -h(数据空间)和df -i(inode 空间)
  5. Windows 和 Linux 的文本文件换行符不一样,跨系统传输后记得用dos2unix转换

写在最后

Linux 的文件管理和 IO 重定向看起来知识点多,但其实都是非常实用的基础操作。不用死记硬背,多敲几遍命令,遇到问题多查资料,慢慢就熟练了。

版权声明:本文内容转载自自CSDN博客:Youyan52O,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/Youyan52O/article/details/161120753?spm=1001.2660.3001.10198&utm_medium=distribute.pc_feed_vip_blog_category.none-task-blog-classify_tag-17-161120753-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_vip_blog_category.none-task-blog-classify_tag-17-161120753-null-null.nonecase如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。

最新文章

随机文章