zoukankan      html  css  js  c++  java
  • 文件与文件夹

    一、文件的基本操作

    文件的增删改查

    文件的新建:touch filename
    文件的改名:mv
    文件的查看:ls
    文件内容的查看:cat
    文件的删除:rm     [-r -f]
    文件的拷贝:cp     [-r -f -p]
    文件的移动:mv

     touch命令

    #touch命令   新建文件和修改文件或者文件的时间戳
    
    #命令语法:
          touch  【选项】 【文件名或者目录名】
    
    #命令选项:
          -a  只修改文件的access(访问)时间.
          -c  或—no-create  不创建不存在的文件。
          -d  使用指定的日期时间,而非现在的时间
          -m 指修改Modify(修改)时间,而不修改access(访问)时间
          -r  file  使用指定file文件的时间戳(access,modify)更新文件的时间戳(access,modify)
          -t  将时间修改为参数指定的日期,如:10011150代表10月8号11点55分
    
    #拓展:linux文件的三time
    stat命令:打印信息节点(inode)内容
    atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用。
    mtime: (modify time)显示的是文件内容被修改的最后时间。
    ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变 rm命令
    touch及三time

    rm命令

    rm命令  删除文件
    
    #命令语法
      rm [options] name…
    
    #命令选项
      -i 删除前逐一询问确认。
      -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
      -r 将目录及以下之档案亦逐一删除。
    rm命令

    mv文件改名

    mv命令  文件改名
    命令语法:
          mv  old_file   new_file
    View Code

    文件查看

    #文件类型
    -  普通文件
    d 目录
    l 链接文件
    b 设备文件
    c 字符设备
    s 套接字文件
    p 管道文件
    
    #linux 文件颜色意义
    绿色文件: 可执行文件,可执行的程序 
    红色文件:压缩文件或者包文件
    蓝色文件:目录
    白色文件:一般性文件,如文本文件,配置文件,源码文件等 
    浅蓝色文件:链接文件,主要是使用ln命令建立的文件
    红色闪烁:表示链接的文件有问题
    黄色:表示设备文件
    灰色:表示其他文件

    mv文件移动

    #命令语法:
    mv [选项] 源文件或目录       目标文件或目录
    
    #命令选项
    -b:若需覆盖文件,则覆盖前先行备份。
    -i:若指定目录已有同名文件,则先询问是否覆盖旧文件;
    -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    -u:若目标文件已经存在,且 source 比较新,才会更新(update)
    
    #拓展:mv src dST
        改名 dst是一个文件夹的时候  执行是移动
               dst不是一个文件夹的时候 执行改名
    View Code

    cp命令

    #命令语法  
      cp [options] 源文件或目录    目标目录
    #命令选项  
      -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容  
      -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。  
      -f:覆盖已经存在的目标文件而不给出提示。  
      -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。  
      -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。  
      -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。  
      -l:不复制文件,只是生成链接文件。
    View Code

    文件内容查看

    文件内容查看之cat命令(打印全部到屏幕)

    #cat 命令用于连接文件并打印到标准输出设备上。  
      #命令语法  
           cat [选项列表] [文件列表]
      #命令选项  
      -n 或 --number:        由 1 开始对所有输出的行数编号。  
      -b 或 --number-nonblank:    和 -n 相似,只不过对于空白行不编号。  
      -s 或 --squeeze-blank:        当遇到有连续两行以上的空白行,就代换为一行的空白行。  
      -v 或 --show-nonprinting:    使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。  
      -E 或 --show-ends :         在每行结束处显示 $。  
      -T 或 --show-tabs:         将 TAB 字符显示为 ^I。  
      -A, --show-all:        等价于 -vET。  
      -e:                等价于"-vE"选项;  
      -t:                等价于"-vT"选项;
    View Code

    文件内容查看之head命令(默认打印前10行到屏幕)

    head - 输出文件的开始部分
    命令语法  
          head [OPTION] [FILE]
    命令选项  
      -c, --bytes=SIZE          打印字节的个数  
      -n, --lines=NUMBER        修改打印的行数  
      -q, --quiet, --silent     从不显示给出文件名的首部  
      -v, --verbose             总是显示给出文件名的首部  
      --help                    显示帮助后退出  
      --version                 输出版本信息后退出

    文件内容查看之tail命令(默认打印末尾10行)

    #命令语法  
          tail [OPTION]   [FILE]
    #命令选项  
      -f 循环读取  ,例如,日志一直更像,那么tail也更新
      -v 显示详细的处理信息  
      -c<数目> 显示的字节数  
      -n<行数> 显示文件的尾部 n 行内容
    #延申:
        tail -n +5 FILE 从第5行打印到末尾
    View Code

    二、文件夹的基本操作

    新建文件夹:mkdir
    文件夹改名:mv
    文件夹插卡:ls
    空文件夹的删除:rmdir
    不为空的文件夹的删除:rm -rf     递归删除
    文件夹移动:mv
    文件夹拷贝:cp [-r -p -f]

    mkdir命令

    #命令语法
          mkdir [选项] 目录
    #命令选项
      -v   显示创建信息信息
      -p   递归创建

    rmdir命令

    #命令语法
      rmdir  [options]  directory
    #命令选项
      -p   递归删除空目录

    三、vim文本编辑器

    文本编辑器的模式

    1)命令行模式
    2)输入模式、编辑模式
    3)末行模式
    4)替换模式

     命令行模式

    存盘 ZZ 保存退出
    #光标移动:
    移动光标 h j k l 左 下 上 右 
    光标移到本行开头home 
    移到本行末尾 end 
    光标移到末尾 G 
    光标移到开头gg 
    光标移动一个单词w
    
    #粘贴复制:
    复制一行 yy 复制 n行 nyy
    粘贴 p
    
    #删除:
    删除字符 x 向后删除 X 向前删除
    删除一行 dd ndd
    删除一个单词 dw
    
    #撤销:
    撤销操作 u 向上一步 . 重复上一次操作
    
    #查找:
    查找/string define  转义字符 查找“/bin/bash” //bin/bash
    
    #删除与修改
    “编辑”是指文字的添加、修改以及删除,甚至包括文字区块的移动、复制等。
    在vim 中一般认为输入与编辑是两个概念。
    编辑是在命令模式下进行的,先利用命令移动光标来定位到要进行编辑的地方,然后再使用相应的命令进行编辑;而输入是在插入模式下进行的。
    在命令模式下常用的编辑命令:
    x     删除光标所在字符。
    dd     删除光标所在的行。
    r     修改光标所在字符,r 后是要修正的字符。
    R     进入替换状态,输入的文本会覆盖原先的资料。
    s     删除光标所在字符,并进入输入模式。
    S     删除光标所在的行,并进入输入模式。
    cc     修改整行文字。
    u     撤消上一次操作。
    .     重复上一次操作。
    View Code

    编辑模式

    #输入模式
    在输入模式下,屏幕的左下方会出现INSERT 字样。
    在输入状态下,用户可以输入文本的内容                                                      
    在插入模式下也可以删除字符,而标准的vim 编辑器在编辑状态下不能删除字符,只能插入字符
    
    #如何从命令行模式进入输入模式
    a 从光标所在位置后面开始输入资料,光标后的资料随增加的资料向后移动。
    A 从光标所在行最后面的位置开始输入资料。
    
    #插入(insert)
    i 从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。
    I 从光标所在行的第一个非空白字符前面开始插入资料。
    
    #开始(open)
    o 在光标所在行下新增一行并进入输入模式。
    O 在光标所在行上方新增一行并进入输入模式。
    如何退出输入模式
    esc
    View Code

    末行模式

    #只要在命令模式下输入命令“:”即可进入末行模式。
    在末行模式下,可以进行保存文件、退出vim、进行查找和替换等操作。
    :
    当同时编辑多个文件时  因为同一时间只能显示一个文件,所以在VI中切换打开的文件可以使用N或n来切换打开的文件
    :n 切换下一个文件
    :N 切换上一个文件
    :q 退出
    :q! 强制退出不保存
    :w
    :wq
    #替换
    :s/old/new 只替换光标所在行的第一个old string
    :s/old/new/g 将本行(光标)的所有old string替换为new string   g global  n代表一个#行号
    :%s/old/new/g 将本文中所有的old string替换为new string
    :1,2s/old/new/g 替换1到2行中的old string为new string
    :.,2s/old/new/g .代表光标所在行 当前行到第二行的
    :2,$s/old/new/g 替换2到最后一行中的old string为new string
    :set nu 显示行号
    :set nonu
    :!command 在vim编辑器中执行一条命令(不许要退出当前的编辑,可以在编辑器中执行命令,类似退出编辑器执行命令)
    #查找
    /string                    将光标定位到string 所在的行。
    ?string                    将光标移动到最近的一个包含 string 字符串的行
    :n                          把光标定位到文件的第n 行。
    #保存文档
    可以用:n,mw filename 命令将第n 行到第m 行的文字存放的所指定的filename 文件中。
    View Code

    替换模式

    命令行下按R键进入替换模式
    退出
    esc
    View Code

    用户和组

    Linux用户分类

    #超级管理员:
         UID为0 root用户拥有至高无上的命令,root用户不能改名
    
    #系统用户:
        UID小于1000,用于管理服务,一般不允许登陆
    
    #普通用户:
        UID大于或等于1000,权限较小,允许登陆,只能使用bin下命令
    
    #用户的增删改该查
        useradd
        userdel
        usermod
        /etc/passwd      /etc/shadow   查看两个配置文件

    useradd创建用户

    #语法
    useradd 【选项】 用户名      (注意:用户名不能超过32字符)
      -b, --base-dir BASE_DIR    新账户的主目录的基目录
      -c, --comment COMMENT         描述
      -d, --home-dir HOME_DIR       新账户的家目录
      -D, --defaults        显示或更改默认的 useradd 配置
      -e, --expiredate EXPIRE_DATE  新账户的过期日期
      -f, --inactive INACTIVE       是否启用过期
      -g, --gid GROUP        新账户主组的名称或 ID
      -G, --groups GROUPS    新账户的附加组列表
      -h, --help                    显示此帮助信息并推出
      -k, --skel SKEL_DIR    使用此目录作为骨架目录
      -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
      -l, --no-log-init    不要将此用户添加到最近登录和登录失败数据库
      -m, --create-home    创建用户的主目录
      -M, --no-create-home        不创建用户的主目录
      -N, --no-user-group    不创建同名的组
      -o, --non-unique        允许使用重复的 UID 创建用户
      -p, --password PASSWORD        加密后的新账户密码
      -r, --system                  创建一个系统账户
      -R, --root CHROOT_DIR         chroot 到的目录
      -s, --shell SHELL        新账户的登录 shell
      -u, --uid UID            新账户的用户 ID
      -U, --user-group        创建与用户同名的组
      -Z, --selinux-user SEUSER        为 SELinux 用户映射使用指定 SEUSER
    View Code
    新建以下4个用户
    
    1、user01 UID1500 附属root组 家目录 /tmp/user01 登陆shell/bin/bash
    2、user02 系统用户 不要家目录 不允许交互登陆
    3、user03启用过期 过期时间为2019-6-20
    4、user04 UID为0 GID为0
    useradd练习题
    useradd -u 1500 -G root -m /tmp/user01 -s shell/bin/bash user01
    
    
    useradd -r -M -s /sbin/nologin user02
    
    
    useradd -f 3 -e 2019-6-20 user03     #(这里的3是在禁用时间3天后彻底禁用)
    
    
    useradd -o -u 0 -g 0 user04
    答案

    passwd密码设置

    语法
    passwd [选项] 用户名
    
      
    -l lock             锁定
    -u unlock         解锁
    -d                   删除密码
    -S  This will output a short information about  the  status  of  the password for a given account.
    --stdin标准输入
        echo linux |passwd --stdin vfast    1 > 0
    
    
    
    #交互式修改密码
    root修改用户密码,passwd user03
    用户自己修密码     passwd
    
    #标准输入
    echo '123' |passwd --stdin user03
    View Code

    userdel删除用户

    #删除用户
        userdel [选项] 用户名
        
        -f强制
        -r递归删除
    
    #用户属性的修改
    
        user [选项] 用户名
    
      -c, --comment 注释            GECOS 字段的新值
      -d, --home HOME_DIR           用户的新主目录
      -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
      -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
      -g, --gid GROUP               强制使用 GROUP 为新主组
      -G, --groups GROUPS           新的附加组列表 GROUPS
      -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                    并不从其它组中删除此用户
      -h, --help                    显示此帮助信息并推出
      -l, --login LOGIN             新的登录名称
      -L, --lock                    锁定用户帐号
      -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
      -o, --non-unique              允许使用重复的(非唯一的) UID
      -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
      -R, --root CHROOT_DIR         chroot 到的目录
      -s, --shell SHELL             该用户帐号的新登录 shell
      -u, --uid UID                 用户帐号的新 UID
      -U, --unlock                  解锁用户帐号
      -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射
    View Code

    change修改用户的属性

    -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
    -M 密码保持有效的最大天数。
    -W 用户密码到期前,提前收到警告信息的天数。
    -E 帐号到期的日期。过了这天,此帐号将不可用。
    -d 上一次更改的日期    如果设置为0 用户下次登录必须改密码
    -i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用
    -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
    
    
    #交互式修改(注意是chage,不是change)
    [root@localhost ~]# chage user03
    正在为 user03 修改年龄信息
    请输入新值,或直接敲回车键以使用默认值
    
        最小密码年龄 [0]: 3
        最大密码年龄 [99999]: 365
        最近一次密码修改时间 (YYYY-MM-DD) [2019-06-19]: 
        密码过期警告 [7]: 2
        密码失效 [3]: 2
        帐户过期时间 (YYYY-MM-DD) [2019-06-20]: 2
    [root@localhost ~]# passwd -S user03
    user03 NP 2019-06-19 3 365 2 2 (密码为空。)
    
    
    #非交互式
    [root@localhost ~]# chage -m 10 -M365 -W 3 -I1 -E 2019-06-19 user03
    [root@localhost ~]# passwd -S user03
    user03 NP 2019-06-19 10 365 3 1 (密码为空。)
    View Code

    组管理

    #组的增删改查
        groupadd
        groupdel
        groupmod
        gpasswd组密码

    1、groupadd创建组

    用法:groupadd [选项] 组
    
    选项:
      -f, --force        如果组已经存在则成功退出
                并且如果 GID 已经存在则取消 -g
      -g, --gid GID                 为新组使用 GID
      -h, --help                    显示此帮助信息并推出
      -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
      -o, --non-unique              允许创建有重复 GID 的组
      -p, --password PASSWORD       为新组使用此加密过的密码
      -r, --system                  创建一个系统账户
      -R, --root CHROOT_DIR         chroot 到的目录
    
    
    #例如
    groupadd admin 
    vim /etc/group
    按G切到最后
    View Code

    2、groupmod修改组属性

    #用法:groupmod [选项] 组
    
    #选项:
      -g, --gid GID                 将组 ID 改为 GID
      -h, --help                    显示此帮助信息并推出
      -n, --new-name NEW_GROUP      改名为 NEW_GROUP
      -o, --non-unique              允许使用重复的 GID
      -p, --password PASSWORD    将密码更改为(加密过的) PASSWORD
      -R, --root CHROOT_DIR         chroot 到的目录
    
    #l例子
    groupmod admin -n admin123      将组名修改为admin123
    View Code

    3、gpasswd命令

    #创建修改组密码
        gpasswd 组名
        gpasswd -r 组名   (移除组密码)
    
    
    
    #用法:gpasswd [选项] 组
    
    #选项:
      -a, --add USER                添加用户 
      -d, --delete USER             删除用户
      -h, --help                    显示此帮助信息并推出
      -Q, --root CHROOT_DIR         要 chroot 进的目录
      -r, --delete-password        删除组密码
      -R, --restrict                向其成员限制访问组 GROUP
      -M, --members USER,...        设置组 GROUP 的成员列表
      -A, --administrators ADMIN,...    添加管理员
    
    
    例子
        #创建管理员
            gpasswd -A user01 group123
        #管理员的可以添加和删除成员
            [user06@localhost ~]$ gpasswd -d user02 admin1
            正在将用户“user02”从“admin1”组中删除
            [user06@localhost ~]$ gpasswd -a user02 admin1
            正在将用户“user02”加入到“admin1”组中
    gpasswd命令
    #知道组密码,临时切到某个组
    [root@localhost ~]# useradd user1
    [root@localhost ~]# 
    [root@localhost ~]# su - user1
    
    [user1@localhost ~]$ 
    [user1@localhost ~]$ touch a
    [user1@localhost ~]$ 
    [user1@localhost ~]$ ll
    总用量 0
    -rw-rw-r--. 1 user1 user1 0 6月  19 10:33 a
    [user1@localhost ~]$ 
    [user1@localhost ~]$ newgrp admin1
    密码:
    [user1@localhost ~]$ touch b
    [user1@localhost ~]$ ll
    总用量 0
    -rw-rw-r--. 1 user1 user1  0 6月  19 10:33 a
    -rw-r--r--. 1 user1 admin1 0 6月  19 10:33 b
    
    
    -R不允许别人临时切换到组内
    
    [root@localhost ~]# gpasswd -R admin1
    [root@localhost ~]# 
    [root@localhost ~]# su - user1
    上一次登录:三 6月 19 10:33:22 CST 2019pts/0 上
    [user1@localhost ~]$ 
    [user1@localhost ~]$ newgrp admin1
    密码:
    无效的密码。(输入的是正确的密码)
    newgrp命令 用于临时切换组身份

    4、相关文件

    /etc/passwd
            用户账户信息。
    /etc/shadow
            安全用户账户信息。
    /etc/group
            组账户信息。
    /etc/gshadow
             安全组账户信息。
    /etc/default/useradd
               账户创建的默认值。
    /etc/skel/
               包含默认文件的目录。
    /etc/login.defs
               Shadow 密码套件配置。

    文件与文件夹的权限

    1、基本权限

    1.1chmod命令

    chmod - 改变文件的访问权限
    #命令语法
        chmod [options] mode file...
    #命令选项
        -R 递归设置权限,针对目录有效
    #mode  谁给什么权限
        u(所有者)  g(所属组)   o(其他人)  a(所有人)
    #权限  
        r 读  w 写   x 执行
    
    方式一通过 + - =
          使用+-改权限,直接按需求加减即可+—  
    
    修改文件a的权限
    [root@localhost ~]# ll a 
    -rw-rw----. 1 root root 0 6月  19 19:26 a
    [root@localhost ~]# chmod o+r a
    [root@localhost ~]# ll a
    -rw-rw-r--. 1 root root 0 6月  19 19:26 a
    [root@localhost ~]# 
    [root@localhost ~]# chmod g-w,u+x a      #多个命令间用,号
    [root@localhost ~]# ll a
    -rwxr--r--. 1 root root 0 6月  19 19:26 a
        
            使用=
    
    [root@localhost ~]# ll b
    -rwxrwxr-x. 1 root root 0 6月  19 19:26 b
    [root@localhost ~]# chmod u=rw,g=rw,o=rw b
    [root@localhost ~]# 
    [root@localhost ~]# ll b
    -rw-rw-rw-. 1 root root 0 6月  19 19:26 b
    
    
    
    方式二,数字权限
        r 读 4
        w 写 2
        x 执行 1
    
    [root@localhost ~]# ll c
    -rwxr--r--. 1 root root 0 6月  19 19:26 c
    [root@localhost ~]# chmod 644 c
    [root@localhost ~]# ll c
    -rw-r--r--. 1 root root 0 6月  19 19:26 c
    两种修改权限的方式

    1.2 chown命令

    #chown 修改文件或文件夹所有者
    #命令语法
    chown [options] user [:group] file...
    #命令选项
        -R 递归设置,针对文件夹
    chown 新所有者  文件名
    chown   新的所有者.新的所属组  文件名
    -R 递归修改
    #修改权限
    [root@localhost ~]# mkdir doc
    [root@localhost ~]# mv a b c doc/
    [root@localhost ~]# 
    [root@localhost ~]# ll doc/
    总用量 0
    -rwxr--r--. 1 root root 0 6月  19 19:26 a
    -rw-rw-rw-. 1 root root 0 6月  19 19:26 b
    -rw-r--r--. 1 root root 0 6月  19 19:26 c
    #[root@localhost ~]# chmod -R 755 doc
    [root@localhost ~]# 
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
    ----------------------------------------------------------------------------
    #修改所有者
        #修改单个文件所有者
    [root@localhost ~]# cd doc/
    [root@localhost doc]# 
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
    #[root@localhost doc]# chown user1 a
    [root@localhost doc]# ll
    总用量 0
    #-rwxr-xr-x. 1 user1 root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root  root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root  root 0 6月  19 19:26 c
        #修改所有文件所有者
    [root@localhost ~]# cd doc/
    [root@localhost doc]# 
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
    [root@localhost doc]# chown user1 a
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 user1 root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root  root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root  root 0 6月  19 19:26 c
    
    ------------------------------------------------
    #修改所有组(所有者点后边的是组名)  
        #改所有(只改组)
    [root@localhost ~]# chown -R user1.admin123 doc
    [root@localhost ~]# 
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 user1 admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 user1 admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 user1 admin123 0 6月  19 19:26 c
                
        #改所有(所有者和组一起改)
    #[root@localhost ~]# chown -R root.root doc
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
         
         #改所有(直接点也行)
    #[root@localhost ~]# chown -R .admin123 doc
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    
    
        #2修改单个
    [root@localhost ~]# cd doc
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    [root@localhost doc]# chown .root a
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root root     0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    chown修改权限,修改所有者,修改组

    1.3chgrp命令(change group)

    #chgrp  改变所属的组
    #命令语法
        chgrp [选项] 组文件...
    #命令选项
        -R 递归设置权限,针对目录有效
    chgrp 新所有组  文件名
    chown   .新的所属组  文件名
    #改所有
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 root root     0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    #[root@localhost ~]# chgrp -R root doc
    [root@localhost ~]# ll doc
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
    
    #自定义更改个数
    [root@localhost ~]# cd doc
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root 0 6月  19 19:26 c
    [root@localhost doc]# chgrp admin123 a   (#可以指定 两个或多个)
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root root     0 6月  19 19:26 b
    -rwxr-xr-x. 1 root root     0 6月  19 19:26 c
    使用chgrp修改组

    2、特殊权限

    #linux特殊权限 7 777
    
    #suid 4    
        当一个二进制文件拥有SUID权限后,当其他用户执行该二进制文件的时候,该二进制文件就会以他所有者的权限去执行
    #sgid 2   
        要求文件夹下的新建的子文件夹或者子文件继承父文件夹的属组
    #sticky bit  1
        如果给文件夹 赋予粘连位  则该文件夹下的文件或文件夹只能由所有者及ROOT删除
    [root@localhost ~]# useradd a1
    [root@localhost ~]# su - a1
    #[a1@localhost ~]$ shutdown -r now          #要求立马重启,
    User root is logged in on sshd.                     #只有root才有这个权限
    User root is logged in on tty1.
    #Please retry operation after closing inhibitors and logging out other users.
    Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.
    
    
    [a1@localhost ~]$ exit
    [root@localhost ~]# ll /sbin/shutdown
    lrwxrwxrwx. 1 root root 16 6月  14 04:14 /sbin/shutdown -> ../bin/systemctl
    
    [root@localhost ~]# ll /bin/systemctl
    -rwxr-xr-x. 1 root root 717688 10月 31 2018 /bin/systemctl
    此时发现权限是755
    
    [root@localhost ~]# chmod 4755 /bin/systemctl      #修改了权限
    
    
    [root@localhost ~]# ll /bin/systemctl
    -rwsr-xr-x. 1 root root 717688 10月 31 2018 /bin/systemctl        
    此时权限是4755      (相当于,此时任何人来操作改文件,都会认为是root在操作)
    
    [root@localhost ~]# su a1
    [a1@localhost root]$ shutdown -r +10      #10分钟后重启
    可以执行重启
    Shutdown scheduled for 三 2019-06-19 21:46:08 CST, use 'shutdown -c' to cancel.
    [a1@localhost root]$ shutdown -c          #关闭上边的重启命令
     
    suid 4使用介绍
    [root@localhost ~]# cd doc      
    [root@localhost doc]# ll
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a         #(doc的属组为admin123)
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    [root@localhost doc]# touch d         #创建一个文件d 
    [root@localhost doc]# ll                   
    
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    -rw-r--r--. 1 root root     0 6月  19 21:54 d            #d文件属组是root
    
    怎么让创建的文件和doc(父文件)属组相同呢
    
    [root@localhost doc]# cd ~
    [root@localhost ~]# chmod 2755 doc          #修改了权限
    
    [root@localhost ~]# ll -d doc
    drwxr-sr-x. 2 root admin123 42 6月  19 21:54 doc       #多了一个s,
    [root@localhost ~]# 
    [root@localhost ~]# cd doc
    
    [root@localhost doc]# touch e        #新建文件e
    [root@localhost doc]# ll
    总用量 0
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 a
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 b
    -rwxr-xr-x. 1 root admin123 0 6月  19 19:26 c
    -rw-r--r--. 1 root root     0 6月  19 21:54 d
    -rw-r--r--. 1 root admin123 0 6月  19 21:57 e     #e的属组与父文件夹相同
    [root@localhost doc]# 
    View Code
    #粘连位一般用于公共目录上,
    [root@localhost ~]# mkdir /opt/publish            #创建一个公共文件夹
    [root@localhost ~]# chmod 777 /opt/publish     #修改文件夹的权限
    
    [root@localhost ~]# ll -d /opt/publish/
    drwxrwxrwx. 2 root root 6 6月  19 22:06 /opt/publish/
    
    [root@localhost ~]# useradd us01                #创建两个用户
    [root@localhost ~]# useradd us02
    
    [root@localhost ~]# su - us01                     #切入用户1
    [us01@localhost ~]$ cd /opt/publish/            #进入公共文件夹
    
    
    [us01@localhost publish]$ touch x0           #在文件夹下创建两个文件
    [us01@localhost publish]$ touch x1
    
    [us01@localhost publish]$ exit                 
    登出
    
    [root@localhost ~]# su - us02            #切入用户2
    
    [us02@localhost ~]$ cd /opt/publish/     #进入公共文件夹
    [us02@localhost publish]$ 
    [us02@localhost publish]$ ll                    #查看公共文件夹的内容
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:09 x0
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:10 x1
    
    [us02@localhost publish]$ touch x2 x3      #用户2 创建两个文件夹
    
    [us02@localhost publish]$ ll
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:09 x0
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:10 x1
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x2
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x3
    
    [us02@localhost publish]$ rm -rf x1        #用户2把用户1创建文件删除
    [us02@localhost publish]$ 
    [us02@localhost publish]$ ll
    总用量 0
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:09 x0
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x2
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x3
    
    [us02@localhost publish]$ exit
    登出
    
    [root@localhost ~]# chmod 1755 /opt/publish/       
    #修改权限,权限修改后,文件只能由创建者删除
    [root@localhost ~]# 
    [root@localhost ~]# ll -d /opt/publish/
    drwxr-xr-t. 2 root root 40 6月  19 22:13 /opt/publish/
    [root@localhost ~]# 
    [root@localhost ~]# 
    [root@localhost ~]# su us02
    [us02@localhost root]$ 
    [us02@localhost root]$ ll
    ls: 无法打开目录.: 权限不够
    [us02@localhost root]$ cd /opt/publish/
    [us02@localhost publish]$ 
    [us02@localhost publish]$ ll
    总用量 0
    -rw-rw-r--. 1 us01 us01 0 6月  19 22:09 user08
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x2
    -rw-rw-r--. 1 us02 us02 0 6月  19 22:12 x3
    [us02@localhost publish]$ rm -rf x2 x3
    rm: 无法删除"x2": 权限不够
    rm: 无法删除"x3": 权限不够
    View Code

    3、file ACL权限

    #个性化定制权限
    例如场景, 
    root   rw-
    root   r--
    other  r--
    
    需要把用户user1,user2  添加权限为rwx
    把组admin123添加权限 rw-

    3.1getfacl与setfacl命令

    #getfacl 查看文件权限
    #命令语法
        getfacl  file...
    
    
    #setfacl 修改文件权限
    #命令语法
        setfacl [选项] file...
    #命令选项
        -m 修改acl
        -x 删除acl
        -b 删除所有acl
        -k 删除默认的acl
        -R 递归
    [root@localhost ~]# getfacl top
    # file: top
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    
    [root@localhost ~]# setfacl -m group:admin123:rwx top
                                                 #给组改
    [root@localhost ~]# setfacl -m user:user1:rwx top
                                                 #给用户改
    练习1
    #场景,两个用户,对一个添加权限
    
    [root@localhost ~]# useradd user11  
    [root@localhost ~]# useradd user22         #创建两个用户
    
    [root@localhost ~]# touch /opt/file1
    [root@localhost ~]# chmod 600 /opt/file1       #创建文件夹,并仅对管理员附加权限
    
    
    [root@localhost ~]# su - user11
    [user11@localhost ~]$ cd /opt/
    [user11@localhost opt]$ cat file1
    cat: file1: 权限不够
    [user11@localhost opt]$ 
    [user11@localhost opt]$ exit           #切换带user1查看创建的文件,没有权限
    登出
    [root@localhost ~]# 
    [root@localhost ~]# setfacl -m user:user11:rw /opt/file1       #添加权限
    [root@localhost ~]# 
    [root@localhost ~]# su - user11
    [user11@localhost ~]$ cat /opt/file1             #可以查看
    [user11@localhost ~]$ 
    [user11@localhost ~]$ exit
    登出
    [root@localhost ~]# 
    [root@localhost ~]# su - user22            #user22没有权限
    [user22@localhost ~]$ 
    [user22@localhost ~]$ cat /opt/file1 
    cat: /opt/file1: 权限不够
    [user22@localhost ~]$ 
    练习2

    4、隐藏权限

    chatter命令

    chattr [+-=][ASacdistu] 文件或文件名
     命令选项:
            + : 增加某个特殊参数,其他原本存在的参数不动。
            - : 删除某个特殊参数,其他原本存在的参数不动。
            = : 设置一定,且仅有后面接的参数
            A : 当设置了A属性时,这个文件(或目录)的存取时间atime(access)将不可被修改,可避免例如手提电脑有磁盘I/O错误的情况发生。
            S : 这个功能有点类似sync。就是将数据同步写入磁盘中。可以有效地避免数据流失。
            a : 设置a之后,这个文件将只能增加数据,而不能删除,只有root才能设置这个属性。
            c : 这个属性设置之后,将会自动将此文件“压缩”,在读取的时候将会自动解压缩,但在存储的时候,将会先进行压缩后再存储(对于大文件有用)。
            d : 当执行dump(备份)程序的时候,设置d属性将可使该文件(或目录)具有转储功效。
            i : i的作用很大。它可以让一个文件“不能被删除、改名、设置连接,也无法写入或新增数据”。对于系统安全性有相当大的帮助。
            j : 当使用ext3文件系统格式时,设置j属性将会使文件在写入时先记录在journal中。但是,当文件系统设置参数为data=journalled时,由于已经设置日志了,所以这个属性无效。
            s : 当文件设置了s参数时,它将会从这个硬盘空间完全删除。
            u : 与s相反,当使用u来设置文件时,则数据内容其实还存在磁盘中,可以用来还原删除.
                注意:这个属性设置上,比较常见的是a与i的设置值,而且很多设置值必须要root才能设置。

    4.2lsattr命令

     lsattr 文件或文件名
     查看文件或文件夹的隐藏权限
  • 相关阅读:
    java 常用第3方工具
    反射与内省
    UDP通讯协议实例
    多线程及线程并发库Executors
    Deque 双端队列 Stack 堆栈
    Collections工具类
    Map 接口
    PHP控制电脑重启 关机
    ThinkPHP框架研究之一 基本函数 M和D的区别
    textarea输入输出的处理
  • 原文地址:https://www.cnblogs.com/pdun/p/11044813.html
Copyright © 2011-2022 走看看