文件与文件夹

一、文件的基本操作

文件的增删改查

文件的新建: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 文件或文件名
 查看文件或文件夹的隐藏权限
原文地址:https://www.cnblogs.com/pdun/p/11044813.html