<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                #### 第13章: ### Linux Linux是從Unix演變而來的操作系統,由于其優秀的性能和設計,適合做服務器的操作系統。Linux 系統的基礎是內核、C庫、工具集和系統的基本工具。 `操作系統`是指在整個系統中負責完成最基本功能和系統管理的那些部分。這些部分包括內核、設備驅動器、啟動引導程序、命令行shell或者其他種類的用戶界面、基本的文件管理工具和系統工具。`系統`包含了操作系統和運行在它之上的應用程序。 #### 13.1 內核 用戶界面是操作系統的外在表象,內核才是操作系統的內在核心。系統其他部分必須依靠內核這部分軟件提供的服務,像`管理硬件設備`,`分配系統資源`等。內核有時候稱為`管理者`、或者是`操作系統核心`。 內核通常由負責中斷的`中斷服務程序`,負責管理多個進程從而分享處理器時間的`調度程序`,負責管理進程地址空間的`內存管理程序`,`網絡、進程間通信`等系統服務程序共同組成。 對于提供保護機制的現代系統來說,內核獨立于普通應用程序,它一般處于系統態,擁有受保護的內存空間和訪問硬件設備的所有權限。這種系統態和受保護的內存空間,統稱為`內核空間`。相對的,應用程序在`用戶空間`執行,它們只能看到允許它們使用的部分系統資源,并且只使用某些特定的系統功能,不能直接訪問硬件,也不能直接訪問內核劃給別人的內存范圍。 在系統中運行的應用程序通過系統調用來與內核通信。應用程序通常調用庫函數(比如C庫函數)再由庫函數通過系統調用界面,讓內核完成各種不同任務。 當一個應用程序被稱為通過系統調用在`內核空間運行`,而內核被稱為運行于`進程上下文中`。這種交互關系------應用程序通過系統調用界面陷入內核------是應用程完成其工作的基本行為方式。 內核還要負責管理系統的硬件設備。現有的幾乎所有的體系結構,包括Linux支持的體系結構,都提供了中斷機制。當硬件設備想和系統通信的時候,它首先要發出一個異步的中斷信號去打斷處理器的執行,繼而打斷內核的執行。中斷通常對應一個中斷號,內核通過這個中斷號查找相應的中斷服務程序,并調用這個程序響應和處理中斷。舉個例子:當你敲擊鍵盤的時候,鍵盤控制器發送一個中斷信號告知系統,鍵盤緩沖區有數據到來。內核注意到這個中斷對應的中斷號,調用相應的中斷服務程序。該服務程序處理鍵盤數據后通知鍵盤控制器可以繼續輸入數據了。為了保證同步,內核可以停止中斷---既可以停止所有的中斷也可以有選擇地停止某個中斷號對應的中斷。 :-: ![](https://img.kancloud.cn/dd/f5/ddf5ea82adf084ac11e81268c64f0c18_500x470.png) 應用程序、內核、硬件關系 每個處理器在任何指定時間點上的活動必然概括為下列三者之一: 1. 運行于用戶空間,執行用戶進程。 2. 運行于內核空間,處于進程上下文,代表某個特定的進程執行。 3. 運行于內核空間,處于中斷上下文,與任何進程無關,處理某個特定的中斷。 ##### 單內核與微內核設計之比較 `單內核`就是把它從整體上作為一個單獨的大過程來實現,同時也運行在一個單獨的地址空間上。因此,這樣的內核通常以單個靜態二進制文件的形式存放于磁盤中。所有內核服務都在這樣的一個大內核地址空間上運行。 `微內核`并不作為一個單獨的大過程來實現。微內核的功能被劃分為多個獨立的過程。每個過程都叫做一個服務器。理想情況下,只有強烈要求特權服務的服務器才運行在特權模式下,其他服務器都運行在用戶空間。 Linux內核與傳統Unix內核之間存在一些限制的差異: 1. Linux支持動態加載內核模塊。盡管Linux內核也是單內核,可是允許在需要的時候動態地卸除核加載部分內核代碼。 2. Linux支持對稱多處理機制,盡管許多Unix地變體也支持,但傳統的Unix并不支持這種機制。 3. Linux內核可以搶占。與傳統的Unix變體不同,Linux內核具有允許在內核運行的任務優先執行的能力。 4. Linux對線程支持的實現比較有意思:內核并不區分線程和其他的一般進程。對于內核來說,所有的進程都一樣-------只不過是其中的一些共享資源而已。 5. Linux忽略一些被認為是設計得很拙劣的Unix特性,像STREAMS,還忽略了那些難以實現的過時標準。 6. Linux體現了自由這個詞的精髓。 #### 13.2 Linux 進程啟停 ##### CentOS CentOS系統是RHEL系統二次編譯后的一種Linux系統。 ##### RPM(紅帽軟件包管理器) RPM機制會建立統一的數據庫文件,詳細記錄軟件信息并能夠自動分析依賴關系。 ##### Yum軟件倉庫 盡管RPM能夠幫助用戶查詢軟件相關的依賴關系,但問題還是要運維人員自己解決,而有些大型軟件可能與數十個程序都有依賴關系,在這種情況下安裝軟件會是非常痛苦的。Yum軟件倉庫便是為了進一步降低軟件安裝難度和復雜度而設計的技術。Yum軟件倉庫可以根據用戶的要求分析出所需軟件包及其相關的依賴關系,然后自動從服務器下載軟件包安裝到系統。 Yum軟件倉庫中的RPM軟件包可以是由紅帽管方發布的,也可以是第三方發布的,當然也可以是自己編寫的。 ~~~ yum repolist all ? ? ? ? 列出所有倉庫 yum list all ? ? ? ? ? ? 列出倉庫中所有的軟件包 yum info 軟件包名稱 ? ? ? 查看軟件包信息 yum install 軟件包名稱 ? ? 安裝軟件包 yum reinstall 軟件包名稱 ? 重新安裝軟件包 yum update 軟件包名稱 ? ? 升級軟件包 yum remove 軟件包名稱 ? ? 移除軟件包 yum clean all ? ? ? ? ? 清除所有倉庫緩存 yum check-update ? 檢查可更新的軟件包 yum groupinstall 軟件包組 安裝指定的軟件包組 yum groupremove 軟件包組 移除指定的軟件包組 yum groupinfo 軟件包組 ? 查詢指定的軟件包組信息 ~~~ ##### systemd 初始化進程 RHEL7系統選擇systemd初始化進程服務已經是一個既定事實,因此也沒有了“運行級別”這個概念,Linux系統在啟動時要進行大量的初始化工作,比如掛在文件系統和交換分區、啟動各類進程服務等,這些都可以看作是一個一個的單元,systemd用目標(target)代替了System V init 中運行級別的概念。 RHEL7系統中是使用systemctl命令來管理服務器的。 ~~~ systemctl start foo.service 啟動服務 systemctl restart foo.service 重啟服務 systemctl stop foo.service 停止服務 systemctl reload foo.service 重新加載配置文件(不終止服務) systemctl status foo.service 查看服務狀態 ~~~ systemctl 設置開機啟動、不啟動、查看各級別下服務啟動狀態等常用命令 ~~~ systemctl enable foo.service 開機自動啟動 systemctl disable foo.service 開機不自動啟動 systemctl is-enabled foo.service 查看特定服務是否為開機自動東啟動 systemctl list-unit-files --type=service 查看各個級別下服務的啟動與禁用狀況 ~~~ 將某程序設為服務,例如Nexus.service 進入 /usr/lib/systemd/system, 新建nexus.service文件,寫入如下內容: ~~~ [Unit] Description=Nexus After=network.target remote-fs.target nss-lookup.target [Service] Type=forking Environment="JAVA_HOME=/usr/java/jdk1.8.0_144" ExecStart=/usr/local/nexus/nexus-3.7.1-02/bin/nexus start ExecStop=/usr/local/nexus/nexus-3.7.1-02/bin/nexus stop [Install] ? ~~~ 保存退出, 輸入 ~~~ systemctl reload *.service #重新加載服務配置文件 ~~~ 然后就可以啟動服務了, ~~~ systemctl start nexus.service ~~~ 設置為開機服務 ~~~ systemctl enable nexus.service ~~~ #### 13.3 Linux 常用命令 #### 13.3.1 基礎命令 ##### echo 命令 echo 命令用于在終端輸出字符串或變量提取后的值,格式為"echo \[字符串|$變量\]"。 ~~~ [root@qidian ~]# echo qidian.com ~~~ 終端屏幕會輸出 ~~~ qidian.com ~~~ 用$變量的方式提取變量SHELL的值,并輸出到屏幕上: ~~~ [root@qidian.com]# echo $SHELL /bin/bash ~~~ ##### date 命令 date命令用于顯示及設置系統的時間或日期,格式為"date \[選項\] \[指定格式\]" ~~~ [root@qidian ~]# date Mon Aug 24 16:11:23 CST 2017 ~~~ 按照“年-月-日 小時:分:秒” 的格式查看當前系統的date命令 ~~~ [root@qidian ~]# date "+%Y-%m-%d %H:%M:%S" 2017-08-24 16:29:31 ~~~ 將系統的當前時間設置為2017年9月1日9點20分的date命令 ~~~ [root@qidian ~]# date -s "20170901 9:20:00" Fri Sep 1 CST 09:20:00 2017 ~~~ date可以直接查看當前時間 ~~~ [root@qidian ~]# date Fri Sep 1 08:30:01 ~~~ date命令中的參數%j可以來查看今天是當年中的第幾天 ~~~ [root@qidian ~]# date "+j%" 244 ~~~ ##### reboot 命令 reboot用于重啟系統,只能root管理員可以使用。 ~~~ [root@qidian ~]# reboot ~~~ ##### poweroff 命令 poweroff用于關閉系統,只能管理員可以使用。 ~~~ [root@qidian ~]# poweroff ~~~ ##### wget 命令 wget命令用于在終端中下載網絡文件,格式為"wget\[參數\] 下載地址 ",如果沒有wget命令,需要先通過Yum倉庫下載wgetRPM軟件。 wget 參數 ~~~ -b ? 后臺下載 -P ? 下載到指定目錄 -t 最大嘗試次數 -c ? 斷點續傳 -p ? 下載頁面內所有資源,包括圖片、視頻等 -r ? 遞歸下載 ~~~ #### 13.3.2 進程命令 ##### ps 命令 ps 命令用于查看系統中的進程狀態,格式為"ps \[參數\]"。 ~~~ -a ? 顯示所有進程(包括其他用戶的進程) -u ? 用戶以及其他詳細信息 -x ? 顯示沒有控制終端的進程進程 ~~~ Linux 系統中時刻運行著許多進程,如果能夠合理地管理它們,則可以優化系統的性能。在Linux系統中,有5種常見的進程狀態,分別為運行、中斷、不可中斷、僵死、停止。 1. **R(運行)**:進程正在運行或在運行隊列中等待。 2. **S(中斷)**:進程處于休眠種,當某個條件形成后或者接收到信號時,則脫離該狀態。 3. **D(不可中斷)**:進程不響應系統異步信號,即使用kill命令也不能將其中斷。 4. **Z(僵死)**:進程已終止,但進程描述符依然存在,直到父進程調用writ4()系統函數后將進程釋放。 5. **T(停止)**:進程收到停止信號后停止運行。 ps aux 命令輸出 ~~~ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 4772 564 ? S Sep22 0:03 init [3] root 2 0.0 0.0 0 0 ? S Sep22 0:03 [migration/0] root 3 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S Sep22 0:02 [migration/1] root 5 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/1] root 6 0.0 0.0 0 0 ? Ss+ Sep22 0:02 [migration/2] root 7 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/2] root 8 0.0 0.0 0 0 ? S Sep22 0:00 [migration/3] root 9 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/3] root 10 0.0 0.0 0 0 ? S< Sep22 0:00 [migration/4] ~~~ USER 用戶 PID 進程id %CPU 運算器占用率 %MEM 內存占用率 VSZ 虛擬內存使用量(單位KB) RSS 占用的固定內存量(單位KB) TTY 所在終端 STAT 進程狀態 START 被啟動的時間 TIME 實際使用CPU的時間 COMMAND 命令名稱與參數(運行的程序) ##### top 命令 top命令用于動態地監視進程活動與系統負載等信息。top能動態查看到系統運維狀態。 ![](https://img-blog.csdn.net/2018080815173689?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) top命令執行結果的前5行為系統整體的統計信息。 第1行:系統時間、運行時間、終端登錄數、系統負載(三個數字分別是1分鐘、5分鐘、15分鐘的平均值,數字越小負載越低) 第2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。 第3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。 第4行:物理內存總量、內存使用量、內存空閑量、作為內核緩存的內存量。 第5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閑量、已被提前加載的內存量。 ##### pidof 命令 pidof 命令用于查詢某個指定服務進程的PID值,格式“pidof\[參數\]\[服務名稱\] ”。 ~~~ [root@qidian ~]# pidof sshd 2156 ~~~ ##### kill 命令 kill 命令用于終止某個指定PID的服務進程,格式"kill \[參數\] \[服務名稱 \]" ~~~ [root@qidian ~]# kill 2156 ~~~ 殺死pid 為2156 的sshd進程 ##### killall 命令 killall命令用于終止某指定名稱的服務所對應的全部進程。格式"killall \[參數\] \[進程名稱\]"。 通俗地講,復雜軟件的服務程序會有多個進程協同為用戶提供服務,如果逐個去結束這些進程會比較麻煩,可以使用killall命令來批量結束某個服務程序帶有的全部進程。 ~~~ [root@qidian ~]# pidof httpd 13581 13580 13579 13578 13577 13576 [root@qidian ~]# killall httpd [root@qidian ~]# pidof httpd [root@qidian ~]# ~~~ ##### ifconfig 命令 ifconfig 命令用于獲取網卡配置與網絡狀態等信息。 :-: ![](https://img.kancloud.cn/70/46/70468153cd995c5933eccf59a3d590e1_515x278.png) ##### uname 命令 uname 命令用于查看系統內核與系統版本等信息。 :-: ![](https://img.kancloud.cn/0c/7d/0c7daa8c3e9e57e930f7b53c2ac141c0_801x31.png) ##### uptime 命令 uptime 命令用于查看系統的負載信息。它可以顯示當前系統的時間、系統已運行的時間、啟用終端數量以及平均負載值等信息。 :-: ![](https://img.kancloud.cn/ef/18/ef188fbf09a2deb844122dfec343a1ca_493x30.png) ##### free 命令 free 命令用于顯示當前系統中內存的使用量信息。 ~~~ [root@qidian ~]# free -h ~~~ :-: ![](https://img.kancloud.cn/fe/f1/fef1b885749c991c9941ab7968b99764_902x101.png) total 內存總量 used 已用量 free 可用量 shared 進程共享的內存量 buffers 磁盤緩存的內存量 cached 緩存的內存量 ##### who 命令 who 用于查看當前登入主機的用戶端信息。 ##### last 命令 last 命令用于查看所有系統的登錄信息。 ##### history 命令 history命令用于顯示歷史執行過的命令。 ~~~ [root@qidian ~]# history 1 cat .bash_history ? 2 echo "" > .bash_history ? 3 ls ? 4 man ls ? 5 date ? 6 logout ? 7 history ~~~ 如果像快速使用過去使用過的命令。 ~~~ [root@qidian ~]# !5 ~~~ 這樣就會執行上面個的date命令。 ##### sosreport 命令 sosreport命令用于收集系統配置及架構信息并輸出診斷文檔。 #### 13.3.3 文件目錄控制命令 ##### pwd 命令 pwd命令用于顯示用戶當前所處的工作目錄。 ~~~ [root@qidian ~]# pwd /etc ~~~ ##### cd 命令 cd 命令用于切換工作路徑,格式為"cd \[目錄\]"。 ~~~ [root@qidian ~]# cd /etc [root@qidian etc]# cd /bin [root@qidian bin]# cd - ? ? ? ? ? ? ? ? ? ? ? ? //這是切到上一次的目錄 [root@qidian etc]# [root@qidian etc]# cd ~ ? ? ? ? ? ? ? ? ? ? ? ? //這是切到家目錄 [root@qidian ~]# ~~~ ##### ls 命令 ls 命令用于顯示沐目錄中的文件信息,格式"ls\[選項\] \[文件\]"。建議使用 ls -liaF。 ~~~ [root@qidian ~]# ls -al ~~~ :-: ![](https://img.kancloud.cn/3f/65/3f65c8d043aee999a9151f582a7fa6aa_523x97.png) ##### cat 命令 cat 命令用于查看純文本文件(內容較少的)。格式為"cat \[選項\] \[文件\]"。 如果需要顯示行號,在cat 命令后面追加一個-n參數: ~~~ [root@qidian ~]# cat -n test.txt ? ? 1 ? a ? ? 2 ? aa ? ? 3 ? aaa ? ? 4 ? aaaa ? ? 5 ? aaaaa ? ? 6 ? ? ? ? 7 ? aaaaaa ~~~ ##### more 命令 more 命令用于查看純文本文件(內容較多的),格式為"more \[選項\]文件"。其中空格和回車鍵用于向下翻頁。 ~~~ [root@VM-0-8-centos wwwroot]# more test.c ~~~ :-: ![](https://img.kancloud.cn/cd/1e/cd1e766c460eb7f3b610b0fd435ace26_331x302.png) ##### head 命令 head 命令用于查看純文本文檔的前N行,格式為"head \[選項\] \[文件\]"。 ~~~ [root@qidian ~]# head -n 5 test.php <?php /* 這是一個php文件 */ ~~~ ##### tail 命令 tail 命令用于查看純文本文檔的后N行或持續刷新內容,格式為"tail\[選項\]\[文件\]"。 ~~~ [root@qidian ~]# tail -n 5 test.php ...... ~~~ 想要查看一個文件實時的插入變化用-f,對于查看日志文件是非常有用的。 ~~~ [root@qidian ~]# tail -f testLog.php ...... ~~~ ##### tr 命令 tr 命令用于替換文本文件中的字符,格式"tr \[原始字符\]\[目標字符\]"。 ~~~ [root@qidian ~]# cat test.php | tr [a-z] [A-Z] ~~~ ##### wc 命令 wc 命令用于統計指定文本的行數、字數、字節數,格式為"wc \[參數\] 文本"。 ~~~ [root@VM-0-8-centos wwwroot]# wc -l test.c 19 test.c ~~~ :-: ![](https://img.kancloud.cn/0b/01/0b0100ab4e5ac696be77e2f763405379_331x33.png) 1. \-l 用于統計行數 2. \-w 用于統計單詞書 3. \-c 用于顯示字節數 ##### stat 命令 stat 命令用于查看文件的具體存儲信息和時間等信息。格式"stat 文件名稱"。 ~~~ [root@VM-0-8-centos wwwroot]# stat test.c File: ‘test.c’ Size: 306 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 917574 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2021-02-09 19:02:15.906107070 +0800 Modify: 2021-02-09 19:02:15.906107070 +0800 Change: 2021-02-09 19:02:15.911107052 +0800 Birth: - ~~~ :-: ![](https://img.kancloud.cn/dc/c6/dcc61dcb683d17092b28b15596b03d65_511x133.png) ##### cut 命令 cut 命令用于按"列"提取文本字符,格式為"cut\[參數\] 文本"。-f設置需要查看的列數,-d設置間隔符號。 ~~~ [root@qidian ~]# head -n 2/etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@qidian ~]#cut -d: -f1 /etc/passwd root bin deamon adm lp ....... ~~~ ##### diff 命令 diff 命令用于比較多個文本的差異,格式為"diff\[參數\] 文件"。-c 可以顯示文件具體不同。 ~~~ [root@qidian ~]# diff --brief diff_A.txt diff_B.txt Files diff_A.txt and diff_B.txt differ ~~~ #### 13.3.4 文件目錄管理命令 ##### touch 命令 touch 命令用于創建空白文件設置文件時間,格式"touch \[選項\]\[文件\]"。 ~~~ [root@qidian ~]# touch a.txt [root@qidian ~]# ls a.txt ~~~ ##### mkdir 命令 mkdir 命令用于創建空白的目錄,格式為"mkdir \[選項\] 目錄"。 ~~~ [root@qidian ~]# mkdir tt [root@qidian ~]# cd tt [root@qidian tt]# mkdir -p a/b/c [root@qidian tt]# cd a [root@qidian a]# cd b [root@qidian b]# ~~~ ##### cp 命令 cp命令用于復制文件或目錄,格式"cp \[選項\] 源文件 目標文件"。 ~~~ [root@qidian ~]# touch a.txt [root@qidian ~]# cp a.txt b.txt [root@qidian ~]# ls a.txt b.txt ~~~ ##### mv 命令 mv 命令用于剪切文件或將文件重命名。經常用于移動文件,格式"mv \[選項\] 源文件 \[目標路徑|目標文件名\]"。 ~~~ [root@qidian ~]# mv a.txt x.txt [root@qidian ~]# ls x.txt b.txt ~~~ ##### rm 命令 rm 命令用于刪除文件或目錄,格式"mv \[選項\] 文件"。 ~~~ [root@qidian ~]# rm x.txt [root@qidian ~]# ls b.txt ~~~ 刪除本文件夾下所有文件 ~~~ [root@qidian ~]# rm ./* ~~~ ##### dd 命令 dd 命令用于按照指定大小和個數的數據塊來復制文件或轉換文件,格式"dd \[參數\]"。 1. if 輸入的文件名稱 2. of輸出的文件名稱 3. bs設置每個"塊"的大小 4. count設置要復制"塊"的個數 ~~~ [root@qidian ~]#dd if=/dev/zero of=560_file count=1 bs=560M 1+0 records in 1+0 records out 587202560 bytes (587 MB) copied ,27.1755 s, 21.6MB/s ~~~ ##### file 命令 file 命令用于查看文件的類型,格式為"file 文件名"。 ~~~ [root@qidian ~]# file anaconda-ks.cfg anaconda-ks.cfg:ASCII text [root@qidian ~]# file /dev/sda /dev/sda:block special ~~~ #### 13.3.5 打包壓縮與搜索命令 ##### tar 命令 tar 命令用于對文件進行打包壓縮或解壓,格式為"tar \[選項\] \[文件\]"。 1. \-c 創建壓縮文件 2. \-x 解開壓縮文件 3. \-t 查看壓縮包文件有哪些文件 4. \-z 用Gizp壓縮或解壓 5. \-j 用bzip2壓縮或解壓 6. \-v 顯示壓縮或解壓的過程 7. \-f 目標文件名 8. \-p 保留原始的權限與屬性 9. \-P 使用絕對路徑來壓縮 10. \-C 指定壓縮到的目錄 ~~~ [root@qidian ~]# tar -czvf etc.tar.gz /etc //打包文件為etc.tar.gz [root@qidian ~]# tar -xzvf etc.tar.gz -C /root/etc //解壓etc.tar.gz 到/root/etc(先要創建此目錄) ~~~ ##### grep 命令 grep 命令用于在文本中執行關鍵詞搜索,并顯示匹配的結果,格式為"grep \[選項\]\[文件\]"。可以使用正則匹配或者通配符。 ~~~ [root@qidian ~]# grep /sbin/nologin /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/login ..... ~~~ 匹配進程 ~~~ [root@qidian ~]# ps aux | grep php-fpm [root@qidian ~]# ps aux | grep php* ~~~ 匹配文件名 ~~~ [root@qidian ~]# ls -liaf | grep php* ~~~ ##### find 命令 find 命令用于按照指定條件來查找文件,格式"find \[查找路徑\] 尋找條件操作"。 1. \-name 匹配名稱 2. \-prem 匹配權限(mode為完全匹配,-mode為包含即可) 3. \-user 匹配所有者 4. \-group 匹配所有者組 5. \-mtime -n +n 匹配修改內容的時間(-n指n天以內,+n指n天以前) 6. \-atime -n +n 匹配訪問文件的時間(-n指n天以內, +n指n天以前) 7. \-ctime -n +n 匹配修改文件權限的時間 (-n指n天以內, +n指n天以前) 8. \-nouser 匹配無所有者的文件 9. \-nogroup 匹配無所有組的文件 10. newer f1 !f2 匹配比文件f1新但比f2舊的文件 11. \--type b/d/c/p/l/f 匹配文件類型(后面的字符參數一次表示塊設備、目錄、字符設備、管道、鏈接文件、文本文件)。 12. \-size 匹配文件的大小(+50KB為查找超過50Kb的文件,而-50Kb為查找小于50KB的文件) 13. \-prune 忽略某個目錄 14. \-exec ·······{}\\; 后面可跟用于進一步處理搜索結果的命令。 ~~~ [root@VM-0-8-centos wwwroot]# find / -name index.php /data/wwwroot/index.php ~~~ #### 13.3.6 管道符、重定向與環境變量 ##### 輸入重定向 1. 命令 < 文件 將文件作為命令的標準輸入 2. 命令 << 分節符 從標準輸入中讀入,直到遇見分節符才停止。 3. 命令 文件 2 將文件1作為命令的標準輸入并將標準輸出到文件2 ##### 輸出重定向 1. 命令 > 文件 將標準輸出重定向到一個文件中(清空原有文件數據) 2. 命令 2> 文件 將錯誤輸出重定向到一個文件中 (清空原有文件的數據) 3. 命令 >> 文件 將標準輸出重定向到一個文件中 (追加到原有內容的后面) 4. 命令 2>> 文件 將錯誤輸出重定向到一個文件中 (追加到原有內容的后面) 5. 命令 >> 文件 2>&1或 命令 &>> 文件 將標準輸出與錯誤輸出共同寫到文件中(追加到原有內容后面) ##### 管道符 | 管道符的作用“把前一個命令原本要輸出到屏幕的標準正常數據作為是后一個命令的標準輸入”。 ~~~ [root@qidian ~]#ls | grep index.php //這是將ls輸出的數據作為grep的標準輸入命令 ~~~ ##### 環境變量 在Linux中,變量名稱一般都是大寫的,這是一種約定俗成的規范。 重要環境變量: 1. HOME 用戶的主目錄(家目錄) 2. SHELL 用戶在使用的Shell解釋器名稱 3. HISTSIZE 輸出的歷史命令記錄條數 4. HISTFILESIZE 保存的歷史命令記錄條數 5. MAIL 郵件保存路徑 6. LANG 系統語言、語系名稱 7. RANDOM 生成一個隨機數字 8. PS1 Bash解釋器的提示符 9. PATH 定義解釋器搜索用戶執行命令的路徑 10. EDITOR 用戶默認的文本編輯器 ~~~ [root@qidian ~]# echo $HOME /root ~~~ 設置變量,并且通過`$`讀取。 ~~~ [root@qidian ~]# WORKDIR=/home/workdir [root@qidian ~]# cd $WORKDIR [root@qidian workdir]# pwd /home/workdir ~~~ #### 13.4 vim編輯器 vim是Linux最常用且強大的編輯器。vim有三種模式,輸入模式、命令模式、末行模式。 命令模式轉輸入模式通過a、i、o等鍵,輸入模式轉命令模式通過Esc鍵。 命令模式轉末行模式通過:鍵,末行模式轉命令模式通過Esc鍵。 ~~~ [root@qidian ~]# vim test.php ~~~ 常用命令: 1. dd 刪除(剪切)光標所在行 2. 5dd 刪除(剪切)從光標處開始的5行 3. yy 復制光標所在行 4. 5yy 復制從光標處開始的5行 5. n 顯示搜索命令定位的到下一個字符串 6. N 顯示搜索命令定位到的上一個字符串 7. u 撤銷上一步的操作 8. p 將之前刪除(dd)或復制(yy)過的數據粘貼到光標處 末行模式的可用命令: 1. :w 保存 2. :q 退出 3. :q! 強制退出(放棄對文檔的修改) 4. wq! 強制保存退出 5. set nu 顯示行號 6. set nonu 不顯示行號 7. :命令 執行該命令 8. :整數 跳轉到該行 9. :s/one/two 將當前光標所在行的第一個one替換成two 10. :s/one/two/g 將當前光標所在行的所有one替換成two 11. %s/one/two/g 將全文中的所有one替換成two 12. ?字符串 從下至上搜索字符串 13. /字符串 從上至下搜索字符串 #### 13.5 Shell 腳本 編寫shell腳本,可以讓系統運行多條命令。 ~~~ [root@qidian ~]# vim test.sh #!/bin/bash #這是第一行,必須要指明用哪個bash解釋器 pwd ls ~~~ 運行時 ~~~ [root@qidian ~]# test.sh /root test.sh a.txt b.txt ~~~ ##### 接收用戶的參數 為了讓Shell腳本程序更好地滿足用戶地一些實時需求,以便靈活完成工作,必須要讓腳本程序能夠像之前執行命令那樣,接收用戶輸入的參數。所以Linux腳本語言早已內設了用于接收參數地變量,變量之間可以使用空格間隔。`$0`對應當前Shell腳本程序的名稱,`$#`對應的是總共有幾個參數,`$*`對應的是所有位置的參數值,`$?`對應的是顯示上一次命令的執行返回值。`$1`、`$2`、`$3`······對應的是第N個位置的參數值 ~~~ [root@qidian ~]# ./example.sh one two three four five six ~~~ 例如: ~~~ [root@qidian ~]# vim example.sh #!/bin/bash echo "當前腳本名稱為$0" echo "總共有$#個參數,分別是$*" echo "第一個參數為$1,第五個參數為$5" [root@qidian ~]#sh example.sh one two three four five six 當前腳本名稱為 example.sh 總共有6個參數,分別是one two three four five six 第一個參數為one,第五個參數為five ~~~ ##### 判斷用戶的參數 文件測試所用的參數 1. \-d 測試文件是否是目錄類型 2. \-e 測試文件是否存在 3. \-f 判斷是否為一般文件 4. \-r 測試當前用戶是否有權限讀取 5. \-w 測試當前用戶是否有寫入權限 6. \-x 測試當前用戶是否有執行權限 使用文件測試語句判斷/etc/fstab是否為一般文件,如果返回值為0,則代表文件存在,且為一般文件。 ~~~ [root@qidian ~]# [ -d /etc/fstab ] [root@qidian ~]# echo $? 0 ~~~ ##### 或||,與&&,非! ~~~ [root@qidian ~]# [ -e /dev/cdrom ] && echo "Exist" Exist ~~~ ##### 可用的整數比較符 1. \-eq 是否等于 2. \-ne 是否不等于 3. \-gt 是否大于 4. \-lt 是否小于 5. \-le 是否等于或小于 6. \-ge 是否大于或等于 ~~~ [root@qidian ~]# [ 10 -gt 10 ] [root@qidian ~]# echo $? 1 [root@qidian ~]# [ 10 -eq 10 ] [root@qidian ~]# echo $? 0 ~~~ ##### 常見字符串比較運算符 1. \= 字符串內容是否相同 2. != 字符串內容是否不同 3. \-z 判斷字符串內容是否為空 ~~~ [root@qidian ~]# [ -z $String ] [root@qidian ~]# echo $? 0 ~~~ ##### if 條件測試語句 一個判斷條件格式: ~~~ if [條件判斷] then //code fi ~~~ 例子:目錄不存在創建該目錄。 ~~~ [root@qidian ~]# vim mkcdrom.sh #!/bin/bash DIR="/media/cdrom" if [ ! -e $DIR ] then mkdir -p $DIR fi ~~~ 一個判斷條件一個else格式: ~~~ if [條件判斷] then //code else //code fi ~~~ 例子:能夠ping通,提示服務器正常工作,不行就報警服務器出現問題。 ~~~ [root@qidian ~]# vim chkhost.sh #!/bin/bash ping -c 3 -i 0.2 -W &> /dev/null if [ $? -eq 0 ] then echo "host $1 is On-line" else echo "host $1 is Off-line" fi ~~~ 多個判斷條件格式: ~~~ if [條件判斷] then //code elif [條件判斷] then //code else /code fi ~~~ ##### for 條件循環語句 格式: ~~~ for 變量名 in 取值列表 do //code done ~~~ 例子:從文件取列表進行循環 ~~~ [root@qidian ~]# vim num.txt 1 2 3 4 [root@qidian ~]# vim Example.sh #!/bin/bash for NUM in `cat num.txt` do echo $NUM done [root@qidian ~]# sh Example.sh 1 2 3 4 ~~~ :-: ![](https://img.kancloud.cn/f8/69/f8699282d410ac88341b41c476c9dfb0_308x77.png) ##### while 條件循環語句 格式: ~~~ while [條件判斷] do //code done ~~~ ##### case 條件測試語句 格式: ~~~ case 變量值 in 模式1) //code;; 模式2) //code;; ······· *) //code;; esac ~~~ ~~~ [root@qidian ~]# vim Checkkeys.sh #!/bin/bash read -p "請輸入一個字符,并按Enter鍵確認:" KEY case "$KEY" in [a-z]|[A-Z]) echo "你輸入的是 字母。" ;; [0-9]) echo "你輸入的是 數字。" ;; *) echo "您輸入的是 空格、功能鍵或其他控制字符。" esac ~~~ #### 13.6 計劃任務服務程序 計劃任務分為`一次性計劃任務`與`長期性計劃任務`。 ##### at命令 at 命令用于設定一次性任務 ~~~ [root@qidian ~]# at 23:00 at > systemctl restart httpd at > 此處同時按下ctrl + D 結束編寫一次性計劃任務 ~~~ 或者 ~~~ [root@qidian ~]# echo "systemctl restart httpd" | at 23:00 ~~~ at -l 查看所有計劃任務 ~~~ [root@qidian ~]# at -l 3 mon Apr 27 23:30:00 2017 a root 4 mon Apr 27 23:30:00 2017 a root ~~~ atrm 用于刪除一次性計劃任務 ~~~ [root@qidian ~]# atrm 3 [root@qidian ~]# at -l 4 mon Apr 27 23:30:00 2017 a root ~~~ ##### crond 命令 crond 命令用于周期性、有規律地執行某些具體地計劃任務。 1. crontab -e 創建、編輯計劃任務 2. crontab -l 查看當前計劃任務 3. crontab -r 刪除某條計劃任務 4. crontab -u 編輯他人計劃任務(root用戶權限) 計劃任務存放的目錄: * /var/spool/cron/ 目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名。 * /etc/crontab 這個文件負責調度各種管理和維護任務。 * /etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。 * 我們還可以把腳本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。 crond 設置任務的參數字段說明 (以空格分隔字段,逗號","挑選字段,減號"-"連續字段,除號"/"表示每多久執行一次) 1)分 0-59整數 2)時 0-23整數 3)日 1-31整數 4)月 1-12整數 5)星期 0-7整數, 0和7為星期天 6)命令 要執行的命令或腳本 #### 13.7 用戶身份與文件權限 在RHEL 7中用戶身份有以下: 1. 管理員UID為0:系統管理員(通常是root)。 2. 系統用戶UID為1-999:Linux系統為了避免因為某個服務程序出現被黑客提權至整臺服務器,默認服務程序會有獨立的系統用戶負責運行,進而有效控制被破壞的范圍。 3. 普通用戶UID從1000開始:是由管理員創建的用于日常工作的用戶。 為了方便管理同一組的用戶,Linux系統還引入了用戶組的概念。一個用戶有一個基本用戶組,但是可以有多個擴展用戶組,從而滿足日常的工作需要。 ##### useradd 命令 useradd 命令用于創建新的用戶,格式為"useradd \[選項\] 用戶名"。用該命令創建用戶賬戶時,默認的用戶家目錄在/home目錄中。默認的Shell解釋器為/bin/bash,而且會創建一個和該用于同名的基本用戶組。 | 參數 | 作用 | | --- | --- | | \-d | 指定用戶的家目錄(默認為/home/username) | | \-e | 賬戶的到期時間,格式為YYYY-MM-DD | | \-u | 指定該用戶默認UID | | \-g | 指定一個初始的用戶基本組(必須已存在) | | \-G | 指定一個或多個擴展用戶組 | | \-N | 不創建與用戶同名的基本用戶組 | | \-s | 指定該用戶的默認Shell解釋器 | 創建一個用戶,指定解釋器為nologin(表示不能登錄系統)。 ~~~ [root@qidian ~]# useradd -d /home/qdian -u 1111 -s /sbin/nogin oneone [root@qidian ~]# id oneone uid=1111(oneone) gid=1111(oneone) groups=1111(oneone) ~~~ ##### groupadd 命令 groupadd 命令用于創建用戶組,格式為"groupadd \[選項\] 群組名"。 ~~~ [root@qidian ~]# groupadd tom ~~~ ##### usermod 命令 usermod命令用于修改用戶的屬性,格式為"usermod \[選項\] 用戶名"。linux系統中所有一切都是文件,因此創建用戶就是修改文件的過程。用戶的信息保存在/etc/passwd文件中。 | 參數 | 作用 | | --- | --- | | \-c | 填寫用戶賬戶的備注信息 | | \-d -m | 參數-m 與參數-d 連用,可重新指定用戶的家目錄并自動把舊的數據轉移過去 | | \-e | 賬戶的到期時間,YYYY-MM-DD | | \-g | 變更所屬用戶組 | | \-G | 變更擴展用戶組 | | \-L | 鎖定用戶禁止其登錄系統 | | \-U | 解鎖用戶,允許其登錄系統 | | \-s | 變更默認終端 | | \-u | 修改用戶的UID | 添加用戶到root組。 ~~~ [root@qidian ~]# usermod -G root oneone [root@qidian ~]# id oneone uid=1111(oneone) gid=1111(oneone) groups=1111(oneone),0(root) ~~~ ##### passwd 命令 passwd 命令用于修改用戶密碼、過期時間、認證信息等,格式"passwd \[選項\] 用戶名"。普通用只能修改自身的系統密碼,root用戶可以修改任何用戶的系統密碼且不需要驗證。 | 參數 | 作用 | | --- | --- | | \-l | 鎖定用戶,禁止登錄 | | \-u | 接觸鎖定,允許用戶登錄 | | \--stdin | 允許通過標準輸入修改用戶密碼,如 echo "123456| passwd --stdin oneone" | | \-d | 使該用戶可以用空密碼登錄系統 | | \-e | 強制用戶在下次登陸時修改密碼 | | \-S | 顯示用戶的密碼是否被鎖定,以及密碼采用的加密算法名稱 | ##### userdel 命令 userdel 命令用于刪除用戶,格式為"userdel \[選項\] 用戶名"。 | 參數 | 作用 | | --- | --- | | \-f | 強制刪除用戶 | | \-r | 同時刪除用戶及用戶家目錄 | ##### 用戶權限及歸屬 Linux用不同的字符區分不同的文件類型: * \-: 普通文件 * d: 目錄文件 * l: 鏈接文件 * b: 塊設備文件 * c: 字符設備文件 * p: 管道文件 在Linux中,有5種權限,分別是,r、w、x、s、t。 * 可讀權限:r(4) * 可寫權限:w(2) * 可執行權限:x(1) * Setuid:s(Set User ID) * Setgid:s(Set Group ID) * 粘滯位:t 例如:dr-xr-xr-x. 2 root root 12288 Nov 2 2012 . 說明這個是一個文件夾 擁有者是root,群組是root。擁有者、群組、其他組的權限分別是555。都是有讀和執行權限。因為沒有w(2)。文件最后修改時間是Nov 2 2012 文件大小是12288。 ##### 文件的特殊權限 在復雜多變的生產環境中,單純設置文件的rwx已無法滿足我們對安全和靈活性的需求。 ##### SUID SUID 是一種對二進制程序進行設置的特殊權限,可以讓二進制程序的執行者臨時擁有屬主的權限。 ##### SGID SGID有兩種主要功能: * 讓執行者臨時擁有屬組的權限(對擁有執行權限的二進制程序進行設置)。 * 在某個目錄中創建的文件自動集成該目錄的用戶組(只可以對目錄設進行設置)。 ##### chmod 命令 改變文件或者目錄的權限 ~~~ [root@qidian ~]# chmod 760 dir [root@qidian ~]# ls -l dir drwxrw----. 1 root root 15 Feb 11:50 dir ~~~ ##### chown 命令 改變文件所有者和所屬組 ~~~ [root@qidian ~]# chown oneone:oneone dir [root@qidian ~]# ls -l dir drwxrw----. 1 oneone oneone 15 Feb 11:50 dir ~~~ ##### SBIT SBIT 特殊權限為可確保用戶只能刪除自己的文件。通過chmod o+t 添加SBIT粘滯位。 ~~~ [root@qidian ~]# chmod -R o+t dir ~~~ #### 文件的隱藏屬性 在默認的情況不能被直接被用戶發覺。 ##### chattr 命令 chattr 命令擁有設置文件的隱藏權限。格式"chattr +\[參數\] 文件"。 | 參數 | 作用 | | --- | --- | | i | 無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能新建或刪除文件 | | a | 允許追加內容,不可覆蓋或刪除 | | S | 文件變更后立即同步到磁盤 | | s | 立即刪除,不可恢復 | | A | 不可修改最后訪問時間 | | b | 不再修改存取時間 | | D | 檢查壓縮文件中的錯誤 | | d | 使用dump命令備份時被忽略 | | c | 默認進行壓縮 | | u | 當刪除后依然保存留在硬盤的數據,方便日后恢復 | | t | 讓文件系統支持尾部合并 | | X | 可以直接訪問壓縮文件的內容 | ~~~ [root@qidian ~]# chattr +a test.txt [root@qidian ~]# rm test.txt rm:cannot remove "test.txt" : Operation not permitted ~~~ ##### lsattr 命令 lsasttr 命令擁有顯示文件的隱藏權限,格式為"lsattr \[參數\] 文件"。 ~~~ [root@qidian ~]# lsattr test.txt -----a---------- test.txt ~~~ #### 文件訪問控制列表 文件訪問控制列表ACL用于對某一個指定用戶進行權限控制。 ##### setfacl 命令 setfacl 命令用于管理文件的ACL規則,格式"setfacl \[參數\] 文件名稱"。 ##### getfacl 命令 getfacl 命令用于顯示文件上設置的ACL信息,格式為"getfacl \[參數\] 文件名稱" #### su 命令與 sudo 服務 ##### su 命令 su 命令用于切換用戶,使得當前用戶在不登錄的情況下,順暢地切換到其他用戶。(-) 號代表徹底切換到某個用戶。 ~~~ [root@qidian ~]# su - oneone [oneone@qidian ~]# ~~~ ##### sudo 命令 sudo 命令把特定命令的執行權限賦予給指定用戶,保證能夠為完成工作又不泄露root管理員密碼。只有管理員可以用visudo 編輯其配置文件。 sudo命令可以: * 限制用戶執行指定的命令。 * 記錄用戶執行的每一條命令。 * 配置文件/etc/sudoers(用來提供集中的用戶管理、權限與主機等參數)。 * 驗證密碼后5分鐘內(默認值)無需再讓用戶驗證密碼。 | 參數 | 作用 | | --- | --- | | \-h | 列出幫助信息 | | \-l | 列出當前用戶可執行的命令 | | \-u 用戶名或者UID | 以指定的用戶身份執行命令 | | \-k | 清空密碼有效時間 | | \-b | 在后臺執行 | | \-p | 更改詢問密碼的提示語 | ~~~ [root@qidian ~]# visudo //99行之后 root ALL=(ALL) ALL oneone ALL=(ALL) ALL //讓oneone用戶可以使用所有命令,允許使用的主機是全部以所有身份 ~~~ #### 13\. 8 Linux 其他 對于Linux的其他技術,有需要的同學可以查閱資料自行學習。下面類舉部分: ##### RAID RAID技術通過把多個硬盤設備組合成一個容量更大、安全性好的磁盤陣列,并把數據切割成多個區段后分別存放在各個不同的物理硬盤設備上,然后利用分散讀寫技術來提升磁盤陣列整體的性能,同時把多個重要數據的副本同步到不同的物理硬盤設備上,從而起到了非常好的數據冗余備份效果。(對于運維同學需要學習)。 ##### LVM(邏輯卷管理器) 硬盤分好區或者部署為RAID磁盤陣列之后,再像改變磁盤分區就不大容易了,這時候就需要LVM允許用戶對磁盤資源進行動態調整。 ##### firewalld 防火墻 firewalld服務(Linux系統的動態防火墻管理器)是默認的防火墻配置管理工具,它擁有基于CLI(命令行界面)和GUI(圖形界面)的兩種管理方式。它可以事先配置好策略,根據不同的場景切換策略。 ##### SSHD 服務 SSH是一種能夠以安全方式提供遠程登錄的協議,也是目前遠程管理Linux的首選方式。以前用FTP或者Telnet進行遠程登錄,他們用明文的形式再網絡中傳輸賬號密碼和數據信息,因此很不安全。想要使用SSH協議遠程管理Linux系統就需要部署配置sshd服務程序。 ##### SELinux 安全子系統 是一個強制訪問控制的安全子系統。 ##### 虛擬主機 虛擬主機功能可以把一臺處于運行狀態的物理服務器分割成多個"虛擬的服務器"。 ##### vsftpd 服務 vsftpd 服務基于`文件傳輸協議FTP`。FTP是一種再互聯網中進行文件傳輸的協議,基于C/S模式。 ##### 使用Samba 或 NFS 實現文件共享 Samba主要實現windows與Linux之間的文件共享服務。 NFS主要用于Linux之間的文件共享服務。NFS可以將遠程Linux系統上的文件共享資源掛載到本地主機的目錄上,從而使得本地主機基于TCP/IP協議,像使用本地主機上的資源那樣讀寫遠程Linux系統上的共享文件。 #### DNS 域名解析服務 bind服務程序是全球范圍內使用最廣泛、最安全可靠且高效的域名解析服務程序。 #### 動態主機配置協議 DHCP動態主機配置協議是一種基于UDP協議且僅限于在局域網內部使用的網絡協議,主要用于大型的局域網環境或者存在較多辦公設備的局域網環境中,其主要用途是為局域網內部的設備或網絡供應商自動分配IP地址等參數。 #### 郵件系統 使用Postfix 與Dovecot部署郵件系統。 ##### 代理緩存服務 使用Squid代理服務程序作Web網站的前置緩存服務。Squid服務程序會按照收到的用戶請求向網站源服務器請求頁面、圖片等所需數據,并將服務器返回的數據存儲在運行的Squid服務程序的服務器上。當再有用戶再請求相同的數據時,則可以直接將存儲服務器本地的數據交付給用戶,這樣不僅減少了用戶的等待時間,還緩解了網站服務器的負載壓力。 ACL訪問控制 Squid服務程序的訪問控制列表功能可以根據策略條件來緩存數據或限制用戶的訪問。 比如分時段禁止員工逛淘寶、打開網頁游戲。 ······
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看