Linux学习笔记之三(文件管理下和用户管理)



接文件管理上。

上面的vim是https://www.bilibili.com/video/av18945696?t=247&p=9从8分钟开始看。据说上面还只是大概vim30%的功能。那么呢,下面是nano,nano简单得多。先安装。

然后就可以创建或者打开文件了。我们查看刚才用vim创建的文件a,输入nano a回车。

我们如果nano 一个不存在的文件就是创建一个新文件,这和vim是一样的。下面列出了一些命令了。

一般用的都是vim,vim并不具有什么优势。想了解nano的可以到http://man.linuxde.net/nano。另外呢,其实vim还有一些只是它没讲到,在命令模式下o是在当前行的下一行新建一行,顺便进入插入模式,O是在上面键一行,也进入了插入模式。还有设置行号。

取消呢就是:set nonu。其实y^是复制行开头到光标位置,y$可以复制光标位置到行末尾。说一下如何保存nano编辑的文件吧。ctrl+x即可。如果是新文件或者老文件有改动,还会提示:

选y,然后会让你输一个名字。

输入名字回车就结束了。关于文本编辑器呢,我最后说一点,虽然鼓励命令行操作,但是对于Xshell来说呢,我举个例子你们就明白我的意思。

一般我们还是用vim。这里还说一点,在Xshell外面复制的东西可以鼠标右键粘贴到nano或者vim里面的。但是vim里p和nano里的ctrl+u都不行。

用户管理

首先先要了解一个问题,访问文件是进程去访问文件的。为了下面的说明呢,我们先下一个应用叫做httpd,一个网站服务器软件。我们前面也用过很多次yum了。

-y的意思如下,所有的问题都回答yes,这什么意思呢?回想一下windows下装软件,首先会问你用户协议吧,还有安装位置(默认c盘)等问题,你是不是需要回答啊,这里应该就是这意思。

扫描二维码关注公众号,回复: 2195635 查看本文章



然后我们启动这个进程,看这个进程的号码。

这个root是主进程,我们一般不去管它,然后其它的呢,我们看到都是apache这个用户的身份在运行,最后的/usr/sbin/httpd是文件的位置。这里有一点需要注意的。这个apache并不在/home下,而是在/usr/share下,这也很好理解,前面文件路径的时候曾经说过的,/usr是软件下载的地方,因为前面说/usr相当于c盘,yum用的是-y。回想windows软件一般默认路径是哪里呢?c盘,那么对应过来就好理解了。apache用户并不是你自己创建的,而是随着软件生成的,当然跟软件在一个目录下咯。

下面这张图帮助我们理解读写文件的过程和实质。

图中的it是一个组,组的概念后面会说到,图中矩形就是一个it组。我们访问文件时进程执行一些I/O操作的函数的程序实现的,比如open,write啊等等。而这些进程呢,是由用户启动的,因此呢,这些由特定用户启动的进程就会带有特定用户的权限。我们时可以对一些文件进行权限设置的,启动进程的用户有什么权限呢,这个进程就可以对文件进行什么操作。比如图中,alice启动一个进程,这个进程去访问file1.txt文件,那么这个进程只能读,写。如果是root启动了进程,进程就可以读,写,执行这个文件了(先不管文件能不能执行,这里只是显示文件设置权限的不同)。总之呢,访问文件的是进程,有什么权限看启动进程的用户uid(user id)和文件的权限设置情况。下面的内容要了解一下,权限只能针对用户设置吗?也不是的,有两种方式:

Discretionary Access Control,DAC,自主访问控制

Mandatory Access Control,强制访问控制。

不过它们的机制也不一样,DAC是rwx,MAC是SELinux,不过MAC不是常规的权限控制方式,就了解一下。。有些文件时所有用户都有所有权限的,比如说/tmp,/var/tmp,这些文件存放的是进程的临时文件。还记得前面写的全局可写吧。

查看权限

我们先来看一下我们熟悉的windows里面怎么查看某一个文件的用户的权限和所有者(默认是创建文件的用户)。


那么Linux怎么看呢?我们打ll就可以看,ll前面已经说过是看文件的详细信息。还需要说明的是ll不加-d看的是目录内容的权限,ll -d看的是目录的权限,目录也是文件,前面曾经说过Linux里一切皆文件,目录当然是文件了,何况在windows里也是。我们来解读这些ll的详细信息的含义。

