0%

ubuntu命令

vim的使用

1
2
3
4
5
6
7
:w 保存不退出 
:w 新文件名 把文件另存为新文件
:q 不保存退出
:wq 保存退出
:! 强制
:q! 强制不保存退出,用于修改文件之后,不保存数据退出
:wq! 强制保存退出,当文件的所有者或 root 用户,对文件没有写权限的时候,强制写入数据使用

环境变量

和win中的系统变量一样,在乌班图中能直接输入一个指令开启某个软件,是因为该软件的启动脚本在/bin文件夹下,而bin文件夹是系统去检索软件的位置之一。

所有的位置存储在系统变量path里,所以如果自己有个文件全是希望直接运行的脚本,可以用export指令将其导入到变量Path中。
再远一步,还可以将上述export命令了添加在专门记录的文件.bashrc里。然后用source .bashrc来执行这些export命令。


基础的linux云服务器维护命令

基本的Linux命令对于训练模型非常有必要。
从这个网页上能学到很多基础操作,特别是针对云服务器的维护和使用:Linux基础

  • 训练结束后关机
1
2
3
4
5
6
# 假设您的程序原执行命令为
python train.py

# 那么可以在您的程序后跟上shutdown命令
python train.py; shutdown # 用;拼接意味着前边的指令不管执行成功与否,都会执行shutdown命令
python train.py && shutdown # 用&&拼接表示前边的命令执行成功后才会执行shutdown。请根据自己的需要选择

ubuntu防暴力ssh登陆:

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
27
28
29
30
31
32
33
34
35
36
查看ssh登陆失败记录:
cat /var/log/auth.log | grep Failed

1、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow

2、编写脚本 /usr/local/bin/secure_ssh.sh
#! /bin/bash
cat /var/log/auth.log|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat /usr/local/bin/black.list`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ ${#NUM} -gt 1 ]; then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done

3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。
# crontab -e
在出现的vi中写入并保持:
*/1 * * * * sh /usr/local/bin/secure_ssh.sh

查看被拒绝访问的ip:
[root@ ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
sshd:13.26.21.27:deny


w 查看有哪些终端

1
2
3
4
5
6
7
ubuntu@VM-16-2-ubuntu:~$ w
14:14:19 up 104 days, 1:05, 4 users, load average: 0.18, 0.18, 0.18
USER TTY 来自 LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 112.20.243.38 12:48 1:14m 0.05s 0.05s -bash
ubuntu pts/2 112.20.243.38 12:49 1:15m 0.03s 0.03s -bash
ubuntu pts/3 112.20.243.38 13:51 0.00s 0.03s 0.00s w
ubuntu pts/4 112.20.243.38 14:01 12:38 0.03s 0.03s -bash

who am i

1
2
3
ubuntu@VM-16-2-ubuntu:~$ who am i
ubuntu pts/3 2022-06-29 13:51 (112.20.243.38)

write向别的终端写入消息

1
2
3
ubuntu@VM-16-2-ubuntu:~$ write ubuntu pts/4
hello

wall 向所有终端广播
tall 向别的用户发消息

shell中将命令结果赋值给变量
两种方法,推荐使用后者,支持嵌套,下面两个参考链接写得很清楚了

1
2
3
var=`command`

var=$(command)

显卡

ubuntu对英伟达显卡的支持不好,不仅会导致装系统时开机开不了,还会导致ubuntu风扇空转,机器过热甚至关机。所以建议,自己的电脑上ubuntu时不要使用英伟达独显,使用Intel集显就好,风扇不会空转。

真要训练模型,用实验室的或者租用训练平台的。

定时执行

1.crontab

普通用户也可以使用,非常简单,所以不需要再用“screen+循环”这种操作来定时、循环某项任务了。

1
2
crontab -e #添加某个任务
crontab -l #查看当前有哪些任务

2.系统级别的systemmd

参照博客里的frp开机自启方案

sh脚本多进程及其同步

sh脚本默认是串行执行的,例如我想先渲染,再对渲染结果后处理,可以在sh脚本里这样写:

1
2
blender --background aircraft.blend --python render_teaser.py
python3 addPanos.py aircraft

然而我有很多个类似的渲染任务,且渲染结束后都要对结果进行后处理。渲染任务非常耗时的时候,串行就不太适应了。这时候可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# sh命令并行:
blender --background aircraft.blend --python render_teaser.py &

blender --background cat.blend --python render_teaser.py &

blender --background chinesePavilion.blend --python render_teaser.py &

blender --background IronManSuit.blend --python render_teaser.py &

blender --background fish.blend --python render_teaser.py &

wait
python3 addPanos.py aircraft
python3 addPanos.py cat
python3 addPanos.py chinesePavilion
python3 addPanos.py IronManSuit
python3 addPanos.py fish

python3 videoMerge.py

&符号表示当前命令到后台执行,则不会阻塞串行的顺序执行。前五个耗时的渲染任务全部在后台多进程(并行)执行。然后用一个wait对wait之前的五个进程进行同步,逼迫它们先执行完的在此等候后执行完的。最后,串行执行不太耗时的后处理程序。

.deb包安装指令

sudo dpkg -i 文件名.deb

命令行代理设置

浏览器的代理可以通过追随系统代理或者Proxy SwitchyOmega这种代理插件完成。命令行的代理可以把下面这段写入.bashrc“

1
2
3
4
5
6
7
8
9
10
11
## 只设定命令行代理
alias goproxy='export http_proxy=xxxxx && export https_proxy=$http_proxy && proxy'
alias disproxy='unset http_proxy && unset https_proxy && proxy'
alias proxy='echo http_proxy:$http_proxy && echo https_proxy:$https_proxy'

## 设置命令行+git
proxyIp=`dig +short 814dell.jixinlong.top`

alias goproxy='export http_proxy=http://$proxyIp:10809 && export https_proxy=$http_proxy && git config --global http.proxy $http_proxy && git config --global https.proxy $http_proxy && proxy'
alias disproxy='unset http_proxy && unset https_proxy && git config --global --unset http.proxy && git config --global --unset https.proxy && proxy'
alias proxy='echo http_proxy:$http_proxy && echo https_proxy:$https_proxy && git config --global -l'

要用代理的时候直接goproxy,不用的时候disproxy。查看当前代理情况用proxy

git被墙时的对策

  1. 给git挂代理
    1
    git config --global http.proxy http://<proxy_user>:<proxy_password>@<proxy_host>:<proxy_port>
  2. 修改git的ssh配置,强制其访问github的443端口(如何gihub网页版能访问的话)
    1
    2
    3
    4
    Host github.com
    HostName git.github.com
    User git
    Port 443
  3. 奇技淫巧:因为git底层是依赖的ssh的,所以可以在ssh层面设置代理:
    1
    2
    3
    4
    5
    Host github.com
    User git
    Hostname github.com
    ProxyCommand nc -X 5 -x 127.0.0.1:10808 %h %p
    ServerAliveInterval 30
    这样做有个坏处是这种方法不是主流方法,日后代理关闭的时候git还是想走代理,然后你把这个隐秘的设置给忘了,到网上还查不到类似的做法,那就麻烦了。所以很不建议用这种方法。

v2ray给局域网提供代理

如果是v2rayN这种带界面的软件,勾选“允许来自局域网的连接”即可。
如果是v2ray软件本身,在配置文件config.json里把入站监听ip从127.0.0.1改成0.0.0.0即可。

v2ray快捷开关

在~/.bashrc下添加:

1
2
alias goV2ray="~/v2ray/v2ray run > ~/v2ray/v2ray.log &"
alias disV2ray="killall v2ray"

然后source ~/.bashrc

tar 打包、压缩与解压

1
2
3
4
5
6
7
8
# 打包目录
tar -cvf taredFile.tar ./dirName
# 打包并压缩目录
tar -czvf zipedFile.tar.gz ./dirName
# 解(压缩)包
tar -xvf zipedFile.tar.gz
# 解包
tar -xvf taredFile.tar

wget 下载文件

自带中断重连、后台下载,可查看下载状态

1
2
3
4
5
6
7
wget -t 0 -c -b http://rachmaninoff.gel.ulaval.ca/static/./tmp.InNWaX2Owi/390be30afc9052f92d50e52b25bbe16371ea2836.tar.gz

tail -f wget-log #查看log
ps aux | grep wget #查看后台下载还在不在
需要用户名和密码:加上 --http-user xxx --http-passwd xxx
从文件中读取链接来下载:加上 -i
如果链接里有百分号导致下载失败,可以用引号把链接括起来。

gdown 从谷歌云盘下载数据集

很多数据集是放在谷歌云盘给人下载的。谷歌云盘一般需要用浏览器打开,但是大部分服务器都是命令行模式。如何在命令行里下载谷歌云盘中的数据集?
可以用gdown来解决。先安装gdown:

1
pip install gdown

然后打开Google Drive,右键点击要下载的文件/文件夹,选择”获取链接”。
(确保文件/文件夹的访问权限设置为”任何人均可访问”)从分享链接中复制文件/文件夹的ID。

1
2
3
4
5
# 文件下载
gdown https://drive.google.com/uc?id=<文件ID>

# 也支持文件夹下载
gdown https://drive.google.com/drive/folders/<文件夹ID> -O /tmp/folder --folder