Unix操作系统中文件的命名规则并没有像Windows操作系统那么严格。或者说,很多Windows操作系统中文件名字里不能够包含的字符,在Unix操作系统中都是可以的。所以有些从Windows操作系统上转移过来的管理员会觉得特别的不习惯。笔者今天就对两个操作系统的命名规则上的差异做一下总结,帮助Windows系统管理员更加顺利的转型到Unix操作系统的阵地上来。
一、 隐藏文件的表示方法不同。
在Windows操作系统中,如果要将某个文件的属性设置为隐藏,那么必须要点击这个文件,然后右键选择“隐藏“。然后才能够将这个文件设置为隐藏。即在一般的情况下是看不到用户隐藏的文件。但是Unix操作系统下则不同。在Unix操作系统中,同Windows操作系统一样,可以将某个文件夹或者文件隐藏。但是两者的方式不同。在Unix操作系统中,是根据文件或者文件夹(目录文件)的名字来控制的。即如果要把某个文件设置为隐藏,那么只需要在某个文件名字的开头加上一个英文状态下的点号即可。如果要将某个目录文件设置为隐藏,通力也只需要在目录文件的名字前面即上一个英文状态下的点号即可。如.Unix等等。这就表示这个文件夹是一个隐藏文件或者隐藏的文件夹。
那么该如何查看这个隐藏的文件或者隐藏的文件夹呢?这跟Windows操作系统又不同。在Unix操作系统中,如果要进入某个隐藏的文件夹,不需要像Windows操作系统那样特殊的设置。只需要把文件名或者目录文件名输全即可。也即是说,要把那个.号也带上。如要进入到上面设置的那个UNIX隐藏文件夹中,则只需要执行cd .UNIX命令即可。所以在Unix操作系统中,无论是设置隐藏文件或者隐藏目录文件,还是查看这些文件,都是由一个英文状态下的点号所控制的。为此在Unix操作系统中要充分认识到这个点号的重要性。
二、 大小写敏感程度不同。
在Windows操作系统中,无论是文件还是文件夹,对于大小写都是不敏感的。也就是说,Unix与UNIX是同一个文件或者文件夹。所以在Windows操作系统中,给文件夹或者目录去名字的时候,不需要考虑大小写的问题。这给操作带来很大的方便。如在定义环境变量的时候,也不需要考虑大小写的问题。把路径全部小写或者大写都没有问题。但是在Unix操作系统中则不同。在Unix操作系统中,无论是普通文件还是目录文件,对于大小写都是敏感的。即Unix与UNIX是两个不同的文件或者目录。虽然这个差异不是很大,但是影响却很深远。如在Unix中定义环境变量的时候,在输入路径时,大小写就一个都不能够错误。如果某个字符大小写输入有问题的话,那么这个环境变量就不会起作用,因为其指向了一个错误的位置。
为此在Unix操作系统中定义文件或者文件名字的时候,就需要特别的注意。通常情况下,除非有特殊的必要,笔者都建立对于普通的文件,最好都采用小写的字符。对于系统文件或者目录,采用大小的字符。无论是哪一种文件,有一个禁忌就是不要采用大小写混合的方式来命名文件或者目录。因为一方面要输入大小写混合的目录或者文件时,会很麻烦。其次在引用路径时也容易出错。为此对于任何一种文件(普通文件、目录文件、设备文件)名字,都最好采用全部大写或者小写的形式。另外在定义环境变量的时候,最好通过复制、粘贴的方式来为环境变量指定路径,以防止因为大小写输入错误而导致环境变量不其作用。
说到这个大小写,最好有顺便提醒一下。在定义环境变量的时候,这个变量名字的大小写也是敏感的。在Windows操作系统中环境变量的大小写不敏感,用户将环境变量的名字输入为大小或者小写都是同一个。但是在Unix操作系统中这个环境变量的大小写也是敏感的。根据习惯,Unix操作系统中的环境变量一般都定义为大写。而普通的变量设为小写。这虽然是一个不成文的规则,但是系统工程师最好还是遵守。以减少大小写敏感所带来的烦恼。
三、 扩展名的要求不同。
在Windows操作系统中,一般要求文件都必须有扩展名。操作系统是根据这个扩展名来关联应用程序的。如text.txt,最后,.txt就是文件的扩展名。特别是对于一些脚本批处理程序,都要求以bat扩展名结尾。只有如此,操作系统才会当作批处理程序来执行。不过在Unix操作系统中却没有这么严格的要求。即使是普通文件,扩展名也是可有可无的。如默认情况下,sh是Unix操作系统下的可执行文件。但是如果工程师编写的可执行文件不带上这个扩展名,其也可以运行。这主要是两个操作系统调用脚本程序的方法不同。在Windows操作系统的命令行窗口下,只要输入脚本程序的全名(带上扩展名),即可以运行这个脚本程序。但是在Unix操作系统的shell中,调用某个脚本程序的话,需要在这个脚本程序前面加上./等符号,表示让系统执行这个程序。也即是说,他不是以扩展名来区分这是否是一个可执行的脚本程序。而是根据命令行的前缀来判断。为此在Unix操作系统中,对于扩展名没有任何的规定。
虽然Unix操作系统中对于扩展名没有硬性的规定。但是在通常情况下笔者仍然建议用户在建立普通文件的时候,最好还是加上扩张名。只有如此,看扩展名、而不用看文件的具体内容,就可以了解文件的类型。如一看到sh扩展名,就知道这是一个脚本文件。而不用再去看其里面的内容。类似的,对于C语言源文件、文本文件等等最好都能够加上一个扩展名,以示区别。
四、 在文件名中可以带有特殊字符。
在Windows操作系统中,虽然也可以使用大部分字符来作为文件名,但是对于一些特殊字符的使用,其有严格的限制。如对于一些具有特殊用途的字符/、*号等符号就不能够成为其文件名。不过在Unix操作系统中,在这方面就没有这么严格的要求。如在Unix操作系统中,text*.txt、text/tet.txt等文件名都是合法的。所以不考虑其他因素,在Unix操作系统中的文件基本上可以采用任何的字符。不过有些字符具有特殊的含义,如果将这些字符加入到文件名字中,可能对后续的操作会带来不利的影响。
如笔者一开始就谈到的,英文状态下的点号是一个文件数据的控制符号。如果在普通文件或者目录文件名字的第一个字符是英文状态下的点号,那么就表示这是一个隐形的文件或则文件夹。为此在定义文件时,除非有特殊的需要要把他们设置为隐藏的,那么不要以应为状态下的点号开头。不过一个文件名字的后面可以带上多个点号,即可以利用点号来区分。如student.num.txt。就表示一个学生学号的文本文件。如果在Windows操作系统中,会认为这个文件有两个扩展名。在第一次打开这个文件的时候,系统会提示用户使用哪个软件打开。不过在Unix操作系统中认为这是合法的。
虽然*、-等符号也可以作为文件的名字。但是因为其有一些特殊的含义,为此在利用他们来给文件命名的时候,需要谨慎使用。如跟点号类似,最好不要以-符号作为文件名字的第一个字符。因为这个-符号在系统中表示命令的可选项。为此在使用cat等命令操作这个文件时,系统会误把文件名参数当作可选项来对待。结果发现没有这个可选项而保错。另外这个*符号,在系统中表示通配符。如果此时利用rm命令来删除带*好的文件名字,必须使用转义字符。否则的话,会发生一些灾难性的后果。为此,笔者建议,虽然在Unix系统中可以使用一些特殊的符号作为文件或者目录的名字。但是除非有特殊的必要,最好在文件名字中不要包含特殊符号。否则的话,用户很可能会因为过度追求个性,而自讨苦吃。