ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

依我看GTK与QT之争既不是GNOME和KDE之争,也不是GPL和QPL之争,
而是美国人和欧洲人之争,看看KDE的开发过程就知道了,KDE几乎
全是欧洲的开发者,而GNOME主要是美国的开发者,美国人一向对 
欧洲人很不服气,因此支持KDE的只有SuSE,而redhat和slackware
还有debian对KDE很不感冒.而美国的Linux老大redhat对GNOME情
有独钟,出人出钱:)
 
KDE的好处在应用软件多,QT是C++的,代码可重用性好,但是由于
开发时间早,好多东西,后来才加,功能不好,如Drag&Drop Protocol, 
还有COBRA的支持是用的mico.另外其致命伤就是QT的license,到现 
在还是QPL,不是GPL,这也是被猛烈攻击的一个地方.
 
GNOME的优点是设计思想先进,速度比较快,毕竟GTK是C写的,并且  
GNOME得到GNU的全力支持,这可是一个非同小可的问题,感觉KDE
现在变成了后娘养的孩子:)GNOME的缺点是现在没有主力Window
Manager,而enlighment不是一个实用的WM,它将来占的资源只怕
比KDE还多.
 
现在我觉得KDE的生死之战就在于那一批Koffice的进度,一旦Koffice
普及,GNOME就不可能完全击败KDE,甚至KDE利用Koffice来击败GNOME
都很有可能.而GNOME现在也要急剧扩张Application,不过我觉得
美国的程序员比欧洲的程序员要勤奋得多:)现在GTK.ORG上的APP
的增长率要比KDE的快.我个人还是喜欢GTK,原因一是GTK不象Win95
二是 GTK是用C的:)
 
总而言之, 美国人很有可能击败欧洲人,从而会赢得这场GNOME VS KDE
的战争.   
posted @ 2005-09-28 10:51 ivaneeo 阅读(11345) | 评论 (14)编辑 收藏

Ubuntu Scientists

Science on Linux

The aim of this page is to become a useful resource for scientist and science students using Ubuntu (or any other) Linux. Please add information or comments.

Introduction

Linux is a great operating system for scientists, for many reasons:

  • It is stable, secure and runs on all sorts of hardware, from embedded systems to supercomputers.

  • It is possible to create a highly customised setup to do what you want.

  • Repetitive tasks can be automated.

  • There are lots of useful free scientific programs and tools.

Although some people say that linux is not user friendly enough for the desktop yet, scientists are usually a bit more familier with computers, and don't mind learning how to do things.

Applications

Some applications that scientists use in Linux. Please add some more.

See also: SAL (Scientific Applications on Linux) is a collection of information and links to software that will be of interest to scientists and engineers. The broad coverage of Linux applications will also benefit the whole Linux/Unix community. There are currently 3,017 entries in SAL. [WWW] http://sal.iatp.by/

Physics

  • Cernlib - A suite of data analysis tools and libraries created for use in physics experiments, but also with applications to other fields such as the chemical and biological sciences. [WWW] Cernlib

  • JaxoDraw - A Java program for drawing Feynman diagrams [WWW] JaxoDraw

  • ROOT - An Object Oriented Data Analysis Framework [WWW] ROOT

  • Geant4 - A toolkit for the simulation of the passage of particles through matter [WWW] Geant4

  • CLHEP - A Class Library for High Energy Physics [WWW] CLHEP

  • Pluto++ - A Monte Carlo simulation tool for hadronic physics [WWW] Pluto++

  • Data files from the Particle Data Group [WWW] http://pdg.lbl.gov/2005/html/computer_read.html

Chemistry

  • GChemPaint - A 2D chemical structures editor [WWW] GChemPaint

  • ghemical - A molecular modeling and computational chemistry package that provides molecular mechanics, semi-empirical (via MOPAC7), and ab initio (via MPQC) calculations [WWW] ghemical

  • gdis - A molecular display program that supports OpenGL and POVRay rendering. [WWW] gdis

  • OpenBabel - A chemical file format conversion program. [WWW] OpenBabel

  • Chemtool and Xdrawchem - 2D molecule drawing programs similar to ChemDraw. [WWW] Chemtool and [WWW] xdrawchem

  • mpqc - The Massively Parallel Quantum Chemistry Program. Ab initio quantum chemical computational package. [WWW] mpqc

  • [WWW] Linux4Chemistry - list of linux applications which may be useful for chemists

Biology

Mathematics

  • Octave - GNU Octave is a high-level language, primarily intended for numerical computations. (Similar to MATLAB). [WWW] Octave

  • SciCraft - Addon to Octave, clones Simulink. Still in developement, blocks have to be written by the user. It is supposed to specialize in bioinformatics functions [WWW] SciCraft

  • Scilab - Another MATLAB-like software. [WWW] Scilab

  • SciCos - A free Simulink-like addon to Scilab [WWW] SciCos

  • Maxima - A computer algebra system (xmaxima is its X interface)

  • GNU MP - GNU Multiprecision arthmetic library. Useful if you need to use very big numbers in a C program. [WWW] GMP

  • GSL - the Gnu Scientific Library [WWW] GSL

  • R - for statistical computing and graphics. [WWW] R

  • OOStatistics - A statistics macro for openoffice calc. [WWW] OOStatistics

  • freefem - A PDE oriented language using Finite Element Method - 2D and 3D versions. [WWW] freefem

  • SciPy - An open source library of scientific tools for Python. [WWW] SciPy

  • F2PY - Fortran to Python interface generator provides a connection between Python and Fortran languages. [WWW] F2PY

Astronomy

Electronics

  • Eagle - A printed circuit board design tool. [WWW] Eagle

  • oregano - Schematic capture, netlists, and spice for simulations. [WWW] oregano

  • gEDA - GPL'd suite of Electronic Design Automation tools. [WWW] gEDA

  • Qucs - An integrated circuit simulator [WWW] Qucs

Computer Science

Geography

  • UbuntuGIS Geographical Information System

  • ncview - A very fast program for viewing netCDF files (a standard widely used in meteorology, climate and oceanography) [WWW] ncview

  • Generic Mapping Tools (GMT) - a mapping program that can also be used to make pretty graphs. [WWW] GMT

