学习周报-20221216

本文详细介绍CentOS服务管理、PAM配置、密码策略设置、文件传输方法及进程优先级调整等内容,帮助读者掌握Linux系统管理的核心技能。

一 centos6和centos7系统的服务启动与关闭

centos6centos7
启动服务service <服务名> startsystemctl start <服务名>
关闭服务service <服务名> stopsystemctl stop <服务名>
开机启动服务chkconfig <服务名> onsystemctl enable <服务名>
开机不启动服务chkconfig <服务名> offsystemctl disable <服务名>
重启服务service <服务名> restartsystemctl restart <服务名>

二 Linux下的/etc/pam.d/system-auth配置文件参数

首先打开配置文件/etc/pam.d/system-auth,我们会发现这个文件大致分成四列四部分内容。

[root@master ~]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

各列参数说明

1)第一列

其中第一列包括 auth、account、password、session四个模块。

参数释义
auth用来识别用户身份,比如提示用户输入密码,判断用户是否为root等
account检测账户是否允许访问。比如是否允许登录,是否达到最大用户数,root用户是否允许在这个终端登录等
password进行用户信息更新,一般指修改用户密码
session用来配置和管理用户会话,定义用户登陆前与退出后的操作

2)第二列

第二列包含 required requisite suffifient optinal 四个参数。

参数释义
required该模块失败后,也会执行完其余的模块,最后才会返回错误信息
requisite该模块必须success才能使认证继续进行,失败后直接返回错误信息,不执行后面的模块
sufficient如果失败则忽略;如果成功,并且之前的required模块没有发生故障,PAM会向应用程序返回通过的结果,不会再调用堆栈中其他模块
optional忽略结果,不管成功或者失败
include与处理结果无关,直接引用其他PAM模块的配置参数

3)第三列和第四列

具体使用的类以及参数设置。

常用类说明

1)密码过期,要求强制修改密码,且必须满足密码的复杂度。
此处使用 pam_cracklib.so 这个类。

password  required  pam_cracklib.so enforce_for_root retry=a ...

下面是我们常用的参数以及含义解释。

参数含义
enforce_for_root即使是root用户,也必须符合复杂度条件
retry=a提示a次用户密码错误输入
minlen=b密码长度不小于b个字符
ucredit=c至少有c个大写字母
lcredit=d至少有d个大写字母
dcredit=e至少有e个数字
ocredit=f至少有f个其他特殊字符
difok=g新密码中至少有g个字符和旧密码不同

上面的cdef数字是小于0的数字时,表示要求最少需要几个。
当cdef数字是大于0的数字时,表示要求最多有几个。
比如lcredit=-3,表示最少要有3个小写字母。
比如dcredit=2,表示最多只能有2个数字。

下面是其他一些常用的类以及对应的模块。

类可用的模块含义说明
pam_unix.soauth提示用户输入密码,并与/etc/shadow对比,匹配则返回0
pam_unix.soaccount检查用户账号信息,账号可用,返回0
pam_unix.sopassword修改用户的密码,并将其更新到/etc/shadow文件中
类可用的模块含义说明
pam_shells.soauth如果用户想登陆系统,它的shell必须是 /etc/shells文件中的shell
类可用的模块含义说明
pam_deny.soauth用于拒绝访问
pam_deny.soaccount用于拒绝访问
pam_deny.sopassword用于拒绝访问
类可用的模块含义说明
pam_permit.soauth模块任何时候都返回成功
pam_permit.soaccount模块任何时候都返回成功
pam_permit.sopassword模块任何时候都返回成功
类可用的模块含义说明
pam_securetty.soauth当用户以root登录时,登陆的tty 必须在 /etc/securetty 中
类可用的模块含义说明
pam_listfile.soauth访问应用程序的控制开关
pam_listfile.soaccount访问应用程序的控制开关
pam_listfile.sopassword访问应用程序的控制开关
pam_listfile.sosession访问应用程序的控制开关
类可用的模块含义说明
pam_limits.sosession定义使用系统资源的上限,包括root用户。可以通过 /etc/security/limits.conf 设置

三 Linux用户密码过期策略

一 相关文件

文件作用
/etc/passwd存放用户信息
/etc/shadow存放用户密码
/etc/group存放用户组信息
/etc/gshadow存放/etc/group的加密信息

首先解释 /etc/passwd 文件下的各列信息含义

[oldboy@master ~]$ sudo tail -5 /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oldboy:x:1000:1000:oldboy:/home/oldboy:/bin/bash
列数名称含义
1usernameUID到名称的一种映射
2password以前是存放密码的位置,现在存放在/etc/shadow
3UID用户ID,最基本的级别标识用户的编号
4GID用户主要组的ID编号
5GECOS任意文本,一般是用户的姓名
6/home/dir用户个人数据和配置文件的存放目录
7shell用户登录时运行的程序,一般提供命令提示符

其次是 /etc/shadow 文件中各列信息的含义。

