一、shell
Linux是一个操作系统,我们称之为“内核(kernel)”,但是一般情况下,并不会直接去访问kernel,而是通过操作系统的外围,有一层外壳(shell)的程序,来和kernel进行交互。
在Windows下,我们通过图形化界面来让操作系统执行我们的指令。
例如,我们双击一个图标,图形化界面会将这个动作转化成对应的指令给操作系统执行。
同样的,在Linux下,我们通过给shell输入指令,shell转化为kernel能理解的指令,再传递给kernel执行。
二、权限
在Linux下,存在两种用户,超级用户与普通用户。
超级用户即root用户,root用户不受权限的限制,可以在Linux下做任何事情。
普通用户即除root外的所有用户,在执行一些命令时,会受到约束。
在Linux中,通过su命令来切换用户。
如图所示,在root用户下切换用户,su 用户名即可直接切换,当前所处目录不会改变。
但是如果普通用户切换到其他用户,需要输入对应用户的密码。
同时,在命令行输入命令时,#表示当前用户是root,$表示当前用户时普通用户。
三、文件权限
1、文件的访问者
在Linux下,任何一个文件都会有三类访问者,即文件的所有者(U),文件的所属组(G),除此之外的其他人(O)。
2、文件类型
如上图所示,当输入ll命令显示目录下文件及其详细信息时,每个文件的最前面有十个字符。
其中,第一个字符表示文件的类型。
d:目录(即文件夹);
-:普通文件;
p:管道文件;
l:软链接(即快捷方式);
b:块设备文件(例如硬盘);
c:字符设备文件(例如屏幕);
s:套接口文件。
而剩下9个字符则是与文件的权限有关。
3、文件权限
权限的前三位代表拥有者的权限,中间三位表示所属组的权限,后三位表示其他用户的权限。
这三位按顺序依次表示为
r(文件的读权限,对于目录来说,是浏览目录下的文件列表的权限)、
w(文件的写权限,对于目录来说,是在该目录下增加、删除文件的权限)、
x(文件的执行权限,对于目录来说,是具有进入目录的权限),
-表示没有对应的权限。
4、文件权限的修改
我们可以使用chmod来修改对应文件的权限,当然只能由权限的拥有者或者root来修改。
# chmod u+w test.c
在上述命令中,u代表文件的拥有者,+代表邀将后面的权限付给前面的角色,test.c代表需要修改权限的文件名。
这个命令会将test.c文件的写的权限增加到文件的拥有者上。相似的,可以将u换成g、o、a,表示所属组、其他人的权限,所有人的权限,+换成-、=,表示去掉对应的权限、赋成后面的权限。
同时,也可以多个放在一起使用,如下:
另外,由于每一种角色对应的权限只有8种状态,因此我们可以使用3位8进制数来修改文件的权限。
r——4,w——2,x——1;rwx权限就表示7,rw-就表示6;如图所示。
chown、chgrp可以修改文件的拥有者和所属组。
在上述的命令中,-R选项可以将目录下的所有文件递归修改其权限。
5、umask
在创建文件时,如果是目录,默认情况下它对应的权限是777,如果是普通文件,则是666。
但是实际上,创建的目录的权限是775,普通文件的权限是664。
这是因为,在创建文件时,有一个东西叫文件掩码,用umask命令查看。
如图所示,此时的文件掩码是002。文件掩码会在文件创建时,去掉文件对应的权限。002,表示其他人的写权限。所以,如果在文件创建时如果有其他人的写的权限,会被去掉。
同时,umask后面直接跟数字可以直接修改文件掩码。
如图所示,将文件掩码设置成777,表示在文件创建时,去掉其所有人的所有权限。
6、粘滞位
在上述内容中我们知道了,对于目录来说:
没有r,就无法查看目录中有哪些文件;
没有w,就无法在目录中创建和删除文件;
没有x,就没有办法进入目录。
这时就会引发一个新的问题,如果一个用户拥有该目录的写的权限,就可以删除该目录下的任意文件。比如你写了一份代码,权限对我而言是0,但是我却可以删除你的文件。就很离谱!
为了解决这种问题,Linux引入了粘滞位这个概念。
chmod +t 目录名/路径
就会将该目录设置一个粘滞位,在具有粘滞位的目录下,只有root、该文件的拥有者、该目录的拥有者删除。