快捷键
- 自动补全:
Tab
键 - 清空屏幕:
ctrl
+l
键
系统
- 关机:
shutdown -h now
- 重启:
reboot
CPU相关
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
- 查看物理CPU个数:
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
- 查看每个物理CPU中core的个数(即核数):
cat /proc/cpuinfo| grep "cpu cores"| uniq
- 查看逻辑CPU的个数:
cat /proc/cpuinfo| grep "processor"| wc -l
GPU相关
查看显卡状态
1 | nvidia-smi |
动态查看显卡状态
添加 watch
1 | watch nvidia-smi |
gpustat
1 | gpustat --color -u -c -p -i # 需要 pip install gpustat 或 apt-get install gpustat |
--color
: Force colored output (even when stdout is not a tty)--no-color
: Suppress colored output-u
,--show-user
: Display username of the process owner-c
,--show-cmd
: Display the process name-f
,--show-full-cmd
: Display full command and cpu stats of running process-p
,--show-pid
: Display PID of the process-F
,--show-fan
: Display GPU fan speed-e
,--show-codec
: Display encoder and/or decoder utilization-P
,--show-power
: Display GPU power usage and/or limit (draw
ordraw,limit
)-a
,--show-all
: Display all gpu properties above--watch
,-i
,--interval
: Run in watch mode (equivalent towatch gpustat
) if given. Denotes interval between updates--json
: JSON Output
指定程序可见显卡
1 | CUDA_VISIBLE_DEVICES=0 |
更高端一些的:
1 | nvtop |
nvtop
nvtop(NVIDIA TOP)是一个为 NVIDIA GPU 打造的、类 htop 的任务监视器,和 nvidia-smi 功能类似,但有着比 nvidia-smi 更漂亮的外观,也弥补了 nvidia-smi 不能查看一定时间段内 GPU 变化情况的缺陷。
如果是 Ubuntu 19.04,那很简单,一条命令即可:
1 | sudo apt install nvtop |
如果是 Ubuntu 18.04,则运行下面的命令
新方法:运行 snap install nvtop
即可
注意需要退出 conda 环境,并且会在所在路径生成一个 nvtop 文件夹包含编译的文件
1 | sudo apt install cmake libncurses5-dev libncursesw5-dev git |
使用方法:
输入 nvtop
即可运行
具体参数可以使用 --help
查看
1 | nvtop --help |
参考资料:
清理
有时候将进程 kill
掉但还有残留进程占用者显存不释放,而
nvtop
或 gpustat
都看不到真正的进程号,这个时候:
1 | fuser -v /dev/nvidia* |
查看所有 GPU 的进程,然后使用 PID 号和 kill
命令清除程序, 也可以查看单独某块 GPU 的进程, 即将上面的命令中的
*
改为 gpu 的 id
1 | fuser -v /dev/nvidia0 |
多个 id 可以用正则匹配
1 | fuser -v /dev/nvidia[012] |
终端复用
Screen
screen 可以创建一个可离线运行的窗口
新建工作窗口
1 | screen -S screen_name |
查看所有窗口
1 | screen -ls |
进入窗口(注意在一个窗口时不要直接进入窗口,否则前一个窗口会一直被占用,需要使用后面的方法强行进入)
1 | screen -r screen_name |
退出当前窗口
ctrl+A+D.
删除窗口
1 | screen -X -S screen_name quit |
或在窗口内 ctrl+D
把占用者踢掉强行进入
1 | screen -d -r screen_name |
开启拷贝模式(可以鼠标滚动):ctrl+a+[.
Tmux
- 启动:
tmux
- 退出:
exit
或 ctrl+D - 前缀键: 先按前缀键 ctrl+b 才能唤起快捷键,注意下面的快捷键都是先按 ctrl+b,放开后再按其他按键(忽略大小写)
- 帮助(看不懂...): ctrl+b+?, 按 q 或 Esc 退出
- 会话部分
- 新建会话:
tmux new -s <session name>
编号默认从 0 开始 - 分离会话:
tmux detach
或 ctrl+B+D - 查看所有会话:
tmux ls
或tmux list-session
- 重新接入会话:
tmux a -t <session-id/name>
或tmux attach -t <session-id/name>
- 删除会话:
tmux kill-session -t <session-id/name>
- 切换会话:
tmux switch -t <session-id/name>
- 重命名会话:
tmux rename-session -t <session-id/name> <new name>
或 ctrl+B+$ - 查看所有会话and切换: ctrl+B+S
- 新建会话:
- 窗口部分(会话session下可以由多个窗口)
- 新建窗口:
tmux new-window -n <window name>
或 ctrl+B+C (默认名称是bash
) - 切换窗口:
tmux select-window -t <window-id/name>
- 重命名窗口:
tmux rename-window <new name>
或 ctrl+B+, - 切换窗口: ctrl+B+window-id 或 ctrl+B+w(可以切到其他会话的窗口)
- 新建窗口:
- 窗格部分(窗口下可以划分多个窗格panes)
- 划分窗格: (上下)
tmux split-window
或 ctrl+B+" (左右)tmux split-window -h
或 ctrl+B+% - 移动光标:
tmux select-pane
+ (上-U
下-D
左-L
右-R
) 或 ctrl+B + (↑/↓/←/→) - 显示窗格编号: ctrl+B+q
- 移动窗格:
- 上移:
tmux swap-pane -U
- 下移:
tmux swap-pane -D
- 与上一个交换: ctrl+B+{
- 与下一个交换: ctrl+B+}
- 循环前移: ctrl+B+ctrl+o
- 循环后移: ctrl+B+alt+o
- 上移:
- 关闭窗格: ctrl+B+x
- 窗格全屏/恢复: ctrl+B+z
- 调整大小: ctrl+B+(ctrl/alt)+(↑/↓/←/→)
- 将窗格升级成窗口: ctrl+B+!
- 切换预置布局: ctrl+B+Space
- 划分窗格: (上下)
- 复制模式
- 进入复制模式: ctrl+B+[
- 开始拷贝: space(空格键)
- 结束拷贝: enter(回车键)
- 黏贴: ctrl+B+]
- 退出复制模式: q 或 esc
- 按住 shift 可以使用鼠标复制黏贴
- 鼠标模式:ctrl+B+: 后输入
set mouse on
关闭的话输入set mouse off
参考资料
用户相关
创建新用户
1 | 创建新用户的步骤 |
删除用户
1 | sudo userdel -r username |
进程相关
ctrl+z
挂起进程放入后台jobs
显示暂停的进程fg %n
恢复第 n 个进程在前台运行bg %n
恢复第 n 个进程在后台运行(无法再挂起)fg, bg
不带参数默认恢复最后一个ctrl+c
( kill foreground process ) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行ctrl+d
( Terminate input, or exit shell ) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车
查看用户所有进程
1 | ps -u User_name |
杀进程
1 | kill -9 PID |
杀死多进程的方法
1 | kill $(ps aux | grep "train.py" | grep -v grep | awk '{print $2}') |
查看系统信号机制
1 | kill -l |
- 在系统中,(9)SIGKILL和(19)SIGSTOP两种信号,进程是无法捕获的,收到后会立即退出
ctrl
+C
是发送 (2) SIGINT 信号来终止程序kill
命令默认使用 (15) SIGTERM 信号
文件管理
- ls(英文全拼:list files): 列出目录及文件名
- cd(英文全拼:change directory):切换目录
- pwd(英文全拼:print work directory):显示目前的目录
- mkdir(英文全拼:make directory):创建一个新的目录
- rmdir(英文全拼:remove directory):删除一个空的目录
- cp(英文全拼:copy file): 复制文件或目录,
-r
递归 - rm(英文全拼:remove): 删除文件或目录
- mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
- rename: 重命名,支持正则匹配
1 | sudo 前缀,使用管理者权限 |
修改权限
基本的权限标志共 10 位,分别是:
- 第 1 位标志:标志是文件属性,
-
是文件,d
是文件夹 - 后面 9 为每 3 位一组,分别是文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
- 每组三位分别表示三种权限:读(read), 写(write), 执行(execute)
修改权限(chmod
)
- 数字表示模式
1 | chmod 777 file |
即每个数字表示一组权限(二进制表示,7 的二进制为 111 即三种权限都为 1)
- 符号模式
用 u, g, o, a 分别不是所有者,用户组,其他用户,所有
用 r, w, x 分别表示读写执行权限
使用 +
, -
, =
对权限进行增加,减少,修改
1 | chmod u+x file |
- 递归修改
将对应文件夹及其所有子文件的权限都进行修改加上 -R
1 | chmod 777 -R file |
符号链接
符号链接类似与 windows 中的快捷方式,创建方法如下:
1 | ln -s <path to the file/folder to be linked> <the path of the link to be created> |
ln
是链接命令,-s
指定此链接为软链接,-s
也可以写为
-symbolic
。
ln
命令默认会创建硬链接。path to the file (or folder)
声明了链接目标,即想要为其创建快捷方式的文件或目录。
path to link
即链接(快捷方式)名称。
使用 ls
可以看到符号链接和目标,其第一个字母是
l
确认符号链接:
1 | ls -l <path-to-assumed-symlink> |
删除符号链接:
1 | unlink <path-to-symlink> |
或者暴力的 rm
也可以删除,符号链接的本质其实也还是一个文件
压缩和解压
tar打包和解包
tar打包(注:tar 只是将文件进行打包,不压缩,压缩一般使用 gzip 得到
*.tar.gz
文件
1 | tar [-op] 源文件 |
可用参数
- 打包参数
-c
: 将多个文件或目录进行打包-A
: 追加 tar 文件到归档文件-f 包名
: 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名-v
: 显示打包文件过程
- 解包参数
-x
: 对 tar 包做解打包操作-f
: 指定要解压的 tar 包的包名-t
: 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作-C 目录
: 指定解打包位置-v
: 显示解打包的具体过程
- 打包并压缩/解压并解包
-z
: 自动识别,例如:- 打包并压缩:
tar -zcvf tmp.tar.gz /tmp/
- 解压并解包:
tar -zxvf tmp.tar.gz
- 打包并压缩:
使用参数可以不加 -
例如:tar cvf example.tar example.cfg
或
tar -xvf example.tar
.
gzip 压缩和解压
gzip
命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件,所以一般先用
tar 打包再进行压缩,其次,默认会删掉源文件!
1 | gzip [-op] 源文件 |
可用选项
选项 | 含义 |
---|---|
-c | 将压缩数据输出到标准输出中,并保留源文件 |
-d | 对压缩文件进行解压缩 |
-r | 递归压缩指定目录下以及子目录下的所有文件 |
-v | 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比 |
-l | 对每一个压缩文件,显示以下字段:压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称 |
-数字 | 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6 |
zip 压缩和解压
压缩命令
1 | zip [-op] 压缩包名 源文件或源目录列表 |
参数:
选项 | 含义 |
---|---|
-r | 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩 |
-m | 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中 |
-v | 显示详细的压缩过程信息 |
-q | 在压缩的时候不显示命令的执行过程 |
-压缩级别 | 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好 |
-u | 更新压缩文件,即往压缩文件中添加新文件 |
解压命令:
1 | unzip [-op] 压缩包名 |
参数:
选项 | 含义 |
---|---|
-d 目录名 | 将压缩文件解压到指定目录下。 |
-n | 解压时并不覆盖已经存在的文件。 |
-o | 解压时覆盖已经存在的文件,并且无需用户确认。 |
-v | 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。 |
-t | 测试压缩文件有无损坏,但并不解压。 |
-x 文件列表 | 解压文件,但不包含文件列表中指定的文件。 |
参考资料
文件传输
使用 SCP 命令进行跨服务器文件传输
基本命令:
1 | scp [可选参数] file_source file_target |
常用参数:
-p
: 保留原文件的修改时间,访问时间和访问权限。-P
: 端口号-r
: 递归复制目录-i
: 秘钥文件
示例:
1 | scp local_file remote_username@remote_ip:remote_folder |
参考资料:
Vim
Vim 包括三种模式:命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)
基本用法
- 命令模式
- i 切换到输入模式
- : 切换到底线模式
- 输入模式
- esc 切换到命令模式
- 底线命令模式
- w 保存文件
- q 退出 Vim
参考资料
输出问题
常规将控制台输出输出到文件通过重定向即可,如:
1 | python test.py > out.txt |
注意:>
是覆写模式,>>
是追加模式
script
script
有点类似一个记录器,命令,按键,输出全部可以记录到文件,使用方法为:
1 | script -a -f out.txt |
就会将shell中的所有内容详细记录到文件中,其中 -a
表示追加模式,-f
表示不缓存实时输出,可以使用
-h
查看更多帮助。最后可以输入
1 | exit |
就可以终止记录了,显示:Script done, file is out.txt
tee
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
1 | python test.py | tee -a out.log |