Linux 文件类型深入分析

1)普通文件(-)
新建一个regular文件
echo "hello" > regular
用stat查看regular文件
stat regular
结果如下:
  File: `regular'
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 155656      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-05 04:13:21.000000000 +0800
Modify: 2010-11-05 04:13:21.000000000 +0800
Change: 2010-11-05 04:13:21.000000000 +0800
分析:
File: regular
说明:
没什么好说的,就是文件名.
size: 6
说明:
文件的大小,这里注意我们用echo输入重定向5个字符到regular,为什么它的大小是6,这是因为他每次在行尾都会追加一个$符号.
可以用cat -A regular来查看,如下:
cat -A regular
hello$
Blocks: 8
说明:
这个文件占用了8个块,块的单位是512个字节,因为文件系统的块为4096个字节,除以512个字节,就是8个Blocks.也就是一个文件最小也要占用8个block.
IO Block: 4096
说明:
IO Block表示文件系统块的大小,ext3默认为4096,可以调整为2048等,但ext3最大也即是4096,可以通过tune2fs -l /dev/sda1来确认.
Device: 801h/2049d
说明:
这里表示regular文件所在的磁盘驱动器,这里的801h代表的是主设备号为8,从设备号为1,也就是一个scsi磁盘,设备节点为/dev/sda1,h代表16进制数.
如果是第二块硬盘的第一个分区,这里的数字将是811h,因为scsi磁盘最多有15个分区,0不用,所有11的十六进制就是17.
2049d是801h由十六进制到十进制转换的结果.
如果硬盘是IDE的呢?那结果就变成了301h/769d,这里的301是主设备号为3,从设备号为1,也就是一个ide硬盘的第一个分区.
Inode: 155656
说明:
Inode就是I节点,这里说明的是155656并不是系统已经用了这么多个inode,比如现在新建文件2,inode为1002,这时新建文件3,inode为1003,此时你删了文件2,再建文件4,它的inode还是1002.
最后要注意一个文件只有一个Inode,Inode指引我们找到文件的信息.
Links: 1
说明:
只有这个文件名用了这个Inode.如果有两个文件名用了这个Inode,这里的数字将是2,例如一个硬链接.
Access: (0644/-rw-r--r--)
说明:
对于这个文件而言,删除和创建文件其实要看上级目录的脸色,如果没有写当前目录的权限,则无法删除创建该目录下的文件.
Uid: (    0/    root)   Gid: (    0/    root)
说明:
文件的owner和group
Access: 2010-11-05 04:13:21.000000000 +0800
说明:
访问这个文件的时间点,例如cat regular,除了stat外,我们还可以用ls -lu来查看.
Modify: 2010-11-05 04:13:21.000000000 +0800
说明:
文件被改变,这个时间戳变改变,例如echo "change time" >> regular,但这个操作不影响atime.
Change: 2010-11-05 04:13:21.000000000 +0800
说明:
文件状态被改变后这个时间戳会改变.它包括更改Modify时间的所有操作.同时包括了owner,权限,增/删link等操作.

2)目录(d)
新建目录
mkdir testdir
stat testdir
  File: `testdir/'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 801h/2049d      Inode: 456075      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-09 13:08:57.000000000 +0800
Modify: 2010-11-09 13:08:57.000000000 +0800
Change: 2010-11-09 13:08:57.000000000 +0800

size:4096
说明:
在ext3文件系统中,目录默认的大小是4096个字节.目录是文件名和inode节点号的集合,文件过多,会超出4096,此时目录以2*IO BLOCK大小进行递增.
Blocks: 8
说明:
新建目录,默认占用的blocks(512字节)就是8个,每次递增16个blocks.
Links: 2
说明:
每个目录最少有2个links.也就是本目录在两个地方有引用,默认是该本目录的上级目录及当前目录.
例如:
ls -lid testdir/
456075 drwxr-xr-x 2 root root 4096 2010-11-08 15:16 testdir/
此时是用opendir打开了testdir目录的上一级目录,找到了testdir目录的INODE,并显示了该目录的信息.
ls -lida testdir/.
456075 drwxr-xr-x 2 root root 4096 2010-11-08 15:16 testdir/.
此时是用opendir打开了testdir目录,找到了.目录的INODE,.表示是当前目录,也就是testdir目录.
所以我们看到有两个对testdir的硬链接引用.linux正是用这种树状的目录结构将所有的文件都组织起来了.
Access: (0755/drwxr-xr-x)
说明:
对于目录,如果是744(rwxr--r--),则其它用户不能cd到此目录,只能用ls查看此目录.
如果是722,(rwx-w--w-),则其它用户不能cd到此目录,不能ls,也不能往目录写任何数据.
如果是711,(rwx--x--x),则其它用户能cd到此目录 不能ls,当然也不能往目录写任何数据.
Access: 2010-11-09 11:02:56.000000000 +0800
说明:
访问这个目录的时间点,比如ls -l testdir操作会改变这个时间点.
Modify: 2010-11-09 10:34:05.000000000 +0800
说明:
在目录下创建/删除文件都会改变目录的modify时间,因为目录里记录着文件名及对映的INODE,而改变目录下文件的owner不会改变目录的modify时间.
Change: 2010-11-09 11:09:38.000000000 +0800
说明:
在目录下创建/删除文件会改变目录的ctime,同时如果chown/chgrp/chmod改变目录的权限,属主的话也会改变它的ctime.
 
3)软链接(l)
建立软链接文件
ln -s link softlink
查看softlink文件
stat softlink
  File: `softlink' -> `link'
  Size: 4               Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d      Inode: 456074      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-09 13:06:38.000000000 +0800
Modify: 2010-11-09 13:06:34.000000000 +0800
Change: 2010-11-09 13:06:34.000000000 +0800

File: `softlink' -> `link'
说明:
软链接与源文件的关系
Size: 4
说明:
软链接文件大小为源文件名的长度,这里的源文件名为link,所以它的大小为4.
Blocks: 0
说明:
软链接不会占用磁盘空间,只会在目录表中增加一条记录.
Access: (0777/lrwxrwxrwx)
说明:
软链接文件权限永远是777,更改软链接文件的权限即更改源文件的权限,链接文件不变.
例如:
查看目标文件link的权限为400
ls -l link
-r-------- 1 root root 0 2010-11-09 13:06 link
查看软链接文件softlink的权限为777
ls -l softlink
lrwxrwxrwx 1 root root 4 2010-11-09 13:06 softlink -> link
更改软链接文件softlink的权限为755
chmod 755 softlink
最后我们看到link文件的权限为755
ls -l link
-rwxr-xr-x 1 root root 0 2010-11-09 13:06 link
Uid: (    0/    root)和Gid: (    0/    root)
说明:
更改链接文件的属主和属组,会修改源文件的属主和属组,链接文件不变.
例如:
chown troy.troy softlink
ls -l link
-rwxr-xr-x 1 troy troy 0 2010-11-09 13:06 link
Access: 2010-11-09 13:06:38.000000000 +0800
说明:
查看链接文件,会更新源文件atime的时间戳,而用ls命令查看当前目录下的文件,会更新softlink软链接文件的时间戳.
Modify: 2010-11-09 13:06:34.000000000 +0800
说明:
修改链接文件内容,会更新源文件的mtime时间戳,不会对链接文件产生影响.
Change: 2010-11-09 13:06:34.000000000 +0800
说明:
修改链接文件的属性等,会更新源文件的ctime时间戳,不会对链接文件产生影响.
 
 
4)块设备(b)

