本章内容:
3.1 基础知识
3.1.1 文件名
3.1.2 使用不同的目录
3.1.3 执行一个程序
3.1.4 改变路径(PATH)
3.1.5 关闭计算机
3.1.6 处理挂起的程序
3.1.7 命令选项
3.2 用户,密码,文件访问权限和安全性
3.2.1 主目录, 根目录和添加新用户
3.2.2 密码安全性
3.2.3 忘记了超级用户密码怎么办
3.2.4 忘记了普通用户密码怎么办
3.2.5 关闭或删除一个用户
3.2.6 文件的所有权和访问权
3.2.7 设置替代用户标识(SUID)
3.3 用“&”, “at”, “batch”和“cron”进行作业调度
3.3.1 怎样在后台执行命令
3.3.2 怎样在某一特定时间执行命令(使用at”和“batch”)
3.3.3 怎样设置“cron”
3.4 Shell
3.4.1 什么是Shell? 需要一个不同的Shell吗?
3.4.2 怎样定制自己的Shell
3.4.3 设置文本终端的颜色
3.4.4 在文本模式或 X模式控制台下,如何打印符号
3.4.5 如何编写简单的Shell脚本(Script)文件
3.4.6 引号的含义
3.4.7 输入输出重定向
3.4.8 Shell的特殊字符(metacharacters)
3.5 如何安装软件包(Package)及 rpm 软件包管理器
Linux 系统区分英文字符的大小写。比如,myfile, Myfile 和 myFILE表示的是三个不同的文件。同样,用户密码和登录名也需要区分大小写(这里沿用了Unix 和 C 语言的命名规则)。命名目录和命名文件的规则是相同的。除非有特别的原因,否则用户创建的文件和目录名要使用小写字符。大多数的 Linux 命令也使用小写字符。
Linux 系统下的文件名长度最多可到256个字符。通常情况下,文件名的字符包括:字母、数字、"."(点)、"_"(下划线)和"-"(连字符)。Linux 允许在文件名中使用除上述符号之外的其它符号, 但并不建议用户这样做。 有些转意字符 (即该字符被系统借用,表示某种特殊含义) 在Linux 的 命令解释器(shell)中有特殊的含义(shell 类似于 DOS下的命令处理器 COMMAND.COM)。这样的转意字符有:"?"(问号),"*"(星号), " "(空格), "$"(货币符), "&", 扩号等等。在文件名中应尽量避免使用这些字符。文件名中可以有" "(空格),但建议用户用"_"(下划线)来替代。
"/" 既可代表目录树的根也可作为路径名中的分隔符(类似DOS下的"\),因此"/"不能出现在文件名中。
和DOS一样,"." 和 ".." 分别用来表示"当前目录"和"父目录", 因此它们也不能作为文件名。
正如DOS 中一样,我们不能将文件命名为 . 或者 .. (点或者双点)——它们分别代表当前目录和当前目录的父目录(上一级目录)。这跟DOS中是完全一致的。
下面列出了一些转意字符及其意义:
* = 用于匹配任意长度大于等于零的字符序列。以 . (点)开头的文件名除外。
? = 用于匹配任意单个字符
[abC1] = 用于匹配枚举集合中任意单个字符。比例中,集合由‘a’,‘b’,C’,‘1’组成。
[a-z] = 用于匹配任意小字字母
[A-F] = 用于匹配任意大写字母
[0-9] = 用于匹配任意个位数字
[a-zA-Z0-9] = 用于匹配任意字母(大小写)或者数字。
\ (反斜线)也是一个特殊的字符。它屏蔽后继特殊字母的特殊含义(转意),使该字符仅取其符号所代表的字面意义。
例: 下面的命令会列出当前目录中除了文件名以 . 开头的文件之外的任何文件。
ls *
与此等价的命令是ls 或者 dir (不需要后跟 “*”)。 文件名以 . 开头的文件不被列出是因为 “.”是文件名的首字符,它并不与“*”匹配。我们可以把文件名以 . 开头的文件等价地理解成DOS中隐藏文件。使用ls –a (带 all 选项的ls 命令)或者 ls .* 命令来查看这些“点”文件。“点”文件在用户的home目录中很常见。它们通常是用户级的配置文件。
以下命令可列出当前目录中文件名含 . 的任何文件 (文件名以点开头的除外)。
ls *.*
以下命令可列出当前目录中文件名含两个点的任何文件(文件名以点开头的除外)。
ls *.*.*
请注意Linux中没有与DOS中文件扩展名相应的概念,但是你可以使用扩展名。例如,一个文件可以命名为 my_text.txt.zip 。另有一些DOS中的命名特色在Linux中是完全找不到的(比方说Micro~1.doc )。
以下的命令会找出扩展名为“htm”后再跟任意一个字符的文件:
locate *.htm?
以下命令可列出当前目录中所有文件名以a,b或者任意大写字母开头的文件:
ls [abA-Z]*
以下命令可列出当前目录中所有文件名以a开头,以n结尾的文件:
ls a*n
命令行自动完成是一个有用的功能——使用[Tab]键可以极大的节约时间,使处理复杂的长文件名变得轻松。例如,使用自动完成的功能,可以极大的减化输入以下这个长文件名的工作。
dir Eurosong\ 2000\ Olson\ Brothers\ -\ Fly\ on\ the\ wings\ of\ love\ \(denmark\).mp3
我只要输入
dir Eu<Tab>
如果没有其他文件的文件名以Eu 开头,输入<Tab>之后,系统会自动输入文件名的其余部分。
如果还有其他文件的文件名也以Eu开 头,我们可以查看一下可能的选择(系统会列出),进一步输入文件名中的下一两个字符,从而使文件的选择唯一化,系统的自动写成功能就可以启动完成整个长文 件名的输入了。文件名中的反斜线作用在于提示系统其后继的字符“空格”仅取其字面意义,即,文件名中包含的确实是空格。
文件名中的有“怪”字符怎么办?大部分问题可以通过自动完成功能解决。 另外,处理文件名中含有转意字符的文件,我们可以使用成对的‘’(单引号)。由于这些特殊的转意字符被单引号引用,命令解释器不会试图去解释其特殊意义。例如,给一个名为my file*的文件更名(文件名中含空格和*), 我们可以使用:
mv 'my file*' filename_without_weird_characters.txt
请注意我使用了一对‘’号 (单引号)。使用成对的“”(双引号)引用通常没有使用‘’有效。如果你使用“”号(双引号), 部份转意字符可能会被命令解释器加以解释(这就意味着它们可能被转意,而不是保持字面意义)。
跟从UNIX的传统,在Linux上,创建文件时,我们可以在文件名中可以使用几乎任何字符,包括不可打印字符(控制字符)。但是这情况非常少见。如果你在遇到文件名使用了这些字符,你可能会感觉很异样。我通常会在适当的位置使用一个转意字符*对这种文件进行重命名。我会先使用ls命令确认我要重命名的文件的文件名,然后对这个文件进行更名(使用mv 命令):
ls –l myfile*y.html
mv myfile*y.html myfile.html
(此例中我假定非标准字符位于字母e和y之间)
这里举一个关于在文件名中使用非常规字符的极端的例子: 创建一个文件名以短横线 - 开头的文件,再等它删除。 用常规的删除命令似乎没有办法(因为短横钱通常是用来引导命令选项的)。例如:
dir > -junk
以上命令将创建一个以-junk为名的文件(跟DOS类似,符号 > 将dir 命令的输出重定向到一个名为“-junk”的文件。常规的删除文件命令无法把这个文件删除。我们需要使用:
rm ./-junk
文件名前的./ 表示当前目录。在此其目的是避免文件名把的首字符 - 被命令解释器当作rm命令的选项引导。事实上没有必要在文件名中使用这些特殊字符。遵从传统的命名规则,不会过多地使事情复杂化。