Linux Operation


Linux 命令

链接 ln

sudo ln -sf /usr/bin/g++-8 /usr/bin/g++
ln - make links between files
SYNOPSIS
       ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
       ln [OPTION]... TARGET                  (2nd form)
       ln [OPTION]... TARGET... DIRECTORY     (3rd form)
       ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

man 命令

man -b (向前翻一屏)  space (向后翻一屏)  /keyword 查找  n: 下一个
whatis command # 查询命令执行什么功能

快捷键

Ctrl+c #在命令行下起着终止当前执行程序的作用,
Ctrl+d  #相当于exit命令,退出当前shell
win    #搜索浏览程序文件音乐文件
ctrl+L #清除屏幕
ctrl+A  #光标移到行首
super+R # terminal
ctrl+shift+prtsc  #截屏到剪切板
super+h #隐藏窗口
super+up #窗口最大化
super+down #窗口最小话

压缩包操作

tar -zxvf 4.1.2.tar.gz
unzip -d /temp test.zip  #解压到指定的目录下,需要用到-d参数

文件下载

wget -O  #下载并以不同的文件名保存
wget -b #后台下载   tail -f wget-log  查看下载速度
wget –spider url #测试下载链接是否可用等等

软件安装命令 dpkg | apt | snap |ppa 使用:

dpkg -p package-name  #显示包的具体信息
dpkg -s package-name  #报告指定包的状态信息    
dpkg -l                #显示所有已经安装的Deb包,同时显示版本号以及简短说明
dpkg -P            #删除一个包(包括配置信息)    
dpkg -A package_file  #从软件包里面读取软件的信息    
dpkg -i <.deb file name>  #安装软件    
apt update|install|upgradable|remove|purge|search# tab键自动补全,apt下载时有锁
#snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间.snap软件包一般安装在/snap目录下
snap list #罗列
snap find | install | refresh | remove package
snap changes # 查看正在进行的下载
snap abort id # 停止下载
sudo apt-get install ppa-purge
To purge a PPA, you must use the following command:
sudo ppa-purge ppa:someppa/ppa     删除ppa 及对应软件
sudo add-apt-repository ppa:someppa/ppa
sudo apt update
sudo add-apt-repository --remove ppa:someppa/ppa


网络命令 netstat ,top

# net-tools   包括ifconfig,netstat 等网络工具
top: #查看电脑个进程占用资源情况  b 高亮显示当前进程.
netstat -a :Listing all ports (both TCP and UDP) using option.
netstat -l : active listening ports connections
netstat -s : displays statistics by protocol
netstat -i : show the network interface
netstat -r : show the routing
netstat -ie : like ifconfig
netstat -ap | grep http : find the listening program
#查找程序是否运行
#pgrep command – Looks through the currently running bash processes on Linux and lists the process IDs (PID) on screen.
pgrep nginx
#pidof command – Find the process ID of a running program on Linux or Unix-like system
pidof nginx
#ps command – Get information about the currently running Linux or Unix processes, including their process identification numbers (PIDs).
ps aux | grep nginx

设置代理

set | grep -i all_proxy
# Unset socks proxy
unset all_proxy     #根据上个命令输出决定是否用大写还是小写
unset ALL_PROXY      #系统中的设置还在
# Install missing dependencies:
pip install pysocks
# Reset proxy
source ~/.bashrc

evince pdf 文件查看

软件安装

CPU 温度

sudo apt install lm-sensors hddtemp
sudo sensors-detect
sensors
#如果有虚拟温度显示
sudo apt install psensor  #设置开机自启,监控温度

VimOp

操作符 作用
control+A 移动光标至行首
control+E 移动光标至行尾
control+U 删除整行命令
control+K 删除光标后面的内容
option+ 按词组移动光标
!! 执行上一条命令
重复命令,例如$ ! -3 执行前面三条命令; $ ! pod 重复最近一次pod命令
| 将左侧的命令结果人给右侧命令
> 等待前一天命令结束
&& 多条命令同时执行
& 不管前面执行是否成功都执行后面的命令

Cmake

cmake-gui #图像化cmake
cmake --version
apt-get remove cmake
cd /usr/local/src
wget https://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3.tar.gz
tar -xvzf cmake-3.15.3.tar.gz
cd cmake-3.15.3
./bootstrap
make -j4
make install
##python 使用C++11 框架 pylind11

gcc cpp g++ 区别

gcc和g++的主要区别
# 1. 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
# 2. 对于 *.c和*.cpp文件,g++则统一当做cpp文件编译
# 3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
# 4. gcc在编译C文件时,可使用的预定义宏是比较少的
# 5. gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:
# 6. 在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个
#gcc 版本
gcc -version
sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc/usr/bin/gcc-5 50  #change privilege

SCP文件互传

scp ubuntu@140.143.210.30:/usr/local/apache-tomcat-9.0.22/webapps/temp.zip ~
#scp 命令将服务器上文件拷贝至本地

ubuntu VMWare worstation pro 15

#下载地址 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
#VMware Workstation All Key:https://www.cnblogs.com/dunitian/p/8414055.html
sudo ./VMWare-*
sudo vmware-installer -u vmware-workstation  #卸载  

网速测量speedtest

git clone https://github.com/sivel/speedtest-cli.git
cd speedtest-cli
python speedtest.py
#具体可以看下readme操作,可以通过pip 方式安装

pytorch

#方式一:  
#      通过官方网站(https://pytorch.org/)给的方法进行安装,根据自己的系统环境及相应python,CUDA版本运行相应的命令进行安装。如果电脑中只有python3,这里的pip3可以直接就用pip代替。
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
#遇问题 有关proxy
#解决方案: 在 .bashrc 中添加: export all_proxy="socks5://127.0.0.1:1080"
#cudatoolkit        pkgs/main/linux-64::cudatoolkit-10.1.243-h6bb024c_0
#  ninja              pkgs/main/linux-64::ninja-1.9.0-py37hfd86e86_0
 # pytorch            pytorch/linux-64::pytorch-1.3.1-py3.7_cuda10.1.243_cudnn7.6.3_0
 # torchvision        pytorch/linux-64::torchvision-0.4.2-py37_cu101

#方式二:   https://download.pytorch.org/whl/torch_stable.html
#    直接下载torch的whl文件,通过pip install (路径+whl文件名)
#    可以下载到本地 anaconda\install\Lib\site-packages路径下,或者在线下载安装

caffe 安装

sudo apt install caffe-cuda
sudo apt build-dep caffe-cuda       # dependencies for CUDA version
sudo vim /etc/apt/sources.list   #将deb-src 注释掉
#遇到问题 dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
#Errors were encountered while processing:
# /var/cache/apt/archives/nvidia-cuda-dev_9.1.85-3ubuntu1_amd64.deb
#sudo dpkg -i --force-overwrite /var/cache/apt/archives/nvidia-418_418.39-0ubuntu1_amd64.deb
#sudo apt --fix-broken install

服务管理

sudo systemctl start application.service   #同 systemctl start application  ,系统默认查找application.service    stop, restart,reload
sudo systemctl enable/disable application.service   #start a service at boot create a symbolic link from the system’s copy of the service file (usually in /lib/systemd/system or /etc/systemd/system) into the location on disk where systemd looks for autostart files (usually /etc/systemd/system/some_target.target.wants
systemctl status application.service  #查看服务状态
systemctl list-units  # list all of the units that systemd currently has active 
systemctl list-dependencies application.service  #查找关系依赖树

搜狗输入法

sudo apt-get remove ibus
sudo apt-get purge ibus     #purge  
sudo  apt-get remove indicator-keyboard
sudo apt install fcitx-table-wbpy fcitx-config-gtk
im-config -n fcitx
选择系统设置语言 https://pinyin.sogou.com/linux/  
sudo apt-get install -f
fcitx-config-gtk3
fcitx设置 >>附加组件>>勾选高级 >>取消经典界面
Configure>>  Addon  >>Advanced>>Classic,sogouyun
#重启 把sogoupinyin放在第二个
#只用sogou 输入法一种就行了
#搜狗云输入的锅,在fcitx配置里把搜狗云拼音这个选项去掉就可以很完美的解决这问题了  解决占cpu
#中文输入时没有汉字提示时下载一个 皮肤 ,用搜狗软件打开就行可
#https://pinyin.sogou.com/skins/detail/view/info/588600?rf=cate_31_sign&tf=p

多线程下载软件源:

sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update

JDK

sudo apt install openjdk-11-jdk

VSCODE

  • 格式化代码

    vs code格式化代码的快捷键如下:(来源于这里)
    On Windows Shift + Alt + F.
    On Mac Shift + Option + F.
    On Ubuntu Ctrl + Shift + I.
  • 常用插件

    • Beautify
    • TODO Highlight
    • Code Spell Checker
    • IntelliSense for CSS class names in HTML
  • 删除多余空行 全局替换 ^\s*(?=\r?$)\n Alt+R 正则表达式

sudo apt-get install ubuntu-make  # 像这种开发软件去官网下载安装包
#查看版本
code --version
code #运行vscode
#Ctrl+Shift+P打开命令面板
#c_cpp_properties.json  该文件用于指定一般的编译环境,包括头文件路径,编译器的路径等。通过 Ctrl + Shift + p 打开命令行,键入关键字 "C++",在下拉菜单中选择 "C/C++ Edit configuration",系统即自动在 .vscode 目录下创建 c_cpp_properties.json 文件,供用户进行编译方面的环境配置。
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}
#build.json  该文件用于指定程序的编译规则,即如何将源文件编译为可执行程序。通过 Ctrl + Shift + p 打开命令行,键入关键字 "task",并在下拉菜单中选择 Tasks: Configure Default Build Task -> Create tassk.json file from template -> Others ,系统即自动在 .vscode 目录下创建 build.json 文件,供用户设置具体的编译规则
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "g++",                   //编译时执行的程序
            "args": ["-g", "-o", "test", "test1.c"],    //传递给 command 的参数
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}
# Ctrl+Shift+p 打开命令行,选择 Tasks:Run Build Task 运行上述编译过程
#launch.json  该文件主要与程序的调试相关。用户可通过 Ctrl+Shift+p 打开命令行,键入关键字 "launch",选择 "Debug:Open launch.json" -> "C++(GDB/LLDB)",即可打开调试的配置文件 launch.json。在 VSCode 中,用户按 F5 即可进入调试模式,上述 launch.json 文件即设置在调试时的基本内容和要求。

indicator-sysmonitor

一款可以监视 CPU 占用率、 CPU 温度、内存占用率、网速等系统信息的小软件,在桌面最上方进行显示。Top 的图形化命令

# sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor  
sudo apt-get update
sudo apt-get install indicator-sysmonitor

GDebi

#若用 Ubuntu 自带的软件中心安装 deb 格式的文件不仅经常会崩溃而且会遇到各种各样的依赖问题。通过deb文件安装软件优选
sudo apt-get install gdebi

Marp

用 Markdown 语法来制作 PPT,高效快速简洁实用,尤其是支持 LaTeX 语法,非常方便编辑大量的数学公式,值得推荐,官网有 deb 文件,下载后直接安装即可。

新立得软件管理

sudo apt-get install synaptic  #  全面高效地管理各种软件和依赖。

Tim

Tim 安装 去官网 下载linux QQ 但qq上没有我的设备
https://im.qq.com/linuxqq/download.html
https://github.com/wszqkzqk/deepin-wine-ubuntu/releases #wine的一个版本
https://www.lulinux.com/archives/1319 #deepin-wine Tim安装教程
Winehq:https://wiki.winehq.org/Ubuntu_zhcn 学习如何使用 回去学习下winehq使用教程https://wiki.winehq.org/Wine_User%27s_Guide
Usage: wine PROGRAM [ARGUMENTS…] Run the specified program
wine –help Display this help and exit
wine –version Output version information and exit
运行方式1:cd ‘.wine/drive_c/Games/Tron’
wine tron.exe
运行方式2:wine start ‘C:\Games\Tron\tron.exe’
wine start “C:\Games\Tron\tron.exe”
wine start /unix “$HOME/installers/TronSetup.exe”
wine quake.exe -map e1m1 #带参数
wine start whatever.msi
wine control
wine uninstaller

mega网盘安装

https://mega.nz/sync 去官网安装 需要联网

V2Ray 安装

#然后编辑`/etc/v2ray/config.json`文件
service v2ray stop 
service v2ray start 
service v2ray status
#https://github.com/FelisCatus/SwitchyOmega/wiki/GFWList
  • #v2ray/go.sh脚本阅读记录

$# 表示执行脚本传入参数的个数
$*  表示执行脚本传入参数列表
$$ 表示进程id
$@表示执行脚本传入所有参数
$0 表示执行脚本名称
$1 表示第一个参数
$2 表示第二个参数
$? 表示脚本执行状态0正常,其他表示有错误
#提取文件到某个位置函数  
#获取系统本版/检查版本更新   getVersion()/checkUpdate()
#检查系统架构  SysArch()
#获得系统 install update 指令   'command -v apt-get' 判断系统是否有apt-get 指令
#prompt 颜色设置  colorEcho()
#下载文件   downloadv2ray()
# echo $VER | head -n 1 | cut -d " " -f2`  
#关闭或启动软件  stopV2ray() startV2ray() 通过检查systemctl/service 命令
#copy 文件  copyFile()
#添加执行权限 makeExecutable()
# help() 帮助提示框
installInitScript(){
    if [[ -n "${SYSTEMCTL_CMD}" ]];then
        if [[ ! -f "/etc/systemd/system/v2ray.service" ]]; then
            if [[ ! -f "/lib/systemd/system/v2ray.service" ]]; then
                cp "${VSRC_ROOT}/systemd/v2ray.service" "/etc/systemd/system/"
                systemctl enable v2ray.service
            fi
        fi
        return
    elif [[ -n "${SERVICE_CMD}" ]] && [[ ! -f "/etc/init.d/v2ray" ]]; then
        installSoftware "daemon" || return $?
        cp "${VSRC_ROOT}/systemv/v2ray" "/etc/init.d/v2ray"
        chmod +x "/etc/init.d/v2ray"
        update-rc.d v2ray defaults
    fi
    return
}
sed -i "s/10086/${PORT}/g" "/etc/v2ray/config.json"  #学习这个指令
downloadV2Ray || return $?
installV2Ray()  #包括下载到那个目录,copy了那些文件,如何根据配置文件进行配置的
remove() {# 卸载停止服务,把安转时写入的文件全部删除  
    /etc/systemd/system/v2ray.service   
    /usr/bin/v2ray
    /lib/systemd/system/v2ray.service
    /etc/init.d/v2ray

}

修改github DNS

#https://www.linuxidc.com/Linux/2019-05/158461.htm
#github
219.76.4.4 github-cloud.s3.amazonaws.com
192.30.253.112 github.com
151.101.185.194 github.global.ssl.fastly.net
ldd@ldd:~/v2ray$ sudo vim /etc/hosts
ldd@ldd:~/v2ray$ sudo /etc/init.d/networking restart 

WPS 去官网下载

#http://www.wps.cn/product/wpslinux  
sudo dpkg -i wps-office_10.1.0.6757_amd64.deb

IDEA下载

Teamview deb 安装

proxyee-down命令行安装 百度云下载神器

docky 桌面工具

sudo apt-get install  docky   
sudo apt-get install gnome-tweak-tool 
sudo apt-get install gnome-shell-extensions 
sudo apt-get install gnome-shell-extension-dashtodock
sudo apt-get install gnome-shell-extension-autohidetopbar
#也可以在Ubuntu软件中直接搜索hide top bar
sudo apt-get remove gnome-shell-extension-autohidetopbar #卸载
#快捷键设置
gnome-screenshot -ac  # 也具有qq截图到快捷键功能
#在打开——系统设置——>键盘——快捷键——自定义快捷键,然后输入名字和上边工具的命令

Opencv

#python 包
pip uninstall opencv-python
pip install opencv-contrib-python 
#opencv4. 源码编译安装, 也可以直接编译Android 依赖库
#https://www.pluvet.com/archives/223.html 安装教程
sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt update
sudo apt install libjasper1 libjasper-dev  
sudo apt-fast install build-essential cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
cmake ..
make -j4
sudo make install

Python 命令转换

pip 切换镜像 最终写入文件 /home/ldd/.config/pip/pip.conf

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

方式一:系统默认一个版本,在另装一个版本,通过软连接

# 以后使用anaconda
#查看当前默认Python版本
python --version 
#查看Python所在
which is python
which is python3
#Python下载的库可以查看这里。/usr/local/lib/
#显示Python代替版本信息
update-alternatives --list python
#设置 /usr/bin/python3.5 设置的优先级为2 优先级越高越大
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
#再次显示Python代替版本信息
update-alternatives --remove python /usr/bin/python2.7
#切换版本
sudo update-alternatives --config python
sudo apt-get install python3-pip # #安装Python3对应的pip3
sudo pip3 install --upgrade pip   #推荐在管理员模式下更新
sudo apt-get install python-pip  #安装Python2对应的pip
#Pip  安装的库会放在这个目录下面:python2.7/site-packages;
#pip3 新安装的库会放在这个目录下面:python3.6/site-packages;
#参考https://www.cnblogs.com/carle-09/p/9907274.html
#errorPermission denied: '/usr/local/lib/python3.6/dist-packages/cycler.py' Consider using the `--user` option or check the permissions.
pip3 install --user matplotlib  
#The 'pip==9.0.3' distribution was not found and is required by the application
sudo easy_install pip==9.0.3  #解决

