---
# System prepended metadata

title: Linux 通用基础
tags: [learn]

---

###### tags: `learn`

# Linux 通用基础

别人的笔记文件：‪E:\Processing\Linux\linux教程_20141002.pdf

- [x] 3/2：完成第一次复习！接下来可以看桌面的书了！

## 1. BackGround

![](https://i.imgur.com/qr69r6Z.png)

安装相关的包都在我的百度云里面有了！VMware + ubuntu

**网络设置**：

![](https://i.imgur.com/K6DtWuY.png)

**虚拟机快照（回滚）**

![](https://i.imgur.com/1ioB5OB.png)

---

## 2. Linux常用命令

实际上有超过200个命令，但实际上我们常用的就那么几个，所以我们只需要记住那几个，其余命令在需要使用时候查阅便可。

![](https://i.imgur.com/dduL3cP.png)
![](https://i.imgur.com/cn4QtKJ.png)

![](https://i.imgur.com/0LUt6fT.png)
![](https://i.imgur.com/FDsSmtM.png)

### 运行级别

![](https://i.imgur.com/r0VH37v.png)

> 就是使用 init x 来改变我们的可视gui。
> 查看运行级别： runlevel


---

### 文件目录指令

![](https://i.imgur.com/yez0mQX.png)
![](https://i.imgur.com/8saeRjz.png)
![](https://i.imgur.com/6tYIE1l.png)
![](https://i.imgur.com/9Qxh1z0.png)
![](https://i.imgur.com/IFd1jAR.png)
![](https://i.imgur.com/s1e30wa.png)
![](https://i.imgur.com/SYnl4Si.png)
![](https://i.imgur.com/7i0ULY6.png)
![](https://i.imgur.com/QMwLjVP.png)
![](https://i.imgur.com/ouV01sB.png)
![](https://i.imgur.com/jctKcoR.png)
> 这里的echo就相当于是编程语言中的return或者print！

![](https://i.imgur.com/NiXpc41.png)
![](https://i.imgur.com/CnKQzCG.png)
> 一个箭头是覆盖（也就是'w'）， 两个箭头是追加(也就是'a')

![](https://i.imgur.com/7DRZqWl.png)
> 相当于创建快捷方式！

![](https://i.imgur.com/eNrztgf.png)

---


### 搜索查找类指令

![](https://i.imgur.com/hg6JYli.png)
![](https://i.imgur.com/DU6gBIO.png)
![](https://i.imgur.com/HsIMrV3.png)
![](https://i.imgur.com/hrUk2mS.png)
> 注： grep也可以利用参数 -v 进行反向查找（就是查找不带后面跟着的字符的）
> 例子如下：

![](https://i.imgur.com/pm4ekbj.png)
**显然我第一次搜索的结果是grep进程本身；但是很明显我们不是想搜索本身进程，所以就 -v grep 把带grep的结果全部排除！就可以实现这个效果。**

---
### 时间日期类指令


![](https://i.imgur.com/zdGR7Bn.png)
![](https://i.imgur.com/A9fIeev.png)



---
### 压缩/解压类指令
![](https://i.imgur.com/zm8vs1D.png)
![](https://i.imgur.com/FM5n8V2.png)
![](https://i.imgur.com/QMciCN0.png)
![](https://i.imgur.com/ysm6yxp.png)
![](https://i.imgur.com/c56oq1I.png)




---

## 3. Linux目录

![](https://i.imgur.com/yxYC3C9.png)
![](https://i.imgur.com/6MUpzeU.png)
![](https://i.imgur.com/8OGN4QW.png)
![](https://i.imgur.com/BZDyCdQ.png)



---

## 4. 远程登录

![](https://i.imgur.com/bQzUXA2.png)

Xshell可以远程登录，而Xftp可以实现文件传输。

链接方式简单，在linux虚拟机上输入 ifconfig查询ip后利用ip连接即可。

---

## 5. Vim编辑器

![](https://i.imgur.com/vgrWXuQ.png)
![](https://i.imgur.com/ie2WvFc.png)
![](https://i.imgur.com/rzQSdh4.png)
![](https://i.imgur.com/vWTRx44.png)


---

## 6. 开关机、用户指令等

![](https://i.imgur.com/HakLgr2.png)
![](https://i.imgur.com/xKxcljS.png)
![](https://i.imgur.com/4srwi6O.png)
![](https://i.imgur.com/cushtVc.png)
![](https://i.imgur.com/Hrrhobk.png)
![](https://i.imgur.com/9cpfk4o.png)
![](https://i.imgur.com/kZ4gen9.png)
![](https://i.imgur.com/9yZ5FOl.png)

![](https://i.imgur.com/J3S5r2C.png)
![](https://i.imgur.com/bjFDgwT.png)
![](https://i.imgur.com/pjDCdPU.png)
![](https://i.imgur.com/3WWaOha.png)


---

### 权限

![](https://i.imgur.com/Cgtix1n.png)

> 第0位的 '-' 代表的是普通文件。

![](https://i.imgur.com/YX4WCcI.png)
![](https://i.imgur.com/G6wyZyI.png)

![](https://i.imgur.com/Sk8U1nB.png)
**当然我们也可以修改权限！**

![](https://i.imgur.com/0Tk7lLe.png)

![](https://i.imgur.com/yFbnMXV.png)



案例：
![](https://i.imgur.com/epVwbse.png)
![](https://i.imgur.com/21Lgox8.png)
![](https://i.imgur.com/SW38kb6.png)


---

### 修改文件所有者与所在组

![](https://i.imgur.com/2EI2W8k.png)
![](https://i.imgur.com/eP8S0Kh.png)

实践：跟着玩玩linux

![](https://i.imgur.com/dwRoTW5.png)

---

## 7. 定时任务调度
### 1. crontab 周期性反复执行任务


![](https://i.imgur.com/3QXXXYm.png)
![](https://i.imgur.com/zk1C2w7.png)
![](https://i.imgur.com/Hc6WMzb.png)
![](https://i.imgur.com/gykfyqj.png)
![](https://i.imgur.com/4m1jFqT.png)
![](https://i.imgur.com/P9UtkY6.png)
![](https://i.imgur.com/861DVyj.png)
![Uploading file..._b5bpc44uo]()



---


### 2. at 一次性执行任务

![](https://i.imgur.com/njUc5SM.png)
![](https://i.imgur.com/kepHyY2.png)
![](https://i.imgur.com/hpCqfiv.png)
![](https://i.imgur.com/aajhyOb.png)
![](https://i.imgur.com/0znSvIg.png)


---

## 8. 磁盘分区，挂载机制

![](https://i.imgur.com/yjqzd4Y.png)

> 意思就是，在linux系统的目录实际上和我们的硬盘是相互对应挂载的！可以通过： lsblk 指令查看。如我的就是下面这样：

![](https://i.imgur.com/P3E7Jrg.png)
![](https://i.imgur.com/L9Dmp6h.png)
> 可以看出来，我的电脑都是SCSI硬盘！且只有一块硬盘挂载！（因为只有sda没有sdb！）
![](https://i.imgur.com/69ShOI5.png)

### 挂载经典案例：增加一块硬盘
![](https://i.imgur.com/r3zjxPr.png)

![](https://i.imgur.com/aFOsqVv.png)
![](https://i.imgur.com/gg8sfgF.png)
![](https://i.imgur.com/iBDtaNp.png)
![](https://i.imgur.com/1vtC7A0.png)

### 查询磁盘/指定目录的使用情况
![](https://i.imgur.com/nl2K90D.png)
![](https://i.imgur.com/xpcy34L.png)
![](https://i.imgur.com/oYspUqx.png)
![](https://i.imgur.com/fEBA9kz.png)
> 为什么上面的指令是这么写呢？？？别忘了！
> 因为所有文件的十位描述分别为开头的'd'或者'-'加上后面的九位o，g，e权限。其中'd'对应目录， '-'对应文件！所以这里直接用grep正则化筛选就ok拉！
> 后面的wc -l 是wordcount，就把筛选出来的东西全部数了一遍！

![](https://i.imgur.com/9pFYJT1.png)

---


## 9. 网络配置

![](https://i.imgur.com/W7vhN3L.png)
![](https://i.imgur.com/5u6JLld.png)
![](https://i.imgur.com/YJ0xYVy.png)


### 网络环境配置方案

![](https://i.imgur.com/FMyILPa.png)
> 为什么不好？因为服务器的ip得要是固定的！随机的ip无法在工作中作为服务器！
![](https://i.imgur.com/N3eqwFr.png)

### 设置主机名和host映射
![](https://i.imgur.com/f8nVG2P.png)
> 那么问题就来了！如果我知道我的主机名但是不知道其IP地址，如何映射查找到此主机？
![](https://i.imgur.com/S6P5AUK.png)
![](https://i.imgur.com/onAgAUz.png)
![](https://i.imgur.com/tgC7bGM.png)


---
## 10. 进程管理（重点）
![](https://i.imgur.com/QJYBgqH.png)
![](https://i.imgur.com/1nao0aR.png)

![](https://i.imgur.com/ocOCDCK.png)
![](https://i.imgur.com/eV1PxpU.png)
![](https://i.imgur.com/QxNM2zu.png)

### 终止进程

![](https://i.imgur.com/IxtUy7O.png)

### 查看进程树：pstree

![](https://i.imgur.com/dFZf48W.png)


---

## 11. 服务管理与监控

![](https://i.imgur.com/Dmh5mTE.png)
![](https://i.imgur.com/BgS58nr.png)

![](https://i.imgur.com/weHPAAT.png)


### systemctl 指令

![](https://i.imgur.com/NXLiiio.png)

### 动态监控进程

![](https://i.imgur.com/KBcbyCr.png)

![](https://i.imgur.com/9v8eC28.png)

### 监控网络状态

![](https://i.imgur.com/dnFB3rU.png)

![](https://i.imgur.com/DUzaUHG.png)


---

## 12. RPM管理（注意，ubuntu里并无rpm， 用的都是deb）

![](https://i.imgur.com/DeNSSjv.png)
![](https://i.imgur.com/O5QT0FD.png)
![](https://i.imgur.com/OIJAXUp.png)
![](https://i.imgur.com/iZWXrnn.png)

### yum与apt（ubuntu是apt， centos是yum，但实际操作基本一致）
![](https://i.imgur.com/mF0FnBb.png)
> 使用ubuntu则将上面的yum全改为apt即可！
> 可见下面我用ubuntu的例子。
![](https://i.imgur.com/tNf8qIQ.png)

**补充：apt**

![](https://i.imgur.com/IZmQRdZ.png)
![](https://i.imgur.com/ru4QnPM.png)
> 现在的语法的话，直接apt就可以，不需要后面的-get


---

# shell编程
## 基础知识


![](https://i.imgur.com/jRfqtsS.png)
![](https://i.imgur.com/55c9Jyg.png)

![](https://i.imgur.com/mKAUktf.png)
![](https://i.imgur.com/vD9dKmF.png)

> **注意！！！ shell编程中等号间不可以打空格！！！**

![](https://i.imgur.com/UJi87gu.png)
![](https://i.imgur.com/srTrGIk.png)

### 设置环境变量

![](https://i.imgur.com/huMOpLI.png)
> 我发现Ubuntu实际上不需要第二步？？？
![](https://i.imgur.com/SIJmI7P.png)
> 尝试使用shell编程输出
![](https://i.imgur.com/QWR8lJo.png)
![](https://i.imgur.com/frdtR9B.png)

### 多行注释

![](https://i.imgur.com/LPuF1FD.png)
![](https://i.imgur.com/7PNk2Wh.png)

> 可以发现，注释掉的内容就不显示了！这和其他语言的多行注释是一个道理。只是操作没这么简便！

### 位置参数变量

![](https://i.imgur.com/zcnOMe7.png)
![](https://i.imgur.com/Rn4ZnRd.png)
![](https://i.imgur.com/1hYZR92.png)
> 其实就是利用$加上数字表示第几个参数，然后在控制台调用时候输入参数而已！！！看起来很吓人但原理和其他语言调用参数一个道理！

### 预定义变量

![](https://i.imgur.com/ncgyY4n.png)
![](https://i.imgur.com/JmxpFeo.png)
![](https://i.imgur.com/jrmYBrs.png)


---

## 逻辑部分


### 运算符

![](https://i.imgur.com/kt79hIn.png)
![](https://i.imgur.com/sQ9UpVp.png)
![](https://i.imgur.com/A1b820A.png)


### 流程控制之条件判断：if

![](https://i.imgur.com/k3gxAhr.png)
![](https://i.imgur.com/aFp8ZUm.png)

![](https://i.imgur.com/ttvCUe5.png)
![](https://i.imgur.com/HrCWboE.png)

![](https://i.imgur.com/rS46EbA.png)
![](https://i.imgur.com/N8j7483.png)

### 流程控制之情况分支：case

![](https://i.imgur.com/KPZPSjL.png)
![](https://i.imgur.com/fJc5hhq.png)

### 流程控制之循环遍历：for

![](https://i.imgur.com/Z7UMAsc.png)
![](https://i.imgur.com/f8ycA3x.png)
![](https://i.imgur.com/JvNJOpl.png)
![](https://i.imgur.com/zmj2jf3.png)
![](https://i.imgur.com/fnTcx0v.png)

### 流程控制之循环遍历：while
![](https://i.imgur.com/bJ9FBPo.png)
![](https://i.imgur.com/ybyUFHU.png)

### read读取控制台输入

![](https://i.imgur.com/Nfp08uO.png)
![](https://i.imgur.com/XIRPfZF.png)
![](https://i.imgur.com/DkL60tY.png)

> 10s之内不输入则退出程序！

### 系统函数

![](https://i.imgur.com/mSEI5gq.png)
![](https://i.imgur.com/fOByS90.png)


![](https://i.imgur.com/wZSy6qi.png)
![](https://i.imgur.com/wzWCpp9.png)

### 自定义函数
![](https://i.imgur.com/w2TaZDf.png)
![](https://i.imgur.com/nyGFlkz.png)


## 综合案例
![](https://i.imgur.com/0pJzRFF.png)
![](https://i.imgur.com/DIbSsTp.png)

步骤：

1. 建立数据库mine（create mine）
2. 写shell脚本
![](https://i.imgur.com/dqnLiiX.png)

4. 使用crontab -e 设置自动启动。
![](https://i.imgur.com/TfzryBW.png)


---


# Linux管理篇

## 日志管理（没有看很细）

![](https://i.imgur.com/oymeB6r.png)
![](https://i.imgur.com/3hTFBcS.png)
![](https://i.imgur.com/uz7OEUH.png)
![](https://i.imgur.com/Nv0eOid.png)
![](https://i.imgur.com/GFqFujt.png)
![](https://i.imgur.com/cJknhyn.png)
![](https://i.imgur.com/vDy5pUO.png)
![](https://i.imgur.com/Oy0qQTw.png)
![](https://i.imgur.com/bBFdXPT.png)


### 内存日志
![](https://i.imgur.com/7CNfUBl.png)

---

## 定制自己的Linux

![](https://i.imgur.com/RqeHlZd.png)
![](https://i.imgur.com/aZKld1m.png)
![](https://i.imgur.com/80G8JEv.png)

[详细步骤！参照老韩课程！](https://www.bilibili.com/video/BV1Sv411r7vd?p=127)

---


## linux系统备份与恢复

> 实体机不像虚拟机可以快照！

![](https://i.imgur.com/BTSPc4c.png)



### 1. 备份：dump

![](https://i.imgur.com/rVoMoW9.png)
![](https://i.imgur.com/M4t8i7R.png)
![](https://i.imgur.com/JZFxB9M.png)

> 当备份为一个独立的文件系统(独立的分区)时，可以使用-u，如果只是备份目录下的文件时，不能使用-u --- 所以说他的案例1是错的！不能用u

![](https://i.imgur.com/MokR5rV.png)
![](https://i.imgur.com/HCeJSQg.png)
> **注：Ubuntu的备份记录文件在上面的路径而不是ppt里那个！**

### 2. 恢复：restore    

![](https://i.imgur.com/cnYhB2r.png)
![](https://i.imgur.com/F9ROhKh.png)
![](https://i.imgur.com/55esx3P.png)
![](https://i.imgur.com/Pb5SNfm.png)

---


## WEBMIN：可视化的命令行界面！

这一节介绍了可视化的命令行界面 webmin，只需在linux系统中安装后便可通过网页进行命令行界面的交互类操作。链接留在下面。
[Webmin的安装与功能介绍](https://www.bilibili.com/video/BV1Sv411r7vd?p=138)


---

## bt宝塔：提升运维效率的服务器管理软件


![](https://i.imgur.com/zHCbYZy.png)
![](https://i.imgur.com/RyzrUcv.png)

感觉比webmin还要强大些呢！阿里云就是用的这个！
[bt宝塔的安装与功能介绍](https://www.bilibili.com/video/BV1Sv411r7vd?p=140)



---

# 面试题

### 1. 如何找回root密码？

1. 开机时按e进入编辑界面；
2. 找到Linux开始的行，在最后面输入： init=/bin/sh；
3. 输入完成后，ctrl+x进入单用户模式；
4. 输入mount -o remount,rw/；
5. 设置新密码！
6. 设置后再输入： touch /.autorelabel;
7. 输入： exec/sbin/init 等待新密码生效！

### 2. 韩p142-统计访问量和连接数！

![](https://i.imgur.com/gw17nXj.png)

code

1.
![](https://i.imgur.com/Rr2Eo2Y.png)
![](https://i.imgur.com/ZwCLV9D.png)
![](https://i.imgur.com/MMvucEN.png)

2.
![](https://i.imgur.com/0ymKFni.png)

老师代码：
![](https://i.imgur.com/WeuhER7.png)


---

### 3. 韩p143-找回mysql的root密码

![](https://i.imgur.com/0SJ57FK.png)

解决方法：
1. 查找my.cnf（在/etc/mysql目录下）
![](https://i.imgur.com/6aDRgza.png)

2. 在文件内输入skip-grant-tables跳过登录权限
![](https://i.imgur.com/FiGFJo2.png)

3. 重启mysqld服务读取修改
![](https://i.imgur.com/POFolbW.png)

4. 输入空密码进入sql，进去改密码！

在数据库里的mysql库-user表-authentication-string修改新密码就是！
![](https://i.imgur.com/zLUmW1e.png)

5. 回到/etc/mysql目录，注掉开始的修改，重启服务就ok！


---

### 4. 韩p144-访问量排名

![](https://i.imgur.com/bQhz2mh.png)

code

![](https://i.imgur.com/pcUseP4.png)

![](https://i.imgur.com/a4jiEyO.png)

![](https://i.imgur.com/RqLTO4t.png)

![](https://i.imgur.com/Ujn7zcg.png)

老师code：
![](https://i.imgur.com/xPqafzQ.png)


---

### 5.韩p144-tcpdump！

![](https://i.imgur.com/AVAFWd6.png)

code

![](https://i.imgur.com/0ECL7jZ.png)
这样就可以不停打印！

然后在原先基础上使用 >> 保存即可！

![](https://i.imgur.com/Gk5CUg6.png)


---

### 6.韩p145~147-系统权限划分！！（重要且有趣！！！）

1. 权限划分题
![](https://i.imgur.com/0s6N88I.png)

敞开谈！没有标准答案，为了表示自己是知道的，我们最好从文件权限含义（在文件与目录上）开始，然后慢慢谈！

![](https://i.imgur.com/AQ59XnO.png)

![](https://i.imgur.com/CH1olRK.png)

+++++++++++

2. 权限思考题（真他妈有趣！）
![](https://i.imgur.com/TTI0frR.png)

回答：
1.yny
2.nnn
3.ynn
4.yny

- 对目录有执行权限才进得去目录，不然连目录都进不去！
- 对目录有读权限才可以使用ls之类的指令！
- 对目录有写权限才可以对目录内的文件进行增删！
- 这些在上面都有


---

### 7.韩p149-io读写监控
![](https://i.imgur.com/vZZ19ig.png)

1. netstat：查看网络状态
2. lsblk：查看硬盘分区情况
3. systemctl：管理一系列服务状态
4. ps/top：静/动态查询任务情况
5. chkconfig：查看服务启动状态
6. crontab/at：设置定时任务


![](https://i.imgur.com/jQPGSYB.png)
查看内存：top

io读写：iotop

磁盘存储：df -lh / lsblk？

端口占用：netstat -tunlp

进程查看：ps -aux

![](https://i.imgur.com/PD9VhUi.png)


---

### 8.韩p150-统计文件个数 & 行数

1.
![](https://i.imgur.com/X8gFLaK.png)

mine

![](https://i.imgur.com/duTihq4.png)
![](https://i.imgur.com/cpu31o4.png)

+++++++++++++++

2.
![](https://i.imgur.com/t7R2vk2.png)

mine

![](https://i.imgur.com/N24uFBJ.png)
![](https://i.imgur.com/cpr4xrK.png)
![](https://i.imgur.com/3EMRXbM.png)

++++++++++

3.
![](https://i.imgur.com/29R7tlZ.png)
![](https://i.imgur.com/cQZQxZo.png)

++++++++++++++++

4.
![](https://i.imgur.com/S38of3f.png)

mine

![](https://i.imgur.com/Wh29omN.png)
![](https://i.imgur.com/j3pWcZE.png)

![](https://i.imgur.com/0ru5buk.png)


---

### Final.韩p152-Linux优化

![](https://i.imgur.com/X65Taeb.png)



---


# 追加：自己学习的补充！

## 1. awk的妙用 - [原文](https://www.linuxprobe.com/linux-awk-clever.html)

简单来说awk就是把文件逐行读入，（空格，制表符）为默认分隔符将每行切片，切开的部分再进行各种分析处理，命令格式如下：

```
awk [-F 分隔符] ‘命令’ 

这里的常用命令一般是 print ！ （注意要用大括号{}括起来）

-F 分隔符： 就是指定分隔符！
```

> [-F 分隔符]是可选的，因为awk使用空格，制表符作为缺省的字段分隔符，因此如果要浏览字段间有空格，制表符的文本，不必指定这个选项，但如果要浏览诸如/etc/passwd文件，此文件各字段以冒号作为分隔符，则必须指明-F选项！

eg.
![](https://i.imgur.com/Y6J9jEg.png)


eg. 用awk 截取/etc/passwd中的用户名！

![](https://i.imgur.com/jUPU89W.png)


eg. 用awk 截取用户名以及登录记录！
![](https://i.imgur.com/6pQ88k4.png)


---
## [下面内容的源地址](https://www.cnblogs.com/xuxinstyle/p/9609551.html)

## 2. Find补充：查找一定时间内修改过的文件！

![](https://i.imgur.com/VQosCpA.png)

eg.
![](https://i.imgur.com/o88l2X7.png)

---

## 3. shell code的一些常识

首先， **#!/bin/bash** 这里的 **#！** 实际上是一个约定的标记，它告诉系统这个脚本需要什么解释器来执行，即使用哪一种Shell。

另外重复下， shell的多行注释：  
```
第一行前 :<<!
最后一行后 !

eg.
:<<!
echo 'New Skill? Nope!'
my_name='WEi jH'
echo "my_name = "$my_name"! \n"
your_name='L_rui'
echo "my name is $my_name and your name is $your_name"
echo $my_name $your_name
echo ${#my_name}   # 检查字符串长度方式：加#

echo ${my_name:2:5}   # 字符串切片
!
```

并且，shellcode的echo语句的转义符同样为 \ 

此外，很重要的一点：VIM怎么显示行号？

`    ：set nu`

并且，使用if检查条件是否成立时，常和test连用，即 ==if test 语句==
![](https://i.imgur.com/ZxTLobm.png)
![](https://i.imgur.com/d2aH8k4.png)
![](https://i.imgur.com/Ft583iC.png)


---



