Linux下一切皆文件
在 Linux 系统里,"一切皆文件" 是核心设计理念。这意味着系统中的各类资源,不管是硬件设备、网络连接,还是普通的磁盘文件、目录,都可以通过统一的文件操作接口进行访问,像读写、打开、关闭等。借助这种抽象方式,Linux 让用户能以一致的方式与系统中的所有资源进行交互。
- 统一接口 :不管资源的具体类型是什么,对它们的操作都遵循相同的模式。例如,你既可以用
cat
命令查看普通文件的内容,也能用它查看硬件设备文件的信息。 - 路径表示 :系统中的每个资源都有对应的路径,就像普通文件一样。比如,磁盘设备会被映射为
/dev/sda
,串口设备是/dev/ttyS0
。 - 文件描述符:程序通过文件描述符来操作资源,而不用关心资源本身的特性。
- 权限控制:所有资源的访问权限都是通过文件权限机制来管理的。
在windows系统中也是如此,windows的图形化界面其实也是文件,在启动电脑时,会打开一个叫桌面的文件,电脑中的快捷方式等都会保存在该文件中

右侧的文件类型是文件夹
在linux系统中命令也是一个个的文件,他们被保存在一个特定的目录下。当在终端输入一个命令后,shell会到指定目录下去查找可执行文件:
- 内置命令 :shell 首先会检查该命令是否为内置命令,像
cd
、echo
、exit
等都属于内置命令,它们是 shell 自身的一部分。 - 别名(Alias) :接着会查看是否有用户自定义的别名。别名是通过
alias
命令定义的快捷方式。 - 函数:然后检查是否为 shell 函数,shell 函数是用户自定义的代码片段。
- PATH 环境变量 :如果以上都不是,shell 会在
PATH
环境变量指定的目录中查找对应的可执行文件。PATH
是一个由冒号分隔的目录列表,常见的目录有/bin
、/usr/bin
、/sbin
、/usr/sbin
等。
命令执行流程
当 shell 找到匹配的可执行文件后,会按照以下步骤执行命令:
- 权限检查 :系统会检查当前用户是否拥有执行该文件的权限。可执行文件需要设置
x
权限位。 - 文件类型识别 :
- 二进制可执行文件 :这类文件是经过编译的程序,比如 GCC 编译生成的
.o
文件。内核会将其加载到内存中,并通过 ELF(Executable and Linkable Format)格式解析文件头,然后执行其中的机器码。 - 脚本文件 :脚本文件的第一行通常是
#!/bin/bash
或#!/usr/bin/python
这样的 shebang 行,它指定了执行该脚本的解释器。系统会调用对应的解释器来执行脚本内容。 - 动态链接处理 :如果可执行文件依赖共享库,系统会在
/lib
、/usr/lib
等目录中查找并加载这些库。
- 二进制可执行文件 :这类文件是经过编译的程序,比如 GCC 编译生成的
- 进程创建 :shell 会调用
fork()
系统调用创建一个子进程,然后在子进程中通过exec()
系列系统调用加载并执行目标程序。 - 环境传递:父进程(shell)的环境变量会被传递给子进程,不过子进程对环境变量的修改不会影响父进程。
- 执行与返回 :程序开始执行后,其返回值会通过
exit()
系统调用返回给 shell,shell 会将这个返回值作为命令的退出状态码。
示例说明
下面通过一个简单的例子来展示这个过程:
- 当你输入
ls
命令时,shell 会在PATH
目录中查找ls
文件,最终在/bin/ls
找到它。 - 系统会检查当前用户是否有执行
/bin/ls
的权限。 - 由于
ls
是一个二进制可执行文件,内核会加载并执行它。 ls
程序读取当前目录的内容,并将结果输出到标准输出(通常是终端)。- 执行完毕后,
ls
程序返回退出状态码(通常成功是 0,失败非 0),shell 会显示新的命令提示符。
1.Linux下的基本指令
ls指令
ls
是一个基础且常用的指令,其主要功能是列出目录内容。
语法结构:ls [选项] [目录]
要是你不指定目录,ls
默认会列出当前工作目录的内容。
常用参数
下面这些是ls
指令常用的参数,你可以单独使用,也能组合起来用:
-a
:将所有文件显示出来,包括以.
开头的隐藏文件。-l
:以长格式展示文件信息,显示的内容有文件权限、硬链接数、所有者、所属组、大小、修改时间和文件名。-h
:和-l
一起使用时,会以人类可读的格式显示文件大小,例如1K
、2.5M
等。-t
:按照文件的修改时间对文件进行排序,最新修改的文件排在最前面。-r
:以反向顺序排列文件。-S
:根据文件大小对文件进行排序。-d
:只列出目录本身,而不列出目录里的内容。-R
:递归地列出所有子目录中的文件。
常用参数说明:
1.以长格式显示当前目录内容