Distributed Computing

  • openmosix - Turns a network of ordinary computers into a supercomputer. [WWW] openmosix

  • boinc - A software platform for distributed computing using volunteered computer resources [WWW] boinc

    • projects include Climateprediction.net,Einstein@home,LHC@home,Predictor@home,SETI@home

Tools

  • Xfig - A diagram and figure creation tool. Can import GIF, JPEG, and EPS figures and can export to Postscipt, LaTeX, and bitmap files. [WWW] Xfig

  • Dia - A "Visio" like diagram tool. Especially useful for simple circuits and flowcharts. [WWW] Dia

  • BIKA - A laboratory information management system (LIMS) built on top of Zope and Plone, and coded in Python [WWW] BIKA

Plotting Tools
  • GNUPlot - A command-line driven 2D/3D plotting tool. Can perform data fitting and exports to PNG, PS, Xfig, and Latex formats. Has python bindings (python-gnuplot) for including in other programs or scripts. [WWW] gnuplot

  • grace - A 2D WYSIWYG plotting tool that exports to JPEG, PNG, EPS, PDF, and SVG. Also does curve fitting. [WWW] grace

  • PGPLOT - Fortran- or C-callable graphics subrutine package for making scientific graphs. [WWW] PGPLOT

  • SciGraphica - A scientific application for data analysis and technical graphics. Attempts to be a [WWW] "Microcal Origin" clone [WWW] SciGraphica

  • Qtiplot - A 2D/3D, Qt based plotting tool that attempts to be another "Origin" clone [WWW] Qtiplot

  • LabPlot - Another Qt based 2D/3D GUI plotting tool that also does curve fitting, supports many data formats, LaTeX labeling, GSL functions, and statistics. [WWW] LabPlot

  • Veusz - A scientific plotting package written in Python. [WWW] veusz.

  • Gri - A scientific graphics language. [WWW] Gri

Word Processing Tools
  • LaTeX - WYGIWYW (What You Get Is What You Want) text mark up system. What real scientist write papers with. [WWW] LaTeX

  • Lyx - A WYSIWYG LaTeX frontend. [WWW] Lyx

  • Kile - A LaTeX-frontend for KDE, with support for syntax highlighting and convenient palettes for all standard mathematical symbols and text formatting. It also provides easy access to forward and inverse search facilities. [WWW] Kile

  • eqe - Allows you write equations in Latex and drag and drop them into other apps [WWW] eqe

  • Conglomerate - An XML editor, to create DocBook or similar formats. [WWW] Conglomerate

  • Jabref - A graphical bibtex bibliography manager which can be used in conjunction with lyx. It is java based. [WWW] Jabref

  • Texmaker - Like Kile but loads faster ;-) [WWW] Texmaker

  • TeXmacs - A wysiwyg scientific text editor [WWW] TeXmacs

    • doubles as an interface for computer algebra systems like [Maxima], maple, mupad, axiom, giac, GTybalt, Macaulay 2, pari, yacas

    • can also be used as a front end for [R], Octave, [GNUplot], [Xfig], [Dr. Geo], [Eukleides],[Qcl]

  • preview-latex - (almost) turns emacs into a WYSIWYG-LaTeX-frontend [WWW] preview-latex

  • [WWW] latex2html , [WWW] tth and [WWW] hevea for converting LaTeX to html.

  • gaim-latex - A small gaim (see GaimHowto) plugin which allow you to insert LaTeX formulae into im conversations. [WWW] gaim-latex

Ubuntu Packages

Science Section
Mathematics Section
TeX Section

Alternatives to Proprietry Scientific Software

hopefully this list will get long enough to deserve its own page.

Proprietary

Free alternative

Info

Link

Matlab

Octave

Matrix based computing environment

[WWW] Octave

Matlab

Scilab

see above

[WWW] Scilab

Simulink

SciCraft

Based on Octave (Available for Debian, I think)

[WWW] SciCraft

Simulink

SciCos

Based on Scilab (Not found in Ubuntu Repos)

[WWW] SciCos

Origin

SciGraphica & Qtiplot

Data plotting and analysis

[WWW] SciGraphica & [WWW] Qtiplot

Hardware

Data acquisition

Computer controlled systems

  • RTAI - Real-Time Application Interface is a hard real-time extension to the Linux kernel [WWW] http://www.rtai.org/

Other information

Other Linux Distributions for Scientists

  • [WWW] Quantian A Knoppix / Debian variant tailored to numerical and quantitative analysis.

  • [WWW] Debian-Med Debian-Med is a "Custom Debian Distribution" for medical practice and research.

    • debian-med metapackages are in Ubuntu(Universe): to list them type:  apt-cache search debian-med 

  • [WWW] Scientific Linux Linux release put together by Fermilab and CERN based on RH

  • [WWW] Madrake4Chemistry is about using Madrake Linux for chemistry

Unofficial Ubuntu/Debian repositories with science software

Mailing Lists about Linux and Science

Related Wiki Pages

UbuntuSciencePackages is a list of packages that are in the official Ubuntu Repositories that scientist use

UbuntuScienceMetaPackages discusses possible science metapackages

Forum Threads

Links

Books

(2005-09-26 06:17:30由KevinGoldstein编辑)

posted @ 2005-09-26 15:34 ivaneeo 阅读(2368) | 评论 (1)编辑 收藏

Ubuntu uses sudo to allow a normal user administrative privileges. Thus the traditional UNIX 'root' account is disabled (i.e. it is not possible to log in as root). All the graphical configuration utilities use sudo by default. Thus when Synaptic or something similar asks you for a password, it is asking for your password.

The first user created is part of the admin group, which can use sudo. Any users created after that are not by default. It is recommended that all users of Ubuntu use sudo, as it provides clear benefits to security.

