Linux基础篇(第一篇)

LInux目录结构

Linux的目录结构一般是由一棵多叉树组成,而这个多叉树只有一个根,这个根节点一般是/,像windows可以有多棵多叉树来组成目录文件结构.

Linux一般的基础文件形状如下:

image-20211207140517727

为什么是树?

我们可以看到市面大部分的操作系统,它们的文件管理结构都是用的树状。

这是为什么呢?其实答案很简单因为树状有个特性,所有路径具有唯一性。

绝对路径&相对路径

绝对路径: 因为具有唯一性所以,绝对路径指的是从根节点开始走走到目标节点,而目标节点存在的话,那么根据这条路径查找就一定能找到且没有其它方法能找到,这就是绝对路径。

相对路径: 相对路径和绝对路径的区别是节点存在,相对路径不一定能找到,而绝对路径是一定能找到。因为相对路径是从某个节点开始往下找,而目标节点不一定在某个节点的下面所以有可能找不到。而绝对路径是从根开始找,只要目标节点存在那么就一定能找到。

一切皆文件

在LInux下面所有的任何设备或者文件、程序…都是文件,那么键盘和显示器是文件吗?答案:是的,在LInux下都是文件。

那么既然是文件,在C语言里面每次访问文件都需要打开文件,那么在Linux下面访问键盘和显示器都有打开文件吗?

答:都有打开不过是系统帮我们打开了。

我们在C语言里面都知道系统会帮我们默认打开三个文件分别是标注输入(stdin)、标注输出(stdout)和标准错误(stderr)。

image-20211208145956633

导管

用法: |

功能: 用于传输数据到另一个地方,例如把键盘的数据传输到文件里面,或者文件里面的数据传输到显示器里面。

在计算机当中最重要的东西就是数据而导管是负责引导数据到达指定的地方,就像现实生活中的水管。

重定向&追加重定向

重定向

用法: echo “hello” > xx.txt

功能: 用于把某些内容输入到一个文本当中,其次输入进去前会清空目标文本

追加重定向

用法: echo “hello" >> xx.txt

功能: 把某些内容输入到一个文本当中,其次不会清楚文本原有内容而是在原有内容后面追加新的内容。

shell命令以及原理的理解

Linux严格意义上来讲操作系统我们称之为核心(kernel),我们一般用户不能直接使用kernel都是通过一个外壳程序来完成我们想要的操作,你可能会问为什么直接用kernel来完成我们的交互而需要一个外壳程序来搞?这样效率不会降低吗?

准确的来讲是不会的,不仅不会反而还有所提高,因为我们想要直接跟kernel交互要学习很多底层才能做到和kernel交互这无疑是增加了我们的学习成本而且你就算懂这些知识,但如果操作不当将是很危险的行为,所以使用外壳程序不仅学习成本低还能过滤掉我们要执行比较危险的指令和无用指令。

  • 什么是shell程序?

    shell程序翻译成人话就是外壳程序,而外壳程序的名字有很多,而为了方便称我们统一叫为shell程序。

  • shell程序

    使用shell程序不仅是学习成本变低,同时更加安全,这不仅起到保护操作系统的作用,还起到了保护其它程序的安全。

  • shell作用&原理

    外壳程序相当于翻译官,它会把你的指令翻译成相对的机器指令给“核心”同时它还会对你的指令进行过滤,如果是不合理的指令或者无意义的指令它会直接过滤掉并返回一个结果给你,如果是合理的指令它会给“核心”这时“核心”会给你一种结果,这种结果无非是同意执行和拒绝执行的结果。

    shell程序在执行你的指令的时候会生成一个子进程来执行翻译给“核心”的操作,这种行为可以有效的保护shell程序的自身安全,就算执行的指令是合理的危险指令影响的也仅仅是它的子进程而不是它本身。

    就好比腾讯把什么锅都甩给外包一样,出了问题跟腾讯没啥关系,有关系的是那些外包公司。

image-20211209113404339

