馬哥教育網絡19期+第十八周課程練習

1、為LNMP架構添加memcached支持,并完成對緩存效果的測試報告;

LNMP的安裝過程不再贅述.

# yum install -y memcached

# cat /etc/sysconfig/memcached 
PORT="11211"                                            #memcached監聽在哪個端口上
USER="memcached"                                        #運行memcached進程的用戶
MAXCONN="1024"                                          #最大連接數
CACHESIZE="64"                                          #緩存大小(實際生產不會只有64M)
OPTIONS=""                                              #其他選項
# service memcached start            #啟動memcached服務

stats命令

STAT pid 22362    //memcache服務器的進程ID  
STAT uptime 1469315    //服務器已經運行的秒數
STAT time 1339671194    //服務器當前的unix時間戳
STAT version 1.4.9    //memcache版本
STAT libevent 1.4.9-stable    //libevent版本
STAT pointer_size 64    //當前操作系統的指針大?。?2位系統一般是32bit,64就是64位操作系統)
STAT rusage_user 3695.485200    //進程的累計用戶時間
STAT rusage_system 14751.273465    //進程的累計系統時間
STAT curr_connections 69    //服務器當前存儲的items數量
STAT total_connections 855430    //從服務器啟動以后存儲的items總數量
STAT connection_structures 74    //服務器分配的連接構造數
STAT reserved_fds 20    //
STAT cmd_get 328806688    //get命令(獲取)總請求次數
STAT cmd_set 75441133    //set命令(保存)總請求次數  
STAT cmd_flush 34    //flush命令請求次數
STAT cmd_touch 0    //touch命令請求次數
STAT get_hits 253547177    //總命中次數
STAT get_misses 75259511    //總未命中次數
STAT delete_misses 4    //delete命令未命中次數
STAT delete_hits 565730    //delete命令命中次數
STAT incr_misses 0    //incr命令未命中次數
STAT incr_hits 0    //incr命令命中次數
STAT decr_misses 0    //decr命令未命中次數
STAT decr_hits 0    //decr命令命中次數
STAT cas_misses 0    //cas命令未命中次數
STAT cas_hits 0        //cas命令命中次數
STAT cas_badval 0    //使用擦拭次數
STAT touch_hits 0    //touch命令未命中次數
STAT touch_misses 0    //touch命令命中次數
STAT auth_cmds 0    //認證命令處理的次數
STAT auth_errors 0    //認證失敗數目
STAT bytes_read 545701515844        //總讀取字節數(請求字節數)
STAT bytes_written 1649639749866    //總發送字節數(結果字節數)
STAT limit_maxbytes 2147483648        //分配給memcache的內存大?。ㄗ止潱?
STAT accepting_conns 1            //服務器是否達到過最大連接(0/1)
STAT listen_disabled_num 0    //失效的監聽數
STAT threads 4        //當前線程數
STAT conn_yields 14    //連接操作主動放棄數目
STAT hash_power_level 16    //
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 30705763
STAT evicted_unfetched 0
STAT bytes 61380700    //當前存儲占用的字節數
STAT curr_items 28786    //當前存儲的數據總數
STAT total_items 75441133    //啟動以來存儲的數據總數
STAT evictions 0    //為獲取空閑內存而刪除的items數(分配給memcache的空間用滿后需要刪除舊的items來得到空間分配給新的items)
STAT reclaimed 39957976    //已過期的數據條目來存儲新數據的數目
END

libmemcached 是一個 memcached 的庫,客戶端庫,C 和 C++ 語言實現的客戶端庫,具有低內存占用率、線程安全、并提供對memcached功能的全面支持

yum install -y libmemcached
# memstat --servers=127.0.0.1
Server: 127.0.0.1 (11211)
   pid: 1672
   uptime: 3347
   time: 1471763883
   version: 1.4.24
   libevent: 1.4.13-stable
   pointer_size: 64
   rusage_user: 0.042993
   rusage_system: 0.055991
   curr_connections: 10
   total_connections: 14
   connection_structures: 11
   reserved_fds: 20
   cmd_get: 0
   cmd_set: 0
   ......
   ......

LB Cluster保持會話的方法:

    session sticky
    session cluster
    session server

# yum install -y php-pecl-memcached

# ll /usr/lib64/php/modules/               #將memcached.so信息添加到php.ini
total 5980
-rwxr-xr-x 1 root root  241589 Jun 10 00:34 curl.so
-rwxr-xr-x 1 root root 3153493 Jun 10 00:34 fileinfo.so
-rwxr-xr-x 1 root root   42480 Feb 11  2016 igbinary.so
-rwxr-xr-x 1 root root  150412 Jun 10 00:34 json.so
-rwxr-xr-x 1 root root  147183 Jun 10 00:34 mcrypt.so
-rwxr-xr-x 1 root root   86984 Aug  2  2013 memcached.so
-rwxr-xr-x 1 root root  861233 Jun 10 00:34 phar.so
-rwxr-xr-x 1 root root 1428036 Jun 10 00:34 zip.so
# wget  
# tar -xvf memcache-2.2.7.tgz
# cd memcache-2.2.7
# ./configure --enable-memcache --with-php-config=/opt/application/php/bin/php-config
# make;make install
# vim /etc/php.ini    #修改php.ini配置文件
extension_dir = "/opt/application/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension = "memcache.so"
# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
或者:
# cp /opt/application/php/lib/php/extensions/no-debug-non-zts-20131226/* /opt/application/php/lib/php/extensions/
# vim /etc/php.ini
extension = "memcache.so"

打開PHP偵探網頁:

blob.png

測試memcached

# telnet 192.168.2.214 11211
STAT pid 20439  —— Memcached 進程的ID
STAT uptime 179982 —— 進程運行時間
STAT time 1471773767 ——當前時間
STAT version 1.4.24
STAT libevent 1.4.13-stable
STAT pointer_size 32
STAT rusage_user 21.916668
STAT rusage_system 40.576831
STAT curr_connections 11
STAT total_connections 329
STAT connection_structures 23
STAT reserved_fds 20
STAT cmd_get 2363348 —— 總共獲取數據的次數(等于 get_hits + get_misses )
STAT cmd_set 279971 —— 總共設置數據的次數
STAT cmd_flush 0STAT cmd_touch 0STAT get_hits 2286284 —— 命中了多少次數據,也就是從 Memcached 緩存中成功獲取數據的次數
STAT get_misses 77064 —— 沒有命中的次數
......

還可以用memcached工具

blob.png

2、部署配置haproxy,能夠實現將來自用戶的80端口的http請求轉發至后端8000上的server服務,寫出其配置過程。

Haproxy的安裝:(也可通過源碼安裝)

apt-get install haproxy

修改基本的配置文件如下:

配置文件所在地址: /etc/haproxy/haproxy.cfg 

global  
    maxconn 5120  
    chroot /usr/share/haproxy  
    daemon  
    quiet  
    nbproc 2  
    pidfile /usr/share/haproxy/haproxy.pid  
defaults  
    option  httplog  
    option  dontlognull  
    timeout connect 5s  
    timeout client 50s  
    timeout server 20s  
listen http  
    bind :80  
    timeout client 1h  
    tcp-request inspect-delay 2s   
  
    tcp-request content accept if is_http  
    server server-http :8080  
backend servers 
    server server1 127.0.0.1:8080 maxconn 32

3、闡述varnish的功能及其應用場景,并通過實際的應用案例來描述配置、測試、調試過程。

先安裝varnish

#yum -y install varnish

配置文件的簡單介紹

