LINUX系统软件安装和卸载的常见方法
RHEL/CentOS系列
rpm -e "软件包名字"
yum remove "软件包名字"
,此操作会卸载相关的依赖
Debian/Ubuntu系列
apt-get remove "软件包名字"
,不删除依赖,保留配置文件apt-get autoremove "软件包名字"
,删除依赖,保留配置文件apt-get purge "软件包名字"
,不删除依赖,删除配置文件
源代码安装的,可以使用
make uninstall
,或者直接删掉软件目录
修改LINUX的主机名
- RHEL/CentOS系列
hostnamectl set-hostname "主机名"
- 修改
/etc/sysconfig/network
里面的HOSTNAME
- Debian/Ubuntu系列
- 修改
/etc/hosts
和/etc/hostname
的主机名,然后运行/etc/init.d/hostname.sh start
- 修改
- 临时有效
hostname "主机名"
自动切割压缩备份日志脚本
- 每天凌晨5点执行,带日期后缀
- 以Nginx日志为例
- 切割打包压缩前一天的日志之后,将压缩包上传到FTP服务器
192.168.1.2
账号aaa
密码bbb
1 |
|
1 | 0 5 * * * /bin/bash /path/to/logrotate.sh |
iptables
允许来自127.0.0.1端口1234访问114.114.114.114端口80
1 | iptables -A INPUT -s 127.0.0.1 --sport 1234 -d 114.114.114.114 --dport 80 -j ACCPET |
禁用从lo进入的流量
1 | iptables -A INPUT -i lo -j REJECT |
允许外部访问22端口
1 | iptables -A INPUT -p tcp --dport 22 -j ACCPET |
在postrouting链上,把源地址192.168.2.0/24的数据包源地址修改为192.168.1.2
1 | iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.2 |
删除INPUT链上第八条规则
1 | iptables -Ln --line-numbers |
eth0的数据包转发到eth1
1 | iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT |
iptables匹配参数
-A
:在chain里追加规则-D
:删除chain里的规则-I
:将规则插入到chain-t
:指定表-s
:匹配源地址-d
:匹配目的地址-p
:协议匹配-i
:入口匹配-o
:出口匹配--sport
:源端口匹配--dport
:出口端口匹配-j
:数据包处理动作!
:取反
iptables基本概念
table
raw
用于配置数据包,raw
中的数据包不会被系统跟踪filter
是用于存放所有与防火墙相关操作的默认表nat
用于 网络地址转换(例如:端口转发)mangle
用于对特定数据包的修改security
用于 强制访问控制网络规则(例如: SELinux)
处理流程
1 | XXXXXXXXXXXXXXXXXX |
统计TCP连接状态
1 | netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c |
列出每个IP的TCP连接数
1 | netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn |
生成随机字符串
1 | openssl rand -hex 20 |
1 | dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/[:space:]" | dd bs=32 count=1 2>/dev/null |
描述tcp三次握手的过程
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。
内核参数的含义
net.ipv4.tcp_tw_recycle=1
- 启用此功能可以加快TIME-WAIT状态的TCP连接回收
- 内核会记录最后一个报文的时间戳,如果新的TCP报文时间戳小于最后一个报文的时间戳,则会drop包,导致无法建立TCP连接
net.ipv4.tcp_tw_reuse=1
- 允许将处于TIME-WAIT状态的socket用于新的TCP连接
net.ipv4.tcp_timestamps=1
- 发送TCP时间戳
vm.swappiness=0
- 最大限度使用物理内存,物理内存耗尽才启用swap
Linux开机启动顺序
以BIOS-based
和RHEL/CentOS-7
为例
- 硬件加电
- 加载BIOS
- 硬件自检
- BIOS按照启动顺序读取存储设备的MBR
- 根据MBR找到并加载bootloader
- bootloader从
/boot
目录加载vmlinuz
内核镜像,提取initramfs
的内容并存放在tmpfs
中 - 操作系统内核从
initramfs
中加载必要的驱动和挂载根文件系统,启动systemd
作为第一个系统进程 - systemd读取配置文件,读取
default-target
文件,引导至default-target
定义的状态- 初始化网络
- 设置主机名
- 基于内核参数初始化硬件设备
- 加载文件系统
- 启动systemd服务
- 启动完成
ps aux中VSZ和RSS的含义
- VSZ:虚拟内存集,代表进程占用的虚拟内存空间
- RSS:物理内存集,代表进程实际占用的物理内存空间
top命令中字段的含义
- PID:进程ID
- USER:进程所有者的用户名
- PR:进程优先级
- NI:nice值,数值越小,优先级越高
- VIRT:虚拟内存集,代表进程占用的虚拟内存空间
- RES:物理内存集,代表进程实际占用的物理内存空间
- SHR:共享内存大小
- S:进程状态
- %CPU:CPU时间占比
- %MEM:物理内存占比
- TIME+:进程使用的CPU时间总量
- COMMAND:进程命令
load average含义
1 | load average: 0.00, 0.00, 0.00 |
- 分别代表1分钟内、5分钟内、15分钟内系统的平均负载
- 系统负载指的是运行队列的长度,即等待CPU的平均进程数
- 因此
load average的值=CPU核数
是最理想的状态