第一个位置我们发现有的是d,有的是-,代表什么意思呢?其实是文件类型,见下图:

然后后面的一堆rwx还有-是什么意思呢?这是一种ugo结构。这里先说一下.后面的数字代表的是文件链接次数和权限没有关系,还有.是什么含义我们先不去管。

r是可读,w是可写,x是可执行。ugo是什么意思呢?ugo代表的是一个顺序,u是所有者,g是属组,这里稍微说一下组的概念,组是一个逻辑概念,也就是并不会有实际的物理单元对应的,但是逻辑概念也是一个信息啊,存在哪里呢?存在/etc/group里面。


我们关注一下数字(这串数字其实是gid可以理解为组别)和冒号后面的信息,后面其实就是组里包含的用户,由于我们是新创建的组,还没有添加任何用户(可以理解为组员)。下面我们就添加一下看一看变化。


useradd -G是新建一个用户并加入某一个组,而usermod是把已经存在的用户加入某一个组,值得拓展的是,这个格式和汇编语言有点像,按照汇编语言的说法,都是目的操作数在前,源操作数在后,MOV AH,AL就是把AL里的8bits拷贝到AH里(我这里说拷贝是因为移动完成AL里的内容没有变化),上面的usermod -G cn a2也是一样的,cn是目的组,a2是源用户,只不过没有逗号,我联想一下汇编语言是为了便于理解,你没有学过汇编语言就算了。

我们还发现每创建新用户,这个配置文件里就会更新组信息,会加上和创建的新用户的名字一样的组,当然这里的组依旧只是逻辑容器而已。那么如何查看一个用户所在的组呢?用id 用户名。

uid是user id就是一个用户身份码,gid可以看https://blog.csdn.net/wl_haanel/article/details/4793176,我先不作讲解。后面的groups是我们关注的内容,可以看到其实和/etc/group还是有点差别的,因为id显示自己是属于自己的组的,比如a2的groups里面有a2,而/etc/group里面没有。关于组就先说到这,毕竟不是这一讲的主角。另外呢?我还要告诉你们一个小知识。就是选项其实和参数位置可以互换,但是必须都在命令后面。

下面继续说ugo,所谓ugo,就是u有三种权限rwx,g也是,o也一样,于是一共有9个字符对吧,就按照ugo的顺序排列,中间没有分隔符,前三个对应u的权限,中间三个对应g的,最后三个对应o的,-是什么含义的,就是没有这个权限,你如u只有r权限,那么前三个字符就是r--。o是什么呢?就是除了u和g包含用户之外的用户。先举个例子吧。

第一个字符上面说过了,表示文件类型,-是普通文件,d是目录。ll -d /root显示的后面的rwxrwx--- root root是什么意思呢?第二个root后面的253前面已经见过是文件大小。时间是文件修改的时间,mtime(modify time),最后的是一个相对路径。u是root,g是o,o没有列出来,因为有很多嘛。我们看前面的九个字符要分开三个三个看,对应是ugo的权限,那么这个/root的权限是什么呢?是所有者可读可写可执行,属组里面的用户可读可写可执行,其它人可读不可写不可执行。(这个权限是我改过的,你们看到的应该不是这样子的哈,还有文件夹可执行是什么意思呢?后面会说到,不用着急)那么我们再来看看ll 2。首先u是谁呢?是lcl,g是it,,u的权限是可读可写可执行,g也是,o也是。那么看来有一些文件就是权限放的很宽的。如果还不懂的话,再看一个例子

值得指出的是文件对于用户启动的进程如何判断权限呢?按照ugo的顺序依次判断,如果用户属于u,就停止了并启动u的权限,不是u的话,就看是不是g里的,是就启动g的权限,不是g就是o了,就启动o的权限,上面图中abc问的顺序就是这个道理。

设置权限

设置权限分为两步,第一步,设置ugo,第二步,设置ugo分别对应的权限。下面先来说第一步。

这个后面都有注释,我就举两个例子,-R和不带-R的(其实相当于一个例子)。那么首先说-R的意思。

其实就是递归的意思,前面python系列已经说到过目录递归,有一个函数os.walk还记得嘛?

如果你已经不记得目录递归了,看下面例子理解吧。推荐下一个tree软件,它可以看指定目录下的文件树结构。下载还是依旧简单的yum -y install tree。先来看一段命令吧。

