Linux(五)Linux命令详解之链接命令和权限管理命令

时间:2022-01-22 16:41:53

前言

上面一篇介绍了目录和文件的处理命令,其实在Linux中都是最常用的。
这一篇给大家介绍的是链接命令和权限管理命令!!!

一、链接命令:ln

1.1 ln命令概述

  • 命令名称:ln
  • 英文原意:link
  • 命令所在路径:/bin/link
  • 执行权限:所有用户
  • 功能描述:生成链接文件
  • 语法: ln -s 【源文件】【目标文件】
    -s 创建软链接
    不加 -s 创建硬链接
  • 链接又分为硬链接(Hard Link)和软链接(Soft Link)

1.2 ln命令常用参数

  • 必要参数
    1)-b 删除,覆盖以前建立的链接
    2)-d 允许超级用户制作目录的硬链接
    3)-f 强制执行
    4)-i 交互模式,文件存在则提示用户是否覆盖
    5)-n 把符号链接视为一般目录
    6)-s 软链接(符号链接)
    7)-v 显示详细的处理过程
  • 选择参数
    1)-S “-S<字尾备份字符串> “或 “–suffix=<字尾备份字符串>”
    2)-V “-V<备份方式>”或”–version-control=<备份方式>”
    3)–version 显示版本信息

1.3 硬链接

  • 硬链接简介
    硬链接相当于给文件起别名,当改硬链接文件修改时,对应的源文件内容也会随之更改。
    建立硬链接可以防止误删
    硬链接不能跨分区
    一般对于目录不能建立硬链接
  • 理解硬链接
    举例:我们在temp目录下,创建一个a.txt。为a.tx创建软链接b.txt和c.txt。
    当我们去删除a.txt发现c.txt和b.txt的内容还在。
[lance@master temp]$ touch a.txt
[lance@master temp]$ ln a.txt b.txt
[lance@master temp]$ ln a.txt c.txt
[lance@master temp]$ vi a.txt
[lance@master temp]$ cat a.txt 
i love java python R Go c c++
[lance@master temp]$ cat b.txt 
i love java python R Go c c++
[lance@master temp]$ cat c.txt 
i love java python R Go c c++
[lance@master temp]$ rm -rf a.txt 
[lance@master temp]$ ll
total 8
-rw-rw-r--. 2 lance lance 30 Mar 30 18:12 b.txt
-rw-rw-r--. 2 lance lance 30 Mar 30 18:12 c.txt
[lance@master temp]$ cat b.txt 
i love java python R Go c c++

我们通过从磁盘内部分析,当我们删除a.txt是,我们依然可以操作b.txt和c.txt,
并且当b.txt中的内容更改是,c.txt中的内容随之更改。
Linux(五)Linux命令详解之链接命令和权限管理命令
注意:b.txt和c.txt并不是一个文件,而是一个指向a.txt的一个数据而已,虽然看起来它是一个文件。

1.4 软链接

  • 软链接简介
    软链接相当于Windows文件系统中快捷方式
    软链接也叫符号链接(Symbolic)
    命令格式:ln [-s] source_file destination_file
    说明:加选项“-s”为创建软链接,不加为创建硬链接

  • 理解软链接
    举例:我们在lntest中穿件一个soft.txt,然后为它创建一个soft.txt.s的软链接,然后删除soft.txt。
    发现软链接是不可用的。

[lance@master ~]$ mkdir lntest
[lance@master ~]$ cd lntest/
[lance@master lntest]$ touch soft.txt
[lance@master lntest]$ ln -s soft.txt soft.txt.s
[lance@master lntest]$ ll
total 0
-rw-rw-r--. 1 lance lance 0 Mar 30 18:17 soft.txt
lrwxrwxrwx. 1 lance lance 8 Mar 30 18:18 soft.txt.s -> soft.txt
[lance@master lntest]$ rm soft.txt
[lance@master lntest]$ ll
total 0
lrwxrwxrwx. 1 lance lance 8 Mar 30 18:18 soft.txt.s -> soft.txt

我们使用绝对路径的soft.txt创建一个软链接为soft.txt.s1。使用ls -l查看发现
两个文件的大小不一样,指向的地址也是 不一样的。
Linux(五)Linux命令详解之链接命令和权限管理命令
当我们从磁盘中去分析时,可以知道,软链接的数据区存放的就是soft.txt的位置信息
Linux(五)Linux命令详解之链接命令和权限管理命令

1.5 总结软链接和硬链接

  • 软链接 前面是 l 开头的(link),而硬链接是 - 开头,表示文件。
  • 软链接所有者和所属组具有全部操作的权限,rwxrwxrwx;而硬链接不是。
    也就是软链接的前面都是 lrwxrwxrwx。
  • 软链接类似与 windows 的快捷方式,有一个明显的箭头指向,而指向的是源文件
  • 硬链接文件除了文件名与源文件不一样,其余所有信息都是一样的。
    类似于 cp 复制操作。但是又和复制不一样,硬链接可以同步更新。
  • 通过 ls -i 操作,来查看 文件的 i 节点。发现硬链接和源文件的 i 节点是
    相同的,而软链接与源文件的 i 节点是不同的。
  • 不允许将硬链接指向目录;不允许跨分区创建硬链接。

二、权限管理命令之更改文件或目录权限命令:chmod

2.1 chmod命令概述

  • 命令名称:chmod
  • 英文原意:change the permissions mode of a file
  • 命令所在路径:/bin/chmod
  • 执行权限:所有用户
  • 功能描述:改变文件或目录权限
  • 语法: chmod 【{ugoa}{+-=}{rwx}】【文件或目录】
    mode=421】【文件或目录】
    -R 递归修改

  • 【{ugoa}{+-=}{rwx}】解释:由三部分组成分别是:who、op、permissio
    1)who({ugoa}):表示用户或组,又分为u、g、o、a
      u:代表文件拥有者
      g:代表文件所属组
      o:代表文件除了拥有者和所属组之外的其他用户以及组
      a:表示上面所有的情况,即“a”表示文件的拥有者、所属组以及
        除当前拥有者和所属组之外的其他用户以及组。
    2)op({+-=}):表示修改用户对于文件权限的运算符,分为=、-、+
       “=” 表示设置权限,覆盖原来的权限
       “+” 表示当原来没有某个权限时,赋予改权限
       “-” 表示移除某个已拥有的权限
       注意 :+-依赖以前的权限, =不依赖以前的权限,重新赋权限。
    3)permission(rwx):表示用户或组对于文件的权限,分为r、w、x

举例:

chmod g-r file1
chmod u+x,go+w file2
chmod a=rw file3 

创建三个文件分别为a.txt、b.txt、c.txt,对于这三个文件修改权限为用户本人具有所有权限,
同组人具有读写权限,其他人没有任何权限。

zyh@udzyh1:~/test$ touch a.txt b.txt c.txt
zyh@udzyh1:~/test$ ls -l
total 0
-rw-r--r-- 1 zyh zyh 0 829 14:48 a.txt
-rw-r--r-- 1 zyh zyh 0 829 14:48 b.txt
-rw-r--r-- 1 zyh zyh 0 829 14:48 c.txt
zyh@udzyh1:~/test$ chmod u+x,g+w,o-r a.txt b.txt c.txt
zyh@udzyh1:~/test$ ls -l
total 0
-rwxrw---- 1 zyh zyh 0 829 14:48 a.txt
-rwxrw---- 1 zyh zyh 0 829 14:48 b.txt
-rwxrw---- 1 zyh zyh 0 829 14:48 c.txt
zyh@udzyh1:~/test$

a目录同组人增加写权限,其他人减去一个执行权限:

chomd g+w,o-x a

a.txt让所有人都读写执行的权限

 chmod a=rwx a.txt

注意:
 不是每一个Linux用户都有权限更改某个文件或目录权限,能更改文件或目录权限的只有两种用户
- 文件的所有者。我们通过ls命令查看某个文件的详细信息,可以看到该文件的所有者。
- root用户,这不用多说,root用户是linux系统权限最大的用户。别人不能干的事,root用户都能干。

2.2 用八进制表示权限

八进制表示权限的解释:r=4,w=2,x=1
Linux(五)Linux命令详解之链接命令和权限管理命令
由此八进制0到7的权限如下:

  • 7 表示 rwx
  • 6 表示 rw-
  • 5 表示 r-x
  • 4 表示 r–
  • 3 表示 -wx
  • 2 表示 -w-
  • 1 表示 –x
  • 0 表示 —

其中“777”也是由三部分组成:

  • 第一个7表示文件拥有者的读、写、执行权限
  • 第二个7表示文件同组人的读、写、执行权限
  • 第三个7表示文件其他人的读、写、执行权限

举例:

  • a.txt让所有人都读写执行的权限
chomd 777 a.txt
  • a自己读写执行,同组人和其他人读执行权限
chomd 755 a
  • 我们还可以递归赋予权限,也就是加上 -R 参数给指定目录下的所有文件或目录赋予指定权限。
    给 tmp 目录下所有文件和目录赋予 776 的权限
chmod -R 776 /tmp

三、权限管理命令之改变文件或目录所有者命令:chown

  • 命令名称:chown
  • 英文原意:change file ownership
  • 命令所在路径:/bin/chown
  • 执行权限:所有用户
  • 功能描述:改变文件或目录的所有者
  • 语法: chown 【用户】【文件或目录】

注意:能更改文件或目录的所有者用户是 root
这里我们通过useradd【用户名】命令创建用户,然后通过passwd【用户名】输入密码,
这两个命令后面会将。我们通过这两个命令创建 kevin 用户,密码为kevin的用户!

[root@master lance]# useradd kevin
[root@master lance]# passwd kevin
Changing password for user kevin.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

然后我们将lance.txt的所有者更改为 kevin 用户:chown kevin lance.txt
Linux(五)Linux命令详解之链接命令和权限管理命令

四、权限管理命令之改变文件或目录所属组命令:chgrp

  • 命令名称:chgrp
  • 英文原意:change file group ownership
  • 命令所在路径:/bin/chown
  • 执行权限:所有用户
  • 功能描述:改变文件或目录的所属组
  • 语法: chgrp【用户组】【文件或目录】

注意:能更改文件或目录的所属组用户是 root
我们用上面创建好的用户,将lance.txt的所属组修改为kevin
Linux(五)Linux命令详解之链接命令和权限管理命令

五、显示、设置文件的缺省权限命令:umask

  • 命令名称:umask
  • 英文原意:the user file-creation mask
  • 命令所在路径:shell 内置命令
  • 执行权限:所有用户
  • 功能描述:显示、设置文件的缺省权限
  • 语法: umask 【-S】
    -S 以rwx形式显示新建文件的缺省权限

可能大家不太了解这个命令,那我们执行以下看一下效果:

[lance@master ~]$ umask
0002
[lance@master ~]$ umask -S
u=rwx,g=rwx,o=rx

其中umask 执行显示结果是 0002,第一个0表示特殊权限,后面我们会单独进行讲解有
哪几种特殊权限。002表示权限的掩码值,我们用7 7 7 减去 0 0 2得到775(是每一
位相减),表示的就是下面通过加上-S输出的rwxrwxr-x,这个值用数字表示就是775.

这个意思说明创建一个文件的默认权限所有者为rwx,所属组为rwx,其他人为rx。也就是
说创建一个新文件默认权限为 rwxrwxr-x,我们创建一个文件来验证一下:

[lance@master ~]$ touch test.txt
[lance@master ~]$ ll
-rw-rw-r--. 1 lance lance        0 Mar 30 20:08 test.txt

我们发现使用touch命令创建了一个文件test.txt,然后发现权限并不是rwxrwxr-x,而
是rw-rw-r–。对比发现少了三个x,也就是少了可执行权限。这是为什么呢?

这是因为在Linux系统中,所有新创建的文件都是没有可执行权限的。这是出于Linux系统的
一种自我保护,因为类似的病毒木马程序都是具有可执行权限的。
所以在Linux系统中,新创建的文件是没有可执行权限的。
那么我们如何设置默认权限呢?比如我们想将新创建的文件权限设置为rwxrxr–,也就是754。
我们用777减去754得到023。也就是通过执行 umask 023 来完成默认权限设置。
Linux(五)Linux命令详解之链接命令和权限管理命令