linux下文件、目录、用户、用户组的管理详解从0到精通

权限的种类

在linux下,我们把权限分为以下三个:读、写、执行。

用户用户组 是否可以读取该 文件目录

用户用户组 是否可以对该 文件目录 写入数据

执行 : 加在文件上时: 用户用户组 是否可以执行该 文件 加在目录上时: 用户用户组 是否可以进入该 目录

权限的两个书写方式

上面是linux下三个权限的中文名,但在实际工作中并不会写中文,而是用英文或者数字来表示,以下列出了三个权限的两个表示方法。

中文 英文 数字
r 4
w 2
执行 x 1

可以看到读、写、执行 三个权限英文在linux中分别表示为r、w、x 他们的完整写法分别是:read , write , execute 可以发现 r 和 w 都是取首字母,但 x 是取中间的字母。死记就行了,linux就这么规定的。

那么接下来的 数字 表示方法也是很简单,如果记不住可以倒过来看。 执行,写,读分别是 1,2,4 可以发现最开始是从 1 开始的,后面依次 x2

英文 和 数字 的加粗样式写法都要记住,这在后面的学习中会频繁用到。

查看权限

通常会使用linux自带的命令 ls -l 来来查看当前目录下的 文件和目录 的权限

bash 复制代码
ls -l

终端会输出一大堆内容,看起来很复杂,也许我不说只能看懂有 文件和目录 的名字还有日期。

那么以下是对于输出内容的大致图解:

权限详解

在上图的红色区域就是显示了该 文件/目录所有权限

看起来有很多,其实里面分为 4 块:

我们所要关注的就是 权限位,所属用户,所属用户组,至于链接数不重要。

简单说下链接数吧,不想看可以跳过:

对于文件来说: 链接数指的是在磁盘中指向该文件的个数。而该文件被创建时,就已经给它了一个索引,用于找到该文件。所以对于文件来说,它的链接数至少有一个。我们也可以通过创建 软链接 的方式 添加该文件的索引数量(链接数),如下:

对于目录来说: 链接数指的是该目录下 第一层 的所有目录数量,包括 . 和 .. ,所以一个目录下至少存在 2 个链接数,可以通过在该目录的 第一层 创建目录来增加链接数,如下:

权限位

在权限位中看起来有很多看不懂的字母,但是我们可以看到之前所熟悉的,比如r,w,x这三个 不妨把他们拆开来看,以第一行为例:

bash 复制代码
drwxr-xr-x

我们把它拆成4个部分来看:

这些权限应该结合后面 所属用户 和 所属用户组 来看

就像这样:

那么这一行输出内容的权限信息换成人话就是:

目录Desktop的所属的用户是cancerai所属的用户组是cancerai 用户cancerai 对目录Desktop所拥有的权限有 读,写,执行 用户组cancerai 对目录Desktop所拥有的权限有 读,执行 其他用户 对目录Desktop所拥有的权限有 读,执行

注:在权限为里显示 - 表示没有该权限,权限位每组的权限都是按照读,写,执行的顺序显示的。

读,写,执行 权限详解

读: 对于文件 可以读取该文件里面的所有内容

对于目录 可以看到该目录,注意是可以在当前目录内看到该目录,而不是能进入该目录内,如果需要进入该目录需要执行权限,举个例子(目录test没有执行权限,但有读权限):

可以发现,会显示Permission denied(权限不足),当我们再加上执行权限就可以进入了:

那么还有一种情况,当一个目录没有读权限,只有执行权限呢?

会发现,虽然可以进入test目录,但是不能访问test目录下的内容。

因此我们得到一个结论: 当一个目录同时有读,执行权限 时,可以进入并访问该目录下的内容 当一个目录只有读,但没有执行权限 时,可以进入并访问该目录下的内容 当一个目录没有读,但有执行权限时,可以进入但不能访问该目录下的内容

写: 对于文件 可以对该文件进行写入操作

对于目录 可以在该目录里写入(创建)文件或目录 注: 当一个目录没有写权限,但是这个目录里的文件有写权限,那么这个文件也是可以被写入数据的。如下:

执行: 对于文件 在linux下一个文件能不能执行不是取决于后缀名,而是取决于权限中是否有 执行 权限 举个例子,下面有个名为demo.sh的文件,里面是正确的shell代码,但没有执行权限:

可以看到,虽然后缀名是sh,但是没有给执行权限还是显示Permission denied(权限不足) 当我们给它权限后就可以成功执行了:

总的来说: 在linux下不像windows中关注扩展名,在linux中关注的是权限,要有执行权限才能是该文件执行起来。

对于目录: 关于目录执行权限的,之前在读权限已经讲过了,没注意看的可以再返回去看看。

修改权限

前面已经说过了每个权限对于文件和目录的一些知识点,细心的会发现,在我上面演示的文件和目录中,权限经常在变。这就需要讲到文件/目录权限的修改,基本命令很简单,语法如下:

bash 复制代码
chmod 权限码 文件/目录名

其中文件/目录名很好理解,那么权限码是什么? 还记得最开始让你们记的权限的数字表达形式吗,没错就和那个有关

中文 英文 数字
r 4
w 2
执行 x 1

英文那一列就不用管了,主要看中文和数字的对照表 举个例子来说吧:

bash 复制代码
chmod 553 file

553分别代表了用户,用户组,其他用户的权限,对照者上面的表格就能发现553的由来: 5 = 4(读) + 1(执行) 5 = 4(读) + 1(执行) 3 = 2(写) + 1(执行)

翻译成人话就是: 该文件所属的用户对该文件所拥有的权限有 读 和 执行 该文件所属的用户组对该文件所拥有的权限有 读 和 执行 其他用户对该文件所拥有的权限有 写 和 执行

这下应该能恍然大悟了 总结来说就是:每一组的权限位都是每种权限对应的数字之和。 注:当权限位显示 - 时,用0表示

举个例子: 使用 ls -l 输出以下内容:

bash 复制代码
drwxr-xr-x 1 cancerai cancerai 1 Jan 16 15:58 file

那么把权限用英文转换为数字 先看用户权限: r(4) + w(2) + x(1) = 7 接着用户组权限: r(4) + 0 + x(1) = 5 最后其他用户权限: r(4) + 0 + x(1) = 5 最后得到 rwxr-xr-x 转换为权限码就是 755

以下是修改权限的一些案例,自己可以跟着练习下:

bash 复制代码
把 test 文件的权限改成
用户可读,可写,可执行
用户组可读,可写,不可执行
其他用户可读,不可写,不可执行

答案:

bash 复制代码
chmod 764 test

还是比较简单的。 注:之前一直都在说文件的权限修改,目录的权限修改也是一模一样的,没有任何区别。 在修改目录的权限中有一个常用的参数,-R,语法如下:

bash 复制代码
chmod -R 权限码 文件/目录名

它可以遍历该目录下所有的文件和目录(包括所有子目录),把他们的权限都改成指定的权限,例如以下:

修改所属用户/用户组

修改用户或用户组就简单多了,不用管权限什么的,直接放语法:

bash 复制代码
#修改所属用户
#chown全名change owner,译为修改拥有者
chown 用户名.用户组 文件/目录名


#修改所属用户组
#chgrp全名change group,译为修改组
chgrp 用户组 文件/目录名

这时候会发现,chown不仅可以修改用户还能修改用户组,没错哈 不仅chown可以修改这两个,还能只修改用户组,或者只修改用户:

bash 复制代码
#只修改用户
chown 用户 文件/目录名

#只修改用户组
chown .用户组 文件/目录名

你没看错,只用chown修改用户组,但和chgrp不同的是,在chown中修改用户组需要在前面加个点 " . ",用哪个都是一样的。

以下是关于这两个命令的示例用法:

用chown只修改用户,因为我这边是修改成root,所以需要root权限才行,前面加个sudo

用chown只修改用户组

用chown只修改 用户 和 用户组

用chgrp修改用户组

总结

那么到这里所有的关于linux下管理权限常用的命令全部讲解完,如有不对的可以在评论区指出,欢迎大家提出错误 喜欢我的文章就点个赞+收藏+关注吧

相关推荐
lllsure6 小时前
Linux 实用指令
linux·物联网
努力的小T7 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Nerd Nirvana7 小时前
OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)
linux·ssl·shell·认证·加密·tls·oepnssl
letisgo58 小时前
记录一次部署PC端网址全过程
linux·阿里云·服务器运维
猫猫的小茶馆8 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
尚墨11118 小时前
linux 安装启动zookeeper全过程及遇到的坑
linux·zookeeper
鱼嘻8 小时前
Linux自学day23-进程和线程
linux·服务器·c语言·进程和线程
AuGuSt_818 小时前
在windows下安装windows+Ubuntu16.04双系统(下)
linux·ubuntu·双系统
old_power9 小时前
Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0
linux·opencv
爆更小小刘9 小时前
Linux下基本指令(4)
linux·运维·服务器