目录
14. shell命令--file
功能说明
file 是 Linux 中的一个命令行工具,用于确定给定文件的类型。它可以检测文件是 ASCII 文本、可执行文件、压缩文件、图片、音频文件等。这对于快速识别文件内容或格式非常有用。
由于 Linux 系统并不是像 Windows 系统那样通过扩展名来定义文件类型的,因此用户无法直接通过文件名来进行区别。file 命令可以通过分析文件头部信息中的标识信息来显示文件类型,使用很方便。
语法格式
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
SYNOPSIS
file [-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname]
[-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
选项说明
- -b: 只在输出中显示文件类型,不显示文件名。
- --brief: 与 -b 相同。
- -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
- -i: 显示文件的 MIME 类型。
- -L:直接显示符号连接所指向的文件的类别。
- -s: 尽可能多地读取文件以进行类型检测。
- -z 或 --uncompress: 尝试查看压缩文件的内容。
- -m:指定魔法数字文件。
- --mime-type: 显示文件的 MIME 类型,但不带参数。
- -f:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
- [文件或目录...]:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
实践操作
1. 显示目录或文件类型
mkdir -p /test/file #创建测试目录
cd /test/file #切换到测试目录
mkdir dir1 #创建测试目录
file dir1 #直接使用
file -b dir1/ #不显示目录名称
file -i dir1/ #显示 MIME 类别
file -bi dir1/
touch file1.txt #创建测试文件
file file1.txt # empty 是空的意思,里面没有内容
file -bi file1.txt
echo linux >file1.txt #向文件 file1.txt 写入内容
cat file1.txt #文件里面有内容了
file file1.txt #再次查看文件类型,变成文本文件了,ASCII text ASCII文本
2. 显示更多的文件类型
ls -lh /bin
file /bin
file -L /bin #直接显示符号连接所指向的文件的类别
file /dev/cdrom
file -L /dev/cdrom
ln -s file1.txt file1_soft_like.txt #创建软连接文件,以后会讲到
ll
file file1_soft_like.txt # symbolic link 符号链接
file -L file1_soft_like.txt
pwd
cd ..
tar zcf file.tar.gz file/ #打包文件,模拟环境
tar tf file.tar.gz #查看包里内容
mv file.tar.gz file
ls
cd -
ls
file file.tar.gz # gzip compressed data :gzip压缩数据类型
file -z file.tar.gz #了解即可
命令示例:1. 显示目录或文件类型
mkdir -p /test/file
cd /test/file
mkdir dir1
file dir1
file -b dir1/
file -i dir1/
file -bi dir1/
touch file1.txt
file file1.txt
file -bi file1.txt
echo linux >file1.txt
cat file1.txt
file file1.txt
输出结果:
[root@MineGi ~]# mkdir -p /test/file
[root@MineGi ~]# cd /test/file
[root@MineGi /test/file]# mkdir dir1
[root@MineGi /test/file]# file dir1
dir1: directory
[root@MineGi /test/file]# file -b dir1/
directory
[root@MineGi /test/file]# file -i dir1/
dir1/: inode/directory; charset=binary
[root@MineGi /test/file]# file -bi dir1/
inode/directory; charset=binary
[root@MineGi /test/file]# touch file1.txt
[root@MineGi /test/file]# file -bi file1.txt
inode/x-empty; charset=binary
[root@MineGi /test/file]# echo linux >file1.txt
[root@MineGi /test/file]# cat file1.txt
linux
[root@MineGi /test/file]# file file1.txt
file1.txt: ASCII text
[root@MineGi /test/file]#
命令示例:2. 显示更多的文件类型
ls -lh /bin
file /bin
file -L /bin
file /dev/cdrom
file -L /dev/cdrom
ln -s file1.txt file1_soft_like.txt
ll
file file1_soft_like.txt
file -L file1_soft_like.txt
pwd
cd ..
tar zcf file.tar.gz file/
tar tf file.tar.gz
mv file.tar.gz file
ls
cd -
ls
file file.tar.gz
file -z file.tar.gz
输出结果:
[root@MineGi /test/file]# ls -lh /bin
lrwxrwxrwx. 1 root root 7 11月 22 09:52 /bin -> usr/bin
[root@MineGi /test/file]# file /bin
/bin: symbolic link to `usr/bin'
[root@MineGi /test/file]# file -L /bin
/bin: directory
[root@MineGi /test/file]# file /dev/cdrom
/dev/cdrom: symbolic link to `sr0'
[root@MineGi /test/file]# file -L /dev/cdrom
/dev/cdrom: block special
[root@MineGi /test/file]# ln -s file1.txt file1_soft_like.txt
[root@MineGi /test/file]# ll
总用量 4
drwxr-xr-x 2 root root 6 11月 27 15:59 dir1
lrwxrwxrwx 1 root root 9 11月 27 16:00 file1_soft_like.txt -> file1.txt
-rw-r--r-- 1 root root 6 11月 27 16:00 file1.txt
[root@MineGi /test/file]# file file1_soft_like.txt
file1_soft_like.txt: symbolic link to `file1.txt'
[root@MineGi /test/file]# file -L file1_soft_like.txt
file1_soft_like.txt: ASCII text
[root@MineGi /test/file]# pwd
/test/file
[root@MineGi /test/file]# cd ..
[root@MineGi /test]# tar zcf file.tar.gz file/
[root@MineGi /test]# tar tf file.tar.gz
file/
file/dir1/
file/file1.txt
file/file1_soft_like.txt
[root@MineGi /test]# mv file.tar.gz file
[root@MineGi /test]# ls
chattr cp file mkdir mv rm touch tree
[root@MineGi /test]# cd -
/test/file
[root@MineGi /test/file]# ls
dir1 file1_soft_like.txt file1.txt file.tar.gz
[root@MineGi /test/file]# file file.tar.gz
file.tar.gz: gzip compressed data, from Unix, last modified: Wed Nov 27 16:01:31 2024
[root@MineGi /test/file]# file -z file.tar.gz
file.tar.gz: POSIX tar archive (GNU) (gzip compressed data, from Unix, last modified: Wed Nov 27 16:01:31 2024)
[root@MineGi /test/file]#
注意事项
- file 命令主要基于文件的“魔术数字”来确定文件类型。这些通常是文件开头或特定位置的特定字节序列。
- 对于某些类型的文件,如加密或混淆的文件,file 可能无法准确确定其类型。
- 某些类型的文件可能具有相似的“魔术数字”,因此可能存在误报的情况。
file 命令使用一个称为 "magic" 的文件来确定文件类型,这个文件通常位于 /usr/share/file/magic。你可以通过修改这个文件或创建自己的 magic 文件来扩展或自定义 file 命令的文件类型检测能力。
file 命令是一个强大的工具,可以帮助你快速了解文件的基本信息和类型。无论是普通的文本文件、图片、音频文件,还是更复杂的可执行文件或压缩文件,file 命令都能为你提供有用的信息。通过掌握其基本用法和高级选项,你可以更有效地管理和处理 Linux 系统中的文件。同时,记得在必要时查阅手册页(man file)以获取更详细的信息和示例。