<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<channel>
	<title>flyinweb's blog - Linux</title>
	<link>http://www.517sou.net/Folder/linux/Index.aspx</link>
	<language>zh-CN</language>
	<webMaster>shanyiwan@msn.com(flyinweb)</webMaster>
	<pubDate>Mon, 15 Jun 2009 19:31:16 GMT</pubDate>
	<copyright>Copyright 2007-2009. All rights reserved.</copyright>
	<generator>Bitrac Free Version</generator>
	<description>桃李无言，下自成蹊</description>
	<image>
		<title>flyinweb&apos;s blog</title>
		<url>http://www.517sou.net/Client/Banner.gif</url>
		<link>http://www.517sou.net/</link>
		<description>桃李无言，下自成蹊</description>
	</image>
	<item>
		<link>http://www.517sou.net/Article/How-To-Verify-SSL-Certificate-From-A-Shell-Prompt.aspx</link>
		<title>How To Verify SSL Certificate From A Shell Prompt</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 10 Jan 2012 01:50:32 GMT</pubDate>
		<description>&lt;p&gt;&lt;span class=&quot;drop_cap&quot;&gt;H&lt;/span&gt;ow do I verify and diagnosis SSL certification installation from a Linux / UNIX shell prompt? How do I validate SSL Certificate installation and save hours of troubleshooting headaches without using a browser? How do I confirm I&apos;ve the correct and working SSL certificates?&lt;br /&gt;&lt;br /&gt;OpenSSL comes with a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. It’s intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library. For testing purpose I will use &lt;a href=&quot;https://mail.nixcraft.net/&quot;&gt;&lt;u&gt;&lt;font color=&quot;#0066cc&quot;&gt;mail.nixcraft.net:443&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; SSL certificate which is issued by Go Daddy.&lt;/p&gt;&lt;h2&gt;Step # 1: Getting The Certificate&lt;/h2&gt;&lt;p&gt;Create directory to store certificate:&lt;br /&gt;&lt;code&gt;$ mkdir -p ~/.cert/mail.nixcraft.net/&lt;br /&gt;$ cd ~/.cert/mail.nixcraft.net/&lt;/code&gt;&lt;br /&gt;Retrieve the mail.nixcraft.net certificate provided by the nixcraft HTTPD mail server:&lt;br /&gt;&lt;code&gt;$ openssl s_client -showcerts -connect mail.nixcraft.net:443&lt;/code&gt;&lt;br /&gt;Sample output:&lt;/p&gt;&lt;pre&gt;
CONNECTED(00000003)
depth=0 /O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
verify error:num=27:certificate not trusted
verify return:1
depth=0 /O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
-----BEGIN CERTIFICATE-----
MIIE5zCCA8+gAwIBAgIEAOJk2zANBgkqhkiG9w0BAQUFADCByjELMAkGA1UEBhMC
VVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNV
BAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlmaWNh
dGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5IFNl
Y3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5NjkyODcw
HhcNMDkwMTE4MjEyMjMxWhcNMTEwMTE4MjEyMjMxWjBbMRowGAYDVQQKExFtYWls
Lm5peGNyYWZ0Lm5ldDEaMBgGA1UEAxMRbWFpbC5uaXhjcmFmdC5uZXQxITAfBgNV
BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDCBnzANBgkqhkiG9w0BAQEFAAOB
jQAwgYkCgYEA0LhCDXvNXhTHov9Szh474Cv3Nz7QspVOI4p5M+zZt18VTVCHJz0Z
TleJum8RblpU4NPHJgOauIb1CAE3vLSKySV2DjHMt2L2/NUatJiKjDQKAEloKwQK
t75BP0mAGFPZmHlMNUQ32Sr/0byxxM4ElL2SSBasJE3PPVkSBOtLfssCAwEAAaOC
AcUwggHBMA8GA1UdEwEB/wQFMAMBAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMA4GA1UdDwEB/wQEAwIFoDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8v
Y3JsLmdvZGFkZHkuY29tL2dkczEtMS5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1t
AQcXATA5MDcGCCsGAQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
Y29tL3JlcG9zaXRvcnkvMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0
dHA6Ly9vY3NwLmdvZGFkZHkuY29tLzBKBggrBgEFBQcwAoY+aHR0cDovL2NlcnRp
ZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5L2dkX2ludGVybWVkaWF0ZS5j
cnQwHwYDVR0jBBgwFoAU/axhMpNsRdbi7oVfmrrndplozOcwMwYDVR0RBCwwKoIR
bWFpbC5uaXhjcmFmdC5uZXSCFXd3dy5tYWlsLm5peGNyYWZ0Lm5ldDAdBgNVHQ4E
FgQUAYML0uoVH8Sn8JZ3xbR9NLzE0tYwDQYJKoZIhvcNAQEFBQADggEBAJ/1/mGM
tF/UPwOvmiNE0i46qXCJDs6Ui7kCxWWQzC+CbT6x3fe8VwZ2/9OVeScw5aGkG7sU
kfid0XmfXxYrqkVsubrhQt/1MKKowB35M5a/wRd7E0h2ucYhBF3dnTQ29yJ9ppHC
HOvsUDGOan+e7japMyTYn9PU9Y8QtnzovRXk55iYfL4p57YvPwk4yMnBtc/krQcd
m6ZdvmY+zbbjWaDyarfIp3fQCL2HD/lC5rJaGUn633GIT0OrrQ4Gfy6hQ98UC+Pt
I8LFuzs02dJlCpDhGquvQ0W6o4uuvjSP28HfGBcmKholG0GT9wyZZCBvUlFyV6kq
/KNTisOW4so6I+Q=
-----END CERTIFICATE-----
---
Server certificate
subject=/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
---
No client certificate CA names sent
---
SSL handshake has read 1823 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: BF3662B2C597A7473E477D0CAD2D5002FCC370661BA5A7364BDCDD9C1247C0F5
    Session-ID-ctx:
    Master-Key: BFF4A2556DB4D7810D63DFF1905A97215185E94A791A2385A20290067F60208F108E54B0BC194E5AEBD130B9CB092B46
    Key-Arg   : None
    Start Time: 1243050920
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
&lt;/pre&gt;&lt;p&gt;Copy from the &amp;quot;-----BEGIN CERTIFICATE-----&amp;quot; to the &amp;quot;-----END CERTIFICATE-----&amp;quot; , and save it in your ~/.cert/mail.nixcraft.net/ directory as mail.nixcraft.net.pem.&lt;/p&gt;&lt;h2&gt;Step # 2: Getting The Certificate Of The Issuer&lt;/h2&gt;&lt;p&gt;This certificate was issued by Go Daddy, so you need to get &amp;quot;Certification Authority Root Certificate&amp;quot; (visit your CA&apos;s website to get root certificate):&lt;br /&gt;&lt;code&gt;$ wget https://certs.godaddy.com/repository/gd_bundle.crt -O ~/.cert/mail.nixcraft.net/gd.pem&lt;/code&gt;&lt;/p&gt;&lt;h2&gt;Step # 3: Rehashing The Certificates&lt;/h2&gt;&lt;p&gt;Create symbolic links to files named by the hash values using c_rehash, enter:&lt;br /&gt;&lt;code&gt;$ c_rehash ~/.cert/mail.nixcraft.net/&lt;/code&gt;&lt;br /&gt;Sample output:&lt;/p&gt;&lt;pre&gt;
Doing  ~/.cert/mail.nixcraft.net/
mail.nixcraft.net.pem =&amp;gt; 1d97af50.0
gd.pem =&amp;gt; 219d9499.0&lt;/pre&gt;&lt;h2&gt;Test It&lt;/h2&gt;&lt;p&gt;To confirm you have the correct and working certificates, enter:&lt;br /&gt;&lt;code&gt;$ openssl s_client -CApath ~/.cert/mail.nixcraft.net/ -connect mail.nixcraft.net:443&lt;/code&gt;&lt;br /&gt;Sample output:&lt;/p&gt;&lt;pre&gt;
CONNECTED(00000003)
depth=3 /L=ValiCert Validation Network/O=ValiCert, Inc./OU=ValiCert Class 2 Policy Validation Authority/CN=http://www.valicert.com//emailAddress=info@valicert.com
verify return:1
depth=2 /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
verify return:1
depth=1 /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
verify return:1
depth=0 /O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
verify return:1
---
Certificate chain
 0 s:/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE5zCCA8+gAwIBAgIEAOJk2zANBgkqhkiG9w0BAQUFADCByjELMAkGA1UEBhMC
VVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNV
BAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlmaWNh
dGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5IFNl
Y3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5NjkyODcw
HhcNMDkwMTE4MjEyMjMxWhcNMTEwMTE4MjEyMjMxWjBbMRowGAYDVQQKExFtYWls
Lm5peGNyYWZ0Lm5ldDEaMBgGA1UEAxMRbWFpbC5uaXhjcmFmdC5uZXQxITAfBgNV
BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDCBnzANBgkqhkiG9w0BAQEFAAOB
jQAwgYkCgYEA0LhCDXvNXhTHov9Szh474Cv3Nz7QspVOI4p5M+zZt18VTVCHJz0Z
TleJum8RblpU4NPHJgOauIb1CAE3vLSKySV2DjHMt2L2/NUatJiKjDQKAEloKwQK
t75BP0mAGFPZmHlMNUQ32Sr/0byxxM4ElL2SSBasJE3PPVkSBOtLfssCAwEAAaOC
AcUwggHBMA8GA1UdEwEB/wQFMAMBAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMA4GA1UdDwEB/wQEAwIFoDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8v
Y3JsLmdvZGFkZHkuY29tL2dkczEtMS5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1t
AQcXATA5MDcGCCsGAQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
Y29tL3JlcG9zaXRvcnkvMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0
dHA6Ly9vY3NwLmdvZGFkZHkuY29tLzBKBggrBgEFBQcwAoY+aHR0cDovL2NlcnRp
ZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5L2dkX2ludGVybWVkaWF0ZS5j
cnQwHwYDVR0jBBgwFoAU/axhMpNsRdbi7oVfmrrndplozOcwMwYDVR0RBCwwKoIR
bWFpbC5uaXhjcmFmdC5uZXSCFXd3dy5tYWlsLm5peGNyYWZ0Lm5ldDAdBgNVHQ4E
FgQUAYML0uoVH8Sn8JZ3xbR9NLzE0tYwDQYJKoZIhvcNAQEFBQADggEBAJ/1/mGM
tF/UPwOvmiNE0i46qXCJDs6Ui7kCxWWQzC+CbT6x3fe8VwZ2/9OVeScw5aGkG7sU
kfid0XmfXxYrqkVsubrhQt/1MKKowB35M5a/wRd7E0h2ucYhBF3dnTQ29yJ9ppHC
HOvsUDGOan+e7japMyTYn9PU9Y8QtnzovRXk55iYfL4p57YvPwk4yMnBtc/krQcd
m6ZdvmY+zbbjWaDyarfIp3fQCL2HD/lC5rJaGUn633GIT0OrrQ4Gfy6hQ98UC+Pt
I8LFuzs02dJlCpDhGquvQ0W6o4uuvjSP28HfGBcmKholG0GT9wyZZCBvUlFyV6kq
/KNTisOW4so6I+Q=
-----END CERTIFICATE-----
subject=/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
---
No client certificate CA names sent
---
SSL handshake has read 1823 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 37E5AF0EE1745AB2DACAEE0FB7824C178A58C6AEF7A0EF93609643F16A20EE51
    Session-ID-ctx:
    Master-Key: 7B9F8A79D3CC3A41CA572ED266076A1531E12EE8D07D859D65F24368ABA0D2CAE670AA0652433D9E0585E566D9C16FCF
    Key-Arg   : None
    Start Time: 1243051912
    Timeout   : 300 (sec)
&lt;span style=&quot;color: rgb(255,0,0)&quot;&gt;    Verify return code: 0 (ok)&lt;/span&gt;
---
&lt;/pre&gt;&lt;p&gt;There should be lots of data, however the important thing to note down is that the final line &amp;quot;Verify return code: 0 (ok)&amp;quot;. I&apos;m using the same certificate for dovecot IMAP mail server, type the following to verify mail server SSL certificate:&lt;br /&gt;&lt;code&gt;$ openssl s_client -CApath ~/.cert/mail.nixcraft.net/ -connect mail.nixcraft.net:993&lt;/code&gt;&lt;br /&gt;Sample output:&lt;/p&gt;&lt;pre&gt;
CONNECTED(00000003)
depth=2 /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
verify return:1
depth=1 /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
verify return:1
depth=0 /O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
verify return:1
---
Certificate chain
 0 s:/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
   i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE5zCCA8+gAwIBAgIEAOJk2zANBgkqhkiG9w0BAQUFADCByjELMAkGA1UEBhMC
VVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNV
BAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlmaWNh
dGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5IFNl
Y3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5NjkyODcw
HhcNMDkwMTE4MjEyMjMxWhcNMTEwMTE4MjEyMjMxWjBbMRowGAYDVQQKExFtYWls
Lm5peGNyYWZ0Lm5ldDEaMBgGA1UEAxMRbWFpbC5uaXhjcmFmdC5uZXQxITAfBgNV
BAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDCBnzANBgkqhkiG9w0BAQEFAAOB
jQAwgYkCgYEA0LhCDXvNXhTHov9Szh474Cv3Nz7QspVOI4p5M+zZt18VTVCHJz0Z
TleJum8RblpU4NPHJgOauIb1CAE3vLSKySV2DjHMt2L2/NUatJiKjDQKAEloKwQK
t75BP0mAGFPZmHlMNUQ32Sr/0byxxM4ElL2SSBasJE3PPVkSBOtLfssCAwEAAaOC
AcUwggHBMA8GA1UdEwEB/wQFMAMBAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMA4GA1UdDwEB/wQEAwIFoDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8v
Y3JsLmdvZGFkZHkuY29tL2dkczEtMS5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1t
AQcXATA5MDcGCCsGAQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHku
Y29tL3JlcG9zaXRvcnkvMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0
dHA6Ly9vY3NwLmdvZGFkZHkuY29tLzBKBggrBgEFBQcwAoY+aHR0cDovL2NlcnRp
ZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5L2dkX2ludGVybWVkaWF0ZS5j
cnQwHwYDVR0jBBgwFoAU/axhMpNsRdbi7oVfmrrndplozOcwMwYDVR0RBCwwKoIR
bWFpbC5uaXhjcmFmdC5uZXSCFXd3dy5tYWlsLm5peGNyYWZ0Lm5ldDAdBgNVHQ4E
FgQUAYML0uoVH8Sn8JZ3xbR9NLzE0tYwDQYJKoZIhvcNAQEFBQADggEBAJ/1/mGM
tF/UPwOvmiNE0i46qXCJDs6Ui7kCxWWQzC+CbT6x3fe8VwZ2/9OVeScw5aGkG7sU
kfid0XmfXxYrqkVsubrhQt/1MKKowB35M5a/wRd7E0h2ucYhBF3dnTQ29yJ9ppHC
HOvsUDGOan+e7japMyTYn9PU9Y8QtnzovRXk55iYfL4p57YvPwk4yMnBtc/krQcd
m6ZdvmY+zbbjWaDyarfIp3fQCL2HD/lC5rJaGUn633GIT0OrrQ4Gfy6hQ98UC+Pt
I8LFuzs02dJlCpDhGquvQ0W6o4uuvjSP28HfGBcmKholG0GT9wyZZCBvUlFyV6kq
/KNTisOW4so6I+Q=
-----END CERTIFICATE-----
subject=/O=mail.nixcraft.net/CN=mail.nixcraft.net/OU=Domain Control Validated
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287
---
No client certificate CA names sent
---
SSL handshake has read 3076 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 509D310C0184E0540FC24F60F36D3E2A62C1F98D6367DBC62E8432FFDC79757A
    Session-ID-ctx:
    Master-Key: 72013A336DAFAF16917C4082785D3D9ADA3D0D3420B63FC5A6C9E5F44117D340A1051653849179A5ADEA57BE2BD65A24
    Key-Arg   : None
    Start Time: 1243052074
    Timeout   : 300 (sec)
    &lt;span style=&quot;color: rgb(255,0,0)&quot;&gt;Verify return code: 0 (ok)&lt;/span&gt;
