Linux常用命令
- 从$变为#
先输入:sudo passwd root
回车后输入你当前的用户的密码,然后给root输入一个新的密码,连续输入两次。
接着输入su,然后输入你的新的密码,这个时候变为了#。
如果要退出#,那么输入:exit ,这个时候就会从#恢复回到$。
- 创建名为C++_Primer_Plus的文件夹
mkdir C++_Primer_Plus
- 进入下级文件夹
如果当前目录为/home/time,想要进入名为C++_Primer_Plus的子文件夹
cd /home/time/C++_Primer_Plus
- 新建一个1.cpp文件
nano 1.cpp
- 退出1.cpp文件编辑
ctrl+x
- 安装g++
apt-get install g++
- 编译1.cpp文件为1.out文件
g++ 1.cpp
- 查看当前目录下的所有文件
ls
Linux基础
- 列出文件/文件夹
- 命令:ls (list)
- ls # 列出当前目录下的文件和文件夹
- ls -l # 列出文件和文件夹的详细信息:权限,Owner,Group和创建/更新时间
- 新建/切换路径
- 新建命令:mkdir (make directory)
- 切换命令:cd (change working directory)
- mkdir test_dir # 新建一个叫test_dir的路径
- cd test_dir/ # 进入 test_dir 路径
- 两种特殊的目录:…、. 或写作 …/、./,…/代表上一级目录,./代表当前目录。
- 查看当前路径
- 命令:pwd (list)
- pwd #查看当前路径
- 重命名、移动文件/文件夹
- 命令: mv (move)
- mv test_dir/ test_directory # 将test_dir目录重命名为test_directory,文件重命名同样适用
- mkdir a b # 创建两个文件夹a和b
- mv a b/ # 将a移动到b目录下。如果b目录不存在的话,这条命令相当于将a重命名为b
- tree
- 拷贝文件/文件夹
- 命令: cp (copy)
- 参数: -r (-r代表递归)
- mkdir a b # 创建两个文件夹a和b
- ls
- cp -r a b # 将a文件夹拷贝到b文件夹下,-r代表递归拷贝
- 删除文件/文件夹
- 命令: rm (remove)
- 参数: -rf (-r代表递归,-f代表强制)
- ls
- rm -rf folder
- rm -rf folder/* # *是通配符号,这样代表folder文件夹下所有文件/文件夹
- 设置环境变量
- 命令: export
以常见的两个环境变量:PATH和LD_LIBRARY_PATH为例
- PATH 如果你有自己安装的命令,希望暴露出来直接使用。比如miniconda中的python,如果不加环境变量一般需要写完整的路径:/x/x/x/miniconda3/bin/python,如果希望直接写python就能用到调用conda中的python指令,那么可以:
export PATH=/x/x/x/miniconda3/bin:$PATH
先解释上述命令的格式,右侧的路径可以写多个,以:分隔,$PATH表示求PATH变量的值,因为PATH环境变量以前可能已经有值,需要保留那些值不影响其他命令的使用,其次当输入了python命令时,会从PATH变量的路径下去找python可执行文件,先找到哪个就用哪个,因此:前后路径的先后顺序也很重要。- LD_LIBRARY_PATH 和PATH路径一样,只不过LD_LIBRARY_PATH是设置动态链接库的搜索路径。比如安装了CUDA以后,一般需要设置:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
如果要查看是否设置成功可以使用命令:env | grep PATH 进行确认
最后以上设置的环境变量只在当前terminal的上下文中有效,如果希望全局有效,那么将export命令写入文件: ~/.bashrc,然后执行:source ~/.bashrc 生效或新打开终端
- 编辑文本文件
- 命令:vim
- vim的高级使用较复杂,请参考其他文档学习
- 压缩和解压
-
命令:zip、unzip、tar
-
zip和unzip分别正对与zip的压缩包压缩和解压,tar是Linux另外一种更通用的压缩解压工具
- # zip和unzip。如果没有zip请使用apt-get update && apt-get install -y zip安装
- zip -r dir.zip test_directory/ # 将test_directory文件夹压缩为dir.zip文件
- unzip dir.zip # 将dir.zip文件解压
- # tar. 以下参数c代表压缩,x表示解压,z代表压缩/解压为gz格式的压缩包
- tar czf dir.tar.gz test_directory/ # 将test_directory文件夹压缩为dir.tar.gz文件
- tar xzf dir.tar.gz # 将dir.tar.gz文件解压
- # tar还可以用于压缩和解压其他格式的压缩文件,比如bz2
- tar cjf dir.tar.bz2 test_directory/ # 将test_directory文件夹压缩为dir.tar.bz2文件
- tar xjf dir.tar.bz2 # 将dir.tar.bz2文件解压
- 查看GPU信息
- 命令:nvidia-smi
- Memory-Usage # 内存的使用情况
- 408MiB / 12194MiB # 前者408MiB代表已使用的显存,后者12194MiB代表总现存
- GPU-Util # GPU的使用率
- 2% # 使用率百分比
如果需要不停的输出GPU占用信息,那么使用nvidia-smi -l 1每隔1秒输出一次,或使用watch -n 1 nvidia-smi也是同样的效果
- 查看/杀死进程
- 查看进程命令: ps
- 杀死进程命令:kill
- ps -ef
- 从ps的输出结果中根据执行的命令名称找到要杀死的进程,比如最后python tensorflow2.x-test.py命令执行的进程ID是402,因此可以:
- kill -9 402 # -9表示强制终止进程
- kill后可以再次使用ps -ef确认进程是否已经结束。
- 查看进程的CPU和内存占用
- 命令:top
- 或使用平台提供的实例监控功能查看更为简便
- 如果有高负载(CPU使用率高)的情况,那么一般进程都会排在最上边,根据进程名称可以进行确认。那么这个进程占用的CPU可以通过%CPU字段读取出来,内存更复杂一些,但是一般看RES字段就够了。比如上边第一个Python进程CPU的占用率是101.4%,内存使用大小是1.796g(Tips:如果内存显示的单位和上述不同,按e键切换)
- 重定向日志
- 命令: >
- python train.py # 一般情况下日志会输出到stdout/stderr中
- python train.py > ./train.log 2>&1 # 把stdout/stderr中的日志重定向到train.log文件中,最后的2>&1中,2代表stderr,
1代表stdout,&1可以理解成像c语言中的求地址- cat ./train.log # 将train.log文件中的内容打印在stdout。cat(Concatenate FILE(s) to standard output.)
- python train.py > ./train.log 2>&1 & # 如果最后再加一个&的效果是后台运行,还可以参考nohup的配合使用
场景1
场景:发现程序停止了,但是显存还在占用
一般这种情况是进程假死,看上去停止了但是实际还在。可以通过ps -ef查看进程是否还存在,如果存在则用kill命令杀死进程,最后用nvidia-smi检查显存是否已经释放。
- 场景2
- 场景:想把实例中的模型/数据保存在网盘中一份,方便其他实例使用
- pwd
- ls
- cp -r train.py autodl-nas/ # 把 train.py 文件存入网盘中
场景3
场景:发现进程内存会使用超过限制,导致进程被Killed
可以使用Top命令查看进程的占用内存情况,确认内存是不是会停留在一个值而不会一直增长,如果一直增长说明程序对内存的释放有漏洞,可以分析Python代码变量的引用来进行优化。
场景4
场景:使用JupyerLab的终端挂守护进程跑训练,担心关闭网页期间的日志看不到了
可以使用重定向日志功能,把日志写入文件