1.将命令翻译后交给核心执行
2.将核心执行的结果翻译并返回给我们
形象理解shell:
假如小y过年回家打算相亲了,打算小y并不擅长与异性交流,这时候就拜托了媒人王姨作为中间人,帮忙小y和异性之前传话。这时候王姨就是“外壳程序”shell。
为什么要有shell?
1.方便用户使用
2.作为外壳程序,保护核心
补充:
权限概念
Linux中权限分为两种:root账号、普通账号
root账号:为超级权限账号,不受任何权限限制 普通账号:受到权限限制,在Linux中只能做有限的事
su命令:su 用户名
功能:切换账号
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:/$ whoami hyc #切换root账号执行su即可 hyc@hcss-ecs-4ce7:/$ su #输入root账号密码 Password: root@hcss-ecs-4ce7:/# whoami root #切换普通账号:su 用户名(不需要密码) root@hcss-ecs-4ce7:/# su hyc hyc@hcss-ecs-4ce7:/$ whoami hyc补充:普通用户 -> root账号,除了su可以实现,su -也可以实现。但是区别是?
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:/$ pwd / hyc@hcss-ecs-4ce7:/$ su Password: root@hcss-ecs-4ce7:/# whoami root root@hcss-ecs-4ce7:/# pwd / hyc@hcss-ecs-4ce7:/$ pwd / hyc@hcss-ecs-4ce7:/$ su - Password: root@hcss-ecs-4ce7:~# whoami root root@hcss-ecs-4ce7:~# pwd /root #我们可以看到su、su-,都成功的切换到了root。 #不同的是su切换账号并不会改变之前所处路径,既su不会改变位置 #而su-会改变位置,之前是/下,切换之后在/root下sudo:短暂的指令提权
如果我们需要使用root权限来执行一些指令,但是却没有root密码怎么办?
在指令最前面加上sudo,就可以使用root权限执行命令
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:~$ sudo ls [sudo] password for hyc:这样确实方便,但是有一个问题:那岂不是人人都可以使用root权限了?这不乱套了?
Linux设计者当然考虑到了这个问题,普通用户如果想要使用sudo进行指令提权。必须要root账号给予普通账号提权权限才行。所以并不是什么普通账号都可以进行提权
没有提权权限的账户,就会显示以下报错
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:~$ sudo ls [sudo] password for hyc: hyc is not in the sudoers file. This incident will be reported.总结:
普通 -> root:su(不会改变位置) su-(会改变位置:默认切换至家目录) root -> 普通:su 用户名 sodu : 指令提权
权限管理
权限的本质是:能做或者不能做什么事情(控制用户行为,防止错误操作)
理解:
1.权限限制的是人
2.权限要求目标必须具备对应属性:权限:角色+目标属性(权限)
属性
对于Linux中的属性来说主要为三个:读、写、执行
读:r
写:w
执行:x
之前我们说过第一个字母代表文件属性,而后面的一串字符则代表该文件的权限。
r:对文件来说,代表可以读取文件内容;对目录来说,代表可以浏览目录内容 w:对文件来说,代表可以修改文件内容;对目录来说,代表可以删除目录中的内容 x:对文件来说,代表可以执行该文件;对目录来说,代表可以进入该目录
但是为什么这里有多个wrx呢?这就涉及到角色的问题。
角色
上面我们说了权限=角色+对应属性。
属性代表相应的角色拥有什么权限,那么我们是如何分辨角色呢?如何知道角色对应所拥有的权限呢?
首先我们可以通过命令行得知我们当前的角色、或者使用whoami指令
然后根据当前用户,来判断其说拥有的权限
解释:
我们当前用户是root,对于第一个目录来说,我们就是其拥有者。所对应拥有的权限则是rwx
而什么是所属组?什么是other呢?
所属组就是当前角色不是拥有者,但是与拥有者在同一个队伍中。这时候就会匹配所属组权限,这时候这个角色就是所属者。
所属组的存在是为了更精细化的权限管理。举例:a组和b组都在同一台Linux机器上开发项目,a组项目代码需要公开出来让a组全体成员都能看见,但是不希望b组看见。这时候就只需要将a组全体成员纳入所属组中,然后将other权限关闭,就可以实现。(现在很少用到了,了解即可)
other就是既不属于拥有者,也不属于所属者的角色。这时候就会匹配other权限。
如何描述文件权限信息?
代码语言:javascript
AI代码解释
-rw-r--r-- 1 root root 22902 May 18 11:51 new.txt对于new.txt这个文件来说权限的描述应该为:拥有者权限为rw,所属组权限为r,other权限为r。
文件权限表示方法
1.字符表示法
3个字母为一组,分别为:r、w、x,如没有对应权限则用 " - "表示。其顺序是固定的不可交换
2.8进制表示法
chmod指令
语法:chmod 参数 权限 文件名
功能:改变文件权限(只有root或者文件拥有者才有资格修改权限)
选项:
-R:递归的将目录下的文件权限全部修改
参数:
u:拥有者 g:所属组 o:other a:有所用户
实际操作展示 :
代码语言:javascript
AI代码解释
root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-r--r-- 1 root root 22902 May 18 11:51 new.txt #关闭u的w权限 root@hcss-ecs-4ce7:~# chmod u-w new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -r--r--r-- 1 root root 22902 May 18 11:51 new.txt #开放u的w权限 root@hcss-ecs-4ce7:~# chmod u+w new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-r--r-- 1 root root 22902 May 18 11:51 new.txt #关闭u的多条权限 root@hcss-ecs-4ce7:~# chmod u-rw new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new ----r--r-- 1 root root 22902 May 18 11:51 new.txt #开放u的多条权限 root@hcss-ecs-4ce7:~# chmod u+rw new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-r--r-- 1 root root 22902 May 18 11:51 new.txt #开放g的w权限 root@hcss-ecs-4ce7:~# chmod g+w new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-rw-r-- 1 root root 22902 May 18 11:51 new.txt #关闭g的w权限 root@hcss-ecs-4ce7:~# chmod g-w new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-r--r-- 1 root root 22902 May 18 11:51 new.txt #以此类推,其他的权限操作类似另外也可以通过八进制来实现多个用户权限的修改:
代码语言:javascript
AI代码解释
root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-r--r-- 1 root root 22902 May 18 11:51 new.txt #通过3个8进制数字实现,对多个用户权限修改 root@hcss-ecs-4ce7:~# chmod 000 new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new ---------- 1 root root 22902 May 18 11:51 new.txt root@hcss-ecs-4ce7:~# chmod 663 new.txt root@hcss-ecs-4ce7:~# ls -l total 28 drwxr-xr-x 5 root root 4096 May 20 13:58 new -rw-rw--wx 1 root root 22902 May 18 11:51 new.txt修改权限注意事项
1.任何人都可以修改文件权限吗?
只有root和文件拥有者才能修改权限!
2.如果在进行相应操作时没有权限会怎么样?
系统会拒绝我们的指令请求
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:~$ ls -l total 0 -rw-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt hyc@hcss-ecs-4ce7:~$ chmod u-r new.txt hyc@hcss-ecs-4ce7:~$ ls -l total 0 --w-rw-r-- 1 hyc hyc 0 May 24 23:07 new.txt hyc@hcss-ecs-4ce7:~$ cat new.txt cat: new.txt: Permission denied3.确定权限信息时,系统会先确认谁?
先确认拥有者权限,再确认所属组,最后是other。权限只会确定一次,不会多次确定,第一次匹配上的权限既为我们当前角色所拥有的权限。
4.root账号权限?
拥有最高权限,不受一切权限的限制。所有设定的限制只针对普通账号有用。
5.可执行权限?
我们之前所讲的例子中都没有可执行样例,其实可执行程序是.exe文件。普通文件一般没有x权限,当然即使拥有x权限也无法执行,因为其本身就不是可执行文件。
chown与chgrp指令
语法:chown 用户名 文件名
功能:改变文件或目录的拥有者
选项:-R 递归的修改目录中所有文件的拥有者
语法:chgrp 所属组名 文件名
功能:修改文件或目录的所属组
选项:-R递归修改目录中所有文件的所属组
使用chown修改拥有者、chgrp修改所属组出现问题?
代码语言:javascript
AI代码解释
hyc@hcss-ecs-4ce7:~$ ls -l total 0 -rw-rw-rw- 1 hyc hyc 0 May 24 23:07 new.txt hyc@hcss-ecs-4ce7:~$ chown root new.txt chown: changing ownership of 'new.txt': Operation not permitted hyc@hcss-ecs-4ce7:~$ chgrp root new.txt chgrp: changing group of 'new.txt': Operation not permitted原因:系统并不支持随意的将文件的拥有者或所属组修改,这一操作只有root权限才能被允许。所以在要在这句指令前加上sodu,或者切换为root账号。