mkdir是创建目录666/{a,b}是相对路径,是先创建一个666,然后在666里面创建a,b,就是python里曾经讲过的递归创建,-p就是干这个的。如果存在目录就不会报错,必要的时候创建父目录。666就是父目录。如果没有-p就会报错。

那么下面赶紧进入例子。


u.g的.可以用:代替,例子中也体现了。-R体现了什么呢?就是把目录下的所有文件的ug也改了,目录也是文件,以后不会再重复了。不加-R则不递归,只改变指定目录的,目录里面的文件不变。然后是第二步,修改对应的权限,谁能修改权限呢?root可以,创建者可以嘛?可以,先不去纠结命令中细节,先看效果,对比一下两个wq。

上面内容对应https://www.bilibili.com/video/av18945696/?p=10。

设置具体权限有两种方法,第一种:

这种呢,ugo我们知道是什么意思,那么a是all,所有的意思,就是ugo全都有。+就是加权限,=是重置权限,-就是减去某个权限。我们以例子来展示:

a=-代表减去ugo的所有权限。还需要指出的是,当=后面有-的时候,=只会取后面的第一个字符,后面的就无视掉。

比如a=-r的结果是ugo全部没有任何权限,a=r-x的结果是只有ugo都只有r。下面还是例子。

说明-在=后面的意思是缺失,也就是没有权限的意思。

但是=和+号是可以的。

当然也可以递归地设置权限。下面介绍一个X,x在递归里面是要递归所有的文件的,而X只会递归到目录文件,x和X明显是互斥的。rw没有大写的含义。我们来试一下:


并且呢,有的时候ugoa都可以不加,不过已经看到rwX不可以不加,其实是因为少加个=。下面尝试一些:


=rw这个很怪异,似乎只对g作用了。而且

说明缺省ugoa的情况下,只有=+-后面有一个字符才作用在a上,如果是rwX(x)或者rw等多余一个字符的情况,都只会作用在u上。然而=r+x结果又不一样。

enmm我们还是不要省略ugoa了。我更愿意用第二种,第二种:

这个就拿图中的例子说话,不是一共九个字符,三个三个一组吗?就令r=4,w=2,x=1, -=0来编码。那么6=4+2,644就等价于rw- r-- r--。这个很好理解吧。

那么如何选择用哪一种方式呢?如果知识少量改动,无疑第一种方试很快,如果做大改动,数字好一些。还有提示一点就是7是007,21就是021,也就是在前面添零。

上图还看出来是不能混合使用的。a=777不是对的表达。

那么总结一下chown和chmod的区别呢?我们打一个比喻,chown是相当于甲把自己的房子卖给乙,然后房产证上的名字就变成乙,chmod是乙的老婆呢,给了丙一把钥匙(丙可能是乙的老婆的情夫啊,随你想像),这样丙可以进乙家里对吧,但是它并不拥有这个家,这个家的所有权在乙手里。下面是一个小例子。

应该还是蛮简单的。

rwx的意义

rwx对普通文件的读写我们呢就举几个小例子,因为很好理解了。对目录的意义是我们重点关注的,目录也是一种文件。这里稍微来细说一下目录,目录里存的是什么呢?是文件的名字和磁盘上的位置(还有权限,时间,大小等信息),文件可不是存在目录里的,文件是存在磁盘上的。我们来看一下。

lcl这个目录大小只有216B,而整个目录里的文件是有28K的。-s的意思就是只显示对参数的一个总大小。

我们访问文件是怎么访问的呢?我们其实是先找到目录中存的文件名,然后就能找到对应的磁盘位置了,就可以让磁盘转起来,转到相应的扇区,去读文件。可以说目录是我们和磁盘之间的枢纽。可以拿书的目录来做类比,书的目录可能只有不到一百字(带页码),但是书总共的内容可能有几千字了。我们没有目录是很难在书里面是找到你想要的内容的。再说一下磁盘位置是怎么分配呢?用的是inode num技术,可以加一个-i查看。

最前面的id就是这个区别磁盘位置的id。下面先来看几个普通文件的读,写,执行的例子,还是比较简单的。

