一、Linux目录结构以及目录结构命名规定
Linux目录命名依据——FHS
因为Linux的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。
在Linux中,所有的文件与目录都由根目录/ 开始。那是所有目录与文件的源头。然后再一个一个分支下来,有点像树状。因此,我们也称这种目录配置方式为:“目录树(directory tree)”。
根目录是Linux系统中极其重要的一个目录,根目录与启动、还原、系统修复等操作有关。根据FHS的建议:根目录(/)所在的分区应该越小越好,应用程序应安装在除根目录外的其他分区。
总结Linux系统下目录的说明:
1.FHS要求必须存在的目录
目录 | 文件内容 |
---|---|
/bin | /bin下存放的是许多的命令,如:cat、cp、mv、ls等 |
/boot | 主要放置系统启动会使用到的文件,包括Linux内核文件以及启动选项和配置文件 |
/dev | Linux设备与接口文件 |
/etc | 系统主要的配置文件,例如人员的账号密码、各种服务的启动文件 |
/lib | 系统启动时用到的函数库,以及/bin或/sbin下面的命令会调用的函数库 |
/media | 媒体设备,放置的是可删除的设备,包括软盘、光盘、DVD等暂时挂载的设备 |
/mnt | 挂载设备用的文件 |
/opt | 第三方辅助软件放置的目录 |
/run | 早期的FHS规定系统启动后产生的各项信息放置在/var/run下,现在放于/run下 |
sbin | /sbin下存放的文件为启动过程所需要的,包括启动、修复、还原系统说需的命令,服务器软件程序存放于/usr/sbin当中,本机安装的软件所产生的系统执行文件,放置在/usr/local/sbin下 |
/srv | /srv下放置的是一些网络服务启动后,这些服务所需使用的数据目录 |
/tmp | 一般用户正在执行的程序暂时放置文件的地方,这个目录任何人都可以存取,不过需要定期清理 |
2.FHS建议可以存在的目录
目录 | 文件内容 |
---|---|
/home | 系统默认的家目录 |
/lib< qual > | 用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等 |
/root | 系统管理员(root)的家目录 |
3.FHS其他重要的目录
目录 | 文件内容 |
---|---|
/lost+found | 这个目录是使用标准ext2、ext3、ext4文件系统格式才会产生的文件,目的在于当系统发生错误时,将一些遗失的片段放置在这个目录下,如果使用xfs的话,就不会有这个目录 |
/proc | 虚拟文件系统,它放置的数据是在内存当中,如系统内核、进程信息、外接设备的状态以及网络状态 |
/sys | 与/proc类似,也是一个虚拟文件系统,主要记录内核与系统硬件信息 |
4./usr目录
目录 | 文件内容 |
---|---|
/usr/bin | 一般用户能使用的命令,/usr/bin与/bin是一样的 |
/usr/lib | /lib链接到此目录 |
/usr/local | 系统管理员在本机安装自己的软件,安装在此目录下 |
/usr/sbin | 存放网络服务器软件的服务命令,/sbin链接到此目录 |
/usr/share | 放置只读的数据文件,包括共享文件 |
/usr/games | 与游戏相关的数据 |
/usr/include | c/c++等程序文件语言的头文件与包含文件 |
/usr/libexec | 不被一般用户常用的执行文件或脚本 |
/usr/src | 一般源代码放置的目录 |
5./var目录
/var目录主要针对经常性变动的文件,包括缓存、日志文件以及其他软件所产生的的文件,包括程序文件,或如MySQL数据库文件。
目录 | 文件内容 |
---|---|
/var/cache | 缓存文件 |
/var/lib | 程序执行过程中,需要使用到的数据文件放置的目录 |
/var/lock | 某些资源只能被一个应用程序锁使用,如果同时有两个程序使用该设备,就可能产生错误,,因此需要上锁 |
/var/log | 日志文件存放的目录 |
/var/mail | 个人电子邮件存放的目录 |
/var/spool | 这个目录放置放置一些队列数据 |
二、文件与目录管理
文件目录操作不外乎显示目录或文件属性、复制、移动、删除和重命名
1.文件与目录的查看命令:ls
ls命令就是list的缩写缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。 通过ls 命令不仅可以查看linux文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
1.语法格式
ls [OPTION]…[FILE]…
2.常用参数选项
参数 | 作用说明 |
---|---|
-l | 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来 |
-g | 类似 -l,但不列出所有者 |
-o | 类似 -l,显示文件的除组信息外的详细信息。 |
-a | 列出目录下的所有文件,包括以 . 开头的文件 |
-A | 同-a,但不列出“.”(表示当前目录)和“…”(表示当前目录的父目录) |
-F | 使得ls命令可以在显示子目录的时候在它的文件名之后加上一个斜线(“/”)字符。而文件后面的星号(“*”)字符表示这是一个可执行程序 |
-r | –reverse 依相反次序排列 |
-i | 显示文件或者目录的inode信息,即索引信息 |
-R | –recursive 同时列出所有子目录层 |
-t | 以文件修改时间排序 |
-S | 根据文件大小排序 |
-c | 根据 ctime(文件状态最后更改的时间) 排序;配合 -l:显示 ctime 但根据名称排序否则:根据 ctime 排序;配合-lt:根据 ctime 排序及显示 ctime |
-u | 配合 -lt:显示访问时间而且依访问时间排序;配合 -l:显示访问时间但根据名称排序;否则:根据访问时间排序 |
-U | 不进行排序;依文件系统原有的次序列出项目 |
-v | 根据版本进行排序 |
-h | 以容易理解的格式列出文件大小 (例如 1K 234M 2G) |
–si | 类似 -h,但文件大小取 1000 的次方而不是 1024 |
-k | 以 k 字节的形式表示文件的大小 |
-s | 以块大小为单位列出所有文件的大小 |
-m | 所有项目以逗号分隔,并填满整行行宽 |
-w | 自行指定屏幕宽度而不使用目前的数值 |
-x | 逐行列出项目而不是逐栏列出 |
-X | 根据扩展名排序 |
-1 | 每行只列出一个文件 |
–help | 显示此帮助信息并离开 |
–version | 显示版本信息并离开 |
3.使用范例
#1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
[root@localhost ~]# ls /var/l*[0-9]*[[:lower:]]
#2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
[root@localhost ~]# ls /etc/[0-9]*[^0-9]
#3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
[root@localhost ~]# ls /etc/[^[:alpha:]][a-zA-Z]*
#4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
[root@localhost ~]# ls /etc/rc[0-6]*
#5、显示/etc目录下,所有以.d结尾的文件或目录
[root@localhost ~]# ls /etc/*.d
#6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
[root@localhost ~]# ls /etc/[m,n,r,p]*.conf
#7、只显示/root下的隐藏文件和目录
[root@localhost ~]# ls -d /root/.*
#8、只显示/etc下的非隐藏目录
[root@localhost ~]# ls /etc/[^.]*/ -d
2.目录的创建:mkdir
1.语法
mkdir [OPTION]… DIRECTORY…
2.参数选项
参数选项 | 说明 |
---|---|
-m | 为目录指定访问权限,与chmod类似 |
-p | 果目录已经存在,则不会有错误提示。若父目录不存在,将会创建父目录。该选项常用于创建级联目录 |
-v | 为每个目录显示提示信息 |
3.使用范例
#创建/app/rootdir目录,并复制/root下所有文件到该目录内, 要求保留原有权限
[root@localhost ~]# mkdir -p /app/rootdir
[root@localhost ~]# cp -a /root /app/rootdir/
#使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z
[root@localhost ~]# mkdir -p /tmp/{a1/{a,b},a2}
[root@localhost ~]# mkdir -p /tmp/{x,q}_{y,z}
三、用户、用户组管理命令
1、新增用户命令:useradd
Linux 系统中,可以使用 useradd 命令新建用户
1.语法
[root@localhost ~]#useradd [选项] 用户名
2.常用参数选项
参数 | 作用说明 |
---|---|
-u UID | 手工指定用户的 UID |
-d 主目录 | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限 |
-c 用户说明 | 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置 |
-g 组名 | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录 |
-G 组名 | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组 |
-s shell | 手工指定用户的登录 Shell,默认是 /bin/bash |
-e 曰期 | 指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第八个字段 |
-o | 允许创建的用户的 UID 相同。例如,执行 “useradd -u 0 -o usertest” 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0 |
-m | 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的 |
-r | 创建系统用户 |
3.使用范例
系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户:
[root@localhost ~]# useradd test
此命令会创建一个普通的用户叫test。
这个命令会完成这几项工作:
1.在 /etc/passwd 文件中创建一行与test 用户相关的数据:
[root@localhost ~]# grep "test" /etc/passwd
test:x:1001:1001::/home/test:/bin/bash
在CentOS7中,用户的 UID 是从 1000 开始计算的。同时默认指定了用户的家目录为 /home/test/,用户的登录 Shell 为 /bin/bash。
2.在 /etc/shadow 文件中新增了一行与test 用户密码相关的数据:
[root@localhost ~]# grep "test" /etc/shadow
test:!!:18126:0:99999:7:::
这个用户还没有设置密码,所以密码字段是 “!!”,代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等。
3.在 /etc/group 文件中创建一行与用户名一模一样的群组:
[root@localhost ~]# grep "test" /etc/group
test:x:1001:
该群组会作为新建用户的初始组
4.在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:
[root@localhost ~]# grep "test" /etc/gshadow
test:!::
5.默认创建用户的主目录:
[root@localhost ~]#ll -d /home/test/
drwx------. 3 test test 78 Aug 18 11:01 /home/test/
其他范例:
#创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 "Gentoo Distribution"
[root@localhost ~] # useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
2、用户修改命令:usermod
介绍了如何利用 useradd 命令添加用户,但如果不小心添错用户信息,后期如何修改呢?
办法有两个,一个是使用 Vim 文本编辑器手动修改涉及用户信息的相关文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一个方法就是使用 usermod 命令,该命令专门用于修改用户信息。
1.语法
[root@localhost ~]#usermod [选项] 用户名
2.参数选项
参数 | 作用说明 |
---|---|
-c | 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段 |
-d | 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径 |
-e | 日期:修改用户的失效曰期,格式为 “YYYY-MM-DD”,即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段 |
-g | 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID) |
-u | UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID) |
-G | 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件 |
-l | 用户名:修改用户名称 |
-L | 临时锁定用户(Lock) |
-U | 解锁用户(Unlock),和 -L 对应 |
-s shell | 修改用户的登录 Shell,默认是 /bin/bash |
3.使用范例
#锁定用户
[root@localhost ~]# usermod -L test
[root@localhost ~]# grep "test" /etc/shadow
test:!test:$6$H/BnolAD$yWax3onGG.fjHpyApKzwdUDHmQTIc64Y/KCOyWyn5BfSMx2tywPT0NbKTbIhj.is0V/uXgSu/bXkdN0LtVwb71:18126:0:99999:7:::
#其实锁定就是在密码字段前加入"!",这时test用户就暂时不能登录了
#解锁用户
[root@localhost ~]# usermod -U test
[root@localhost ~]# grep "test" /etc/shadow
test:test:$6$H/BnolAD$yWax3onGG.fjHpyApKzwdUDHmQTIc64Y/KCOyWyn5BfSMx2tywPT0NbKTbIhj.is0V/uXgSu/bXkdN0LtVwb71:18126:0:99999:7:::
#取消了密码字段前的 "!"
#把test用户加入root组
[root@localhost ~]# usermod -G root test
[root@localhost ~]# grep "test" /etc/group
root:x:0:test
#test用户已经加入了root组
test:x:1001:
3、密码命令:passwd
为用户创建密码
1.语法
[root@localhost ~]#passwd [选项] 用户名
2.参数选项
参数选项 | 作用说明 |
---|---|
-S | 查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用 |
-l | 暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”,使密码失效。仅 root 用户可用 |
-u | 解锁用户,和 -l 选项相对应,也是只能 root 用户使用 |
–stdin | 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用 |
-n | 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段 |
-x | 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段 |
-w | 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段 |
-i | 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段 |
3.使用范例
[root@localhost ~]#passwd test
Changing password for user test.
New password: <==直接输入新的口令,但屏幕不会有任何反应
BAD PASSWORD: it is WAY too short <==口令太简单或过短的错误!这里只是警告信息,输入的密码依旧能用
Retype new password: <==再次验证输入的密码,再输入一次即可
passwd: all authentication tokens updated successfully. <==提示修改密码成功
#查看用户密码的状态
[root@localhost ~]# passwd -S test
test PS 2019-08-18 0 99999 7 -1 (Password set, SHA512 crypt.)
#上面这行代码的意思依次是:用户名 密码 设定时间(2019*08-18) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1),密码已使用
"-S"选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是 /etc/shadow 文件的第四、五、六、七个字段的内容。 当然,passwd 命令是可以通过命令选项修改这几个字段的值的,例如:
#修改 test的密码,使其具有30 天变更、10 天密码失效
[root@localhost ~]# passwd -x 30 -i 10 test
Adjusting aging data for user test.
passwd: Success
[root@localhost ~]# passwd -S test
test PS 2019-08-18 0 30 7 10 (Password set, SHA512 crypt.)
但我个人认为,还是直接修改 /etc/shadow 文件简单一些。
#调用管道符,给 test 用户设置密码 "123456"
[root@localhost ~]# echo "123456" | passwd --stdin test
Changing password for user lamp.
passwd: all authentication tokens updated successfully.
3、用户删除命令:userdel
userdel 命令功能很简单,就是删除用户的相关数据。此命令只有 root 用户才能使用。
通过前面的学习我们知道,用户的相关数据包含如下几项:
用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户群组基本信息:存储在 /etc/group 文件中;
用户群组信息信息:存储在 /etc/gshadow 文件中;
用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
1.语法
[root@localhost ~]# userdel -r 用户名
2.参数选项
参数选项 | 作用说明 |
---|---|
-r | 选项表示在删除用户的同时删除用户的家目录 |
注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录
3.使用范例
[root@localhost ~]# userdel -r test
4、添加用户组:groupadd
1.语法
[root@localhost ~]# groupadd [选项] 组名
2.参数选项
参数选项 | 作用说明 |
---|---|
-g | GID:指定组 ID |
-r | 创建系统群组 |
3.使用范例
[root@localhost ~]# groupadd group1
#添加group1组
[root@localhost ~]# grep "group1" /etc/group
group1:x:1002:
5、修改用户组:groupmod
1.语法
[root@localhost ~]# groupmod [选项] 组名
2.参数选项
参数选项 | 作用说明 |
---|---|
-g | GID:修改组 ID |
-n | 新组名:修改组名 |
3.使用范例
[root@localhost ~]# groupmod -n testgrp group1
#把组名group1修改为testgrp
[root@localhost ~]# grep "testgrp" /etc/group
testgrp:x:1002:
#注意GID还是1002,但是组名已经改变
6、修改用户组:刪除用户组:groupdel
1.语法
[root@localhost ~]#groupdel 组名
使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。
2.使用范例
[root@localhost ~]#grep "group1" /etc/group /etc/gshadow
/etc/group:group1:x:1002:
/etc/gshadow:group1:!::
[root@localhost ~]#groupdel group1
[root@localhost ~]#grep "group1" /etc/group /etc/gshadow
[root@localhost ~]#
7、把用户添加进组或从组中删除:gpasswd
1.语法
[root@localhost ~]# gpasswd 选项 组名
2.参数选项
参数选项 | 作用说明 |
---|---|
选项为空时,表示给群组设置密码,仅 root 用户可用 | |
-A user1,… | 将群组的控制权交给 user1,… 等用户管理,也就是说,设置 user1,… 等用户为群组的管理员,仅 root 用户可用 |
-M user1,… | 将 user1,… 加入到此群组中,仅 root 用户可用 |
-r | 移除群组的密码,仅 root 用户可用 |
-R | 让群组的密码失效,仅 root 用户可用 |
-a user | 将 user 用户加入到群组中 |
-d user | 将 user 用户从群组中移除 |
3.使用范例
除 root 可以管理群组外,可设置多个普通用户作为群组的管理员,但也只能做“将用户加入群组”和“将用户移出群组”的操作。
#创建新群组 group2,并将群组交给 test 管理
[root@localhost ~]# groupadd group2 <-- 创建群组
[root@localhost ~]# gpasswd group2 <-- 设置密码!
Changing the password for group group1
New Password:
Re-enter new password:
[root@localhost ~]# gpasswd -A test group2 <==加入群组管理员为 test
[root@localhost ~]# grep "group2" /etc/group /etc/gshadow
/etc/group:group2:x:1003:
/etc/gshadow:group2:$6$/Mxfk/.80iO/$lsiCKBe7mRCyovmFLL4JfbD7WY91WGCvve2Wq5GgFCFQx0znmbDM2lR1mlU9yhHw/FodYNpJRK8AYSRq89stY0::
#以test用户登陆系统,并将用户test 和 test1 加入group2群组。
[test@localhost ~]#gpasswd -a test group2
[test@localhost ~]#gpasswd -a test1 group2
[test@localhost ~]#grep "group2" /etc/group
group2:x:1003:test,test1
四、文件权限,属主属组管理命令
Linux 系统,最常见的文件权限有 3 种,即对文件的读(用 r 表示)、写(用 w 表示)和执行(用 x 表示,针对可执行文件或目录)权限。在 Linux 系统中,每个文件都明确规定了不同身份用户的访问权限,通过 ls 命令即可看到。
除此之外,我们有时会看到 s(针对可执行文件或目录,使文件在执行阶段,临时拥有文件所有者的权限)和 t(针对目录,任何用户都可以在此目录中创建文件,但只能删除自己的文件),文件设置 s 和 t 权限,会占用 x 权限的位置。
从图中可以看到,Linux 将访问文件的用户分为 3 类,分别是文件的所有者,所属组(也就是文件所属的群组)以及其他人。
除了所有者,以及所属群组中的用户可以访问文件外,其他用户(其他群组中的用户)也可以访问文件,这部分用户都归为其他人范畴。
很显然,Linux 系统为 3 种不同的用户身份,分别规定了是否对文件有读、写和执行权限。文件所有者拥有对文件的读和写权限,但是没有执行权限;所属群组中的用户只拥有读权限,也就是说,这部分用户只能访问文件,无法修改文件;其他人也是只能访问文件。
1.修改文件和目录的所有者和所属组:chown
chown 命令,可以认为是 “change owner” 的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。
1.语法
当只需要修改所有者时,可使用如下 chown 命令的基本格式:
[root@localhost ~]# chown [-R] 所有者 文件或目录
如果需要同时更改所有者和所属组,chown 命令的基本格式为:
[root@localhost ~]# chown [-R] 所有者:所属组 文件或目录
注意,在 chown 命令中,所有者和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如 zhangsan.temp),就会造成系统误判。因此,建议大家使用冒号连接所有者和所属组。
当然,chown 命令也支持单纯的修改文件或目录的所属组,例如 chown :group install.log 就表示修改 install.log 文件的所属组,但修改所属组通常使用 chgrp 命令,因此并不推荐大家使用 chown 命令。
另外需要注意的一点是,使用 chown 命令修改文件或目录的所有者(或所属者)时,要保证使用者用户(或用户组)存在,否则该命令无法正确执行,会提示 “invalid user” 或者 “invaild group”。
2.使用范例
[root@localhost ~]# touch file
#由root用户创建file文件
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 Aug 18 13:03 file
#文件的所有者是root,普通用户user对这个文件拥有只读权限
[root@localhost ~]# chown test file
#修改文件的所有者
[root@localhost ~]# ll file
-rw-r--r--. 1 test root 0 Aug 18 13:03 file
#所有者变成了user用户,这时user用户对这个文件就拥有了读、写权限
2.修改文件和目录的所属组:chgrp
chgrp 命令用于修改文件(或目录)的所属组。
使用此命令需要注意的一点是,要被改变的群组名必须是真实存在的,否则命令无法正确执行,会提示 “invaild group name”。
1.语法
[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
2.使用范例
[root@localhost ~]# groupadd group3
#新建用于测试的群组 group3
[root@localhost ~]# chgrp group3 install.log
#修改install.log文件的所属组为group3
[root@localhost ~]# ll install.log
-rw-r--r--. 1 root group1 78495Aug 18 13:08 install.log
#修改生效
[root@localhost ~]# chgrp testgroup install.log
chgrp: invaild group name 'testgroup'
3.修改文件或目录的权限: chmod
chmod 命令设定文件权限的方式有 2 种,分别可以使用数字或者符号来进行权限的变更。
Linux 系统中,文件的基本权限由 9 个字符组成,以 rwxrw-r-x 为例,我们可以使用数字来代表各个权限,各个权限与数字的对应关系如下:
r --> 4
w --> 2
x --> 1
由于这 9 个字符分属 3 类用户,因此每种用户身份包含 3 个权限(r、w、x),通过将 3 个权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限。
拿 rwxrw-r-x 来说,所有者、所属组和其他人分别对应的权限值为:
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
既然文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
1.语法
[root@localhost ~]# chmod [-R] 权限值 文件名
2.使用范例
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@localhost ~]# chmod 777 .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
[root@localhost ~]# chmod u=rwx,go=rx .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
如果想要增加 .bashrc 文件的每种用户都可做写操作的权限,可以使用如下命令
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@localhost ~]# chmod a+w .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc