Linux基础操作

1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

1、1 cp复制命令

  • 单个文件复制:cp [OPTION]... SOURCE DEST
    如果DEST不存在,则事先创建文件,并复制源文件数据
    如果DEST是非目录文件,则覆盖目录文件
    如果DEST是目录文件,则先在目录文件中创建同名的文件,然后复制源文件数据
  • 多个文件复制:cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...
    如果DEST不存在,报错
    如果DEST是目录文件,则先在目录文件中创建同名的文件,然后复制源文件数据
    示例:
将/etc目录下的issue文件复制到/tmp目录下,并命名为issue.bak
[root@node01 tmp]# cp /etc/issue  /tmp/issue.bak
[root@node01 tmp]# ls -l /tmp/issue.bak 
-rw-r--r--. 1 root root 23 12月 17 15:28 /tmp/issue.bak
[root@node01 tmp]# 

复制/etc目录至tmp目录下
[root@node01 tmp]# cp -R  /etc   /tmp/
[root@node01 tmp]# ls -ld /tmp/etc
drwxr-xr-x. 74 root root 8192 12月 17 15:51 /tmp/etc

1、2 MV移动命令

用法:mv [选项]... [-T] 源文件 目标文件
 或:mv [选项]... 源文件... 目录

  • Rename SOURCE to DEST, 修改源文件名称至目标文件
将issue.bak文件修改文件名为issue_20181217.bak
[root@node01 tmp]# ls -il issue.bak 
67538627 -rw-r--r--. 1 root root 23 12月 17 15:28 issue.bak
mv  issue.bak    issue_20181217.bak
[root@node01 tmp]# ls -il issue_20181217.bak 
67538627 -rw-r--r--. 1 root root 23 12月 17 15:29 issue_20181217.bak
  • move SOURCE(s) to DIRECTORY,移动源文件至目录
将 test.tar.xz文件移动至test目录
[root@node01 tmp]# ls
etc  etc-2018-12-14-11.tar.xz  issue.bak  mem.txt  read.sh  test  test.tar.xz  txt
[root@node01 tmp]# mv test.tar.xz  test
[root@node01 tmp]# ls
etc  etc-2018-12-14-11.tar.xz  issue.bak  mem.txt  read.sh  test  txt
[root@node01 tmp]# ls -l test/test.tar.xz 
-rw-r--r--. 1 root root 1432 12月 13 21:02 test/test.tar.xz

1、3 删除文件和目录

用法:rm [选项]... 文件...
-f, --force 强制删除
-r, 删除目录以及目录下的文件

删除/tmp目录下的mem.txt文件
[root@node01 tmp]# ls
etc  etc-2018-12-14-11.tar.xz  issue.bak  mem.txt  read.sh  test  txt
[root@node01 tmp]# rm  mem.txt
[root@node01 tmp]# ls 
etc  etc-2018-12-14-11.tar.xz  issue.bak  read.sh  test  txt

删除/tmp目录下的txt目录及其中的文件
[root@node01 ~]# cd /tmp/
[root@node01 tmp]# ls
etc  etc-2018-12-14-11.tar.xz  issue.bak  read.sh  test  txt
[root@node01 tmp]# rm -rf txt
[root@node01 tmp]# ls
etc  etc-2018-12-14-11.tar.xz  issue.bak  read.sh  test

1、4 tail命令

用法:tail [选项]... [文件]...
Print the last 10 lines of each FILE to standard output.将文件的最后10行打印到标准输出
-n 打印最后n行
-f 打印随着文件的增长,输出附加数据

打印/etc/passwd文件最后一行
[root@node01 tmp]# tail -1 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

实时查看日志文件的变化输出
[root@node01 tmp]# tail -f /var/log/messages

1、5 head命令

用法:head [选项]... [文件]...
Print the first 10 lines of each FILE to standard output.将文件的开头10行打印到标准输出
-n 打印开头n行

打印/etc/passwd文件开头一行
[root@node01 tmp]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

1.6 find命令

