Linux系统中存在三种用户:
root用户。ID是0。
系统用户。UID范围(1~999)。登录shell为/sbin/nologin
,大部分不能登录。
普通用户。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::::::
建立用户帐号。
useradd cg_test -c '测试' -M
效果:
cg_test:x:1003:1003:测试:/home/cg_test:/bin/bash
更改自己的密码
passwd
超级用户修改其他用户的密码
passwd cg_test
删除帐号及其相关文件。
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
修改用户信息。
usermod cg_test -c 't' #修改用户描述信息
更改用户密码过期信息。
chage -l cg_test #列出用户和密码的有效期
chage -m 2 cg_test #密码可更改的最小天数
变更为其他使用者身份。
su cg_test
su -l cg_test #切换到cg_test的用户目录
su -c cg_test #不能执行
root组。
系统组。
普通用户组。
一个用户可以属于多个用户组,但只有一个组是该用户的主属组,其他组是次属组。
组基本信息在 /etc/group 中,组密码信息在 /etc/gshadow 中。
root用户可以修改 /etc/group 管理组,也可以使用命令。
创建新组群
groupadd workgroup
删除群组
groupdel workgroup
群组内无用户时才能删除。
更改群组识别码或名称。
groupmod -g 1005 workgroup #群组ID必须是数字
groupmod -n wt workgroup #更改群组名称
groupmod -o wt #不会使用
管理组。
gpasswd -a cg_test wt #向wt组加入cg_test用户
切换用户组。此命令有点复杂。
linux系统的原始进程是init,它的PID是1。除它外,所有进程都有父进程。
每个进程对应一个task_struct结构体。一个进程至少具备的内容:
进程号(PID)。
进程的状态。运行态、等待态、停止态、死亡态。
进程的优先级和时间片。时间片标识一个进程将被处理器运行的时间。
虚拟内存。
处理器相关上下文。
ps 命令监视进程
ps -a
ps -u
ps -x #可显示守护进程
命令太多,无使用难度,记忆难。
pstree 命令查看父进程
pstree -n
这个命令以树状结构显示进程关系。
语法:lsof [选项] filename
不知道怎么用。
这个命令非常有用,是我最陌生的。
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分钟、5分钟、15分钟到现在的值)。不理解。
第二列是进程信息,其内容依次是:
进程总数
正在运行的进程数
休眠的进程数
停止的进程数
僵尸进程数
第三行为CPU信息,内容依次是:
用户空间占用CPU百分比
内核空间占用CPU百分比
用户进程空间内改变过优先级的进程占用CPU百分比
空闲CPU百分比
等待输入输出的CPU时间百分比
CPU处理硬件中断的时间
CPU处理软中断的时间
虚拟机耗费的CPU时间
第四行为内存信息,内容依次为:
物理内存总量
空闲内存总量
使用的物理内存总量
用作内核缓存的内存量
第五行为交换分区信息,内容依次为:
交换区总量
空闲交换区总量
使用的交换区总量
缓冲的交换区总量
从第六行开始显示的都是进程信息,内容依次是:
进程ID
进程所有者的用户名
优先级
nice值(父值表示高优先级,正值表示低优先级)
进程使用的虚拟内存总量(单位为KB)
进程使用的未被换出的物理内存大小
共享内存大小
进程状态
上次更新到现在的CPU时间占用百分比
进程使用的物理内存百分比
进程使用的CPU时间总计(单位为1/100秒)
命令名
d
p
q
S
s
i
c
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[-n 数字][command[arguments…]]
功能:调整程序的优先级
nice -n 3 top #将top命令的nice值调整为3
语法:renice[-n 优先等级][-g 程序群组名称][-p 程序识别码][-u 用户名称]
功能:着重点是可以修改隶属于某个群组或用户的程序的优先权。
renice -n 15 -u cg
linux服务按功能分为系统服务和网络服务。
功能:检查服务是否启动
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 #开启服务
此选项有些复杂。以后再尝试。
直接执行命令
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
修改服务的默认启动等级。