RedHat系列配置静态IP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # cat /etc/sysconfig/network-scripts/ifcfg-enp2s0f0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 重点 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp2s0f0 UUID=65d626bd-d33f-42aa-8180-c6259b552177 DEVICE=enp2s0f0 ONBOOT=yes # 重点 IPADDR=xx.xx.xx.xx # 重点 PREFIX=21 # 重点 GATEWAY=xx.xx.xx # 重点
PS:用nmtui工具也可以,好像还更方便
RedHat系列配置网桥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 RedHat:~ # cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=xx.xx.xx.xx PREFIX=21 GATEWAY=xx.xx.xx RedHat:~ # cat /etc/sysconfig/network-scripts/ifcfg-eth2 DEVICE=eth2 TYPE=Ethernet BOOTPROTO=static ONBOOT=yes BRIDGE=br0
Debian系列配置静态IP 1 2 3 4 5 6 7 8 9 10 # cat /etc/network/interfaces auto lo iface lo inet loopback auto p1p1 # 重点 iface p1p1 inet static # 重点 address 90.88.31.222 # 重点 netmask 255.255.248.0 # 重点 gateway 90.88.24.1 # 重点 dns-nameservers 8.8.8.8 # 重点
RedHat系列默认进入控制台 1 systemctl set-default multi-user.target
搭建MSYS2环境 1 pacman -S base-devel gcc
配置代理 1 export http_proxy="http://域\\\账户:密码@IP:端口/"
Red Hat更换CentosOS的yum 1 2 3 4 5 6 7 8 9 # 删除原有的yum包管理工具: rpm -qa|grep yum|xargs rpm -e --nodeps # 到于Red Hat对应版本的CentOS源中找到以下包,然后用 rpm -ivh ./yum-* 批量安装 yum-***ver***.centos.noarch.rpm yum-metadata-parser-***ver***.rpm yum-plugin-fastestmirror-***ver***.rpm # 将下载yum包管理工具的Repo放到/etc/yum.repos.d中,替换原来CentOS的,记得替文本中的版本参数
perf record 与 report 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果。
1 2 3 4 perf record -e cpu-clock -g -p 2548 -g 选项是告诉perf record额外记录函数的调用关系 -e cpu-clock 指perf record监控的指标为cpu周期 -p 指定需要record的进程pid
程序运行完之后,perf record会生成一个名为perf.data的文件,如果之前已有,那么之前的perf.data文件会被覆盖 获得这个perf.data文件之后,就需要perf report工具进行查看
1 perf report -i perf.data
使用火焰图展示结果 Flame Graph 是开源的,通过这个软件可以将perf record的数据可视化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 第一步,利用perf抓取进程信息 $ sudo perf record -e cpu-clock -g -p 28591 # Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data. # 第二步 用perf script工具对perf.data进行解析 perf script -i perf.data &> perf.unfold # 第三步 将perf.unfold中的符号进行折叠: ./stackcollapse-perf.pl perf.unfold &> perf.folded # 最后生成svg图: ./flamegraph.pl perf.folded > perf.svg
使用自定义版本glibc编译程序的方法 1 gcc xxx.c -Wl,--rpath=/path/to/install/lib -Wl,--dynamic-linker=/path/to/install/lib/ld-linux-x86-64.so.2
备份与恢复磁盘命令 1 2 sudo dd if=/dev/sda | gzip > disk.img.gz gzip -dc /disk.img.gz | dd of=/dev/sda
CentOS 安装NFS 1 2 3 4 5 6 7 8 9 10 11 12 13 # 服务端客户端 yum install nfs-utils # 服务端编辑 /etc/exports /path/to/share *(insecure,rw,sync,no_root_squash,no_all_squash) /another/path xx.xx.xx.xx/x(insecure,rw,sync,no_root_squash,no_all_squash) # 服务端启动服务 systemctl --now enable nfs-server # 客户端 showmount -e xx.xx.xx.xx # 查看共享目录 mount -t nfs xx.xx.xx.xx:/path/to/share /data # 写进fastb xx.xx.xx.xx:/path/to/share /data nfs defaults 0 0
RedHat系列支持X转发最小化安装 1 # yum install "@X Window System"
或者
1 # yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils
fdisk无损扩容 1 2 3 4 5 6 7 # 卸载目标分区 umount /xxx/mount/point fdisk /dev/xxx p # 记录起始和终止扇区位置 d # 删除目标分区 n # 创建新的分区,需要保持起始扇区和p打印保持一致 w
虚拟磁盘镜像扩容 1 2 3 virt-filesystems --long -h --all -a /path/to/old.img # 查看原始虚拟镜像分区 qemu-img create -f qcow2 new.img 128G # 创建新的磁盘镜像文件 virt-resize --expand /dev/sda1 old.img new.img # resize目标分区,扩容到新的磁盘镜像
GCC各种技巧 1 2 void * __builtin_frob_return_addr (void *addr) void * __builtin_frame_address (unsigned int level)
截断大文件最快的方法 1 2 3 4 5 6 7 8 9 描述:删除大文件的开头几行 举例:FILENAME=输入文件名 LINECOUNT=输入行数; OUTFILENAME="$FILENAME$RANDOM$FILENAME"; dd if=$FILENAME of=$OUTFILENAME bs=$(head -$LINECOUNT $FILENAME |wc -c) skip=1 conv=notrunc iflag=fullblock; mv $OUTFILENAME $FILENAME -f 描述:删除大文件的开头xx字节 举例:FILENAME=输入文件名 BYTECOUNT=输入字节数; OUTFILENAME="$FILENAME$RANDOM$FILENAME"; dd if=$FILENAME of=$OUTFILENAME bs=$BYTECOUNT skip=1 conv=notrunc iflag=fullblock 描述:删除大文件的末尾几行 举例:FILENAME=输入文件名 LINECOUNT=输入行数; dd if=/dev/null of=$FILENAME seek=1 bs=$(($(find $FILENAME -printf "%s")-$(tail -$LINECOUNT $FILENAME |wc -c))) 举例:FILENAME=输入文件名 LINECOUNT=输入行数; dd if=/dev/null of=$FILENAME seek=1 bs=$(($(stat -c%s $FILENAME)- $(tail -$LINECOUNT $FILENAME |wc -c)))
GDB调试fork+exec簇函数下子进程的方法 1 2 3 4 (gdb) set follow-fork-mode child (gdb) catch exec (gdb) run # 或者continue (gdb) b main
下面以调试CentOS自带的qemu-kvm为例
1 2 3 4 5 6 7 8 9 # gdb attach xxxx (gdb) b virExec (gdb) c # virsh start xxx (gdb) set follow-fork-mode child # 不能提前设立 (gdb) cat exec (gdb) c (gdb) b main (gdb) c
一种有效阻止服务器被暴力破解的方法(FRP内网穿透模式下无效) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # !/bin/bash # 生成IP封禁脚本 mkdir -p /opt/anti-attack cat >/opt/anti-attack/anti-attack.sh <<EOF # !/bin/bash touch /var/log/anti-attack.log touch /etc/hosts.allow touch /etc/hosts.deny cat /var/log/secure|awk '/Failed/{print \$(NF-3)}'|sort|uniq -c|awk '{print \$2"="\$1;}' > /var/log/anti-attack.log for i in \`cat /var/log/anti-attack.log\` do IP=\`echo \$i|awk -F= '{print \$1}'\` NUM=\`echo \$i|awk -F= '{print \$2}'\` if [ \${NUM} -gt 10 ]; then grep \$IP /etc/hosts.allow /etc/hosts.deny > /dev/null if [ \$? -gt 0 ];then echo "sshd:\$IP:deny" >> /etc/hosts.deny fi fi done EOF chmod +x /opt/anti-attack/anti-attack.sh # 设定该脚本定时运行策略 crontab -l 2>&1|grep -v /opt/anti-attack/anti-attack.sh|grep -v 'no\ crontab\ for'>/var/tmp/tmp_modify echo "00 */1 * * * sh /opt/anti-attack/anti-attack.sh" >> /var/tmp/tmp_modify crontab /var/tmp/tmp_modify rm /var/tmp/tmp_modify -f # 下面的语句将修改ssh默认端口 sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config systemctl restart sshd
RHEL系列修改网口DNS 1 2 3 4 5 6 # 查看网口是否有配置dns nmcli c s eth0 | grep ipv4.dns # 修改网口的dns nmcli c m eth0 ipv4.dns "8.8.8.8 8.8.4.4" # 将dns信息保存到/etc/resolv.conf nmcli c up eth0