2.显示所有文件(包含隐藏文件)
ls -a

3.不同参数可以组合使用
ls -al

pwd命令
显示用户所在目录

cd指令
在 Linux 系统中,cd
(Change Directory)是用于切换当前工作目录的核心指令,几乎所有终端操作都离不开它。
语法:cd 目录名
- 若不指定目录路径,默认切换到当前用户的家目录 (
/home/用户名
,可简写为~
)。 - 目录路径可以是绝对路径 (从根目录
/
开始,如/usr/local/bin
)或相对路径 (相对于当前目录,如./docs
或../parent
)。

系统中文件的存贮形式是以树形的方式存储的,当我们使用ls -a命令时,可以看到当前目录下有' . '和' . . ',其中一个点表示当前目录下,俩个点表示上一级目录下。
cd .. 进入上一级目录

cd . 表示当前目录

切换到指定绝对路径目录
cd /etc/apt # 切换到/etc/apt目录(绝对路径,从/开始)
切换到用户家目录
cd ~ # 切换到当前用户的家目录(如/home/ubuntu)
cd # 不填参数,效果同上
cd ~user # 切换到用户user的家目录(需有访问权限)
切换到上一次工作目录
cd - 切换到上一次所处的目录
切换到根目录
cd / 切换到根目录
touch 指令
语法:
1. 创建空文件
若指定的文件不存在,touch
会创建一个空文件:
touch filename.txt # 创建名为filename.txt的空文件
touch file1 file2 # 同时创建多个文件
2. 更新文件时间戳
若文件已存在,touch
会更新其访问时间 (atime)和修改时间(mtime)为当前系统时间:
touch existing_file # 更新existing_file的时间戳
常用参数
touch
的参数可用于精确控制时间戳的更新方式:
-a
:仅更新访问时间(access time)。-m
:仅更新修改时间(modify time)。-d
:指定自定义时间(需配合日期格式)。-t
:以[[CC]YY]MMDDhhmm[.ss]
格式指定时间。-c
:不创建新文件,仅更新已存在文件的时间戳。
mkdir指令
在 Linux 系统中,mkdir
(Make Directory)是用于创建目录(文件夹)的基础指令。
基本语法
mkdir [选项] 目录名1 [目录名2 ...]

示例演示
1. 创建单个目录
mkdir docs # 在当前目录下创建docs目录
mkdir /tmp/test # 在/tmp目录下创建test目录(需权限)
2. 递归创建多级目录
mkdir -p project/src/main/java/com/example # 一次性创建完整路径
3. 同时创建多个目录
mkdir dir1 dir2 dir3 # 创建3个平级目录
mkdir -p parent/{a,b,c} # 创建parent/a、parent/b、parent/c(需bash支持)
4. 创建带权限的目录
mkdir -m 750 team_share # 权限为rwxr-x---
5. 创建目录并显示详细过程
mkdir -vp logs/2023/07 # 显示创建logs、logs/2023、logs/2023/07的过程
rmdir && rm指令
rmdir
rmdir
(Remove Directory)是专门用于删除空目录的指令。
rmdir [选项] 目录名1 [目录名2 ...]
- 可同时删除多个空目录,用空格分隔目录名。
- 核心限制 :只能删除空目录(即目录内无任何文件或子目录),否则会报错。

1. 删除单个空目录
rmdir temp # 删除当前目录下的temp目录(必须为空)
2. 递归删除多级空目录
# 假设存在目录结构:a/b/c(均为空)
rmdir -p a/b/c # 递归删除c、b、a
-
同时删除多个空目录
rmdir dir1 dir2 dir3 # 删除3个平级空目录
-
显示详细删除过程
rmdir -vp logs/2023/07 # 显示删除logs/2023/07、logs/2023、logs的过程(若均为空)
权限限制:
- 删除目录需拥有该目录的写入权限 (
w
)和执行权限 (x
)。 - 示例:若用户无
/root
目录的写入权限,执行rmdir /root/test
会报错。
rm
rm
(Remove)是用于删除文件或目录的核心指令。
语法:
rm [选项] 文件或目录1 [文件或目录2 ...]
- 可同时删除多个文件或目录,用空格分隔。
- 核心区别 :删除目录需加
-r
参数,否则只能删除文件。

