本文章最初发布在 XJHui’s Blog,未经允许,任何人禁止转载!

注意:最新修改版本已发布在 这里,点击前往查看!

时间日期类

date日期

  1. 语法:

    1
    2
    3
    date  # 显示当前时间
    date "+%Y" # 显示当前年份
    date "+%Y-%m-%d %H:%M:%S" # 格式化显示当前年月日时分秒,其中-、:可以任意修改
  2. 案例:

    • 显示当前时间:

      1
      date

      运行结果:

    • 显示年月日时分秒:

      1
      date "+%Y-%m-%d %M:%D:%S"

      运行结果:

date设置

  1. 语法:

    1
    date -s '年-月-日 时:分:秒'  # 设置日期,必须按照此格式设置时间
  2. 案例:将日期设置为2020-10-01 0:0:0

    1
    date -s '2020-10-01 00:00:00'

    运行结果:

cal日历

  1. 语法:

    1
    cal year[可选,显示该年份日历]  # 显示本月/指定年份的日历
  2. 案例:显示2024年日历

    1
    cal 2024

    运行结果:

搜索查找类

find

  1. 语法:

    1
    find 搜索范围 -name,-user,-size[可选一项] 文件名  # 查找文件
  2. 案例:

    • 在/root目录下查找名称为c.txt的文件:

      1
      find /root/ -name c.txt  # 通配符也适用
    • 查找所有者为root用户的文件:

      1
      find /root/ -user root

      运行结果:

    • 查找整个linux系统下大于20m的文件(+n大于,-n小于,n等于)

      1
      find / -size +20M  # 注意:单位为M、k等

      运行结果:

locate

  1. 语法:

    1
    locate 搜索文件  # 快速定位文件路径

    注意:locate基于数据库进行查询,所以在第一次运行前要执行updatedb命令以更新数据库

  2. 案例:使用locate指令快速定位hello.txt文件所在目录

    1
    2
    updatedb  # 更新(创建)数据库
    locate hello.txt

    运行结果:

grep和|

  1. 语法:

    1
    2
    3
    grep 字符串  # 查找指定内容
    grep -n 字符串 # 查找指定内容并显示行号
    grep -i 字符串 # 不区分大小写
  2. 案例:在hello.txt中查找所有yes并显示行号

    • hello.txt内容:

    • 代码:

      1
      cat hello.txt | grep -ni yes

      运行结果:

压缩和解压类

gzip和gunzip

  1. 语法:

    1
    2
    gzip 文件  # 将文件压缩为.gz文件,后跟多个文件名即可压缩多个文件
    gunzip 文件.gz # 将.gz后缀的文件解压
  2. 案例:

    • 将/root下的hello.txt文件压缩:

      1
      gzip hello.txt

      运行结果:

    • 将hello.txt.gz文件解压缩:

      1
      gunzip hello.txt.gz

      运行结果:

      注意:gzip只能用来压缩文件不能用来压缩目录,即使使用-r选项指定目录,也只能递归将目录下文件分别压缩

zip和unzip

  1. 语法:

    1
    2
    zip -r[可选,递归压缩] 压缩包名 文件  # 压缩文件目录
    unzip -d[可选,指定压缩后的位置] 文件.zip # 解压.zip后缀的文件
  2. 案例:

    • 将/home目录下的所有文件压缩为mypackage.zip:

      1
      zip -r mypackage.zip /home/  # 注意:压缩包名在原目录前面

      运行结果:

    • 将mypackage.zip解压到/opt/tmp:

      1
      unzip -d /opt/tmp mypackage.zip  # 注意:解压位置在压缩包前面

      运行结果:

tar

  1. 语法:

    1
    tar [可选项,见下图] ***.tar.gz 要打包的内容(可为多个文件、目录)  # 压缩文件或目录

    可选项:

  2. 案例:

    • 压缩多个文件,将/root/a.txt,/root/b.txt文件压缩成a_b.tar.gz:

      1
      tar -zcvf a_b.tar.gz a.txt b.txt

      运行结果:

    • 压缩/home下的所有文件(非压缩/home目录):

      1
      tar -zcvf test.tar.gz /root/*  # 要区分/root/和/root/*
    • 解压a_b.tar.gz到当前目录:

      1
      tar -zxvf a_b.tar.gz 
    • 解压a_b.tar.gz到/opt/tmp下:

      1
      tar -zxvf a_b.tar.gz -C /opt/tmp/  # 注意:指定路径需要在路径前添加参数-C(大写),并且路径必须存在

组的管理

组的介绍

  1. 概述:在linux中的每个用户必须属于一个组,不能独立于组外。
  2. 文件/目录:
    • 所有者:文件归属的用户
    • 所在组:所有者所在的用户组的用户
    • 其他组:非所在组的其它用户

所有者

  1. 查看文件所有者

    • 定义:一般为文件的创建者,谁创建了该文件,就自然成为该文件的创建者。

    • 语法:

      1
      ls -ahl  # 查看文件所有者,a(显示全部文件),h(human,使用M,k作为文件大小单位显示),l(列表显示)
    • 案例:创建一个组police,再创建一个用户tom属于组police,然后使用tom来创建一个文件

      1
      2
      3
      4
      5
      6
      groupadd police  # 创建police用户组
      useradd -g police tom # police用户组下创建用户tom
      passwd tom # 设置用户tom的密码
      # 使用tom用户登录服务器
      touch 1.txt # 创建文件1.txt
      ls -ahl # 使用ls命令查看1.txt文件的所有者

      运行结果:

  2. 修改文件所有者:

    • 语法:

      1
      chown 用户 文件  # 将文件所有者修改为用户
    • 案例:使用root创建一个apple.txt的文件,将其所有者修改为tom

      1
      2
      3
      4
      touch apple.txt  # root账户下创建apple.txt文件
      ls -ahl # 查看该文件所有者信息
      chown tom apple.txt # 将apple.txt文件的所有者修改为tom
      ls -ahl # 再次查看该文件所有者信息

      运行结果:

      注意:虽然所有者改变了,但修改前后用户所在组均为root,所以仅修改所有者不会改变其所在组。

所在组

  1. 定义:当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组

  2. 语法:

    1
    2
    ls -ahl  # 查看文件所在组
    chgrp 用户组 文件 # 修改文件所在组为用户组
  3. 案例:/root下创建文件aorange.txt文件,使用chgrp指令修改文件所在组为police

    1
    2
    3
    4
    touch aorange.txt  # 创建文件
    ls -ahl # 查看文件所在组
    chgrp police aorange.txt # 修改文件所在组
    ls -ahl # 再次查看文件所在组

    运行结果:

  4. 同时修改文件所有者和所在组:

    • 语法:

      1
      2
      3
      chown -R 用户 文件  # 单独使用chown
      chgrp -R 用户组 文件 # 单独使用chgrp
      chown -R[可选,递归修改所有文件所有者和所在组] 用户:所在组 文件 # 同时修改文件所有者和所在组
    • 案例:修改/home/tom下文件的所有者和所在组为tom

      1
      chown -R tom:tom tom/

      运行结果:

其他组

​ 定义:除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组

权限的管理

权限介绍

rwx权限

  1. 作用到文件:

    • r(read):可查看
    • w(write):可修改,但不代表具有删除的权限(对文件所在目录具有w权限时,才可删除)
    • x(execute):可被执行
  2. 作用到目录:

    • r:可读,ls查看目录内容
    • w:可写,目录内创建、删除、重命名
    • x:可执行,cd进入该目录
  3. 注意:关于子目录数量

修改权限

  1. 说明:使用chmod指令,可以修改文件或者目录的权限

  2. 使用+、-、=变更权限:

    • 语法:

      1
      2
      3
      4
      # u:所有者,g:所在组,o:其他组,a:所有用户(u+g+o)
      chmod u=rwx,g=x,o=x 文件/目录名 # 给文件/目录赋权限
      chmod o+w 文件/目录名 # 给文件/目录的其他组(o)添加一个写(w)权限
      chmod a-x 文件/目录名 # 给文件/目录的所有用户都减一个执行权限
    • 案例:

      • 给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组用户执行权限

        1
        chmod u=rwx,g=rx,u=x abc

        运行结果:

      • 给abc文件的所有者除去执行权限,给所在组增加一个写的权限

        1
        chmod u-x,g+w abc

        运行结果:

      • 给abc所有用户增加读的权限

        1
        chmod a+w abc

        运行结果:

  3. 使用数字变更权限:

    • 语法:

      1
      2
      # 规则:r=4,w=2,x=1
      chmod 751 abc # 等价于chmod u=rwx,g=rx,o=x abc
    • 案例:给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组用户执行权限

      1
      2
      # u=rwx(7),g=wx(3),o=x(1)
      chmod 731 abc

      运行结果:

最佳实践

警察和土匪

  1. 题设:

    1
    2
    3
    police,bandit  # 用户组
    jack,jerry # 警察用户
    xh,xq # 土匪用户
  2. 题目:

    • 创建组

      1
      2
      groupadd police
      groupadd bandit
    • 创建用户

      1
      2
      3
      4
      5
      6
      7
      8
      useradd -g police jack
      passwd jack
      useradd -g police jerry
      passwd jerry
      useradd -g bandit xh
      passwd xh
      useradd -g bandit xq
      passwd xq
    • 使用jack用户登录并创建一个文件,自己可以读写,本组人可以读,其他组没有任何权限

      1
      2
      touch a1.txt
      chmod 640 a1.txt

      运行结果:

    • jack修改文件权限,让其他组人可以读,所在组用户可以写

      1
      chmod o+r,g+w a1.txt

      运行结果:

      验证同组可以修改:

      • jerry账号登录并尝试进入/home/jack目录下:

        1
        cd /home/jack/

        运行结果:

        原因:

        注意:这个很好理解,在自己家里有权限但在整栋楼不一定有权限

      • 使用jack账户修改/home/jack文件的权限:

        1
        chmod 750 jack/

        运行结果:

        注意:为什么给所在组5的权限?因为需要进入(x:1)和查看(r:4),所以总权限是4+1=5

      • 再次尝试修改a1.txt文件内容:

    • xh投靠警察,看看是否可以读写

      • 修改xh的所在组:

        1
        usermod -g police xh  # 注意:修改某个用户所在组需要root账户下操作
      • 尝试读写a1.txt文件:


不足之处,欢迎留言,会及时回复,及时更正!

创作不易,感谢支持!