find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

  • 查找起始路径:指定具体搜索目标起始路径,默认为当前目录
  • 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行,默认为找出指定路径下的所有文件
    • 根据文件的从属关系查找
      -user USERNAME 找出属主指定用户的所有文件
      -group RPUNAME 找出属组指定用户的所有文件
      -uid UID 找出属主指定用户UID的所有文件
      -gid GID 找出属组指定用户GID所有文件

    • 根据文件的类型查找
      -type TYPE
      f 普通文件
      d 目录文件
      l 符合链接文件
      b 块设备文件
      c 字符设备文件
      p 管道文件
      s 套接字文件

    • 根据文件大小查找
      -size +。- unit
      常用单位:k,M,G
      根据时间戳查找
      以“天”为单位
      -atime 访问时间
      -mtime 修改时间
      -ctime 改变时间
      以分钟为单位
      -amin
      -mmin
      -cmin

    • 组合测试
      与:-a,默认组合
      或:-o
      非:-not,!
      支持glob风格的通配符 *,?,[],[^]

  • 处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
    -print 输出至标准输出,默认动作
    -ls 类似于对查找到的文件执行ls -l 命令,输出文件的详细信息
    -delete 删除查找到的文件
    -fls 把查找到的所有文件的长格式信息保存至指定的文件中
    -ok command {} ; 对查找到的每个文件有command表示的命令,每次操作需要用户确认
    -exec comomand {} ; 对查找到的每个文件有command表示的命令,不需要用户确认
    注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些命令不能接受过长的参数,为了解决这个问题。用如下命令
    find | xargs command
1、查找/var 目录下属主为root,且属组为mail的所有文件或目录
find /var -user root -a -group mail -ls

2、查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法
find /usr  !   \( -user root -o -user bin -o -user hadoop \)  -ls
find /usr  !    -user root -a -user bin -a -user hadoop   -ls

3、查找/etc/目录下最近一周内其内容修改过的,且属主不是root用户也不是hadoop用户出的文件或目录
find /etc  -mtime -7 -a ! -user root -a !-user hadoop -ls

4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
 find / -nouser -a -nogroup  -atime -7  -exec ls -l {} \;

5、查找/etc目录下大于1M且类型为普通文件的所有文件
find / -size +1M -type f -exec ls -l {} \;

6、查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm /222 -type f -exec ls -l {} \;

7、查找/etc目录至少有一类用户没有执行权限的文件
find /etc ! -perm -111 -type f -exec ls -l {} \;

8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
find /etc  -perm  -113 -type f -exec ls -l {} \;

2、mkdir目录创建

mkdir [OPTION]... DIRECTORY...
-p:自动按需创建父目录
-v:显示详细过程
-m:直接给定权限
注意:路径基名方为命令的作用对象,基名之前的路径必须得存在

使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b
[root@node01 tmp]# mkdir -pv /tmp/{a1/{a,b},a2}
mkdir: 已创建目录 "/tmp/a1"
mkdir: 已创建目录 "/tmp/a1/a"
mkdir: 已创建目录 "/tmp/a1/b"
mkdir: 已创建目录 "/tmp/a2"
[root@node01 tmp]

在/tmp目录下创建目录:x_y, x_z, q_y, q_z
[root@node01 tmp]# mkdir -pv /tmp/{x,q}_{y,z}
mkdir: 已创建目录 "/tmp/x_y"
mkdir: 已创建目录 "/tmp/x_z"
mkdir: 已创建目录 "/tmp/q_y"
mkdir: 已创建目录 "/tmp/q_z"
[root@node01 tmp]# 

3、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

  • 元数据:metadate
    文件元数据包含:inode(index node)、大小、权限、属主属组、时间戳、数据块指针
  • 查看元数据信息:
    stat命令 用法:stat [选项]... 文件...
查看/etc/passwd文件的源数据
[root@node01 tom]# stat /etc/passwd
  文件:"/etc/passwd"
  大小:834        块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:67404619    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2018-12-17 19:21:41.287000000 +0800
最近更改:2018-12-17 19:21:28.354000000 +0800
最近改动:2018-12-17 19:21:28.355000000 +0800
创建时间:-
  • 修改时间戳:
    touch命令 用法:touch [选项]... 文件...
    touch:修改文件时间戳,如果没有该文件就直接创建文件
    -c:指定文件路径不存在时不予创建:
    -a:仅修改访问时间
    -m:仅修改更换时间
    -t:指定更改时间
创建abc.txt
[root@node01 tmp]# touch abc.txt

查看当前时间戳
[root@node01 tmp]# stat abc.txt
  文件:"abc.txt"
  大小:0          块:0          IO 块:4096   普通空文件
设备:fd00h/64768d Inode:67404626    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-12-17 20:19:15.462000000 +0800
最近更改:2018-12-17 20:19:15.462000000 +0800
最近改动:2018-12-17 20:19:15.462000000 +0800
创建时间:-

修改更改时间至2019-12-17 20:20:20
[root@node01 tmp]# touch -m -t 201912172020.20 abc.txt
[root@node01 tmp]# stat abc.txt
  文件:"abc.txt"
  大小:0          块:0          IO 块:4096   普通空文件