新建块设备节点/tmp/block,主设备号1,从设备号16
mknod /tmp/block b 1 16
查看block文件
stat block
  File: `block'
  Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: 801h/2049d      Inode: 456074      Links: 1     Device type: 1,10
Access: (0644/brw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-12 19:46:37.000000000 +0800
Modify: 2010-11-12 19:46:37.000000000 +0800
Change: 2010-11-12 19:46:37.000000000 +0800
File: `block'
说明:
新建的设备节点名称
Size: 0
说明:
设备节点的大小为0,设备节点只有主/从设备号的概念,不占用磁盘空间.
Blocks: 0
说明:
设备节点不占用磁盘空间,blocks为0
Device type: 1,10
说明:
块设备的主设备号为1,从设备号为16(十进制).Device type的显示输出为16进制.
Access: (0644/brw-r--r--)
说明:
块设备的权限,可以用mknod --mode 777的方式进行指定.
Access: 2010-11-12 19:46:37.000000000 +0800
说明:
块设备的atime,可以通过cat /tmp/block的方式改变.
Modify: 2010-11-12 19:46:37.000000000 +0800
说明:
块设备的mtime,可以通过cat > /tmp/block的方式改变.
cat > block
test
cat block
test
Change: 2010-11-12 19:46:37.000000000 +0800
说明:
块设备的ctime,可以通过chown/chmod的方式改变.
 
5)字符设备(c)
新建设备节点chardev1,字符设备,主设备号4,从设备号0
mknod /tmp/chardev1 c 4 0
查看chardev1设备
stat chardev1
  File: `chardev1'
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 801h/2049d      Inode: 456075      Links: 1     Device type: 4,0
Access: (0644/crw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-12 20:35:03.000000000 +0800
Modify: 2010-11-12 20:35:03.000000000 +0800
Change: 2010-11-12 20:35:03.000000000 +0800
Size: 0
说明:
字符设备的文件大小为0,同块设备一致.
Blocks: 0
说明:
因为字符设备的文件大小为0,所以不占用blocks.
其余字段同块设备的意义一致.
 
6)管道(p)
新建管道fifo
mknod /tmp/fifo p
查看fifo
stat fifo
  File: `fifo'
  Size: 0               Blocks: 0          IO Block: 4096   fifo
Device: 801h/2049d      Inode: 456074      Links: 1
Access: (0644/prw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-12 20:43:34.000000000 +0800
Modify: 2010-11-12 20:43:34.000000000 +0800
Change: 2010-11-12 20:43:34.000000000 +0800
Size: 0
说明:
管道文件的大小为0
Blocks: 0
说明:
管道文件大小为0,所以不占用blocks.

7)套接字(s)
查看当前系统所有的套接字
netstat -x
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    2499     @/org/kernel/udev/udevd
unix  6      [ ]         DGRAM                    3614098  /dev/log
unix  2      [ ]         DGRAM                    3936790 
unix  2      [ ]         DGRAM                    3839767 
unix  2      [ ]         DGRAM                    3817060 
unix  2      [ ]         DGRAM                    3614233 
unix  3      [ ]         STREAM     CONNECTED     11011    /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     11010   
unix  3      [ ]         STREAM     CONNECTED     10429    /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     10427   
unix  3      [ ]         STREAM     CONNECTED     9983     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     9981    
unix  3      [ ]         STREAM     CONNECTED     9420     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     9419    
unix  3      [ ]         STREAM     CONNECTED     8885     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     8884    
unix  3      [ ]         STREAM     CONNECTED     8493     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     8492    
unix  3      [ ]         STREAM     CONNECTED     7873     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     7872    
unix  3      [ ]         STREAM     CONNECTED     7819     /var/run/xenstored/socket
unix  3      [ ]         STREAM     CONNECTED     7818    
unix  2      [ ]         DGRAM                    7798    
unix  2      [ ]         DGRAM                    7017    
unix  2      [ ]         DGRAM                    6739    
unix  2      [ ]         DGRAM                    6046    
unix  2      [ ]         DGRAM                    5931    
查看套接字文件
stat /var/run/acpid.socket
  File: `/var/run/acpid.socket'
  Size: 0               Blocks: 0          IO Block: 4096   socket
Device: 805h/2053d      Inode: 547804      Links: 1
Access: (0666/srw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-06 04:13:15.000000000 +0800
Modify: 2010-11-06 04:13:15.000000000 +0800
Change: 2010-11-06 04:13:15.000000000 +0800
Size: 0
说明:
套接字文件大小为0
Blocks: 0
说明:
套接字文件不占用磁盘空间,所以它的blocks也为0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值