一切都是文件
在Linux系统中,一切都是文件。如文本文档、OpenOffice文档、图片、MP3和视频等都是文件,这点和Windows是一样的。
但是目录呢?它也是一种文件,只不过是一种特殊的文件,其中包含其他文件的信息。磁盘算是真正的大文件。网络连接也是文件,甚至运行中的进程也是文件,这些都是属于文件范畴。
对于Linux来说,文件只是bit和字节流。Linux并不关心这些二进制和字节最终组成了什么格式,相反,在Linux上运行的程序才关心它们组成的格式。对于Linux而言,文本文档和网络连接都是文件,而文本编辑器知道如何使用文本文档,Internet应用程序则可以识别网络连接,所以在Linux,需要我们根据上下文将“文件”理解为“文件、目录、子目录以及系统中其他所有东西”。
文件名最大长度
Linux和Unix文件名允许的最大长度为255个字符。在实际应用中,建议将文件名的长度控制在80以内比较好,因为大部分的终端都是这个宽度,文件名能在一行显示完,不用换行。
文件名区分大小写
与Windows和Mac OS不一样的是在Linux中,文件名是区分大小写的。对Linux而言,同一目录可以允许同时存在以下的3个文件:
- foldertest
- FolderTest
- folderTest
对于Linux文件系统而言,它们是3个完全不同的文件(这一点与Windows区别还是很明显的)。区分大小写也就意味着必须准确输入命令和文件名。例如:如果要使用命令rm删除文件,就不能使用RM/rM/Rm。
文件命名的限制
在各个不同的系统中,对于文件或目录的命令都会存在一些限制和禁止使用的字符。如在Mac OS中不允许使用:,在Windows中不能使用**等等。在Linux中可以安全使用的字符如下所示:
数字、字母、圆点、下划线
其他的字符虽然也可以使用,但却代表一些特定的含义,因为Shell对它们的解释方法可能各不相同,而有一些则根本不能使用。
/字符就禁止使用,因为在Linux中它是用来分隔目录和文件的特殊字符。如果文件名包含/为folder/Test,则代表在目录folder中存在文件Test,而实际上并不存在这个目录和文件。
空格虽然不禁止使用,但建议不要在文件名包含空格。因为在Shell中,通常将空格做为参数之间的分隔符,使用空格会让Shell解释时产生误解。如使用命令删除folder Test:
rm folder Test
Shell会理解为先删除文件folder再删除文件Test。那么如何处理文件名的中空格,甚至?、*、'、"呢?虽然在Shell命令可以使用转义符**、""和'',但还是建议避免使用。下面就列举一些在文件名中如何使用特殊字符:
字符 | 建议 |
---|---|
/ | 禁止使用,也不能被转义 |
\ | 必须转义,避免使用 |
- | 不能做为文件名或目录名的开始 |
[] | 必须转义,避免使用 |
{} | 必须转义,避免使用 |
* | 必须转义,避免使用 |
? | 必须转义,避免使用 |
' | 必须转义,避免使用 |
" | 必须转义,避免使用 |
通配符及其含义
在Linux中常见的通配符有三个*、?、[ ],含义分别如下:
参数 | 含义 |
---|---|
* | 匹配0个或多个任意字符 |
? | 匹配单个字符 |
[ ] | 匹配一组单个字符 |
假设计算机中某一目录下面有如下所示的文件
file1.jpg
file2.jpg
file3.jpg
file4.jpb
file5.jpg
file.log
现在想使用rm命令删除文件,使用通配符的示例如下:
命令 | 匹配 |
---|---|
rm file*.jpg | 删除所有file1-5.jpg文件,但不包含log文件 |
rm *log | 删除file.log,但不会删除jpg文件 |
rm * | 删除目录中所有文件 |
rm fil?1.jpg | 删除file1.jpg文件 |
rm file?.jpg | 删除所有file1-5.jpg文件,但不包含log文件 |
rm file[12].jpg | 删除file1.jpg和file2.jpg |
rm file[1-4].jpg | 删除file1/fiel2/file3/file4.jpg文件 |