后面我们写代码时,写完可能会出现没有执行权限什么的,所以我们要知道文件都有哪些权限和类型。
首先
就像我们之前目录结构图里面有个/dev,它就是存放设备文件的,也就是说,哪怕是一个硬件设备,例如打印机啥的,它也把它映射成一个文件。这就是一切皆是文件。
但它不是以文件的后缀名来区分文件类型的。
如上图,就是在进到 家目录:/home/stu ~ 两者等价,底下的quzijie文件夹(目录文件)里面,再用mkdir来创建一个文件夹(目录文件),名字叫class03(mkdir建立的目录文件其文件名的颜色一般是蓝色),创建完然后进到class03里面,这时class03里面是空的。
此时其绝对路径是/home/stu/quzijie/class03.
现在在class03文件夹里面用touch建一个普通文件,名字叫xxx.yyy。
可以看到成功了,这说明不管文件后缀名是什么,即使是.yyy这种,Linux也能创建成功,它不以后缀名来区分文件类型。
同理,再建一个y.x文件,后缀名是.x也能成功。
这些并不是我们在Windows上所熟知的什么.txt是文本文件类型的后缀名,.pdf是图片类型的后缀名。
那么来看Linux是以什么来判断文件类型的,Linux是在文件属性中专门有一列内容来记录文件类型的。
如图,用命令ll,我们可以看到,第一列内容,就告诉了你文件类型
d:表示这是一个目录文件(文件夹),./:是当前目录class03,../:是上一层目录quzijie。
-:表示这是一个普通文件,xxx.yyy,y.x都是刚刚用touch建立的普通文件。
例如再在class03里面用mkdir建一个目录文件test,然后ll。可以看到test目录文件前面的就是d。
这里是一些常用的文件类型标识
上图中的普通文件一堆标识就是说这些是用touch建立的文件,而touch建立的普通文件用cd是进不去的,因为cd只能进去目录文件(文件夹),要用mkdir建立。如图,ll进去文件y.x文件的那一行第一个字符是-,就代表是普通文件
而cd test就可以进去test,虽然ls显示test里面什么都没有为空,此时绝对路径就是/home/stu/quzijie/class03/test. cd进入一个新目录文件,其路径名就加一个(/新进入的目录名)
一般cd后紧接着都是ls,看看进去的文件夹里面有什么
或者用 ls -l 就等同于 ll 进去看到一个目录文件夹里的所有文件信息,此时test里面没有东西所以是总计0,那我们 cd .. 退回到test的上一层目录文件class03里面,再 ls -l去看class03目录文件夹里面的所有文件信息,如下
然后我们看这些文件信息都是什么东西
文件类型下来就是文件权限,一共有9列,可分为前3列(文件所有者即创建者u的读r,写w,执行x的3列访问权限,这3列所代表的顺序不能变1读2写3执行),中间3列是文件的同组组员用户的3种访问权限,后3列是其他人的3种访问权限。
其相应位置显示相应字母就代表相应的人拥有了相应权限,显示(-)就是你没有相应的权限。要看文件权限就是 ls -l 或者 ll 进入可看
权限下来是链接数,
对于普通文件来说,有几个链接了这个文件,那么链接数就是几。
对于目录文件来说,就是一级子目录的个数。
链接数下来是拥有者即文件所属者
我们前面建立的文件或文件夹其所属者都是stu,stu就是一开始我们给自己取的用户名。
所属者下来是它的同组人也是stu,因为Linux是多用户系统,但目前我们这里只有自己这一个用户,所以所属组,同组人也是自己这个用户stu。
所属组下来是文件的大小,下来是文件最后一次的修改时间,最后就是文件名。
以上就是Linux里面文件的所有详细的属性信息,用 ls -l来看。
下来是一个重点——如何修改文件的权限——chmod的用法,用来修改文件权限的2种方法。
先来在class03目录底下touch一个普通文件main.c
然后 ls -l 看一下main.c都有什么权限
可以看到main.c的所有者和同组人有读和写的权限,但没有执行权限;而其他人只有一个读的权限。
修改用户权限法一——文字设定法——+,-,=
那么现在如果要给其他人加上一个写的权限——要怎么做。————chmod o+w main.c
(chmod 空格 3类用户中的某一个或a(all代表3类用户都包含)(+,-,=)3类权限中的什么 空格 文件名)
可以看到 chmod o+x main.c之后 ls -l显示,main.c的执行权限x就加上了
再执行一遍也没有报错
要是要把这个x权限去掉,就是将刚刚的o+x改为o-x就行,在例如给u加上x权限
给所有人都加上x权限
这里u,g,o,a就是一个参数,所以跟后面的+,-,=符号之间不要有空格
现在对于main.c文件而言所有人都有执行x权限了,那么main.c文件就变成绿色的了。
要是把所有人的执行权限x都去掉,chmod a-x main.c,现在main.c文件就变成黑色的了,虽然都是普通文件。
现在给属主把写权限w去掉后,现在文件main.c的所有者user再想要往文件main.c里面写东西的话就写不进去了。就是因为没有写权限。
一般出问题后先打开看看是不是权限问题
二.还有另一种修改权限的方法,直接使用等于号—— =
对于文件的哪一类操作用户想要有哪些操作权限,就让那类用户直接=它需要的所有权限,例如上图中,文件所有者user需要读r和写w权限,就是——u=rw。
那现在要同时给2类操作用户来修改权限,属主user和同组用户group,要怎么做——不同类的操作用户之间用逗号,隔开
上图就是同时修改2类操作用户的权限
修改用户权限法二——数字设定法——用的最多
如果要同时对3类用户都进行权限修改,此时用文字设定法就比较麻烦,用数字设定法更好
先来看一下这个421是怎么来的
3种权限rwx分别都占着位置,对应二进制里面也是占着3个位置
rwx
100——对应为r--,也就是4
010——对应为-w-,也就是2
001——对应为--x,也就是1
这里的nnn对应的就是ugo
nnn
ugo
n为根据rwx有无的数值和
例如6 6 4——就是
rw- rw- r--
7 7 7——
rwx rwx rwx
下图在工作中一般是不允许的,例如其他人o是没有写w权限的,不能让其他人随便就把我的文件给改动了
就像下面原始创建的普通文件y.x,一开始就是默认的664,(正常情况下多数都给664)其他人只有读r权限,因为Linux是多用户系统,所以所有者和同组人可以有读和写的权限
如图,touch出的普通文件(yy.xxy)都是664,你可以自己给它改一下改成644
再给main.c改个641