---
&lt;span style=&quot;color: rgb(255,0,0)&quot;&gt;* OK [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS UIDPLUS LIST-EXTENDED I18NLEVEL=1 QUOTA AUTH=PLAIN AUTH=LOGIN] Dovecot ready.&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Again the final &amp;quot;Dovecot ready&amp;quot; line along with 0 return code indicates that everything is working fine.&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/How-To-Verify-SSL-Certificate-From-A-Shell-Prompt.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/749/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/How-To-Verify-SSL-Certificate-From-A-Shell-Prompt.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/749/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/How-to-enter-Chinese-Characters-within-Telnet.aspx</link>
		<title>telnet 中文輸入</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Fri, 23 Dec 2011 09:09:23 GMT</pubDate>
		<description>&lt;p&gt;在linux的文字窗口中，使用telnet，有时会发现输入的中文会变成乱码，&lt;br /&gt;此时加入参数 -8 就可以解决，例如：&lt;/p&gt;&lt;p&gt;telnet -8 bbs.xxx.xxx&lt;br /&gt;也可以设 ~/.telnetrc 来解决，把底下设定加入 ~/.telnetrc 就可以了，&lt;br /&gt;下次telnet就不用再加参数 -8&lt;/p&gt;&lt;p&gt;DEFAULT set binary&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/How-to-enter-Chinese-Characters-within-Telnet.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/744/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/How-to-enter-Chinese-Characters-within-Telnet.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/744/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/How-to-build-JpegV6-in-64-bit-linux.aspx</link>
		<title>How to build JpegV6 in 64 bit linux</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Thu, 22 Dec 2011 01:16:56 GMT</pubDate>
		<description>&lt;p&gt;How to build jpegsrc.v6b on 64-bit Linux machines &lt;br /&gt;jpegsrc is no longer maintained and has not been updated since the Clinton administration. This is odd considering how critical this library is to so many applications.&lt;/p&gt;&lt;p&gt;If you are trying to build on a 64-bit Linux machine you will probably get this error during the ./configure step:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;checking host system type... Invalid configuration `x86_64-unknown-linux-gnu&apos;: machine `x86_64-unknown&apos; not recognized&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;The fix is simple -- just copy &apos;/usr/share/libtool/config.guess&apos; and &apos;/usr/share/libtool/config.sub&apos; to the same directory as the jpeg-6b ./configure script. You can also copy from from /usr/share/automake-1.9/.&lt;/p&gt;&lt;p&gt;cp /usr/share/libtool/config.guess .&lt;br /&gt;cp /usr/share/libtool/config.sub .&lt;/p&gt;&lt;p&gt;&lt;br /&gt;./configure --enable-shared --enable-static&lt;/p&gt;&lt;p&gt;One site suggests that you also need tell the jpegsrc build where the 64-bit libdir is located:&lt;/p&gt;&lt;p&gt;make libdir=/usr/lib64&lt;br /&gt;make libdir=/usr/lib64 install&lt;br /&gt;That will change the directory where &apos;make install&apos; puts the libjpeg library files, but you may not want that if you are installing libjpeg to a custom path (in other words, if you used the --prefix option for configure).&lt;/p&gt;&lt;p&gt;如果/usr/share/libtool/config.*不存在，则可以先删除本机libtool包，然后重新安装最新版本的libtool,再将对应的libtool/config.*复制到安装源位置，覆盖原来的文件，重新编译：&amp;nbsp;&lt;/p&gt;&lt;p&gt;# yum -y remove libtool&lt;br /&gt;# wget &lt;a href=&quot;http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz&lt;/a&gt;&lt;br /&gt;# tar zxvf libtool-2.4.2.tar.gz &lt;br /&gt;# cd libtool-2.4.2&lt;br /&gt;# ./configure &lt;br /&gt;# make &lt;br /&gt;# make install&lt;/p&gt;&lt;p&gt;# cd ../jpeg-6b/&lt;br /&gt;# cp /usr/local/share/libtool/config/config.* .&lt;br /&gt;# ./configure --prefix=/usr/local/modules/jpeg6/ --enable-shared --enable-static&lt;/p&gt;&lt;p&gt;[root@test jpeg-6b]# ./configure --enable-shared --enable-static&lt;br /&gt;checking for gcc... gcc&lt;br /&gt;checking whether the C compiler (gcc&amp;nbsp; ) works... yes&lt;br /&gt;checking whether the C compiler (gcc&amp;nbsp; ) is a cross-compiler... no&lt;br /&gt;checking whether we are using GNU C... yes&lt;br /&gt;checking how to run the C preprocessor... gcc -E&lt;br /&gt;checking for function prototypes... yes&lt;br /&gt;checking for stddef.h... yes&lt;br /&gt;checking for stdlib.h... yes&lt;br /&gt;checking for string.h... yes&lt;br /&gt;checking for size_t... yes&lt;br /&gt;checking for type unsigned char... yes&lt;br /&gt;checking for type unsigned short... yes&lt;br /&gt;checking for type void... yes&lt;br /&gt;checking for working const... yes&lt;br /&gt;checking for inline... __inline__&lt;br /&gt;checking for broken incomplete types... ok&lt;br /&gt;checking for short external names... ok&lt;br /&gt;checking to see if char is signed... yes&lt;br /&gt;checking to see if right shift is signed... yes&lt;br /&gt;checking to see if fopen accepts b spec... yes&lt;br /&gt;checking for a BSD compatible install... /usr/bin/install -c&lt;br /&gt;checking for ranlib... ranlib&lt;br /&gt;checking host system type... x86_64-unknown-linux-gnu&lt;br /&gt;checking for ranlib... ranlib&lt;br /&gt;checking for gcc... gcc&lt;br /&gt;checking whether we are using GNU C... yes&lt;br /&gt;checking for gcc option to produce PIC... -fPIC&lt;br /&gt;checking if gcc PIC flag -fPIC works... yes&lt;br /&gt;checking if gcc static flag -static works... -static&lt;br /&gt;checking whether ln -s works... yes&lt;br /&gt;checking for ld used by GCC... /usr/bin/ld&lt;br /&gt;checking if the linker (/usr/bin/ld) is GNU ld... yes&lt;br /&gt;checking whether the linker (/usr/bin/ld) supports shared libraries... yes&lt;br /&gt;checking for BSD-compatible nm... /usr/bin/nm -B&lt;br /&gt;checking command to parse /usr/bin/nm -B output... yes&lt;br /&gt;checking how to hardcode library paths into programs... immediate&lt;br /&gt;checking for /usr/bin/ld option to reload object files... -r&lt;br /&gt;checking dynamic linker characteristics... Linux ld.so&lt;br /&gt;checking if libtool supports shared libraries... yes&lt;br /&gt;checking whether to build shared libraries... yes&lt;br /&gt;checking whether to build static libraries... yes&lt;br /&gt;checking for objdir... .libs&lt;br /&gt;creating libtool&lt;br /&gt;checking libjpeg version number... 62&lt;br /&gt;creating ./config.status&lt;br /&gt;creating Makefile&lt;br /&gt;creating jconfig.h&lt;br /&gt;jconfig.h is unchanged&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/How-to-build-JpegV6-in-64-bit-linux.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/743/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/How-to-build-JpegV6-in-64-bit-linux.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/743/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/how-to-make-shell-or-sh-bin-file-executable-in-linux.aspx</link>
		<title>Linux下制作bin安装包</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 20 Dec 2011 15:25:03 GMT</pubDate>
		<description>&lt;p&gt;制作简单的安装包的时候可以简单的用cat命令连接两个文件，&lt;br /&gt;&lt;wbr /&gt;然后头部是脚本文件，执行的时候把下面的文件分解出来就行了。&lt;br /&gt;&lt;wbr /&gt;一般这个后部分的文件是个压缩包，那样，就能够打包很多文件了，在脚本中解压出来即可。&lt;br /&gt;&lt;wbr /&gt;这就是Linux那些bin啊run啊等安装脚本的简单制作了。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;wbr /&gt;下面来看看两个简单的例子：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;1.run的制作&lt;/p&gt;&lt;p&gt;&lt;wbr /&gt;run程序安装包实质上是一个安装脚本加要安装的程序，如下图所示：&lt;/p&gt;&lt;p&gt;|-----------------------|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;安装脚本 &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;|-----------------------|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;程序 &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;|-----------------------|&lt;br /&gt;图： run安装包的结构&lt;/p&gt;&lt;p&gt;这样整个run安装包结构就一目了然了，实际上因为实际需要结构多少有点变动但这个无关紧要，只需要明白原理就行了。&lt;br /&gt;制作run安装包以下举个实际的例子：&lt;br /&gt;为了简单起见，要安装的程序就是helloworld程序，安装它的过程就是把它拷贝到/bin目录下。&lt;br /&gt;$ ls&lt;br /&gt;install.sh helloworld&lt;br /&gt;$ cat install.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;cp helloworld /bin&lt;br /&gt;$&lt;br /&gt;现在有一个安装脚本了，名为install.sh，有一个要安装的程序helloworld.因为要安装的程序一般都是用.tar.bz2来做的。我们这儿也做一下：&lt;br /&gt;$ tar jcvf helloworld.tar.bz2 helloworld&lt;br /&gt;现在修改一个安装脚本install.sh&lt;br /&gt;改为：&lt;br /&gt;#!/bin/bash&lt;br /&gt;lines=7 &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;#这个值是指这个脚本的行数加1，这个脚本共有6行&lt;br /&gt;tail +$lines $0 &amp;gt;/tmp/helloworld.tar.gz # $0表示脚本本身，这个命令用来把从$lines开始的内容写入一个/tmp目录的helloworld.tar.gz文件里。&lt;br /&gt;tar jxvf /tmp/hellowrold.tar.gz&lt;br /&gt;cp helloworld /bin&lt;br /&gt;exit 0&lt;/p&gt;&lt;p&gt;然后使用cat命令连接安装脚本install.sh和helloworld.tar.bz2。&lt;br /&gt;$ cat install.sh helloworld.tar.bz2 &amp;gt; myinstall.run&lt;br /&gt;这样就得到了myinstall.run文件，它的结构如下：&lt;br /&gt;|-------------------| 第1行&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;install.sh &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;| 第6行&lt;br /&gt;|-------------------|&lt;br /&gt;|helloworld.tar.bz2 | 第7行&lt;br /&gt;| &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;|&lt;br /&gt;|-------------------| 结尾&lt;br /&gt;图： myinstall.run安装包的结构&lt;/p&gt;&lt;p&gt;运行myinstall.run时，运行到第6行的exit 0脚本就退出了，&lt;br /&gt;所以不会去运行第7行以下的二进制数据(即helloworld.tar.bz2文件)，&lt;br /&gt;而我们用了tail巧妙地把第7行以下的数据重新生成了一个helloworld.tar.gz文件。再执行安装。&lt;/p&gt;&lt;p&gt;run安装包制作较小的程序包是很好的选择，&lt;br /&gt;但是它也有缺点，做逻辑比较复杂的安装包，写的安装脚本将会很麻烦。&lt;br /&gt;因此此时还是用其他的安装包更好。&lt;/p&gt;&lt;p&gt;2.bin的制作&lt;/p&gt;&lt;p&gt;linux 下制作二进制 .bin &lt;wbr /&gt;的文件&lt;br /&gt;制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里&lt;br /&gt;这样安装的时候只要使用一个包，直接执行该包即可安装完毕，简单方便。&lt;br /&gt;例：制作安装apache、mysql的安装脚本包&lt;br /&gt;1.将源码包先打包&lt;br /&gt;#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz&lt;br /&gt;2.编写脚本如下：&lt;br /&gt;# cat install.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;dir_tmp=/root/installapache&lt;br /&gt;mkdir $dir_tmp&lt;br /&gt;sed -n -e ‘1,/^exit 0$/!p’ $0 &amp;gt; “${dir_tmp}/packages.tar.gz” 2&amp;gt;/dev/null&lt;br /&gt;cd $dir_tmp&lt;br /&gt;tar zxf packages.tar.gz&lt;br /&gt;tar jxf httpd-2.0.63.tar.bz2&lt;br /&gt;cd &lt;wbr /&gt;httpd-2.0.63&lt;br /&gt;./configure –prefix=/tmp/apache2&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd $dir_tmp&lt;br /&gt;tar zxf mysql-5.0.33.tar.gz&lt;br /&gt;cd mysql-5.0.33&lt;br /&gt;./configure –with-charset=gbk –with-extra-charsets=binary,latin1,gb2312 \&lt;br /&gt;–localstatedir=/home/db –with-mysqld-ldflags=-all-static -enable-assembler –with-innodb –prefix=/tmp/mysql5&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;exit 0&lt;/p&gt;&lt;p&gt;#cat install.sh packages.tar.gz &amp;gt;install.bin&lt;/p&gt;&lt;p&gt;这样就生成install.bin的安装文件，改文件是由shell脚本和二进制合成的。&lt;br /&gt;前半部分是脚本后半部分是二进制文件，用strings等二进制查看命令可以看到&lt;br /&gt;最主要的是下面这句，是将二进制文件从.bin文件里分离出来&lt;br /&gt;sed -n -e ‘1,/^exit 0$/!p’ $0 &amp;gt; “${dir_tmp}/packages.tar.gz” 2&amp;gt;/dev/null&lt;br /&gt;##上面一句的意思为打印除从第一行到所在exit 0的行的所有行到${dir_tmp}/packages.tar.gz,如果过程中有错误则输出到/dev/null&lt;/p&gt;&lt;p&gt;安装的时候直接执行sh install.bin&lt;br /&gt;安装这个方法可以将我们平时常使用的安装脚本化，然后打包。以后使用就方便了。&lt;/p&gt;&lt;p&gt;3.总结&lt;br /&gt;上面两个例子，其实不管是bin也好run也好，其实Linux下一切皆文件，而且是不管什么文件，都是一样的看法。&lt;br /&gt;所以这些后缀没有什么意义。上面两个不同的地方是分离，一个是用了tail命令，一个是用了sed来实现。&lt;br /&gt;总之，这只是一种思路，不管用什么办法，只要能合起来然后又分开就行。&lt;/p&gt;&lt;p&gt;另外，有人写出了一个脚本来实现这样的功能，感兴趣的可以自己看一下：&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://megastep.org/makeself/&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#0066cc&quot;&gt;http://megastep.org/makeself/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;4.另一个例子&lt;br /&gt;4.1 bin安装文件制作&lt;br /&gt;4.1.1组成之sh文件（例子：YYYY.bin）&lt;br /&gt;#!/bin/sh&lt;br /&gt;PATH=/usr/bin:/bin&lt;br /&gt;umask 022&lt;br /&gt;echo_args=&amp;quot;-e &amp;quot;&lt;br /&gt;localinstall=$1&lt;br /&gt;more &amp;lt;&amp;lt;&amp;quot;EOF&amp;quot;&lt;br /&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXxx&lt;br /&gt;EOF&lt;br /&gt;agreed=&lt;br /&gt;while [ x$agreed = x ]; do&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;Do you agree to the above license terms? [yes or no] &amp;quot;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;read reply leftover&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;case $reply in&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;y* | Y*)&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;agreed=1;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;n* | N*)&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;If you don&apos;t agree to the license you can&apos;t install this software&amp;quot;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;exit 1;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;esac&lt;br /&gt;done&lt;br /&gt;if [ -d &amp;quot;$localinstall&amp;quot; ] ; then&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;outname=$localinstall/OUTNAME&lt;br /&gt;else&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;outname=OUTNAME&lt;br /&gt;fi&lt;br /&gt;echo &amp;quot;Unpacking...&amp;quot;&lt;br /&gt;tail -n +AAA $0 &amp;gt; $outname &lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;br /&gt;if [ -x /usr/bin/sum ] ; then&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;Checksumming...&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;sum=`/usr/bin/sum $outname`&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;index=1&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;for s in $sum&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;do&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;case $index in&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;1) &lt;wbr /&gt;sum1=$s;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;index=2;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;2) &lt;wbr /&gt;sum2=$s;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;index=3;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;esac&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;done&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;if [ $sum1 != SUM1 -o $sum2 != SUM2 ] ; then&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;The download file appears to be corrupted.&amp;quot;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;Please do not attempt to install this archive file.&amp;quot;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;exit 1&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;fi&lt;br /&gt;else&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;echo &amp;quot;Can&apos;t find /usr/bin/sum to do checksum. &lt;wbr /&gt;Continuing anyway.&amp;quot;&lt;br /&gt;fi&lt;br /&gt;echo &amp;quot;Done.&amp;quot;&lt;br /&gt;exit 0&lt;br /&gt;#此文件YYYY.bin可以重复使用，OUTNAME，SUM1，SUM2均为标识符，表示要打包到bin中的zip，rpm的路径，sum的checksum和filesize。&lt;br /&gt;#用户协议处：XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;wbr /&gt;XXXxx&lt;br /&gt;#tail -n +AAA $0 &amp;gt; $outname，AAA为此sh文件的line count，此命令即把bin中的sh后面的zip或rpm提取出来&lt;br /&gt;# sum用来检测所提取的zip或rpm文件是否正确,&lt;br /&gt;#最后一定要exit 0，一定要.&lt;br /&gt;#也可以在退出前云新unzip或rpm来安装，或者由用户自行来安装zip或rpm&lt;/p&gt;&lt;p&gt;4.1.2 组成之zip，gz或rpm （例子：XXXX.rpm）&lt;br /&gt;&lt;wbr /&gt;这个就是你要安装的zip或rpm.&lt;/p&gt;&lt;p&gt;4.1.3 创建bin安装文件的脚本sh（例子：createbin.sh，使用上面的YYYY.sh和XXXX.rpm)&lt;br /&gt;#!/bin/sh&lt;/p&gt;&lt;p&gt;PATH=.:$PATH&lt;br /&gt;RPM=XXXX.rpm&lt;br /&gt;LICENSEBIN=YYYY.bin&lt;br /&gt;BASE=$(basename $RPM .rpm)&lt;br /&gt;sum=`sum $RPM`&lt;br /&gt;index=1&lt;br /&gt;for s in $sum&lt;br /&gt;do&lt;br /&gt;&lt;wbr /&gt;case $index in&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;1) sum1=$s;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;index=2;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;;;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;2) sum2=$s;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;index=3;&lt;br /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;&lt;wbr /&gt;;;&lt;br /&gt;&lt;wbr /&gt;esac&lt;br /&gt;done&lt;br /&gt;cat $LICENSEBIN | sed -e s/OUTNAME/$RPM/ -e s/SUM1/$sum1/ -e s/SUM2/$sum2/ &amp;gt; linux_license_new.bin&lt;br /&gt;dos2unix -k -q linux_license_new.bin&lt;br /&gt;cat linux_license_new.bin $RPM &amp;gt; ${BASE}-rpm.bin&lt;br /&gt;sudo chmod a+x res/${BASE}-rpm.bin&lt;/p&gt;&lt;p&gt;# dos2unix 确保license shell为linux格式；&lt;br /&gt;#且此shell文件需要在Linux上执行；&lt;br /&gt;4.1.4 参考:http://itboba.com/taxonomy/term/1015&lt;br /&gt;4.1.5&lt;/p&gt;&lt;p&gt;linux 下制作二进制 .bin 的文件 制做方法是使用cat 命令将执行脚本和打包文件同事放到一个.bin的文件里&lt;br /&gt;这样安装的时候只要使用一个包，直接执行该包即可安装完毕，简单方便。&lt;br /&gt;例：制作安装apache、mysql的安装脚本包&lt;br /&gt;1.将源码包先打包&lt;br /&gt;#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz&lt;/p&gt;&lt;p&gt;2.编写脚本如下：&lt;br /&gt;# cat install.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;dir_tmp=/root/installapache&lt;br /&gt;mkdir $dir_tmp&lt;br /&gt;sed -n -e &apos;1,/^exit 0$/!p&apos; $0 &amp;gt; &amp;quot;${dir_tmp}/packages.tar.gz&amp;quot; 2&amp;gt;/dev/null&lt;br /&gt;cd $dir_tmp&lt;br /&gt;tar zxf packages.tar.gz&lt;br /&gt;tar jxf httpd-2.0.63.tar.bz2&lt;br /&gt;cd httpd-2.0.63&lt;br /&gt;./configure --prefix=/tmp/apache2&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd $dir_tmp&lt;br /&gt;tar zxf mysql-5.0.33.tar.gz&lt;br /&gt;cd mysql-5.0.33&lt;br /&gt;./configure --with-charset=gbk --with-extra-charsets=binary,latin1,gb2312 --localstatedir=/home/db --with-mysqld-ldflags=-all-static -enable-assembler --with-innodb --prefix=/tmp/mysql5&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;exit 0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;#cat install.sh packages.tar.gz &amp;gt;install.bin&lt;/p&gt;&lt;p&gt;这样就生成install.bin的安装文件，改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件，用strings等二进制查看命令可以看到&lt;br /&gt;最主要的是下面这句，是将二进制文件从.bin文件里分离出来&lt;br /&gt;sed -n -e &apos;1,/^exit 0$/!p&apos; $0 &amp;gt; &amp;quot;${dir_tmp}/packages.tar.gz&amp;quot; 2&amp;gt;/dev/null&lt;/p&gt;&lt;p&gt;安装的时候直接执行&lt;br /&gt;sh install.bin&lt;br /&gt;安装这个方法可以将我们平时常使用的安装脚本化，然后打包。以后使用就方便了。&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/how-to-make-shell-or-sh-bin-file-executable-in-linux.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/742/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/how-to-make-shell-or-sh-bin-file-executable-in-linux.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/742/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/NFS-client-hangs.aspx</link>
		<title>nfs client挂起处理</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Thu, 08 Dec 2011 02:00:55 GMT</pubDate>
		<description>&lt;p&gt;&lt;b&gt;症状：&lt;/b&gt;&lt;/p&gt;&lt;p&gt;当NFS SERVER服务停止或者是NFS SERVER宕机，NFS Client 中一些涉及到挂载目录的命令可能会被挂起，如df、ls等。&lt;/p&gt;&lt;p&gt;&lt;b&gt;解决办法：&lt;/b&gt;&lt;/p&gt;&lt;p&gt;可以使用mount -l列出挂载的目录，卸载掉已经停止NFS服务的目录&lt;/p&gt;&lt;p&gt;[root@test01 ~]# mount -l&lt;br /&gt;/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)&lt;br /&gt;proc on /proc type proc (rw)&lt;br /&gt;sysfs on /sys type sysfs (rw)&lt;br /&gt;devpts on /dev/pts type devpts (rw,gid=5,mode=620)&lt;br /&gt;/dev/sda1 on /boot type ext3 (rw) [/boot]&lt;br /&gt;tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)&lt;br /&gt;sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)&lt;br /&gt;192.168.146.250:/home/share on /mnt type nfs (rw,addr=192.168.146.250)&lt;/p&gt;&lt;p&gt;[root@test01 ~]# umount -l /mnt/ #卸载&lt;br /&gt;[root@test01 ~]# mount -l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)&lt;br /&gt;proc on /proc type proc (rw)&lt;br /&gt;sysfs on /sys type sysfs (rw)&lt;br /&gt;devpts on /dev/pts type devpts (rw,gid=5,mode=620)&lt;br /&gt;/dev/sda1 on /boot type ext3 (rw) [/boot]&lt;br /&gt;tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)&lt;br /&gt;sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/NFS-client-hangs.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/735/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/NFS-client-hangs.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/735/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/Linux-shell-regular-expression-comparison.aspx</link>
		<title>linux shell 正则表达式(BREs,EREs,PREs)差异比较</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Mon, 17 Oct 2011 08:20:30 GMT</pubDate>
		<description>&lt;div id=&quot;cnblogs_post_body&quot;&gt;&lt;p&gt;正则表达式：在计算机科学中，是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里，正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如，在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件（例如sed和grep）普及开的。正则表达式通常缩写成“regex”，单数有regexp、regex，复数有regexps、regexes、regexen。这些是正则表达式的定义。 由于起源于unix系统，因此很多语法规则一样的。但是随着逐渐发展，后来扩展出以下几个类型。了解这些对于学习正则表达式。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、正则表达式分类：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1、基本的正则表达式（Basic Regular Expression 又叫 Basic RegEx 简称 BREs）&lt;/p&gt;&lt;p&gt;2、扩展的正则表达式（Extended Regular Expression 又叫 Extended RegEx 简称 EREs）&lt;/p&gt;&lt;p&gt;3、Perl 的正则表达式（Perl Regular Expression 又叫 Perl RegEx 简称 PREs）&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #808000&quot;&gt;说明：只有掌握了正则表达式，才能全面地掌握 Linux 下的常用文本工具（例如：grep、egrep、GUN sed、 Awk 等） 的用法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、Linux 中常用文本工具与正则表达式的关系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;常握 Linux 下几种常用文本工具的特点，对于我们更好的使用正则表达式是很有帮助的&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;grep , egrep 正则表达式特点：&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;1）grep 支持：BREs、EREs、PREs 正则表达式&lt;/p&gt;&lt;p&gt;grep 指令后不跟任何参数，则表示要使用 ”BREs“&lt;/p&gt;&lt;p&gt;grep 指令后跟 ”-E&amp;quot; 参数，则表示要使用 “EREs“&lt;/p&gt;&lt;p&gt;grep 指令后跟 “-P&amp;quot; 参数，则表示要使用 “PREs&amp;quot;&lt;/p&gt;&lt;p&gt;2）egrep 支持：EREs、PREs 正则表达式&lt;/p&gt;&lt;p&gt;egrep 指令后不跟任何参数，则表示要使用 “EREs”&lt;/p&gt;&lt;p&gt;egrep 指令后跟 “-P&amp;quot; 参数，则表示要使用 “PREs&amp;quot;&lt;/p&gt;&lt;p&gt;3）grep 与 egrep 正则匹配文件，处理文件方法&lt;/p&gt;&lt;p&gt;a. grep 与 egrep 的处理对象：文本文件&lt;/p&gt;&lt;p&gt;b. grep 与 egrep 的处理过程：查找文本文件中是否含要查找的 “关键字”（关键字可以是正则表达式） ，如果含有要查找的 ”关健字“，那么默认返回该文本文件中包含该”关健字“的该行的内容，并在标准输出中显示出来，除非使用了“&amp;gt;&amp;quot; 重定向符号,&lt;/p&gt;&lt;p&gt;c. grep 与 egrep 在处理文本文件时，是按行处理的&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;sed 正则表达式特点&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;1）sed 文本工具支持：BREs、EREs&lt;/p&gt;&lt;p&gt;sed 指令默认是使用&amp;quot;BREs&amp;quot;&lt;/p&gt;&lt;p&gt;sed 命令参数 “-r ” ，则表示要使用“EREs&amp;quot;&lt;/p&gt;&lt;p&gt;2）sed 功能与作用&lt;/p&gt;&lt;p&gt;a. sed 处理的对象：文本文件&lt;/p&gt;&lt;p&gt;b. sed 处理操作：对文本文件的内容进行 --- 查找、替换、删除、增加等操作&lt;/p&gt;&lt;p&gt;c. sed 在处理文本文件的时候，也是按行处理的&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Awk（gawk）正则表达式特点&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;1）Awk 文本工具支持：EREs&lt;/p&gt;&lt;p&gt;awk 指令默认是使用 “EREs&amp;quot;&lt;/p&gt;&lt;p&gt;2）Awk 文本工具处理文本的特点&lt;/p&gt;&lt;p&gt;a. awk 处理的对象：文本文件&lt;/p&gt;&lt;p&gt;b. awk 处理操作：主要是对列进行操作&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;三、常见3中类型正则表达式比较&lt;/strong&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;1&quot; cellpadding=&quot;4&quot; width=&quot;100%&quot; bgcolor=&quot;#666666&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;字符&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;163&quot;&gt;说明&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;Basic RegEx&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;Extended RegEx&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;python RegEx&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;Perl regEx&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;转义&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配行首，例如&apos;^dog&apos;匹配以字符串dog开头的行（注意：awk 指令中，&apos;^&apos;则是匹配字符串的开始）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;^&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;^&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配行尾，例如：&apos;^、dog$&apos;匹配以字符串 dog 为结尾的行（注意：awk 指令中，&apos;$&apos;则是匹配字符串的结尾）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;^$&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;&lt;p&gt;匹配空行&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;^$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;^$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^string$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配行，例如：&apos;^dog$&apos;匹配只含一个字符串 dog 的行&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^string$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;^string$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;^string$&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;^string$&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&amp;lt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配单词，例如：&apos;\&amp;lt;frog&apos; （等价于&apos;\bfrog&apos;），匹配以 frog 开头的单词&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&amp;lt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\&amp;lt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（但可以使用\b来匹配单词，例如：&apos;\bfrog&apos;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\&amp;gt;&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配单词，例如：&apos;frog\&amp;gt;&apos;（等价于&apos;frog\b &apos;），匹配以 frog 结尾的单词&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&amp;gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\&amp;gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（但可以使用\b来匹配单词，例如：&apos;frog\b&apos;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\&amp;lt;x\&amp;gt;&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个单词或者一个特定字符，例如：&apos;\&amp;lt;frog\&amp;gt;&apos;（等价于&apos;\bfrog\b&apos;）、&apos;\&amp;lt;G\&amp;gt;&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\&amp;lt;x\&amp;gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\&amp;lt;x\&amp;gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（但可以使用\b来匹配单词，例如：&apos;\bfrog\b&apos;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;()&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配表达式，例如：不支持&apos;（frog）&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（但可以使用\(\)，如：\(dog\)&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;()&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;()&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;()&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\(\)&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配表达式，例如：不支持&apos;（frog）&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\(\)&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同())&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同())&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同())&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;？&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配前面的子表达式 0 次或 1 次（等价于{0,1}），例如：where(is)?能匹配&amp;quot;where&amp;quot; 以及&amp;quot;whereis&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同\?)&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;？&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;？&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;？&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\?&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配前面的子表达式 0 次或 1 次（等价于&apos;\{0,1\}&apos;），例如：&apos;where\(is\)\? &apos;能匹配 &amp;quot;where&amp;quot;以及&amp;quot;whereis&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\?&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同?)&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同?)&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同?)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;?&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;当该字符紧跟在任何一个其他限制符（*, +, ?, {n},{n,}, {n,m}） 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 &amp;quot;oooo&amp;quot;，&apos;o+?&apos; 将匹配单个&amp;quot;o&amp;quot;，而 &apos;o+&apos; 将匹配所有 &apos;o&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;.&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配除换行符（&apos;\n&apos;）之外的任意单个字符（注意：awk 指令中的句点能匹配换行符）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;.&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;.（如果要匹配包括“\n”在内的任何一个字符，请使用：&apos;(^$)|（.）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;.&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;.（如果要匹配包括“\n”在内的任何一个字符，请使用：&apos; [.\n] &apos;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;*&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配前面的子表达式 0 次或多次（等价于{0, }），例如：zo* 能匹配 &amp;quot;z&amp;quot;以及 &amp;quot;zoo&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;*&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;*&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;*&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;*&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\+&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配前面的子表达式 1 次或多次（等价于&apos;\{1, \}&apos;），例如：&apos;where\(is\)\+ &apos;能匹配 &amp;quot;whereis&amp;quot;以及&amp;quot;whereisis&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\+&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同+)&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同+)&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;92&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同+)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;+&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配前面的子表达式 1 次或多次（等价于{1, }），例如：zo+能匹配 &amp;quot;zo&amp;quot;以及 &amp;quot;zoo&amp;quot;，但不能匹配 &amp;quot;z&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同\+)&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;+&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;+&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;{n}&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;n 必须是一个 0 或者正整数，匹配子表达式 n 次，例如：zo{2}能匹配&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同\{n\})&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;{n}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;{n}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;{n}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;{n,}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;&amp;quot;zooz&amp;quot;，但不能匹配 &amp;quot;Bob&amp;quot;n 必须是一个 0 或者正整数，匹配子表达式大于等于 n次，例如：go{2,}&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同\{n,\})&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;{n,}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;{n,}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;{n,}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;{n,m}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;能匹配 &amp;quot;good&amp;quot;，但不能匹配 godm 和 n 均为非负整数，其中 n &amp;lt;= m，最少匹配 n 次且最多匹配 m 次 ，例如：o{1,3}将配&amp;quot;fooooood&amp;quot; 中的前三个 o（请注意在逗号和两个数之间不能有空格）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同\{n,m\})&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;{n,m}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;{n,m}&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;{n,m}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;x|y&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配 x 或 y，例如： 不支持&apos;z|（food）&apos; 能匹配 &amp;quot;z&amp;quot; 或&amp;quot;food&amp;quot;；&apos;（z|f）ood&apos; 则匹配&amp;quot;zood&amp;quot; 或 &amp;quot;food&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;（同x\|y)&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;x|y&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;x|y&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;x|y&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[0-9]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配从 0 到 9 中的任意一个数字字符（注意：要写成递增）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[0-9]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[0-9]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[0-9]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[0-9]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[xyz]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;字符集合，匹配所包含的任意一个字符，例如：&apos;[abc]&apos;可以匹配&amp;quot;lay&amp;quot; 中的 &apos;a&apos;（注意：如果元字符，例如：. *等，它们被放在[ ]中，那么它们将变成一个普通字符）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[xyz]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[^xyz]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;负值字符集合，匹配未包含的任意一个字符（注意：不包括换行符），例如：&apos;[^abc]&apos; 可以匹配 &amp;quot;Lay&amp;quot; 中的&apos;L&apos;（注意：[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[^xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[^xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[^xyz]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[^xyz]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配大写字母或者小写字母中的任意一个字符（注意：要写成递增）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[A-Za-z]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[^A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配除了大写与小写字母之外的任意一个字符（注意：写成递增）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[^A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[^A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[^A-Za-z]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[^A-Za-z]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\d&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配从 0 到 9 中的任意一个数字字符（等价于 [0-9]）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\d&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\d&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\D&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配非数字字符（等价于 [^0-9]）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\D&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\S&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何非空白字符（等价于[^\f\n\r\t\v]）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\S&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\S&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\s&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何空白字符，包括空格、制表符、换页符等等（等价于[ \f\n\r\t\v]）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\s&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\W&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;&lt;p&gt;匹配任何非单词字符 (等价于[^A-Za-z0-9_])&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\W&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\W&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\W&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\W&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\w&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配包括下划线的任何单词字符（等价于[A-Za-z0-9_]）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\w&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\w&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\w&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\w&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\B&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配非单词边界，例如：&apos;er\B&apos; 能匹配 &amp;quot;verb&amp;quot; 中的&apos;er&apos;，但不能匹配&amp;quot;never&amp;quot; 中的&apos;er&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\B&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\B&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\B&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\b&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个单词边界，也就是指单词和空格间的位置，例如： &apos;er\b&apos; 可以匹配&amp;quot;never&amp;quot; 中的 &apos;er&apos;，但不能匹配 &amp;quot;verb&amp;quot; 中的&apos;er&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\b&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\b&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\b&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\b&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\t&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个横向制表符（等价于 \x09和 \cI）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\t&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\t&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\v&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个垂直制表符（等价于 \x0b和 \cK）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\v&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\v&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\n&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个换行符（等价于 \x0a 和\cJ）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\n&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\n&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\f&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个换页符（等价于\x0c 和\cL）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\f&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\f&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\r&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配一个回车符（等价于 \x0d 和\cM）&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\r&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\r&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配转义字符本身&amp;quot;\&amp;quot;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\\&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\\&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\cx&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配由 x 指明的控制字符，例如：\cM匹配一个Control-M 或回车符，x 的值必须为A-Z 或 a-z 之一，否则，将 c 视为一个原义的 &apos;c&apos; 字符&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\cx&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\xn&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长，例如：&apos;\x41&apos; 匹配 &amp;quot;A&amp;quot;。&apos;\x041&apos; 则等价于&apos;\x04&apos; &amp;amp; &amp;quot;1&amp;quot;。正则表达式中可以使用 ASCII 编码&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;75&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;\xn&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;\num&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配 num，其中 num是一个正整数。表示对所获取的匹配的引用&lt;/td&gt;&lt;td bgcolor=&quot;#cccccc&quot; width=&quot;69&quot;&gt;&lt;strong&gt;不支持&lt;/strong&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;\num&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;\num&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alnum:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何一个字母或数字（[A-Za-z0-9]），例如：&apos;[[:alnum:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alnum:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:alnum:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alnum:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:alnum:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alpha:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何一个字母（[A－Za－z]）， 例如：&apos; [[:alpha:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alpha:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:alpha:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:alpha:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:alpha:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:digit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何一个数字（[0-9]），例如：&apos;[[:digit:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:digit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:digit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:digit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:digit:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:lower:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何一个小写字母（[a-z]）， 例如：&apos; [[:lower:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:lower:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:lower:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:lower:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:lower:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:upper:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;匹配任何一个大写字母（[A-Z]）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:upper:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:upper:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:upper:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:upper:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:space:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个空白字符： 支持制表符、空格，例如：&apos; [[:space:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:space:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:space:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:space:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:space:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:blank:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;空格和制表符（横向和纵向），例如：&apos;[[:blank:]]&apos;ó&apos;[\s\t\v]&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:blank:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:blank:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:blank:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:blank:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:graph:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个可以看得见的且可以打印的字符（注意：不包括空格和换行符等），例如：&apos;[[:graph:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:graph:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:graph:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:graph:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:graph:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:print:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个可以打印的字符（注意：不包括：[:cntrl:]、字符串结束符&apos;\0&apos;、EOF 文件结束符（-1）， 但包括空格符号），例如：&apos;[[:print:]] &apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:print:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:print:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:print:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:print:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[:cntrl:]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个控制字符（ASCII 字符集中的前 32 个字符，即：用十进制表示为从 0 到31，例如：换行符、制表符等等），例如：&apos; [[:cntrl:]]&apos;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[:cntrl:]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;&lt;p&gt;[:cntrl:]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;&lt;p&gt;[:cntrl:]&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;&lt;p&gt;[:cntrl:]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:punct:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个标点符号（不包括：[:alnum:]、[:cntrl:]、[:space:]这些字符集）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:punct:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:punct:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:punct:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:punct:]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:xdigit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;163&quot;&gt;任何一个十六进制数（即：0-9，a-f，A-F）&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:xdigit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;75&quot;&gt;[:xdigit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;69&quot;&gt;[:xdigit:]&lt;/td&gt;&lt;td bgcolor=&quot;#ffffff&quot; width=&quot;92&quot;&gt;[:xdigit:]&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;四、三种不同类型正则表达式比较&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #808000&quot;&gt;注意： 当使用 BERs（基本正则表达式）时，必须在下列这些符号前加上转义字符（&apos;\&apos;），屏蔽掉它们的 speical meaning “?,+,|,{,},（,）” 这些字符，需要加入转义符号”\”&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #808000&quot;&gt;注意：修饰符用在正则表达式结尾，例如：/dog/i，其中 “ i “ 就是修饰符，它代表的含义就是：匹配时不区分大小写，那么修饰符有哪些呢？常见的修饰符如下:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;g 全局匹配（即：一行上的每个出现，而不只是一行上的第一个出现）&lt;br /&gt;s 把整个匹配串当作一行处理&lt;br /&gt;m 多行匹配&lt;br /&gt;i 忽略大小写&lt;br /&gt;x 允许注释和空格的出现&lt;br /&gt;U 非贪婪匹配&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;以上就是linux 常见3种类型正则表达式异同之处，整体了解这些，我相信在使用这些工具的时候，就可以更加清楚明晰了。&lt;/p&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</description>
		<guid>http://www.517sou.net/Article/Linux-shell-regular-expression-comparison.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/701/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/Linux-shell-regular-expression-comparison.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/701/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/problem-with-yum-No-module-named-yum.aspx</link>
		<title>解决Centos5上升级Python后yum不能用的问题</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 27 Sep 2011 09:28:49 GMT</pubDate>
		<description>&lt;h2 class=&quot;entry-title&quot;&gt;解决Centos5上升级Python后yum不能用的问题&lt;/h2&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;p&gt;把Centos5上的Python升级到2.6后，用yum安装东西时提示&lt;/p&gt;&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace&quot; class=&quot;java&quot;&gt;
