计算机 · 2021年5月24日 0

Ubuntu折腾笔记

配置中文环境

如果是自己安装的Ubuntu桌面操作系统应该不需要考虑这个问题,因为只要在安装过程中把相关的中文选项都点上就可以了。但是如果是服务器上的操作系统(比如vps的)或者说使用的docker镜像,可能就没有默认配置好中文了,这个时候就需要自己动手了。

安装步骤

  1. 安装相关的语言包
   sudo apt-get install language-pack-gnome-zh-hans-base language-pack-gnome-zh-hans
  1. 设置locale
   sudo locale-gen "zh_CN.UTF-8"  
   sudo dpkg-reconfigure locales  

dpkg-reconfigure是需要进行交互来选择语言的,也可以使用update-locale LANG=zh_CN.UTF-8"命令来替代,[避免这个交互过程][3]。 如果这个设置locale的方法没生效,那么可能需要重启后才能生效,或者在**~/.bashrc**文件末尾里面加上export LANG=zh_CN.UTF-8,然后执行source ~/.bashrc。 要验证设置locale是否成功,执行locale`命令即可。

参考

locale的细节可以查看manual(man locale)或者阅读这篇介绍,还有这篇博客

设置时区

sudo dpkg-reconfigure tzdata

通用的方法

  • 修改/etc/localtime这个软链接文件指向的时区文件
  • 或者修改/etc/timezone文件里设置的时区

中文输入法

输入特殊字符

  • 输入省略号 中文输入法下shift+6可以输入省略号。

在Ubuntu下截图

  1. 使用截图键(PrtScr键)全屏幕截图
  2. 使用gnome-screenshot键截图
    其实截图键截图也是用的此程序截图。通过命令gnome-screenshot -i还可以选择屏幕指定区域截图。对于改命令的其他使用方法可以查看manual或者查看-h选项。

windows下用zip格式压缩文件,在linux下解压时出现乱码问题

这个问题应该是压缩时使用的windows系统的gbk编码,但是解压时却按照utf8格式解压,因此出现解压不成功,有乱码的问题。
经过验证的可行解决办法:

unzip -O CP936 xxx.zip

据说将CP936换为GBK,GB18030等值也可以。

linux调整分区大小

1.首先对于挂载在/目录的分区是没法在开机时调整的,只能调整挂载在其他分区的目录。

https://askubuntu.com/questions/492054/how-to-extend-my-root-partition

2.对于不是挂载在/目录的分区,可以用fdisk调整分区大小和resize2fs调整扩容后的分区上的文件系统。如果是想不损坏原有分区数据的情况下直接对分区扩容,那么删除后重建的新分区的其实位置一定要和原来分区的其实位置相同。

自己遇到的问题:mininet官方发布的vm虚拟硬盘太小,将这个虚拟硬盘扩容后,需要调整里面的分区表。mininet vm的分区表是一个extended分区里挂载了一个逻辑分区,按理应该先调整这个extended分区,再调整逻辑分区。遇到的问题是新建的extended分区起始位置可以和原来的extended分区起始位置设置为相同的值,但是这个逻辑分区的起始位置设置为原来的值时会被提示超出可用范围,实在搞不清楚这个问题的原因在哪儿。。

给ubuntu16.04增加交换分区

原文地址

  • 显示当前是否有交换分区
    swapon --show或者free -lh
  • 创建一个交换文件
    fallocate -l 2G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
  • 使用swap文件
    swapon /swapfile
    再用swapon --show确认
  • 现在的swap文件每次重启后就会消失,每次重启后需要重新操作一遍。
  • 让这个交换分区变为永久的
    cp /etc/fstab /etc/fstab.bak
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  • 设置使用交换分区的积极程度:
    cat /proc/sys/vm/swappiness
    sysctl vm.swappiness=10
    或者为了让其永久生效,在/etc/sysctl.conf文件里加一句:vm.swappiness=10
    上面的10都是自己指定的使用交换分区的积极成都,在0-100范围内就可以。
  • 设置缓存文件目录信息积极程度的值:
    cat /proc/sys/vm/vfs_cache_pressure(值越大越不缓存在内存里)

init system

  • systemd
  • http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
  • https://unix.stackexchange.com/a/47715/191816
  • https://superuser.com/a/1274913/879851
  • https://stackoverflow.com/a/46572318/5357784 就个人使用经验而言,在使用sytemd来完成开机启动容器的任务时(docker run -d xxx),需要设置Type=oneshotRemainAfterExit=true,设置Type=simpleType=forking都是不可以的,因为-d启动的容器不是前台进程,也没有按照forking预期的模式变成守护进程。可以考虑用Type=simpledocker run xxx来启动容器,因为这种方式启动的容器是以前台进程的方式运行的。如果选择了用docker run -d xxx来启动容器,而且systemd设置的Type=simple或者Type=forking,那么systemd反而会在检测到超时异常之后,执行ExecStop把已经启动的容器给停掉。
  • openrc

systemd删除服务

