• Linux命令基本用法


    1.用户相关命令

    1.账号管理

    命令作用
    useradd添加用户
    passwd设置密码
    usermod修改用户
    userdel删除用户
    su切换用户

    例:

    1. [root@localhost ~]# useradd aaa
    2. [root@localhost ~]# su aaa
    3. [aaa@localhost root]$ su root
    4. 密码:
    5. [root@localhost ~]# passwd aaa
    6. 更改用户 aaa 的密码 。
    7. 新的 密码:
    8. 重新输入新的 密码:
    9. passwd:所有的身份验证令牌已经成功更新。
    10. [root@localhost ~]# usermod
    11. 用法:usermod [选项] 登录
    12. 选项:
    13. -c, --comment 注释 GECOS 字段的新值
    14. -d, --home HOME_DIR 用户的新主目录
    15. -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
    16. -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
    17. -g, --gid GROUP 强制使用 GROUP 为新主组
    18. -G, --groups GROUPS 新的附加组列表 GROUPS
    19. -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
    20. 并不从其它组中删除此用户
    21. -h, --help 显示此帮助信息并推出
    22. -l, --login LOGIN 新的登录名称
    23. -L, --lock 锁定用户帐号
    24. -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
    25. -o, --non-unique 允许使用重复的(非唯一的) UID
    26. -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
    27. -R, --root CHROOT_DIR chroot 到的目录
    28. -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
    29. -s, --shell SHELL 该用户帐号的新登录 shell
    30. -u, --uid UID 用户帐号的新 UID
    31. -U, --unlock 解锁用户帐号
    32. -v, --add-subuids FIRST-LAST add range of subordinate uids
    33. -V, --del-subuids FIRST-LAST remove range of subordinate uids
    34. -w, --add-subgids FIRST-LAST add range of subordinate gids
    35. -W, --del-subgids FIRST-LAST remove range of subordinate gids
    36. -Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
    37. [root@localhost ~]# usermod -l ljb aaa
    38. usermod: user aaa is currently used by process 3142
    39. [root@localhost ~]# exit
    40. [aaa@localhost root]$ exit
    41. [root@localhost ~]# exit
    42. [aaa@localhost root]$ exit
    43. [root@localhost ~]# exit
    44. [aaa@localhost root]$ exit
    45. [root@localhost ~]# 登出

    此时已全部退出需重新连接

    1. [root@localhost ~]# usermod -l ljb aaa
    2. [root@localhost ~]# su aaa
    3. su: user aaa does not exist
    4. [root@localhost ~]# su ljb
    5. [ljb@localhost root]$
    6. [ljb@localhost root]$ su root
    7. 密码:
    8. [root@localhost ~]# userdel
    9. 用法:userdel [选项] 登录
    10. 选项:
    11. -f, --force force some actions that would fail otherwise
    12. e.g. removal of user still logged in
    13. or files, even if not owned by the user
    14. -h, --help 显示此帮助信息并推出
    15. -r, --remove 删除主目录和邮件池
    16. -R, --root CHROOT_DIR chroot 到的目录
    17. -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
    18. -Z, --selinux-user 为用户删除所有的 SELinux 用户映射
    19. [root@localhost ~]# userdel -r -f ljb
    20. userdel: user ljb is currently used by process 3616
    21. [root@localhost ~]# su ljb
    22. su: user ljb does not exist

    2.用户组

    命令作用
    groupadd添加用户组
    groupmod修改用户组
    groups查询用户所属组
    groupdel删除用户组
    gpasswd添加删除组成员
    newgrp改变有效组

    例:

    1. [root@localhost ~]# groupadd kaifa
    2. [root@localhost ~]# groupmod
    3. 用法:groupmod [选项] 组
    4. 选项:
    5. -g, --gid GID 将组 ID 改为 GID
    6. -h, --help 显示此帮助信息并推出
    7. -n, --new-name NEW_GROUP 改名为 NEW_GROUP
    8. -o, --non-unique 允许使用重复的 GID
    9. -p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
    10. -R, --root CHROOT_DIR chroot 到的目录
    11. -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
    12. [root@localhost ~]# groupmod -n kaifazu kaifa
    13. [root@localhost ~]# groups itcast
    14. itcast : itcast wheel
    15. [root@localhost ~]# groupdel kaifazu
    16. [root@localhost ~]# groupadd kaifa
    17. [root@localhost ~]# useradd user1
    18. [root@localhost ~]# useradd user2
    19. [root@localhost ~]# useradd user3
    20. [root@localhost ~]# gpasswd
    21. 用法:gpasswd [选项] 组
    22. 选项:
    23. -a, --add USER 向组 GROUP 中添加用户 USER
    24. -d, --delete USER 从组 GROUP 中添加或删除用户
    25. -h, --help 显示此帮助信息并推出
    26. -Q, --root CHROOT_DIR 要 chroot 进的目录
    27. -r, --delete-password remove the GROUP's password
    28. -R, --restrict 向其成员限制访问组 GROUP
    29. -M, --members USER,... 设置组 GROUP 的成员列表
    30. -A, --administrators ADMIN,... 设置组的管理员列表
    31. 除非使用 -A 或 -M 选项,不能结合使用这些选项。
    32. [root@localhost ~]# gpasswd -a user1 kaifa
    33. 正在将用户“user1”加入到“kaifa”组中
    34. [root@localhost ~]# gpasswd -a user2 kaifa
    35. 正在将用户“user2”加入到“kaifa”组中
    36. [root@localhost ~]# gpasswd -a user3 kaifa
    37. 正在将用户“user3”加入到“kaifa”组中
    38. [root@localhost ~]# grep 'kaifa' /etc/group
    39. kaifa:x:1002:user1,user2,user3

    2.系统管理相关命令 

    日期管理

    date

    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号

    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号

    -u:显示GMT

    --help:在线帮助

    --version:显示版本信息

    1. [root@localhost ~]# date
    2. 2023年 08月 21日 星期一 15:23:45 CST
    3. [root@localhost ~]# date -d "2020-12-12 11:11:11"
    4. 2020年 12月 12日 星期六 11:11:11 CST
    5. [root@localhost ~]# date --help

    显示用户 

    logname[--help][--version]

    1. [root@localhost ~]# logname
    2. root

    切换用户 

    su [user]

    id命令

    id [-g][--help][--version][用户名称]

    sudo命令

    sudo[参数选项] 提高普通用户的操作权限

    1. [itcast@localhost root]$ id
    2. uid=1000(itcast) gid=1000(itcast) 组=1000(itcast),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    3. [itcast@localhost root]$ sudo ls
    4. [sudo] itcast 的密码:
    5. anaconda-ks.cfg 公共 视频 文档 音乐
    6. initial-setup-ks.cfg 模板 图片 下载 桌面

    3.进程项命令

    top的命令

    top[-][d delay][q][c][S][s][i][n][b]  实时显示process的动态

    top  实时显示所有的进程信息

    top -c  实时显示所有的进程信息(显示完整命令)

    top -p PID  实时显示指定进程的信息

    结束监控快捷键:q

    ps命令

    ps[options][--help]  查看进程信息(无法实时监控,只能获取当前时刻的进程信息)

    ps  显示当前正在运行的进程信息

    ps -A  显示系统中生源地进程信息

    ps -ef  显示系统中生源地进程信息(完整信息)

    ps -u 用户名  显示指定用户的进程信息

    kill命令

    kill[-s<信息名称或编号>][程序]  中断执行中的程序

    kill[-l<信息编号>]

    kill 进程 PID  杀死指定进程

    kill -9 进程PID  彻底杀死指定进程

    kill -9 $(ps -ef|grep 用户名)  杀死指定用户所有进程

    killall -u 用户名  杀死指定用户所有进程

    4.关机和重启命令

    shutdown命令

    shutdown [-t seconds][-rkhncfF]time[message]  关机


    shutdown  不同版本有所差异

    shutdown -h now  立马关机

    shutdown +1 “警告信息”  一分钟再关机,并出现警告信息

    shutdown -r +1 “警告信息”  一分钟再重启,并出现警告信息

    shutdown -c  取消当前关机操作

    reboot [-n][-w][-d][-f][-i]  重启

    reboot  立马重启 

    5.系统管理的其他命令 

    who命令

    who -[husfV][user]  显示当前登录系统的用户

    timedatectl命令

    timedatectl  校正服务器时间,时区

    timedatectl status  显示系统的当前时间和日期

    timedatectl list-timezones  看查所有可用的时区

    timedatectl set-timezone"Asia/Shanghai"  设置本地时区

    timedatectl set-ntp false  禁用时间同步

    timedatectl set-time “2023-8-24 20:58:00”  设置时间

    timedatectl set-ntp true  启用时间同步

    clear命令

    clear  清除屏幕

    6.目录管理

    ls命令

    ls [参数选项] 目录名称  列出目录里的内容

    ls  显示不隐藏的文件与文件夹

    ls -l  显示不隐藏的文件与文件夹的详细信息

    ls -al  显示所有文件与文件夹的详细信息

    pwd命令

    pwd -P  查看当前所在目录

    cd命令

    cd[相对路径或绝对路径]  切换目录
     

     cd 路径  切换目录

    mkdir命令

    mkdir [-p] 文件夹的名字  创建目录

    mkdir 文件夹名  创建目录

    mkdir -p aaa/bbb  创建多级目录

    rmdir命令

    rmdir [-p] 文件夹名  删除空的目录

    rmdir 文件名  删除目录

    rmdir -p bbb/ccc  删除ccc,如果删除完bbb是空的bbb也一起删除

    rm命令

    rm[选项] 文件/目录  删除文件或者目录

    rm 文件路径  删除文件

    rm -r 目录路径  删除目录和目录里面所有的内容

    rm -rf 强制删除文件夹及其子文件

    cp命令

    cp [选项] 数据源 目的地   文件复制

    cp aaa/a.txt ccc  将aaa文件夹中的a.txt文件拷贝到ccc文件中

    cp -r aaa/*ccc  将aaa文件夹中所有内容拷贝到ccc文件夹中

    mv命令

    mv [选项] 数据源 目的地    改名/移动文件或文件夹

    mv 数据源 目的地   改名/移动

    附:Linux文件基本属性 

     

    7.更改属主和属组

    chgrp命令

    chgrp [选项参数][所属群组][文件或目录...]     更改属组

    chgrp [选项参数][--reference=<参考文件或目录>][--version][文件或目录...]

    chgrp -v root aaa   将aaa的属组改为root

    chown命令

    chown 属主名 文件名      更改属主

    chown [参数选项] 属主名 : 属组名 文件名      更改属主和属组

    chown root aaa     将aaa的属主改为roo

    chown root:root bbb     将bbb的属主和属组改为root

    chown -R root:root aaa     将aaa文件夹和里面所有的属主和属组改为root

    8.更改权限

    chmod命令

    作用:修改属主,属组,其他用户的权限

    修改方式:数字方式,符号方式

    数字权限

    chmod [参数选项] 数字权限 文件或目录

    符号权限:

    chmod [参数选项] 符号权限 文件或目录

    user  属主权限  -->  u

    group    属组权限  -->  g

    others   其他权限  -->  o

    全部身份   -->   a

    9.文件管理

    touch命令

    touch [参数选项] 文件名        如果文件不存在就创建文件,如果存在就修改时间属性

    touch a.txt    不存在就创建,存在就修改时间属性

    touch a{1..10).txt (两个点)   批量创建空文件

    star a.txt    查看文件的详细信息

    vi/vim编辑器

    vi:

    只能是编辑文本内容,不能对字体,段落进行排版

    不支持鼠标操作

    没有菜单

    只有命令

    vim:

    是从vi发展出来的一个文本编辑器

    代码补全,编译及错误跳转等方便编程的功能特别丰富

    vi/vim三种模式

    打开和新建文件

    vim 文件名    如果文件已经存在,会直接打开该文件 / 如果文件不存在,打开一个临时文件,在保存且退出后,就会新建一个文件 

    进入编辑模式

    进入末行模式保存文件 

    :q    当vim进入文件没有对文件内容做任何操作可以按"q"退出

    :q!    当vim进入文件对文件内容有操作但不想保存退出

    :wq    正常保存退出

    :wq!    强行保存退出

    10.文件查看

    命令功能
    cat 文件名看查小文件内容
    less -N 文件名分屏显示大文件内容
    head -n 文件名看查文件的前一部分
    tail -n 文件名看查文件的最后一部分
    grep 关键字 文件名根据关键字搜索文本文件内容

    cat命令

    cat [参数选项] 文件    查看小型文件

    cat a.txt    查看a.txt的内容

    cat -n a.txt    查看a.txt的内容(加入行号)

    less命令

    less a.txt    看查a.txt的内容

    less -N a.txt    看查a.txt的内容(加入行号)

    注:q键退出

    tail命令

    tail [参数选项] 文件    查看文件的最后部分

    tali -3 big.txt        显示文件最后3行

    tail -f big.txt        动态显示最后10行

    tail -4f big.txt    动态显示最后4行

    tail -n +2 big.txt    显示文件a.txt的内容,从第2行至文件末尾

    tail -c 45 big.txt    显示最后一些字符

    head命令

    head [参数选项] 文件    查看文件的前一部分

    grep命令

    grep [参数选项] 关键字 文件    根据关键词,搜索文本文件内容

    grep 关键字 small.txt        把包含关键字的行展示出来

    grep -n 关键字 small.txt        把包含关键字的行展示出来且加上行号

    grep -i 关键字 small.txt        把包含关键字的行展示出来,搜索时忽略大小写

    grep -v 关键字 small.txt        把不包含关键字的行展示出来

    ps -ef | grep 关键字        查找指定的进程信息,包含grep进程

    ps -ef | grep 关键字 | grep -v "grep"        查找指定的进程信息,不包含grep进程

    ps -ef|grep -c sshd        查找进程个数

    vim定位行

    vim 文件名+行数        查看文件并定位到具体行数

    vim异常处理

    如果vim异常退出,在磁盘上可能会保存有交换文件

    删除 .swp文件(rm -r -f .xxx.swp)

    echo命令

    echo 字符串        展示文本

    echo 字符串 > 文件名        将字符串写到文件中(覆盖文件中内容)

    echo 字符串 >> 文件名        将字符串写到文件中(不覆盖文件中内容)

    cat 不存在的目录 &>> error.log        将命令的失败结构追加error.log文件的后面

    11.awk语法

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具

    过滤和切割

    计算

     

    软连接

    因为某些文件和目录的路径很深,所以需要增加软连接(快捷方式)

    ln -s 目标文件路径 快捷方式路径

    find命令(查找) 

    fing [参数选项] <指定目录> <指定条件> <指定内容>        在指定目录下查找文件

    12.压缩命令

    gzip命令

    gzip [参数选项] [文件]        压缩文件

    gzip a.txt        压缩文件

    gzip *        压缩当前目录下所有文件

    gzip dv*        解压文件并列出详细信息

    gunzip命令

    gzip [参数选项] [文件]        解压文件

    gunzip 压缩文件        解压

    tar命令

    tar[必要参数] [选择参数] [文件]        打包,压缩和解压(文件/文件夹)

    注意:tar本身不具有压缩功能,他是调用压缩功能实现的

    tar -cvf 打包文件名 文件名            打包文件并指定打包之后的文件名(仅打包不压缩)

    tar -zcvf 压缩文件名 文件名/文件夹名        压缩文件或者文件夹并指定压缩文件名(打包压缩)

    tar -ztvf 压缩文件名        看查压缩文件中有哪些文件

    tar -zxvf 压缩文件名        压缩

    zip文件

    zip [必要参数] [选择参数] [文件]        压缩

    注意:zip是个使用广泛的压缩文件,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件

    zip -q -r 压缩文件名 文件/文件夹        压缩

    unzip命令

    unzip [必要参数] [选择参数] [文件]        解压

    注意:解压“.zip”扩展名的压缩文件

    unzip -l 压缩文件名        查看这个压缩文件中有多少内容

    unzip -d 指定文件夹 压缩文件        解压

    bzip2命令

    bzip2 [参数选项] 文件        压缩

    注意:使用新的压缩算法,压缩后的文件比原来的要小,但是花费的时间边长

    bzip2 a.txt        压缩

    bunzip2命令

    bunzip2 [参数选项] 文件        解压

    bunzip2 -v a.bz2        解压并显示详细信息

    13.网络管理

    ifconfig命令

    ifconfig [参数选项]        显示或者配置网络设备的命令

    ifconfig        显示激活的网卡信息

    ifconfig ens37 down        关闭网卡

    ifconfig ens37 up        启动网卡

    ifconfig ens37 192.168.23.199        配置ip地址

    ifconfig ens37 192.168.23.133 netmask 255.255.255.0        配置ip地址和子网掩码

    ping命令

    ping [参数选项]        检测是否与主机连通

    ping www.baidu.com        检测是否与百度连通

    ping -c 2 www.baidu.com        指定接收包的次数

    netstat命令

    netstat [参数选项]        显示网络状态

    netstat -a        显示详细的连接状况

    netstat -i        显示网卡列表

    14.磁盘管理

    lsblk命令

    lsblk [参数选项]        列出硬盘的使用情况

    理解为:list block的英文缩写

    lsblk        列出硬盘的使用情况

    lsblk -f        显示系统信息

    df命令

    df [参数选项]        显示目前在Linux系统上,硬盘的使用情况

    df        显示整个硬盘使用情况

    df 文件夹        显示文件夹使用情况

    df -total        显示所有的信息

    df -h        将结果变成KB,MB,GB形式展示,利于阅读

    mount命令

    为u盘分配一个挂载点叫挂载

    解除文件夹与优盘的关系叫卸载

    mount [参数选项] 目录        用于挂载Linux系统外的设备

    注意:“挂载点”的目录需要以下几个需求

    目录事先存在,可以用mkdir命令新建目录

    挂载点目录不可被其他进程使用到

    挂载点下原有文件将被隐藏

    mkdir 文件夹        创建文件夹(也是创建一个挂载点)

    mount -t auto/dev/cdrom 文件夹        开始挂载

    umount 文件夹        卸载

    yum

    在linux中,如果我们想要查找,安装,下载或者卸载另外的软件,就需要yum来进行操作

    yum -y install tree        安装tree

    tree        执行tree,展示当前目录结构

    yum remove tree        移除tree

    yum list tom*        找出以tom为开头的软件名称

    更改yum源

    yum install -y wget        安装下载工具wget

    wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo        下载阿里云的Centos-7.repo文件

    yum clean all        清理之前的缓存,并重新加载yum

    yum makecache        建立一个缓存文件

    yum search tomcat        查找软件,验证阿里云的yum源是否可以正常使用

    yum与rpm的区别

    rpm只能安装已经下载到本地机器上的rpm包

    yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这是rpm工具所不具备的

    15.shell

    1.shell概述

    在计算机科学中,shell就是一个命令解释器

    shell是位于操作系统和应用程序之间的,是他们二者最主要的接口

    shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结构解释给应用程序

    shell就是在操作系统和应用程序之间的一个命令翻译工具 

    shell的使用方式

    手工方式

        手工敲击键盘,直接输入命令,按Enter后

        执行命令,显示命令执行的结果

    重点:逐行输入命令,逐行进行确认执行

    脚本方式

        我们把手工执行的命令,写到一个文件中,然后运行这个文件,达到执行命令的效果

        这个文件就叫做脚本文件

    2.编写第一个shell脚本

    新建一个文件后缀名为sh

    书写内容

    执行

    3.shell注释

    单行注释

    多行注释

    注:字符大多用!

    3.shell变量

    1.普通变量

    方式一

        变量名=变量值        变量必须是一个整体,中间没有特殊字符

    方式二

        变量名='变量值'        单引号中的内容,原样赋值

    方式三

        变量名="变量值"        如果双引号里面有其他变量,会把变量的结果拼接,然后赋值

    命令变量

    方式一

        变量名=`命令`        注意:`是反引号

    方式二

        变量名=$(命令)        

    执行流程:1.执行`或者$()范围内的命令 2.将命令执行后的结果,赋值给变量

    2.使用变量

    方式一

        $变量名        非标准写法,图省事

    方式二

        "$变量名"        非标准写法,图省事

    方式三

        ${变量名}        在双引号里面要使用变量的值

    方式四

        "${变量名}"        标准使用方式

    3.只读变量

    readonly 变量名

    4.删除变量

    unset 变量名

    4.shell数组

    定义数组

    数组名={值1 值2 ... 值n}        arr={1 2 3 4 5}

    给数组的元素赋值

    数组名[索引]=值        arr[0]=1

    获取元素

    ${数组名[下标]}        ${arr[0]}

    获取长度

    ${#数组名[*]}        ${#arr[*]}

    ${#数组名[@]}        ${#arr[@]}    

    例:

    5.shell算数运算符

    运算符说明举例
    +加法expr $a + $b
    -减法expr $a - $b
    *乘法expr $a \* $b
    /除法expr $a / $b
    %取余expr $a % $b
    =赋值a=$b 将把变量b的值赋给a
    ++ / --自增,自减

    ((a++))  

    注意点:

    1.原生的bash不支持简单的数学运算。可以通过其他命令实现 .expr

    2.表达式和运算符之间要有空格

    3.完整的表达式要被反引号包含

    例: `expr 2 + 2`

    6.字符串运算符

    运算符说明举例
    =检测两个字符串是否相等,相等返回true[ $a = $b ]
    !=检测两个字符串是否不相等,不相等返回true[ $a != $b ]
    -z检测字符串长度是否为0,为0返回true[ -z $a ]
    -n检测字符串长度是否不为0,不为0返回true[ -n "$a" ]
    $检测字符串是否为空,不为空返回true[ $a ]

    注:方括号内前后都要有空格

     

    7.关系运算符

    关系运算符只支持数字,不支持字符串,除非字符串的值是数字

    运算符说明举例
    -eq (equals)

    检测两个数是否相等,相等返回true

    [ $a -eq $b ]
    -ne (not equals)检测两个数是否不相等,不相等返回true[ $a -ne $b ]
    -gt (greater than)检测左边的数是否大于右边的,如果是,则返回true[ $a -ge $b ]
    -lt (less than)检测左边的数是否小于右边的,如果是,则返回true[ $a -lt $b ]
    -ge (greater equals)检测左边的数是否大于等于右边的,如果是,则返回true[ $a -ge $b ]
    -le (less equals)检测左边的数是否小于等于右边的,如果是,则返回true

    [ $a -le $b ]

    8.shell布尔运算符

    运算符说明举例
    !取反运算[ !false ] 返回true
    -o (or)或运算,有一个表达式为true则返回true[ $a -lt 20 -o $b -gt 100]
    -a (and)与运算,两个表达式都为true才返回true[ $a -lt 20 -a $b -gt 100]

     

    9.shell逻辑运算符

    运算符说明举例
    &&逻辑的AND[[ true && true ]] 返回true
    ||逻辑的OR

    [[ false || false ]] 返回false

    10.shell判断语句

     

    11.shell选择语句

    12.shell循环语句

    for循环

    while循环

    13.shell函数 

  • 相关阅读:
    ensp由于win10 ARP表项未过期导致网络不通排查
    HTML期末学生大作业-节日网页作业html+css+javascript
    8.5 Spring解决循环依赖的机理(AOP)
    文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
    jwt对token的生成以及验证机制
    vue视频播放功能
    http-response返回数据被截断,返回不完全
    hystrix服务降级处理方案
    【Redis】压缩列表
    java+ssm+mysql电梯管理系统
  • 原文地址:https://blog.csdn.net/weixin_61611746/article/details/132310215