面试题总汇
时间:2023-04-06 01:07:00
一. FTP/TFTP/NFS
1.FTP的传输模式:ASCII传输模式和二进制传输模式。
ASCII传输模式: 假设用户复制的文件中包含的简单文件ASCII如果远程机器上没有运行代码文本UNIX,传输文件时ftp通常会自
动地调整文件的内容,以便将文件解释为另一台计算机存储文本文件的格式。但通常情况下,用户传输的文件不包括
文本文件,可能是程序、数据库、字处理文件或压缩文件(虽然字处理文件大多包含文本,但也包含指示页面大小和字库
非打印符等信息)。复制任何非文本文件前使用binary 命令告诉ftp逐字复制,不要处理这些文件,这也是下面要讲的二进
制传输。
二进制传输模式: 在二进制传输中,保存文件的位序,使原始文件和复制文件。即使目的地机器上包含位序列的文件是
没意义的。 若两台通信机型相同,则可优先使用二进制拷贝。
2.FTP工作方式: Standard (也就是 PORT方式,主动方式)和 Passive (也就是PASV,被动方式)
主动方式: Port模式FTP 客户端先和FTP服务器的TCP 21端口建立连接,并通过此通道发送命令。当客户端需要接收数据时
发送通道PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接到客户
将数据发送到户端的指定端口。 FTP server传输数据必须与客户端建立新的连接。
被动方式: Passive建立控制通道时,模式和Standard模式相似,但建立连接后不会发送Port命令,而是Pasv命令。FTP服务
器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此
端口,然后FTP此时,服务器将通过此端口传输数据FTP server不再需要与客户端建立新的连接
请注意: PORT建立数据传输通道的模式是由服务器端发起的,服务器使用20端口连接客户端的1024端口;在PASV模式
在中间,数据传输通道的建立是由FTP由客户端发起,他使用1024以上的端口连接服务器。 在FTP客户连接
在整个服务器过程中,控制信道始终保持连接,临时建立数据传输通道。
3.TFTP工作原理
建立连接:默认情况下,行动 TFTP 服务器主机 A 会监听 69 端口作为客户端的主机 B 当你想下载或上传文件时,你会去主机 A 的
69 端口发送包含阅读文件(下载)请求或写文件(上传)请求的数据包。 A 收到读写请求后,通过此打开另一个随机端口
端口向主机 B 发送确认包、数据包或错误包。
下载:客户端向服务器 69 端口(通常)发送读取请求,服务器在收到读取请求后打开另一个随机端口(假设
端口号是 59509),然后在它默认的路径下找到这个文件这个文件后,每次文件 512 通过端口的字节 59509 将这 512
将个字节放入数据包中,发送给客户端。数据包还包含操作码和数据块的编号。 1 开始计数;客户端收到数据包后,会服务
器的 59509 端口发送包含其收到的数据包的块号的确认包;服务器收到确认包后,继续发送下一个文件 512 个字节。
在文件结束前,最后一个数据包的数据块的大小将小于 512 此时,服务器认为传输已经结束,当他收到这个字节时
后一个数据包的确认包将主动关闭连接。客户端收到这个小于 512 个字节数据包也认为传输已经结束,确认包发送后
关闭连接。可能会有一个极端的情况,文件的大小恰到好处 512 字节倍数,所以最后一个数据包的大小也是 512 个字节,这
服务器发送包含文件数据的数据包后,还会发送一个包含文件数据的额外数据包 0 作为最后一个数据包,字节数据包可以保证客户端收到
的最后一个数据包的大小总是小于 512 字节。也就是说,对于客户端来说,只要收到的数据包小于 512 它认为个字节
当传输结束时,它将关闭连接。
上传:客户端向服务器 69 端口(通常)发送写作请求,服务器在收到写作请求后打开另一个随机端口(假设
端口号是 59509)向客户端发送确认包,其中块号为 0.告诉客户端已经准备好接收文件,并告诉客户端自己接收文件
文件的端口号。然后客户端开始对服务器 59509 端口发送数据包,服务器收到数据包后将确认包发送给客户端,直到整个文件发送完毕
毕。这个过程和下载是一样的,但是双方的角色是互换的,客户端是发送数据的一方,服务器是接收数据的一方。> 4.NFS工作原理
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-fxkm2EOH-1604371435750)(png/image-20200406105340809.png)]
二. rsync
一般企业在使用 rsync 时会配合 inotify 使用,使用 inotify 一旦某些文件被监控文件修改 属性变更,通知 rsync 进行备份
- inotify rsync 实现数据同步的方法
- sersync :周洋在金山公司 inotify 在软件开发的基础上,功能更强大
- 工作原理:
使用监控服务(inotify),监控同步数据服务器目录中信息的变化
当发现目录中的数据发生变化时,使用它 rsync 将服务推送到备份服务器 - inotify:
异步文件系统事件监控机制采用事件驱动机制,无需通过 cron 等待轮询机制获取事件,
linux 内核从 2.6.13 起支持 inotify,通过 inotify 可以在监控文件系统中添加、删除、修改、移动等各种事件
max_queued_events:inotify如果值太小,事件队列的最大长度就会出现 Event Queue Overflow 默认值:16384 max_user_instances:创建每个用户inotify实例最大值,默认值:128 max_user_watches:可以监视的文件数量(单进程),默认值: 8192
[root@centos8 ~]#vim /etc/sysctl.conf fs.inotify.max_queued_events=66666 fs.inotify.max_user_watches=100000 [root@centos8 ~]#sysctl -p fs.inotify.max_queued_events = 66666 fs.inotify.max_user_watches = 100000 [root@centos8 ~]#cat /proc/sys/fs/inotify/* 66666 128 100000
inotify-tools 包:
- inotifywait: 在监控文件或目录上等待特定文件系统事件(open ,close,delete 等) 常用于实时同步目录监控- inotifywatch:收集被监控文件系统使用的统计数据,是指文件系统事件的次数
例:使用 inotifywait
#监控一次性事件 inotifywait /data #继续前台监控 inotifywait -mrq /data #继续后台监控,记录日志 inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e" #继续前台监控特定事件 inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib
rsync 软件包:
rsync,rsync-daemon(CentOS 8)
服务文件://usr/lib/systemd/system/rsyncd.service
配置文件://etc/rsyncd.conf 端口:873/tcp
rsync命令:
#Local:
rsync [OPTION...] SRC... [DEST]
#Access via remote shell:
Pull:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST:DEST
#Access via rsync daemon:
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync 有三种工作方式:
- 本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
- 本地主机使用远程 shell 和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
- 本地主机通过网络套接字连接远程主机上的 rsync daemon。命令行语法格式为上述 "Access viarsync daemon"段的格式。# 三. 防火墙
防火墙概念
- 在计算机领域,防火墙(FireWall)就是基于预先定义的安全规则来监视和控制来往的 网络流量的网络安全系统。防火墙的核心是隔离,其
将受信任的内部网络和不受信任的 外部网络隔离开。内部网络一般是公司的内部局域网,外部网络一般是 Internet。 - 一般防火墙工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查, 并在匹配某规则时由规则定义的行为进行处理的
一组功能的组件,基本上的实现都是默认 情况下关闭所有的通过型访问,只开放允许访问的策略。
防火墙分类
- 按照防火墙的保护范围,防火墙通常被分为:
网络防火墙: 网络防火墙在两个或更多的网络间监控和过滤流量,运行在网络设备上。 网络防火墙保护的是防火墙某一侧的网络(一
般是局域网络)。
主机防火墙: 主机防火墙运行在一般的电脑主机,并控制进出这些电脑的网络流量, 主机防火墙保护的范围是当前主机。 - 从实现方式上看,防火墙被分为:
硬件防火墙: 在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现, 如:华为,天融信 Checkpoint,NetScreen
等
软件防火墙: 运行于通用硬件平台上的防火墙应用软件,ISA --> Forefront TMG - 从工作交互的网络协议层及划分:
网络层防火墙: 只可以和 OSI 模型下四层的协议交互
应用层防火墙: 运行应用层防火墙的设备可以叫代理服务器或代理网关,可以与 OSI 的七层协议交互。
Netfilter 中的 hook 函数
- Netfilter 在内核中选取五个位置放了五个 hook(“勾子”) function(INPUT、OUTPUT、 FORWARD、PREROUTING、
POSTROUTING),而这五个 hook function 向用户开放, 用户可以通过一个命令工具(iptables)向其写入规则,规则由信息过滤表
(table)组成, 信息过滤表包含控制 IP 包处理的规则集(ruleset),规则被分组放在(chain)上。 - 三种数据包流动方向
流入本机:PREROUTING --> INPUT–>用户空间进程
流出本机:用户空间进程 -->OUTPUT–> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IwJFaoKh-1604371435755)(png/2019123117471156.png)]
数据包大致传输过程 :
- 当一个网络数据包进入网卡时,数据包首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需 要转送出去
- 如果数据包就是进入本机的,数据包就会沿着图向下移动,到达 INPUT 链。数据包到达 INPUT 链 后,任何进程都会收到它。本机上
运行的程序可以发送数据包,这些数据包经过 OUTPUT 链,然后 到达 POSTROUTING 链输出3. 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过 FORWARD 链,然后到 达 POSTROUTING 链输出
iptables -N #
自定义一条新的规则链 iptables -E # 重命名自定义链;引用计数不为 0 的自定义链不能够被重命名,也不能被删除 iptables -X # 删除自定义的空的规则链 iptables -P # 设置默认策略;对 filter 表中的链而言,其默认策略有: # ACCEPT:接受 DROP:丢弃 iptables -vnL --line-numbers iptables -A iptables -I INPUT 2 ... iptables -D 2 iptables -R iptables -F # 清空指定规则 # (1) 可以指明规则序号 (2) 可以指明规则本身 iptables -Z # 清零计数 # (iptables 的每条规则都有两个计数器 (1) 匹配到的报文的个数 (2) 匹配到的所有报文的大小之和)
iptables 扩展匹配条件
multiport 扩展 以离散方式定义多端口匹配
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
iprange 扩展 指明连续的(但一般不是整个网络)ip 地址范围 源 IP 地址范围 [!] --src-range from[-to]
目标 IP 地址范围 [!] -- dst-range from[-to]
iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
mac扩展 mac 模块可以指明源 MAC 地址
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
string 扩展 string 扩展用于对报文中的应用层数据做字符串模式匹配检测
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 42 --string "google" -j REJECT
time 扩展 根据将报文到达的时间与指定的时间范围进行匹配
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays
Sat,Sun --kerneltz -j DROP``` **connlimit 扩展** 根据每客户端 IP 做并发连接数数量匹配可防止 Dos(Denial of Service,拒绝服务)攻击 ```bash
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
# --connlimit-upto # :连接的数量小于等于#时匹配
# --connlimit-above # :连接的数量大于#时匹配
limit 扩展 基于收发报文的速率做匹 令牌桶过滤器
iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
iptables -I INPUT 2 -p icmp -j REJECT
state 扩展 state 扩展模块,可以根据"连接追踪机制"去检查连接的状态,较耗资源, 会消耗内存,使用 conntrack 机制:追踪本机
上的请求和响应之间的关系
- 状态类型
NEW
:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其 识别为第一次发出的请求
ESTABLISHED
:NEW 状态之后,连接追踪信息库中为其建立的条目失效之前期间内 所进行的通信状态
RELATED
:新发起的但与已有连接相关联的连接,如:ftp 协议中的数据连接与命令 连接之间的关系
INVALID
:无效的连接,如 flag 标记不正确
UNTRACKED
:未进行追踪的连接,如 raw 表中关闭追踪
已经追踪到的并记录下来的连接信息库/proc/net/nf_conntrack
调整连接追踪功能所能够容纳的最大连接数量/proc/sys/net/netfilter/nf_conntrack_max
查看连接跟踪有多少条目/proc/sys/net/netfilter/nf_conntrack_count
不同的协议的连接追踪时长/proc/sys/net/netfilter/nf_conntrack_generic_timeout
state 模块使用格式 :
iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
开放被动模式的 ftp 服务 :
- 装载 ftp 连接追踪的专用模块: 跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter1
IPTABLES_MODULES=“nf_conntrack_ftp"
modproble nf_conntrack_ftp
- 放行请求报文: 命令连接:NEW, ESTABLISHED 数据连接:RELATED, ESTABLISHED
iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
- 放行响应报文
iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
具体操作:
yum install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp
iptables -F
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -vnL
iptables 规则保存
使用 iptables 命令定义的规则,手动删除之前,其生效期限为 kernel 存活期限
持久保存规则
- CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
- CentOS 6
# 将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
加载规则
- CentOS 7 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
-n, --noflush:不清除原有规则 -
t, --test:仅分析生成规则集,但不提交- CentOS 6
# 会自动从/etc/sysconfig/iptables 重新载入规则
service iptables restart
开机自动重载规则
- 用脚本保存各 iptables 命令;让此脚本开机后自动运行 /etc/rc.d/rc.local 文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
- 用规则文件保存各规则,开机时自动载入此规则文件中的规则 在/etc/rc.d/rc.local 文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
- 定义 Unit File, CentOS 7,8 可以安装 iptables-services 实现 iptables.service
yum install iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables.service
SNAT 实现
SNAT:基于 nat 表的 target,适用于固定的公网 IP
例:10.0.1.0/24 网段的主机访问外部网络时,IP 数据包源地址被替换为 172.18.1.6-172.18.1.6 中的某一个地址
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.1.6-172.18.1.9
另一个 target 为MASQUERADE
,适用于动态的公网 IP,如拨号网络
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE
DNAT 实现
DNAT:nat 表的 target,适用于端口映射
- 例如
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080
转发 REDIRECTREDIRECT,是 NAT 表的 target,通过改变目标 IP 和端口,将接受的包转发至同一个主机 的不同端口,可用于 PREROUTING
OUTPUT 链
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080
四. Linux启动流程和内核管理
系统启动流程
Centos6
1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机
启动过程总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> (关闭对应下需要关闭 的服务)启动 需要启动服务 --> 设置登录终端
或者:POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init --> (/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端
- 运行级别:为系统运行或维护等目的而设定0-6:7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2:多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别:3, 5
切换级别:init #
查看级别:
runlevel
who -r
- /etc/rc.d/rc.sysinit: 系统初始化脚本,主要做以下事务```bash
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
- grub配置文件:/boot/grub/grub.conf
default=#: 设定默认启动的菜单项;落单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径
password [–md5] STRING: 启动菜单编辑认证
hiddenmenu:隐藏菜单
title TITLE:定义菜单项“标题”, 可出现多次
root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件
password [–md5|–encrypted ] STRING: 启动选定的内核或操作系统时进行认证
### Centos7
**CentOS 7 引导顺序**
```bash
UEFi或BIOS初始化,运行POST开机自检
选择启动设备
引导装载程序, centos7是grub2
加载程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
加载initramfs驱动模块
加载内核选项
内核初始化,centos7使用systemd代替init
执行initrd.target所有单元,包括挂载/etc/fstab
从initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务systemd执行graphical需要的服务
- 手动在grub命令行接口启动系统
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
grub 配置文件
[root@lab-server2 ~]# ll /boot/grub2/grub.cfg
-rw-r--r--. 1 root root 4465 Dec 31 08:43 /boot/grub2/grub.cfg
破解CentOS7的root口令方法一
1.启动时任意键暂停启动
2.按e键进入编辑模式
3.将光标移动linux16开始的行,添加内核参数rd.break
4.按ctrl-x启动
5.mount –o remount,rw /sysroot
6.chroot /sysroot
7.passwd root
8.touch /.autorelabel
9.exit
10.reboot
破解CentOS7的root口令方法二
1.启动时任意键暂停启动
2.按e键进入编辑模式
3.将光标移动linux16开始的行,改为rw init=/sysroot/bin/sh
4.按ctrl-x启动
5.hchroot /sysroot
6.passwd root
7.touch /.autorelabel
8.exit
9.reboot
修复GRUB2
GRUB“the Grand Unified Bootloader”引导提示时可以使用命令行界面
可从文件系统引导
主要配置文件 /boot/grub2/grub.cfg
修复配置文件
grub2-mkconfig > /boot/grub2/grub.cfg
修复grub
grub2-install /dev/sda BIOS环境
grub2-install UEFI环境
调整默认启动内核
vim /etc/default/grub
GRUB_DEFAULT=0
内核管理
sysctl命令查看当前生效的内核参数
- 默认配置文件:/etc/sysctl.conf
- (1) 设置某参数
sysctl -w parameter=VALUE
- (2) 通过读取配置文件设置参数
sysctl -p [/path/to/conf_file]
- (3) 查看所有生效参数
sysctl -a
内核常用参数
| 参数 | 对应文件 | 备注
---------------------------------------------------------------------------------------------------------- |
| net.core.somaxconn = 4096 | /proc/sys/net/core/somaxconn | 选项默认值是128,这
个参数用于调节系统同时发起的tcp连接数,在高并发请求中,默认的值可能会导致连接超时或重传,因此,需要结合并发请求数来调节此
值
|
| vm.swappiness = 1 | /proc/sys/vm/swappiness | 这个参数定义了系统对swap的
使用倾向,centos7默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了
使用swap的可能性
|
| net.ipv4.ip_forward = 1 | /proc/sys/net/ipv4/ip_forward | 开启路由转发功能
|
| net.ipv4.icmp_echo_ignore_all = 1 | /proc/sys/net/ipv4/icmp_echo_ignore_all | 禁ping
|
| vm.drop_caches | /proc/sys/vm/drop_caches | 用来控制是否清空文件缓存:
默认是0;1-清空页缓存;2-清空inode和目录树缓存;3-清空所有缓存
|| fs.file-max = 1020000 | /proc/sys/fs/file-max | 系统级别的可打开文件句柄数
|
| ulimit -n | /etc/security/limits.conf | 限制经过PAM模块认证的用户打开的文
件句柄数:* soft nofile 65535 * hard nofile 65535
|
| net.ipv4.tcp_syncookies = 1 | /proc/sys/net/ipv4/tcp_syncookies | 开启SYN Cookies,当
SYN等待队列溢出时,启用cookies来处理,可以防范少量的SYN攻击,默认为0,表示关闭
|
| net.ipv4.tcp_tw_reuse = 1 | /proc/sys/net/ipv4/tcp_tw_reuse | 允许将TIME_WAIT
sockets重新用于新的TCP连接,默认为0,表示关闭
|
| net.ipv4.tcp_tw_recycle = 1 | /proc/sys/net/ipv4/* | 允许将TIME_WAIT sockets快速
回收以便利用,默认为0,表示关闭,需要同时开启 net.ipv4.tcp_timestamps 才能生效
|
| net.ipv4.tcp_timestamps = 1 | /proc/sys/net/ipv4/* | 默认为1
|
| net.ipv4.tcp_fin_timeout = 30 | /proc/sys/net/ipv4/* | 表示如果套接字由本端要求关
闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。默认是60s
|
| net.ipv4.ip_local_port_range = 1024 65500 | /proc/sys/net/ipv4/* | 表示用于向外连接的端口
范围。缺省情况下很小:32768到61000,改为1024到65500
|
| net.ipv4.tcp_max_syn_backlog = 8192 | /proc/sys/net/ipv4/* | 表示SYN队列的长度,默
认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
|
| net.ipv4.tcp_max_tw_buckets = 5000 | /proc/sys/net/ipv4/* | 表示系统同时保持
TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
|
| net.ipv4.ip_nonlocal_bind = 1 | /proc/sys/net/ipv4/ip_nonlocal_bind | 此参数表示是否允许服
务绑定一个本机不存在的IP地址; 使用场景:有些服务需要依赖一个vip才能启动,但是此vip不在本机上,当vip飘移到本机上时才存在;
但是服务又需要提前启动,例如haproxy,nginx等代理需要绑定vip时; 0:默认值,表示不允许服务绑定一个本机不存的地址 1:表示允
许服务绑定一个本机不存在的地址 |
| vm.overcommit_memory = 1 | | vm.overcommit_memory:表示系
统允许内存的分配情况 0:默认值; 表示内核将检查是否有足够的可用内存供应用进程使用; 如果有足够的可用内存,内存申请允
许; 否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。redis要
把此参数设为1; 2: 表示允许分配的内存为:物理内存*vm.overcommit_ratio+交换空间; 与参数vm.overcommit_ratio结合使
用; |
| cat /proc/meminfo | awk ‘{print $1,$2/1024 " Mb"}’ | grep “Commit” | | 查看系统中可提交的内
存和已经申请的内存: CommitLimit:表示系统可分配的内存 Committed_AS:表示系统已经分配的内存
|
| kernel.msgmax | | 进程间的通信需要依靠内核来进行管理;是
通过消息列队来传递消息; 以字节为单位,规定消息的单大值; 默认为65536,即64k; 此值不能超过kernel.msgmnb的值,msgmnb
限定了消息队列的最大值;
|
| kernel.msgmnb | | 以字节为单位,规定了一个消息队列的最大
值; 默认值为:65536,即64k;
|
| kernel.mni | | 指定消息队列的最大个数;
|
| kernel.shmall | | 以页为单位,控制共享内存总量;Linux一
个内存页大小为4kb;
|| kernel.shmmax | | 定义单个共享内存段的最大值; shmmax 设
置应该足够大,设置的过低可能会导致需要创建多个共享内存段;
|
| kernel.shmmni | | 定义共享内存段的个数,默认为4096;
|
| net.ipv4.tcp_rmem = 4096/87380/67108864 net.ipv4.tcp_wmem = 4096/65536/67108864 | | 增加tcp
缓冲区大小,tcp_rmem表示接受数据缓冲区范围,tcp_wmem表示发送数据缓冲区范围,单位Byte,最大64M
|
| net.ipv4.tcp_retries2 = 5 | | TCP失败重传次数,默认值15,意味着重传
15次才彻底放弃,可减少到5,以尽早释放内核资源;在通讯过程中(已激活的sock),数据包发送失败后,内核要重试发送多少次后才决
定放弃连接
|
内核编译
1.前提:
(1) 准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取目标主机系统功能的相关信息
例如:需要启用相应的文件系统
(4) 获取内核源代码包
www.kernel.org
2.开发环境准备
包组
Development Tools
目标主机硬件设备相关信息
CPU:
cat /proc/cpuinfo
x86info -a
lscpu
PCI设备:
lspci
-v
-vv
lsusb
-v
-vv
块设备
lsblk
了解全部硬件设备信息
hal-device:CentOS 6
3.步骤
下载源码文件
.config:准备文本配置文件
make menuconfig:配置内核选项
make [-j #] 或者用两步实现: make -j # bzImage ; make -j # modules
make modules_install:安装模块
make install :安装内核相关文件
安装bzImage为 /boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
编辑grub的配置文件
编译内核两大步
- 1.配置内核选项
支持“更新”模式进行配置:make help
(a) make config:基于命令行以遍历的方式配置内核中可配置的每个选项
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)环境窗口界面
(d) make xconfig:基于QT(KDE)环境的窗口界面
支持“全新配置”模式进行配置
(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b) make allyesconfig: 所有选项均回答为“yes“
(c) make allnoconfig: 所有选项均回答为“no“
- 2.编译
全编译:make [-j #]
编译内核的一部分功能:
(a) 只编译某子目录中的相关代码
cd /usr/src/linux
make dir/
(b) 只编译一个特定的模块
cd /usr/src/linux
make dir/file.ko
示例:只为e1000编译驱动:
make drivers/net/ethernet/intel/e1000/e1000.ko
卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表
centos7:vim /boot/grub2/grub.cfg
:/menuentrycentos8:
rm -f /boot/loader/entries/7e3e9120767340a8bd946a83d7c3b84d-$(uname -r)-80.el8.x86_64.conf
systemd服务
Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激 活系统资源,服务器进程和其它进程
POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init
centos6 --> centos7:
启动:service name start ==> systemctl start name.service
停止:service name stop ==> systemctl stop name.service
重启:service name restart ==> systemctl restart name.service
状态:service name status ==> systemctl status name.service
禁止自动和手动启动: systemctl mask name.service
取消禁止: systemctl unmask name.service
服务查看
查看某服务当前激活与否的状态: systemctl is-active name.service
查看所有已经激活的服务: systemctl list-units --type|-t service
查看所有服务: systemctl list-units --type service --all|-a
重新加载配置 systemctl reload sshd.service
列出活动状态的所有服务单元 systemctl list-units --type=service
列出所有服务单元 systemctl list-units --type=service --all
查看服务单元的启用和禁用状态 systemctl list-unit-files --type=service
列出失败的服务 systemctl --failed --type=service
列出依赖的单元 systemctl list-dependencies sshd
验证sshd服务是否开机启动 systemctl is-enabled sshd
禁用network,使之不能自动启动,但手动可以 systemctl disable network
启用network systemctl enable network
禁用network,使之不能手动或自动启动 systemctl mask network
启用network systemctl unmask network
运行级别
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
获取默认运行级别: systemctl get-default
传统命令init,poweroff,halt,reboot都成为systemctl的软链接
关机:systemctl halt、systemctl poweroff
重启:systemctl reboot
挂起:systemctl suspend
休眠:systemctl hibernate
休眠并挂起:systemctl hybrid-sleep
4.5 文件管理
linux文件系统简述
linux文件系统中的文件名称区分大小写,其中以点(.)开头的文件为隐藏文件
文件由两类数据组成:
- 元数据:metadata
- 数据:data
linux下的文件命令规则
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件 (可以自定义)
- 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们
- 标准Linux文件系统(如ext4),文件名称大小写敏感
例如:MAIL, Mail, mail, mAiL
文件系统结构细节
目录 | 功能 |
---|---|
/boot | 引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录 |
/bin | 所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序 |
/sbin | 管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序 |
/lib | 启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules) |
/lib64 | 专用于x86_64系统上的辅助共享库文件存放位置 |
/etc | 配置文件目录 |
/home/USERNAME | 普通用户家目录 |
/root | 管理员的家目录 |
/media | 便携式移动设备挂载点 |
/mnt | 临时文件系统挂载点 |
/dev | 设备文件及特殊文件存储位置 |
c: character device,字符设备,线性访问 | |
/opt | 第三方应用程序的安装位置 |
/srv | 系统上运行的服务用到的数据 |
/tmp | 临时文件存储位置 |
/usr | universal shared, read-only data 全局共享的只读文件存放地 |
/usr/bin: 保证系统拥有完整功能而提供的应用程序 | |
/usr/sbin: centos7上访问/sbin实质是访问 /usr/sbin | |
/usr/lib:32位使用 | |
/usr/lib64:只存在64位系统 | |
/usr/include: C程序的头文件(header files) | |
/usr/share:结构化独立的数据,例如doc, man等 | |
/usr/local:第三方应用程序的安装位置:bin, sbin, lib, lib64, etc, share | |
/var | variable data files 可变文件存放地点 |
/var/cache: 应用程序缓存数据目录 | |
/var/lib: 应用程序状态信息数据 | |
/var/local:专用于为/usr/local下的应用程序存储可变数据 | |
/var/lock: 锁文件 | |
/var/log: 日志目录及文件 | |
/var/opt: 专用于为/opt下的应用程序存储可变数据 | |
/var/run: 运行中的进程相关数据,通常用于存储进程pid文件 | |
/var/spool: 应用程序数据池 | |
/var/tmp: 保存系统两次重启之间产生的临时数据 | |
/proc | 用于输出内核与进程信息相关的虚拟文件系统 |
/sys | 用于输出当前系统上硬件设备相关信息虚拟文件系统 |
/selinux | security enhanced Linux,selinux相关的安全策略等信息的存储位置 |
文件种类
符号 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录文件 |
b | 块设备 |
c | 字符设备 |
l | 符号链接文件 |
p | 管道文件pipe |
s | 套接字文件socket |
各类文件存放地
文件类型 | 存放的文件夹 |
---|---|
二进制程序 | /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin |
库文件 | /lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64 |
配置文件 | /etc, /etc/DIRECTORY, /usr/local/etc |
帮助文件 | /usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc |
绝对路径和相对路径
绝对路径:表示从根开始完整的文件的位置路径,以正斜杠开始,可用于任何想指定一个文件名的时候相对路径:名指定相对于当前工作目录或某目录的位置,不以斜线开始,可以作为一个简短的形式指定一个文件名
查看路径的基名:basename /path/to/somefile
查看某路径的目录名:dirname /path/to/somefile
linux下的inode解释
几乎每个文件系统都会需要大量不同的数据结构来保证其底层对各种文件存储目的的支持;在linux系统中(ext3或者ext4或者xfs文件系
统)就有一个很重要的数据结构叫inode(index node),一个inode包含某个文件或者某个目录的以下信息(也叫元数据):
信息项 | 英文术语 |
---|---|
----------- | |
文件类型(可执行文件,块文件,字符文件等) | File types ( executable, block special etc ) |
文件权限(读,写,执行等) | Permissions ( read, write etc ) |
文件属主全局唯一标识符 | UID ( Owner ) |
文件属组全局唯一标识符 | GID ( Group ) |
文件大小 | FileSize/bytes |
时间戳:最后访问时间、最后修改时间、最后改变时间和inode号变化信息 | Time stamps including last access, last modification |
and last inode number change. | |
文件链接数(硬链接和软链接) | Number of links ( soft/hard ) |
文件在磁盘的位置 | Location of ile on harddisk. |
该文件所分配的磁盘块数量 | |
其他信息 | Some other metadata about file. |
(Under ext2, each i-node contains 15 pointers. The first 12 of these pointers (num-bered 0 to 11 in Figure 14-2) point to the
location in the file system of the first 12 blocksof the file. The next pointer is a pointer to a block of pointers that give the
locations ofthe thirteenth and subsequent data blocks of the file.)
在ext2文件系统中,每个i-node包含有15和数据块指针。前12个数据块指针(0-11)指向分配给该文件的前12个数据块在磁盘的位置。接
下来的指针则指向下一个数据块或者指向一个指针块。
inode数据结构被存储在inode表中:由于每个inode代表某个文件的所有属性信息,所以inode表就记录了整个文件系统上的所有文
件的信息(元数据)
linux文件系统中每个目录下的文件被存储成目录项,每一项对应其inode号,通过inode号就可以访问到inode表的某一项,该项就记录了
该文件的元数据。如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmTqcsX7-1604371435758)(png/20191224193127136.png)]
cp命令与inode
分配一个空闲的inode号,在inode表中生成新条目;在目录中创建一个目录项,将名称与inode编号关联;拷贝数据生成新的文件
rm命令和inode
链接数递减,从而释放的inode号可以被重用,把数据块放在空闲列表中,删除目录项数据实际上不会马上被删除,但当另一个文件使用
数据块时将被覆盖
mv命令和inode
如果mv命令的目标和源在相同的文件系统,作为mv 命令 :- 用新的文件名创建对应新的目录项
- 删除旧目录条目对应的旧的文件名
- 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv相当于cp和rm
硬链接和软链接
硬链接
创建硬链接会增加额外的记录项以引用文件,对应于同一文件系统上同一个物理文件
每个目录引用相同的inode号,创建时链接数递增
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
- 删除其中一个硬链接文件并不影响其他有相同 inode 号的文件
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
硬链接不能跨越驱动器或分区
为文件创建硬链接语法:
~# ln filename [linkname ]
符号(或软)链接
符号链接,有时也称为软链接,是一种特殊的文件类型,其数据是另一文件的名称。
一个符号链接的数据内容是另一个文件的路径:
- 一个符号链接的数据内容是它引用文件的名称
- 可以对目录创建软连接
- 软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件
- 可以跨分区创建
- 指向的是另一个文件的路径
- 其大小为指向的路径字符串的长度
- 不增加或减少目标文件inode的引用计数
- 语法:
~# ln -s filename [linkname]
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间## 文件权限
文件权限
属主、属组
目录权限
目录与文件拥有相同的权限方案,只是对3种权限的含义另有所指。
读权限:可列出(比如,通过ls命令)目录之下的内容(即目录下的文件名)。
在实验验证对目录读权限位的操作时,应当了解有些Linux发行版对ls做了别名处理,
命令所携带的一些选项(比如,-F)需要访问目录中文件的i节点信息,而这又需要拥有对
目录的执行权限。为确保使用的是ls命令本身,执行时要给出命令的完整路径名(/bin/ls)
写权限:可在目录内创建、删除文件。注意,要删除文件,对文件本身无需有任何权限。
可执行权限:可访问目录中的文件。因此,有时也将对目录的执行权限称为search(搜索)权限。
访问文件时,需要拥有对路径名所列所有目录的执行权限。例如,想读取文件/home/mtk/x,则需拥有对目录/、/home以及/home/mtk
的执行权限(还要有对文件x自身的读权限)。若当前的工作目录为/home/mtk/sub1,访问相对路径名…/sub2/x时,需握有/home/mtk
和/home/mtk/sub2这两个目录的可执行权限(不必有对/或/home的执行权限)。 拥有对目录的读权限,用户只是能查看目录中的文件
列表。要想访问目录内文件的内容或是这些文件的 i节点信息,还需握有对目录的执行权限。 反之,若拥有对目录的可执行权限,而无读
权限,只要知道目录内文件的名称,仍可对其进行访问,但不能列出目录下的内容(即目录所含的其他文件名)。在控制对公共目录内容
的访问时,这是一种常用技术,简单而且实用。
要想在目录中添加或删除文件,需要同时拥有对该目录的执行和写权限。
五. Linux网络协议与管理
ISO网络7层模型:
- 物理层:其为启动、维护和关闭物理链路规定了:电器特性、机械特性、过程特性和功能特性
- 数据链路层: 有时也称网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡
- 网络层: 有时也称作互联网层,其主要负责处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议
(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议) - 传输层: 运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协
议)和UDP(用户数据报协议) - 会话层
- 表示层
- 应用层: 应用层负责处理特定的应用程序细节## 数据链路层
在TCP/IP协议族中,数据链路层主要有三个目的: - (1)为IP模块发送和接收IP数据报;
- (2)为ARP模块发送ARP请求和接收ARP应答;
- (3)为RARP发送RARP请求和接收RARP应答。
环回接口
大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类
网络号127就是为环回接口预留的。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的
IP数据报不能在任何网络上出现
网络层/IP协议
IP协议
IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。许多刚开始接触TCP/IP的人对IP提
供不可靠、无连接的数据报传送服务感到 很奇怪。IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的
结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了 一个可靠的运输层。为了提供这种可靠的服务,TCP采
用了超时重传、发送和接收端到端的确认分组等机制
- **不可靠(unreliable)**的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个
路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层
来提供(如TCP) - 无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也
说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进
行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达
IP数据报文格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保