NFILES=131072            
MEMLOCK=82000
NPROCS="unlimited"
# DAEMON_COREFILE_LIMIT="unlimited"        #內核最大打開的文件數
RELOAD_VCL=1                               #是否自動加載VCL
VARNISH_VCL_CONF=/etc/varnish/default.vcl  #默認加載的VCL文件
VARNISH_LISTEN_PORT=80                     #監聽端口,默認為6081
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1     #管理的IP地址
VARNISH_ADMIN_LISTEN_PORT=6082             #管理端口
VARNISH_SECRET_FILE=/etc/varnish/secret    #密鑰文件
VARNISH_MIN_THREADS=50                     #最小線程數量
VARNISH_MAX_THREADS=1000                   #最大線程數量
VARNISH_THREAD_TIMEOUT=120                 #線程超時時間
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin #緩存文件位置
VARNISH_STORAGE_SIZE=1G                    #設置文件緩存大小變量
VARNISH_MEMORY_SIZE=64M                    #設置內存緩存大小變量
#VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" #默認存儲到文件中,這里可以修改存儲位置
VARNISH_STORAGE="malloc,${VARNISH_MEMORY_SIZE}" #設置緩存位置為內存
VARNISH_TTL=120                
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
             -f ${VARNISH_VCL_CONF} \
             -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
             -t ${VARNISH_TTL} \
             -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
             -u varnish -g varnish \
             -S ${VARNISH_SECRET_FILE} \
             -s ${VARNISH_STORAGE}"    #所有啟動加載選項

啟動服務如下:

# service varnish start

Varnish命令介紹

# varnishd -h
-a address:port        #表示varnish對httpd的監聽地址及其端口
-b address:port        #表示后端服務器地址及其端口
-d                     #表示使用debug調試模式
-f file                #指定varnish服務器的配置文件
-p param=value         #指定服務器參數,用來優化varnish性能
-P file                #Varnish進程PID文件存放路徑
-n dir                 #指定varnish的工作目錄
-s kind[,storageoptions] #指定varnish緩存內容的存放方式,常用的方式有:“-s file,<dir_or_file>,<size>”;其中“<dir_or_file>”
                          指定緩存文件的存放路徑,“<size>”指定緩存文件的大小
-t                     #指定默認的TTL值
-T address:port        #設定varnish的telnet管理地址及其端口
-V                     #顯示varnish版本號和版權信息
-w int[,int[,int]]     #設定varnish的工作線程數,常用的方式有:  -w min,max
 -w min,max,timeout
如:-w3,25600,50       #這里最小啟動的線程數不能設定過大,設置過大,會導致varnish運行異常緩慢

環境如下:

blob.png

在lamp1、lamp2上分別都安裝服務并啟動

######在Lamp1服務器上安裝Httpd、Php、Mysql,啟動服務
# yum -y install httpd php mysql-server php-mysql
# service httpd start
# service mysqld start
------------------------------------------------------------------------
######在Lamp2服務器上安裝Httpd、Php,啟動服務
# yum -y install httpd php php-mysql
# service httpd start

lamp上都測試php界面

blob.png

安裝論壇程序:

# mysql
mysql> create database bbs;
mysql> grant all on bbs.* to 'bbsuser'@'172.16.%.%' identified by 'bbspass';
mysql> flush privileges;
注釋:為論壇創建一個數據庫并授權用戶訪問
------------------------------------------------------------------------
######安裝論壇程序
# unzip Discuz_X3.0_SC_UTF8.zip
# cp -rf upload/* /var/www/html/
# chmod -R +w /var/www/html/{config,data,uc_server,uc_client}    #添加可寫權限
# chown -R apache /var/www/html/*      #修改屬主權限

blob.png

將論壇程序拷貝到lamp2服務器上一份并訪問測試

# scp -rp /var/www/html/* 172.16.14.3:/var/www/html/
# service httpd restart    #重啟lamp2服務器的WEB服務

安裝web服務器并測試頁面:

# yum -y install httpd
# service httpd start
# echo "<h1>WEB</h1>" > /var/www/html/index.html #創建測試頁

blob.png

將Lamp1服務器上的論壇程序拷貝到WEB服務器一份,因為需要論壇中的一些靜態文件如:(.jpg|.html)結尾的文件等

# scp -rp /var/www/html/* 172.16.14.3:/var/www/html/

Varnish安裝及配置