Notes

  • The password is stored by default for 15 minutes. After that time, you will need to enter your password again

  • To run the graphical configuration utilities with sudo, simply launch the application via the menu.

  • To run a program using sudo that normally is run as the user, such as gedit, go to Applications --> Run Application and enter 'gksudo gedit'. For users of Kubuntu, used 'kdesu' in replacement for gksudo. Breezy users, go to Applications --> System Tools --> Run as different user.

  • To use sudo on the command line, preface the command with sudo, as below.

sudo chown bob *

To start a root shell (i.e. a command window where you can run root commands) use:

sudo -s

Warning: sudo -s doesn't change the environment variables ($HOME, $PATH etc). It can have some bad side effects. You can use sudo -i to initialize a full root environment.

Adding users

Warty

In Warty, adding a new user involves editing the /etc/sudoers file. To edit that file, you must use 'visudo' as it will error check the file before exiting. To add a user with the same administration rights as the first user, add the following lines to the file: '$newuser ALL=(ALL) ALL'. Replace the $newuser with the username.

Hoary

To add a new user to sudo, open the "Users and Groups" tool from System --> Adminitration menu. Then click on the user and then on properties. Choose the "User Privileges" tab. In the tab, find "Executing system administration tasks" and check that.

Benefits of sudo

The benefits of leaving root disabled by default include the following.

  • Initially the Ubuntu team wanted the easiest install possible. By not enabling root, a couple of steps requiring user interaction during install could be avoided. (Colin Watson)

  • Even more significantly, if root were enabled during install, the user would be required to forever remember the password they chose--even though they would rarely use it. Root passwords are often forgotten by users who are new to the Unix security model. (Matt Zimmerman)

  • It avoids the "I can do anything" interactive login by default--you will be prompted for a password before major changes can happen, which should make you think about the consequences of what you are doing. If you were logged in as root, you could just delete some of those "useless folders" and not realize you were in the wrong directory until it's too late. It's been good Unix practice for a long time to "su-command-^D" regularly instead of staying in a root shell--unless you're doing serious system maintenance (at which point you can still "sudo su"). (Jim Cheetham and Andrew Sobala)

  • Sudo adds a log entry of the command(s) run (In /var/log/auth.log). If you mess up, you can always go back and see what commands were run. (Andrew Zbikowski)

  • Every cracker trying to brute-force their way into your box will know it has an account named "root" and will try that first. What they don't know is what the usernames of your other users are.

  • Allows easy transfer for admin rights, in a short term or long term period, by added and removing users from groups, while not compromising the root account. (Stuart Bishop)

Security

While there are various advantages and disadvantages to this approach, compared with the traditional superuser model. Neither is clearly superior overall.

  • By encouraging the execution of single commands with root privileges, rather than opening a shell, sudo:

    • Reduces the amount of time spent with root privileges, and thus the risk of inadvertently executing a command as root

    • Provides a more useful audit trail

  • Having a separate root password (the traditional model) provides an extra layer of protection if an administrative user's password is compromised

  • In either case, if the administrative user (who uses sudo or su to become root) is compromised, the attacker can generally gain root through an indirect attack

Possible issues with the "sudo" model

Although for desktops the benefits of using sudo are great, there are possible issues which need to be noted:

  • Some packages from universe are effectively broken (e.g. webmin) or become dangerous to use. A good workaround is to enable the root account before dealing with the affected packages (sudo su-; passwd <password>) and to lock it again afterwards (su -; passwd -l).

  • Redirecting the output of commands run with sudo can catch new users out (consider "sudo ls > /root/somefile"). Workarounds for this include using "sudo sh -c 'ls > /root/somefile'" (but escaping for this gets very ugly very quickly), using [WWW] Adverbio, or simply using sudo -s to get a root shell and going from there

    • MattZimmerman: A simple approach which works for most cases is to use dd(1): ls | sudo dd of=/root/somefile

  • In a lot of office environments the ONLY local user on a system is root. All other users are imported using NSS techniques such as nss-ldap. To setup a workstation, or fix it, in the case of a network failure where nss-ldap is broken, root is required. This tends to leave the system unusable unless cracked.

    • JerryHaltom: Perhaps in these cases it neccessitates the creation of a local account: "admin" with sudo to root privileges.

Misconceptions

  • Isn't sudo less secure than su?

    • The basic security model is the same, and therefore these two systems share their primary weaknesses. Any user who uses su or sudo must be considered to be a privileged user. If that user's account is compromised by an attacker, the attacker can also gain root privileges the next time the user does so. The user account is the weak link in this chain, and so must be protected with the same care as root.

      On a more esoteric level, sudo provides some features which encourage different work habits, which can positively impact the security of the system. sudo is commonly used to execute only a single command, while su is generally used to open a shell and execute multiple commands. The sudo approach reduces the likelihood of a root shell being left open indefinitely, and encourages the user to minimize their use of root privileges.

  • I won't be able to enter single-user mode!

    • The sulogin program in Ubuntu is patched to handle the default case of a locked root password.

Enabling the root account

Note: This is not recommended!

To enable the root account (i.e. set a password) use:

sudo passwd root

Enter your existing password
Enter password for root
Confirm password for root

Disabling the root account

Note: This is if you have already enabled a root account and wish to disable it again. To disable the root account after you have enabled it use:

sudo passwd -l root

This locks the root account.

Running GUI applications with Root permissions

It is generally recommended that you do not run applications with root privileges, but if you have to, it is recommended that you do not run "sudo {GUIAPP}", as sudo may not set up the environment correctly, and particularly on KDE this can be detrimental. Instead, always use gksudo {GUIAPP} or kdesu {GUIAPP}.

posted @ 2005-09-26 14:48 ivaneeo 阅读(747) | 评论 (0)编辑 收藏

1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java
动管理栈和堆,程序员不能直接地设置栈或堆。

  2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是
,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享
,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器
Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动
态分配内存,存取速度较慢。

  3. Java中的数据类型有两种。

  一种是基本类型(primitive types), 共有8种,即int, short, long, byte, float
