唉,我最近真的很忙,甚至一天都很难保证有16小时的睡眠时间了,所以博客也更新怠慢了起来。今天更新的这篇文章主要是与Linux文件相关的概念。
Linux文件系统类型
随着Linux的不断发展,各方开源人士的大显神通,Linux所支持的文件系统类型也在迅速的扩充。Linux至今为止已经支持相当多的文件系统类型,但是不同版本的Linux发行版本支持的文件系统类型种类有所不同,这是ubuntu10.04所支持的文件系统类型:
walfred@ubuntu:/lib/modules/2.6.32-28-generic/kernel/fs$ ls
之所以Linux能够支持这么多大的文件系统,Linux提供了一个叫做VFS的虚拟文件系统,VFS屏蔽了不同文件系统的差异,提供给用户统一的接口,比如open()、close()一个文件,而不需要特殊文件系统特殊对待。打个比方,Linux就像皇帝,不同的文件系统就是佳丽,VFS可以随心所欲一样拥有后宫佳丽3000一样,VFS也是Linux内核的一部分。
Linux文件类型
在Linux中,一共有四种文件类型,如下:
普通文件:比如文本文件,C语言源代码、shell脚本等。这个我们可以通过cat、more、less等命令来查看或者使用vi/vim、gedit、emacs等文本编辑工具来查看内容,使用mv来改名字等。
我们可以试下:
walfred@ubuntu:~/ourunix/c_coding$ ls -ltr
total 120
-rw-r--r-- 1 walfred walfred 1199 2011-09-10 06:40 cos_line.c
-rw-r--r-- 1 walfred walfred 0 2011-09-10 06:40 gcc
-rwxr-xr-x 1 walfred walfred 7181 2011-09-10 06:40 cos_line
drwxr-xr-x 2 walfred walfred 4096 2011-09-16 23:22 zhidao
-rw-r--r-- 1 walfred walfred 400 2011-09-10 06:48 acos.c
-rwxr-xr-x 1 walfred walfred 7213 2011-09-10 06:48 acos
普通文件的标志是最前面“-”,如“-rwxrwxrwx”。
目录文件:在上面的一坨带有“-”开头的普通文件,我们看到一个与其他不一样的文件:
drwxr-xr-x 2 walfred walfred 4096 2011-09-16 23:22 zhidao
该文件前头drwxr-xr-x不是“-”,而是一个字母“d”,这就说明了该文件不是一个普通文件,而是一个目录文件(directory)。
链接文件:链接文件是指向同一索引节点的目录条目。可以用ls来查看,连接文件的标志是“l”,而文件后面是用“—>”指向所链接的文件,这个可以暂时借助于windows下的快捷方式来理解,不过之后会慢慢讲到其与快捷方式的一些不同点。
同样我们可以看下:
walfred@ubuntu:/usr/src$ ls
linux-headers-2.6.32-28 linux-headers-2.6.32-28-generic
walfred@ubuntu:/usr/src$ ls -ltr linux-headers-2.6.32-28
total 148
-rw-r--r-- 1 root root 2430 2009-12-02 19:51 Kbuild
-rw-r--r-- 1 root root 55902 2011-01-10 13:20 Makefile
drwxr-xr-x 3 root root 4096 2011-02-11 05:24 virt
…省略一万行…
drwxr-xr-x 2 root root 4096 2011-02-11 05:24 block
drwxr-xr-x 25 root root 4096 2011-02-11 05:24 arch
再看--
walfred@ubuntu:/usr/src$ ls -ltr linux-headers-2.6.32-28-generic/
total 656
-rw-r--r-- 1 root root 651949 2011-01-10 17:21 Module.symvers
lrwxrwxrwx 1 root root 29 2011-09-09 16:14 fs -> ../linux-headers-2.6.32-28/fs
lrwxrwxrwx 1 root root 35 2011-09-09 16:14 firmware -> ../linux-headers-2.6.32-28/firmware
lrwxrwxrwx 1 root root 34 2011-09-09 16:14 drivers -> ../linux-headers-2.6.32-28/drivers
lrwxrwxrwx 1 root root 40 2011-09-09 16:14 Documentation -> ../linux-headers-2.6.32-28/Documentation
…省略一万行…
lrwxrwxrwx 1 root root 33 2011-09-09 16:14 ubuntu -> ../linux-headers-2.6.32-28/ubuntu
lrwxrwxrwx 1 root root 33 2011-09-09 16:14 Kbuild -> ../linux-headers-2.6.32-28/Kbuild
lrwxrwxrwx 1 root root 26 2011-09-09 16:14 source -> /build/buildd/linux-2.6.32
可以看出linux-headers-2.6.32-28-generic目录下的大部分文件都是链接于linux-headers-2.6.32-28。
特殊文件:Linux的一些设备,如磁盘,终端,打印机等,都在文件系统中表示出来,这类文件就是特殊文件,比如下面我讲建立一个字符设备文件:
walfred@ubuntu:~/ourunix/embedded$ sudo mknod ./test c 250 1
walfred@ubuntu:~/ourunix/embedded$ ll
total 8
drwxr-xr-x 2 walfred walfred 4096 2011-10-16 01:32 ./
drwxr-xr-x 4 walfred walfred 4096 2011-10-16 01:29 ../
crw-r--r-- 1 root root 250, 1 2011-10-16 01:32 test
可以看到这个test就是一个字符设备了、它的标志为“c”。
在介绍了上述文件类型之后,希望您能够记住一句话,“Linux一切皆是文件”,当然这句话你暂时不要深究,等到橘子红了的时候你自然就会明白。
汇总下我们遇到的常见文件类型:
“-”表示普通文件;
“d”表示目录文件;
“l”表示链接文件;
“c”表示字符设备;
“b”表示块设备;
“p”表示管道文件,比如FIFO文件;
“f”表示堆栈文件,比如LIFO。
Linux文件属性
刚才我们在使用命令ls –ltr的时候,看到了除了表示不同文件类型(“-”,“d”,“l”,“c”)的时候,还看到了有一排这样的字母“rwxrwxrwx”,晓得什么是视觉恐慌吗?这些罗刹数字就是滴!不要怕,听我一一道来。
这个举个例子最好:
walfred@ubuntu:~/ourunix/embedded/ex$ ls -ltr
total 4
-rw-r--r-- 1 walfred walfred 0 2011-10-16 01:42 file.txt
drwxr-xr-x 2 walfred walfred 4096 2011-10-16 01:43 directory
其中,第一列的“-”是标志file.txt是一个普通文件,而第二列的“d”表示directory是一个目录文件;
Linux中的文件拥有者可以把文件的访问属性设成3种不同的访问权限:可读(r),可写(w),可执行(x)。文件又有三个不同的用户级别:文件拥有者(u),所属的用户组(g),系统里其他的用户(o)。
第一个字符后有3个三位字符组:
第1个三位字符组表示对于文件拥有者(u)对该文件的权限;
第2个三位字符组表示该文件所属组的其他拥有者(g)对该文件的权限;
第3个三位字符组表示系统其他用户(o)对该文件的权限。
通过下图,兴许能够更清晰的表现出来。
另外要说的是,目录权限和文件权限有一定的区别,对于目录而言,r表示允许列出该目录下的文件和子目录,w代表允许生成和删除该目录下的文件,x代表允许访问该目录。