精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用 Ruby 的威力更有效地進行系統管理

運維 系統運維
除了用作強大的 Web 應用程序開發平臺外,通過與 Rails 框架相結合,Ruby 還具有較少被提及的另一面,那就是作為一種強大的腳本語言,就像 Python 或 Perl 那樣。

 除了用作強大的 Web 應用程序開發平臺外,通過與 Rails 框架相結合,Ruby 還具有較少被提及的另一面,那就是作為一種強大的腳本語言,就像 Python 或 Perl 那樣。它擁有非常強大的功能,由于可以使用很多內建的和外部的庫,因此可利用它的威力來解決通常系統管理工作環境中出現的很多腳本編寫需求。而且,用 Ruby 編程也很有趣!

簡介

Ruby 是一種功能極其豐富的、免費的、簡單的、可擴展的、可移植的、面向對象的腳本編程語言。最近,它在 Web 領域廣受歡迎。這在一定程度上要歸因于非常強大的 Web 應用程序開發框架 Rails,Rails 正是用 Ruby 編寫的。Rails,也稱 Ruby on Rails(ROR),顧名思義,它為快速、有效地開發 Web 應用程序提供一個非常強大的平臺。它是高度可伸縮的,Web 上有很多站點就是用 Ruby on Rails 構建的。

除了與 Rails 一起用作 Web 應用程序開發平臺外,Ruby 還具有較少被提及的另一面,那就是作為一種強大的腳本編程語言,就像 Python 或 Perl 那樣。它擁有非常強大的功能,由于可以使用很多內建的和外部的庫,因此可利用它的威力來解決通常系統管理工作環境中出現的很多腳本編程需求。

系統管理需要大量編寫腳本以使事情更簡單、更有效。編寫腳本比單調的手動工作能更好地解決用戶管理、進程管理、文件管理、軟件包管理和其他基本的自動化需求。在這個場景中,Ruby 非常有用。它有一套很好的庫可滿足這一點。


對于本文,我假設讀者具有 Ruby 的應用知識。這里提供的基本例子使用純 Ruby,因此可以在 Ruby 支持的任何類 UNIX? 系統以及 Windows? 上運行。對于更高級的 Cfruby 例子,需要能夠使用一個 UNIX 系統。下面所有的例子已經在一臺 Linux? 機器上使用 Ruby v1.8.4 進行了測試。它們應該也能用于***版本的 Ruby。

實踐中的 Ruby

***個例子在指定路徑中搜索符合給定模式的文件,并以用戶友好的方式給出關于這些文件的詳細信息。實現這一目標不必依賴于任何命令行實用程序,只需使用 Ruby 內建的 API。因此,這個例子在有 Ruby 運行的任何平臺上都能運行。

而且,這個例子展示了 Ruby 在簡化腳本編寫需求方面有多強大。它不是簡單地模擬 *nix "find" 命令,而是構建在該命令之上,因而在使用 Ruby 時具有很強的定制能力。


清單 1. 在給定路徑中搜索符合給定模式的模式的文件,并顯示它們的詳細信息


 

 require 'find'
puts ""
puts "-----------------------File Search-----------------------------------"
puts ""
print "Enter the search path    : "
searchpath = gets
searchpath = searchpath.chomp
puts ""
print "Enter the search pattern : "
pattern = gets
pattern = pattern.chomp
puts"----------------------------------------------------------------------"
puts "Searching in " + searchpath + " for files matching pattern " + pattern
puts"----------------------------------------------------------------------"
puts ""
Find.find(searchpath) do |path|
   if FileTest.directory?(path)
     if File.basename(path)[0] == ?.
       Find.prune       # Don't look any further into this directory.
     else
       next
     end
   else
     if File.fnmatch(pattern,File.basename(path))
       puts  "Filename     : " +  File.basename(path)
       s = sprintf("%o",File.stat(path).mode)
       print "Permissions  : "
       puts s
       print "Owning uid   : "
       puts File.stat(path).uid
       print "Owning gid   : "
       puts File.stat(path).uid
       print "Size (bytes) : "
       puts File.stat(path).size
       puts "---------------------------------------------------"
     end
   end