我们看到/usr/bin/ls的拥有者是root,o对于这个文件也是有执行的权限,所以bin里面的命令是都可以执行的(如果你不改的话)。再看/usr/sbin/groupadd,o的权限是---,也就是不可读不可写不可执行。我下面是把useradd这个命令的权限改了一下(当然是用root改的),然后我们可以用普通用户创建吗用户吗?看到还是不行,虽然突破了第一层防线,但是还有第二层呢。

这里我要吐槽Linux的用户切换。su 用户名这种方式还好理解,你想切到哪一个就输入哪一个的密码。但是sudo我就不是很理解了。sudo可以先看一下http://man.linuxde.net/sudo

sudo su切到管理员root居然只需要lcl的密码???还可以再前面加sudo 执行root的权限(默认),输的还是lcl的密码?(虽然这是可以改的,但是默认这样设,不改的话岂不是很危险吗?)

还有有些文件,不如.txt文件加上x属性可能是可以执行的,因为里面可能有命令

不过最后执行的路径必须给出绝对路径,而且执行的是原生的ls,没有颜色的那个。

。读写呢很简单了。


vim 0呢?


下面会提示我们:wq!可以强制覆盖。

真的覆盖了吗?


按E

这块先不用太纠结了。涉及到了snap的内容。

重点我们要来看rwx对目录的意义。

如果理解了前面所讲的目录的本质的话,就不难理解了,因为目录里存的就是文件名和位置等的信息,有目录的读权限,就可以ll,没有就不能了。

。有很多小伙伴可能会见过rm -rf  /这条命令,,现在我们知道是删除所有文件,那么你这台虚拟机就废了,但是用一般用户执行不了,那是rm是root才能执行的命令吗?显然不是

那么问题出在哪里?就出在目录这里了。

看到o在很多目录里面的权限是没有w的,那么就没有权限删除文件。第三条还有一句(取决于文件的权限什么意思呢?)

不做过多解释,应该到这里都能看懂。这里呢,在稍微提前渗透一些磁盘管理的知识,

上面我们已经知道了删除文件本质是删除目录文件中存的文件的信息,我们访问文件就得通过目录,(虽然我感觉应该可以用过inode num应该可以找到对应的磁盘位置,我猜想磁盘恢复可能用了这种技术。)删除文件其实在一段时间内还保留在磁盘上的,只不过我们通过一般的方法(目录)访问不到了,它还是占着地方的,只不过它现在就相当于一个拖欠房费的房客,当我们创建新的文件(来了新的房客)是可以把原来的房客赶出去(把这块磁盘位置覆盖掉)。总结一下就是,删除文件是必须要有目录的写权限的。

最后看一下目录的写权限,写权限对应的是可不可以cd到这个目录。再看下面例子的时候注意用户(下面我其实是开了两个会话)





如果只能读,不能执行。文件名是可以看到,但是其它具体信息看不到。为什么呢?我们仔细来看这个图,读权限是列出目录的内容(文件名)的意思其实只只能列出文件名而已,其它信息不能。而写的意思是可以访问目录的内容,目录的内容是什么?目录里存的就是文件的详细信息咯,而且访问还包含了cd。


上面是只能写不能读,就是可以cd进去,但是不能ll。


对比下面:


说明目录中的文件要想ll,父目录必须有x权限。子目录可以cd(非目录文件cd不了

)的前提是父目录可以cd。

文件夹一般都把rx都给了。

对于目录小心给予w权限我们都知道什么原理,因为w控制的是删除文件的权限,不能乱给x是因为有些文件里面可能会含有危险的内容,比如:

这个/home/cc.txt不能随便执行,不然虚拟机就废了。

rwx这块内容大概在https://www.bilibili.com/video/av18945696/?p=11&t=2027

从第50分钟左右开始看就行。

目录就是文件夹(这个应该没什么疑问),不过在window里我们看到的其实是du -sh的内容

而不是ll -d了。‘

最后再总结一下用户管理


目录的读对应ll,目录的写对应touch,mkdir,vim,nano等,目录的读就是cd,一个目录可以cd的前提,所有父目录都可以cd。

文件的读对应cat,vim,nano等命令。写就是vim,nano了,x就是直接输入路径执行(前提是可执行,内容是有意义的),文件的ll是必须文件所在的目录必须有x权限。这里要说视频里没有说到的一点。文件的rwx操作其实都是建立在目录有x权限的基础上。

如果是:

写和执行一样也需要目录的x:




接文件管理上。

上面的vim是https://www.bilibili.com/video/av18945696?t=247&p=9从8分钟开始看。据说上面还只是大概vim30%的功能。那么呢,下面是nano,nano简单得多。先安装。

然后就可以创建或者打开文件了。我们查看刚才用vim创建的文件a,输入nano a回车。

我们如果nano 一个不存在的文件就是创建一个新文件,这和vim是一样的。下面列出了一些命令了。

一般用的都是vim,vim并不具有什么优势。想了解nano的可以到http://man.linuxde.net/nano。另外呢,其实vim还有一些只是它没讲到,在命令模式下o是在当前行的下一行新建一行,顺便进入插入模式,O是在上面键一行,也进入了插入模式。还有设置行号。

取消呢就是:set nonu。其实y^是复制行开头到光标位置,y$可以复制光标位置到行末尾。说一下如何保存nano编辑的文件吧。ctrl+x即可。如果是新文件或者老文件有改动,还会提示:

选y,然后会让你输一个名字。

输入名字回车就结束了。关于文本编辑器呢,我最后说一点,虽然鼓励命令行操作,但是对于Xshell来说呢,我举个例子你们就明白我的意思。

一般我们还是用vim。这里还说一点,在Xshell外面复制的东西可以鼠标右键粘贴到nano或者vim里面的。但是vim里p和nano里的ctrl+u都不行。

用户管理

首先先要了解一个问题,访问文件是进程去访问文件的。为了下面的说明呢,我们先下一个应用叫做httpd,一个网站服务器软件。我们前面也用过很多次yum了。

-y的意思如下,所有的问题都回答yes,这什么意思呢?回想一下windows下装软件,首先会问你用户协议吧,还有安装位置(默认c盘)等问题,你是不是需要回答啊,这里应该就是这意思。



然后我们启动这个进程,看这个进程的号码。

这个root是主进程,我们一般不去管它,然后其它的呢,我们看到都是apache这个用户的身份在运行,最后的/usr/sbin/httpd是文件的位置。这里有一点需要注意的。这个apache并不在/home下,而是在/usr/share下,这也很好理解,前面文件路径的时候曾经说过的,/usr是软件下载的地方,因为前面说/usr相当于c盘,yum用的是-y。回想windows软件一般默认路径是哪里呢?c盘,那么对应过来就好理解了。apache用户并不是你自己创建的,而是随着软件生成的,当然跟软件在一个目录下咯。

下面这张图帮助我们理解读写文件的过程和实质。

图中的it是一个组,组的概念后面会说到,图中矩形就是一个it组。我们访问文件时进程执行一些I/O操作的函数的程序实现的,比如open,write啊等等。而这些进程呢,是由用户启动的,因此呢,这些由特定用户启动的进程就会带有特定用户的权限。我们时可以对一些文件进行权限设置的,启动进程的用户有什么权限呢,这个进程就可以对文件进行什么操作。比如图中,alice启动一个进程,这个进程去访问file1.txt文件,那么这个进程只能读,写。如果是root启动了进程,进程就可以读,写,执行这个文件了(先不管文件能不能执行,这里只是显示文件设置权限的不同)。总之呢,访问文件的是进程,有什么权限看启动进程的用户uid(user id)和文件的权限设置情况。下面的内容要了解一下,权限只能针对用户设置吗?也不是的,有两种方式:

Discretionary Access Control,DAC,自主访问控制

Mandatory Access Control,强制访问控制。

不过它们的机制也不一样,DAC是rwx,MAC是SELinux,不过MAC不是常规的权限控制方式,就了解一下。。有些文件时所有用户都有所有权限的,比如说/tmp,/var/tmp,这些文件存放的是进程的临时文件。还记得前面写的全局可写吧。

查看权限

我们先来看一下我们熟悉的windows里面怎么查看某一个文件的用户的权限和所有者(默认是创建文件的用户)。


那么Linux怎么看呢?我们打ll就可以看,ll前面已经说过是看文件的详细信息。还需要说明的是ll不加-d看的是目录内容的权限,ll -d看的是目录的权限,目录也是文件,前面曾经说过Linux里一切皆文件,目录当然是文件了,何况在windows里也是。我们来解读这些ll的详细信息的含义。

第一个位置我们发现有的是d,有的是-,代表什么意思呢?其实是文件类型,见下图:

然后后面的一堆rwx还有-是什么意思呢?这是一种ugo结构。这里先说一下.后面的数字代表的是文件链接次数和权限没有关系,还有.是什么含义我们先不去管。

r是可读,w是可写,x是可执行。ugo是什么意思呢?ugo代表的是一个顺序,u是所有者,g是属组,这里稍微说一下组的概念,组是一个逻辑概念,也就是并不会有实际的物理单元对应的,但是逻辑概念也是一个信息啊,存在哪里呢?存在/etc/group里面。


我们关注一下数字(这串数字其实是gid可以理解为组别)和冒号后面的信息,后面其实就是组里包含的用户,由于我们是新创建的组,还没有添加任何用户(可以理解为组员)。下面我们就添加一下看一看变化。


useradd -G是新建一个用户并加入某一个组,而usermod是把已经存在的用户加入某一个组,值得拓展的是,这个格式和汇编语言有点像,按照汇编语言的说法,都是目的操作数在前,源操作数在后,MOV AH,AL就是把AL里的8bits拷贝到AH里(我这里说拷贝是因为移动完成AL里的内容没有变化),上面的usermod -G cn a2也是一样的,cn是目的组,a2是源用户,只不过没有逗号,我联想一下汇编语言是为了便于理解,你没有学过汇编语言就算了。

我们还发现每创建新用户,这个配置文件里就会更新组信息,会加上和创建的新用户的名字一样的组,当然这里的组依旧只是逻辑容器而已。那么如何查看一个用户所在的组呢?用id 用户名。

uid是user id就是一个用户身份码,gid可以看https://blog.csdn.net/wl_haanel/article/details/4793176,我先不作讲解。后面的groups是我们关注的内容,可以看到其实和/etc/group还是有点差别的,因为id显示自己是属于自己的组的,比如a2的groups里面有a2,而/etc/group里面没有。关于组就先说到这,毕竟不是这一讲的主角。另外呢?我还要告诉你们一个小知识。就是选项其实和参数位置可以互换,但是必须都在命令后面。

下面继续说ugo,所谓ugo,就是u有三种权限rwx,g也是,o也一样,于是一共有9个字符对吧,就按照ugo的顺序排列,中间没有分隔符,前三个对应u的权限,中间三个对应g的,最后三个对应o的,-是什么含义的,就是没有这个权限,你如u只有r权限,那么前三个字符就是r--。o是什么呢?就是除了u和g包含用户之外的用户。先举个例子吧。

第一个字符上面说过了,表示文件类型,-是普通文件,d是目录。ll -d /root显示的后面的rwxrwx--- root root是什么意思呢?第二个root后面的253前面已经见过是文件大小。时间是文件修改的时间,mtime(modify time),最后的是一个相对路径。u是root,g是o,o没有列出来,因为有很多嘛。我们看前面的九个字符要分开三个三个看,对应是ugo的权限,那么这个/root的权限是什么呢?是所有者可读可写可执行,属组里面的用户可读可写可执行,其它人可读不可写不可执行。(这个权限是我改过的,你们看到的应该不是这样子的哈,还有文件夹可执行是什么意思呢?后面会说到,不用着急)那么我们再来看看ll 2。首先u是谁呢?是lcl,g是it,,u的权限是可读可写可执行,g也是,o也是。那么看来有一些文件就是权限放的很宽的。如果还不懂的话,再看一个例子

值得指出的是文件对于用户启动的进程如何判断权限呢?按照ugo的顺序依次判断,如果用户属于u,就停止了并启动u的权限,不是u的话,就看是不是g里的,是就启动g的权限,不是g就是o了,就启动o的权限,上面图中abc问的顺序就是这个道理。

设置权限

设置权限分为两步,第一步,设置ugo,第二步,设置ugo分别对应的权限。下面先来说第一步。

这个后面都有注释,我就举两个例子,-R和不带-R的(其实相当于一个例子)。那么首先说-R的意思。

其实就是递归的意思,前面python系列已经说到过目录递归,有一个函数os.walk还记得嘛?

如果你已经不记得目录递归了,看下面例子理解吧。推荐下一个tree软件,它可以看指定目录下的文件树结构。下载还是依旧简单的yum -y install tree。先来看一段命令吧。

