进程管理
ps查看进程
该命令来自procps-ng包
- ps aux 使用BSD(unix)标准格式显示进程
- a 显示所有前台进程
- x 显示所有后台进程
- u 显示进程由哪个用户产生
- -l 显示详细信息
- -e 显示所有进程
- -C命令 显示指定命令的状态
pstree查看进程树
pstree [选项]
- -p 显示进程PID
- -u 显示进程所属用户
lsof查看进程调用的文件
lsof [参数]
- -c 字符串 只列出以字符串开头的进程打开的文件
- -u 用户名 只列出某个用户所启动进程打开的文件
- -p pid 只列出某个PID进程打开的文件
top监控系统资源占用状态
top [参数]
- -d 秒数 指定每几秒更新系统状态,默认是3秒
显示当前系统的内存、CPU占用情况,显示状态下通过下列按键进行交互
- ?或h 显示交互帮助
- P 根据CPU占用率显示进程顺序,默认
- M 根据内存占用率显示进程顺序
- N 根据PID显示进程顺序
- q 退出top监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 51704 4948 3660 S 0.0 1.0 10:45.34 systemd
内容 | 说明 |
---|---|
15:40:11 | 系统当前时间 |
up 41 days,15:45 | 系统运行时间,已运行41天15小时45分 |
2 users | 当前登录用户数量 |
load average: 0.04, 0.05, 0.01 | 系统在1分钟、5分钟、15分钟前的平均负载,根据主机内核数量判断负荷情况,如 8核,超过8表明已超负荷运行 |
Tasks | Tasks后分别为 系统中的总进程数、正在运行的进程、睡眠进程、停止的进程、僵尸进程 |
%Cpu(s) | us为CPU被用户占用的比率,sy为系统占用比例,ni为修改过优先级的用户进程CPU占用比率,id为CPU空闲的比率,wa为等待输入、输出的进程占用CPU的比率,hi为硬中断请求服务占用CPU比率,si为软中断请求服务占用CPU比率,st为有虚拟机时,虚拟CPU等待实际CPU的时间百分比 |
Mem | 物理内存总大小、空闲内存大小、使用内存大小、正在缓冲的内存大小 |
Swap | 交换分区总大小、空闲部分、使用部分、有效大小 |
vmstat按指定次数监控系统资源
vmstat 刷新延迟 监听次数
输出进程数、内存状态、交换分区状况、硬盘输入输出状况、CPU状态
free查看内存信息
free [参数]
- -b 以字节单位显示内存大小
- -k 以KB单位显示内存大小(默认)
- -m 以MB单位显示内存大小
- -g 以GB单位显示内存大小
中止进程
系统信号
kill -l查询可用的进程信号(选项为L的小写字母非I)
Linux定义了64种信号,这些信号可由用户发起,也可由操作系统发起,信号在使用时可以使用其编号,也可以使用其名称,也可以是去除了SIG前缀的信号名,以下为部分信号的作用:
代号 | 名称 | 说明 |
---|---|---|
0 | 不发送有效信号,仅用来测试进程是否存在,以及用户是否有权限向该进程发送信号 | |
1 | SIGHUP | 挂起进程,常用于通知进程重新加载配置文件或重启 |
2 | SIGINT | 中断进程(可通过ctrl+C发起),常用于进程执行到一半中途停止,该信号可以被捕获 |
3 | SIGQUIT | 退出进程(可通过Ctrl+\发起),并保存进程当前的内存映像生成core文件,用于调试 |
4 | SIGILL | 非法指令,表示进程可能在试图执行一个不符合操作系统或CPU架构规范的指令 |
5 | SIGTRAP | 跟踪/断点陷阱,通常用于在设置断点进行调试时,将进程设为跟踪模式 |
6 | SIGABRT | 异常终止,表示进程发生了致命错误导致进程终止 |
7 | SIGBUS | 总线错误,表示进程尝试执行无效的内存访问(如:尝试写入只读内存) |
8 | SIGFPE | 浮点异常,表示进程执行了错误的浮点运算,如除以零或结果超出浮点数表示范围等 |
9 | SIGKILL | 强制终止进程,进程将被立即终止而不给予进程保存文件、写入日志等操作时间,该信号无法被捕获 |
10 | SIGUSR1 | 用户自定义信号1 |
11 | SIGSEGV | 段错误 |
12 | SIGUSR2 | 用户自定义信号2 |
13 | SIGPIPE | 写到已关闭的管道 |
14 | SIGALRM | 闹钟 |
15 | SIGTERM | 正常终止进程,kill命令的默认信号,进程将被允许进行保存文件等操作后正常退出,该信号可以被捕获 |
16 | SIGSTKFLT | 栈溢出 |
17 | SIGCHLD | 子进程结束 |
18 | SIGCONT | 继续停止的进程执行,即恢复通过信号19和20所暂停的进程执行 |
19 | SIGSTOP | 强制暂停进程,由系统层面发出,该信号无法被捕获 |
20 | SIGTSTP | 暂停进程(可通过Ctrl+Z发起)并放到后台,可以通过fg命令将其恢复到前台继续执行,或通过bg命令在后台继续执行,该信号可以被捕获 |
kill向进程发送信号
kill [-信号] [进程PID1,PID2…]
- 默认情况下,如果不指定信号,命令将发送SIGTERM(15)信号
- 信号可以使用代号形式,也可以使用信号名形式,也可以是去除了SIG前缀的信号名形式
- -s 信号:指定信号,该选项可以直接缩写为-信号形式,该选项完整形式为--signal 信号
- -l [信号]:默认查看所有信号,如果指定了信号则只输出该信号的信号名或信号代号
- 不同的PID值,kill命令有不同作用:
- 如果PID为正值,则将信号发送给该PID对应的进程
- PID为0,则信号会被发送给所有与当前shell或进程同属一个进程组的所有进程,这通常用于终止与当前进程或脚本有关的所有进程,而不仅仅是一个单一的进程
- PID为-1,则信号会被发送给所有当前用户有权限发送的进程。对于普通用户,信号会被发送给该用户有权控制的所有进程,对于root用户,这可能会影响系统的所有进程!,一次性关闭所有进程,应当谨慎使用
- PID为-1以外的负值,信号会被发送给所有进程组ID(PGID)=|PID|(绝对值)的进程组中的所有进程
killall命令
killall [参数][信号代号] [进程名] 根据进程名中止进程
- -i 询问是否杀死某进程
- -I 忽略进程名大小写
pkill命令
pkill [参数][信号代号] [进程名]
- -t 终端号 按终端号关闭用户的连接(踢出用户)
工作管理
将程序转入后台运行/暂停
在命令后添加 & ,可使该命令在后台执行,后台执行的任务如果有输出语句依旧会显示于屏幕上(STDOUT和STDERR的消息)
在命令运行时执行 Ctrl + Z 是将当前工作暂停后转入后台
jobs查看后台的工作
jobs [-l]
- -l 显示进程的PID和作业号
- -p 只显示进程PID
- -r 只显示运行中的进程
- -s 只显示停止的进程
[3]代表工作序号,“+”号代表最后一个放入后台的工作,“-”号代表倒数第二个放入后台的工作,恢复时默认使用出栈方式从最后一个放入后台的工作开始恢复
fg将后台暂停的工作恢复到前台执行
fg [%工作序号]
- %可省略,如果不添加工作序号,则默认从后放入的工作开始恢复
bg将后台暂停的工作恢复到后台执行
bg [%工作序号]
- %可省略,如果不添加工作序号,则默认从后放入的工作开始恢复
chroot指定新根目录并运行命令
chroot命令的作用是指定一个目录将其设置为虚拟的根目录,使后续命令在该虚拟根目录下执行。该命令通常用于创建一个受限的文件系统环境,使某些进程无法访问真实的系统文件。这个“根目录变更”行为类似于为进程设置一个“虚拟根目录”,这样进程就只能看到新根目录下的文件结构,从而增强系统的隔离和安全性,该命令可用于以下场景:
- 构建隔离环境:构建受限环境 (jail),限制用户或进程只能够访问特定目录下的资源,防止其对主系统产生影响
- 测试与开发:受限环境中测试软件或脚本,而不影响真实系统
- 运行旧版或兼容软件:创建一个虚拟环境来运行旧版软件或与当前操作系统不兼容的软件
- 系统修复:当系统因配置错误或损坏而无法启动时,可以使用 chroot 命令进入系统的根文件系统并进行修复操作
chroot [选项] 新的根目录 [命令]该命令需要root权限
- 如果未指定命令,则将启动一个新的shell(具体哪一个shell取决于SHELL环境变量或/bin/sh)
- 新目录中需要有shell或所执行命令的二进制文件,否则将报错command not found
- --userspec=用户名或ID[:组名或组ID]:以指定的用户身份,用户组身份执行命令
- --groups=组名或组ID:将该组作为命令进程的附加组
env在修改后的环境中运行命令
env [选项] [环境变量=值] [命令]
- 默认输出当前用户的所有环境变量,如果指定了环境变量赋值语句和命令,则该命令会在新的环境变量中执行
- -i 清除所有继承的环境变量,在一个干净环境中执行命令
- -u 变量名:删除指定的变量,再执行命令
- -C 文件名:在指定目录下运行命令,而不改变当前的工作目录
nohub退出终端时继续执行命令
当命令或脚本正在运行时,如果此时退出了当前用户或shell终端,那么这些从该终端启动的进程也会随之退出(shell终端会向它们发送SIGHUP信号)。如果希望这些进程在退出用户或shell后仍能继续运行,则需要用一个特殊的命令nohup来阻断所有发送给该进程的SIGHUP信号,这样命令或脚本在shell退出时会继续运行,其语法为:
我们使用的脚本和命令都是都和终端会话(pts/0)联系在一起的(可以通过ps命令查看该命令由哪个终端发起),退出终端时,如果存在被停止的进程或后台未执行完的进程,大部分终端会提醒还有后台任务正在进行。在使用nohub命令后,该命令会解除终端与进程的关联,进程也就不再同STDOUT和STDERR联系在一起。为了保存脚本或命令产生的输出,nohup命令会在当前路径下创建一个名为nohup.out的文件,并将STDOUT和STDERR的消息重定向到该文件中。如果当前路径下无法创建或写入nohup.out,则会尝试创建$HOME/nohup.out,如果这两个文件都无法创建,命令将不执行。也可以将其输出重定向到nohup.out以外的文件
timeout限制命令执行时间
如果命令在到达指定时间后仍在运行,则将其终止,防止命令或脚本长时间挂起或无限循环的进程持续占用系统资源
timeout [选项] 时间 命令
- 时间后缀可以为s(秒)、m(分钟)、h(小时)、d(天)
- -s 信号名或信号编号:超时后发送指定的信号,默认为SIGTERM
- --preserve-status 超时后返回被终止命令的退出状态码,而不是timeout命令的退出状态码
- --foreground 让目标命令在前台运行,即使timeout在后台调用
- -k 时间time:默认情况下,timeout命令会在到达指定时间后向命令发出SIGTERM信号或-s选项指定的信号,但这些信号可能会被捕获,或者由于需要保存数据进程会保留一段时间。-k选项可以给与一个额外的时间time,如果进程在收到第一个信号后的time时间,仍然没有关闭,则timeout命令会发送SSIGKILL信号(不可捕获)来强制关闭进程,time也可以使用s、m、h、d为后缀
调整谦让度
Linux是多任务操作系统,进程在调用系统资源和占用CPU时间有不同的优先级,称之为调度优先级(scheduling priority),调度优先级由系统内核负责分配,nice命令可以通过调整niceness的值,影响调度程序计算程序的调度优先级。但注意,niceness只是给调度器的建议,调度器可以自由选择是否忽略它,即nice命令只能一定程度影响调度器的优先级计算方式,不直接作用调度优先级。
默认情况下,普通进程的niceness值为0,为正常优先级,niceness的取值范围为-20(最高优先级)到+19(最低优先级),注意!值越小优先级越高,
nice指定调度优先级
通过nice命令可以查看当前进程的优先级,如果要指定命令或脚本的调度优先级,可以使用下述语法:
nice [选项] [命令]
- 默认给与的niceness值为10
- -n 值:给与指定的值,而不是默认的10
- 只有root用户才能将进程的优先级值设置为负值,即只有root用户能提高进程的优先级,但允许所有用户降低进程的优先级
renice修改调度优先级
如果要调整已运行命令的优先级,可以使用renice命令(需要通过进程PID修改):
renice -n 值 -p 进程PID
- 只能对属于该用户的进程执行renice
- 普通用户只能通过renice降低进程的优先级
- root用户可以通过renice来任意调整进程的优先级
stdbuf调整命令的I/O缓冲
stdbuf命令用于临时更改命令的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的缓冲模式,缓冲模式有三种:
- 行缓冲(line buffered):每一行数据写入或读取时刷新缓冲区(遇到换行符时刷新),适合用于交互式命令行工具
- 完全缓冲(fully buffered):缓冲区填满后再输出或输入,通常用于非交互式操作,提高性能
- 无缓冲(unbuffered):数据立即写入或读取,不经过缓冲
stdbuf适用于那些使用C标准库(glibc) I/O函数(如fread()和 fwrite())来处理标准输入、标准输出或标准错误的程序,如:cat、grep、sed、awk、cut、sort、head、tail、echo、printf、ls、read(作为 shell内置命令时,可能不生效,但作为外部命令时有效)、tee、tr、find、xargs、cut、wc,stdbuf无法处理那些直接使用系统调用(read()和write())作为I/O处理的函数,如:dd命令
stdbuf 选项 命令
- -i 模式:调整标准输入流的缓冲
- -o 模式:调整标准输出流的缓冲
- -e 模式:调整标准错误流的缓冲
- 模式可以取以下值:
- 0:无任何缓冲,此模式下数据会被立刻输出
- L:使用行缓冲模式,此模式下,输出数据会被合并,直到输出换行符,该选项对标准输入无效
- 值size:使用完全缓冲模式并指定缓冲区大小,size的值可以使用K、KB等单位
软件安装
Linux中的软件安装包一般分为两种:源码包和二进制包
源码包:一般是使用C语言编写但未经过编译的包,安装时需要编译,所以时间长且安装步骤多,容易报错,但方便程序员阅读和修改源码
二进制包:源码包经过编译后形成二进制包,安装简单,安装速度快,但依赖性强,需要安装其他环境。二进制包通常有两大主流的管理系统:
- RPM 包管理系统:即Red-Hat Package Manager(红帽软件包管理器),大多数 Linux 发行版默认的包管理方式,如 Fedora、CentOS、SuSE 操作系统。
- DPKG 包管理系统:为 “Debian” 专门开发的套件管理系统,主要应用在 Debian 和 Ubuntu 上
RPM包安装的默认路径为:
路径 | 文件 |
---|---|
/etc/ | 配置文件 |
/usr/bin/ | 可执行命令安装目录 |
/usr/lib/ | 程序使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man | 帮助文件保存位置 |
源码包安装路径自定义,一般安装在 /usr/local/软件名/路径下
源码包安装
由于未经过编译,源码包安装一般需要先安装gcc编译器。源码包的安装一般要经过
- 通过tar命令解压
- 进入解压缩的目录下
- 阅读INSTALL文件,INSTALL一般为安装说明
- 执行 ./configure设置安装在默认路径下,也可以使用 ./configure –prefix=/usr/local/路径自定义安装路径,执行完会根据配置项生成 Makefile 文件
- 执行make 命令进行编译。如果报错,除错后执行make clean删除编译产生的临时文件即可。
- 执行make install 命令进行安装
- 源码包的卸载只需删除安装目录即可,不会遗留任何垃圾文件。
RPM包安装
RPM包安装需要提前安装好软件的依赖环境
RPM包
RPM包全名类似于 httpd-2.2.3-29.el5.i386.rpm ,其命名规则为
- 包名
- 版本号,格式通常为“主版本号.次版本号.修正号”
- 发布次数,表示RPM包是第几次编译后发布的
- 适合的Liunx平台,如el5表示支持RHEL 5.x/CentOS 5.x下安装
- 适合的硬件平台,目前RPM支持的平台有:i386、i586、i686、sparc和alpha,noarch为支持所有硬件平台。
- 后缀名,.rpm是编译好的二进制包,可用rpm命令直接安装;.src.rpm表示是源码包,需要编译以后才能安装在安装软件时,有些命令后使用的是包的全名,有些命令使用的是包名,二者混用会导致软件无法安装rpm模块依赖查询网站: www.rpmfind.net
安装升级与卸载
- rpm -[i或U]vh 包全名 安装或升级软件
- -i 安装(install)
- -U 升级(upgrade)
- -v 显示详细信息(verbose)
- -h 显示进度(hash)
- - -nodeps 不检测依赖性(通常仅用于实验测试)
- rpm -e 包名 卸载软件
- - -nodeps 不检测依赖性
查询包信息
1. 查询是否安装了某个包
rpm -q 包名
- -q 查询(query)
2. 列出所有已经安装的rpm包
rpm -qa
- -a 所有(all)
3. 查询rpm包详细信息
rpm -qi 包名
- -i 查询信息(information)
- -p 添加-p查询未安装包的信息(package),对于未安装的包,包名应为完整包名
4. 查询包文件安装位置
rpm -ql 包名
- -l 列表(list)
- -p 未安装包的信息(package),包名应为完整包名
5. 查询某个系统文件属于哪个rpm包
rpm -qf 文件名
- -f 系统文件(file)
6. 查询rpm包的依赖环境
rpm -qR 包名
- -R 查询包的依赖(requires)
- -p 未安装包的依赖(package),包名应为完整包名
包校验
rpm -V 已经安装的包名
校验包中的文件是否正确,会返回包的验证信息
包文件提取
rpm2cpio 包全名 | cpio -idv 文件绝对路径
cpio:标准工具,用于创建档案文件和从档案文件中提取文件
rpm2cpio命令用于将rpm包转换为cpio格式
yum操作
yum是一个由RedHat社区开发,基于RPM包管理的Shell前端软件包管理器,被广泛用于Fedora、RedHat以及CentOS中。yum能自动从指定的服务器下载RPM包并且安装,并自动处理依赖性关系
配置网络yum源
网络yum源的配置文件路径为 /etc/yum.repos.d/CentOS-Base.repo ,配置信息类似于:
配置信息中各项配置解析:
- [base] 容器名称,放在[]中
- name 容器说明,自由写
- mirrorlist 镜像站点
- baseurl yum源服务器地址,默认为CentOS官方地址,国内可使用阿里云镜像地址
- enabled 该容器是否失效,enable=0为不生效,enable=1为生效但会略写。
- gpgcheck 为1则RPM的数字证书失效,0为不生效
- gpgkey 数字证书公钥文件保存位置
yum安装软件
yum命令中的包名不需要包的全名
查询包
yum list 列出所有可用的软件包
yum search 关键字 搜索服务器上所有和关键字相关的包
安装与升级
yum -y install 包名
- -y 对询问自动回答yes
升级、卸载
- yum -y update 包名
- yum -y remove 包名
yum安装软件包组
- yum grouplist 列出所有可用软件组
- yum groupinstall 软件组名 安装软件组
- yum groupremove 软件组名 卸载软件组
服务管理
通过源码包安装的程序,所有文件会统一放置于如 /usr/local/ 目录下,而通过RPM包安装的程序,不同文件会放在不同目录下,如:可执行命令文件放在 /usr/bin 目录下,配置文件放在 /etc目录下。通过RPM包安装的软件服务,可以通过脚本文件启动,也可以通过service或systemctl命令直接启动,当执行该命令时,Linux会默认前往/usr/bin 目录下寻找相关文件。而通过源码包安装的服务由于安装路径不同,就无法通过该命令直接启动,但也可以将启动命令文件生成链接放置在/usr/bin目录下,这样源码包安装的服务也可以通过该命令启动了。
卸载软件时,通过源码包安装的程序直接删除对应文件即可,而通过RPM包安装的软件,由于文件散列分布,因此需要rpm -e 命令来卸载。
服务查询
查询服务开机自启动状态
1. RPM包安装的应用服务
chkconfig --list
查询所有RPM包安装的应用服务启动状态,会标出int0-6哪个级别系统启动状态下,服务会自启动。通过管道符可以查询指定服务的启动状态,如: chkconfig | grep nginx查看nginx服务的启动状态,在Centos7以后,该命令只能查看应用服务自启动情况,不包括系统本地服务,查看本地服务可以使用systemctl list-unit-files命令,使用管道符可以只查看指定服务的启动状况。
2. 源码包安装的服务
查看安装位置下对应服务的配置文件,一般位于 /usr/local/路径下。
RPM服务管理
独立服务管理
常用文件路径
路径 | 说明 |
---|---|
/etc/init.d | 启动脚本位置 |
/etc/xinetd.d | 基于xinetd 服务的启动脚本 |
/etc/sysconfig | 初始化环境配置文件 |
/etc | 配置文件位置 |
/etc/xinetd.conf | xinetd 配置文件 |
/var/lib | 放置服务产生的数据 |
/var/log | 日志 |
独立服务命令
/etc/init.d/服务名 start/stop/status/restart
service/systemctl 服务名 start/stop/status/restart 红帽系列系统专属
独立服务自启动
- 将启动程序的命令写入 /etc/rc.d/rc.local文件中,系统启动后会自动执行该文件中的所有命令
- chkconfig 服务名 on/off 开启、关闭自启动,默认在2345运行级别下自启动
基于xinetd(超级守护进程)服务
xinetd负责管理系统中不频繁使用的服务,这些服务程序在有请求时才由xinetd服务负责启动运行,一旦完成服务请求服务程序结束运行,以减少对系统资源的占用。
基于 xinetd 的服务没有自己独立的启动脚本程序,需要依赖 xinetd 的启动脚本来启动。xinetd 本身是独立的服务,启动xinetd 服务的方法和启动独立服务的方法一致。
基于 xinetd 的服务只需修改 /etc/xinetd.d/服务名 文件下的 /disable为 no,然后重启xinetd 服务即可
源码包安装的服务管理
服务启动
源码包安装的服务一般通过绝对路径下的脚本启动,具体路径需查看安装说明INSTALL文件。
自启动
将启动程序的命令写入 /etc/rc.d/rc.local文件中,系统启动后会自动执行该文件中的所有命令
查看开机时服务启动顺序
Linux开机或关机时的服务启动/关闭顺序写于文件 /etc/rc.d/路径下的对应文件中, rc0-rc6 文件中分别书写有系统不同启动级别下服务启动顺序。如 rc3 中,S85nginx表示系统启动时,nginx将是第85个启动的服务,K15nginx表示系统关机时,nginx将是第15个关闭的服务。
alternatives工具
alternatives简介
alternatives工具常用于指定默认软件、默认配置,或者某一软件的默认版本。
如:在Linux中,yum等工具一般使用python2作为命令解释器,而一些较新的软件依赖较新版的python3。因此有时我们不得不同时安装python2和python3。如果使用 python3 作为默认的python版本,使用yum会抛出错误,这是因为使用了python3解析yum中python2的语法,同理,一些较新的软件也无法使用python2解析。此时,我们就需要使用alternatives来控制软件的默认版本。
alternatives的使用方法是:给定两个软件或多个软件的路径,然后将它们注册为一个组,为这个组建立一个软链接,之后调用软件将直接从这一软链接调用
alternatives命令
注册组
alternatives --install <link> <name> <path> <priority>
- --install 注册(新增)需要管理的命令/软件
- link:注册路径,会在该路径下生成一个软链,此后由该软链启动命令
- name:组名
- path:软件/命令的路径,将该路径下的命令加入alternatives管理组
- priority:权值,在自动模式下,权值越高,软件优先级越高
其他命令
- alternatives --config <name> 修改默认配置(将进入交互模式,并切换为手动模式)
- alternatives --set <name> <path> 修改默认配置(将切换为手动模式)
- alternatives --auto <name> 切换为自动模式
- alternatives --display <name> 显示对应组的配置信息(包括自动/手动模式,路径,权值)
- alternatives --remove <name> <path> 删除组中对应路径的软件
- alternatives --list 列出所有组的信息(组名、自动/手动模式、当前默认软件路径)
示例
1. 注册组
在/usr/bin目录下有python2.7与python3.7的启动命令,我们可以新建python组,将python2和python3的启动路径加入到该组中,并指定python3为默认版本,此后直接执行python命令将唤醒python3,而不用再指定明确的版本号,且将默认唤醒python3,该默认值是可以随时更改的
# alternatives --install /usr/bin/python python /usr/bin/python2.7 10
# alternatives --install /usr/bin/python python /usr/bin/python3.6 20
上述命令
- 将在 /usr/bin 目录下新建名为 python 的软链接,该软链接指向/etc/alternatives/python,该链接又指向/usr/bin/python3.6
- 修改默认值,修改的是/etc/alternatives/python的指向,即默认值为python2.7时,/etc/alternatives/python链接指向将修改为/usr/bin/python2.7
- python3.6的权值为20,python2.7的权值为10,自动模式下,alternatives将优先调用python3.6
- 生成链接名可以任意自定义,并且调用命令也将相应修改,如:调用命令将变为py:
alternatives --install /usr/bin/py ppyy /usr/bin/python3 10
py --version #同python3 --version命令
2. 修改默认值
alternatives --config python
Enter to keep the current selection[+], or type selection number:
+号为当前生效的版本,*为新增版本
3. 查看python组信息
alternatives --display python
4. 从组中删除python3.6版本
alternatives --remove python /usr/bin/python3.6
定时任务
at命令
at命令用于预设脚本或命令的运行时间,at命令的守护进程atd会以后台模式运行,检查作业队列来运行作业。大多数Linux发行版会在启动时运行此守护进程,atd守护进程会检查系统上的一个特殊目录(通常位于/var/spool/at)来获取用at命令提交的作业。默认情况下,atd守护进程会每60秒检查一下这个目录,并获取作业预定的运行时间。at命令的语法为:
at [选项] 时间
- 默认情况下,输入at+时间后,at命令会进入交互模式开始接收需要执行的命令,输入完毕后通过Ctrl+D完成输入
- 如果已经错过指定时间,则命令会在第二天的同一时间再执行
- -f 文件名:到指定时间执行该脚本
- -q 字母:指定队列字母
- -M 屏蔽脚本或命令的输出信息
at命令支持的时间格式很多,包括:
- 具体的精确时间,如:at 10:30、at 2pm、at 2024-06-21 15:00
- 相对时间,如:at now + 1 hour、at now + 2 days、at 3pm tomorrow、at 10:30am + 1 week
- 特定命名时间,如:at now(立即执行)、at noon(中午12:00)、at midnight(午夜12:00)、at teatime(下午茶时间4:00)、
- AM/PM指示符,如:at 10:15PM
- 标准日期格式(MMDDYY、MM/DD/YY或DD.MM.YY)
- 文本日期,比如Jul 4或Dec 25,加不加年份均可
在使用at命令时,该作业会被提交到作业队列(job queue)。作业队列会保存通过at命令提交的待处理的作业。针对不同优先级,存在26种不同的作业队列。作业队列通常用小写字母a-z和大写字母A-Z来指代,作业队列的字母排序越高,作业运行的优先级就越低(更高的nice值)。默认情况下,at的作业会被提交到a作业队列。如果想以更高优先级运行作业,可以用-q参数指定不同的队列字母。
当作业在Linux系统上运行时,作业中的输出将不显示到屏幕上。取而代之的是,Linux系统会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。任何发到STDOUT或STDERR的输出都会通过邮件系统发送给该用户,这需要Linux安装了sendmail应用程序。如果未安装该程序,或者不需要脚本输出信息,应当做好重定向工作,或使用-M选项屏蔽作业产生的输出信息。
查询at定时任务
atq 查询at命令设置的作业
该命令会返回了作业号、系统运行该作业的日期和时间及其所在的作业队列(字母)
删除at定时任务
atrm 作业号 删除指定的作业
普通用户只能删除自己提交的作业,无法删除其他用户的作业
crond服务
cron即计划任务,而crond则是一个常驻服务,在Linux中用于周期性执行某个任务,该服务的配置文件位于/etc/crontab
查看crond服务运行情况
ps aux | grep crond查看crond进程是否在运行,红帽系列的操作系统可使用service status crond或systemctl status crond(centos7+)
查看crond服务是否开机自启动
chkconfig --list | grep crond或systemctl list-unit-files | grep crond(centos7+)
设置crond定时任务
可通过修改/etc/crontab文件来设置定时任务,同路径下还有 cron.daily,cron.weekly等对应时间记录crond任务的文件。也可以通过命令来修改crontab文件,语法为:
crontab [参数]
- -e 编辑crontab定时任务
- -l 查询crontab定时任务
- -r 删除当前用户所有crontab任务
cron语法
编辑定时任务时会打开vi编辑器,编辑语法格式需遵循cron语法,基本格式为:***** 命令
- 第一个*表示一小时当中的第几分钟,范围为0-59
- 第二个*表示一天当中的第几个小时,范围为0-23
- 第三个*表示一个月当中的第几天,范围为1-31
- 第四个*表示一年当中的第几个月,范围为1-12
- 第五个*表示一周当中的星期几,范围为0-7(0和7都代表星期日)
特殊符号 | 含义 |
---|---|
* | 代表任何时间 |
, | 代表不连续的时间 |
- | 代表连续的时间范围 |
*/n | 代表隔多久执行一次 |
日志服务
rsyslog服务
Syslog(系统日志协议)是在一个IP网络中转发系统日志信息的标准,syslogd服务被广泛用于老版Unix/Linux系统中负责记录系统日志,RSyslog是syslog的多线程增强版,CentOS6以后系统默认使用Rsyslogd服务记录系统日志。
查询rsyslog服务是否在运行
可使用命令ps aux | grep rsyslogd查看rsyslog进程是否在运行,红帽系列可使用命令systemctl status rsyslog查看
查看rsyslog服务是否开机自启动
- chkconfig –list |grep rsyslog
- systemctl list-unit-files | grep rsyslog(centos7)
日志文件
系统日志默认保存在 /var/log 路径下,对应文件的作用:
文件 | 说明 |
---|---|
/var/log/cron | 定时任务相关日志 |
/var/log/cups | 打印系统的日志 |
/var/log/dmesg | 开机内核自检的信息,使用dmesg命令就是读取了该文件 |
/var/log/btmp | 错误登录日志,二进制文件,需通过lastb命令查看 |
/var/log/lastlog | 记录所有用户最后一次登录系统的日志,二进制文件,需通过lastlog命令查看 |
/var/log/mailog | 邮件日志 |
/var/log/message | 记录系统所有重要事件信息 |
/var/log/secure | 记录所有涉及用户账户和密码的信息,如:用户登录,添加用户,切换用户,sudo授权,修改密码等 |
/var/log/wtmp | 永久记录所有用户的登录、注销、系统启动、重启等信息,二进制文件,需使用last命令查看 |
/var/log/utmp | 记录当前登录的用户信息,并且随着用户注销、切换不断变化,使用w,who,users等命令查看 |
使用RPM包安装的服务也会默认把日志文件放在/vat/log/服务名 路径下,但其日志由自身服务管理,而不归rsyslogd服务管理
使用源码包安装服务的日志文件位于用户指定的安装路径下,一般位于 /usr/local路径下
rsyslog日志格式
日志文件通常由以下内容按顺序书写:
- 事件产生时间
- 服务器主机名
- 产生事件的服务名
- 事件的具体信息
rsyslog日志配置文件
该配置文件位于/etc/rsyslog.conf,配置文件决定了日志系统记录哪些级别的日志信息,文件的格式为 服务名[连接符]日志等级 日志记录位置
服务名
服务名称 | 说明 |
---|---|
auth | 安全和认证相关信息 |
authpriv | 安全和认证相关信息(私有信息) |
cron | 系统定时任务cront和At产生的日志 |
daemon | 守护进程相关的日志 |
ftp | ftp守护进程相关日志 |
kern | 内核产生的日志 |
local0-local7 | 为本地预留的服务项 |
lpr | 打印系统产生的日志 |
邮件日志 | |
news | 新闻服务器相关日志 |
syslog | rsyslog服务产生的日志 |
user | 用户等级类别产生的日志 |
uucp | uucp(数据传输协议)子系统的日志 |
连接符
连接符 | 说明 |
---|---|
. | 表示比后面所写等级高(包含该等级)的日志都记录下来 |
.= | 只记录指定等级的日志 |
.! | 除了该等级,其余等级都记录 |
日志等级
等级 | 说明 |
---|---|
* | 所有等级 |
none | 与*相反,不记录任何日志 |
debug | 调试信息 |
info | 通知信息,反馈系统状态 |
notice | 提醒信息,程序可能存在潜在错误,但不影响运行 |
warning | 警告信息,程序发现错误,暂且不影响运行 |
err | 错误信息,服务出错停止运行,需要修复 |
crit | 临界状态信息,服务宕机,且可能无法修复 |
alert | 警报信息,服务宕机,影响系统运行 |
emerg | 紧急信息,系统疼痛等级,系统濒临崩溃甚至已经崩溃 |
日志记录位置
日志记录位置可以是以下值:
- 路径,写于本机指定位置,如:/var/log/lastlog
- 系统设备,写于U盘或者通过打印机打印日志,如:/dev/lp0
- 转发到远程主机或日志服务器,如:@192.168.0.100:514
- 用户名,发送给指定用户,如:root
- 忽略或丢弃日志,如:~ ,直接丢弃
示例
以下示例来源于centos7系统默认配置
日志轮替
日志轮替用于用新日志覆盖旧日志,其配置文件位于/etc/logrotate.conf,需要相关功能只需在配置文件中添加对应参数就即可。
参数 | 说明 |
---|---|
daily/weekly/monthly | 日志轮替周期 |
rotate 数字 | 保留日志文件的个数,0为不备份 |
compress | 日志轮替时,对旧日志进行压缩 |
create 权限值 所有者 所属组 | 建立新日志,并指定日志文件的权限、所有者、所属组 |
mail address | 日志轮替时,日志内容发送到指定邮箱,如:mail 11@gmail.com |
missingok | 日志不存在时,忽略该日志的警告信息 |
notifempty | 如果日志文件为空,则不进行轮替 |
maxsize 大小 | 当日志文件到达指定大小,无论是否到轮替时间,都进行一次轮替,未到达指定大小但到达轮替周期,也进行轮替 |
minsize 大小 | 到达轮替时间时,如果日志文件达到该最小值时就进行轮替,否则不进行轮替 |
size 大小 | 时间周期设置无效,只有当日志文件大于指定大小才进行轮替 |
dateext | 使用日期作为日志轮替文件名 |
配置文件内容
通过RPM包安装的服务其日志会被自动识别配置轮替,通过源码包安装的服务需要自行添加配置,配置格式同本地配置的基本格式。
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp – we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
本地配置格式(若某参数同时设置了本地配置和全局配置,则本地配置生效)
日志路径 {
配置参数
}
如:
/usr/local/apache/logs/access_log {
daily //每天进行日志轮替
create //日志轮替时新建日志,文件权限、所有者等信息默认
rotate 30 //保留30份日志文件(即保留30天)
}
手动进行日志轮替
logrotate [参数] 配置文件名
不添加任何参数时,将按配置文件进行轮替
- -v 显示日志轮替的过程
- -f 无论是否达到轮替配置要求,强制进行日志轮替
备份与恢复
备份
完全备份:即把所有需要备份的数据全部备份, 在Linux 中,完全备份指将根目录下的所有文件进行备份。
增量备份:指第一次进行完全备份,服务器运行一段时间后,比较当前数据和第一次备份数据之间的差异,只备份有差异的数据,之后的每次备份都只备份与上一次备份有差异的数据。
一般需备份的数据
- /root/ 管理员账户根目录
- /home/ 普通用户家目录
- /var/spool/mail 邮件
- /etc/ 重要服务的配置文件
- /var/log 常用服务的日志
- 数据库数据、账户资料….
dump文件备份系统
1. 安装dump
- yum -y install dump (redhalt系列)
- apt-get install dump (debian系列)
2. dump命令
dump [参数] 备份后文件名 原文件或目录
- -[0-9级别] 可选0-9备份级别
- -f 文件名 指定备份后的文件名
- -u 备份成功后,把备份时间、备份级别等信息记录在 /etc/dumpdates 文件中
- -v 显示备份过程中更多的输出信息
- -j 调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级为2
- -W 显示允许被 dump 的分区的备份等级及备份时间
3.备份操作
对于某个文件或不是分区的目录,dump只能使用 0 级别进行完全备份。而备份分区或整块硬盘时,dump 通过“备份级别”实现增量备份,其中,0 级别是完全备份,1-9为增量备份。
当我们备份数据时,第一次备份应该使用 0 级别,dump会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用 2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份,以此类推。
备份目录
备份分区
restore还原dump备份的文件
restore [模式选项] [-f 文件名]
-f用于指定备份文件文件名,模式选项有四个,只能选一个模式
- -C 比较模式,比较备份数据和现有数据的不同并返回(只能检测出数据修改或减少的部分,如果新增了数据不会被检测到)
- -i 交互模式,手动选择需要恢复的文件
- -t 查看模式,用于查看备份文件中拥有哪些文件和目录
- -r 还原模式,用于数据还原(如果是增量备份,则需先还原首次完全备份的数据)