https://superuser.com/questions/513159/how-to-remove-systemd-services

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] # and symlinks that might be related
rm /usr/lib/systemd/system/[servicename] 
rm /usr/lib/systemd/system/[servicename] # and symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

apt相关错误处理

The package lists or status file could not be parsed or opened
https://blog.csdn.net/errno/article/details/6407461

硬盘空间管理

查看硬盘的使用情况

sudo baobab

记得一定要加sudo,不然有些文件夹无法访问,得出的数据不准确。

df -h

删除.cache文件夹

Ubuntu启动过慢

systemd-analyze blame

找出耗时多的任务关掉。

sudo systemd-analyze critical-chain

blame的结果不够直观,因为有些服务是并行启动的,时间重复计算了,所以还是看critical-chain。输出如下:

排查是否是snap导致

https://askubuntu.com/questions/1056645/what-are-the-dev-loop-services-that-started-on-boot

通过losetup命令,查看哪些snap应用对应的loop device导致了开机启动慢。

去除swap空间

排查是否是locate数据库更新导致

我说我的电脑每次启动后怎么都会变得卡卡的,原来是有个updatedb-mlocate程序每次启动后在自动运行,气死我了。

检查dmesg

发现启动后的dmesg报了一个bug:

[    0.656624] tpm_crb MSFT0101:00: [Firmware Bug]: ACPI region does not cover the entire command/response buffer. [mem 0xfed40000-0xfed4087f flags 0x200] vs fed40080 f80
[    0.656636] tpm_crb MSFT0101:00: [Firmware Bug]: ACPI region does not cover the entire command/response buffer. [mem 0xfed40000-0xfed4087f flags 0x200] vs fed40080 f80

按照这个讨论关闭TPM(Trusted Platform Module),关闭这个DELL BIOS的bug。

Ubuntu启动时跳过BIOS

装了双系统(准确的说我是双硬盘双系统),Ubuntu重启的时候自动跳过BIOS,导致不能选择启动到Windows,参考了这个回答

sudo systemctl reboot --firmware-setup

不过切回windows后,windows又有快速启动,又会跳过BIOS没法进入Ubuntu!!!解决办法就是win10搜索栏里搜索高级启动选项,在里面找一下(子选项的)子选项,有一个UEFI启动设置的选项,选这个选项就可以在启动的时候又进入BIOS了。但在实际使用过程中,我遇到了通过高级启动启动选项里的UEFI启动设置仍然不能进入BIOS的情况,最后是通过先使用高级启动选项进入安全模式,再重启(不记得重启之前是否有再设置UEFI启动设置,应该是没有),并且在重启过程中按F2进入BIOS解决了win10重启后无法进入BIOS的问题。猜测win10重启进入安全模式是会关闭快速启动相关设置。

apt

Ubuntu的包管理工具apt-get或者apt经常用,但是呢又经常会遇到一些小问题需要上网查,这里就做个汇总好了。

基本操作

查询包信息

apt show <pkg-name>
apt-cache show <pkg-name>

查询某个命令来自于哪个包

which <cmd-name>
dpkg -S <cmd-path>

升级指定的包

apt-get install --only-upgrade <pkg-name>

安装指定版本包

https://askubuntu.com/questions/428772/how-to-install-specific-version-of-some-package

sudo apt-get install package=version

apt安装日志文件位置:/var/log/apt/history.log

下载某个包的源码

需要提前在Software Updater里把下载源码的选项给勾选上。

apt-get source <pkg-name>

apt查看软件依赖

https://linux.cn/article-12987-1.html

更新内核

这篇文章讲得挺好的,但我仍然写两句吧,写两个用apt更新的方式。

1.手动下载官方的ppa里的内核deb包安装

这个网址列出了官方编译好的各个内核版本的deb包,可以下载下来然后dpkg命令安装就好。如果安装的版本比现有的内核版本低,那么可能需要改下/boot/grub/grub.cfg文件和/etc/default/grub文件,让机器启动时使用你新安装的内核版本,或者是留点时间给你选择。具体的过程我貌似在之前的博客里写过了或者将要写这么一篇博客。

2.apt安装

上面的方法因为这个deb包是从ppa里下载的,貌似不够权威,所以再看下怎么升级正式版本的内核:

sudo apt-get update
sudo apt-get upgrade linux-image-generic

比较奇怪的是,以Ubuntu18.04为例,现在的官网镜像都是带的5.0以上的内核,我这个以前安装的18.04版本确只能升到4.15,强行安装了官方仓库里提供的5.0以上的内核,结果就出现触摸板反应迟钝的现象,只好又换回4.15的内核。总之在物理机上换内核还真是一件比较危险的事情。

硬件

查看内存频率

please refer to this web page.

For short:

sudo lshw -short -C memory

升级到22.04后的bug

1.活动(activities)里面找不到chrome浏览器

https://askubuntu.com/questions/1412587/upgraded-to-ubuntu-22-04-and-i-cant-open-chrome-in-activities

解决方案就是把目录/home/user/.local/share/applications/里chrome的.desktop文件删掉,然后把chrome重新安装一遍.