本篇文章进行Linux权限的学习!!!
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户
- 帮助理解:如果说你是一个害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash(命令处理器)
外壳存在的意义:
[lyh_sky@localhost ~]$ shell
bash: shell: 未找到命令...
[lyh_sky@localhost ~]$ abcdef
bash: abcdef: 未找到命令...
[lyh_sky@localhost ~]$ ls
install.sh Linux_Study 公共 模板 视频 图片 文档 下载 音乐 桌面
总结:windows的外壳就是图形化界面,相当于Linux中的Shell命令解析器,是用来翻译命令交给OS的
Linux下分root用户和普通用户
[lyh_sky@localhost ~]$ whoami // 普通用户的命令行提示符是$
lyh_sky
[lyh_sky@localhost ~]$ su root // 切换到root用户
密码: // 这里输入的密码是不回显的,实际上已经输入
[root@localhost lyh_sky]# whoami // root用户的命令行提示符是#
root
[root@localhost lyh_sky]# su lyh_sky // 可以随意进入任何用户,且不用输入密码
[lyh_sky@localhost ~]$ whoami
lyh_sky
[lyh_sky@localhost ~]$ ll
总用量 4
-rw-r--r--. 1 root root 827 9月 1 19:07 install.sh
drwxrwxr-x. 10 lyh_sky lyh_sky 126 10月 25 15:59 Linux_Study
注意:root和普通用户在Linux下都必须设置密码,最好把root密码设置难一些
Linux中的具体用户分类:
root和普通用户可以是文件的所属者或所属组或其他用户
文件的类型:
注意:
- Linux不是以文件名后缀来区分文件的,而是通过ls-l指令显示的第一个字符区分文件类型的
- Windows是以文件名后缀来区分文件类型的
[lyh_sky@localhost /]$ pwd
/
[lyh_sky@localhost /]$ ls -l
总用量 40
lrwxrwxrwx. 1 root root 7 8月 20 13:03 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 9月 2 09:28 boot
drwxr-xr-x. 20 root root 3300 10月 27 11:47 dev
drwxr-xr-x. 148 root root 8192 9月 11 18:15 etc
drwxr-xr-x. 4 root root 32 9月 8 13:08 home
lrwxrwxrwx. 1 root root 7 8月 20 13:03 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 8月 20 13:03 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 3 root root 18 9月 1 15:39 mnt
drwxr-xr-x. 3 root root 16 8月 20 13:08 opt
dr-xr-xr-x. 224 root root 0 10月 27 11:47 proc
dr-xr-x---. 10 root root 4096 10月 27 14:04 root
drwxr-xr-x. 45 root root 1300 10月 27 11:48 run
lrwxrwxrwx. 1 root root 8 8月 20 13:03 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x. 13 root root 0 10月 27 11:47 sys
drwxrwxrwt. 70 root root 16384 10月 27 14:04 tmp
drwxr-xr-x. 13 root root 155 8月 20 13:03 usr
drwxr-xr-x. 21 root root 4096 8月 20 13:15 var
虽然Linux下是以符合来确定文件类型的,但是安装在Linux下的软件是按后缀区分的
[lyh_sky@localhost lesson8]$ ls
test.cpp
[lyh_sky@localhost lesson8]$ cat test.cpp
#include
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
[lyh_sky@localhost lesson8]$ mv test.cpp test.txt
[lyh_sky@localhost lesson8]$ ls
test.txt
[lyh_sky@localhost lesson8]$ g++ test.txt -o test
test.txt: file not recognized: 不可识别的文件格式
collect2: 错误:ld 返回 1
文件的基本权限:
读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
可执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
注意:421对应八进制中的421,二进制中的100(4)、010(2)、001(1)
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
chmod命令权限的格式
用户表示符+/-=权限字符:
用户符号:
使用权限字符来修改文件权限
[lyh_sky@localhost lesson8]$ touch test.txt
[lyh_sky@localhost lesson8]$ ll
-rw-rw-r--. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 对拥有者去掉读权限
[lyh_sky@localhost lesson8]$ chmod u-r test.txt
[lyh_sky@localhost lesson8]$ ll
--w-rw-r--. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 对拥有者加上读权限
[lyh_sky@localhost lesson8]$ chmod u+r test.txt
[lyh_sky@localhost lesson8]$ ll
-rw-rw-r--. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 对Others增加读写权限
[lyh_sky@localhost lesson8]$ chmod o=rw test.txt
[lyh_sky@localhost lesson8]$ ll
-rw-rw-rw-. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 对所有用户加上读写执行权限
[lyh_sky@localhost lesson8]$ chmod a+rwx test.txt
[lyh_sky@localhost lesson8]$ ll
-rwxrwxrwx. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
使用三位8进制数字来修改文件权限:
// 000表示去掉全部用户的读写可执行权限
[lyh_sky@localhost lesson8]$ chmod 000 test.txt
[lyh_sky@localhost lesson8]$ ll
----------. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 664 --- 表示加上文件拥有者和所属组的和写权限,但是其他用户只加上读权限
[lyh_sky@localhost lesson8]$ chmod 664 test.txt
[lyh_sky@localhost lesson8]$ ll
-rw-rw-r--. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 777 --- 表示加上全部用户的读写可执行权限
[lyh_sky@localhost lesson8]$ chmod 777 test.txt
[lyh_sky@localhost lesson8]$ ll
-rwxrwxrwx. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
注意:
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
实例:
[lyh_sky@localhost lesson8]$ sudo chown lhx test.txt
[sudo] lyh_sky 的密码:
[lyh_sky@localhost lesson8]$ ll
-rwxrwxrwx. 1 lhx lyh_sky 0 10月 27 15:42 test.txt
[lyh_sky@localhost lesson8]$ sudo chown lyh_sky test.txt
[lyh_sky@localhost lesson8]$ ll
-rwxrwxrwx. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
可以使用chown [参数] 用户名:用户名 文件/目录名 一键修改用户所属者和所属组
[lyh_sky@localhost lesson8]$ ll
总用量 0
-rwxrwxrwx. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 使用冒号一键修改所属者和所属组
[lyh_sky@localhost lesson8]$ sudo chown lhx:lhx test.txt
[lyh_sky@localhost lesson8]$ ll
总用量 0
-rwxrwxrwx. 1 lhx lhx 0 10月 27 15:42 test.txt
注意:
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项:
[lyh_sky@localhost lesson8]$ ll
总用量 0
-rwxrwxrwx. 1 lyh_sky lyh_sky 0 10月 27 15:42 test.txt
// 修改文件所属组为lhx
[lyh_sky@localhost lesson8]$ sudo chgrp lhx test.txt
[lyh_sky@localhost lesson8]$ ll
总用量 0
-rwxrwxrwx. 1 lyh_sky lhx 0 10月 27 15:42 test.txt
目录的基本权限:
读(r/4): 如果目录没有r权限,允许进入目录,允许在该目录下创建(写入)一个文件,不允许查看文件列表
写(w/2):如果目录没有w权限,允许进入目录,允许在该目录下查看文件列表,但不允许创建和删除目录中文件/目录
可执行(x/1):如果目录没有x权限,不允许进入目录
如果同时没有rw权限,允许进入,但是不允许创建和查看目录下的文件列表(注意:不是文件内容!!!文件的内存是否可以查看,由文件自己的权限决定!!!)
[lyh_sky@localhost lesson8]$ ll
drwxrwxr-x. 2 lyh_sky lyh_sky 6 10月 27 18:16 dir
// 去掉可执行权限
[lyh_sky@localhost lesson8]$ chmod u-x dir
[lyh_sky@localhost lesson8]$ ll
drw-rwxr-x. 2 lyh_sky lyh_sky 6 10月 27 18:16 dir
[lyh_sky@localhost lesson8]$ cd dir
bash: cd: dir: 权限不够
// 去掉读权限
[lyh_sky@localhost lesson8]$ chmod u+x,u-r dir
[lyh_sky@localhost lesson8]$ ll
d-wxrwxr-x. 2 lyh_sky lyh_sky 6 10月 27 18:16 dir
[lyh_sky@localhost lesson8]$ cd dir
[lyh_sky@localhost dir]$ ll
ls: 无法打开目录.: 权限不够
// 去掉写权限
[lyh_sky@localhost lesson8]$ chmod u+rx,u-w dir
[lyh_sky@localhost lesson8]$ ll
dr-xrwxr-x. 2 lyh_sky lyh_sky 6 10月 27 18:16 dir
// 去掉写权限后不能创建或删除目录中的文件/目录
[lyh_sky@localhost lesson8]$ cd dir
[lyh_sky@localhost dir]$ ll
[lyh_sky@localhost dir]$ touch file.txt
touch: 无法创建"file.txt": 权限不够
为什么我们刚创建的目录权限默认是775,文件权限默认是664呢?(不同的系统可能有差异)
[lyh_sky@localhost lesson8]$ mkdir dir
[lyh_sky@localhost lesson8]$ touch file
[lyh_sky@localhost lesson8]$ ll
总用量 0
drwxrwxr-x. 2 lyh_sky lyh_sky 6 10月 27 19:27 dir
-rw-rw-r--. 1 lyh_sky lyh_sky 0 10月 27 19:27 file
因为我们创建的文件和目录都会受到umask(权限掩码)的影响:
默认权限 != 最终权限
格式: umask 权限值
说明:
umask的使用:
[lyh_sky@localhost lesson8]$ whoami
lyh_sky
[lyh_sky@localhost lesson8]$ umask // 查看权限掩码
0002
[lyh_sky@localhost lesson8]$ umask 003 // 设置权限掩码
[lyh_sky@localhost lesson8]$ umask
0003
当我们在公司多个小组进行协作开发时,就需要一个临时目录(/tmp)来保存文件
但是有一个问题:如果不小心删了文件怎么办?
// 保存临时文件的目录
[lyh_sky@localhost home]$ cd /tmp
[lyh_sky@localhost tmp]$ ls all -dl
drwxr-xrwx. 2 root root 21 9月 1 10:32 all
[lyh_sky@localhost tmp]$ cd all
[lyh_sky@localhost all]$ ll
-rwxrwxrwx. 1 lhx lhx 12 9月 1 00:08 lhx.txt // 别人的文件
// 删除其他组成员的文件
[lyh_sky@localhost all]$ rm -rf lhx.txt
rm:是否删除有写保护的普通空文件 "/tmp/all/lhx.txt"? y
[lyh_sky@localhost all]$ ls
为了解决这个不科学的问题, Linux引入了粘滞位的概念
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ls all -dl
drwxr-xrwx. 2 root root 21 9月 1 10:32 all
[root@localhost tmp]# chmod +t all // 加上粘滞位
[root@localhost tmp]# ls all -dl
drwxr-xrwt. 2 root root 21 9月 1 10:32 all // 目录中other的x权限变成了t
// 进入普通用户,删除该文件失败
[root@localhost tmp]# su lyh_sky
[lyh_sky@localhost tmp]$ cd all
[lyh_sky@localhost all]$ ls
lhx.txt
[lyh_sky@localhost all]$ rm lhx.txt
rm: 无法删除"lhx.txt": 不允许的操作
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
功能说明:辨识文件类型。
语法: file [选项] 文件或目录…
常用选项:
[lyh_sky@localhost lesson7]$ ll
总用量 36
-rw-rw-r--. 1 lyh_sky lyh_sky 71 10月 22 16:11 makefile
-rwxrwxr-x. 1 lyh_sky lyh_sky 27072 10月 22 16:11 test
-rw-rw-r--. 1 lyh_sky lyh_sky 1561 10月 21 21:36 test.cpp
// C++源文件
[lyh_sky@localhost lesson7]$ file test.cpp
test.cpp: C++ source, ASCII text
// 可执行文件
[lyh_sky@localhost lesson7]$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=a6a53d8a2d82b42768a1fe832e971613d2a09cfd, not stripped