Linux文件处识

  与Unix一样,Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而一致的接口。在Linux中,一切(或几乎一切)都是文件。通常程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备,不过也有一些例外情况,比如网络连接。但大多数情况下,只需要使用5个基本的函数——open、close、read、write和ioctl。

1. 目录

文件,除了本身包含的内容以外,它还会有一个名字和一些属性,即“管理信息”,包括文件的创建/修改日期及它的访问权限。这些属性被保存在文件的inode(节点)中,它是文件系统中的一个特殊的数据块,它同时还包含文件的长度和文件在磁盘上的存放位置,系统使用的是文件的inode编号。

目录也是文件,但它是一种特殊类型的文件。目录是用于保存其他文件的节点号和名字的文件。目录文件中的每个数据项都是指向某个文件节点的链接,删除文件名就等于删除与之对应的链接(文件的节点号可以通过ls -i命令查看)。你可以使用ln命令在不同的目录中创建指向同一个文件的链接。

删除一个文件时,实质上是删除了该文件对应的目录项,同时指向该文件的链接数减1。该文件中的数据可能仍然能够通过其他指向同一文件的链接访问到。如果指向某个文件的链接数(即ls -l命令输出中跟在权限后面的那个数字)变为零,就表示该节点以及其指向的数据不再被使用,磁盘上的相应位置就会标记。

2. 文件和设备

硬件设备在Linux中通常也被表示(映射)为文件。例如,作为root用户,你可以使用如下命令将IDE CD-ROM驱动器挂载为一个文件:

#mount -t iso9660 /dev/hdc /mnt/cdrom

#cd /mnt/cdrom

这个命令将CD-ROM设备中的当前内容挂载为/mnt/cdrom目录下的文件结构。然后,就可以像浏览目录一样浏览CD-ROM的目录,只不过该目录中的内容是只读的。

UNIX和Linux中比较重要的设备文件有3个:/dev/console, /dev/tty和/dev/null。

(1) /dev/console

这个设备代表的是系统控制台,错误信息和诊断信息通常会被发送到这个设备。每个UNIX系统都还有一个指定的终端或显示屏用来接收控制泰信息。

(2) /dev/tty

如果一个进程有控制终端的话,那么特殊文件/dev/tty就是这个控制终端(键盘和显示屏,或键盘和窗口)的别名(逻辑设备)。例如,由系统自动运行的进程和脚本就没有控制终端,所以它们不能打开/dev/tty。

在能够使用该设备文件的情况下,/dev/tty允许程序直接向用户输出信息,而不管用户具体使用的是哪种类型的伪终端或硬件终端。在标准输出被重定向时,这一功能非常有用。使用命令ls -R | more显示一个长目录列表就是一个这样的例子,more程序需要提示用户进行键盘操作之后才能显示下一页内容。

(3) /dev/null

/dev/null文件是空设备,所有写向这个设备的输出都将被丢弃,而读这个设备会立刻返回一个文件结尾标志,所以在cp命令里可以把它用做复制空文件的源文件。常把不需要的输出重定向到/dev/null。

Addition: 创建空文件的另一个方法是使用touch <filename>命令,该命令的作用是改变文件的修改时间,如果指定的文件不存在,就创建它,但该命令不会把原有内容的文件变成空文件。

/dev目录中的其他设备包括:硬盘和软盘、通信端口、磁盘驱动器、CD-ROM、声卡以及一些代表系统内部工作状态的设备。设备被分为字符设备和块设备。两者区别在于访问设备时是否需要一次读写一整块。一般情况下,块设备是那些支持某些文件系统的设备,例如硬盘。

  

posted @ 2013-01-24 17:40  leon.hxl  阅读(156)  评论(0编辑  收藏  举报