Category: Linux

  • CentOS 重新生成 grub.cfg

    内核升级多次之后,grub 菜单多个版本共存,进行 /boot 的清理之后,重新生成菜单

    cp /boot/grub2/grub.cfg /root/grub.cfg.bak
    grub2-mkconfig -o /boot/grub2/grub.cfg
    

    之后检查是否有问题

    /boot/grub2/grub.cfg /root/grub.cfg.bak
    

    重启机器验证

    centos7 的文件名叫 /etc/grub2.cfg

    update: 2019-11-21
    关闭 swap 并删除 swap lvm 之后机器启动不了,swap 找不到

    原来 /etc/default/grub 配置有

    GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rhgb quiet"
    

    删掉后重新生成 grub 问题解决

  • aliyun ecs vpc 使用自建 nameserver

    对于 dhcp 获取 ip 的 vpc ecs,会强制更改 /etc/resolv.conf,使用如下方式防止替换

    /etc/sysconfig/network-scripts/ifcfg-eth0 添加 PEERDNS=no

  • bash debug line number

    当遇到很长 bash 脚本,尤其包含很多逻辑的时候,需要用 bash 行号进行debug,方法是设置 PS4 变量。

    [vagrant@centos7-work ~]$ sh foobar.sh 
    foobar
    [vagrant@centos7-work ~]$ export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
    [vagrant@centos7-work ~]$ sh -x foobar.sh 
    (foobar.sh:2) $ echo foobar
    foobar
    

    参考:
    https://coderwall.com/p/wil8da/debug-bash-scripts-with-line-numbers-more-info

  • CentOS 7 systemd 禁用 gnome 启动

    平时自己家里的 CentOS 7 不需要图形界面,所以禁用

    查看当前启动模式,发现时界面模式

    [root@192 ~]# systemctl get-default 
    graphical.target
    

    将界面模式改为多用户无界面模式,重启生效

    [root@192 ~]# systemctl set-default multi-user.target
    Removed symlink /etc/systemd/system/default.target.
    Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
    [root@192 ~]# systemctl reboot
    
  • 关闭 swap 操作

    检查:

    free -m # 应该 Swap 显示全是 0
    

    备份 /etc/fstab

    cp /etc/fstab /tmp/fstab.`date +%F`
    

    删除 /etc/fstab 中 swap 挂载项

    vim /etc/fstab
    

    关闭所有 swap

    swapoff -a
    

    观察进程使用 swap 和 swapoff -a 之后回收情况,对于不能回收 swap 的进程需要安排时间重启

    
    free -m
    for file in /proc/*/status ; do cat $file | awk '/Name|^Pid|VmSwap/{printf $2 " " $3 $4}END{ print ""}' | grep kB | grep -v '0 kB' ; done | sort -k 3 -n
    
  • bash countdown

    输入 countdown + 秒数,就开始倒计时了

    gnu date

    function countdown(){  
        local now=$(date +%s)
        local end=$((now + $1))
        while (( now < end )); do   
            printf "%s\r" "$(date -u -d @$((end - now)) +%T)"  
            sleep 0.25  
            now=$(date +%s)
        done  
        echo
    }
    

    osx date

    function countdown(){  
        echo $2
        local now=$(date +%s)
        local end=$((now + $1))
        while (( now < end )); do   
            printf "%s\r" "$(date -u -j -f %s $((end - now)) +%T)"  
            sleep 0.25  
            now=$(date +%s)
        done
    }
    

    参考:https://superuser.com/questions/850368/osx-bash-command-line-countdown-timer?answertab=votes#tab-top