为了证明以上运行是正确的,为此我进行了测试,如下图:

首先我们先跑起一个死循环程序,为了方便我们观察shell脚本的运行。

image-20211209153853793

[ls@VM-4-7-centos ~]$ ps axj | head -1 && ps ajx | grep myprocclear

接着打开进程,我们可以看到我们运行的程序名叫myproc。

image-20211209154141382

image-20211209154503896

我们之前说shell脚本会生成一个子程序去执行我们给的指令,如果我们分析的没问题的话,那么当前进程的父进程应该就是shell脚本。

image-20211209155034936

你可能会问,不是说是shell脚本生成的子进程吗?怎么它叫~bash不叫shell呢?因为shell脚本是所有外壳程序的统称。那如果我们杀死shell脚本的子进程我们跑的程序会不会停止呢?

image-20211209155454677

我们可以看到程序终止了,所以说我们之前说的东西都是正确的。

Linux权限

Linux权限的概念

Linux下分别有两种用户:

  1. 超级用户(root用户)
  2. 普通用户

它两的区别在于权限的区别,在Linux下面root用户的权限非常大基本所有操作它都能进行,包括删除系统这个指令(ps:所以网上才会调侃,《从删库到跑路》,权限越大,责任也越大所以有时候用root的进行操作的时候要清楚知道自己在干嘛)都能执行。

普通用户只能操作自己的工作目录下的文件进行读写操作,而不能到其它用户的目录下进行读和写操作包括创建,而root用户想对其它用户修改都可以做到,包括修改其它用户的密码。

LInux切换用户

su指令

语法: su [用户名]

功能: 用于切换用户(ps:如果是root用户切换其它用户则不需要密码验证即可挨饿换。)

权限管理

文件访问者分类(人)

  1. 文件和文件目所有者:u—User
  2. 文件和文件目录所有者所在的组的用户:g----Group
  3. 其它用户:o—Others

文件类型和访问权限

文件类型

  • d

    文件夹(目录)

  • -

    普通文件

  • l

    软连接(类似windows的程序快捷键)

  • b

    设备文件(硬盘、光驱等等)

  • p

    管道文件

  • c

    字符设备文件(例如:屏幕等串口设备)

  • s

    嵌接口文件

基本权限

i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

iv.“—”表示不具有该项权限

文件权限值的表示方法

  1. 字符表示法

    LInux表示 说明 LInux表示 说明
    r– 只读 -w- 只写
    –x 只可执行 rw- 可读可写
    -wx 可写可执行 r-x 可读和可执行
    rwx 可读可写可执行 无任何权限
  2. 八进制数值表示法

    权限符号(读、写、执行) 八进制 二进制
    r 4 100
    w 2 010
    x 1 001
    rw 6 110
    rx 5 101
    wx 3 011
    rwx 7 111
    0 000

image-20211209150343274

文件的默认权限

Linux里创建普通文件或目录文件是有默认权限的,普通文件的默认起始权限是666,而目录文件的默认起始权限是777.

而我们可以通过umask来查看当前默认权限,这个默认权限的影响是创建文件的时候三个人(所有者、所属组、其它人)能有的权限,一般没动过默认权限的话,那么它给的是002。

image-20211210130644846

那么这个002是什么意思的呢?你不是说它默认权限是666和777吗?

注意我说的是其实权限,它们确实是666和777而当前的002的意思是如下图:

image-20211210131910204

注意:以上是八进制的形式操作

而这样做之后变成664又是啥意思,其实很简单我们十进制的话就是一个数字对应一个人,如下图:

image-20211210132536358

你可以这么理解你想要创建的文件默认权限是多少的话可以减去相应的10进制如:我不想所属组能写,我就直接022

image-20211210132934760

可以看到这样操作就能达到我们想要的目的。

文件目录权限和普通文件权限的区别

普通文件权限

如果一个普通文件你所扮演的角色没有相应的权限会无法操作,如没有r权限那么你将无法打开普通文件,如果没有w你将没有写操作,如果强制写还是能写进去的。