end

在這個例子中:

第 5-11 行 - 請求用戶提供搜索路徑和搜索模式。
第 16 行 - 使用 Ruby 中 “Find” 類中的 “find” 方法遍歷指定的搜索路徑。
第 17 行 - 檢查發現的文件是否為一個目錄。如果是目錄,并且不是 “.”,則遞歸地遍歷該目錄。
第 24 行 - 使用 “File” 類中的 “fnmatch” 方法檢查發現的文件是否符合給定的模式。
第 25-34 行 - 如果文件符合模式,則打印文件的詳細信息。

下面是這個腳本的一個示例輸出。


清單 2. ***個例子的示例輸出

 

 [root@logan]# ruby findexample.rb

-----------------------File Search-----------------------------------

Enter the search path    : /test

Enter the search pattern : *.rb
----------------------------------------------------------------------
Searching in /test for files matching pattern *.rb
----------------------------------------------------------------------

Filename     : s.rb
Permissions  : 100644
Owning uid   : 1
Owning gid   : 1
Size (bytes) : 57
---------------------------------------------------
Filename     : test.rb
Permissions  : 100644
Owning uid   : 0
Owning gid   : 0
Size (bytes) : 996
---------------------------------------------------
Filename     : s1.rb
Permissions  : 100644
Owning uid   : 1
Owning gid   : 1
Size (bytes) : 39
---------------------------------------------------

在系統管理期間,最常見的一個需求是有效地使用 zip 文件來管理備份,或者將一組文件從一臺計算機轉移到另一臺計算機。在這個方面,Ruby 很有優勢。這里的第二個例子構建在***個例子的基礎上,但是包含了一個場景,在此場景中,需要將搜索到的文件打包到 zip 文件中。

內建的 zlib 模塊可幫助處理 gzip 文件,對于大多數情況它都夠好。但是,在這里我將使用另一個很好的 Ruby 庫,即 “rubyzip”,來創建和處理 zip 歸檔文件。請查看 參考資料 小節,找到下載它的鏈接。而且要注意,這個例子使用純 Ruby,它不依賴于計算機上當前提供的任何命令行實用程序。

 

#p#

安裝 rubyzip

通過提供的鏈接下載 “rubyzip” gem,并將它復制到系統中。(在撰寫本文之際,它的文件名是 “rubyzip-0.9.1.gem”)。
運行 gem 安裝 rubyzip-0.9.1.gem


清單 3. 使用 zip 文件

 require 'rubygems'
require_gem 'rubyzip'
require 'find'
require 'zip/zip'

puts ""
puts "------------------File Search and Zip-----------------------------"
puts ""
print "Enter the search path    : "
searchpath = gets
searchpath = searchpath.chomp
puts ""
print "Enter the search pattern : "
pattern = gets
pattern = pattern.chomp
puts"----------------------------------------------------------------------"
puts "Searching in " + searchpath + " for files matching pattern " + pattern
puts"----------------------------------------------------------------------"
puts ""
puts"----------------------------------------------------------------------"
puts "Zipping up the found files..."
puts"----------------------------------------------------------------------"
Zip::ZipFile.open("test.zip", Zip::ZipFile::CREATE) {
  |zipfile|
Find.find(searchpath) do |path|
  if FileTest.directory?(path)
     if File.basename(path)[0] == ?.
       Find.prune       # Don't look any further into this directory.
     else
       next
     end
   else
       if File.fnmatch(pattern,File.basename(path))
               p File.basename(path)
               zipfile.add(File.basename(path),path)
       end
    end
end
}

這個腳本為根據提供的搜索路徑和搜索模式搜索到的文件創建一個名為 “test.zip” 的 zip 文件。

這個例子做以下事情:

第 9-15 行 - 請求用戶提供搜索路徑和搜索模式。
第 23 行 - 創建一個新的名為 “test.zip” 的 ZipFile。
第 25 行 - 使用 Ruby 中 “Find” 類中的 “find” 方法遍歷指定的搜索路徑。
第 26 行 - 檢查發現的文件是否為一個目錄。如果是目錄,并且不是 “.”,則遞歸地遍歷該目錄。
第 33 行 - 使用 “File” 類中的 “fnmatch” 方法檢查發現的文件是否符合給定的模式。
第 35 行 - 將符合的文件添加到 zip 歸檔中。
下面是一個示例輸出:


清單 4. 第二個例子的示例輸出


 

 [root@logan]# ruby zipexample.rb

-----------------------File Search-----------------------------------

Enter the search path    : /test

Enter the search pattern : *.rb
----------------------------------------------------------------------
Searching in /test for files matching pattern *.rb
----------------------------------------------------------------------

----------------------------------------------------------------------
Zipping up the found files...
----------------------------------------------------------------------
"s.rb"
"test.rb"
"s1.rb"

[root@logan]# unzip -l test.zip
Archive:  test.zip
Length     Date   Time    Name
--------    ----   ----    ----
     996  09-25-08 21:01   test.rb
      57  09-25-08 21:01   s.rb
      39  09-25-08 21:01   s1.rb
--------                   -------
    1092                   3 files

 

#p#

Cfruby - 高級的系統管理

根據 Cfruby 站點的定義,“Cfruby 允許使用 Ruby 進行系統管理。它既是一個用于系統管理的 Ruby 函數庫,又是一個類 Cfengine 的克隆品(實際上是用于系統管理的一種特定領域語言,即 DSL)”。

Cfruby 基本上是一個由兩部分組成的包:

Cfrubylib – 一個純 Ruby 庫,其中包含用于系統管理的類和方法。這包括文件復制、查找、校驗和檢查、包管理、用戶管理等。
Cfenjin – 一種簡單的腳本編程語言,可幫助為系統管理任務編寫腳本(不必知道 Ruby)。

Cfruby 可以作為一個 Ruby gem 或 tar 壓縮文件下載。gem 是最簡單、最容易的方式。獲取 gem,并使用 “gem install” 命令安裝它。

安裝 Cfruby:

將下載的 Cfruby gem 文件復制到系統中。(在撰寫本文之際,它的文件名是 “cfruby-1.01.gem”)。
運行 gem 安裝 cfruby-1.01.gem。

Cfruby 現在應該被安裝到系統上。

使用 Cfruby

現在,我將展示 Cfruby 的功能,以及它如何大大簡化系統管理。

有兩種基本的方式可訪問 Cfruby 庫提供的功能:

直接使用 libcfgruby 中的 Ruby 類。
使用 cfrubyscript 包裝器,它為 libcfruby 提供了一個更簡潔的接口。

直接使用 libcfruby 中的 Ruby 類

Libcfruby 是 Cfruby 的核心,它包含一組模塊,這些模塊提供了各種用于簡化系統維護和設置的功能。為了使用 libcfruby,需要在安裝 Cfruby gem 之后,將 “require_gem 'cfruby'” 添加到腳本的頂端。這樣便可以直接訪問 libcfruby 中的所有核心模塊,在腳本中可以根據需要按任意方式使用它們。這種方法惟一的缺點是 libcfruby 比較大,它將所有的類和方法都放入到它們各自的名稱空間中。所以,為了訪問任何一個類,都需要以名稱空間加以限定。例如,libcfruby 提供了一個用于獲得系統類型的方法。要獲取操作系統的類型,需要做以下事情:


清單 5. 使用 libcfruby 獲取操作系統類型

 

 

 require 'rubygems'

require_gem 'cfruby'

os = Cfruby::OS::OSFactory.new.get_os()

puts(os.name)


 這只是獲得操作系統的名稱。隨著您用 libcfruby 做更多的事情,您的腳本中將充斥著更多指定名稱空間的語句。正是由于這一點,另一種使用 Cfruby 的方法就顯得很方便。

