标签linux下的文章

Jerry Bendy 发布于 05月19, 2015

25个最常用的iptables策略

1、清空存在的策略

当你开始创建新的策略,你可能想清除所有的默认策略,和存在的策略,可以这么做:

iptables -F  或者iptables –flush

2、设置默认策略

默认链策略是ACCEPT,改变所有的链策略为DROP:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

3、阻止一个指定的ip

BLOCK_THIS_IP=“x.x.x.x"
iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4、允许SSH

允许所有通过eth0接口使用ssh协议连接本机:

iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

5、允许某个网段通过ssh连接

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

6、允许http和https

允许所有进来的web流量:http协议80端口,https协议是443端口

iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp –dport 443 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 443 -m state –state ESTABLISHED -j ACCEPT

7、多个策略联合一起

允许ssh,http,https:

iptables -A INPUT -i eth0 -p tcp -m multiport –dports 22,80,443 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport –sports 22,80,443 -m state –state ESTABLISHED -j ACCEPT

8、允许SSH连接其他主机

iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

9、允许SSH连接指定的网段

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

10、允许https出去

iptables -A OUTPUT -o eth0 -p tcp –dport 443 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 443 -m state –state ESTABLISHED -j ACCEPT

11、对web请求做负载均衡(每三个包,均衡到指定服务器,需要扩展iptables)

iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 0 -j DNAT –to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 1 -j DNAT –to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 2 -j DNAT –to-destination 192.168.1.103:443

12、允许ping

iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp –icmp-type echo-reply -j ACCEPT

13、允许ping远程

iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT

14、允许本地回环

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

15、允许内网访问外部网络

这个例子eth1 连接外部网络,eth0连接内部网络

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16、允许DNS出去

iptables -A OUTPUT -p udp -o eth0 –dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 –sport 53 -j ACCEPT

17、允许NIS连接

NIS端口是动态的,当ypbind启动时它分配端口。

首先运行 rpcinfo -p 显示得到端口号,这个例子使用端口850,853。

iptables -A INPUT -p tcp –dport 111 -j ACCEPT
iptables -A INPUT -p udp –dport 111 -j ACCEPT
iptables -A INPUT -p tcp –dport 853 -j ACCEPT
iptables -A INPUT -p udp –dport 853 -j ACCEPT
iptables -A INPUT -p tcp –dport 850 -j ACCEPT
iptables -A INPUT -p udp –dport 850 -j ACCEPT

上面的例子当ypbind重新启动时将失效,有2种解决方案:

(1) 分配nis服务静态ip

(2) 使用精妙的脚本

18、允许指定网段连接Rsync

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 –dport 873 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 873 -m state –state ESTABLISHED -j ACCEPT

19、允许mysql从指定的网段连接

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 –dport 3306 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 3306 -m state –state ESTABLISHED -j ACCEPT

20、允许sendmail或者postfix

iptables -A INPUT -i eth0 -p tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 25 -m state –state ESTABLISHED -j ACCEPT

21、允许IMAP和IMAPS

iptables -A INPUT -i eth0 -p tcp –dport 143 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 143 -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp –dport 993 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 993 -m state –state ESTABLISHED -j ACCEPT

22、允许POP3和POP3S

iptables -A INPUT -i eth0 -p tcp –dport 110 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 110 -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp –dport 995 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 995 -m state –state ESTABLISHED -j ACCEPT

23、预防DDOS攻击

iptables -A INPUT -p tcp –dport 80 -m limitlimit 25/minute –limit-burst 100 -j ACCEPT
-m :使用iptables扩展
–limit 25/minute : 限制分钟连接请求数
–limit-burst:触发阀值,一次涌入数据包数量

24、端口转发

来自442的都转到22端口

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 –dport 422 -j DNAT –to 192.168.102.37:22

你还必须明确允许442端口

iptables -A INPUT -i eth0 -p tcp –dport 422 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 422 -m state –state ESTABLISHED -j ACCEPT

