Linux常见基本指令 +外壳shell + 权限的理解

发布于:2024-10-17 ⋅ 阅读:(8) ⋅ 点赞:(0)

下面这篇文章主要介绍了一些Linux的基本指令及其周边知识, 以及shell的简单理解权限的理解.

前言

这篇文章是适合Linux入门的文章, 在这里将较为基础的详细的讲解每一个基本指令以及相关的基础Linux普及, 我相信虽然一些基本指令是随处可以搜得到的, 但是以基础指令关联起来的周边知识是较为有价值的, 此外, 本文还附带说明shell外壳程序的简单理解和对于Linux中权限的理解.

当然, 我也画了一个简单的大纲图, 可以参考本图了解大概内容:
在这里插入图片描述

那么下面就让我们开始吧.

1.基本指令及其周边知识

为了更好了去学习相关的Linux基本指令, 下面简单说几个非常基本的指令, 快速认识一下, 后面挨个来讲每个指令是做什么的.

首先我们来快速认识几个基本指令. 即:
touch + filename命令, 用来创建一个普通文件(即windows中类似于xxx.txt文件, xxx.doc, xxx.cpp文件).
mkdir + filename命令, 用来创建一个目录(即windows中的文件夹概念)
rm + filename命令, 用来删除一个文件(指目录或者普通文件).
whoami, 用来查询Linux中登录的用户名是谁.
pwd, 用来查询Linux中的当前工作路径, 所谓工作路径, 指的是你当前所在哪个文件夹下.
ls, 该命令用来查看当前路径(当前文件夹下)的文件夹和普通文件.
cd, 进入一个路径

当然, 上面的所有指令在下面还会详细说明, 只不过快速认识几个, 用来供自己测试而已. 为了方便归类和整理, 我把我学的基本的Linux指令分类成了ADD类, DELETE类, MODIFY类, 都是把自己学的基本指令按相关性归类进去的, 实际上不存在这个归类, 为了方便整理而已.

1.1 ADD类

touch [file]

语法: touch [options] [file...]
功能: 如果后面file是存在的, 那么touch的作用就是更新一下最近访问时间, 如果file是不存在的, 那么就是创建一个普通的文件. 可以归类为下面两点:
● touch 在当前路径下创建一个普通文件在这里插入图片描述

● 通常, 他还可以用来改变一个文件的access时间在这里插入图片描述
/
/

在上面指令中, 我们提到touch对于一个已经存在的文件的作用是更新一下他的最近Access时间, 那我们来简单说一下文件的时间这个话题.

文件的时间

文件的时间
实际上, 在Linux下, 我们可以通过指令stat去查看一个文件的所有属性. 包含文件名, 文件大小, 文件的三种时间等等.
在这里插入图片描述
上面这个图片中, 我们看到有个Access\Modify\Change三个不同的属性, 标识的即是文件的三种时间.
对于Access, 文件最近被访问的时间.
对于Modify, 就是最近文件内容被修改的时间. 比如说我往里面写一句"hello world", 这样就修改了对应文件的Modify时间了.
对于Change, 就是最近文件属性被修改的时间. 比如说我把文件的名字修改为new.c, 这样文件的Change时间就发生改变了.

mkdir [directory]

语法: mkdir [options] [dirname...]
功能: 在当前目录下创建一个名叫"dirname"的目录

  • mkdir -p 创建嵌套目录在这里插入图片描述

cp [file/directory]

语法cp [options] [src] [dest]
功能:复制文件或目录
说明:如果dest是一个目录, 那就拷贝到这个目录下, 如果dest还带一个文件名, 那么就是拷贝到目录下并且改名字. 拷贝目录需要带-r(递归拷贝).
常用选项:
● -f 强行复制文件或目录,不论目的文件或目录是否已经存在
● -i 覆盖文件之前先询问用户
● -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理在这里插入图片描述
● -R 或–recursive递归处理,将指定目录下的文件及子目录一并处理

echo [file]

语法echo "str" (> [file])
> 重定向符号,可以用来创建一个新文件 或者说是 清空文件 这等同于文件以写的方式打开写入数据再关闭在这里插入图片描述在这里插入图片描述

>> 追加重定向 这等同于文件以追加的方式打开,追加数据再关闭在这里插入图片描述

好的, 上面我们说到了重定向的话题, 我们下面来简单"科普"一下关于重定向的概念.

输出重定向

输出重定向的理解: 在Linux中, 一切皆文件, 因此一般我们要输出到显示器文件的"xxx"内容, 被重定向到普通文件, 又因为是输出(写), 因此叫做输出重定向.
  实际上, 文件重定向就是类似于以写的方式向里面写入一些"xxx"然后关闭, 类似于下面代码展示. 在这里插入图片描述输入重定向(读): 同理, 只不过从输出(写)变成了输入(读). 一般写作: cat < 输入重定向在这里插入图片描述在这里插入图片描述
追加重定向: echo "xxx" >> filename

其实, 在上面我们还提到了Linux中一切皆文件的概念. 那下面来简单说一下:

Linux中, 一切皆文件

Linux一切皆文件的理解: 我们如何理解Linux中一切皆文件的模式呢? 主要是Linux可以以一种相对同一的管理模式处理各种东西, 比如对鼠标, 键盘, 显示器, 操作系统只需要对其进行写入不同的数据即可, 而对于软件, 也同样是给他读写不同的数据就可以进行方便的管理. 即使是我们自己的账号, Linux也是以一种文件的形式看待的. 比如 在这里插入图片描述在这里插入图片描述
在这里插入图片描述

OK, 很快的我们完成了ADD类的指令说明, 其实到这里就已经手写了3500字了, 有点累哈哈~ 那我们继续来写DELETE类的指令说明.

1.2 DELETE类

rmdir

语法: rmdir [-options] [dirname]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
注:remdir 只能删除空目录的命令
-p 当父目录也变成空目录的话,连带父目录一块删除。

实际上, 我们很少会去用上面这个指令, 因为只能删除空目录啊~~在下面的指令rm中, 既可以删除目录也可以删除普通文件, 非常方便.

rm

语法rm [-f -i -r -v][dirname]
适用对象:所有使用者
● -f 强制删除,无需询问确认
● -r 删除该目录下的所有文件, 删除一个目录需要带上这个选项在这里插入图片描述
● -i 删除前需要确认
注:rm删除是彻底删除,找回难度大。在这里插入图片描述

有时候, 我们会碰到一下想要删除当前路径下的所有文件的情况, 如何操作呢?

通配符

rm * -rf
其中, 这个*我们称之为通配符.

关机shutdown

语法shutdown [options]
● -h 系统服务停掉,立即关机
● -r 系统服务停掉,重新启动
● -t sec 设定sec秒后关机

不过需要注意的是, 一般服务器都是24小时运行的, 一般不会关机.因此一般不会用到这个指令

1.3 FIND类

whoami [user]

语法: whoami [user]
功能:查看使用Linux的人在这里插入图片描述

pwd [working path]

  • pwd 查看当前所处路径
    在这里插入图片描述

路径

路径是个啥?
/:斜杠, Linux的路径分隔符
\:反斜杠, Windows的路径分隔符
在这里插入图片描述
路径的意义: 系统层面标识一个特定的文件,标识一个文件的唯一性,这个类似于每个人所对应的身份证号一样。
路径的分类:
绝对路径: 上面两个截图都是绝对路径. 在这里插入图片描述

相对路径 其中,·和··就是一种相对路径,通常是用作当前文件路径的定位。
.. 就常常被用作回到上一级目录在这里插入图片描述. 一般就是方便执行本目录下的可执行文件…

Linux下的目录结构: 一个多叉树.在这里插入图片描述
比如某个路径: /home/bit/test.c在这里插入图片描述

stat [file]

语法stat [file]
功能:查看指定文件名的详细属性在这里插入图片描述
ACM时间:
access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。
modify time:表示最后一次修改文件内容的时间。
change time:表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。

ls [file/directory]

语法ls [options] [file/directory]
● ls 查看当前路径下的文件名属性
● -a 列出目录下的所有文件,包括隐含文件在这里插入图片描述
● -d 仅显示指定目录的属性信息, 而不是显示目录里面的内容
  比如说, 我们仅仅想看一下这个目录的属性, 而不是看目录里面有什么内容, 一般情况下, 我们ls 111就是查看的目录的内容, 如果我们想看目录本身的属性, 可以后面加个-d选项, 即ls -d 111在这里插入图片描述
● -l 列出该文件的详细信息, 即文件的所有属性(常用)在这里插入图片描述● -1 一行输出一个文件
● -R 列出所有子目录下的文件(递归)
● ls data*1 此处✳号是通配符的含义,标识查明以data开头,1结尾的数据。

文件的理解

文件 = 文件属性 + 文件内容
理解: 无论是文件属性还是文件内容都属于数据, 都需要保存在计算机内部进行存储.
注:这里的文件属性也属于数据,也需要占用空间,存储起来也需要占用硬盘空间的。

隐藏文件: linux中, 以点开头的命名的文件叫做隐藏文件
在这里插入图片描述
比较典型的两个隐藏目录, 一个是·, 当前路径; 另一个是··上一级路径
在这里插入图片描述
这个玩意类似于windows的退回到前一级目录的按钮: 在这里插入图片描述

which [Instruction Path]

语法which [instruction]
功能:打印出指定指令所在的系统路径在这里插入图片描述

那说到了如何查指令, 下面来说一下指令是个什么东西? 实际上, 指令一点也不神秘.

指令

指令, 可执行二进制文件, 程序都是一种东西, 都是可以被计算机运行的代码而已. 也属于文件的一种, 因此指令 = 文件内容 + 文件属性. 在这里插入图片描述在这里插入图片描述
因此安装和卸载在做什么? 安装就是把可执行程序文件拷贝到计算机中, 卸载就是把可执行程序文件在计算机中删除. 在这里插入图片描述

alias

alias是给另一个指令取别名在这里插入图片描述
比如上图, ll指令就是ls -l --color=auto这条指令的别名
当然, 我们自己也可以用alias给其他指令取别名. 比如我把回到上一层目录的指令cd …取名为back
在这里插入图片描述

man [instruction]

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man
语法: man [options] instruction
在这里插入图片描述
注: man默认情况下从上往下进行查找. 对于man的使用, 主要是用来查2号手册, 即系统调用.
man-pages的安装:

yum -y install man-pages

find [file]

语法:find [path] [-name] [filename]
find命令主要是可以用来查找某个文件的, 主要针对的是文件, 而which是针对的是指令. 在这里插入图片描述

cat [file] 适用于比较短的代码

语法cat [options] [file]
功能:查看目标文件的内容
● -b 对非空输出行编号
● -n 对所有行输出行编号
● -s 不输出多余空格
● tac 反向打印输出代码信息
● [无] 默认从键盘读数据,然后回显到显示器上

cat 如果直接写, 后面不写filename, 那么就是默认从键盘文件中读数据然后回显给显示屏文件. 这个可以结合 输入重定向 来理解.

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

在这里插入图片描述在这里插入图片描述

less [file]

语法less [file]
功能:查询文件
与之相似的是:less,head,tail
管道:[资源] | [拿取],一般用于指令集联

继续前面more的例子, 我们可以用less进行查看:
查看日志:

less /var/log/

在这里插入图片描述

head -line

该命令可以查看一个文件中的前几行…
在这里插入图片描述

tail -line

该命令可以查看一个文件中的后几行在这里插入图片描述

上面说了head, 和tail分别查看一个文件的前几行和后几行的指令, 有没有查看中间一段的指令呢?
下面我们来介绍管道

管道 |

如何拿到一个文件的中间一部分内容呢? 比如拿到8000到8010行代码:
方法很简单, 可以先搞一个head -8010放到temp.txt文件中, 然后再看该文件的最后十行即可. 在这里插入图片描述当然, 这种方法比较挫, 所以我们可以借用管道去传递数据. 在这里插入图片描述

wc [filename]

wc, 用来查看一个文件多少行. 在这里插入图片描述

tree [directory]

  • ree 以树状结构对目标目录进行展现在这里插入图片描述
    tree的安装:
yum install -y tree

在这里插入图片描述

wc [file]

  • wc -l [file] 以行为单位统计文件行数

grep [document content]

语法grep [content] [filepath]
● -v 不包含content的信息(反向选择)
● -i 忽略大小写
● -n 带行号

grep命令会读取文件内容, 然后按关键字过滤内容, 类似于我们windows中的ctrl + f
在这里插入图片描述

cal [calendar]

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
语法cal [options] [month] [year]
功能:用于查看日历等时间信息,如只有一个参数,则标识年份(1-9999),如有两个参数,则标识月份和年份
● -3 显示系统最近三个月在这里插入图片描述
● -j 显示在当年中的第几天在这里插入图片描述
● -y 显示当前年份的日历在这里插入图片描述

date [time]

语法格式date [option] [format]
功能:显示时间

TimeFormat
● %H 小时
● %M 分钟
● % S秒
● %X == %H:%M:%S
● %d 日
● %m 月
● %Y 年
● %F == %Y-%m%d
在这里插入图片描述

时间的重要性
时间是计算机中非常重要的概念.

这里涉及到一个概念, 叫做时间戳.
在这里插入图片描述在这里插入图片描述时间戳定义的意义在于: 统一全球时间, 方便网络传播发展. 在这里插入图片描述
SetTime
● date-s 设置当前时间,只有root权限才能设置,其他只能查看。
● date-s20080523 设置成20080523,这样会把具体时间设置成空00:00
● date-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" 这样可以设置全部时间

Timestamp
时间 -> 时间戳:date +%s
时间戳 -> 时间:date -d@[时间戳]
注:unix时间戳(英文为unix epoch,unix time,posix time或unix timestamp) 是从1970年1月1日(utc/gmt的午夜)开始所经过的秒数,不考虑闰秒。

bc

作用:用来处理基本的运算,Linux下的基本计算器。
用法echo 1+2+3+4+5+6+7 | bc在这里插入图片描述在这里插入图片描述

uname

语法:uname [options]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项
● -a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
● -r 内核在这里插入图片描述
在上面图例中, 我们看到了x86_64, 那下面我们来说一下CPU的架构分类.

CPU架构

CPU架构, 一般分为x32和x64,
x86, 即x32
x86_64, 即x64

linux版本信息

查看操作系统版本信息
通常, 我们可以在linux中可以直接查看linux系统版本, 这个信息一般存放在/etc/redhat-release文件中.

cat /etc/redhat-release

查看CPU相关信息

cat /proc/cpuinfo

在这里插入图片描述

查看内存信息

cat /proc/meminfo

在这里插入图片描述

查看版本信息

cat /proc/meminfo 查看内存信息
cat /proc/cpuinfo 查看cpu信息

OK, 我们终于把Find类说完了, 我们继续来说归类到Modify类中的指令.

1.4 MODIFY类

cd [directory]

语法:cd [directory]
功能:Change Directory, 改变工作目录
● cd ·· 返回上一级目录
● cd 绝对/相对路径 进入指定的路径的目录
● cd - 跳转到最近的一次路径下在这里插入图片描述● cd ~ 进入用户的家目录在这里插入图片描述在这里插入图片描述在这里插入图片描述其中, 用户目录下都有自己的桌面\音乐\文档\图片等等属于每个用户的文件夹, 只不过windows把桌面文件夹里面的内容以图形化的形式呈现出来了而已…

我们来普及一下Linux中用户的相关概念

用户

用户: 普通用户和超级管理员用户
默认登陆位置: 用户默认登陆位置是所属自己的家目录.
权限: 在Linux下, root是超级管理员账号, 拥有高于操作系统的权限. 而普通用户的权限较小. 在这里插入图片描述在这里插入图片描述

mv [file/directory]

用来移动文件或者文件改名。
语法:mv [options] [src] [dest]
● 当第二个参数是文件名时,mv完成重命名操作。
● 第二个参数是目录时,mv完成移动操作,其中操作文件或者目录可以有多个。在这里插入图片描述● -f 不在询问,直接覆盖
● -i 若目标文件已经存在,询问是否进行覆盖

clear [Screen]

● clear 清屏

zip/unzip [file/directory]

语法zip [options] [destfile.zip] [srctfile...]
功能:将目录或文件压缩成zip格式
● -r 递归处理,将指定目录下的所有文件和子目录一并处理
需要注意的是, 如果不写-r, zip就只会打包压缩一个空目录…

语法unzip [filename]
● -d 指明解压路径

下面来说一下关于打包和压缩的理解?

打包和压缩

打包和压缩?
  实际上, 打包和压缩是两个部分. 打包就是我们把一系列文件"打包"在一起, 就是放在一块, 这样发送文件的时候就很方便, 就不用一个一个发大量文件了.
而压缩呢? 就是把文件尽可能地把文件空间压缩一下, 就是把之前没压缩之前很大地文件, 压缩后可能就变小了很多, 这样很方便地发送.
为什么要打包和压缩?
● 缩小体积, 下载速度加快. 减轻网络负担, 提高用户体验.
● 减少文件丢失的可能性.

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 解压到指定目录
在这里插入图片描述

压缩包的网络传递

linux与本地windows文件传递

我们在Linux上建立的文件, 可以传到我们本地windows平台, 需要用到一个工具叫lrzsz, 具体去参见下一节内容的linux基础开发工具来看就好. 下面进行实践:
不过这里需要说一下相关的指令, rz, 就是receive zmodem, 就是接收文件; sz, 就是send zmodem, 即发送文件的含义. 在这里插入图片描述

两台linux机器文件互传

同样, 我们也可以把一台linux上的文件发送给另一台linux机器上.
需要用到scp网络拷贝命令, 指令格式是:

scp filename username@publicNetworkAddress:/folder

在这里插入图片描述

sz rz [xxx.zip/xxx.tgz]

该命令依赖于工具lrzsz
rz的含义是receive zmodem, zmodem是一种协议, 而sz是一种send zmodem, 具体的详情还是见下一节内容.
● sz 下载到本地
● rz 上传到云服务器
● scp Linux机器之间的文件传输

2.shell命令以及运行原理

2.1 是什么?

//shell外壳
/usr/bin/bash

在这里插入图片描述
  从技术角度,Shell的最简单定义:命令行解释器(command Interpreter),常见的shell程序是命令行和图形化界面。其中,shell是对外壳程序的总称,bash是具体化的一个外壳程序。
  外壳程序是什么? 外壳程序也属于软件, 是包裹在操作系统外部的, 更接近于用户的一层软件层面, 这个软件层对于指令而言就是命令行解释器, 它将用户的命令翻译给操作系统(内核)进行处理, 同时, 将内核的处理结果返回给用户.
  对于外壳的名称来说, shell指的是所有外壳程序的总称, 而bash, sh, 指的是一个特定的外壳程序.

2.2 为什么?

为什么要存在外壳程序?
● 建立用户与内核的联系。将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
● 对用户请求进行合法检查,变相一定程度上保护了操作系统内核。

2.3 怎么办?

shell外壳是怎么处理用户请求的呢? 对于一些非法命令是怎么进行处理呢?
创建子例程进行执行 对于真正的shell, 只在等待用户结果, 每次去进行命令, shell都会生成一个进程去处理, 这主要是应对用户的可能存在问题的指令从而避免shell的崩溃.

3.权限

3.1 权限是什么?

所谓权限的概念, 只不过是通过一定的标准或者条件, 去限制一部分人禁止通过, 而让另一部分人允许通过. 即访问某种资源是否被允许。eg:vip、门禁、
权限一般由两部分组成, 一种是人的角色, 另一种是事物的属性, 比如说, 你是否是爱奇艺会员? 因为你有爱奇艺VIP会员这个角色, 才能够观看VIP电影, 之后爱奇艺只能够提供观看影视, 观看直播等待服务, 不能提供旅行吃饭等服务, 因此说还与事物的属性有关, 因为爱奇艺只有视频方面的服务嘛…, 不过请注意, 权限关注的不是哪个人, 而是人的角色, 是否是公司的员工? 是否是VIP会员身份? …

权限的本质:人的角色 + 事物属性

3.2 Linux中的权限??? 角色+文件属性

对于Linux, 也是对人的角色和事物属性起作用的, 对于人的角色来说, 就被分为了超级管理员身份和普通用户身份, 对于前者最典型的特征就是基本不受权限的约束, 而对于后者权限会比较小.

Linux中的人? 与身份转换

Linux有两种人:
● root 超级管理员
● 普通用户

普通用户 -> 超级管理员
//方式1: 
su
//方式2: 
su -

有两种方式, 基本上是等价的, 但是略微有点区别, 区别在于su -这种方式是以root做重新登录, 进入会直接到root家目录. 而su是身份原地升级, 变成root, 工作路径不会发生改变.
需要注意的是, 普通用户变成超级管理员需要输入root密码.

指令提权: 在这里插入图片描述为什么sudo输入的是普通用户的密码? 想要进行sudo提权, 需要root超级管理员把普通用户添加进白名单里, 需要添加后的普通用户才可以进行sudo提权.

root -> 普通用户
su name

root账号可以直接变成任意已经存在的用户, 不用输入密码.

身份回退?
两种方式, ctrl + d 或者 exit指令
在这里插入图片描述

Linux中角色

针对于文件, 账号被分为三类角色, 即具体的角色需要具体的人来充当,扮演:
● 拥有者
● 所属组:其意义在于,在团队协作方面,更好的进行权限管理。
● 其他人(other)

为什么要有 组 的概念? 在多人协作的时候, 更好的进行权限管理.

文件权限值的表示方法

在这里插入图片描述  文件的属性分为三种, 即读r\写w\可执行x, 三三为一组, 分别对应拥有者, 所属组, 和其他人的权限对应. 其中文件属性的第一个字符, d(再上图中)表示文件属性是目录, 或者-表示普通文件…
  以任意一组来看, 第一个字符是否具有读权限, 第二个字符表示是否具有写权限, 第三个字符表示是否具有可执行权限.
  我们描述一个文件的权限时, 需要先说对应的人(角色), 再说对应的文件属性权限. 以上面例子来说, …文件对于拥有者来说, 具有读权限和可执行权限, 对于所属组来说也是具有读和可执行权限而对于其他人也是具有读和可执行权限.
在这里插入图片描述
● d 代表目录文件
● - 代表普通文件
● 共分为三组,第一组对应所属人权限、第二组对应所属组权限、第三组对应其他人权限
○ 第一个字符,标识读权限 是r否-
○ 第二个字符,标识写权限 是w否-
○ 第三个字符,标识执行权限 是x否-

3.3 权限的修改

权限的修改有两种方法,一是修改文件的权限,二是修改人物的角色即可。

第一种做法: 修改文件权限

修改权限的第一种方法就是修改文件的属性权限即可.
语法chmod [Role] [+/-] [Permissions] [filename]
功能:设置文件的访问权限
● R-> 递归修改目录文件权限
● 用户表示符+/-=权限字符
● +:向权限范围增加权限代号所表示的权限
● -:向权限范围取消权限代号所表示的权限
● =:向权限范围赋予权限代号所表示的权限
● 用户符号:
● u:拥有者
● g:拥有者同组用
● o:其它用户
● a:所有用户语法

下面是一些示例:
在这里插入图片描述在这里插入图片描述

文件权限属性与角色的关系:

  • 对于文件权限的设置, 可以由拥有者/root进行权限设置. 在这里插入图片描述

  • 即使是拥有者, 如果没有给自己设置权限, 自己也是读/写/执行不了的. (root除外)在这里插入图片描述

  • 对于人, Linux角色匹配只识别最近一个, 比如说, 如果一个人既属于拥有者, 所属组, 那么linux只匹配拥有者. 在这里插入图片描述注意:Linux系统对用户进行识别的时候,只识别一次。如果一个人既属于所有者但没有权限,又属于所有组有权限,那么该人也不能进行文件操作。

实际上, 针对于上面权限, 也有一种八进制数字表示范围: chmod [Role] [0xxx] [filename]在这里插入图片描述
比如, 如下所示:在这里插入图片描述
权限的意义:维护文件针对于普通用户的一般安全性。

除了修改文件属性权限之外, 我们还可以修改文件的拥有者, 所属组等等…即: 在这里插入图片描述在这里插入图片描述

下面进行详细谈论:

第二种做法: 修改文件角色

语法chown [参数] [用户名] [文件名]
功能:修改文件的拥有者

语法chgrp [参数] [用户组名] [文件名]
功能:修改文件或目录的所属组
● -R 递归修改文件或目录的所属组

注意:
● Linux支持修改角色的功能, 即修改一个文件的所属人, 所属组…
● 普通用户想要把自己的文件给别人, 需要root权限或者暂时指令提权也可以. 这个问题就是对应现实生活中给别人一个东西需要征得别人同意. 在linux中用root修改对于一个文件的角色即是强制修改. 在这里插入图片描述在这里插入图片描述

3.4 文件类型

Linux下文件类型的标识

对于Linux系统,是通过文件属性中的第一列文件属性标识符来进行区分文件类型的,而不是通过文件后缀名。但是需要注意的是,Linux系统内的其他东西,比如gcc需要后缀进行区分文件类型。在这里插入图片描述在这里插入图片描述● - 普通文件:包括文本文件、可执行程序、库等都叫做普通文件
● d 目录文件
● b 块设备文件 eg:磁盘, 举例ll dev/vda/这是第一块虚拟内存在这里插入图片描述● c 字符设备文件 eg:终端\显示器在这里插入图片描述● p 管道文件 mkfifo pipo 创建管道文件
在这里插入图片描述● l 链接文件 eg:快捷方式

我们对于Linux文件后缀的态度: 尽量带, 因为有些软件需要后缀使用, 而且也适合于我们windows的习惯.

文件的可执行权限

文件的可执行权限: 文件的可执行权限是什么意思呢? 下面进行详细讨论.
● 文件并不是有可执行权限就能够执行, 还看这个文件是否本身就是可执行的. 在这里插入图片描述

可执行 = 可执行权限 + 文件本身可执行.

目录的权限

● 目录的权限(经典的面试题).
○ x权限:进入一个目录
○ r权限:查看指定目录内的文件信息
○ w权限:能否在指定目录进行新建、删除、修改文件
○ 目录的读权限就是能否查看目录内有那些文件在这里插入图片描述

○ 目录的写权限就是能否增删改目录内的文件在这里插入图片描述

○ 目录的可执行权限就是是否能够进入目录内在这里插入图片描述

如何理解上面内容呢? 我们之前说文件 = 内容 + 属性, 目录也是一种文件, 毕竟Linux一切皆文件, 那么目录的内容是什么? 目录里面所有文件的属性信息, 目录的属性是什么? 也与普通文件一样, 也都是文件权限属性\修改时间,所属人,所属组…

默认权限的由来? 合理性?

默认权限设置的合理性?
普通文件的默认权限: 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)在这里插入图片描述

删除目录内的文件取决于目录的写权限.

易错点: 为什么我们普通用户可以删除超级用户的文件???
:删除一个文件与目标文件没关系。而与其所在的目录有关系。删除一个文件就等于修改目录的内容. 在这里插入图片描述

共享文件? 多个用户共同共享?

如果我们需要建立一个共享文件,来被共同访问,应该怎么建立?
首先这个文件不能在自己家目录里建文件。我们只能在系统的非用户目录下进行创建。为啥? 因为只有用户自己有权限, 其他人根本进不去.

把新建目录的组权限放开,然后把该目录设置为粘滞位(o-w,,任何人都可以建立文件,但是只有文件所有者把文件删除掉)。
粘滞位
当一个目录被设置为"粘滞位’(用chmod+t),则该目录下的文件只能由

  • 超级管理员删除
  • 该目录的所有者删除
  • 该文件的所有者删除
    即, chmod +t cataloguename

EOF