• 【基础】Linux 进阶


    组管理与权限管理

    Linux 组管理

    在 Linux 系统当中,每个用户都将属于一个组,不会独立存在。对于一个文件而言,那个用户创建了这个文件,哪个用户就是该文件的所有者。文件被创建后,其所有者可以改变。

    查看文件所属用户与所属组

    可以通过ls -ahl命令查看当前文件夹下所有文件的信息,结果中第三列展示的是文件所属用户,第四列展示的是文件所属的组。

    [root@master /]# ls -ahl
    总用量 24K
    dr-xr-xr-x.  17 root root  244 1110 09:14 .
    dr-xr-xr-x.  17 root root  244 1110 09:14 ..
    -rw-r--r--    1 root root    0 1110 09:14 .autorelabel
    lrwxrwxrwx.   1 root root    7 113 14:36 bin -> usr/bin
    dr-xr-xr-x.   5 root root 4.0K 118 14:15 boot
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在文件/etc/group下存放着所有的组,使用cat /etc/group命令可以进行查看

    [root@master ~]# cat /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建、修改用户以及组

    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Linux 文件权限管理

    查看文件权限

    可以通过ls -ahl命令查看当前文件夹下所有文件的信息,结果中第一列展示的即权限相关的信息。

    [root@master /]# ls -ahl
    总用量 24K
    dr-xr-xr-x.  17 root root  244 1110 09:14 .
    dr-xr-xr-x.  17 root root  244 1110 09:14 ..
    -rw-r--r--    1 root root    0 1110 09:14 .autorelabel
    lrwxrwxrwx.   1 root root    7 113 14:36 bin -> usr/bin
    dr-xr-xr-x.   5 root root 4.0K 118 14:15 boot
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其中:

    • 第 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 121 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 121 09:09 test
    [root@master dog]# chmod u=rwx  test
    [root@master dog]# ls -ahl
    -rwxrw-rw-  1 dog  root   0 121 09:09 test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    通过权限数字和实现

    [root@master dog]# chmod 751 test
    [root@master dog]# ls -ahl
    -rwxr-x--x  1 dog  root   0 121 09:09 test
    [root@master dog]# chmod 777 test
    [root@master dog]# ls -ahl
    -rwxrwxrwx  1 dog  root   0 121 09:09 test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    chown 修改所有者

    通过chown [选项] [所有者配置] [文件或目录名]可以修改文件或目录的所有者,其中常用的选项为-R,表示如果是目录,则递归修改其下的所有目录与文件的所有者。

    [root@master dog]# ls -ahl | grep test
    -rwxrwxrwx  1 dog  root   0 121 09:09 test
    [root@master dog]# chown root test
    [root@master dog]# ls -ahl | grep test
    -rwxrwxrwx  1 root root   0 121 09:09 test
    [root@master dog]# chown dog:animal test
    [root@master dog]# ls -ahl | grep test
    -rwxrwxrwx  1 dog  animal   0 121 09:09 test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    chgrp 修改所有组

    通过chgrp [所有组] [文件名或目录名]即可修改文件或者目录的所有组

    [root@master dog]# ls -ahl | grep test
    -rwxrwxrwx  1 dog  animal   0 121 09:09 test
    [root@master dog]# chgrp root test
    [root@master dog]# ls -ahl | grep test
    -rwxrwxrwx  1 dog  root   0 121 09:09 test
    
    • 1
    • 2
    • 3
    • 4
    • 5

    定时任务调度

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    关于 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 daymm/dd/yydd.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 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)
               ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    第一行内容:

    • 第一个时间:当前时间

    • 第二个时间:系统运行时间

    • 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
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    展示内容包括:

    • 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=[端口/协议]

  • 相关阅读:
    从0到1,企业如何快速构建自己的销售体系
    Linux-挖矿木马清理
    C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境
    自主实现HTTP服务器项目逻辑
    史上最全的Go语言模块(Module)管理详解(基于Go1.19)
    STM32学习笔记二:命令行工具安装
    OpenCV之VideoCapture
    Linux下ulimit关于open files的配置
    搭建qemu RISC-V运行Linux环境
    Nginx+Tomcat负载均衡、动静分离原理
  • 原文地址:https://blog.csdn.net/zqf787351070/article/details/128173960