mkdir是创建目录666/{a,b}是相对路径,是先创建一个666,然后在666里面创建a,b,就是python里曾经讲过的递归创建,-p就是干这个的。如果存在目录就不会报错,必要的时候创建父目录。666就是父目录。如果没有-p就会报错。

那么下面赶紧进入例子。


u.g的.可以用:代替,例子中也体现了。-R体现了什么呢?就是把目录下的所有文件的ug也改了,目录也是文件,以后不会再重复了。不加-R则不递归,只改变指定目录的,目录里面的文件不变。然后是第二步,修改对应的权限,谁能修改权限呢?root可以,创建者可以嘛?可以,先不去纠结命令中细节,先看效果,对比一下两个wq。

上面内容对应https://www.bilibili.com/video/av18945696/?p=10。

设置具体权限有两种方法,第一种:

这种呢,ugo我们知道是什么意思,那么a是all,所有的意思,就是ugo全都有。+就是加权限,=是重置权限,-就是减去某个权限。我们以例子来展示:

a=-代表减去ugo的所有权限。还需要指出的是,当=后面有-的时候,=只会取后面的第一个字符,后面的就无视掉。

比如a=-r的结果是ugo全部没有任何权限,a=r-x的结果是只有ugo都只有r。下面还是例子。

说明-在=后面的意思是缺失,也就是没有权限的意思。

但是=和+号是可以的。

当然也可以递归地设置权限。下面介绍一个X,x在递归里面是要递归所有的文件的,而X只会递归到目录文件,x和X明显是互斥的。rw没有大写的含义。我们来试一下:


并且呢,有的时候ugoa都可以不加,不过已经看到rwX不可以不加,其实是因为少加个=。下面尝试一些:


=rw这个很怪异,似乎只对g作用了。而且

说明缺省ugoa的情况下,只有=+-后面有一个字符才作用在a上,如果是rwX(x)或者rw等多余一个字符的情况,都只会作用在u上。然而=r+x结果又不一样。

enmm我们还是不要省略ugoa了。我更愿意用第二种,第二种:

这个就拿图中的例子说话,不是一共九个字符,三个三个一组吗?就令r=4,w=2,x=1, -=0来编码。那么6=4+2,644就等价于rw- r-- r--。这个很好理解吧。

那么如何选择用哪一种方式呢?如果知识少量改动,无疑第一种方试很快,如果做大改动,数字好一些。还有提示一点就是7是007,21就是021,也就是在前面添零。

上图还看出来是不能混合使用的。a=777不是对的表达。

那么总结一下chown和chmod的区别呢?我们打一个比喻,chown是相当于甲把自己的房子卖给乙,然后房产证上的名字就变成乙,chmod是乙的老婆呢,给了丙一把钥匙(丙可能是乙的老婆的情夫啊,随你想像),这样丙可以进乙家里对吧,但是它并不拥有这个家,这个家的所有权在乙手里。下面是一个小例子。

应该还是蛮简单的。

rwx的意义

rwx对普通文件的读写我们呢就举几个小例子,因为很好理解了。对目录的意义是我们重点关注的,目录也是一种文件。这里稍微来细说一下目录,目录里存的是什么呢?是文件的名字和磁盘上的位置(还有权限,时间,大小等信息),文件可不是存在目录里的,文件是存在磁盘上的。我们来看一下。

lcl这个目录大小只有216B,而整个目录里的文件是有28K的。-s的意思就是只显示对参数的一个总大小。

我们访问文件是怎么访问的呢?我们其实是先找到目录中存的文件名,然后就能找到对应的磁盘位置了,就可以让磁盘转起来,转到相应的扇区,去读文件。可以说目录是我们和磁盘之间的枢纽。可以拿书的目录来做类比,书的目录可能只有不到一百字(带页码),但是书总共的内容可能有几千字了。我们没有目录是很难在书里面是找到你想要的内容的。再说一下磁盘位置是怎么分配呢?用的是inode num技术,可以加一个-i查看。

最前面的id就是这个区别磁盘位置的id。下面先来看几个普通文件的读,写,执行的例子,还是比较简单的。

我们看到/usr/bin/ls的拥有者是root,o对于这个文件也是有执行的权限,所以bin里面的命令是都可以执行的(如果你不改的话)。再看/usr/sbin/groupadd,o的权限是---,也就是不可读不可写不可执行。我下面是把useradd这个命令的权限改了一下(当然是用root改的),然后我们可以用普通用户创建吗用户吗?看到还是不行,虽然突破了第一层防线,但是还有第二层呢。

