# Linux_Command_Line_and_Shell_Scripting_Bible_3E **Repository Path**: dawin_gitee/Linux_Command_Line_and_Shell_Scripting_Bible_3E ## Basic Information - **Project Name**: Linux_Command_Line_and_Shell_Scripting_Bible_3E - **Description**: No description available - **Primary Language**: Shell - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux_Command_Line_and_Shell_Scripting_Bible_3E #### 介绍 因项目需要,学习Shell命令,加深印象。——每天进步一点点! # 第 6 章 使用Linux环境变量 ## 6.1 什么是环境变量 ### - 全局变量 ### - 局部变量 #### 6.1.1 全局环境变量 - 查看全局环境变量,可以使用printevn或者env命令 - 要显示个别环境变量的值,可以使用printenv命令,但不要使用env命令:`$ printenv HOME` - 使用echo显示变量的值:`$ echo $HOME` #### 6.1.2 局部环境变量 - 查看局部环境变量的列表有点复杂,Linux系统没有一个只显示局部环境变量的命令。 - set命令会显示为某个特定进程设置的所有环境变量,包含局部变量、全局变量以及用户定义的变量。 ## 6.2 设置用户定义变量 #### 6.2.1 设置局部用户定义变量 ``` $ echo $my_variable $ $ my_variable=Hello $ echo $my_variable ``` - 含有空格的字符串值,必须单引号来界定字符串的首和尾 - 设置了局部环境变量后,就能在shell进程的任何地方使用它。但是如果生成了另外一个bash,它在子shell中就不可用。 - 一旦退出子进程,该局部环境变量就不可用 #### 6.2.2 设置全局环境变量 - 创建全局环境变量的方式是先创建一个局部环境变量,然后把它导出到全局环境中 ``` $ my_variable="I am Global now" $ $ export my_variable $ $ echo $my_variable ``` - 修改子shell中全局环境变量并不会影响到父shell中该变量的值 ## 6.3 删除环境变量 ``` $ echo $my_variable $ unset my_variable $ echo $my_variable ``` ## 6.4 默认的shell环境变量 ## 6.5 设置PATH环境变量 对环境变量的修改只能持续到退出或重启系统 ## 6.6 定位系统环境变量 #### 6.6.1 登录shell - `/etc/profile`文件是系统上默认的bash shell的主启动文件。 - shell会按照下列顺序,运行第一个被找到的文件,余下的则被忽略: ``` $HOME/.bash_profile $HOME/.bash_login $HOME/.profile ``` - `$HOME/.bashrc`文件通过其他文件运行 #### 6.6.2 交互式shell进程 - 如果bash是作为交互式shell启动的,它就不会访问`/etc/profile`文件,只会检查用户HOME目录中的.bashrc文件 - .bashrc文件有两个作用:一是查看/etc目录下通用的bashrc文件,二是为用户提供一个定制自己的命令别名和私有脚本函数的地方 #### 6.6.3 非交互式shell #### 6.6.4 环境变量持久化 在大多数的发行版中,存储个人永久性bash shell变量的地方是`$HOME/.bashrc`文件。可以把自己的alias设置放在`$HOME/.bashrc`启动文件中,使其效果持久化。 ## 6.7 数据变量 ## 6.8 小结 # 第7章 理解linux文件权限 ## 7.1 Linux的安全性 #### 7.1.1 /etc/passwd文件 编辑/etc/passwd文件是极其危险的行为,如果该文件损坏,系统无法读取内容,导致用户无法正常登录。 #### 7.1.2 /etc/shadow文件 /etc/shadow文件对Linux系统密码管理提供更多的控制,可以更好的控制用户密码。 #### 7.1.3 添加新用户 - useradd用于向linux系统添加新用户,可以一次性创建新用户账户及设置用户HOME目录结构 - `/usr/sbin/useradd -D`查看所用linux系统中的默认值 - `useradd -m test`用默认系统参数创建一个新用户账户,会复制系统启动文件到新用户目录 #### 7.1.4 删除用户 - userdel命令默认情况下只删除/etc/passwd文件中的用户信息,不会删除系统中属于该账户的任何文件 - `/usr/sbin/userdel -r test`加上-r参数,userdel会删除用户HOME目录以及邮件目录。 #### 7.1.5 修改用户 1. usermod: 用于修改用户账户。`-l`修改用户账户的登录名。`-L`锁定账户,使用户无法登录。`-p`修改账户的密码。`-U`解除锁定,使用户能够登录。 2. passwd和chpasswd: `passwd`修改用户密码,`-e`能强制用户下次登录时修改密码。`chpasswd`能从标准输入自动读取登录名和密码对(由冒号分割)列表,如`chpasswd < users.txt` 3. chsh、chfn和chage: 用来修改特定的账户信息。 ## 7.2 使用Linux组 #### 7.2.1 /etc/group文件 千万不能通过直接修改/etc/group文件来添加用户到一个组,要用usermod命令。在添加用户到不同的组之前,首先得创建组。 #### 7.2.2 创建新组 groupadd命令可以在系统上创建新组。 ``` # /usr/sbin/groupadd shared # /usr/sbin/usermod -G shared rich # /usr/sbin/usermod -G shared test ```` #### 7.2.3 修改组 groupmod命令可以修改已有组的GID(加-g选项)或组名(加-n选项)。 ## 7.3 理解文件权限 #### 7.3.1 使用文件权限符 `ls -l`查看linux系统上的文件、目录和设备的权限。三组权限分别对应对象的3个安全级别: - 对象的属主 - 对象的属组 - 系统其他用户 #### 7.3.2 默认文件权限 umask(很复杂,没啥价值) ## 7.4 改变安全性设置 #### 7.4.1 改变权限 chmod命令用来改变文件和目录的安全性设置,两种方式: - chmod options mode file - chmod [ugoa] [[+-=][rwxXstugo...]] #### 7.4.2 改变所属关系 `chown`命令用来改变文件的属主,`chgrp`命令用来改变文件的默认属组。 - `chown options owner[.group] file`其中-R选项可以递归改变目录和文件的所属关系。 - `chgrp [group] file` ## 7.5 共享文件 ``` $ mkdir testdir $ chgrp shared testdir $ chmod g+s testdir $ umask 002 ``` 1. 用mkdir命令创建共享的目录 2. 用chgrp命令将目录的默认属组改为包含所有需要共享文件的用户的组 3. 将目录是SGID位置位,以保证目录中新建文件都用shared作为默认属组 ## 7.6 小结 # 第8章 管理文件系统 ## 8.1 探索Linux文件系统 #### 8.1.1 基本的Linux文件系统 1. ext文件系统:扩展文件系统(extended filesystem),利用索引节点的系统来存放虚拟目录中所存储文件的信息。 2. ext2文件系统:扩展ext索引信息;通过按组分配磁盘块来减轻碎片化。 #### 8.1.2 日志文件系统 1. ext3文件系统:给每个存储设备增加一个日志文件,以将准备写入存储设备的数据先计入日志。 2. ext4文件系统:支持区段特性;引入块预分配技术(block preallocation)。 3. Reiser文件系统 4. JFS文件系统 5. XFS文件系统 #### 8.1.3 写时复制文件系统 1. ZFS文件系统 2. Btrf文件系统:B树文件系统。 ## 8.2 操作文件系统 #### 8.2.1 创建分区 `$ sudo fdisk /dev/sdb` #### 8.2.2 创建文件系统 并非所有文件系统工具都已经默认安装,可以用type命令: - `type mkfs.ext4` - `type mkfs.btrfs` - `sudo mkfs.ext4 /dev/sdb1`: 即用ext4类型创建文件系统 #### 8.2.3 文件系统的检查与修复 `fsck options filesystem` ## 8.3 逻辑卷管理 #### 8.3.1 逻辑卷管理布局 #### 8.3.2 Linux中的LVM 1. 快照: 允许复制的同时,保证运行关键任务的Web服务或数据库服务器继续工作。 2. 条带化:可跨多个物理硬盘创建逻辑卷,提高硬盘性能。 3. 镜像:实时更新的逻辑卷的完整副本。 ##### 8.3.3 使用Linux LVM 1. 定义物理卷 2. 创建卷组 3. 创建逻辑卷 4. 创建文件系统 5. 修改LVM