Ⅰ linux 为什么没有病毒为什么没有人攻击
Linux是“不怕”病毒,变成了Linux“没有”病毒,这个论调歪的可以。确实,还有很多人在类似的一系列软件上关于安全(的理解)有误解,比如:firefox可以被病毒感染的,因为firefox没有自带杀毒软件,所以firefox的安全也是神话。其实一点(也)不是,firefox的内部隔离制度,以及对ActiveX和VB的不支持本身就难以让病毒利用。同理,关于Linux下的病毒少的原因,开始有人说Linux诞生年代少的有之,其实Linux作为一款Unix-like的系统,上面运行了多少BSD系列的程序,其设计思想和软件都有经过比windows时间长的多的考验。另外说病毒少的,或者运行Linux机器少的有之,经济利益低下,以致于黑客不屑。其实真正运行大型商业数据的很多是Linux。而且Linux中心型的大型网站太多了,最起码任何一个版本都有一个以上这样的中心,如果按照数量论的说法,只要这些网站其中任何一个有问题都会大规模爆发,但是实际上没有出现过这种问题。所以这些概念根本是在混淆视听,如果真的这些能导致危害,Linux的经济背景和数量一点不少,可惜,这些都是胡说。
其实从计算机病毒的概念来说,不就是恶意程序么,带有自繁殖和破坏等特性。如果说系统不会有病毒,那么就是说写不出这种程序了,这本身不可能。虽然概念有些抽象,但是一个程序员恶意目的的写一个能够复制和增殖自己的程序有什么难的,一个菜鸟Linux玩家也不用多久就能写出(shell做这个很简单,而Linux的shell又那么好)。但是安全不是什么防火墙和杀毒软件以及一个“小心”或者“看”这样简单的词汇来解决的,Linux早有一套对这种问题如何防范的方法了。
访问控制矩阵是一个,Linuxer不厌其烦的输入密码再输入,有时也非常讨厌,但是很好的保证的系统缺少被恶意软件修改的机会,一个病毒最多在非常有限范围内实现增殖和内存消耗,但是无法危害整个系统。线程保护做得也不错,那种权限提升的空间被挤压。每个版本自带的过滤器,防火墙,很多版本是直接安装的,虽然不配置不会怎么好,但是好过没有。而且快速的升级和修补,使得系统被利用的漏洞非常难以见到,而软件的修补更加快速。
我记得有人这么说:微软的内核代码是封闭的,按说应该更安全,但是有些时候偏偏比较奇怪,Linux开发的源码更好的可以把病毒隐患消除在内核的层面。Linux经常暴内核漏洞,这是正常现象,不是缺点,这是优点,那是好多都是无数人在想在做这件事,为的是更加安全,不必大惊小怪,他们总是想:“这样写的内核,可能有什么安全问题呢?”于是进行了修改,所以我们内核的升级和补丁不是被动的,而是很多时候主动的出现的,这种做法在Unix-like的系统中很常见,比如安全着称的OB就是通过这种检查方法从根本上减少安全问题,所以才有了问世6年时间无漏洞出现而10年时间只有2个轻微漏洞被发现的佳绩。也就是说Unix-like类的系统一旦补上一个补丁,就消除了无数条隐患。而windows思维的就相反,windows很少能够从内核级别打补丁,升级速度非常缓慢,所以很多补丁是治标的,不能治本,而且很多不是windows光补丁就能解决的,比如线程权限控制,不可能因为病毒的存在,windows的结构就因此改变了。
而Linux软件的开放性的另外一个好处是:他开源,他就接受大众的监督和统一管理,病毒代码很难藏身,而且现在Unix-like系统的软件大部分不是像windows那样随意下载传播,而是都有人维护和上传的,一旦发生问题,很快就能定位,找出病毒来源。我很少见人不是从自己的源中安装软件,即使不是自己的源,也是sorceforge之类的网站,而二进制的安装需要编译,这就让病毒传播途径截断了,病毒在这里遇到的是一个悖论:病毒要起作用就要让形成可执行文件,而形成可执行文件病毒就失去作用。(ps:承认自己的无知,其实我不知道编译会使病毒消失,这个不是我的研究结论)。对于大部分源内的二进制包,一般Linux软件管理器都有强制的md5验证机制,所以如果有病毒篡改,很容易就发现了。想散播病毒?Linux通过软件来机会太少了。
当传播途径被截断,利用漏洞被修补,触发条件不能达成的时候,病毒——恶意程序——也无法成为效果上的病毒,只能算是多余的程序罢了,而且很多时候他们连感染的能力都没有了,来了的时候来,然后温顺的等到连同病毒文件一起被删除。所以虽然Linux下也有不少杀毒软件,主要是对付跨平台操作时windows上的病毒的。
总之:Linux“不怕”病毒,而不是Linux“没有”病毒,借用某篇文章的结论:现在存在的 Linux 病毒仅仅是技术上的好奇;现实是没有能养得活的 Linux 病毒
Ⅱ 在linux环境下,java怎么实现从word格式转换为pdf格式
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* @author XuMing Li
*
* @version 1.00, 2007-4-9
*
*/
public class D2P {
private ActiveXComponent wordCom = null;
private Object wordDoc = null;
private final Variant False = new Variant(false);
private final Variant True = new Variant(true);
/**
* 打开word文档
*
* @param filePath
* word文档
* @return 返回word文档对象
*/
public boolean openWord(String filePath) {
//建立ActiveX部件
wordCom = new ActiveXComponent( "Word.Application ");
try {
//返回wrdCom.Documents的Dispatch
Dispatch wrdDocs = wordCom.getProperty( "Documents ").toDispatch();
//调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
wordDoc = Dispatch.invoke(wrdDocs, "Open ", Dispatch.Method,
new Object[] { filePath }, new int[1]).toDispatch();
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
/**
* 关闭word文档
*/
public void closeWord() {
//关闭word文件
wordCom.invoke( "Quit ", new Variant[] {});
}
/**
* * 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件 *
*
* @param sourceFilePath
* 源文件路径 *
* @param destinPSFilePath
* 首先生成的PS文件路径 *
* @param destinPDFFilePath
* 生成PDF文件路径
*/
public void docToPDF(String sourceFilePath, String destinPSFilePath,
String destinPDFFilePath) {
if (!openWord(sourceFilePath)) {
closeWord();
return;
}
//建立Adobe Distiller的com对象
ActiveXComponent distiller = new ActiveXComponent(
"PDFDistiller.PDFDistiller.1 ");
try {
//设置当前使用的打印机,我的Adobe Distiller打印机名字为 "Adobe PDF "
wordCom.setProperty( "ActivePrinter ", new Variant( "Adobe PDF "));
//设置printout的参数,将word文档打印为postscript文档。目前只使用了前5个参数,如果要使用更多的话可以参考MSDN的office开发相关api
//是否在后台运行
Variant Background = False;
//是否追加打印
Variant Append = False;
//打印所有文档
int wdPrintAllDocument = 0;
Variant Range = new Variant(wdPrintAllDocument);
//输出的postscript文件的路径
Variant OutputFileName = new Variant(destinPSFilePath);
Dispatch.callN((Dispatch) wordDoc, "PrintOut ", new Variant[] {
Background, Append, Range, OutputFileName });
System.out.println( "由word文档打印为ps文档成功! ");
//调用Distiller对象的FileToPDF方法所用的参数,详细内容参考Distiller Api手册
//作为输入的ps文档路径
Variant inputPostScriptFilePath = new Variant(destinPSFilePath);
//作为输出的pdf文档的路径
Variant outputPDFFilePath = new Variant(destinPDFFilePath);
//定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件
Variant PDFOption = new Variant( " ");
//调用FileToPDF方法将ps文档转换为pdf文档
Dispatch.callN(distiller, "FileToPDF ", new Variant[] {
inputPostScriptFilePath, outputPDFFilePath, PDFOption });
System.out.println( "由ps文档转换为pdf文档成功! ");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeWord();
}
}
public static void main(String[] argv) {
D2P d2p = new D2P();
// d2p.openWord( "c:/12.doc ");
// d2p.callWordMacro( "c:/12.docc ", "MyWordMacro ",
// new String[] { "这是调用word宏的测试程序 " });
d2p.docToPDF( "d:/12.doc ", "c:/1p.ps ", "c:/1p.pdf ");
}
}
Ⅲ 常用的组态软件有哪些
组态软件有ChinPMC、InTouch、QTouch、IFix、Citech。
1、ChinPMC
ChinPMC在传统组态软件的基础上,提供管控一体化组态工具及多终端一体化运行环境,以数据展示的直观性(图形、图表、曲线、报表)、图形格式的矢量化、数据监控的实时性、事件处理的智能性、多系统集成的开放性、系统平台的无关性为重要特征。
为生产企业的安全生产、环境监测、节能减排和物联网应用提供开发和运行支撑工具集。
2、InTouch
最早进入我国的组态软件。在80年代末、90年代初,基于Windows3.1的InTouch软件曾让我们耳目一新,并且InTouch提供了丰富的图库。
但是,早期的InTouch软件采用DDE方式与驱动程序通信,性能较差,最新的InTouch7.0版已经完全基于32位的Windows平台,并且提供了OPC支持。
3、QTouch
由着名的QT类库开发而成,完全具有跨平台和统一工作平台特性,可以跨越多个操作系统,如unix、linux、windows等,同时在多个操作上实现统一工作平台,即可以在windows上开发组态,在linux上运行等。
QTouch为HMI/SCADA组态软件,提供嵌入式linux平台的人机界面产品。
4、IFix
Intellution公司以Fix组态软件起家,1995年被爱默生收购,现在是爱默生集团的全资子公司,Fix6.x软件提供工控人员熟悉的概念和操作界面,并提供完备的驱动程序(需单独购买)。
5、Citech
CiT公司的Citech也是较早进入中国市场的产品。Citech具有简洁的操作方式,但其操作方式更多的是面向程序员,而不是工控用户。
Citech提供了类似C语言的脚本语言进行二次开发,但与iFix不同的是,Citech的脚本语言并非是面向对象的,而是类似于C语言,这无疑为用户进行二次开发增加了难度。
(3)linuxactivex扩展阅读
组态软件功能
1、可以读写不同类型的PLC、仪表、智能模块和板卡,采集工业现场的各种信号,从而对工业现场进行监视和控制。
2、可以以图形和动画等直观形象的方式呈现工业现场信息,以方便对控制流程的监视也可以直接对控制系统发出指令、设置参数干预工业现场的控制流程。
3、可以将控制系统中的紧急工况(如报警等)通过软件界面、电子邮件、手机短信、即时消息软件、声音和计算机自动语音等多种手段及时通知给相关人员,使之及时掌控自动化系统的运行状况。
4、可以对工业现场的数据进行逻辑运算和数字运算等处理,并将结果返回给控制系统。
5、可以对从控制系统得到的以及自身产生的数据进行记录存储。在系统发生事故和故障的时候,利用记录的运行工况数据和历史数据,可以对系统故障原因等进行分析定位,责任追查等。通过对数据的质量统计分析,还可以提高自动化系统的运行效率,提升产品质量。
6、可以将工程运行的状况、实时数据、历史数据、警告和外部数据库中的数据以及统计运算结果制作成报表,供运行和管理人员参考。