Linux-第1节-常见指令以及权限理解

目录

1.Linux下基本指令

1.1. ls 指令

1.2.pwd指令

1.3.cd 指令

1.4.touch指令

1.5.mkdir指令

1.6.rmdir指令 和 rm指令

1.7.man指令

1.8.cp指令

1.9.mv指令

1.10.cat指令

1.11.more指令和less指令

1.12.head指令和tail指令

1.13.时间相关的指令

1.14.Cal指令

1.15.find指令:

1.16.grep指令

1.17.zip/unzip指令

1.18.tar指令

1.19.bc指令

1.20.uname指令

1.21.重要的几个热键

1.22.关机

1.23.以下命令作为扩展

2.shell命令以及运行原理

3.Linux权限的概念

3.1.Linux中具体的用户分类

3.2.Linux文件相关的权限概念

3.2.1.补充知识

3.2.2.文件访问者的分类(人)

3.2.3.文件类型和访问权限(事物属性)

3.2.4.文件访问权限的相关设置方法

3.3.Linux目录相关的权限概念

3.4.粘滞位

3.5.file指令


1.Linux下基本指令

1.1. ls 指令

语法 ls [ 选项 ] [ 目录或文件 ]
功能 对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
ls指令单独使用:
ls : 显示文件名或子目录名这一种属性
ls [路径] 显示路径下指向的文件
常用选项:
·  -a 列出目录下的所有文件,包括以 . 开头的隐藏文件。
· -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
· -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
· -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
·  -l 显示文件或子目录的更多属性。
·  -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
· -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示         目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets);什么都不带,那就           是一个普通的文本文件。(目录类型识别)
·  -r 对目录反向排序。
·  -t 以时间排序。
·  -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
·  -R 列出所有子目录下的文件。(递归)
·  -1 一行只输出一个文件。

注:
1.选项既可以独立开,也可以合并起来,如下图所示
2. ls -a 的功能是在Linux系统中列出目录下的所有文件,包括以 . 开头的隐藏文件。以 . 开头的文件我们称之为隐藏文件。其实在windows系统下,也存在隐藏文件,我们选择查看,勾选隐藏文件,就可以看到该文件夹下的隐藏文件,如下图所示
其实,在任意目录下,都会存在两个隐藏文件:  .(当前路径)  ..(上级路径)
我们使用 cd.. 命令就可以回到上一级的路径
 

从图中我们可以发现,Linux的路径分隔符是 /(斜杠),而windows的路径分隔符是 \(反斜杠)

我们一直进行返回上级路径操作,可以发现,当最后只剩一个 / 时,就不能进行回退了。此时的 / 为根目录。

想要回到某一目录,我们直接cd 路径 即可

一个点 表示当前路径,当我们要执行当前目录下的.out程序时,就要用到 ,如下图所示

问题:如果我们创建了一个空文件,在磁盘中占据空间吗?

答案:要占用,文件有属性数据(文件名、文件位置等),属性数据也是数据,要被保存起来

文件=文件内容+文件属性

我们曾经或者将来要学的所有的文件操作,无非两类:

(1)对文件的内容操作

(2)对文件的属性操作

1.2.pwd指令

语法: pwd
功能显示用户当前所在的目录
pwd指令单独使用查看当前所处的路径
常用选项

1.3.cd 指令