设备:fd00h/64768d Inode:67404626    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-12-17 20:19:15.462000000 +0800
最近更改:2019-12-17 20:20:20.000000000 +0800
最近改动:2018-12-17 20:23:40.885000000 +0800
创建时间:-

4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

  • date命令
    用法:date [选项]... [+格式]
    给定的格式FORMAT 控制着输出,解释序列如下:

    %% 一个文字的 %
    %a 当前locale 的星期名缩写(例如: 日,代表星期日)
    %A 当前locale 的星期名全称 (如:星期日)
    %b 当前locale 的月名缩写 (如:一,代表一月)
    %B 当前locale 的月名全称 (如:一月)
    %c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
    %C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
    %d 按月计的日期(例如:01)
    %D 按月计的日期;等于%m/%d/%y
    %e 按月计的日期,添加空格,等于%_d
    %F 完整日期格式,等价于 %Y-%m-%d
    %g ISO-8601 格式年份的最后两位 (参见%G)
    %G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
    %h 等于%b
    %H 小时(00-23)
    %I 小时(00-12)
    %j 按年计的日期(001-366)
    %k hour, space padded ( 0..23); same as %_H
    %l hour, space padded ( 1..12); same as %_I
    %m month (01..12)
    %M minute (00..59)
    %n 换行
    %N 纳秒(000000000-999999999)
    %p 当前locale 下的"上午"或者"下午",未知时输出为空
    %P 与%p 类似,但是输出小写字母
    %r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
    %R 24 小时时间的时和分,等价于 %H:%M
    %s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
    %S 秒(00-60)
    %t 输出制表符 Tab
    %T 时间,等于%H:%M:%S
    %u 星期,1 代表星期一
    %U 一年中的第几周,以周日为每星期第一天(00-53)
    %V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
    %w 一星期中的第几日(0-6),0 代表周一
    %W 一年中的第几周,以周一为每星期第一天(00-53)
    %x 当前locale 下的日期描述 (如:12/31/99)
    %X 当前locale 下的时间描述 (如:23:13:48)
    %y 年份最后两位数位 (00-99)
    %Y 年份
    %z +hhmm 数字时区(例如,-0400)
    %:z +hh:mm 数字时区(例如,-04:00)
    %::z +hh:mm:ss 数字时区(例如,-04:00:00)
    %:::z 数字时区带有必要的精度 (例如,-04,+05:30)
    %Z 按字母表排序的时区缩写 (例如,EDT)

  • $(date +格式)
    引用时间格式作为变量

创建文件名形如:tfile-2016-05-27-09-32-22
touch /tmp/tfile-$(date +"%Y-%m-%d-%H-%M-%S")
[root@node01 tmp]# ls -l tfile*
-rw-r--r--. 1 root root 0 12月 17 17:46 tfile-2018-12-17-17-46-29

5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

[root@node01 mytest1]# cp -R /etc/p*[^0-9] /tmp/mytest1
[root@node01 mytest1]# ls -l
总用量 28
drwxr-xr-x.  4 root root 4096 12月 17 19:12 pam.d
-rw-r--r--.  1 root root  798 12月 17 19:12 passwd
-rw-r--r--.  1 root root  837 12月 17 19:12 passwd-
drwxr-xr-x. 12 root root  142 12月 17 19:12 pki
drwxr-xr-x.  4 root root   54 12月 17 19:12 plymouth
drwxr-xr-x.  7 root root   78 12月 17 19:12 pm
drwxr-xr-x.  4 root root   32 12月 17 19:12 popt.d
drwxr-xr-x.  4 root root  180 12月 17 19:12 postfix
drwxr-xr-x.  5 root root  149 12月 17 19:12 ppp
drwxr-xr-x.  4 root root  104 12月 17 19:12 prelink.conf.d
-rw-r--r--.  1 root root  233 12月 17 19:12 printcap
-rw-r--r--.  1 root root 1795 12月 17 19:12 profile
drwxr-xr-x.  4 root root  273 12月 17 19:12 profile.d
-rw-r--r--.  1 root root 6545 12月 17 19:12 protocols
drwxr-xr-x.  4 root root   61 12月 17 19:12 python

[root@node01 mytest1]# 

6、创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack

[root@node01 mytest1]# getenforce
Enforcing
[root@node01 mytest1]# setenforce 0
[root@node01 mytest1]# getenforce
Permissive
[root@node01 tmp]# useradd  -u 5001 -d /tmp/tom/ -G jack -s /bin/zsh tom
[root@node01 tmp]# grep tom /etc/passwd
tom:x:5001:5001::/tmp/tom/:/bin/zsh
[root@node01 tmp]# grep tom /etc/group
jack:x:1000:tom
tom:x:5001:
[root@node01 tmp]# 

