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
| 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被墙时的对策
- 给git挂代理
1
| git config --global http.proxy http://<proxy_user>:<proxy_password>@<proxy_host>:<proxy_port>
|
- 修改git的ssh配置,强制其访问github的443端口(如何gihub网页版能访问的话)
1 2 3 4
| Host github.com HostName git.github.com User git Port 443
|
- 奇技淫巧:因为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:
然后打开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
|