方式二:安装anaconda,然后建立基于不同python版本的conda环境

方式三:建立虚拟机virtualenv,然后建立基于不同python版本的虚拟环境

MySQL 安装

sudo apt-get install mysql-server
sudo mysql_secure_installation  #设置密码 liudongdong
sudo mysql   #可以直接登录
sudo systemctl start mysql

.Net core 安装

mssql-server安装

sudo apt-fast install libodbc1 unixodbc msodbcsql mssql-tools unixodbc-dev

NVIDIA显卡驱动 cuda


 #驱动安装
 sudo ubuntu-drivers devices  查看系统支持的显卡设备并下载
#**系统设置** > **细节**窗口,你会发现Ubuntu正在使用Nvidia显卡。
lspci -k | grep -A 2 -i "VGA"
software-properties-gtk
nvidia-settings       #打开nvidia 设置软件页面
ubuntu-drivers devices    #推荐显卡和驱动
sudo ubuntu-drivers autoinstall  #显示推荐的驱动
sudo apt-get update
apt search nvidia-driver-418

lshw -C video   #查看设备       
lspci | grep -i nvidia  #verify you have a cuda-Capble GPU
#查看当前NVIDIA驱动版本
sudo dpkg --list | grep nvidia-*
#查看本机GPU
uname -r #current running kernel
sudo apt-get install linux-headers-$(uname -r) # the kernel headers and development packages

gcc --version      #是否安装gcc

#disable Nouveau  如果不适用nvida 驱动时需要改回
lsmod | grep nouveau   #如果有输出则需要关闭
#创建文件  vim /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
#then regenerate the kernel
sudo update-initramfs -u

#cuda 有俩中安装方式
    # 1: distribution-specific packages(RPM,Deb packages) recommended
    # 2: distribute-independent package(runfile package)  working across a wider set of linux distribution ,but doesn't update the native package management system

#download the nvidia toolkit
# http://develop.nvidia.com/cuda-downloads  包含 cuda 驱动和一些工具包括库,应用程序,示例程序等

#校验下载是否正确
md5sum filename
#具体安装下载时有说明
#下载其他版本冲突情况看下表:

#卸载分俩种情况
# 1: 卸载通过 runfile  下载
sudo /usr/local/cuda-x.y/bin/uninstall_cuda_x.y.pl
#     卸载通过 runfile 下载的驱动
sudo /usr/bin/nvidia-uninstall
# 2: 卸载通过deb/RPM 包下载的软件
sudo apt-get --purge remove <package_name> # Ubuntu

#或者To remove CUDA Toolkit:
$ sudo apt-get --purge remove "*cublas*" "cuda*"
#To remove NVIDIA Drivers:
$ sudo apt-get --purge remove "*nvidia*"


#download the cuda toolkit packages https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal
#安装cuda10.1
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-<version>/7fa2af80.pub #本地文件,里面是一些NVidia deb安装包
sudo apt-get update
sudo apt-get install cuda
nvidia-smi    #查看NVIDIA 相关信息 ,这里是选择NVIDIA驱动才会显示

#安装cuda toolkit  这和cuda 驱动没有关系
#cudnn 在/usr/local/目录下  ; cuda_toolkit 在/usr/local/cuda-版本号
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda       #下载更新cuda 和driven
#这个步操作后,会把之前的的驱动改为418 ,这里显示驱动不匹配,把驱动删除,然后重新下载驱动,问题解决, 但是后期会不会存在问题不清楚  ,cuda10.1 对内核的要求不清楚,使用5.0.0-35 内核的,但好像不推荐
#驱动匹配问题解决方法2:
ls mod | grep nvidia
sudo rmmod nvidia_uvm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
sudo apt install cuda-drivers

#Reboot the system to load the NVIDIA drivers.
#Set up the development environment by modifying the PATH and LD_LIBRARY_PATH variables:
#cuda 环境变量
$ export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#Install a writable copy of the samples then build and run the nbody sample: 每一个toolkit 都有一个sample可以测试是够安装好
$ cuda-install-samples-10.2.sh ~
$ cd ~/NVIDIA_CUDA-10.2_Samples/5_Simulations/nbody
$ make
$ ./nbody
#运行效果如下图所示

image-20191212213557977

