当前位置:首页>Linux>Linux系统安全——查看文件类型的三种方式

Linux系统安全——查看文件类型的三种方式

  • 2026-09-10 17:32:02
Linux系统安全——查看文件类型的三种方式

(一)ls 命令

在 Linux 中,ls 命令是“ list (列表)”的缩写,用于列出或显示目录的内容。该命令显示文件和子目录,并且在大多数情况下使用颜色代码区分不同的文件类型。

Linux 中的 ls 命令选项

ls 命令采用以下语法:

# ls [options(参数)] /path(路径)/to/directory(目录)options 表示可以传递以操纵命令输出的命令行参数
ls 命令参数介绍:
选项功能描述
ls -m列出以逗号分隔的目录内容
ls -Q显示用引号括起来的目录内容
ls -l以长列表格式显示文件
ls -lh以人类可读的格式显示文件大小
ls -g省略组所有权列
ls -F向目录添加正斜杠
ls -i显示文件和目录的 inode 数量
ls -a显示所有文件,包括隐藏文件
ls *.根据文件扩展名过滤文件
ls -la以长列表格式显示所有文件和目录
ls -R递归显示文件和目录
ls -r反向排序文件
ls -X按文件扩展名的字母顺序对文件进行排序
ls -tl根据文件创建日期和时间显示文件
ls -n列出 UID 和 GID

常用命令组合:ls -lah

1、列出文件和目录
# ls 按字母顺序列出目录内容,无法查看文件类型、大小、修改日期和时间、权限和链接等详细信息。
2、长文件列表
# ls -l以列格式打印出有关目录内容的详细信息,包括大小、修改日期和时间、文件或目录名称和文件所有者及其权限。# ll ======= 同 ls-l
从最左边开始,分别是:- 第1列 –– 文件/目录权限。- 第2列 –– 链接数。- 第3列 –– 所有者的姓名。- 第4列 –– 文件所属组的名称。- 第5列 –– 文件大小(以字节为单位)。- 第6列至第8列 –– 最后修改日期。- 第9列 –– 文件/目录名称。
3、列出隐藏文件和目录

隐藏文件是存储用户设置和配置文件的特殊文件,运行的程序和服务使用这些文件来读取和存储信息。

例如:

" .bashrc "文件是一个脚本,其中包含当前登录用户的用户设置和配置,其中包括命令别名、shell 历史记录、终端字体的颜色等。

" .bash_logout "文件在您退出 bash 会话时执行。它主要用于清理目的,即执行退出 bash shell 后需要执行的任何操作。

# ls -a同时显示隐藏文件和目录
4、列出 Linux 中的所有文件
# ls -la-a 同时显示隐藏文件和目录,为了方便查看,可以使用组合选项 -la
5、以人类可读的格式显示文件大小
# ls -lh添加标志 -h 以人类可读的格式打印文件大小,文件大小以千字节、兆字节和千兆字节显示,这让人更容易查看。
6、区分Linux中的目录和文件
# ls -F-F 选项向目录添加正斜杠(/),使它们更容易从其余文件辨认出来
7、倒序排列文件
# ls -lr默认情况下,ls 命令按字母顺序(从 A – Z)对文件和目录进行排序。可以选择使用该-r 选项以相反的顺序对目录内容进行排序。

此外,还可以使用-X标志按字母顺序对文件扩展名进行排序。

# ls -X (大写 X )
8、在 Linux 中递归列出文件
# ls -R该命令列出当前目录中的所有文件和目录,然后继续显示各个目录和子目录中包含的文件。
9、在 Linux 中按修改时间排序文件
# ls -lt以修改时间显示长列表格式的文件,即根据最后修改日期/时间戳显示有关每个文件或目录的详细信息。(时间由近到远)
# ls -ltr-lt 的倒序(时间由远到近)
10、在 Linux 中按文件大小排序文件
# ls -lS (大写 S )按降序显示文件大小(从大到小)
11、在 Linux 中列出文件索引节点号
# ls -i-i 选项显示文件和目录的 inode 编号
12、列出以逗号分隔的文件和目录
# ls -m-m 标志依次列出目录内容,并以逗号分隔
# ls -Q-Q标志,将所有目录内容都用双引号括起来
13、列出特定的文件类型或扩展名
# ls *.jpg显示具有 .jpg 扩展名的所有文件# ls *.txt显示具有 .txt 扩展名的所有文件# ls *.pdf
14、列出文件的UID和GID
# ls -n显示文件和目录的 UID 和 GID
15、检查 ls 命令版本
# ls --version查看ls命令的版本
16、显示 ls 命令帮助页面
# ls --help命令选项的完整列表
# man ls访问手册页
17、在Linux中列出目录信息
# ls -l /etc列出目录 /etc 下的文件
# ls -ld /etc会显示 /etc 目录的信息
18、 创建 ls 命令别名