[oldboy@master ~]$ sudo tail -5 /etc/shadow
[sudo] password for oldboy: 
avahi:!!:19323::::::
postfix:!!:19323::::::
ntp:!!:19323::::::
tcpdump:!!:19323::::::
oldboy:$6$pO.iG1Bl3a8RS/k5$DSHXmE7Klnsnn4ys7KVWolPAlCrgJi1rM/sAigFA.e4JurEdfpp65k6gsuyxMIj/aDXlUsmXcphCRAbeOUCqo0:19323:0:99999:7:::
列数名称含义
1name系统的有效账户名
2password已加密的密码;如果是感叹号,表示密码已经被锁定
3lastchange最近一次更改密码的日期,表示为距离1970年1月1日的天数
4minage可以更改密码前的最短天数,0则表示“无最短期限要求”
5maxage必须更改密码前的最多天数
6warning密码即将到期的警告期
7inactive账户在密码到期后保持活跃的天数,此时账户仍可登录和修改密码;天数过后,账户锁定
8expire账户到期日期,表示为距离1970年1月1日的天数
9blank空白字段,供未来使用

二 修改密码

passwd 用户名

三 设置密码过期策略

使用chage命令设置密码过期策略。

首先创建一个用户tom

[root@master ~]# useradd tom
[root@master ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom)

然后给用户添加密码为123456

[root@master ~]# passwd tom
Changing password for user tom.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

此时查看tom的密码过期策略

[root@master ~]# chage -l tom
Last password change                                    : Dec 12, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

首先设置tom在下一次登陆时,强制修改密码

[root@master ~]# chage -d 0 tom

接着设置用户将在180天后过期

[root@master ~]# date -d "+180 days"
Sat Jun 10 14:50:18 CST 2023
[root@master ~]# chage -E 2023-06-10 tom

再设置,包括tom在内的所有用户必须最多30天,要修改一次密码

[root@master ~]# cat /etc/login.defs|grep '^PASS_MAX'
PASS_MAX_DAYS   30

最后,突然反悔,希望仅设置tom用户最迟每10天修改一次密码
并将对tom用户的密码策略修改内容进行打印。

[root@master ~]# chage -M 10 tom
[root@master ~]# chage -l tom
Last password change                                    : password must be changed
Password expires                                        : password must be changed
Password inactive                                       : password must be changed
Account expires                                         : Jun 10, 2023
Minimum number of days between password change          : 0
Maximum number of days between password change          : 10
Number of days of warning before password expires       : 7

四 Linux中使用scp(复制)、sftp(复制)、rsync(同步)在系统间传输文件

一 环境准备

主机名master:10.0.0.10 文件传输方
主机名node1: 10.0.0.11 文件接收方

说明:
scp与sftp作为运行SSH服务的远程系统来回传输文件的安全方式,是将远程文件进行复制到另一个系统。在使用scp与sftp之前,需要能够完成ssh远程连接。
rsync命令则用来同步不同系统的文件。它与scp的区别在于,如果两个系统的文件或目录有差异,rsync只复制差异部分,而scp则复制全部内容。

二 scp使用

2.1 检查SSH服务

可以直接查看sshd的端口22是否被监听

[root@master .ssh]# netstat -lntup|grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6940/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      6940/sshd  

也可以使用systemctl命令检查sshd服务的启动状态

[root@master .ssh]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-12-10 00:03:13 CST; 3 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 6940 (sshd)
    Tasks: 1
   CGroup: /system.slice/sshd.service
           └─6940 /usr/sbin/sshd -D

2.2 传输文件

使用scp 本地文件 远程主机IP:文件路径格式来将本地文件复制到远端。
输入命令后,要求提供远程主机root账号的密码,正确输入密码后文件传输成功。

[root@master .ssh]# scp /etc/hosts 10.0.0.11:/tmp
The authenticity of host '10.0.0.11 (10.0.0.11)' can't be established.
ECDSA key fingerprint is SHA256:XcbgLkoJin+3R2uL/9R8sxuELxjYJOQOABBFodvwug0.
ECDSA key fingerprint is MD5:ee:69:ca:49:b0:6a:78:68:ea:15:3a:7d:d9:a3:a1:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.11' (ECDSA) to the list of known hosts.
root@10.0.0.11's password: 
hosts   

2.3 检查文件

此时我们检查10.0.0.11的主机,可以发现 /tmp 目录下的 /etc/hosts 文件。

[root@node1 ~]# ll /tmp/hosts 
-rw-r--r-- 1 root root 214 Dec 13 09:45 /tmp/hosts

2.4 参数说明

除了可以将本地文件复制到远端,也可以将远端的目录下面的文件拉取到本地。
这里涉及了两个常用的参数。

-r 递归的形式复制目录下的文件
-p 复制远程系统的文件时,不改变其文件属性

将远端的/server/scripts下的脚本拉取复制到本地/tmp目录下
首先清理不需要的文件。

[root@master ~]# cd /tmp/
[root@master tmp]# rm -rf *
[root@master tmp]# ll
total 0

其次,复制远端的脚本。

[root@master tmp]# scp -rp 10.0.0.11:/server/scripts/ /tmp/
root@10.0.0.11's password: 
ping.sh                                                                                       100%    1     0.5KB/s   00:00    
vim.sh                                                                                        100%  448   146.4KB/s   00:00   

输入密码后,会显示复制过来的文件。
然后进行检查确认。

[root@master tmp]# ll
total 0
drwxr-xr-x 2 root root 35 Dec 13 10:04 scripts
[root@master tmp]# tree
.
└── scripts
    ├── ping.sh
    └── vim.sh

1 directory, 2 files

由此可见,将远端的目录与目录下的文件一起复制了。

三 sftp使用

使用该命令,我们可以将远端文件下载到本地,也可以将本地文件上传到远端。

3.1 将文件上传至远端