语法 cd 目录名
功能 改变工作目录。将当前工作目录改变到指定的目录下。
cd指令单独使用:
cd [子目录名]:进入当前目录的子目录中( 本质上其实用的是相对路径
常用指令:
cd .. : 返回上级目录(本质上其实用的是相对路径)
cd /home/litao/linux/ : 绝对路径
cd ../day02/ : 相对路径
cd ~ 进入用户家目录(普通用户家目录为home,root用户家目录为root)
cd - 返回最近访问目录
注:
1.Linux 的目录结构本质是一颗多叉树,因此 / 被称为根目录。每一个子节点,既可以是一个目录(再放目录或者普通文件,递归式的定义),也可以是一个普通文件。这颗多叉树的叶子节点,一定是一个普通文件或者空目录。
我们一般“定位”,是通过路径定位的方式找到文件的,为什么我们都是通过路径方式定位文件的呢?
任何一个节点,可以有多个子节点,但是任何一个子节点,都只有一个父节点。常规的路径定位是具有唯一性的,这种从根目录开始,永远有效且具有唯一性的路径,叫做绝对路径。
绝对路径:从根目录开始的路径,且具有唯一性,路径永远有效
相对路径:相对于当前目录所处的路径,当浏览到其他目录时,此相对目录会失效,不具有唯一性,只有在那一个目录中路径才有效
绝对路径和相对路径选择:
如果是日常使用,推荐相对路径——简单
如果是进行添加配置文件之类,推荐绝对路径——不会出错

补充:我们在百度搜索引擎上随便搜索一个东西,观察其链接,如下图一所示,其中new.qq.com叫做域名(腾讯新闻的官网),我们再观察linux的路径,如下图二所示,可以知道本质上网站链接里域名后面剩余部分的 / 和linux路径的 / 是一个概念,这就可以看出企业的后端是Linux操作系统(如果是windows分隔符应该是 \ )

后面我们学网络就会知道,只要通过域名(如下面的new.qq.com)找到特定主机,然后在主机的特定目录下我们就能找到一个叫做网页的东西(如下图的20220526A09NDR00.html)

 

1.4.touch指令

语法: touch [ 选项 ] [ 文件名]
功能: touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
touch指令单独使用:
touch [文件名]: 在当前目录中创建一个文件
常用选项
-a   或--time=atime或--time=access或--time=use只更改存取时间。
-c   或--no-create  不建立任何文档。
-d  使用指定的日期时间,而非现在的时间。
-f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m   或--time=mtime或--time=modify  只更改变动时间。
-r  把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t  使用指定的日期时间,而非现在的时间
注:
1.我们可以用touch创建一个.c文件,用nano记事本打开.c文件,保存,用gcc运行.c文件
步骤如下:
第一步:用touch创建一个.c文件,用nano记事本打开.c文件,如下图一行所示。如果出现下面二行图所示情况,那就是还没有装nano,在root目录中输入yum install -y nano,就可以将nano装上了

第二步:在记事本中编写代码,代码写完后ctrl x退出,系统提示你是否保存,输入y然后回车即可

第三步:gcc mytest.c,使用gcc编译器编译代码,生成一个a.out文件。如果没有装gcc,在root目录中输入yum install -y gcc-c++,就可以将gcc编译器装上了

第四步: ./a.out打开.out文件,即可看到代码的运行结果

1.5.mkdir指令

语法mkdir [选项] [目录名dirname / 路径]
功能在当前目录下创建一个名为 “dirname”的目录
mkdir指令单独使用:
mkdir [目录名]:在当前目录下创建一个子目录
常用选项
-p  [路径] :创建一串路径。也就是说,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
注:
1.下面两个代码的功能是相同的,都是建立多个目录

1.6.rmdir指令 和 rm指令

rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除目录。
语法rmdir [选项] [空目录名dirName]
功能删除空目录(只能删除空目录,我们不常用)
适用对象具有当前目录操作权限的所有使用者
rmdir指令单独使用:
rmdir [空目录名]:删除当前目录下的子空目录
常用选项
-p :当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
rm命令可以同时删除文件或目录
语法rm [选项][目录名dirName / 文件名dir]
功能删除文件或目录
适用对象所有使用者
rm指令单独使用:
rm [文件名]:删除普通文件
常用选项
-f :即使文件属性为只读(即写保护),亦直接删除,也就是说强制删除,
-i :删除前逐一询问确认
-r :使用方法为 rm -r [目录名],递归删除目录及其下所有文件

1.7.man指令

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux 手册页的命令是man
语法 man  [ 选项 ]   命令
功能:查询一个命令的标准手册
常用选项:
-k:根据关键字搜索联机帮助
num:只在第num章节找
-a:将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕
注:
1.man指令既可以查指令和系统调用,也可以查c语言函数,如下图所示,因为linux操作系统是由c语言写的,所以man是可以查到c语言的标准手册的。但是man指令更多的还是查指令和系统调用

2.使用man+m+命令,我们如何知道标准手册每一章介绍的什么呢,我们只有知道每一章介绍的什么,才知道要查哪一章。此时我们直接man+指令可以看到该命令提供的所有章节及其简介,如下图一所示,我们查询的是man指令的标准手册,如下图二所示,我们简单介绍了一下man指令标准手册各章节内容

3.如果Linux系统上没有man手册,那么使用root用户,输入指令yum install -y man-pages进行下载即可

1.8.cp指令

cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
语法 cp  [ 选项 ]   源文件或目录  目标文件或目录
功能: 复制文件或目录
常用选项
-f : --force强行复制文件或目录, 不论目的文件或目录是否已经存在
-i : --interactive覆盖文件之前先询问用户
-r:递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R : --recursive递归处理,将指定目录下的文件及子目录一并处理
注:
1.如果在cp拷贝的时候,要拷贝的文件是拷贝在当前路径下,两个文件的名称不能一样;如果拷贝到不同路径下,可以一样
2.如下图所示,创建一个file.txt文件,然后cat file.txt打印,打印出来是空的,如下图一所示。 nano file.txt我们在里面随便写点东西,然后ctrl x退出,Y保存,然后回车,如下图二所示。然后cat file.txt打印,打印出来的就是刚刚写的东西,如下图三所示

拷贝一个文件到本目录中:

然后使用cp指令cp file.txt file-bak.txt,将file.txt文件复制粘贴一份,复制粘贴后的文件名叫做file-bak.txt(类似于windows中的复制粘贴功能),cat file-bak.txt打印file-bak.txt文件,打印出来的还是刚刚写的东西,如下图所示

拷贝一个文件到指定目录中:

我们也可以指定路径的拷贝,使用cp指令 cp file.txt ../file.txt-1 将file.txt拷贝到上级目录中,可以看到上级目录中存在了file.txt-1文件,然后cat ../file.txt-1,可以看到打印出来的结果就是我们之前写的东西,如下图所示

拷贝一个子目录到本目录中:

默认情况,cp不允许拷贝目录,如果需要,我们应该要携带选项 -r,使用cp指令 cp -r test2022_10_22 test2022_10_22_copy 复制粘贴子目录test2022_10_22为test2022_10_22_copy,然后 tree两个子目录可以看到,两个子目录是相同的,如下图一所示

如果提示没有下载tree命令,我们使用root用户输入yum install -y tree即可,如下图二所示

3.有些具有权限的文件如果要拷贝,linux会问你,你确定要拷贝吗,如果我们想让他不要询问我们,立马去拷贝,那我们可以带一个-f选项,如下图所示

1.9.mv指令

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) fifiles),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:

1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的

