文章目录
前言
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含 :
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的
操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运
行出结果,通过shell解析给用户。
1.shell简介
shell
是用户和Linux内核之间的一层代理,解释用户输入的命令,传递给内核。
shell是一种脚本语言(解释性语言)。
1.1编译型语言和脚本型语言
任何代码运行最终都需要被翻译成二进制
的形式在计算机中执行。C/C++、Go语言等语言,需要在程序运行之前将代码编译成二进制形式,生成可执行文件,用户执行的是可执行文件
,看不到源码。
这个过程叫编译
,这类语言叫编译型语言
,完成编译过程的软件叫编译器
。
有的语言(例如: Shell、JavaScript、Python、PHP等)需要一边执行一边翻译,不会产生任何可执行文件,用户需要拿到源码才能运行程序。程序运行后会即时翻译,翻译一部分执行一部分,并不用等所有代码翻译完。
这个过程叫解释
,这类语言叫解释型语言
或脚本语言
,完成解释过程的软件叫解释器
。
2.Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情
超级用户的命令提示符是“#”,普通用户的命令提示符是“$ "
切换用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su - 用户名 | 切换用户,并且切换目录 | - 可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前登录账户 |
su
不接用户名,可以切换到root
,但是不推荐使用,因为不安全
如何知道自己目前是什么用户呢?
查看用户信息
序号 | 命令 | 作用 |
---|---|---|
01 | id [用户名] | 查看用户 UID 和 GID 信息 |
02 | who | 查看当前所有登录的用户列表 |
03 | whoami | 查看当前登录用户的账户名 |
超级用户
- Linux 系统中的
root
账号通常 用于系统的维护和管理,对操作系统的所有资源 具有所有访问权限 - 在大多数版本的 Linux 中,都不推荐 直接使用 root 账号登录系统
- 在 Linux 安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为“标准用户”
sudo(一种短暂的提权方式)
su
是substitute user
的缩写,表示 使用另一个用户的身份sudo
命令用来以其他身份来执行命令,预设的身份为root
- 用户使用
sudo
时,必须先输入密码,之后有 5 -10分钟左右的有效期限,超过期限则必须重新输入密码
2.1基本概念
- 用户 是 Linux 系统工作中重要的一环,用户管理包括 用户 与 组 管理
- 在 Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限
- 在 Linux 中,可以指定 每一个用户 针对 不同的文件或者目录 的 不同权限
- 对 文件/目录 的权限包括:
序号 | 权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|---|
01 | 读 | read | r | 4 |
02 | 写 | write | w | 2 |
03 | 执行 | excute | x | 1 |
2.2文件访问者的分类
文件和文件目录的所有者: u—User(比如说自己)
文件和文件目录的所有者所在的组的用户: g—Group(跟你同一个国家)
其它用户: o—Others (外国人)
- 为了方便用户管理,提出了 组 的概念
2.3文件权限值的表示方法
- 在实际应用中,可以预先针对 组 设置好权限,然后 将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
权限 | 权限作用 |
---|---|
读(r/4) | Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 |
写(w/2) | Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 |
执行(x/1) | execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 |
权限符号 | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
— | 0 | 000 |
2.4文件访问权限的相关设置方法
2.4.1chmod
简单使用(重要)
chmod
可以修改 用户/组 对 文件/目录 的权限- 命令格式如下:
复制代码chmod +/-rwx 文件名|目录名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
修改文件权限
序号 | 命令 | 作用 |
---|---|---|
01 | chown | 修改拥有者 |
02 | chgrp | 修改组 |
03 | chmod | 修改权限 |
- 命令格式如下:
# 修改文件|目录的拥有者chown 用户名 文件名|目录名# 递归修改文件|目录的组chgrp -R 组名 文件名|目录名# 递归修改文件权限chmod -R 755 文件名|目录名
chmod
在设置权限时,可以简单地使用三个数字分别对应 拥有者 / 组 和 其他 用户的权限
# 直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他chmod +/-rwx 文件名|目录名
- 常见数字组合有(常见数字组合有(
u
表示用户/g
表示组/o
表示其他):777
===>u=rwx,g=rwx,o=rwx
755
===>u=rwx,g=rx,o=rx
644
===>u=rw,g=r,o=r
3.目录的权限
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
为了解决这个不科学的问题, Linux引入了粘滞位的概念
3.1粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
4.用户管理
提示:创建用户 / 删除用户 / 修改其他用户密码 的终端命令都需要通过
sudo
执行
4.1 创建用户/设置密码/删除用户
序号 | 命令 | 作用 | 说明 | |
---|---|---|---|---|
01 | useradd -m -g 组 新建用户名 | 添加新用户 | -m 自动建立用户家目录-g 指定用户所在的组,否则会建立一个和同名的组 | |
02 | passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用 passwd 可以修改自己的账户密码 | |
03 | userdel -r 用户名 | 删除用户 | -r 选项会自动删除用户家目录 | |
04 | cat /etc/passwd \ | grep 用户名 | 确认用户信息 | 新建用户后,用户信息会保存在 /etc/passwd 文件中 |
提示:
- 创建用户时,如果忘记添加
-m
选项指定新用户的家目录 —— 最简单的方法就是删除用户,重新创建- 创建用户时,默认会创建一个和用户名同名的组名
- 用户信息保存在
/etc/passwd
文件中
4.umask问题
在Linux规定中
目录的起始权限是777 rwxrwxrwx
普通文件的起始权限是666rw-rw-rw-
但实际上我们平时看到的权限并非是上面的起始权限
因为系统默认会配置好umask权限掩码:凡是在umask中出现的权限,都必须在起始权限中去掉!
比如我的系统默认是0002,而最终权限=起始权限&(~umask)
5.权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这
个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读
权限 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。