学习周报-20221216

news2025/1/13 15:36:48

文章目录

  • 一 centos6和centos7系统的服务启动与关闭
  • 二 Linux下的/etc/pam.d/system-auth配置文件参数
    • 各列参数说明
      • 1)第一列
      • 2)第二列
      • 3)第三列和第四列
    • 常用类说明
  • 三 Linux用户密码过期策略
    • 一 相关文件
    • 二 修改密码
    • 三 设置密码过期策略
  • 四 Linux中使用scp(复制)、sftp(复制)、rsync(同步)在系统间传输文件
    • 一 环境准备
    • 二 scp使用
      • 2.1 检查SSH服务
      • 2.2 传输文件
      • 2.3 检查文件
      • 2.4 参数说明
    • 三 sftp使用
      • 3.1 将文件上传至远端
      • 3.2 将远端文件下载至本地
    • 四 rsync使用
      • 4.1 检查命令
      • 4.2 传输文件
      • 4.3 检查结果
      • 4.4 传输目录
      • 4.5 常用参数说明
  • 五 http 常见状态码
    • 一 状态码
    • 二 原因划分
    • 三 具体含义
  • 六 sed命令常用方法
    • 一 常用参数
    • 二 搭建测试环境
    • 三 用法说明
      • 3.1 显示输出信息
      • 3.2 添加信息
      • 3.3 删除信息
      • 3.4 修改信息
      • 3.5 真正在文件中修改内容
    • 四 补充说明
  • 七 Linux进程优先级
    • 一 定义描述
    • 二 查看nice值
      • 2.1 使用top命令交互式查看nice值
      • 2.2 使用ps命令查看nice值
      • 2.3 查看程序调度策略
    • 三 修改nice值
      • 3.1 启动特定nice值的进程
      • 3.2 更改现有进程的nice级别

一 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将渲染计算搬到云端,开启低成本、强交互、沉浸式体验

云渲染可以解放本地计算需求&#xff0c;这意味着生产力的大幅提升。 云渲染的基本原理是将3D渲染应用部署到云端&#xff0c;接收本地的控制指令发送到云端&#xff0c;云端启动游戏引擎并进行画面渲染&#xff0c;编码成视频流传输到本地。 不难看出&#xff0c;云渲染技术的…

3节点Fate集群实战记录(全网最详细)--横向联邦学习

集群配置 集群的三台服务器分别部署了fate-10000, fate-9999, fate-9998命名空间&#xff0c;集群的具体部署情况请转&#xff1a;link查看。 文章后面以命名空间名来区分操作所在的节点&#xff08;注意节点的实际名字不等于命名空间名&#xff09;。集群的配置信息如下&…

【嵌入式开源库:cJSON】 一个轻量级C语言JSON数据解析库用法详解

cJSON简介 cJSON是使用C语言编写&#xff0c;用来创建、解析JSON文件的库。cJSON特点就是工程文件简单&#xff0c;只有一个.c和一个.h&#xff0c;但提供函数接口功能齐全&#xff0c;麻雀虽小五脏俱全&#xff0c;使得在嵌入式工程中使用起来得心应手。 cJSON获取 https:/…

小程序本地 存储/获取值以及删除本地的值

场景&#xff1a;小程序本地存储的方法 wx.setStorageSync&#xff1a;直接给定key和value值 wx.setStorage&#xff1a;需指定key及value&#xff0c;然后再指定相应的值 小程序获取本地值的方法 wx.getStorageSync&#xff1a;直接指定key值获取到对应的数据 wx.getStorage&a…

Node.js模块系统的实现机制简析

目录nodejs模块系统简介C版native模块的定义和加载加载过程JavaScript接口层万能的binding机制JavaScript版native模块的定义和加载js2c技术NativeModule的工作原理Node启动时构造NativeModule对象&#xff0c;完成name到source的映射懒加载机制总结nodejs模块系统简介 Node.j…

[附源码]Nodejs计算机毕业设计基于的校园商城Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Linux系统编程2——进程介绍

文章目录前言一、程序和进程二、并行和并发三、进程控制块PCB进程状态四、创建进程相关函数1、fork函数fork函数总结2、getpid/getppid3、exec函数族3.1、execl函数3.2、execlp函数3.3、exec函数族原理介绍五、进程回收1、为什么要进行进程资源回收2、孤儿进程3、僵尸进程4、进…

传奇GEE引擎版本架设

