一、对操作系统的浅层理解
操作系统广义上是指操作系统内核以及shell外壳,狭义上单纯是指内核。而在Linux中,我们所见到的命令行就是shell外壳,而在Window上,我们所见到的图形化界面就是shell外壳。下面我会对xshell外壳再做简单的解释。
二、shell外壳的理解
2.1为什么会存在shell外壳
因为出于易用程度和安全方面的考虑,用户无法直接访问操作系统。从易用程度上看,用户我只是想跟操作系统做交互,而操作系统内部又涉及各种原理,进程各方面的问题,用户不想了解那么多操作系统内部的问题,于是乎就把自己的需求以指令的方式告诉shell外壳,让shell外壳去跟操作系统做交互,进而简化了用户操作的繁琐程度。从安全方面看,也很容易理解,不让用户跟操作系统直接做交互,就防止了用户有意或无意的可能对操作系统做出修改的操作,就比如说用户输入的非法的指令,shell外壳就直接拦截掉了你这个非法的指令,这也是对操作系统的一种保护机制。
2.2什么是shell外壳
通过上面的解释,我们可以很清楚地知道,shell外壳就相当于是操作系统外部的一层软件层,其作用是将使用者的命令翻译给核心(kernel)处理。 同时,将核心的处理结果翻译给使用者。要在这里需要继续说明的是,shell是所有外壳程序的统称,bash(centos或ubuntu下)或者sh是某一种具体的命令行解释器。
2.3shell外壳的工作模式
shell本身其实也是一个执行起来的程序(进程),在系统的启动期间一直存在。当执行到有风险或者是用户自定义的指令时,shell都是通过创建子进程的方式让子进程去执行有风险的指令,没有风险的指令才由shell本身去执行。当你每次进行xshell登录的时候,系统都会给你这个用户新启动一个shell/bash。
二、Linux权限
2.1root账号和普通账号之间的切换
2.1.1普通账号切换成root账号
su - : 普通账号切换成root账号(相当于用root账号重新登录了一次,输密码时输的是root账号的密码)。
su : 直接将当前普通账号的权限提升为root账号的权限。
root账号再回退到普通账号:logout/ctrl d
2.1.2root账号切换成普通账号
su 普通账号名:root账号切换成普通账号(无需输密码)
普通账号再回退到root账号:logout/ctrl d
2.1.3普通账号切换成普通账号
su 普通账号名:普通账号切换成普通账号(输对应的要切换成的用户的密码)
2.2对指令进行短暂的提权
sudo + 指令
不过一般的普通用户执行不了sudo命令,原因是因为要执行sudo命令,要通过root账号先将该普通账号添加到etc目录下的sudoers文件中,sudoers文件就相当于一张白名单,就默认root已经相信你这个普通账号所做的一切操作了。
2.2文件权限
Linux上的群体更多的是角色(拥有者(u),所属组(g),other(o)),Linux上操作对象的属性,多数情况下指的是文件的属性,包括可读,可写,可执行(r,w,x)。显示行中最前面十个字符中第二到第四个字符显示的是文件拥有者权限,第五到第七个字符显示的是文件所属组权限,第八到第四个字符显示的是文件other权限,后面紧跟着是拥有者和所属组,除了拥有者和所属组中的用户其他用户都是这个文件的other用户,体现在显示行中就像下面这样:
2.2.1 更改文件权限的方法
更改文件权限的方法:chmod指令
chmod u/g/o/a(a表示所有用户)+或- r/w/x
用法如下所示:例子中删去了文件file.txt1拥有者的读权限
再加上file.txt文件拥有者的读权限
针对其他文件权限的修改也是同样的方法。 在这里需要说明的是,文件权限只是针对普通用户来设定的,root用户不受文件权限的限制。
2.2.2更改文件拥有者/所属组的方法
1、sudo chown 用户名 文件名 更改文件拥有者(普通用户)
chown 用户名 文件名 (root用户)
2、sudo chgrp 用户名 文件名 更改文件所属组(普通用户)
chgrp 用户名 文件名 (root用户)
3、chown 用户名:用户名 文件名 一起改拥有者和所属组(root用户)
从上面的操作中我们也可以看到,无论是更改文件的拥有者还是所属者,都需要有root权限。
2.3文件类型
当我们用ll指令显示文件的具体信息时,显示行前十个字符的(例如-rwx------)第一个字符,表示文件类型。
-:普通文件,文本,源代码,图片,视屏,库,可执行等;
d:目录文件
b:block,块设备文件->磁盘(允许随机访问)
c:char,字符设备文件->键盘,显示器(不允许随机访问,只允许顺序访问)
l:链接文件(就像是Window下的桌面快捷方式)
p:管道文件
s:socket文件
2.3.1对文件后缀名的理解
这里需要注意的是,Linux下文件类型不通过后缀区分(不代表Linux不用后缀)。Linux中后缀名在系统上没有意义,但在系统之上搭建的诸如gcc、g++等编译工具上文件后缀有意义。
所以我们对于文件后缀的态度应该是:虽然Linux不通过它识别文件类型,但我们依旧推荐使用。
不仅仅是人需要知道文件的类型,某些工具也需要识别文件的类型。
2.3.2通过指令查看文件类型
file 文件名:查看文件类型
2.4常见的权限三大问题
2.4.1、对一个目录而言,如果要进入一个目录,需要什么权限?
答案是:x权限
在Linux下如果你想要读到某个目录的属性信息(比如说查看这个目录中有哪些文件)的话,你需要有这个文件的r权限。如果你想要在某个目录中创建文件,删除文件,修改文件名,你需要有这个文件的w权限。如果你想要进入某个目录,你需要有这个目录的x权限。在这里同样需要说明的是,目录权限只是针对普通用户来设定的,root用户不受目录权限的限制,跟上面普通文件的现象是一样的。
2.4.2、为什么普通文件和目录文件的默认权限是664和775?
在Linux中,普通文件的初始权限为666,目录文件的初始权限为777,在这里需要提到的一个东西就叫做权限掩码(umask)。在本系统中umask初始值为0002(八进制)。 普通文件和目录文件的默认权限需要在初识权限的基础上去掉(这里的去掉不是减法,而是只要是在umask中出现的为1的位置,在最终结果中该位必为0)在umask中出现的权限。下面就是初识权限的计算过程:
2.4.3、一个文件能否被删除,并不取决于文件本身,而取决于文件所在的目录的拥有者是否有w权限。
如果我们需要在一个特定的目录下实现文件的共享呢?root账号下的tmp目录就可以允许多用户在这个目录下新建文件,并且这个目录将other的rwx权限全部放开,实现了多用户之间的文件共享。在这里又要引出一个新的名词叫粘滞位,何为粘滞位?就是在共享目录中给other设置的一个权限位,具有x的意义,同时也对目录权限进行了特殊的限定:该目录里的文件,只有root用户和该文件的所有者才能删除,其他人一概不允许删除。