第1章 基本概念

所属:第一部分 shell入门 来源:Linux命令速查手册

真正深入学习bash shell之前,首先需要搞清楚一些概念,这有助于继续本书的学习。这些概念绝对是你必须知道的,而且有些概念并不显而易见。


1.1 一切都是文件

在Linux系统中,一切都是文件

  • 文本文档、OpenOffice.org文档是文件
  • 图片、MP3和视频都是文件
  • 目录也是一种特殊的文件,包含其他文件的信息
  • 磁盘驱动器是真正的大文件
  • 网络连接也是文件
  • 运行中的进程都是文件

对于Linux来说,文件只是比特和字节流。Linux并不关心这些二进制位和字节最终组成了什么格式;相反,在Linux上运行的程序才关心它们组成的格式。

本书随处都会提到”文件”,可以根据上下文理解为”文件、目录、子目录以及系统中的其他所有东西”。很多命令对文档和目录都一样有效。


1.2 文件名的最大长度

Linux(和Unix)文件名最多可以长达 255个字符

建议:将文件名长度控制在 80个字符以内,因为大部分显示终端都是这个宽度,文件名能在一行显示完,不用换行。

有了长达255个字符的空间,就可以自由地将文件名起得更加具有描述性也更准确——当然,过犹不及。


1.3 文件名区分大小写

与Windows和Mac OS不同,Linux对于文件名是区分大小写的。

同一目录中可以同时存在3个不同的文件:

  • bookstobuy.txt
  • BooksToBuy.txt
  • BoOkStObUy.txt

对于Linux文件系统来说,它们是3个完全不同的文件。但在Windows或者Mac OS上,后两个会被认为是同名文件。

命令也区分大小写

命令同样区分大小写:

  • rm 不能写成 RMRmrM
  • 输入错误会导致删错文件或找不到命令

这一教训是双重的:Linux强制要求你必须精确,而精确性确实是个好东西。同时,Linux也给了你一定程度的灵活性,这在其他操作系统中是找不到的。


1.4 命名时不要使用的特殊字符

安全字符

总能安全使用的字符:

  • 数字
  • 字母(大写字母或小写字母)
  • 圆点(.
  • 下划线(_

特殊字符使用建议

字符建议
/绝对不能使用,不能被转义
\必须转义,避免使用
-不能作为文件名或目录名的开始
[ ]必须转义,避免使用
{ }必须转义,避免使用
*必须转义,避免使用
?必须转义,避免使用
'必须转义,避免使用
"必须转义,避免使用

为什么不能用 /

/ 是用于分隔目录和文件的特殊字符。如果文件名包含 /,shell会误以为是路径分隔。

替代方案

  • 用下划线代替斜线:books_to_buy
  • 驼峰命名:booksToBuy.txtBooksToBuy.txt

为什么 - 不能开头

因为命令选项前面需要加上连字符。如果文件名以 - 开头,命令会把它误认为是选项:

rm -books_to_buy.txt
# 报错:rm: invalid option -- b

如何处理空格和特殊字符

方法1:转义字符 \

rm Why\ don\'t\ I\ name\ files\ with\ \*\?.txt

方法2:用引号括起来

rm "Why don't I name files with *?.txt"

更好的选择就是根本不使用这些字符,省去转义的麻烦。


1.5 通配符及其含义

通配符可以通过字符匹配一次指定多个文件,极大简化批量操作。

有3种通配符:*(星号)、?(问号)、[ ](方括号)

* 通配符

匹配 0或多个任意字符

命令匹配结果
rm libby1*.jpglibby10.jpg到libby12.jpg,不匹配libby1.txt
rm libby*.jpglibby1.jpg到libby12.jpg,不匹配libby1.txt
rm *txtlibby1.txt,不匹配jpg文件
rm libby*libby1.jpg到libby12.jpg,以及libby1.txt
rm *目录中的所有文件

? 通配符

匹配 单个字符

命令匹配结果
rm libby1?.jpglibby10.jpg到libby12.jpg,不匹配libby1.txt
rm libby?.jpglibby1.jpg到libby9.jpg,不匹配libby10.jpg
rm libby?.*libby1.jpg到libby9.jpg,以及libby1.txt

[ ] 通配符

匹配 一组单个字符,或指定范围内的字符。

命令匹配结果
rm libby1[12].jpglibby11.jpg 和 libby12.jpg
rm libby1[0-2].jpglibby10.jpg 到 libby12.jpg
rm libby[6-8].jpglibby6.jpg 到 libby8.jpg

1.6 小结

本章介绍的基础知识,对于新手来说意义可能并不那么明显,但当开始使用shell和它的命令时,它们就会派上用场。

要点回顾

  1. Linux中一切都是文件,包括目录、设备、进程
  2. 文件名最长255字符,建议80字符以内
  3. 文件名和命令都区分大小写
  4. 避免使用特殊字符,空格需要转义或加引号
  5. 三种通配符:*?[ ] 是批量操作的利器

预先了解这些基础知识,就能够避免犯那些令很多人痛苦不堪的常见错误。


Linux Shell 基础概念 通配符 文件名