Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)
文章目录
- 前言
- 1、Linux文件系统
- 1.1 核心特点
- 1.2 重要目录结构
- 1.3 文件类型
- 1.4 文件和目录的命名规则
- 1.5 文件与目录的定位方式
- 2、查看目录或文件的详细信息(ls)
- 2.1 基本语法
- 2.2 常用操作
- 2.3 高级用法
- 3、切换目录(cd)
- 3.1 常用操作
- 3.2 扩展:显示当前工作目录(pwd)
- 4、查看、合并文件(cat)
- 5、复制文件或目录(cp)
- 6、移动或重命名文件/目录(mv)
- 7、创建文件或目录
- 7.1 创建文件(touch)
- 7.2 创建目录(mkdir)
- 8、删除文件或目录
- 8.1 rm 命令的使用
- 8.2 rmdir 命令的使用
- 9、检测文件类型(file)
前言
本篇文章从底层出发,详细讲解了Linux文件系统的结构及特点,同时介绍了许多管理文件和目录的命令,包括ls、cd、cat、cp、touch、mkdir、file
等命令,通过学习这些命令,大家可以更好的操作并管理linux文件系统,整篇文章超10000字
,每个知识点都进行了详细的讲解并给出了操作实例,适合零基础学习者。
环境准备:
在开始学习Linux命令前,我们首先需要准备好运行命令所需的环境,也就是安装Linux操作系统。这里为了方便学习,我们将通过
VMware Workstation
虚拟化软件模拟一台Centos 7操作系统
的虚拟机,后续所有操作都将在该虚拟机上进行
安装教程推荐:
VMware Workstation
:https://blog.csdn.net/weixin_74195551/article/details/127288338
Centos 7 操作系统
:https://blog.csdn.net/m0_74950751/article/details/128773027
安装完成后,在桌面鼠标右键,打开终端,后续所有命令都是在终端运行的,若安装的命令行界面,则直接输入命令即可。
1、Linux文件系统
Linux 文件系统是操作系统中用于管理和组织存储设备(如硬盘、SSD、U盘等)数据的关键组件。它不仅定义了文件和目录的存储方式,还提供了一套逻辑规则和数据结构,确保用户和应用程序能够高效、安全地访问数据。
1.1 核心特点
-
单根树形结构:所有文件和目录以单一的根目录(
/
)为起点,形成层次化的树状结构,所有文件和目录都在根目录(/
)下 -
统一命名空间:无论物理存储设备如何分布,所有文件和目录都在同一逻辑路径下访问,也就是通过路径符
/
来进行访问,如:访问 /data/int/log ,路径通过/
字符进行分隔 -
区分大小写:文件名和路径对大小写敏感(例如 File.txt 和 file.txt 是两个不同的文件)。
-
一切皆文件:Linux 将硬件设备、进程信息、网络接口等抽象为文件(如 /dev/sda、/proc/cpuinfo)。
-
所有目录均可以是挂载点 :挂载点本质就是一个目录,只要目录存在,未被其它文件占用,就可以作为挂载点,包括根目录(
/
)都可以成为挂载点
Tips:
- 在Windows中所有文件和目录都是以
盘符
为起点,如:C:\data,D:\image ;而在Linux中则是以根目录(/
)为起点,如:/data - Linux中的
目录
相当于Windows中的文件夹
文件
是操作系统中数据存放的最小单位
1.2 重要目录结构
- /(根目录):所有目录和文件的起点。
- /root:超级用户(
root
)的家目录。 - /bin:存放系统基本命令(如
ls、cp
)。 - /etc:系统全局配置文件(如网络配置、用户账户)。
- /home:存放普通用户的家目录(每个用户独立子目录)。
- /var:存放动态数据(系统服务数据、日志文件、数据库文件、邮件等)。
- /tmp:系统临时文件,重启后可能被清除。
- /dev:设备文件(如硬盘
/dev/sda1
、终端/dev/tty
)。 - /proc和/sys:虚拟文件系统,提供内核和进程的实时信息,反映当前系统运行状态。
- /usr:用户程序和数据(如应用程序、库文件)。
- /boot:系统启动所需文件(内核、引导加载程序)。
- /mnt 和 /media:临时挂载外部设备的目录(如U盘、光盘)。
- /opt:第三方软件的可选安装位置。
1.3 文件类型
Linux 文件系统支持多种文件类型:
-
普通文件(Regular File):文本、二进制、图像等数据。
-
目录(Directory):包含其他文件或子目录的容器。
-
符号链接(Symbolic Link):指向另一个文件或目录的快捷方式。
-
设备文件(Device File):
- 块设备(Block Device):按块访问的设备(如硬盘)。
- 字符设备(Character Device):按字符流访问的设备(如键盘)。
-
管道(Pipe)和套接字(Socket):用于进程间通信。
-
命名管道(FIFO):类似管道,但有文件名。
1.4 文件和目录的命名规则
1、基本规则
-
区分大小写
- 文件名和目录名对大小写敏感,例如
file.txt、File.txt 和 FILE.TXT
是三个不同的文件。
- 文件名和目录名对大小写敏感,例如
-
允许的字符
- 可以使用字母(
A-Z、a-z
)、数字(0-9
)、下划线(_
)、点(.
)、连字符(-
)等。 - 避免特殊字符:如
!@#$%^&*(){}[]|\;:'"<>?
等,因为它们可能在 Shell 中有特殊含义(需用引号或转义符
)。
- 可以使用字母(
-
长度限制
- 通常最大长度为
255
字节(UTF-8 编码下可能少于 255 个字符)。 - 完整路径(含 /)的最大长度为
4096
字节(PATH_MAX 限制)。
- 通常最大长度为
-
不能以
/
命名/
是路径分隔符,不能作为文件名的一部分。
2、特殊名称
-
.
和..
.
表示当前目录,..
表示父目录(是每个目录默认存在的硬链接)。
-
隐藏文件或目录
- 以
.
开头的文件或目录(如 .bashrc)默认隐藏,需用ls -a
查看。
- 以
-
避免使用空格
- 虽然允许(如
my file.txt
),但空格在 Shell 中会被解析为参数分隔符,需用引号或转义符(\
)处理,如下:touch "my file.txt" # 正确(使用引号包裹) touch my\ file.txt # 正确(使用反斜杠转义)
- 虽然允许(如
3、推荐写法
-
使用小写字母和下划线
例如
project_notes.txt
,避免大小写混用导致的混淆。 -
避免特殊字符和空格
优先用
-
或_
代替空格(如 backup-2023.tar.gz)。 -
扩展名非强制要求但有用
Linux 不依赖扩展名识别文件类型(如
.txt、.sh
仅为约定),但推荐保留以便管理。
4、 禁止使用的名称
-
系统保留名称:如
/dev/null、/proc
等路径下的特殊文件。 -
设备文件:避免直接命名文件为
sda、tty
等,可能与系统设备冲突。
1.5 文件与目录的定位方式
在 Linux 中,绝对路径和相对路径是两种不同的文件或目录定位方式,它们的核心区别在于参照点不同。以下是详细解释和对比:
1、绝对路径(Absolute Path)
-
定义:从文件系统的
根目录(/)
开始的完整路径,唯一指向目标文件或目录。 -
特点:
- 以
/
开头(例如/home/user/file.txt
)。 - 无论当前工作目录在哪里,绝对路径始终指向同一目标。
- 以
-
用途:
- 脚本或配置文件中需要明确指定文件位置时(如服务配置文件路径)
- 跨目录操作时避免歧义。
-
示例:
cat /etc/passwd # 直接访问根目录下的文件 ls /usr/local/bin # 列出绝对路径指向的目录内容
2、相对路径(Relative Path)
-
定义:以
当前工作目录(pwd)
为参照点的路径,无需从根目录开始。 -
特点:
- 不以
/
开头(例如docs/report.txt
)。 - 路径的实际含义依赖当前所在目录。
- 不以
-
特殊符号:
.
表示当前目录(例如./script.sh
)。
..
表示父目录(例如../project/file.c
)。 -
用途:
- 快速访问当前目录附近的文件。
- 简化命令行操作(减少长路径输入)。
2、查看目录或文件的详细信息(ls)
2.1 基本语法
语法:
ls [选项] [文件/目录]
ls
是 Linux 中最常用的命令之一,用于列出目录中的文件和子目录
注意:
-
如果不指定目录,默认列出当前目录的内容。
-
可以指定文件或目录名,查看特定路径下的内容。
常用选项
选项 | 说明 |
---|---|
-a | 显示所有文件(包括隐藏文件,以 . 开头的文件) |
-l | 以长格式显示详细信息(权限、所有者、大小、修改时间等) |
-h | 与 -l 一起使用,以人类可读的格式显示文件大小(如 KB、MB) |
-t | 按修改时间排序(最新修改的在前) |
-r | 反向排序 |
-S | 按文件大小排序(大的在前) |
-R | 递归列出子目录内容 |
-i | 显示文件的 inode 编号 |
--color | 彩色输出(默认启用,目录、文件等类型显示不同颜色) |
2.2 常用操作
1、列出当前目录内容
ls
2、显示所有文件(包括隐藏文件)
ls -a
3、以长格式显示详细信息
ls -l
输出示例:
-rw-r--r-- 1 user group 1024 Jan 10 10:00 file.txt # 文件
drwxr-xr-x 2 user group 4096 Jan 11 11:00 dir # 目录
信息说明:
-
第一列:文件类型和权限(
-
表示文件,d
表示目录)。 -
第二列:硬链接数。
-
第三列:所有者。
-
第四列:所属组。
-
第五列:文件大小(默认字节)。
-
第六列:最后修改时间。
-
第七列:文件名。
4、组合选项(如 -lh 显示易读的文件大小)
ls -lh
输出大小会显示为 1.0K、2.5M 等格式。
5、按时间排序(最新修改的在前)
ls -lt
6、递归列出子目录内容
ls -R
7、显示文件的 inode 编号
ls -i
8、列出指定目录的内容
ls /path/to/directory
9、反向排序
ls -lr
10、按文件大小排序(大的在前)
ls -lS
2.3 高级用法
1、过滤显示特定文件(结合通配符)
ls *.txt # 列出所有 .txt 文件
ls file[1-3].* # 列出 file1.txt, file2.log 等
2、忽略某些文件(需搭配 --ignore)
ls --ignore='*.log' # 不显示 .log 文件
3、自定义时间显示格式(需搭配 --time-style)
ls -l --time-style="+%Y-%m-%d %H:%M:%S"
注意事项:
-
如果文件名包含空格或特殊字符,需要用引号包裹:
ls "my file.txt"
-
默认情况下,ls 输出的颜色可能因系统配置而异。如果颜色不显示,可以强制启用:
ls --color=auto
通过灵活组合选项,ls
可以满足大部分文件列表需求。如需更多帮助,可以通过 man ls
查看完整手册。
3、切换目录(cd)
语法:
cd [选项] [目录路径]
在Linux中,cd
(Change Directory)命令用于切换当前工作目录。它是日常操作中最基础且频繁使用的命令之一。
3.1 常用操作
1、切换到指定目录
-
使用绝对路径进行切换:
cd /usr/local # 进入/usr/local目录
-
使用相对路径进行切换,假设当前目录是/home/user:
cd Downloads # 进入/home/user/Downloads cd ./Documents # ./表示当前目录(可省略)
2、返回家目录
cd # 直接输入cd,不加参数,默认切换为家目录
cd ~ # ~代表用户的家目录
cd $HOME # 使用环境变量$HOME
3、返回上一级目录
cd .. # 两个点表示上一级目录
4、返回上两级目录
cd ../.. # 每多一个..就再往上一级
5、切换到上一个工作目录
cd - # 在最近使用的两个目录之间快速切换
6、切换到带有空格或特殊字符的目录
-
用引号包裹路径或使用转义符:
cd "My Documents" # 路径包含空格 cd My\ Documents # 使用反斜杠转义空格
7、常见问题解决
-
目录不存在时
如果路径错误或目录不存在,会提示:bash: cd: no such file or directory # 检查路径拼写或先用ls确认目录是否存在。
-
权限不足
若目录无执行权限(x
),会提示:bash: cd: permission denied # 用ls -l查看权限,并通过chmod或sudo解决。
3.2 扩展:显示当前工作目录(pwd)
假如当前工作目录为: /path/data
pwd # 输入命令后显示: /path/data
4、查看、合并文件(cat)
cat
是 Linux 中一个常用的命令,用于查看、合并或创建文件。它的名称来源于 concatenate(连接),但它的功能不仅限于文件连接。
1、常用方法使用示例:
-
查看文件内容
cat filename
- 这会显示
filename
文件 的全部内容到终端。 - 示例:
cat /etc/os-release # 查看系统信息文件
- 这会显示
-
查看多个文件
cat file1 file2
- 依次显示
file1
和file2
的内容。 - 示例:
cat notes.txt backup.txt
- 依次显示
-
合并文件内容并输出到新文件
cat file1 file2 > merged_file
- 将
file1
和file2
的内容合并后写入merged_file
(会覆盖目标文件)。 - 示例:
cat part1.txt part2.txt > complete.txt
- 将
-
追加内容到文件
cat file1 >> file2
- 将
file1
的内容追加到file2
的末尾(不会覆盖file2
)。 - 示例:
cat log.txt >> archive.log
- 将
-
创建新文件(或编辑小文件)
cat > newfile.txt
-
从键盘输入内容,按
Ctrl+d
保存到newfile.txt
(会覆盖已有文件)。 -
示例:
cat > greeting.txt Hello World! # 输入内容 Ctrl+d # 保存并退出
-
-
显示行号
cat -n filename
- 显示文件内容并加上行号(包括空行)。
- 示例:
cat -n /etc/hosts
-
显示非空行的行号
cat -b filename
- 只对非空行编号(类似
-n
,但忽略空行)。 - 示例:
cat -b script.sh
- 只对非空行编号(类似
-
显示特殊字符(如制表符、换行符等)
cat -A filename
- 用
^I
表示制表符(Tab
),$
表示行尾。 - 示例:
cat -A /etc/profile
- 用
-
避免输出中的多行空行
cat -s filename
- 将连续的空行压缩为一行。
- 示例:
cat -s logfile.txt
-
与其他命令结合使用
- 通过管道
(|)
将cat
输出传递给其他命令:cat file.txt | grep "keyword" # 搜索文件中的关键词 cat file.txt | less # 分页查看内容
- 通过管道
2、注意事项
-
大文件警告:
cat
会一次性输出整个文件,如果文件很大(如日志文件),建议用less
或more
分页查看:less hugefile.log
-
文件覆盖风险:
>
会覆盖目标文件,使用前请确认。
总结:
cat
的核心功能是快速查看、合并或创建小文件。对于复杂操作(如编辑、分页),建议结合其他工具(如 less、vim 或 grep
)。
5、复制文件或目录(cp)
1、基础语法
cp
是 Linux 中用于复制文件或目录的基本命令,语法如下:
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
2、基本用法
-
复制文件到目标文件(重命名):
cp file1.txt file2.txt # 将 file1.txt 复制为 file2.txt
-
复制文件到目录:
cp file1.txt /path/to/directory/ # 将 file1.txt 复制到指定目录
-
复制多个文件到目录:
cp file1.txt file2.txt /path/to/directory/ # 复制多个文件到目录
2、常用选项
选项 | 说明 |
---|---|
-r 或 -R | 递归复制目录(用于复制文件夹) |
-i | 覆盖前提示确认(交互模式) |
-f | 强制覆盖,不提示(慎用) |
-v | 显示复制过程的详细信息 |
-u | 仅当源文件比目标文件新时复制(更新) |
-p | 保留原文件的属性(权限、时间戳等) |
-a | 归档模式(相当于 -rp ,保留所有属性) |
3、常用方法使用示例
-
递归复制目录:
cp -r dir1/ dir2/ # 将 dir1 目录及其内容复制到 dir2
-
交互式复制(覆盖前询问):
cp -i file1.txt /path/to/directory/
-
保留文件属性:
cp -p file1.txt /backup/ # 保留权限、时间戳等
-
仅更新新文件:
cp -u *.txt /backup/ # 仅将目标目录中没有的文件复制进去
4、注意事项
-
如果目标文件已存在,
cp
会默认覆盖(除非使用-i
选项)。 -
复制目录时必须加
-r
或-a
。 -
使用
-a
可以完整保留文件属性(适合备份)。
5、高级用法
-
通配符复制:
cp *.jpg /path/to/images/ # 复制所有 .jpg 文件
-
复制到当前目录:
cp /path/to/file1.txt . # 目标 `.` 表示当前目录
示例完整命令:
cp -av source_dir/ backup_dir/ # 递归复制并保留所有属性,显示详细信息
通过灵活组合选项,可以满足不同场景的复制需求。
6、移动或重命名文件/目录(mv)
1、基本语法
mv
命令是 Linux 中用于移动或重命名文件/目录的基本命令,其名称来源于 “move”。语法如下:
mv [选项] 源文件或目录 目标文件或目录
常用选项:
选项 | 作用 |
---|---|
-i | 覆盖前提示确认 |
-n | 禁止覆盖已存在文件 |
-f | 强制覆盖,不提示 |
-v | 显示操作详情 |
-u | 仅在源文件比目标新时移动 |
2、常用方法使用实例
-
移动文件/目录
mv file.txt /path/to/destination/ # 将文件移动到目标目录 mv dir1 /path/to/destination/ # 将目录移动到目标目录
-
重命名文件/目录
mv oldname.txt newname.txt # 重命名文件 mv olddir newdir # 重命名目录
-
移动多个文件到目录
mv file1.txt file2.txt /target/dir/ # 移动多个文件到目标目录
-
覆盖文件时的提示
-
默认情况下,
mv
会直接覆盖已存在的目标文件。 -
使用
-i
(交互模式)会在覆盖前提示确认:mv -i file.txt existing_file.txt
-
-
禁止覆盖(安全模式)
mv -n file.txt existing_file.txt # 如果目标存在,则不移动
-
强制覆盖(忽略提示)
mv -f file.txt /target/ # 强制覆盖,不询问
-
显示详细操作(调试)
mv -v file.txt /target/ # 显示移动的详细信息
3、注意事项
-
权限问题:需要有对源文件的读取权限和目标目录的写入权限。
-
跨设备移动:如果目标在另一设备(如U盘),
mv
实际是复制+删除,速度较慢。 -
符号链接:移动符号链接时,默认移动链接本身(而非指向的文件)。
通过灵活组合选项和参数,mv
可以高效管理文件位置和名称。使用前建议用 ls
确认路径,避免误操作。
7、创建文件或目录
7.1 创建文件(touch)
1、基本语法
在 Linux 中,
touch
命令主要用于创建空文件或更新文件的时间戳(访问时间和修改时间)。语法格式如下:
touch [选项] 文件名...
常用选项:
选项 | 说明 |
---|---|
-a | 仅更新访问时间(atime) |
-m | 仅更新修改时间(mtime) |
-c | 不创建新文件(若文件不存在) |
-t | 指定时间戳(格式:[[CC]YY]MMDDhhmm[.ss]) |
-r | 使用参考文件的时间戳 |
-d | 使用字符串描述时间(如 touch -d “2024-01-01” file.txt) |
2、常用方法使用示例
-
创建一个空文件
touch file.txt
如果
file.txt
不存在,则会创建一个空文件;如果已存在,则会更新其时间戳(默认为当前时间)。 -
同时创建多个文件
touch file1.txt file2.txt file3.txt
-
强制不创建新文件(仅更新时间戳)
touch -c non_existent_file.txt
如果文件不存在,
-c
(或--no-create
)选项会避免创建新文件。 -
指定时间戳(而非当前时间)
touch -t 202401011200 file.txt
-t
后接时间格式:[[CC]YY]MMDDhhmm[.ss]
(例如:202401011200
表示2024 年 1 月 1 日 12:00:00
)。 -
使用参考文件的时间戳
touch -r reference_file.txt target_file.txt
-r
(或--reference
)将target_file.txt
的时间戳设置为与reference_file.txt
相同。 -
仅更新访问时间(atime)或修改时间(mtime)
touch -a file.txt # 只更新访问时间 touch -m file.txt # 只更新修改时间
3、注意事项
-
如果文件名包含空格或特殊字符,需用引号包裹:
touch "my file.txt"
-
需要权限:对目标目录有写入权限才能创建文件。
通过灵活组合选项,touch
可以高效管理文件的时间戳或快速创建空文件。
7.2 创建目录(mkdir)
1、基本语法
mkdir
是 Linux 中用于创建目录(文件夹)的命令,语法格式如下:
mkdir [选项] 目录名
常用选项:
选项 | 作用 |
---|---|
-p | 递归创建多级目录 |
-m | 设置权限(如 755、644) |
-v | 显示操作详情 |
2、常用方法使用示例
-
创建单个目录
mkdir dir1
会在当前目录下创建名为
dir1
的文件夹。 -
同时创建多个目录
mkdir dir1 dir2 dir3
一次性创建多个同级目录。
-
创建嵌套目录(递归创建)
mkdir -p parent/child/grandchild
-p
选项会自动创建路径中所有不存在的父目录。 -
设置目录权限(创建时指定权限)
mkdir -m 755 mydir
-m
选项直接设置目录权限(此处 755 表示所有者可读/写/执行,其他用户可读/执行)。 -
显示创建过程(verbose 模式)
mkdir -v dir1 dir2
-v
选项会输出每个目录的创建信息。
3、常见问题解决
-
目录已存在时报错:
使用-p
选项可忽略此错误(不会覆盖原有目录)。 -
权限不足:
确保对目标路径有写入权限,或用sudo
提权:sudo mkdir /protected_path/newdir
8、删除文件或目录
8.1 rm 命令的使用
rm
是 Linux 中用于删除文件或目录的命令,使用时需谨慎,因为删除后通常无法恢复。
1、基本语法
rm [选项] 文件或目录名
常用选项:
选项 | 作用 |
---|---|
-f | 强制删除(忽略不存在的文件,不提示确认) |
-i | 删除前逐一询问确认(交互式) |
-r 或 -R | 递归删除目录及其内容(用于删除目录) |
-v | 显示删除的详细过程 |
--help | 查看帮助信息 |
--version | 显示版本信息 |
2、常用方法使用示例
-
删除单个文件
rm file.txt
-
强制删除文件(无警告)
rm -f file.txt
-
交互式删除(逐个确认)
rm -i file1.txt file2.txt
-
删除目录(递归删除)
rm -r mydir/
-
强制递归删除目录(慎用!)
rm -rf mydir/
-
*删除多个文件(通配符 )
rm *.log # 删除所有 .log 文件
-
显示删除过程(verbose)
rm -v old_*
3、危险操作警告
-
rm -rf /
或rm -rf /*
这会强制删除根目录下的所有文件(系统毁灭性操作!),现代系统通常会有保护机制,但仍需绝对避免。 -
无备份删除重要数据
建议先使用mv
命令将文件移到临时目录,确认无影响后再彻底删除。
4、注意事项
-
权限问题: 删除文件需对所在目录有写权限。
-
隐藏文件: 通配符
*
不匹配以.
开头的隐藏文件,需显式指定(如rm -r .*
需谨慎)。
建议在使用 rm -r
前先用 ls
确认目标文件/目录,避免误删。
8.2 rmdir 命令的使用
rmdir
是 Linux 中用于删除空目录的命令
1、基本语法
rmdir [选项] 目录名
常用选项:
选项 | 描述 |
---|---|
-p | 递归删除父目录(如果它们为空)。 |
--ignore-fail-on-non-empty | 忽略因目录非空导致的错误(不报错,但仍不会删除)。 |
-v | 显示操作详情(verbose 模式)。 |
2、常用方法使用示例:
-
删除单个空目录
rmdir mydir
仅当
mydir
为空时才会删除。 -
递归删除空目录
若目录结构为parent/child
,且两者均为空:rmdir -p parent/child
会先删除
child
,再删除parent
(如果父目录也变为空)。 -
忽略非空目录的错误
rmdir --ignore-fail-on-non-empty mydir
如果
mydir
非空,命令会静默退出,不会报错。 -
显示操作详情
rmdir -v mydir
输出:
rmdir: removing directory 'mydir'
3、注意事项
-
仅能删除空目录
如果目录中有文件或其他子目录,rmdir
会报错:rmdir: failed to remove 'mydir': Directory not empty
此时需用
rm -r 目录名
强制递归删除(谨慎使用!)。 -
路径中的父目录必须存在
例如rmdir a/b/c
要求a/b
存在,否则会报错。 -
与
rm -r
的区别-
rmdir
:安全,只删空目录。 -
rm -r
:危险,递归删除目录及所有内容(无确认提示!)。
-
4、适用场景
-
在脚本中安全删除空目录(避免误删数据)。
-
清理空的日志或临时目录结构。
如果需要删除非空目录,请改用:
rm -r 目录名 # 谨慎操作!数据不可恢复!
9、检测文件类型(file)
file
命令是 Linux 中用于检测文件类型的实用工具,它会根据文件内容(而非文件扩展名)判断文件类型。
1、基本语法
file [选项] 文件名
常用选项:
选项 | 作用 |
---|---|
-b | 简洁输出(不显示文件名) |
-i | 输出 MIME 类型 |
-L | 跟随软链接 |
-f <文件> | 从文件中读取待检测的文件名列表 |
-k | 不停止在第一个匹配结果(继续检测更多可能类型) |
-z | 尝试检测压缩文件内部内容 |
2、常用方法使用示例
-
检测单个文件类型
file /bin/ls
输出示例:
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped
-
检测多个文件类型
file file1.txt file2.jpg
-
检测目录下所有文件类型
file *
-
显示更详细的输出(-i 选项)
输出文件的
MIME
类型:file -i filename
示例输出:
filename: text/plain; charset=utf-8
-
不压缩软链接(-L 选项)
直接检测链接指向的文件类型:file -L /path/to/symlink
-
从标准输入读取文件(-f 选项)
通过列表文件批量检测:file -f file_list.txt # file_list.txt文件中存放着要检测的文件名,一行一个文件名
3、高级用法
-
检测压缩文件内容:
file -z backup.tar.gz
-
仅输出匹配的文本描述(结合 grep):
file * | grep "text"
4、原理说明
file
命令通过以下步骤判断文件类型:
-
检查文件的
magic number
(如ELF 头
、PNG 头
等)。 -
若无特殊标识,则分析文件内容(如文本编码、可读字符比例等)。
-
结合
/usr/share/misc/magic
或/etc/magic
中的规则库进行匹配。
通过灵活使用 file
命令,你可以快速识别未知文件的类型,尤其在处理无扩展名文件时非常有用。