【Linux 从入门到精通】第一篇 常见指令及初识权限


在这里插入图片描述


1.登录云服务器

ssp ip

ip形式:用户名@公网ip 如 root@1.1.1.1


2.用户管理

[uname] 显示系统信息,默认相当于[uname -s]

  • -a 显示系统所有相关信息
  • -m 显示计算机硬件架构
  • -n 显示主机名称
  • -r 显示内核发行版本号
  • -s 显示内核名称
  • -v 显示内核版本
  • -p 显示主机处理器类型
  • -o 显示操作系统名称
  • -i 显示硬件平台

[logout] 退出当前账户(快捷键:ctrl+d)

[useradd name1] 添加用户名字为name1

[passwd name1] 为name1用户添加(修改)密码

[userdel -r name1] 删除名为name1的用户

[touch test.c] 创建名为test的.c文件

[nano test.c] 使用nano文本编辑器处理test.c文件

[cat test.c] 显示test.c的内容

[gcc test.c] 编译test.c (生成默认名为a.out的可执行程序)

[./a.out] 运行a.out文件

[pwd] 当前用户所处目录

[which] 查找某一指令所在的文件路径

重要的热键与命令

  • ctrl+r:输入关键字搜索使用过的指令,将找回指令

  • Tab:提示不完整命令的所有可能命令,或者补全可唯一确定的不完整命令

  • ctrl+c:终止程序的执行

  • ctrl+l:清屏,等于指令clear

  • ctrl+d:相当于执行指令exit

  • history:显示历史命令

  • file:识别文件类型,也可用来辨别一些文件的编码格式。

3.Linux下基本指令

3.1 ls 指令(list files)

功能:显示当前目录下的所有子目录与文件。对于文件,将列出文件名及其他信息。

语法:ls [选项][目录或文件]

常用选项

  • -l 列出文件的常见属性

    语法:[ls -l] 可简写为 [ll]

    通过which指令可以查看ll是ls -l的别名(alias)

  • -a 列出目录下的所有文件,包含隐含文件(. 和…)

    -a 可以与 -l 结合使用[ls -al],查看所有文件的信息。

    语法:[ls -al 指定目录],查看该目录下的文件信息

  • -d 显示当前目录,并非显示其下的文件

    -d 与 -a -l 结合,显示该目录的信息

    语法:[ls -adl 指定目录]

  • -i 输出文件的i节点的索引信息

    语法:如[ls -ai 指定文件]

  • -1 一行只输出一个文件

  • -k 以k字节的形式表示文件的大小

  • -n 用数字的UID(用户账号),GID(组账号)代替名称

  • -r 对目录反向排序

  • -t 以时间排序(从最晚的修改时间的文件开始往前排序)

  • -s 输出目录下的文件及其大小(从大到小排序)

  • -R 列出所有子目录下的文件(递归)

  • -F 说明文件类型,* 为可执行的普通文件,/ 表示目录等

  • 注:

  • which指令:查看命令所在系统的路径

    指令自身是程序,而程序也就是文件

  • alias 指令:为系统的指令起别名

    语法:[alias newname=‘指令1’] newname将起到与指令1同样的作用

    仅在当前的登陆状态有效,下次重登该指令就无效了。尽量不要起别名,会污染命名池。

3.2 cd 指令(change directory)

Linux系统中,文件和目录将组成一棵目录树,树节点为目录文件或普通文件。叶子节点为普通文件或空目录。

功能:将当前目录改变到指定目录下

语法:[cd 目录名]

  • 通过绝对路径进入目录

    语法:[cd 绝对路径]

    绝对路径:从根目录为起点,一路直达目标目录的路径,由于目录树的节点都只有一个父节点,可保路径唯一,故称绝对路径。

  • 通过相对路径进入目录

    语法:[cd 相对路径]

    相对路径:从当前目录进入目标目录,由于起点的不唯一,终点相对与起点的路径称为相对路径,如果起点更换,相对路径自然要改变,而不能"刻舟求剑"。

    返回上级目录指令:[cd …]

  • [cd -] 返回最近所在的目录

  • [cd ~] 回到当前用户的家目录

    • root用户:回到 /root,相当于[cd /root]
    • 普通用户:回到当前用户名目录下,相当于[cd /home/当前目录名]

3.3 touch 指令

功能:1)新建一个不存在的文件。2)对于已存在的文件或目录,touch指令可更改其日期时间,包括存取时间个更改时间。

语法:[touch (选项) 文件]

  • 创建普通文件(不能用来创建目录)

  • 修改已有文件的存储时间和更改

    注意:查看文件属性的指令 [stat 文件]

    access,modify,change的时间都得到了修改

    • access time:最后一次访问文件的时间,仅是访问,不做修改。当“该文件内容被取用”(例如使用cat读取了)时,会更新该时间。
    • modify time:最后一次修改文件或目录内容的时间,当文件“内容数据”(只文件里面的内容,而不是属性或权限)更改时,这个时间会更新。
    • change time:最后一次改变文件或目录权限的时间,当文件的“状态”(权限或者属性)改变时,这个时间会更新。
  • [-a] 、[–time=atime]、 [–time=access]、 [–time=use] 可改变存取时间

    注意: change time也修改了,因为状态发生了改变

  • [-d] 后面可以接欲修改的日期而不用目前的日期,或用 --d=“日期或时间”。

  • [-m] 或[–time=mtime]或[–time=modify] 只更改modify time。

    这里的change time同样修改了

  • [-r] 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。使用指定file文件的时间戳(access,modify)更新文件的时间戳(access,modify)。

    注意:ctime发生了更改,变为当前时间。

  • [-t] 使用指定的日期时间,而非现在的时间,如如:07081556代表7月8号15点56分

    默认修改mtime

    -at 修改atime

3.4 mkdir 指令 (make directory)

功能:创建目录

语法:[mkdir (选项) dirname]

常用选项:

  • [-p],[–parent] 可以是一个路径名称(相对/绝对路径),递归建立多个目录。在路径树中新增路径和节点。

    注意:[tree]指令可以通过树形结构显示文件目录结构

    在root用户下输入指令[yum install -y tree]可使用tree指令。

3.5 rmdir 指令 (remove directory)

有建立目录的mkdir,就有相应的删除目录指令rmdir。rmdir的作用仅用于删除空目录

语法:[rmdir (选项) 目录名称]

常用选项

  • [-p] 递归删除指定的多级目录且要求每个目录也必须是空目录

  • [-v] 显示命令的详细执行过程

3.6 rm 指令 (remove file)

rm可以同时删除文件和目录, rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf)。所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。

语法:[rm (选项) 目录/路径]

常用选项:

  • [-r/R] 递归删除,删除目录及其下的所有文件

  • [-f] 忽略不存在的文件,不会出现警告信息

  • [-i] 删除前会询问用户是否操作

  • [-v] 显示指令的详细执行过程

    实例

  • 1)

    这里我们选择保留pp3.txt文件,故p1/p2/p3这条目录路径必须要保留,其他的全都删除。

  • 2)

    若存在文件则直接删除,无该文件也不会有任何提示。

  • 3)删除目录下的所有文件

  • 4)删除根目录下的所有文件(谨慎!)

3.7 man 指令 (manual)

功能:访问Linux的手册。

在root权限下输入指令[yum install -y man-pages],安装手册。

[man man]指令可查看man手册的概要与细节

  1. 用户命令的使用方法,可以使用的参数等
  2. 系统调用,只有系统才能执行的函数
  3. 库调用,大多是libc函数,如qsort(3)
  4. 设备和特殊文件
  5. 文件格式和约定
  6. 游戏
  7. 宏命令包和约定
  8. 系统管理命令,多数只有root可以执行
  9. 内核程序

注意:enter键下翻,q键退出查询,space按页下翻,b上翻一页,/字符串:在手册中查找字符串

语法: [man 命令]

常用选项:

  • -a 在所有的man帮助手册中搜索
  • -d 主要用于检查,如果用户加入了一个新的文件,就可以用这个参数检查是否出错
  • -f 显示给定关键字的简短描述信息
  • -p 指定内容时使用分页程序
  • -M 指定man手册搜索的路径
  • -w 显示文件所在位置

实例:

  • 1)查看cp命令的帮助信息

  • 2)查看passwd的文件信息

  • 3)查看passwd文件的所在位置

  • 4)查看passwd在manual手册页中的位置

3.8 cp 指令 (copy file)

功能: 复制文件或目录。

语法:[cp 选项 src dst]

注意:cp指令会指定两个以上的文件或目录src,他会将之前指定的文件或目录复制到目的地dst中。

只给目的地路径而不给名称,那么会在目的地复制一份同名文件

只给名称而未指明目的地路径的情况下,目的文件将拷贝在当前的目录中:

常用选项

  • [-r] 递归处理,使用该指令将目录及其下的目录和文件进行拷贝,(注:cp命令默认是不能复制目录的,需要加参数 -r)。

    如果直接拷贝目录将出现下面的报错:

    添加-r:

  • [-f] 或[–force] 强行复制文件,不论目的文件或目录是否已经存在,覆盖不会询问。

  • [-i] 或[–iteractive] ,与-f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

  • [-rf] 这两个选项经常连用,用来拷贝目录。

  • 通配符*

3.9 mv 指令 (move file)

mv是一个使用频率很高的指令,用于移动文件和将文件重命名。

语法:[mv 选项 src文件 dst文件]

功能:mv命令好像文件“搬家”,文件名称发生改变,但个数并未增加。

常用选项

  • [-i] 若存在同名文件,则向用户询问是否覆盖
  • [-f] 覆盖已有文件时,不进行任何提示
  • [-b] 当文件存在时,覆盖前为其创建一个备份
  • [-u] 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

实例

  1. 将file重命名为file1

  2. 将file1文件移动到A中

  3. 将A移动到E(E目录不存在,则A改名为E)

  4. 将E目录下的所有文件移动到当前目录下

3.10 cat 指令 (Concatenate )

功能:用于连接文件并打印到标准输出设备上。

语法:[cat 选项 文件]

常用选项

  • [-n] 显示行号。(空行带编号)

  • [-s] 显示行号。(多个空行算一个编号)

  • [-b] 显示行号。(空行不算编号)

  • [-E] 每行结束显示$字符

  • 不输入文件名,将从标准输入读取

3.11 tac 指令

功能:逆序输出文件内容

语法:[cat 文件]

3.12 more 指令

功能:用于将内容较长的文本文件内容(不能在一屏显示完)进行分屏显示,并且支持在显示时定位关键字。而对于内容较少的文本文件内容则推荐使用cat命令查看。

语法:[more 选项 文件]

常用选项

  • [-num] 指定每屏显示的行数

  • [-p] 先清除屏幕(往上翻旧内容还在),再显示新内容

  • [-c] 与p类似,但会将旧内容清除,甚至还清除了指令

  • [+num] 从num行开始显示

  • [+/pattern] 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示

执行more命令的内部操作

  • spce键:显示下一屏内容

  • b键:显示上一屏

  • enter键:向下显示n行,默认为1行

  • q键:退出more指令

  • h键:帮助

  • /pattern:文件中搜索下一个匹配pattern字符的位置

  • =:输出当前的行号

注意:more键无法按下“↑”“↓”对内容上下翻。

3.13 less 指令

功能:less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,浏览文字档案的内容,用less命令显示文件时,PageUp键向上翻页,PageDown键向下翻页,要退出less程序,应按Q键。

语法:[less 选项 文件]

  • [-b] 置缓冲区的大小

  • [-e] 当文件显示结束后,自动离开

  • [-f] 强迫打开特殊文件,例如外围设备代号、目录和二进制文件

  • [-g] 只标志最后搜索的关键词

  • [-i] 忽略搜索时的大小写

  • [-m] 显示类似more命令的百分比

  • [-N] 显示每行的行号

  • [-o] 将less 输出的内容在指定文件中保存起来

  • [-Q] 不使用警告音

  • [-s] 显示连续空行为一行

  • [-S] 在单行显示较长的内容,而不换行显示

  • [-x] 将TAB字符显示为指定个数的空格字符

3.14 head 指令

功能:head命令以行为单位,取文件的内容,后面不接参数时默认打印前10行。

语法:[head 选项 文件]

常用参数

  • [-n] 后面接数字,或者直接数字,代表显示几行的意思

  • [-c] 指定显示头部内容的字符数

  • [-v] 总是显示文件名的头信息

  • [-q] 不显示文件名的头信息

3.15 tail 指令

功能:显示文件尾部的内容,默认10行。

语法:[tail 选项 文件]

常用选项

  • [-n] 打印需要的行数

  • [-f] 循环读取,不断刷新最新的内容。

输出部分区域

在1000行的文件中我们只想查看490-500行的内容,那我们可以将文件的前500行输入到临时文件中,再利用tail查看末尾的10行:

这里是使用了指令 >

重定向:

  • > 指令为输出重定向,将head本当输出到标准输出的文件重新定向输出给目标文件中(文件存在则先清空原始内容再重新写入,否则新建文件)如果保留原始内容再追加内容则使用 >> ——追加重定向,但是这样做牺牲了空间又繁琐,我们将采用指令 | (管道)。

  • < 输入重定向

  • | 为命令行管道,左侧为入口负责产生数据,右侧出口读取数据。左侧处理的结果交给管道后面继续处理。

    “管道”可以多重处理

    使用管道实际上是默认隐式的发生了重定向

3.16 date 指令

功能:显示时间

语法:[date 选项 输出格式]

常用格式

使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下

  • %H : 小时(00…23)

  • %M : 分钟(00…59)

  • %S : 秒(00…61)

  • %X : 相当于 %H:%M:%S

  • %d : 日 (01…31)

  • %m : 月份 (01…12)

  • %Y : 完整年份 (0000…9999)

  • %a : 周几

  • %F : 相当于 %Y-%m-%d

  • %T : 相当于 %H:%M:%S

  • [date --help] : 查看更多格式及选项。

时间戳

  • 时间 -> 时间戳:[date +%s] ,从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

  • 时间戳 -> 时间:[date -d@时间戳] 。

3.17 状态查看指令

  1. free 指令 - 查看内存的使用情况
  2. netstat 指令 – 显示网络状态
  3. top命令 – 实时显示进程动态
  4. df命令 – 显示磁盘空间使用情况

3.18 cal 指令 (calendar)

功能:显示日历

语法:[cal 选项 月份 年份]

常用选项

  • [-1] 单月分输出日历

  • [-3] 显示最近三个月的日历

  • [-s] 将星期天作为月的第一天

  • [-m] 将星期一作为月的第一天

  • [-j] 显示在当年中的第几天(儒略日)

  • [-y] 显示当年的日历

3.19 find 指令 (重要)

功能:在指定的路径下查找文件或目录,和管道结合使用可以实现复杂的功能,是系统管理者和普通用户必须掌握的命令。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间。

语法:[find 路径 选项 查找范围]

常用选项

  • [-name] 按名称查找
  • [-size] 按大小查找
  • [-user] 按属性查找
  • [-type] 按类型查找
  • [-iname] 忽略大小写
  • [-maxdepth] 最大深度
  • [-mindepth] 最小深度

实例

  • 按路径查找文件

  • -name

    • 按名称查找

    • 按后缀名查找:在/home/sjl/file 目录下,查找后缀为.c的文件

  • maxdepth ,mindepth

  • size

    • -size 20K # 查找大小为20K的文件
    • -size -20K # -表示小于;查找比20K小的文件
    • -size +20k # +表示大于;查看比20K大的文件

3.20 grep 指令

功能:(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

语法:[grep 选项 搜索字符串 文件]

常用选项

  • [-i] 搜索时,忽略大小写

  • [-c] 只输出匹配行的数量

  • [-l] 只列出符合匹配的文件名,不列出具体的匹配行

    通配符的使用

  • [-n] 列出所有的匹配行,显示行号

  • [-h] 查询多文件时不显示文件名

  • [-s] 不显示不存在、没有匹配文本的错误信息

  • [-v] 显示不包含匹配文本的所有行

  • [-w] 匹配整词

  • [-x] 匹配整行

  • [-r] 递归搜索,不仅搜索当前目录,还搜索子目录

  • [-q] 禁止输出任何结果,已退出状态表示搜索是否成功

  • [-b] 打印匹配行距文件头部的偏移量,以字节为单位

  • [-o] 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

  • grep与 |合用

3.21 zip 指令

功能:将一个或多个压缩文件以及有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到zip存档中。

语法:[zip 选项 压缩文件.zip 目录或文件]

常用选项

  • [-q] 不显示指令执行过程

  • [-r] 递归处理。默认情况下的zip只对指定文件或目录压缩,如想将指定目录下的所有文件和子目录,或者多个目录和文件一并处理需要添加此选项。

  • [-d] 删除压缩文件的指定文件。

    此处删除压缩包file目录下的A1-A5的txt文件

  • [-z] 替压缩文件加上注释

  • [-v] 显示指令执行过程或显示版本信息

  • [-n<字尾字符串>] 不压缩具有特定字尾字符串的文件

3.22 unzip 指令

功能:unzip命令是用于.zip格式文件的解压缩。不指明路径将默认解压在当前目录下

语法:[unzip 选项 文件]

按gzip算法压缩,后缀为tar.gz,简写为tgz

常用选项

  • [-d] 指明解压路径

    我们将file文件的备份压缩包file_backup.zip 解压到test目录中

  • [-v] 查看压缩文件内容信息

  • [-l] 显示压缩文件内所包含的文件

  • [-c] 将解压缩的结果显示到屏幕上,并对字符做适当的转换

  • [-n] 解压缩时不要覆盖原有的文件

  • [-j] 不处理压缩文件中原有的目录路径

3.23 tar 指令 (tap archive 磁带归档)

功能:利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。

tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

语法:[tar 选项 文件或目录]

常用选项

  • [-c] :建立一个压缩文件的参数指令(create 的意思);

  • [-x] :解开一个压缩文件的参数指令!

  • [-t] :查看 tarfile 里面的文件!

  • [-z] :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

  • [-j] :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

  • [-v] :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

  • [-f] :使用档名,请留意,在 f 之后要立即接档名!不要再加参数!

  • [-C] : 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录。

  • [-p] : 保留原来的文件权限与属性

    • 压缩

    如果是-cvf,则是打包不压缩。

    • 查看压缩包的文件

    由于我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要!

    • 解压

    • 解压到指定目录

    我么也可以事先跑到backup的工作目录底下,在进行解压,则默认解压到当前的工作目录:

3.24 bc指令

功能:bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。

与管道 | 结合使用

Linux快捷键

Ctrl + a 切换到命令行开端,Home键亦可但不通用。

Ctrl + e 切换到命令行末尾,End键亦可但不通用。

Ctrl + l 肃清屏幕内容,效果同等于clear

Ctrl + u 肃清剪切光标之前的内容

Ctrl + k 剪切肃清光标之后的内容

Ctrl + y 粘贴方才使用ctrl+u/k时所删除的字符
此命令强悍,删除的字符有能够是几个字符串,但极有能够是一行命令。

Ctrl + r 在历史命令中查找 (这个十分好用,输出关键字就调出以前的命令了)

Ctrl + c 终止命令

Ctrl + d 登出

Ctrl + z 暂停进程并转入后台

!! 执行上一条命令

history 显示你一切执行过的编号+历史命令。这个可以配合!+编号来执行某命令

↑(Ctrl+p) 显示上一条命令

↓(Ctrl+n) 显示下一条命令

!$ 显示零碎最近的一条参数

这个很有用,比方我先用cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用vim编辑。普通的做法是先用↑ 显示最初一条命令,然后用Home挪动到命令最前,删除cat,然后再输出vim命令。其实完全可以用vim !$来替代。

4. shell 简介

我们与操作系统(Windows,Ios,Android等)通过图形化界面(GUI)进行交互,比如我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

Linux是一个操作系统,Linux核心称之为"kernel",由于安全,复杂,繁琐等原因,我们一般用户不会直接接触内核,而是通过kernel的“外壳”程序,即shell,来与kernel沟通。用户和内核之间增加了一层“代理”,既能简化用户的操作,又能保证内核的安全。

shell的简单定义:命令行解释器

  • 将使用者的命令翻译给核心(kernel)处理。
  • 将核心处理的结果翻译给用户。

shell 程序本身的功能如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。

Shell运行原理:

  1. 创建子进程,让子进程进行命令行解释。
  2. 子进程出现任何问题,都不影响父进程Shell。

对比到Windows当中就是,我们每运行一个程序就是创建了一个子进程,例如,开启vs、QQ。而这些子进程当中任何一个进程出现问题,都不会影响父进程,例如,当你的QQ出现卡死情况(程序异常)或你的QQ被关掉(程序终止),但其他子程序仍然可以运行。

Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。


5. Linux 的权限概念

Linux分为两类用户:超级用户和普通用户

  • 超级用户(root):不受限制,可做任何事情。
  • 普通用户:由root创建的用户,受到权限约束。一般只能在自己的工作目录下(/home/xxx)工作,以及在系统上做有限的工作。

超级用户的命令提示符是’#’,普通用户的命令提示符是’$’。

5.1 用户的切换

5.1.1 su 指令

切换普通用户和超级用户的指令:[su 用户名]

例如,要从root用户切换到普通用户user,则使用 [su user],不用输入普通用户的密码 。 要从普通用户user切换到root用户则使用 [su root](root可以省略)或者是[su -],此时系统会提示输入root用户的密码。

[su]和[su -]的区别

  • [su] 切换root后,当前路径不变
  • [su -] 进入root后,当前路径为root家目录

退回原来账户可输入指令[exit]或快捷键ctrl+d。

5.1.2 sudo指令

如果只是短暂提升权限,暂时使用root权限执行一些命令,可以使用sudo指令。

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。

sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。

普通用户在使用sudo前,首先需要让root对其添加信任关系。

语法:[sudo 选项]

功能:暂时获得root身份来执行指令。

常用选项

  • -V 显示版本编号
  • -h 会显示版本编号及指令的使用方式说明
  • -l 显示出自己(执行 sudo 的使用者)的权限
  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为5)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在背景执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
    command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令。

注意:[sudo su]与[su]指令都能是当前的普通用户进入root用户,区别在于:

  • [su]要输入root密码
  • [sudo su]需输入当前普通用户的密码(root提前添加好信任关系)

5.2 Linux的权限管理

理解权限:特定用户能做特定对应的事。

所以修改权限主要就是两种:

  • 要么是约束特定的用户
  • 要么就是约束特定事物的属性。

不同用户具有不同的权限,毎个用户在权限允许的范围内完成不同的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

5.2.1 文件访问者的分类(用户)

而Linux中的用户类别主要分为如下三类:

  1. 文件拥有者 owner
  2. 文件所属组 group
  3. 其他 other (除去拥有者和所属组的其他成员

注意

  • 这三个类别就是超级用户和普通用户扮演的。
  • 所有用户必须有一个所属组,哪怕组中只有一个用户(此时的所属组名为其用户名)。

用户和组的关系

首先回答一个疑问,为什么要有组的概念?

假设在一个公司中有AB两个团队同时开发一款软件,最终将由公司择优。那么AB在同一服务器上,就不能向对方公开自己的代码。于是A,B就分别在服务器划了属于自己成员的所属组,其代码只有拥有者和所属组可见,而other(对方团队和项目之外的人)不可见,这样就保证了代码的安全性。所以所属组的存在是为了更灵活的进行权限配置,满足团队协作。

  • 查看用户信息

用户和用户组的对应关系有以下 4 种:

  1. 一对一(你自己):一个用户可以存在一个组中,是组中的唯一成员;
  2. 一对多(领导):一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
  3. 多对一(同事):多个用户可以存在一个组中,这些用户具有和组相同的权限;
  4. 多对多(跨部门):多个用户可以存在多个组中,也就是以上 3 种关系的扩展。

5.2.2 文件类型和访问权限(事物)

Linux 中一切皆为文件,文件类型也有多种,使用 ls -l 命令可以查看文件的属性,所显示结果的第一列的第一个字符用来表明该文件的文件类型,如下:

1. 文件类型

  • d :目录文件

  • - :普通文件

  • c :字符文件

  • b :块设备文件

  • p :管道文件:进程间通信

  • l :软链接文件,类似于windows中的快捷方式

  • s :套接口文件

2. 权限

文件的具有的权限属性:r(读) + w(写) + x(执行)

  • i. 读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • ii. 写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • iii. 执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • iv. “—”表示不具有该项权限
  • v. 第一个 rwx 表示该文件的所有者对该文件的权限;第二个 rwx 表示该文件所属组对该文件的权限;第三个 rwx 表示其他用户对该文件的权限。

3. 文件权限的表示方法

  • 字符表示方法:
    Linux表示说明Linux表示说明
    r–只读-w-仅可写
    –x仅可执行rw-可读可写
    r-x可读可执行-wx可写可执行
    rwx读写执行无权限
  • 8进制表示方法:相应位置具有权限则用以1表示,无权限用0表示

    权限符号八进制二进制
    r–4100
    -w-2010
    –x1001
    rw-6110
    r-x5101
    -wx3011
    rwx7111
    00

  • 注意:超级用户(root)几乎不受权限约束。

5.2.3 文件权限的相关设置方法

  • a) chmod 指令 (“change the permissions mode of a file”——change mode)更改用户使用文件的权限

    语法: [chmod 选项 mode 文件]

    选项:

    • -c : 若该文件权限确实已经更改,才显示其更改动作
    • -f : 若该文件权限无法被更改也不要显示错误讯息
    • -v : 显示权限变更的详细资料
    • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
    • –help : 显示辅助说明
    • –version : 显示版本

    mode:权限设定字符,格式如下

    [u/g/o/a] [±=] [rwxX]

    其中:

    • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    • +表示增加权限、- 表示取消权限、= 表示唯一设定权限。
    • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

    注意 :文件权限可由八进制表示

    我们可以直接用三位八进制数来修改三个用户(user,group,other)的权限

    实例

    • [chmod 三位八进制数 文件] 将文件的权限修改为八进制数对应的权限

    • [chmod u-r 文件] 拥有者减去读权限

    • [chmod g-rwx 文件] 使文件的所属组没有权限

    • [chmod a-rwx 文件] 使三者都无权限,
      默认情况下就是a的权限修改,即[chmod -rwx] 和 [chmod a-rwx] 相同

    • [chmod u+rwx,g+rwx,o+rwx 文件] 等同于 [chmod a+rwx 文件]

    • [chmod u=w 文件] 只设定=号后的权限

    • root 自身几乎无视权限的约束,可以给任意普通用户修改权限

      但是可执行权限,无法无视,需要自行打开(设置门槛,防止误操作执行一些文件)。

  • b) chown 指令 更改文件的拥有者,或者一并修改拥有者和所属组

    Linux属于多用户多任务操作系统,所有文件皆有拥有者。

    利用 chown命令可以将指定文件的拥有者改为指定的用户或组。用户可以是用户名或者用户ID,组可以是组名或是组ID,文件是以空格分开的要改变权限的文件列表,支持通配符。

    一般来说,这个指令仅限root使用,普通用户没有权限改变文件所属者和所属组。

    语法:[chown 选项 用户名(:组名) 文件名]

    注意:普通用户更改需要得到用户名的权限。
    常用选项

    • -R 对目前目录下的所有文件与子目录进行相同的拥有者变更
    • -c 若该文件拥有者确实已经更改,才显示其更改动作
    • -f 若该文件拥有者无法被更改也不要显示错误讯息
    • -h 只对于连结(link)进行变更,而非该 link 真正指向的文件
    • -v 显示拥有者变更的详细资料
    • –help 显示辅助说明
    • –version 显示版本

    实例

    • root身份下,更改普通用户文件的拥有者为root(显示更改动作)

    • 将当前目录下所有文件的拥有者都改为root,用户组改为 sjl:

  • c) chgrp 指令 更改文件的用户组

    语法:[chgrp 选项 用户组名 文件名]

    常用选项

    • -c 效果类似”-v”参数,但仅回报更改的部分
    • -f 不显示错误信息
    • -h 对符号连接的文件作修改,而不更动其他任何相关文件
    • -R 递归处理,将指定目录下的所有文件及子目录一并处理
    • -v 显示指令执行过程
    • –reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

    实例

普通文件:

  • 改变文件的用户组

    我们发现root.txt这个文件的拥有者是sjl,如果我们在sjl用户权限下使用chgrp,是可以直接改回sjl用户组的,而不用再获取原来组的权限。(文件拥有者具有改回文件所属组的权力

  • 根据指定文件改变文件的群组属性

注意:文件的创建者与文件的拥有者并不挂钩。

5.2.4 目录文件的权限

  1. 针对目录文件,r 权限意味着能不能查看目录下的内容,w 权限意味着是否能在该目录下创建文件

    于是无法查看目录的情况下,也可以往该目录下创建文件。

  2. 进入目录即更改当前路径。具有 x 权限,即拥有进入该目录的权限。此处我们不能查看file下的文件,但可以进入file目录:

  3. 如果目录文件有 r 权限却没有 x 权限,那么我们只能得知该目录下的文件名,别的一概不知。

  4. 如果other用户具有目录的 w 权限,那么other就可以删掉此目录下任何文件。

    如果other用户没有目录的 w 权限,那么other就不可以删掉此目录下任何文件。

    这里身为test目录的other身份的sjl用户删除了test目录下的文件root_file1.txt,而且该文件对于other用户来说是只读的,却被sjl破坏。

    为了让other用户只能管理自己的文件,而不侵犯其他用户的文件

    这里提出需求:如何使具有w权限的other用户在此目录下只拥有管理自己文件的权限,而不能删除该目录下的其他用户文件

    Answer:粘滞位

    功能:设置了粘滞位的目录,在该目录下,只有文件的拥有者(以及root)可以修改。

    语法:[chmod (o)+t 目录名]

    注意:粘滞位只能对目录进行设置,一般用于限制other权限

    other用户无法在此目录下对其他不属于他的文件造成破坏。

    当一个目录设置为“粘滞位”(chmod +t),则该目录下的文件只能由

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

    说到底,粘滞位是为了,让other进入目录,在其下能够管理好自己的文件,并且不去影响他人的文件。多数情况下,设置粘滞位的文件所有者为root。

    粘滞位的实际应用

    系统中产生的临时数据存放在/tmp目录下,说明tmp需要对多个用户放开。与此同时这些来自于多个用户的临时数据不能相互影响。

5.2.5 默认权限与权限掩码(umask)

默认权限:

普通文件的起始权限——666(110 110 110,rw-rw-rw-)

目录文件的起始权限——777(111 111 111,rwxrwxrwx)

最终的默认权限需要由权限掩码对起始权限过滤而来。

umask——权限掩码

首位的0表示八进制,

凡是在umask中出现的,都应该在起始权限中去除。

剩下的002的二进制为:000 000 010 (— --- -w-)

  • 掩码的使用:

    默认权限=(~umask)&(起始权限)

例如普通文件:

(110 110 110)&(~umask)
=(110 110 110)& (111 111 101)
=  110 110 100 (rw- rw- r--)

目录文件

(111 111 111) & (111 111 101)
= 111 111 101 (rwx rwx r-x)

于是我们可以通过修改umask来自定义默认权限

例如我们想让文件只具备读权限(去掉w和x权限),umask=0333

注意:定制的umask只在本次登陆有效。如要永久有效则需要修改配置文件(不建议)。


青山不改 绿水长流

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值