示例演示
-
删除单个文件
rm test.txt # 删除test.txt文件(无需确认)
-
删除多个文件
rm *.log # 删除当前目录下所有.log文件
rm file1 file2 file3 # 删除多个指定文件 -
递归删除目录(危险!)
rm -r data # 删除data目录及其所有内容(包括子目录和文件)
-
强制删除(不提示)
rm -rf temp # 强制递归删除temp目录(无论是否存在或非空)
-
交互式删除(安全)
rm -i *.bak # 删除所有.bak文件前逐个确认
-
显示详细删除过程
rm -rv logs/2023 # 显示删除logs/2023目录及其内容的详细过程
man指令
man
(Manual)是用于查看系统手册页的核心指令,堪称 "Linux 程序员的字典"。通过它可以快速获取任意命令、配置文件或系统调用的详细文档。
基本语法
man [选项] 命令/配置文件/系统调用名
手册页的章节划分
Linux 手册页按内容类型分为多个章节,查询时可通过指定章节号获取更精准的信息:

核心参数

cp指令
cp
(Copy)是用于复制文件和目录的核心指令。
基本语法
cp [选项] 源文件/目录 目标文件/目录
- 复制文件:目标可以是文件名或目录路径。
- 复制目录 :必须加
-r
或-R
参数(递归复制)。
核心参数

示例
-
复制单个文件
cp source.txt destination/ # 复制到目录
cp source.txt new_name.txt # 复制并改名 -
复制多个文件到目录
cp file1.txt file2.txt docs/ # 复制多个文件到docs目录
cp *.jpg images/ # 复制所有jpg文件到images目录 -
递归复制目录(重要)
cp -r project/ backup/ # 复制project目录及其内容到backup目录下
-
保留文件属性复制
cp -p log.txt archive/ # 保留log.txt的时间戳和权限
-
交互式覆盖(安全)
cp -i data.csv backup/ # 若backup/data.csv已存在,会询问是否覆盖
-
强制覆盖并显示进度
cp -fv config.ini /etc/ # 强制覆盖并显示复制过程
-
复制时排除特定文件或目录
cp -r --exclude="*.log" project/ backup/ # 复制project目录,但排除所有.log文件
mv指令
mv
(Move)是用于移动或重命名文件和目录的核心指令。
基本语法
mv [选项] 源文件/目录 目标文件/目录
- 重命名 :源和目标在同一目录下,例如:
mv old.txt new.txt
- 移动 :目标为其他目录,例如:
mv file.txt /path/to/destination/
参数

