Linux 进阶
组管理与权限管理
Linux 组管理
在 Linux 系统当中,每个用户都将属于一个组,不会独立存在。对于一个文件而言,那个用户创建了这个文件,哪个用户就是该文件的所有者。文件被创建后,其所有者可以改变。
查看文件所属用户与所属组
可以通过ls -ahl
命令查看当前文件夹下所有文件的信息,结果中第三列展示的是文件所属用户,第四列展示的是文件所属的组。
[root@master /]# ls -ahl
总用量 24K
dr-xr-xr-x. 17 root root 244 11月 10 09:14 .
dr-xr-xr-x. 17 root root 244 11月 10 09:14 ..
-rw-r--r-- 1 root root 0 11月 10 09:14 .autorelabel
lrwxrwxrwx. 1 root root 7 11月 3 14:36 bin -> usr/bin
dr-xr-xr-x. 5 root root 4.0K 11月 8 14:15 boot
...
在文件/etc/group
下存放着所有的组,使用cat /etc/group
命令可以进行查看
[root@master ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
创建、修改用户以及组
-
useradd [用户名] [选项]
:新增一个 Linux 用户-g
:创建新用户并分配到指定组
-
usermod [用户名] [选项]
:根据选项更改用户相应信息-
-g
:更改用户所属组 -
-d
:更改用户登录的初始目录
-
-
groupadd [组名]
:新增用户组
[root@master ~]# groupadd animal
[root@master ~]# cat /etc/group | grep animal
animal:x:1000:
[root@master ~]# useradd dog -g animal
[root@master ~]# id dog
uid=1000(dog) gid=1000(animal) 组=1000(animal)
[root@master ~]# usermod dog -g root
[root@master ~]# id dog
uid=1000(dog) gid=0(root) 组=0(root)
Linux 文件权限管理
查看文件权限
可以通过ls -ahl
命令查看当前文件夹下所有文件的信息,结果中第一列展示的即权限相关的信息。
[root@master /]# ls -ahl
总用量 24K
dr-xr-xr-x. 17 root root 244 11月 10 09:14 .
dr-xr-xr-x. 17 root root 244 11月 10 09:14 ..
-rw-r--r-- 1 root root 0 11月 10 09:14 .autorelabel
lrwxrwxrwx. 1 root root 7 11月 3 14:36 bin -> usr/bin
dr-xr-xr-x. 5 root root 4.0K 11月 8 14:15 boot
...
其中:
-
第 0 位表示文件的类型
-
d
代表目录 -
-
代表普通文件 -
l
代表链接,相当于 windows 中的快捷方式 -
c
代表字符设备文件,如鼠标、键盘 -
d
代表块设备,比如硬盘
-
-
第 1-3 位代表文件所有者对该文件的权限
-
第 4-6 位代表文件所属组中其他用户对该文件的权限
-
第 7-9 位代表其他用户对该文件的权限
补充:关于文件名的颜色
-
绿色:代表可执行文件
-
白色:代表普通文件
-
蓝色:代表目录或者文件夹
-
红色:代表压缩文件
rwx 权限说明
Linux 系统中对于文件的权限有三种:
-
r 代表可读(read);
-
w 代表可写(write);
-
x 代表可执行(execute);
权限 | 作用于文件 | 作用于目录 |
---|---|---|
r | 可以读取、查看 | 可以读取,可以用ls 查看目录内容 |
w | 可以修改(但未必可以删除) | 可以修改,可以创建、删除、重命名目录,拥有目录的写权限才能删除目录中的文件 |
x | 可以被执行 | 可以进入该目录 |
上述三种权限也可以用数字来表示,其中r=4,w=2,x=1
,因此不同的权限组合就对应着不同的数字,如 5 代表 r-x
chmod 修改权限
通过chmod [权限配置] [文件\目录名]
可以修改对应文件或目录的权限,其中的【权限配置】有两种表达形式。
通过 +/-/= 实现
首先明确不同用户的字母代表
-
u:代表文件的所有者
-
g:代表文件所有组的其他用户
-
o:代表组外其他用户
-
a:代表所有人
对不同用户通过 +/-/= 相应权限即可实现权限的修改
[root@master dog]# ls -ahl
-rw-r--r-- 1 dog root 0 12月 1 09:09 test
[root@master dog]# chmod u-w,g+w,o+w test
[root@master dog]# ls -ahl
-r--rw-rw- 1 dog root 0 12月 1 09:09 test
[root@master dog]# chmod u=rwx test
[root@master dog]# ls -ahl
-rwxrw-rw- 1 dog root 0 12月 1 09:09 test
通过权限数字和实现
[root@master dog]# chmod 751 test
[root@master dog]# ls -ahl
-rwxr-x--x 1 dog root 0 12月 1 09:09 test
[root@master dog]# chmod 777 test
[root@master dog]# ls -ahl
-rwxrwxrwx 1 dog root 0 12月 1 09:09 test
chown 修改所有者
通过chown [选项] [所有者配置] [文件或目录名]
可以修改文件或目录的所有者,其中常用的选项为-R
,表示如果是目录,则递归修改其下的所有目录与文件的所有者。
[root@master dog]# ls -ahl | grep test
-rwxrwxrwx 1 dog root 0 12月 1 09:09 test
[root@master dog]# chown root test
[root@master dog]# ls -ahl | grep test
-rwxrwxrwx 1 root root 0 12月 1 09:09 test
[root@master dog]# chown dog:animal test
[root@master dog]# ls -ahl | grep test
-rwxrwxrwx 1 dog animal 0 12月 1 09:09 test
chgrp 修改所有组
通过chgrp [所有组] [文件名或目录名]
即可修改文件或者目录的所有组
[root@master dog]# ls -ahl | grep test
-rwxrwxrwx 1 dog animal 0 12月 1 09:09 test
[root@master dog]# chgrp root test
[root@master dog]# ls -ahl | grep test
-rwxrwxrwx 1 dog root 0 12月 1 09:09 test
定时任务调度
crond 定时任务调度
crond 定时任务调度可以按照配置的时间规则周期性的执行某项任务,该任务可以是一条指令、一个脚本。
通过crontab [选项]
指令可实现对定时任务的设置,常用选项有:
-
-e
:编辑 crontab 定时任务 -
-l
:查询 crontab 定时任务 -
-r
:删除当前用户所有的 crontab 定时任务
基本使用:执行crongtab -e
进入文件,编写定时任务,保存退出即可,下列示例定义了一个定时任务,每分钟向 test.txt 文件中写入 Hello,World!
[root@master ~]# crontab -l
no crontab for root
[root@master ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@master ~]# crontab -l
*/1 * * * * echo "Hello,World!" >> /root/test.txt
关于 cron 表达式,其占位符含义如下:
含义 | 取值范围 | |
---|---|---|
第一个“*” | 表示某小时中的第几分钟 | 0-59 |
第二个“*” | 表示某天中的第几个小时 | 0-23 |
第三个“*” | 表示某月中的第几天 | 1-31 |
第四个“*” | 表示某年中的第几个月 | 1-12 |
第五个“*” | 表示一周当中的周几 | 0-7 |
使用下列符号以配置不同的时间含义:
含义 | |
---|---|
* | 表示任何时间 |
, | 表示不连续的时间 |
- | 表示连续的时间范围 |
/n | 表示周期性的时间,即多久执行一次 |
at 定时任务调度
at 定时任务调度将根据配置的时间,按时执行定义的某项任务,该任务只会被执行一次。
通过at [选项] [时间]
即可实现定时任务调度,常用选项包括:
-
-m
:当指定任务完成后,将会给用户发送邮件 -
-v
:显示任务将被执行的时间 -
-c
:打印任务的内容到标准输出
其他常用指令
-
atq
:展示已经设置的任务 -
atrm [任务编号]
:删除已经设置的任务
关于时间的设定,可以通过下列几种方式实现:
-
按照
hh:mm
的格式指定时间,若当天该时间已经过去,则放在第二天执行 -
采用 12 小时制,在数字后面加 am/pm 来指定时间
-
指定具体的执行时间,指定格式为
month day
或mm/dd/yy
或dd.mm.yy
,指定的日期必须跟在指定时间的后面 -
使用相对记时,指定格式为
now + count time-units
下列示例定义了一分钟之后将当前的日期信息覆盖写入对应文件,完成任务定义后按两下ctrl + d
退出任务编辑(注意:centOS 7 最小系统不包含 at 服务,需要下载并启动服务方可使用)
[root@master ~]# at -v now + 1 minutes
Thu Dec 1 10:29:00 2022
at> date > /root/test.txt
at> <EOT>
job 3 at Thu Dec 1 10:29:00 2022
[root@master ~]# atq
3 Thu Dec 1 10:29:00 2022 a root
Linux 进程管理
ps 命令查看系统正在进行的进程
使用ps [选项]
命令可以查看目前系统中正在运行的进程,可以搭配| grep
使用,常用选项有:
-
-a
:显示当前终端所有的进程信息 -
-u
:以用户的格式显示进程信息 -
-x
:显示后台程序运行的参数 -
-e
:显示所有进程 -
-f
:按全格式显示
ps -aux 显示内容
[root@master ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 125660 4084 ? Ss 08:17 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 08:17 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 08:17 0:00 [kworker/0:0H]
...
[root@master ~]# ps -aux | grep atd
root 2115 0.0 0.0 25908 956 ? Ss 10:24 0:00 /usr/sbin/atd -f
root 2197 0.0 0.0 112824 988 pts/0 R+ 10:40 0:00 grep --color=auto atd
-
USER:执行用户进程名称
-
PID:进程号
-
%CPU:进程占用 CPU 百分比
-
%MEM:进程占用物理内存百分比
-
VSZ:进程占用虚拟内存大小
-
RSS:进程占用物理内存大小
-
TTY:终端名称
-
STAT:进程状态
-
S:睡眠
-
s:表示该进程是会话的先导进程
-
N-表示进程拥有比普通优先级更低的优先级
-
R:正在运行
-
D:短期等待
-
Z:僵死进程
-
T:被跟踪或者被停止等等
-
-
START:进程执行的开始时间
-
TIME:进程使用 CPU 的总时间
-
COMMAND:启动进程所使用的命令和参数
ps -ef 显示内容
[root@master ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:17 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 08:17 ? 00:00:00 [kthreadd]
root 4 2 0 08:17 ? 00:00:00 [kworker/0:0H]
[root@master ~]# ps -ef | grep sshd
root 962 1 0 08:17 ? 00:00:00 /usr/sbin/sshd -D
root 2134 962 0 10:28 ? 00:00:00 sshd: root@pts/0
root 2136 962 0 10:28 ? 00:00:00 sshd: root@notty
root 2205 2138 0 10:49 pts/0 00:00:00 grep --color=auto sshd
-
UID:用户 id
-
PID:进程 id
-
PPID:父进程 id
-
C:CPU 用于计算执行优先级的因子
-
数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;
-
数值越小,表明进程是 I/O 密集型运算,执行优先级会提高;
-
-
STIME:进程启动的时间
-
TTY:完整的终端名称
-
TIME:进程使用 CPU 的总时间
-
CMD:启动进程所使用的命令和参数
kill 命令终止进程
-
kill [选项] [进程号]
:通过进程号终止进程 -
killall [进程名称]
:杀死进程及其所有子进程
常用的选项有-9
,表示强制终止线程(系统觉得某个程序重要,可能会屏蔽你的kill指令,这时使用选项-9强制终止进程)
pstree 命令查询进程树
使用命令pstree [选项]
可以通过树的形式更加直观的查看进程信息,常用选项有:
-
-p
:显示进程的 PID -
-u
:显示进程的所属用户
centOS 7 最小系统不包含该命令,需要通过指令下载yum install -y psmisc
[root@master ~]# pstree -p
systemd(1)─┬─NetworkManager(682)─┬─dhclient(769)
│ ├─{NetworkManager}(703)
│ └─{NetworkManager}(710)
├─VGAuthService(666)
├─agetty(688)
├─atd(2115)
├─auditd(624)───{auditd}(625)
├─chronyd(671)
├─crond(686)
......
top 指令动态监控进程
top 与 ps 指令类似,都可以显示正在执行的线程,但是 top 指令可以实时更新。使用top [选项]
命令即可实现进程监控,常用选项有:
-
-d [秒数]
:指定监控的更新时间,默认是 3s -
-i
:不显示闲置或僵死进程 -
-p [进程号]
:指定监控进程的 id 实现对某个进程状态的监控
top 显示内容
[root@master ~]# top
top - 13:08:23 up 4:51, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 109 total, 2 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995636 total, 155572 free, 237616 used, 602448 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 586148 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
963 root 20 0 579196 78916 36504 S 0.7 7.9 1:29.42 dockerd
2361 root 20 0 162100 2268 1564 R 0.7 0.2 0:04.09 top
第一行内容:
-
第一个时间:当前时间
-
第二个时间:系统运行时间
-
1 user:代表当前有一个用户
-
load average:负载值(三个值平均数若 >0.7,则需要提高性能)
第二行内容:
-
Tasks:系统任务数
-
2 running:表示有 2 个正在运行的程序
-
107 sleeping:表示有 107 个程序正在休眠
-
0 stopped:0 个终止进程
-
0 zombie:0 个僵死进程
第三行内容展示了当前 CPU 的占用情况
-
us:用户占用百分比
-
sy:系统占用百分比
-
id:空闲 CPU
第四行内容展示了内存占用情况
-
total:总内存
-
free:空闲内存
-
used:已使用内存
-
buff/cache:缓存及缓冲区大小
第五行内容展示了 Swap 分区情况
-
total:总大小
-
free:空闲大小
-
used:已使用大小
-
avail Mem:可获取的大小
top 交互指令
-
P
:以 CPU 使用率排序(默认) -
M
:以内存占用率排序 -
N
:以 PID 排序 -
q
:退出 top
netstat 指令监控网络状态
使用netstat [选项]
可以查看系统的网络情况,常用选项有:
-
-an
:按一定顺序排列输出 -
-p
:显示哪个进程正在调用
使用前需要先安装:yum install net-tools
[root@master ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 master:ssh 192.168.86.1:54932 ESTABLISHED
...
展示内容包括:
-
Proto:协议
-
Recv-Q:接收消息队列
-
Send-Q:发送消息队列
-
Local Address:本地 Linux 地址
-
Foreign Address:外部地址
-
State:连接状态
-
LISTEN:监听
-
ESTABLISHED:已建立连接
-
TIME_WAIT:超时等待
-
Linux Service 服务管理
服务本质上就是进程,但服务是在后台运行的。服务通常会监听某个端口,等待其他程序的请求,因此又称为守护进程。
Linux 系统中使用systemctl [操作指令] [服务名]
指令管理服务,操作指令有:
-
start:开启服务
-
stop:停止服务
-
restart:重启服务
-
status:查询服务状态
-
enable:设置服务开机自启
-
disable:关闭服务开机自启
-
is-enable:查询服务是否开机自启
firewalld 防火墙服务
-
开放端口:
firewall-cmd --permanent --add-port=[端口号/协议]
-
关闭端口:
firewall-cmd --permanent --remove-port=[端口号/协议]
-
重新载入防火墙,使改动生效:
firewall-cmd --reload
-
查询端口是否开放:
firewall-cmd --query-port=[端口/协议]