Linux 知识地图
从阿里云迁移到CSDN:https://developer.aliyun.com/article/724622
1. 概述:
极客时间发表了 linux 知识体系的知识图谱,在参照其地图整理学习 linux 过程中,对原内容做了整理修改,并增加了容器篇等内容,图谱不少内容抄自原地图,分享一下:
2. 基础篇
2.1 Linux常见发行版本
- Red Hat
- Ubuntu
- CentOS
- Debian
- Fedora
2.2 目录结构
- /bin 最常用命令存放目录
- /boot linux 启动时核心文件,包括连接文件以及镜像文件
- /dev Linux 外部设备,linux 一切都是文件
- /etc 系统管理员需要配置的文件和子目录
- /home 所有用户的主目录,按照用户名建立子目录
- /lib 系统最基本的动态连接共享库
- /lost+found 非法关机时存放临时文件
- /media linux 系统自动识别的一些设备,比如 U 盘,光驱
- /mnt 用户临时挂载的文件系统,比如挂载光驱的光盘
- /opt 主机额外安装软件的目录,比如 oracle 安装
- /proc 虚拟目录,系统内存的映射,通过这个目录获取系统信息,比如进程信息等
- /root 系统管理员主目录
- /sbin 存放系统管理员使用的系统管理程序
- /selinux 安全机制 selinux 的目录(redhat/centos 特有)
- /srv 服务启动后需要提取的数据
- /sys linux2.6内核新目录,sysfs 文件
- /tmp 临时文件目录
- /usr 用户自身的程序与文件目录
- /usr/bin 系统用户使用的应用程序
- /usr/sbin 系统管理员的应用程序和守护程序
- /usr/src 内核源代码默认的放置目录
- /var 存放不断扩充的东西,包括日志文件等
- /run 临时文件系统,存储系统启动以来的信息
3.系统操作篇
3.1 使用终端
1. 命令提示符
$ 普通用户
# root 用户
2. 命令和路径补全: tab 键
3. 命令的分类(使用 type 查看某个命令的所属分类) type ls
3.2 帮助命令
1. man man xxx: 获取 xxx 命令的帮助 man 1 man:查看 man 命令自身的帮助 2. help help xxx: 获取内部命令的帮助 xxx --help: 获取外部命令的帮助 3. info 比 man 更丰富的帮助信息,格式:info xxx
3.3 文件与目录管理
1. 文件与目录查看命令:ls -l 显示文件的详细信息 -a 显示隐藏文件 -r 逆序显示 -t 按时间排序 -R 递归显示
2. 建立和删除目录 mkdir 新建目录 rmdir 删除空目录 rm -r 递归删除目录与文件
3. 路径操作(绝对路径与相对路径) cd 进入指定路径 pwd 显示当前路径
4. 通配符 * 匹配任意字符 ? 匹配单个字符 [xyz] 匹配 xyz 任意一个字符 [a-z] 匹配字符串 [|xyz]或[^xyz] 匹配不在 xyz 中的任何字符5. 复制文件cp -r 复制目录 -p 保留用户权限时间 -a 尽可能保留原始文件的属性,等同于-dpr
6. 删除文件 rm-r 递归删除 -f 不提示
7. 移动与重命名 MV 移动文件 mv file1 dir1/ 重命名文件 mv file1 file2
3.4 文本查看
1. head head -n 20 显示前20行 2. tail tail -f -n 300 显示结尾300行并刷新 3. cat cat filename |more 4. wc cat filename|grep 'name' | wc -l 统计行数
3.5 打包和压缩
1. tar命令-c:创建新的tar文件tar -zcvf /tmp/etc.tar.gz /etc 打包并以 gz 方式压缩文件-x:解开tar文件tar -zxvf /tmp/etc.tar.gz 解压以gzip压缩的文件-t:列出tar文件中包含的文件的信息tar -tvf /tmp/etc.tar-r:附加新的文件到tar文件中参数-z:使用gzip进行解压缩tar -zcvf /tmp/etc.tar.gz /etc -j:使用bzip2进行解压缩tar -jcvf /tmp/etc.tar.bz2 /etc-Z:使用compress进行解压缩tar -Zcvf /tmp/etc.tar.Z /etc-v:显示解压缩执行过程-f:指定要处理的文件名 2. gzipgzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]gzip -c file1 file2 > foo.gzgzip -ld 1.c.gz //解压,并显示详细过程 3. bzip2bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件]bzip2 -v temp.bz2 //解压文件显示详细处理信息bzip2 -c a.c b.c c.c 压缩文件
3.6 vim 文本编辑器
3.6.1. 正常模式
浏览和修改文本内容
默认打开模式,其他模式按Esc 键就可以返回正常模式
3.6.2. 命令模式(底线)
- 保存操作命令
:q 退出程序
:w 保存文件
ZQ | :q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件
ZZ | :wq | :x 保存并退出
* 查找命令
/text:查找text,按n查找下一个,按N查找前一个
?text:查找text,反向查找,按n查找下一个,按N查找前一个
:set ignorecase/noignorecase 忽略/不忽略 大小写的查找
:set hlsearch/nohlsearch 高亮搜索结果/关闭高亮,所有结果都高亮显示,而不是只显示一个匹配。
:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮;
:set incsearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
- 其它
:set number/nu 显示行号:!command 执行 shell 命令 command:n,m w!command 将文件中 n 行到 m 行的内容作为 command 的输入并执行,若不指定 n,m,则代表整个文件内容作为 command 执行:r!command 将命令 command 的输出结果放到当前行:set nonu 取消行号:r filename 把 filename 文件的内容插入到当前光标所在位置下ctrl + g 当前行信息g ctrl + g 字数统计
- 替换命令
:s/regexp/replacement 替换当前行第一个匹配:S/regexp/replacement 替换当前行所有匹配:n,\$s/regexp/replacement/ 替换n行到最后一行中第一个匹配:n,$S/regexp/replacement/g 替换第 n 行到最后的每个匹配
- 多行拷贝移动
:n,m co p 将行 n 到 m 行之间的内容拷贝到第 p 行下:n1,n2 m p 将 n1行到 n2行之间的内容移动到第 p 行下
3.6.3. 插入模式
- 进入插入模式
i 在光标所在字符前开始输入文字并进入插入模式
a 在光标所在字符后开始输入文字并进入插入模式
o (字母o) 在光标所在行的下面单独开一新行来输入文字并进入插入模式
s 删除光标所在的字符并进入插入模式
I 在行首开始输入文字并进入插入模式。此行首指第一个非空白字符处。如果行首有空格,则在空格之后输入文字并进入插入模式
A 在行尾开始输入文字并进入插入模式。这个好用,您不必管光标在此行的什麽地方,只要按 A 就会在行尾等着您输入文字。
O (大写字母O) 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S 删除光标所在行并进入插入模式
删除命令
行删除
D | d$ 删除光标到行尾d^ 删除至行首dd 删除行dnG 删除第 n 行到当前行dG 删除当前行到最后一行S 删除当前行且处于可编辑状态C 删除到行尾,并处于可编辑状态:n,m d 将第 n 行到 m 行的内容删除
字符删除
x 向后删除一个字符nx 向后删除 n 个字符X 向前删除一个字符nX 向前删除 n 个字符s 删除光标所在字符,并处于可编辑状态i 在光标前插入a 在光标后插入
单词删除
diw 删除光标所在单词,不包括空白字符daw 删除光标所在的单词,包括空白字符dw 当前光标位置删除到下一个单词词首ndw | ndW 删除光标处开始及最后的 n-1个词
- 复制粘贴命令
yy 复制当前行nyy 复制从当前行开始的 n 行ynw 复制 n 个单词ynl 复制 n 个字符y$ 复制当前光标至行尾处p 粘贴到光标之后P 粘贴到光标之前
- 移动命令
单词
w 下一个单词第一个字符W 下一个长单词第一个字符e 下一个单词最后字符E 下一个长单词最后一个字符b 前一个单词第一个字符B 前一个长单词第一个字符ge 前一个单词的最后一个字符
行
$ 行尾0(数字) 行第一个字符^ 第一个非空字符gg 第一行G 到最后一行nG 到第 n 行
屏幕
ctrl+u 向上滚动半屏ctrl+d 向下滚动半屏Pgup | ctrl+b 向上滚动一屏PgDn | ctrl + f 向下滚动一屏
句子
( 句首) 句尾
段落
{ 段首} 段尾
- 其它
撤销与重复
u 撤销前次操作ctrl + r 重复前次操作:e! 文档还原原始状态
3.6.4. 可视模式
3.7 用户管理
3.7.1 用户命令
- 用户主目录/home /root
- 常用用户命令
useradd -p 'PASSWORD' ${USERNAME} 添加用户userdel 删除用户passwd 设置用户密码usermod 修改用户信息groupadd 添加组groupdel 删除用户组
- 以管理员身份运行
su 切换当前用户身份sudo 用 root 身份执行某条命令visudo 修改 sudo 命令配置文件
3.7.2 用户配置文件
/etc/passwd 用户信息配置文件/etc/shadow 用户密码信息配置文件
3.8 权限管理
权限的表示方法
- 文件权限
r 读权限w 写权限x 执行权限
- 目录权限
rx 进入目录读取文件名wx 修改目录内文件名x 进入目录
- 特殊权限
/etc/passwd 用户信息配置文件
2.权限的相关命令
chmod 修改权限chown 更改属主,属组chgrp 修改属组
4.系统管理篇
4.1 正则表达式
- 正则表达式是什么
对字符串操作的一组逻辑公式用于对符合规则的字符串进行查找和替换
- 初识元字符
^ 字符开始位置$ 字符结束位置. 单个换行之外所有字符
3.扩展元字符
- 匹配字符内容
\d 单个数字0-9
\D 单个非数字 a,-,'
\w 单个字母,数字,下划线 a,1,_
\W 非字母、数字、下划线 {,-,[
\s 空白字符 单个空格、回车(\n)、制表符(\t)
\S 非空白字符
. 换行以外的所有字符
- 匹配次数
* 0次及0次以上 \d* 匹配数字,123,02,空+ 1次及1次以上 \d+ 匹配数字 123,02,3? 0次或1次 \d? 匹配数字,2、空{m,n} m次到n次 \d{1,3} 匹配数字,2、12、123{n} n次 \d{2} 匹配数字,12{n,} n次及n次以上 \d{2,} 匹配数字,12、123、1234
- 分组符号
() 分组匹配的内容可以在后续的正则中重复使用,只需要指定分组的序号即可。分组的序号是从左往右以此递
- 匹配位置
^ 字符串开始位置 (^)abc 匹配字符串开头位置,a前面的位置$ 字符串结束位置 abc($) 匹配字符串结束位置,c后面的位置\b 单词(\w)与非单词之间的位置 a(\b)= 匹配"a"与"="之间的位置\B 字符与字符之间的位置 a(\B)b 匹配"a"与"b"之间的位置
- 其它元字符
[] 匹配范围 [a-zA-Z] 匹配单个英文字母^ 在上面的匹配位置元字符中,仅仅介绍了匹配字符串开头位置的作用,这里另外一个作用就是放在范围元字符中,起到取反的作用 [^a-d] 匹配单个非a,b,c,d四个英文字母之外的字符\ 转义元字符 1\+ 匹配"1+"| 分支条件 ab|cd 匹配ab、cd
## 4.2 软件安装与更新
- RPM 安装
-i 安装-q 查询-U 升级-e 卸载
2.移动与重命名
安装 yum install xxx卸载 yum remove xxx更新 yum update xxx
3.源代码编译安装
./configuremakemake install
4.3 文本与文件查找
- grep
-i 忽略大小写-v 反转-a 处理二进制文件-R 递归方式
- find
-name 按照文件名搜索-perm 按照权限搜索-user 按照属主搜索-type 按照文件类型搜索
4.4 网络配置
- 网络配置命令
ifconfig 查看和配置网络接口ip 查看和配置网络,路由netstat 查看进程监听端口和状态network 与 NetworkManager 网络管理脚本
- 配置文件
ifcfg-eth0 etho 网卡配置文件networking 主机名配置文件resolv.conf 域名配置文件
## 4.5 防火墙
SELinux
- 访问控制方式分类
DAC 自主访问控制MAC 强制访问控制
- 常用命令
getenforce 查看 selinux 状态setenforce 修改访问状态
- 配置文件
/etc/selinux/configenforcing 强制控制permissive 通知但不强制控制disable 禁用访问控制
iptables
- 表
filter 用于过滤nat 用于地址转换
- 链
INPUT 进入本主机方向OUTPUT 本主机发出方向FORWARD 转发方向PREROUTING 路由向前转换POSTROUTING 路由后转换
- 选项
-i -o 接口-s -d IP 地址/子网掩码-p tcp/udp 指定协议--sport 源端口--dport 目标端口-j 动作ACCEPT:允许数据包通过。DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。SNAT源地址转换,解决内网用户用同一个公网地址上网的问题。MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。DNAT:目标地址转换。REDIRECT:在本机做端口映射。LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
tcpdump
- 保存和读取规则
-r filename 从文件读取已经抓取的数据包-w filename 将抓取的数据包保存至文件
- 常用选项
-v 显示详细信息-n 不将 IP 地址解析为主机名-i 接口 例如 -i eth0host 主机port 端口
- 常用过滤
过滤主机 tcpdump -i eth1 src/dst host 192.168.1.1过滤端口 tcpdump -i eth1 src/dst port 25网络过滤 tcpdump -i eth1 src/dst net 192.168协议过滤 tcpdump -i eth1 tcp表达式过滤 tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型-i eth1 : 只抓经过接口eth1的包-t : 不显示时间戳-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包-c 100 : 只抓取100个数据包dst port ! 22 : 不抓取目标端口是22的数据包src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
4.6 服务与日志
1.服务状态的查看
service 用法: service 服务名称 start|stop|restart|statussystemctl: 用法: systemctl start|stop|restart|status 服务名称 serviceservice list: systemctl list-unit-files chkconfig --list
2.服务配置文件 /etc/systemd/system/*.service
3.常用系统日志
/var/log 系统日志默认目录message 系统日志dmesg 内核启动日志secure 安全日志
- 应用程序日志
4.7 磁盘分区
- 链接文件
符号链接 ln -s 源文件 目标文件(目标文件不能事先存在)硬链接 ln 源文件 目标文件
- mount 挂载命令
-t 文件系统类型-o 挂载选项ro 只读挂载rw 读写挂载remount 重挂载
3.配置文件 /etc/fstab 启动自动加载分区信息
fdisk 分区工具-l 查看分区信息fdisk /dev/sdx 为某一存储分区mkfs 格式化 mkfs.ext4parted -l 查看分区信息
## 4.8 文件系统
- 常用命令
df -l查看分区所占磁盘空间信息du -adu -ah --max-depth=1 查看当前目录下每个目录所占磁盘大小mkfs 格式化系统mkfs.ext4 -i 1048576 -n /dev/sdc列出系统打开文件 lsoflsof -D /path 指定路径显示,-D 递归所有子目录和文件lsof -c java 列出 java 程序打开的文件lsof -u user 显示指定用户打开的文件lsof -i 符合条件 lsof -i tcp:80lsof -p 234 234进程打开的文件lsof -g gid 显示用户组打开文件
- ext4
- XFS
4.9 Linux 系统启动过程与故障修复
4.9.1 系统启动过程
- Power on
BIOS
- 上电自检POST
- 初始化硬件: 显卡.内存.时间.磁盘
- 查找启动介质:CD-ROM,PXE,HDD
- 查找加载磁盘上的启动扇区 .
MBR(主引导记录)
- BootLoader 446bytes
- Partition Table 64bytes: 分区 ID,起始磁柱,数量,最多4个
- Magic Number 有效性验证 2bytes .
- GRUB(多系统引导)
stage_1 就是MBR,装载 stage_2
stage_1.5 识别文件系统,引导 stage_2
stage_2 /boot/grub/grub.conf,查找并装载Kernel到内存,将控制权从 GRUB 交给 Kernel . - Kernel 内核引导
核心程序 Kernel, 保留最基本模块,GRUB读取后解压 Kernel镜像
initrd 临时 rootfs,挂载驱动和 rootfs 后从内存清除 . sys init 系统初始化
/sbin/init
(1). /etc/inittab 初始化键盘,字体,网络,装载模块 (2)./etc/rc.d/rc.sysinit 执行初始化脚本/etc/fstab/etc/rd.d/rc.local (3).初始化进行基本配置
1. 获取网络环境与主机类型:读取网络环境设置文件"/etc/sysconfig/network",获取主机名与默认网关等网络环境。
2.测试与载入内存设备/proc及usb设备/sys 除/proc外,主动检测是否有usb设备并加载usb驱动,载入usb文件系统
3.根据配置决定是否启动SELinux
4.接口设备的检测与即插即用(pnp)参数的测试
5.用户自定义模块的加载。用户"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中
6.加载核心的相关设置。按"/etc/sysctl.conf"这个文件的设置值配置功能
7.设置系统时间(clock)
8.设置终端的控制台的字形
9.设置raid及LVM等硬盘功能
10.以方式查看检验磁盘文件系统。
11.进行磁盘配额quota的转换。
12.重新以读取模式载入系统磁盘。
13.启动quota功能
14.启动系统随机数设备(产生随机数功能)。
15.清除启动过程中的临时文件
16.将启动信息加载到"/var/log/dmesg"文件中
(4). 执行/etc/rc.d/rc*.d(*=0~6)脚本: Snn Script
b. /sbin/mingetty/etc/login
- 启动完成 (使用控制台)
/etc/X11/prefdmgdm 进入 Gnome 桌面环境kdm 进入 KDE 桌面环境xdm 进入 X window 桌面环境Xinit
(gdm 进入 Gnome 桌面环境, kdm 进入 KDE 桌面环境, xdm 进入 X window 桌面环境)~/.xinitrc~/.xserverrc
4.9.2 更新内核版本
* RPM方式更新* 源代码编译方式更新
## 4.10 逻辑卷与 LVM
- 分层管理磁盘Logical Volume Manager
- LVM 分为三层
PV(物理卷,最底层,物理硬盘或者分区)PE,物理区域,用于分配的最小存储单元VG:卷组,在 PV 之上,包含多个 PVLV:逻辑卷,VG 之上,相当于分区概念,大小可以改变
- 常用命令
pvcreate /dev/sdb1 在分区上建立 PVpvs 查看 pv 信息pvdisplay 查看 pv 详细信息vgcreate vg1 /dev/sdb1 将建立的 pv 加入 vg1组vgs/vgdisplay 查看 vg 详细信息lvcreate -L 200M -n lv1 vg1lvs/lvdisplay 查看 lv 详细信息
5. Shell 篇
## 5.1 认识 BASH
- shell 是命令解析并在内核执行,返回结果
shell 脚本的用处
- 组合系统命令实现自动化功能
- 组成脚本的基本元素是命令,不用深入账务系统函数集
内建命令和外部命令
- 内部命令不会建立子进程,但是对子 shell 无效
- 外部命令会创建子进程
5.2 管道与重定向
- 管道符 |
- 重定向符
< 输入重定向> 输出重定向,覆盖方式>> 输出重定向,追加方式
- sort 对文本进行排序
- join 连接2个字符串
5.3 进程与内存查看调整
- 进程查看命令: ps top 对系统进程排序查看
内存查看命令
- free 查看系统的内存使用率
- sar 显示详细的系统运行状态,用于排查故障
- 流量监控工具: iftop 查看某一进程的网络流量
5.4 变量与环境变量
变量的定义
- shell 变量无需声明
- 销毁变量 unset 变量名
- 变量的赋值: 变量名=变量值
- 环境变量: path 变量解析路径
环境变量定义文件
- /etc/profile 系统环境变量默认保存文件
- /etc/bashrc shell 执行初始化配置新闻
5.5 转义与引用
- 特殊符号
- 转义符 /
引用符号
单引号 ''双引号 ""
5.6 循环
while 循环
- while 循环根据 while 判断结果确定是否继续执行
- 判断结果为命令的返回值,0继续执行
- 如果判断结果为0,无法到达循环结束成为死循环
2.for 循环 - Shell 的 for 循环使用遍历方式 for ... in ...格式
- for 循环支持 c 语言写法,需要使用(())格式
- 支持使用 break,continue 对循环进行控制
- for 循环支持嵌套使用
5.7 函数
- 函数的定义
定义方法: 函数名(){}
2.函数的使用
直接使用函数名()
5.8 计划任务
一次性计划任务 at
2.周期性计划任务 cron- 查看 crontab -l
- 编辑 crontab -e
5.9 运算符
- 运算符号 + - * / 加减乘除
- 弊端 运算速度低,对浮点运算支持不好
5.10 测试与判断
test 测试
- 书写 if test $[num1] -eq $[num2]
- 数值测试 -eq -ne -gt -ge -lt -le
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
thenecho '两个数相等!'
elseecho '两个数不相等!'
fia=5
b=6
result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"
返回结果:result 为:11
- 字符串测试 = != -z -n (字符串的长度为零)
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
thenecho '两个字符串相等!'
elseecho '两个字符串不相等!'
fi= 等于为真!= 不等于为真-z 字符串 字符串长度为0 则真-n 字符串 长度不为0则真
- 文件测试
-e 文件名 存在为真-r 文件名 存在且可读为真-w 文件名 存在且可写为真-x 文件名 存在且可执行为真-s 文件名 存在且至少一个字符为真-d 文件名 存在且为目录为真-f 文件名 存在且为普通文件为真-c 文件名 存在且为字符型特殊文件为真-b 文件名 存在且为块特殊文件为真
if 判断
- if : if condition command1 then command2 fi
- if else
- if else-if else
- case 分支
case 值 in模式1)command1commandN;;模式2)command1commandN;;
esac
6 文本操作篇
6.1 SED
6.1.1 sed 基础
1. 字符流编辑器2. sed [options] [sed-commands] [input-file]3. sed [查找条件] [操作命令] 文件
6.1.2 查找条件
1. 数字、正则表达式组合定位2. 数字定位 删除第2行 sed '2d' file3. 正则表达式 加/ 例如: 包含 john 的行 sed '/john/d' file 以 john 开头的行 sed '/^john/d' file4. 逗号分割线 第1行与第3行之间的范围 sed '1,3d' file west 和 east 之间的所有行 sed '/west/,/east/d' file5. 组合方式 第1行到 west 所有行 sed '1,/west/d' file6. 特殊情况 $删除最后一行 sed '$d' file
6.1.3 选项
- -n 输出到屏幕,取消默认打印
sed -n '3p' file 显示第几行查找1-3行 sed -n '1,3p' file查找指定几行 sed -n '1p;3p;5p' file显示 包含 'Thread-70' 到 'DiamondEnv'行之间的行 sed -n '/Thread-70/,/DiamondEnv/p' ./diamond-client.log显示1-5行并显示行号
- -e 多重编辑
- -f 指定 sed 脚本文件
- -r 正则扩展使用
- i 插入 在当前行上添加一或者多行: sed -i 's/root/world/g' yum.log 用world 替换yum.log文件中的root真实写入
6.1.4 基础命令
- a 追加 在某一行追加内容
sed '$a106,wuxingge,UFOn107,lee,XO' file 最后一行 - d 删除
d 删除行 sed '2,50d' file 删除不显示2-50行内容 - s 替换
sed 's/west/north/g' file 将 west 替换为 north,g 表示全局替换 - c 更改
sed '2,5c replacechars' 替换2-5行内容为 replacechars - r 读取文件
sed '/root/ r /var/log/test.txt' yum.log yum.log 匹配root后读入text.txt的内容在匹配内容之下 - w 写文件
sed '/root/ w /home/omc/root.txt' yum.log 【yum.log匹配root后写入root.txt',真实写入】 - q 退出
- y 替换
- p 打印
6.1.5 高级命令
- 多行命令
N 将多行最佳到模式空间进行处理
D 删除多行模式空间的第一个字符至第一个换行符,并返回到脚本的开头执行
P 输出模式空间中的第一个字符至第一个换行符号 - 保持空间模式
h 将模式空间内存存储至保持空间,覆盖保持空间内容 sed -e '/John/h' -e '$G' file
H 将模式空间内存存储至保持空间,追加到保持空间内容
g 保持空间内容存储至模式空间,覆盖模式空间内容
G 保持空间内容存储至模式空间,追加模式空间内容
x 交换模式空间和保持空间的内容 - 条件分支
: 标签
b branch 命令用于脚本中将控制转移到另一行,没有指定标签就转移到结尾
t 测试命令
6.2 AWK
6.2.1 工作方式
- 流处理器: awk -F|-f|-v 'BEGIN{ commands } pattern{ commands } END{ commands }' file
- -F 指定分割符: awk -F: '{print $1,$3,$6}' OFS="t" /etc/passwd
- -f 调用脚本: awk -f script.awk file
- -v 定义变量 var=value
- '' 引用代码块
- BEGIN{Command} 语句块 awk 输入流中读取行之前被执行
- // 匹配代码块
- pattern{Command} 通用命令,默认执行{print}
- ; 多条命令使用分号间隔
- END{Command} 在执行结束后执行
6.2.2 运算符
- 算数运算符
- 逻辑运算符
6.2.3 循环
- while 循环
- for 循环
- break continue
6.2.4 系统变量
- FS 字段分割符
- OFS 输出字段分隔符
- RS 记录分隔符
- ORS 输出记录分隔符
6.2.5 条件
语法格式if ... else ..
if嵌套
6.2.6 函数
算数函数
随机函数
字符串函数
7. 容器篇
7.1 容器原理
- KVM-ECS
- Namespace
- CGroup
- Rootfs
7.2 Docker
7.2.1 docker 命令
- 容器生命周期管理
docker run -it nginx:latest /bin/bash 创建新的容器并运行一个命令
docker start [OPTIONS] CONTAINER 启动/停止/重启容器
docker kill [OPTIONS] CONTAINER 杀掉运行中的容器
docker exec [OPTIONS] CONTAINER COMMAND 在运行的容器中执行命令
docker create --name con_name nginx:latest 创建容器不启动它
docker pause/unpause [OPTIONS] CONTAINER 暂停或者回复容器中的进程
docker rm [OPTIONS] CONTAINER 删除容器 - 容器操作
docker ps -a -q 列出容器
docker inspect [OPTIONS] NAME|ID 获取容器/镜像的元数据
docker top [OPTIONS] CONTAINER 查看容器中运行的进程信息,支持 ps 命令参数
docker attach [OPTIONS] CONTAINER 连接到正在运行中的容器
docker events [OPTIONS] 从服务器获取实时事件
docker logs [OPTIONS] CONTAINER 获取容器的日志
docker wait [OPTIONS] CONTAINER 阻塞运行直到容器停止,然后打印出它的退出代码
docker export [OPTIONS] CONTAINER 将文件系统作为一个tar归档文件导出到STDOUT
docker port [OPTIONS] CONTAINER 列出指定的容器的端口映射 - 容器rootfs命令
docker commit -a "alibaba.com" -m "mysql" CONTAINER [REPOSITORY[:TAG]] 从容器创建一个新的镜像
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH 容器主机之间的数据拷贝
docker diff [OPTIONS] CONTAINER 检查容器里文件结构的更改 - 镜像仓库
docker login/logout -u 用户名 -p 密码 登陆/登出到一个Docker镜像仓库
docker pull [OPTIONS] NAME[:TAG] 从镜像仓库中拉取或者更新指定镜像
docker push [OPTIONS] NAME[:TAG] 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker search [OPTIONS] TERM 从Docker Hub查找镜像 - 本地镜像管理
docker images [OPTIONS] [REPOSITORY[:TAG]] 列出本地镜像
docker rmi -f IMAGE 删除本地一个或多少镜像
docker tag [OPTIONS] IMAGE[:TAG] 标记本地镜像,将其归入某一仓库
docker build [OPTIONS] --build-arg -f -t PATH | URL | - 命令用于使用 Dockerfile 创建镜像
docker history [OPTIONS] IMAGE 查看指定镜像的创建历史
docker save -o filename IMAGE 将指定镜像保存成 tar 归档文件
docker load -i 导入使用 docker save 命令导出的镜像。
docker import [OPTIONS] file|URL 从归档文件中创建镜像 - info|version
docker info [OPTIONS] 显示 Docker 系统信息,包括镜像和容器数
docker version [OPTIONS] 显示 Docker 版本信息
7.2.2 dockerd
用于管理容器的守护进程,docker的引擎
7.2.3 docker-compose
用户定义和运行多个容器的 Docker 应用程序
7.3 kubernetes
7.3.1 etcdctl
etcdctl --endpoints=$ENDPOINTS member list
etcdctl --endpoints=$ENDPOINTS put foo "Hello World!" 增加数据
etcdctl --endpoints=$ENDPOINTS get web --prefix 根据前缀查数据
etcdctl --endpoints=$ENDPOINTS del k --prefix 根据前缀删除数据
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status 集群状态查看
etcdctl --endpoints=$ENDPOINTS endpoint health
etcdctl --endpoints=$ENDPOINTS member list/add/remove/update 集群成员操作
7.3.2 kubectl
基础命令
- kubectl create
configmapkubectl create configmap my-config --from-file=path/to/bardeploymentkubectl create deployment my-dep --image=busyboxcronjobkubectl create cronjob my-job --image=busyboxservicekubectl create service clusterip my-cs --tcp=5678:8080serviceaccountkubectl create serviceaccount my-service-accountsecretkubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAILrolekubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpodrolebindingkubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1priorityclasskubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"* kubectl getkubectl get pods -namespace nsname* kubectl runkubectl run nginx --image=nginx --dry-run* kubectl exposekubectl expose -f nginx-controller.yaml --port=80 --target-port=8000* kubectl deletekubectl delete pod,service baz foo2. 应用管理* kubectl applykubectl apply --prune -f manifest.yaml -l app=nginx* kubectl annotatekubectl annotate pods --all description='my frontend running nginx'* kubectl autoscalekubectl autoscale rc foo --max=5 --cpu-percent=80* kubectl convertkubectl convert -f . | kubectl create -f -* kubectl diffkubectl diff -f pod.json* kubectl editkubectl edit job.v1.batch/myjob -o json* kubectl labelkubectl label --overwrite pods foo status=unhealthy* kubectl patchkubectl patch -f node.json -p '{"spec":{"unschedulable":true}}'* kubectl replacekubectl replace -f ./pod.json* kubectl rolloutkubectl rollout status daemonset/foo* kubectl scalekubectl scale --current-replicas=2 --replicas=3 deployment/mysql* kubectl setkubectl set env deployment/registry STORAGE_DIR=/local* kubectl waitkubectl wait --for=condition=Ready pod/busybox13. 应用执行* kubectl attachkubectl attach podname -c ruby-container -i -t* kubectl authkubectl auth can-i create pods --all-namespaces* kubectl cpkubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir* kubectl describekubectl describe nodes kubernetes-node-emt8.c.myproject.internalkubectl describe po -l name=myLabel* kubectl execkubectl exec -it mypod /bin/bash* kubectl logskubectl logs -lapp=nginx --all-containers=true* kubectl port-forwardkubectl port-forward service/myservice 5000 6000* kubectl proxykubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/api/* kubectl topkubectl top node4. 集群管理* kubectl api-versions* kubectl approve (-f FILENAME | NAME)* kubectl cluster-info* kubectl cordon foo* kubectl drain foo --force --grace-period=0* kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule* kubectl uncordon foo5. 设置与用法* kubectl api-resources -o wide* kubectl completion bash* kubectl config current-context* kubectl explain pods* kubectl kustomize /home/configuration/production* kubectl version* kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2### 7.3.3 kubeadm* kubeadm init: 初始化master 节点* kubeadm join: 初始化 worker 节点,并加入集群* kubeadm upgrade: 更新集群到新版本* kubeadm config: v1.7.x 或者更低版本 kubeadm 初始化集群,需要对集群做一些配置以使用 kubeadm upgrade* kubeadm reset: 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改* kubeadm token: 管理 kubeadm join 使用的令牌* kubeadm version: 打印 kubeadm 版本* kubeadm alpha: 预览一组可用的新功能以便从社区搜集反馈### 7.3.4 helmhelm install 安装helm search 查找包helm list 列表已安装### 7.3.5 CFSSLcfssl signcfssl bundlecfssl genkeycfssl gencertcfssl serve## 7.4 istio
1. Galley
2. istio_ca
3. istioctlistioctl authistioctl authnistioctl dashboardistioctl kube-injectistioctl proxy-configistioctl experimentalistioctl proxy-statusistioctl registeristioctl validateistioctl verify-installistioctl version
4. mixs
5. node_agent
6. operator
7. pilot-agent
8. pilot-discovery
9. sidecar-injector## 7.4 KNativeBuild 构建Serving 服务
分享:
Linux 知识地图相关推荐
- 做项目时用到的linux知识
最近一个项目上线了,在开发的过程中用到了一些linux知识,感觉收获不小,虽然自己对于linux命令也懂一些,但是真正用到项目中的这还是第一次,现在来总结一下. 1.date 两台服务器的时间不同步了 ...
- Android系统--输入系统(一)必备的Linux知识_inotify和epoll
Android系统--输入系统(一)必备的Linux知识_inotify和epoll 引入 1. 笔记本电脑插入外接键盘,两个键盘都可以使用 a. 键盘即插即用--如何检测键盘的接入和拔出 hotpl ...
- My way on Linux - 知识梳理计划
知识梳理计划图 近期计划把自己学习的工作中用到的Linux知识梳理下,敬请期待. 转载于:https://www.cnblogs.com/thatsit/p/5001724.html
- 一些linux知识和http知识
一些linux知识和http知识 1 yum安装比源码编译安装 有的模块不能自定义安装 只能安装默认的模块进行安装 2 关于php的fastcgi 如果使用fastcgi 那么需要启动服务 如果 ...
- linux知识(二)互斥量、信号量和生产者消费者模型
linux知识(二)互斥量.信号量和生产者消费者模型 一.互斥量 产生原因 二.信号量 生产者消费者模型 一.互斥量 产生原因 使用多线程常常会碰到数据混乱的问题,那么使用互斥量,相当于"加 ...
- linux知识(一) 程序、进程与线程
linux知识(一) 程序.进程与线程 程序 进程 程序如何变成进程? 线程 线程与进程 fork和创建新线程的区别 优点 程序 程序:程序是已编译好的二进制文件,存储在磁盘中,不占用系统资源 程序包 ...
- DevOps知识地图实践指南
DevOps知识地图 DevOps方法论的主要来源是Agile, Lean 和TOC, 独创的方法论是持续交付. DevOps经典图书: * <DevOps实践指南> * <持续 ...
- 欢迎关注我的微信公众账号:Linux技巧(微信号:irefactoring),一起学习Linux知识~~~...
最近很少写博客了,一方面是近期工作比较繁忙,第二是把精力都放在GitHub和读源码去了. 申请了一个微信公众账号:Linux技巧 微信ID:irefactoring(意思是爱重构) ========= ...
- entity什么类型_「知否」知识地图和知识图谱是什么?
不问不知,不学不成.知识管理"知否"? 精短解答,轻松和你踏上知识管理进阶之路.今日知否:知识地图和知识图谱是什么? 问题: 经常听到知识地图和知识图谱?是一回事情吗?分别是什么? ...
- 软件测试从业者,Linux知识从入门到玩转(必读)
好久没用"必读"这两个字了,毕竟没啥内容是所有人都得必读的(当然,测试君这里也只是用了"入门到玩转","精通"可不敢乱用 . 行业新人特别喜 ...
最新文章
- 学习python需要什么基础-python编程学习需要哪些基础和准备工作?
- python使用esmre代替ahocorasick实现ac自动机[多模匹配]
- Tomcat中配置MySQL数据库连接池
- Docker学习笔记_网上资源参考
- nlp算法文本向量化_NLP中的标记化算法概述
- hdu 4597 + uva 10891(一类区间dp)
- 华强北二代悦虎1562M升级固件图文教程(详细多图文)
- PHP 图像编辑GD库的使用以及图像的压缩
- 十一、观察者模式(Observable、Observer)
- OpenCV-图像处理(12、形态学操作应用-提取水平与垂直线)
- 在线打字练习网站介绍
- COSMIC度量知识整理
- ncnn报无法将参数 1 从“std::string”转换为“const ncnn::DataReader
- ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
- 中科院计算机网络信息中心是一种怎样的存在?
- Unix C语言编写基于IO多路复用的小型并发服务器
- hdl_localization代码解析
- 教你快速高效接入SDK——手游聚合SDK框架中渠道SDK部分的接入(就是实现抽象层的接口而已)
- humps在matlab中什么意思,[转载]Humps函数
- 找个native老外润色_给我司老外技术总监润色PPT的一些感想