《Linux操作系统实用教程》笔记之系统管理

《Linux操作系统实用教程》笔记之系统管理

摘要

系统管理

用户和组管理

用户管理

用户种类

Linux系统中存在三种用户:

  1. root用户。ID是0。

  2. 系统用户。UID范围(1~999)。登录shell为/sbin/nologin,大部分不能登录。

  3. 普通用户。UID范围(1000~60000)。

用户信息存储

用户默认配置信息:/etc/login.defs。比如用户密码有效期、用户UID范围等。

用户基本信息:/etc/passwd。比如,

cg:x:1000:1000:cg:/home/cg:/bin/bash
mysql:x:1001:1001::/home/mysql:/bin/bash
www:x:1002:1002::/home/www:/bin/bash
git:x:991:989:GitLab:/home/git:/bin/bash

用户密码:/etc/shadow。此文件需使用root帐号打开。内容是这样的,

tcpdump:!!:16986::::::
cg:$6$FQxGQ7cvQIuRGWbR$yKnL.4KSoz4.G5/RjE6yxVnjjqeopQWFtwjp77np9/i/ORPw6g9WIfb5R/WAInzHYi5GryGvpRRLHAZT.kyo//:16986:0:99999:7:::
mysql:$6$iocoC4.4$UVCioZVOChnI4WrlnbFxbGF8r3Kwp7UGCH7Cu3hEspR8EMdmzMwref3N7AzXkcT0QEYw/Vqblo5agMGSXH1Hh.:16993:0:99999:7:::
www:!!:16995:0:99999:7:::
git:!!:16998::::::
常用命令
  1. useradd

建立用户帐号。

useradd cg_test -c '测试' -M

效果:

cg_test:x:1003:1003:测试:/home/cg_test:/bin/bash
  1. passwd

更改自己的密码

passwd

超级用户修改其他用户的密码

passwd cg_test 
  1. userdel

删除帐号及其相关文件。

userdel -r cg_test #删除cg_test及其用户目录
userdel cg_test #只删除cg_test用户

编辑/etc/passwd,将*放在要查封的用户的加密口令区,用户就能登录,但该用户的信息仍然存在。还原只需逆操作。
这个方法需进一步测试。修改后,仍可从root切换到cg_test,并且可以运行linux命令。

cg_test:x:1003:1003:测试:/home/cg_test:/bin/bash

改为

cg_test:*:1003:1003:测试:/home/cg_test:/bin/bash
  1. usermod

修改用户信息。

usermod cg_test -c 't'  #修改用户描述信息
  1. chage

更改用户密码过期信息。

chage -l cg_test    #列出用户和密码的有效期
chage -m 2 cg_test  #密码可更改的最小天数
  1. su

变更为其他使用者身份。

su cg_test 
su -l cg_test       #切换到cg_test的用户目录
su -c cg_test       #不能执行

用户组管理

组分类
  1. root组。

  2. 系统组。

  3. 普通用户组。

一个用户可以属于多个用户组,但只有一个组是该用户的主属组,其他组是次属组。

组基本信息在 /etc/group 中,组密码信息在 /etc/gshadow 中。

root用户可以修改 /etc/group 管理组,也可以使用命令。

命令
  1. groupadd

创建新组群

groupadd workgroup
  1. groupdel

删除群组

groupdel workgroup

群组内无用户时才能删除。

  1. groupmod

更改群组识别码或名称。

groupmod -g 1005 workgroup      #群组ID必须是数字
groupmod -n wt workgroup        #更改群组名称
groupmod -o wt                  #不会使用
  1. gpasswd

管理组。

gpasswd -a cg_test wt           #向wt组加入cg_test用户
  1. newgrp

切换用户组。此命令有点复杂。

进程管理

linux系统的原始进程是init,它的PID是1。除它外,所有进程都有父进程。

进程概述

linux系统中进程的表示

每个进程对应一个task_struct结构体。一个进程至少具备的内容:

  1. 进程号(PID)。

  2. 进程的状态。运行态、等待态、停止态、死亡态。

  3. 进程的优先级和时间片。时间片标识一个进程将被处理器运行的时间。

  4. 虚拟内存。

  5. 处理器相关上下文。

查看进程

其他命令
  1. ps 命令监视进程

    ps -a
    ps -u
    ps -x #可显示守护进程

命令太多,无使用难度,记忆难。

  1. pstree 命令查看父进程

    pstree -n

这个命令以树状结构显示进程关系。

  1. lsof 命令查看占用文件进程

语法:lsof [选项] filename

不知道怎么用。

top 命令动态显示进程信息
命令语法

这个命令非常有用,是我最陌生的。

top -d 120 
命令结果解读

执行结果如下。它表示每120s刷新一次进程信息。

[root@localhost home]# top -d 120

top - 20:30:15 up 2 days, 23:25,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 368 total,   1 running, 367 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3876012 total,   233936 free,  1057656 used,  2584420 buff/cache
KiB Swap:  2097148 total,  2090520 free,     6628 used.  2456592 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
51209 root      20   0  130340   1936   1224 R   6.2  0.0   0:00.01 top                                                                                       
    1 root      20   0   57200   3932   2272 S   0.0  0.1   0:10.04 systemd                                                                                   
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.21 kthreadd                                                                                  
    3 root      20   0       0      0      0 S   0.0  0.0   0:08.95 ksoftirqd/0                                                                               
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                              
    7 root      rt   0       0      0      0 S   0.0  0.0   0:01.47 migration/0                                                                               
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                                    
    9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/0                                                                                   
   10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/1                                                                                   
   11 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/2                                                                                   
   12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/3            

