前言
shell命令,Linux权限及相关指令。
Linux的Shell是一个命令解释器,它提供了用户与操作系统内核进行交互的界面。Shell可以通过命令行或脚本语言执行命令,从而完成各种任务。
Shell和图形化界面(GUI)之间是两种不同的用户交互方式,我们熟知的Windows GUI(Microsoft Windows操作系统的用户界面),它提供了可视化的图形环境,让用户能够使用图形元素(如窗口、图标、按钮等)和鼠标进行交互。而Shell提供了一个基于文本的界面,用户通过命令行输入文本命令与系统交互。 Shell和GUI并不互斥,而是相辅相成。用户可以根据任务需求选择使用其中一种或两者结合使用。
用户—shell—内核之间的关系:
shell是命令解释器的统称,常见的Shell包括Bash、Zsh、Fish、Dash等。Linux操作系统可以同时包含多个不同的Shell,通常会选择一个默认的Shell,但用户和系统管理员可以根据需求安装和配置多个Shell,并在需要时切换使用。
Linux系统中,有两种类型的用户:root用户和普通用户
使用 su
命令切换用户:
切换到其他用户: 输入目标用户(username
)的密码。如果输入正确,你将切换到目标用户的环境。
su username
切换到root用户: 切换到root用户,同时也切换到root用户的环境。输入root密码以确认身份。
su -
另外,可以使用 exit
命令退出当前用户的shell,回到上一个用户的shell环境。例如,在切换到root用户后,执行 exit
可以回到之前的用户。
-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文件权限中,有三个主要的角色,它们决定了对文件或目录的访问权限。这三个角色分别是:
所有者(User):
所属组(Group):
其他用户(Others):
而每个角色都有读(Read)、写(Write)和执行(Execute)三种基本权限。
总结一下文件和目录的读、写、执行权限:
对于文件而言:
读权限(Read): 允许用户查看文件的内容。
写权限(Write): 允许用户修改文件的内容。
执行权限(Execute): 对于普通文件,执行权限表示用户可以运行该文件。对于可执行二进制文件或脚本,执行权限是运行文件的必要条件。
对于目录而言:
读权限(Read): 允许用户列出目录中的文件和子目录。
写权限(Write): 允许用户向目录中添加新文件或删除已有的文件。
执行权限(Execute): 允许用户进入该目录。
例如:
所有者xkh
具有读写的权限
所属组xkh
具有读写的权限
其他用户 只有读的权限
需要注意的是,如果所有者同时也是所属组,且所有者没有读写执行文件的权限,但所属组有读写执行文件的权限,即使在这情况下,所有者也不能读写执行文件。
在Linux系统中,可以使用 chown
命令来修改文件的所有者和所属组。以下是 chown
命令的基本语法:
sudo chown [新所有者]:[新所属组] 文件或目录
修改文件的所有者:
sudo chown 新所有者 文件
修改文件的所属组:
sudo chown :新所属组 文件
修改文件的所有者和所属组:
sudo chown 新所有者:新所属组 文件
批量修改目录及其下所有文件和子目录的所有者和所属组,可以使用 -R
选项:
sudo chown -R 新所有者:新所属组 目录
另外,可以使用chgrp
修改修改文件的所属组。语法如下:
sudo chgrp [新所属组] 文件或目录
注意:修改文件或目录的所属组通常需要使用 sudo 或以超级用户(root)身份运行,以确保有足够的权限进行修改。
u
(所有者)g
(所属者)o
(其他用户)+
(增加权限)-
(减少权限)=
(设置权限)例如,要将文件 example.txt
的所有者添加执行权限,可以使用以下命令:
chmod u+x example.txt
例如,将文件 example.txt
设置为所有者具有读写权限,所属组具有读权限,其他用户具有读权限:
chmod u=rw,g=r,o=r example.txt
例如,将文件 example.txt
设置为所有者、所属组和其他用户都具有读写执行权限:
chmod ugo+rwx example.txt
使用三位的八进制数来表示权限,每一位表示一个权限组(所有者、所属组、其他用户)。
例如,要将文件 example.txt
设置为所有者具有读写权限、所属组具有读权限、其他用户具有读权限,可以使用以下命令:
chmod 644 example.txt
数值表示权限:
权限符号 | 八进制 | 二进制 |
---|---|---|
- - - | 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
这意味着新文件的权限是rw-r–r–。
设置umask:
使用umask
命令来设置umask。
umask 022