简单快捷使用你的linux
   
    
    
    1 开始接触linux
   
- 当你刚接触到linux系统的时候,接触到神秘的命令行,发现这与平日中接触的图形化界面完全不一样,你懵了。看了这篇文章,可以教会你一些简单的linux常用命令. 方便你的操作.
    
    
    2 开始linux命令
   
    
    
    2.1 打开目录
   
- 在Windows系统中,我们最常用的就是打开/复制/剪切/删除等命令.
打开命令: cd [
dirName
]
# 跳到 /usr/bin/ :
cd /usr/bin  
# 跳到自己的 home 目录 :
>> cd ~
# 返回上层目录 :
>> cd ..
    
    
    2.2 拷贝文件
   
- 在项目中,我们常常需要拷贝文件或者数据集到自己的目录下,CP命令是必须要掌握的命令.
拷贝命令 cp [
options
] source… directory
- 
常用参数说明: -f:覆盖已经存在的目标文件而不给出提示。 -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 
# 伪代码 
cp –r test/ newtest  
# cp 命令使用 -r 参数可以将 packageA 下的所有文件拷贝到packageB 中
cp -r /home/model/* /home/cp/model/
    
    
    2.3 剪切文件
   
- 与上近似 一般理解为mv指令
mv [
options
] source… directory
- 
常用参数说明: -f:覆盖已经存在的目标文件而不给出提示。 -n: 不要覆盖任何已存在的文件或目录。 
# 目标目录与原目录一致,指定了新文件名,效果就是仅仅重命名。
mv  /home/model/a.txt   /home/model/b.txt    
# 目标目录与原目录不一致,没有指定新文件名,效果就是仅仅移动。
mv  /home/model/a.txt   /home/model/test/ 
# 目标目录与原目录一致, 指定了新文件名,效果就是:移动 + 重命名。
mv  /home/model/a.txt   /home/model/NIN_model/c.txt
    
    
    2.4 删除文件
   
rm [
options
] name…
- 
常用参数说明: -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 -r 将目录及以下之档案亦逐一删除。 
# 无提示删除当前目录下的所有文件及目录
rm  -rf  要删除的文件名或目录
# 删除文件名 NIN.py:
rm  -rf   NIN.py
# 删除目录 model,不管该目录下是否有子目录或文件,都直接删除:
rm  -rf   model/
    
    
    3 便捷的使用linux命令
   
    
    
    3.1 登陆自动刷新.bashrc
   
- 在环境配置完毕之后,一般目录下自动会生成该文件,如果缺失该功能,可以手动添加此功能
- 在用户根目录下创建-> usr/.bash_profile 文件
- 
     打开文件,在文件中写入以下代码.
if test -f .bashrc ; then source .bashrc fi
- 保存文件
    
    
    3.2 创建自定义命令
   
- 
使用自定义命令可以极大的简化我们的操作.例如如下场景 在每次登陆终端后,我们都需要激活anaconda的虚拟环境,需要输入以下命令 > source activate tensorflow在自定义命令后,我们可以使用-evtf-来代替上面的命令 
- 
具体步骤如下 
- 在用户根目录下打开-> usr/.bashrc 文件
- 
     打开文件,在文件中写入以下代码.
alias evtf='source activate tensorflow' alias evpt='source activate pytorch'
- 保存文件
- 由此,我们实现了两大功能,通过输入 ‘evtf’ 命令,就相当于输入了’source activate tensorflow’ 极大的简化我们的输入量.
    
    
    3.3 后台运行python代码
   
- 在这一节,我们探讨不同命令联合使用带来1+1>2的效果.
- 
     
 (提出需求)
 
 当我们常用pycharm跑代码,但碰到一个问题,如果代码模型很大,需要的时间很久,当网络中断或者关闭电脑,服务器上的代码也停止运行了,如何能够实现代码在服务器上后台自动运行,并且我能够查看代码运行进度?
- 
     
 (解决方案)
 
 使用nohup/jobs/tail 实现单终端多python后台任务
    
    
    3.3.1 tail
   
- tail命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f
filename
- 实例
# 要显示NIN.log 的内容并实时刷新
tail -f NIN.log
# 要显示NIN.log 的内容
tail NIN.log
    
    
    3.3.2 jobs
   
- 
jobs命令用来显示当前终端中运行的所有任务,包括前台任务和后台任务.当一个任务在运行的时候,我们可以通过 
 
 Ctrl+Z
 
 将任务切换到后台,也可以通过
 
 Ctrl+C
 
 强行结束任务.
- 
常用参数说明: -l:显示相信的列表信息,包括PID信息. 
# 查询当前终端后台运行的进程
jobs
# 查询当前终端后台运行的进程,显示其PID
jobs -l
    
    
    3.3.3 fg bg
   
- 
fg和bg指令是让当前终端的jobs切换前后台,fg让后台进程切换到前台,bg让前台进程切换到后台,但其用法不同,具体请查阅linux命令指南. 
- 
常用参数说明: %n:指定对应jobs号的进程切换前后台 
fg %n #让后台运行的进程n到前台来 
bg %n #让前台运行的进程n到后台去
# 切换后台进程1到前台
fg %1
# 切换前台进程2到后台
bg %2
    
    
    3.3.4 nohup
   
- nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup
Command [ Arg … ] [ & ]
- 
     参数说明:
 
 Command:要执行的命令。
 
 Arg:一些参数,可以指定输出文件。
 
 &:让命令在后台执行,终端退出后命令仍旧执行。
# 在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件
nohup /root/runoob.sh > runoob.log 2>&1 &
- 
2>&1 解释: 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。 0 – stdin (standard input,标准输入) 
 
 1 – stdout (standard output,标准输出)
 
 2 – stderr (standard error,标准错误输出)
    
    
    3.3.5 python
   
- python是用来运行py脚本的命令,其实就相当于调用了编译器,所以要注意虚拟环境的问题,调用合适环境的编译器,不然运行脚本会缺少环境而报错.
- python命令常用参数请自行查询,本文不再列举.
# 在后台执行 NIN_test.py 并将信息重定向到NIN_5.log中
nohup python -u NIN_test.py > NIN_5.log 2>&1 &
    
    
    3.3.6 实操
   
- 一次整体操作,展现了如何通过服务器后台运行时间较长的任务.
# 激活TF环境
@ubuntu:~$ evtf
# 激活成功 前面带(tensorflow)
(tensorflow)@ubuntu:~$ 
# 后台运行py脚本
(tensorflow)@ubuntu:~$ nohup python -u NIN_test.py > NIN_5.log 2>&1 &
# 命令结束没有提示 需要使用jobs确认运行
(tensorflow)@ubuntu:~$ jobs 
# 查看到命令正在运行 可以查看log
(tensorflow)@ubuntu:~$ tail -f NIN_5.log
# 确认代码正常运行 可以关闭中断或者切换到后台 开启下一个任务
 