命令后跟上远端的IP,就可以进入交互式界面。
进入到远端的tmp目录下,将本地刚刚获取的脚本放到远端的tmp目录下。
使用put,将本地文件复制到远端。

[root@master tmp]# sftp 10.0.0.11
root@10.0.0.11's password: 
Connected to 10.0.0.11.
sftp> cd /tmp/
sftp> put /tmp/scripts/ping.sh 
Uploading /tmp/scripts/ping.sh to /tmp/ping.sh
/tmp/scripts/ping.sh                                                                          100%    1     0.1KB/s   00:00  

3.2 将远端文件下载至本地

首先清理一下我们刚才获得的tmp目录下的脚本。

[root@master ~]# cd /tmp/
[root@master tmp]# ll
total 0
drwxr-xr-x 2 root root 35 Dec 13 10:04 scripts
[root@master tmp]# rm -rf *
[root@master tmp]# ll
total 0

然后进入交互式界面,进入远端的/server/scripts目录,获取脚本

[root@master tmp]# sftp 10.0.0.11
root@10.0.0.11's password: 
Connected to 10.0.0.11.
sftp> cd /server/scripts/
sftp> get vim.sh
Fetching /server/scripts/vim.sh to vim.sh
/server/scripts/vim.sh                                                                        100%  448   316.0KB/s   00:00    
sftp> ^D
[root@master tmp]# ll
total 4
-rw-r--r-- 1 root root 448 Dec 13 10:20 vim.sh

需要注意的是,上传和下载最后存放文件的位置,默认是我们交互式命令开始前,所在的目录下。因此想要上传文件,需要先进入某目录,然后put该文件;想要下载文件至某目录,必须先进入那个目录,然后开启交互式命令,再在远端get该文件。

四 rsync使用

首先清理之前的环境,确保文件可以完整的传输。

# 10.0.0.10
[root@master tmp]# rm -rf *
[root@master tmp]# ll
total 0

# 10.0.0.11
[root@node1 .ssh]# cd /tmp/
[root@node1 tmp]# ll
total 8
-rw-r--r-- 1 root root 214 Dec 13 09:45 hosts
-rw-r--r-- 1 root root   1 Dec 13 10:16 ping.sh
drwx------ 3 root root  17 Dec 13  2022 systemd-private-6e8f91e32c7e42eb98a65c2931c4842d-cups.service-eVdmK7
drwx------ 2 root root   6 Dec  9 23:04 vmware-root_6590-692621205
drwx------ 2 root root   6 Dec  9 17:06 vmware-root_6592-961069012
drwx------ 2 root root   6 Dec 13  2022 vmware-root_6631-1991582773
[root@node1 tmp]# rm -rf *
[root@node1 tmp]# ll
total 0

4.1 检查命令

首先检查本地系统是否有该命令的软件包,能否使用命令。

[root@master tmp]# rpm -qa|grep rsync
rsync-3.1.2-4.el7.x86_64

# 如果没有rsync命令,则yum安装
[root@master tmp]# yum install -y rsync

4.2 传输文件

命令格式与scp类似,rsync 参数 本地目录或文件 远端IP:绝对路径

[root@master tmp]# rsync -avz /etc/hosts 10.0.0.11:/tmp
root@10.0.0.11's password: 
sending incremental file list
hosts

sent 172 bytes  received 35 bytes  59.14 bytes/sec
total size is 214  speedup is 1.03

4.3 检查结果

文件准确传输。

[root@node1 tmp]# ll
total 4
-rw-r--r-- 1 root root 214 Nov 28 14:00 hosts
[root@node1 tmp]# cat hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.10   master
10.0.0.11   node1
10.0.0.12   node2

4.4 传输目录

首先准备环境。
/tmp目录下创建两个文件。

