🍉变好的过程都不太舒服,试试再努力点🍉
Linux权限
Linux的两种用户:超级用户(root)和普通用户(user)
特征 / 权限 | 超级用户(root) | 普通用户(user) |
---|---|---|
权限等级 | 最高权限,可以执行任何操作 | 受限权限,无法执行特权操作 |
系统管理 | 可以安装、删除软件包,修改系统配置等 | 不能进行系统级操作,如安装软件包 |
文件访问 | 可以访问系统中的所有文件和目录 | 只能访问自己有权限的文件和目录 |
用户身份 | 标识为用户名 root ,UID 为 0 | 根据系统分配的用户名和 UID |
家目录 | /root | 普通用户各自的家目录,如 /home/user |
任务使用 | 系统管理和维护 | 日常任务操作,如文件管理、应用运行 |
风险和安全 | 需要谨慎操作,风险较高 | 操作受限,系统安全性较高 |
权限管理 | 可以修改任何文件和目录的权限 | 只能修改自己的文件和目录权限 |
推荐用途 | 系统管理员操作 | 普通用户日常操作 |
用户切换
su
命令可以用来切换到超级用户(root)或其他普通用户。
基本语法:su [options] [username]
-
切换到超级用户(root)
执行以下命令后,系统将要求输入超级用户(root)的密码:
su
-
切换到其他用户
切换到名为
user2
的普通用户:su user2
选项
-
-
:使用-
选项可以模拟完整的登录环境,包括用户的环境变量、工作目录等。su -
-
-c
:使用-c
选项后面跟随要执行的命令,可以在切换用户后立即执行指定的命令。su -c "command_to_execute"
权限管理
Linux中对访问文件的人分为3种:所有者、所有组、其他,即对应u(user)、g(group)、o(other)
文件类型:
符号 | 文件类型 | 说明 |
---|---|---|
- | 普通文件(Regular File) | 一般的文件,例如文本文件、二进制文件等。 |
d | 目录(Directory) | 表示这是一个目录。 |
l | 符号链接(Symbolic Link) | 指向另一个文件或目录的指针(软链接)。 |
b | 块设备文件(Block Device) | 提供块设备访问的特殊文件,例如硬盘。 |
c | 字符设备文件(Character Device) | 提供字符设备访问的特殊文件,例如键盘、鼠标。 |
p | 命名管道(Named Pipe, FIFO) | 允许进程间通信的特殊文件。 |
s | 套接字(Socket) | 用于网络通信的特殊文件。 |
D | 门(Door) | 用于进程间通信的文件(主要在某些UNIX系统上使用)。 |
基本权限:
所有者、所有组和其他各自对应的有3个字符分别对应 r
、w
、x
,分别代表可读、可写、可执行。可读可写可执行对于文件和目录所代表的意义略有区别。
权限 | 文件(File) | 目录(Directory) |
---|---|---|
可读 (r ) | 允许读取文件内容。 | 允许列出目录中的文件和子目录名。 |
可写 (w ) | 允许修改文件内容。 | 允许在目录中创建、删除和重命名文件和子目录。 |
可执行 (x ) | 允许执行文件,如果是可执行文件。 | 允许进入目录,访问其中的文件和子目录。 |
-
文件权限示例:
- 如果一个文件的权限是
-rwxr--r--
:- 文件所有者可以读、写和执行这个文件。
- 文件所属组的用户可以读这个文件,但不能写入或执行。
- 其他用户可以读这个文件,但不能写入或执行。
- 如果一个文件的权限是
-
目录权限示例:
- 如果一个目录的权限是
drwxr-x---
:- 目录所有者可以读、写和进入这个目录。
- 目录所属组的用户可以读和进入这个目录,但不能写入。
- 其他用户无法访问这个目录。
- 如果一个目录的权限是
表示方法:
文件和目录的权限既可以用字符表示,也可以用八进制数字表示。
权限类型 | 字符表示 | 八进制表示 |
---|---|---|
无权限 | --- | 0 |
可执行 | --x | 1 |
可写 | -w- | 2 |
可写可执行 | -wx | 3 |
可读 | r-- | 4 |
可读可执行 | r-x | 5 |
可读可写 | rw- | 6 |
可读可写可执行 | rwx | 7 |
文件或目录的权限由三组字符组成,每组对应于所有者(user)、所属组(group)、和其他用户(other)的权限。这三组权限也可以用三个八进制数字表示,分别对应于文件或目录的所有者、所属组和其他用户的权限。
-rwxr-xr--
最终的八进制表示法为:754
drwxr-x---
最终的八进制表示法为:750
文件权限设置
chmod
chmod
命令允许用户以字符形式或八进制形式设置文件的读取(read)、写入(write)、执行(execute)权限。
文件权限的字符表示法包括以下几个部分:
- 所有者权限:
u
(user) - 所属组权限:
g
(group) - 其他用户权限:
o
(other) - 特殊权限:
a
(all),即所有用户(u
、g
、o
)的权限
语法:chmod [选项] 模式 文件名
-
添加权限:
chmod u+x file.txt # 给文件所有者添加执行权限 chmod go-w file.txt # 剥夺所属组和其他用户的写权限 chmod a=r file.txt # 将文件的所有者、所属组和其他用户的权限设置为只读
-
移除权限:
chmod u-x file.txt # 移除文件所有者的执行权限 chmod go+r file.txt # 给所属组和其他用户添加读权限
-
完全重置权限:
chmod 644 file.txt # 设置文件的权限为 -rw-r--r-- chmod 755 script.sh # 设置可执行脚本的权限为 -rwxr-xr-x
八进制表示法是数字形式,每个数字表示一组权限的组合:
读、写、执行权限组合分别可以为rwx
,rw-
,r-x
等对应的八进制数字表示为7
,6
,5
等。
-
将文件设置为
-rwxr-xr--
的权限:chmod 754 file.txt
这里的
7
对应所有者权限rwx
,5
对应所属组权限r-x
,4
对应其他用户权限r--
。 -
将文件设置为
-rw-r--r--
的权限:chmod 644 file.txt
这里的
6
对应所有者权限rw-
,4
对应所属组和其他用户权限r--
。
chown
chown
命令用于更改文件或目录的所有者和/或所属组,而文件和目录的所有者和所属组决定了谁可以访问这些文件及其权限。
语法:chown [选项] 所有者:所属组 文件名
常用选项
-R
:递归更改目录及其所有子目录和文件的所有者和/或所属组。--reference=文件名
:将权限设置为与另一个文件相同的所有者和所属组。
-
更改文件的所有者:
chown user1 file.txt
这将把
file.txt
的所有者更改为user1
,保持当前的所属组不变。 -
更改文件的所有者和所属组:
chown user1:group1 file.txt
这将把
file.txt
的所有者更改为user1
,并将所属组更改为group1
。 -
递归更改目录及其所有子目录和文件的所有者和所属组:
chown -R user1:group1 /path/to/directory
这将把
/path/to/directory
目录及其所有子目录和文件的所有者更改为user1
,并将所属组更改为group1
。 -
将文件的所有者和所属组设置为与另一个文件相同:
chown --reference=reference.txt file.txt
这将把
file.txt
的所有者和所属组设置为reference.txt
的所有者和所属组。
chgrp
chgrp
命令用于更改文件或目录的所属组。
语法:chgrp [选项] 所属组 文件名
常用选项
-R
:递归更改目录及其所有子目录和文件的所属组。--reference=文件名
:将所属组设置为与另一个文件相同的所属组。
-
更改文件的所属组:
chgrp group1 file.txt
这将把
file.txt
的所属组更改为group1
,保持当前的所有者不变。 -
递归更改目录及其所有子目录和文件的所属组:
chgrp -R group1 /path/to/directory
这将把
/path/to/directory
目录及其所有子目录和文件的所属组更改为group1
。 -
将文件的所属组设置为与另一个文件相同:
chgrp --reference=reference.txt file.txt
这将把
file.txt
的所属组设置为reference.txt
的所属组。
文件掩码
文件掩码(File Mask)是用来控制新创建的文件和目录的默认权限的一种机制。文件掩码实际指的是umask
(用户文件创建掩码)。
文件的最终权限是由默认权限和 umask
的掩码值共同决定的。
- 默认权限
- 文件的默认权限:
666
(rw-rw-rw-
) - 目录的默认权限:
777
(rwxrwxrwx
)
- umask
umask
是一个三位八进制值,表示从默认权限中去除的权限。
- 计算最终权限的步骤
步骤 1:获取 umask 的反码
- 反码是将 umask 的每一位按位取反。反码值用于计算实际权限。
步骤 2:计算实际权限
- 实际权限 是通过将默认权限与 umask 的反码进行按位与操作来计算的。
公式:
实际权限
=
默认权限
&
∼
umask
\text{实际权限} = \text{默认权限} \& \sim \text{umask}
实际权限=默认权限&∼umask
示例 1:umask = 022
-
文件权限计算
- 默认权限(文件):
666
(rw-rw-rw-
) - umask:
022
(----w--w-
)
取 umask 的反码:
- umask
022
的反码是755
(rwxr-xr-x
)
新文件的实际权限是
644
(rw-r--r--
)。 - 默认权限(文件):
-
目录权限计算
- 默认权限(目录):
777
(rwxrwxrwx
) - umask:
022
(----w--w-
)
取 umask 的反码:
- umask
022
的反码是755
(rwxr-xr-x
)
新目录的实际权限是
755
(rwxr-xr-x
)。 - 默认权限(目录):
umask
umask
是一个用于设置文件和目录默认权限掩码的命令,其值影响新创建文件和目录的权限。
查看当前 umask 值:
这表示当前的 umask
值为 0022
,意味着新创建的文件和目录的权限会在默认权限的基础上去除 0022
指定的权限。第一个0代表八进制
-
修改
umask
值(如果需要更改):umask 0077
设置
umask
为0077
,去除组和其他用户的所有权限。新创建的文件和目录将会有最严格的权限设置。
临时与永久设置
-
临时设置:
使用umask
命令修改当前会话的 umask 值。更改只对当前终端会话有效,一旦会话结束,设置将恢复到默认值。 -
永久设置:
可以将umask
命令添加到用户的 shell 配置文件中,例如~/.bashrc
或~/.profile
文件。这样设置会在每次登录时应用。echo "umask 0022" >> ~/.bashrc
然后,重新加载配置文件以应用更改:
source ~/.bashrc
file
用于确定文件类型的实用工具。在Linux和Unix系统中,file
命令可以分析文件的内容并尝试识别文件的类型,而不仅仅是依赖于文件扩展名。
**基本用法:**file [选项] 文件名
常用选项
-
-b
或--brief
:- 仅显示文件类型,不显示文件名。
-
-i
或--mime
:- 显示文件的 MIME 类型而不是传统的文件描述。
-
-f
:- 从指定的文件中读取文件名列表,依次识别每个文件的类型。
file -f filelist.txt
filelist.txt
应该包含文件名列表,每行一个文件名。 -
-z
:- 试图识别压缩文件中的文件类型。
file -z archive.tar.gz
这将识别压缩文件中的内容类型。
解析输出
- ASCII text:表示文件是 ASCII 文本文件。
- PNG image data:表示文件是 PNG 图像数据。
- application/pdf:表示文件是 PDF 文件,MIME 类型为
application/pdf
。 - gzip compressed data:表示文件是经过 gzip 压缩的数据。
粘置位
粘着位(Sticky Bit) 是一种特殊的文件权限位,用于控制文件或目录的删除权限。在共享目录中非常有用。
-
对于目录:
- 粘着位用于目录时,确保只有文件的所有者(或根用户)才能删除该目录中的文件。即使其他用户有写权限,也不能删除或重命名该目录中的文件,除非他们是这些文件的所有者。
- 这种机制通常用于公共或共享目录,例如
/tmp
,以防止非所有者的用户删除或修改其他用户的文件。
-
对于文件:
- 粘着位对文件的作用不大,主要用于目录。
设置粘着位
- 使用
chmod
命令设置粘着位,可以使用+t
选项。
chmod +t directory_name