, double, boolean, char(注意,并没有string的基本类型)。这种类型的定义是通
过诸如int a = 3; long b = 255L;的形式来定义的,称为自动变量。值得注意的是
,自动变量存的是字面值,不是类的实例,即不是类的引用,这里并没有类的存在。
如int a = 3; 这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的
数据,由于大小可知,生存期可知(这些字面值固定定义在某个程序块里面,程序块
退出后,字段值就消失了),出于追求速度的原因,就存在于栈中。

  另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时
定义:

int a = 3;
int b = 3;

  编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有
没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向
3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字
面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。

  特别注意的是,这种字面值的引用与类对象的引用不同。假定两个类对象的引用
同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个
对象引用变量也即刻反映出这个变化。相反,通过字面值的引用来修改其值,不会导
致另一个指向此字面值的引用的值也跟着改变的情况。如上例,我们定义完a与b的值
后,再令a=4;那么,b不会等于4,还是等于3。在编译器内部,遇到a=4;时,它就
会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有
了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。

  另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包
装起来的类。这些类数据全部存在于堆中,Java用new()语句来显示地告诉编译器,
在运行时才根据需要动态创建,因此比较灵活,但缺点是要占用更多的时间。 4. String
是一个特殊的包装类数据。即可以用String str = new String("abc");的形式来创
建,也可以用String str = "abc";的形式来创建(作为对比,在JDK 5.0之前,你从
未见过Integer i = 3;的表达式,因为类与字面值是不能通用的,除了String。而在
JDK 5.0中,这种表达式是可以的!因为编译器在后台进行Integer i = new Integer
(3)的转换)。前者是规范的类的创建过程,即在Java中,一切都是对象,而对象是类
的实例,全部通过new()的形式来创建。Java中的有些类,如DateFormat类,可以通
过该类的getInstance()方法来返回一个新创建的类,似乎违反了此原则。其实不然
。该类运用了单例模式来返回类的实例,只不过这个实例是在该类内部通过new()来
创建的,而getInstance()向外部隐藏了此细节。那为什么在String str = "abc";
中,并没有通过new()来创建实例,是不是违反了上述原则?其实没有。

  5. 关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步
骤:

  (1)先定义一个名为str的对String类的对象引用变量:String str;

  (2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值
为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地
址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址
,则查找对象o,并返回o的地址。

  (3)将str指向对象o的地址。

  值得注意的是,一般String类中字符串值都是直接存值的。但像String str =
"abc";这种场合下,其字符串值却是保存了一个指向存在栈中数据的引用!

  为了更好地说明这个问题,我们可以通过以下的几个代码进行验证。

String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true

  注意,我们这里并不用str1.equals(str2);的方式,因为这将比较两个字符串
的值是否相等。==号,根据JDK的说明,只有在两个引用都指向了同一个对象时才返
回真值。而我们在这里要看的是,str1与str2是否都指向了同一个对象。
结果说明,JVM创建了两个引用str1和str2,但只创建了一个对象,而且两个引用都
指向了这个对象。

  我们再来更进一步,将以上代码改成:

String str1 = "abc";
String str2 = "abc";
str1 = "bcd";
System.out.println(str1 + "," + str2); //bcd, abc
System.out.println(str1==str2); //false

  这就是说,赋值的变化导致了类对象引用的变化,str1指向了另外一个新对象!
而str2仍旧指向原来的对象。上例中,当我们将str1的值改为"bcd"时,JVM发现在栈
中没有存放该值的地址,便开辟了这个地址,并创建了一个新的对象,其字符串的值
指向这个地址。

  事实上,String类被设计成为不可改变(immutable)的类。如果你要改变其值,
可以,但JVM在运行时根据新值悄悄创建了一个新对象,然后将这个对象的地址返回
给原来类的引用。这个创建过程虽说是完全自动进行的,但它毕竟占用了更多的时间
。在对时间要求比较敏感的环境中,会带有一定的不良影响。

  再修改原来代码:

String str1 = "abc";
String str2 = "abc";

str1 = "bcd";

String str3 = str1;
System.out.println(str3); //bcd

String str4 = "bcd";
System.out.println(str1 == str4); //true

  str3这个对象的引用直接指向str1所指向的对象(注意,str3并没有创建新对象
)。当str1改完其值后,再创建一个String的引用str4,并指向因str1修改值而创建
的新的对象。可以发现,这回str4也没有创建新的对象,从而再次实现栈中数据的共
享。

  我们再接着看以下的代码。

String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); //false

  创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。

String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //false

  创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。

  以上两段代码说明,只要是用new()来新建对象的,都会在堆中创建,而且其字
符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。

  6. 数据类型包装类的值不可修改。不仅仅是String类的值不可修改,所有的数
据类型包装类都不能更改其内部的值。 7. 结论与建议:

  (1)我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为
,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯
定的是,指向String类的引用被创建了。至于这个引用到底是否指向了一个新的对象
,必须根据上下文来考虑,除非你通过new()方法来显要地创建一个新的对象。因此
,更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对
象引用变量指向了某个值为"abc"的String类。清醒地认识到这一点对排除程序中难
以发现的bug是很有帮助的。

  (2)使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度
,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String
 str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值
是否相等,是否有必要创建新对象,从而加重了程序的负担。这个思想应该是享元模
式的思想,但JDK的内部在这里实现是否应用了这个模式,不得而知。

  (3)当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类
的引用是否指向同一个对象时,用==。

  (4)由于String类的immutable性质,当String变量需要经常变换其值时,应该考
虑使用StringBuffer类,以提高程序效率。
posted @ 2005-09-26 10:13 ivaneeo 阅读(664) | 评论 (0)编辑 收藏

随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然
的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。

一、从基础开始:

常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:
为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限
等问题,这些问题其实都不是很难的,只要了解了 Linux 的基础之后,应该就可以很轻
易的解决掉这方面的问题。而有些朋友们常常一接触Linux 就是希望构架网站,根本没
有想到要先了解一下Linux 的基础。这是相当困难的。

二、Linux命令是必须学习

虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命
令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的
,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图
象和流媒体文件的制作。举一个例子:Linux的常用命令find,察看man文档,初学者一定会
觉得太复杂而不原意用,但是你一旦学会就爱不释手.它的功能实在太强了,在配合exec参
数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操
作用图形界面的工具来完成,恐怕要多花十几陪的时间.