[root@master tmp]# touch master1.sh master2.sh
[root@master tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 13 10:33 master1.sh
-rw-r--r-- 1 root root 0 Dec 13 10:33 master2.sh

然后先传输文件。

[root@master tmp]# rsync -avz /tmp/ 10.0.0.11:/tmp
root@10.0.0.11's password: 
sending incremental file list
./
master1.sh
master2.sh

sent 305 bytes  received 62 bytes  104.86 bytes/sec
total size is 0  speedup is 0.00

检查发现,远端收到了两个普通文件。

[root@master tmp]# rsync -avz /tmp/ 10.0.0.11:/tmp
root@10.0.0.11's password: 
sending incremental file list
./
master1.sh
master2.sh

sent 305 bytes  received 62 bytes  104.86 bytes/sec
total size is 0  speedup is 0.00

然后再传输目录。

[root@master tmp]# rsync -avz /tmp 10.0.0.11:/tmp
root@10.0.0.11's password: 
sending incremental file list
tmp/
tmp/master1.sh
tmp/master2.sh
tmp/.ICE-unix/
tmp/.Test-unix/
tmp/.X11-unix/
tmp/.XIM-unix/
tmp/.font-unix/

sent 329 bytes  received 78 bytes  116.29 bytes/sec
total size is 0  speedup is 0.00

这次输出的信息好像有点多,然后检查一下远端10.0.0.11的结果。

[root@node1 tmp]# ll
total 4
-rw-r--r-- 1 root root 214 Nov 28 14:00 hosts
-rw-r--r-- 1 root root   0 Dec 13 10:33 master1.sh
-rw-r--r-- 1 root root   0 Dec 13 10:33 master2.sh
drwxrwxrwt 7 root root 129 Dec 13 10:33 tmp

不难发现,这次准确的将目录以及下面的文件都同步了过来。

所以,需要注意的是,如果源目录(被传输的目录)后面有 / ,例如/tmp/,那么将只传输目录/tmp下面的文件;如果源目录(被传输的目录)后面没有 / ,例如/tmp,那么将传输整个目录/tmp及下面的文件。

4.5 常用参数说明

参数-a是一个存档参数,包括下面参数的功能之和。

参数作用
-r以递归方式同步整个目录树
-l同步软连接
-p保留权限
-t保留时间戳
-g保留属组权限
-o保留文件所有者
-D同步设备文件

参数-v ,在文件同步时会输出详细的添加信息。
参数-z,在文件传输时进行压缩提高效率。

此处需要注意的是,参数-a不会同步高级文件的权限。
要开启ACL同步,需要再添加-A参数;
要将源文件的SELINUX同步到目标文件,需要添加-X参数。

此外,上文的举例说明是将本地文件同步到远端,也可以将远端文件同步到本地,只需要参数位置换即可。

五 http 常见状态码

一 状态码

状态码是客户端向服务器发送请求的时候,描述返回的请求结果的参数,借助 Http 状态码,可以让用户知道这次请求是正常处理,还是出现了错误。

二 原因划分

不同状态码一般出错的原因可以由以下方式进行划分。

1xx  接收的请求正在处理
2xx  请求正常,处理完毕
3xx  重定向,要附加操作
4xx  客户端出错
5xx  服务端出错

三 具体含义

状态码作用
200成功返回网页
301永久重定向,请求的网页永久跳转到新的位置
302临时重定向,旧资源仍然可以访问
403服务端理解客户端的请求,但拒绝其访问,一般是权限不足
404服务端在指定位置找不到客户端请求的资源
500内部服务器错误,服务器设置或内部程序问题
501服务器不具备完成请求的功能
502坏的网关,代理向后端请求,后端不可用或没有完成请求,一般是代理的节点出现问题
503服务当前不可用,服务器超载或停机维护
504网关超时,代理请求后端,后端没有按时处理完请求,一般是服务器过载
505服务器不支持请求中所用的HTTP协议版本

六 sed命令常用方法

一 常用参数

参数作用
-r识别扩展正则符号
-n取消默认输出,只将进行操作修改的行的内容输出到屏幕
-i对文件内容进行真正的修改、删除等操作
-e根据命令的顺序多重编辑

二 搭建测试环境

[root@db01 scripts]# cat id.txt 
201,Alice,CFA
202,Book,FRM
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE

三 用法说明

3.1 显示输出信息

根据行号,显示某(几)行信息

##某单行信息
[root@db01 scripts]# sed -n '3p' id.txt 
203,Cindy,ACCA

##连续多行信息
[root@db01 scripts]# sed -n '3,5p' id.txt 
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE

##不连续的多行信息
[root@db01 scripts]# sed -n '3p;5p' id.txt 
203,Cindy,ACCA
205,Eric,HCIE

根据内容,显示某(几)行信息

[root@db01 scripts]# sed -n '/Ci/p' id.txt 
203,Cindy,ACCA
[root@db01 scripts]# sed -n '/Ci/,/ri/p' id.txt 
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE
[root@db01 scripts]# sed -n '/Ci/p;/ri/p' id.txt 
203,Cindy,ACCA
205,Eric,HCIE

3.2 添加信息

不修改文件,只在屏幕输出结果。

## 在第1行的上一行插入新数据
[root@db01 scripts]# sed '1i200,Kate,OFI' id.txt 
200,Kate,OFI
201,Alice,CFA
202,Book,FRM
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE

##在最后一行的下一行添加新数据
[root@db01 scripts]# sed '$a206,Frank,CEO' id.txt 
201,Alice,CFA
202,Book,FRM
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE
206,Frank,CEO

##也可以把上述2条命令合二为一,按照前后顺序,同时执行
[root@db01 scripts]# sed -e '1i200,Kate,OFI' -e '$a206,Frank,CEO' id.txt 
200,Kate,OFI
201,Alice,CFA
202,Book,FRM
203,Cindy,ACCA
204,David,CPA
205,Eric,HCIE
206,Frank,CEO

所以得出规律:
在第x行前面插入(insert),即为 xi
在第y行后面加入(add),即为 ya
1可以表示为第一行
$可以表示为最后一行
连续进行一次性多个操作用-e参数

3.3 删除信息

3.1中的所有p换成d,即可做到相同的(输出)删除操作
p-----print 打印,输出
d-----delete 删除

取消空行的显示(排除空行)
命令一:sed -n '/./p' id.txt
命令二:sed -n '/^$/d' id.txt
命令三:sed -n '/^$/!p' id.txt

3.4 修改信息

不修改文件,只在屏幕输出结果。
格式:sed 's#原有内容#修改后内容#g' 文件名,此处的#可以替换成/等特殊字符

后项引用前项格式:sed 's#(.*)#\1#g' 文件名。在这里,(.*)所匹配的就是\1的内容。

3.5 真正在文件中修改内容

3.23.33.4中所有的写入操作中加上-i参数,如下图所示。

sed -i 's#old#new#g' /tmp/test.txt

此时的添加内容、删除内容、修改内容就会在文件中真实执行,并且在屏幕将结果输出显示。

一般而言,对于重要文件的修改都会进行提前备份,在-i参数后面加上.bak即可同时将源文件进行先备份一份test.txt.bak,再对test.txt进行修改。

sed -i.bak 's#old#new#g' /tmp/test.txt

此外,一般在shell脚本中使用sed批量修改配置文件中,我们可能需要进行整行内容替换。
例如,某一行内容是这样的:

cat /etc/login.defs
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   30
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

此处需要将PASS_MAX_DAYS后面的数字换成50。
在替换过程中需要注意的是,PASS_MAX_DAYS在全文出现了两次,第一次出现在注释中,我们不能去改动,需要改的是第二个参数以及后面的内容。

经过观察可以发现,第二个参数是顶头出现的,我们要替换参数以及后面的东西,于是PASS_MAX_DAYS.*$就是s###g格式的第一个位置的内容,表示要替换参数以及后面的所有内容。
完整修改:sed -i.bak s#PASS_MAX_DAYS.*$#PASS_MAX_DAYS 50#g /etc/login.defs

但如果是这样的:

auth  PASS_MAX_DAYS   30   password

此处的参数前后都有内容,被夹在中间,则可以这么匹配。^.*PASS_MAX_DAYS.*$
完整修改:sed -i.bak s#^.*PASS_MAX_DAYS.*$#PASS_MAX_DAYS 50#g /etc/login.defs

四 补充说明

-n参数是在查看文件内容时使用,-i参数在真正修改文件时使用。
一般情况下,两个参数不会同时使用,也不能同时使用。
如果同时使用这两个参数,可能会使文件内容清空,是一个危险操作,请勿用错。

七 Linux进程优先级

一 定义描述

大部分情况下,计算机需要运行的进程数超过了计算机拥有CPU的核心数。
通过执行Linux内核的进程调度程序,使用时间片技术,操作系统在单个核心的不同进程之间快速切换,从而给用户一种多个进程并发处理的感受。

采用SCHED_NORMAL策略指定相对优先级,这个优先级称为进程的nice值。
这些nice值的区间范围是[-20,19],数值越小,优先级别越高。

项目描述
高nice级别容易将CPU资源让给其他进程
低nice级别尝试不让出所使用的CPU资源
root用户可重新调整其他用户进程的nice值
普通用户只能分配非负的nice值,且只能往大调

二 查看nice值

2.1 使用top命令交互式查看nice值

在这里插入图片描述
其中NI表示实际的nice值,区间范围:[-20,19]
PR 将nice值映射到更大的优先级队列,区间范围:[0.39]
映射关系是:NI + 20 = PR

2.2 使用ps命令查看nice值

在使用该命令时,我们会添加axo参数,指定pid、名称、nice值,并降序排列。

ps axo pid,comm,nice --sort=-nice

命令效果如下图:

在这里插入图片描述

2.3 查看程序调度策略

某些进程的nice值可能为 -,可能是不同的调度策略所致。
通过ps命令请求cls字段,可以显示不同的程序调动策略。

ps axo cls

如下图所示:

在这里插入图片描述
字段TS表示采用SCHED_NORMAL策略,其他内容则是用了不同的程序调动策略。

三 修改nice值

3.1 启动特定nice值的进程

启动进程时,它一般继承父进程的nice值。
所以从命令行启动进程时,它将和启动的shell进程具有相同的nice值。
大多数情况下,新进程启动时的nice值为0。

使用nice命令启动进程,不加其他选项,默认nice级别为10.

nice <命令>

如果想选择nice级别,可以加上-n参数。

要启动nice级别为13的查看文件命令进程。

nice -n 13 cat /etc/hosts

在这里需要注意的是,非特权用户只能把nice值设置为非负的,即[0,19]
只有root用户可以把nice值设置为[-20,-1]

3.2 更改现有进程的nice级别

更改现有进程的nice值,使用renice命令。

例如,监听服务sshd的端口,将这个命令的nice级别更改为15.

renice -n 15 $(netstat -lntup|grep sshd)
WITH alldata AS( SELECT JOB_NAME ,JOB_ID ,FAB_ID ,AREA_ID ,REAL_POINT_COUNT ,ppk_value ,report_date ,CASE WHEN area_id='C-测试' THEN '测试厂' WHEN job_name LIKE '%3.1%' OR job_name LIKE '%3.2%' THEN '制造三厂' WHEN job_name LIKE '%2.1%' OR job_name LIKE '%2.2%' THEN '制造二厂' ELSE '制造一厂' END AS factory ,CASE WHEN JOB_NAME LIKE '%AE%' THEN '车规' ELSE '非车规' END AS CAR_SPEC --,TO_CHAR(report_date , 'IW') AS iso_week_number ,TO_CHAR(report_date , 'YYYYMM') AS iso_month_number FROM REP_CPK_DETAIL_NONRT where REPORT_NAME IN ('成都封测质量关注周报-测试-周二','成都封测质量关注周报-测试-周六','成都封测质量关注周报-测试-周日','成都封测质量关注周报-测试-周三' ,'成都封测质量关注周报-测试-周四','成都封测质量关注周报-测试-周五','成都封测质量关注周报-测试-周一','成都封测质量关注周报-成型-周二' ,'成都封测质量关注周报-成型-周六','成都封测质量关注周报-成型-周日','成都封测质量关注周报-成型-周三','成都封测质量关注周报-成型-周四' ,'成都封测质量关注周报-成型-周五','成都封测质量关注周报-成型-周一','成都封测质量关注周报-电镀-周二','成都封测质量关注周报-电镀-周六' ,'成都封测质量关注周报-电镀-周日','成都封测质量关注周报-电镀-周三','成都封测质量关注周报-电镀-周四','成都封测质量关注周报-电镀-周五' ,'成都封测质量关注周报-电镀-周一','成都封测质量关注周报-划片-周二','成都封测质量关注周报-划片-周六','成都封测质量关注周报-划片-周日' ,'成都封测质量关注周报-划片-周三','成都封测质量关注周报-划片-周四','成都封测质量关注周报-划片-周五','成都封测质量关注周报-划片-周一' ,'成都封测质量关注周报-键合1-周二','成都封测质量关注周报-键合1-周六','成都封测质量关注周报-键合1-周日','成都封测质量关注周报-键合1-周三' ,'成都封测质量关注周报-键合1-周四','成都封测质量关注周报-键合1-周五','成都封测质量关注周报-键合1-周一','成都封测质量关注周报-键合2-周二' ,'成都封测质量关注周报-键合2-周六','成都封测质量关注周报-键合2-周日','成都封测质量关注周报-键合2-周三','成都封测质量关注周报-键合2-周四' ,'成都封测质量关注周报-键合2-周五','成都封测质量关注周报-键合2-周一','成都封测质量关注周报-键合3-周二','成都封测质量关注周报-键合3-周六' ,'成都封测质量关注周报-键合3-周日','成都封测质量关注周报-键合3-周三','成都封测质量关注周报-键合3-周四','成都封测质量关注周报-键合3-周五' ,'成都封测质量关注周报-键合3-周一','成都封测质量关注周报-键合4-周二','成都封测质量关注周报-键合4-周六','成都封测质量关注周报-键合4-周日' ,'成都封测质量关注周报-键合4-周三','成都封测质量关注周报-键合4-周四','成都封测质量关注周报-键合4-周五','成都封测质量关注周报-键合4-周一' ,'成都封测质量关注周报-键合5-周二','成都封测质量关注周报-键合5-周六','成都封测质量关注周报-键合5-周日','成都封测质量关注周报-键合5-周三' ,'成都封测质量关注周报-键合5-周四','成都封测质量关注周报-键合5-周五','成都封测质量关注周报-键合5-周一','成都封测质量关注周报-键合6-周二' ,'成都封测质量关注周报-键合6-周六','成都封测质量关注周报-键合6-周日','成都封测质量关注周报-键合6-周三','成都封测质量关注周报-键合6-周四' ,'成都封测质量关注周报-键合6-周五','成都封测质量关注周报-键合6-周一','成都封测质量关注周报-键合7-周二','成都封测质量关注周报-键合7-周六' ,'成都封测质量关注周报-键合7-周日','成都封测质量关注周报-键合7-周三','成都封测质量关注周报-键合7-周四','成都封测质量关注周报-键合7-周五' ,'成都封测质量关注周报-键合7-周一','成都封测质量关注周报-键合8-周二','成都封测质量关注周报-键合8-周六','成都封测质量关注周报-键合8-周日' ,'成都封测质量关注周报-键合8-周三','成都封测质量关注周报-键合8-周四','成都封测质量关注周报-键合8-周五','成都封测质量关注周报-键合8-周一' ,'成都封测质量关注周报-塑封-周二','成都封测质量关注周报-塑封-周六','成都封测质量关注周报-塑封-周日','成都封测质量关注周报-塑封-周三' ,'成都封测质量关注周报-塑封-周四','成都封测质量关注周报-塑封-周五','成都封测质量关注周报-塑封-周一','成都封测质量关注周报-装片1-周二' ,'成都封测质量关注周报-装片1-周六','成都封测质量关注周报-装片1-周日','成都封测质量关注周报-装片1-周三','成都封测质量关注周报-装片1-周四' ,'成都封测质量关注周报-装片1-周五','成都封测质量关注周报-装片1-周一','成都封测质量关注周报-装片2-周二','成都封测质量关注周报-装片2-周六' ,'成都封测质量关注周报-装片2-周日','成都封测质量关注周报-装片2-周三','成都封测质量关注周报-装片2-周四','成都封测质量关注周报-装片2-周五' ,'成都封测质量关注周报-装片2-周一','成都封测质量关注周报-装片3-周二','成都封测质量关注周报-装片3-周六','成都封测质量关注周报-装片3-周日' ,'成都封测质量关注周报-装片3-周三','成都封测质量关注周报-装片3-周四','成都封测质量关注周报-装片3-周五','成都封测质量关注周报-装片3-周一' ,'成都封测质量关注周报-装片4-周二','成都封测质量关注周报-装片4-周六','成都封测质量关注周报-装片4-周日','成都封测质量关注周报-装片4-周三' ,'成都封测质量关注周报-装片4-周四','成都封测质量关注周报-装片4-周五','成都封测质量关注周报-装片4-周一') AND JOB_ID NOT IN ('72054' ,'72055' ,'72065' ,'73425' ,'73426' ,'73427' ,'73428' ,'73522' ,'73953' ,'73954' ,'74134' ,'74135' ,'74538' ,'74539' ,'74544' ,'74545' ,'74546' ,'74547' ,'74576' ,'74577' ,'74578' ,'74579' ,'74653' ,'74654' ,'74788' ,'74789' ,'74818' ,'74929' ,'74940' ,'40057' ,'40061' ,'44993' ,'51741' ,'64872' ,'69099' ,'69102' ,'69105' ,'70360' ,'70364' ,'70368' ,'71543' ,'71814' ,'71819' ,'72010' ,'72656' ,'72657' ,'72658' ,'72662' ,'72663' ,'72668' ,'72672' ,'72677' ,'73237' ,'73272' ,'73277' ,'74099' ,'74104' ,'74107' ,'74108' ,'74112' ,'74508' ,'74588' ,'74684' ,'74734' ,'74752' ,'74756' ,'74917' ,'75185' ,'75204' ,'75206' ,'75596' ,'75772' ,'75773' ,'75774' ,'40054' ,'40058' ,'40059' ,'44990' ,'44991' ,'51739' ,'57129' ,'64869' ,'64870' ,'69096' ,'69097' ,'69100' ,'69103' ,'70358' ,'70361' ,'70362' ,'70365' ,'71541' ,'71811' ,'71812' ,'71816' ,'71817' ,'72654' ,'72655' ,'72660' ,'72661' ,'72665' ,'72666' ,'72669' ,'72670' ,'72673' ,'72674' ,'73234' ,'73270' ,'73271' ,'73274' ,'73275' ,'74101' ,'74102' ,'74105' ,'74109' ,'74110' ,'74518' ,'74519' ,'74585' ,'74681' ,'74682' ,'74731' ,'74732' ,'74749' ,'74750' ,'74753' ,'74754' ,'75182' ,'75183' ,'75202' ,'75203' ,'75593' ,'75770' ,'75771' ,'40056' ,'40060' ,'44992' ,'45806' ,'51740' ,'57130' ,'64871' ,'69098' ,'69101' ,'69104' ,'70359' ,'70363' ,'70366' ,'71542' ,'71815' ,'71818' ,'71848' ,'71872' ,'71892' ,'72305' ,'72308' ,'72659' ,'72664' ,'72667' ,'72671' ,'72676' ,'73235' ,'73273' ,'73276' ,'74103' ,'74106' ,'74111' ,'74124' ,'74507' ,'74586' ,'74683' ,'74733' ,'74751' ,'74755' ,'75184' ,'75207' ,'75594' ,'75686' ,'75793' ,'49336' ,'49337' ,'49338' ,'70369' ,'71556' ,'71849' ,'71870' ,'71871' ,'71893' ,'71899' ,'72304' ,'72307' ,'72314' ,'72315' ,'73238' ,'74100' ,'74589' ,'75597' ,'75684' ,'75685' ,'26121' ,'26122' ,'26123' ,'26131' ,'26134' ,'38885' ,'38891' ,'43117' ,'45979' ,'48317' ,'49736' ,'49740' ,'56456' ,'56457' ,'58088' ,'58224' ,'58231' ,'58234' ,'62430' ,'62433' ,'62436' ,'62443' ,'63944' ,'63951' ,'63955' ,'63957' ,'64664' ,'65653' ,'65801' ,'65804' ,'65807' ,'65816' ,'65819' ,'67182' ,'67185' ,'67354' ,'67361' ,'67707' ,'68703' ,'69054' ,'69057' ,'69060' ,'69392' ,'71809' ,'71827' ,'71830' ,'71833' ,'71836' ,'71839' ,'71865' ,'72271' ,'72279' ,'72287' ,'72296' ,'72299' ,'72302' ,'72313' ,'72316' ,'72317' ,'72362' ,'72384' ,'72855' ,'72924' ,'74449' ,'74452' ,'74455' ,'74861' ,'74970' ,'74973' ,'74976' ,'75431' ,'75432' ,'75879' ,'75888' ,'75895' ,'75932' ,'75935' ,'75938' ,'61122' ,'61123' ,'61124' ,'61125' ,'61195' ,'61196' ,'61197' ,'61198' ,'61199' ,'61200' ,'61201' ,'61202' ,'61203' ,'61204' ,'61205' ,'61206' ,'61207' ,'61208' ,'61209' ,'61210' ,'61211' ,'61212' ,'61213' ,'61214' ,'61215' ,'61216' ,'61217' ,'61218' ,'61219' ,'61249' ,'61250' ,'61251' ,'61252' ,'72971' ,'72972' ,'72973' ,'73612' ,'73630' ,'73631' ,'73691' ,'73692' ,'73693' ,'73694' ,'73695' ,'73696' ,'73904' ,'73905' ,'73986' ,'73987' ,'74015' ,'74016' ,'74017' ,'74018' ,'74019' ,'74775' ,'75008' ,'75009' ,'75645' ,'75357' ,'75358' ,'75602' ,'75603' ,'75604' ,'75605' ,'75650' ,'75651' ,'75652' ,'75653' ,'75654' ,'76205' ,'76206' ,'76207' ,'76208' ,'76209' ,'73298' ,'73299' ,'73300' ,'74712' ,'73357' ,'73358' ,'73359' ,'73360' ,'73361' ,'73362' ,'73699' ,'73700' ,'73701' ,'73702' ,'73703' ,'73704' ,'73717' ,'73718' ,'73719' ,'73720' ,'73721' ,'73722' ,'73960' ,'73961' ,'73962' ,'73963' ,'73964' ,'73965' ,'73988' ,'73989' ,'73990' ,'73991' ,'73992' ,'73993' ,'74232' ,'74233' ,'74234' ,'74231' ,'74235' ,'74236' ,'74237' ,'74238' ,'74239' ,'74240' ,'74241' ,'74242' ,'74243' ,'74244' ,'74245' ,'74246' ,'74249' ,'74248' ,'74250' ,'74251' ,'74252' ,'74253' ,'74254' ,'74255' ,'74256' ,'74257' ,'74258' ,'74259' ,'74260' ,'74261' ,'75266' ,'75267' ,'75268' ,'75269' ,'75270' ,'75271' ,'75272' ,'75273' ,'75339' ,'75340' ,'75341' ,'75342' ,'75343' ,'75344' ,'75345' ,'75346' ,'75347' ,'75348' ,'75349' ,'75350' ,'75351' ,'75352' ,'75353' ,'75354' ,'75355' ,'75356' ,'72645' ,'72646' ,'72647' ,'72648' ,'73239' ,'73249' ,'73403' ,'73409' ,'73408' ,'73414' ,'73307' ,'73308' ,'72649' ,'72650' ,'72651' ,'72652' ,'73243' ,'73244' ,'73404' ,'73410' ,'73305' ,'73306' ,'73407' ,'73413' ,'72684' ,'72685' ,'72984' ,'72985' ,'72986' ,'72987' ,'72988' ,'72989' ,'72990' ,'72991' ,'73245' ,'73246' ,'73405' ,'73411' ,'73406' ,'73412' ,'73301' ,'73302' ,'72992' ,'72993' ,'72994' ,'72995' ,'72996' ,'72997' ,'72998' ,'72999' ,'73000' ,'73001' ,'73002' ,'73003' ,'73247' ,'73248' ,'73296' ,'73297' ,'75447' ,'75448' ,'75449' ,'75450' ,'73367' ,'73368' ,'73369' ,'73697' ,'73698' ,'73705' ,'73706' ,'73373' ,'73370' ,'73372' ,'73375' ,'61121' ,'61193' ,'61194' ,'72140' ,'72183' ,'72430' ,'73754' ,'76731' ,'72021' ,'72039' ,'72041' ,'72043' ,'72045' ,'72056' ,'72058' ,'72062' ,'72064' ,'72206' ,'73521' ,'73523' ,'73948' ,'74321' ,'74322' ,'74323' ,'74324' ,'74446' ,'74492' ,'74536' ,'74541' ,'74616' ,'74646' ,'74648' ,'74650' ,'74652' ,'74656' ,'74658' ,'74660' ,'74708' ,'74710' ,'74735' ,'74744' ,'74746' ,'74748' ,'74817' ,'74819' ,'74839' ,'74886' ,'74903' ,'74927' ,'74942' ,'74951' ,'75161' ,'75166' ,'75628' ,'75674' ,'75678' ,'75929' ,'75958' ,'75982' ,'76226' ,'76228' ,'76230' ,'76235' ,'76237' ,'76705' ,'76724' ,'76737' ,'76820' ,'76846' ,'76860' ,'77062' ,'72020' ,'72026' ,'72040' ,'72042' ,'72044' ,'72057' ,'72061' ,'72063' ,'72067' ,'72205' ,'73520' ,'73946' ,'74317' ,'74318' ,'74319' ,'74320' ,'74445' ,'74491' ,'74535' ,'74540' ,'74615' ,'74645' ,'74647' ,'74649' ,'74651' ,'74655' ,'74657' ,'74659' ,'74709' ,'74711' ,'74736' ,'74743' ,'74745' ,'74747' ,'74816' ,'74838' ,'74885' ,'74904' ,'74926' ,'74928' ,'74939' ,'74941' ,'74952' ,'75165' ,'75629' ,'75673' ,'75677' ,'75928' ,'75957' ,'75981' ,'76225' ,'76227' ,'76229' ,'76236' ,'76238' ,'76704' ,'76723' ,'76736' ,'76821' ,'76845' ,'76859' ,'77061' ) AND REPORT_DATE <TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') , 'YYYY-MM-DD') AND REPORT_DATE >= TO_DATE(TO_CHAR(SYSDATE, 'YYYY') || '-01-01', 'YYYY-MM-DD') ) ,enddata AS ( SELECT a.* ,CASE WHEN CAR_SPEC = '车规' THEN CASE WHEN ppk_value > 1.67 THEN 'CPK>1.67' ELSE 'CPK<1.67' END ELSE CASE WHEN ppk_value > 1.33 THEN 'CPK>1.33' ELSE 'CPK<1.33' END END AS is_ok FROM alldata a -- ${if(len(factory) > 0,"WHERE factory ='"+factory+"'","")} ) --月常规 ,month_data as( SELECT factory,area_id,car_spec ,is_ok,iso_month_number, count(*) AS countd FROM enddata GROUP BY factory,area_id,car_spec,is_ok ,iso_month_number ) --月汇总all ,month_data_count as( SELECT factory,area_id,'汇总' AS car_spec ,'CPK统计总数' AS is_ok ,'月' AS flagcol, sum(countd) AS countd,iso_month_number FROM month_data GROUP BY factory,area_id,iso_month_number UNION SELECT factory,area_id,'汇总' AS car_spec ,'CPK不达标个数' AS is_ok ,'月' AS flagcol, sum(countd) AS countd,iso_month_number FROM month_data WHERE is_ok = 'CPK<1.67' OR is_ok='CPK<1.33' GROUP BY factory,area_id,iso_month_number ) SELECT factory,area_id ,car_spec,is_ok,countd ,iso_month_number FROM month_data_count UNION SELECT factory,area_id ,car_spec,is_ok,countd ,iso_month_number FROM month_data 优化SQL
09-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值