7、常用的用户以及文件管理命令有哪些,并演示命令以及用法。

7、1 用户和组分类

  • 用户类别:
    管理员
    普通用户
    登录用户
    系统用户
    用户标识:UserID,UID
    16bits二进制数字:0-65535
    管理员:0
    普通用户:1-65635
    系统用户:1-499(Centos6),1-999(Centos7)
    登录用户:500-60000(Centos6),1000-60000(Centos7)
    名称解析:名称转换
    Username <----> UID
    根据名称解析库进行:/etc/passwd
  • 组类别1:
    管理员组
    普通用户组
    系统组
    登录组
    组标识:GroupID,GID
    管理员:0
    普通用户:1-65635
    系统用户:1-499(Centos6),1-999(Centos7)
    登录用户:500-60000(Centos6),1000-60000(Centos7)
    名称解析:名称转换
    groupname <----> GID
    根据名称解析库进行:/etc/group
  • 组类别2:
    用户的基本组
    用户的附加组
  • 组类别3:
    私有组:组名同用户名,且只包含一个用户
    公共组:组内包含多个用户

7、2 用户和组管理命令

  • 组管理命令:
    • -groupadd 命令:添加组
      语法:groupadd [option]… group_Name
      选项:-g GID :指定GID;默认是上一个组的GID+1;
      -r :创建系统组;
    • -groupmod 命令:修改组属性
      语法:groupmod [option] group_Name
      选项:-g GID:修改GID
      -n new_name:修改组名;groupmod –n new_name old_name
    • -groupdel 命令:删除组
      语法:groupdel [option] group
  • 用户管理命令:
    • -useradd 命令:创建命令
      语法:useradd [option] userName
      选项:-u, --uid UID:指定UID;
      -g, --gid GROUP:指定基本组ID,此组得事先存在;
      -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
      -c, --comment COMMENT:指明注释信息;
      -d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
      -s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
      -r, --system:创建系统用户;
      useradd -s /sbin/nologin:该用户不能登录
      echo $SHELL :查看当前用户的 shell 类型
      useradd -M USERNAME:创建用户但不创建家目录
      useradd -mk USERNAME:创建用户的同时创建家目录,并复制 /etc/skel 中的内容到家目录中。 如果用户没有家目录,那么不能切换到该用户
      注意:创建用户时的诸多默认设定配置文件为 etc/longin.defs
      Useradd –D:显示创建用户的默认配置
      Useradd –D 选项:修改默认选项的值;
      修改的结果保存于/etc/default/useradd 文件中;
    • -usermod 命令:修改用户属性
      语法:usermod [option]… userName
      选项:-u, --uid UID:修改用户的ID为此处指定的新UID;
      -g, --gid GROUP:修改用户所属的基本组;
      -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖; -a, --append:与-G一同使用,用于为用户追加新的附加组;
      -c, --comment COMMENT:修改注释信息;
      -d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
      -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
      例:Usermod –d /tmp/newhome –m user_name
      -l, --login NEW_LOGIN:修改用户名;
      -s, --shell SHELL:修改用户的默认shell;
      -L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
      -U, --unlock:解锁用户的密码;
      usermod -G -a GROUPS USERNAME:在原有附加组的基础上追加附加组
      usermod -d PATH USERNAME:修改家目录。修改后原先家目录中的文件不能访问了,因为在当前的家目录中并不存在这些文件。
    • -userdel命令:删除用户
      语法:userdel [option] userName
      选项:-r:删除用户时一并删除其家目录;
例1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001);
[root@node01 ~]# groupadd -g 5000 distro
[root@node01 ~]# groupadd -g 5001 peguin
[root@node01 ~]# useradd -u 4001  -G distro,peguin gentoo
[root@node01 ~]# useradd -u 4001  -G distro,peguin gentoo
[root@node01 ~]# id gentoo
uid=4001(gentoo) gid=4001(gentoo) 组=4001(gentoo),5000(distro),5001(peguin)

例2:创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh;
[root@node01 ~]# useradd -c "Fedora Core" -s /bin/tcsh fedora
[root@node01 ~]# grep fedora /etc/passwd
fedora:x:4002:4002:Fedora Core:/home/fedora:/bin/tcsh
 
