目录

Linux复习笔记

Linux基本知识复习笔记

文件和目录管理

Linux文件系统类型

https://cdn.nlark.com/yuque/0/2019/png/368236/1561180878066-54a98689-d029-4521-a212-f64686d3bd82.png#height=211&id=Xabdi&name=%E5%9B%BE%E7%89%87.png&originHeight=422&originWidth=624&originalType=binary&ratio=1&size=94782&status=done&style=none&width=312

目录树结构

Linux目录是使用 / 正斜杠分割,而windows则是 \ 反斜杠
https://cdn.nlark.com/yuque/0/2019/png/368236/1561181219025-a96d3a0a-2bf5-4c8d-94de-f106a70d1f6e.png#height=333&id=Ywh8v&name=%E5%9B%BE%E7%89%87.png&originHeight=665&originWidth=955&originalType=binary&ratio=1&size=92119&status=done&style=none&width=477.5

Linux文件结构

linux的文件结构是树状结构,而且每个枝叶可以被挂载到不同的物理设备上
https://cdn.nlark.com/yuque/0/2019/png/368236/1561181314757-c0f2f092-f799-4ea4-9fe4-5db931d47610.png#height=177&id=VzNTu&name=%E5%9B%BE%E7%89%87.png&originHeight=354&originWidth=621&originalType=binary&ratio=1&size=9258&status=done&style=none&width=310.5

绝对路径和相对路径

  • 绝对路径:从根目录开始的路径
  • 相对路径:从当前目录开始的路径,可向上也可向下
1
2
cd /home # 绝对路径
cd someuser # 相对路径

常见命令总览

目录树中走动

  • cd
  • pwd
  • ls

创建、删除、移动、复制

  • touch
  • mkdir
  • rmdir
  • rm
  • cp
  • mv

文件查看

  • cat
  • tac
  • more
  • less
  • head
  • tail

通配符

  • 问号 ? 代表一个字符
  • 星号* 代表零个或多个字符
  • 中括号 [] 标识多个可能的选择,如[a-i] 
  • 感叹号 ! 将不需要的内容排除在外,如[!a] 

pwd

显示当前路径的绝对路径

mkdir

主要有两个选项 -m-p 

  • -m :mode,设置目录权限,和chmod中使用的一样。
  • -p :parents,当目录已存在时不报错,并且在必要的时候级联创建目标目录的父目录。

rmdir

rmdir 只能用于删除空目录,如果需要删除有文件的目录需要使用 rm 命令。
rmdir 也有 -p 选项,但也只能用于删除空目录。

rm

  • -r :用于删除目录,会提示输入确认信息
  • -f :表示强制删除,不会询问是否删除

禁忌

1
rm -rf /

ls

列出目录中的内容

  • -l : 长格式显示详细信息,每行列出的信息依次是:文件类型与权限、链接数、拥有者、拥有组、大小、时间信息、文件名
  • -a : 显示所有子目录与文件,包括隐藏文件
  • -d : 如果参数是目录,只显示其名称而不显示其下的内容
  • -t : 按时间排序(和-c -u 搭配使用;我经常用 ll -tc)
  • -c : 按照文件修改时间排序
  • -u : 按照文件上次存取时间排序
  • -i : 在输出的第一列显示inode号
  • -R : 对子目录递归执行 ls 
  • -F : 以不同标记注明文件类型

文件类型

Linux中文件后缀名(扩展名)只能用来标识文件类型,并没有实际约束力

  • 占用存储空间的类型
    • 文件
    • 目录
    • 符号链接。符号链接记录的是路径,路径不长时存在inode里面。
  • 其他四种
    • 套接字
    • 块设备
    • 字符设备
    • 管道

https://cdn.nlark.com/yuque/0/2019/png/368236/1561186368421-aec190e4-c666-4c4c-a61e-6fa1e7145c1c.png#height=152&id=PLm6O&name=%E5%9B%BE%E7%89%87.png&originHeight=304&originWidth=698&originalType=binary&ratio=1&size=29519&status=done&style=none&width=349

常见扩展名

  • tar, .tar.gz, .tgz, .zip, .tar.bz表示压缩文件,创建命令为tar, gzip, unzip等
  • .sh文件表示shell脚本文件
  • .pl表示perl语言文件
  • .py表示python语言文件
  • .html, .htm, .php, .jsp, .do表示网页语言文件
  • .conf表示系统服务的配置文件
  • .rpm表示rpm安装包文件

链接文件

一份物理文件副本和多个虚拟副本

  • symbolic link,软链接,符号链接

指向存放在虚拟目录结构中某个地方的另一个文件
内容不同

  • hard link,硬链接

会创建独立的虚拟文件,其中包含了原始文件的信息及位置
再建一个inode连接到文件放置的块区域

touch

处理对象可以是文件或者是目录
如果文件不存在则常见一个空文件,如果存在那么会改变modify time

cat

可用于查看文件内容,从键盘读取数据,合并文件等