当我执行ls命令时,为 ls 命令创建一个别名,它将默认使用 -l 选项并显示一个长列表

# alias ls="ls -l"创建 ls=“ls -l” 别名后,输入 ls 命令相当于输入了 ls-l
# alias查看系统中可用的别名数量
# unalias 【定义的别名】# unalias ls ======= 删除定义的别名 ls

(二)file 命令(不常用)

file命令是Linux系统中一个非常有用的命令,它用于确定文件的类型。无论是在终端还是在脚本中使用,file命令都可以帮助用户快速了解文件的属性和内容。

1、命令语法

file命令的基本语法如下:

# file 【选项】 文件名
2、命令选项

file命令支持多种选项,以下是一些常用的选项:

# -b:(brief) 简约模式,列出辨识结果时,不显示文件名称# -i:(mime) 输出 mime 类型的字符串而不是可读字符串,比如输出"text/plain; charset=us-ascii"而不是"ASCII text"# -C: (compile) 生成 magic.mgc 文件,一般配合选项 -m 使用# -c:(checking-printout) 详细显示指令执行过程,便于排错或分析程序执行的情形# -m:(magic-file MAGICFILES) 指定 magic file,显示可执行文件的魔术数字,magic文件:使用指定的magic文件来确定文件类型magic file 指的是那些具有特殊内容的文件,比如 C 文件,它会有 #include 字样;tar 文件的前几个字节会有特殊的规则。而检验 magic file 规则就是根据这些特殊的格式去判断一个文件的类型。# -z:(uncompress) 尝试去解读压缩文件的内容,并显示文件类型# -L:(dereference) 查看软链接对应文件的文件类型# -v:(version) 显示版本信息# -h:显示帮助信息# [文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。.可以通过man file命令来查看所有选项的详细说明
3、命令示例

显示文件类型:

# file mz.txt      <== 查看文件类型mz.txt: ASCII text# file -b mz.txt      <== 不显示文件名称ASCII text# file -i mz.txt      <== 显示MIME类别。mz.txt: text/plain; charset=us-ascii# file -b -i mz.txttext/plain; charset=us-ascii

显示符号链接的文件类型:

# ls -l /var/maillrwxrwxrwx. 1 root root 10 Nov 1410:12 /var/mail -> spool/mail----------------------------------------------------------------# file /var/mail      <== 查看软链接本身类型/var/mail: symbolic link to `spool/mail'# file -L /var/mail      <== 查看软链接对应文件的文件类型/var/mail: directory# file /var/spool/mail/var/spool/mail: directory# file -L /var/spool/mail/var/spool/mail: directory

注意:

file 命令能够自动识别许多不同类型的文件,包括二进制文件、文本文件、图像文件等。

在使用 file 命令时,需要指定要查看类型的文件或目录。

file 命令不会更改文件或目录。

4、常见应用场景
(1)文件类型识别

通过 file 命令,可以快速识别文件的类型。无论是二进制文件、文本文件还是压缩文件,file 命令都可以准确地显示文件类型,帮助我们选择正确的工具进行处理。

(2)文件内容检查

file 命令不仅可以识别文件类型,还可以提供有关文件内容的一些信息。例如,可以使用 file 命令检查一个脚本文件是否包含可执行代码,或者检查一个文本文件是否是 UTF-8 编码。

(3)文件批量处理

通过结合其他命令,如 find 和 xargs,可以使用 file 命令对多个文件进行批量处理。例如,可以使用 file 命令找出所有的可执行文件,并将它们复制到另一个目录中。

(三 )stat 命令(不常用)

1、stat 命令概念

stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。stat 命令可以查看的信息包括:

查看信息描述
File显示文件名
Size显示文件大小
Blocks文件使用的数据块总数
IO BlockIO块大小
regular file文件类型(常规文件)
Device设备编号
InodeInode号
Links链接数
Access文件的权限
Gid、Uid文件所有权的 Gid 和Uid
access time最后存取时间(ls -lu filename),表示最后一次访问(仅仅是访问,没有改动)文件的时间
modify time最后修改时间(ls -l  filename ),表示最后一次修改文件的时间
change time最后更改时间(ls -lc filename ),表示最后一次对文件属性改变的时间,包括权限,大小,属性等等
Birth time文件创建时间,crtime,不过据查此属性linux已废弃,目前状态显示结果均为-
2、命令语法
# stat [options(参数)] /path(路径)/to/directory(目录)options 表示可以传递以操纵命令输出的命令行参数# 例:stat /etc/resolv.conf ======= 查看文件的详细属性(其中包括文件时间属性)
3、常用参数选项
参数选项功能
-f查看文件所在文件系统状态信息
-t以简洁形式输出文件信息
-L显示软连接原始文件状态信息
-c按照指定格式输出
4、文件的有效格式序列
格式符格式符说明
%a八进制中的访问权限(777显示)
%A人类可读形式的访问权(rwx显示)
%b分配的块数(请参阅%B)
%B%b报告的每个块的大小(字节)
%CSELinux安全上下文字符串
%d十进制设备编号
%D十六进制的设备编号
%f十六进制原始模式
%F文件类型
%g所有者的组ID
%G所有者的组名称
%h硬链接数
%iinode数
%m挂载点
%n文件名
%N带取消引用(如果是符号链接)的带引号的文件名
%o最佳I/O传输大小提示
%s总大小,以字节为单位
%t主要设备类型(十六进制),用于字符/块设备特殊文件
%T次要设备类型(十六进制),用于字符/块设备特殊文件
%u所有者的用户ID
%U所有者的用户名
%w文件出生时间,人类可读;-如果未知
%W文件生成时间,自纪元起的秒数;如果未知,则为0
%x最后一次访问的时间,人类可读
X上次访问的时间,自纪元起的秒数
%y上次修改的时间,人类可读
%Y上次修改的时间,自纪元起的秒数
%z最后更改的时间,人类可读
%Z上次更改的时间,自新纪元起的秒数
5、文件系统的有效格式序列
格式符格式符说明
%a非超级用户可用的空闲块
%b文件系统中的数据块总数
%c文件系统中的文件节点总数
%d文件系统中的空闲文件节点
%f文件系统中的空闲块
%i十六进制文件系统ID
%l文件名的最大长度
%n文件名
%s块大小(用于更快的传输)
%S基本块大小(用于块计数)
%t十六进制文件系统类型
%T人类可读形式的文件系统类型
6、示例
(1)获取命令帮助
[root@centos2 /]# stat --help用法:stat [选项]... 文件...Display file or file system status.Mandatory arguments to long options are mandatory for short options too.-L, --dereference     follow links-f, --file-system     display file system status instead of file status-c--format=FORMAT   use the specified FORMAT instead of the default;                          output a newline after each use of FORMAT--printf=FORMAT   like --format, but interpret backslash escapes,                          and do not output a mandatory trailing newline;if you want a newline, include \n in FORMAT-t, --terse           print the information in terse form--help显示此帮助信息并退出--version显示版本信息并退出The valid format sequences for files (without --file-system):  %a   access rights in octal  %A   access rights in human readable form  %b   number of blocks allocated (see %B)  %B   the size in bytes of each block reported by %b  %C   SELinux security context string  %d   device number in decimal  %D   device number in hex  %f   raw mode in hex  %F   file type  %g   group ID of owner  %G   group name of owner  %h   number of hard links  %i   inode number  %m   mount point  %n   file name  %N   quoted file name with dereference if symbolic link  %o   optimal I/O transfer size hint  %s   total size, in bytes  %t   major device type in hex, for character/block device special files  %T   minor device type in hex, for character/block device special files  %u   user ID of owner  %U   user name of owner  %w   time of file birth, human-readable; -if unknown  %W   time of file birth, seconds since Epoch; 0if unknown  %x   time of last access, human-readable  %X   time of last access, seconds since Epoch  %y   time of last modification, human-readable  %Y   time of last modification, seconds since Epoch  %z   time of last change, human-readable  %Z   time of last change, seconds since EpochValid format sequences for file systems:  %a   free blocks available to non-superuser  %b   total data blocks in file system  %c   total file nodes in file system  %d   free file nodes in file system  %f   free blocks in file system  %i   file system ID in hex  %l   maximum length of filenames  %n   file name  %s   block size (for faster transfers)  %S   fundamental block size (for block counts)  %t   file system type in hex  %T   file system type in human readable form
(2)查看命令版本
[root@centos2 /]# stat --versionstat (GNU coreutils) 8.22
(3)查看文件状态信息
[root@centos2 /]# stat disk.sh  文件:"disk.sh"  大小:358       块:8          IO 块:4096   普通文件设备:fd00h/64768dInode:1944081     硬链接:1权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)环境:unconfined_u:object_r:etc_runtime_t:s0最近访问:2023-06-07 19:40:02.680115173 +0800最近更改:2023-06-07 19:40:02.680115173 +0800最近改动:2023-06-07 19:40:02.682115156 +0800创建时间:-
(4)-f 查看文件所在文件系统状态信息
[root@centos2 /]# stat -f disk.sh  文件:"disk.sh"    ID:fd0000000000 文件名长度:255     类型:xfs块大小:4096       基本块大小:4096    块:总计:13100800   空闲:10966314   可用:10966314Inodes: 总计:26214400   空闲:25928770
(5)-t 以简洁形式输出文件信息