如果想修改可以使用chmod指令进行文件权限修改,而如果这个文件所有者不是你,你无权修改当然你使用权限提升是可以修改的。

目录文件权限

面试题: 目录文件的rwx权限对应的是什么效果?

答: r代表读,如果没有这个权限我们我们无法打印目录内的内容,因为要打印的话需要先读再输出到屏幕上,w代表写:我们依然能进入目录,但是不能创建任何文件,x代表可执行:如果没有可执行不能进入目录,不仅不能进入目录你就算有读和写的权限也不能查看目录内的详细内容,只能查看大概的文件名,而且也写不进去,所以目录文件不管怎么样都必须有可执行权限,如果没有那么什么都干不了。

粘滞位

粘滞位是一把锁,为什么会有粘滞位?

因为Linux下所有的文件权限只针对读和写,如果这个文件我无任何权限,那么我可不可以删掉它呢?答案是可以的,不仅普通用户的文件能删而且root用户的文件也一样能删,那你可能会说我们把工作目录设为不可读和写那么它不是不就删不了了吗?是的,但是有些文件我们需要公开任何人都能访问,但是 如果有人想删掉的话怎么办?我们可以用粘滞位,这个目录文件一旦有了粘滞位,目录文件及目录文件内的内容除了root用户和文件所有者能删除其它人无法删除。

添加粘滞位的方法:chmod o+t 文件目录名

如果你的目录是不可执行的话那么t会变成T,正常情况下没有都是t不会是T的因为目录文件无法访问也就不存在删除里面内容的问题了。

drwxrwxr-x 3 ls   ls   4096 Dec  8 09:25 code
drwxrwxr-t 3 ls   ls   4096 Dec 10 14:04 dir1
drwxr-xr-x 2 root root 4096 Dec 10 14:40 dir2
-r-xrw-r-- 1 ls   ls     69 Dec 10 13:41 test1.txt
-rw----r-- 1 ls   ls      0 Dec 10 13:29 test2.txt
-rwxrwxrwx 1 root root    0 Dec 10 13:44 test3.txt
[root@VM-4-7-centos ls]# chmod o+t dir2 //添加粘滞位
[root@VM-4-7-centos ls]# ll
total 16
drwxrwxr-x 3 ls   ls   4096 Dec  8 09:25 code
drwxrwxr-t 3 ls   ls   4096 Dec 10 14:04 dir1
drwxr-xr-t 2 root root 4096 Dec 10 14:40 dir2
-r-xrw-r-- 1 ls   ls     69 Dec 10 13:41 test1.txt
-rw----r-- 1 ls   ls      0 Dec 10 13:29 test2.txt
-rwxrwxrwx 1 root root    0 Dec 10 13:44 test3.txt

其它用户无法删除
drwxrwxr-x 3 ls   ls   4096 Dec  8 09:25 code
drwxrwxr-t 3 ls   ls   4096 Dec 10 14:04 dir1
drwxr-xr-t 3 root root 4096 Dec 10 14:42 dir2
-r-xrw-r-- 1 ls   ls     69 Dec 10 13:41 test1.txt
-rw----r-- 1 ls   ls      0 Dec 10 13:29 test2.txt
-rwxrwxrwx 1 root root    0 Dec 10 13:44 test3.txt
[ls@VM-4-7-centos ~]$ rm -r dir2
rm: descend into write-protected directory ‘dir2’? y
rm: remove write-protected regular empty file ‘dir2/test.txt’? l^H^C
[ls@VM-4-7-centos ~]$ rm -r dir2
rm: descend into write-protected directory ‘dir2’? ^C
[ls@VM-4-7-centos ~]$ rm -rf dir2
rm: cannot remove ‘dir2/test.txt’: Permission denied
rm: cannot remove ‘dir2/dir3’: Permission denied

猜你喜欢

转载自blog.csdn.net/qq_45326605/article/details/121856431