mysql/mongo/nginx手册整理(2021版)

作者:微信小助手

发布时间: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设置