欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析3
目录
- 👉🏻shell命令解释器
- 👉🏻Linux用户权限
- 如何创建新用户?
- 如何删除用户?
- 如何切换账号?
- sudo是什么?
- sudor名单
- 👉🏻Linux权限管理
- 文件访问者分类
- 所属组是什么?
- 为什么要有所属组?
- 文件类型
- Linux下后缀名的意义
- 👉🏻文件权限值
- 文件权限值的表示方法
- 文件访问权限的相关设置方法
- 🍡chmod
- 🍡chown
- 🍡chgrp
- 🍡umask
- file指令
- 👉🏻目录的权限
- 粘滞位
- 👉🏻Linux知识问题
👉🏻shell命令解释器
我们学习Linux,知道它不过就是操作系统,我们称其为kernel核心,但是我们作为用户不能直接访问核心,要借助软件,如Xshell,我们称之为外壳。
我们输入命令,shell翻译命令给操作系统,操作系统再通过外壳反馈。
所以关系可以表示为:👇🏻
在Linux中,Shell是一种命令行解释器
,它允许用户与操作系统进行交互。Shell提供了一个命令行界面,用户可以在其中输入命令并执行它们。
🌊Shell的存在有以下几个原因:
- 提供了一种与操作系统进行交互的方式,使用户能够执行各种操作,如运行程序、管理文件和目录等。
- Shell可以执行脚本,这些脚本可以自动化执行一系列命令,从而简化重复性任务的操作。
- Shell提供了丰富的命令和功能,使用户能够根据自己的需求进行定制和扩展。
- 阻拦非法命令,保护内核
🌊Shell实现的具体进程
Shell实现的具体进程是通过解释和执行用户输入的命令来与操作系统进行交互。当用户在Shell中输入一个命令时,Shell会解析该命令并执行相应的操作。这些操作可以包括运行系统命令、启动其他程序、管理文件和目录、配置系统设置等。
具体来说,当用户在Shell中输入一个命令时,Shell会创建一个子进程来执行该命令。子进程是由Shell通过调用系统调用(如fork()和exec())来创建的。子进程会继承Shell的环境变量和文件描述符,并执行相应的命令。执行完命令后,子进程会将结果返回给Shell,并退出。
Shell本身是一个进程,通常作为用户登录时的默认进程。它可以是不同的Shell程序,如Bash、Zsh、Fish等。这些Shell程序在底层使用不同的实现方式,但它们的目标都是提供一个交互式的命令行界面,使用户能够与操作系统进行交互。
🗣注意:
shell只是外壳的统称,外壳程序不止一个,如bash、sh、图形化界面(GUI)等都是外壳程序
👉🏻Linux用户权限
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su or su - [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su,root(root可以省略),此时系统会提示输入root用户的口令。
如何创建新用户?
🌕法一:
在Linux中,可以使用useradd命令来创建新用户。以下是创建新用户的步骤:
- 打开终端或命令行界面。
- 以root用户身份登录或使用具有sudo权限的用户登录。
- 运行以下命令来创建新用户:
其中,新用户名是你想要创建的新用户的用户名。
sudo useradd -m 新用户名
- 设置新用户的密码:
系统会提示你输入新用户的密码并进行确认。
sudo passwd 新用户名
- 完成以上步骤后,新用户就会被成功创建。
请注意,上述命令中的sudo用于提升权限,确保你具有足够的权限来创建新用户。
🌕法二:
在Linux中,可以使用adduser命令来创建新用户。以下是使用adduser命令创建新用户的步骤:
- 打开终端或命令行界面。
- 以root用户身份登录或使用具有sudo权限的用户登录。
- 运行以下命令来创建新用户:
其中,新用户名是你想要创建的新用户的用户名。
sudo adduser 新用户名
- 系统会提示你输入新用户的密码以及其他相关信息,如全名、电话号码等。根据提示输入相应的信息。(如果没有提示,可以passwd 用户名自己重新设置密码)
- 完成以上步骤后,新用户就会被成功创建。
如何删除用户?
要删除用户,可以使用userdel命令。以下是删除用户的步骤:
- 打开终端或命令行界面。
- 以root用户身份登录或使用具有sudo权限的用户登录。
- 运行以下命令来删除用户:
其中,用户名是你要删除的用户的用户名。
sudo userdel 用户名
- 如果你想同时删除用户的主目录和邮箱,可以使用-r选项:
sudo userdel -r 用户名
这将删除用户的账户信息、主目录和邮箱。
请注意,删除用户是一个敏感操作,请谨慎使用,并确保你了解删除用户可能带来的影响。在执行上述命令时,需要以root用户身份登录或使用具有sudo权限的用户登录。
如何切换账号?
在Linux中,可以使用su命令来切换到其他用户的账号。以下是切换账号的步骤:
- 打开终端或命令行界面。
- 以当前用户登录或使用具有sudo权限的用户登录。
- 运行以下命令来切换到其他用户的账号:
其中,目标用户名是你要切换到的目标用户的用户名。
su - 目标用户名
- 系统会提示你输入目标用户的密码。输入密码后,你将切换到目标用户的账号。
请注意,上述命令中的-选项
表示切换到目标用户的账号时,同时切换到目标用户的环境变量和工作目录。如果不使用-选项,则只切换账号,而不改变环境变量和工作目录。
另外,如果你想切换到root用户的账号,可以直接运行以下命令:
sudo su -
输入当前用户的密码后,你将切换到root用户的账号。请谨慎使用root用户的权限,以免造成意外的损坏或安全问题。
sudo是什么?
sudo是在Linux和Unix系统中用于提升用户权限的命令。它允许普通用户以超级用户(通常是root用户)的权限来执行特定的命令或访问特定的文件。
当你在使用sudo命令时,系统会要求你输入当前用户的密码,以确认你有权限执行该命令。一旦验证通过,你就可以以超级用户的权限来执行该命令。
使用sudo命令的好处是,它可以限制普通用户对系统的访问权限,只有在需要执行特定任务时才提升权限。这有助于提高系统的安全性,因为普通用户不会一直以超级用户的身份运行。
需要注意的是,sudo命令需要在具有sudo权限的用户下执行,或者以root用户身份执行。在执行敏感或危险的操作时,务必谨慎使用sudo命令,以免造成意外的损坏或安全问题。
sudor名单
我们知道了,sudo是可以让普通用户获得root超级管理员的权限。
但是,我们有没有发现,如果sudo就可以轻易获得超级管理员的权限,还要linux的权限限制有何用?
所以,linux其实设置了一个“白名单”——sudors
只有在这个名单的用户才是被信任的,可以使用sudo指令的。
👉🏻Linux权限管理
文件访问者分类
Linux 文件的访问者可以分成三类:
- 拥有者:文件和文件目录的所有者:u—User
- 所属组:文件和文件目录的所有者所在的组的用户:g—Group
- 其它用户:o—Others
Linux上任何一个文件都有它的拥有者,默认情况下,该文件的隶属组就是拥有者本身。
所属组是什么?
在Linux中,每个文件和目录都有一个所有者和一个所属组。所属组是一组用户的集合,这些用户具有对该文件或目录的特定权限。当一个用户创建一个文件或目录时,它会自动继承创建者的所属组。
所属组可以用来控制文件和目录的访问权限。通过设置适当的权限和所属组,可以限制对文件和目录的访问,以确保只有授权的用户可以进行操作。
为什么要有所属组?
所属组在Linux中起到了多个重要的作用:
-
权限管理:所属组可以用来控制文件和目录的访问权限。通过设置适当的权限和所属组,可以限制对文件和目录的访问,以确保只有授权的用户可以进行操作。这有助于保护敏感数据和系统文件免受未经授权的访问。
-
协作和共享:所属组可以用于实现文件和目录的共享和协作。当多个用户属于同一个所属组时,他们可以共享文件并进行协作编辑。这对于团队合作和项目管理非常有用。
-
简化权限管理:通过将多个用户分配到相同的所属组,可以简化权限管理。而不是为每个用户单独设置权限,只需为所属组设置适当的权限即可。这样可以减少管理工作量,并确保一致的权限设置。
总之,所属组在Linux中是一种重要的组织和管理用户权限的机制,它提供了安全性、协作性和简化权限管理的好处。
文件类型
我们这里需要知道一句话:Linux中不以后缀名判断文件类型!
那么Linux是怎么判断文件类型呢?
我们在输入命令ll后可以查看当前文件下的文件属性
这些文件属性的含义是有这些的👇🏻
所以我们知道了属性第一位才是表达文件的类型。
那么文件类型都有哪些呢?👇🏻
🍧文件类型
- d:文件夹
- -:普通文件(源代码,可执行文件exe、库等)
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
Linux下后缀名的意义
既然linux下后缀名无法判断文件类型,那么后缀名的意义有什么呢?
1.增强可读性,后缀名本身并不决定文件的类型,但它可以提供一些有用的信息
2.Linux不判断后缀名,gcc编译器会判断,如果我们在进行gcc 编译文件时,文件后缀不是可执行文件,则会出现报错。
👉🏻文件权限值
文件权限值的表示方法
在Linux中,文件权限通过一个三位数的权限值来表示。每个权限值由三个位组成,分别表示文件所有者、所属组和其他用户的权限。
每个权限位可以有以下三个值之一:
- r:读权限,表示可以读取文件的内容或查看目录的内容。
- w:写权限,表示可以修改文件的内容或在目录中创建、删除和重命名文件。
- x:执行权限,表示可以执行文件(如果是可执行文件)或进入目录。
这些权限位可以通过以下方式进行组合和表示:
- r:4
- w:2
- x:1
通过将这些值相加,可以得到表示权限的三位数值。例如,如果一个文件的所有者具有读、写和执行权限,所属组具有读和执行权限,其他用户只有读权限,那么该文件的权限值将是754。
- 所有者权限:rwx(读、写、执行)= 4 + 2 + 1 = 7
- 所属组权限:r-x(读、执行)= 4 + 0 + 1 = 5
- 其他用户权限:r–(只读)= 4 + 0 + 0 = 4
因此,该文件的权限值为754。
要查看文件或目录的权限值,可以使用ls -l命令,并查看输出中的第一个字段。要更改文件或目录的权限值,可以使用chmod命令,并指定新的权限值。
例如,要将文件example.txt的权限值更改为754,可以运行以下命令:
chmod 754 example.txt
这将把example.txt的权限值更改为754。
文件访问权限的相关设置方法
🍡chmod
chmod 是一个在 Linux 和其他类 Unix 系统中用于更改文件或目录权限的命令。它是 “change mode” 的缩写。
chmod 命令可以通过两种方式来更改文件或目录的权限:符号模式和绝对模式。
符号模式
:符号模式使用符号来表示权限的增加或减少。它由以下组件组成:
- u:表示文件所有者的权限。
- g:表示所属组的权限。
- o:表示其他用户的权限。
- a:表示所有用户的权限(等同于 ugo)。
- +:表示增加权限。
- -:表示减少权限。
- =:表示设置权限为指定值。
例如,要将文件 example.txt 的所有者权限设置为可读写,可以运行以下命令:
这将增加文件所有者的读和写权限。
chmod u+rw example.txt
绝对模式
:绝对模式使用数字来表示权限。每个权限位都有一个对应的数字值,如下所示:
- r:读权限,对应数字值为 4。
- w:写权限,对应数字值为 2。
- x:执行权限,对应数字值为 1。
如上这些数字都是10进制表示,实际上它们是根据二进制转换过来的。
比如:
- r - - 就是100:对应数字4
- -w- 就是 010:对应数字2
- – x 就是 001:对应数字1
将这些数字值相加,可以得到表示权限的三位数值。例如,要将文件 example.txt 的权限设置为 rwx r-x —,实际就是111,101,000,分别就是7、5、0可以运行以下命令:
chmod 750 example.txt
这将设置文件的所有者具有读、写和执行权限,所属组具有读和执行权限,其他用户没有任何权限。
要查看文件或目录的权限,可以使用 ls -l 命令,并查看输出中的第一个字段。
请注意,只有文件的所有者或超级用户(root)才能使用 chmod 命令更改文件或目录的权限。
所以,root真的可以为所欲为啊。
🍡chown
chown 是 Linux 系统中的一个命令,用于更改文件或目录的所有者。它的基本语法如下:
chown [选项] 用户名 文件名
其中,用户名 是要将文件或目录的所有权更改为的用户的用户名,文件名 是要更改所有权的文件或目录的名称。
例如,要将文件 example.txt 的所有权更改为用户 user1,可以使用以下命令:
chown user1 example.txt
此命令将更改 example.txt 的所有者为 user1。
chown 命令还可以使用一些选项来进行更高级的操作,例如递归更改目录及其子目录的所有权,或者更改文件的所属组等。可以通过 man chown 命令查看完整的命令文档以获取更多信息。
chown 命令有一些常用的选项,可以用于执行不同的操作。以下是一些常用的选项:
- -R:递归地更改目录及其子目录中的所有文件的所有权。
- -v:显示详细的输出,包括每个文件的更改情况。
- -c:仅显示更改了所有权的文件,不显示其他信息。
- -f:在没有错误时,不显示错误消息。
- -h:如果文件是符号链接,则更改符号链接本身的所有权,而不是链接的目标文件。
- -L:对于符号链接,始终跟踪链接的目标文件并更改其所有权。
- -P:对于符号链接,不跟踪链接的目标文件,而是直接更改链接本身的所有权。
请注意,执行 chown 命令需要具有足够的权限。通常,只有超级用户(root)或文件的所有者才能更改文件的所有权。
🍡chgrp
chgrp 是 Linux 中的一个命令,用于更改文件或目录的所属组。它允许您将文件或目录的所属组更改为其他已存在的组。
要使用 chgrp 命令,您需要指定要更改所属组的文件或目录的路径,以及要更改为的新组的名称。例如,要将文件 file.txt 的所属组更改为 group1,可以运行以下命令:
chgrp group1 file.txt
chgrp 命令有一些常用的选项,可以根据需要进行使用。以下是一些常见的选项:
- -R:递归地更改指定目录及其子目录中的文件或目录的所属组。
- -v:显示详细的输出,包括每个文件或目录的更改结果。
- -f:强制执行更改,即使发生错误或警告。
- –reference=file:将指定文件的所属组应用于其他文件或目录。
- –dereference:对符号链接进行操作,而不是链接指向的文件或目录本身。
🍡umask
umask 是一个用于设置文件和目录的默认权限的 Linux 命令。它用于控制新创建的文件和目录的权限位掩码。
权限位掩码是一个八进制数,用于表示文件和目录的权限。它由三个数字组成,分别表示所有者、所属组和其他用户的权限。
umask 命令的语法如下:
umask [mode]
其中,mode 是一个八进制数,用于设置权限位掩码。它指定了要从默认权限中屏蔽的权限位。例如,如果 mode 设置为 022,则默认权限中的写权限将被屏蔽。
umask 命令的常见用法是在用户的 shell 配置文件(如 .bashrc 或 .profile)中设置默认的权限位掩码,以便在创建新文件和目录时自动应用。
新建文件夹默认权限=0666
新建目录默认权限=0777
🗣请注意,umask 命令不会影响已经存在的文件和目录的权限,它只会影响新创建的文件和目录的默认权限。
🌟权限掩码
权限掩码的每个数字代表一组权限位。每个权限位都对应一个二进制位,其中 1 表示允许该权限,0 表示禁用该权限。通过将权限掩码与默认权限进行按位与操作,可以屏蔽或禁用相应的权限位。
凡是权限掩码中出现的权限,在起始权限中都要去除
file指令
file指令是Linux系统中的一个命令,用于确定文件的类型。
它通过检查文件的内容和特征来确定文件的类型,并将其分类为文本文件、二进制文件、脚本文件等。
file命令可以帮助用户快速了解文件的属性,例如文件的编码格式、是否为可执行文件等。要使用file命令,
只需在终端中输入file命令,后跟要检查的文件的路径。例如:
file /path/to/file
file命令将输出文件的类型信息,例如:
/path/to/file: ASCII text
这表示该文件是一个ASCII文本文件。file命令对于识别未知文件类型或验证文件类型非常有用。
file命令有一些常用的选项,可以帮助用户获取更详细的文件信息。以下是一些常用选项的说明:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -b:以短格式输出文件类型信息。
- -i:以MIME类型的格式输出文件类型信息。
- -z:对压缩文件进行解压缩并输出其中的文件类型信息。
- -L:对符号链接进行解引用,输出链接指向的文件类型信息。
- -f <文件>:从指定的文件中读取要检查的文件列表,并输出每个文件的类型信息。
- -s:递归地检查目录下的所有文件,并输出文件类型信息。
- -k:在输出中包含文件的扩展属性信息。
- -N <魔术字节>:指定自定义的魔术字节,用于检查文件类型。
这些选项可以根据需要进行组合使用,以获取更准确和详细的文件类型信息。例如,使用-i选项可以输出文件的MIME类型,使用-s选项可以递归地检查目录下的所有文件。
👉🏻目录的权限
- 可执行权限: 如果目录没有可执行权限
x
, 则无法cd到目录中 - 可读权限: 如果目录没有可读权限
r
, 则无法用ls等命令查看目录中的文件内容. - 可写权限: 如果目录没有可写权限
w
, 则无法在目录中创建文件, ✨也无法在目录中删除文件
所以,✨一个文件的删除和自己本身权限无关:跟目录和other的权限有关
那么问题来了,如果我设置了一个文件不可读不可写不可执行,但是如果该文件的目录的权限是可写的,那么别人虽然不能读不能写不能执行,但是他可以直接玉石俱焚,把文件给删了!
所以linux在这方面的处理有:
比如我们新建一个目录它的起始权限是777,但是默认的权限掩码是002,
它就会自动抹去该目录对other用户的删除权限,防止用户删除。
而且linux中,不同账户在同一个目录下几乎不可能,因为一开始
但是万一正好在同一目录,而且目录的写权限是开放的呢?
这时我们引入一个新概念——粘滞位
粘滞位
粘滞位(Sticky Bit)是Linux文件系统中的一种权限设置。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能删除或重命名该目录中的文件。
粘滞位通常用于公共目录,例如 /tmp 目录。通过设置粘滞位,可以确保其他用户无法删除其他用户创建的文件,即使他们具有写入权限。
要设置粘滞位,可以使用 chmod 命令,并在权限设置中添加一个加号(+)和粘滞位标志(t)。例如,要将粘滞位设置在 /tmp 目录上,可以运行以下命令:
chmod +t /tmp
要移除粘滞位,可以使用 chmod 命令,并在权限设置中添加一个减号(-)和粘滞位标志(t)。例如,要移除 /tmp 目录上的粘滞位,可以运行以下命令:
chmod -t /tmp
因此,只有目录的所有者、文件的所有者和超级用户才能设置或移除粘滞位
👉🏻Linux知识问题
🚗一、linux 2.6.* 内核默认支持的文件系统有哪些?
答:
-
ext2:第二扩展文件系统,是Linux最早使用的文件系统之一。
-
ext3:第三扩展文件系统,是ext2文件系统的升级版本,支持日志功能以提高文件系统的稳定性和恢复能力。
-
ext4:第四扩展文件系统,是ext3文件系统的进一步改进,提供更高的性能和更大的文件系统容量。
-
XFS:高性能文件系统,具有快速的文件系统检查和修复功能,适用于大型文件系统和高负载环境。
-
JFS:日志文件系统,具有快速的文件系统检查和修复功能,适用于大型文件系统和高负载环境。
-
ReiserFS:具有快速文件查找和高性能的日志文件系统。
-
Btrfs:B-tree文件系统,具有快速的文件系统检查和修复功能,支持快照、压缩和数据校验等高级功能。
-
NFS:网络文件系统,用于在网络上共享文件系统。
这些是Linux 2.6. 内核默认支持的一些常见文件系统。请注意,具体支持的文件系统可能会因Linux发行版和内核配置的不同而有所差异。
🚗二、 linux查看cpu占用的命令是什么?
答:
-
top命令:top命令可以实时显示系统的整体性能情况,包括CPU占用率。在终端中输入top命令后,会显示一个动态更新的进程列表,其中包含了CPU占用率的信息。按下键盘上的q键可以退出top命令。
-
htop命令:htop是top命令的一个增强版本,提供了更多的交互式功能和更友好的界面。可以使用包管理器安装htop,然后在终端中输入htop命令来查看CPU占用率。
-
mpstat命令:mpstat命令用于显示多核CPU的性能统计信息,包括每个CPU核心的占用率。在终端中输入mpstat命令后,会显示每个CPU核心的平均占用率以及其他相关信息。
-
sar命令:sar命令用于系统性能监控和报告,可以包括CPU占用率在内的各种性能指标。在终端中输入sar命令后,可以使用不同的选项来获取特定的性能指标,例如sar -u可以显示CPU的使用情况。
🚗三、 在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令?
在Linux系统中,可以使用grep命令来查找文件中包含以字母"a"为行开头的内容。以下是使用grep命令的示例:
grep -E ^a try_grep
解释:
- grep:用于在文件中搜索匹配指定模式的文本。
- ^a:表示以字母"a"为行开头的模式。 ^是正则表达式中的元字符,表示行的开头。
- try_grep:要搜索的文件名。
- -E:使用-E选项后,grep将会将模式解释为扩展的正则表达式语法,而不是默认的基本正则表达式语法
执行上述命令后,grep将会在try_grep文件中查找以字母"a"为行开头的内容,并将匹配的行显示在终端中。
什么是正则表达式? 🤔
正则表达式(Regular Expression)是一种用于描述字符串模式的工具。它是由字符和特殊字符组成的序列,用于匹配、查找和操作文本中符合特定模式的字符串。
正则表达式提供了一种灵活且强大的方式来进行字符串匹配和搜索。它可以用于各种编程语言和文本处理工具中,如Python、JavaScript、grep等。
正则表达式由普通字符和特殊字符组成。普通字符表示它们自身,而特殊字符具有特殊的含义和功能。例如,a是一个普通字符,表示匹配字符"a"本身,而^是一个特殊字符,表示匹配行的开头。
使用正则表达式,可以进行以下操作:
- 匹配:确定一个字符串是否与给定的模式匹配。
- 搜索:在文本中查找符合特定模式的字符串。
- 替换:将匹配的字符串替换为指定的内容。
- 分割:根据匹配的模式将字符串分割成多个部分
🚗四、在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是
在使用mkdir命令创建新的目录时,如果要同时创建父目录(即父目录不存在),可以使用-p选项。该选项会自动创建所需的父目录。
例如,要创建一个名为/path/to/new/directory的目录,如果/path/to目录不存在,可以使用以下命令:
mkdir -p /path/to/new/directory
使用-p选项后,mkdir命令会自动创建/path/to目录(如果不存在),然后再创建/path/to/new目录。
🚗五、批量删除当前目录下后缀名为.c的文件。如a.c、b.c。
-
rm *.c: * 通配符,表示匹配任意字符任意次
-
find . -name " * .c" -maxdepth 1 | xargs rm:
找到当前目录下.*结尾的文件,目录深度为1xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持|管道来传递参数的命令
相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除
如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长