1.1 一切皆文件
对Linux而言,一切皆文件(原文中如是说,但后面注释中又指出“Linux中,一切皆字节流”),我们平时用的音频,图片,视频都可看作文件。对于Linux来说,文件仅是位和字节流。
1.2 文件名最大长度
在Linux(和Unix)系统中,文件名最多可以设置为255个字符。
实际上,将文件名控制在少于80个字符是个不错的想法,因为显示终端的平均长度就是80个字符,这样命名可以使文件名在一行内完整显示,不必换行(只是建议,不必严格遵守)。
1.3 文件名区分大小写
在Linux中,文件名与指令必须区分大小写,如rm,写成Rm,RM,rM都不行,必须准确输入rm。
1.4 名称中需要区分大小写
命名文件的时候,Linux中有一些禁用字符。
/字符不可以使用,因为使用/字符的话,在输入路径的时候会造成误解。
可以使用连接符-
或者下划线_
来作为文件名中的字符连接单词。但要注意的是,使用-
时不能把它放在第一个字符处。
始终可以安全使用的字符有:
数字
字母(大小写字母都可以,但一定要区分大小写)
圆点(.)——但大多数命令行和GUI环境会隐藏作为文件或目录名第一个字符的圆点
下划线(_)
字符 | 建议 |
---|---|
/ | 绝不使用。不能转义 |
\ | 必须转义。避免使用 |
- | 绝不能用作文件或目录名的第一个字符 |
[] | 必须转义。避免使用 |
{} | 必须转义。避免使用 |
* | 必须转义。避免使用 |
? | 必须转义。避免使用 |
’ | 必须转义。避免使用 |
“ | 必须转义。避免使用 |
<空格> | 必须转义。通常无法避免,但尽量避免 |
在使用空格时要加反斜杠进行转义或者将文件名用双引号引用起来,以免让电脑误会,对错误的文件进行操作。
1.5通配符及其含义
通配符(使用通配符可以通过字符匹配一次指定多个文件)
有四种通配符:
*(星号)
?(问号)
[ ](方括号)
{ }(波形括号,也称大括号,因此得名“大括号拓展”)
注意: 波形括号和其他通配符不同。bash将前三个通配符进行的转换分类为文件名拓展,而波形括号提供的是大括号拓展。前三个通配符仅匹配现有的文件。波形括号不仅可以用于新建文件
现有以下文件:
libby1.jpg libby2.jpg
libby3.jpg libby4.jpg
libby5.jpg libby6.jpg
libby7.jpg libby8.jpg
libby9.jpg libby10.jpg
libby11.jpg libby12.jpg
libby1.txt
通配符*及其匹配的内容
命令 | 匹配 |
---|---|
rm libby1*.jpg | libby10.jpg到libby12.jpg,以及libby1.jpg |
rm libby*.jpg | libby.jpg 到 libby12.jpg,但不匹配libby.txt |
rm *txt | libby.txt ,但不匹配libby1.jpg到libby12.jpg |
rm libby* | libby1.jpg到libby12.jpg,以及libby1.txt |
rm * | 目录中所有文件 |
通配符?及其匹配的内容
命令 | 匹配 |
---|---|
rm libby1?.jpg | libby10.jpg到libby12.jpg,但不匹配libby1.jpg |
rm libby?.jpg | libby1.jpg到libby9.jpg,单不匹配libby10.jpg |
rm libby?.* | libby1.jpg到libby9,jpg,以及libby1.txt |
通配符[ ]以及其匹配的内容
命令 | 匹配 |
---|---|
rm libby1[12].jpg | libby11.jpg和libby12.jpg,但不匹配libby10.jpg |
rm libby1[0-2].jpg | libby10,jpg到libby12.jpg,但不匹配libby1.jpg |
rm libby[6-8].jpg | libby6.jpg到libby8.jpg,但不匹配其他文件 |
通配符{ }也进行两种匹配:字符串和范围。如果要对字符串使用大括号扩展,则必须使用逗号分隔列表,然后bash会列出所有可能的组合。
$ ls
huan.jpg libby.gif libby.jpg libby.png libby.tiff
$ ls libby. {jpg,png}
libby.jpg libby.png
$ ls {libby,huan}.jpg
huan.jpg libby.jpg
大括号拓展也可用于生成文件以及匹配他们。如下例:
$ mkdir {dogs,cats,wombats}
cats dogs wombats
在本例中,没有匹配现有的文件或目录(这是*、?和[ ]的限制所在);相反,使用波形括号告诉mkdir待新建目录的名称。
[ ]用于匹配单个字符,而{ }用于匹配字符串,但要记住,字符串可以是单个字符!
看下面四条命令:
$ ls
testa testab testb testbc testc
$ ls test[a,b]
testa testb
$ ls test{a,b}
testa testb
$ ls test[ab,bc]
testa testb testc
$ ls test{ab,bc}
testab testbc