一、 Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
1、 文件查看类命令cat,tac, head, tail, more, less, ls ,file:
-ls : list,列出指定目录下的内容
使用语法:ls [option]… [file]…
参数:-a 显示所有文件,包括隐藏文件;
-A 显示除.和..之外的所有文件;
-l –long,长葛市列表,即显示文件的详细属性信息;
例:-rw-r--r--. 1 root root 8957 10月 14 19:34 boot.log
l:文件类型,-:常规文件;即f;
d: directory,目录文件;
b: block device,块设备文件,支持以“block”为单位进行随机访问
c:character device,字符设备文件,支持以“character”为单位进行线性访问
major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序
minor number:次设备号,用于标识同一类型中的不同的设备;
8位二进制:0-255
l:symbolic link,符号链接文件;
p: pipe,命名管道;
s: socket,套接字文件;
rw-r--r--
rw-:文件属主的权限;
r--:文件属组的权限;
r--:其它用户(非属主、属组)的权限;
1:数字表示文件被硬链接的次数;
root:文件的属主;
root:文件的属组;
8957:数字表示文件的大小,单位是字节;
10月 14 19:34 :文件最近一次被修改的时间;
boot.log:文件名
-h, --human-readable:对文件大小单位换算;换算后结构可能会非精确值。
-d 查看目录自身而非其内部的文件列表;
-r reverse,逆序显示;
-R recursive,递归显示;
-cat: 正向查看文件内容
使用语法:cat [option]… [file]…
参数:-n 给显示的文本行编号;
-E 显示行结束符$;
例:cat -n /etc/passwd
cat –E /etc/shadow
-tac:逆向查看文件内容
使用语法:tac [OPTION]... [FILE]...
参数:-n 给显示的文本行编号;
-E 显示行结束符$;
例:tac -n /etc/passwd
tac –E /etc/shadow
-file:查看文件内容类型
使用语法:file [file]…
例:
[root@localhost ~]# file /etc/passwd
/etc/passwd: ASCII text
分屏查看文件内容命令:more , less
-more命令:分屏显示文本内容,每次显示一屏显示完停止;
语法:more [option] file
Space键:显示文本下一屏内容;
Enter键:显示文本下一行内容;
b键:显示文本上一屏内容;
q键:退出;
特点:翻屏至文件尾部自动退出
-less命令:分屏显示文本内容,不主动退出
语法:less [option] file
Space键:显示文本下一屏内容;
Enter键:显示文本下一行内容;
b键:显示文本上一屏内容;
q键:退出;
-head命令:查看文件的前n行;(默认显示前10行)
语法:head [option] file
参数:-n 查看文件的前n行
-tail命令:查看文件的后n行:(默认显示后10行)
语法:tail [option] file
参数:-n查看文件的后n行
-f 查看文件尾部内容结束后不退出,跟随显示新增的行。
2、 创建目录、文件:
-mkdir :创建目录;
语法:mkdir [option]… directory…
参数:-p 自动按需创建父目录;
-m 创建目录是给定权限;
-v verbose,显示详细过程;
注意:路径基名方为命令的作用对象;基名之前的路径必须得存在;
例:[root@localhost ~]# mkdir -p -m 755 /tmp/mktest/test1/test
-touch : 一、用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;
二、是用来创建新的空文件。
语法:touch [option]… [file]
参数:-c 制定的文件路径不存在时不予创建
-a 仅修改access time
-m:仅修改modify time;
-t:使用指定的日期时间,格式[[CC]YY]MMDDhhmm[.ss](access time和modify time为指定时间,change time为当前系统时间)
-rmdir :删除空目录
语法:rmdir [option]… [directory]
参数:-p 删除目录后,如果其父目录为空,则一并删除;
-v 显示过程
例1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
[root@localhost ~]# mkdir -pv /tmp/x/{y1/{a,b},y2}/
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory ‘/tmp/x/y1/a/’
mkdir: created directory ‘/tmp/x/y1/b/’
mkdir: created directory ‘/tmp/x/y2/’
例2:如何创建a_c, a_d, b_c, b_d;
[root@localhost ~]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: created directory ‘/tmp/a_c’
mkdir: created directory ‘/tmp/a_d’
mkdir: created directory ‘/tmp/b_c’
mkdir: created directory ‘/tmp/b_d’
例3:如何删除例2中创建的目录;
[root@localhost ~]# cd /tmp
[root@localhost tmp]# rmdir -pv {a,b}_{c,d}
rmdir: removing directory, ‘a_c’
rmdir: removing directory, ‘a_d’
rmdir: removing directory, ‘b_c’
rmdir: removing directory, ‘b_d’
3、 文件管理工具:cp 、mv 、rm
-cp 命令:复制copy
语法:单源复制:cp [OPTION]... [-T] SOURCE DEST
多源复制:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
单源复制:cp [OPTION]... [-T] SOURCE DEST
如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
如果DEST存在:
如果DEST是非目录文件:则覆盖目标文件;
如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
多源复制:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
如果DEST不存在:错误;
如果DEST存在:
如果DEST是非目录文件:错误;
如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
常用选项:
-i:交互式复制,即覆盖之前提醒用户确认;
-f:强制覆盖目标文件;
-r, -R:递归复制目录;
-d:复制符号链接文件本身,而非其指向的源文件;
-a:-dR --preserve=all, archive,用于实现归档;
--preserv=
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
-mv 命令:移动或重命名
语法:单源复制:mv [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
多源复制:mv [OPTION]...
SOURCE... DIRECTORY(DEST必须为directory)
参数:-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
例:mv -i /data/[1-3].txt /practice
#把/data目录下三个txt文件剪切到/practice下
-rm 命令:删除
语法:rm [option]… [file]…
参数:-i交互式删除,即删除前提醒用户确认
-f 强制删除目标文件
-r -R:递归处理,将制定目录下的所有文件包括目录一并删除
例:rm -rf
/PATH/TO/DIR
危险操作:rm -rf /*
2、使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z
[root@localhost tmp]#
mkdir -vp /tmp/{a1/{a,b},a2}
mkdir: created
directory ‘/tmp/a1’
mkdir: created
directory ‘/tmp/a1/a’
mkdir: created directory ‘/tmp/a1/b’
[root@localhost tmp]#
mkdir -vp /tmp/{x,y}_{q,z}
mkdir: created
directory ‘/tmp/x_q’
mkdir: created
directory ‘/tmp/x_z’
mkdir: created
directory ‘/tmp/y_q’
mkdir: created directory ‘/tmp/y_z’
二、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
1、Linux文件的数据分为两类,一类为数据,即文件的实际内容(数据);一类为元数据,用来描述文件的特征(描述数据的属性);
2、查看文件的元数据命令:stat,如下图例:
[root@localhost tmp]#
stat /etc/shadow
File: ‘/etc/shadow’
Size: 1341 Blocks:
8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195163 Links: 1
Access:
(0000/----------) Uid: ( 0/
root) Gid: ( 0/
root)
Context:
system_u:object_r:shadow_t:s0
Access: 2018-11-26
00:11:03.342000329 +0800
Modify: 2018-11-19
00:21:57.403464776 +0800
Change: 2018-11-19
00:21:57.406464776 +0800
Birth: -
解释:文件的元数据包括:文件名(File)、大小(Size)、数据块(Blocks)、IO块(IO
Block)、设备(Device)、节点号(Inode)、硬链接(Links)、权限(Access)、文件所属主(Uid)、文件所属组(Gid)、最近访问时间(Access
Time)、最近文件修改时间(Modify Time)、最近文件属性更改时间(Change
Time);
3、
修改文件的时间戳可使用-touch 命令
-touch :
一、用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;
二、是用来创建新的空文件。
语法:touch [option]…
[file]
参数:-c 指定的文件路径不存在时不予创建
-a 仅修改access time
-m:仅修改modify time;
-t:使用指定的日期时间,格式[[CC]YY]MMDDhhmm[.ss](access time和modify time为指定时间,change time为当前系统时间)
例1、通过添加用户,系统自动修改了passwd的Access Time、Modify Time、Change Time
[root@localhost tmp]# stat
/etc/passwd
File: ‘/etc/passwd’
Size: 2333 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195160 Links: 1
Access: (0644/-rw-r--r--) Uid: (
0/ root) Gid: (
0/ root)
Context:
system_u:object_r:passwd_file_t:s0
Access: 2018-11-25
11:06:28.278012816 +0800
Modify: 2018-11-19
00:21:57.399464775 +0800
Change: 2018-11-19
00:21:57.402464776 +0800
Birth: -
[root@localhost tmp]# useradd magedu
[root@localhost tmp]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 2376 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195159 Links: 1
Access: (0644/-rw-r--r--) Uid: (
0/ root) Gid: (
0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-11-26
03:47:33.715883162 +0800
Modify: 2018-11-26
03:47:33.128883122 +0800
Change: 2018-11-26
03:47:33.131883123 +0800
Birth: -
例2、使用touch命令修改文件时间戳
[root@localhost tmp]# stat /tmp/x #修改前查看文件时间戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: (
0/ root) Gid: (
0/ root)
Context:
unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-26
01:04:55.450219985 +0800
Modify: 2018-11-26
01:04:55.451219985 +0800
Change: 2018-11-26
01:04:55.451219985 +0800
Birth: -
[root@localhost tmp]# touch -a -c
/tmp/x #修改文件的的最近一次访问时间、修改时间戳
[root@localhost tmp]# stat /tmp/x #查看修改文件后的时间戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: (
0/ root) Gid: (
0/ root)
Context:
unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-26
03:57:39.565924336 +0800
Modify: 2018-11-26
01:04:55.451219985 +0800
Change: 2018-11-26
03:57:39.565924336 +0800
Birth: -
[root@localhost tmp]# touch -t
1811250333.00 /tmp/x #修改文件的的最近一次修改文件属性的时间戳
[root@localhost tmp]# stat /tmp/x #查看修改文件后的时间戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: (
0/ root) Gid: (
0/ root)
Context:
unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-25
03:33:00.000000000 +0800
Modify: 2018-11-25
03:33:00.000000000 +0800
Change: 2018-11-26
04:01:37.965940538 +0800
Birth: -
例、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost tmp]# touch /tmp/tfile-$(date
'+%Y-%m-%d-%H-%M-%S')
例、
复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@localhost tmp]# mkdir /tmp/mytest1
[root@localhost tmp]# cp -r /etc/p*[^[:digit:]]
/tmp/mytest1
例、
创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack
[root@localhost tmp]#
groupadd tom
[root@localhost tmp]#
groupadd jack
[root@localhost tmp]# useradd -u 5001 -d /tmp/tom -s
/bin/zsh -g tom -G jack tom
注意:当创建用户时,指定家目录时报“useradd: cannot set SELinux context for home directory /tmp/test”错,可使用以下方案解决:
如何关闭linux里的selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# useradd -d /tmp/moonne moonne
setenforce是Linux的selinux防火墙配置命令 执行setenforce 0 表示关闭selinux防火墙。
setenforce命令是单词set(设置)和enforce(执行)连写,另一个命令getenforce可查看selinux的状态。
三、 常用的用户以及文件管理命令有哪些,并演示命令以及用法。
用户管理:
Linux中的用户分为两类:管理员和普通用户,普通用户又分为系统用户和登录用户
每个用户都有唯一的用户标识符UserID即UID,由16bits二进制的数字组成:0-65535
管理员的UID为:0
普通用户的UID为:1-65535
系统用户的UID:1-499(CentOS6),1-999(CentOS7)
登录用户的UID:500-60000(CentOS6),1000-60000(CentOS7)
用户名userName与UID一一对应
用户的相关信息可在/etc/passwd文件中查看
/etc/passwd :用户的信息库
[root@localhost /]#
tail -3 /etc/passwd
hadoop:x:4006:4006::/home/hadoop:/bin/bash
magedu:x:4007:4007::/home/magedu:/bin/bash
tom:x:5001:5007::/tmp/tom:/bin/zsh
解释:
name:password:UID:GID:GECOS:directory:shell
name:
用户名
password:可以是加密的密码,也可是占位符x;
UID:
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
[root@localhost /]# tail -3
/etc/shadow
hadoop:!!:17853:0:99999:7:::
magedu:!!:17860:0:99999:7:::
tom:!!:17860:0:99999:7:::
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
组管理:
组:在linux 中的每个用户都必须有一个组,不能独立与组外。在Linux中每个文件有所有者、所在组、其他组的概念。
文件所在组:当某个用创建了文件后,这个文件的所在组就是该用户的所在组
查看文件所在组命令:ls –ahl file_Name
修改文件所有组命令:chgrp group_Name file_Name
其他组:除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组;
组的类别1:
管理员组和普通用户组
普通用户组又分为系统组和登录组。
组的类别2:
用户的基本组、用户的附加组
租的类别3:
私有组:组名同用户名,且只包含一个用户
共有组:组内包含了多个用户
每个组都有唯一的组标识符GroupID即GID,由16bits二进制的数字组成:0-65635
管理员组的GID为:0
普通用户组的ID为:1-65535
系统组的GID:1-499(CentOS6),1-999(CentOS7)
登录组的GID:500-60000(CentOS6),1000-60000(CentOS7)
组名groupName与GID一一对应;
组的相关信息可在/etc/group文件中查看
/etc/group:组的信息库
[root@localhost /]# tail -3
/etc/group
magedu:x:4007:
tom:x:5007:
jack:x:5008:tom
group_name:password:GID:user_list
user_list:该组的用户成员;以此组为附加组的用户的用户列表;
Linux用户和组管理命令:
组管理命令:
-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:创建系统用户;
l
useradd -s
/sbin/nologin:该用户不能登录,还记得我们上面说到的系统用户不能登录吧?我们可以看到系统用户的 shell 字段也是 /sbin/nologin
l
echo $SHELL :查看当前用户的 shell 类型
l
useradd -M
USERNAME:创建用户但不创建家目录
l
useradd -mk
USERNAME:创建用户的同时创建家目录,并复制 /etc/skel 中的内容到家目录中。关于 /etc/skel 目录会在下一篇 Linux 权限管理中再次讲解。
l
如果用户没有家目录,那么不能切换到该用户
注意:创建用户时的诸多默认设定配置文件为 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:解锁用户的密码;
l
usermod -G -a
GROUPS USERNAME:在原有附加组的基础上追加附加组
l
usermod -d PATH
USERNAME:修改家目录。修改后原先家目录中的文件不能访问了,因为在当前的家目录中并不存在这些文件。
-userdel命令:删除用户
语法:userdel [option] userName
选项:-r:删除用户时一并删除其家目录;
例1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001);
[root@localhost ~]#
useradd -u 4001 -g 1001 -G distro,peguin gentoo
[root@localhost ~]# id
gentoo
uid=4001(gentoo)
gid=1001(gentoo) groups=1001(gentoo),5002(distro),5001(peguin)
例2:创建用户fedora,其注释信息为"Fedora
Core",默认shell为/bin/tcsh;
[root@localhost ~]#
useradd -c "Fedora Core" -s /bin/tcsh fedora
[root@localhost ~]# id
fedora
uid=4002(fedora)
gid=4002(fedora) groups=4002(fedora)
例3:修改gentoo用户的家目录为/var/tmp/gentoo;要求其原有文件仍能被用户访问;
[root@localhost ~]#
usermod -d /var/tmp/gentoo Gentoo
例4:为gentoo新增附加组netadmin;
[root@localhost ~]#
usermod -aG netadmin gentoo
用户密码管理:
-passwd 命令:修改用户的密码
语法:passwd [-k] [-l]
[-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays]
[-S] [--stdin] [username]
(1)、passwd
:修改用户自己的密码
(2)、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:从组中移除用户
其他命令newgrp、chage、id、su:
-newgrp 命令:临时切换指定的组为基本组
语法:newgrp [-]
[groupName]
-:会模拟用户重新登录以实现重新初始化其环境
-chage 命令:更改用户密码过期信息
语法:chage [option]
userName
选项:-d:上一次更改日期
-E:账号到期的日期,过了这天,此账号将不可用
-W:用户密码到期前,提前收到警告信息的天数
-m:密码可更改的最小天数,为0代表任何时间都可以修改密码
-M: 密码保持有效的最大天数
-id命令:显示用户的真和有效ID;
语法:id [OPTION]...
[USER]
选项:-u: 仅显示有效的UID;
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n: 显示名字而非ID;
-su命令:登录式切换用户:会通过读取目标用户的配置文件来重新初始化
语法:su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令;
文件权限管理命令
-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 f01
g+, g-
o+, o-
a+, a-
(2) chmod
[OPTION]... OCTAL-MODE FILE..
chmod 764 f01.
(3) chmod [OPTION]...
--reference=RFILE FILE...
选项:-R, --recursive:递归修改
注意:用户仅能修改属主为自己的那些文件的权限;
从属关系管理命令:chown,chgrp
-chown 命令: 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
语法:chown [OPTION]...
[OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:-R:递归修改
例:chown -R liu /usr/meng #将/usr/meng下的目录及其子目录、文件的所有者改为liu
chown user:market f01 #把文件f01给user,添加到market组
chown :market f01 #把文件f01给user,添加到market组
-chgrp 命令:用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以
是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
语法:chgrp
[OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可修改文件的属主和属组
参数:-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
例:chgrp –R market
/usr/meng #将/usr/meng及其子目录下的文件的组修改为market
思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?
回答:不能修改此文件,但能删除此文件
反向掩码:
-umask 命令:文件的权限反向掩码,遮罩码;
文件的权限反向掩码默认为:666-umask
目录的权限反向掩码默认为:777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;
例:若反向掩码umask为:
023
则创建的文件的权限默认为:666-023=644
创建的目录的权限默认为:777-023=754
umask:查看当前umask
[root@localhost /]# umask
0022
umask MASK: 设置umask
root@localhost /]# umask 0020
[root@localhost /]# touch f01
[root@localhost /]# ls –l
-rw-r--rw-.
1 root root 0 Nov 26 06:05 f01
注意:此类设定仅对当前shell进程有效;
练习示例:
1、新建系统组mariadb, 新建系统用户mariadb,
属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
[root@localhost /]# groupadd -g 5004
mariadb
[root@localhost /]# useradd -g 5004 -s
/sbin/nologin -M mariadb
2、新建GID为5005的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
[root@localhost /]# useradd user3
[root@localhost /]# echo “user3” |
passwd --stdin user3
3、新建用户fedora,其家目录为/users/fedora,密码同用户名;
[root@localhost /]# useradd –d /users/fedora
fedora
[root@localhost /]# echo “fedora” |
passwd --stdin fedora
4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;
[root@localhost /]# useradd -d
/users/www www
[root@localhost /]# userdel -r www
5、为用户gentoo和fedora新增附加组mageedu;
[root@localhost home]# usermod
-G mageedu gentoo
[root@localhost home]# usermod -G mageedu fedora
6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;
[root@localhost home]# chgrp -R mageedu /tmp/log
[root@localhost home]# chmod g+x /tmp/log