不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令
,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可
以进一步理解Linux系统:

安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh

文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln

系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd ki
ll、 crontab、 tar、 unzip、 gunzip 、last

网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogi
n rcp 、finger 、mail 、nslookup

系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、
 pswho

三、选择一本好的工具书

工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途
。目前国内关于Linux的书籍有很多不过精品的不多,笔者强烈建议阅读影印本的“O'R
eilly原版Linux图书http://www.oreilly.com.cn/  ”,而且出版社还提供了一个非常
好的路线图:http://www.oreilly.com.cn/guide/guide_linux.php 见图-1。

四、选择一个适合你的Linux发行版本

目前全球有超过1百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请
根据你的需求和能力,Redhat Linux 和Debian Linux是网络管理员的理想选择。对于英
语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有
一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。

五、 养成在命令行下工作:

一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应
用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以
指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时
也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程
系统。

六、 选择一个适合你的Linux社区;

随着Linux应用的扩展,出现了不少Linux社区。其中有一些非常优秀的社区:www.linu
xforum.net(国内最高水平GNU站点)、http://www.chinaunix.net/ (中国最大的Uni
x技术社区),但是这几个论坛往往是Linux高手的舞台,如果在探讨高级技巧的论坛张
贴非常初级的问题经常会没有结果。推荐适于初学者的Linux社区:

Linux伊甸园 http://www.linuxeden.com/

中国Linux公社 http://www.linuxfans.org/nuke/index.php

七、勤于实践:

要增加自己Linux 的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安
装一个 Linux 发行版本,然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必
然大有斩获。此外,人脑不像计算机的硬盘一样,除非硬盘坏掉了或者是资料被你抹掉
了,否则储存的资料将永远而且立刻的记忆在硬盘中。在人类记忆的曲线中,你必须要
不断的重复练习才会将一件事情记得比较熟。同样的,学习 Linux 也一样,如果你无法
经常学习的话,学了后面的,前面的忘了。你对Linux命令熟悉后你可以开始搭建一个小
的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强
大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服
务,可以慢慢来。需要说明的是这个Linux网络对于初学者有两三台计算机即可,其中一
台计算机最好安装Windows系统。自己多动手,不要非要等着别人帮你解决问题。

七、 如何得到联机帮助

和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学
者是往往不够的。其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮
助,只是可能你还没有发现和使用它们的技巧。

1. 主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安
全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。

2. 查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非
常有参考价值通常40%的问题同样可以解决。

八、在Linux论坛获取帮助

如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。Linux的使用者一般
都是专业人士,他们有着很好的电脑背景且愿意协助他人,Linux高手更具有鼓励新手的
文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问
题,不要草率的发问,否则只会得到到草率的回答或者根本得 不到任何答案。越表现出
在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。最好先搜寻一下论坛
是否有您需要的文章。这样可以获得事半功倍的效果。

下面笔者在论坛看到的一个好问题:“安装红旗4.0 后,系统紫光输入法自带的双拼方
案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练,笔者五分钟
后就给出了解决方法:“首先备份原文件到其他目录,然后删掉/usr/local/unispim/u
nispimsp.ksc,编辑/usr/local/unispim/unispimsp.ini ,最后重启动计算机,生成新
的unispimsp.ksc”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知
道问题是怎样解决的,这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮
助的完整解决方案,这可能对他们也很有用。

下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Li
nux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢” 这样的问题我想即
使Linux高手也很难快速准确精练的回答你。

你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转
储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可
能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证
。另外把这个问题放在其他Linux社区请求帮助也是一种选择。如果得不到答案,请不要
以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区
是不错的选择。

另外发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回
复每个帖子的义务。它不是技术支持。

9.用Unix思维学习Linux

Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变
比暂时性的技术提高更有用,因为他能帮助你加快学习速度。

10.学习专业英文

如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的,最全面的文档都是
英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档
,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看README,
再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果说明文档不
看,结果出了问题再去论坛来找答案反而浪费时间。

11.最后是Linux学习的路线图:

1. 掌握至少50个以上的常用命令。  

2. 熟悉Gnome/KDE等X-windows桌面环境操作 。

3. 掌握.tgz、.rpm等软件包的常用安装方法

4. 学习添加外设,安装设备驱动程序(比如网卡)

5. 熟悉Grub/Lilo引导器及简单的修复操作 。

6. 熟悉Linux文件系统 和目录结构。

7. 掌握vi,gcc,gdb等常用编辑器,编译器,调试器 。

8. 理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。

9. 学习Linux环境下的组网。
posted @ 2005-09-26 10:08 ivaneeo 阅读(580) | 评论 (0)编辑 收藏

*深入分析Windows和Linux动态库应用异同*
**
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率

,增加程序的可扩展性,便于模块化管理。

但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual
C++编制的动态库移植到Linux上的方法和经验。

1、引言