目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
常用选项
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
注:
1.mv指令实现移动文件或目录功能
移动一个文件到其他目录中:(剪切普通文件)
使用mv指令 mv file.txt .. 将file.txt文件移到上一层目录中,如下图一所示,这样就实现了类似于剪切的功能。我们可以再使用mv指令 mv file.txt test2022_10_22将file.txt文件移到test2022_10_22目录中,如下图二所示

移动一个目录到其他目录中:(整体剪切目录)

使用mv指令 mv test2022_10_22_copy test2022_10_22 ,将test2022_10_22_copy移到test2022_10_22目录中,如下图一所示。再将test2022_10_22_copy移动回去,如下图二所示


2.mv指令实现重命名文件或目录功能

对一个文件重命名:

使用mv指令 mv file-bak.txt file.txt-bak 将file-bak.txt文件重命名为file.txt-bak,如下图所示

对一个目录重命名:

使用mkdir指令创建一个目录dir,然后使用mv指令 mv dir mycode 对dir重命名为mycode,如下图所示

3.如果目标文件存在,我们想让系统询问你是否覆盖,那么可以使用-i选项,如下图所示

Linux中,一定要注意,不要轻易的删除文件,除非你特别确认,因为Linux没有回收站,我们可以对命令进行修改,实现手动回收站的作用,如下面代码所示(下面代码很多命令还没有介绍,后面会讲)

1.10.cat指令

打印文件内容
语法cat  [选项]  [文件]
功能查看目标文件的内容
常用选项
-b:对非空输出行编号
-n:对输出的所有行编号
-s:不输出多行空行
注:
1.使用cat指令 cat file.txt 从第一行正着显示文件内容

2.使用tac指令 tac file.txt 从最后一行倒着显示文件内容

3.可以使用-n选项对打印出来的每一行进行编号,-n选项只能对cat适用,不对tac适用,如下图所示

4.cat有什么用呢?

 比较适合查看短文本或者代码

1.11.more指令和less指令

语法more [选项][文件]
功能more命令,功能类似 cat
常用选项
-n:对输出的所有行编号
q:退出more
· less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
· less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
· 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
· 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前
不会加载整个文件。
选项
-i:忽略搜索时的大小写
-N:显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit

如下图所示,代码cnt=1; while [ $cnt -le 10000 ]; do echo "hello word $cnt"; let cnt++; done的功能是打印一万行消息,消息内容为hello word,代码cnt=1; while [ $cnt -le 10000 ]; do echo "hello word $cnt"; let cnt++; done > file.txt其后面加了>file.txt是将内容写到file.txt文件中

如下图一所示,使用ls -l命令弹出来的内容我们可以看到158894就是文件的大小,可以使用wc -l file.txt命令查看file.txt文件里面的内容是否是一万行,如下图二所示。使用nano file.txt命令打开文件可以看到文件中的内容是一万行hello word,如下图三所示

面对数据量大的文件,cat文件打印可能会刷屏半天,我们一般就不用cat将其打印出来了,cat不适合查看大文本。一般使用more指令和less指令

我们使用more指令more file.txt,如下图一所示,可以看到当内容把屏幕占满就不往后显示了, 想往下显示摁回车键即可,想跳转到五千行输入/5000就跳到了五千行,如下图二所示,想要退出more 输入q 或 ctrl c 即可。

我们使用less指令less file.txt,如下图一所示,可以看到和more一样当内容把屏幕占满就不往后显示了, 想往下显示摁回车键或者下键即可,想网上显示摁上键即可,想跳转到五千行输入/5000就跳到了五千行,想要退出more 输入q即可。

less支持前后翻,因此相比于more我们更推荐less指令

为什么使用more和less指令?

more和less指令可以帮助我们查看文本,可以用它来进行日志查看

刚刚生成大文本的适合,使用了命令do echo "hello word $cnt"; let cnt++; done > file.txt

其中echo是把字符串的内容显示在显示器中,如下图一所示,如果我们在后面再加上符号>和文件名,就会把字符串的内容保存在该文件中,如下图二所示

符号>:输出重定向符号,本来应该写入到显示器的内容,我们把它写入到文件中

输出重定向有一个非常重要的特征 ,会清空原始文件的内容,进行重新写入,如下图所示

如果我们使用符号>>,如下图所示,我们发现文件内容在不断增多

符号>>:追加重定向,本来应该写入到显示器的内容,我们把它写入到文件中,不会清空原始内容,而是在原始文件的结尾进行新增式的写入

指令cat:

如果我们使用指令cat,cat指令后面不输入内容,直接回车,如下图所示,那么我们输入什么就会打印什么。

指令cat默认会从键盘(标准输入)读取,键盘可以当作是文件,在Linux下一切皆文件(把磁盘、显示器、网卡、显卡、键盘、鼠标等所有的设备都看作文件,以同样的方式看待这些设备,内存和CPU不要看作是文件)

如果使用命令cat < hello.txt可以达到与cat hello.txt相同的效果,如下图所示

符号<:输入重定向,把本来应该从键盘文件中读取数据的方式,改成从指定的文件中读取

任何情况下,想要退出某种状态,使用ctrl c(所有阻碍你命令行操作的,无脑ctrl c,ctrl c 为终止,ctrl z 为暂停,退出一定用ctrl c),如果误敲成ctrl z了,如下图所示,ctrl z后面会有一个任务编号,fg+对应任务编号就回去那种状态了,接下来ctrl c退出即可

如果想看目前有几个任务编号,使用命令jobs就可以看到全部的,如下图所示

1.12.head指令和tail指令

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾
语法: head [参数]... [文件]... 
功能
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。 
选项
-n<行数>:显示的行数
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail - f fifilename会把fifilename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容
语法: tail[必要参数][选择参数][文件] 
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
-f:循环读取
-n<行数>:显示行数

