auto commit
This commit is contained in:
parent
d7b23c989a
commit
9ba333e2fd
@ -65,8 +65,8 @@
|
||||
* [2. bzip2](#2-bzip2)
|
||||
* [3. xz](#3-xz)
|
||||
* [打包](#打包)
|
||||
* [BASH](#bash)
|
||||
* [Bash特性](#bash特性)
|
||||
* [Bash](#bash)
|
||||
* [Bash 特性](#bash-特性)
|
||||
* [变量操作](#变量操作)
|
||||
* [指令搜索顺序](#指令搜索顺序)
|
||||
* [数据流重定向](#数据流重定向)
|
||||
@ -534,8 +534,8 @@ find
|
||||
文件系统有以下三个结构:
|
||||
|
||||
1. superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
|
||||
2. inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的数据所在的 block 号码;
|
||||
3. block:记录文件的内容,若文件太大时,会占用多个 block。
|
||||
2. inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 号码;
|
||||
3. block:记录文件的内容,文件太大时,会占用多个 block。
|
||||
|
||||
当要读取一个文件的内容时,先在 inode 中去查找文件内容所在的所有 block,然后把所有 block 的内容读出来。
|
||||
|
||||
@ -549,7 +549,7 @@ Ext2
|
||||
|
||||
Ext2 文件系统支持的 block 大小有 1k、2k 和 4k 三种,不同的 block 大小限制了单一文件的大小。而每个 inode 大小是固定为 128 bytes。
|
||||
|
||||
inode 中记录了文件内容所在的 block,但是每个 block 非常小,一个大文件随便都需要几十万的 block,而一个 inode 大小有限,无法直接引用这么多 block。因此引入了间接、双间接、三间接引用,使用用 block 来扩充大小,也就是让 block 来记录文件包含的 block。
|
||||
inode 中记录了文件内容所在的 block,但是每个 block 非常小,一个大文件随便都需要几十万的 block,而一个 inode 大小有限,无法直接引用这么多 block。因此引入了间接、双间接、三间接引用。间接引用是指,让 inode 记录的引用 block 块当成 inode 用来记录引用信息。
|
||||
|
||||
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/89091427-7b2b-4923-aff6-44681319a8aa.jpg)
|
||||
|
||||
@ -566,21 +566,21 @@ inode
|
||||
|
||||
## 目录的 inode 与 block
|
||||
|
||||
建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名,可以看出文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的 w 权限有关。
|
||||
建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。可以看出文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的 w 权限有关。
|
||||
|
||||
## 实体链接与符号链接
|
||||
|
||||
```html
|
||||
# ln [-sf] source_filename dist_filename
|
||||
-s :默认是 hard link,加 -s 为 symbolic link
|
||||
-f :如果目标5文件存在时,先删除目标文件
|
||||
-f :如果目标文件存在时,先删除目标文件
|
||||
```
|
||||
|
||||
### 1. 实体链接
|
||||
|
||||
hard link 只是在某个目录下新增一个条目,使得新增的条目链接到文件的 inode 上。删除任意一个条目,文件还是存在,只要引用数量不为 0。
|
||||
|
||||
有以下限制:不能跨越 Filesystem;不能对目录进行链接。
|
||||
有以下限制:不能跨越 File System;不能对目录进行链接。
|
||||
|
||||
```html
|
||||
# ln /etc/crontab .
|
||||
@ -653,7 +653,7 @@ $ bzip2 [-cdkzv#] filename
|
||||
|
||||
提供比 bzip2 更佳的压缩比。
|
||||
|
||||
可以看到,gzip、bzip2、xz 的压缩比不断优化,不过要注意,压缩比越高,压缩的时间也越长。
|
||||
可以看到,gzip、bzip2、xz 的压缩比不断优化。不过要注意,压缩比越高,压缩的时间也越长。
|
||||
|
||||
查看命令:xzcat、xzmore、xzless、xzgrep。
|
||||
|
||||
@ -680,17 +680,18 @@ $ tar [-z|-j|-J] [xv] [-f
|
||||
-C 目录 : 在特定目录解压缩。
|
||||
```
|
||||
|
||||
最常用的方式如下:
|
||||
| 使用方式 | 命令 |
|
||||
| --- | --- |
|
||||
| 打包压缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |
|
||||
| 查 看 | tar -jtv -f filename.tar.bz2 |
|
||||
| 解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 |
|
||||
|
||||
打包压缩 : tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
|
||||
查 看 : tar -jtv -f filename.tar.bz2
|
||||
解压缩 :tar -jxv -f filename.tar.bz2 -C 要解压缩的目录
|
||||
|
||||
# BASH
|
||||
# Bash
|
||||
|
||||
可以通过 shell 请求内核提供服务,Bash 正是 shell 的一种。
|
||||
可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。
|
||||
|
||||
## Bash特性
|
||||
## Bash 特性
|
||||
|
||||
**1. 命令历史**
|
||||
|
||||
@ -712,7 +713,9 @@ $ tar [-z|-j|-J] [xv] [-f
|
||||
|
||||
## 变量操作
|
||||
|
||||
对一个变量赋值直接使用 = ,对变量取用需要在变量前加上 \$ ,也可以用 \${} 的形式,输出变量使用 echo 命令。
|
||||
- 对一个变量赋值直接使用 = ;
|
||||
- 对变量取用需要在变量前加上 \$ ,也可以用 \${} 的形式;
|
||||
- 输出变量使用 echo 命令。
|
||||
|
||||
```bash
|
||||
$ var=abc
|
||||
@ -720,7 +723,7 @@ $ echo $var
|
||||
$ echo ${var}
|
||||
```
|
||||
|
||||
变量内容如果有空格,需要使用双引号或者单引号。双引号内的特殊字符可以保留原本特性,例如var="lang is \$LANG",则var的值为 lang is zh_TW.UTF-8;而单引号内的特殊字符就是特殊字符本身,例如 var='lang is \$LANG',则 var 的值为 lang is \$LANG。
|
||||
变量内容如果有空格,需要使用双引号或者单引号。双引号内的特殊字符可以保留原本特性,例如var="lang is \$LANG",则 var 的值为 lang is zh_TW.UTF-8;而单引号内的特殊字符就是特殊字符本身,例如 var='lang is \$LANG',则 var 的值为 lang is \$LANG。
|
||||
|
||||
|
||||
可以使用 \`指令\` 或者 \$(指令) 的方式将指令的执行结果赋值给变量。例如 version=\$(uname -r),则 version 的值为 3.10.0-229.el7.x86_64。
|
||||
@ -756,13 +759,14 @@ $ echo ${array[1]}
|
||||
|
||||
重定向就是使用文件代替标准输入、标准输出和标准错误输出。
|
||||
|
||||
1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
|
||||
2. 标准输出 (stdout) :代码为 1 ,使用 > 或 >> ;
|
||||
|
||||
1. 标准输入(stdin) :代码为 0 ,使用 < 或 << ;
|
||||
2. 标准输出(stdout) :代码为 1 ,使用 > 或 >> ;
|
||||
3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
|
||||
|
||||
其中,有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。
|
||||
|
||||
可以将不需要的标准输出以及标准错误输出重定向到 /dev/null ,相当于扔进垃圾箱。
|
||||
可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。
|
||||
|
||||
如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出。
|
||||
|
||||
@ -791,7 +795,7 @@ $ cut
|
||||
-c :以字符为单位取出区间
|
||||
```
|
||||
|
||||
范例1:last 将显示的登入者的信息,要求仅显示用户名。
|
||||
范例 1:last 将显示的登入者的信息,要求仅显示用户名。
|
||||
|
||||
```html
|
||||
$ last
|
||||
@ -802,7 +806,7 @@ root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)
|
||||
$ last | cut -d ' ' -f 1
|
||||
```
|
||||
|
||||
范例2:将 export 输出的讯息,取得第 12 字符以后的所有字符串。
|
||||
范例 2:将 export 输出的讯息,取得第 12 字符以后的所有字符串。
|
||||
|
||||
```html
|
||||
$ export
|
||||
@ -823,11 +827,11 @@ $ export | cut -c 12
|
||||
$ sort [-fbMnrtuk] [file or stdin]
|
||||
-f :忽略大小写
|
||||
-b :忽略最前面的空格
|
||||
-M :以月份的名字来排序,例如 JAN, DEC
|
||||
-M :以月份的名字来排序,例如 JAN,DEC
|
||||
-n :使用数字
|
||||
-r :反向排序
|
||||
-u :相当于 unique ,重复内容只出现一次
|
||||
-t :分隔符,默认为tab
|
||||
-u :相当于 unique,重复的内容只出现一次
|
||||
-t :分隔符,默认为 tab
|
||||
-k :指定排序的区间
|
||||
```
|
||||
|
||||
@ -959,8 +963,6 @@ $ grep -n 'the' regular_express.txt
|
||||
$ grep -n 'go\{2,5\}g' regular_express.txt
|
||||
```
|
||||
|
||||
其它正则表达式请参考 [正则表达式](https://github.com/00000H/notes/blob/master/notes/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.md).
|
||||
|
||||
## printf
|
||||
|
||||
用于格式化输出。
|
||||
@ -977,7 +979,7 @@ $ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt)
|
||||
## awk
|
||||
|
||||
```html
|
||||
$ awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename
|
||||
$ awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
|
||||
```
|
||||
|
||||
awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:\$n,n 为字段号,从 1 开始,\$0 表示一整行。
|
||||
|
Loading…
Reference in New Issue
Block a user