Linux - 基础
Linux系统的常用命令和Linux系统了解程度考核
显示日期的指令:data
显示日历的指令:cal
数据同步写入磁盘:sync
惯用的关机指令:shutdown
重启,关机:rebote,halt,poweroff
切换执行等级:init
Linux共有七种执行等级:
--run level 0:关机
--run level 3:纯文本模式
--run level 5:含有图形接口模式
--run level 6:重新启动
使用init这个指令来切换各模式,也可使用shutdown -h now以及poweroff
改变文件所属群组:chgrp
改变文件的拥有者:chown
改变文件的权限:chmod
查看版本信息:
变换目录:cd
显示当前所在目录:pwd
建立新目录:mkdir
删除[空]目录:rmdir
档案与目录的显示:ls
复制档案和目录:cp
移除档案和目录:rm
取得路径的文件名与目录名:basename,dirname
由第一行开始显示文档内容:cat
从最后一行开始显示:tac
一页一页的显示档案内容:more
与more类似,但是比more更好的是,他可以往前翻页:less
只看头几行:head
只看尾几行:tail
寻找特定档案:where is、find
压缩文件和读取压缩文件:gzip,zcat bzip2,bzcat tar
tar是打包不是压缩,zip主流的压缩方式,
zip -r myfile.zip ./* # 将当前目录下的所有文件和文件夹压缩成myfile。zip文件,-r表示递归压缩目录下所有文件。
unzip -o -d /home/sunny myfile.zip # 把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny # 指明将文件解压缩到/home/sunny目录下
zip test.zip test.txt # 将test.zip 文件压缩为test.zip
unzip test.zip # 解压到当前目录
unzip test.zip -d /root/ # 解压到指定目录;
管道:是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制.其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息.由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”.
Linux系统有文本编辑界面和图形用户界面(GUI).其特征包括:多用户、多任务、多平台、可编程SHELL、提供源代码、仿真终端、支持多种文件系统及强大的网络功能等.
多用户:多个用户(六个)能同时从相同或不同的终端(终端号:tty1~tty6)上用同一个应用程序的副本进行工作.在控制台,切换终端的命令是:ALT+F1~F6;在仿真终端窗口(ps/0~n)是:SHIFT+ALT+F1~F6.
多任务:可同时执行多个程序,程序之间互不妨碍.与WINDOWS的多任务不同,Linux将系统没有用到的剩余物理内存全部用来做硬盘的高速缓存.笔者曾经打开三个xterm,分别用于查找文件、调试程序、发邮件.而且还可以指定某一个程序在后台运行,指定某一些程序在特定的时间内运行(at命令).
多平台:Linux能在X86平台上运行,也能移植到其他平台.
可编程SHELL:SHELL是解释并执行命令的系统外壳程序.通过编写SHELL程序,使得系统更加个性化;而且在一些程序中具有C语言的功能.
提供源代码:Linux是自由软件,源代码完全公开,可以自行编译内核,修改和扩充操作系统,进行二次开发.
Linux支持的文件系统很多,例如:EXT3、NFS、VFS、ISO9660、MSDOS等等.
网络功能:较全面的实现了TCP/IP、SLIP、PPP、PLIP协议,功能强大.
Linux是一个稳定的、功能强大的、值得使用的操作系统;
Linux开放源代码的开发模式,保证了任何系统的漏洞都能被及时发现和改正;
Linux的稳定性并不是一个意外的例外,稳定性是所有大型计算机操作系统所具有的共性。
Linux的稳定性是由于它没有像其它操作系统一样内核如此庞大、漏洞无穷。
优势:跨平台的硬件支持、丰富的软件支持、
多用户多任务:linux实现不同的用户共同登陆系统,并且资源分享比较公平。而不是像Windows那样的伪多用户操作系统,如果需要邓丽更多的用户,要么退出当前用户,要么向微软购买多用户授权。
可靠的安全性、良好的稳定性、完善的网络功能;
Linux目录结构
Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统
1、/- 根目录:
每一个文件和目录都从从这里开始。
只有root用户具有该目录下的写权限。此目录和/root目录不同,/root目录是root用户的主目录。
2、/bin– 用户二进制文件:
包含二进制可执行文件。
系统的所有用户使用的命令都设在这里,例如:ps,ls,ping,grep,cp等。
3、/sbin– 系统二进制文件:
就像/bin,/sbin同样也包含二进制可执行文件。
但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptable,reboot,fdisk,ifconfig,swapon命令。
4、/etc– 配置文件:
包含所有程序所需的配置文件。
也包含了用于启动/停止单个程序的启动和关闭shell脚本。例如:/etc/resolv.conf、/etc/logrotate.conf
5、/dev– 设备文件:
包含设备文件。
这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0
6、/proc– 进程信息
包含系统进程的相关信息。
这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。
这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime
7、/var– 变量文件
var代表变量文件,这个目录下可以找到内容可能增长的文件。
这包括 – 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);
8、/tmp– 临时文件
包含系统和用户创建的临时文件。
当系统重启时,这个目录下的文件都将被删除。
9、/usr– 用户程序
包含二进制文件、库文件、文档和二级程序源代码。
/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,在/usr/bin目录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的库。
/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apach2中。
10、/home– Home目录
所有用户用home目录来存储他们的个人档案。
例如:/home/join、/home/nikita
11、/boot– 引导加载程序文件
包含引导加载程序相关文件。
内核的initrd、vmlinux、grub文件位于/boot下。
例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic、vmlinuz-2.6.32-24-generic
12、/lib– 库
包含支持位于/bin和/sbin下的二进制文件的库文件,库文件名为 id*或lib*.so.*
例如:Id-2.11.1.so,libncurses.so.5.7
13./opt – 可选的附加应用程序
opt代表opitional;
包含从个别厂商的附加应用程序。
附加应用程序应该安装在/opt/或者/opt/的子目录下。
14、/mnt– 挂载目录
临时安装目录,系统管理员可以挂载文件系统。
15、/media– 可移动媒体设备
用于挂载可移动设备的临时目录。
举例来说,挂载CD-ROM的media/cdrom,挂载软盘驱动器的/media/floppy;
16、/srv– 服务数据
srv代表服务。
包含服务器特定服务相关的数据,例如,/srv/cvs包含cvs相关的数据。
Linux四个主要组成部分
1、shell(壳,壳状物):
linux shell是一个程序,有了它,用户就能通过键盘输入来操作计算机了。
面向命令行的用户界面被称为CLI(CommandLineinterface)。
l Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
l Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
l Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
Linux提供了像MicrosoftWindows那样的可视的命令输入界面--XWindow的图形用户界面(GUI)。它提供了很多窗口管理器,其操作就象Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。现在比较流行的窗口管理器是KDE和GNOME。每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。同Linux本身一样,Shell也有多种不同的版本。
1、 实用工具:
实用工具可分三类:
编辑器:用于编辑文件。
过滤器:用于接收数据并过滤数据。
交互程序:允许用户发送信息或接收来自其他用户的信息。
Linux的编辑器主要有:Ed、Ex、Vi和Emacs。Ed和Ex是行编辑器,Vi和Emacs是全屏幕编辑器。
Linux的过滤器(Filter)读取从用户文件或其他地方的输入,检查和处理数据,然后输出结果。从这个意义上说,它们过滤了经过它们的数据。Linux有不同类型的过滤器,一些过滤器用行编辑命令输出一个被编辑的文件。另外一些过滤器是按模式寻找文件并以这种模式输出部分数据。还有一些执行字处理操作,检测一个文件中的格式,输出一个格式化的文件。过滤器的输入可以是一个文件,也可以是用户从键盘键入的数据,还可以是另一个过滤器的输出。过滤器可以相互连接,因此,一个过滤器的输出可能是另一个过滤器的输入。在有些情况下,用户可以编写自己的过滤器程序。
交互程序是用户与机器的信息接口。Linux是一个多用户系统,它必须和所有用户保持联系。信息可以由系统上的不同用户发送或接收。信息的发送有两种方式,一种方式是与其他用户一对一地链接进行对话,另一种是一个用户对多个用户同时链接进行通讯,即所谓广播式通讯。
3、文件系统:
l 使用Linux,用户可以设置目录和文件的权限,以便允许或拒绝其他人对其进行访问。Linux目录采用多级树形结构,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访问那里的文件。
l 文件结构的相互关联性使共享数据变得容易,几个用户可以访问同一个文件。Linux是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。
4、内核:
内核,Shell和文件结构一起形成了基本的操作系统结构。它们使得用户可以运行程序,管理文件以及使用系统。此外,Linux操作系统还有许多被称为实用工具的程序,辅助用户完成一些特定的任务。
Linux防火墙工具—iptables,它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,并且能在 低配置机器上很好地运行;
mplayer是linux下速度最快的多媒体播放器,占用系统资源较小,对于配置较低的机器来说很合适;
Linux常用命令
ls pwd cd touch rm mkdir tree cp mv cat more grep echo
1.如何查看剩余内存
在Linux下面,我们常用Top命令来查看系统进程,top也能显示系统内存,但我们常用的linux
下查看内存额的专用工具是free命令;
2.如何查看端口是否被占用
1、sudo netstat -anp |grep 端口号
普通用户加sudo,root用户不加
2、netstat -nultp(此处不用加端口号)
改命令是查看当前所有已经使用的端口情况;
3、netstat -anp |grep 82
查看82端口的使用情况;
3.如何查看一个程序的PID以及它的所有子进程
PID(Process Identifiler)进程控制符;
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二佛如PID。进程中止后PID被系统回收,可能会被分配给新运行的程序;
在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”
经典的命令行工具,如ps或top,都可以用来显示线程级别的信息,只是默认情况下它们显示进程级别的信息;
1、 利用进程名获取进程号(以syslog为例)
ps -ef|grep syslog|grep -v“grep”|awk’{print $2}’
2、 利用进程号查看该进程下的线程
ps -eLf|grep722|grep -v “grep”
grep的输出都会有grep自身这个程序在,用grep -v“grep”可以把这一行干掉,akw‘{print $2}’就是打印第二列数字;
ps -T -p 722
输出SPID即是线程号;
3、 利用top -H -p 722查看线程cpu利用率;
4、 pstree -p 722(树状图显示)
4.如何为一个目录下的所有文件添加权限
5.如果你对一个目录具有写权限,那么你是否具有对这个目录下的所有文件具有删除权限?
6.对Linux多路复用的理解
7.修改IP地址的方法
前途是光明的,道路是曲折的,这是人们常说的一句话,事实也的确如此,不经历风雨哪能见彩虹。前行的路必然不会一路平坦,但只要方向正确,只要还有毅力,还能坚持下去,就要继续前行。唯有这样才能创造属于自己的奇迹。
Linux命令大全(手册)
1.文件管理
ls - 显示指定工作目录下的内容及属性信息
mkdir - 创建目录
cp - 复制文件或目录
pwd - 显示文件路径
mv - 移动或改名文件
2.文档编辑
cat - 在终端设备上显示文件内容
echo - 输出字符串或提取Shell变量的值
rm - 移除文件或目录
tail - 查看文件尾部内容
rmdir - 删除空目录
3.系统管理
startx - 初始化X-windows
vmstat - 显示虚拟内存状态
rpm - RPM软件管理包
find - 查找和搜索文件
uname - 显示系统信息
4.磁盘管理
df - 显示磁盘空间使用情况
fdisk - 磁盘分区
hdparm - 显示与设定硬盘参数
lsblk - 查看系统的磁盘
vgextend - 扩展卷组
5.文件传输
tftp - 上传及下载文件
curl - 文件传输工具
fsck - 检查并修复Linux文件系统
ftpwho - 显示ftp会话信息
iprm - 删除打印队列中的打印任务
6.网络通信
ssh - 安全连接客户端
ping - 测试主机间网络连通性
netstat - 显示网络状态
ifconfig - 显示或设置网络设备
ss - 显示活动套接字信息
7.设备管理
mount - 文件系统挂载
MAKEDEV - 建立设备
setleds - 设定键盘上方三个LED的状态
lspci - 显示当前设备所有PCI总线信息
sensors - 检测服务器内部温度及电压
8.备份压缩
zipinfo - 查看压缩文件信息
gzip - 压缩和解压文件
unarj - 解压.arj文件
zip - 压缩文件
unzip - 解压缩zip文件
9.其它命令
hash - 显示与清楚命令运行时查询的哈希表
bc - 浮点运算
wait - 等待指令
rmmod - 删除模块
history - 显示与操纵历史命令
系统监控:
1.free - 显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存
2.ulimit - 显示系统资源限制的信息
3.top - 实时动态地查看系统的整体运行情况,是一个综合了多方信息检测系统性能和运行信息的实用工具
4.df -
5.ps - 查看进程统计信息
文件操作
1.tail - 查看文件的内容
2.ll -ah 查看文件情况
网络通信:
netstat - 用于监控进出网络的包和网络接口统计的命令行工具
重启网络 - service network restart
SELinux - Security-Enhanced Linux,功能类似防火墙,不过安全相对比较好
防火墙 -
系统管理:
uname - 查看内核版本
ip addr - 查看linux的ip地址++
操作系统
l 常见Linux命令;
l 进程/线程;
l 内存管理;
l 防火墙端口防护:指通过对防火墙的端口开关的设置,关闭一些非必需端口,达到一定安全防护目的行为。
计算机网络、分布式计算机系统
都具有通信和资源共享的功能,两者在计算机硬件连接、系统拓朴结构和通信控制等方面基本都是一样的。
分布式计算机系统:在分布式计算机操作系统支持下,进行分布式数据库处理的,也就是说各互联的计算机可以互相协调工作,共同完成一项任务,多台计算机上并行运行。且具有透明性,用户不知道数据、资源的具体位置,整个网络中所有计算机就像是一台计算机一样;而计算机网络却不具备这种功能,计算机网络系统中的各计算机通常是各自独立进行工作的。
简述多线程、多进程
进程:
1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立
2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制
线程:
1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源
2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃
应用:
IO密集的用多线程,在用户输入,sleep时候,可以切换到其他线程执行,减少等待的时间CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释?锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势
进程、线程与协程,并行与并发,异步与非阻塞等概念;
进程:是资源分配的最小单位;
² 调度由操作系统完成;
² 进程空间独立,数据安全性好,有专门的进程间通信方法
² 进程的创建和删除要比线程消耗更多的计算机资源
² 有独立的内存空间(上下文切换的时候需要保存栈、cpu寄存器、虚拟内存、以及打开的相关句柄等信息,开销大)
线程:是程序执行的最小单位(资源调度最小单位);
² 一个进程可以有多个线程,每个线程会共享父进程的资源(创建线程开销占用比进程小很多,可创建的数量也会很多)
² 线程的使用会给系统带来上下文切换的额外负担;
² 一个进程可以包含多个线程,线程共享进程的资源空间
协程:
² 调度完全由用户控制;
² 一个线程(进程)可以有多个协程;
² 每个线程(进程)循环按照指定的任务清单顺序完成不同的任务(当任务被堵塞时,执行下一个任务;当恢复时,再回来执行这个任务;任务间切换只需要保存任务的上下文,没有内核的开销,可以不加锁的访问全局变量)
² 协程需要保证是非堵塞的且没有相互依赖
² 写成基本上不能同步通讯,多采用异步的消息通讯,效率比较高;
协程,为何比线程还快;
高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。
协程能保留上一次调用的状态,管是进程还是线程,每次阻塞、切换都需要陷入系统调用,使用线程时需要非常小心地处理同步问题,二协程完全不存在这个问题。
协程与线程进行比较:
1)一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样Python中则能使用多核CPU。
2)线程进程都是同步机制,而协程则是异步
3)协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
进程与线程比较:线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1)地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,
而进程有自己独立的地址空间
2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3)线程是处理器调度的基本单位,但进程不是
4)二者均可并发执行
5)每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
² 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点;
² 多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
异步、非阻塞?
同步异步指的是在客户端
同步意味着客户端提出了一个请求以后,在回应之前只能等待
异步意味着客户端提出一个请求以后,还可以继续提其他请求,不管有无结果
阻塞非阻塞指的是服务器端
阻塞意味着服务器接受一个请求后,在返回结果以前不能接受其他请求
非阻塞意味着服务器接受一个请求后,尽管没有返回结果,还是可以继续接受其他请求
并发、并行?
并行是指同一时刻同时做多件事情,而并发是指同一时间间隔内做多件事情;
并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
并发的实质是一个物理CPU(也可以多个物理CPU)在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。并行性指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。
并行,是每个CPU运行一个程序。
多进程和多线程的区别;CPU密集型适合用什么;
多线程:在单个程序中同时运行多个线程完成不同额工作,称为多线程。线程共享内存空间;进程的内存是独立的,同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现,一个线程可以控制和操作同一进程里的其它线程;但是进程只能操作子进程;
优缺点:1、多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程。但是缺点是创建进程的代价非常大,因为操作系统要给每个进程分配固定的资源。2、多线程优点是小路较高一些,但是致命的缺点是任何一个线程崩溃都可能造成整个进程的崩溃,因为他们共享了进程的内存资源池。
*CPU密集型适合用多进程开发
CPU密集型、I/O密集型
CPU密集型(CPU-bound)
CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写 I/O (硬盘/内存),I/O在很短的时间内就可以完成,而CPU还有许多运算需要处理,CPU Loading很高.
在多重程序系统中,大部分时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound.例如一个计算圆周率至小数点一千位一下的程序,在执行的过程中绝大部分的时间用在三角函数和开根号的计算,便是属于CPU bound的程序.
CPU bound的程序一般而言CPU占有率相当高.这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽了等待I/O的时间.
I/O密集型(I/O bound)
IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,因此,系统运作,大部分情况是CPU在等I/O(磁盘/内存)的读/写操作,此时CPU Loading并不高.
I/O bound的程序一般在达到性能极限时,CPU占用率仍然较低.这可能是因为任务本身需要大量I/O操作,而pipeline做得不是很好,没有充分利用处理器能力.
CPU密集型 vs IO密集型
我们可以把任务分为计算机密集型和IO密集型.
计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力.这种计算密集型任务虽然也可以多任务完成,但是任务越多,花在任务切换的时间越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行数量应当等于CPU的核心数.
计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要.Python这样的脚本语言运行效率很低,完全不适合计算密集型任务.对于计算密集型任务,最好用C语言编写.
第二种任务的类型是IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU的内存和速度).对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度.常见的大部分任务都是IO密集型任务,比如Web应用.
IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率.对于IO密集型任务,最适合的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差.
总之,计算密集型程序适合C语言多线程,I/O密集型适合脚本语言开发的多线程.
进程管理工具(Supervisor)
Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
SSH
SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露.最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑.1995年,芬兰学者TatuYlonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置.
SSH之所以能够保证安全,原因在于它采用了公钥加密.整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户.(2)用户使用这个公钥,将登录密码加密后,发送回来.(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录.
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪.因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的.可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码.再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了.这种风险就是著名的"中间人攻击"(Man-in-the-middleattack).