25、包丢弃日志

你也许想查看所有丢弃包的日志。首先创建一个新链叫 LOGGING

iptables -N LOGGING

确保所有的连接跳到LOGGING

iptables -A INPUT -j LOGGING

记录这些包通过自定义名字 "log-prefix"

iptables -A LOGGING -m limitlimit 2/min -j LOG –log-prefix "IPTables Packet Dropped:"log-level 7

最后丢弃这些数据包

iptables -A LOGGING -j DROP

阅读全文 »

Jerry Bendy 发布于 03月19, 2015

Linux服务器安装使用PhantomJS

phantomjs

PhantomJS(http://phantomjs.org/)是一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG等,可方便的应用于各种自动化的测试、屏幕捕获、网络监控等环境。

Windows版的PhantomJS安装比较简单,下面就说一个Linux版本的PhantomJS的安装及简单用法。

Linux版本安装有两种方法,一是下载对应系统的编译好的可执行文件使用,但可能会出现不能用的情况,这时就需要使用第二种,源码编译安装。

一、直接下载编译好的文件

直接到Bitbucket下载对应的压缩包(链接:https://bitbucket.org/ariya/phantomjs/downloads),例如我的是CentOS6.5 64位系统,下载的是phantomjs-1.9.8-linux-x86_64.tar.bz2,下载完成后解压,在 bin 目录内有编译好的 phantomjs 文件,直接用FTP等工具上传到服务器。

使用SSH登入服务器,给phantomjs加上执行权限chmod +x phantomjs,运行./phantomjs -h看能否显示帮助文档,报错的话可能就需要使用源码编译来安装了。

二、源码编译

首先去官网下载最新稳定版本的源码(链接:http://phantomjs.org/download.html),找到Linux下的Source Code下载,目前最新版本是2.1 直接下载

以下操作以CentOS为例,其它发行版大同小异

cd /usr/local/src
# 下载源码
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.0.0-source.zip
# 解压源码,没有unzip命令的请使用yum install unzip 安装
unzip phantomjs-2.0.0-source.zip
# 安装编译环境
yum -y install gcc gcc-c++ make flex bison gperf ruby \
  openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
  libpng-devel libjpeg-devel
# 开始编译
cd phantomjs-2.0.0
./build.sh

编译操作耗时会比较长(可以大于半个小时),耐心等待完成。编译完成后会多出一个 bin 目录,里面有编译完成的 phantomjs 文件。

简单使用

如果是下载的源码,里面会有个example文件夹,我们使用其中的rasterize.js创建一个网站截图。没有这个文件的可以复制下载的代码并保存为rasterize.js。

var page = require('webpage').create(),
    system = require('system'),
    address, output, size;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
    console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
    console.log('  image (png/jpg output) examples: "1920px" entire page, window width 1920px');
    console.log('                                   "800px*600px" window, clipped to 800x600');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    page.viewportSize = { width: 600, height: 600 };
    if (system.args.length > 3 &amp;&amp; system.args[2].substr(-4) === ".pdf") {
        size = system.args[3].split('*');
        page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                           : { format: system.args[3], orientation: 'portrait', margin: '1cm' };
    } else if (system.args.length > 3 &amp;&amp; system.args[3].substr(-2) === "px") {
        size = system.args[3].split('*');
        if (size.length === 2) {
            pageWidth = parseInt(size[0], 10);
            pageHeight = parseInt(size[1], 10);
            page.viewportSize = { width: pageWidth, height: pageHeight };
            page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
        } else {
            console.log("size:", system.args[3]);
            pageWidth = parseInt(system.args[3], 10);
            pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
            console.log ("pageHeight:",pageHeight);
            page.viewportSize = { width: pageWidth, height: pageHeight };
        }
    }
    if (system.args.length > 4) {
        page.zoomFactor = system.args[4];
    }
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}

使用以下命令创建网站截图(注意其中的文件路径,请自行修改为你的phantomjs和rasterize.js的路径

./phantomjs ../example/rasterize.js http://blog.icewingcc.com ./icewingcc.png

PhantomJS还可以用于网络监控、自动化等功能,而且JS文件的内容还可以根据需要自行修改。具体的使用方法请参考官方网站的介绍,以及example文件夹内示例的说明。

阅读全文 »

Jerry Bendy 发布于 11月24, 2014

Linux下多个命令连续执行方法

有的时候执行一些简单指令的时候总不想分好几次输入,利用以下方法可以方便的一次执行多个命令。

连续不中断执行

;可以让多个命令连续知行,中间出现错误并不会中断后面命令,如

mkdir test; mkdir test; rmdir test;

虽然第二条指令会报错,但是不会影响后面的指令,最后test目录不存在.

出错停止后面指令

&&分割的命令,如果没有错误会一直执行下去,出现错误立即中止,如

mkdir test &amp;&amp; mkdir test &amp;&amp; rmdir test

这回在第二个指令处就中止了

一次正确即停止

||分割的命令,如果有错误就一直执行下去,直到一次正确立即中止,如

mkdir test || mkdir test || rmdir test
mkdir test || mkdir test || rmdir test || mkdir test

第一次执行第一条指令就正确,后面的不执行

第二次执行前两条都错误,直到最后一条才正确,最后一条不再执行

转自:闫肃的博客

阅读全文 »

Jerry Bendy 发布于 02月18, 2014

21个非常有用的 .htaccess 提示和技巧

Apache Web 服务器可以通过 .htaccess 文件来操作各种信息,这是一个目录级配置文件的默认名称,允许去中央化的 Web 服务器配置管理。可用来重写服务器的全局配置。该文件的目的就是为了允许单独目录的访问控制配置,例如密码和内容访问。

下面是 21 个非常有用的 .htaccess 配置的提示和技巧:

1. 定制目录的 Index 文件

DirectoryIndex index.html index.php index.htm

你可以使用上面的配置来更改目录的默认页面,例如你将这个脚本放在 foo 目录,则用户请求 /foo/ 时候就会访问 /foo/index.html。

2. 自定义错误页

ErrorDocument 404 errors/404.html

当用户访问页面报错时,例如页面找不到你希望显示自定义的错误页面,你可以通过这种方法来实现。或者是动态的页面:

ErrorDocument 404 /psych/cgi-bin/error/error?404

3. 控制访问文件和目录的级别

.htaccess 经常用来限制和拒绝访问某个文件和目录,例如我们有一个 includes 文件夹,这里存放一些脚本,我们不希望用户直接访问这个文件夹,那么通过下面的脚本可以实现:

# no one gets in here!  #号开头的都是注释
deny from all[/code]
上述脚本是拒绝所有的访问,你也可以根据IP段来拒绝:
[code]# no nasty crackers in here!
order deny,allow
deny from all
allow from 192.168.0.0/24
# this would do the same thing..
#allow from 192.168.0

一般这些方法是通过防火墙来处理,但在一个生产环境中的服务器来说,这样的调整非常方便。

有时候你只是想禁止某个ip访问:

# someone else giving the ruskies a bad name..
order allow,deny
deny from 83.222.23.219
allow from all

4. 修改环境变量

环境变量包含了服务器端 CGI 的一些扩展信息,可使用 SetEnv 和 UnSetEnv 进行设置以及取消设置.

SetEnv SITE_WEBMASTER "Jack Sprat"
SetEnv SITE_WEBMASTER_URI mailto:Jack.Sprat@characterology.com

UnSetEnv REMOTE_ADDR

5. 301 重定向

如果你希望某个页面跳转到新的页面:

Redirect 301 /old/file.html http://yourdomain.com/new/file.html

下面可以实现对整个路径的重定向

RedirectMatch 301 /blog(.*) http://yourdomain.com/$1

6. 通过 .htaccess 实现缓存策略

通过设置在浏览器上缓存静态文件可以提升网站的性能:

# year
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
Header set Cache-Control "public"
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
</FilesMatch>
#2 hours
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>

7. 使用 GZIP 对输出进行压缩

在 .htaccess 中添加下面的代码可以将所有的 css、js 和 html 使用 GZIP 算法压缩:

<IfModule mod_gzip.c>
     mod_gzip_on       Yes
     mod_gzip_dechunk  Yes
     mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
     mod_gzip_item_include handler   ^cgi-script$
     mod_gzip_item_include mime      ^text/.*
     mod_gzip_item_include mime      ^application/x-javascript.*
     mod_gzip_item_exclude mime      ^image/.*
     mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
 </IfModule>

使用上面代码的前提是启用 mod_gzip 模块,你可以使用下面脚本来判断 Web 服务器是否提供 mod_deflate 支持:

<Location>
     SetOutputFilter DEFLATE
        SetEnvIfNoCase Request_URI  \
         \.(?:gif|jpe?g|png)$ no-gzip dont-vary
     SetEnvIfNoCase Request_URI  \
         \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
 </Location>

如果 Web 服务器不支持 mod_deflate ,那么可使用下面方法:

<FilesMatch "\.(txt|html|htm|php)">
    php_value output_handler ob_gzhandler
</FilesMatch>

8. 强制要求使用 HTTPS 访问

通过以下脚本可以强制整个网站必须使用 https 方式访问:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

9. URL 重写

例如要将 product.php?id=12 重写为 product-12.html

RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

将 product.php?id=12 重写为 product/ipod-nano/12.html

RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

重定向没有 www 到有 www 的 URL 地址:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^icewingcc\.com$
RewriteRule (.*) http://www.icewingcc.com/$1 [R=301,L]

重写 yoursite.com/user.php?username=xyz 到 yoursite.com/xyz

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

重定向某个域名到一个 public_html 里新的子文件夹:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1

10. 阻止列出目录文件

使用下面代码可以防止列表目录里的所有文件:

Options -Indexes
# 或者
IndexIgnore *

11. 添加新的 MIME-Types

MIME-types 依赖于文件的扩展名,未能被识别的文件扩展名会当成文本数据传输

AddType application/x-endnote-connection enz
AddType application/x-endnote-filter enf
AddType application/x-spss-savefile sav

12. 防盗链

你不希望别人网站引用你站内的图片、css 等静态文件,也就是传说中的防盗链,可以使用如下脚本:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_REFERER} !^http://www.askapache.com.*$ [NC]
RewriteRule \.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$ - [F,NS,L]

13. 指定上传文件的大小限制,适用于 PHP

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

上述脚本中,通过四个参数来设置上传文件的限制,第一个参数是文件的大小,第二个是 POST 数据的大小,第三个是传输的时间(单位秒),最后一个是解析上传数据最多花费的时间(单位秒)

14. 禁止脚本执行

Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

15. 修改字符集和语言头

AddDefaultCharset UTF-8
DefaultLanguage en-US

16. 设置服务器时区(GMT)

SetEnv TZ America/Indianapolis

17. 强制 “File Save As” 提示

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

18. 保护单个文件

正常情况下 .htaccess 可用于限制整个目录的访问,但也可以只限制某个文件:

<Files quiz.html>
order deny,allow
deny from all
AuthType Basic
AuthName "Characterology Student Authcate"
AuthLDAP on
AuthLDAPServer ldap://directory.characterology.com/
AuthLDAPBase "ou=Student, o=Characterology University, c=au"
require valid-user
satisfy any
</Files>

通过环境变量来设置 Cookie

Header set Set-Cookie "language=%{lang}e; path=/;" env=lang

基于请求设置 Cookie,该代码发送 Set-Cookie 头用于设置 Cookie 值为第二个括号里的匹配项

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)(de|es|fr|it|ja|ru|en)/$ - [co=lang:$2:.yourserver.com:7200:/]

20. 设置自定义的响应 Headers

Header set P3P "policyref=\"http://www.askapache.com/w3c/p3p.xml\""
Header set X-Pingback "http://www.askapache.com/xmlrpc.php"
Header set Content-Language "en-US"
Header set Vary "Accept-Encoding"

21. 根据 User-Agent 来阻止请求

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT

转自:http://www.lonery.com/article-view-35.html

阅读全文 »

Jerry Bendy 发布于 08月31, 2013

Linux服务器与Windows服务器的性能及安全性比较

Linux与Windows XX的总体比较

Linux何以备受青睐,致使除微软以外,国际上有名的硬、软件厂商都毫无例外地与之结盟、捆绑。甚至连世界IT的龙头老大“蓝后巨人”IBM也要“全面拥抱Linux”呢?

首先,Linux作为自由软件有两个特点:一是它免费提供源码,二是爱好者可以按照自己的需要自由修改、复制和发布程序的源码,并公布在Internet上。这就吸引了世界各地的操作系统高手为Linux编写各种各样的驱动程序和应用软件,使得Linux成为一种不仅只是一个内核,而且包括系统管理工具、完整的开发环境和开发工具、应用软件在内,用户很容易获得的操作系统。

由于可以得到Linux的源码,所以操作系统的内部逻辑可见,这样就可以准确地查明故障原因,及时采取相应对策。在必要的情况下,用户可以及时地为Linux打 “补丁”(这正是笔者前面文章中讨论的集市模式开发软件最本质的内容),这是其它操作系统所没有的优势。同时,这也使得用户容易根据操作系统的特点构建安全保障系统,不会由于不了解不公开源码的 “黑盒子”式的系统预留的什么 “后门”而受到意外的打击。

第二,究其根本,Linux是一个UNIX系统变种,因此也就具有了Unix系统的一系列优良特性,Unix上的应用可以很方便地移植到Linux平台上,这使得Unix用户很容易掌握Linux。下面简要地描述UNIX亦即Linux的一系列特色。

2.1 UNIX/Linux的主要特色

早期UNIX的主要特色是结构简炼、便于移植和功能相对强大,经过30来年的发展和进化,形成了一些极为重要并稳定的特色,其中主要包括:

1. 技术成熟,可靠性高

经过30来年开放式道路的发展,UNIX的一些基本技术已变得十分成熟,有的已成为各类操作系统的常用技术。实践表明,UNIX是能达到大型主机(mainframe)可靠性要求的少数操作系统之一。目前许多UNIX大型主机和服务器在国外的大型企业中每天24小时,每年365天不间断地运行。例如,不少大企业或政府部门,即所谓肩负关键使命的场合/部门将其整个企业/部门信息系统建立并运行在以UNIX为主服务器的Client/Server结构上。但到目前为止,世界上还没有一家大型企业将其重要的信息系统完全建立在NT上。

2. 极强的可伸缩性

UNIX系统是世界上唯一能在笔记本电脑、PC、工作站,直至巨型机上运行的操作系统,而且能在所有主要CPU芯片搭建的体系结构上运行(包括Intel/AMD及HP-PA、MIPS、PowerPC、UltraSPARC、ALPHA等RISC芯片)。至今为止,世界上没有第二个操作系统能达到这一点。此外,由于UNIX系统能很好地支持SMP、MPP和Cluster等技术,使其可伸缩性又有了很大的增强。目前,商品化UNIX系统能支持的SMP,CPU数已达到几百甚至更多个,MPP系统中的节点甚至已超过1024个UNIX支持的异种平台Cluster技术也已投入使用。UNIX的伸缩性远远超过了NT操作系统目前所能达到的水平

3. 网络功能强

网络功能是UNIX系统的一又一重要特色,作为Internet网技术和异种机连接重要手段的TCP/IP协议就是在UNIX上开发和发展起来的。TCP/IP是所有UNIX系统不可分割的组成部分。因此,UNIX服务器在Internet服务器中占80%以上,占绝对优势。此外,UNIX还支持所有常用的网络通信协议,包括NFS、DCE、IPX/SPX、SLIP、PPP等,使得UNIX系统能方便地与已有的主机系统,以及各种广域网和局域网相连接,这也是UNIX具有出色的互操作性(Interoperability)的根本原因。

4. 强大的数据库支持能力

由于UNIX具有强大的支持数据库的能力和良好的开发环境,因此多年来,所有主要数据库厂商,包括Oracle、Informix、Sybase、Progress等,都把UNIX作为主要的数据库开发和运行平台,并创造出一个又一个性价比的新记录。UNIX服务器正在成为大型企业数据中心替代大型主机的主要平台。

5. 开发功能强

UNIX系统从一开始就为软件开发人员提供了丰富的开发工具。成为工程工作站的首选和主要的操作系统和开发环境。可以说,工程工作站的出现和成长与UNIX是分不开的。至今为止,UNIX工作站仍是软件开发厂商和工程研究设计部门的主要工作平台。有重大意义的软件新技术的出现几乎都在UNIX上,如TCP/IP、WWW、OODBMS等。

6. 开放性好

开放性是UNIX最重要的本质特性。开放系统概念的形成与UNIX是密不可分的。UNIX是开放系统的先驱和代表。由于开放系统深入人心,几乎所厂商都宣称自己的产品是开放系统,确实每一种系统都能满足某种开放的特性,如可移植性、可兼容性、可伸缩性、互操作性等。但所有这些系统与开放系统的本质特征—不受某些厂商的垄断和控制相去甚远,只有UNIX完全符合这一条件。

7. 标准化

过去,Unix界被分析家和用户批判,因为没有为所有Unix操作系统提供统一的标准。其实,到目前为止,国际标准化组织(ISO)、工业团体恰恰是以UNIX基础制订了一系列标准化,如ISO/IEC的POSIX标准、IEEE POSIX标准、X/Open组织的XPG3/4工业标准以及后来的Spec 1170(因为它包含了1170个应用编程接口,后来改名为UNIX’95)标准。不少人对标准及标准化组织的作用及职权产生了误解。事实上,当标准化组织企图驾驭互相竞争的力量,和企图为用户规定他们的要求时是注定要失败的。比方说,标准只能用于给出道路的规则,而不应用于制造汽车。如果厂家被强迫完全遵从单一的标准,而不允许他们产品有特色,则用户将受害,Unix将变成象任何单一厂家的产品一样,没有任何特色。

Unix标准组织的真实目标是为用户和厂家定义一种规定Unix形态的基础。标准将保证Unix系统是可操作的,并且其应用是便于移植的。但它们也允许相互竞争的开放开发环境能创新和具有技术特色。

当然,由于UNIX是有版权的,而且其源头有多家,许多厂家自行开发,并强调特色而导致UNIX版本的不统一(相比之下,Linux的核心是统一的,各发行厂家只是在外部作了不同程度的开发,但又都要遵循POSIX等标准,所以不会存在UNIX那种四分五裂的表象)。即便如此,Unix系统已经提供了比任何其他操作系统更多的可互操作性。公共的联网和系统管理协议允许用户方便地混用和匹配多种Unix系统。从一种Unix向另一种Unix移植应用只需几天时间,而在完全不同的操作系统间移植或重写代码需要几个月甚至几年时间。

而且Unix工业界还在快速地向前发展,使得互操作性和可移植性更为方便。由独立的X/Open组织管理的Unix’95为操作系统厂家和应用开发商规定了商品Unix的形态。所有的Unix厂家已经从Unix’95规格说明。

开发或购买遵从Unix’95规格的应用可保证用户方便地从一个Unix操作系统向另一个移植。但并不强迫用户购买只遵从Unix’95规格的产品,用户可以开发和遵从开放且自由竞争的市场购买具有新的扩充的产品,以满足自己特殊的需要。

这样,Unix工业界再次为用户提供了选择的权力。如果伸缩性和移植性对用户的业务是最重要的,用户可以选择遵从Unix’95的应用;如果先进技术是关键,则用户可选择某一厂家具有新扩充的应用,当然这些扩充尚未成为标准。

由于Unix不断发展,因此,Unix’95标准将继续发展以接纳某些厂家的创新。

2.2 Linux和Windows XX相比有何特点

1. 可完全免费得到

Linux操作系统可以从互联网上免费下载使用,只要您有快速的网络连接就行;而且,Linux上跑的绝大多数应用程序也是免费可得的。用了Linux就再也不用背”使用盗版软件”的黑锅了。

2. 可以运行在386以上及各种RISC体系结构机器上

Linux最早诞生于微机环境,一系列版本都充分利用了X86CPU的任务切换能力,使X86CPU的效能发挥得淋淋尽致,而这一点连Windows都没有做到。此外,它可以很好地运行在由各种主流RISC芯片(ALPHA、MIPS、PowerPC、UltraSPARC、HP-PA等)搭建的机器上。

3. Linux是UNIX的完整实现

从发展的背景看,Linux与其他操作系统的区别是,Linux是从一个比较成熟的操作系统发展而来的,而其他操作系统,如WindowsNT等,都是自成体系,无对应的相依托的操作系统。这一区别使得Linux的用户能大大地从Unix团体贡献中获利。无论是Unix的作者还是Unix的用户,都认为只有Unix才是一个真正的操作系统,许多计算机系统(从个人计算机到超级计算机)都存在Unix版本,Unix的用户可以从很多方面得到支持和帮助。因此,Linux作为Unix的一个克隆,同样会得到相应的支持和帮助,直接拥有Unix在用户中建立的牢固的地位。

UNIX上的绝大多数命令都可以在Linux里找到并有所加强。UNIX的可靠性、稳定性以及强大的网络功能也在Linux身上一一体现。

4. 真正的多任务多用户

只有很少的操作系统能提供真正的多任务能力,尽管许多操作系统声明支持多任务,但并不完全准确,如Windows。而Linux则充分利用了X86CPU的任务切换机制,实现了真正多任务、多用户环境,允许多个用户同时执行不同的程序,并且可以给紧急任务以较高的优先级。

5. 完全符合POSIX标准

POSIX是基于UNIX的第一个操作系统簇国际标准,Linux遵循这一标准这使UNIX下许多应用程序可以很容易地移植到Linux下,相反也是这样。

6. 具有图形用户界面

Linux的图形用户界面是Xwindow系统。Xwindow可以做MSWindows下的所有事情,而且更有趣、更丰富,用户甚至可以在几种不同风格的窗口之间来回切换。

7. 具有强大的网络功能

实际上,Linux就是依靠互联网才迅速发展了起来,Linux具有强大的网络功能也是自然而然的事情。它可以轻松地与TCP/IP、LANManager、Windows for Workgroups、Novell Netware或Windows NT网络集成在一起,还可以通过以太网或调制解调器连接到Internet上。

Linux不仅能够作为网络工作站使用,更可以胜任各类服务器,如X应用服务器、文件服务器、打印服务器、邮件服务器、新闻服务器等等。

8. 是完整的UNIX开发平台

Linux支持一系列的UNIX开发工上,几乎所有的主流程序设计语言都已移植到Linux上并可免费得到,如C、C++、Fortran77、ADA、PASCAL、Modual2和3、Tcl/TkScheme、SmallTalk/X等。

总而言之,Unix就是可供各种用户选择的对象。一个操作系统已经使分布式计算成为现实。一个操作系统正在使新形式的交互娱乐成为现实并正确领导通向新的工程和商业应用的路。这就是Unix所体现的精神。但Unix还不止于此。主要地,Unix给用户选择最佳应用、最佳开发环境、最佳网络功能和最佳硬件的自由,以满足用户的业务要求。Unix还给用户选择何时升级系统的自由,甚至当用户改变主意时,用户可以以最少的痛苦来安装一个新系统,只要业务需要。

Unix专门献身于使用户保持选择的权力。

三、 主要产品的竞争

上面我们从总体上讲述了UNIX从而也是Linux的特点,下面我们从服务器,桌面机和嵌入式三个不同层面上来比较Linux与Windows之间的优缺点、强项和弱处。

3.1服务器操作系统——Linux与NT

服务器是涉及一大类机器的统称,最高端,用作超级计算或顶级企业和网络服务器的MPP(大规模并行处理机)、SMP(对称多处理机)、Cluster(集群机),Mainframe(大型主机);到普通商用数据库服务器的中型机,如IBM AS/400,中高档服务器如IBM RS/6000/系列机,HP 9000/K系列,SUN Ultra SPARC中高档服务器(如10000系列)、SGI的1000系列等。以及低端,用作邮件、文件/打印服务器等的普通PC服务器,门类繁多,不一而足。在这方面Linux都有其产品,而NT基本上是处于PC服务器档次上的操作系统。

 

转自:小董博客

阅读全文 »

Jerry Bendy 发布于 06月15, 2013

EasyBCD全硬盘安装Liunx的方法

以前有U盘时都是想着用怎样用U盘安装操作系统,如今U盘失踪了,就只能想着怎样直接利用硬盘安装操作系统了。对Windows7还好说,直接可以启动安装程序。Liunx嘛,之前的Ubuntu可以从Windows上直接启动,不过新版的都取消了这个功能,于是就不得不去寻找别的途径了。

之前看过一篇教程,在哪里记不起来了,是用Grub4DOS全硬盘安装Liunx,因为安装GRUB4DOS有些难度(主要还是C盘根目录里已经存在了grldr这个文件,不知道怎么办了),今天就说说利用EasyBCD安装Liunx的方法。

EasyBCD就不用多说了,是一款Windows7上面的强大的启动项管理软件,可以轻松地利用它增加及删除启动项,包括Windows、Liunx以及MAC的启动项。

(注:此方法本人仅在Ubuntu上测试过,其它Liunx系统未测试,但理论上是可以的)

分区神马的就不再说了,打开EasyBCD,左侧“Add New Entry”,-->“NeoGrub”-->“Install”,这样就添加了一个Grub的启动项(貌似就是Grub4DOS,至于本质上有什么区别就不知道了)。

接下来点“Configure”配置NeoGrub。此时打开一个记事本文档,在下面输入:

title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.10-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz

title是标题,就是要显示在NeoGrub引导界面的标题,这个可以随意。

root就是根目录,后面的(hd0,0)中的hd指硬盘,第一个0是指第一块硬盘,第二个0指第1个分区。如果你把安装Liunx的ISO镜像放在了第一块硬盘的第一个分区的话可以保持这个参数不变,但是Win7因为涉及到一个100MB的保留分区,这个分区不可能放下ISO文件,这时就要放在其它盘里了,如果盘符少的话可以依次从0去数这个分区号,如果不知道分区号的话可以使用DiskGenius查看分区号。下面三行的这个参数也要一块改。

打开Liunx的ISO文件,找到casper文件夹,复制initrd.lz和vmlinuz(也可能是vmlinuz.efi)到存放ISO的文件夹根目录,如果是vmlinuz.efi的话需要修改第三行的vmlinuz以指向正确的文件,然后修改第三行的iso文件名为正确的文件名。

修改第四行的initrd.lz为正确的文件名。

OK,保存,重启。

开机时找到NeoGRUB的启动项,进去,找到Intall Ubuntu,进入。

在安装之前记得,打开终端,输入代码:

sudo umount -l /isodevice

以取消对光盘所在驱动器的挂载,否则可能会找不到分区。

开始安装。。。

阅读全文 »