首先使用命令cnt=1; while [ $cnt -le 100000 ]; do echo "hello word $cnt"; let cnt++; done > file.txt将十万行代码写入到file.txt文件中,如下图所示

使用head指令,head命令默认打印文件的前十行,如下图所示

使用head指令和选项-n<行数>,打印文件的前<行数>行,如下图所示

使用tail指令,tail命令默认打印文件的后十行,如下图所示

使用tail指令和选项-n<行数>,打印文件的后<行数>行,如下图所示

如果我想查看文本的中间部分,该怎么操作呢?例如查看文本的[30000,30020]行

方法一:临时文件法

head -30020 file.txt > temp.txt 先拿到前30020行写入到一个临时文件temp.txt里,然后tail -21 temp.txt 取临时文件temp.txt后面的21行即可,如下图所示

方法二:管道法

head -30020 file.txt | tail -21,这样不用形成临时文件就能完成,如下图所示

其中 | 叫做管道,作用是传输数据资源,传输数据资源就需要有人放资源,有人拿资源, | 左边的命令就是放资源的部分,该部分命令是有结果的,这部分结果不显示在显示器中,而是放到管道中, | 右边的命令把管道中的数据拿过来,然后做二次加工(对于管道,后面会去研究其原理,现阶段我们理解其应用即可)

命令head -100 file.txt | tail -15 | head -3,如下图所示,先处理head -100 file.txt将处理后的数据传给tail -15,tail -15再处理数据,将处理后的数据传给head -3,head -3再处理数据进行打印

这样我们可以级联多条命令,完成流水线式的数据处理工作

1.13.时间相关的指令

date 显示:
date 指定格式显示时间: date + %Y:%m:%d...... (格式可以自己设定,不一定非用冒号)
date 用法: date [OPTION]... [+FORMAT]
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d
注:
1.如下图所示,只用data指令显示出来的时间不是很清晰,我们可以自己定义格式去显示,如下图所示,其中前面为date +,后面格式和标记自己选择即可
2. 时间戳
时间->时间戳: date +%s
时间戳->时间: date -d@1508749502
Unix 时间戳(英文为 Unix epoch, Unix time, POSIX time Unix timestamp )是从 1970 1 1 日( UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。
注:
1.如下所示,像1666578074这种我们称作时间戳,是197年1月1日午夜到现在的秒数,时间戳是一个时刻线性递增的数据

对于一个程序员来说日志是很重要的,日志具有排查错误的能力,时间戳和我们当前具体的普通时间可以作为日志的一部分,如下图所示 

2.将时间戳转换成普通时间
可以使用命令date -d@1508749502,如下图所示

也可以使用命令 date +%Y-%m-%d_%H:%M:%S -d@1666578080 将时间戳转换成我们自己定义的格式的普通时间,如下图所示

1.14.Cal指令

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式cal [参数][月份][年份]
功能 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项
-3:显示系统前一个月,当前月,下一个月的月历
-j:显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y:显示当前年份的日历
注:
1.命令cal,显示当前年月的日历,如下图所示
2.命令cal 1972,显示1972年的日历,如下图所示

3.命令cal -3,显示系统前一个月,当前月,下一个月的月历,如下图所示

1.15.find指令:

Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)
语法: find [路径] -[选项]
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:
-name:按照文件名查找文件
注:
1.命令find user/include/ -name stdio,如下图所示

1.16.grep指令

行文本过滤工具
语法: grep [选项] 搜寻字符串文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
-i:忽略大小写的不同,所以大小写视为相同
-n:顺便输出行号
-v:反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
注:
1.使用grep指令grep '1234' file.txt,将文件file.txt中包含1234的行提取出来,如下图一所示

使用grep指令grep 'c++' hello.txt将文件hello.txt中包含c++的行提取出来,可以看出这里过滤是区分大小写的

2.使用grep指令和选项-i,grep -i 'c++' hello.txt将文件hello.txt中包含c++的行提取出来,可以看出这里加上-i选项的话过滤是不区分大小写的

3.使用grep指令和选项-v,grep -v 'c++' hello.txt,排除了c++显示其他内容,如下图一所示,如果配合-i选项使用grep -iv 'c++' hello.txt,那么就排除了所有c++(包括大小写)的内容

4.使用grep指令和选项-n,grep -niv 'c++' hello.txt,将显示的内容标注上行号

1.17.zip/unzip指令

语法: zip  压缩文件.zip  目录或文件
功能: 将目录或文件压缩成zip格式
常用选项:
-r:递归处理,将指定目录下的所有文件和子目录一并处理,解压到当前目录下
-d:递归处理,将指定目录下的所有文件和子目录一并处理,解压到指定路径下
注:
1.建立一个目录tar_package,在目录tar_package里面建立file1、file2、file3、file4、file5五个文件,在file3.txt文件里面写入hello bit,如下图所示
我们使用命令zip test.zip tar_package将tar_package目录压缩成test.zip,然后把我们原本的文件移走,unzip test.zip对test.zip进行解压缩,但是我们发现解压缩后的目录里面没有我们之前的五个文件,如下图所示

我们删除解压后的空的tar_package目录和test.zip文件,并把之前的tar_package目录移回来

如果压缩是想把其目录以下的所有文件都进行压缩,需要使用-r选项,我们使用命令zip -r test.zip tar_package将tar_package目录压缩成test.zip,然后把我们原本的文件移走,unzip test.zip对test.zip进行解压缩,如下图所示,可以看见解压后的目录里五个文件存在,并且文件内容不变

