目前碰到的一些技术问题与知识

ubuntu安装驱动时候出现的问题

1
2
3
echo -e “blacklist nouveau\noptions nouveau modeset=0” > /etc/modprobe.d/disable-nouveau.conf
update-initramfs -u

修改启动参数:在GRUB菜单中选择Ubuntu启动选项,按下”e”键以编辑启动参数。尝试在命令行中添加”nomodeset”参数,然后按下F10键启动。

ubuntu安装cuda驱动时候出现报错

  • 安装显卡驱动需要关闭图形界面,在命令行完成安装(提前下好安装包)
    关闭图形界面
1
sudo systemctl isolate multi-user.target

开机可能出现黑屏,按ctrl + shift + F2即可进入命令行窗口,登录即可,随后安装驱动,安装完成之后,执行下边命令开机默认进入图形用户界面。

1
systemctl isolate graphical.target

给Ubuntu安装驱动(nvidia)保姆级教程(方法一)_X.等雨停的博客-CSDN博客

ubuntu拨号上网以及各种方式上网设置

命令行输入即可进入图形管理界面

1
nm-connection-editor

ubuntu22.04 向日葵远程无法连接成功

需要切换桌面模式

ubuntu机械盘挂载

1
2
3
4
5
6
7
8
9
10
#创建挂载路径
sudo mkdir /data
#格式化硬盘
sudo mkfs -t ext4 /dev/sda
#挂载硬盘
sudo mount -t ext4 /dev/sda /data
#开机自动挂载
sudo vim /etc/fstab
#在最后一行加入
/dev/sda /data ext4 defaults 0 0

使用yaml创建虚拟环境

1
conda env create -f environment.yml

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name: transformer
channels:
- pytorch
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1=main
- _openmp_mutex=4.5=1_gnu
- astor=0.8.1=py39h06a4308_0
- autograd=1.3=pyhd3eb1b0_1
- pip:
- argparse==1.4.0
- einops==0.3.2
- nystrom-attention==0.0.11
prefix: /home/ps/anaconda3/envs/transformer

最后的prefix指定环境位置

使用.gitkeep文件保存空文件夹

创建一个新的普通用户

1
2
3
4
sudo useradd -m ai -s /bin/bash
sudo passwd ai
# sudo adduser ai sudo
su ai
  • 创建了可以登录的ai用户并使用/bin/bash作为shell。
  • 设置密码。
  • 为ai用户增加管理员权限。
  • 切换登录用户为ai。

为普通用户添加sudo权限

1
2
3
4
5
# 为用户username添加sudo权限
sudo usermod -a -G sudo username

# 去除用户username的sudo权限
sudo usermod -G usergroup username

给用户授权

1
2
3
groups ai
usermod -aG sudo meow
visudo

删除用户

1
sudo deluser --remove-home ai

删除用户目录

查看所有用户

1
grep bash /etc/passwd

linux新建用户也使用原来conda环境

a用户下安装anaconda,默认地址不变,b用户直接不可用,在b用户登录的终端编辑b用户的.bashrc文件,在文档最后一行加入

1
export PATH=$PATH:/home/<Username>/anaconda3/bin

保存退出,并source .bashrc,然后conda init就可以了

高级配置参考Anaconda 多用户共享安装(Ubuntu) - 知乎 (zhihu.com)

给用户授予docker使用权限

1
2
sudo gpasswd -a $USER docker 
newgrp docker

$USER可以更换为其他,不换就是默认的。第二步有可能需要输密码,然后输入会发现错误,其实是没有设置密码,需要先设置密码,然后这样更新组

1
sudo chmod a+rw /var/run/docker.sock
1
sudo usermod -aG docker $USER

neofetch

方便的查看系统的工具

卸载图形界面

1
2
3
4
5
6
7
sudo apt-get remove gnome-shell
sudo apt-get remove gnome
sudo apt-get autoremove
sudo apt-get purge gnome
sudo apt-get autoclean
sudo apt-get clean
reboot

ssh免密登录

1
ssh-keygen -t rsa
1
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@服务器IP
1
lscpu

cudnn source problem

1
2
3
4
W: GPG error: file:/var/cudnn-local-repo-ubuntu2004-8.6.0.163  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 323547C4B0FE0A41
E: The repository 'file:/var/cudnn-local-repo-ubuntu2004-8.6.0.163 InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

then input sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 323547C4B0FE0A41 to solve the problem.

But it doesn’t work. You can follow the steps below to solve the problem.

1
sudo cp /var/cudnn-local-repo-ubuntu2004-8.4.1.50/*.gpg /usr/share/keyrings/

复制到/usr/share/keyrings即可。

两个盘软raid命令

1
2
3
4
5
6
7
8
sudo apt-get install mdadm
#格式化两块硬盘
#sudo mkfs.ext4 -F /dev/sdb
#sudo mkfs.ext4 -F /dev/sdc
#mdadm管理 raid0
sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sd{b,c}
#格式化并挂载
sudo mkfs.ext4 -F /dev/md0 sudo mkdir -p /home/md0 sudo mount /dev/md0 /home/md0

每隔时间杀程序

kill_python.py

1
2
3
4
while [ true ];do
sleep 5
ps -ef |grep -w python |grep -v grep | awk '{print $2}' | xargs kill -9
done

然后再讲其添加到crontab中,执行crontab -e,添加如下:

1
*/30 * * * * /usr/bin/sh /aa/bb/cleanFfmpegProcess.sh