#ubuntu cudnn 安装教程 https://developer.nvidia.com/rdp/cudnn-download  cudnn其实是一些加速CUDA性能的库,首先按照解压放到CUDA的相应路径中
然后把其中的lib64关联到环境变量当中
#将三个deb文件都下载下同时安装,否则会报错
sudo dpkg -i libcudnn7*.deb

image-20191206194750114

image-20191212224333748

网上一个脚本

# WARNING: These steps seem to not work anymore!

#!/bin/bash

# Purge existign CUDA first
sudo apt --purge remove "cublas*" "cuda*"
sudo apt --purge remove "nvidia*"

# Install CUDA Toolkit 10
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub && sudo apt update
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb

sudo apt update
sudo apt install -y cuda

# Install CuDNN 7 and NCCL 2
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo dpkg -i nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb

sudo apt update
sudo apt install -y libcudnn7 libcudnn7-dev libnccl2 libc-ares-dev

sudo apt autoremove
sudo apt upgrade

# Link libraries to standard locations
sudo mkdir -p /usr/local/cuda-10.0/nccl/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libnccl.so.2 /usr/local/cuda/nccl/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7 /usr/local/cuda-10.0/lib64/

echo 'If everything worked fine, reboot now.'
  • window上查看cuda版本
nvcc --version   #使用命令
#进入相应的目录  C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA
#通过Nviadia 软件查看,这里俩个版本不一致,不清楚有没有问题?

image-20200203095344007

  • 相关故障记录

