Ubuntu使用过程中遇到的问题

本文最后更新于:2021年1月8日 晚上

一、Ubuntu安装Caffe

前期

参照链接一步一步走

遇到的其他错误:

错误1

make runtest -j12时,遇到.build_release/tools/caffe: error while loading shared libraries: libcudnn.so.6: cannot open shared object file: No such file or directory

  • 由于用的zsh而不是bash,输入nvcc -V发现找不到nvcc指令,因此通过在终端输入bash换回到bash环境,再运行make runtest -j12,即可解决

错误2

make runtest -j12make pycaffe -j8成功后,在python中import caffe时报错。

  • no module caffe,检查~/bashrc中是否添加了export PYTHONPATH=/home/xxx/caffe/python:$PYTHONPATH
  • ImportError:No module named skimage.io,则通过sudo apt-get install python-skimage安装skimage模块

错误3

caffe安装出现 “error : too few arguments in function call” 的错误

  • 替换caffe-master\include\caffe\util中的”cudnn.hpp”
  • 参考

错误4

2 errors detected in the compilation of “/tmp/tmpxft_0000339c_00000000-19_box_annotator_ohem_layer.compute_61.cpp1.ii”.
Makefile:595: recipe for target ‘.build_release/cuda/src/caffe/layers/box_annotator_ohem_layer.o’ failed
make: * [.build_release/cuda/src/caffe/layers/box_annotator_ohem_layer.o] Error 1

  • 修改makefile, 319行附近部分改成:(加了-std=c++11)

    ifeq ($(DEBUG), 1)
        COMMON_FLAGS += -DDEBUG -g -O0 -std=c++11
        NVCCFLAGS += -G
    else
        COMMON_FLAGS += -DNDEBUG -O2 -std=c++11
    endif

二、安装与卸载python3.6

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

### 卸载python3.6
sudo apt autoremove python3.6

三、Screen的使用

  • 安装:sudo apt install screen
  • 新建会话窗口:scrren或者screen -S name
  • 退出当前窗口,回到主窗口(detach):Ctrl+a+d
  • 恢复会话窗口:
    • 先通过screen -ls查看窗口列表,
    • 再通过screen -r name或者screen -r id恢复窗口
  • 杀死会话窗口:screen -9 id
  • 清除死去窗口:screen -wipe

四、nvidia-smi后显卡驱动报错

查看显卡信息

amax@amax:~$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
  • 该问题出现在Ubuntu装好CUDA后

  • 解决方案

    sudo apt-get update
    sudo apt-get install --no-install-recommends nvidia-384 libcuda1-384 nvidia-opencl-icd-384
    sudo reboot

查看显卡驱动

sudo dpkg --list | grep nvidia-*

查看显卡型号

amax@amax:~$ lspci |grep VGA
02:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)

参考链接

1.https://www.cnblogs.com/feifanrensheng/p/9974249.html

五、自定义截图快捷键

通过System settings/keyboard/shortcus/custom shortcuts新建快捷键,

  • Name输入Screenshot(自己定,能看懂就好)
  • Command输入gnome-screenshot -a(有个空格)

应用之后,会多出一行,单击Disabled,按下Ctrl+Alt+A(你要设置的快捷键)即可

六、重装系统流程

1)制作系统启动盘

  • 工具:Rufus、Ubuntu镜像

rufus

2)开始安装系统

  • 将U盘插到Amax主机上,安装UBuntu,选择非UEFI形式启动(很重要!!)
  • 选择地点、设置用户名等等

3)安装显卡驱动

  • 到NVIDIA官网下载对应版本的显卡驱动,如NVIDIA-Linux-x86_64-430.50.run
  • 赋予权限,sudo chomod 777 NVIDIA-Linux-x86_64-430.50.run
  • 开机后,按住Ctrl+Alt+F1进行命令行,通过sudo service lightdm stop关闭相应服务
  • sudo init 3
  • 通过cd切换到对应目录,安装驱动程序sudo ./NVIDIA-Linux-x86_64-430.50.run
  • 之后,yes,no,no
  • 安装完成后,通过nvidia-smi确认是否安装成功
  • 最后,sudo reboot重启即可

