标签:interface 应用程序 源代码 linux 编译器
硬件设备接口非常底层和简陋,叫硬件规格,不同厂商生产的接口不一样,写一款程序,多个机器都能运行,叫高级语言,但高级语言在哪里跑,需要编译器编译,汇编器汇编,才能在主机上运行。应用程序跑在硬件上意味程序需要驱动各种硬件,写程序之前还要写驱动,非常困难。所以有了操作系统内核:kernel,来应对硬件的复杂性。
操作系统研发非常困难,目前国内还没有像样的操作系统。linux内核,支持所有cpu,内核源代码编译成所有机器的机器语言。现在的嵌入式系统大多数都是跑linux。kernel把底层的复杂性隐藏起来,向上提供了系统调用。为了保证底核的统一性,做封装--库(libraries),离用户更近一步。从此程序员写程序就可以直接调用库里所提供的功能。库本身无论底层是什么样的cpu架构,库之上是统一而规范的。国际统一posix规范。
程序员的编程接口有API:application program interface 。但运行时面对的接口是ABI:application binary interface 应用二进制接口。
程序的组成部分; 二进制程序:最关键的部分,能运行的内容 配置文件:为了让程序运行,在内部提供接口,通过配置文件保留 库文件:二次开发,需要调用别人的库 帮助文件: 程序包管理器: x文件:程序的组成文件打包成一个或有限几个文件 安装: 卸载: 查询:
查看bash类型:echo $SHELL 用户界面 远程连接:ssh协议 secure shell 查看系统是否监听于tcp协议的22号端口 有个22,就表示ssh处于运行状态 ~]#ss -tnl 查看系统ip ~]#ifconfig 确保防火墙处于关闭状态 ~]#iptables -L -n 查看防火墙,如果有,清掉。iptables -F ~]#iptables -F centos7 执行systemctl disable firewalled.service systemctl stop firewalled.service centos6 执行service iptables stop chkconfig iptables off
多任务,多用户 接口程序叫进程 1物理终端,控制台:consle 2虚拟终端:默认启动6个、 ctrl+alt+F[1-6] 在哪个虚拟终端启动,及就在哪个虚拟终端上 3串型终端 4伪终端
一切皆文件:硬件设备也通过文件表示; 物理终端:/dev/console 虚拟终端:/dev/tty#[1,6] 串型终端;/dev/ttyS# 伪终端:/dev/pts/#
注意:在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互; 查看终端设备:tty 查看shell类型:echo $SHELL
CLI接口: 命令行接口: [root@dasdf ~ ]# 命令 prompt(命令提示符) root当前登录用户
dasdf主机名,非完整格式主机名
~:用户当前所在的目录(current directory),也称为工作目录(working directory);相对路径 #:命令提示符 #:管理员账号,为root用户,拥有最高权限,执行所有操作 $:普通用户,非root用户,不能执行系统管理类操作 注意:建议使用非管理员账号登录 执行管理操作临时切换至管理员,操作完成后及退回
1、tty:查看当前终端设备
2、ifconfig:查看活动接口的ip地址
3、 echo:回显 1,回显字符 2,如果是变量,则显示变量值,叫变量引用
4、 ping:探测网络的目标主机与当前主机之间的联通性 ctrl+c 1,终止命令执行 2,命令取消
5、 关机命令: centos 7 ~]# systemctl poweroff 重启reboot
stallman : 自由含义:自由学习和修改;自由使用;自由分发;自由创建衍生版;
linux的哲学思想: 1、一切皆文件: 把几乎所有资源统统抽象为文件形式:包括硬件设备、通信接口 open(),read(),write(),close(),delete(),create() 2、由众多功能单一的程序组成:一个程序只做一件事,并且做好; 组合小程序完成复杂任务; 3、尽量避免跟用户交互: 目标:易于以编程的方式实现自动化任务; 4、使用文本文件保存配置信息;
思考:文件是什么?众多文件如何有效组织起来? 目录:路径映射; 文件:有边界的在磁盘上的,存储空间存储的一段流式数据,对文件可以做到按名存取 文件系统:划分成层级,层级方式管理文件机制。在文件系统下,靠目录来找 /dev/pts/2 最左侧的/表示根目录,其他/表示路径分隔符 linux的路径分隔符是/ window的是\ 层级结构;有索引; /:原初起点; 第二层结构: 第三层结构: 倒置树状结构;
文件的路径表示: 绝对路径:从根开始表示出的路径 相对路径:从当前位置开始表示出的路径
文件名使用法则: 严格区分字符大小写:file1,File1,FILE1; 目录也是文件,在同一路径下,两个文件名不能同名; 支持使用除/以外的任意字符; 最长不能超过255个字符;
用户有家目录:home, 用户的起始目录:普通用户管理文件的位置 工作目录:
/etc/sysconfig/network-scripts/ificfg-eno1212313 basename(机名):最右侧的文件或目录名; dirname(目录名):basename左侧的路径 命令: ~]# basename /PATH/TO/SOMEFILE SOMEFILE ~]#dirname /PATH/TO/SOMEFILE /PATH/TO
根目录和家目录的区别: 管理员权限下:/是根目录,家目录在根目录下面,空敲cd只是回到文件的家目录
普通用户登录:/是根目录,家目录与根目录是分开的,空敲cd只是回到文件的家目录
回顾: 开源协定: GPL,LGPL,BSD,Apache
BSD: 1、如果二次发布的产品中包含源代码,则在用开源代码的作者或组织,以及原来的代码中必须带有原来的代码中的BSD协定; 2、如果二次发布产品是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的BSD协定; 3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广; 代码的共产主义运动; linux文件系统,文件,目录: 倒置树状结构: 目录:路径 文件:存储在磁盘中 文件名:严格区分字符大小写;路径分隔符/ 路径: 绝对路径 相对路径
程序的组成部分:二进制程序文件、库文件、配置文件、帮助文件 前两者是二进制格式,后两者通常是文本格式 二进制、库文件:可执行文件,库文件不能独立执行,只能被调用时执行 配置文件、帮助文件:用查看工具打开,可被查看其内容的文件
人机交互界面:交互式接口 GUI CLI [login@hostname workdir]#命令
linux基础知识 命令的语法统一格式: #COMMAND(命令) OPTIONS(选项) ARGUMENTS(参数)
COMMAND :(命令) 发起一个命令(进程):请求内核将某个二进制程序运行为一个进程; 程序--> 进程 静态(永远不会删除)--> 动态(有生命周期,运行完会自动退出) 命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件; 多数程序文件都存放在:/bin, /sbin,/usr/bin,/usr/sbin,/usr/local/sbin 普通命令:/bin, /usr/bin/,/usr/local/bin 管理命令:/sbin,/usr/sbin/,/usr/local/sbin 共享库:二进制文件(不能单独启动运行) usr/local/lib,/usr/local/lib64 64bits的库:/lib64,/usr/lib64,/usr/local/lib64 注意:并非所有的命令都有一个在某目录与之对应的可执行程序文件 命令必须遵循特定格式规范:exe,msi(windows),ELF(linux) file:用来查看文件的内容格式的类型 ~]# file /bin/ls 命令分为两类: 由shell程序的自带的命令:内置命令(builtin) 独立的可执行程序文件,文件名即命令名:外部命令 shell程序是独特的程序,负责解析用户提供的命令;词法分析,语法分析 环境变量: PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件: [root@localhost ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 查找次序:自左而右;
## 查看命令类型: type COMMENT
内部命令没有路径
OPTIONS:(选项) 指定命令的运行特征:
选项有两种表现形式; 短选项:-c,例如-l,-d 注意:有些命令的选项没有-; 同一命令同时使用多个短选项,多数可合并:-l -d=-ld 长选项:--word,例如--help,--human-readable 注意:长选项不能合并; 注意:有些选项可以带参数,此称为选项参数
ARGUMENT:(参数) 命令的作用对象:命令对什么生效;
注意:不同的命令的参数;有些命令可以带多个参数,多个之间以空白字符做分隔;
例如:ls -ld /etc /var
内部命令: help COMMAND 外部命令: (1)命令自带简要格式的使用帮助 # COMMAND --help (2)使用手册:manual 位置:ls /usr/share/man #man COMMAND SECTION: NAME:功能性说明 SYNOPSIS:命令使用语法格式 DESCRIPTION:描述 OPTIONS:选项 EXAMPLES:使用示例 AUTHOR:作者 BUGS:报告程序bug的方式 SEE ALSO:参考 。。 特别关注:SYNOPSIS: []:可选内容; <>:必须提供的内容 a|b:多选一; ...:同类内容可出现多个; 使用手册:压缩格式的文件,有章节之分; /usr/share/man man1,man2,.... 1:用户命令; 2:系统调用; 3:C库调用; 4:设备文件及特殊文件; 5:文件格式:(配置文件格式) 6:游戏使用帮助; 7:杂项; 8:管理工具及守护进行; ~]# man 数字 COMMAND 注意:并非每个COMMAND在所有章节下都有手册; 查看: ~]# whatis COMMAND 注意:其执行过程是查询数据库进行的; 手动更新数据库: ~]# makewhatis man命令打开手册以后的操作方法: 翻屏: 空格键:向文件尾部翻一屏 b:向文件首部翻一屏 ctrl+d:向文件尾部翻半屏; ctrl+u:向文件首部翻半屏; 回车键:向文件尾部翻一行; k:向文件首部翻一行; G:跳转至最后一行; #G:跳转至指定行; 1G:跳转至文件首部; 文本搜索:查找时,不区分大小写 /keywork:从文件首部向文件尾部依次查找; ?keywork:从文件尾部向文件首部依次查找; n:与查找命令方向相同; N:与查找命令方向相反; 退出: q:quit 选项: -M /PATH/TO/SOMEDIR:到指定目录下查找命令手册并打开之 练习:获取useradd命令的用法 (1)添加用户gentoo; useradd gentoo 验证id gentoo (2)添加用户slcakware,要求指定其所用的shell为/bin/tcsh useradd -s /bin/tcsh slackware 验证tail -l(数字1) /etc/passwd (3)info COMMAND 获取命令的在线文档; (4)很多应用程序会自带帮助文档:/usr/shate/doc/APP-VERSION README:程序的相关的信息; INSTALL:安装帮助; CHANGES:程序发展过程中随版本更新时的改动信息。 (5)主流发行版官方文档 http://www.redhat.com/doc (6)程序官方的文档: 官方站点上的“Document” (7)搜索引擎 google keyword filetype:pdf keyword site:domain.tld
linux文件系统: 1、文件名名称严格区分字符大小写; 2、文件可以使用除/以外的任意字符; 3、文件名长度不能超过255个字符; 4、.开头的文件为隐藏文件; .:当前目录 ..:当前目录的上一级目录 /etc/sysconfig/ .:syscongif ..:etc 工作目录:working directory 家目录:home 常用跟文件系统相关的命令 pwd:printing working directory 显示工作目录 cd:changing directory 切换目录 cd [/PATH/TO/SOMEDIR] cd:切换回家目录; 注意:bash中,~表示家目录; cd ~:切换回自己的家目录 cd ~SUERNAME:切换至指定用户的家目录; (非常有用) cd -:在上一次所在目录与当前目录之间来回切换 cd ..上一级目录 cd../var/log 上一级目录的/ver/log下,相对目录的标准边上 cd ./var 当前目录下进到var目录 $PWD:当前工作目录 $OLDPWD:上一次的工作目录 ls:list,列出指定目录下的内容 ls [OPTION]... [FILE]... -a:显示文件,包括隐藏文件 -A:显示除.和..之外的所有文件 -l:--long,长格式列表,即显示文件的详细属性信息 -rw-r--r-- 1 root root 17395 Jul 26 07:47 boot.log -:文件类型,-,d,b,c,l,s,p rw-r--r-- rw-:文件属主的权限 r--:文件属组的权限; r--:其他用户(非属主、属组)的权限 1:数字文件被硬链接的次数; root:属主,文件的所有者 root:文件的属组 17395:数字表示 文件的大小,单位是字节; Jul 26 07:47:文件最近一次被修改的时间 boot.log:文件名 -h,--hunman-readable:对文件大小单位换算;换算后的结果非精确 -d:ld结合起来使用,查看目录自身属性,而非其内部的文件列表 -r:reverse,逆序显示; -R:recursive,递归显示; cat:concatenate 连接文件显示在标准输出上 文本查看工具 file 查看 cat /etc/fstab cat /etc/passwd cat [OPTION]...[FILE].. -n:给显示的文本行编号; -E:显示行结束符$; tac:cat一样,每一行逆序显示 文件文本查看工具 file 查看 tac /etc/fstab tac /etc/passwd tac [OPTION]...[FILE].. -n:给显示的文本行编号; -E:显示行结束符$; file:查看文件内容类型; file [FILE].. echo:回显 echo [SHORT-OPTION]... [STRING]... -n:不进行换行; -e:让转义符生效; \n:换行 \t:制表符 \v \b STRING可以使用引号,单引号和双引号 单引号:强引用,比较傻,变量引用不会执行替换; 双引号:在中间,变量引用会被替换 注意:变量引用的正确符号 ${NAME} 关机或重启命令: shutdown [OPTIONS...] [TIME] [WALL...] OPTIONS: -h:halt -r:reboot -c:cancel TIME: now hh:mm +m +0 WALL 日期相关的命令: linux:系统启动时从硬件读取日期和时间信息;读取完成以后,就不再与硬件相关联; 系统时钟 硬件时钟 date :系统时钟 显示日期时间:[OPTION]... [+FORMAT] 设定日期时间:[MMDDhhmm[[CC]YY][.ss] hwclock,clock:硬件时钟 显示或设定硬件时钟 -s :--hctosys 以硬件为准,把系统调整为与硬件时间相同 -w : --systohc 以系统为准,把硬件调整为与系统时间相同 cal:日历 cal [[month] year]
标签:interface 应用程序 源代码 linux 编译器
原文地址:http://11541229.blog.51cto.com/11531229/1831872