动态库(Dynamic Link Library
abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。

采用动态库技术对于升级软件版本更加容易。与静态库(Static Link
Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。

在Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库移植到Linux下的方法。

2、动态库技术

2.1 Windows动态库技术

动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文件,称之为资源动态链接库。
通常动态库以.dll,.drv、.fon等作为后缀。

相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。

Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。

DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。
根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。

(1)静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(Windows系统负责对DLL调用次数的计数),调用方式简单,能够满足通常的要求。
通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中声明一下。

LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。

(2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括:

①LoadLibrary(或MFC 的AfxLoadLibrary),装载动态库。

②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。

③FreeLibrary(或MFC的AfxFreeLibrary),释放动态链接库。

在windows中创建动态库也非常方便和简单。在Visual
C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++中,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。

动态库输出函数也有两种约定,分别是基于调用约定和名字修饰约定。DLL程序定义的函数分为内部函数和导出函数,动态库导出的函数供其它程序模块调用。通常可以有下面几种方法导出函数:

①采用模块定义文件的EXPORT部分指定要输入的函数或者变量。

②使用MFC提供的修饰符号_declspec(dllexport)。

③以命令行方式,采用/EXPORT命令行输出有关函数。

在windows动态库中,有时需要编写模块定义文件(.DEF),它是用于描述DLL属性的模块语句组成的文本文件。

2.2 Linux共享对象技术

在Linux操作系统中,采用了很多共享对象技术(Shared Object),虽然它和Windows里的动态库相对应,但它并不称为动态库。
相应的共享对象文件以.so作为后缀,
为了方便,在本文中,对该概念不进行专门区分。Linux系统的/lib以及标准图形界面的/usr/X11R6/lib等目录里面,就有许多以so结尾的共享对象。

同样,在Linux下,也有静态函数库这种调用方式,相应的后缀以.a结束。Linux采用该共享对象技术以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活性。Linux还可以通过LD-PRELOAD变量让开发人员可以使用自己的程序库中的模块来替换系统模块。
同Windows系统一样,在Linux中创建和使用动态库是比较容易的事情,在编译函数库源程序时加上-shared选项即可,这样所生成的执行程序就是动态链接库。通常这样的程序以so为后缀,在Linux动态库程序设计过程中,通常流程是编写用户的接口文件,通常是.h文件,编写实际的函数文件,以.c或.cpp为后缀,再编写makefile文件。对于较小的动态库程序可以不用如此,但这样设计使程序更加合理。

编译生成动态连接库后,进而可以在程序中进行调用。在Linux中,可以采用多种调用方式,同Windows的系统目录(..\system32等)一样,可以将动态库文件拷贝到/lib目录或者在/lib目录里面建立符号连接,以便所有用户使用。

下面介绍Linux调用动态库经常使用的函数,但在使用动态库时,源程序必须包含dlfcn.h头文件,该文件定义调用动态链接库的函数的原型。

(1)_打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag);
dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。

(2)取函数执行地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol);
dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。

(3)关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle);
dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

(4)动态库错误函数:dlerror,函数原型为: const char *dlerror(void);
当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。

在取到函数执行地址后,就可以在动态库的使用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在编写调用动态库的程序的makefile文件时,需要加入编译选项-rdynamic和-ldl。

除了采用这种方式编写和调用动态库之外,Linux操作系统也提供了一种更为方便的动态库调用方式,也方便了其它程序调用,这种方式与Windows系统的隐式链接类似。其动态库命名方式为"lib*.so.*"。在这个命名方式中,第一个*表示动态链接库的库名,第二个*通常表示该动态库的版本号,也可以没有版本号

在这种调用方式中,需要维护动态链接库的配置文件/etc/ld.so.conf来让动态链接库为系统所使用,通常将动态链接库所在目录名追加到动态链接库配置文件中。如具有X
window窗口系统发行版该文件中都具有/usr/X11R6/lib,它指向X window窗口系统的动态链接库所在目录。

为了使动态链接库能为系统所共享,还需运行动态链接库的管理命令./sbin/ldconfig。在编译所引用的动态库时,可以在gcc采用
–l或-L选项或直接引用所需的动态链接库方式进行编译。在Linux里面,可以采用ldd命令来检查程序依赖共享库。
3、两种系统动态库比较分析

Windows和Linux采用动态链接库技术目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同,下面从以下几个方面进行阐述。

(1)动态库程序编写,在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数作为初始化的人口,通常在导出函数的声明时需要有_declspec(dllexport)关键字。Linux下的gcc编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要到函数做特别声明,编写比较方便。

(2)动态库编译,在windows系统下面,有方便的调试编译环境,通常不用自己去编写makefile文件,但在linux下面,需要自己动手去编写makefile文件,因此,必须掌握一定的makefile编写技巧,另外,通常Linux编译规则相对严格。

(3)动态库调用方面,Windows和Linux对其下编制的动态库都可以采用显式调用或隐式调用,但具体的调用方式也不尽相同。

(4)动态库输出函数查看,在Windows中,有许多工具和软件可以进行查看DLL中所输出的函数,例如命令行方式的dumpbin以及VC++工具中的DEPENDS程序。在Linux系统中通常采用nm来查看输出函数,也可以使用ldd查看程序隐式链接的共享对象文件。

(5)对操作系统的依赖,这两种动态库运行依赖于各自的操作系统,不能跨平台使用。因此,对于实现相同功能的动态库,必须为两种不同的操作系统提供不同的动态库版本。

4、动态库移植方法

如果要编制在两个系统中都能使用的动态链接库,通常会先选择在Windows的VC++提供的调试环境中完成初始的开发,毕竟VC++提供的图形化编辑和调试界面比vi和gcc方便许多。完成测试之后,再进行动态库的程序移植。

通常gcc默认的编译规则比VC++默认的编译规则严格,即使在VC++下面没有任何警告错误的程序在gcc调试中也会出现许多警告错误,可以在gcc中采用-w选项关闭警告错误。

下面给出程序移植需要遵循的规则以及经验。

(1)尽量不要改变原有动态库头文件的顺序。通常在C/C++语言中,头文件的顺序有相当的关系。另外虽然C/C++语言区分大小写,但在包含头文件时,Linux必须与头文件的大小写相同,因为ext2文件系统对文件名是大小写敏感,否则不能正确编译,而在Windows下面,头文件大小写可以正确编译。

(2)不同系统独有的头文件。在Windows系统中,通常会包括windows.h头文件,如果调用底层的通信函数,则会包含winsock..h头文件。因此在移植到Linux系统时,要注释掉这些Windows系统独有的头文件以及一些windows系统的常量定义说明,增加Linux都底层通信的支持的头文件等。

(3)数据类型。VC++具有许多独有的数据类型,如__int16,__int32,TRUE,SOCKET等,gcc编译器不支持它们。
通常做法是需要将windows.h和basetypes.h中对这些数据进行定义的语句复制到一个头文件中,
再在Linux中包含这个头文件。例如将套接字的类型为SOCKET改为int。
(4)关键字。VC++中具有许多标准C中所没有采用的关键字,如BOOL,BYTE,DWORD,__asm等,通常在为了移植方便,尽量不使用它们,如果实在无法避免可以采用#ifdef
和#endif为LINUX和WINDOWS编写两个版本。

