目录
1.shell(命令行解释器)
对于Linux操作系统,一般用户不能直接与之交互,而是通过外壳程序(shell),实现用户和Linux内核的交互。
shell简单地说就是命令行解释器,包含:
- 将使用者的命令翻译给内核处理
- 将内核的结果翻译给使用者
shell对于Linux就相当于图形化界面对于windows操作系统,Windows系统下,我们通过图形化界面,单击或双击以实现对应的操作,Linux系统下,我们通过shell命令行的命令实现相关操作,shell解析指令给Linux内核,内核的反馈结果通过shell解析给用户
shell存在的意义:
- 帮助实现Linux内核和用户之间的交互
- 当用户输入非法指令时,shell拒绝即报错,间接地保护了操作系统
shell执行命令:通过派生子进程的方式执行用户的指令,而shell本身并不执行对应的指令
2.用户
shell中的两种用户:
- root用户:超级管理员,不受权限约束
- 普通用户:受权限的约束
root用户下,可以切换为任意普通用户,不需要密码,而普通用户登录下切换到root用户,需要密码验证。
3.权限的概念
简单理解,权限是约束人是否可以对目标对象进行某些操作,Linux中的权限一般可以认为是文件权限,权限就是约束文件访问者对文件的操作。
权限存在的意义:便于系统进行安全管理
文件访问者的分类:
- 文件和文件目录的所有者
- 文件和文件目录的所属组中所有用户
- 其他用户
文件基本权限:
- r:可读(对文件:读取文件内容的权限;对目录:浏览该目录信息的权限)
- w:可写(对文件:修改文件内容的权限;对目录:删除移动目录内文件的权限)
- x:可执行(对文件:执行文件的权限;对目录:进入目录的权限)
Linux文件类型:
- 普通文件:以-开头
- 目录文件:以d开头
- 字符设备文件:以c开头(如键盘,显示器等)
- 块设备:以b开头(如磁盘)
- 链接文件:以l开头(类似windows的快捷方式)
- 管道文件:以p开头
- socket文件:以s开头
📖Note:
Linux系统下,文件类型与文件的后缀无关,也就是说Linux系统下,不以文件的后缀区分文件类型,文件后缀仅作为给用户的一个提示符号,本质上是文件名的一部分,Linux系统下区分文件类型通过文件属性信息中第一列的第一个字符。
上述属性并不代表Linux系统中使用的工具也不以后缀区分文件,如gcc编译文件时,.txt为后缀的文件会编译报错,而.c为后缀的文件可以编译通过。
文件权限值的八进制表示法:
权限(r;w;x) 八进制 二进制 r-- 4 100 -w- 2 010 --x 1 001 rw- 6 110 r-x 5 101 -wx 3 011 rwx 7 111 --- 0 000 例如:
目录dir的权限使用八进制表示为775
文件test.c的权限使用八进制表示为664
4.权限的操作
4.1chmod指令
语法:chmod 选项 参数 文件名
功能:设置文件的访问权限
常用选项:
- -R:递归修改目录文件的权限
📖Note:只有文件的拥有者和root用户才可以修改文件的权限
参数:用户标识符+/-/=权限字符(r/w/x)
用户符号:
- u:拥有者
- g:所属组
- o:其他用户
- a:所有人
权限操作符号:
- +:向目标文件增加权限符号所表示的权限
- -:向目标文件删除权限符号所表示的权限
4.2chown指令
语法:chown 参数 用户名 文件名
功能:修改文件的拥有者
4.3chgrp指令
语法:chgrp 参数 所属组名 文件名
功能:修改文件的拥有者
常用选项:
- -R:递归修改目录或文件的所属组
4.4sudo指令
语法:sudo 指令
功能:不切换到root用户下,以root用户的身份执行指令
使用sudo提权时,可能会出现以上情况,提示普通用户不在sudoers文件中,这时需要配置sudoers文件,如下,使用vim打开sudoers文件,添加普通用户为信任用户即可
vim底行模式wq退出时,出现下列报错,只需要wq!强制退出即可
sudoers文件配置成功后,执行sudo命令即可成功对指令提权
4.5umask指令
语法:umask 权限值
功能:查看或修改文件掩码,新建文件默认权限为0666,新建目录默认权限为0777
实际上所创建的文件和目录,看到的权限往往不是上述值,因为创建文件或目录时还受到umask的影响,实际创建出来的文件权限值为 默认权限 & (~umask)
root用户默认掩码值为0022,普通用户默认掩码值是0002
当我们以普通用户的身份新建一个目录或文件时,其权限值如下图所示:
目录:rwx rwx r-x 7 7 5
文件:rw- rw- r-- 6 6 4
普通用户默认掩码值是0002
新建文件默认权限为0666,新建目录默认权限为0777
实际创建出来的文件权限值为 默认权限 & (~umask)
以文件为例:默认权限为0666,掩码值是0002(八进制)
umask = 000 000 010
~umask = 111 111 101
默认权限:110 110 110
110 110 110 & 111 111 101 = 110 110 100 = 6 6 4
4.6file指令
语法:file 选项 文件或目录
功能:辨识文件类型
常用选项:
- -c:详细显示指令执行过程,便于排错或分析程序执行过程
- -z:尝试解读压缩文件的内容
5.粘滞位
5.1为什么会有粘滞位?
对于一个目录,其rwx权限的意义如下:
- 可执行权限:如果目录没有可执行权限,则无法cd到目录中
- 可读权限:如果目录没有可读权限,则无法用ls指令查看目录中的文件内容
- 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录删除文件
日常开发中,为了便于协作,通常会由超级管理员root创建一个公共目录,在这个目录下,所有人都可以进行操作
在一个权限值为0777的目录下创建一个文件,这个文件的拥有者和所属组都是lxj,除lxj外其他用户都是other,对test.txt文件的只有可读权限
切换到普通用户lslg,不能对test.txt文件进行写入,但是普通用户lslg却可以删除属于lxj的文件test.txt。该操作被允许是因为由root创建的公共目录下的文件,删除一个文件与文件本身无关,而是取决于该文件所属目录的权限,other对opdir目录的权限为rwx,所有可以对别人的文件进行删除。
为了避免这种操作,即实现在一个公共目录下,大家只对自己的文件进行rwx操作,不会删除其他人的文件,因此需要给该公共目录设置粘滞位,这是权限的一种特殊情况。
5.2设置粘滞位
使用chmod指令给公共目录的other用户的可执行权限位变成t,就可以约束公共目录下普通用户对其他普通用户临时文件的操作