man:
俗话说的好:“授人以鱼不如授人以渔”,这里我们将好好讨论一下如何使用Linux中一个重要工具——帮助文档。
帮助文档相关的命令有好几个,但是最常用的一个命令就是man命令,man就是manual的缩写,用来查看系统中自带的各种参考手册(注意,不仅仅是命令噢)。例如我们现在要查看who命令的帮助文档,最简单的用法如下:
命令序列 1
[stu@localhost~]$ man who
这时就来到了man命令的界面中,其中的项目意义如下所示:
NAME 这个命令(程序)的名称和简单用途的说明
SYNOPSIS 命令(程序)语法
DESCRIPTION 命令(程序)详细说明,包括选项与参数的用法
AUTHOR 命令(程序)的作者
REPORTINGBUGS 如果发现bug可以联系的电子邮件
COPYRIGHT 命令(程序)版权协议
SEE ALSO 还可以参考哪些文档
当然,不同的命令(程序)的文档格式可能有些微区别,文档中还可能包括的项目有:
COMMANDS 当命令(程序)在运行的时候,可以在此命令(程序)中下执行内部命令
FILES 这个命令(程序)或数据所使用或者相关的某些文件
EXAMPLE 这个命令(程序)执行的一些参考的样例。
重要
在 man界面中,可以使用如下快捷键来进行操作:
¨ 上/下箭头 向上/下滚动一行
¨ [Space] 向下翻一页
¨ [Page Down] 向下翻一页
¨ [Page Up] 向上翻一页
¨ [Home] 回退到第一页
¨ [End] 前进到最后一页¨ /string 向下搜寻 string 这个字符串
¨ ?string 向上搜寻 string 这个字符串
¨ n, N 利用 / 或 ? 来搜寻字符串时,可以用 n 来跳转至下一个匹配处,可以利用 N 来跳转至上一个匹配处。
¨ [q] 退出
全部手册分为好几个部分,每个部分中可能会存在同名的内容。
重要
man命令可以后跟一个数字来表示要查阅的用户手册。若不加数字,那man命令默认从数字较小的手册中寻找相内容:
1. shell中可以操作的指令或可执行文件
2. 系统核心可使用的函数与工具等
3. 一些常用的函数(function)与库(library),大部分为C的库(libc)
4. 设备文件的说明,通常在/dev下的文件
5. 配置文件或者是某些文件的格式
6. 游戏
7. 惯例与协议等,例如Linux文件系统系统、网络协议、ASCII码等等的说明
8. 系统管理员可用的管理命令
9. 跟系统核心有关的文件
关闭和重启:
ctrl + C:取消命令
工作环境下的Linux主机尤其是提供敏感或者要害服务的主机来说,关机是系统管理员要给予充分重视的一件大事:不恰当或者不正确的关机和重启,轻则可能造成服务中断;重则文件系统损毁、数据丢失或者出错,导致不可挽回的后果。
当然, 我们面对问题还是简单的,因为主机并没有在线提供服务,所以除了我们自己外,没有其他在线用户了,所以即使直接将电插头拔掉关机也多半不会造成什么后果。但是,在任何情况下,我们都极其强烈地建议不要使用这种做法以及其他各种不正确的方法关机和重启。我们应该通过正确的命令来进行关机和重启。
注意
¨ 普通用户没有权限使用shutdown命令,只有root用户才有权限。
命令
shutdown [选项] 时间 [警告消息]
系统关机
¨ -c 取消前一个shutdown命令。值得注意的是,当执行一个如“shutdown -h 11:10”的命令时,只要按“Ctrl+C”键就可以中断关机的命令。
¨ -f 重新启动时不执行fsck(注:fsck是Linux下的一个检查和修复文件系统的程序)。
¨ -h 关闭系统所有服务后直接关机。
¨ -k 只是送出信息给所有用户,但并不会真正关机。
¨ -n 不调用init程序关机,而是由shutdown自己进行(一般关机程序是由shutdown调用init来实现关机动作),使用此参数将加快关机速度,但是不建议用户使用此种关机方式。
¨ -r重新启动系统。
¨ -f<秒数> 送出警告信息和关机信号之间要延迟多少秒。警告信息将提醒用户保存当前进行的工作。
[时间] 设置多久时间后执行shutdown命令。时间参数有hh:mm或+m两种模式。hh:mm格式表示在几点几分执行shutdown命令。例如“shutdown 10:45”表示将在10:45执行shutdown.+m表示m分钟后执行shutdown.比较特别的用法是以now表示立即执行shutdown. 值得注意的是这部分参数不能省略。
[警告信息] 要广播所有登入用户的信息,这些信息会显示在当前登入用户的终端中。
cd,mkdir,rmdir命令
命令
用法:cd [目录路径]
变换工作目录至制定目录路径,若[目录路径]参数省略则变换至使用者的家目录,其中[目录路径]可为绝对路径或相对路径
另外 "~" 在Bash中表示当前用户家目录, "." 表示当前所在的目录 ".." 表示当前所在目录的上一层目录,”-” 则表示本次跳转前所处的目录。
范例 :
跳转到 /usr/bin/ : cd /usr/bin
回退到前一个目录:cd -
跳到目前目录的上上两层: cd ../..
命令
用法:mkdir [选项]... 目录...
若指定目录不存在则创建目录。
¨ -m, --mode=模式 设置权限模式(类似chmod命令)
¨ -p 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
命令
用法:rmdir[选项]... 目录...
若指定目录不存在则创建目录。
¨ -m, --mode=模式 设置权限模式(类似chmod命令)
¨ -p 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
列出文件和属性:
众所周知,Linux 是一个多用户、多任务的操作系统。多用户多任务并不是大家同时挤到一起在一台机器的的键盘和显示器前来操作机器,多数用户可能是通过网络来进行远程访问的。比如宁波城市学院的Web服务器www.nbcc.cn,上面有FTP 用户、系统管理员、web 用户、常规普通用户等,在同一时刻,可能有的同学或者老师正在访问校园新闻网页;网站管理员有的可能在上传软件或者数据来管理站点,在与此同时,可能还会有系统管理员在维护系统;浏览主页的用的是nobody 用户,大家都用同一个,而上传软件或数据用的是FTP用户;管理员的对系统的维护可能用的是普通帐号或超级权限root帐号。所以很容易理解:Linux中的所谓多用户是分角色的,不同的用户,所需要完成的工作不一样,因此,其权限也不同。
同时,Linux中的用户也可以是分组的,因为我们可能需要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们就需要用到用户组。举例来说,我们为了让一些用户有权限查看而不能改动某一文档,比如是一个课程表,我们可以把这些用户都划到同一个组下,然后来修改这个文件的权限,让课程表文件从属于此组,并对用户组可读,这样此文件对用户组下面的每个用户都是可读的。
重要
¨ 用户(user)是能够获取系统资源的权限的集合。Linux中的用户可以分为三类:
1. 根用户(root):具有系统全部权限的用户;
2. 普通用户:其使用系统的权限受到一定限制;
3. 系统用户:也称虚拟用户,是保障系统运行的用户,一般不通过Shell登录系统。
¨ 用户组(group)就是具有相同特征的用户(user)的集合体。
简单了解了用户和用户组概念后,我们再回头来讨论一下Linux中的文件访问权限。我们首先要知道:在Linux中,一个文件总是与某个特定用户(文件拥有者,单个用户)和某个特定用户组(文件组,一批用户)关联在一起的。我们举个例子来说明这个事实,在这个例子中,我们用到一个新的命令’ls’(将在知识点1中详细讨论)来查看文件包括访问权限在内的属性,在命令行下输入’ls -l’,后跟三个要查看的文件名,命令输出如命令序列 3‑2所示:
命令序列 1
[dev01@localhost~]$ ls -l /bin/bash ~/.bashrc sample.c
-rwxr-xr-x. 1 root root 874184 12月 2 2011 /bin/bash
-rw-r--r-- 1 dev01 dev01 124 12月2 2011 /home/dev01/.bashrc
-rwxr-xr--. 1 dev01 dgroup 116 9月27 12:42 helloworld.sh
输出结果每行列出了一个文件的属性,每行都有7个字段,这7个字段都是有其含义的,我们举命令序列 3‑2中输出的最后一行为例:
图1文件属性字段举例
其中,字段2 我们将在任务6中接触到,而字段5是文件的大小,默认单位是字节(Byte),字段6将在知识点1中详细讨论。我们在这里要弄懂的是字段1、字段3和字段4。
在命令序列 3‑2中,我们可以看到 /home/dev01/.bashrc 文件由用户dev01所有,并且属于用户组dev01;类似的,/bin/bash文件由用户 root 所有,并且属于用户组root;helloworld.sh 由用户 dev01所有,并且属于用户组 dgroup。
而文件对于文件所有者、文件组成员和其他用户可以规定不同的访问权限,这些权限就是读(r)、写(w)、执行(x)和无权限(-)。
注意
¨ 这对读(r)、写(w)、执行(x)这三种权限于普通文件和目录的含义是不同的:
r w x文件读取文件 编辑文件执行可执行文件目录 列出目录内容 移动、建立、删除文件/目录进入目录
回到命令序列 3‑3文件属性字段第一个字段,这个字段中包括一个 11 个字符的字符串。(第 11 个字符与SELinux相关,我们此处不作讨论)。第一个字符描述了对象的类型(- 在这个例子中表示普通文件),剩下的 9 个字符每三个字符为一组。第一组表示文件拥有者的权限,所以dev01用户可以读、写、执行helloworld.sh,文件第二组表示文件组用户的权限,所以在dgroup用户组中的用户可以读、执行但不能写helloworld.sh。文件第二组表示其他用户的权限,所以其他用户只能读helloworld.sh。
图2 Linux中的文件访问权限举例
重要
¨ 在Linux中,文件总共有7种类型,下面就是这7种文件及其类型代码字符:
1. - 常规文件
2. d 目录文件
3. l 符号链接文件
4. c 字符特殊设备文件
5. b 模块特殊设备文件
6. p FIFO管道文件
7. s 套接字文件
到这里为止,我们就基本了解了文件访问权限这个概念了。
命令
用法:ls [选项]... [文件]...
列出 FILE 的信息(默认为当前目录)。
如果不指定-cftuvSUX 或--sort 选项,则根据字母大小排序。
¨ -a 不隐藏任何以. 开始的项目
¨ -A 列出除. 及.. 以外的任何项目
¨ -c 按ctime(文件属性或者内容最后更改的时间) 排序;同-lt 一起使用:根据ctime 排序并显示ctime;同-l一起使用:显示ctime 但根据名称排序。
¨ -d 当遇到目录时列出目录本身而非目录内的文件
¨ -F 加上文件类型的指示符号(*/=@| 其中一个)
¨ -h 与-l一起,以易于阅读的格式输出文件大小 (例如 1K、 234M、 2G等,默认情况下的单位是Byte)
¨ -i 显示每个文件的inode 号
¨ -l 使用较长格式列出信息
¨ -n 类似 -l,但列出UID 及GID 号
¨ -r 排序时保留顺序
¨ -R 递归显示子目录
¨ -S 根据文件大小排序
¨ -t 根据mtime(文件内容最后修改时间)排序
¨ -u 按照atime(文件最后访问时间)排序;同-lt 一起使用:按照访问时间排序并显示;同-l一起使用:显示访问时间并按文件名排序。
命令
用法:chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式文件...
或:chmod [选项]... --reference=参考文件文件...
将每个文件的模式更改为指定值。
¨ --reference=参考文件 使用指定参考文件的模式,而非指定权限值
¨ -R, --recursive 以递归方式更改所有的文件及子目录
注意
修改或者设置文件访问权限可以用两种方法,一种是助记符的方法,助记符分为三个部分:
1. 对象助记符:可以是 a 代表所有用户,u代表文件拥有者,g代表文件组用户,o代表其他用户
2. 操作助记符:可以是+代表添加权限,-代表删除权限,=代表设置权限
3. 权限助记符:r代表可读,w代表可写,x代表可执行
¨ 如果你想对用户、组合或其他设置不同的权限,可以通过逗号分隔不同的表达,例如chmod u+r, g=rx,o-rwx hello.sh 表示为文件拥有者增加读权限,设置文件组用户权限为可读可执行,删除其他用户的所有权限
注意
另一种是使用八进制取代符号设置权限。
我们一般用 4位八进制数字来表示一个文件的访问权限。第 1 个数字的含义我们将在这里暂不讨论,也不会用到(将在下面文件特殊权限部分涉及到)。第 2 个数字表示了文件拥有者权限,第3 个数字是文件组用户权限,第 4 数字个是其他用户权限(参考表下面数字权限)。例如,在命令序列 3‑54中的hello.sh 例子中,创建的脚本文件的原有权限是 -rw-r--r--,相当于八进制 644。设置每个人的执行权限则将模式改为 755。
数字权限
符号 二进制 八进制
rwx 111 7
rw- 110 6
r-x 101 5
r-- 100 4
-wx 011 3
-w- 010 2
--x 001 1
--- 000 0
命令
用法:chown [选项]... [所有者][:[组]] 文件...
或:chown [选项]... --reference=参考文件文件...
更改每个文件的所有者和/或所属组。当使用 --referebce 参数时,将文件的所有者和所属组更改为与指定参考文件相同,注意,只有root用户才能变更文件的所有者,只有某用户组的成员用户才能将文件组设置为为该用户组。
¨ --reference=参考文件使用参考文件的相关属性,而非指定值
¨ -R, --recursive 递归处理所有的文件及子目录
小心 千万不能随便将文件特别是来历不明的文件的拥有者或者文件组设置为root,这将很容易给别有用心者可趁之机。
注意
注意,只有root用户才能变更文件的所有者
拷贝,剪裁,删除文件:
命令
用法:cp [选项]... [-T] 源文件目标文件
或:cp [选项]... 源文件... 目录
或:cp [选项]... -t 目录源文件...
将源文件复制至目标文件,或将多个源文件复制至目标目录。
¨ -f 如果目标文件无法打开则将其移除并重试
¨ -i 覆盖前询问(使-n选项失效)
¨ -l 只创建硬链接文件而不复制文件
¨ -n 不覆盖已存在的文件(使-i选项失效)
¨ -p 复制时保留文件的访问权限,拥有者,文件组和时间戳
¨ -R 递归复制目录及其子目录内的所有内容
¨ -s 只创建符号链接而不复制文件
¨ -u 只在源文件文件比目标文件新,或目标文件不存在时才进行复制
命令
用法:rm [选项]... 文件...
删除 (unlink) 文件。
¨ -f 强制删除。忽略不存在的文件,不提示确认
¨ -i 在删除前需要确认(默认选项)
¨ -R 递归删除目录及其内容
命令
用法:mv [选项]... [-T] 源文件目标文件
或:mv [选项]... 源文件... 目录
或:mv [选项]... -t 目录源文件...
将源文件重命名为目标文件,或将源文件移动至指定目录。
¨ -f 覆盖前不询问
¨ -i 覆盖前询问
¨ -n 不覆盖已存在文件
¨ -u 只在源文件文件比目标文件新,或目标文件不存在时才进行移动
如果指定了-i、-f、-n 中的多个,仅最后一个生效。
注意
¨ mv 没有-R 选项,mv可以直接移动目录。
链接文件:
在Linux中,链接有两种:符号链接(symbolic link)和硬链接(hard link)。在具体了解这两种链接之前,我们先要简要了解两个概念:inode和目录条目:
l 在Linux中,一个文件本身的数据总是放在在一个块(block)或者块的集合中。文件的信息(包括文件类型、读写权限、文件所有者、文件组、文件大小、文件链接数目,文件时间戳等)放在在一个 inode 中,一个文件只对应一个inode,而且这个inode在本文件系统内是惟一的。
l 在Linux中,一个目录文件总是包含一个目录条目清单,所有此目录中的文件或者子目录都体现为这个目录条目清单中的一个目录条目,目录条目包含这个个文件名或目录名,以及指向该文件或目录的 inode 的指针。
一个硬链接仅仅是文件或目录的一个附加目录条目,允许同一文件或目录有多个名字。
而一个符号链接是指向包含另一目录条目的文件的一个目录条目。符号链接也称为 symlinks。通俗来说,文件的硬链接就可以理解为文件的一个别名,而符号链接则可以视为文件的一个快捷方式。
命令
用法:ln [选项]... 目标链接名 (第一种格式)
或:ln [选项]... 目标 (第二种格式)
或:ln [选项]... 目标... 目录 (第三种格式)
在第一种格式中,创建指定名称且指向指定目标链接。
在第二种格式中,在当前目录创建指向目标位置的链接。
在第三种格式中,在指定目录中创建指向指定目标的链接。
默认创建硬链接,当使用-s 时创建符号链接。当创建硬链接时每个指定的目标都必须存在。符号链接可以指向任意的位置(包括不存在的位置)。
¨ -d 创建指向目录的硬链接(只适用于超级用户)
¨ -f, 强行覆盖任何已存在的目标文件
¨ -i 覆盖文件前进行确认
¨ -s 创建符号链接
注意
¨ 普通用户没有创建目录硬链接的权限,只有根用户可以通过“ln –f”命令强制为目录创建硬链接
¨ 虽然根用户是可以为目录创建硬链接的。但是我们不推荐这样做,因为创建目录硬链接有可能会在文件系统中引入目录遍历的死循环而造成文件系统的混乱,具体原因可参见下面的链接http://c2.com/cgi/wiki?HardLink。
¨ 例外情况是每个目录中目录本身及其父目录(. 和 ..)这两个硬链接。
注意
¨ 删除一个符号链接不会影响到这个符号链接指向的目标文件或目录;
¨ 反过来,删除、移动或者重命名某个符号链接所指向的目标文件或目录不会导致这个符号链接被删除,只会让这个符号链接“断裂”。
注意
¨ 如果一个文件有多个硬链接,仅在其最后一个硬链接被删除且硬链接数为 0 时文件才会被真正从文件系统中删除;
¨ 由于inode 仅在特定文件系统内是惟一的,因此硬链接不能够跨越文件系统;
¨ 符号链接没有上面的限制,具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
命令
tar <操作> [选项] 归档名文件列表
操作:
-c 创建一个新的归档文件
-r 向归档文件末尾追加文件
-u 更新归档文件
-x 从归档文件中解出文件
-t 列出归档文件中的文件
--delete 从归档文件中删除一个文件
-A 合并两个规档文件
选项:
-C 指定一个解档目录
-f 指定一个归档文件/设备进行操作
-z 调用gzip来压缩/解压缩文件
注意
归档文件的“.tar”后缀名不是必须的,但是一般我们都会加上这个后缀,以告诉用户这个文件是一个归档文件
-f选项后必须紧跟归档文件名
tar不会压缩文件
命令
gzip [选项] 压缩(解压缩)的文件名
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-r 递归式压缩/解压缩指定目录中的所有文件。
-num 用指定的数字num调整压缩的速度和压缩比。
-v 对每一个压缩和解压的文件显示文件名和压缩比.
-t 测试,检查压缩文件是否完整。
注意
gzip 在压缩文件过程中,会自动为文件添加一个“.gz”的后缀名,并且将原文件删除。
如果要保留原文件,就必须使用-c 选项和Shell的输出重定向机制(在后面会进行详细讨论)