There was a problem importing one of the Python modules
required to run yum. &lt;span style=&quot;color: rgb(0,102,51)&quot;&gt;The&lt;/span&gt; error leading to &lt;span style=&quot;color: rgb(0,0,0); font-weight: bold&quot;&gt;this&lt;/span&gt; problem was&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;
 
 No module named yum
 
Please install a &lt;span style=&quot;color: rgb(0,0,0); font-weight: bold&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;color: rgb(0,102,153)&quot;&gt;which&lt;/span&gt; provides &lt;span style=&quot;color: rgb(0,0,0); font-weight: bold&quot;&gt;this&lt;/span&gt; module, or
verify that the module is installed correctly.
 
&lt;span style=&quot;color: rgb(0,102,51)&quot;&gt;It&lt;/span&gt;&lt;span style=&quot;color: rgb(0,0,255)&quot;&gt;&apos;s possible that the above module doesn&apos;&lt;/span&gt;t match the
current version of Python, which is&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;
2.6.5 &lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;(&lt;/span&gt;r265&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;79063&lt;/span&gt;, Jul  &lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;2010&lt;/span&gt;, &lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;56&lt;/span&gt;&lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;[&lt;/span&gt;GCC 4.1.2 &lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;20080704&lt;/span&gt;&lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;(&lt;/span&gt;Red Hat 4.1.2&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(204,102,204)&quot;&gt;46&lt;/span&gt;&lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(0,153,0)&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: rgb(0,0,0); font-weight: bold&quot;&gt;If&lt;/span&gt; you cannot solve &lt;span style=&quot;color: rgb(0,0,0); font-weight: bold&quot;&gt;this&lt;/span&gt; problem yourself, please go to
the yum faq at&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;
 http&lt;span style=&quot;color: rgb(51,153,51)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font-style: italic; color: rgb(102,102,102)&quot;&gt;//wiki.linux.duke.edu/YumFaq&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;解决方法：&lt;br /&gt;由于yum 默认用的是python2.4，所以编译vim /usr/bin/yum&lt;/p&gt;&lt;p&gt;把#!/usr/bin/python 改为&lt;br /&gt;#!/usr/bin/python2.4 即可&lt;/p&gt;&lt;/div&gt;</description>
		<guid>http://www.517sou.net/Article/problem-with-yum-No-module-named-yum.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/692/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/problem-with-yum-No-module-named-yum.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/692/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/linux-htop.aspx</link>
		<title>htop - an interactive process viewer for Linux</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 27 Sep 2011 08:39:59 GMT</pubDate>
		<description>&lt;p&gt;&lt;b&gt;htop - an interactive process viewer for Linux&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This is htop, an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses. Tested with Linux 2.4 and 2.6.&lt;/p&gt;&lt;p class=&quot;center&quot;&gt;&lt;img title=&quot;htop&quot; alt=&quot;htop&quot; src=&quot;http://www.517sou.net/Attach/month_1109/hw2q0m_164753_1.gif&quot; /&gt;&lt;/p&gt;&lt;p class=&quot;center&quot;&gt;官方网站：&lt;a href=&quot;http://htop.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;http://htop.sourceforge.net/&lt;/a&gt;&lt;br /&gt;　　可以进行水平或竖直滚动 （总算可以看到所有进程和全部命令行了）&lt;br /&gt;　　可以跟踪进程 （通过集成strace实现）&lt;br /&gt;　　主页面上显示常用功能项，很方便。top里可以要&apos;h&apos;一下。&lt;br /&gt;　　支持进程树状显示&lt;br /&gt;　　可以按名称查找进程&lt;br /&gt;　　支持鼠标&lt;br /&gt;　　htop很不错，但还可以做得更好，下面是我想要的功能：&lt;br /&gt;　　显示进程打开的文件&lt;br /&gt;　　显示进程内存映射情况&lt;br /&gt;　　更完整的man手册（比如设置更新周期的命令行选项&apos;-d&apos;就没有在手册中说明）&lt;br /&gt;　　P.S. strace是个宝贝。单独做一个strace前端本身就是个不错的项目，支持对strace结果的分类，查询等功能。&lt;img class=&quot;Image&quot; alt=&quot;&quot; src=&quot;http://www.517sou.net/Attach/month_1109/e4z2z0_htop.png&quot; /&gt;&lt;/p&gt;&lt;p&gt;[root@mx6_bak io]# man htop&lt;br /&gt;htop(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Utils&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htop(1)&lt;/p&gt;&lt;p&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htop - interactive process viewer&lt;/p&gt;&lt;p&gt;SYNTAX&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htop&lt;/p&gt;&lt;p&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This program is a free (GPL) ncurses-based process viewer.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; It&amp;nbsp; is similar to top, but allows to scroll the list vertically and horizontally to see all processes and their&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; full command lines.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tasks related to processes (killing, renicing) can be done without entering their PIDs.&lt;/p&gt;&lt;p&gt;COMMAND-LINE OPTIONS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The following flags are supported:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -d DELAY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay between updates, in tenths of seconds&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -u USERNAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Show only processes of a given user&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --sort-key COLUMN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sort by this column (use --sort-key help for a column list)&lt;/p&gt;&lt;p&gt;INTERACTIVE COMMANDS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The following commands are supported:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Arrows, PgUP, PgDn, Home, End&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scroll process list.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Space&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Tag&amp;quot;: mark a process. Commands that can operate on multiple processes, like &amp;quot;kill&amp;quot;, will then apply&amp;nbsp; over&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the list of tagged processes, instead of the currently highlighted one.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; U&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Untag&amp;quot; all processes (remove all tags added with the Space key).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s&amp;nbsp;&amp;nbsp;&amp;nbsp; Trace&amp;nbsp; process&amp;nbsp; system calls: if strace(1) is installed, pressing this key will attach it to the currently&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selected process, presenting a live update of system calls issued by the process.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l&amp;nbsp;&amp;nbsp;&amp;nbsp; Display open files for a process: if lsof(1) is installed, pressing this key will display the list of file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; descriptors opened by the process.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F1, h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Help screen&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F2, S&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Setup screen. There you can configure meters displayed on the top side of the screen, as well as set vari-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ous display options, choose among color schemes and select the layout of the displayed columns.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F3, /&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Incremental process search: type in part of a process command line and the&amp;nbsp; selection&amp;nbsp; highlight&amp;nbsp; will&amp;nbsp; be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moved to it. While in search mode, pressing this key will cycle through matching occurrences.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F4, I&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Invert sort order: if sort order is increasing, switch to decreasing, and vice-versa.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F5, t&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tree view: organize processes by parenthood, and layout the relations between them as a tree. Toggling the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key will switch between tree and your previously selected sort view. Selecting a sort view will exit&amp;nbsp; tree&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; view.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F6, &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select field for sorting. The sort field is indicated by a highlight in the header.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F7, ], -&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Increase&amp;nbsp; selected process priority (subtract from ’nice’ value).&amp;nbsp; This can be done by the superuser only.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F8, [, +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Decrease selected process priority (add to ’nice’ value)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F9, k&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Kill&amp;quot; process: sends a signal which is selected in a menu, to one or a group of processes.&amp;nbsp; If&amp;nbsp; processes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; were tagged, sends the signal to all tagged processes.&amp;nbsp; If none is tagged, sends to the currently selected&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; process.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F10, q&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Quit&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +, - When in tree view mode, expand or collapse subtree. When a subtree is collapsed a &amp;quot;+&amp;quot; sign&amp;nbsp; shows&amp;nbsp; to&amp;nbsp; the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left of the process name.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a (on multiprocessor machines)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set CPU affinity: mark which CPUs a process is allowed to use.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u&amp;nbsp;&amp;nbsp;&amp;nbsp; Show only processes owned by a specified user.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; M&amp;nbsp;&amp;nbsp;&amp;nbsp; Sort by memory usage (top compatibility key).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P&amp;nbsp;&amp;nbsp;&amp;nbsp; Sort by processor usage (top compatibility key).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T&amp;nbsp;&amp;nbsp;&amp;nbsp; Sort by time (top compatibility key).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Follow&amp;quot;&amp;nbsp; process:&amp;nbsp; if&amp;nbsp; the sort order causes the currently selected process to move in the list, make the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selection bar follow it. This is useful for monitoring a process: this way, you can keep a process&amp;nbsp; always&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; visible on screen. When a movement key is used, &amp;quot;follow&amp;quot; loses effect.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; K&amp;nbsp;&amp;nbsp;&amp;nbsp; Hide&amp;nbsp; kernel&amp;nbsp; threads: prevent the threads belonging the kernel to be displayed in the process list. (This&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; is a toggle key.)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; H&amp;nbsp;&amp;nbsp;&amp;nbsp; Hide user threads: on systems that represent them differently than&amp;nbsp; ordinary&amp;nbsp; processes&amp;nbsp; (such&amp;nbsp; as&amp;nbsp; recent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NPTL-based systems), this can hide threads from userspace processes in the process list. (This is a toggle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key.)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ctrl-L&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Refresh: redraw screen and recalculate values.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Numbers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PID search: type in process ID and the selection highlight will be moved to it.&lt;/p&gt;&lt;p&gt;AUTHORS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htop is developed by Hisham Muhammad &amp;lt;&lt;a href=&quot;mailto:loderunner@users.sourceforge.net&quot;&gt;loderunner@users.sourceforge.net&lt;/a&gt;&amp;gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This man page was written by Bartosz Fenski &amp;lt;&lt;a href=&quot;mailto:fenio@o2.pl&quot;&gt;fenio@o2.pl&lt;/a&gt;&amp;gt; for the Debian GNU/Linux distribution (but it may&amp;nbsp; be&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used by others), and updated by Hisham Muhammad.&lt;/p&gt;&lt;p&gt;Bartosz Fenski &amp;lt;&lt;a href=&quot;mailto:fenio@o2.pl&quot;&gt;fenio@o2.pl&lt;/a&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htop(1)&lt;/p&gt;&lt;p&gt;Ex：&lt;/p&gt;&lt;p&gt;Using htop do the following.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;font face=&quot;Consolas&quot;&gt;htop
F5 (Tree view)
F2 (Setup)
Select columns
Select RBYTES WBYTES
F10 (Done)
&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And there you go, per process disk I/O, in real time.&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/linux-htop.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/690/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/linux-htop.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/690/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/how-can-i-record-what-process-or-kernel-activity-is-using-the-disk-in-gnu-linux.aspx</link>
		<title>如何找出当前占用磁盘IO最多的进程</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 27 Sep 2011 06:40:26 GMT</pubDate>
		<description>&lt;p&gt;linux系统上可以使用（centos 2.6.18-144开始支持），dstat版本至少是：dstat-0.6.7-1.rf.noarch.rpm&lt;br /&gt;安装&lt;br /&gt;wget -c &lt;a href=&quot;http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#0066cc&quot;&gt;http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br /&gt;rpm -Uvh dstat-0.6.7-1.rf.noarch.rpm&lt;/p&gt;&lt;p&gt;&lt;br /&gt;使用&lt;br /&gt;# dstat -M topio -d -M topbio&lt;br /&gt;&lt;span&gt;&lt;img class=&quot;blogimg&quot; border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://www.517sou.net/Attach/month_1109/2crtq0_083334_1.jpg&quot; small=&quot;0&quot; /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Linux Kernel 2.6.20 以上的内核支持进程 IO 统计，可以用类似 iotop 这样的工具来监测每个进程对 IO 操作的情况，就像用 top 来实时查看进程内存、CPU 等占用情况那样。但是对于 2.6.20 以下的 Linux 内核版本就没那么幸运了，根据 &lt;a href=&quot;http://stackoverflow.com/questions/249570/&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0066cc&quot;&gt;Stack Overflow 的这篇回帖&lt;/font&gt;&lt;/a&gt; 给出的方法，VPSee 写了一个简单的 Python 脚本用来在 linux kernel &amp;lt; 2.6.20 下打印进程 IO 状况。&lt;/p&gt;&lt;h2&gt;Kernel &amp;lt; 2.6.20&lt;/h2&gt;&lt;p&gt;这个脚本的想法很简单，把 dmesg 的结果重定向到一个文件后再解析出来，每隔1秒钟打印一次进程 IO 读写的统计信息，执行这个脚本需要 root：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
#!/usr/bin/python
# Monitoring per-process disk I/O activity
# written by http://www.vpsee.com 
import sys, os, time, signal, re
class DiskIO:
    def __init__(self, pname=None, pid=None, reads=0, writes=0):
        self.pname = pname
        self.pid = pid
        self.reads = 0
        self.writes = 0
def main():
    argc = len(sys.argv)
    if argc != 1:
        print &amp;quot;usage: ./iotop&amp;quot;
        sys.exit(0)
    if os.getuid() != 0:
        print &amp;quot;must be run as root&amp;quot;
        sys.exit(0)
    signal.signal(signal.SIGINT, signal_handler)
    os.system(&apos;echo 1 &amp;gt; /proc/sys/vm/block_dump&apos;)
    print &amp;quot;TASK              PID       READ      WRITE&amp;quot;
    while True:
        os.system(&apos;dmesg -c &amp;gt; /tmp/diskio.log&apos;)
        l = []
        f = open(&apos;/tmp/diskio.log&apos;, &apos;r&apos;)
        line = f.readline()
        while line:
            m = re.match(\
                &apos;^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)&apos;, line)
            if m != None:
                if not l:
                    l.append(DiskIO(m.group(1), m.group(2)))
                    line = f.readline()
                    continue
                found = False
                for item in l:
                    if item.pid == m.group(2):
                        found = True
                        if m.group(3) == &amp;quot;READ&amp;quot;:
                            item.reads = item.reads + 1
                        elif m.group(3) == &amp;quot;WRITE&amp;quot;:
                            item.writes = item.writes + 1
                if not found:
                    l.append(DiskIO(m.group(1), m.group(2)))
            line = f.readline()
        time.sleep(1)
        for item in l:
            print &amp;quot;%-10s %10s %10d %10d&amp;quot; % \
                (item.pname, item.pid, item.reads, item.writes)
def signal_handler(signal, frame):
    os.system(&apos;echo 0 &amp;gt; /proc/sys/vm/block_dump&apos;)
    sys.exit(0)
if __name__==&amp;quot;__main__&amp;quot;:
    main()
&lt;/pre&gt;&lt;h2&gt;Kernel &amp;gt;= 2.6.20&lt;/h2&gt;&lt;p&gt;如果想用 iotop 来实时查看进程 IO 活动状况的话，需要下载和升级新内核（2.6.20 或以上版本）。编译新内核时需要打开 TASK_DELAY_ACCT 和 TASK_IO_ACCOUNTING 选项。解压内核后进入配置界面：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
# tar jxvf linux-2.6.30.5.tar.bz2
# mv linux-2.6.30.5 /usr/src/
# cd /usr/src/linux-2.6.30.5
# make menuconfig
&lt;/pre&gt;&lt;p&gt;选择 Kernel hacking –&amp;gt; Collect scheduler debugging info 和 Collect scheduler statistics，保存内核后编译内核：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
# make; make modules; make modules_install; make install
&lt;/pre&gt;&lt;p&gt;修改 grub，确认能正确启动新内核：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
# vi /boot/grub/menu.lst
&lt;/pre&gt;&lt;p&gt;出了新内核外，iotop 还需要 Python 2.5 或以上才能运行，所以如果当前 Python 是 2.4 的话需要下载和安装最新的 Python 包。这里使用源代码编译安装：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
# tar jxvf Python-2.6.2.tar.bz2
# cd Python-2.6.2
# ./configure
# make; make install
&lt;/pre&gt;&lt;p&gt;别忘了下载 setuptools：&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;
# mv setuptools-0.6c9-py2.6.egg.sh setuptools-0.6c9-py2.6.egg
# sh setuptools-0.6c9-py2.6.egg
&lt;/pre&gt;&lt;h2&gt;更多信息&lt;/h2&gt;&lt;p&gt;如果想知道更多关于 block_dump 的信息，可以看看这篇 &lt;a href=&quot;http://www.vpsee.com/2010/07/monitoring-process-io-activity-on-linux-with-block_dump/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0066cc&quot;&gt;监测 Linux 进程的实时 IO 情况&lt;/font&gt;&lt;/a&gt;。使用 block_dump 的时候，最好能关掉 klogd 进程。&lt;/p&gt;</description>
		<guid>http://www.517sou.net/Article/how-can-i-record-what-process-or-kernel-activity-is-using-the-disk-in-gnu-linux.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/689/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/how-can-i-record-what-process-or-kernel-activity-is-using-the-disk-in-gnu-linux.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/689/Feeds.ashx</wfw:commentRss>
	</item>
	<item>
		<link>http://www.517sou.net/Article/how-to-find-per-process-io-statistics-on-linux.aspx</link>
		<title>How to find per-process I/O statistics on Linux</title>
		<author>shanyiwan@live.com()</author>
		<category>Linux</category>
		<pubDate>Tue, 27 Sep 2011 06:38:13 GMT</pubDate>
		<description>&lt;p&gt;Newer Linux kernels have per-process I/O accounting and you can use the iotop tool to find out what’s performing I/O, but in many cases I’m trying to find the source of an I/O problem in an older kernel. I found sort of a hack-ish way to do that today, while trying to figure out why a system was basically unresponsive.&lt;/p&gt;&lt;p&gt;I found &lt;a href=&quot;http://stackoverflow.com/questions/249570/&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;a post on Stack Overflow&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; that showed a way you can get per process I/O statistics from the kernel even in older kernels. I adapted this to my needs, and wrote a little script.&lt;/p&gt;&lt;p&gt;Here’s how you use it. First, get it:&lt;/p&gt;&lt;pre&gt;
wget http://aspersa.googlecode.com/svn/trunk/iodump
&lt;/pre&gt;&lt;p&gt;Then turn on kernel messages about I/O:&lt;/p&gt;&lt;pre&gt;
echo 1 &amp;gt; /proc/sys/vm/block_dump
&lt;/pre&gt;&lt;p&gt;This makes the kernel start writing messages about every I/O operation that takes place. Now all you have to do is get those messages and feed them into my script:&lt;/p&gt;&lt;pre&gt;
while true; do sleep 1; dmesg -c; done | perl iodump
&lt;/pre&gt;&lt;p&gt;Wait a little while, then cancel the script. The results should look something like the following:&lt;/p&gt;&lt;pre&gt;
root@kanga:~# while true; do sleep 1; dmesg -c; done | perl iodump
^C# Caught SIGINT.
TASK                   PID      TOTAL       READ      WRITE      DIRTY DEVICES
firefox               4450       4538        251       4287          0 sda4, sda3
kjournald             2100        551          0        551          0 sda4
firefox              28452        185        185          0          0 sda4
kjournald              782         59          0         59          0 sda3
pdflush                 31         30          0         30          0 sda4, sda3
syslogd               2485          2          0          2          0 sda3
firefox              28414          2          2          0          0 sda4, sda3
firefox              28413          1          1          0          0 sda4
firefox              28410          1          1          0          0 sda4
firefox              28307          1          1          0          0 sda4
firefox              28451          1          1          0          0 sda4
&lt;/pre&gt;&lt;p&gt;I deliberately generated a bunch of I/O by deleting my Firefox history and cache.&lt;/p&gt;&lt;p&gt;Got any better ideas, warnings, etc? Post them in the comments.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Further Reading:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title=&quot;Permanent Link: iopp: a tool to print I/O operations per-process&quot; href=&quot;http://www.xaprb.com/blog/2009/01/13/iopp-a-tool-to-print-io-operations-per-process/&quot; rel=&quot;bookmark&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;iopp: a tool to print I/O operations per-process&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Permanent Link: How Linux iostat computes its results&quot; href=&quot;http://www.xaprb.com/blog/2010/01/09/how-linux-iostat-computes-its-results/&quot; rel=&quot;bookmark&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;How Linux iostat computes its results&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Permanent Link: How to gather statistics at regular intervals&quot; href=&quot;http://www.xaprb.com/blog/2011/03/18/how-to-gather-statistics-at-regular-intervals/&quot; rel=&quot;bookmark&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;How to gather statistics at regular intervals&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Permanent Link: InfiniDB gets the release process right&quot; href=&quot;http://www.xaprb.com/blog/2010/02/04/infinidb-gets-the-release-process-right/&quot; rel=&quot;bookmark&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;InfiniDB gets the release process right&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Permanent Link: Wikipedia’s concensus: Linux is an operating system&quot; href=&quot;http://www.xaprb.com/blog/2009/07/01/wikipedias-concensus-linux-is-an-operating-system/&quot; rel=&quot;bookmark&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;font color=&quot;#004477&quot;&gt;Wikipedia’s concensus: Linux is an operating system&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
		<guid>http://www.517sou.net/Article/how-to-find-per-process-io-statistics-on-linux.aspx</guid>
		<trackback:ping>http://www.517sou.net/Article/688/Trackback.ashx</trackback:ping>
		<comments>http://www.517sou.net/Article/how-to-find-per-process-io-statistics-on-linux.aspx#CommentPostAnchor</comments>
		<wfw:commentRss>http://www.517sou.net/Article/688/Feeds.ashx</wfw:commentRss>
	</item>
</channel>
</rss>
