Linux常见问题

主要用来记录一些 ubuntu(linux) 使用过程中碰到的问题

1. 如何挂载磁盘

(1) 找到未分配的磁盘, 这里是 /dev/sdb

$ sudo fdisk -l  # 找到未分配的磁盘
Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x76738fb3

(2)对该磁盘使用fdisk 命令建立分区:

sudo fdisk /dev/sdb
# m -> n -> 一路回车 -> w(保存退出)
$ sudo fdisk -l # 此时可以发现设备
Device     Boot Start        End    Sectors  Size Id Type
/dev/sdb1        2048 3907029167 3907027120  1.8T 83 Linux

(3)格式化分区, 并建立文件系统

$ sudo mkfs -t ext4 /dev/sdb1  # -t 指定文件系统格式

(4)挂载磁盘到指定位置

$ mount /dev/sdb1 /home/data/
# 区分 sdb和sdb1, sdb表示磁盘, sdb1则表示该磁盘上的分区

2. 如何查询端口所运行的程序

$ sudo netstat -antp | grep 7000
tcp6       0      0 :::7000                 :::*                    LISTEN      12464/frps      
$ ps 12464
  PID TTY      STAT   TIME COMMAND
12464 pts/0    Sl     0:00 ./frps

$ lsof -i:7000   # lsof:list open files -> -i 
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
frps    12464 ubuntu    3u  IPv6 7542760      0t0  TCP *:afs3-fileserver (LISTEN)
$ ps -fe | grep 12464
ubuntu   12464  6446  0 00:29 pts/0    00:00:00 ./frps
ubuntu   12707  6446  0 00:32 pts/0    00:00:00 grep --color=auto 12464

3. gdm3、lightdm 和 kdm 的认识

Q: 当我的 win10/mac 电脑想要控制 ubuntu 电脑时,一切操作无误的情况下,在点击 “远程协助” 按钮时,进去后过一会儿就会出现“连接已断开”的提示。
S: 在打开向日葵客户端的情况下,打开命令 ubuntu 行窗口

sudo apt-get update
sudo apt-get upgrade
sudo install lightdm

重启Ubuntu系统即可远程成功

R: 了解一下gdm3、lightdm、kdm

维基百科:显示管理器向用户显示登录屏幕。 当用户成功输入用户名和密码的有效组合时,会话开始。

  • gdm3 是 gdm的继承者,它是GNOME显示管理器。 更新的gdm3 使用了最小的gnome-shell 版本,并提供了与GNOME3会话相同的外观和感觉。
  • lightDM,即:Light Display Manager,是一个全新的、轻量的Linux桌面的桌面显示管理器
  • kdm 是 kde 管理器的显示。 但在 KDE5中,它被否决为 SDDM,它更适合作为显示管理器,因此在默认情况下,它是在屏幕。

简单理解,这三个只是不同版本的显示管理器而已,当你的 ubuntu 系统安装了多个显示管理器时,(以 lightdm 切换到 gdm3 为例)可以用 sudo dpkg-reconfigure gdm3 来进行切换。

4. xrandr 使用

装了一个侧屏, 需要使用 xrandr 来进行相关设置:

  • xrandr : 列出可用的显示设备

    zhaozhichao@zhaozhichao-MS-7B24:~/Desktop/sany/classification$ xrandr
    Screen 0: minimum 8 x 8, current 3000 x 1920, maximum 32767 x 32767
    DP-0 connected primary 1920x1080+1080+520 (normal left inverted right x axis y axis) 598mm x 336mm
       1920x1080     60.00*+
       1600x900      60.00  
       1280x1024     75.02    60.02  
       1152x864      75.00  
       1024x768      75.03    60.00  
       800x600       75.00    60.32  
       640x480       75.00    59.94  
    DP-1 disconnected (normal left inverted right x axis y axis)
    HDMI-0 disconnected (normal left inverted right x axis y axis)
    DP-2 disconnected (normal left inverted right x axis y axis)
    DP-3 disconnected (normal left inverted right x axis y axis)
    DP-4 connected 1080x1920+0+0 left (normal left inverted right x axis y axis) 598mm x 336mm
       1920x1080     60.00*+
       1600x900      60.00  
       1280x1024     75.02    60.02  
       1152x864      75.00  
       1024x768      75.03    60.00  
       800x600       75.00    60.32  
       640x480       75.00    59.94  
    DP-5 disconnected (normal left inverted right x axis y axis)
    USB-C-0 disconnected (normal left inverted right x axis y axis)
  • 设置分辨率

    xrandr --output eDP1 --mode 1280x1024_60.00
  • 双屏设置

    xrandr --output DP-4 --left-of  DP-0 --auto // DP-4 作为 DP-0 的左屏幕显示  
                                                //  --left-of    
                                                // --right-of
  • 屏幕克隆

    xrandr --output VGA-0 --same-as DVI-D-0 --auto
  • 设置 左旋转/右旋转/正向

    xrandr --output DP-0 --rotate normal // left、right、normal
  • 设置主屏幕

    xrandr --output HDMI2 --auto --primary

