目录
shell的运行原理
无论是windows的图形化界面还是linux的命令行界面,它们本质上都是操作系统提供给用户的交互方式,通常被称为“外壳程序”或者“壳层(shell)”。
图形化界面(gui)通过图标、菜单和窗口等可视化元素来让用户进行操作,这种方式直观、易用,特别适合那些不熟悉命令行操作的用户。
而命令行界面(cli)则是通过命令输入和文本界面来完成操作,它可以提供更为精确和灵活的控制,尤其对于需要自动化任务或者远程管理系统的操作来说尤为重要。
linux严格来说是一个操作系统的核心,也就是kernel,而不是整个操作系统。用户无法直接与kernel交互,而是通过shell这样的外壳程序来与kernel进行通信和操作。
shell不仅限于命令行界面,还包括图形界面下的命令解释器。它提供了用户与linux操作系统交互的主要方式,使用户能够通过命令和脚本完成各种操作,从简单的文件管理到复杂的系统配置和管理工作。
用户在windows中运行的应用程序,如qq、微信等,都是通过创建单独的进程来实现的。如果一个程序出现问题,如卡死或崩溃,其他程序仍然可以正常运行,保证了系统的稳定性和用户体验。
linux权限问题
linux权限的概念
在linux系统中,权限管理是非常重要的安全措施,通过权限可以控制用户对系统资源的访问和操作。
如何实现用户账号之间的切换
可能有时你的权限不够,需要从普通用户切换到超级用户,进而完成某些操作。
从普通账号切换为root账号。
从root账号切换为普通账号。
注意:
1)从普通账号切换为root账号时,指令当中的root可省略,因为root账号只有一个。
2)该指令也可以从一个普通用户切换为另一个普通用户,输入待切换用户的账号密码即可。
3)切换用户后,若想切回上次的用户,可通过ctrl+d实现。
如何仅提升当前指令的权限
但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。
如何将普通用户添加到信任列表
linux权限管理
文件访问者的分类(人)
文件访问权限通常分为三个类别,用于确定哪些用户可以访问文件以及如何访问。
注意:
1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演。
2)在linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。
那么为什么会有所属组这个概念呢? 下面举个例子。
在某个公司当中有两个小组团队(a组、b组)在同一个linux服务器上进行着同一款项目的开发(赛马模式),而你就是a组当中的一员。
所属组的存在使得文件创建者可以灵活地设置权限,使自己和团队成员能够访问文件,同时限制其他人的访问权限。
我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组。
文件类型和访问权限(事物属性)
权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性。对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可执行的属性。
使用指令ll,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性。
这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。
注意:在linux中,文件类型是由文件系统和文件的属性来决定的,而不是由文件名或文件扩展名(后缀)来决定的。这与windows等操作系统有所不同,因为windows通常根据文件扩展名来确定文件类型。但是我们仍然推荐使用后缀,方便我们人区分以及一些工具需要。
剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性。
每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。
若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性。
文件权限值的表示方法
在linux中,文件权限可以使用两种主要的表示方法:字符表示法和八进制数值表示法。
1)字符表示方法
ll指令打印文件权限值时的表示方法就是字符表示法。
字符表示法 | 说明 |
r - - | 仅可读 |
- w - | 仅可写 |
- - x | 仅可执行 |
r w - | 可读可写 |
r - x | 可读可执行 |
- w x | 可写可执行 |
r w x | 可读可写可执行 |
- - - | 无权限 |
2)八进制数值表示法
字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。
字符表示法 | 二进制 | 八进制数值表示法 | 说明 |
---|---|---|---|
r - - | 100 | 4 | 仅可读 |
- w - | 010 | 2 | 仅可写 |
- - x | 001 | 1 | 仅可执行 |
r w - | 110 | 6 | 可读可写 |
r - x | 101 | 5 | 可读可执行 |
- w x | 011 | 3 | 可写可执行 |
r w x | 111 | 7 | 可读可写可执行 |
- - - | 000 | 0 | 无权限 |
文件访问权限的相关设置方法
如何改变文件的访问权限
要改变文件的访问权限,你可以使用 chmod
命令,并根据你的需求选择合适的权限设置方式:符号表示法或八进制数字表示法。
# 设置文件拥有者具有读写权限,所属组具有读权限,其他用户无权限
chmod u=rw,g=r,o= file.txt
# 添加文件拥有者的执行权限
chmod u+x file.sh
# 移除其他用户的写入权限
chmod o-w file.txt
# 递归设置目录及其下所有文件为所有用户只读权限
chmod -r a=r directory/
# 设置文件拥有者读写执行权限,所属组读执行权限,其他用户只读权限
chmod 751 file.sh
# 递归设置目录及其下所有文件为所有用户读写执行权限
chmod -r 777 directory/
如何改变文件的拥有者
要改变文件或目录的拥有者,你可以使用 chown 命令。这个命令允许你指定新的用户或用户组作为文件或目录的拥有者。
示例:
1、修改文件的拥有者:
chown bob file.txt
这个命令将 file.txt 文件的拥有者修改为 bob 用户。
2、修改目录的拥有者及其子目录下所有文件的拥有者(递归修改):
chown -r alice:users directory/
这个命令将 directory/ 目录及其所有子目录和文件的拥有者修改为 alice 用户,并将它们所属的组设置为 users 组。
如何改变文件的所属组
要改变文件或目录的所属组,你可以使用 chgrp
命令。这个命令允许你指定新的用户组作为文件或目录的所属组。
示例:
1、修改文件的所属组:
chgrp users file.txt
这个命令将 file.txt 文件的所属组修改为 users 组。
2、修改目录的所属组及其子目录下所有文件的所属组(递归修改):
chgrp -r developers directory/
这个命令将 directory/ 目录及其所有子目录和文件的所属组修改为 developers 组。
如何修改文件的掩码
我们查看新建的文件和目录,它们都有自己默认的权限。
实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。
但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)
语法: umask 权限值
功能: 查看或修改文件掩码。
我们可以通过指令umask查看文件默认掩码。
因此我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。
然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值。
也可以理解为凡是在umask中出现的权限位,都不能在最终权限中出现。
我们也可以通过修改umask来设置文件的访问权限。
目录的权限
对于目录来说,与文件不同,其权限具有特定的含义和影响:
-
可读权限 (
r
):- 如果用户对目录具有可读权限,那么用户可以通过
ls
命令列出该目录中的文件和子目录名字。 - 可读权限也允许用户使用
stat
命令查看目录的详细属性信息。
- 如果用户对目录具有可读权限,那么用户可以通过
-
可写权限 (
w
):- 如果用户对目录具有可写权限,那么用户可以在该目录中创建新文件、删除已存在的文件或目录,以及对已有文件或目录进行重命名。
- 可写权限还允许用户修改目录下文件和子目录的内容,包括修改文件的内容或属性。
-
可执行权限 (
x
):- 如果用户对目录具有可执行权限,那么用户可以通过
cd
命令进入该目录。 - 可执行权限还允许用户使用目录下文件的绝对路径,例如执行脚本文件或读取文件的内容,但仅限于有权限的文件。
- 如果用户对目录具有可执行权限,那么用户可以通过
那么这就会出现一个问题:
只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。
为了解决这个不合理的问题,linux引入了粘滞位的概念。
粘滞位
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
此时另一个用户就算有该目录的所有权限,也无法删除该目录下的文件。
粘滞位应用于目录时,其主要作用是限制文件的删除权限。具体来说,如果一个目录被设置了粘滞位,则只有以下用户可以删除该目录中的文件:
-
超级用户:即root用户,始终具有最高权限,可以删除目录中的任何文件。
-
目录的拥有者:拥有该目录的用户,可以删除该目录中的任何文件,无论文件的权限设置如何。
-
文件的拥有者:即文件创建者,可以删除自己创建的文件,即使其他用户有写入权限。
发表评论