学习使用Linux做实验
学习使用Linux做实验
这里介绍的是使用Linux平台做实验,也就是在Linux下运行程序。当然程序的编写可以在Linux下编写,也可在非Linux(也就是Windows啦)下编写。而我们做实验大都不需要桌面环境,而只需要命令行就行了(这和隔壁实验室不同,他们使用Matlab就常常需要坐在那台大服务器前敲啊敲啊敲键盘,幸福啊,我们),这就是说我们可以在Windows下把程序写好(甚至是编译好,只要两个平台可以兼容),然后把程序移至Linux下运行就了。
我们实验室大多用Java做实验,这更方便了,因为Java的跨平台,可以直接把编译好的字节码文件拷贝到Linux下运行就是了。当然,有时候要注意下java的版本和32位还是64位的问题。所以这个标题大了很多,应该叫《学习使用Liunx运行Windows下编写的java程序》
好,废话不说!两分钟(除了下载安装软件的时间)就可以掌握基本的操作。
1.首先是软件准备
SSH和Java
此SSH非Java的框架,而是是一个用来替代TELNET、FTP以及R命令的工具包,可在此下载。(http://www.onlinedown.net/soft/20089.htm)
在Windows下安装好SSH和Java运行环境,在Linux下安装好同版本的Java运行化境。
2:在Windows下编写程序
写一个生产随机数的程序,并把结果写到一个文本中
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
public class MakeRand
{
public static void main(String[] args) throws IOException
{
System.out.println("程序运行开始时间:"+new java.util.Date().toString());
BufferedWriter bw=new BufferedWriter(new FileWriter(new File("rand.txt")));
Random random=new Random();
int rand;
for(int i=0;i<100;i++)
{
rand=Math.abs(random.nextInt())%100+1;
bw.write(String.valueOf(rand));
bw.newLine();
}
bw.close();
System.out.println("程序运行结束时间:"+new java.util.Date().toString());
}
}
3:在Windows下编译程序
在cmd环境下输入:javac MakeRand.java(编译MakeRand程序)
得到了MakeRand.class后就可以把其拷到Linux下了(当然这里也可以在cmd下运行)。
4:拷程序到Linux中
打开SSH的Secure File Transfer Client,也就是这个图标:
连接远程主机,
输入主机IP和用户名,比如,192.168.0.88 hesz,回车,这就到了你的用户目录下了。
/home/hesz,然后你就可以想方法把程序拷到里面去了,不管是拖啊,复制啊都行。
我是新建了一个目录test,然后拷到test下面去的。
5:运行程序
打开SSH的Secure Shell Client,也就是这个图标:
同样要输入主机地址和用户名密码
进入到那个目录:cd /home/hesz/test
运行命令:java MakeRand
运行完后输入:ls(常看当前目录下的文件信息)
此时就可以看到多了个rand.txt文件,好了这个就是实验结果了。
6:后期处理
怎么查看这个实验结果呢?聪明的你肯定想到了,我们可以把程序拷入Linux下,肯定也可以从Linux拷出啊,这种方法就是又用Secure File Transfer Client把结果拷出。我们还可以直接在Linux下看结果,比如输入:cat rand.txt
其实Linux下有很多很好的文本编辑和常看工具,比如vi,vim,Emacs,cat,等。在命令行下常用的主要是vi和cat(其实我也就是这两个熟一点,呵呵)。
好了,基本上差不多了,就是这基本的步骤。知道了这个步骤,就可以自己慢慢钻研一些其他的方法了。下面我还介绍下平时常用的东东。
1:用Eclipse编写程序,怎么样更方便的编写和运行
在Windows下用Eclipse编写后一般就会在工程目录下生成.class文件,在bin/目录下(完全按照包层次结构存储)
只要没使用额外的.jar文件和其他的.class文件就可以直接用:
Windows的cmd下的命令是: java –cp bin com.math.RandMake
Linux下的命令是: java –cp bin com.math.RandMake
两个一样哦,如果认为什么都一样那就要吃小亏了。
如果使用了其的.class文件和.jar文件怎么办呢,比如使用了其他的矩阵运算外部包,中文分词外部包。
Windows的cmd下的命令是: java –cp bin; F:\workspace\PreTreatment\lib\ictclas4j.jar com.math.RandMake(没错,就是在不同class间用;隔开)
Linux下的命令是: java –cp bin: lib/ictclas4j.jar com.math.RandMake(没错,就是在不同class间用:隔开,就是这点不同)
2:如果我要在linux下作批处理呢?也即是说,我想机器做完了这个程序自动做下一个程序。
当然你可以自己在程序中组合一下。但是Linux下是否有类似Windows下的bat批处理程序呢?有的,那就是shell程序。
比如,
程序1是:java –cp bin p1
程序2是:java –cp bin p2
我希望程序做完了p1后自动做p2,好,我们就可以把两个命令写入到一个文件中,比如是pp.sh(注意后缀一定是.sh)
然后把pp.sh拷到linux下,好了,我们就可以到那个目录下输入:./pp.sh
可以看到:-bash: ./pp.sh: 权限不够
这是表明你对该文件没有执行权限。那么我们需要改动一下这个文件的权限。
输入:chmod +xxx pp.sh(就是加执行执行执行权限,3x就是3个执行,细节不讲啦,)
改完之后再运行:./pp.sh(注意一个./表示执行当前目录下的pp.sh文件)
当然如果你还问,如果p1运行后出现结果1我要运行p2,而如果出现结果2我要运行p3,能不能做了,当然可以。去看看linux shell编程就知道了。
3:后台执行程序。有的时候你可能会想,既然是服务器,那么如果我把电脑关掉(或者把Secure Shell Client关掉),那么没有运行完的程序应该会照常运行!但是如果你使用上面的方法,对不起,不行,你关掉了也就等于强行关掉程序。那么怎么办呢?
命令1:java –cp bin p1 &
命令2:nohup java –cp bin p1 > hah.nohup 2>&1 &
当然如果要求再高些还可以指定时间,指定频率运行程序。(呵呵 我不记得了,如果要写我还要去baidu去,不写了)
4:强制结束程序,查看进程等
常常需要强制结束程序,用CTRL+C
查看进程用ps
查看系统资源用top
等等一些基本的Liunx命令
其他应该还有,一下子不太记得了,先就这么多吧,有问题说哈!