-
重命名文件 / 目录
mv old_name.txt new_name.txt # 重命名文件
mv project_v1 project_v2 # 重命名目录 -
移动文件到目录
mv file.txt documents/ # 移动file.txt到documents目录
mv *.jpg photos/ # 移动所有jpg文件到photos目录 -
移动并同时重命名
mv data.csv backup/old_data.csv # 移动到backup目录并改名
-
递归移动目录
mv logs/ archive/ # 将logs目录移动到archive目录下(无需-r参数)
-
交互式覆盖(安全)
mv -i config.ini /etc/ # 若/etc/config.ini已存在,会询问是否覆盖
-
强制移动并显示进度
mv -fv temp/* production/ # 强制移动temp目录下的所有内容到production目录
cat指令
cat
(Concatenate)是用于查看文件内容、合并文件的基础指令。
基本语法
cat [选项] [文件1] [文件2] ...
- 若不指定文件,
cat
会从标准输入读取内容(需按Ctrl+D
结束输入)。 - 可同时指定多个文件,
cat
会按顺序合并输出。
参数

示例
-
查看文件内容
cat README.md # 显示README.md的内容
-
合并多个文件
cat part1.txt part2.txt > combined.txt # 将part1和part2合并为combined.txt
-
显示行号
cat -n config.ini # 显示config.ini的内容并添加行号
-
压缩空行并显示行尾标记
cat -sE long_file.txt # 压缩连续空行并在每行末尾显示$
-
从标准输入创建文件
cat > new_file.txt # 输入内容,按Ctrl+D保存
-
追加内容到文件
cat >> existing_file.txt # 追加输入内容,按Ctrl+D结束
more指令
more
是用于分页查看文件内容的基础工具,尤其适合浏览大文件。它提供了简单的导航功能,让用户可以逐页查看内容,避免一次性加载整个文件。
基本语法
more [选项] 文件名
核心操作键

参数

示例
-
分页查看大文件
more /var/log/syslog # 分页查看系统日志
-
指定每页行数
more -20 data.csv # 每页显示20行
-
搜索特定内容
more large_file.txt # 进入more模式后,输入
/关键词
进行搜索 -
同时查看多个文件
more file1.txt file2.txt # 依次查看多个文件,按
:n
切换到下一个
常见场景
-
快速预览大文件
more access.log # 快速查看日志文件前几页
-
配合管道使用
cat large_file.txt | more # 等同于 more large_file.txt grep "error" log.txt | more # 分页查看搜索结果
-
临时替代
less
在仅安装了
more
的系统中(如某些精简版 Linux),可使用more
替代less
的基本功能。
less指令
less
是功能强大的文件内容分页查看工具,相比 more
提供了更丰富的操作和交互能力。
基本语法
less [选项] 文件名
核心操作键

常用参数

示例
-
分页查看带行号的文件
less -N large_file.log # 显示行号并分页查看
-
搜索并高亮关键词
less /var/log/auth.log # 进入less模式后,输入
/Failed
搜索失败记录 -
查看彩色日志
less -R colored_output.log # 正确显示日志中的彩色标记
-
单行显示长文本
less -S data.csv # 单行显示,用→←键查看长行内容
-
从特定位置开始查看
less +/ERROR log.txt # 直接定位到第一个ERROR出现的位置
head指令
head
是用于查看文件前几行的基础指令
基本语法
head [选项] 文件名
参数

示例
-
显示前 N 行
head -n 3 data.csv # 显示data.csv的前3行
-
显示前 N 字节
head -c 50 config.ini # 显示config.ini的前50个字节
-
同时查看多个文件
head file1.txt file2.txt # 依次显示多个文件的前10行(带文件名标题)
-
结合管道使用
cat large_file.txt | head -n 20 # 等价于 head -n 20 large_file.txt
常见场景
-
快速预览大文件
head access.log # 查看日志文件的开头,了解日志格式
-
查看 CSV 文件表头
head -n 1 data.csv # 显示CSV文件的表头(第一行)
-
截取文件片段
head -n 1000 large.txt > small.txt # 提取大文件的前1000行到新文件
-
查看二进制文件头部信息
head -c 200 binary_file # 查看二进制文件的前200字节(可能包含文件头信息)
tail指令
tail
是用于查看文件末尾内容的基础指令
基本语法
tail [选项] 文件名
默认显示文件的后 10 行。
tail access.log # 显示access.log的最后10行
参数

示例演示
-
显示最后 N 行
tail -n 20 error.log # 显示error.log的最后20行
-
实时监控日志更新
tail -f /var/log/nginx/access.log # 实时查看Nginx访问日志
-
监控多个文件
tail -f app.log db.log # 同时监控多个日志文件
-
从指定行开始显示
tail -n +500 large.txt # 从第500行开始显示(+号表示从第n行到文件末尾)
-
显示最后 N 字节
tail -c 1024 data.bin # 显示data.bin的最后1024字节
date指令
date
指令用于显示或设置系统的日期和时间,功能灵活,支持多种格式输出和时间计算
基本语法
date [选项] [格式字符串]
默认情况下,直接执行 date
会显示当前系统的本地时间(格式示例:Thu Jul 24 15:30:45 CST 2025
)。
核心功能与示例
-
显示当前时间(默认格式)
date
输出示例:Thu Jul 24 15:32:10 CST 2025
find指令
find
是用于在文件系统中搜索文件和目录的强大工具。
基本语法
find [搜索路径] [搜索条件] [处理动作]
- 搜索路径 :指定从哪个目录开始搜索,默认为当前目录(
.
)。 - 搜索条件:定义搜索规则,如按名称、时间、大小等筛选。
- 处理动作:对匹配的文件执行操作,如删除、打印、执行命令等。
搜索条件参数

处理动作参数

示例演示
-
按名称搜索
find /etc -name "hosts" # 搜索/etc目录下的hosts文件
find . -iname "readme.md" # 搜索当前目录下的readme.md(忽略大小写)
find /var/log -name "*.log" # 搜索/var/log目录下的所有.log文件 -
按文件类型搜索
find /tmp -type d # 搜索/tmp目录下的所有目录
find /usr/bin -type f # 搜索/usr/bin目录下的所有普通文件
find /mnt -type l # 搜索/mnt目录下的所有符号链接 -
按时间搜索
find . -mtime -1 # 搜索24小时内修改的文件
find /var/log -mtime +7 # 搜索7天前修改的文件
find /home -atime 3 # 搜索恰好3天前访问的文件 -
按大小搜索
find /tmp -size +100M # 搜索/tmp目录下大于100MB的文件
find . -size -1k # 搜索当前目录下小于1KB的文件
find /data -size 50M # 搜索/data目录下恰好50MB的文件 -
按权限搜索
find / -perm 777 # 搜索全系统权限为777的文件(需root权限)
find . -perm /u+x # 搜索当前目录下用户有执行权限的文件 -
组合条件搜索
搜索7天前的.log文件并删除
find /var/log -name "*.log" -mtime +7 -delete
搜索用户tom的大于100MB的文件
find /home -user tom -size +100M -exec ls -lh {} ;
搜索空目录并删除
find . -type d -empty -ok rmdir {} ;
which指令
which
是用于查找可执行文件路径的实用工具。
基本语法
which [选项] 命令名
例如:
which ls # 查找ls命令的路径
which python3 # 查找python3解释器的路径
whereis指令
whereis
是一个用于快速查找程序相关文件(如二进制可执行文件、源代码、手册页等)的命令行工具。它通过搜索系统预设的目录(而非遍历整个文件系统),高效定位与指定命令相关的核心文件,适用于快速获取程序的完整信息。
基本语法
whereis [选项] 命令名/文件名
例如:
whereis ls # 查找与ls相关的文件
whereis python # 查找python的二进制文件、源码和手册页
alias 指令
功能:设置命令的别名
# 用"ll"代替"ls -l"(显示文件详细信息)
alias ll="ls -l"
# 用"la"代替"ls -la"(显示所有文件,包括隐藏文件)
alias la="ls -la"
# 用"rm"代替"rm -i"(删除前提示确认,防止误删)
alias rm="rm -i"
grep 指令
语法: grep [选项] 搜寻字符串 ⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常⽤选项:
-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同
-n :顺便输出⾏号
-v :反向选择,亦即显⽰出没有 '搜寻字符串' 内容的那⼀⾏
zip/unzip 指令
语法: zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项
-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理
将test2⽬录压缩: zip test2.zip test2/*
解压到tmp⽬录: unzip test2.zip -d /tmp
tar指令
tar
(Tape Archive)是用于文件打包和压缩的核心工具,它能将多个文件或目录合并为一个归档文件(称为 "tar 包"),并可结合压缩算法(如 gzip、bzip2、xz)进一步减小文件体积。
基本语法
tar [选项] [归档文件名] [源文件/目录]
核心选项(可组合使用):
- 打包 :
-c
(创建归档) - 解压 :
-x
(提取归档) - 查看内容 :
-t
(列出归档内容) - 指定文件名 :
-f
(后接归档文件名,必须紧跟在其他选项后) - 压缩格式 :
-z
:使用 gzip 压缩(生成.tar.gz
或.tgz
文件)-j
:使用 bzip2 压缩(生成.tar.bz2
文件)-J
:使用 xz 压缩(生成.tar.xz
文件)
- 详细输出 :
-v
(显示操作过程)
核心功能与示例
-
创建未压缩的 tar 包
tar -cvf archive.tar files/ # 将files目录打包为archive.tar
-c
:创建归档-v
:显示详细过程-f
:指定归档文件名
-
创建并压缩 tar 包(常用)
使用gzip压缩(生成.tar.gz文件)
tar -czvf archive.tar.gz files/
使用bzip2压缩(生成.tar.bz2文件,压缩比更高)
tar -cjvf archive.tar.bz2 files/
使用xz压缩(生成.tar.xz文件,压缩比最高,现代推荐)
tar -cJvf archive.tar.xz files/
-
解压 tar 包
解压到当前目录
tar -xvf archive.tar
解压到指定目录
tar -xvf archive.tar -C /path/to/destination/
解压gzip/bzip2/xz压缩的tar包(自动识别压缩格式)
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz -
查看 tar 包内容
tar -tvf archive.tar # 列出归档中的所有文件和目录
-
只解压特定文件 / 目录
tar -xvf archive.tar path/to/specific/file.txt # 只解压指定文件
tar -xvf archive.tar directory/ # 只解压指定目录