操作系统概述

讲讲操作系统
那些古老的操作系统
更适合工作和娱乐的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#

  1. # ifconfig -a //显示所有网卡设备信息
  2. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 10.206.0.15 netmask 255.255.240.0 broadcast 10.206.15.255
  4. inet6 fe80::5054:ff:fe8c:8cf1 prefixlen 64 scopeid 0x20<link>
  5. ether 52:54:00:8c:8c:f1 txqueuelen 1000 (Ethernet)
  6. RX packets 21132 bytes 1911127 (1.8 MiB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 20279 bytes 2340709 (2.2 MiB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  11. inet 127.0.0.1 netmask 255.0.0.0
  12. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  13. loop txqueuelen 1000 (Local Loopback)
  14. RX packets 39 bytes 2781 (2.7 KiB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 39 bytes 2781 (2.7 KiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  • route 检测路由配置

    1. # route -n // 以数字方式显示路由的相关信息
    2. Kernel IP routing table
    3. Destination Gateway Genmask Flags Metric Ref Use Iface
    4. 0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth0
    5. 10.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
    6. 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
  • ping 检测网络连通性

  • netstat 查看网络状态

    1. # netstat -rn // 显示内核路由表, 数字格式
    2. Kernel IP routing table
    3. Destination Gateway Genmask Flags MSS Window irtt Iface
    4. 0.0.0.0 10.206.0.1 0.0.0.0 UG 0 0 0 eth0
    5. 10.206.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
    6. 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时间、内存)的实体
  • 线程。是操作系统能够进行运算调度的最小单位
  • 协程。是一种用户态的轻量级线程,无法利用多核资源。

6765e36cc4604fba897976638af03524.jpeg

  • 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 dae

    kill -9 PID

UID :程序被该 UID 所拥有 PID :就是这个程序的 ID PPID :则是其上级父程序的ID C :CPU使用的资源百分比 STIME :系统启动时间 TTY :登入者的终端机位置 TIME :使用掉的CPU时间。 CMD :所下达的是什么指令

  1. grep全称是Global Regular Expression Print,表示全局正则表达式版本
  2. - killpkill 命令及使用注意事项
  3. - 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

  1. <a name="7Ja0v"></a>
  2. #### Linux免密远程登录
  3. 免密登陆的原理(A需要免密登录机器B)<br />
  4. 1. 在机器A上生成一对公私钥
  5. 2. A将公钥拷贝给B,在B中重命名为authorized_keys(放在当前用户目录下的.ssh目录下)
  6. 3. A向B发送一个登录链接请求
  7. 4. B得到A的登录请求信息后,在authorized_keys中查找,如果有相应的用户名和IP,则随机生成一个字符串string_text,并且使用A的公钥加密,随后发送给A
  8. 5. A接收到B发送过来的消息后,使用自己的私钥解密,然后将解密后的字符串发送给B
  9. 6. B接收到A解密后的字符串,检查是否与string_text一致,如果一致则允许免密登录
  10. 配置免密登陆的步骤<br />1、生成秘钥对<br />2、上传配置公钥<br />3、配置本地私钥<br />4、免密登陆功能的本地配置文件
  11. 1、生成秘钥对<br />ssh-keygen -t rsa -C "你自己的名字" -f "你自己的名字_rsa"<br />2、上传配置公钥
  12. - 上传公钥到服务器对应账号的home路径下的.ssh/中 ( ssh-copy-id -i "公钥文件名" 用户名@服务器ip或域名 )
  13. - 配置公钥文件访问权限为 600
  14. 3、配置本地私钥
  15. - 把第一步生成的私钥复制到你的home目录下的.ssh/ 路径下
  16. - 配置你的私钥文件访问权限为 600
  17. - chmod 600 你的私钥文件名
  18. 4、免密登陆功能的本地配置文件
  19. - 编辑自己home目录的.ssh/ 路径下的config文件
  20. - 配置config文件的访问权限为 644
  21. <a name="idfFJ"></a>
  22. ### 进程管理实践:pm2 源码分析
  23. 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
  24. ```json
  25. // worker
  26. var http = require('http');
  27. http.createServer(function(req, res) {
  28. res.writeHead(200);
  29. res.end("hello world\n");
  30. }).listen(8000);

manager.js

  1. // master
  2. var cluster = require('cluster');
  3. var numCPUs = require('os').cpus().length;
  4. if (cluster.isMaster) {
  5. console.log(numCPUs);
  6. for (var i = 0; i < numCPUs; i++) {
  7. var worker = cluster.fork();
  8. }
  9. } else {
  10. require("./app.js");
  11. }

🔚2020-4-28