使用 cfrubyscript 包裝器,這個包裝器為 libcfruby 提供了一個更簡潔的接口

為了使用 cfrubyscript 包裝器,需要添加:


清單 6. 使用 cfrubyscript

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

這樣會將 cfrubyscript 包括到腳本中,然后就可以通過一個更簡單的接口來訪問 libcfruby 的功能。

cfrubyscript 做到了以下幾點:

它將一組變量導出到全局名稱空間,例如 $os、$pkg、$user、$proc 和 $sched。
它將大多數主要模塊放到主名稱空間中,所以可以調用 FileEdit.set 而不是 Cfruby::FileEdit.set。
它為 String 和 Array 添加了很多助手方法,這些方法可以做一些 Cfruby 事情(安裝程序、編輯文件等)。
它還提供了一個很好的日志記錄器。

所以,不再需要在腳本中指定一大堆的名稱空間。上面用于獲取操作系統類型的例子現在變成這樣:


清單 7. 使用 cfrubyscript 獲取操作系統的類型


 

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

puts($os.name)

這可以翻譯成一個單獨的調用,該調用使用全局變量 $os。Cfruby 的確強大,它為管理類 *nix 系統提供了很多功能。

現在來看看其中一些功能,以及使用它們的一些基本例子。

 

#p#

用戶管理

在系統管理中,最常見、最重要的任務之一就是用戶和組的管理。Cfruby 以一種可移植的、簡單的方式提供了一套強大的方法來實現該任務。

該任務是使用 UserManager 對象實現的,這個對象可以像下面這樣從 OS 模塊獲得。


清單 8. 使用 libcfruby 獲得 UserManager 對象

 require 'rubygems'

require_gem 'cfruby'

osfactory = Cfruby::OS::OSFactory.new()

os = osfactory.get_os()

usermgr = os.get_user_manager()

如果使用 cfrubyscript 方式,那么已經有一個全局用戶管理對象,即 $user,它可以直接用于調用方法。我將使用這種方法,因為這樣更簡單,更易于閱讀。

下面展示如何使用它來創建和刪除一個用戶。


清單 9. 使用 cfgrubyscript 進行用戶管理

 

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

$user.adduser('newusername','password')

$user.deleteuser('usernametodelete',true)

上述代碼做什么事情?

第 1、2 行 – 和通常一樣,將 libcfruby 和 cfrubyscript 包括到腳本中。
第 3 行 – 以用戶名 “newusername” 和第二個參數指定的密碼創建一個新用戶。
第 4 行 – 刪除用戶名為 “usernametodelete” 的用戶。第二個參數的值可以是 true 或 false,用于指定是否刪除被刪除用戶的主目錄。
類似地,組操作也可以使用 UserManager 對象中的 addgroup() 和 deletegroup() 方法來完成。

進程管理

管理員的另一項重要的任務是跟蹤系統上運行的進程,并管理它們。Cfruby 在這方面也很有用,它為有效地處理進程提供了方法。

您可以使用 Cfruby 實現它。


清單 10. 使用 cfgrubyscript 進行進程管理


 

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

$proc.kill($proc.vim)

'ps –aef'.exec()

上述代碼做什么事情?

第 3 行 – 使用全局 ProcessManager 對象 $proc 關閉由參數指定的 “vim” 進程。$proc.vim 是在系統上運行的 “vim” 進程的一個 ProcessInfo 類型的對象。它們是由 cfrubyscript 自動創建的。
第 4 行 – 用指定的命令 “ps –aef” 啟動一個新進程。可以從命令字符串中直接調用 exec 方法。

包管理

系統管理員必須負責的另一項任務是管理系統上的包。Cfruby 提供了一些方法用于方便地在系統上安裝和刪除軟件。


清單 11. 使用 cfgrubyscript 進行包管理

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

all = $pkg.packages()

installed = $pkg.installed_packages()

ruby.install()

上述代碼做什么事情?