(5)函数原型的修改。通常如果采用标准的C/C++语言编写的动态库,基本上不用再重新编写函数,但对于系统调用函数,由于两种系统的区别,需要改变函数的调用方式等,如在Linux编制的网络通信动态库中,用close()函数代替windows操作系统下的closesocket()函数来关闭套接字。另外在Linux下没有文件句柄,要打开文件可用open和fopen函数,具体这两个函数的用法可参考文献[2]。

(6)makefile的编写。在windows下面通常由VC++编译器来负责调试,但gcc需要自己动手编写makefile文件,也可以参照VC++生成的makefile文件。对于动态库移植,编译动态库时需要加入-shared选项。对于采用数学函数,如幂级数的程序,在调用动态库是,需要加入-lm。

(7)其它一些需要注意的地方

①程序设计结构分析,对于移植它人编写的动态库程序,程序结构分析是必不可少的步骤,通常在动态库程序中,不会包含界面等操作,所以相对容易一些。

②在Linux中,对文件或目录的权限分为拥有者、群组、其它。所以在存取文件时,要注意对文件是读还是写操作,如果是对文件进行写操作,要注意修改文件或目录的权限,否则无法对文件进行写。

③指针的使用,定义一个指针只给它分配四个字节的内存,如果要对指针所指向的变量赋值,必须用malloc函数为它分配内存或不把它定义为指针而定义为变量即可,这点在linux下面比windows编译严格。同样结构不能在函数中传值,如果要在函数中进行结构传值,必须把函数中的结构定义为结构指针。

④路径标识符,在Linux下是"/",在Windows下是"\",注意windows和Linux的对动态库搜索路径的不同。

⑤编程和调试技巧方面。对不同的调试环境有不同的调试技巧,在这里不多叙述。

5、结束语

本文系统分析了windows和Linux动态库实现和使用方式,从程序编写、编译、调用以及对操作系统依赖等方面综合分析比较了这两种调用方式的不同之处,根

据实际程序移植经验,给出了将VC++编制的Windows动态库移植到Linux下的方法以及需要注意的问题,同时并给出了程序示例片断,实际在程序移植过程中,由于系统的设计等方面,可能移植起来需要注意的方面远比上面复杂,本文通过总结归纳进而为不同操作系统程序移植提供了有意的经验和技巧。
靖网先锋

posted @ 2005-09-26 10:04 ivaneeo 阅读(1381) | 评论 (0)编辑 收藏

安装Adobe AcrobatReader 7.0中文版

  • RPM包安装

1. 下RPM安装包

$ wget http://ardownload.adobe.com/pub/adobe/reader/unix/7x/7.0/chs/AdobeReader_chs-7.0.0-2.i386.rpm

2. 转换RPM包为DEB包,并安装

$ sudo alien AdobeReader_chs-7.0.0-2.i386.rpm
$ sudo dpkg -i adobereader-chs_7.0.0-3_i386.deb

3. 建立acroread执行脚本链接

$ sudo ln -sf /usr/local/Adobe/Acrobat7.0/bin/acroread /usr/bin/acroread
  • tar.gz包安装(推荐)

1. 下载tar.gz安装包

$ wget http://ardownload.adobe.com/pub/adobe/reader/unix/7x/7.0/chs/AdbeRdr70_linux_chs.tar.gz

2. 安装软件包

$ tar zxvf AdbeRdr70_linux_chs.tar.gz
$ sudo AdobeReader/INSTALL
$ sudo ln -sf /usr/local/Adobe/Acrobat7.0/bin/acroread /usr/bin/acroread

3. 设置程序菜单项

$ sudo vi /usr/share/applications/AcrobatReader.desktop

//输入如下内容
[Desktop Entry]
Name=Acrobat Reader 7
Comment=Acrobat Reader 7
Exec=/usr/local/Adobe/Acrobat7.0/bin/acroread
Icon=/usr/local/Adobe/Acrobat7.0/Resource/Icons/AdobeReader.png
Terminal=false
Type=Application
Categories=Application;Office;
  • 在Nautilus中建立PDF文件与Acrobat Reader的关联
  • 在Firefox中安装Acrobat Reader插件
$ sudo /usr/local/Adobe/Acrobat7.0/Browser/install_browser_plugin
将安装浏览器的 acroread 增效工具。

请输入 Adobe Reader 7.0.0 的安装路径。 [/usr/local/Adobe/Acrobat7.0]

1. 执行全局安装
2. 执行用户指定的安装 (Mozilla/Firefox/Netscape)
请输入您的选择 [1/2] 1

请输入浏览器安装路径 - /usr/lib/mozilla-firefox
安装成功。添加文件 /usr/lib/mozilla-firefox/plugins/nppdf.so

您是否要安装另一个浏览器? [y/n] n
  • 删除已安装的Acrobat Reader
$ sudo rm -rf /usr/local/Adobe/Acrobat7.0/
$ sudo rm /usr/share/applications/AdobeReader.desktop
$ sudo rm /usr/bin/acroread


安装Yahoo Messenger (推荐使用gaim代替)

1. 下载DEB包

$ wget http://download.yahoo.com/dl/unix/ymessenger_1.0.4_1_i386.deb

2. 安装

$ sudo apt-get install libgdk-pixbuf2 libglib1.2 libgtk1.2 libssl0.9.6 $ sudo dpkg -i ymessenger_1.0.4_1_i386.deb

3. 运行

$ /usr/bin/ymessenger &


安装Prozilla GUI

1. 安装

$ sudo apt-get install prozgui

2. 设置

$ sudo vi /usr/share/applications/prozgui.desktop

//输入如下内容
[Desktop Entry]
Name=Prozilla GUI
Comment=Prozilla Downloader GUI
Exec=/usr/bin/prozgui
Icon=/usr/share/pixmaps/prozgui.xpm
Terminal=false
Type=Application
Categories=Application;Network;


安装NeroLinux 2.0.0

1. 下载NeroLinux的deb包

$ wget ftp://ftp5.us.nero.com/nerolinux-2.0.0.2-x86.deb