这里我要吐槽Linux的用户切换。su 用户名这种方式还好理解,你想切到哪一个就输入哪一个的密码。但是sudo我就不是很理解了。sudo可以先看一下http://man.linuxde.net/sudo

sudo su切到管理员root居然只需要lcl的密码???还可以再前面加sudo 执行root的权限(默认),输的还是lcl的密码?(虽然这是可以改的,但是默认这样设,不改的话岂不是很危险吗?)

还有有些文件,不如.txt文件加上x属性可能是可以执行的,因为里面可能有命令

不过最后执行的路径必须给出绝对路径,而且执行的是原生的ls,没有颜色的那个。

。读写呢很简单了。


vim 0呢?


下面会提示我们:wq!可以强制覆盖。

真的覆盖了吗?


按E

这块先不用太纠结了。涉及到了snap的内容。

重点我们要来看rwx对目录的意义。

如果理解了前面所讲的目录的本质的话,就不难理解了,因为目录里存的就是文件名和位置等的信息,有目录的读权限,就可以ll,没有就不能了。

。有很多小伙伴可能会见过rm -rf  /这条命令,,现在我们知道是删除所有文件,那么你这台虚拟机就废了,但是用一般用户执行不了,那是rm是root才能执行的命令吗?显然不是

那么问题出在哪里?就出在目录这里了。

看到o在很多目录里面的权限是没有w的,那么就没有权限删除文件。第三条还有一句(取决于文件的权限什么意思呢?)

不做过多解释,应该到这里都能看懂。这里呢,在稍微提前渗透一些磁盘管理的知识,

上面我们已经知道了删除文件本质是删除目录文件中存的文件的信息,我们访问文件就得通过目录,(虽然我感觉应该可以用过inode num应该可以找到对应的磁盘位置,我猜想磁盘恢复可能用了这种技术。)删除文件其实在一段时间内还保留在磁盘上的,只不过我们通过一般的方法(目录)访问不到了,它还是占着地方的,只不过它现在就相当于一个拖欠房费的房客,当我们创建新的文件(来了新的房客)是可以把原来的房客赶出去(把这块磁盘位置覆盖掉)。总结一下就是,删除文件是必须要有目录的写权限的。

最后看一下目录的写权限,写权限对应的是可不可以cd到这个目录。再看下面例子的时候注意用户(下面我其实是开了两个会话)





如果只能读,不能执行。文件名是可以看到,但是其它具体信息看不到。为什么呢?我们仔细来看这个图,读权限是列出目录的内容(文件名)的意思其实只只能列出文件名而已,其它信息不能。而写的意思是可以访问目录的内容,目录的内容是什么?目录里存的就是文件的详细信息咯,而且访问还包含了cd。


上面是只能写不能读,就是可以cd进去,但是不能ll。


对比下面:


说明目录中的文件要想ll,父目录必须有x权限。子目录可以cd(非目录文件cd不了

)的前提是父目录可以cd。

文件夹一般都把rx都给了。

对于目录小心给予w权限我们都知道什么原理,因为w控制的是删除文件的权限,不能乱给x是因为有些文件里面可能会含有危险的内容,比如:

这个/home/cc.txt不能随便执行,不然虚拟机就废了。

rwx这块内容大概在https://www.bilibili.com/video/av18945696/?p=11&t=2027

从第50分钟左右开始看就行。

目录就是文件夹(这个应该没什么疑问),不过在window里我们看到的其实是du -sh的内容

而不是ll -d了。‘

最后再总结一下用户管理


目录的读对应ll,目录的写对应touch,mkdir,vim,nano等,目录的读就是cd,一个目录可以cd的前提,所有父目录都可以cd。

文件的读对应cat,vim,nano等命令。写就是vim,nano了,x就是直接输入路径执行(前提是可执行,内容是有意义的),文件的ll是必须文件所在的目录必须有x权限。这里要说视频里没有说到的一点。文件的rwx操作其实都是建立在目录有x权限的基础上。

如果是:

写和执行一样也需要目录的x:




猜你喜欢

转载自blog.csdn.net/qq_41740705/article/details/80828391