DNS and BIND 配置指南

前言

    說來接觸Linux也有一年了,BIND是我曾經學習RH系Linux接觸的第一個服務,對我有著莫大的意義,當初差點因為這個服務難以配置而放棄Linux,今天學完馬哥的bind相關系列視頻之后,寫一篇DNS and BIND的基礎到進階。

一、DNS的基礎知識

  1. DNS是什么?

    DNS(Domain Name System)是Internet發展多年以來最重要的服務之一,它作為將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便地訪問互聯網。DNS使用TCP和UDP端口53

  2. 域名解析

    簡單來說,DNS就像是一個通訊錄,AnyISalIn的電話是1829888****,有了通訊錄,我們只需通過輸入AnyISalIn這個名字就能夠自動撥打其電話。DNS主要是用來定義IP地址和域名的關系。

  3. DNS資源記錄類型

    SOA:起始授權記錄,一個區域的解析庫中有且只能有一條SOA記錄,必須為解析庫中的第一條記錄,定義主DNS服務器地址和相關事件時間定義。

    A:實現FQDN ==> IP 

    MX:標明提供郵件服務的主機

    NS:標明當前域內的DNS服務器

    AAAA:FQDN ==> IPv6

    CNAME:Canonical Name,別名記錄

    PTR:IP ==> FQDN

  4. DNS解析答案類型

    肯定答案:正確解析了請求的內容

    否定答案:請求的條目不存在等原因無法返回結果

    權威答案:通過迭代的方式從所查詢域名的所在域的DNS服務器返回的結果

    非權威答案:請求的DNS服務器緩存的結果

  5. DNS資源記錄定義方法

    A記錄:IP IN  A Value ; 示例:192.168.1.1 IN A www.anyisalin.com.

    NS記錄:domain IN NS Value; 示例:anyisalin.com. IN  NS ns1.anyisalin.com. #一條NS記錄必須要有一條與之對應的A記錄

    MX記錄:domain IN NS priority Value; 示例:anyisalin.com. IN  MX 10 mail1.anyisalin.com. #一條MX記錄必須要有與之對應的A記錄, 優先級0-99,越低優先級越高

    PTR記錄:IP.in-addr.arpa. IN PTR Value; 示例:1.1.168.192.in-addr.arpa. IN PTR www.anyisalin.com. #PTR記錄的寫法比較詭異,我們在后面進行敘述

    AAAA記錄:和A記錄相似,只是將IPv4地址換為IPv6

二、DNS的結構

blob.png

    上圖為當今Internet中的DNS的結構,最多可分達127層,朋友們別看上圖中的www.anyisalin.com.和ns.anyisalin.com.相距很近,其實他們可能各自在天南地北。DNS的各層只是邏輯上的關系,不存在物理上的界定 。

    在DNS各域中只包含其子域的信息,例如 "."域中的解析庫只包含全球所有頂級域對對應的NS服務器的信息、 并且不知道父域的位置,例如:www.anyisalin.com. 不知道anyisalin.com.的具體位置(NS服務器的IP)

    

主從DNS:

    一個域的DNS一般情況下都有兩個,主DNS提供解析庫中信息,從DNS進行"區域傳送"來同步其解析庫,來達到負載均衡和高可用的效果。區域傳送分為全量傳送和增量傳送,相信大家應該能夠見名思意,這里不做過多敘述。

    

DNS解析過程:

    DNS查詢分別有兩種方式,"迭代"和"遞歸"。

        遞歸:DNS客戶端使用的DNS服務器一般都是遞歸服務器,負責全權處理客戶端的查詢請求直至返回結果

        迭代:DNS服務器之間的查詢方式,從根服務器開始向下級查詢

        blob.png

三、BIND安裝和基礎配置

    前面我們介紹了DNS的一些基礎知識,但是DNS是一種模型,需要使用軟件去實現。BIND(Berkeley Internet Name Domain)就是一伴隨著DNS出生到現在的軟件,本文使用bind9.8。

  1. 安裝bind

[root@localhost ~]# yum install -y bind bind-utils     
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: mirrors.opencas.cn
 * extras: mirrors.pubyun.com
 * updates: mirrors.163.com
updates                                                                                                                                                               | 3.4 kB     00:00     
Package 32:bind-utils-9.8.2-0.37.rc1.el6_7.7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.8.2-0.37.rc1.el6_7.7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================
 Package                                Arch                                     Version                                                     Repository                                 Size
=============================================================================================================================================================================================
Installing:
 bind                                   x86_64                                   32:9.8.2-0.37.rc1.el6_7.7                                   updates                                   4.0 M
Transaction Summary
=============================================================================================================================================================================================
Install       1 Package(s)
Total download size: 4.0 M
Installed size: 7.3 M
Downloading Packages:
bind-9.8.2-0.37.rc1.el6_7.7.x86_64.rpm                                                                                                                                | 4.0 MB     00:03     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 32:bind-9.8.2-0.37.rc1.el6_7.7.x86_64                                                                                                                                     1/1 
  Verifying  : 32:bind-9.8.2-0.37.rc1.el6_7.7.x86_64                                                                                                                                     1/1 
Installed:
  bind.x86_64 32:9.8.2-0.37.rc1.el6_7.7                                                                                                                                                      
Complete!

查看生成的關鍵文件

[root@localhost ~]# rpm -ql bind
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named    
/etc/named.conf    #bind主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones    #定義zone的文件
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named    #bind腳本文件
/etc/rndc.conf    #rndc配置文件
/etc/rndc.key
/etc/sysconfig/named
/usr/lib64/bind
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf    #檢測/etc/named.conf文件語法
/usr/sbin/named-checkzone    #檢測zone和對應zone文件的語法
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc    #遠程dns管理工具
/usr/sbin/rndc-confgen    #生成rndc密鑰

#過長省略

/var/log/named.log
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca    #根解析庫
/var/named/named.empty
/var/named/named.localhost    #本地主機解析庫
/var/named/named.loopback    
/var/named/slaves    #從文件夾
/var/run/named
[root@localhost ~]# rpm -ql bind-utils    #bind-utils包主要提供了一些檢測工具
/usr/bin/dig    
/usr/bin/host    
/usr/bin/nslookup   
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz

手動創建bind主配置文件

[root@localhost etc]# vim named.conf    #不熟悉的可以直接通過修改原始的配置文件
options {
  directory "/var/named";
 
  };    
zone "." IN {
  type hint;
  file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

定義一個zone

[root@localhost etc]# cat >> /etc/named.rfc1912.zones << EOF    #這里使用Here Document,不懂得可以搜素
> zone "anyisalin.com" IN {            #定義區域為anyisalin.com
>    type master;                    #設置類型為master
>    file "anyisalin.com.zone";        #解析庫文件名稱為anyisalin.com.zone
> };
> EOF

創建區域解析庫文件

[root@localhost etc]# vim /var/named/anyisalin.com.zone 
$TTL 600    #定義全局默認超時時間
$ORIGIN anyisalin.com.    #定義后綴
@   IN  SOA    ns1.anyisalin.com.  admin.anyisalin.com. (
                20160321    #序列號
                1H    #刷新時間
                5M    #重試時間
                1W    #超時時間
                10M )    #否定答案緩存TTL值
        IN      NS      ns1
ns1     IN      A       192.168.192.150
        IN      MX 10   mail1
mail1   IN      A       192.168.192.1
www     IN      A       192.168.192.2
cname   IN      CNAME   www                #別名, 將cname.anyisalin.com. 解析到 www.anyisalin.com.的地址
*       IN      A       192.168.2.1    #泛域名解析,以上都不是的解析到192.168.2.1

檢查、啟動并測試

[root@localhost etc]# named-checkconf     #檢查主配置文件語法
[root@localhost etc]# named-checkzone "anyisalin.com" /var/named/anyisalin.com.zone     #檢查anyisalin.com zone所對應的解析庫文件
zone anyisalin.com/IN: loaded serial 20160321
OK
[root@localhost etc]# service named start
Starting named:                                            [  OK  ]

解析域名

[root@localhost etc]# host -t A www.anyisalin.com 192.168.192.150    #解析www.anyisalin.com 對應的主機IP
Using domain server:
Name: 192.168.192.150
Address: 192.168.192.150#53
Aliases: 
www.anyisalin.com has address 192.168.192.2        #得出ip為192.168.192.2
[root@localhost etc]# host -t NS anyisalin.com 192.168.192.150    #查詢anyisalin.com域內的NS記錄
Using domain server:
Name: 192.168.192.150
Address: 192.168.192.150#53
Aliases: 
anyisalin.com name server ns1.anyisalin.com.    #ns1.anyisalin.com. 為其dns服務器

四、區域傳送和子域授權

    上面我們已經講過,一個域內的DNS服務器一般都需要兩個,我們這里就進行主從配置和區域傳送

在從服務器安裝bind并創建bind主配置文件

[root@localhost etc]# vim named.conf    #不熟悉的可以直接通過修改原始的配置文件
options {
  directory "/var/named";
 
  };    
zone "." IN {
  type hint;
  file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

定義zone

[root@localhost named]# cat >> /etc/named.rfc1912.zones <<EOF        #這里定義方式和主服務器的配置略有不同
> zone "anyisalin.com" IN {
>   type slave;
>   masters { 192.168.192.150; };    #定義主服務器的IP地址
>   file "slaves/anyisalin.com.zone";    #定義傳送文件的存放位置,必須要和源文件相同
>  };
> EOF

在主服務器的解析庫中添加一條NS記錄指向從服務器的地址

[root@localhost etc]# vim /var/named/anyisalin.com.zone     #在主服務上執行!?。?
$TTL 600
$ORIGIN anyisalin.com.
@   IN	SOA    ns1.anyisalin.com.  admin.anyisalin.com. (
		20160321
		1H
		5M
		1W
		10M )

	IN	NS	ns1
        IN      NS  ns2                #添加ns2記錄
ns1	IN	A	192.168.192.150
ns2     IN     A   192.168.192.147        #添加ns2對應的A記錄
	IN	MX 10 	mail1
mail1	IN	A	192.168.192.1
www	IN	A	192.168.192.2
cname	IN	CNAME	www
*	IN	A	192.168.2.1


[root@localhost etc]# rndc reload    #重載配置文件
server reload successful

啟動bind服務

從下面的動態圖可以看傳送過程

若水GIF截圖_2016年3月21日18點18分46秒.gif

增量傳送, #增量傳送需要修改序列號!

若水GIF截圖_2016年3月21日18點26分49秒.gif

子域授權

在主dns服務器添加兩條記錄

vim /var/named/anyisalin.com.zone
$TTL 600
$ORIGIN anyisalin.com.
@   IN  SOA    ns1.anyisalin.com.  admin.anyisalin.com. (
                20160324
                1H
                5M
                1W
                10M )
        IN      NS      ns1
        IN      NS      ns2
ns1     IN      A       192.168.192.150
ns2     IN     A   192.168.192.147
        IN      MX 10   mail1
mail1   IN      A       192.168.192.1
www     IN      A       192.168.192.2
cname   IN      CNAME   www
*       IN      A       192.168.2.1
new     IN      A       192.168.1.1
ops     IN      NS      ns1.ops        #添加一條NS記錄將ops.anyisalin.com. 域授權給ns1.ops.anyisalin.com.進行管理
ns1.ops IN      NS      192.168.192.151    #對應上條的NS記錄的A記錄

在ns1.ops.anyisalin.com.主機上進行配置

vim /etc/named.conf        #配置bind主配置文件
options {
  directory "/var/named";
  };    
zone "." IN {
  type hint;
  file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

[root@localhost ~]# cat >> /etc/named.rfc1912.zones <<EOF    #定義zone
> zone "ops.anyisalin.com" IN {
>    type master;
>    file "ops.anyisalin.com.zone";
> };
> EOF
[root@localhost named]# cat ops.anyisalin.com.zone     #定義解析庫
$TTL 600
$ORIGIN ops.anyisalin.com.
@	IN	SOA	ns1.ops.anyisalin.com.	admin.ops.anyisalin.com. (
		20160321
		1H
		5M
		7D
		1H
)


	IN	NS	ns1
ns1	IN	A	192.168.192.151
www	IN	A	192.168.1.1

測試

[root@localhost named]# service named start
Starting named:                                            [  OK  ]

通過本機解析本域主機名
[root@localhost named]# host -t A www.ops.anyisalin.com 192.168.192.151
Using domain server:
Name: 192.168.192.151
Address: 192.168.192.151#53
Aliases: 
www.ops.anyisalin.com has address 192.168.1.1

通過父域DNS解析本域下的主機名

[root@localhost named]# host -t A www.ops.anyisalin.com 192.168.192.150
Using domain server:
Name: 192.168.192.150
Address: 192.168.192.150#53
Aliases: 

www.ops.anyisalin.com has address 192.168.2.1

通過本機DNS解析父域中的主機名
[root@localhost named]# host -t A www.anyisalin.com 192.168.192.151
;; connection timed out; trying next origin
Using domain server:
Name: 192.168.192.151
Address: 192.168.192.151#53
Aliases: 

Host www.anyisalin.com not found: 3(NXDOMAIN)

但是我們可能會發現一個問題,如果我需要解析父域中的主機名,只能通過遞歸到根域去解析,這是非常不便的,所以我們要設置轉發器。

[root@localhost named]# cat >> /etc/named.rfc1912.zones <<EOF    #定義轉發器
> zone "anyisalin.com" IN {
>     type forward;
>     forward  only ;
>     forwarders { 192.168.192.150; };
> };
> EOF

重載、測試

[root@localhost named]# rndc reload    #重載配置文件
server reload successful
[root@localhost named]# host -t A www.anyisalin.com 192.168.192.151    #使用本機進行解析
Using domain server:
Name: 192.168.192.151
Address: 192.168.192.151#53
Aliases: 
www.anyisalin.com has address 192.168.192.2    #現在能夠得出結果

五、BIND視圖實現智能DNS

    大家都知道,中國的運營商之間的帶寬是非常低,但是無論我們是哪個運營商的寬帶,訪問那些大型電商站點都是非常的快,那是因為在dns服務器中定義了來自哪些IP的請求解析成哪些地址,這就是視圖的功能。

    

配置視圖:

1、一旦啟動了view, 所有的zone都只能在view中定義
2、僅有必要在匹配到允許遞歸請求的客戶所在view定義根區域
3、客戶端請求到達, 是自上而下檢查每個view所服務器的客戶端列表

[root@localhost etc]# vim /etc/named.conf    #修改主配置文件
acl mynet {

        192.168.192.150;
        127.0.0.0/8;
};

acl other {
        192.168.192.1;
};




options {
  directory "/var/named";

   dnssec-enable no;
   dnssec-validation no;

  };   
view "." {
match-clients { mynet; };
zone "." IN {
  type hint;
  file "named.ca";
};
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

vim /etc/named.rfc.1912.zones    #配置主配置文件
view mynet {    
 match-clients { mynet; };

zone "localhost.localdomain" IN {
	type master;
	file "named.localhost";
	allow-update { none; };
};

zone "localhost" IN {
	type master;
	file "named.localhost";
	allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
	type master;
	file "named.loopback";
	allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
	type master;
	file "named.loopback";
	allow-update { none; };
};

zone "0.in-addr.arpa" IN {
	type master;
	file "named.empty";
	allow-update { none; };
};

zone "anyisalin.com" IN {
   type master;
   file "anyisalin.com.zone";
};
};

view other {
 match-clients { other; };
zone "anyisalin.com" IN {
  type master;
  file "anyisalin.com.other";
};
};

驗證

blob.png

blob.png

六、bind編譯安裝和安全配置

編譯安裝相關博客==> 教你使用rpm、yum、編譯等方式安裝軟件

我們通過isc.org下載bind9.9.5的安裝包

yum groupinstall "Development Tools" "Server Platform Development" --nogpgcheck    #安裝開發環境
tar xf bind-9.9.5.tar.gz #解壓源碼包

cd bind-9.9.5

./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads    #配置config文件

useradd -u 53 named -r ; groupadd -g 53 named -r     #創建named用戶和組

make && make install     #編譯和配置

export PATH=/usr/local/bin9/bin:/usr/local/bin9/sbin:$PATH    #將bind的執行路徑加入PATH中
source /etc/bashrc    #重讀bash配置文件

echo "/usr/local/bind9/lib" > /etc/ld.so.conf.d/bind.conf    #導入庫文件路徑

echo "MANPATH /usr/local/bind9/share/man" >> /etc/man.config    #導入manual文件路徑


新建主配置文件

vim /etc/named/named.conf
options {
  directory "/var/named";
  
  };    
zone "." IN {
  type hint;
  file "named.ca";
};

zone "localhost" IN {
    type master;
    file "localhost.zone";
    };

zone "0.0.127.in-addr.arpa {
    type master;
    file "name.local";
    };


[root@localhost bind9]# /usr/local/bind9/sbin/named-checkconf     #檢查配置文件,提示沒有文件夾
/etc/named/named.conf:2: change directory to '/var/named' failed: file not fou
nd
/etc/named/named.conf:2: parsing failed
[root@localhost bind9]# mkdir /var/named    #創建/var/named
[root@localhost bind9]# /usr/local/bind9/sbin/named-checkconf    #檢測通過


手動創建zone文件
[root@localhost bind9]# cd /var/named/

[root@localhost named]# dig -t NS . @192.168.1.1    #通過dig命令獲取根服務器地址

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t NS . @192.168.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43106
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.			12787	IN	NS	m.root-servers.net.
.			12787	IN	NS	d.root-servers.net.
.			12787	IN	NS	i.root-servers.net.
.			12787	IN	NS	k.root-servers.net.
.			12787	IN	NS	a.root-servers.net.
.			12787	IN	NS	e.root-servers.net.
.			12787	IN	NS	c.root-servers.net.
.			12787	IN	NS	b.root-servers.net.
.			12787	IN	NS	h.root-servers.net.
.			12787	IN	NS	g.root-servers.net.
.			12787	IN	NS	f.root-servers.net.
.			12787	IN	NS	l.root-servers.net.
.			12787	IN	NS	j.root-servers.net.

;; Query time: 78 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Mon Mar 21 19:29:53 2016
;; MSG SIZE  rcvd: 228

[root@localhost named]# dig -t NS . @192.168.1.1 > named.ca    #將根服務器解析庫重定向到named.ca文件中


創建localhost.zone文件

[root@localhost named]# vim localhost.zone
$TTL 600
@       IN      SOA     localhost. admin.localhost. (
        20160321
        1H
        5M
        7D
        1H
)

                IN      NS      localhost.
localhost.      IN      A       127.0.0.1

創建named.local文件
$TTL 600
@       IN      SOA     localhost. admin.localhost. (
        20160321
        1H
        5M
        7D
        1H
)

                IN      NS      localhost.
1               IN      PTR     localhost.


修改屬主和權限

[root@localhost named]# chown root:named /var/named/ -R 
[root@localhost named]# chmod 770 /var/named/ -R
[root@localhost named]# chown root:named /etc/named/ -R


運行bind程序
[root@localhost bind9]# /usr/local/bind9/sbin/named -u named

查看監聽端口
[root@localhost ~]# ss -unlp | grep 53
UNCONN     0      0           192.168.192.152:53                       *:*      users:(("named",
6949,513))UNCONN     0      0                 127.0.0.1:53                       *:*      users:(("named",
6949,512)

bind安全配置:

    

訪問控制命令:
allow-query {}; 允許查詢的主機, 白名單
allow-transfer {}; 允許區域傳送主機, 白名單
allow-recursion {}; 允許遞歸的主機
allow-update {}; 允許更新區域數據庫中的內容

allow-query 測試:

blob.png

blob.png

blob.png

allow-transfer測試:

blob.png

blob.png

blob.png

總結

    還有很多沒有寫,本文寫了大概5小時,前面還行,后面有些偷工減料,總的來說還行,理論的東西不多。

    參考資料:wiki百科,馬哥Linux 2016視頻,相關筆記,百度圖庫

    歡迎大家加我QQ交流:1449472454

原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/13071

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-20
下一篇 2016-03-22

相關推薦

  • 實戰:ansible自動化部署nginx+keepalived+mysql負載均衡集群

    一、目的 使用ansible自動化部署nginx+keepalived+mysql負載均衡集群。 二、拓撲規劃 三、詳細步驟 1、環境的搭建         (1)安裝ansible,同時配置私鑰免密碼進行通信 [root@localhost ~]# ssh-keygen &nb…

    Linux干貨 2016-11-11
  • linux基礎命令1

    內容包含:文件管理、重定向和管道、用戶組和權限管理、文本處理工具

    Linux干貨 2017-11-19
  • linux的發展與入門

    1,計算機的組成和功能如下: CPU:是由運算器(是用來對數據進行數據運算和邏輯運算), 控制器(是用來對總線的控制,內存尋址的控制,以及對讀,寫訪問的控制), 寄存器和緩存器(都是用來暫存數據的。) 存儲器:內存RAM(隨機接入存儲器)和硬盤:都是用來存儲數據的。 輸入設備:用來輸入需要處理的數據和指令。 輸出設備:是用來顯示加工過的數據。 2,LINUX…

    Linux干貨 2017-07-03
  • 用戶管理和組管理

         Linux是一個多用戶多任務的系統 ,因此學習用戶管理和組管理,對我們工作和學習有很大的幫助。用戶是你登錄這個操作系統的憑證,因此用戶的創建和修改,刪除是用戶管理的基本工作,所以你掌握這些,對你的工作有很好的幫助。 用戶賬號管理 /etc/passwd username:x: UId:gid:comment:…

    Linux干貨 2016-08-10
  • keepalived的初級使用

        1、雙主模型的ipvs高可用   一、雙主模型的ipvs高可用     1)網絡結構圖       2)、ipvs的類型是dr模型,調度算法是rr       RS1和RS2都是centos6.8 對RS1和RS2的配置:…

    Linux干貨 2017-05-15
  • 馬哥教育網絡班21期+第2周課程練習

    一、Linux文件管理類命令匯總 1、文件的復制命令:cp 復制命令:cp     cp [OPTION]… [-T] SOURCE DEST     cp [OPTION]… SOURCE… DI…

    Linux干貨 2016-07-29
欧美性久久久久