简洁形式主要是把每个值的列头去掉了,只显示值,三个时间按照纪元至今秒数显示。

[root@centos2 /]# stat -t disk.shdisk.sh 3588 81a4 00 fd00 9013010016865560881686556088168655608804096 unconfined_u:object_r:etc_runtime_t:s0
(6)-L 显示软连接原始文件状态信息
创建软连接[root@centos2 /]# ln -s  /disk.sh  /abc
[root@centos2 /]# stat abc  文件:"abc"-> "/disk.sh"  大小:8         块:0          IO 块:4096   符号链接设备:fd00h/64768dInode:90322       硬链接:1权限:(0777/lrwxrwxrwx)  Uid:(    0/    root)   Gid:(    0/    root)环境:unconfined_u:object_r:root_t:s0最近访问:2023-06-12 15:59:29.879388388 +0800最近更改:2023-06-12 15:59:29.879388388 +0800最近改动:2023-06-12 15:59:29.879388388 +0800创建时间:-[root@centos2 /]# stat -L abc  文件:"abc"  大小:358       块:8          IO 块:4096   普通文件设备:fd00h/64768dInode:90130       硬链接:1权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)环境:unconfined_u:object_r:etc_runtime_t:s0最近访问:2023-06-12 15:48:08.482270985 +0800最近更改:2023-06-12 15:48:08.482270985 +0800最近改动:2023-06-12 15:48:08.507270807 +0800创建时间:-
(7)获取文件inode
[root@centos2 /]# stat -c %i disk.sh90130
(8)获取文件所属用户或者用户ID
[root@centos2 /]# stat -c %u disk.sh0小写 u
[root@centos2 /]# stat -c %U disk.shroot大写 U
(9)获取文件所属用户组或者用户组ID
[root@centos2 /]# stat -c %G disk.shroot大写 G
[root@centos2 /]# stat -c %g disk.sh0小写 g
(10)获取文件磁盘挂载点
[root@centos2 /]# stat -c %m disk.sh/
(11)获取文件访问时间
[root@centos2 /]# stat -c %x disk.sh2023-06-1215:48:08.482270985 +0800
(12)获取文件修改时间
[root@centos2 /]# stat -c %y disk.sh2023-06-1215:48:08.482270985 +0800
(13)获取文件更改时间
[root@centos2 /]# stat -c %z disk.sh2023-06-1216:03:15.402715086 +0800
(14)获取文件权限
[root@centos2 /]# stat -c %A disk.sh-rw-r--r--
[root@centos2 /]#  stat -c %a disk.sh644
(15)时间更新演示

①使用vim命令打开文件,即使不做任何修改,也会更新mtime

[root@centos2 /]# stat -c %y disk.sh2023-06-1216:26:39.579676612 +0800

②修改文件权限或属主,ctime更新,atime和mtime不会更新

[root@centos2 /]# chown david:david disk.sh
[root@centos2 /]# stat disk.sh   文件:"disk.sh"  大小:358       块:8          IO 块:4096   普通文件设备:fd00h/64768dInode:409342      硬链接:1权限:(0644/-rw-r--r--)  Uid:( 1005/   david)   Gid:( 1005/   david)环境:unconfined_u:object_r:etc_runtime_t:s0最近访问:2023-06-12 16:26:39.579676612 +0800最近更改:2023-06-12 16:26:39.579676612 +0800最近改动:2023-06-12 16:28:17.400003431 +0800创建时间:-

③查看文件,atime更新,mtime和ctime不会更新

[root@centos2 /]# cat disk.sh1time=$(date "+%Y-%m-%d %H:%M:%S")2diskuse=`df -h | sed -n '2p' | awk '{print $5}'`3disk=`echo "$diskuse" | cut -d "%" -f 1`4echo"当前硬盘使用率为:$disk%"5if [ $disk-gt15 ]6then7echo"$time 您当前磁盘使用率$disk%,已严重超标" | mail -s"email" 7jjw@163.com8else9exit10fi
[root@centos2 /]# stat disk.sh   文件:"disk.sh"  大小:358       块:8          IO 块:4096   普通文件设备:fd00h/64768dInode:409342      硬链接:1权限:(0644/-rw-r--r--)  Uid:( 1005/   david)   Gid:( 1005/   david)环境:unconfined_u:object_r:etc_runtime_t:s0最近访问:2023-06-12 16:31:49.265545417 +0800最近更改:2023-06-12 16:26:39.579676612 +0800最近改动:2023-06-12 16:28:17.400003431 +0800创建时间:-

最新文章

随机文章