第 3 行 – 使用 cfrubyscript 創建的全局 $pkg PackageManager 對象,通過調用 packages() 方法獲得系統上所有可用的包。
第 4 行 – 獲得所有已安裝的包的列表。
第 5 行 – 通過調用 install 方法安裝 Ruby 包。可以通過包名本身直接調用 install 助手方法。

事情就是這么簡單。

 

#p#

文件管理

Cfruby 還可以幫助管理系統上的文件。通過使用 Cfruby 提供的方法,可以輕松地創建、編輯、刪除、更改所有權和更改許可等等。


清單 12. 使用 cfgrubyscript 進行文件管理

 require 'rubygems'

require_gem 'cfruby'

require 'libcfruby/cfrubyscript'

'/etc/ssh'.chown_mod('root', 'wheel', 'u=rw,g=r,o-rwx', `:recursive` => true)

上述代碼做什么事情?

第 3 行 – 更改文件 “/etc/ssh” 的所有者和組以及許可。直接從文件本身調用 chown_mod() 方法。這樣,這是通過 cfrubyscript 的助手對象和方法實現的。注意,這里只用一行就實現了該功能。

所以,上述例子應該已經讓您了解到 Cfruby 有多強大,使用它來管理系統有多容易。而且,由于提供了一套非常直觀的類和方法,它使得系統管理的整個任務變得更加容易,也更加有趣。

 關于 Cfruby 和它的那一整套功能還有很多需要知道的。它附帶有一套很好的文檔。建議您看一看這些文檔,這樣才能將這個 Ruby 庫的全部威力釋放出來。請查看參考資料小節,獲取相關鏈接。

結束語

Ruby 不僅可以與 Rails 框架一起用于 Web 應用程序開發。它還可以像腳本編程語言一樣強大,作為通常的 shell 腳本編程的一個很好的替代品,常用于實現系統管理中的腳本編程需求。

通過使用 Ruby 的一套內建模塊和一些外部的庫,系統管理員可以變得更加高效,工作更加有趣。Ruby 是一個非常有用、非常強大的工具,是每個系統管理員工具箱中必備的工具。

 

【編輯推薦】

  1. 玩轉linux之二-驅動開發技術探析
  2. Linux初學者入門優秀教程.pdf
  3. Linux中文網頁顯示亂碼
責任編輯:張燕妮 來源: 中國IT實驗室
相關推薦

2018-11-26 07:23:08

數據數據分析

2022-05-07 09:32:01

Ubuntu編程Linux

2021-01-22 15:39:51

區塊鏈比特幣貨幣

2013-06-04 10:35:55

虛擬化IT系統

2020-07-30 11:41:52

IT團隊遠程工作CIO

2020-04-24 14:00:21

NVMeTCP存儲

2020-03-27 09:29:03

閃存存儲分解

2013-09-22 11:39:05

SAP

2019-05-09 14:32:13

IT中斷災難恢復攻擊

2012-02-08 16:45:20

ibmdw

2021-03-31 08:34:52

安全掃描網絡安全網絡攻擊

2012-09-28 15:06:43

2017-07-07 08:46:51

災難恢復架構

2011-11-02 09:54:37

測試

2009-12-11 17:39:47

VS 2008數據

2018-09-17 11:55:21

Linux命令管理進程

2024-04-11 09:30:00

大數據物聯網樓宇自控

2017-07-12 12:43:42

數據庫SQL

2019-02-14 10:32:19

2021-03-15 08:40:46

數據分析波動
點贊
收藏

51CTO技術棧公眾號

