目录
1. Linux的认识
1.1. Linux的应用场景
1.2. Linux的版本问题
1.3. 操作系统的认识
1.4. 常用快捷键
2. 常用指令介绍
2.1. ADD
2.1.1. touch [file]
2.1.1.1. 文件的属性信息
2.1.2. mkdir [directory]
2.1.3. cp [file/directory]
2.1.4. echo [file]
2.1.4.1. 重定向
2.1.4.2. 一切皆文件
2.2. DELETE
2.2.1. rmdir&&rm
2.2.2. 关机(几乎用不到)
2.3. FIND
2.3.1. whoami [user]
2.3.2. pwd [working path]
2.3.2.1. 路径
2.3.3. stat [file]
2.3.4. ls [file/directory]
2.3.4.1. 知识点补充: 文件的理解
2.3.5. which [Instruction Path]
2.3.5.1. 指令是什么?
2.3.5.2. alias 指令
2.3.6. man [instruction]
2.3.7. find [file]
2.3.8. cat [file] 适用于比较短的代码
2.3.9. more [file]
2.3.10. less [file]
2.3.11. head -line
2.3.12. tail -line
2.3.12.1. 管道 |
2.3.13. wc [filename]
2.3.14. tree [directory]
2.3.15. grep [document content]
2.3.16. cal [calendar]
2.3.17. date [time]
2.3.17.1. TimeFormat
2.3.17.2. 时间的重要性
2.3.17.3. SetTime
2.3.17.4. Timestamp
2.3.18. bc
2.3.19. uname
2.3.19.1. 知识普及: CPU架构
2.3.19.2. linux版本信息
2.3.20. 查看版本信息
2.4. MODIFY
2.4.1. cd [directory]
2.4.1.1. 用户
2.4.2. mv [file/directory]
2.4.3. clear [Screen]
2.4.4. zip/unzip [file/directory]
2.4.5. tar
2.4.5.1. 压缩包的网络传递
2.4.5.1.1. linux与本地windows文件传递
2.4.5.1.2. 两台linux机器文件互传
2.4.6. sz rz [xxx.zip/xxx.tgz]
3. shell命令以及运行原理
3.1. 是什么?
3.2. 为什么?
3.3. 怎么办?
4. 权限
4.1. 权限是什么?
4.2. Linux中的权限??? 角色+文件属性
4.2.1. Linux中的人? 与身份转换
4.2.1.1. 普通用户 -> 超级管理员
4.2.1.2. root -> 普通用户
4.2.2. Linux中角色
4.2.3. 文件权限值的表示方法
4.3. 权限的修改
4.3.1. 第一种做法: 修改文件权限
4.3.2. 第二种做法: 修改文件角色
4.4. 文件类型
4.4.1. Linux下文件类型的标识
4.4.2. 文件的可执行权限
4.4.3. 目录的权限
4.4.4. 默认权限的由来? 合理性?
4.4.5. 删除目录内的文件取决于目录的写权限.
4.4.6. 共享文件? 多个用户共同共享?
1. Linux的认识
1.1. Linux的应用场景
- 企业后台最常用
比如淘宝的后端, 知乎文章数据来自知乎公司的服务器, 我们手机和电脑的APP称为 客户端. 一般大型公司都有自己的服务器, 而小中型企业一般是使用的是大公司的服务器. 一般服务器的操作系统是Linux
, 比如centos
,ubuntu
在个人电脑领域, windows
+ macos
; 企业服务领域, Linux
.
- 安卓手机,各种平板的操作系统
两者都是在Linux系统上进行升级改造的, 这个问题就是在08年左右谷歌对抗苹果移动智能手机的压力, 开源了Linux
的移动版, 后来被国内外各个手机硬件厂商应用, 优化...现在基本所有的安卓手机的操作系统都是Linux
内核, 只不过是Linux
移动版(Android
)的.
- 嵌入式领域
- 智能家居、汽车领域
1.2. Linux的版本问题
原因:Linux
开源, 适用于不同的领域.
Linux主要分为商业版本和技术版本
商业版本:指的是Linux各种满足不同上层需求的适应化版本
技术版本:指的是Linux内核版本,主版本号 + 次版本号 + 修正次数,(次版本号是偶数是稳定版本,奇数是测试版本)并且修正次数递增满足一定条件会增加次版本号, 次版本号递增并到达一定数值的时候增加主版本号.
怎么找linux内核源代码? Index of /pub/linux/kernel/v2.6/
1.3. 操作系统的认识
操作系统的概念:是一款进行软硬件资源管理的软件。其中,Linux是一款具体的操作系统的品类。
关于软硬件资源管理的理解? 便利化对硬件和软件的使用.
电脑的层状结构:
开机的本质:加载操作系统到内存中。
操作系统的意义:
- 对下: 提供基本的管理工作,使各种硬件工作在一个稳定、高效、安全的环境之中。(手段)
- 对上: 提供一个高效、安全、稳定的运行环境,高质量的为用户提供服务. (目的)
1.4. 常用快捷键
ctrl + D
退出登录状态ALT + Enter
进入/退出全屏Table
指令补全ctrl + R
历史指令搜索ctrl + C
终止程序table两次
ctrl + table
切换光标所在窗口
2. 常用指令介绍
xshell 用指令登录账号:
命令: ssh username@IPaddress
2.1. ADD
2.1.1. touch [file]
语法:touch [options] [file...]
功能:更改文档或目录的日期时间,包括存取时间和更改时间 或者 创建一个不存在的文件。
touch
在当前路径下创建一个普通文件- 通常, 他还可以用来改变一个文件的
access
时间
2.1.1.1. 文件的属性信息
在linux下, 我们可以用指令stat
去查看一个文件的属性, 包含文件名, 时间等等, 这其中就包含access
时间.
Access
:文件最近被访问的时间(访问)Modify
: 文件内容最近被修改的时间(修改)Change
: 文件属性最近被修改的时间(改变)
2.1.2. mkdir [directory]
语法:mkdir [options] [dirname...]
功能:在当前目录下创建一个名叫"dirname"的目录
mkdir -p
创建嵌套目录
2.1.3. cp [file/directory]
语法:cp [options] [src] [dest]
功能:复制文件或目录
说明:如果dest是一个目录, 那就拷贝到这个目录下, 如果dest还带一个文件名, 那么就是拷贝到目录下并且改名字. 拷贝目录需要带-r
(递归拷贝).
常用选项:
-f
强行复制文件或目录时,不用给询问是否的信息, 不论目的文件或目录是否已经存在-i
覆盖文件之前先询问用户-r
递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理-R(新标准支持)
或--recursive 递归处理,将指定目录下的文件及子目录一并处理, 这个玩意跟-r
是一样的, 不过可能所有的系统更加统一一些.
2.1.4. echo [file]
语法:echo "str" (> [file])
>
重定向符号,可以用来创建一个新文件 或者说是 清空文件 这等同于文件以写的方式打开写入数据再关闭>>
追加重定向(默认是新开一行) 这等同于文件以追加的方式打开,追加数据再关闭
2.1.4.1. 重定向
输出重定向的理解: 在Linux中, 一切皆文件, 因此一般我们要输出到显示器文件的"xxx"内容, 被重定向到普通文件, 又因为是输出(写), 因此叫做输出重定向.
实际上, 文件重定向就是类似于以写的方式向里面写入一些"xxx"然后关闭, 类似于下面代码展示.
输入重定向(读): 同理, 只不过从输出(写)变成了输入(读). 一般写作: cat <
输入重定向
追加重定向: echo "xxx" >> filename
2.1.4.2. 一切皆文件
Linux一切皆文件的理解: 我们如何理解Linux中一切皆文件的模式呢? 主要是Linux可以以一种相对统一的管理模式处理各种东西, 比如对鼠标, 键盘, 显示器, 操作系统只需要对其进行写入不同的数据即可, 而对于软件, 也同样是给他读写不同的数据就可以进行方便的管理. 即使是我们自己的账号终端, Linux也是以一种文件的形式看待的. 比如 dev/pts/
是一个模拟物理终端的设备文件.
2.2. DELETE
2.2.1. rmdir&&rm
语法:rmdir [-options] [dirname]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
注:remdir
只能删除空目录的命令
-p
当父目录也变成空目录的话,连带父目录一块删除。
rm命令可以同删除文件或目录
语法:rm [-f -i -r -v][dirname]
适用对象:所有使用者
-f
强制删除,无需询问确认, 是无需确认哦-r
删除该目录下的所有文件, 删除一个目录需要带上这个选项-i
删除前需要确认
注:rm删除是彻底删除,找回难度大。
*
通配符...
2.2.2. 关机(几乎用不到)
语法:shutdown [options]
-h
系统服务停掉,立即关机-r
系统服务停掉,重新启动(实测下来默认 1 分钟之后重启关机)-t sec
设定sec秒后关机
一般不建议关闭云服务器.
2.3. FIND
2.3.1. whoami [user]
语法:whoami [user]
功能:查看使用Linux的人
2.3.2. pwd [working path]
· pwd
查看当前所处路径
2.3.2.1. 路径
路径是个啥?
/
:斜杠, Linux的路径分隔符
\
:反斜杠, Windows的路径分隔符
路径的意义: 系统层面标识一个特定的文件,标识一个文件的唯一性,这个类似于每个人所对应的身份证号一样。
路径的分类:
- 绝对路径: 上面两个截图都是绝对路径.
- 相对路径 其中,
·
和··
就是一种相对路径,通常是用作当前文件路径的定位。
-
..
就常常被用作回到上一级目录
-
.
一般就是方便执行本目录下的可执行文件...
Linux下的目录结构: 一个多叉树.
比如某个路径: /home/bit/test.c
2.3.3. stat [file]
语法:stat [file]
功能:查看指定文件名的详细属性
ACM时间:
- access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。
- modify time:表示最后一次修改文件内容的时间。
- change time:表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。
2.3.4. ls [file/directory]
语法:ls [options] [file/directory]
ls
查看当前路径下的文件名属性-a
列出目录下的所有文件,包括隐含文件
-d
仅显示指定目录的属性信息, 而不是显示目录里面的内容
比如说, 我们仅仅想看一下这个目录的属性, 而不是看目录里面有什么内容, 一般情况下, 我们ls 111
就是查看的目录的内容, 如果我们想看目录本身的属性, 可以后面加个-d
选项, 即ls -d 111
-l
列出该文件的详细信息, 即文件的所有属性(常用)-1
一行输出一个文件-R
列出所有子目录下的文件(递归)
ls data*1
此处✳号是通配符的含义,标识查明以data开头,1结尾的数据。
2.3.4.1. 知识点补充: 文件的理解
文件 = 文件属性 + 文件内容
理解: 无论是文件属性还是文件内容都属于数据, 都需要保存在计算机内部进行存储.
注:这里的文件属性也属于数据,也需要占用空间,存储起来也需要占用硬盘空间的。
隐藏文件: linux中, 以点开头的命名的文件叫做隐藏文件.
比较典型的两个隐藏目录, 一个是·
, 当前路径; 另一个是··
上一级路径
这个玩意类似于windows的退回到前一级目录的按钮:
2.3.5. which [Instruction Path]
语法:which [instruction]
功能:打印出指定指令所在的系统路径
2.3.5.1. 指令是什么?
指令, 可执行二进制文件, 程序都是一种东西, 都是可以被计算机运行的代码而已. 也属于文件的一种, 因此指令 = 文件内容 + 文件属性.
因此安装和卸载在做什么? 安装就是把可执行程序文件拷贝到计算机中, 卸载就是把可执行程序文件在计算机中删除.
2.3.5.2. alias 指令
alias
是给另一个指令取别名
比如上图, ll
指令就是ls -l --color=auto
这条指令的别名
当然, 我们自己也可以用alias给其他指令取别名. 比如我把回到上一层目录的指令cd ..
取名为back
2.3.6. man [instruction]
Linux
的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux
手册页的命令是man
语法: man [options] instruction
注: man默认情况下从上往下进行查找. 对于man的使用, 主要是用来查2号手册, 即系统调用
.
man-pages
的安装:
yum -y install man-pages
2.3.7. find [file]
语法:find [path] [-name] [filename]
find命令主要是可以用来查找某个文件的, 主要针对的是文件, 而which是针对的是指令.
2.3.8. cat [file] 适用于比较短的代码
语法:cat [options] [file]
功能:查看目标文件的内容
-b
对非空输出行编号-n
对所有行输出行编号-s
不输出多余空格tac
反向打印输出代码信息[无]
默认从键盘读数据,然后回显到显示器上
cat
如果直接写, 后面不写filename
, 那么就是默认从键盘文件中读数据然后回显给显示屏文件. 这个可以结合输入重定向
来理解.
2.3.9. more [file]
语法:more [options] [file]
功能:功能类似cat
-n
对输出的所有行进行编号q
退出more/
查找
为了方便演示效果, 我们可以写一个大文件:
i=1; while [ $i -le 10000 ]; do echo "hello linux : $i"; let i++; done >> big.txt
2.3.10. less [file]
语法:less [file]
功能:查询文件
与之相似的是:less,head,tail
管道:[资源] | [拿取],一般用于指令集联
继续前面more
的例子, 我们可以用less进行查看:
查看日志:
less /var/log/
2.3.11. head -line
该命令可以查看一个文件中的前几行...
2.3.12. tail -line
该命令可以查看一个文件中的后几行
2.3.12.1. 管道 |
如何拿到一个文件的中间一部分内容呢? 比如拿到8000到8010行代码:
方法很简单, 可以先搞一个head -8010放到temp.txt文件中, 然后再看该文件的最后十行即可.
当然, 这种方法比较挫, 所以我们可以借用管道去传递数据.
2.3.13. wc [filename]
wc -l
, 用来查看一个文件多少行.
3
: 行数5
: 文件单词数25
: 字节数test
: 文件名
2.3.14. tree [directory]
tree
以树状结构对目标目录进行展现
tree的安装:
yum install -y tree
2.3.15. grep [document content]
语法:grep [content] [filepath]
-v
不包含 content 的信息(反向选择)-i
忽略大小写-n
带行号
grep
命令会读取文件内容, 然后按关键字过滤内容, 类似于我们windows中的ctrl + f
.
2.3.16. cal [calendar]
cal
命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历
,通称阳历
。“阳历”又“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
语法:cal [options] [month] [year]
功能:用于查看日历等时间信息,如只有一个参数,则标识年份(1-9999),如有两个参数,则标识月份和年份
-3
显示系统最近三个月-j
显示在当年中的第几天-y
显示当前年份的日历
2.3.17. date [time]
语法格式:date [option] [format]
功能:显示时间
2.3.17.1. TimeFormat
%H
小时%M
分钟%
S秒%X
==%H:%M:%S
%d
日%m
月%Y
年%F
==%Y-%m%d
2.3.17.2. 时间的重要性
时间是计算机中非常重要的概念.
这里涉及到一个概念, 叫做时间戳
.
时间戳定义的意义在于: 统一全球时间, 方便网络传播发展.
2.3.17.3. SetTime
date-s
设置当前时间,只有root权限才能设置,其他只能查看。date-s20080523
设置成20080523,这样会把具体时间设置成空00:00date-s 01:01:01
设置具体时间,不会对日期做更改date-s"01:01:01 2008-05-23"
这样可以设置全部时间date-s"01:01:01 20080523"
这样可以设置全部时间date-s"2008-05-23 01:01"
这样可以设置全部时间date-s"2008052301:01"
这样可以设置全部时间
2.3.17.4. Timestamp
时间 -> 时间戳:date +%s
时间戳 -> 时间:date -d@[时间戳]
注:unix时间戳(英文为unix epoch,unix time,posix time或unix timestamp) 是从1970年1月1日(utc/gmt的午夜)开始所经过的秒数,不考虑闰秒。
2.3.18. bc
作用:用来处理基本的运算,Linux下的基本计算器
。
用法:echo 1+2+3+4+5+6+7 | bc
2.3.19. uname
语法:uname [options]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
- -
a或–all
详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称 -r
内核
2.3.19.1. 知识普及: CPU架构
CPU架构, 一般分为x32和x64,
x86
, 即x32
x86_64
, 即x64
2.3.19.2. linux版本信息
查看操作系统版本信息
通常, 我们可以在linux中可以直接查看linux
系统版本, 这个信息一般存放在/etc/redhat-release
文件中.
cat /etc/redhat-release
查看CPU相关信息
cat /proc/cpuinfo
查看内存信息
cat /proc/meminfo
2.3.20. 查看版本信息
cat /proc/meminfo
查看内存信息
cat /proc/cpuinfo
查看cpu信息
2.4. MODIFY
2.4.1. cd [directory]
语法:cd [directory]
功能:Change Directory, 改变工作目录
cd ··
返回上一级目录cd 绝对/相对路径
进入指定的路径的目录cd -
跳转到最近的一次路径下cd ~
进入用户的家目录
其中, 用户目录下都有自己的桌面\音乐\文档\图片等等属于每个用户的文件夹, 只不过windows把桌面文件夹里面的内容以图形化的形式呈现出来了而已...
2.4.1.1. 用户
用户: 普通用户和超级管理员用户
默认登陆位置: 用户默认登陆位置是所属自己的家目录.
权限: 在Linux下, root是超级管理员账号, 拥有高于操作系统的权限. 而普通用户的权限较小.
2.4.2. mv [file/directory]
用来移动文件或者文件改名。
语法:mv [options] [src] [dest]
- 当第二个参数是文件名时,mv完成重命名操作。
- 第二个参数是目录时,mv完成移动操作,其中操作文件或者目录可以有多个。
-f
不在询问,直接覆盖-i
若目标文件已经存在,询问是否进行覆盖
2.4.3. clear [Screen]
clear
清屏
2.4.4. zip/unzip [file/directory]
语法:zip [options] [destfile.zip] [srctfile...]
功能:将目录或文件压缩成zip格式
-r
递归处理,将指定目录下的所有文件和子目录一并处理
需要注意的是, 如果不写-r,
zip
就只会打包压缩一个空目录...
语法:unzip [filename]
-d
指明解压路径
打包和压缩?
实际上, 打包和压缩是两个部分. 打包就是我们把一系列文件"打包"在一起, 就是放在一块, 这样发送文件的时候就很方便, 就不用一个一个发大量文件了.
而压缩呢? 就是把文件尽可能地把文件空间压缩一下, 就是把之前没压缩之前很大地文件, 压缩后可能就变小了很多, 这样很方便地发送.
为什么要打包和压缩?
- 缩小体积, 下载速度加快. 减轻网络负担, 提高用户体验.
- 减少文件丢失的可能性.
2.4.5. tar
语法:tar [options] [xxx.tgz] [file/directory]
-c
建立一个压缩文件-x
解开一个压缩文件-t
查看tarfile里面的文件-z
gzip压缩-j
bzip2压缩-v
压缩过程显示文件-f
后直接加档名-C
解压到指定目录
常用组合:czf
压缩 xzf
解压
怎么理解这个组合呢? c就是creat, z就是压缩的意思, f就是file后面紧跟形成新文件的名字. 其中后面可以带-v
, 就是加上压缩/解压的过程.
如果想要解压呢? 很简单, 把-c
换成-x
选项就可以了. 十分简单. 想要压缩几个文件就后面跟上几个文件就行了.
如果想要解压到指定目录呢? -C
解压到指定目录
2.4.5.1. 压缩包的网络传递
2.4.5.1.1. linux与本地windows文件传递
我们在Linux
上建立的文件, 可以传到我们本地windows
平台, 需要用到一个工具叫lrzsz
, 具体去参见下一节内容的linux基础开发工具来看就好. 下面进行实践:
不过这里需要说一下相关的指令, rz
, 就是receive zmodem, 就是接收文件; sz
, 就是send zmodem, 即发送文件的含义.
2.4.5.1.2. 两台linux机器文件互传
同样, 我们也可以把一台linux上的文件发送给另一台linux机器上.
需要用到scp网络拷贝命令, 指令格式是:
scp filename username@publicNetworkAddress:/folder
2.4.6. sz rz [xxx.zip/xxx.tgz]
该命令依赖于工具lrzsz
rz的含义是receive zmodem, zmodem是一种协议, 而sz是一种send zmodem, 具体的详情还是见下一节内容.
sz
下载到本地rz
上传到云服务器scp
Linux机器之间的文件传输
3. shell命令以及运行原理
3.1. 是什么?
//shell外壳
/usr/bin/bash
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter),常见的shell程序是命令行
和图形化界面
。其中,shell是对外壳程序的总称,bash是具体化的一个外壳程序。
外壳程序是什么? 外壳程序也属于软件, 是包裹在操作系统外部的, 更接近于用户的一层软件层面, 这个软件层对于指令而言就是命令行解释器
, 它将用户的命令翻译给操作系统(内核)进行处理, 同时, 将内核的处理结果返回给用户.
对于外壳的名称来说, shell
指的是所有外壳程序的总称, 而bash
, sh
, 指的是一个特定的外壳程序.
3.2. 为什么?
为什么要存在外壳程序?
- 建立用户与内核的联系。将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
- 对用户请求进行合法检查,变相一定程度上保护了操作系统内核。
3.3. 怎么办?
shell外壳是怎么处理用户请求的呢? 对于一些非法命令是怎么进行处理呢?
创建子例程进行执行 对于真正的shell, 只在等待用户结果, 每次去进行命令, shell都会生成一个进程去处理, 这主要是应对用户的可能存在问题的指令从而避免shell的崩溃.
4. 权限
4.1. 权限是什么?
所谓权限的概念, 只不过是通过一定的标准或者条件, 去限制一部分人禁止通过, 而让另一部分人允许通过. 即访问某种资源是否被允许。eg:vip、门禁、
权限一般由两部分组成, 一种是人的角色, 另一种是事物的属性, 比如说, 你是否是爱奇艺会员? 因为你有爱奇艺VIP会员这个角色, 才能够观看VIP电影, 之后爱奇艺只能够提供观看影视, 观看直播等待服务, 不能提供旅行吃饭等服务, 因此说还与事物的属性有关, 因为爱奇艺只有视频方面的服务嘛..., 不过请注意, 权限关注的不是哪个人, 而是人的角色, 是否是公司的员工? 是否是VIP会员身份? ...
权限的本质:人的角色 + 事物属性
4.2. Linux中的权限??? 角色+文件属性
对于Linux, 也是对人的角色和事物属性起作用的, 对于人的角色来说, 就被分为了 超级管理员身份 和 普通用户身份, 对于前者最典型的特征就是基本不受权限的约束, 而对于后者权限会比较小.
4.2.1. Linux中的人? 与身份转换
Linux有两种人:
- root 超级管理员
- 普通用户
4.2.1.1. 普通用户 -> 超级管理员
//方式1:
su
//方式2:
su -
有两种方式, 基本上是等价的, 但是略微有点区别, 区别在于su -
这种方式是以root做重新登录, 进入会直接到root家目录. 而su
是身份原地升级, 变成root, 工作路径不会发生改变.
需要注意的是, 普通用户变成超级管理员需要输入root密码.
指令提权:
为什么sudo输入的是普通用户的密码?
想要进行sudo提权, 需要root超级管理员把普通用户添加进白名单里, 需要添加后的普通用户才可以进行sudo提权.
4.2.1.2. root -> 普通用户
su name
root账号可以直接变成任意已经存在的用户, 不用输入密码.
身份回退?
两种方式, ctrl + d
或者 exit
指令
4.2.2. Linux中角色
针对于文件, 账号被分为三类角色, 即具体的角色需要具体的人来充当,扮演:
- 拥有者
- 所属组:其意义在于,在团队协作方面,更好的进行权限管理。
- 其他人(other)
为什么要有 组 的概念? 在多人协作的时候, 更好的进行权限管理.
4.2.3. 文件权限值的表示方法
文件的属性分为三种, 即读r\写w\可执行x, 三三为一组, 分别对应拥有者, 所属组, 和其他人的权限对应. 其中文件属性的第一个字符, d(再上图中)表示文件属性是目录, 或者-表示普通文件...
以任意一组来看, 第一个字符是否具有读权限, 第二个字符表示是否具有写权限, 第三个字符表示是否具有可执行权限.
我们描述一个文件的权限时, 需要先说对应的人(角色), 再说对应的文件属性权限. 以上面例子来说, ..
文件对于拥有者来说, 具有读权限和可执行权限, 对于所属组来说也是具有读和可执行权限而对于其他人也是具有读和可执行权限.
d
代表目录文件-
代表普通文件- 共分为三组,第一组对应所属人权限、第二组对应所属组权限、第三组对应其他人权限
-
- 第一个字符,标识读权限 是r否-
- 第二个字符,标识写权限 是w否-
- 第三个字符,标识执行权限 是x否-
4.3. 权限的修改
权限的修改有两种方法,一是修改文件的权限,二是修改人物的角色即可。
4.3.1. 第一种做法: 修改文件权限
修改权限的第一种方法就是修改文件的属性权限即可.
语法:chmod [Role] [+/-] [Permissions] [filename]
功能:设置文件的访问权限
R->
递归修改目录文件权限- 用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户语法
下面是一些示例:
文件权限属性与角色的关系:
- 对于文件权限的设置, 可以由
拥有者/root
进行权限设置. - 即使是 拥有者, 如果没有给自己设置权限, 自己也是读/写/执行不了的. (root除外)
- 对于人,
Linux
角色匹配只识别最近一个, 比如说, 如果一个人既属于拥有者, 所属组, 那么linux只匹配拥有者.
注意:Linux系统对用户进行识别的时候,只识别一次。如果一个人既属于所有者但没有权限,又属于所有组有权限,那么该人也不能进行文件操作。
实际上, 针对于上面权限, 也有一种八进制数字表示范围:
chmod [Role] [0xxx] [filename]
比如, 如下所示:
权限的意义:维护文件针对于普通用户的一般安全性。
除了修改文件属性权限之外, 我们还可以修改文件的拥有者, 所属组等等...即:
下面进行详细谈论:
4.3.2. 第二种做法: 修改文件角色
语法:chown [参数] [用户名] [文件名]
功能:修改文件的拥有者
语法:chgrp [参数] [用户组名] [文件名]
功能:修改文件或目录的所属组
-R
递归修改文件或目录的所属组
注意:
- Linux支持修改角色的功能, 即修改一个文件的所属人, 所属组...
- 普通用户想要把自己的文件给别人, 需要root权限或者暂时指令提权也可以. 这个问题就是对应现实生活中给别人一个东西需要征得别人同意. 在linux中用root修改对于一个文件的角色即是强制修改.
4.4. 文件类型
4.4.1. Linux下文件类型的标识
对于Linux系统,是通过文件属性中的第一列文件属性标识符来进行区分文件类型的,而不是通过文件后缀名。但是需要注意的是,Linux系统内的其他东西,比如gcc
需要后缀进行区分文件类型。
-
普通文件:包括文本文件、可执行程序、库等都叫做普通文件d
目录文件b
块设备文件 eg:磁盘, 举例ll dev/vda/
这是第一块虚拟内存c
字符设备文件 eg:终端\显示器p
管道文件mkfifo pipo
创建管道文件l
链接文件 eg:快捷方式
建议: 我们对于Linux文件后缀的态度, 尽量带, 因为有些软件需要后缀使用, 而且也适合于我们windows
的习惯.
4.4.2. 文件的可执行权限
文件的可执行权限: 文件的可执行权限是什么意思呢? 下面进行详细讨论.
- 文件并不是有可执行权限就能够执行, 还看这个文件是否本身就是可执行的.
- 可执行 = 可执行权限 + 文件本身可执行.
4.4.3. 目录的权限
- 目录的权限(经典的面试题).
-
x权限
:进入一个目录r权限
:查看指定目录内的文件信息w权限
:能否在指定目录进行新建、删除、修改文件- 目录的读权限就是能否查看目录内有那些文件
- 目录的写权限就是能否增删改目录内的文件
- 目录的可执行权限就是是否能够进入目录内
如何理解上面内容呢? 我们之前说文件 = 内容 + 属性, 目录也是一种文件, 毕竟Linux一切皆文件, 那么目录的内容是什么? 目录里面所有文件的属性信息, 目录的属性是什么? 也与普通文件一样, 也都是文件权限属性\修改时间,所属人,所属组...
4.4.4. 默认权限的由来? 合理性?
默认权限设置的合理性?
普通文件的默认权限: 0666
目录文件的默认权限: 0777
以Centos 7
为例, 默认的权限掩码:
mask = 0002
然后计算机权限是如何确定的呢? 公式: 最终权限 = 起始权限 & (~umask)
umask的默认值在不同平台可能存在差异, 不过可以umask自己设置.
然后我们可以运算一下:
666 -> 110 110 110
002 -> 000 000 010
~002-> 111 111 101
& -> 110 110 100 (即我们现在创建一个文件的默认权限: 664)
4.4.5. 删除目录内的文件取决于目录的写权限.
易错点: 为什么我们普通用户可以删除超级用户的文件???
答:删除一个文件与目标文件没关系。而与其所在的目录有关系。删除一个文件就等于修改目录的内容.
4.4.6. 共享文件? 多个用户共同共享?
如果我们需要建立一个共享文件,来被共同访问,应该怎么建立?
首先这个文件不能在自己家目录里建文件。我们只能在系统的非用户目录下进行创建。为啥? 因为只有用户自己有权限, 其他人根本进不去.
把新建目录的组权限放开,然后把该目录设置为粘滞位(o-w,,任何人都可以建立文件,但是只有文件所有者把文件删除掉)。
粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
即, chmod +t cataloguename