操作系统概述
讲讲操作系统
那些古老的操作系统
更适合工作和娱乐的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 1500
inet 10.206.0.15 netmask 255.255.240.0 broadcast 10.206.15.255
inet6 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 0
TX packets 20279 bytes 2340709 (2.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::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 0
TX packets 39 bytes 2781 (2.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
route 检测路由配置
# route -n // 以数字方式显示路由的相关信息
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth0
10.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
ping 检测网络连通性
netstat 查看网络状态
# netstat -rn // 显示内核路由表, 数字格式
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth0
10.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
169.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的公钥加密,随后发送给A
5. A接收到B发送过来的消息后,使用自己的私钥解密,然后将解密后的字符串发送给B
6. 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或域名 )
- 配置公钥文件访问权限为 600
3、配置本地私钥
- 把第一步生成的私钥复制到你的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
// worker
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
manager.js
// master
var 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