概述用户使用shell跟内核交互Linux中有很多命令不同的命令有不同的功能。多个命令合起来可以完成一个大的功能。命令很多我们不可能记得每条命令的用法。所以我们必须有一种方法来快速知道一个命令是如何使用的有什么作用。所以几乎所有的命令都提供了帮助手册告诉命令的使用者如何使用命令、命令 的作用等等。帮助手册页很长我们不可能为了使用一个命令而从头到尾把帮助手册读完这时候需要一种快速读懂(有目的的去读)命令的帮助手册的方法。是如何实现的呢管理整个计算硬件的其实是核心(kernel 计算要系统)通常用户(user)都是以 shell 来与核心沟通让核心达到我们所想要实现的目的。shell 就是一个应用程序它读入用户键入的命令把它转换成 Linux 系统更易于理解的格式。它也包括一些基本的程序结构让用户做选项、循环以及把值存储在变量中。一、了解命令的基本格式shell 执行程序shell 负责执行终端请求的程序。用户每次向 shell ” 命令提示符[rootNode1 ~]# ” 键入一行信息shell 会在分析后决定做什么。 shell 所涉及到的每行信息都遵循相同的基本格式。如命令 选项 选项参数 命令参数(1) 命令参数(2)命令一般都会提供帮助文档只有了解了命令格式的各项意义我们才可能很快学会新命令的使用。至少在命令行提示符中键入命令时不会写错。第一字段 command(命令) 可执行文件第二字段 命令的选项些命令的选项带参数有些命令的选项不带参数中括号 [] 是可选择项在键入该命令的时候可以选择是否省略命令的选项。竖线 “|” 表示左右两边任选一个作为命令选项的参数。省略号“...” 表示该命令选项可以有多个但是书写时要按照下面的格式。选项又分为1、长选项使用 --options 格式。 一般选项名称是完整的。如果一个命令的长选项有多个是不可以合并的。2、短选项使用 -options 格式 一般是长选项名的简写格式。如果一个命令的短选项有多个是可以合并的。ls 命令的选项 -b 和 --escape 作用是一样的。[rootNode1 ~]# ls -b /root/anaconda-ks.cfg install.log install.log.syslog[rootNode1 ~]# ls --escape /root/anaconda-ks.cfg install.log install.log.syslog注意长选项是不可以合并使用的在命令行提示符中键入的命令使用到多个长选项的时候要分开写[rootNode1 ~]# ls --allblock-size1 /etc/ls: unrecognized option --allblock-size1[rootNode1 ~]# ls --all --block-size4 /root/. .bash_history .bashrc install.log.syslog .tcshrc.. .bash_logout .cshrc .lesshst .viminfoanaconda-ks.cfg .bash_profile install.log .ssh第三字段 命令参数命令参数有多个需要使用空格隔开。当用户按照上述描述的格式在命令行提示符中键入命令以后按 [Enter] 键后shell 就分析执行该命令。( Linux 中 [Enter] 为 CR 字符表示)shell 会先判断该命令的类型如果是内部命令的话就直接执行否则的话shell 会按照 $PATH 变量的值到磁盘搜索用户键入的命令。1、如果搜索到用户键入的命令产生中断由内核(kernel)负责把命令文件从磁盘中加载到内存中来并开始执行该命令。此时命令就表示为一个进程。2、如果 shell 按照 $PATH 变量的值到磁盘中找不到该命令的话就会报错。[rootNode1 ~]# tree /etc-bash: tree: command not found说明命令的位置不在 $PATH 中 和 命令不存在都会报“command not found”如果我们键入的命令的位置不在shell搜索 $PATH 路径中可以使用全路径描述该命令或把该命令所在的路径追加到 $PATH 变量中。1、使用全路径描述文件[rootNode1 etc]# /usr/bin/tree /etc2、把命令所在的路径加到 $PATH 变量中。1[rootNode1 ~]# vim /etc/profile在 profile 文件中添加一行 $PATH/path1/path2/:/path2/path3如在编译安装 MySQL 数据库MySQL提供的工具所在的路径设置为shell默认的搜索路径($PATH)。这样使用MySQL提供的一些命令对MySQL服务器操作维护时就不需要输入命令的全路径了。这样比较方便。在 profile 文件中添加一行$PATH/usr/local/mysql/bin 但是刚添加到 $PATH 中的路径,shell并不知道。我们要通知shell,重读 profile 文件方法是[rootNode1 etc]# . profile二、我们怎么知道一个命令的使用方法呢一般命令都会提供帮助文档我们可以通过帮助文档来查看一个命令的使用方法。我们的命令又分为: shell 内置命令 和 外部命令。命令的类型不同获取它的帮助文档的方式也不同。所以我们首先要判断一个命令的类型判断 command 类型使用 【type】[rootNode1 etc]# type cdcd is a shell builtin得知【cd】命令是 shell 内置命令我们可以使用下述方法查看该命令使用方法[rootNode1 etc]# help cdcd: cd [-L|-P] [dir]Change the shell working directory.Change the current directory to DIR. The default DIR is the value of theHOME shell variable.......[rootNode1 etc]# type lsls is aliased to ls --colorautols命令是外部命令。我们使用 【command --help】或【man】命令来查看命令帮助文档。man 中文意思男人在 Linux 世界中遨游不懂就问“男人”。所以要学会 man 的使用。我们非内核命令的帮助文档存放在/usr/share 中。【man】命令是如何工作的man 会按照它的配置文件 /etc/man.config 中 MANPATH 定义的路径去搜索命令的帮助文档当我们用【man】去查看 command 的帮助文档时如果 command 的帮助文档不在man 程序的搜索路径中man 是找不到 command 的帮助文档的。所以我们在编译安装源程序的时候如果我们安装的程序的帮助文档目录不在【man】的默认搜索路径下则需要把程序的帮助文档的路径添加【man】的索引路径中。可以通过编译 /etc/man.config 在 MANPATH 指令中添加上程序的帮助文档的路径就可以了如把 MySQL 的帮助文档的路径添加到【man】的搜索路径中[rootnode2 ~]# vim /etc/man.config# MANBIN /usr/local/bin/man## Every automatically generated MANPATH includes these fields#MANPATH /usr/manMANPATH /usr/share/manMANPATH /usr/local/manMANPATH /usr/local/share/manMANPATH /usr/X11R6/manMANPATH /usr/local/mysql/man/我们的帮助文档是分章节的不同章节表示不同的意思。了解帮助文档的不同章节的含义我们才可以使用【man】命令快速定位到需要的内容。