在正式谈Linux权限之前,我们首先来看看Linux文件类型的话题~首先想一想在Windows操作系统中,我们是使用什么来区分文件类型的~
答案是Windows操作系统使用文件名后缀来区分文件类型~
Windows操作系统中文件名后缀(扩展名)用于标识文件的类型和用途。下面是一些常用的文件名后缀及其说明:
Windows操作系统我们经常使用,相信大家也就并不陌生了~
那么Linux是使用什么区分文件类型呢?
Linux区分文件类型,不是使用文件名后缀,而是用文件的属性列区分的!
说明:Linux系统在文件类型的区分上,与Windows系统有着本质的不同。Windows系统主要通过文件名后缀来识别文件类型,而Linux系统则更多地依赖于文件的属性列,通过【ls -l
】/【ll】命令列出的文件信息中的第一个字符来表示(普通文件以“-”表示,是常见的文件类型;目录以“d”开头,代表文件夹;链接文件以“l”开头,指向其他文件或目录;字符设备文件“c”(比如显示器和键盘,不支持随机读取,按照字符为单位)和块设备文件“b”(比如硬盘)分别用于访问字符设备和块设备;“p”表示管道文件用于进程间通信;“s”表示套接口文件用于网络通信。)。尽管Linux不以文件后缀作为区分文件类型的主要依据,但用户仍然可以根据习惯或需要为文件添加后缀,以便更容易地识别文件的内容或用途。然而,在某些特定情况下,如使用某些工具或程序处理文件时,可能需要明确文件的类型(比如gcc编译)。这时,这些工具或程序可能会参考文件的后缀或实际内容来判断。因此,虽然Linux系统本身不依赖文件后缀来区分文件类型,但文件后缀在Linux中仍然具有一定的辅助作用,可以帮助用户更好地管理和识别文件。
补充:在 Linux 系统中,普通文件(Regular File)是指不具有特殊文件类型属性的文件,通常包含 文本、二进制数据、图像、音频、视频、可执行程序、库文件、源代码等各种用户数据。
前面我们提到了Linux用户包括root用户和普通用户~
在 Linux 系统中,用户是访问和管理系统资源的基本实体。Linux 是一个多用户、多任务的操作系统,意味着它可以同时支持多个用户,并且每个用户可以同时执行多个任务。
简单介绍两个用户类型:
接下来我们来细细讲解Linux操作系统的用户知识:
这一个话题在前面的博客中提到过,我们重新复盘一下:
adduser xiaodu
会创建一个新用户,但不会自动创建用户的主目录。adduser -m username
。passwd
命令为用户设置密码。例如,passwd xiaodu
会提示你输入并确认新密码。usermod
命令修改用户信息。例如,usermod -l newname oldname
可以修改用户名。usermod -aG groupname username
可以将用户添加到附加组。userdel
命令删除用户。例如,userdel username
会删除用户,但不会删除其主目录。userdel -r username
】,我们更加建议使用这一个,避免出现问题~小编这里已经创建了一个xiaodu/username这两个普通用户
接下来就是用户切换问题:
1、普通用户——>超级用户 操作:命令行输入【su root】,输入超级用户密码 效果如下:
回到普通用户:【Ctrl+d】
2、普通用户——>普通用户 这里有两种情况 ①如果已经知道想登陆的普通用户密码 操作:命令行输入【su 登录用户名】,输入想登陆的普通用户密码 效果如下:
回到原来普通用户:【Ctrl+d】
②不知道想登陆的普通用户密码,但是知道超级用户密码 操作:命令行输入【su root】,输入超级用户密码,再【su 登录用户名】,不需要输入普通用户密码直接登录~ 效果如下:
回到原来普通用户:两次【Ctrl+d】
3、超级用户——>普通用户 操作:命令行输入【su 登录用户名】,不需要输入普通用户密码直接登录~ 回到超级用户:【Ctrl+d】
事实上,普通用户登录超级用户还有一种方法是命令行输入【su - root】,输入超级用户密码~
接下来,我们进行简单操作对比:
画表对比:
特性 | su root | su - root 或 su -l root |
---|---|---|
工作目录 | 保持原目录不变 | 切换到 root 的主目录(/root) |
环境变量 | 继承原用户的环境变量 | 加载 root 的环境变量和配置文件 |
适用场景 | 临时执行命令,保留原环境 | 完全切换到 root 环境,执行系统级任务 |
有些知识比如环境变量后面会进行讲解~
我们知道超级用户拥有最高权限,有些操作普通用户是无法进行的,比如下面尝试将当前目录中的 gol.tx
文件复制到 /usr/bin
目录,但是输出显示了一个错误信息:cp: cannot create regular file '/usr/bin/gol.tx': Permission denied,
这意味着当前用户(普通用户)没有足够的权限将文件复制到 /usr/bin
目录。【通常,/usr/bin
目录需要超级用户权限(root 权限)才能写入】
那么怎么进行普通用户权限提升呢?
操作:使用
sudo
命令来提升权限
我们发现sudo之后还是不能进行操作,这是因为用户 xiaodu
没有被添加到 sudoers
文件中,因此无法使用 sudo
命令来提升权限~
那么我们就需要把用户 xiaodu
没有被添加到 sudoers
文件(相当于Linux中的用户白名单)中,怎么操作呢?
操作:找到管理员(超级用户root),将用户
xiaodu
添加到sudoers
文件中~
这个时候普通用户xiaodu就可以使用sudo命令了~
总结: 默认新增的用户,无法直接执行sudo,新用户不受系统信任!如果想让新用户使用sudo,我们需要找到管理员(超级用户root),将新增的用户添加到
sudoers
文件中~使用sudo也就是对普通用户的权限提升(以root的身份执行命令)~
我们知道什么是权限?首先来看看权限的本质~
重点解释x权限: 一个文件并不是有了x权限就可以执行,可执行文件 = 有可执行权限 + 本身可以执行【两者缺一不可】~也就是说可执行权限和能够执行是两码事~
注意点: 在进行角色/身份匹配的时候只会按拥有者,所属组,其他用户的顺序,匹配成功一次确定身份,也就确定了权限~
权限通过
rwx
字母组合表示(-表示没有该权限),例如:
rwxr-xr--
表示(三个为一组): 知道了这些,我们通过命令行输入【ll】显示的文件/目录的详细属性进行解析:
755
对应 rwxr-xr-x
)每个权限对应一个二进制位和八进制值:
4
(二进制 100
)2
(二进制 010
)1
(二进制 001
)0
(二进制 000
)通过将权限值相加,可组合出任意权限:
rwx
= 4 + 2 + 1 = 7rw-
= 4 + 2 + 0 = 6r-x
= 4 + 0 + 1 = 5r--
= 4 + 0 + 0 = 4同样三个角色,那么就使用三个数字就可以表示它们的权限了~
例如: 755
对应 rwxr-xr-x
755
对应权限 rwxr-xr-x
:首位 7
(拥有者权限=读+写+执行),中间 5
(所属组权限=读+执行),末位 5
(其他用户=读+执行)
使用数字简写表示就较为方便,用3个数字替代复杂的符号组合~
前面已经提到了权限的一些基础概念,接下来我们来对权限属性进行实践操作~
进行权限属性的修改,我们需要使用相关的命令~首先来看看chmod
chmod
语法:
chmod [参数] 权限 文件名
功能:设置文件的访问权限
常用选项:
R
:递归修改目录文件的权限修改权限格式:
+
:向用户权限范围增加权限代号所表示的权限-
:向用户权限范围取消权限代号所表示的权限=
:向用户权限范围赋予权限代号所表示的权限u
:拥有者g
:拥有者同组用户o
:其它用户a
:所有用户实际操作:
我们新创建一个testfile.txt来进行测试:
首先我们试一试给拥有者修改权限:
可以看到通过chmod可以给拥有者增加或者删除多个权限,那么再看看其他角色呢?
可以看到进行类似的操作,也可以修改所属组和其他用户的权限,同时如果需要同时修改多个角色权限,可以中间使用【,】进行隔开~
如果对所有的用户/角色进行一样的修改,可以使用用户表示符【a】,例:
除了使用rwx,我们还可以使用八进制模式进行权限修改~
八进制修改权限格式: chmod 【八进制值】 文件名
例【需要注意的是八进制模式会直接覆盖原有权限,而非增减操作(与符号模式的 +
/-
不同)】
chown 功能:修改文件的拥有者 语法格式:chown [参数] 用户名 文件名 常用选项:-R 递归修改文件或目录的拥有者
chgrp 功能:修改文件的所属组 语法格式:chgrp [参数] 用户名 文件名 常用选项:-R 递归修改文件或目录的所属组
比如小编当前有username,xiaodu,root三个用户
如果我想把xiaodu账号的testfile.txt文件给username账号,也就相当于修改文件拥有者~
但是当我们操作的时候请求被拒绝~
这是因为就像平时我们给别人东西一样,也需要看对方是否接受,如果接受才可以给对方,还有一种解决办法就是进行权限提升,也就是以root权限强制给别人,我们也就可以使用前面的sudo进行普通用户权限提升~
同样可以进行权限提升修改文件所属组:
修改回去:
除了分别修改以外,还有一种方法可以同时修改拥有者和所属组:
命令行输入:chown 拥有者:所属组 文件名
前面我们都是对普通文件进行操作,那么对于目录这样比较特殊的文件应该怎么操作呢?
首先我们来看看,我们进入一个目录,需要什么权限呢?我们来实际操作一下:
1、进入一个目录,需要r权限吗?
所以进入一个目录不需要r权限,但是我们可以看到也无法查看目录里面的文件信息。这是因为【 r 权限决定是否允许用户查看执行目录下的文件信息!】
2、进入一个目录,需要w权限吗?
所以进入一个目录不需要w权限,但是我们可以看到不可以在当前目录下新建文件。这是因为【 w权限决定该用户是否可以修改(属性)或者删除/新建执行目录下的文件】
3、进入一个目录,需要x权限吗?
答案应该显而易见了,我们一样实际操作:
所以我们得到答案,进入目录需要x权限~
总结:
权限标识 | 权限名称 | 目录上的核心作用 | 典型场景说明 |
---|---|---|---|
x | 执行权限 | 进入目录的必选条件 (无x权限时,即使有r权限也无法使用cd命令进入目录) | 必须同时拥有目录的x权限和文件的r权限才能执行文件 |
r | 读权限 | 允许查看目录内文件列表(通过ls命令) 但无法进入目录或操作文件 | 可列出/etc目录下的文件,但无法进入该目录修改配置 |
w | 写权限 | 允许在目录内执行以下操作: ✅ 新建文件 ✅ 删除文件 ✅ 重命名文件 ✅ 修改文件属性 | 可在/tmp目录自由创建/删除临时文件(需配合x权限) |
我们可以看到当我们新建一个文件/目录的时候都会有默认的权限,那么这个默认的权限是怎么得到的呢?
Linux文件/目录默认权限生成机制
666
(rw-rw-rw-
)777
(rwxrwxrwx
)umask 0002
umask
值可能不同,小编的Centos的umask值为0002接下来我们尝试修改权限掩码:
那么如何恢复默认权限掩码呢?
方法一:重新设置为002
方法二:关掉Xshell重新登录
普通用户如果需要进行协作,那么有时候我们就需要进行普通文件共享~
这里给出一种方法:使用公共目录实现普通用户文件共享~
首先root账号在根目录下创建一个共享目录:
该目录拥有者和所属组都是root,现在为其他用户增加rwx权限:
那么其他用户就可以在该目录下进行操作,普通用户之间就实现了数据共享:
username为xiaodu.txt
文件其他用户,具有r权限,可以读取文件内容,但是不可以写入~
接下来我们可以看一个神奇的现象:
username作为xiaodu.txt
文件其他用户,只具有r权限,但是可以删除xiaodu.txt文件,这是因为在shared-dir目录下,xiaodu和username都是其他用户,root都给了它们w权限,都可以在该目录下进行文件的新建或者删除~
这样虽然实现了普通用户文件共享,但是也就会存在互删的情况,如果把该目录其他用户权限修改为r-x,那么就没有办法新建文件了,所以为了解决这个问题,就有了粘滞位的概念~
w
),也无法删除非自身拥有的文件/tmp
默认权限为 1777
实际操作:
//设置方法一(符号设置)
chmod +t directory_name # 启用粘滞位
chmod -t directory_name # 禁用粘滞位
//设置方法二(数字设置)
chmod 1777 directory_name # 设置粘滞位(1xxx)
# 权限解析:
# 第一个数字1表示粘滞位
# 后续777表示传统权限(rwxrwxrwx)
当目录对other有x权限时显示为t,否则显示为T
简单对比:
特性 | 传统权限(无粘滞位) | 粘滞位生效时 |
---|---|---|
目录写权限(w) | 允许删除所有文件 | 仅允许删除自身文件 |
文件删除控制 | 依赖文件所有权 | 强制所有权验证 |
典型应用场景 | 私有目录 | 公共共享目录 |
file
命令是可以用于检测文件类型,它通过分析文件的内容特征(而非仅依赖文件扩展名)来判断文件的实际类型~
使用:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有