4)修改源

  • 备份原先的源文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  • 修改源为阿里源、中科大源或者清华源sudo gedit /etc/apt/sources.list
## 阿里源 16.04
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

## 中科大源
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse  
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse  
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse  
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse  
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse  
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse  
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse  
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse  
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse  
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

5)安装pip

sudo apt install python-pip

6)安装多个版本的CUDA和CUDNN

  • 在NVIDIA官网下载Cuda9.0以及Cuda8.0
  • 赋予读写权限,如sudo chmod 777 cuda_8.0.61_375.26_linux.run
  • 执行安装文件,如./cuda_8.0.61_375.26_linux.run
  • 修改环境变量~/.bashrc
export PATH=\$PATH:/usr/local/cuda/bin 
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/cuda/lib64 
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64
  • 创建软连接
cd /usr/local/ #切换路径
sudo rm -rf cuda  
sudo ln -s cuda9.0 cuda  #创建新的软连接

nvcc -V

7)安装搜狗输入法

参考链接

七、增加虚拟内存

1)查看内存(非实时,后面m是单位)

ubuntu@amax:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15711        1448       10962          93        3301       13761
Swap:         16060           0       16060

2)增加虚拟内存

  • 复制磁盘空间:sudo dd if=/dev/zero of=/swap_file bs=1024 count=2097152

    2097152+0 records in
    2097152+0 records out
    2147483648 bytes (2.1 GB) copied, 45.1339 s, 47.6 MB/s
  • 格式化swaps分区:mkswap /swap_file

    mkswap: /swap_file: warning: don't erase bootbits sectors
            ``on whole disk. Use -f to force.
    Setting up swapspace version 1, size = 2097148 KiB
    no label, UUID=e70c01f7-1117-46a5-ba36-955027112db6
  • 开启swap分区:swapon /swap_file

  • 再次查看内存:free -m

  • 关闭swap分区:swapoff -v /swap_file

  • 在/etc/fstab 文件末端添加如下命令,可实现开机自动开启swap分区

    /swap_file	swap	swap	defaults	0 0

3)参考链接

【1】http://www.cnblogs.com/turingbrain/p/6531516.html

【2】用以检查 Linux 内存使用的 5 个命令

【3】每天一个linux命令(4) df命令

【4】Linux系统怎么调整swap分区大小

八、Ubuntu系统重启分辨率出错问题

Ubuntu安装完matlab后,重启系统,遇到了分辨率变成640x480的情况。

参考https://blog.csdn.net/QianQiYing/article/details/81535761,修改/etc/X11/xorg.conf配置,重启后仍然没有解决。

之后,参考https://blog.csdn.net/qq_35379989/article/details/78934486

#修改grub中相应的分辨率内容 GRUB_GFXMODE
sudo gedit /etc/default/grub

#更新grub
sudo update-grub

重启,万事大吉!

九、修改系统默认的Python解释器

1)查看系统中是否安装Python3.X:

命令行输入 :whereis python3

如果已经安装,会返回安装地址。

如果没有安装,则使用以下命令安装:sudo apt-get install python3

2)转换方法

不修改默认设置,在命令行输入对应版本号即可使用对应版本的python

  • 调用Python2.X:python
  • 调用Python3.X:python3

修改默认python解释器

  • python2.X修改为python3.X
#删除原有的Python连接文件
sudo rm /usr/bin/python

#建立指向Python3.X的连接
sudo ln -s /usr/bin/python3.5 /usr/bin/python

#把路径/usr/bin/加入环境变量PATH中(一般不需要这一步)
PATH=/usr/bin:$PATH

#验证,命令行输入python,就会输出新的版本。
python
  • python3.X还原为python2.X
#删除原有的Python连接文件
sudo rm /usr/bin/python

#建立指向Python2.X的连接
sudo ln -s /usr/bin/python2.7 /usr/bin/python

十、同时安装Cuda 8.0和Cuda 9.0

1)查看当前cuda版本

amax@amax:/usr/local$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

2)下载cuda8.0

下载链接

#赋予读写权限
sudo chmod 777 cuda_8.0.61_375.26_linux.run

#执行安装文件
./cuda_8.0.61_375.26_linux.run

3)下载对应的Cudnn

cudaV8.0.61 —- cudnn 6.0.21

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR      6
#define CUDNN_MINOR      0
#define CUDNN_PATCHLEVEL 21

4)修改~/.bashrc中的环境变量

export PATH=\$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/cuda/lib64 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64 

5)创建软连接

  • 9.0切换到8.0(注意终端路径)
amax@amax:/usr/local$ sudo rm -rf cuda
[sudo] password for amax: 
amax@amax:/usr/local$ sudo ln -s /usr/local/cuda-8.0/ /usr/local/cuda
amax@amax:/usr/local$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61
  • 8.0切换到9.0(注意终端路径)
amax@amax:/usr/local$ sudo rm -rf cuda
[sudo] password for amax: 
amax@amax:/usr/local$ sudo ln -s /usr/local/cuda-9.0/ /usr/local/cuda
amax@amax:/usr/local$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

6)参考链接

【1】CUDA8.0和9.0版本切换
【2】Ubuntu设置目录的读写权限

十一、设置别名alias

1)用法

alias [-p] [name[=value] ...]
  • -p :显示全部已定义的别名
  • name:新的名称
  • value:要被替代的名称

2)实例

alias pls='sudo'
pls shutdown

alias cudnn-v='cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2'
cudnn-v

3)使别名永久生效

sudo  gedit ~/.bahrc
#之后将上述实例中的命令添加到环境变量bashrc中
source ~/.bashrc #激活环境变量

4)参考链接

【1】alias

十二、清理缓存

# 切换管理员
su
# 保存到本地,防止丢数据
sync

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

十三、定时执行命令

1)Crontab基本格式

*  *  *  *  *  command
分  时  日  月  周  命令

2)命令示例

# 每分钟执行一次            
*  *  *  *  * command

# 每隔一小时执行一次        
00  *  *  *  * command

# 每小时的15和30分各执行一次 (,表示并列)
15,45 * * * * command 

# 在每天8-11时中的15,45分各执行一次(-表示范围)
15,45 8-11 * * * command 

# 每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command

# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command

# 每天早上六点半执行某脚本

3)任务示例

假设我们的训练程序在『早上六点二十左右』跑完,作为知名赖床达人的自己不想起床怎么办?这时为了最大化利用显卡,我们便可以在『晚上』走的时候 设置 服务器在『早上六点半』自动执行测试脚本。

  • 创建任务脚本
touch test.sh
nano test.sh
  
# 将所需命令写入到任务脚本中
#!/bin/zsh
cd ~/GWL/4T_Disk/Paper-2/PCL-ProMax/
nvidia-smi
source /home/amax/GWL/py35/bin/activate
python tools/test_net.py --cfg configs/baselines/vgg16_voc2007.yaml  --load_ckpt Outputs/vgg16_voc2007/Sep19-08-40-59_amax-desktop_step/ckpt/model_step24999.pth --dataset voc2007test | tee test_0921_pcl_edge_ccnet.log
  • 创建定时程序
touch test.cron
nano test.cron

30 6 * * 2 sh /home/amax/GWL/test.sh >> /home/amax/GWL/test.log 2>&1 &
  • 添加定时任务
crontab test.cron
  • 查看定时任务是否成功
crontab -l
  • 确认cron是否已启动
ps aux | grep cron
  • 躺好,继续睡大觉

4)参考

【1】Ubuntu 定时运行命令脚本crontab

十四、Ubuntu16.04挂载新硬盘

师姐之前误输入了rm -rf *o(╯□╰)o真实版从删库到跑路

重装系统后,发现4T机械硬盘无法挂载(T_T)

Error mounting /dev/sdb1 at /media/amax/9dd3868b-f498-4428-bccc-e658442f9692: Command-line `mount -t "ext4" -o "uhelper=udisks2,nodev,nosuid" "/dev/sdb1" "/media/amax/9dd3868b-f498-4428-bccc-e658442f9692"' exited with non-zero exit status 32: mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

1)问题原因

未成功挂载ext4

2)解决方案

  • 创建分区(未测试,之前这台服务器已经创建过分区了)
#硬盘设备情况
ls /dev/sd* 

#确保sdb为新硬盘,当其≤2T时,
sudo fdisk /dev/sdb

#当其>2T时,
sudo parted /dev/sdb
mklabel gpt   #用gpt格式可以将3TB弄在一个分区里
unit TB       #设置单位为TB
mkpart primary 0 4    #设置为一个主分区,大小为4TB,开始是0,结束是4
print    #显示设置的分区大小
quit     #退出parted程序

fdisk /dev/sdb

1、查看帮助:m

2、新建分区:n

3、创建逻辑分区:p

4、输入分区号以及指定分区大小: 依照提示,回车表示默认

5、检查分区情况(此时还未执行分区操作): Command(m for help):p

6、保存退出 Command(m for help):w

  • 格式化分区
sudo mkfs -t ext4 /dev/sdb1  #格式化为ext4格式
  • 设置挂载点
sudo mkdir /home/4T
  • 设置开机挂载
#查看sdb对应的UUID
ls -l /dev/disk/by-uuid/

#修改/etc/fstab,设置开机挂载
sudo vim /etc/fstab 

#在最后一行加入如下内容
UUID=d765d835-4989-4bff-8ae8-116c654d4bba   /home/4T  ext4    defaults    0   2

对fstab进行说明:

<file system>    <mount point>    <type>    <options>    <dump>    <pass>   

     1                 2            3           4          5         6
  1. 文件系统的设备名,最初,该字段只包含待挂载分区的设备名(如/dev/sda1)。现在,除设备名外,还可以包含LABEL或UUID
  2. 文件系统挂载点,文件系统包含挂载点下整个目录树结构里的所有数据,除非其中某个目录又挂载了另一个文件系统
  3. 文件系统类型,下面是多数常见文件系统类型(ext3,tmpfs,devpts,sysfs,proc,swap,vfat)
  4. mount命令选项,mount选项包括noauto(启动时不挂载该文件系统)和ro(只读方式挂载文件系统)等。在该字段里添加用户或属主选项,即可允许该用户挂载文件系统。多个选项之间必须用逗号隔开。其他选项的相关信息可参看mount命令手册页(-o选项处)
  5. 转储文件系统,该字段只在用dump备份时才有意义。数字1表示该文件系统需要转储,0表示不需要转储
  6. 文件系统检查,该字段里的数字表示文件系统是否需要用fsck检查。0表示不必检查该文件系统,数字1示意该文件系统需要先行检查(用于根文件系统)。数字2则表示完成根文件系统检查后,再检查该文件系统

3)参考链接

【1】https://blog.csdn.net/qq_29729577/article/details/52057629

【2】https://lijunaccp.iteye.com/blog/751709

【3】https://blog.csdn.net/season_hangzhou/article/details/36423223

十五、各种修改项

1)修改主机名

  • 查看主机名:hostname或者uname -a
  • 临时修改主机名:hostname 新主机名
  • 永久修改主机名:sudo nano /etc/hostname,修改后,重启即可

2)修改用户密码

3)NVIDIA显卡驱动重装

sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
sudo reboot

sudo service lightdm stop
sudo ./NVIDIA-Linux-x86_64-418.56.run
sudo reboot

4)新建用户并添加管理员权限

sudo adduser xxx  #用户名为xxx
sudo nano /etc/sudoers # 在root下添加xxx等,格式和root一样