Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)(上)

简介: Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)

一.shell外壳的理解

Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",

但我们一般用户,不能直接使用kernel。

而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。

1.为什么需要有shell外壳的存在?

操作系统本身是需要易用程度和安全性的

而对于我们使用电脑的普通用户来说,我们是不能直接访问操作系统的

为什么我们不能直接访问操作系统呢?

因为对于我们绝大多数人来说,我们对于操作系统并不熟悉,如果允许我们直接访问操作系统,势必会出现一些错误,所以需要有一个中间者

2.什么是shell外壳?

这个中间者的核心工作就是

将使用者的命令翻译给核心(kernel)处理。

同时,将核心的处理结果翻译给使用者。

在Linux中这个中间者就是shell外壳

在windows中这个中间者就是图形化界面

shell外壳的本质就是一个执行起来的程序(进程),在系统启动期间一直存在

3.shell外壳的运行原理是什么?

1.当用户想要执行的指令有风险时(例如用户自定义的指令),shell都是通过创建子进程的方式去让子进程执行有风险的指令

2.对于低风险的指令,shell外壳会自己去执行

3.每一次你进行xshell登陆的时候,操作系统都要给你这个用户的当前登陆创建一个shell,bash

4.shell和bash的关系

bash时shell外壳的一种,shell外壳还有其他的一些种类,bash属于shell外壳这个集合

二.Linux中的用户权限

1.用户分类与身份切换

1.用户分类

Linux中的用户分为

1.root用户(超级管理员)

2.非root用户,也就是普通用户(xxx)

2.root用户切换为普通用户

1.su 用户名

我们现在是root用户,想要切换为普通用户wzs

执行su wzs即可

无需输入wzs用户的密码

切换后当前所处目录不变

2.su - 用户名

本质:退出root用户,以wzs用户的身份重新登陆,登陆后进入wzs用户的家目录

3.普通用户切换为root用户

1.su命令

我们当前是wzs用户,执行su命令并输入root用户的密码后切换为root用户

并且我们所处的目录不变

2.su-命令

我们当前是wzs用户,执行su -命令并输入root用户的密码后切换为root用户

所处目录更新为root用户的家目录

本质上来说就相当于退出当前用户并以root用户的身份重新登陆

4.普通用户想要切换成另一个普通用户

这些命令需要使用root用户的身份去执行

在这里我们补充一个命令:adduser 用户名:添加用户

passwd 用户名:设置该用户的密码

userdel -r 用户名:删除用户

我们在这里使用root的身份新添加了一个用户zs

并且设置了这个用户的密码

我们现在是wzs用户,想要切换为zs

我们这里以su命令为例,su zs,并且输入zs的密码才可以切换为zs

而另一种方法是:从wzs用户切换为root用户,然后再切换为zs,这个过程只需要root用户的密码,不需要zs的密码

可见root用户的密码非常强大,非常重要,那么什么样的人才会具有root密码呢?

一般是管理员

2.sudo命令

如果一个普通用户不想把自己变成root,但是还想让我自己以root的权限执行一条命令

sudo 想要执行的命令(对指定的指令进行提权)

那么这个时候就有一个问题了,

如果我们输入sudo就可以以root用户的身份执行指定的命令,那么root用户的密码不就毫无意义了吗?

答案是:不是的,因为sudo命令不是一般用户能够执行的

比方说我现在是zs,我先使用root用户的身份执行ls命令,那么我就

sudo ls

结果:被拒绝了

只有一个用户的用户名在sudoers file这个配置文件中,才允许这个用户执行sudo

否则,不允许他执行sudo命令

那么如何把某个用户的用户名添加进sudoers这个配置文件中呢?

在学完vim的时候我们会进行介绍

三.文件权限

在我们的日常生活中有各种各样的权限,所谓权限就一定是用来限制一部分人的操作的

例如:在CSDN上有一些文章只有vip才能看,leetcode上有些题是会员专属题只有会员才能做…等等等等

而且不同的应用程序或者网站场所等等都是只能提供一些特定的服务的

例如:

我们在爱奇艺当中就不能刷算法题,在leetcode中就不能看电影…等等等等

就算我们同时是爱奇艺和leetcode的会员,也无法做到这些事情

因为爱奇艺本来就无法刷算法题,leetcode本来就不能看电影

也就是说对于一些应用程序或者网站场所,它没有提供那个服务,就算我们权限是最高级别的,

也无法要求它去提供对应的服务

1.身份角色

我们前面提到过Linux中一切皆文件

那么对于某个文件来说有三种身份角色

1.文件的拥有者

2.文件的所属组

3.other

2.为什么要有所属组?

大家可能会想了,文件的拥有者和other我知道为什么要有,但是为什么要有所属组呢?

我们未来的项目开发都是团队合作的,我们的代码很有可能也是需要被团队内部所能够访问的,因此为了区分团队内部成员跟other,Linux创建了所属组这个身份角色

而对于一个文件来说最重要的就是这三个属性:

r:读属性

w:写属性

x:执行属性

我们只用wzs用户创建了一个新文件test.txt

-rw-rw-r--
这个第一个-指的是test.txt这个文件不是目录文件
第2,3,4个分别是rw-:指的是文件拥有者对于这个文件拥有读,写权限,没有执行权限
第5,6,7个分别是rw-:指的是文件所属组对于这个文件拥有读,写权限,没有执行权限
第8,9,10个分别是r--:指的是other对于这个文件拥有读权限,没有写和执行权限
• 1
• 2
• 3
• 4
• 5

