赞
踩
我们一般称这个为命令行。输入一个命令就可以执行一个命令。那么是谁帮助执行的呢?是shell。
shell其实也是个指令,也是个程序。在linux中体现为bash程序,也就是我们常用的命令行。当我们打开云服务器时,就是自动关联bash程序
shell是外壳程序的统称。bash就是一种确定的外壳程序,是centos7下的命令行解释器
在Windows中,shell体现为图形化界面 Windows GUI
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)”。一般用户是不可以直接访问操作系统的,因为涉及安全问题。所以在操作系统的外层包裹了一层软件层,即shell,又叫外壳程序。用户可以通过这个外壳程序来与操作系统进行沟通
在linux中外壳程序把用户的输入操作通过命令的形式收到,然后将指令传递给操作系统,操作系统处理执行完后,再将结果传给shell,最后再给用户
所以shell相当于是一个中间商的存在
操作解释。将用户的操作(即输入的命令)解释交给我们的操作系统,让操作系统去执行,执行完毕将结果经过shell返回给用户
因此shell也叫命令行解释器
保护操作系统。直接在shell层就将一些无理的命令要求拒绝
权限=人+事物属性
怎么理解呢?
对于人。就比如说军事基地,军官就能去,普通人就不能去,这就是权限
对于事物属性。比如说你想在爱奇艺视频网站敲代码,由于爱奇艺视频网站这个事物本身不具备敲代码的功能,所以你想在爱奇艺视频网站敲代码是不可能的
Linux上用户分为两类:
从普通用户切换成root用户,指令:su
示例:
这里要输入的密码是root的密码,不是你这个普通用户设置的密码
另外还有一个指令:su -
su
和su -
的区别在于:su
是在切换身份后还处在之前的目录下;而su -
则是让root重新登陆,即回到最开始的目录下
此外:
现在,我是一个普通用户
想访问test.txt,但权限不够,被拒绝了。当然我们可以切换身份为root去看。不过就为了这个去大费周章太麻烦。所以我们可以用sudo
对这个指令进行提权
语法:sudo 指令 文件
这里输入的密码是当前用户的密码,不再是root的密码
这是为什么呢?
这里涉及将当前用户添加到root的信任列表,后面再讲
如果你给指令前带上sudo,执行这个指令的并不是以你的身份执行的,而是以root的身份执行的
我们通过一个例子来理解上面这句话:
当我们在命令行输入ls -l
后,我们可以看到文件的如下信息:
下面将详细介绍文件的属性
Linux下不用文件后缀区分文件类型,而是用文件属性中第一列的第一个字符来区分文件类型
常见文件类型:
d:目录
-:普通文件。如文本文件、可执行文件、归档文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
那该如何看待后缀呢?
这里说的linux下不用文件后缀区分文件类型,说的是操作系统。而像gcc这样的软件是需要后缀的!!!
举个例子:
我写了一段代码,并由gcc生成了可执行文件
我们./a.out
是可以执行该文件的。将a.out
改成a.exe
或者改成a.txt
,都是可以执行的
但当把test.c改成test.txt后,gcc test.txt却报错了
所以说系统不关心文件后缀,不代表操作该文件的软件不关心
Windows下的操作系统是需要后缀来区分文件的
Windows下是根据不同的后缀来调用程序的
而Linux下是你用户来指明用哪些程序来访问某些文件的
也就是文件的拥有者,你想让哪些用户看你的文件,你就将那些用户添加到所属组中
这里的文件访问者和上面的用户并不冲突。
人都会扮演很多角色
文件权限读、写、执行
表示文件权限的字符共九个,每三个为一组。每组中的每个字符的位置的所表示的权限是确定的:第一个代表可不可读,第二个代表可不可写,第三个代表可不可执行
-
表示没有对应位置的权限
r
表示可读
w
表示可写
x
表示可执行
举例:
首先这是个普通文件。拥有者可读可写不可执行;所属组可读可写不可执行;其他用户可读不可写不可执行
为什么这里都不可执行呢?因为文件属性本身就不可执行,所以也就没有可执行的权限
完整描述一个文件的权限:拥有者的权限+所属组的权限+other的权限+拥有者是谁+所属组是谁
一般是这个文件的拥有者或者是root才可以更改文件权限
更改文件的指令:chmod 权限所属对象+/-权限 文件名
+代表是增加权限,-代表是删除权限
权限所属对象:
- u 代表拥有者
- g 代表所属组
- o 代表其他人
权限:
- r 代表可读
- w 代表可写
- x 代表可执行
示例:
简便写法:
对一个访问者同时增加或删除多个权限
对多个访问者同时修改权限
多个访问者之间逗号连接
所有访问者同时改变同一种权限
a
代表所有访问者
文件权限的表示一共九个字符,每三个一组。权限要么是有,要么就没有,所以我们可以用二进制来表示有没有该项权限
以rw-rw-r–为例,对应的二进制就是:110 110 100,再转换为八进制就是664
所以可以用如下指令来更改权限:chmod 八进制数 文件名
例如:
777换成二进制就是111 111 111,也就是权限全开
同理,这是权限全关
文件的拥有者和所属组是可以更改的。
但一般只有root才可以随意更改文件的拥有者和所属组,如果普通用户也想更改,需要使用sudo
语法:chown 新拥有者 文件
语法:chgrp 新所属组 文件
这是同时改变拥有者和所属组
由上图可知:尽管这个文件的拥有者是我自己,但由于我没有权限,我自己也无法访问
但假如是root呢?尽管root在这里来说属于其他用户,按理来说也没有任何权限的。但root是超级用户,它可以无视权限,直接访问
所以说:权限是用来限制普通用户的,root是超级用户
为什么我们创建普通文件权限默认是664(即不包括可执行)?,创建的目录默认权限是775?
这里就涉及到了起始权限与最终权限
一个文件有两种权限,一个是起始权限,在创建文件之处系统设定的;另一个是最终权限,也就是你看到的默认权限
新建文件的起始权限是666,新建目录的起始权限是777
实际上是0666,0777。但第一位我们不去看,以后再说
那么系统为了更好的控制权限,在起始权限变成最终权限这之中,设置了权限掩码(可用umask指令查看)
权限掩码:在起始权限中,去掉umask中出现的权限,且不能影响其他任何权限
最终权限=起始权限&(~umask)
具体说明:
就看新建文件,起始权限666,变为二进制是110 110 110
普通用户的umask是002,变为二进制是000 000 010,再~后是111 111 101
两者按位与得:110 110 100,即664
功能:查看或修改权限掩码
语法:umask (权限掩码)
如果umask后面带了三个八进制位数据,则表示将权限掩码修改为此
超级用户默认掩码值为0022,普通用户默认为0002
背景:在使用Linux的时候,未来可能会有一些共享目录被所有普通用户共享,用来保存普通用户产生的临时数据
准备:这个共享目录通常是由root提供的
问题:当我把文件给所有人共享的时候,文件的访问者是受权限约束的(比如说设置权限其他用户只能读)。但是拦不住别人删我的文件!!这很不合理!!
解决措施:给共享目录添加粘滞位
只能给目录添加粘滞位
而且只能是root进行添加
指令:chmod +t 共享目录
设置完粘滞位后,在共享目录下只有文件拥有者和root才能删自己的文件
当然,目录的所有者也能删,不过一般共享目录的所有者就是root
此外,这里有两个问题:
- 为什么文件共享时拦不住别人删我的文件
- 为什么只能给目录添加粘滞位
回答:
- 能否删一个文件不是由文件的权限决定的,而是由该文件所处的目录权限决定,目录具有w权限,即可删除。但同时w权限也决定了能否创建新文件。共享目录为了满足普通用户在该目录下创建权限的需求,将w权限放开,因此普通用户也获得了删文件的权限。所以粘滞位的作用就体现了
- 因为文件被删的原因是由于目录权限导致的,所以就给目录添加粘滞位
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。