亚洲国产一区在线观看| 成人性生交大片免费看中文网站| 亚洲色图25p| 久久午夜夜伦鲁鲁一区二区| 欧美性videos| 国产高清精品久久久久| 高清欧美电影在线| 国产三级在线观看完整版| 国产麻豆精品| 狠狠综合久久av一区二区小说| 亚洲欧美精品在线观看| 国产综合无码一区二区色蜜蜜| 免费在线亚洲欧美| 久久久国产精品一区| 国产在线观看无码免费视频| 精品自拍视频| 午夜视频久久久久久| 神马影院我不卡| 国精产品一品二品国精品69xx| 日本最新不卡在线| 久久久久久久一| 四虎地址8848| 国产成人精品一区二区免费看京| 日韩手机在线导航| 激情视频免费网站| 蜜桃av在线| 亚洲自拍偷拍图区| 伊人色综合影院| 日韩精品系列| 懂色av噜噜一区二区三区av| 成人免费在线视频网站| 国产精品视频一区在线观看| 狠狠88综合久久久久综合网| 日韩在线国产精品| 能免费看av的网站| 欧美大片网址| 亚洲国产精久久久久久| 国产黄色一区二区三区| 国产精品天堂蜜av在线播放 | 美女视频免费一区| 69**夜色精品国产69乱| 玖玖爱免费视频| 久久久久久久久久久妇女| 中日韩美女免费视频网址在线观看 | 亚洲欧美三级在线| 亚洲一区二区三区无码久久| 成人自拍在线| 精品国产凹凸成av人导航| 色男人天堂av| 国产精品亚洲四区在线观看 | 特黄视频在线观看| 高清不卡一区二区在线| 91在线短视频| 国产成年妇视频| 国产裸体歌舞团一区二区| 成人黄色中文字幕| 国产精品女同一区二区| 久久成人免费日本黄色| 国产日韩av在线播放| 在线观看免费高清视频| 久久精品二区亚洲w码| 国产精品丝袜一区二区三区| 一本久道久久综合无码中文| 久久国产三级精品| 91美女片黄在线观| 国产成人精品一区二三区四区五区| 国内精品视频666| 91精品久久久久久久久久| 91女人18毛片水多国产| 国产一区二三区| 高清国产在线一区| 天天干视频在线观看| 91色乱码一区二区三区| 色阁综合av| 激情成人四房播| 亚洲已满18点击进入久久| 免费拍拍拍网站| 456亚洲精品成人影院| 在线亚洲+欧美+日本专区| 天天干天天爽天天射| 久久伦理中文字幕| 日韩激情视频在线| 亚洲色图欧美色| 中文字幕一区二区三区在线视频 | 日韩综合视频在线观看| 欧美黑人猛猛猛| 日韩视频一区| 国产精品88a∨| 99久久精品无免国产免费| 成人精品一区二区三区中文字幕| 久久久综合亚洲91久久98| 永久免费av在线| 亚洲一区免费视频| 爱情岛论坛成人| 欧洲精品99毛片免费高清观看| 亚洲精品按摩视频| 中文乱码字幕高清一区二区| 亚洲国产综合在线看不卡| 国产成人亚洲综合91精品| av一级黄色片| 久久蜜桃一区二区| 亚洲精品日韩在线观看| 成年人黄色大片在线| 欧美性受xxxx黑人xyx| 91porn在线| 第一会所sis001亚洲| 久久久噜噜噜久久久| 在线视频1卡二卡三卡| aaa亚洲精品一二三区| 亚洲人一区二区| h片在线观看视频免费免费| 欧美日韩精品三区| 成年人网站免费在线观看| 综合天堂av久久久久久久| 国产精品69av| 天堂在线中文字幕| 亚洲欧美电影一区二区| 亚洲黄色a v| 免费日韩一区二区三区| 久久久黄色av| www.五月婷婷.com| www.日本不卡| 在线观看污视频| 国产69精品久久久久9999人| 日韩av中文字幕在线免费观看| 日韩视频中文字幕在线观看| 日韩和欧美的一区| 久久久av水蜜桃| 超级白嫩亚洲国产第一| 日韩欧美国产一区二区三区| 99精品中文字幕| 日本欧美加勒比视频| 精品一区二区三区国产| 欧美野外wwwxxx| 91精品国产综合久久福利软件 | 国产又爽又黄网站亚洲视频123| 亚洲免费毛片网站| 五月激情五月婷婷| 久久精品国产99久久| 国产精品va在线播放我和闺蜜| 亚洲av成人精品毛片| 午夜视频一区二区三区| xfplay5566色资源网站| 欧美日韩a区| 成人一区二区三区四区| 麻豆福利在线观看| 日韩女优电影在线观看| 麻豆视频在线免费看| 激情五月婷婷综合| 免费久久久久久| 成人精品视频在线观看| 日韩视频精品在线| 国产乱码精品一区二区| 亚洲欧美日韩系列| 乳色吐息在线观看| 欧美fxxxxxx另类| 亚洲影院高清在线| 免费电影视频在线看| 精品三级av在线| 国产一级免费av| av亚洲精华国产精华| 午夜精品久久久久久久无码| 欧美人与动xxxxz0oz| 欧美做受高潮电影o| 国模吧精品人体gogo| 欧美三级中文字| 亚洲色偷偷综合亚洲av伊人| 国产又粗又猛又爽又黄91精品| 97超碰在线视| 国内毛片久久| 日韩女优人人人人射在线视频| xxxxx日韩| 91精品国产品国语在线不卡| 精品肉丝脚一区二区三区| 99久久精品情趣| 久久久久久香蕉| 91精品高清| 黄色小网站91| 天然素人一区二区视频| 久久亚洲精品一区| 五月婷婷丁香网| 欧美午夜精品免费| 深夜福利影院在线观看| 91免费看`日韩一区二区| 国产成人手机视频| 欧美91视频| 人禽交欧美网站免费| 国产高清日韩| 人人澡人人澡人人看欧美| 色网站免费在线观看| 亚洲成人av片| 中文字幕一区二区在线视频 | 国产精品午夜一区二区| 亚洲精品自拍动漫在线| www.久久av| 国产福利91精品一区| 欧美精品第三页| 欧美涩涩网站| 日韩和欧美的一区二区| 亚洲高清在线一区| 国产精品久久97| 毛片网站在线看| 日韩中文字幕在线| 日韩福利一区二区| 欧美一区午夜视频在线观看| 老熟妇仑乱一区二区av| 一区二区三区日韩| 美国黄色特级片| av电影在线观看完整版一区二区| 亚洲免费黄色网| 久久精品人人| 成人免费性视频| 999久久久精品国产| 蜜桃91精品入口| jizz国产精品| 亚洲一区二区久久久久久| 粉嫩一区二区三区| 91精品国产色综合| 日韩精品分区| 欧美裸体男粗大视频在线观看| a天堂中文在线88| 日韩精品中文字幕在线| 国产成人手机在线| 欧美一区二区三区视频在线| 超碰在线免费97| 日韩欧美在线网址| 日韩av一二三区| 一区二区三区免费看视频| 香蕉成人在线视频| 国产日韩在线不卡| 成年人网站免费在线观看| caoporen国产精品视频| 日本精品一二三| 国产精品一区久久久久| 看看黄色一级片| 久久成人免费日本黄色| 亚洲伦理久久| 亚洲精品一区二区三区香蕉| 国产免费av电影| 欧美日韩一区不卡| 天天天天天天天干| 色爱区综合激月婷婷| 丁香六月婷婷综合| 欧美性感美女h网站在线观看免费| 久久久精品国产sm调教| 亚洲黄一区二区三区| 欧美精品一区二区蜜桃| 一区二区免费看| 久久国产精品波多野结衣| 亚洲图片欧美一区| 日韩精品一卡二卡| 精品毛片网大全| 特黄视频免费看| 日本久久一区二区三区| 奴色虐av一区二区三区| 欧美日韩在线三级| 91亚洲国产成人精品一区| 欧美一级片在线观看| www.av黄色| 亚洲国产97在线精品一区| 婷婷在线观看视频| 日韩国产精品视频| 国产在线视频资源| 日韩在线视频网| av免费在线免费| 97精品国产97久久久久久| 忘忧草在线日韩www影院| 国产ts一区二区| 欧美亚洲黄色| 97人人澡人人爽| 欧洲亚洲一区二区三区| 日韩av图片| 亚洲91中文字幕无线码三区| 国产美女作爱全过程免费视频| 精品成人久久| 欧美精品成人网| 激情图片小说一区| 性色av蜜臀av浪潮av老女人| 久久免费电影网| 中文字幕人妻一区二| 狠狠久久亚洲欧美专区| 中日韩av在线| 欧美mv日韩mv国产网站app| 欧美日韩视频精品二区| 中文字幕日韩欧美| 超碰中文在线| 国产精品一区二区电影| 成人激情自拍| 先锋影音一区二区三区| 亚洲特级毛片| 麻豆三级在线观看| 成人动漫一区二区在线| www亚洲色图| 亚洲一级二级三级在线免费观看| 久久久久久少妇| 欧美一二三四在线| 国产资源在线看| 欧美疯狂xxxx大交乱88av| 婷婷综合六月| 国产精品久久久久久久免费大片| 精品国产一区二区三区噜噜噜| 蜜桃视频一区二区在线观看| 美女日韩在线中文字幕| 少妇搡bbbb搡bbb搡打电话| 国产精品久久99| 少妇一级淫片免费放中国| 欧美一区二区三级| 国产对白叫床清晰在线播放| 久久久综合av| 国产美女精品视频免费播放软件| 欧美日韩一区综合| 欧美日韩a区| 国产成人美女视频| 久久综合久久久久88| 久久一区二区三| 欧美日韩国产首页| 欧美美女搞黄| 国内精品视频久久| 欧美一区一区| 一区在线电影| 日本成人在线电影网| 美国黄色a级片| 亚洲福利电影网| 亚洲第一第二区| 久久在线精品视频| 精品久久福利| 视频一区二区在线观看| 麻豆精品网站| 中文字幕丰满孑伦无码专区| 亚洲v日本v欧美v久久精品| 国内老熟妇对白hdxxxx| 久久综合久久88| www.久久99| 99热这里只有精品7| 蜜桃av噜噜一区| eeuss中文字幕| 欧美亚洲自拍偷拍| 国产在线观看精品一区| 国产成人精品视| 国产免费久久| 浓精h攵女乱爱av| 中文字幕乱码亚洲精品一区 | 无遮挡动作视频在线观看免费入口| 欧美亚洲在线视频| 奇米777国产一区国产二区| 久色视频在线播放| 91小视频在线| 日韩不卡在线播放| 日韩高清不卡av| 91看片一区| 婷婷久久五月天| 免费人成精品欧美精品| 亚洲色图100p| 4438成人网| av中文字幕在线看| 精品视频高清无人区区二区三区| 国产亚洲成人一区| www.色天使| 欧美性一区二区| 成人无遮挡免费网站视频在线观看| 亚洲综合av影视| 亚洲人人精品| 国产aⅴ激情无码久久久无码| 欧美在线制服丝袜| 免费在线观看av| av一区二区三区在线观看| 亚洲第一伊人| 四虎永久免费在线观看| 欧美日韩久久一区| 天堂成人av| 蜜桃久久精品乱码一区二区| 美腿丝袜在线亚洲一区| 欧美丰满艳妇bbwbbw| 日韩av在线网页| 欧美大片网站| www.好吊操| 日本一区二区免费在线 | 九九久久国产| 996这里只有精品| 久久久久国产精品麻豆ai换脸 | 国产毛片精品一区| 日本在线小视频| 中文字幕日韩有码| h视频久久久| 九九热在线免费| 亚洲图片欧美色图| 91精品国产91久久久久游泳池 | 91麻豆国产自产在线观看亚洲| 欧美熟妇精品一区二区| 91国偷自产一区二区三区观看| a毛片在线观看| 青青草成人网| 国产成人自拍网| 91丨九色丨海角社区| 欧美第一淫aaasss性| 欧美视频网址| 大尺度在线观看| 51精品秘密在线观看| 久久人体大尺度| 国产夫妻自拍一区|