文件的详细属性(样例):

跟刚才举的现实生活中的例子相同的一点:

如果一个文件本来就没有执行的属性,就算你拥有这个文件执行的权限,你也执行不了这个文件,因为这个文件本来就不是一个可执行文件

所以Linux文件如果想要能够执行:

1.必须具有可执行权限x

2.它必须真的是一个可执行程序

3.如何更改权限?

1.chmod ugoa ± rwx file

u:user(文件的拥有者)

g:group(文件的所属组)

o:other

a:all(所有人)

+:添加对应权限

-:取消对应权限

rwx:读写执行权限

file:要修改权限的文件名

这里以test.txt为例:

例如我现在想要删除所有人的所有权限

例如我现在想要增加user的rwx权限

这时test.txt对于拥有者来说具有了执行权限,但是test.txt不是一个可执行程序

所以我./test.txt去执行,没有任何反应

2.利用8进制设置文件权限

我们发现对于某个文件权限来说,这个文件权限一共有9个字符

对应到每个角色身上一共有3个字符,每个位置一共有两种状态,

一种是拥有这个权限,另一种是没有这个权限

如果我们用0来表示对应位置没有该权限,1来表示对应位置有该权限

所以我们可以用1个8进制数字来代表一个角色的权限,用3个8进制数字来代表整个文件的权限

例如:111:rwx权限都有

101:拥有r和x权限,没有w权限

所以我们可以这样去做

比方说我现在想设置test.txt的权限为:拥有者:rwx,所属组:r-x,other:—

对应到8进制表示为:750

4.root用户面前权限有作用吗?

没有作用

比方说我现在把test.txt的权限清空,转为root用户去添加内容,读取内容

丝毫没有任何约束

为了便于下面的操作,我新建了几个目录

5.chown和chgrp

那么我们来示范一下:

我现在想把这个文件给zs

但是给不了,为什么呢?

首先我们先明确一点:

那么怎么才能给他呢?

一般来说都是要用root去给,或者sudo指令提权

也就是这样:

使用root用户强制把这个文件给张三

那么能不能一起改呢?

答案是:可以的

6.own和grp一起改

比方说我想把这个文件的拥有者改成wzs,所属组改成zs

7. 匹配原则:

当一个人同时是文件的拥有者和所属组时,会先匹配他是拥有者,然后只看他作为拥有者的权限,不去看他作为所属组的权限

当我把文件的拥有者给root之后,我只是文件的所属组,那我就拥有了对于这个文件而言所属组的r权限了

四.文件类型

1.Linux中的文件类型

我们可以通过ll来查看Linux中的文件类型

我们先简单介绍一下链接文件和管道文件

1.链接文件

我们先创建一个test.c文件

然后我们gcc编译一下test.c文件,并且把生成的可执行程序a.out重命名为mycmd

然后把mycmd移动到dir/dir1/dir2/dir3的路径中

那么这个时候如果我想要在当前这个目录就能去执行mycmd,

那么我们只能

这样的话就不是很好,有点太麻烦了

这个时候链接文件就可以派上用场了

显而易见,这个链接文件就相当于我们在windows系统中创建的快捷方式

而且,在Linux中跟在windows系统中一样,删除快捷方式并不会影响到原来的可执行程序

在现在而言,我们就把它简单地理解为是快捷方式,这个链接文件我们以后还会遇到的

2.管道文件

管道文件跟我们之前介绍过的管道有非常紧密的联系,

我们可以先借助管道的作用来类比一下这个管道文件

如图,我们在第一个终端当中向管道文件mypipe中写入hello Linux.然后第一个终端就阻塞了.一直等到我们在另一个终端中接收这个hello Linux,

也就是说借助管道文件,我们就可以在两个终端之间进行信息交流了

管道文件和链接文件我们以后会详细介绍

2.Linux中的文件后缀名

Linux中的文件类型不通过后缀区分(但是:不代表Linux中后缀没有作用,后缀名还是有很大的作用的)

1.Linux中的文件类型是不通过后缀名区分的

首先,Linux中文件类型不通过后缀名区分,这个怎么理解?

首先我们用nano在test.c文件中写了一段C语言代码

无论我怎么修改这个可执行文件a.out的名字,我都是可以直接运行的

这也就说明了Linux下的文件类型是不通过后缀区分的

2.Linux中的后缀名的作用

1.Linux中的工具需要通过后缀名去区分文件类型

你不是刚才说过Linux中的文件类型是不通过后缀名区分的吗?

你现在怎么又说Linux中的工具需要通过后缀名去区分文件类型呢?

注意:Linux和Linux中的工具不是一回事

这里的Linux指的是Linux操作系统,

Linux操作系统跟Linux上面的工具,指令,编译器并不相同,也不包含

也就是说,这两句话没有任何冲突,矛盾的地方

下面给大家看一下演示:

我们把test.c重命名位test.txt,然后gcc编译,发现报错,无法编译

这也就说明了Linux中的工具需要通过后缀名去区分文件类型

2.Linux中的后缀名也是为了方便我们去进行操作

3.总结

3.file指令

file 文件名

file指令可以更加详细,直接地查看某一个文件的属性

相关文章
|
6月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
573 11
|
6月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
6月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
567 3
|
8月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
1317 13
|
8月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
969 1
|
9月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
271 16
|
9月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
157 4
|
9月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
9月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
339 60
|
12月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。