程序的组成
- 程序的组成部分:二进制程序文件、库文件、配置文件、帮助文件(前两个为二进制格式,后两个为文本格式)
- 二进制程序文件和库文件都是可执行文件,库文件不能独立执行,只能被调用时执行
- 配置文件和帮助文件是可被查看其内容的文件
人机交互方式
- 人机交互界面:
【1】GUI
【2】CLI:在命令提示符下,键入命令,然后执行命令
Linux命令执行
命令执行及命令的组成格式
- 任何命令或任何的人机交互接口都应该关联到一个终端设备上,然后在终端设备上开始显现出命令提示符来,然后在命令提示符下可以键入命令,每一个命令大体的运行格式几乎都是相似的
- 命令的语法通用格式:COMMAND OPTIONS ARGUMENTS:如
ls(命令) -l(选项) /var(参数)
- 命令执行过程:在命令提示符下,给出上述命令时,即把这个命令启动为一个进程,而命令运行过程当中的特性由options进行修正,并且这个命令将作用在所给定的参数arguments之上。即发起一个命令就是请求内核将某个二进制程序运行为一个进程,由静态转为动态(有生命周期)的过程
COMMAND
- 命令提示符后面必须接命令
- 命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件
- 多数系统程序文件都存放在:/bin,/sbin,/usr/bin,/usr/bin这四个目录下
普通命令:/bin,/usr/bin,usr/local/bin
管理命令:/sbin,/usr/sbin,/usr/local/sbin
clear#清空命令
ls#查看指定路径下的文件
- 共享库文件:很多程序在研发时调用了标准库或者其他库,这些库文件在命令运行时必须一并被装入内存运行,因为库文件其实就是应用程序的组成部分。库文件就是公共功能性程序,即多数程序都会用到的公共的共享的程序部分通常被称为库文件,且形象地被称为共享库,共享库文件也是二进制格式的,但不能被独立执行。共享库文件大多被存放在:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
- 命令运行时有可能会用到库文件,只要命令在编译时给予动态化方式执行编译,并链接至库文件,它将在运行时调用库
- 命令必须执行特定格式规范:
【1】Windows:exe,msi
【2】Linux:ELF
file /bin/ls #看一下bin目录下ls可执行称为文件是什么格式的,file命令用来查看文件类型
- attention:并非所有命令都有一个在某目录与之对应的可执行程序文件
- 命令根据其是否有可执行程序文件大体上可分为两类:
【1】内置命令(builtin):由shell程序的自带命令
【2】外部命令:独立的可执行程序文件,文件名同命令名 - 思考:为什么键入ls命令就可以自动找到ls呢?
当前是shell环境,命令提示符是由shell程序提供给我们的,当我们键入ls时,其背后的进程会自动帮我们把ls在系统上的/bin,/sbin,/usr/bin,/usr/sbin等路径下查找并在找到后运行起来,shell通过自己的环境变量来定义工作特性
- shell程序是一个独特的程序,负责解析用户提供的命令:按照空格把它们切分成片,最左侧当命令,中间的有一部分当选项,还有一部分当参数,至于那一部分当选项,那一部分当参数是有特定组织方式的;shell程序在完成解析用户提供的命令时,其中第一步就需要找到用户所给定的字符串最左侧的字符串所对应的程序文件在哪儿,如何去找呢?其内部提供了一个环境变量,在众多环境变量里,有一个path,里面保存了从哪儿去找当前系统上用户键入命令字符串所对应的命令文件,路径的顺序是自左而右
echo $PATH#查看路径,自左而右
attention:shell自带的命令是没有程序文件的
- 如何区别一个命令是内部还是外部?
查看命令类型:type,如果是内部命令,在各个路径下就不可能有一个与之匹配的文件名
type COMMAND
OPTIONS
- OPTIONS:指定命令的运行特性或调整命令运行时所要执行的代码和实现的功能,没有options和有options时运行的效果不一样
- 选项有两种表现形式:
【1】短选项:-c,例如-l,-d
【2】长选项:- -word,例如- -help,- -human-readable,长选项不能合并
ls /var
ls -l /var
ls -ld /var
attention:有些命令选项没有-;如果同一命令同时使用多个短选项,多数可合并,如-l -d = -ld
- 有些选项可以带参数,此称为选项参数
【1】短选项的选项参数通常会用:=等号等于
【2】长选项的选项参数通常会用: 空格分割
ARGUMENTS(命令参数)
- 参数就是命令的作用对象或命令的生效对象,即表示命令对什么会生效,如ls /var表示作用在/var路径上
- 不同的命令的参数不同,有些命令可同时带多个参数,多个之间以空白字符做分隔
获取命令的使用帮助
内部命令使用帮助的获取
help COMMAND
外部命令使用帮助的获取
1.命令自带简要格式的使用帮助
COMMAND --help
2.使用手册manual
- 绝大多数的使用手册都在/usr/share/man目录下
ls /usr/share/man
- 查看手册
man COMMAND
比如我们想知道poweroff怎么用的
man poweroff
- 手册包括多个section:
【1】NAME:简要使用说明,功能性说明
【2】SYNOPSIS:简要使用格式,命令使用语法格式
【3】DESCRIPTION:描述信息
【4】OPTIONS:选项的详细说明
【5】EXAMPLES:使用实例
【6】AUTHOR:作者
【7】BUGS:报告程序bug的方式
【8】SEE ALSO:额外参考
… - 要特别关注SYNOPSIS
【1】[ ]:表示可选内容
【2】<>:必须提供的内容
【3】a|b|c:二选一或多选一
【4】…:同类内容可以出现多个
- 使用手册分章节
压缩格式的 文件有章节之分,某一个对应的帮助手册可能被切开多段:/usr/share/man/man1、man2、man3…
man1:用户命令
ls /usr/share/man/man1
man2:系统调用
ls /usr/share/man/man2
man3:C库调用
man4:设备文件及特殊文件
man5:文件格式(配置文件格式)
man6:游戏使用帮助
man7:杂项
man8:管理工具及守护进程
man man
man lvcreate
attention:有些命令不只在一个章节中出现,因此查看man手册时可以自己指定章节
man CHAPTER COMMAND
man passwd
man 5 passwd #指定第五章节
attention:并非每个COMMAND在多有章节下都有手册
如何知道一个命令在哪些章节下有手册?如下命令可以简要介绍一下COMMAND并且可以显示命令
whatis COMMAND
whatis passwd
whatis ls
但是whatis命令并不是随时都可以执行的,因为whatis查看是根据数据库实现的,其执行过程是查询数据库进行的,这个数据库并不一定是最新的,我们要手动更新数据库
手动更新数据库的命令
makewhatis
man命令打开手册以后的操作方法:
【1】翻屏操作:
- 空格键:向文件尾部翻屏
- b键:像文件首部翻一屏
- Ctrl+d:向文件尾部翻半屏
- Ctrl+u:向文件首部翻半屏
- 回车键:一次向文件尾部翻一行
- k键:向文件首部翻一行
- G键:跳转至最后一行
- 数字+G:跳转至指定行
- 1G:跳转至文件第一行
【2】文本搜索 - /keyword:搜索指定字符串,不区分字符大小写,从文件首部向文件尾部依次查找
- ?keyword:从文件尾部向文件首部依次查找
n:与查找命令方向相同
N:与查找命令方向相反
退出:q
man命令的选项
- M /PATH/TO/SOMEDIR: 到指定目录下查找命令手册并打开之
练习:获取useradd命令的用法
man useradd
(1)添加用户gentoo
useradd gentoo
验证方式
id gentoo
只要id成功即表示添加完成
(2)添加用户slackware,要求指明其所用的shell为/bin/tcsh
useradd -s /bin/tcsh slackware
显示shell类型的命令:
tail -1 /etc/passwd
3.info命令
获取命令的在线文档,一般作为man手册的普通性文档,并非所有命令都有
info COMMAND
4.很多应用程序会自带帮助文档
/usr/share/doc/APP-VERSION
需要关注三个文件:
【1】README: 程序的相关信息
【2】INSTALL: 程序的安装帮助
【3】CHANGES: 程序发展过程中随版本更新而改变的详细信息
5. 主流发行版官方文档
操作系统级别的,如redhat
http://www.redhat.com/doc
6.程序的官方文档
谷歌官方站点上的“Document”
7.搜索引擎
google:
keyword filetype:pdf(文件类型)
keyword site:magedu.com(在特定网站找,只加域名,不要加www)
参考书籍
O’Reiley
Wrox
机械工业
电子工业
人邮
清华大学
水利水电