第一行是任务队列信息,其内容依次是:

  1. 系统当前时间

  2. 系统运行时间

  3. 当前登录用户数

  4. 系统负载(即任务队列的平均长度,三个数值分别为1分钟、5分钟、15分钟到现在的值)。不理解。

第二列是进程信息,其内容依次是:

  1. 进程总数

  2. 正在运行的进程数

  3. 休眠的进程数

  4. 停止的进程数

  5. 僵尸进程数

第三行为CPU信息,内容依次是:

  1. 用户空间占用CPU百分比

  2. 内核空间占用CPU百分比

  3. 用户进程空间内改变过优先级的进程占用CPU百分比

  4. 空闲CPU百分比

  5. 等待输入输出的CPU时间百分比

  6. CPU处理硬件中断的时间

  7. CPU处理软中断的时间

  8. 虚拟机耗费的CPU时间

第四行为内存信息,内容依次为:

  1. 物理内存总量

  2. 空闲内存总量

  3. 使用的物理内存总量

  4. 用作内核缓存的内存量

第五行为交换分区信息,内容依次为:

  1. 交换区总量

  2. 空闲交换区总量

  3. 使用的交换区总量

  4. 缓冲的交换区总量

从第六行开始显示的都是进程信息,内容依次是:

  1. 进程ID

  2. 进程所有者的用户名

  3. 优先级

  4. nice值(父值表示高优先级,正值表示低优先级)

  5. 进程使用的虚拟内存总量(单位为KB)

  6. 进程使用的未被换出的物理内存大小

  7. 共享内存大小

  8. 进程状态

    • D=不可中断的睡眠状态
    • R=运行
    • S=睡眠
    • T=跟踪/停止
    • Z=僵尸进程
  9. 上次更新到现在的CPU时间占用百分比

  10. 进程使用的物理内存百分比

  11. 进程使用的CPU时间总计(单位为1/100秒)

  12. 命令名

top命令选项及其功能

d
p
q
S
s
i
c

top交互命令

h
k
i
q
r
S
s
f或F
o或O
l
m
t
c
M
P
T
W

终止进程

前台进程使用 Ctrl+C 组合键终止,后台使用 kill 终止。

kill -PID 

此命令通常能达到目的。

若进程启动了子进程,只终止父进程,子进程仍在运行,因此终止父进程前,应该先终止所有的子进程。

这命令的选项挺多,后续再掌握。

kill命令各选项

进程的优先级

进程的优先级由两个值决定,分别是:优先级值和nice值。

两者都是值越小优先级越高。

PR(new) = PR(old) + nice。

若nice相同,则进程uid是root的优先权更大。

nice值的范围是 -20~19(不同系统的值范围不一样)。

nice命令

语法:nice[-n 数字][command[arguments…]]

功能:调整程序的优先级

nice -n 3 top       #将top命令的nice值调整为3
renice命令

语法:renice[-n 优先等级][-g 程序群组名称][-p 程序识别码][-u 用户名称]

功能:着重点是可以修改隶属于某个群组或用户的程序的优先权。

renice -n 15 -u cg

服务管理

linux服务按功能分为系统服务和网络服务。

chkconfig

其他选项

功能:检查服务是否启动

chkconfig
chkconfig --list 

两条命令的执行结果一样(centos7)

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 
      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
      欲查看对特定 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
vmware-tools    0:关    1:关    2:开    3:开    4:开    5:开    6:关
vmware-tools-thinprint  0:关    1:关    2:开    3:开    4:开    5:开    6:关

另一条命令

chkconfig --level 1 netconsole on

执行后无任何输出结果,查看服务列表chkconfig --list,输出结果

netconsole      0:关    1:开    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
vmware-tools    0:关    1:关    2:开    3:开    4:开    5:开    6:关
vmware-tools-thinprint  0:关    1:关    2:开    3:开    4:开    5:开    6:关

与之前的服务列表对比,发现netconsole级别为1的状态是打开的,而之前是关闭的。

显示单个服务的状态,比如network

chkconfig --list network

输出信息

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 
  如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
  欲查看对特定 target 启用的服务请执行
  'systemctl list-dependencies [target]'。

network         0:关    1:关    2:开    3:开    4:开    5:开    6:关

改变netconsole服务状态

chkconfig --level 1 netconsole off  #关闭服务
chkconfig --level 1 netconsole on   #开启服务

–add 增加服务

此选项有些复杂。以后再尝试。

直接执行命令

chkconfig --add nginx

报错

[root@localhost cg]# chkconfig --add nginx
服务 nginx 信息读取出错:没有那个文件或目录

查阅资料,应这样加入服务:

如何增加一个服务:

1.服务脚本必须存放在/etc/ini.d/目录下;

2.chkconfig –add servicename

在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;

3.chkconfig –level 35 mysqld on

修改服务的默认启动等级。

你可能感兴趣的:(LAMP)