传奇GEE引擎版本架设 我是艾西今天给大家分享下传奇GEE引擎版本的架设教程 &#xff08;仅做参考&#xff0c;以下内容为显示素材打码部分请读者理解遵守平台GZ&#xff09; 传奇GEE引擎版本我们架设游戏需要用到的工具&#xff1a; 版本&#xff08;游戏类型服务端&#xf…

[附源码]Node.js计算机毕业设计高校学生管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

[附源码]Node.js计算机毕业设计公司疫情健康信息管理系统appExpress

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

冰刃(IceSword)的使用方法(基础篇)

冰刃是一款功能强大的杀毒辅助软件&#xff0c;深受很多杀毒高手的青睐&#xff0c;这里我介绍一下冰刃这个软件的简单使用方法&#xff0c;供大家参考。说句实话&#xff0c;我不是高手&#xff0c;不能像高手一样把一些软件运用自如&#xff0c;所以这个方法可能有很多纰漏或…

怎么去视频的水印?两分钟让你学会操作

从事视频剪辑的小伙伴&#xff0c;想必都需要先从网上查找一些视频片段&#xff0c;再将其整合成一个视频&#xff0c;但是保存下来过后&#xff0c;再打开这些视频时&#xff0c;大家应该都会发现这些视频上都带有水印&#xff0c;很影响视频的观感度&#xff0c;从而可能会降…

Redis宝典

文章目录一.概念1.1 什么是redis1.2 redis优点二.redis的存储结构2.1 结构2.2 渐进式rehash三.Redis数据类型及应用场景3.1 字符串&#xff08;string&#xff09;3.2 字符串列表&#xff08;list&#xff09;3.3 字符串集合&#xff08;set&#xff09;3.4 有序字符串集合&…

找旅馆问题

一 问题描述 有 N 家旅馆&#xff0c;每家旅馆都有位置和价格&#xff0c;有 M 个客人希望找到一家价格可接受的最近旅馆。 二 输入和输出 1 输入 每个测试用例的第 1 行都包含两个整数 N&#xff08;N ≤200000&#xff09;和 M&#xff08;M ≤20000&#xff09;&#xf…

Python之Socket编程: 轻松连接你的应用程序

前言 什么是Socket? Python 的 Socket 模块提供了一个标准的接口&#xff0c;可以让你使用网络连接来通信。 Socket 是一种网络通信技术&#xff0c;它提供了一个通用的接口来连接不同类型的网络&#xff0c;例如互联网、局域网和本地环回地址。你可以使用 Python 的 Socke…

为什么RocketMQ不使用Zookeeper作为注册中心呢?

根据CAP理论&#xff0c;同时最多只能满⾜两个点&#xff0c;而zookeeper满足的是CP&#xff0c;也就是说zookeeper并不能保证服务的可用性&#xff0c;zookeeper在进⾏选举的时候&#xff0c;整个选举的时间太⻓&#xff0c;期间整个集群都处于不可用的状态&#xff0c;而这对…

游戏网页设计成品 学校班级网页制作模板 大学生静态HTML网页源码 dreamweaver网页作业 简单网页课程成品

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

makefile编译一个工程碰到的问题(仅做为记录,没有逻辑)

一、编译选项如下 test : all$(CC) $(CXXFLAGS) -I/DecoderFFMPEGLive/ -o Test/$.o -c Test/test.cpp$(CC) $(CXXFLAGS) -o $ Test/$.o -L. -lDecoderFFMPEGLive -lpthread 报错误&#xff1a;/usr/bin/ld: cannot open output file test: Is a directory 是因为我想生成…

论文笔记CATEGORICAL REPARAMETERIZATION WITH GUMBEL-SOFTMAX

目录Gumbel-Softmax分布Gumbel-Softmax EstimatorStraight-Through (ST) Gumbel-Softmax EstimatorStraight-Through Estimator (STE)Straight-Through (ST) Gumbel-Softmax Estimator参考Gumbel-Softmax分布 Gumbel-Softmax分布是一个定义在单纯形(simplex)上的连续分布。 Gu…

项目成功的制胜法宝——有效的领导力

项目经理在开展项目的过程中&#xff0c;为了确保项目的成功且实现价值交付&#xff0c;往往会使出浑身解数、有勇有谋、甚至熟练使用“孙子兵法”。毕竟在很多情况下&#xff0c;需要“带兵打仗”的项目经理权力微弱&#xff0c;不能像“将军”那般拥有权力的加持、一呼百应。…