Linux基础(课内版)05(20210714、15笔记)
进程
控制作业
在后台运行作业
<命令> &
sleep 1000 & #在后台运行 sleep 作业
jobs #查看当前会话的作业信息,-l 可以选项查看进程 ID
注:“+”代表默认作业;同时区分作业号和进程 ID
[作业号] PID
作业的前后台切换
fg <作业号> #切换后台作业至前台
Ctrl + z #切换前台作业至后台,同时进入 stopped 状态
开启及终止作业
bg <作业号> #开启后台 stopped 的进程
Ctrl + c #终止进程
中断进程
kill命令
kill可将指定的信息送至程序,根据PID编号向进程发送信号。
预设的信息为 SIGTERM(15),可将指定程序终止。
若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。
kill -l #可以查看 kill 命令可以向进程发送的信号,允许使用数字、单词、单 词简写执行命令。
kill -9 #“杀死”进程,相对于 SIGTERM 而言,不“友好”
kill -18 #继续停止的进程
kill -19 #停止进程
killall #批量杀死进程,例 killall -19 sleep
应用:查看有问题的服务(ps aux | grep 关键字),无则启动/有则暂停/杀死对应服务,看看有无问题(kill -19/-9 PID),再重新启动
pkill命令(批量)
pkill 可以根据一个或多个条件,向进程发送信号
条件
命令——命令名称
UID——某一用户的进程 -U
GID——某一用户组的进程 -G
父级——特定父进程的子进程 -P
终端——特定终端的进程 -t
注意:停止的进程被终止后,不会马上有影响,但是继续进程的时候就会变成 “Terminated”。
pkill sleep #杀死所有 sleep 进程
**使用 pkill 命令杀死所有 pts/1 终端的进程 **
登录两个终端窗口,使用w,查看登录用户和运行进程。
TTY——登录的设备
pts/N——图形化界面或远程登录的维终端
ttyN——物理控制台或直接 的终端设备
JCPU——当前作业消耗的CPU资源
PCPU——前台进程的CPU占用情况
使用 pgrep 查看影响的进程,最终执行 pkill 命令。
监控进程活动
Linux 系统会感知系统的负载,并且简单的呈现出来——负载平均值
粗略地衡量待处理的系统资源请求数量
准备运行的进程数(R),以及等待磁盘或网络I/O完成的进程数(D)
uptime命令
uptime 命令可以显示当前时间、计算机启动时长、会话数、当前负载平均值等等。
top命令
系统进程的动态视图,以可配置的间隔持续刷新,也提供重新排列、排序和突出显示功能。
PID进程ID、USER用户名、VIRT虚拟内存、RES物理内存、S进程状态(D不可中断睡眠、R运行中或可运行、S睡眠中、T已停止或已跟踪、Z僵停)、TIME+是CPU时间、COMMAND进程命令名
lscpu:查看CPU情况
lscpu命令 帮助确定系统有多少CPU(有查看CPU数的项)
如果CPU的等待时间是负载的主要瓶颈,可以通过查看 CPU 的情况来计算近似的值。
单核双套接字系统:有两个 socket,每个 socket 一个单线程的 core,因此 linux 会将它是为两个 CPU 的系统。
使用负载平均数除以 CPU 数,如果小于1, 说明不饱和,如果超过1就说明过饱和。
这是负载全为是 CPU 等待,实际上还有 I/O 等待,因此一般稍大于1没有问题
控制服务和守护进程
识别自动启动的系统进程
systemed介绍
系统启动和服务器进程由 systemd 系统和服务管理器进行管理。
守护进程是在执行各种任务时后台等待或运行的进程(开机自动启动),名称多以字母“d”结尾。守护进程主要使用套接字与本地或远程客户端进行通信。
【要求root权限】
优点
并行化功能,更快的启动速度
按需启动守护进程,而不需要单独的服务
自动服务依赖关系管理(先A后B),可以防止长时间超时,例如在网络不可用时不启动网络服务
使用单元管理不同类型对象
服务单元 .services:代表系统服务,用于启动经常访问的守护进程,如 Web 服务器。
套接字单元 .socket,用于进程间的通信、网络通信等,可以延迟系统启动的服务或者启 动不常用的服务。
路径单元 .path,用于服务激活推迟到文件系统更改发生之后。
systemctl
用于管理 system 单元(不同Liunx版本不同命令名)
systemctl -t help #显示 systemd 的单元类型
systemctl stop [某服务] 关掉某些服务
systemctl status [某服务] 查看服务状态
systemctl start [某服务] 开启服务
systemctl enable [某服务] 让该服务开机自启
列出服务单元
systemctl list-units [–type=service (–all)] #查看所有 actice 状态的服务单元
一些安装单位启用的服务通过 list-units 无法显示,她只会显示加载到内存里面的单元, 如果要查看所有已安装的文件状态就要使用 list-unit-files。
某些服务启动才能令某些命令能够使用
UNIT:单元的名称
LOAD:systemd 是否正确解析了单元的配置并加载到内存中
ACTICE:单元的高级别激活状态,可以判断单元是否启动
SUB:低级别激活状态,指示了更详细的单元信息。
DECSRIPITIOM:单元的简短描述
① 使用 --all 选项可以列出所有单元,而不仅仅是 service 单元。
② 可以使用 "| less "以页的形式进行查看。
③ 使用 --state= 选项可以按照 LOAD、ACTIVE 等字段中的值进行筛选。
验证服务的状态
systemctl is-XXX <服务>
is-active:是否活动状态,active/inactive
is-enable:是否系统引导时启动,enabled/disabled
is-failed:是否启动失败,active/failed 表示正常或失败,unknown/inactive 表示单元被停止
控制系统服务
控制系统服务
控制运行中系统守护进程。
更改配置文件或者对服务进行其他更新后可能需要重新启动该服务。
可能需要停止不再使用的服务后,才能够删除相关的软件。
不常使用的服务可以在需要时由管理员手动启动停止。
systemctl [选项] <服务> #对某个服务执行某个操作
start——启动
stop——停止
status——查看服务状态
restart——重启服务(重新分配进程号)
reload— —重新加载服务(不会重新分配进程号)
reload-or-restart——首先重新加载
列出单元依赖项
单元依赖项:某项服务可能以其他服务作为依赖项的形式启动。
B依赖A,则先启动A才能启动B(上层带动下层);难以实现下层服务带动上层服务
systemctl list-dependencies <单元> #列出某个服务的依赖项
systemctl list-dependencies --reverse <单元> #列出某个服务的反依赖项
微服务器
一个大系统的每个功能放在每个微服务器,拆分提供服务——改动某一功能时只需运行一台服务器
访问量暴增时(电商购物节),对每台服务器做不同扩容
屏蔽/取消屏蔽服务
系统中不同的服务之间可能彼此冲突,例如不同虚拟化软件之间可能就会有这个问题。
屏蔽服务就可以防止系统启动或者管理员意外启动这个服务【解决服务冲突】。
设置屏蔽服务时,实际上是为这个服务创建一个指向 /dev/null 的配置目录,从而阻止它启动。
systemctl mask <单元> #屏蔽某项服务
systemctl umask <单元> #取消屏蔽某项服务
systemctl list-unit-files --type=service | grep <单元> #查看被屏蔽的服务
屏蔽服务≠禁用服务。
禁用服务指设置系统引导时不会启动,但是可以手动启动服务,或者由其他单元来启动,而屏蔽服务则不可以。
设置服务开机自启动
系统启动时,会通过 /usr/lib/system/system 目录中寻找文件,从而启动服务。
通过在该目录下创建一个符号链接即可将某个服务添加到开机自启动的服务清单中。
systemctl enable <单元> #设置服务开机自启动
systemctl disable <单元> #禁用服务开机自启动
服务是否开机启动,和服务当前状态(是否启动)没有关系。服务启动了与否是 start 和 stop。
配置和保护SSH
SSH远程访问
日常管理场景
管理数据中心服务器
访问云服务器的场景
远程故障排查
远程访问常用方式
telnet:明文传输的远程访问,不安全。某些企业甚至明令禁止使用 telnet。
ssh:也称 stelnet,是一种协议,提供加密的远程访问方式。
在 linux 中,ssh 协议由软件包 openssh 提供,而 ssh 服务就是 sshd.service。
SSH访问加密原理
三种访问方式: 密码 公钥-共享 私钥-密语
SSH密码认证/登录
密钥对(公钥-私钥)
SSH通信加密
主机密钥管理
密钥存放位置
/etc/ssh/ssh_known_hosts #由管理员预配置将公钥存储在这个文件中
~/.ssh/known_hosts #用户家目录下的默认存放路径
公钥存储格式为主机名、IP地址、公钥的加密算法、公钥的值。
设置密钥不匹配自动断开连接: 设置 /etc/ssh/ssh_config(全局)或者 ~/.ssh/config(用户)配置文件中的 StrictHostKeyChecking 参数为 yes(默认是ask),那么公钥不匹配的时候就会直接中断连接。
使用SSH访问远程命令行
使用SSH远程登录
ssh <主机/IP> #使用当前用户登录 ssh servera
ssh <特定用户名>@<主机/IP> #使用特定用户登录 ssh root@servera
ssh <用户>@<主机> <命令> 只在对方主机上运行命令,不需要登录到对方主机(适合简单命令)
使用 w 命令可以查看登录的用户以及登录的来源。
基于 SSH 密钥的身份验证,可以在不使用密码的情况下进行身份验证,降低密码暴露的风险。
配置过程
**1)生成一对密钥 **
**ssh-keygen **
静默创建的密钥为 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub,权限是600和644。
也可以使用 -f 选项,来自定义保存公钥和私钥的文件 ssh-keygen -f 123 #将公钥保存在123.pub中,私钥保存在123中
生成的过程中,需要设置加密私钥的密码(passphrase)(未设定则生成的私钥不受保护,则任何拥有私钥文件的人都可以使用它进行身份验证),后续将需要使用该密码来解密私钥。
**2)将公钥传递到服务器上 **
ssh-copy-id <hostname/IP>
默认传输本地保存的公钥~/.ssh/id_rsa.pub到服务器上,也就是将公钥写入远端的 ~/.ssh/authorized 文件中。可以使用-i选项指定本地的公钥。(写入的过程需要远端 的用户名和密码)
3)登录
公钥传输完成后,将可以直接使用 ssh 登录,默认使用~/.ssh/id_rsa作为解密的私钥,也可以使用 -i 选项指定私钥的路径。
4)配置 ssh-agent 实现真正的无密码登录(非交互式身份验证)(可选)
eval $(ssh-agent) #运行ssh-agent
ssh-add #设置私钥密码,默认私钥为 id_rsa,可以使用 -i 指定
自定义OpenSSH服务配置
OpenSSH 服务由一个名为 sshd 的守护进程提供,默认配置运行良好,但是可以做一些 更改以增强系统的安全性。
它的配置文件为 /etc/ssh/sshd_config。
禁止root用户使用ssh登录
所有 Linux 系统上都默认存在用户名为 root 的超级用户,因此潜在的攻击者只要猜测其密码或者使用穷举的方式破译密码,而不必猜测有效的密码账号组合就可以破解 root 用户具有不受限制的特权(破环大,跟踪难)
配置过程
在配置文件 /etc/ssh/sshd_config 设置禁止 root 用户登录:
PermitRootLogin yes =====> no #将 yes 改为 no
或设置仅允许 root 用户通过密钥的身份认证:
PermitRootLogin yes =====> without-password #将 yes 改为 without-password
重启 sshd 服务,使配置生效: systemctl restart sshd
(sudo再修改回配置文件;或者其他系统用户登录再su -)
禁止使用SSH进行密码身份验证
避免密码被暴力破解,如果设置了私钥密语,还可以进一步提高安全性
连接到远程服务器的shell访问更加便捷
配置过程: 在配置文件 /etc/ssh/sshd_config 设置禁止用户登录:
PassWordAuthentication yes =====> no #将 yes 改为 no
重启 sshd 服务,使配置生效:
systemctl restart sshd
(密钥登录回去启动;或图形界面回去改)
教材总结
练习题
恢复权限技巧
1、快照恢复(但可能因为快照时间比较早什么都没有了,所以要记得及时快照) 2、在图形界面登录修改权限【可靠】 3、rht-vmctl reset 虚拟机((红帽系统)这个也可以吗?没有检验过)
|