Linux问题积累

升级内核至 4.15

安装包下载地址根据系统类型,例如amd64下载4个包含generic的安装包,然后执行sudo dpkg -i *.deb进行安装,然后重启

解压tar失败

如果用命令 tar -zxvf xxx.tar 解压的话会出现提示:

1
2
3
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors

然后用file命令查看了文件的格式 发现是POSIX tar archive 格式的,用命令 tar -xvf xxx.tar成功解压好了

bug: ls 不显示文件

scp文件到远程机后,在远程机已经locate到了文件,在文件管理器里也看到了,但是用llls却看不到,这是ubuntu18.04的bug

在Linux拷贝数据到U盘时,最好不要马上直接拔U盘,因为拷贝数据会花一定时间,可能导致拷贝失败

could not get lock /var/lib/dpkg/lock -open

apt-get命令安装一些软件包时,总报错:E:could not get lock /var/lib/dpkg/lock -open

出现这个问题的原因可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因,可能是上次安装时没正常完成,而导致出现此状况。

解决方法:输入以下命令

1
2
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

执行 updatedb报错: updatedb: can not open a temporary file for /var/lib/mlocate/mlocate.db
必须是root才能执行命令,sudo updatedb。有时可能又报错:*/var/lib/mlocate/mlocate.db' is locked (probably by an earlier updatedb) 此时稍等一会再运行命令即可。

Qt编译错误 usr/bin/ld cannot find

linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:
/usr/bin/ld: cannot find -lxxx
例如:

1
2
3
4
/usr/bin/ld: cannot find -lGL
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find -lltdl
/usr/bin/ld: cannot find -lpulse

其中xxx即表示函式库文件名称,如上例的:libc.so、libltdl.so.

命名规则:lib+库名(即xxx)+.so

一般是lib没有装或版本不对,解决方法:

  1. 先搜索lib,规则是apt-cache search libXXX-dev或者用apt-file,因为库的完整名称不确定。例如:
1
2
apt-cache search libgl-dev
apt-cache search libpulse-dev
  1. 根据搜索的结果安装库,有时结果很多,需要正确选择。例如:apt-get install libgl1-mesa-dev

参考:Qt 编译常见错误:usr/bin/ld: cannot find

安装扩展名sh的软件包

安装从网上下载的软件包时出错,扩展名为sh

原因在于它实际不是sh脚本文件,而是二进制文件,用./file形式运行

软件包有未满足的依赖关系

在linux上安装某个库时,经常出现依赖项版本不匹配的情况,可以一级一级找到出问题的依赖项,一般是现有版本比要安装的版本还要高

上图所示是gcc的版本不匹配,这种问题就要用到aptitude,运行命令:sudo aptitude install gfortran-5,首先会显示出问题的依赖项,然后给出解决方案,一般第一种都不是我们想要的,选n后看第二种,再不合适就继续n,直到找到需要的解决方案为止

ubuntu中Qt无法输入中文的问题

前提是安装了fcitx

1
2
3
4
5
sudo cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /home/user/Qt5.13.0/5.13.0/gcc_64/plugins/platforminputcontexts

sudo cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /home/user/Qt5.13.0/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts

sudo cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /home/user/Qt_ROS_Developer/latest/lib/Qt/plugins/platforminputcontexts

version * not found

我用20.04,从22.04拷贝过来Groot,结果运行报错

1
2
3
4
5
6
7
8
9
10
11
12
13
~/Groot/build$ ldd Groot | grep not
./Groot: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./Groot)
./Groot: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./Groot)
./Groot: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by ./Groot)
./Groot: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./Groot)
./Groot: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by libbehavior_tree_editor.so)
./Groot: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by libbehavior_tree_editor.so)

./Groot: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by libbehavior_tree_editor.so)
./Groot: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by libbehavior_tree_editor.so)
./Groot: /lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by libbehavior_tree_editor.so)

./Groot: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by libbehavior_tree_editor.so)

以缺少GLIBCXX_3.4.30为例,执行strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX 发现 GLIBCXX只到 3.4.28,确实是 not found

两个文件一模一样,即md5值一样,但是依赖库的版本可能不同,这样两文件运行的结果也有可能不同。

检查系统日志

检查日志文件的大小: journalctl --disk-usage

清除最近5天的日志: sudo journalctl --vacuum-time=5d