Linux严格意义上说的是一个操作系统,我们称之为“内核(kernel)“ ,但我们一般用户,不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
Shell的最简单定义:命令行解释器(command Interpreter)
shell作用:
1.将使用者的命令翻译给核心(kernel)处理。
2.同时,将核心的处理结果翻译给使用者。
对比Windows,我们操作windows不是直接操作windows内核,而是通过图形接口,点击等等完成我们的操作(比如:双击打开你的D盘浏览学习资料);
相同的shell对于Linux有相同作用,对我们的指令解析给Linux内核,反馈结果通过内核运行出结果后,通过shell传递給我们。
Linux系统下有两种用户:超级用户(root)-皇帝;普通用户-平民
皇帝可以在Linux系统下做任何事-没有限制
平民在Linux系统下受限制的苟活
超级用户提示符为"#“;普通用户提示符为”$"
命令:su+[ 用户名]
root用户切换到普通用户:su + user(用户名)
比如root用户换成李现(用户名)直接输入:su 李现 那么现在你就是李现啦!
而普通用户切换到root用户则需要输入:su root (root可省略)—需要输入登录root账号的密码!
当我们是平民(普通用户)时,想要拥有皇帝(root用户)的权力去做一件事,但是我们又不想改变我们平民(普通用户)的身份时,就可以用到sudo提权操作!
命令:sudo + 指令
比如我们作为普通用户想要用以root的身份在当前目录下去创建一个文件(test.c)-则我们可以这样:
sudo touch test.c
(这时我们需要输入当前普通用户的密码!在短暂的几十分钟内不需要再输入密码就能继续sudo提权)
文件权限=人(文件访问者)+文件属性
u-user(所有者):文件和文件目录的所有者
g-group(所属组):文件和文件目录的所有者所在的组的用户
o-other(其他用户)
我们可以看到文件的前面有十个字符,第一个字符代表着文件类型
其中linux系统中的文件类型和windows系统中的文件类型区分的方式不同!
Windows以后缀(比如.txt、.dll、.jpg)区分文件类型
linux不以 后缀去区分文件类型!
如果要使用文件后缀,仅仅只能用来提示用户来区分文件—文件后缀是文件名的一部分!
而linux则是以文件的前面属性的第一个字符作为文件类型的区分!
linux文件类型(前面属性的第一个字符作为区分):
—(横杠):普通文件(源代码、库文件、可执行程序。文件压缩包等等)
d:目录文件
c:字符设备文件:键盘、显示器等等
b:块文件:磁盘等等
l:链接文件:快捷方式
p:管道文件
s:socket文件
以上文件除了普通文件和目录文件,其他文件几乎不能删啊!
那么剩下的九个字符呢?
剩下的九个字符分为三三为一组!
分别为所有者、所属组。other对应的权限!
接下来我们针对一组权限进行刨析,其他两组权限是一样的可以类比:
r-read(读)权限
w:write(写)权限
x:execute可执行权限
有就显示对应字符,没有就显示-【比如r-x:有读权限,没有写权限,有可执行权限】
拥有者一般三个权限都有:rwx-读权限-写权限-可执行权限
那么具体在linux系统上我们应该怎么看权限呢?
权限:某人允许做某事 【属性和人要一 一对于!】
给文件或目录增加或减少权限用到chmod
指令:chmod + 人+/-权限 + 文件名
比如: chmod u-r test.txt【在文件test.txt上给user(所有者)减去读权限】
另:改文件或目录的人只能是该文件或目录拥有者或者是root!!!
要是想要一次性给文件所有属性同步增减权限,可以这样:
chmod + a+/-指令 + 文件名{a—all—所有人}
给文件更改所有者要用到chown
指令:sudo chown 用户名 文件名(sudo提权)
一般情况下,你把文件给完别人之后你的身份就从user(所有者)变为group(所属组)
给文件更改所属组要用到chgrp
指令:sudo chgrp 用户名 文件名
要是想要把文件或者目录的所有者和所属组给同一个人,那么我们可以:
指令:sudo chown 用户名:用户名 文件名
更改权限不只有上面说到的chmod +/-rwx;这里我们可以这样看rwx
所以我们可以这样改:
指令: chmod 数字数字数字 文件名
在linux操作系统中,目录的创建出来的起始权限为777 ;而文件的创建出来的起始权限为666
但是我们查看的目录起始权限为775,文件的创建出来的起始权限为664,这是为什么呢?
而系统会默认配置好umask权限掩码**:凡是在umask中出现的掩码,都必须在权限中去掉!!**
umask— 0002(八进制、第一位0负责补齐不需要看) — 000 000 010
就是系统会把umask有的权限在文件或目录中去掉(去掉有的1),然而系统用的不是减法,而是把
umask掩码按位异或 然后再与文件或目录的权限按位与**【(~umask)&权限码】**
umask掩码是可以修改的 **指令:umask xxxx **
(xxxx为八进制数字;第一位0可省略,即为 umask xxx)
查看umask指令: umask
那如果我们要进入一个目录,至少需要什么权限呢?
至少需要x(可执行)权限!【这就是为什么系统规定一个目录的起始权限为777,因为所有的目录被创建出来,一般都是要被允许进入的!-具有x(可执行权限)】
在linux系统中,我们需要一个公共的目录来进行文件的操作(增删查改)【就像咱都需要公共的球场打野球那样】
而这个公共的目录是由root来创建的;所属组和other都能在这个目录下操作文件;这时候有个情景:
有一天早上,在目录所属组里的a佬创建了a.txt文件,限制了所属组和other只能读(744);这时候有个同在所属组里的b佬来到这个目录,看到a佬创建了个新文件(a.txt),然后b佬打开了文件并且浏览了里面的学习资料;到了晚上,a佬不想把a.txt给别人看了,然后把a.txt文件的权限改为700(不给所属组和other读写可执行权限);第二天早上b佬又想打开a.txt浏览学习资料,但是他发现打不开a.txt了;一气之下把a.txt删除啦!这时候a佬感觉到愤怒又委屈!这合理吗?
除开对于a.txt文件权限,对于当下公共目录的权限来说,这恒河里阿!
在公共目录里,不能读写执行的文件也可以删掉。
这时候就需要粘滞位啦—给公共区域的每个佬规定各自创建的文件只能自己删除!
这时候/myteam目录(根目录底下的myteam目录)里面不能读写执行的文件也可以删掉。
指令:chmod +t 目录名
我们看到公共目录的ohter属性从rwx变为了rwt即添加粘滞位成功!
给公共目录增加粘滞位后就不会出现 不能读写执行的文件也可以删掉的情况。【等于粘滞位给公共目录的每个佬都划分了自己的区域!】
当一个目录被设置了粘滞位后,则该目录下的文件只能由【root删除】、【目录所有者删除】、【文件所有者删除】