前言
shell命令,Linux权限及相关指令。
关于shell
Linux的Shell是一个命令解释器,它提供了用户与操作系统内核进行交互的界面。Shell可以通过命令行或脚本语言执行命令,从而完成各种任务。
Shell和图形化界面(GUI)之间是两种不同的用户交互方式,我们熟知的Windows GUI(Microsoft Windows操作系统的用户界面),它提供了可视化的图形环境,让用户能够使用图形元素(如窗口、图标、按钮等)和鼠标进行交互。而Shell提供了一个基于文本的界面,用户通过命令行输入文本命令与系统交互。 Shell和GUI并不互斥,而是相辅相成。用户可以根据任务需求选择使用其中一种或两者结合使用。
用户—shell—内核之间的关系:
- 用户通过Shell发出命令,Shell解释并传递这些命令给内核,内核执行相应的操作并返回结果给Shell,最终将结果反馈给用户。这种结构使用户能够通过Shell与底层的内核交互,执行各种系统任务。
shell是命令解释器的统称,常见的Shell包括Bash、Zsh、Fish、Dash等。Linux操作系统可以同时包含多个不同的Shell,通常会选择一个默认的Shell,但用户和系统管理员可以根据需求安装和配置多个Shell,并在需要时切换使用。
Linux用户
Linux系统中,有两种类型的用户:root用户和普通用户
- root是系统中的超级用户,可以执行任何命令、访问任何文件,而不受文件权限的限制。
- 普通用户拥有有限的系统权限。
- root用户的命令提示符是
#
,普通用户的命令提示符是$
。
使用 su
命令切换用户:
-
切换到其他用户: 输入目标用户(
username
)的密码。如果输入正确,你将切换到目标用户的环境。su username
- 1
-
切换到root用户: 切换到root用户,同时也切换到root用户的环境。输入root密码以确认身份。
su -
- 1
另外,可以使用 exit
命令退出当前用户的shell,回到上一个用户的shell环境。例如,在切换到root用户后,执行 exit
可以回到之前的用户。
Linux权限
Linux中的文件属性
我们先粗略了解一下文件的属性,以下图为例:
-rw-rw-r--
(除去第一个-
,这是文件类型)分别表示文件所有者(rw-
)、所属组(rw-
)、其他用户(r--
)的读、写、执行权限。文件的权限,分别表示文件所有者、所属组、其他用户的读、写、执行权限。1
表示文件的链接数。这里不做详解xkh xkh
(从左到右)文件的所有者,文件所属的用户组。0
文件的大小(以字节为单位)。Jan 26 21:00
文件的最后修改时间(或创建时间)。test.txt
文件名
文件类型
在Linux系统中,文件类型由文件权限第一个字符表示
更详细地解释文件类型:
-
普通文件(-): 包含数据,可能是文本文件、二进制文件等。
-
目录(d): 包含其他文件和目录的容器。
-
符号链接(l): 指向另一个文件或目录的文件。 它类似于Windows系统中的快捷方式。符号链接本身只是一个文本文件,其中包含了它指向的文件的路径。通过符号链接,可以创建文件系统中的引用,方便用户访问目标文件或目录。
-
字符设备文件(c): 字符设备是以字符为单位进行输入和输出的设备,如终端、键盘、打印机等。
-
块设备文件(b): 块设备是以固定大小的块(通常为512字节或4KB)为单位进行数据存储和传输的设备。硬盘驱动器是块设备的一个常见示例。
-
命名管道(p): 用于进程间通信,也称为FIFO。用于实现不同进程之间的通信。它提供了进程间单向通信的机制,允许一个进程将数据写入管道,而另一个进程可以从管道中读取数据。
因此我们知道Linux不以文件后缀区分文件类型,但文件后缀在有时是必要的
举例,我们创建一个test.c的文件,gcc
编译,并./a.out
执行,发现成功编译并执行
如果我们更改test.c
的后缀为.txt
,会发现不能成功编译
这是因为gcc
是编译器套件,通常根据文件的扩展名来识别源代码文件的类型,不属于Linux原生内核。 所以在某些时候,后缀是必要的,而且后缀有助于我们快速了解文件类型。
Linux权限中的角色及读、写、执行权限
在Linux文件权限中,有三个主要的角色,它们决定了对文件或目录的访问权限。这三个角色分别是:
-
所有者(User):
- 所有者是文件或目录的创建者或所有者。所有者对文件有最高的权限控制,可以读取、写入和执行文件,也可以更改文件的权限。所有者对文件拥有绝对控制权,并且可以赋予其他用户访问权限。
-
所属组(Group):
- 所属组是文件或目录的相关用户组。所有属于同一组的用户共享文件的组权限。组成员可以读取、写入和执行文件,前提是文件的组权限允许。所属组为文件提供了一种集体访问权限的方式,便于协作。
-
其他用户(Others):
- 其他用户是除了所有者和所属组成员之外的所有用户。其他用户权限适用于文件的其余部分。其他用户权限是指除了所有者和所属组成员之外的所有用户对文件的权限。
而每个角色都有读(Read)、写(Write)和执行(Execute)三种基本权限。
总结一下文件和目录的读、写、执行权限:
对于文件而言:
-
读权限(Read): 允许用户查看文件的内容。
-
写权限(Write): 允许用户修改文件的内容。
-
执行权限(Execute): 对于普通文件,执行权限表示用户可以运行该文件。对于可执行二进制文件或脚本,执行权限是运行文件的必要条件。
对于目录而言:
-
读权限(Read): 允许用户列出目录中的文件和子目录。
-
写权限(Write): 允许用户向目录中添加新文件或删除已有的文件。
-
执行权限(Execute): 允许用户进入该目录。
例如:
所有者xkh
具有读写的权限
所属组xkh
具有读写的权限
其他用户 只有读的权限
需要注意的是,如果所有者同时也是所属组,且所有者没有读写执行文件的权限,但所属组有读写执行文件的权限,即使在这情况下,所有者也不能读写执行文件。
修改文件的所有者和所属组
在Linux系统中,可以使用 chown
命令来修改文件的所有者和所属组。以下是 chown
命令的基本语法:
sudo chown [新所有者]:[新所属组] 文件或目录
- 1
-
修改文件的所有者:
sudo chown 新所有者 文件
- 1
-
修改文件的所属组:
sudo chown :新所属组 文件
- 1
-
修改文件的所有者和所属组:
sudo chown 新所有者:新所属组 文件
- 1
-
批量修改目录及其下所有文件和子目录的所有者和所属组,可以使用
-R
选项:sudo chown -R 新所有者:新所属组 目录
- 1
另外,可以使用chgrp
修改修改文件的所属组。语法如下:
sudo chgrp [新所属组] 文件或目录
- 1
注意:修改文件或目录的所属组通常需要使用 sudo 或以超级用户(root)身份运行,以确保有足够的权限进行修改。
修改读、写、执行权限
使用符号表示权限:
- 符号表示权限:
u
(所有者)g
(所属者)o
(其他用户)+
(增加权限)-
(减少权限)=
(设置权限)
例如,要将文件 example.txt
的所有者添加执行权限,可以使用以下命令:
chmod u+x example.txt
- 1
例如,将文件 example.txt
设置为所有者具有读写权限,所属组具有读权限,其他用户具有读权限:
chmod u=rw,g=r,o=r example.txt
- 1
例如,将文件 example.txt
设置为所有者、所属组和其他用户都具有读写执行权限:
chmod ugo+rwx example.txt
- 1
使用数字表示权限:
使用三位的八进制数来表示权限,每一位表示一个权限组(所有者、所属组、其他用户)。
例如,要将文件 example.txt
设置为所有者具有读写权限、所属组具有读权限、其他用户具有读权限,可以使用以下命令:
chmod 644 example.txt
- 1
数值表示权限:
权限符号 | 八进制 | 二进制 |
---|---|---|
- - - | 0 | 000 |
r - - | 4 | 100 |
- w - | 2 | 010 |
- - x | 1 | 001 |
r w - | 6 | 110 |
r - x | 5 | 101 |
- w x | 3 | 011 |
r w x | 7 | 111 |
文件和目录默认权限及权限掩码
我们知道,当我们创建文件和目录时会有初始的权限,这里的权限是文件和目录的默认权限与权限掩码的共同作用下得出的,一般来说,初始权限 = 默认权限 & (~权限掩码) (&是按位与,~是取反)
文件和目录的起始权限:
-
默认文件权限: 一般情况下,默认文件权限是 666,即允许所有用户读写。
-
默认目录权限: 默认目录权限是 777,即允许所有用户读、写和执行。
权限掩码(umask):
权限掩码是一个8进制数字,用于掩盖默认权限。它指定了不允许的权限,而不是允许的权限。
-
默认umask: 通常默认umask设置为022。这意味着不允许所属组和其他用户写入新创建的文件,因为022中的2表示写入权限。对目录而言,不允许所属组和其他用户有写入权限。
-
计算新文件/目录的权限: 新文件的初始权限由默认文件权限和umask决定,新目录的初始权限由默认目录权限和umask决定。计算方式是用默认权限减去umask的值,实际上进行了初始权限 = 默认权限 & (~权限掩码)。
举例说明:
默认文件权限: 666
- umask设置: 022
- 计算新文件权限: 666 - 022 = 644
这意味着新文件的权限是rw-r–r–。
设置umask:
使用umask
命令来设置umask。
umask 022
- 1
多个用户实现简单的多文件共享
在文件系统中创建一个目录作为共享文件夹:
共享的文件夹不能创建在某一个用户的家目录下,共享文件夹是所有人可读可进入的,由于用户的家目录下通常只能由该目录的拥有者进入目录,读修改文件等。因此,共享文件夹通常创建在除用户的家目录下的的目录。
我们在root账户的根目录创建一个shared
目录,并将所有的权限放开:
粘滞位
要保证用户在共享文件夹下创建文件,但不能随意删除文件,使用粘滞位可以解决这个问题。
当目录(且只有目录能设置)设置了粘滞位后,只有目录的所有者、目录的所属组的成员和超级用户才能删除目录中的文件,即使其他用户对该目录有写权限也不能删除其他用户创建的文件。
要设置粘滞位,可以使用 chmod
命令,并在权限设置中添加 “t” 标志。例如,要在 /tmp
目录上设置粘滞位,可以执行以下命令:
chmod +t /tmp
- 1
要移除粘滞位,可以使用相同的命令,只需在权限设置中去除 “t” 标志即可。
chmod -t /tmp
- 1
如果你喜欢这篇文章,点赞?+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。
前言
shell命令,Linux权限及相关指令。
关于shell
Linux的Shell是一个命令解释器,它提供了用户与操作系统内核进行交互的界面。Shell可以通过命令行或脚本语言执行命令,从而完成各种任务。
Shell和图形化界面(GUI)之间是两种不同的用户交互方式,我们熟知的Windows GUI(Microsoft Windows操作系统的用户界面),它提供了可视化的图形环境,让用户能够使用图形元素(如窗口、图标、按钮等)和鼠标进行交互。而Shell提供了一个基于文本的界面,用户通过命令行输入文本命令与系统交互。 Shell和GUI并不互斥,而是相辅相成。用户可以根据任务需求选择使用其中一种或两者结合使用。
用户—shell—内核之间的关系:
- 用户通过Shell发出命令,Shell解释并传递这些命令给内核,内核执行相应的操作并返回结果给Shell,最终将结果反馈给用户。这种结构使用户能够通过Shell与底层的内核交互,执行各种系统任务。
shell是命令解释器的统称,常见的Shell包括Bash、Zsh、Fish、Dash等。Linux操作系统可以同时包含多个不同的Shell,通常会选择一个默认的Shell,但用户和系统管理员可以根据需求安装和配置多个Shell,并在需要时切换使用。
Linux用户
Linux系统中,有两种类型的用户:root用户和普通用户
- root是系统中的超级用户,可以执行任何命令、访问任何文件,而不受文件权限的限制。
- 普通用户拥有有限的系统权限。
- root用户的命令提示符是
#
,普通用户的命令提示符是$
。
使用 su
命令切换用户:
-
切换到其他用户: 输入目标用户(
username
)的密码。如果输入正确,你将切换到目标用户的环境。su username
- 1
-
切换到root用户: 切换到root用户,同时也切换到root用户的环境。输入root密码以确认身份。
su -
- 1
另外,可以使用 exit
命令退出当前用户的shell,回到上一个用户的shell环境。例如,在切换到root用户后,执行 exit
可以回到之前的用户。
Linux权限
Linux中的文件属性
我们先粗略了解一下文件的属性,以下图为例:
-rw-rw-r--
(除去第一个-
,这是文件类型)分别表示文件所有者(rw-
)、所属组(rw-
)、其他用户(r--
)的读、写、执行权限。文件的权限,分别表示文件所有者、所属组、其他用户的读、写、执行权限。1
表示文件的链接数。这里不做详解xkh xkh
(从左到右)文件的所有者,文件所属的用户组。0
文件的大小(以字节为单位)。Jan 26 21:00
文件的最后修改时间(或创建时间)。test.txt
文件名
文件类型
在Linux系统中,文件类型由文件权限第一个字符表示
更详细地解释文件类型:
-
普通文件(-): 包含数据,可能是文本文件、二进制文件等。
-
目录(d): 包含其他文件和目录的容器。
-
符号链接(l): 指向另一个文件或目录的文件。 它类似于Windows系统中的快捷方式。符号链接本身只是一个文本文件,其中包含了它指向的文件的路径。通过符号链接,可以创建文件系统中的引用,方便用户访问目标文件或目录。
-
字符设备文件(c): 字符设备是以字符为单位进行输入和输出的设备,如终端、键盘、打印机等。
-
块设备文件(b): 块设备是以固定大小的块(通常为512字节或4KB)为单位进行数据存储和传输的设备。硬盘驱动器是块设备的一个常见示例。
-
命名管道(p): 用于进程间通信,也称为FIFO。用于实现不同进程之间的通信。它提供了进程间单向通信的机制,允许一个进程将数据写入管道,而另一个进程可以从管道中读取数据。
因此我们知道Linux不以文件后缀区分文件类型,但文件后缀在有时是必要的
举例,我们创建一个test.c的文件,gcc
编译,并./a.out
执行,发现成功编译并执行
如果我们更改test.c
的后缀为.txt
,会发现不能成功编译
这是因为gcc
是编译器套件,通常根据文件的扩展名来识别源代码文件的类型,不属于Linux原生内核。 所以在某些时候,后缀是必要的,而且后缀有助于我们快速了解文件类型。
Linux权限中的角色及读、写、执行权限
在Linux文件权限中,有三个主要的角色,它们决定了对文件或目录的访问权限。这三个角色分别是:
-
所有者(User):
- 所有者是文件或目录的创建者或所有者。所有者对文件有最高的权限控制,可以读取、写入和执行文件,也可以更改文件的权限。所有者对文件拥有绝对控制权,并且可以赋予其他用户访问权限。
-
所属组(Group):
- 所属组是文件或目录的相关用户组。所有属于同一组的用户共享文件的组权限。组成员可以读取、写入和执行文件,前提是文件的组权限允许。所属组为文件提供了一种集体访问权限的方式,便于协作。
-
其他用户(Others):
- 其他用户是除了所有者和所属组成员之外的所有用户。其他用户权限适用于文件的其余部分。其他用户权限是指除了所有者和所属组成员之外的所有用户对文件的权限。
而每个角色都有读(Read)、写(Write)和执行(Execute)三种基本权限。
总结一下文件和目录的读、写、执行权限:
对于文件而言:
-
读权限(Read): 允许用户查看文件的内容。
-
写权限(Write): 允许用户修改文件的内容。
-
执行权限(Execute): 对于普通文件,执行权限表示用户可以运行该文件。对于可执行二进制文件或脚本,执行权限是运行文件的必要条件。
对于目录而言:
-
读权限(Read): 允许用户列出目录中的文件和子目录。
-
写权限(Write): 允许用户向目录中添加新文件或删除已有的文件。
-
执行权限(Execute): 允许用户进入该目录。
例如:
所有者xkh
具有读写的权限
所属组xkh
具有读写的权限
其他用户 只有读的权限
需要注意的是,如果所有者同时也是所属组,且所有者没有读写执行文件的权限,但所属组有读写执行文件的权限,即使在这情况下,所有者也不能读写执行文件。
修改文件的所有者和所属组
在Linux系统中,可以使用 chown
命令来修改文件的所有者和所属组。以下是 chown
命令的基本语法:
sudo chown [新所有者]:[新所属组] 文件或目录
- 1
-
修改文件的所有者:
sudo chown 新所有者 文件
- 1
-
修改文件的所属组:
sudo chown :新所属组 文件
- 1
-
修改文件的所有者和所属组:
sudo chown 新所有者:新所属组 文件
- 1
-
批量修改目录及其下所有文件和子目录的所有者和所属组,可以使用
-R
选项:sudo chown -R 新所有者:新所属组 目录
- 1
另外,可以使用chgrp
修改修改文件的所属组。语法如下:
sudo chgrp [新所属组] 文件或目录
- 1
注意:修改文件或目录的所属组通常需要使用 sudo 或以超级用户(root)身份运行,以确保有足够的权限进行修改。
修改读、写、执行权限
使用符号表示权限:
- 符号表示权限:
u
(所有者)g
(所属者)o
(其他用户)+
(增加权限)-
(减少权限)=
(设置权限)
例如,要将文件 example.txt
的所有者添加执行权限,可以使用以下命令:
chmod u+x example.txt
- 1
例如,将文件 example.txt
设置为所有者具有读写权限,所属组具有读权限,其他用户具有读权限:
chmod u=rw,g=r,o=r example.txt
- 1
例如,将文件 example.txt
设置为所有者、所属组和其他用户都具有读写执行权限:
chmod ugo+rwx example.txt
- 1
使用数字表示权限:
使用三位的八进制数来表示权限,每一位表示一个权限组(所有者、所属组、其他用户)。
例如,要将文件 example.txt
设置为所有者具有读写权限、所属组具有读权限、其他用户具有读权限,可以使用以下命令:
chmod 644 example.txt
- 1
数值表示权限:
权限符号 | 八进制 | 二进制 |
---|---|---|
- - - | 0 | 000 |
r - - | 4 | 100 |
- w - | 2 | 010 |
- - x | 1 | 001 |
r w - | 6 | 110 |
r - x | 5 | 101 |
- w x | 3 | 011 |
r w x | 7 | 111 |
文件和目录默认权限及权限掩码
我们知道,当我们创建文件和目录时会有初始的权限,这里的权限是文件和目录的默认权限与权限掩码的共同作用下得出的,一般来说,初始权限 = 默认权限 & (~权限掩码) (&是按位与,~是取反)
文件和目录的起始权限:
-
默认文件权限: 一般情况下,默认文件权限是 666,即允许所有用户读写。
-
默认目录权限: 默认目录权限是 777,即允许所有用户读、写和执行。
权限掩码(umask):
权限掩码是一个8进制数字,用于掩盖默认权限。它指定了不允许的权限,而不是允许的权限。
-
默认umask: 通常默认umask设置为022。这意味着不允许所属组和其他用户写入新创建的文件,因为022中的2表示写入权限。对目录而言,不允许所属组和其他用户有写入权限。
-
计算新文件/目录的权限: 新文件的初始权限由默认文件权限和umask决定,新目录的初始权限由默认目录权限和umask决定。计算方式是用默认权限减去umask的值,实际上进行了初始权限 = 默认权限 & (~权限掩码)。
举例说明:
默认文件权限: 666
- umask设置: 022
- 计算新文件权限: 666 - 022 = 644
这意味着新文件的权限是rw-r–r–。
设置umask:
使用umask
命令来设置umask。
umask 022
- 1
多个用户实现简单的多文件共享
在文件系统中创建一个目录作为共享文件夹:
共享的文件夹不能创建在某一个用户的家目录下,共享文件夹是所有人可读可进入的,由于用户的家目录下通常只能由该目录的拥有者进入目录,读修改文件等。因此,共享文件夹通常创建在除用户的家目录下的的目录。
我们在root账户的根目录创建一个shared
目录,并将所有的权限放开:
粘滞位
要保证用户在共享文件夹下创建文件,但不能随意删除文件,使用粘滞位可以解决这个问题。
当目录(且只有目录能设置)设置了粘滞位后,只有目录的所有者、目录的所属组的成员和超级用户才能删除目录中的文件,即使其他用户对该目录有写权限也不能删除其他用户创建的文件。
要设置粘滞位,可以使用 chmod
命令,并在权限设置中添加 “t” 标志。例如,要在 /tmp
目录上设置粘滞位,可以执行以下命令:
chmod +t /tmp
- 1
要移除粘滞位,可以使用相同的命令,只需在权限设置中去除 “t” 标志即可。
chmod -t /tmp
- 1
如果你喜欢这篇文章,点赞?+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。
评论记录:
回复评论: