本篇文章接『Linux Shell知识点合集1』,主要包含Linux文件权限、管理文件系统、安装软件程序、编辑器使用等。


4. 理解Linux文件权限

Linux沿用了Unix文件权限的办法,即允许用户和组根据每个文件和目录的安全性设置来访问文件。Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文件就是/etc/passwd文件。现在,绝大多数Linux系统都将用户密码保存在另一个单独的文件中(叫作shadow文件,位置在/etc/shadow)。只有特定的程序(比如登录程序)才能访问这个文件。

添加新用户

向Linux系统添加新用户的主要工具是 useradd。可以一次性创建新用户账户及设置用户HOME目录结构。 useradd命令使用系统的默认值以及命令行参数来设置用户账户。

删除用户

从系统中删除用户,userdel可以满足这个需求。默认情况下,userdel 命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件(若需要,使用 -r 参数)。

修改用户

  • usermod:修改用户账户的字段,还可以指定主要组以及附加组的所属关系
  • passwd:见名知意,修改已有账户的密码

使用Linux组

为了更好(安全)的共享资源,Linux系统采用了另外一个安全概念:组(group)。每个组都有唯一的GID(跟UID类似,在系统上这是个唯一的数值),Linux系统上有一些组工具可以创建和管理你自己的组。

  • 创建新组groupadd命令可在系统上创建新组,在创建新组时,默认没有用户被分配到该组。 groupadd 命令没有提供将用户添加到组中的 选项,但可以用 usermod 命令来弥补这一点
  • 修改组groupmod命令可以修改已有组的GID(加 -g 选项)或组名(加 -n 选项)
  • 修改组名时,GID和组成员不会变,只有组名改变。由于所有的安全权限都是基于GID的, 你可以随意改变组名而不会影响文件的安全性
$$ \verb|groupadd| 命令\begin{cases} 添加分组\begin{cases} \verb|groupadd group_name| \\ 使用 \verb|usermod| 添加用户 \end{cases}\\ 更改组信息\begin{cases} 组名 \quad \verb|-n| \\ GID\quad \verb|-g| \end{cases}\\ \end{cases} $$

文件权限符

ls 命令可以用来查看Linux系统上的文件、目录和设备的权限。输出结果的第一个字段就是描述文件和目录权限的编码(例如:$\color{red}\verb|-rw-rw-r–|$ $\verb|1 rich rich 50 2010-09-13 07:49 file1.gz|$ )。标红部分有以下含义($1+3\times 3$):

  • 第一部分:对象属性($1$)
    • $\verb|-|$表示文件、$\verb|d|$表示目录、$\verb|l|$代表链接
    • $\verb|c|$代表字符型设备、$\verb|b|$ 代表块设备、$\verb|n|$代表网络设备
  • 第二部分:文件权限($3\times 3$)
    • 之后有3组三字符的编码,每一组定义了3种访问权限
    • 这3组权限分别对应对象的3个安全级别:对象的属主、属组、其他用户
    • $\verb|r|$表示可读、$\verb|w|$表示可写、$\verb|x|$代表可执行

默认文件权限

umask命令用来设置所创建文件和目录的默认权限。touch 命令用默认权限创建了这个文件。 umask命令可以显示和设置这个默认权限。

$ unmask
0022
$

其中$\color{red}\verb|0022|$中第一位代表“粘着位”,后面的3位表示文件或目录对应的 umask八进制值。umask 值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。因此,某种程度上来说它代表的是不拥有的权限。对文件来说,全权限的值是 666 (所有用户都有读 和写的权限);而对目录来说,则是 777 (所有用户都有读、写、执行权限)。 所以$\color{red}\verb|0026|$意味着文件权限是对组成员来说是只读的,而系统里的其他成员则没有任何权限。

改变权限

chmod 命令用来改变文件和目录的安全性设置。该命令的格式如下:$\verb|chmod options mode file|$。mode 参数可以使用八进制模式符号模式进行安全性设置。八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。

改变所属关系

chown 命令用来改变文件的属主,chgrp 命令用来改变文件的默认属组。

5.管理文件系统

基本的Linux文件系统

Linux最初采用的是一种简单的文件系统,它模仿了Unix文件系统的功能。

  • $\verb|ext|$文件系统
    • 扩展文件系统(extended filesystem,简记为ext):使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
    • ext文件系统采用名为索引节点的系统来存放虚拟目录中所存储文件的信息。
  • $\verb|ext2|$文件系统
    • 将允许的最大文件大小增加到了2 TB
    • ext2文件系统还改变了文件在数据块中存储的方式

日志文件系统

日志文件系统为Linux系统增加了一层安全性。先将文件的更改写入到临时文件(称作日志,journal)中。在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。Linux中有3种广泛使用的日志方法:

  • 数据模式:索引节点和文件都写入日志,丢失数据风险低,但性能差
  • 有序模式:性能与安全性之间折中
  • 回写模式:丢失数据风险高

操作文件系统

  1. 先在存储设备上创建分区来容纳文件系统
  2. 在将数据存储到分区之前,你必须用某种文件系统对其进行格式化
  3. 存储数据
$$ 创建分区\to 格式化(文件系统 \verb|ext4| 等)\to 存储数据 $$

逻辑卷管理

逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区。在逻辑卷管理的世界里,硬盘称作物理卷(physical volume,PV)。Linux系统将每个逻辑卷视为一个物理分区。每个逻辑卷可以被格式化成ext4文件系统,然后挂载到虚拟目录中某个特定位置。Linux系统使用逻辑卷来模拟物理分区,并在其中保存文件系统。Linux系统会像处理物理分 区一样处理逻辑卷,允许你定义逻辑卷中的文件系统,然后将文件系统挂载到虚拟目录上。