操作系统概述
讲讲操作系统
那些古老的操作系统
更适合工作和娱乐的windows
适合开发的Linux
非常好用的macOS
ubuntu、CentOS、redhat、Fedora、Debian等哪个好?
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
操作系统的基本特征包括:并发、共享、虚拟和异步。其中,并发和共享是操作系统的两个最基本的特征。
远程登录Linux
Windows系统下
putty
Xshell
在Cmder终端环境下使用ssh命令
Linux和macOS系统下
ssh命令  ssh root@x.x.x.x
重要的常用Linux命令
行编辑器 vi/vim
服务管理命令 systemctl
网络管理命令 ifconfig、ip命令、router
命令行下载命令 curl、wget
怎样查看Linux命令的帮助
在终端下不小心 ctrl + s 了怎么办?
常用Linux终端快捷键
ctrl+c 结束正在运行的程序【ping、telnet等】
ctrl+d 结束输入或退出shell
ctrl+s 暂停屏幕输出
ctrl+q 恢复屏幕输出
ctrl+l 清屏,等同于Clear
ctrl+a/ctrl+e 快速移动光标到行首/行尾
Linux网络管理
- ifconfig 检测网络接口配置 (network interfaces configuring)
 
path: /etc/sysconfig/network-scripts/ifcfg-eth#
# ifconfig -a //显示所有网卡设备信息eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.206.0.15 netmask 255.255.240.0 broadcast 10.206.15.255inet6 fe80::5054:ff:fe8c:8cf1 prefixlen 64 scopeid 0x20<link>ether 52:54:00:8c:8c:f1 txqueuelen 1000 (Ethernet)RX packets 21132 bytes 1911127 (1.8 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 20279 bytes 2340709 (2.2 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 39 bytes 2781 (2.7 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 39 bytes 2781 (2.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
route 检测路由配置
# route -n // 以数字方式显示路由的相关信息Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth010.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
ping 检测网络连通性
netstat 查看网络状态
# netstat -rn // 显示内核路由表, 数字格式Kernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth010.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
lsof 查看指定IP 和/或 端口的进程的当前运行情况
- host/dig/nslookup 检测DNS解析
 - traceroute 检测到目的主机所经过的路由器
 - tcpdump 显示本机网络流量的状态
 - ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具
 - 图形界面nmtui、system-config-network-tui
 
进程、线程与协程
- 进程。目的就是担当分配系统资源(CPU时间、内存)的实体
 - 线程。是操作系统能够进行运算调度的最小单位
 - 协程。是一种用户态的轻量级线程,无法利用多核资源。
 

- CPU密集型,
 
应用的发展:多进程 -> 多线程 -> 事件驱动 -> 协程
- IO密集型
 
应用的发展: 多进程 -> 多线程
调度和切换的时间:进程 > 线程 > 协程
进程与线程
操作系统的设计,可以归结为三点:
1、以多进程形式,允许多个任务同时运行;
2、以多线程形式,允许单个任务分成不同的部分运行;
3、提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
进程与线程的资源共享
Linux进程管理相关命令
- top 用来监控系统实时负载率、进程的资源占用率及其它各项系统状态属性是否正常。
 - ps 是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。
```
ps aux
ps -ef |grep python
UID PID PPID C STIME TTY TIME CMD zzw 14124 13991 0 00:38 pts/0 00:00:00 grep —color=auto daekill -9 PID
 
UID :程序被该 UID 所拥有 PID :就是这个程序的 ID PPID :则是其上级父程序的ID C :CPU使用的资源百分比 STIME :系统启动时间 TTY :登入者的终端机位置 TIME :使用掉的CPU时间。 CMD :所下达的是什么指令
grep全称是Global Regular Expression Print,表示全局正则表达式版本- kill、pkill 命令及使用注意事项- w 命令用于显示目前登入系统的用户信息。
19:50:14 up 9:27, 4 users, load average: 0.31, 0.26, 0.18 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty7 :0 Thu12 31:39m 10:10 0.60s gnome-session root pts/0 :0.0 17:09 2:18m 15.26s 0.15s bash
<a name="7Ja0v"></a>#### Linux免密远程登录免密登陆的原理(A需要免密登录机器B)<br />1. 在机器A上生成一对公私钥2. A将公钥拷贝给B,在B中重命名为authorized_keys(放在当前用户目录下的.ssh目录下)3. A向B发送一个登录链接请求4. B得到A的登录请求信息后,在authorized_keys中查找,如果有相应的用户名和IP,则随机生成一个字符串string_text,并且使用A的公钥加密,随后发送给A5. A接收到B发送过来的消息后,使用自己的私钥解密,然后将解密后的字符串发送给B6. B接收到A解密后的字符串,检查是否与string_text一致,如果一致则允许免密登录配置免密登陆的步骤<br />1、生成秘钥对<br />2、上传配置公钥<br />3、配置本地私钥<br />4、免密登陆功能的本地配置文件1、生成秘钥对<br />ssh-keygen -t rsa -C "你自己的名字" -f "你自己的名字_rsa"<br />2、上传配置公钥- 上传公钥到服务器对应账号的home路径下的.ssh/中 ( ssh-copy-id -i "公钥文件名" 用户名@服务器ip或域名 )- 配置公钥文件访问权限为 6003、配置本地私钥- 把第一步生成的私钥复制到你的home目录下的.ssh/ 路径下- 配置你的私钥文件访问权限为 600- chmod 600 你的私钥文件名4、免密登陆功能的本地配置文件- 编辑自己home目录的.ssh/ 路径下的config文件- 配置config文件的访问权限为 644<a name="idfFJ"></a>### 进程管理实践:pm2 源码分析1、pm2 是什么<br />PM2 是 node 进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载<br />均衡等,而且使用非常简单。<br />2、pm2 官网<br />[https://pm2.io/](https://pm2.io/)<br />3、pm2 源码下载<br />[https://github.com/Unitech/pm2](https://github.com/Unitech/pm2)<br />4、我们要从 pm2 源码中学到些什么<br />Linux 进程管理的方法<br />Linux 创建进程的两种方式:fork 与 exec<br />父子进程的管理机制<br />app.js```json// workervar http = require('http');http.createServer(function(req, res) {res.writeHead(200);res.end("hello world\n");}).listen(8000);
manager.js
// mastervar cluster = require('cluster');var numCPUs = require('os').cpus().length;if (cluster.isMaster) {console.log(numCPUs);for (var i = 0; i < numCPUs; i++) {var worker = cluster.fork();}} else {require("./app.js");}
🔚2020-4-28
