我们提过一个概念,就是任何设备在Linux中都是文件,不仅如此,连数据通信的接口也由专属文件负责。所以,你会了解到,Linux的文件种类很多。除了前面提到的 -, d即所谓的一般文件与目录文件之外,还有哪些种类的文件呢?

 

文件种类

 

 

在介绍属性时,提到了最前面的标志(d或 -)可以表示目录或文件,那就是不同的文件种类。Linux的文件种类主要有下面这几种:

 

• 普通文件(regular file):就是一般我们存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为:

 纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容为我们可以直接读到的数据,例如数字、字母等等。设置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。

 二进制文件(binary):我们在GNU发展史中提过,系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。

 数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。

• 目录(directory):就是目录,第一个属性为 [d],例如 [drwxrwxrwx]。

• 连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。

• 设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:

 块(block)设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。

 字符(character)设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。

• 套接字(sockets):这类文件通常用在网络数据连接。我们可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。

• 管道(FIFO, pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。

那么,使用“ls -al”命令,就可以简单通过判断每一个文件的第一个属性来了解这个文件是何种类型。

除了设备文件是系统中很重要的文件,最好不要随意修改之外(通常它也不会让你修改),另一个比较有趣的文件就是连接文件。如果常常将应用程序放到桌面,就应该知道在Windows下面有所谓的“快捷方式”。同样,可以将Linux 下的连接文件简单视为一个文件或目录的快捷方式。套接字与管道文件比较难理解,因为它们与进程(process)密切相关,到将来了解进程(第17章)之后,再回来查看吧。此外,也可以通过man fifo及man socket来查看系统说明。

Linux文件扩展名

基本上,Linux文件是没有“扩展名”的,我们知道,Linux文件能否执行,与它第一列的10个属性有关,与文件名一点关系也没有。这与Windows不同。在Windows中,能执行的文件扩展名通常是 .com、.exe、.bat等等,而在Linux中,只要属性中有x,例如 [-rwx-r-xr-x] 即表示这个文件可以执行。

不过,可以执行与可执行成功是不一样的。举例来说,在root家目录下的install.log是一个纯文本文件,如果修改权限成为 -rwxrwxrwx后,这个文件能执行吗?当然不行。因为它的内容根本就没有可执行的数据。所以说,x表示这个文件具有可执行的能力,但能不能执行成功,当然就要看该文件的内容。

虽然扩展名没有什么实际的帮助,不过,由于我们仍然希望可以通过扩展名来了解该文件是什么,所以,通常还是会以适当的扩展名来表示该文件是什么类型。下面有数种常用的扩展名:

• *.sh:批处理文件(scripts,脚本),因为批处理文件使用shell写成,所以扩展名就编成 .sh。

• *Z, *.tar, *.tar.gz, *.zip, *.tgz:经过打包的压缩文件。这是因为压缩软件分别为gunzip、tar等等的,根据不同的压缩软件而取其相关的扩展名。

• *.html, *.php:网页相关文件,分别表示HTML语法与PHP语法的网页文件。.html的文件可使用网页浏览器来直接打开, .php的文件则可以通过客户端的浏览器来浏览服务器端,以得到运算后的网页结果。

 

另外,还有程序语言如Perl的文件,其扩展名也可能取成 .pl。基本上,Linux上面的文件名只是让你了解该文件可能的用途而已,真正的执行与否仍然需要属性的规范。例如,虽然有一个文件为可执行文件,如有名的代理服务器软件squid,如果这个文件的属性被修改成无法执行,那么它就不能执行。在文件传送的过程中常发生这种问题。例如,你在网络上下载一个可执行文件,但是,偏偏在你的Linux系统中就是无法执行。那就是可能文件的属性被改变了。从网络上传送到你的Linux系统中,文件的属性确实是会被改变的。

 

另外,在Linux中,每一个文件或目录的文件名最长可以到255个字符,加上完整路径时,最长可达4096个字符,是相当长的文件名。我们希望Linux的文件名可以一看就知道该文件的作用,所以文件名通常是很长,这对于用惯Windows而导致打字速度不快的人来说,真的是很困扰。不过,只能加强打字训练了。通过前一章的热键你也会知道,其实可以通过 [tab] 按键来确认文件名。这很好用。当然,如果已经读完了本书第3篇关于BASH的用法,那么你将会发现“变量真是相当好用”。看不懂,没关系,到第3篇谈到bash再说。

 

Linux文件名的限制

 

 

一般来说,在设置Linux下的文件名时,最好避免一些特殊字符。例如下面这些:

* ? > < ; & ! [ ] | / ' " ` ( ) { } 



因为这些符号在命令行界面下是有特殊意义的。另外,文件名的开头为小数点“.”时,表示这个文件为“隐藏文件”。同时,由于命令中常常会使用 -option之类的参数,所以最好也避免将文件名的开头以 - 或 来命名。

posted on 2014-02-26 16:18  kevin2014  阅读(1957)  评论(0编辑  收藏  举报