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 命令,你可以快速识别未知文件的类型,尤其在处理无扩展名文件时非常有用。