5. U盘/硬盘 mount 故障

$ sudo mount /dev/sdb1 /mnt
$MFTMirr does not match $MFT (record 0).
Failed to mount '/dev/sdb1': Input/output error
NTFS is either inconsistent, or there is a hardware fault, or it's a
SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
then reboot into Windows twice. The usage of the /f parameter is very
important! If the device is a SoftRAID/FakeRAID then first activate
it and mount a different device under the /dev/mapper/ directory, (e.g.
/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation
for more details.

S: 利用 ntfsprogs utility 包里的工具 ntfsfix 修理一下,感觉应该是把类似链接号什么的修理好:

$ sudo ntfsfix /dev/sdb1
Mounting volume... FAILED
Attempting to correct errors...
Processing $MFT and $MFTMirr...
Reading $MFT... OK
Reading $MFTMirr... OK
Comparing $MFTMirr to $MFT... FAILED
Correcting differences in $MFTMirr record 0...OK
Processing of $MFT and $MFTMirr completed successfully.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
NTFS volume version is 3.1.
NTFS partition /dev/sdb1 was processed successfully.

6. 区分 profile 和 bashrc

生效时间 针对用户
/etc/profile 重启生效 所有用户
/etc/bashrc 重新打开一个 bash 生效 所有用户
~/.bash_profile或 ~/.profile 重启生效 当前用户
~/.bashrc 重新打开一个 bash 生效 当前用户

7. /etc/ld.so.conf 与ldconfig

ldconfig命令 的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件
/lib/usr/lib 里面加东西,是不用修改 /etc/ld.so.conf 的,但是完了之后要调一下 ldconfig,不然这个 library 会找不到。
想往上面两个目录以外加东西的时候,一定要修改 /etc/ld.so.conf,然后再调用 ldconfig,不然也会找不到。比较常规的操作是,自己生成了一个动态链接库,然后将路径添加到 /etc/ld.so.conf, 然后执行 ldconfig。 这样就可以在系统中调用该动态链接库了。

8. NVIDIA 相关软件的知识

GPU: 硬件, 主流的是 Nvidia 的 GPU(现在流行的是 RTX 2080Ti), 深度学习本身需要大量计算。 GPU 的并行计算能力, 在过去几年里恰当了满足了深度学习的需求。 AMD 的 GPU 基本没有什么支持, 可以不用考虑。
NVIDIA Driver: 硬件接口, 没有显卡驱动, 就不能识别 GPU 硬件, 不能调用其计算资源。
CUDA: 是 NVIDIA 推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的,几乎无一例外。
cudnn: 针对深度卷积神经网络的加速库。
Tensorflow、pytorch、mxnet、paddle: 在 CUDA 和 cudnn 之上的深度学习框架。

9. 显卡安装的知识

(1) 硬件:插上 GPU
(2) 驱动: [去官网下载对应的驱动程序]

a. 首先屏蔽 nouveau

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

在其中加入

blacklist nouveau

b. 按照 ctrl + alt + F1 进入 tty1, 然后使用如下命令关掉 X server

sudo /etc/init.d/lightdm stop

c. 安装对应的驱动程序
d. 重启 X server

sudo /etc/init.d/light restart

(3) CUDA & cudnn

# Download CUDA   https://developer.nvidia.com/cuda-downloads
$ chmod a+x cuda-repo-ubuntu1804-10-1-local-10.1.168-418.67_1.0-1_amd64.deb 
$ sudo dpkg -i ./cuda-repo-ubuntu1804-10-1-local-10.1.168-418.67_1.0-1_amd64.deb 
$ sudo apt-key add /var/cuda-repo-10-1-local-10.1.168-418.67/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-10-1 -y

# Download cudnn from https://developer.nvidia.com/cudnn
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

别忘记 执行以下 sudo ldconfig

10. ubuntu 循环登录问题

这个问题是一个很常见的问题, 我这次碰到的情况是新增加的账户不能正常登陆, 这里是由于useradd的时候没有关联到对应的/home下的文件夹所致, 处理如下:

(1)使用: userdel -r 用户名 删除用户

(2)使用 useradd -m 用户名 添加用户 -> 会在/home目录下创建同名文件夹

(3)添加用户到sudoer

  • sudo visudo
  • %sudo行下面user ALL=(ALL) ALL

11. linux productivity tools

朋友分享了一份 linux productivity tools, 用空去学习学习

参考网址为:https://news.ycombinator.com/item?id=23229241

12. linux 开机自启动

方式一. 使用自带开机脚本

使用 /etc/rc.local 文件,在 ubuntu18.04 中可以自己新建这个文件。

vim /etc/rc.local

文件的具体内容如下所示,将开机自启动命令加在 exit 0 之前。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

修改执行权限即可

chmod +x /etc/rc.local

方式二. 添加开机脚本

(1) 在 /etc/init.d/ 下新建一个文件 auto_start.sh, 内容如下所示,讲待执行命令填写在 exit 0 之前。 

#!/bin/bash  
# command content      

exit 0

(2) 更改脚本权限:

sudo chmod +x auto_start.sh

(3) 将脚本添加到启动脚本, 执行如下指令即可,在这里90表明一个优先级,越高表示执行的越晚。

cd /etc/init.d/  
sudo update-rc.d auto_start.sh defaults 90

Note: 可以使用如下命令移除开机脚本:

sudo update-rc.d -f new_service.sh remove

13. NVIDIA 常见命令

nvidia-smi

在进行深度学习实验时,GPU 的实时状态监测十分有必要。今天详细解读一下 nvidia-smi 命令。

Fri Aug  2 10:10:08 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48                 Driver Version: 410.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
| 31%   43C    P8    12W / 250W |    223MiB / 10981MiB |      4%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1614      G   /usr/lib/xorg/Xorg                            14MiB |
|    0      4804      G   /usr/lib/xorg/Xorg                           207MiB |
+-----------------------------------------------------------------------------+

上图是服务器上 GeForce GTX 1080 Ti 的信息,下面一一解读参数。 上面的表格中的信息与下面的四个框的信息是一一对应的:

GPU:GPU 编号; Name:GPU 型号; Persistence-M:持续模式的状态。
Fan:风扇转速(0~100%) Temp:温度(摄氏度) Perf:性能状态,从P0(小)到P12(大) Pwr:Usage/Cap:能耗

Bus-Id:GPU总线    Disp.A:Display Active,表示GPU的显示是否初始化;
Memory Usage:显存使用率;

Volatile GPU-Util:浮动的GPU利用率   Uncorr. ECC:Error Correcting Code,错误检查与纠正
Compute M:compute mode,计算模式。

下方的 Processes 表示每个进程对 GPU 的显存使用率

nvidia-smi -L

第二个命令:nvidia-smi -L, 该命令用于列出所有可用的 NVIDIA 设备信息。

watch -n1 nvidia-smi

每1秒检查一次GPU的使用情况

查看CUDA 和 cudnn 版本信息

查看 CUDA 版本:

$ cat /usr/local/cuda/version.txt
CUDA Version 10.0.130

也可以使用如下命令:

nvcc --version

查看 CUDNN 版本:

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
rep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!