Contents
SSH神器:MobaXterm
Free X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding
MobaXterm是Windows下的一个远程连接客户端,功能十分强大,它不仅仅只支持ssh连接,它支持许多的远程连接方式,包括SSH,X11,RDP,VNC,FTP,MOSH
基本场景0: SSH
图形化的SSH隧道管理
SSH登陆后左边会自动列出sftp文件传输窗口,可以随手进行文件上传和下载
免费的绿色免安装版本就可以满足日常工作的需求
场景1: 通过跳板机的远程登录
需求介绍
客户端A使用校园网IP(10.开头);
校园网为路由器分配IP,路由器又为实验室的电脑分配IP。服务器B和服务器C在实验室内网中(IP为192.168.1.x)。
其中服务器B做过端口转发,可以通过校园网访问。但客户端访问服务器C则需要通过B来做跳板机。
配置教程
Session:SSH:Network Setting:Connect through SSH gateway
场景2: 本地浏览器访问远程端口
需求介绍
远端服务器无浏览器界面,但希望使用jupyter notebook、tensorboard等。
配置教程
Tools:Network:MobaSSHTunnel
稍复杂一些,其后的详细参数配置可戳小标题里的链接。
更新CUDA版本
这里以卸载10.0,升级到10.1为例。
$ cd /usr/local/cuda-8.0/bin # uninstall
$ sudo ./uninstall_cuda_10.0.pl
新版10.1驱动下载:地址(根据自己的系统版本选择安装包)
$ wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
$ sudo sh "/usr/cuda_10.1.105_418.39_linux.run" # exit X server first: sudo service lightdm stop
安装时第一个驱动不用选,因为之前就有(参考)。不过要确保该版本显卡驱动支持CUDA的Toolkit,若出错,附单独的驱动安装方法:
$ sudo add-apt-repository ppa:graphics-drivers/ppa # 添加ppa源
$ sudo apt-get update
$ ubuntu-drivers devices # 查看可安装的驱动版本
$ sudo apt install nvidia-430 # install (430)
VSCode: 编辑远程文件
-
安装Remote-SSH插件
-
添加配置文件,通常位置为
~/.ssh/config
-
config文件中配置SSH参数,详见官方文档:https://code.visualstudio.com/docs/remote/ssh
Host 连接的主机的名称,可自定 Hostname 远程主机的IP地址 User 用于登录远程主机的用户名 Port 用于登录远程主机的端口 IdentityFile 本地的私钥的路径 ForwardX11 ProxyCommand
解决
CreateProcessW failed error:2
:指定ProxyCommand中ssh.exe的的完整路径,如ProxyCommand C:\Program Files\Git\usr\bin\ssh.exe ...
-
关闭连接:File - Close Folder
Anaconda3安装OpenCV
- 安装依赖项
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev # 处理图像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-get install ffmpeg
$ sudo apt-get install libjasper-dev
-
从官网下载所需的包
-
conda命令执行
conda install opencv3-3.1.0-py36_0.tar.bz2
Linux常用命令
执行.sh
文件
.sh
文件就是文本文件,如果要执行,需要先使用chmod a+x filename.sh
来给可执行权限;
然后在其所在目录下执行sudo ./filename.sh
tar: tape archive
主要选项
-c, –create 打包
-x, –extract 解压
-t, –list 查看
-A, –catenate, –concatenate 合并tar
-r, –append 向归档文件末尾追加
-u, –update 仅追加比归档中副本更新的文件
–delete 从归档中删除
-d, –diff 比较归档和文件系统的差异
辅助选项
-v, –verbose 详细列出处理的文件
-f, –file=
ARCHIVE
-C 解压到指定目录
压缩选项 (not support compress directly)
-a, –auto-compress 根据归档后缀名决定
-j, –bzip2 【.tar.bz, .tar.bz2】
-J, –xz 【.tar.xz】
-z, –gzip 【.tar.gz, .tgz】
-Z, –compress 【.tar.Z】
- 打包(压缩)
$ tar -cvf /source_path/collection.tar file1, file2
$ tar -zcvf collection.tar.gz # -z 压缩为.tar.gz文件
- 解压
$ tar -xvf collection.tar
$ tar -zxvf collection.tar.gz -C /destination_path/ # -C 指定输出路径
- 更新(假设修改了file1,新创建了file3)
$ tar --update -v -f collection.tar file1, file2, file3
file1
file3
附:(其它)压缩 / 解压
-
.gz
gzip file_name
gunzip file_name.gz
-
.bz2, .bz
bzip2 file_name
bunzip2 file_name.bz2
-
.Z
compress file_name
uncompress file_name.Z
-
.zip
zip file_name.zip dir_name
unzip file_name.zip
-
.rar
rar a file_name.rar dir_name
rar x file_name.rar
统计目录下 文件/目录 个数
$ ll -R dir_name|grep ^-|wc -l
$ ll -R dir_name|grep ^d|wc -l
注:ll的输出信息中,目录以d开头,文件以-开头。若统计所有条目则无需中间一项。
实时监测命令的运行结果
-n, –interval= 周期(秒)
-d, –differences 高亮显示变动
$ watch -n 1 -d nvidia-smi
注:nvidia-smi为CUDA命令,用于查看GPU使用情况
kill进程
$ kill -u user # 杀死指定用户的所有进程
$ ps -ef|grep string|grep -v grep|awk ‘{print $2}’|xargs kill -9 # 批量杀死包含某字符串(string)的进程:awk中的脚本打印文本每行的第二列,即进程号;xargs将之前获得的进程号作为kill -9的参数并执行
修改环境变量
修改用户级别的环境变量vim ~/.bashrc
(系统级别vim /etc/profile
),写入:
export PATH="$PATH:/home/username/example"
用source ~/.bashrc
命令以生效
查看系统版本
$ cat /etc/issue
系统管理
sudo: superuser do
su: switch user
用户与用户组
-
增加用户
useradd -d /usr/username -m username
-
为用户增加密码
passwd username
-
新建工作组
groupadd groupname
-
将用户添加进工作组
usermod -G groupname username
直接用
usermod -G groupA
会离开其他用户组,仅仅做为这个用户组 groupA 的成员。应该加上 -a 选项:$ usermod -a -G groupA user
-
删除用户
userdel username
ps: process status
常用参数:-aux -ef
五种进程状态:
-
R:运行 runnable
-
S:中断 sleeping
-
D:不可中断 uninterruptible sleep (usually IO)
-
Z: 僵死 a zombie process
-
T: 停止 traced or stopped
nohup: no hang up
常和 & 符号配合,使程序在后台永久执行【用screen更优】
screen
screen -ls
screen -r id
ctrl+a+d:返回之前的shell
screen -ls grep Detached cut -d. -f1 awk ‘{print $1}’ xargs kill # kill all screen
reboot
重启(需root)
文档编辑
grep: global regular expression print
-v 显示不包含匹配文本的所有行
查找文件里符合条件的字符串,输出为文件中包含该字符串的行
grep string *file
查找后缀有file的文件中包含string字符串的文件
wc: word count
计算文件字数,输出三个数字分别表示行数(-l)、单词数(-w)、字节数(-c, –chars)
Vim编辑器
三种模式:Insert, Normal, (Visual便于选取文本)
Normal模式下:
命令前添加数字表示多遍重复操作;
f
表示行内正向查找,F
反向
-
查找字符串:按
/
,默认大小写敏感;正则匹配使用?pattern
n:查找下一个匹配 N:查找上一个匹配 2n:查找下面第二个匹配
-
移动光标
0:到行首 ^:到行首第一个字符,如果前面有空格的话 $:到行尾 gg:快速到文件头 G:快速到文件尾 20j:向下移动 20 行 50G:跳转到第 50 行
-
复制y,粘贴p,剪切x,删除d
yy:复制一行 8yy:向下复制8行 yw:复制光标开始的一个单词 y$:复制光标到行尾 yfA:复制光标到第一个大写A中间的内容 y2fA:复制光标到第二个大写A中间的内容
- 经典版(翻译)
- 进阶版
文件管理
chown: change owner
改变文件所有者,-R指定目录以及其子目录下所有文件
chown user[:group] file_name
chmod -R user[:group] *
(当前目录)
chgrp: change group
改变文件用户组
chmod: change mode
chmod 777 file_name
- 读r=4, 写w=2, 执行x=1【rwx : 7, rw- : 6, r-x : 5】
- 三个数字分别对应User, Group, Other的权限
cat: concatenate
连接文件并打印到标准输出设备上,-n由1开始对输出行编号(-b空白行不编)
cat file1 file2 > file3
(输入到file3中,若»则为追加,不打印在控制台)
more / less
分页浏览文件(less可随意浏览)
history | less
查看命令使用历史并通过less分页显示(Q退出)
ln: link
为某文件在另一个位置建立同步链接。需要在不同目录用到同一文件时,不必重复占用磁盘空间。-s 创建软链接(可跨文件系统,类似于快捷方式)
ln -s file_name link_name
cp: copy
复制目录时必须加-r
rm: remove
删除目录必须加-r,-f对只读文件也直接删除
mv: move
mv source dest
scp: secure copy
linux系统下基于ssh登录进行安全的远程文件拷贝
scp local_file remote_username@remote_ip:remote:folder
wget & curl
- 下载文件
$ curl -O http://man.linuxde.net/text.iso #O大写,不用O只是打印内容不会下载
$ wget http://www.linuxde.net/text.iso #不用参数,直接下载文件
- 下载文件并重命名
$ curl -o rename.iso http://man.linuxde.net/text.iso #o小写
$ wget -O rename.zip http://www.linuxde.net/text.iso #O大写
- 断点续传
$ curl -O -C -URL http://man.linuxde.net/text.iso #C大写
$ wget -c http://www.linuxde.net/text.iso #c小写
- 显示响应头部信息
$ curl -I http://man.linuxde.net/text.iso
$ wget --server-response http://www.linuxde.net/test.iso
- wget打包下载网站
$ wget --mirror -p --convert-links -P /var/www/html http://man.linuxde.net/
locate
用于查找符合条件的文档(文件或目录名中包含指定字符串)
whereis
只查找二进制文件、源代码文件或帮助文件。一般文件的定位用locate
which
在环境变量$PATH$设置的目录中查找文件
split
将大文件分割成较小的文件(默认间隔1000行,可用-<行数>指定)行数>
磁盘管理
cd: change directory
pwd: print work directory
打印当前工作目录的绝对路径
ls: list
列出指定目录下的内容
-a 显示隐藏文件
-l 除文件名外,还有文件权限、所有者、大小、修改时间 (简写为ll)
-R 将目录下所有的子目录的文件都列出来(递归)
df: disk free
显示文件系统的磁盘使用情况
du: disk usage
显示指定文件所占的磁盘空间
mkdir
网络通讯
netstat
netstat -apu
显示UDP(-u)端口号的使用,若TCP则为-t
netstat -l
显示监听的套接字
tcpdump
显示TCP包信息
ifconfig
显示或设置网络设备
常用符号
| (管道,pipeline)上一条命令的输出,作为下一条命令的参数
`echo ‘yes’ | wc -l`
|| 上一条命令执行失败后,才执行下一条命令
`cat nofile || echo “fail”`
&& 上一条命令执行成功时,才执行下一条命令
& 任务在后台执行
~ 家目录(root用户为root,普通用户为home)
. 当前目录
.. 上一级目录
> 覆盖重写某个文件
>> 追加到某个文件
; 连续命令间的分隔
正则表达式
限定符
* >=0个匹配
+ >=1个匹配
? 0或1个匹配
{n} 指定数目n的匹配
{n, } 不少于指定数目n
{n, m} 匹配范围(m<=255)
定位符
^ 文本的开始
$ 文本的结尾
\b 单词边界
\B 非单词边界
非打印字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
\s 任何空白字符(空格及以上五个),等价于 [ \f\n\r\t\v]。
注意Unicode正则表达式会匹配全角空格字符。
其它特殊字符
\ 转义字符
. 除换行符(\n)外的任何单字符
| 两项之间的选择
( ) 一个子表达式的开始和结束
字符簇
放在一个方括号([ ])里,连字符(-)可表示一个范围。方括号里的^符号表示“非”。
[a-z] 所有小写字母
[A-Z] 所有大写字母
[a-zA-Z] 所有字母
[0-9] 所有数字
[0-9\.\-] 所有数字、句号和减号
[^a-z] 所有非小写字母的字符
^[a-zA-Z0-9_]+ 所有包含一个及以上字母、数字或下划线的字符串
^[1-9][0-9]* 所有正整数
^\-?[0-9]+ 所有整数
^[-]?[0-9]+(\.[0-9]+)? 所有浮点数