2.默认情况下,几乎所有的解压工具解压出来的原始数据,都会被放在当前路径下,如果我们想解压到指定目录如何做呢
使用-d选项,使用命令unzip test.zip -d /root/testcode/home/dxf将test.zip解压到/root/testcode/home/dxf目录下,如下图所示

3.我们为什么要打包压缩?

(1)节约空间

(2)所有软件写好之后不只是有一个文件的一般是有多个,打包压缩可以将这多个文件打包成为一个文件,这样方便网络传输和各种部署(使用压缩包进行传输,如果传输时有部分文件丢失,压缩包解压时会报警告的,只要解压成功就一定是完成的文件,如果直接传整个文件,传输时如果里面部分丢失,接收后是不知道的)

4.所有的互联网公司后台都是Linux系统,开发人员开发的软件将来都是要部署在Linux系统上的,所以所有的软件都要打包压缩,上传到Linux上,进行安装部署

5.如果使用zip命令系统提示如下,那就是没有安装zip和unzip程序,在root用户下使用命令yum install zip安装zip程序,在root用户下使用命令yum install unzip安装unzip程序

要想删除一个目录里的所有文件,可以使用通配符 * ,如下图所示,命令rm -rf *删除了当前目录下的所有文件(这里命令rm -rf *也可以写成rm -rf ./*)

1.18.tar指令

tar [-cxtzjvf]  文件与目录  ....
参数:(在tar命令中如果几个选项组合在一起可以不带前面的-,如果是一个选项有些选项前面需要带-)
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfifile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
注:
1.一般一个压缩包,需要经历两步:
(1)打包    (2)压缩
2.使用命令 tar czf test.tgz tar_package(其中选项czf中c表示创建压缩包,z表示进行压缩,f表示我要指明一个新的压缩包名称,tgz中t表示打包,gz表示压缩),将tar_package进行打包压缩成test.tgz,在当前文件下就生成一个压缩包test.tgz如下图所示

将原始数据包tar_package删除,剩下一个test.tgz压缩包,对test.tgz压缩包进行解压,使用tar xzf test.tgz(其中选项xzf中x表示解压缩包),如下图所示

3.如果压缩的时候带上选项v,会把压缩的过程显示出来,如下图所示

如果解压的时候带上选项v,会把解压的过程显示出来,如下图所示

4.默认情况下,几乎所有的解压工具解压出来的原始数据,都会被放在当前路径下,如果我们想解压到指定目录如何做呢
使用-C选项,使用命令tar xvzf test.tgz -C /root/testcode/home/dxf 将test.tgz压缩文件解压到/root/testcode/home/dxf路径下

我们讲完了所有的压缩包吗?  没有!

1.Linux下是否几乎支持所有种类的压缩包?

答:是的

2.为什么Linux下会支持?

答:Linux面对的平台非常多

3.遇到了不懂得压缩包种类,该怎么办?

答:在网上搜索centos.xxx后缀如何解压即可

1.19.bc指令

bc指令是Linux下的计算器,bc命令可以很方便的进行浮点运算
注:
1.直接使用bc指令输入式子即可计算,如下图所示,不计算了 ctrl c退出即可
2.也可以将计算式子通过管道交给bc,如下图所示

1.20.uname指令

语法uname  [选项] 
功能 uname用来获取电脑和操作系统的相关信息。
补充说明uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
-r:显示Linux内核版本
-a或–all:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
注:
1.Linux发行版有有很多种,宏观上就两类,一种是商业化发行版,一种是技术角度的内核发行版,使用  name -r指令可以显示我们使用的Linux内核版本,如下图所示,我们使用的是3.10版(3.10版一般是centos7.5、centos7.6、centos7.8带的版本),3.10版是一个比较稳定的版本(上一个经典的稳定的版本是2.6版)

下图所示,x86_64,x86就是因特尔的架构,使用基于因特尔x86的CPU,不管是笔记本、台式机还是企业级后台服务器,其芯片基本都是因特尔 ,x86_64代表64位的计算机,我们看到的类型可能还有x86_32、x64和x86,这里x64是x86_64的简写,x86是x86_32的简写

1.21.重要的几个热键

[Tab] 按键:具有『命令补全』和『档案补齐』的功能
[Ctrl] c 按键:让当前的程序『停掉』
[Ctrl] d 按键:通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
[Ctrl] r 按键:搜索历史命令
注:
1.如果程序失控死循环了,也可以使用ctrl c终止它

 
2. tab键具有命令自动补齐功能,如果输入的部分无法唯一确定一个命令,那么会显示所有识别到的命令,如下图所示。如果一些命令只记得前几个字母,那么可以使用tab命令,然后找到自己想用的命令即可

3.使用ctrl r可以搜索之前写过的命令,首先ctrl r,然后输入关键字,系统就会显示之前存在关键字的命令。ctrl r其实是在记录的历史命令里面找到与关键词匹配的命令,输入history可以看到全部记录的历史命令,如下图所示
4.使用ctrl d可以快速退出账户

1.22.关机

语法shutdown  [选项]
常见选项:
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
注:
1.云服务器是不需要关机的,云服务器永远不关机(如果不小心关机了在网页上开机即可)

1.23.以下命令作为扩展

◆ 安装和登录命令 login shutdown halt reboot install mount umount chsh exit last
◆ 文件处理命令: fifile mkdir grep dd fifind mv ls diffff cat ln
◆ 系统管理相关命令 df top free quota at lp adduser groupadd kill crontab
◆ 网络操作命令 ifconfifig ip ping netstat telnet ftp route rlogin rcp fifinger mail nslookup
◆ 系统安全相关命令: passwd su umask chgrp chmod chown chattr sudo ps who
◆ 其它命令: tar unzip gunzip unarj mtools man unendcode uudecode


2.shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
◆ 将使用者的命令翻译给核心(kernel)处理。
◆ 同时,将核心的处理结果翻译给使用者。
对比 windows GUI ,我们操作 windows 不是直接操作 windows 内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D 盘的操作,我们通常是双击 D 盘盘符 . 或者运行起来一个应用程序)
shell 对于 Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给 Linux 内核。反馈结果在通过内核运行出结果,通过shell 解析给用户
我们centos 7常用的命令行解释器(shell)叫做bash。shell是所有外壳解释器的统称,bash是一款具体的解释器
帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

外壳程序的意义:

1.减少使用成本

2.保护操作系统(如果用户的请求操作是非法操作,外壳程序会将这些操作拦截下来,不交给操作系统)


3.Linux权限的概念

3.1.Linux中具体的用户分类

Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以在linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
root用户只有一个,普通用户可以有多个
命令su [用户名]
功能切换用户。
注:
1.使用user命令可以看到目前所有的普通用户,如下图所示。其他关于用户的指令(添加用户、删除用户)前面讲过
2.切换用户
要从root用户切换到普通用户user,则使用 su user,不用输入密码即可进入该用户;要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码,输入即可进入root用户;要从普通用户user1切换到另一个普通用户user2,使用 su user2,输入对应的密码即可进入该普通用户。
普通用户如果要切换成root用户,也可以使用su - 命令,系统会让你输入密码,此处输入root密码就可以切换成root用户

如果要切换回之前的普通用户,使用exit命令或者ctrl d即可

3.root和Linux下任何一个用户都要设置密码!记住不要把root密码和普通用户的密码设置成为一样的(建议)。 

3.2.Linux文件相关的权限概念

3.2.1.补充知识

文件 = 文件的内容 + 文件的属性

如下图所示,其中前面这十个字符就和权限有关,其中第一个字符代表文件类型

注:

1.第一个字符详解

Linux系统不是以文件名后缀区分文件类型的,而是通过ll命令显式的第一个字符区分文件类型的,不同的文件类型用不同的字符来区分,如下:

-:普通文件、文本、源代码、可执行程序、第三方动静态库等

d:目录文件

l:链接文件(与windows桌面的快捷方式类似)

p:管道文件

b:块设备文件(磁盘)

c:字符设备文件 

2.我们发现一个问题,如下图所示,前面说到Linux系统不是以文件名后缀区分文件类型的,而是以ll命令显式的第一个字符区分文件类型,那为什么下图将文件名test.c改成test.txt之后就报错了呢?为什么报错的原因显示文件无法识别?

这是因为Linux不以后缀区分文件类型,而gcc并不是Linux,gcc是Linux上面使用的一个编译器软件,gcc软件是以后缀区分文件类型的

什么是权限?

1.约束人的(对人进行分类)

2.需要对应的事物具有对应的属性

注:在Linux上谈权限,都是针对文件的权限

Linux上什么是权限?

1.这个文件谁能访问谁不能访问

2.对应文件应该具备的某种属性:r(读)、w(写)、x(执行)

权限 = 人 + 事物属性

权限也就是选择一批人挡住或约束一部分人,从事某种特定符合事物属性的某种活动,所以权限的概念以及操作,都是围绕着人和文件属性展开的

3.2.2.文件访问者的分类(人)

Linux系统中,人分三类:
(1)文件的所有者:owner
(2)文件的所属组:grouper
(3)文件的其他用户:other
如下图所示,以file.txt为例,文件file.txt的拥有者就是root,文件file.txt的所属组也为root,只要不是文件的拥有者和所属组那么就都是文件file.txt的其他用户other
超级用户root、普通用户和上面讲的文件的所有者owner、文件的所属组grouper、文件的其他用户other有什么关系呢?
答:root和普通用户是具体的用户,而owner、grouper和other是三种角色,他们并不冲突,反而是互相补充的
为什么Linux中会有所属组?
答:用一个实际的例子来解释,假如一个公司有两个组A和B,这两个组做同一件产品,这两个组是竞争关系,公司只给两个组配备了一台服务器。
这样的情况下,如果只有owner和other两个角色的话,那么A组的张三写了一个文件,张三是文件的owner,具有读写运行的权限,其他人都是文件的other(包括同组的人),因为不能让B组的人看见文件的代码,将other设置成不可读写运行的,这样同组的人也无法看到代码无法组内合作。
如果有了grouper那么文件的拥有者是owner,owner具有读写运行的权限,将文件所属组设置为A组,所属组权限设置成可读的,other设置成不可读写运行的,这样同组人就能看到文件代码同组协作,B组人看不到代码

3.2.3.文件类型和访问权限(事物属性)

Linux系统中,文件的权限属性分为三类:

(1)r 读

(2)w 写

(3)x 可执行

如下图所示,前面讲过,前面这十个字符就和权限有关,其中第一个字符代表文件类型。

后面九个字符三个为一组分成了三组,如下图二所示,其中第一组是拥有者owner的权限,第二组是所属组grouper权限,第三组是其他用户other的权限。

以其中的一组三个字符为例,每一组对应的权限的位置含义是确定的,也就是说一组的三个字符,第一个字符只能是r或-,第二个字符只能是w或-,第三个字符只能是x或-。第一个字符表明是否可读,第二个字符表明是否可写,第三个字符表明是否可运行。可以使用对应字母,不可以用-来表示

这样如果要描述上面file.txt文件的权限,就可以描述为:file.txt文件的文件类型是普通文件,文件拥有者具有文件读写权,没有可执行权,文件所属组具有文件读写权,没有可执行权,其他用户只有读权,没有写和可执行权

文件的权限操作,应该涉及到几个方面呢?

(1)修改文件的属性

(2)修改人

简单地说就是修改某些人对某些文件的读写可执行属性操作

3.2.4.文件访问权限的相关设置方法

功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R:递归修改目录文件的权限
注:
1.只有文件的拥有者和root才可以改变文件的权限
2.修改文件权限的方法一:
如果想修改文件拥有者的的读权限,改成不可读,使用代码chmod u-r file.txt ,其中u-r中的u表示拥有者,-表示去掉权限,r表示读,u-r就是去掉拥有者的读权限,如下图所示

如果想修改文件所属组的读权限,改成不可读,使用代码chmod g-r file.txt ,其中g-r中的g表示所属组,-表示去掉权限,r表示读,g-r就是去掉所属组的读权限,如下图所示

如果想修改文件其他用户的读权限,改成不可读,使用代码chmod o-r file.txt ,其中o-r中的o表示其他用户,-表示去掉权限,r表示读,o-r就是去掉其他用户的读权限,如下图所示
如果想修改文件拥有者的读和执行权限,改成可读可执行,使用代码chmod u+rx file.txt ,其中u+rx中的u表示拥有者,+表示加上权限,rx表示读和执行,u+rx就是加上拥有者的读和执行权限,如下图一所示。这里虽然加上了可执行权限,但还是无法执行,因为这个文件本身并不是可执行程序,如下图二所示

如果想修改文件所属组的读权限,改成可读,使用代码chmod g+r file.txt ,其中g+r中的g表示所属组,+表示加上权限,r表示读,g+r就是加上所属组的读权限,如下图所示。

如果想修改文件其他用户的所有权限,改成可读可写可执行,使用代码chmod o+rwx file.txt ,其中o+rwx中的o表示其他用户,+表示加上权限,rwx表示读写可执行,o+rwx就是加上所属组的读写可执行权限,如下图所示。

如果想对文件拥有者去掉写和执行,对文件所属组去掉写,对文件其他用户去掉所有权限,使用代码chmod u-wx,g-w,o-rwx file.txt,同时设置owner、grouper、other两个以上的对象,对象之间用逗号隔开即可,如下图所示

如果想对文件拥有者加上所有权限,对文件所属组加上所有权限,对文件其他用户加上所有权限,使用代码chmod u+rwx,g+rwx,o+rwx file.txt,同时设置owner、grouper、other两个以上的对象,对象之间用逗号隔开即可,如下图所示

3.使用root用户将文件file.txt所有权限全部关闭如下图一所示,因此所有对象无法读文件,无法写文件,也无法运行文件(除root用户外,root用户操作不受权限约束),切换到dxf用户,对文件进行读、写、执行操作,都提示没有权限,如下图二所示。

如下图所示,使用root用户对文件权限进行设置,使用命令chmod o+r file.txt,使file.txt对其他用户可读,我们再切换到dxf用户读取文件,发现文件可读,如果想要写文件,发现没有权限

注:root用户的访问操作不受权限约束

4.修改文件权限的方法二:

以owner对象为例,owner的权限符有三位,第一位对应r或-,第二位对应w或-,第三位对应x或-,每一位都对应有或无两态,我们将有对应权限用1表示,没有对应权限用0表示,例如111表示rwx即三个权限都有,110表示rw-即有读写权限没有执行权限,而三位二进制数字对应一个八进制数字,这样一个八进制数字就和八种权限相对应,例如:owner -> 5 -> 101 -> r-x。一个八进制数字可以表示一个对象的权限,如果考虑owner,grouper,other三个对象,那么使用三个八进制数字即可表示三个对象的权限

如下图所示,使用命令 chomd 777 file.txt,777对应111111111,也就是打开三个对象的所有权限

如下图所示,使用命令 chomd 000 file.txt,777对应000000000,也就是关闭三个对象的所有权限

5.如果想同时增加owner,grouper,other三个对象的r属性,我们可以使用命令chmod a=r myfile.txt这样三个对象都是可读的,命令a=r中a表示all的意思,w和x与r同理

功能修改文件的拥有者

格式 chown [ 参数 ] 用户名 文件名
注:
1.普通用户user1想要更改文件的拥有者给user2,那么需要征得user2的同意,否则无法更改,如下图所示

如果是root用户想要更改文件的拥有者给user2,那么不需要征得user2的同意,可以直接改

如果普通用户user1想要更改文件的拥有者给user2,不想征得user2的同意,那么使用sudo命令,sudo的作用是提示权限,以root的身份去运行这一命令,如下图所示

注意:我们现在使用sudo会报错,是因为没有添加到信任列表里,这里后面会讲

2.这里我们可以明白,文件的创建者和文件的拥有者不一定是同一个人

功能 修改文件或目录的所属组
格式 chgrp [ 参数 ] 用户组名 文件名
常用选项
-R: 递归修改文件或目录的所属组
注:
1.如下图所示,chgrp必须以root权限才能执行,如果是普通用户想执行 chgrp时,需要在命令前加sudo命令来提升权限为 root权限
2.如果想用一条命令同时修改文件拥有者和文件所属组,使用chown命令,如下图一二所示,文件拥有者和文件所属组之间用冒号隔开

3.3.Linux目录相关的权限概念

面试题:想进入一个目录需要什么权限?

答:如下图所示,需要目录的x权限

◆ 如果目录只没有r权限,允许进入,允许在该目录下创建(写入)一个文件,不允许查看文件列表

◆ 如果目录只没有w权限,允许进入,允许在该目录下查看文件列表,但是不允许创建(写入)文件

◆ 如果目录只没有x权限,不允许进入

◆ 如果目录同时没有rw权限,允许进入,但是不允许创建和查看目录下的文件列表

注:

1.上面的文件列表不等于文件内容,文件内容是否可以查看,由文件自己的权限决定

2.Linux下一切皆文件,目录也是文件,之前介绍过,文件=内容+属性,目录的属性好理解如下图所示,目录的内容是什么呢?

目录里面保存的是部分文件的“属性”(这里的部分文件的“属性”包括目录下的文件名也就是文件列表)

3.结合目录内容的概念,进一步理解目录的rwx三个权限

没有r权限:有x权限可以进入目录,没有r权限不能查看目录的内容 (目录下的文件名看不见),有w权限可以在目录的内容里面创建(写入)文件

没有w权限:有x权限可以进入目录,有r权限可以查看目录的内容 (目录下的文件名可以看见),没有w权限不能在目录的内容里面创建(写入)文件

没有x权限:没有x权限不能进入目录

如下图所示,为什么我们创建目录的默认权限是755?为什么我们创建文件的默认权限是644?(不同的系统可能有差异)

默认目录的起始权限:777

默认普通文件的起始权限:666

系统里面有一个权限掩码,使用umask命令可以看到,如下图所示,可以看见权限掩码是一个四位的数字,第一位我们不管,我们只关心权限掩码的后三位。凡是在权限掩码中出现的权限都不应该在最终权限中出现,例如:

权限掩码:022 -> 000 010 010

默认目录的起始权限:777 -> 111 111 111

最终目录的默认权限:111 101 101 -> 755

默认普通文件的起始权限:666 -> 110 110 110

最终普通文件的默认权限:110 100 100 -> 644

功能 查看或修改文件掩码
格式 umask 权限值
说明 超级用户默认掩码值为 0022 ,普通用户默认为0002
注:
1.使用umask 权限值,就可以修改权限掩码值,如下图所示

上面提到“凡是在权限掩码中出现的权限都不应该在最终权限中出现”,这是不是减法呢?

答:不是减法,举个例子,如果是普通文件,默认普通文件的起始权限是666(110 110 110),如果权限掩码是003(000 000 011),那么如下图一所示,做减法的话最终普通文件的默认权限值应该是663(110 110 011)。如下图二所示,我们发现最终普通文件的默认权限值是664(110 110 100),因此不是减法

其实“凡是在权限掩码中出现的权限都不应该在最终权限中出现”这句话的算法是:先将权限掩码按位取反,然后和默认普通文件的起始权限值进行与操作,也就是说

最终权限 = 默认权限 & (~umask)

例如:默认普通文件的起始权限是666(110 110 110),如果权限掩码是003(000 000 011),权限掩码取反是111 111 100,这个值和默认普通文件的起始权限值110 110 110做与运算得到111 111 100,与上图二结果相同

3.4.粘滞位

在一些情况下,我们需要一个目录,该目录需支持所有人在其下可创建或删除临时文件,我们系统中有这种保存临时文件的目录,叫作tmp目录,如下图所示

tmp目录的拥有者和所属组都属于root,从前面的权限内容可以知道任何人都对该目录有读写权限,所以任何人都可以将自己的临时文件放到该目录下

Linux下可以存在一些目录,拥有者和所属组是root,其他人允许以other的身份在该目录下进行文件的创建、读取、删除、修改等

我们使用root用户创建一个目录,设置该目录开放所有权限,那么其他用户就可以进入该目录,创建文件并且显示文件

这样使用dxf用户可以进入该目录,创建文件、显示文件列表,因为创建的文件其所有者是dxf用户,默认umask下,dxf用户也可以写入其创建的文件,如下图所示

当多个用户以other的身份在该目录下进行文件的创建、读取、删除、修改等,user1创建一个文件,设置文件的权限可以限制其他用户对自己文件的操作,如下图所示

但是在一个共享目录下,user1创建的文件设置权限不让user2读,不让user2写,但是防不住user2删除,如下图所示

如果我还想在共享目录下形成临时文件,但是不允许除了我之外的人删除,那么就应该给共享的<目录>加上粘滞位。使用命令chmod +t all给all共享目录加上粘滞位,此时我们可以看到all目录的权限属性other中执行位不再是x而是t,这个t就叫做粘滞位。

当目录加上粘滞位后,其他用户如user2就无法删除user1的文件了,如下图所示

给目录加上粘滞位后,目录中的文件除了文件本身的权限,还多了其他用户不可删除的权限。当一个目录被设置为粘滞位,则该目录下的文件只能由三类用户删除:

(1)超级管理员删除
(2)该目录的所有者删除
(3)该文件的所有者删除

我们发现系统给我们的tmp共享目录其实就是有粘滞位的,如下图所示

3.5.file指令

功能说明辨识文件类型。
语法file [选项] 文件或目录... 
常用选项
-c:详细显示指令执行过程,便于排错或分析程序执行的情形。
-z:尝试去解读压缩文件的内容
注:
1.使用file指令可以查看其他的文件属性,如下图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风张幔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值