1
cat [OPTION]... [FILE]...
  • -b : 不显示空行
  • -E : 每一行行尾加上 “$”
  • -T : Tab->“ˆI”
  • -n : 显示行号
  • -s : 连续空行-> 一个空行
  • -v : 显示除了 Tab 和 Enter 以外的所有字符
  • -A : 相当于 –vET

tac

反向cat

which

在PATH中查找,返回绝对路径
https://cdn.nlark.com/yuque/0/2019/png/368236/1561204433706-e8706ef6-3090-4ad4-b0f3-a41f65d0c45d.png#height=161&id=MAsAb&name=%E5%9B%BE%E7%89%87.png&originHeight=201&originWidth=690&originalType=binary&ratio=1&size=154821&status=done&style=none&width=552

whereis

  • 查找二进制文件、源文件和帮助手册文件路径
  • 模糊查找,首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进制文件、源文件和帮助手册文件,使用之前可以使用updatedb命令手动更新数据库。

https://cdn.nlark.com/yuque/0/2019/png/368236/1561204351600-7fe2bb15-b2d0-4795-bbfc-a7141f9e56ab.png#height=161&id=PMzW6&name=%E5%9B%BE%E7%89%87.png&originHeight=201&originWidth=690&originalType=binary&ratio=1&size=154821&status=done&style=none&width=552

locate

  • 也是从数据库建立的索引中查找,不同的是该命令查找所有部分匹配的文件,使用之前可以使用updatedb命令手动更新数据库
  • 不限类型的模糊查找默认情况下(当filename中不包含通配符*),locate会给出所有与*filename*相匹配的文件的路径。

https://cdn.nlark.com/yuque/0/2019/png/368236/1561204524969-5654a208-c2cf-42a2-898d-0f32726889a4.png#height=199&id=gsQhm&name=%E5%9B%BE%E7%89%87.png&originHeight=249&originWidth=996&originalType=binary&ratio=1&size=275578&status=done&style=none&width=796.8

find

1
2
find    [option]    [path1  path2  ......]    [filename]
find / -name dust -exec rm -rf {} \;

遍历当前工作目录及其子目录,find命令是在硬盘上遍历查找,非常耗硬盘资源,查找效率相比whereis和locate较低。

  • -name : 按照名字查找
  • -regex : 按照正则查找
  • -type :按照类型查找
    • b : 块设备
    • c:字符设备
    • d:目录
    • p:管道(FIFO)
    • f:普通文件
    • l:符号链接,但是除非链接失效,否则当 -L 选项或者 -follow 生效的时候是永远找不到的,因为会跳往链接目的地。
    • s:套接字
    • D:door(solaris系统独有)
    • 一次寻找多个类型的文件可以使用 **,** 隔开
  • -context :Selinux安全上下文
  • -uid :拥有者uid
  • -used :在 n 天内被更改过
  • -user :文本所有者
  • -writable :当前用户是否可写入
  • 更多请见mandb

https://cdn.nlark.com/yuque/0/2019/png/368236/1561204688602-150a50a3-c382-48ea-bef0-64263df95d62.png#height=467&id=fjKgt&name=%E5%9B%BE%E7%89%87.png&originHeight=584&originWidth=954&originalType=binary&ratio=1&size=445417&status=done&style=none&width=763.2

用户和用户组管理

todo

磁盘管理

todo

文本编辑工具Vim

todo

文档的压缩和打包

todo

包管理器

todo

shell基础知识

todo

正则表达式

定义

正则表达式通常缩写为 regex ,全称是regular expressions
用于字符串的处理:查找、删除、删除特定模式(pattern)的字符串

组成

普通字符+元字符

例如

* 通配符
https://cdn.nlark.com/yuque/0/2019/png/368236/1561206444513-f05a4528-a71c-497c-b1a0-055520eaa7f5.png#height=224&id=aM41t&name=%E5%9B%BE%E7%89%87.png&originHeight=280&originWidth=1016&originalType=binary&ratio=1&size=43590&status=done&style=none&width=812.8

两种较为流行的正则表达式引擎

  • POSIX基础正则表达式(basic regular expression,BRE)引擎(sed)
    • 星号*,点.,开头^ ,行尾$ ,方括号[],反斜线\,尖括号<>
  • POSIX扩展正则表达式(extended regular expression,ERE)引擎(egrep,gawk)
    • 问号?,加号+,转义波形括号{}, 圆括号(),竖线 |

egrep命令

egrep=grep -E #使用扩展正则表达式

1
egrep ’abc’ a.txt

grep参数

  • -v :反向匹配,输出不匹配的
  • -n : 显示行号
  • -c :count,只显示匹配到了多少行
  • -e : 指定多个匹配模式,及一条命令应用多个正则表达式

举例
1
2
3
4
5
harley1 harley2 harley3
> harley[123]

H+任意个小写字母+y
> H[[:lower:]]*y

基本匹配符

https://cdn.nlark.com/yuque/0/2019/png/368236/1561208430341-c3d753ce-cdb4-437f-ac49-2d37cad3e269.png#height=370&id=HdaDi&name=%E5%9B%BE%E7%89%87.png&originHeight=463&originWidth=976&originalType=binary&ratio=1&size=219620&status=done&style=none&width=780.8