2. 安装NeroLinux依赖的包

$ sudo apt-get install libglib1.2 libgtk1.2

3. 安装NeroLinux包

$ sudo dpkg -i nerolinux-2.0.0.2-x86.deb

4. 启动NeroLinux程序 选择菜单“Applications”=>“System Tools”=>“NeroLINUX”启动程序。



配置使用ADSL帐号拨号上网

1、安装pppoe软件包

$ sudo apt-get install pppoeconf

2、配置adsl拨号的帐号信息

$ sudo pppoeconf

3、进行adsl拨号建立网络连接

$ sudo pon dsl-provider

4、断开adsl网络连接

$ sudo poff



$ killall gnome-panel

3. 使用 选择“Applications”=>“Internet”=>“Prozilla GUI”。



posted @ 2005-09-23 13:58 ivaneeo 阅读(854) | 评论 (0)编辑 收藏

4.用私钥对加密文件解密


#gpg --decrypt report.txt.gpg >report.txt
You need a passphrase to unlock the secret key for
user: "test1 (unclassfication) "
2048-bit ELG-E key, ID 33735683, created 2004-09-29
(main key ID 79EB3D97)
gpg: encrypted with 2048-bit ELG-E key, ID 33735683,
created 2004-09-29
"test1 (unclassfication) "


以上命令要求输入对应私钥的保护口令才能成功解密,解密后的文件内容被输出到report.txt文件中。

5.用公钥同时进行文件签名和加密

#gpg -se -r test@yahoo.com.cn  report.txt
You need a passphrase to unlock the secret key for
user: "test (test) "
1024-bit DSA key, ID ADD93830, created 2004-07-01


以上命令要求输入对应私钥的保护口令,输入正确的口令后,签名和加密成功完成。

这些都是应用GPG签名和加密文件的一些常用命令,更详细的用法可以参考GPG的帮助文件。

对电子邮件进行加密和数字签名

实际上,GPG应用最多的地方是在电子邮件的加密和数字签名上。许多电子邮件客户端软件都支持PGP/GPG方式的加密及数字签名。
posted @ 2005-09-22 14:46 ivaneeo 阅读(291) | 评论 (0)编辑 收藏

应用GPG

GPG使用的是非对称的密钥体系,用户拥有一对密钥,包括一个公钥和一个私钥。公钥对外公布,私钥则由自己保存。使用公钥加密的数据可以用私钥解密,同样,使用私钥加密的数据可以用公钥解密。

非对称的密钥可以用来加密和做数字签名。当用户关心信息保密性时,使用加密功能;当用户关注信息完整性及不可抵赖性时,使用数字签名功能;当用户需要同时关注信息的机密性、完整性及不可抵赖性时,可以将加密和数学签名混合使用。

简单了解这些密码学概念后,就可以开始真正的应用实践了。

对文件进行加密和数字签名

KDE中提供了图形化的加密操作方法。比如,在KDE中对一个文件加密,只需在KDE文件管理器Konqueror中选中该文件,单击右键选择“Actions”中的“Encrypt File”就可以加密文件。加密后的文件以.asc结尾。

对于图形方式的加密操作不多做介绍,下面将重点放在命令行操作方式上,介绍命令行下的各种文件加密和签名的操作方法。

1.对文件进行数字签名

#gpg --clearsign policy.txt
You need a passphrase to unlock the secret key for
user: "test (test) <test@yahoo.com.cn>"
1024-bit DSA key, ID ADD93830, created 2004-07-01


运行以上命令,生成一个名为report.txt.asc的文件,该文件中除了原文件信息外还包含数字签名信息。

2.验证文件的数字签名

#gpg --verify policy.txt.asc
gpg: Signature made 2004年11月04日 星期四 15时58分07秒 UTC using DSA key ID ADD93830
gpg: Good signature from "test (test) <test@yahoo.com.cn>"


以上命令运行的结果显示该签名是正确的。

3.用指定的公钥对文件加密

#gpg --encrypt -r terry@mykms.org report.txt
gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: next trustdb check due at 2005-09-10


运行以上命令,使用自己的公钥加密report.txt文件,生成加密文件report.txt.gpg。如果使用编辑软件打开该加密文件,会发现它包含的是一些不可理解的字符和乱码。
posted @ 2005-09-22 14:43 ivaneeo 阅读(269) | 评论 (0)编辑 收藏

导入公钥

作为用户,也会收到别人的GPG公钥,它们可能来自网站、电子邮件、FTP和目录服务等,只要信任其来源,就可以将其导入自己的GPG环境,之后才可以与相应的人员进行基于GPG的各种应用。 导入公钥的过程可以分为以下三步:

1.导入

比如,Terry收到朋友god3571的公钥文件god3571.gpg,可以使用以下命令导入文件:
snapshot14.png

2.核对“指纹”

公钥是可以伪造的。James可以伪造一个god3571的公钥,然后想办法让Terry得到。如果Terry对收到的公钥不加验证,那么他 发给god3571的加密邮件就可能被James解密。GPG的架构中并没有一个PKI这样的证书管理系统,GPG的公钥信任是通过“Truth Web”实现的。

生成Terry公钥的“指纹”:

#gpg --fingerprint terry@mykms.org
pub 1024D/7234E374 2004-09-10 Terry
Yu (for test) <terry@mykms.org>
Key fingerprint = A58F D71A 28BA
499D 805B 588E 82FB CD0F 7234 E374
sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]

3.签名

在成功导入,并确定这个公钥是可以相任之后,要立即对这个公钥进行签名。这样,就可以验证来自对方邮件的真实性了。

对公钥进行签名可以使用如下命令:

#gpg --sign-key god3571@hotmail.com

或者
#gpg --edit-key name
#command > sign

检查对方邮件,比如god3571的签名:
#gpg --check-sigs god3571@hotmail.com
 现在,有了god3571签名的公钥,通过这个公钥就可以和god3571进行非对称加密通信了。
posted @ 2005-09-22 14:38 ivaneeo 阅读(263) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 36 37 38 39 40 41 42 43 44 下一页 Last