:wq即可。

关闭服务器自动休眠

1
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

查看系统休眠状态

1
systemctl status sleep.target

设置github的ssh连上github

生成ssh key

读取公钥

1
cat ~/.ssh/id_rsa.pub

复制粘贴到github。github配置ssh key的地方在
https://github.com/settings/keys

测试ssh key是否配置成功,在linux开发机上输入
$ ssh -T git@github.com

如果出现Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github

3、配置git的用户名和邮箱

1
2
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"

以后可以通过git config –global -l来查看全局设置,git config –global -e来编辑

更新包导致cuda和驱动版本不对应,NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

终端nvidia-smi出现这样,是内核版本更新的问题,导致新版本内核和原来显卡驱动不匹配

查看已安装内核

1
dpkg --get-selections |grep linux-image

查看正在使用的内核

1
uname -a

利用命令 ll /usr/src/ 可查看下面有一个nvidia-470.82.00文件夹,版本号因电脑而异。

只需执行两条命令就好:

1
2
sudo apt-get install dkms
sudo dkms install -m nvidia -v 470.82.00

(470.82.00表示的是驱动版本号)

禁止内核自动更新

1)命令行关闭系统自动更新,使用命令打开文件并编辑

1
sudo gedit /etc/apt/apt.conf.d/10periodic

将双引号中的“1”全部置“0”即可,修改后保存。

ubuntu默认启动了自动更新内核,为了避免出现重启系统后遇到错误进入不到系统中去,我们可以进一步关闭内核更新,使用当前内核。

1
2
3
$ sudo apt-mark hold linux-image-generic linux-headers-generic 
linux-image-generic set on hold.
linux-headers-generic set on hold.

如果要重启启动内核更新:

1
sudo apt-mark unhold linux-image-generic linux-headers-generic

文件格式问题

qsub:script is written in DOS/Windows text format

dos格式文件传输到unix系统时,会在每行的结尾多一个^M(/r),当然也有可能看不到。但是在vim的时候,会在下面显示此文件的格式,比如 “dos.txt” [dos] 120L, 2532C 字样,表示是一个[dos]格式文件,如果是MAC系统的,会显示[MAC]。因为文件格式的原因有时会导致我们的unix程序,或者shell程序出现错误,那么需要把这些dos文件格式转换成unix格式,方法是

1
2
3
vim dos.txt
:set fileformat=unix
:w

centos7安装驱动

https://www.cnblogs.com/2012blog/p/9431432.html

1
2
3
4
5
6
7
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

彻底卸载wsl

在powerShell上
先看还有哪些子系统

1
wsl --list --all

注销子系统

1
wsl --unregister Ubuntu

只读文件系统

在linux硬盘挂载时候,部分情况磁盘变成ro只读而不是rw
一般df查看挂载设备

1
umount -i 挂载路径

rm -rf 目录/文件

在部分情况下,先使用windows系统,后使用linux,可能有系统挂载问题,即使chmod 777 也没用,出现错误:

image
需要重新挂载

1
umount /dev/sda2

报错target busy
杀死使用该目录的进程:

1
fuser  -mv -k /dev/sda2

再次卸载,卸载成功后重新挂载:

1
mount /dev/sda2 /data

报错解决:
报错1:“The disk contains an unclean file system (0, 0). Metadata kept in Windows cache, refused to mount. Falling back to read-only mount because the NTFS partition is in an unsafe state. Please resume and shutdown Windows fully (no hibernation or fast restarting.)”。说明是NTFS分区格式错误
解决方法:ntfsfix修复,需要安装工具:
sudo apt-get install ntfs-3g
安装完成后进行ntfsfix修复:
sudo ntfsfix /dev/sda2
提示修复成功。

image3

报错2:“没有那个文件或目录”。说明/data目录不存在,需要创建。
解决方法:media根目录下创建新目录:
mkdir /media/jngk/data
然后重新挂载,即可挂载成功。
mount /dev/sda2 /media/jngk/data
现在该目录就不是只读文件系统了,在该目录下右键,新建文件夹选项也不再是灰色不可选状态了。

无法将“XXX”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次

进入PowerShell 模式
Get-ExecutionPolicy -List 查看当前所有作用域
1

上图显示就最后一个作用域有权限,其他作用域都没有权限,那么我们就需要去给它设置权限

设置权限
Set-ExecutionPolicy RemoteSigned -Scope < scopeName >,设置当前用户作用域具备权限,具体设置格

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
1

按照上面的格式,执行需要加权限的作用域,然后再去尝试之前的方法,发现就不会报错提示了。

挖矿病毒处理

找到病毒文件:

方法一:由于入侵者对程序的名称做了伪装,无法直接通过其进行查找。因此使用PID入手,查找其在/proc里的文件,进而发现了关键路径

将所有病毒文件展示出来,可以发现关键词miner

对里面的文件作进一步的查看,可以看到ETH(以太坊)、POOL、WALLET等关键词,实锤中了挖矿病毒

此外,查看run文件,可以发现这个病毒文件确实做了伪装

方法二:考虑到入侵者可能会用某些方式将病毒程序作一定的隐藏,这里通过查看用户的计划任务来定位病毒文件,因为病毒文件可能被kill掉而入侵者不会每次都自己手动启动的,肯定会设置自动启动。查看计划任务的命令为crontab -l
为了查看病毒文件在服务器上是否有多份,可以使用如下命令一次性查看所有用户的计划任务:

1
2
3
4
5
6
7
for u in $(cat /etc/passwd | cut -d":" -f1)
do
echo $u>>temp.txt
crontab -l -u $u >> temp.txt
done
cat temp.txt
rm temp.txt

方法三:尝试定位病毒文件中的特有关键词,比如“miner”
updatedb
locate miner

由于locate命令不能查找/dev/shm之类的路径,以防万一可以使用find命令,不过会很慢

find / -name miner

应对方法:

删除整个病毒文件夹(python),kill相关的PID,并删除相关定时任务(使用命令crontab -e,或者如果只有一个定时任务的话可以用命令crontab -r)

更改所有用户的密码,并设置一定的密码复杂度(可以使用cracklib)

移除所有除了管理员以外用户的sudo权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
admin="root,sudo,%sudo" # 填入管理员账号(前三个不能删)
for i in $(cat /etc/sudoers|grep "ALL=(ALL:ALL) ALL"|cut -f 1|cut -f 1 -d ' ')
do
echo $i
if [ -z "$(echo $admin|grep $i)" ]
then
echo "*** deluser $i sudo"
deluser $i sudo
fi
done
for i in $(getent group sudo|cut -f 4 -d :|tr -s ',' '\n')
do
echo $i
if [ -z "$(echo $admin|grep $i)" ]
then
echo "*** deluser $i sudo"
deluser $i sudo
fi
done

删除现有的所有密钥&授权

updatedb

删除公钥+密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for pub in $(locate .pub|grep .pub$)
do
u=$(ll $pub|awk '{printf $3}')
# 根据UID判断所属用户是否为普通用户
if [ 999 -lt $(id -u $u) ]
then
pri=$(echo ${pub%????})
rm $pub
rm $pri
echo del $u $pub $pri
else
echo save $u $pub
fi
done
# 删除knowN_hosts
for i in $(locate known_hosts|grep known_hosts$)
do
rm $i
echo del $i
done
# 删除authorized_keys
for i in $(locate authorized_keys|grep authorized_keys$)
do
rm $i
echo del $i
done

查看剩余

updatedb
locate .pub|grep .pub$
locate known_hosts
locate authorized_keys

可能会遇到某个文件用root权限也删除不了

如果使用命令lsattr发现该文件的隐藏属性中存在除了e以外的属性,则用命令chattr来移除这些属性

设置远程连接只能使用密钥,不能使用密码

禁止使用root账号进行远程连接

使用终端安全杀毒软件、内网安全监控产品、漏洞扫描设备等专业工具

查杀病毒

1、crontab -e 发现一条自启动任务,且为“python”程序,但不确定是否为挖矿程序,暂时保留
2、根据挖矿程序PID,进入/proc/PID目录下检查
进入/tmp/…/Python目录
image4
通过sudo vim config.ini检查config.ini文件,发现正是挖矿配置文件,从而自启动任务为挖矿任务
image5
4、kill挖矿进程,删除挖矿文件及自启动任务,同时关闭挖矿病毒使用的端口
5、使用杀毒软件全盘查杀

在cuda版本过高的情况nvidia官方bug,会出现内存泄露no such progress

使用

1
python3 -m pip install --upgrade nvidia-ml-py

fsl 安装

使用本地安装包
解压缩到要安装的文件夹。推荐和我一样解压缩到/usr/local目录下
有可能会出现权限不足的问题无法解压缩,可以在usr目录中打开终端,输入
sudo chmod -R 777 local
输入密码后,打开权限
配置环境变量.bashrc

1
2
3
4
export FSLDIR=/usr/local/fsl
export PATH=$PATH:$FSLDIR/bin
source $FSLDIR/etc/fslconf/fsl.sh

卸载cuda

1
2
3
cd /usr/local/cuda-xx.x/bin/
sudo ./cuda-uninstaller
sudo rm -rf /usr/local/cuda-xx.x

微星tpm

微星gl63有TPM的,下面教你如何操作:
首先进bios
然后按右边的CTRL+SHIFT+左边的ALT+F2开启超级模式。
之后在高级选项中找到PCH-FW Configuration
找到PTT Configuratio
把dTPM改为PTT(如果已经是PTT可以跳过此步)。
之后在高级选项中找到Trusted Computing
找到Security Device Support,将Disable改为Enable
按F10保存。