Linux操作系统 规划、系统调用、基本命令
整体规划
整个linux学习的过程中需要经历的阶段:
-
熟悉使用Linux命令行
-
使用Linux进行程序设计
-
了解Linux内核机制
-
阅读Linux内核代码
-
实验定制Linux组件
-
生产实践
-
电脑基本组成以及基本运行流程:
CPU、主板、显卡、网卡、硬盘、鼠标、键盘、显示器
-
鼠标、键盘作为输入设备,输入设备驱动处理输入,当有输入时,对于操作系统而言,输入设备会发送中断,输入就被称为中断事件
-
显卡控制显示器,显卡有显卡驱动,也就是输出设备驱动
-
例如鼠标双击,设备驱动程序就会调用准备好的中断处理函数,操作系统层就会知道要做的事情
-
硬盘:物理设备,按照规定格式化成文件系统存放程序,管理统一文件系统的是文件管理子系统
-
操作系统拿到程序的二进制文件是静态的,叫做程序,但是运行起来的操作就是不断进行,称为进程
-
操作系统中,核心权限的资源和效率是一个问题,比如多个进程打印文件的打印操作就是放入内核中,进程不能随便操作,但是操作系统会开放系统调用
-
任何程序需要通过系统调用创建进程才能运行,创建进程过后就可以按照程序执行,但是如果进程多了,就需要进行调度执行,在操作系统中,进程的运行需要分配CPU执行,为了管理进程,就有了进程管理子系统
-
在操作系统中,不同的进程拥有不同的内存空间,由内存管理子系统管理
-
-
基
基本命令
文件的各部分代表的意思
-
第一段第一个字母代表文件的类型,d目录,-普通文件,以及其他的
-
第一个字段剩下的 9 个字符是模式,其实就是权限位,三个一组,每一组rwx代表读、写、执行,三组分别代表文件所属的用户权限、文件所属的组的权限、其他用户的权限
-
第二个字段:硬链接的数目
-
第三个字段是所属的用户,第四个是所属的组
-
第五个字段文件的大小,第六个是日期 最后文件名
ll drwxr-xr-x 6 root root 4096 0ct 20 2017 apt -rw-r--r-- 1 root root 211 0ct 20 2017 hosts
-
Windows下可执行文件就是exe
-
Linux 有rpm、deb,有两种包的原因是Linux现在常用的有两个体系Centos(使用rpm)、Ubuntu(deb)
-
查看ip window ipconfig,Linux ifconfig 、ip addr
-
例如安装jdk,就可以使用rpm -i jdk-XXX_linux-x64_bin.rpm dpkg -i jdk-XXX_linux-x64_bin.deb ,i代表install,使用rpm -qa dpkg -l查看安装的软件列表,-q查询,a 所有,-l列表,实际运行就会发现列出来的太多太多,就可以使用搜索工具grep,例如rpm -qa |grep jdk ,不知道关键字rpm -qa | more rpm -qa | less
-
|代表管道:用于连接两个程序,rpm -qa的输入放入管道作为grep的输入,grep进行搜索,grep支持正则表达式 dpkg -l | grep jdk
-
删除采用rpm -e,e代表erase, dpkg -r,remove
-
Linux下的管家,CentOS下 yum,Ubuntu 下apt-get, 搜索关键词如jdk,yum search jdk apt-cache search jdk,搜索过后可以进行安装,yum install java-11-openjdk.x86——64, apt-get install openjdk-9-jdk,卸载采用yum erase java-11-openjdk.x86, apt-get purge openjdk-9-jdk
-
Linux下,我们可以配置软件下载的来源
-
CentOS,配置文件位于/etc/yum.repos.d/CentOS-Base.repo
-
Ubuntu,/etc/apt/sources.list
-
Linux中主执行文件在/usr/bin 或者/usr/sbin。其他库文件在/var,配置文件在/etc
-
Linux下.tar.gz是常用的压缩模式,windows常用的是zip
-
安装也可以直接下载二进制文件,Linux下的下载 wget +连接,解压缩采用tar,解压缩过后配置环境变量
-
Linux下判断文件是否可执行不是通过后缀名,而是根据文件的权限
-
Linux程序的后台运行采用nohup,意思就是no hang up,但是程序不能霸占交互命令行,&表示后台运行,对于程序中的输出,在后台运行的情况下输出在命令行也是不恰当的,因此要输入到文件中,为此命令形式大概为:nohup command >out.file 2>&1 &:“1”表示文件描述符1,表示标准输出,“2”表示文件描述符2,是标准错误输出,2>&1表示标准输出和错误输出合并到out.file中
-
Linux后台运行的命令的关闭,如果知道某个关键字,如下ps -ef |grep 关键字 |awk '{print $2}'|xargs kill -9 ps -ef:列出所有正在运行的程序 awk工具是一个很灵活的文本处理工具,awk '{print $2}':指第二列的内容是运行的程序ID,通过xargs 传递给kill -9
-
程序的第三种运行方式就是服务,例如mysql
-
Ubuntu中,可以通过apt-get install mysql-server 安装mysql,然后通过systemctl start mysql 启动,systemctl enable mysql 设置开机自启,能称为服务并且开机自启是因为在/lib/systemd/system目录下创建xxx.service的配置文件
-
CentOS中,同样的会生成配置文件
-
-
shutdown -h now(或者一个时间过后),reboot
-
-
系统调用
进程创建
进行系统调用的指令是fork,Linux中创建新的进程需要老的进程调用fork实现,老的叫做父进程,对应的是子进程,Linux中,当父进程调用fork创建进程的时候,子进程将各个子系统为父进程创建的数据结构都copy了一份,在执行中,对于fork系统的返回值,如果进程是子进程,返回0,如果是父进程则继续执行之前的程序,子进程请求另一个系统调用execve来执行另一个程序,父进程可以通过系统调用waitpid,以子进程的进程号为参数就能得到执行成功与否
内存管理
操作系统中,每个进程拥有自己的内存,拥有自己的进程内存空间,内存空间存放的东西有
-
代码段:存放需要执行的代码
-
数据段:进程运行中产生数据的部分,其中局部变量会得到及时的销毁;动态分配、较长存放的在堆中
但是对于有限的内存空间,每个进程只有在使用才调用内存管理系统登记,但是这还不是真正对应到了,当真的写入数据时,才触发中断分配内存
在堆里面分配内存的系统调用brk、mmap:当分配的内存数量较小时,brk,会和原来的堆数据连载一起,否则,mmap,重新划分一块区域
文件管理
文件操作的六个系统调用
-
对于已经有的文件,open打开,colse关闭
-
create创建文件
-
文件打开后,lseek跳动光标位置
-
对文件进行读写,read。write
在Linux中,一切皆文件
-
启动一个进程,需要一个程序文件,这是个二进制文件
-
启动的时候还在配置文件,例如yml、properties,这是文本文件
-
如果把日志打印到交互台上,这其实也是文件,标准输出stdout文件
-
进程的输出可以作为另一个进程的输入,称为管道,管道也是文件
-
进程通过网络和其他进程通信,建立Socket属于文件
-
进程访问外部设备,设备属于文件
-
文件都被存储在文件夹
-
进程运行中,想看进程运行情况 /proc中有回应的进程号,也是一系列文件
Linux中,每一个文件都会分配文件描述符,通过它就可以使用系统调用,一个大的文件分割成小格子保存,因此文件中有一个索引节点
信号处理
经常遇到的信号:
-
Ctrl + C:中断信号,正在执行的命令中止退出
-
非法访问内存
-
硬件故障
-
用户进程通过KILL函数,将用户信号发送给另一个进程
进程间通信
-
消息队列:消息队列在内核中,通过msgget创建队列,msgsnd发送消息到队列,msgrcv获取消息
-
共享内存:shmget创建共享内存快,shmat将共享内存映射到自己的内存空间,但是为了避免竞争会引入信号量机制
网络通信
不同机器的通信需要遵循相同的网络协议,TCP/IP网络协议栈,Linux内核中对网络协议栈的实现如何暴露
网络服务通过套接字Socket提供服务,通过Socket系统调用创建Socket,Socket也是文件,有文件描述符,也可以通过读写函数进行通信
Glibc
Glibc时Linux下使用的开源的标准库C库,除了提供丰富的api,除了字符串处理、数学运算等用户态服务,更加重要的是封装了操作系统提供的服务