auto commit
This commit is contained in:
367
notes/Linux.md
367
notes/Linux.md
@ -1,74 +1,22 @@
|
||||
# Linux
|
||||
<!-- GFM-TOC -->
|
||||
* [前言](#前言)
|
||||
* [一、常用操作以及概念](#一常用操作以及概念)
|
||||
* [快捷键](#快捷键)
|
||||
* [求助](#求助)
|
||||
* [关机](#关机)
|
||||
* [PATH](#path)
|
||||
* [sudo](#sudo)
|
||||
* [包管理工具](#包管理工具)
|
||||
* [发行版](#发行版)
|
||||
* [VIM 三个模式](#vim-三个模式)
|
||||
* [GNU](#gnu)
|
||||
* [开源协议](#开源协议)
|
||||
* [二、磁盘](#二磁盘)
|
||||
* [磁盘接口](#磁盘接口)
|
||||
* [磁盘的文件名](#磁盘的文件名)
|
||||
* [三、分区](#三分区)
|
||||
* [分区表](#分区表)
|
||||
* [开机检测程序](#开机检测程序)
|
||||
* [四、文件系统](#四文件系统)
|
||||
* [分区与文件系统](#分区与文件系统)
|
||||
* [组成](#组成)
|
||||
* [文件读取](#文件读取)
|
||||
* [磁盘碎片](#磁盘碎片)
|
||||
* [block](#block)
|
||||
* [inode](#inode)
|
||||
* [目录](#目录)
|
||||
* [日志](#日志)
|
||||
* [挂载](#挂载)
|
||||
* [目录配置](#目录配置)
|
||||
* [五、文件](#五文件)
|
||||
* [文件属性](#文件属性)
|
||||
* [文件与目录的基本操作](#文件与目录的基本操作)
|
||||
* [修改权限](#修改权限)
|
||||
* [默认权限](#默认权限)
|
||||
* [目录的权限](#目录的权限)
|
||||
* [链接](#链接)
|
||||
* [获取文件内容](#获取文件内容)
|
||||
* [指令与文件搜索](#指令与文件搜索)
|
||||
* [六、压缩与打包](#六压缩与打包)
|
||||
* [压缩文件名](#压缩文件名)
|
||||
* [压缩指令](#压缩指令)
|
||||
* [打包](#打包)
|
||||
* [七、Bash](#七bash)
|
||||
* [特性](#特性)
|
||||
* [变量操作](#变量操作)
|
||||
* [指令搜索顺序](#指令搜索顺序)
|
||||
* [数据流重定向](#数据流重定向)
|
||||
* [八、管道指令](#八管道指令)
|
||||
* [提取指令](#提取指令)
|
||||
* [排序指令](#排序指令)
|
||||
* [双向输出重定向](#双向输出重定向)
|
||||
* [字符转换指令](#字符转换指令)
|
||||
* [分区指令](#分区指令)
|
||||
* [九、正则表达式](#九正则表达式)
|
||||
* [grep](#grep)
|
||||
* [printf](#printf)
|
||||
* [awk](#awk)
|
||||
* [十、进程管理](#十进程管理)
|
||||
* [查看进程](#查看进程)
|
||||
* [进程状态](#进程状态)
|
||||
* [SIGCHLD](#sigchld)
|
||||
* [wait()](#wait)
|
||||
* [waitpid()](#waitpid)
|
||||
* [孤儿进程](#孤儿进程)
|
||||
* [僵尸进程](#僵尸进程)
|
||||
* [参考资料](#参考资料)
|
||||
* [Linux](#linux)
|
||||
* [前言](#前言)
|
||||
* [一、常用操作以及概念](#一常用操作以及概念)
|
||||
* [二、磁盘](#二磁盘)
|
||||
* [三、分区](#三分区)
|
||||
* [四、文件系统](#四文件系统)
|
||||
* [五、文件](#五文件)
|
||||
* [六、压缩与打包](#六压缩与打包)
|
||||
* [七、Bash](#七bash)
|
||||
* [八、管道指令](#八管道指令)
|
||||
* [九、正则表达式](#九正则表达式)
|
||||
* [十、进程管理](#十进程管理)
|
||||
* [参考资料](#参考资料)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 前言
|
||||
## 前言
|
||||
|
||||
为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准备面试,在此先将一些比较重要的知识点列出来:
|
||||
|
||||
@ -77,21 +25,21 @@
|
||||
- 硬链接与软链接;
|
||||
- 进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。
|
||||
|
||||
# 一、常用操作以及概念
|
||||
## 一、常用操作以及概念
|
||||
|
||||
## 快捷键
|
||||
### 快捷键
|
||||
|
||||
- Tab:命令和文件名补全;
|
||||
- Ctrl+C:中断正在运行的程序;
|
||||
- Ctrl+D:结束键盘输入(End Of File,EOF)
|
||||
|
||||
## 求助
|
||||
### 求助
|
||||
|
||||
### 1. --help
|
||||
#### 1. --help
|
||||
|
||||
指令的基本用法与选项介绍。
|
||||
|
||||
### 2. man
|
||||
#### 2. man
|
||||
|
||||
man 是 manual 的缩写,将指令的具体信息显示出来。
|
||||
|
||||
@ -103,35 +51,35 @@ man 是 manual 的缩写,将指令的具体信息显示出来。
|
||||
| 5 | 配置文件 |
|
||||
| 8 | 系统管理员可以使用的管理指令 |
|
||||
|
||||
### 3. info
|
||||
#### 3. info
|
||||
|
||||
info 与 man 类似,但是 info 将文档分成一个个页面,每个页面可以跳转。
|
||||
|
||||
### 4. doc
|
||||
#### 4. doc
|
||||
|
||||
/usr/share/doc 存放着软件的一整套说明文件。
|
||||
|
||||
## 关机
|
||||
### 关机
|
||||
|
||||
### 1. who
|
||||
#### 1. who
|
||||
|
||||
在关机前需要先使用 who 命令查看有没有其它用户在线。
|
||||
|
||||
### 2. sync
|
||||
#### 2. sync
|
||||
|
||||
为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘,因此关机之前需要先进行 sync 同步操作。
|
||||
|
||||
### 3. shutdown
|
||||
#### 3. shutdown
|
||||
|
||||
```html
|
||||
# shutdown [-krhc] 时间 [信息]
|
||||
## shutdown [-krhc] 时间 [信息]
|
||||
-k : 不会关机,只是发送警告信息,通知所有在线的用户
|
||||
-r : 将系统的服务停掉后就重新启动
|
||||
-h : 将系统的服务停掉后就立即关机
|
||||
-c : 取消已经在进行的 shutdown
|
||||
```
|
||||
|
||||
## PATH
|
||||
### PATH
|
||||
|
||||
可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔。
|
||||
|
||||
@ -139,18 +87,18 @@ info 与 man 类似,但是 info 将文档分成一个个页面,每个页面
|
||||
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
|
||||
```
|
||||
|
||||
## sudo
|
||||
### sudo
|
||||
|
||||
sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。
|
||||
|
||||
## 包管理工具
|
||||
### 包管理工具
|
||||
|
||||
RPM 和 DPKG 为最常见的两类软件包管理工具:
|
||||
|
||||
- RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,随后被 GNU 开源操作系统接受并成为许多 Linux 系统的既定软件标准。YUM 基于 RPM,具有依赖管理和软件升级功能。
|
||||
- 与 RPM 竞争的是基于 Debian 操作系统的 DEB 软件包管理工具 DPKG,全称为 Debian Package,功能方面与 RPM 相似。
|
||||
|
||||
## 发行版
|
||||
### 发行版
|
||||
|
||||
Linux 发行版是 Linux 内核及各种应用软件的集成版本。
|
||||
|
||||
@ -159,7 +107,7 @@ Linux 发行版是 Linux 内核及各种应用软件的集成版本。
|
||||
| RPM | Red Hat | Fedora / CentOS |
|
||||
| DPKG | Ubuntu | Debian |
|
||||
|
||||
## VIM 三个模式
|
||||
### VIM 三个模式
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209002818626.png"/> </div><br>
|
||||
|
||||
@ -180,7 +128,7 @@ Linux 发行版是 Linux 内核及各种应用软件的集成版本。
|
||||
| :wq | 写入磁盘后离开 |
|
||||
| :wq!| 强制写入磁盘后离开 |
|
||||
|
||||
## GNU
|
||||
### GNU
|
||||
|
||||
GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操作系统,称为 GNU,其内容软件完全以 GPL 方式发布。其中 GPL 全称为 GNU 通用公共许可协议(GNU General Public License),包含了以下内容:
|
||||
|
||||
@ -188,40 +136,40 @@ GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操
|
||||
- 再复制的自由;
|
||||
- 改进此程序,并公开发布改进的自由。
|
||||
|
||||
## 开源协议
|
||||
### 开源协议
|
||||
|
||||
- [Choose an open source license](https://choosealicense.com/)
|
||||
- [如何选择开源许可证?](http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html)
|
||||
|
||||
# 二、磁盘
|
||||
## 二、磁盘
|
||||
|
||||
## 磁盘接口
|
||||
### 磁盘接口
|
||||
|
||||
### 1. IDE
|
||||
#### 1. IDE
|
||||
|
||||
IDE(ATA)全称 Advanced Technology Attachment,接口速度最大为 133MB/s,因为并口线的抗干扰性太差,且排线占用空间较大,不利电脑内部散热,已逐渐被 SATA 所取代。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/924914c0-660c-4e4a-bbc0-1df1146e7516.jpg" width="400"/> </div><br>
|
||||
|
||||
### 2. SATA
|
||||
#### 2. SATA
|
||||
|
||||
SATA 全称 Serial ATA,也就是使用串口的 ATA 接口,抗干扰性强,且对数据线的长度要求比 ATA 低很多,支持热插拔等功能。SATA-II 的接口速度为 300MB/s,而 SATA-III 标准可达到 600MB/s 的传输速度。SATA 的数据线也比 ATA 的细得多,有利于机箱内的空气流通,整理线材也比较方便。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f9f2a16b-4843-44d1-9759-c745772e9bcf.jpg" width=""/> </div><br>
|
||||
|
||||
### 3. SCSI
|
||||
#### 3. SCSI
|
||||
|
||||
SCSI 全称是 Small Computer System Interface(小型机系统接口),SCSI 硬盘广为工作站以及个人电脑以及服务器所使用,因此会使用较为先进的技术,如碟片转速 15000rpm 的高转速,且传输时 CPU 占用率较低,但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f0574025-c514-49f5-a591-6d6a71f271f7.jpg" width=""/> </div><br>
|
||||
|
||||
### 4. SAS
|
||||
#### 4. SAS
|
||||
|
||||
SAS(Serial Attached SCSI)是新一代的 SCSI 技术,和 SATA 硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间等。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/6729baa0-57d7-4817-b3aa-518cbccf824c.jpg" width=""/> </div><br>
|
||||
|
||||
## 磁盘的文件名
|
||||
### 磁盘的文件名
|
||||
|
||||
Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:
|
||||
|
||||
@ -230,13 +178,13 @@ Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘
|
||||
|
||||
其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。
|
||||
|
||||
# 三、分区
|
||||
## 三、分区
|
||||
|
||||
## 分区表
|
||||
### 分区表
|
||||
|
||||
磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。
|
||||
|
||||
### 1. MBR
|
||||
#### 1. MBR
|
||||
|
||||
MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。
|
||||
|
||||
@ -244,7 +192,7 @@ MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot r
|
||||
|
||||
Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。
|
||||
|
||||
### 2. GPT
|
||||
#### 2. GPT
|
||||
|
||||
扇区是磁盘的最小存储单位,旧磁盘的扇区大小通常为 512 bytes,而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。
|
||||
|
||||
@ -256,9 +204,9 @@ MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 2<sup>33</sup> TB
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/GUID_Partition_Table_Scheme.svg.png" width="400"/> </div><br>
|
||||
|
||||
## 开机检测程序
|
||||
### 开机检测程序
|
||||
|
||||
### 1. BIOS
|
||||
#### 1. BIOS
|
||||
|
||||
BIOS(Basic Input/Output System,基本输入输出系统),它是一个固件(嵌入在硬件中的软件),BIOS 程序存放在断电后内容不会丢失的只读内存中。
|
||||
|
||||
@ -274,17 +222,17 @@ BIOS 是开机的时候计算机执行的第一个程序,这个程序知道可
|
||||
|
||||
安装多重引导,最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录(MBR),而 Linux 可以选择将开机管理程序安装在主要开机记录(MBR)或者其它分区的启动扇区,并且可以设置开机管理程序的选单。
|
||||
|
||||
### 2. UEFI
|
||||
#### 2. UEFI
|
||||
|
||||
BIOS 不可以读取 GPT 分区表,而 UEFI 可以。
|
||||
|
||||
# 四、文件系统
|
||||
## 四、文件系统
|
||||
|
||||
## 分区与文件系统
|
||||
### 分区与文件系统
|
||||
|
||||
对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。
|
||||
|
||||
## 组成
|
||||
### 组成
|
||||
|
||||
最主要的几个组成部分如下:
|
||||
|
||||
@ -298,7 +246,7 @@ BIOS 不可以读取 GPT 分区表,而 UEFI 可以。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/BSD_disk.png" width="800"/> </div><br>
|
||||
|
||||
## 文件读取
|
||||
### 文件读取
|
||||
|
||||
对于 Ext2 文件系统,当要读取一个文件的内容时,先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。
|
||||
|
||||
@ -308,11 +256,11 @@ BIOS 不可以读取 GPT 分区表,而 UEFI 可以。
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/5b718e86-7102-4bb6-8ca5-d1dd791530c5.png" width="500px"> </div><br>
|
||||
|
||||
## 磁盘碎片
|
||||
### 磁盘碎片
|
||||
|
||||
指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。
|
||||
|
||||
## block
|
||||
### block
|
||||
|
||||
在 Ext2 文件系统中所支持的 block 大小有 1K,2K 及 4K 三种,不同的大小限制了单个文件和文件系统的最大大小。
|
||||
|
||||
@ -323,7 +271,7 @@ BIOS 不可以读取 GPT 分区表,而 UEFI 可以。
|
||||
|
||||
一个 block 只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的 block。
|
||||
|
||||
## inode
|
||||
### inode
|
||||
|
||||
inode 具体包含以下信息:
|
||||
|
||||
@ -345,23 +293,23 @@ inode 中记录了文件内容所在的 block 编号,但是每个 block 非常
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/inode_with_signatures.jpg" width="600"/> </div><br>
|
||||
|
||||
## 目录
|
||||
### 目录
|
||||
|
||||
建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。
|
||||
|
||||
可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。
|
||||
|
||||
## 日志
|
||||
### 日志
|
||||
|
||||
如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。
|
||||
|
||||
ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件系统。
|
||||
|
||||
## 挂载
|
||||
### 挂载
|
||||
|
||||
挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。
|
||||
|
||||
## 目录配置
|
||||
### 目录配置
|
||||
|
||||
为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下:
|
||||
|
||||
@ -371,9 +319,9 @@ ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/linux-filesystem.png" width=""/> </div><br>
|
||||
|
||||
# 五、文件
|
||||
## 五、文件
|
||||
|
||||
## 文件属性
|
||||
### 文件属性
|
||||
|
||||
用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。
|
||||
|
||||
@ -401,20 +349,20 @@ ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件
|
||||
- status time (ctime):文件的状态(权限、属性)更新就会更新;
|
||||
- access time (atime):读取文件时就会更新。
|
||||
|
||||
## 文件与目录的基本操作
|
||||
### 文件与目录的基本操作
|
||||
|
||||
### 1. ls
|
||||
#### 1. ls
|
||||
|
||||
列出文件或者目录的信息,目录的信息就是其中包含的文件。
|
||||
|
||||
```html
|
||||
# ls [-aAdfFhilnrRSt] file|dir
|
||||
## ls [-aAdfFhilnrRSt] file|dir
|
||||
-a :列出全部的文件
|
||||
-d :仅列出目录本身
|
||||
-l :以长数据串行列出,包含文件的属性与权限等等数据
|
||||
```
|
||||
|
||||
### 2. cd
|
||||
#### 2. cd
|
||||
|
||||
更换当前目录。
|
||||
|
||||
@ -422,17 +370,17 @@ ext3/ext4 文件系统引入了日志功能,可以利用日志来修复文件
|
||||
cd [相对路径或绝对路径]
|
||||
```
|
||||
|
||||
### 3. mkdir
|
||||
#### 3. mkdir
|
||||
|
||||
创建目录。
|
||||
|
||||
```
|
||||
# mkdir [-mp] 目录名称
|
||||
## mkdir [-mp] 目录名称
|
||||
-m :配置目录权限
|
||||
-p :递归创建目录
|
||||
```
|
||||
|
||||
### 4. rmdir
|
||||
#### 4. rmdir
|
||||
|
||||
删除目录,目录必须为空。
|
||||
|
||||
@ -441,12 +389,12 @@ rmdir [-p] 目录名称
|
||||
-p :递归删除目录
|
||||
```
|
||||
|
||||
### 5. touch
|
||||
#### 5. touch
|
||||
|
||||
更新文件时间或者建立新文件。
|
||||
|
||||
```html
|
||||
# touch [-acdmt] filename
|
||||
## touch [-acdmt] filename
|
||||
-a : 更新 atime
|
||||
-c : 更新 ctime,若该文件不存在则不建立新文件
|
||||
-m : 更新 mtime
|
||||
@ -454,7 +402,7 @@ rmdir [-p] 目录名称
|
||||
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
|
||||
```
|
||||
|
||||
### 6. cp
|
||||
#### 6. cp
|
||||
|
||||
复制文件。如果源文件有两个以上,则目的文件一定要是目录才行。
|
||||
|
||||
@ -469,43 +417,43 @@ cp [-adfilprsu] source destination
|
||||
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
|
||||
```
|
||||
|
||||
### 7. rm
|
||||
#### 7. rm
|
||||
|
||||
删除文件。
|
||||
|
||||
```html
|
||||
# rm [-fir] 文件或目录
|
||||
## rm [-fir] 文件或目录
|
||||
-r :递归删除
|
||||
```
|
||||
|
||||
### 8. mv
|
||||
#### 8. mv
|
||||
|
||||
移动文件。
|
||||
|
||||
```html
|
||||
# mv [-fiu] source destination
|
||||
# mv [options] source1 source2 source3 .... directory
|
||||
## mv [-fiu] source destination
|
||||
## mv [options] source1 source2 source3 .... directory
|
||||
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
|
||||
```
|
||||
|
||||
## 修改权限
|
||||
### 修改权限
|
||||
|
||||
可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
|
||||
|
||||
```html
|
||||
# chmod [-R] xyz dirname/filename
|
||||
## chmod [-R] xyz dirname/filename
|
||||
```
|
||||
|
||||
示例:将 .bashrc 文件的权限修改为 -rwxr-xr--。
|
||||
|
||||
```html
|
||||
# chmod 754 .bashrc
|
||||
## chmod 754 .bashrc
|
||||
```
|
||||
|
||||
也可以使用符号来设定权限。
|
||||
|
||||
```html
|
||||
# chmod [ugoa] [+-=] [rwx] dirname/filename
|
||||
## chmod [ugoa] [+-=] [rwx] dirname/filename
|
||||
- u:拥有者
|
||||
- g:所属群组
|
||||
- o:其他人
|
||||
@ -518,34 +466,34 @@ cp [-adfilprsu] source destination
|
||||
示例:为 .bashrc 文件的所有用户添加写权限。
|
||||
|
||||
```html
|
||||
# chmod a+w .bashrc
|
||||
## chmod a+w .bashrc
|
||||
```
|
||||
|
||||
## 默认权限
|
||||
### 默认权限
|
||||
|
||||
- 文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。
|
||||
- 目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。
|
||||
|
||||
可以通过 umask 设置或者查看默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r--。
|
||||
|
||||
## 目录的权限
|
||||
### 目录的权限
|
||||
|
||||
文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。
|
||||
|
||||
目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。
|
||||
|
||||
## 链接
|
||||
### 链接
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/1e46fd03-0cda-4d60-9b1c-0c256edaf6b2.png" width="450px"> </div><br>
|
||||
|
||||
|
||||
```html
|
||||
# ln [-sf] source_filename dist_filename
|
||||
## ln [-sf] source_filename dist_filename
|
||||
-s :默认是实体链接,加 -s 为符号链接
|
||||
-f :如果目标文件存在时,先删除目标文件
|
||||
```
|
||||
|
||||
### 1. 实体链接
|
||||
#### 1. 实体链接
|
||||
|
||||
在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。
|
||||
|
||||
@ -554,13 +502,13 @@ cp [-adfilprsu] source destination
|
||||
有以下限制:不能跨越文件系统、不能对目录进行链接。
|
||||
|
||||
```html
|
||||
# ln /etc/crontab .
|
||||
# ll -i /etc/crontab crontab
|
||||
## ln /etc/crontab .
|
||||
## ll -i /etc/crontab crontab
|
||||
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
|
||||
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
|
||||
```
|
||||
|
||||
### 2. 符号链接
|
||||
#### 2. 符号链接
|
||||
|
||||
符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。
|
||||
|
||||
@ -569,87 +517,87 @@ cp [-adfilprsu] source destination
|
||||
因为记录的是路径,所以可以为目录建立符号链接。
|
||||
|
||||
```html
|
||||
# ll -i /etc/crontab /root/crontab2
|
||||
## ll -i /etc/crontab /root/crontab2
|
||||
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
|
||||
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab
|
||||
```
|
||||
|
||||
## 获取文件内容
|
||||
### 获取文件内容
|
||||
|
||||
### 1. cat
|
||||
#### 1. cat
|
||||
|
||||
取得文件内容。
|
||||
|
||||
```html
|
||||
# cat [-AbEnTv] filename
|
||||
## cat [-AbEnTv] filename
|
||||
-n :打印出行号,连同空白行也会有行号,-b 不会
|
||||
```
|
||||
|
||||
### 2. tac
|
||||
#### 2. tac
|
||||
|
||||
是 cat 的反向操作,从最后一行开始打印。
|
||||
|
||||
### 3. more
|
||||
#### 3. more
|
||||
|
||||
和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
|
||||
|
||||
### 4. less
|
||||
#### 4. less
|
||||
|
||||
和 more 类似,但是多了一个向前翻页的功能。
|
||||
|
||||
### 5. head
|
||||
#### 5. head
|
||||
|
||||
取得文件前几行。
|
||||
|
||||
```html
|
||||
# head [-n number] filename
|
||||
## head [-n number] filename
|
||||
-n :后面接数字,代表显示几行的意思
|
||||
```
|
||||
|
||||
### 6. tail
|
||||
#### 6. tail
|
||||
|
||||
是 head 的反向操作,只是取得是后几行。
|
||||
|
||||
### 7. od
|
||||
#### 7. od
|
||||
|
||||
以字符或者十六进制的形式显示二进制文件。
|
||||
|
||||
## 指令与文件搜索
|
||||
### 指令与文件搜索
|
||||
|
||||
### 1. which
|
||||
#### 1. which
|
||||
|
||||
指令搜索。
|
||||
|
||||
```html
|
||||
# which [-a] command
|
||||
## which [-a] command
|
||||
-a :将所有指令列出,而不是只列第一个
|
||||
```
|
||||
|
||||
### 2. whereis
|
||||
#### 2. whereis
|
||||
|
||||
文件搜索。速度比较快,因为它只搜索几个特定的目录。
|
||||
|
||||
```html
|
||||
# whereis [-bmsu] dirname/filename
|
||||
## whereis [-bmsu] dirname/filename
|
||||
```
|
||||
|
||||
### 3. locate
|
||||
#### 3. locate
|
||||
|
||||
文件搜索。可以用关键字或者正则表达式进行搜索。
|
||||
|
||||
locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。
|
||||
|
||||
```html
|
||||
# locate [-ir] keyword
|
||||
## locate [-ir] keyword
|
||||
-r:正则表达式
|
||||
```
|
||||
|
||||
### 4. find
|
||||
#### 4. find
|
||||
|
||||
文件搜索。可以使用文件的属性和权限进行搜索。
|
||||
|
||||
```html
|
||||
# find [basedir] [option]
|
||||
## find [basedir] [option]
|
||||
example: find . -name "shadow*"
|
||||
```
|
||||
|
||||
@ -688,9 +636,9 @@ example: find . -name "shadow*"
|
||||
-perm /mode :搜索权限包含任一 mode 的文件
|
||||
```
|
||||
|
||||
# 六、压缩与打包
|
||||
## 六、压缩与打包
|
||||
|
||||
## 压缩文件名
|
||||
### 压缩文件名
|
||||
|
||||
Linux 底下有很多压缩文件名,常见的如下:
|
||||
|
||||
@ -706,9 +654,9 @@ Linux 底下有很多压缩文件名,常见的如下:
|
||||
|\*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 |
|
||||
|\*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 |
|
||||
|
||||
## 压缩指令
|
||||
### 压缩指令
|
||||
|
||||
### 1. gzip
|
||||
#### 1. gzip
|
||||
|
||||
gzip 是 Linux 使用最广的压缩指令,可以解开 compress、zip 与 gzip 所压缩的文件。
|
||||
|
||||
@ -727,7 +675,7 @@ $ gzip [-cdtv#] filename
|
||||
-# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
|
||||
```
|
||||
|
||||
### 2. bzip2
|
||||
#### 2. bzip2
|
||||
|
||||
提供比 gzip 更高的压缩比。
|
||||
|
||||
@ -738,7 +686,7 @@ $ bzip2 [-cdkzv#] filename
|
||||
-k :保留源文件
|
||||
```
|
||||
|
||||
### 3. xz
|
||||
#### 3. xz
|
||||
|
||||
提供比 bzip2 更佳的压缩比。
|
||||
|
||||
@ -750,7 +698,7 @@ $ bzip2 [-cdkzv#] filename
|
||||
$ xz [-dtlkc#] filename
|
||||
```
|
||||
|
||||
## 打包
|
||||
### 打包
|
||||
|
||||
压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gzip、bzip2、xz 将打包文件进行压缩。
|
||||
|
||||
@ -775,11 +723,11 @@ $ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
|
||||
| 查 看 | tar -jtv -f filename.tar.bz2 |
|
||||
| 解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 |
|
||||
|
||||
# 七、Bash
|
||||
## 七、Bash
|
||||
|
||||
可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。
|
||||
|
||||
## 特性
|
||||
### 特性
|
||||
|
||||
- 命令历史:记录使用过的命令
|
||||
- 命令与文件补全:快捷键:tab
|
||||
@ -787,7 +735,7 @@ $ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
|
||||
- shell scripts
|
||||
- 通配符:例如 ls -l /usr/bin/X\* 列出 /usr/bin 下面所有以 X 开头的文件
|
||||
|
||||
## 变量操作
|
||||
### 变量操作
|
||||
|
||||
对一个变量赋值直接使用 =。
|
||||
|
||||
@ -828,34 +776,34 @@ $ array[2]=b
|
||||
$ echo ${array[1]}
|
||||
```
|
||||
|
||||
## 指令搜索顺序
|
||||
### 指令搜索顺序
|
||||
|
||||
- 以绝对或相对路径来执行指令,例如 /bin/ls 或者 ./ls ;
|
||||
- 由别名找到该指令来执行;
|
||||
- 由 Bash 内置的指令来执行;
|
||||
- 按 \$PATH 变量指定的搜索路径的顺序找到第一个指令来执行。
|
||||
|
||||
## 数据流重定向
|
||||
### 数据流重定向
|
||||
|
||||
重定向指的是使用文件代替标准输入、标准输出和标准错误输出。
|
||||
|
||||
| 1 | 代码 | 运算符 |
|
||||
| :---: | :---: | :---:|
|
||||
| 标准输入 (stdin) | 0 | < 或 << |
|
||||
| 标准输出 (stdout) | 1 | > 或 >> |
|
||||
| 标准错误输出 (stderr) | 2 | 2> 或 2>> |
|
||||
| 标准输入 (stdin) | 0 | \< 或 \<\< |
|
||||
| 标准输出 (stdout) | 1 | > 或 \>\> |
|
||||
| 标准错误输出 (stderr) | 2 | 2\> 或 2\>\> |
|
||||
|
||||
其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。
|
||||
|
||||
可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。
|
||||
|
||||
如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出。
|
||||
如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2\>&1 表示将标准错误输出转换为标准输出。
|
||||
|
||||
```bash
|
||||
$ find /home -name .bashrc > list 2>&1
|
||||
```
|
||||
|
||||
# 八、管道指令
|
||||
## 八、管道指令
|
||||
|
||||
管道是将一个命令的标准输出作为另一个命令的标准输入,在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。
|
||||
|
||||
@ -865,7 +813,7 @@ $ find /home -name .bashrc > list 2>&1
|
||||
$ ls -al /etc | less
|
||||
```
|
||||
|
||||
## 提取指令
|
||||
### 提取指令
|
||||
|
||||
cut 对数据进行切分,取出想要的部分。
|
||||
|
||||
@ -902,7 +850,7 @@ declare -x HOSTNAME="study.centos.vbird"
|
||||
$ export | cut -c 12-
|
||||
```
|
||||
|
||||
## 排序指令
|
||||
### 排序指令
|
||||
|
||||
**sort** 用于排序。
|
||||
|
||||
@ -948,7 +896,7 @@ $ last | cut -d ' ' -f 1 | sort | uniq -c
|
||||
1 wtmp
|
||||
```
|
||||
|
||||
## 双向输出重定向
|
||||
### 双向输出重定向
|
||||
|
||||
输出重定向会将输出内容重定向到文件中,而 **tee** 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。
|
||||
|
||||
@ -956,7 +904,7 @@ $ last | cut -d ' ' -f 1 | sort | uniq -c
|
||||
$ tee [-a] file
|
||||
```
|
||||
|
||||
## 字符转换指令
|
||||
### 字符转换指令
|
||||
|
||||
**tr** 用来删除一行中的字符,或者对字符进行替换。
|
||||
|
||||
@ -1002,7 +950,7 @@ $ paste [-d] file1 file2
|
||||
-d :分隔符,默认为 tab
|
||||
```
|
||||
|
||||
## 分区指令
|
||||
### 分区指令
|
||||
|
||||
**split** 将一个文件划分成多个文件。
|
||||
|
||||
@ -1013,9 +961,9 @@ $ split [-bl] file PREFIX
|
||||
- PREFIX :分区文件的前导名称
|
||||
```
|
||||
|
||||
# 九、正则表达式
|
||||
## 九、正则表达式
|
||||
|
||||
## grep
|
||||
### grep
|
||||
|
||||
g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。
|
||||
|
||||
@ -1045,7 +993,7 @@ $ grep -n 'the' regular_express.txt
|
||||
$ grep -n 'a\{2,5\}' regular_express.txt
|
||||
```
|
||||
|
||||
## printf
|
||||
### printf
|
||||
|
||||
用于格式化输出。它不属于管道命令,在给 printf 传数据时需要使用 $( ) 形式。
|
||||
|
||||
@ -1056,7 +1004,7 @@ $ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt)
|
||||
Ken 60 90 70 73.33
|
||||
```
|
||||
|
||||
## awk
|
||||
### awk
|
||||
|
||||
是由 Alfred Aho,Peter Weinberger 和 Brian Kernighan 创造,awk 这个名字就是这三个创始人名字的首字母。
|
||||
|
||||
@ -1111,63 +1059,63 @@ dmtsai lines: 4 columns: 10
|
||||
dmtsai lines: 5 columns: 9
|
||||
```
|
||||
|
||||
# 十、进程管理
|
||||
## 十、进程管理
|
||||
|
||||
## 查看进程
|
||||
### 查看进程
|
||||
|
||||
### 1. ps
|
||||
#### 1. ps
|
||||
|
||||
查看某个时间点的进程信息。
|
||||
|
||||
示例:查看自己的进程
|
||||
|
||||
```sh
|
||||
# ps -l
|
||||
## ps -l
|
||||
```
|
||||
|
||||
示例:查看系统所有进程
|
||||
|
||||
```sh
|
||||
# ps aux
|
||||
## ps aux
|
||||
```
|
||||
|
||||
示例:查看特定的进程
|
||||
|
||||
```sh
|
||||
# ps aux | grep threadx
|
||||
## ps aux | grep threadx
|
||||
```
|
||||
|
||||
### 2. pstree
|
||||
#### 2. pstree
|
||||
|
||||
查看进程树。
|
||||
|
||||
示例:查看所有进程树
|
||||
|
||||
```sh
|
||||
# pstree -A
|
||||
## pstree -A
|
||||
```
|
||||
|
||||
### 3. top
|
||||
#### 3. top
|
||||
|
||||
实时显示进程信息。
|
||||
|
||||
示例:两秒钟刷新一次
|
||||
|
||||
```sh
|
||||
# top -d 2
|
||||
## top -d 2
|
||||
```
|
||||
|
||||
### 4. netstat
|
||||
#### 4. netstat
|
||||
|
||||
查看占用端口的进程
|
||||
|
||||
示例:查看特定端口的进程
|
||||
|
||||
```sh
|
||||
# netstat -anp | grep port
|
||||
## netstat -anp | grep port
|
||||
```
|
||||
|
||||
## 进程状态
|
||||
### 进程状态
|
||||
|
||||
| 状态 | 说明 |
|
||||
| :---: | --- |
|
||||
@ -1180,7 +1128,7 @@ dmtsai lines: 5 columns: 9
|
||||
|
||||
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2bab4127-3e7d-48cc-914e-436be859fb05.png" width="490px"/> </div><br>
|
||||
|
||||
## SIGCHLD
|
||||
### SIGCHLD
|
||||
|
||||
当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:
|
||||
|
||||
@ -1193,7 +1141,7 @@ dmtsai lines: 5 columns: 9
|
||||
|
||||
<div align="center"> <!-- <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/flow.png" width=""/> --> </div><br>
|
||||
|
||||
## wait()
|
||||
### wait()
|
||||
|
||||
```c
|
||||
pid_t wait(int *status)
|
||||
@ -1205,7 +1153,7 @@ pid_t wait(int *status)
|
||||
|
||||
参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。
|
||||
|
||||
## waitpid()
|
||||
### waitpid()
|
||||
|
||||
```c
|
||||
pid_t waitpid(pid_t pid, int *status, int options)
|
||||
@ -1217,7 +1165,7 @@ pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的
|
||||
|
||||
options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。
|
||||
|
||||
## 孤儿进程
|
||||
### 孤儿进程
|
||||
|
||||
一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
|
||||
|
||||
@ -1225,7 +1173,7 @@ options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 w
|
||||
|
||||
由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。
|
||||
|
||||
## 僵尸进程
|
||||
### 僵尸进程
|
||||
|
||||
一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。
|
||||
|
||||
@ -1235,7 +1183,7 @@ options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 w
|
||||
|
||||
要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。
|
||||
|
||||
# 参考资料
|
||||
## 参考资料
|
||||
|
||||
- 鸟哥. 鸟 哥 的 Linux 私 房 菜 基 础 篇 第 三 版[J]. 2009.
|
||||
- [Linux 平台上的软件包管理](https://www.ibm.com/developerworks/cn/linux/l-cn-rpmdpkg/index.html)
|
||||
@ -1255,10 +1203,3 @@ options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 w
|
||||
- [File system design case studies](https://www.cs.rutgers.edu/\~pxk/416/notes/13-fs-studies.html)
|
||||
- [Programming Project #4](https://classes.soe.ucsc.edu/cmps111/Fall08/proj4.shtml)
|
||||
- [FILE SYSTEM DESIGN](http://web.cs.ucla.edu/classes/fall14/cs111/scribe/11a/index.html)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>
|
||||
|
Reference in New Issue
Block a user