标签:ubuntu

最流行的Linux发行版

emacs 在 ubuntu console 界面下快速启动

后台操作

  • C-z 将 emacs 切换到后台。 evil 模式下为 C-x C-z
  • fg 将最近后台任务切换到前台
  • jobs 查看后台任务列表
  • fg 1 将后台任务 1 切换到前台
  • bg 将任务切换到后台,一般在命令行最后加上 & bg

进程操作

  • ps -e | grep emacs 查看 emacs 进程号
  • kill pid 杀死 emacs 进程

emacs daemon

vim ~/.bashrc
export ALTERNATE_EDITOR=""
alias e="emacsclient -c"

mysql 占用 cpu 高问题分析

  • htop 查看 cpu 占用情况 mysql 占用了 95% 以上的 cpu 资源,java 占用 cpu 不多。
  • 查看 mysql 进程列表,未发现明显异常

    mysql -u root -p
    show processlist;
    
  • 将查询时间在 1 秒以上的 sql 语句记录到 log 中

    set global slow_query_log=1;
    set global long_query_time=1;
    set global slow_query_log_file="/var/log/mysql/slow-queries.log";
    
  • 查看 log,发现部分 sql 语句查询时间竟然有半分多钟

在 linode ubuntu 中开启 BBR

网上的解决方案,大多要求替换 linode 定制 kernel,换成原生 kernel,在控制面板中选择 grub2 启动方式。无意中看到这个解决方案, 提到可以直接在定制的 linode linux kernel 4.9.7 中,打开 BBR 功能。这就简单多了,试了一下, 网速好像真有提高。

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

从 Ubuntu 14.04 LTS 升级到 Ubuntu 16.04 LTS

LTS 是 Ubuntu 长期维护版本,时间为五年。维护时间到期后,软件不再更新,如果安装某个软件最新版本,可能会导致各种不兼容。当前使用的是 14.04LTS,下一个稳定长期维护版本是 16.04LTS。Ubuntu 的升级可不像商业操作系统升级这么省心,系统的升级带来软件的升级,而软件的升级并不保证配置的兼容性。

选择一个合适的升级时间点,也有讲究。如果 16.04LTS 刚发布就升级,对于升级中碰到的各种问题,网上很难找到解决方案;如果拖到版本维护时间快到期时再升级,又会导致不兼容的软件变多,需要解决更多的升级问题。所以我选择 16.04LTS 发布一年左右这个时间点进行升级。

  • 首先应该阅读 linode 上的 Ubuntu 16.04 LTS 升级指导。这里主要强调几点:
    • 软件升级到最新 apt-get update && apt-get upgrade
    • 在 linode 管理界面上选择最新内核
    • 安装升级管理软件 apt-get install update-manager-core
    • 备份当前系统

      我的方法是新建一个 linode 节点,并 clone 当前节点。升级完成,解决所有问题后,再删除此节点。linode 节点是按时间收费的,这个节点存在的时间很短,花费很少。

    • 停止重要系统服务
    • 升级 do-release-upgrade
  • 升级过程中,一直有交互提示信息。比如:询问保留配置还是覆盖配置;询问是否升级数据库;询问是否删除无用的软件包,等等。 这个过程要小心谨慎,一不小心你的配置就会被删除。
    • 提示是否打开新的 sshd 进程和端口,因为当前 ssh 可能会中断。选择是。
    • 是否更新源地址到最新版本。选择是。
    • 是否下载并安装 16.04LTS 对应的新版本软件,有些软件没有对应候选版本,无法升级。选择是。
    • 是否删除 sysstat 日志。选择是。
    • phpmyadmin 升级相关问题。我升级失败,选择 abort。在新版本里删除重装就行了。
    • 是否覆盖 /etc/nginx/nginx.conf 。选择是。记得在新系统中修改。
    • 是否安装新版本配置 20-imap.conf 。选择是。
    • 是否自动重启服务。选择是。
    • 是否覆盖 /etc/ppp/options 。选择是。
    • 是否覆盖 /etc/vsftpd.conf 。选择是。记得在新系统中修改。
    • 是否覆盖 50unattended-upgrades.ucftmp 。选择是。
    • 升级完成后,提示 pptpd 升级失败。

      在新版本中尝试解决,提示 linux image 的 module 未能加载,网上说重装内核可以解决。而 linode 上的 ubuntu 默认使用定制内核,无法 apt reinstall,所以该问题一直无法解决,最后只能将 pptpd 包删除。

    • 升级完成后,要重启系统。
  • 升级完成后,wordpress 站点不能正常访问,还要做一些修改。
    • 删除 apache2 服务 apt remove apache2-bin
    • 删除 apt 备份配置,否则提示扩展名不对。

      mv /etc/apt/apt.conf.d/50unattended-upgrades.ucf-old ~/
      
    • 16.04LTS 上 php 版本升级到 7.0
      • apt install php php-fpm php-mcrypt php-pear php-dev
      • apt-get purge php5-fpm php5-mysql php5-common php5-cli
      • 修改 nginx 中 fpmbackend 为 /run/php/php7.0-fpm.sock
      • mysql_ 系列函数彻底弃用,换成 mysqli_ 系列函数。
      • 修改 fastcgi_params 参数,否则 php 页面总是空白 。

        vim /etc/nginx/fastcgi_params
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO                $fastcgi_script_name;
        
    • 恢复原 nginx.conf 配置,删除 default 站点
    • 恢复 vsftpd.conf 配置
    • 删除并重新安装 phpmyadmin