在使用ls命令前,我们先来了解以下 stat命令(查看文件的inode信息):
[root@192 ~]# stat --help Usage: stat [OPTION]... FILE... [root@192 ~]# stat Music/ File: Music/ Size: 19 Blocks: 0 IO Block: 4096 directory Device: fd00h/64768d Inode: 67844581 Links: 3 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-07-13 15:29:46.553019101 +0800(最后一次访问文件的时间,仅仅是访问,没有改动) Modify: 2022-07-13 15:29:29.863018427 +0800(最后一次修改文件的时间) Change: 2022-07-13 15:29:29.863018427 +0800(最后一次对文件属性改变的时间包括:权限、大小、属性等) Birth: 2022-07-09 19:59:02.572550433 +0800(文件创建的时间) Blocks:文件使用的总块数(文件看似是连续的,但其实是由很多块组成的,多个块在磁盘上的不同位置)
通常情况下,文件系统会将文件的实际内容和属性分开存放:
·文件的属性保存在inode中(i节点),每个inode都有自己的编号。每个文件各占用一个inode。不仅如此,inode中还记录着文件数据所在的block块的编号
·文件的实际内容保存在block中(数据块)。每个block都有属于自己的编号。当文件太大时,可能会占用多个block块。
·另外,还有一个super block(超级块)用于记录整个文件系统的整体信息,包括inode和block的总量、已经使用量和剩余量,以及文件系统的格式和相关信息。
由此,我们可以推断出,只要能找到文件的inode所在的位置,就能知道文件存放数据的block号,从而找到文件的实际数据。如下图:
上图中,文件系统先格式化出inode和block块,假设某个文件的权限和属性信息存放到inode4号位置,这个inode记录了实际存储文件数据的block号有4个,分别是:2、7、13、15,由此操作系统能快速的找到文件数据的存储位置
file命令:
用于显示文件类型和文件的编码格式
[root@192 ~]# file --help Usage: file [OPTION...] [FILE...]
七种文件类型
普通文件类型:Linux中最多的一种文件类型,包括纯文本文件、二进制文件、各种压缩文件等;第一个属性为[-]
目录文件:就是目录,能用 cd 命令进入的,类似于windows中的文件夹;第一个属性为 [d]
块设备文件:就是存储数据以供系统存取的接口设备,随机读写,硬盘;第一个属性为 [b]
字符设备文件:串行端口设备,顺序读写,硬盘;第一个属性为 [c]
套接字文件:通常用于网络的通信;可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信;第一个属性为 [s]
管道文件:用于进程间的通信;主要解决多个程序同时存取一个文件所造成的错误;第一个属性为 [p]
链接文件:
链接文件又分为符号链接(软链接)和硬链接:
软链接:和原文件不是一个文件,例如Windows的快捷方式,如果原始文件删除,所有指向它的符号链接也都被破坏了。软链接有自己的node,是linux的一种特殊的文件,作为一个文件,它的数据是它所连接的文件的路径。软链接可以跨越文件系统,也可以为目录建立。
硬链接:只能引用同一个文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在结构中的位置。
[root@192 ~]# ls --help Usage: ls [OPTION]... [FILE]... 这里的FILE指的是某一个具体的目录或文件 如果单独使用ls命令,则会列出当前目录下的所有目录或者文件: [root@192 ~]# ls anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos 也可以直接添加一个参数FILE,如果FILE是一个目录,则会显示该目录下的所有目录或者文件,如果FILE是一个文件,则直接显示该文件: [root@192 ~]# ls Music/ test1 使用-d ,可以直接显示一个目录,而不显示该目录下的内容: [root@192 ~]# ls -d Music/ Music/
ls一些常见的选项:
-a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. (.和..分别表示本级目录和上级目录) -s, --size print the allocated size of each file, in blocks -h, --human-readable with -l and -s, print sizes like 1K 234M 2G etc -i, --inode print the index number of each file -t sort by modification time, newest first -c 和-lt一起使用:显示列表并且以ctime(文件状态最后改变时间)排序。和-l一 起使用:显示ctime并且以文件名排序。其他情况,以ctime排序。 -S sort by file size, largest first -r, --reverse reverse order while sorting