在第一部分中我們已經修改過默認監聽端口為"80",接下來為Varnish提供一個VCL配置文件,建議基于默認的配置文件基礎上修改,修改前
備份一下文件。
[root@varnish ~]# cd /etc/varnish/
[root@varnish varnish]# cp default.vcl default.vcl.bak
[root@varnish varnish]# vim default.vcl
######定義ACL
acl purgers {                    #定義acl,實現IP地址過濾
    "127.0.0.1";
    "172.16.0.0"/16;
}
######定義健康狀態檢測
probe dynamic {                  #設置動態網站服務器健康狀態檢測
    .url = "/index.html";
    .interval = 5s;
    .timeout = 1s;
    .expected_response = 200;
}            #這里設置了兩個健康狀態檢測主要是為了區分動、靜網站
probe static {                   #設置動態網站服務器健康狀態檢測
    .url = "/index.html";        #定義檢測的頁面
    .interval = 5s;              #探測請求的發送周期,默認為5秒
    .timeout = 1s;               #每次探測請求的過期時間
    .expected_response = 200;
}
######定義后端服務器
backend app1 {                  #定義一個后端服務器
    .host = "172.16.14.2";      #服務器地址
    .port = "80";               #服務器監聽端口
    .probe = dynamic;           #健康狀態檢測
}
backend app2 {
    .host = "172.16.14.3";
    .port = "80";
    .probe = dynamic;
}
backend web {          
    .host = "172.16.14.4";
    .port = "80";
    .probe = static;
}
######定義后端服務器組,實現負載均衡效果
director apps random {          #定義一個后端服務器組,實現負載均衡效果
    {
         .backend = app1;       #調用前面已定義過的后端主機
     .weight = 2;           #設置權重
    }
    {
     .backend = app2;
     .weight = 2;
    }
}
######定義vcl_recv函數,實現請求到達并成功接收后調用此函數中定義的規則
sub vcl_recv {
######定義動、靜分離,以".php"或".php?后面跟所有文件"結尾的請求都發送到動態服務器,其他請求都發送到靜態服務器
    if (req.url ~ "\.php(\?\.*|$)") {
    set req.backend = apps;
    } else {
    set req.backend = web;
    }
    return(lookup);
######定義允許清除緩存的IP地址,調用的是前面定義的ACL
    if (req.request == "PURGE") {
        if (!client.ip ~ purgers) {
        error 405 "Method not allowed";
    }
        return(lookup);
    }
######重新定義http請求首部,讓后端服務器可以記錄請求客戶端的真實IP地址
        if (req.restarts == 0) {
            if (req.http.x-forwarded-for) {
               set req.http.X-Forwarded-For =
               req.http.X-Forwarded-For + ", " + client.ip;
            } else {
                 set req.http.X-Forwarded-For = client.ip;
            }
         }
######除了定義的請求方法外,其他請求都到后端服務器
    if (req.request != "GET" &&
        req.request != "HEAD" &&
        req.request != "PUT" &&
        req.request != "POST" &&
        req.request != "TRACE" &&
        req.request != "OPTIONS" &&
        req.request != "DELETE") {
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        return (pass);
    }
######定義不緩存認證與Cookie信息
    if (req.http.Authorization || req.http.Cookie) {
        return (pass);
    }
######定義壓縮功能
    if (req.http.Accept-Enconding) {
       if (req.url ~ "\.(jpg|jpeg|gif|bmp|png|flv|gz|tgz|tbz|mp3)$") {
           remove req.http.Accept-Encoding;
       remove req.http.Cookie;
       } else if (req.http.Accept-Encoding ~ "gzip") {
       set req.http.Accept-Encoding = "gzip";
       } else if (req.http.Accept-Encoding ~ "deflate") {
       set req.http.Accept-Encoding = "deflate";
       } else { remove req.http.Accept-Encoding;
       }
    }
######定義指定格式結尾的文件去除Cookie信息
    if (req.request == "GET" && req.url ~ "\.(jpeg|jpg|gif|png|bmp|swf)$") {
    unset req.http.cookie;
    }
######定義防盜鏈設置
    if (req.http.referer ~ "http://.*") {
        if (!(req.http.referer ~ "http://.*\.baidu\.com" || req.http.referer ~"http://.*\.google\.com.*")) {
              set req.http.host = "www.allen.com";
          set req.url = "http://172.16.14.4/error.html";
    }
    }
}
######定義vcl_hash函數
sub vcl_hash {
    hash_data(req.url);
    if (req.http.host) {
        hash_data(req.http.host);
    } else {
        hash_data(server.ip);
    }
    return(hash);
}
######定義vcl_hit函數
sub vcl_hit {
    if (req.request == "PURGE") { #語法方法為"PURGE"
       purge;                     #清除緩存
       error 200 "Purged.";       #返回錯誤狀態碼為"200"
    }
    return(deliver);
}
######定義vcl_miss函數
sub vcl_miss {
    if (req.request == "PURGE") {
    purge;
    error 404 "Not In Cache.";
    }
    return(fetch);
}
######定義vcl_psss函數
sub vcl_pass {
    if (req.request == "PURGE") {
       error 502 "Purged On A Passed Object.";
    }
    return(pass);
}
######定義vcl_fetch函數
sub vcl_fetch {
######定義緩存,如果匹配到已定義文件結尾的緩存1天,其他則緩存1小時
    if (req.request == "GET" && req.url ~ "\.(html|jpg|png|bmp|jpeg|gif|js|ico|swf|css)$") {
       set beresp.ttl = 1d;
       set beresp.http.expires = beresp.ttl;
    } else {
       set beresp.ttl = 1h;
    }
    return(deliver);
}
######定義在http首部中,如果請求命中顯示"HIT",未命中則顯示"MISS"
sub vcl_deliver {
    if (obj.hits > 0) {
       set resp.http.X-Cache = "HIT";
    } else {
       set resp.http.X-Cache = "MISS";
    }
}
----------------------------------------------------------------------
[root@varnish ~]# service varnish restart    #重啟服務生效,重啟服務器后所有緩存將被清除,當然也可以不用重啟服務使其生效,如下:
----------------------------------------------------------------------
[root@varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
varnish> help                        #獲取幫助
varnish> vcl.load acl_1 default.vcl  #加載acl文件,acl_1為配置名稱
200   
VCL compiled.
varnish> vcl.list                    #查看加載的acl文件列表
200   
active          7 boot
available       0 acl_1
varnish> vcl.use acl_1               #應用acl文件
200
varnish> quit                        #退出
------------------------------------------------------------------------
注釋:  -S:指定varnish的密鑰文件  -T:指定varnish服務器地址及管理端口,默認端口為"6082"

服務驗證:

壓力測試,如下:
######后端服務器不經過緩存測試
[root@localhost ~]# ab -c 100 -n 1000 http://172.16.14.2/index.php
Concurrency Level:      1000
Time taken for tests:   6.812 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10051
Total transferred:      2281577 bytes
HTML transferred:       0 bytes
Requests per second:    1468.04 [#/sec] (mean)  #每秒請求并發
Time per request:       681.179 [ms] (mean)
Time per request:       0.681 [ms] (mean, across all concurrent requests)
Transfer rate:          327.10 [Kbytes/sec] received
----------------------------------------------------------------------
######經過緩存測試
[root@localhost ~]# ab -c 1000 -n 10000 http://172.16.14.1/index.php
Concurrency Level:      1000
Time taken for tests:   2.594 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10056
Total transferred:      3117360 bytes
HTML transferred:       0 bytes
Requests per second:    3855.05 [#/sec] (mean)
Time per request:       259.400 [ms] (mean)
Time per request:       0.259 [ms] (mean, across all concurrent requests)
Transfer rate:          1173.59 [Kbytes/sec] received
----------------------------------------------------------------------
注釋:從上面數據中可以看出,經過緩存做壓力測試并發量高
測試緩存是否能命中
[root@lamp2 ~]# curl -I http://172.16.14.1/index.php
HTTP/1.1 301 Moved Permanently
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
location: forum.php
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Accept-Ranges: bytes
Date: Wed, 09 Oct 2013 01:09:01 GMT
X-Varnish: 2142028839
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS    #第一次請求,未命中顯示"MISS"
------------------------------------------------------------------------
[root@lamp2 ~]# curl -I http://172.16.14.1/index.php
HTTP/1.1 301 Moved Permanently
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
location: forum.php
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Accept-Ranges: bytes
Date: Wed, 09 Oct 2013 01:09:08 GMT
X-Varnish: 2142028841 2142028839
Age: 7
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT    #第二次請求,命中則顯示"HIT"

驗證動、靜分離的效果:

[root@web ~]# service httpd stop    #停止提供靜態頁面的httpd服務
Stopping httpd:                                            [  OK  ]

blob.png

從上圖中可以看出,提供靜態頁面的服務停止后,所有圖片都不能顯示,當然把服務再啟動起來就可以訪問正常了,這里就不在測試了…

驗證健康狀態檢測

blob.png

查看緩存命中率狀態;命中率的高低

blob.png

原創文章,作者:Net19_口香糖,如若轉載,請注明出處:http://www.www58058.com/39130

(0)
Net19_口香糖Net19_口香糖
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • 軟件包管理器之一——RPM介紹及應用

    一、前言:     在沒有軟件包管理器前,用戶都是通過源代碼的方式來安裝軟件。但是我們很容易發現,在每次安裝軟件時都必須對操作系統的境、編譯的參數進行對應的編譯,并且操作過程很是復雜,這對于不熟悉操作系統的朋友來說真心困難,那么有沒有一款軟件能讓用戶能很簡單的安裝所需的軟件呢?    &n…

    Linux干貨 2015-07-20
  • LINUX集群概念

    反向代理服務器:客戶端發現請求給反向代理服務器,反向代理服務器與后端真實服務器進行通信,并由反向代理服務器返回信息給客戶端 不同的服務,反向代理服務器使用的協議不同(如http、mysql等): 反代服務器后端的真實服務器一般是多臺服務器組成的集群 Linux Cluster:          集群:將多臺…

    Linux干貨 2017-01-10
  • 系統基礎之文件查找工具find

    文件查找:        在運維人員操作系統時,要接觸大量的文件,為了避免忘記文件存放位置的尷尬,就需要我們有一種文件查找工具的幫忙,下面是兩個文件查找工具的詳解,locate以及find,分別分享給大家. 第一款工具: Locate locate – find files by name loc…

    Linux干貨 2016-08-16
  • shell腳本編寫-3

    1、for循環 for 變量名 in  列表;do 循環體 done 執行機制:依次將列表中元素賦值給“變量名”;每次賦值后即執一次循環體;直到列表中元素耗盡循環結束 列表生成方式: (1) 直接給出列表 (2) 整數列表: (a){start..end} (b) $(seq [start [step]] end)  (3) 返回列表的命…

    Linux干貨 2016-08-18
  • 軟鏈接和硬鏈接詳解

    軟連接和硬鏈接圖解 硬鏈接 符號鏈接 軟鏈接和硬鏈接詳解 軟鏈接和硬鏈接詳解 Linux下的鏈接文件有點類似于Windows的快捷方式,但又不完全一樣。鏈接文件有兩種:一種是硬鏈接,另一種是符號鏈接(又稱軟鏈接)。 UNIX文件系統提供了一種將不同文件鏈接至同一個文件的機制,我們稱這種機制為鏈接。它可以使得單個程序對同一文件使用不同的名字。這樣的好處是文件系…

    Linux干貨 2016-09-06
  • Linux文件壓縮、解壓、歸檔總結

    一、簡介   壓縮對我們來說通常意味著減小文件體積,節省硬盤空間。在Windows平臺上處理大文件或目錄中的文件很多時我們都需要對這些文件進行壓縮處理,壓縮格式多種多樣,如:zip、rar、7z等格式,壓縮方式也比較多樣話,支持按最大壓縮比例或者最快時間進行壓縮等多種方式,而生成的壓縮包就可以讓我們更方便的進行拷貝及歸檔整理。解壓縮顧名思義就是回歸…

    Linux干貨 2015-09-26
欧美性久久久久