匹配行或词

  • grep Harley data
  • grep ‘ˆHarley’ data harley开头的
  • grep ‘Harley$’ data harley结尾的
  • grep ‘ˆHarley$’ data 整行只有harley
  • grep ‘<kn’ data kn开头的单词
  • grep ‘ow>’ data ow结尾的单词
  • grep ‘<know>’ data  单词know
  • grep ‘\bknow\b’ data   单体know(on systems that use the GNU utilities such as Linux and FreeBSD))

grep匹配词语(word)
  • grep -w ’know’ data
  • grep ‘<know>’ data
  • grep ‘\bknow\b’ data

正则预定义符号及范围标识符

https://cdn.nlark.com/yuque/0/2019/png/368236/1561217078637-15a6eeb6-2331-4911-9b9b-92579f783aea.png#height=360&id=uHUBO&name=%E5%9B%BE%E7%89%87.png&originHeight=450&originWidth=800&originalType=binary&ratio=1&size=114145&status=done&style=none&width=640

  • grep ‘21[[:alpha:]]’ data (brackets are part of the name)
  • grep ‘[[:upper:]][[:upper:]][[:digit:]][[:lower::]]’data
  • grep ‘[3-7]’ data
  • grep 'X[ˆao]' data
  • grep ‘[ˆa-zA-Z]’ data
  • grep ‘[ˆ[:alpha:]]’ data

**  以上均只会匹配单个字母**

重复操作符

https://cdn.nlark.com/yuque/0/2019/png/368236/1561217525300-5cd85c41-d2d7-4789-96e7-4b480c7bf14e.png#height=383&id=SZy4g&name=%E5%9B%BE%E7%89%87.png&originHeight=479&originWidth=1116&originalType=binary&ratio=1&size=209482&status=done&style=none&width=892.8

sed流编辑器

sed = stream editor

它编辑的对象通常是Unix管道中的文本流
诞生于1973 – 1974年,发明人是贝尔实验室的Lee E. McMahon (毕业于哈佛大学)

简单原理

  1. 读入一行,去掉尾部换行符,存入pattern space,执行编辑命令。
  2. 处理完毕,除非加了-n参数,把现在的pattern space打印出来,在后边打印曾去掉的换行符。
  3. 把pattern space内容给hold space,把pattern space置空。
  4. 接着读下一行,处理下一行。

sed的操作

  1. 一次从输入中读取一行数据。
  2. 根据所提供的编辑器命令匹配数据。
  3. 按照命令修改流中的数据。
  4. 将新的数据输出到STDOUT。

命令格式

1
sed options script file

可用选项

https://cdn.nlark.com/yuque/0/2019/png/368236/1561257796087-7b7b442f-be00-48e4-8a34-f980d107f020.png#height=101&id=IU6Kq&name=%E5%9B%BE%E7%89%87.png&originHeight=126&originWidth=838&originalType=binary&ratio=1&size=28169&status=done&style=none&width=670.4

-e与不加-e的区别

引用自CSDN 

-e : 可以在同一行里执行多条命令
不加 -e 只有 ’s/11/00/g' 进行了操作

https://cdn.nlark.com/yuque/0/2019/png/368236/1561258074182-26a653a5-45cc-4480-b948-8e2c9eafd92a.png#height=194&id=ubdSh&originHeight=194&originWidth=481&originalType=binary&ratio=1&size=0&status=done&style=none&width=481

加上 -e 时 ’s/11/00/g' 与 ’s/22/99/g' 都进行了操作
https://cdn.nlark.com/yuque/0/2019/png/368236/1561258091178-dff187bb-94b7-4658-af04-a8116c397fa1.png#height=176&id=eBbrp&originHeight=176&originWidth=507&originalType=binary&ratio=1&size=0&status=done&style=none&width=507

在命令行中定义编辑器命令

1
2
3
$ echo "This is a test" | sed 's/test/big test/'
This is a big test
$ sed 's/dog/cat/' data1.txt

在命令行使用多个编辑器命令

1
$ sed -e 's/brown/green/; s/dog/cat/' data1.txt

从文件中读取编辑器命令

1
2
3
4
5
6
$ cat script1.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/

$ sed -f script1.sed data1.txt

替换命令s

https://cdn.nlark.com/yuque/0/2019/png/368236/1561260644619-fbf34cf2-1665-44c8-9070-3cc63994e2a7.png#height=338&id=eM76d&name=%E5%9B%BE%E7%89%87.png&originHeight=423&originWidth=769&originalType=binary&ratio=1&size=219105&status=done&style=none&width=615.2
https://cdn.nlark.com/yuque/0/2019/png/368236/1561260655161-6818ec6b-5dbe-403d-8843-2aacb58c4d0c.png#height=377&id=C9oIZ&name=%E5%9B%BE%E7%89%87.png&originHeight=471&originWidth=715&originalType=binary&ratio=1&size=102403&status=done&style=none&width=572

shell脚本

todo