内核相关的

  1. ctrl+alt+F1–F6 切换到相应的终端

  2. file ‘which update-initramfs’ 学会这个命令

    • 编译内核的最后一步执行make install时会调用update-initramfs,update-initramfs继而调用mkinitramfs生成initrd.img. 一个往临时initrd目录copy文件的繁琐过程,mkinitramfs则用脚本替代了手工操作
    • 1).在临时initrd目录下构建FHS规定的文件系统;2).按/etc/initramfs-tools/module和/etc/modules文件的配置,往lib/modules/目录拷贝模块,同时生成模块依赖文件modules.dep,以后内核启动后会从initramfs中(initrd.img被解压到内存中)按模块依赖关系modprobe模块;3).拷贝/etc/initramfs-tools/scripts和/usr/share/initramfs-tools/scripts下的配置文件到conf/目录下,以后内核启动,创建第一个进程init(initrd.img根目录下init.sh文件)会从conf/*读取配置,按一定的顺序加载模块/执行程序;4).模块的加载离不开modprobe工具集,因此需要拷贝modprobe工具集及其他工具到initrd目录结构下,同时解决这些工具的依赖关系(依赖的so文件的路径);5).所有步骤完成,调用cpio和gzip工具打包压缩临时initrd目录结构。
  3. nouveau(英语:/nuːˈv/) 是一个自由开放源代码CPU驱动程序,是为AMD的CPU所编写,也可用于属于系统芯片高通系列.

    Nouveau的内核模块应该在系统启动时就已自动加载,如果没有的话:

    • 确保你的内核参数中没有nomodeset 或者 vga=, 因为Nouveau需要内核模式设置。
    • 另外,确保你没有在 modprobe 配置文件 /etc/modprobe.d//usr/lib/modprobe.d/ 中屏蔽 Nouveau。
    • 检查 dmesg 中有没有 opcode 错误,如果有的话,将 nouveau.config=NvBios=PRAMIN 加入 内核参数禁止模块卸载
    • Nouveau 驱动依赖Kernel mode setting (KMS)。当系统启动时,KMS 模块会在其它模块之后启用,所以显示的分辨率发生改变。
  4. dmesg 命令:用来显示开机信息, kernel会将开机信息存储在ring buffer中。开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log/dmesg

    1) dmesg 是一个显示内核缓冲区系统控制信息的工具;比如系统在启动时的信息会写到/var/log/

    2) dmesg 命令显示Linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、CPU、挂载的硬件,RAM等多个运行级别的大量的系统信息。当计算机启动时,系统内核(操作系统的核心部分)将会被加载到内存中。在加载的过程中会显示很多的信息,在这些信息中我们可以看到内核检测硬件设备

    3) dmesg 命令设备故障的诊断是非常重要的。在dmesg命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息

    image-20191213212239267

  5. watch : execute a program periodically, showing output fullscreen watch “dmesg | tail -20”

  6. rmmod: 可删除不需要的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,不需要把全部的功能都放入核心。

  7. lsmod: 显示内核中的模块作用同 cat /proc/devices

  8. modinfo 能查看模块的信息,通过查看模块信息来判定这个模块的用途;

  9. insmod: 向linux 内核中加载摸块

  10. modprobe :向Linux内核中加载摸块,能够处理 module 载入的相依问题. modprobe会检查/lib/modules/uname -r下的所有模块,除了/etc/modprobe.conf配置文件和/etc/modprobe.d目录以外。所有/etc/modprobe.d/arch/目录下的文件将被忽略。

  11. unable to correct problems,you have held broken package

    sudo apt install -f
    sudo aptitude install   #get the detail information
    sudo apt update  | sudo apt upgrade
    sudo dpkg --configure -a
    sudo dpkg --get-selection | grep hold #get actual held packages
    dpkg --get-selections | grep linux-image  #产看内核文件有哪些
  1. Grub2介绍

    • /boot/grub/grub.cfg 文件
      • 官方文件只说/boot/grub/grub.cfg不要手工修改,这个文件是运行 update-grub自动生成的。要修改配置文件的只要打开/boot/grub/grub.cfg文件,找到想修改的地方,然后根据注释找到相应的 /etc/default/grub或/etc/grub.d/ (folder)进行修改。
      • grub.cfg文件中主要包含两个部分,一部分是 各个启动项的定义,第二部分是启动界面的设置。你可以直接用gedit打开该文件看其中的内容。
    • /etc/grub.d/ 文件夹
      • 定义各个启动项,其中的文件代表了一个或多个启动项,命名规范都是”两个数字名称”,前面的两位数字确定这个或这多个启动项在启动界面的位置, 默认的 “00“是预留给”00_header”的,”10_是预留给当前系统内核的,20_是预留给第三方程序的,除了这些你都可以使用,增加自己的,比如 05_ , 15_,数字越小越前面。
      • 执行前面说的”update-grub”或者update- grub2”命令之后,这个文件夹中的文件就是用于生成 grub.cfg 中启动项的定义的
    • /etc/default/grub 文件
      • 启动界面的配置,比如默认的启动项,等待用户选择启动项的时间等。当执行前面说的”update-grub”或者update-grub2”命令之后,这个文件的内容就 用于生成 grub.cfg 中启动界面的设置。
  2. 内核降级

#查看可用的内核
apt-cache search linux-image
#备份软件源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#添加一个源
sudo vim /etc/apt/sources.list
deb http://security.ubuntu.com/ubuntu trusty-security main
sudo apt update
#查看所有内核
dpkg --get-selections| grep linux
#安装指定版本内核
sudo apt install 内核名称
dpkg -l | grep 内核名称  #查看是否安装成功
#编辑grub 文件
GRUB_DEFAULT=0
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 内核名称<5.0.0-36-generic>"
Ubuntu,with Linux 5.3.0-25-generic
#更新grub 引导
sudo update-grub
sudo reboot
uname -r #查看当前版本是否安装正确
#卸载内核
sudo apt remove --purge 内核名称
sudo dpkg --purge linux-image-4.19.0-041900-generic linux-image-unsigned-4.19.0-041900-generic
sudo dpkg -P 内核名称  #通过deb包暗装的
#关闭启动内核自动更新
sudo apt-mark hold linux-image-generic linux-headers-generic
sudo apt-mark unhold linux-image-generic linux-headers-generic

使用指定版本内核 /boot 文件是内核相关的信息

  • grep menuentry /boot/grub/grub.cfg

例如文件如下:

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5bce3795-da96-4c6f-bed2-67d37185a77d' {
submenu 'Ubuntu 高级选项' $menuentry_id_option 'gnulinux-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu,Linux 4.8.0-26-lowlatency' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.8.0-26-lowlatency (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.8.0-26-lowlatency (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu,Linux 4.8.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.8.0-26-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.8.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu,Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.4.0-21-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' {
    menuentry 'Ubuntu, with Linux 4.4.0-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {

menuentry 代表一个内核, 从0开始记数字: 例如如果使用以4.4.0-21内核版本启动,则将文件/etc/default/grub中

GRUB_DEFAULT=0 

改为

GRUB_DEFAULT=6

或者改为

GRUB_DEFAULT=”Ubuntu,Linux 4.4.0-21-generic“
  • sudo update-grub 然后重启执行uname -r 查看系统内核
  1. Nouveau unknown chipset at install 显卡驱动问题
sudo apt update
sudo apt upgrade
sudo ubuntu-drivers devices
sudo apt install nvidia-xxx
#如果没有NVIDIA驱动的话,  

文件

  • /boot 文件: 系统内核文件 ,启动管理程序grub 的目录

    • Initrd 文件,系统启动摸块的只要来源,系统启动所需加载的虚拟磁盘
    • System.map 系统内核中的变量对应表
    • vmlinuz 是启动过程系统实际所用的内核
    • grub目录是启动管理程序的
      • grub.conf 文件 从哪个内核进入,启动时间等
    • kernel kernel主要负责的是北桥、南桥、CPU及内存,可见它们都是整个主机最重要的硬件核心部分,kernel如果处了问题,系统肯定无法启动起来。
    • kernel、initrd和system module是依次加载的。initrd包含一部分内核模块,主要是一些关键的外部硬件,如SATA、SCSI和USB等外设。它如果失败当然也会影响系统启动。而system module这些系统中的模块,是与支持和启动无很大关系的硬件有关,如果没有这些硬件设备的支持,系统也可以启动完成,只是存在功能上的缺失,如声卡、网卡、显卡等。这些系统模块也可以在启动后,以modprobe
  • /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件

  • /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序

  • /bin 二进制可执行命令
    /dev 设备特殊文件
    /etc 系统管理和配置文件
    /etc/rc.d 启动的配置文件和脚本

  • /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里

  • /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
    /usr/x11r6 存放x window的目录
    /usr/bin 众多的应用程序
    /usr/sbin 超级用户的一些管理程序
    /usr/include linux下开发和编译应用程序所需要的头文件
    /usr/lib 常用的动态链接库和软件包的配置文件
    /usr/doc linux文档 /usr/man 帮助文档 /usr/info
    /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
    /usr/local/bin 本地增加的命令
    /usr/local/lib 本地增加的库

    image-20191213221715677

    /var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化
    或扩充的。原来/ v a r目录中有些内容是在/ u s r中的,但为了保持/ u s r目录的相对稳定,就把那
    些需要经常改变的目录放到/ v a r中了。每个系统是特定的,即不通过网络与其他计算机共享。

    • /var/log:各种程序的日志( l o g )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注
      销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不
      确定地增长,应该定期清除。

    /proc文件系统
    /proc 文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一
    个非常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提
    供关于系统的信息。下面说明一些最重要的文件和目录(/proc 文件系统在proc man页中有更详
    细的说明)。
    \1. /proc/x
    关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自
    己进程号的目录。
    \2. /proc/cpuinfo
    存放处理器( c p u )的信息,如c p u的类型、制造商、型号和性能等。
    \3. /proc/devices
    当前运行的核心配置的设备驱动的列表。
    \4. /proc/dma
    显示当前使用的d m a通道。
    \5. /proc/filesystems
    核心配置的文件系统信息。
    \6. /proc/interrupts
    显示被占用的中断信息和占用者的信息,以及被占用的数量。
    \7. /proc/ioports
    当前使用的i / o端口。
    \8. /proc/kcore
    系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅
    仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc 下没有任何
    东西占用任何磁盘空间。)
    \9. /proc/kmsg
    核心输出的消息。也会被送到s y s l o g。
    \10. /proc/ksyms
    核心符号表。
    \11. /proc/loadavg
    系统“平均负载”; 3个没有意义的指示器指出系统当前的工作量。
    \12. /proc/meminfo
    各种存储器使用信息,包括物理内存和交换分区( s w a p )。
    \13. /proc/modules
    存放当前加载了哪些核心模块信息。
    \14. /proc/net
    网络协议状态信息。
    \15. /proc/self
    存放到查看/proc 的程序的进程目录的符号连接。当2个进程查看/proc 时,这将会是不同
    的连接。这主要便于程序得到它自己的进程目录。
    \16. /proc/stat
    系统的不同状态,例如,系统启动后页面发生错误的次数。
    \17. /proc/uptime
    系统启动的时间长度。
    \18. /proc/version
    核心版本。

  1. ACPI在BIOS和其他系统硬件中被实现,它就可以由操作系统所调用(触发)。

    ACPI可以实现的功能包括:

    系统电源管理(System power management)

    设备电源管理(Device power management)

    处理器电源管理(Processor power management)

    设备和处理器性能管理(Device and processor performance management)

    配置/即插即用(Configuration/Plug and Play)

    系统事件(System Event)

    电池管理(Battery management)

    温度管理(Thermal management)

    嵌入式控制器(Embedded Controller)

    SMBus控制器(SMBus Controller


Author: liudongdong1
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source liudongdong1 !
  TOC