例3:修改gentoo用户的家目录为/tmp/gentoo;要求其原有文件仍能被用户访问;
[root@localhost ~]# mkdir -p /tmp/gentoo
[root@localhost ~]# usermod  -m -d /tmp/gentoo Gentoo
  • 用户密码管理:
    • -passwd 命令:修改用户的密码
      语法:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
      passwd :修改用户自己的密码
      passwd USERNAME :修改指定用户的密码,但仅root由此权限
      选项:-l, -u:锁定和解锁用户;
      -d:清除用户密码串;
      -e DATE: 过期期限,日期;
      -i DAYS:非活动期限;
      -n DAYS:密码的最短使用期限;
      -x DAYS:密码的最长使用期限;
      -w DAYS:警告期限;
    • --stdin:设定用户密码为用户名
      echo "PASSWORD" | passwd --stdin USERNAME
  • 组密码管理:
    • -gpasswd 命令:修改组密码:
      组密码文件为:/etc/gpasswd
      语法:gpasswd [option] groupName
      选项:-a USERNAME:向组中添加用户
      -d USERNAME:从组中移除用户

7.3 文件权限管理命令

  • -chmod用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件
    语法:chmod [OPTION]... MODE[,MODE]... FILE...
    chmod [OPTION]... OCTAL-MODE FILE...
    chmod [OPTION]... --reference=RFILE FILE...
    文件的三类用户:
    u :属主
    g :属组
    o :其他
    a :所有
    (1) chmod [OPTION]... MODE[,MODE]... FILE...
    MODE表示法:
    赋权表示法:直接操作一类用户的所有权限位rwx;
    u= chmod u=rwx,g=rw,o=r f01
    g=
    o=
    a=
    授权表示法:直接操作一类用户的一个权限位r,w,x;
    u+, u- chmod u+x,g+w file
    g+, g-
    o+, o-
    a+, a-
    (2) chmod [OPTION]... OCTAL-MODE FILE..
    chmod 764 file.
    (3) chmod [OPTION]... --reference=RFILE FILE...
    选项:-R, --recursive:递归修改
    注意:用户仅能修改属主为自己的那些文件的权限;
  • -chown 命令: 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,用户组可以是组名或组[id]文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
    语法:chown [OPTION]... [OWNER][:[GROUP]] FILE...
    chown [OPTION]... --reference=RFILE FILE...
    选项:-R:递归修改
[root@node01 tmp]# mkdir -p /tmp/gentoo_bak
[root@node01 tmp]# chown -R  gentoo:gentoo  /tmp/gentoo_bak/
[root@node01 tmp]# ls  -ld  /tmp/gentoo_bak/
drwxr-xr-x. 2 gentoo gentoo 6 12月 18 17:19 gentoo_bak/
[root@node01 tmp]# 
  • -chgrp 命令:用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的[id]也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
    语法:chgrp [OPTION]... GROUP FILE...
    chgrp [OPTION]... --reference=RFILE FILE...
    注意:仅管理员可修改文件的属主和属组
    参数:-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
    -v或——verbose:显示指令执行过程;
    --reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
将/tmp/gentoo_bak/及其子目录下的文件的组修改为root
chgrp –R root /tmp/gentoo_bak  
[root@node01 tmp]# ls -l gentoo_bak/
总用量 0
-rw-r--r--. 1 gentoo root 0 12月 18 17:24 abc
[root@node01 tmp]# ls -dl gentoo_bak/
drwxr-xr-x. 2 gentoo root 17 12月 18 17:24 gentoo_bak/

思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
回答:不能修改此文件,但能删除此文件

  • 反向掩码
    -umask 命令:文件的权限反向掩码,遮罩码;
    文件的权限反向掩码默认为:666-umask
    目录的权限反向掩码默认为:777-umask
    注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;
    例:若反向掩码umask为: 023
    则创建的文件的权限默认为:666-023=644
    创建的目录的权限默认为:777-023=754

常用用户管理命令示例:

1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,
   要求其没有家目录,且shell为/sbin/nologin;
   尝试root切换至用户,查看其命令提示符;
root@node01 tmp]# useradd  -M s /sbin/nologin  mariadb
[root@node01 tmp]# id mariadb
uid=4003(mariadb) gid=4003(mariadb) 组=4003(mariadb)                     
[root@node01 home]# su - mariadb
su: 警告:无法更改到 /home/mariadb 目录: 没有那个文件或目录
This account is currently not available.

2、新建用户user01,要求其家目录为/usr/user01,密码同用户名;
[root@node01 usr]# useradd -d /usr/user01  user01
[root@node01 usr]# echo “user01” | passwd --stdin user01

3、为用户user01新增附加组mariadb;
[root@node01 ~]# usermod -aG mariadb user01
[root@node01 ~]# id user01
uid=4004(user01) gid=4004(user01) 组=4004(user01),4003(mariadb)
[root@node01 ~]# 

你可能感兴趣的:(Linux基础操作)