作者:微信小助手
发布时间:2021-10-27T18:15:25
limits.conf{ ulimit -SHn 65535 # 临时设置文件描述符大小 进程最大打开文件柄数 还有socket最大连接数, 等同配置 nofile
ulimit -SHu 65535 # 临时设置用户最大进程数
ulimit -a # 查看
/etc/security/limits.conf
# 文件描述符大小 open files
# lsof |wc -l 查看当前文件句柄数使用数量
* soft nofile 16384 # 设置太大,进程使用过多会把机器拖死
* hard nofile 32768
# 用户最大进程数 max user processes
# echo $((`ps uxm |wc -l`-`ps ux |wc -l`)) 查看当前用户占用的进程数 [包括线程]
user soft nproc 16384
user hard nproc 32768
# 如果/etc/security/limits.d/有配置文件,将会覆盖/etc/security/limits.conf里的配置
# 即/etc/security/limits.d/的配置文件里就不要有同样的参量设置
/etc/security/limits.d/90-nproc.conf # centos6.3的默认这个文件会覆盖 limits.conf
user soft nproc 16384
user hard nproc 32768
sysctl -p # 修改配置文件后让系统生效
}
随机分配端口范围{
# 本机连其它端口用的
echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range
}
百万长链接设置{
# 内存消耗需要较大
vim /root/.bash_profile
# 添加如下2行,退出bash重新登陆
# 一个进程不能使用超过NR_OPEN文件描述符
echo 20000500 > /proc/sys/fs/nr_open
# 当前用户最大文件数
ulimit -n 10000000
}
core崩溃文件查看{
gdb core.13844
bt # 查看函数调用信息(堆栈)
}
libc.so故障修复{
# 由于升级glibc导致libc.so不稳定,突然报错,幸好还有未退出的终端
grep: error while loading shared libraries: /lib64/libc.so.6: ELF file OS ABI invalid
# 看看当前系统有多少版本 libc.so
ls /lib64/libc-[tab]
# 更改环境变量指向其他 libc.so 文件测试
export LD_PRELOAD=/lib64/libc-2.7.so # 如果不改变LD_PRELOAD变量,ln不能用,需要使用 /sbin/sln 命令做链接
# 当前如果好使了,在执行下面强制替换软链接。如不好使,测试其他版本的libc.so文件
ln -f -s /lib64/libc-2.7.so /lib64/libc.so.6
}
无法分配内存 {
fork: Cannot allocate memory
# 报错不一定是内存不够用,进程数或者线程数满了也会报这个错误, 可以适当增加 kernel.pid_max 的值,
cat /proc/sys/kernel/pid_max # 默认3.2w
}
sudo{
echo myPassword | sudo -S ls /tmp # 直接输入sudo的密码非交互,从标准输入读取密码而不是终端设备
visudo # sudo命令权限添加 /etc/sudoers
用户 别名(可用all)=NOPASSWD:命令1,命令2
user ALL=NOPASSWD:/bin/su # 免root密码切换root身份
wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
UserName ALL=(ALL) ALL
UserName ALL=(ALL) NOPASSWD: ALL
peterli ALL=(ALL) NOPASSWD:/sbin/service
Defaults requiretty # sudo不允许后台运行,注释此行既允许
Defaults !visiblepw # sudo不允许远程,去掉!既允许
}
grub开机启动项添加{
vim /etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1
}
stty{
#stty时一个用来改变并打印终端行设置的常用命令
stty iuclc # 在命令行下禁止输出大写
stty -iuclc # 恢复输出大写
stty olcuc # 在命令行下禁止输出小写
stty -olcuc # 恢复输出小写
stty size # 打印出终端的行数和列数
stty eof "string" # 改变系统默认ctrl+D来表示文件的结束
stty -echo # 禁止回显
stty echo # 打开回显
stty -echo;read;stty echo;read # 测试禁止回显
stty igncr # 忽略回车符
stty -igncr # 恢复回车符
stty erase '#' # 将#设置为退格字符
stty erase '^?' # 恢复退格字符
定时输入{
timeout_read(){
timeout=$1
old_stty_settings=`stty -g` # save current settings
stty -icanon min 0 time 100 # set 10seconds,not 100seconds
eval read varname # =read $varname
stty "$old_stty_settings" # recover settings
}
read -t 10 varname # 更简单的方法就是利用read命令的-t选项
}
检测用户按键{
#!/bin/bash
old_tty_settings=$(stty -g) # 保存老的设置(为什么?).
stty -icanon
Keypress=$(head -c1) # 或者使用$(dd bs=1 count=1 2> /dev/null)
echo "Key pressed was \""$Keypress"\"."
stty "$old_tty_settings" # 恢复老的设置.
exit 0
}
}
iptables{
内建三个表:nat mangle 和 filter
filter预设规则表,有INPUT、FORWARD 和 OUTPUT 三个规则链
vi /etc/sysconfig/iptables # 配置文件
INPUT # 进入
FORWARD # 转发
OUTPUT # 出去
ACCEPT # 将封包放行
REJECT # 拦阻该封包
DROP # 丢弃封包不予处理
-A # 在所选择的链(INPUT等)末添加一条或更多规则
-D # 删除一条
-E # 修改
-p # tcp、udp、icmp 0相当于所有all !取反
-P # 设置缺省策略(与所有链都不匹配强制使用此策略)
-s # IP/掩码 (IP/24) 主机名、网络名和清楚的IP地址 !取反
-j # 目标跳转,立即决定包的命运的专用内建目标
-i # 进入的(网络)接口 [名称] eth0
-o # 输出接口[名称]
-m # 模块
--sport # 源端口
--dport # 目标端口
iptables -F # 将防火墙中的规则条目清除掉 # 注意: iptables -P INPUT ACCEPT
iptables-restore < 规则文件 # 导入防火墙规则
/etc/init.d/iptables save # 保存防火墙设置
/etc/init.d/iptables restart # 重启防火墙服务
iptables -L -n # 查看规则
iptables -t nat -nL # 查看转发
iptables实例{
iptables -L INPUT # 列出某规则链中的所有规则
iptables -X allowed # 删除某个规则链 ,不加规则链,清除所有非内建的
iptables -Z INPUT # 将封包计数器归零
iptables -N allowed # 定义新的规则链
iptables -P INPUT DROP # 定义过滤政策
iptables -A INPUT -s 192.168.1.1 # 比对封包的来源IP # ! 192.168.0.0/24 ! 反向对比
iptables -A INPUT -d 192.168.1.1 # 比对封包的目的地IP
iptables -A INPUT -i eth0 # 比对封包是从哪片网卡进入
iptables -A FORWARD -o eth0 # 比对封包要从哪片网卡送出 eth+表示所有的网卡
iptables -A INPUT -p tcp # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型
iptables -D INPUT 8 # 从某个规则链中删除一条规则
iptables -D INPUT --dport 80 -j DROP # 从某个规则链中删除一条规则
iptables -R INPUT 8 -s 192.168.0.1 -j DROP # 取代现行规则
iptables -I INPUT 8 --dport 80 -j ACCEPT # 插入一条规则
iptables -A INPUT -i eth0 -j DROP # 其它情况不允许
iptables -A INPUT -p tcp -s IP -j DROP # 禁止指定IP访问
iptables -A INPUT -p tcp -s IP --dport port -j DROP # 禁止指定IP访问端口
iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT # 允许在IP访问指定端口
iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止使用某端口
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP # 禁止icmp端口
iptables -A INPUT -i eth0 -p icmp -j DROP # 禁止icmp端口
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP # 阻止所有没有经过你系统授权的TCP连接
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # IP包流量限制
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT # 除192.168.62.1外,禁止其它人ping我的主机
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP # 可防御cc攻击(未测试)
}
iptables配置实例文件{
# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007
*filter
:INPUT ACCEPT [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
# 允许的IP或IP段访问 建议多个
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
# 开放对外开放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
# 指定某端口针对IP开放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
# 拒绝所有协议(INPUT允许)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
# 允许已建立的或相关连的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 拒绝ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Feb 9 12:10:37 2007
}
iptables配置实例{
# 允许某段IP访问任何端口
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
# 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 注意: 直接设置这三条会掉线
# 开启22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 如果OUTPUT 设置成DROP的,要写上下面一条
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
# 注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链
# 如果开启了web服务器,OUTPUT设置