第二十六天 iptables 初识

  Iptables是位于用户空间,是linux系统上的防火墙管理配置规则的工具,主要用于添加、删除、管理netfilter的规则,

  Netfilter是位于内核中真正的防火墙,由5个钩子组成,也叫五个规则链。 Netfilter的作用:起到过滤封包,转换与映射IP地址和端口,拆分和修改封包内容,追踪封包等功能


Iptables的四表五链

功能:(四表)
filter: 过滤,防火墙;
nat: network address translation, 网络地址转换;
mangle:拆解报文,做出修改,封装报文;
raw:关闭nat表上启用的连接追踪机制;
 
功能的优先级次序:raw<---mangle<---nat<----filter
链(内置)(五链):
PREROUTING:在路由之前
INPUT:到本机
FORWARD:由本机转发
OUTPUT:由本机发出
POSTROUTING:路由之后
 
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

各功能(四表)的实现:

filter:在INPUT,FORWAD,OUTPUT
nat:PREROUTING(DNAT),OUTPUT,POSROUTING
mangle:PERROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT

iptables四表五链添加规则的注意项

添加规则时的考量点:
要实现哪种功能,判断添加在哪张表上
报文流经的路径,判断添加在哪个链上
  
链:链上规则次序,即为检查的次序,因此隐含一定的法则:
同类规则,匹配范围小的放上面;
不同类规则,匹配需求频率大的放在上面,匹配需求小的放下面
将那些可由一条规则描述的多个规则合并为一个;
默认规则(策略):

规则的组成部分:

组成部分:报文的匹配条件,匹配到之后处理动作
    匹配条件:根据协议报文特征指定:基本匹配条件、扩展匹配条件
    处理动作:内建处理机制、自定义处理机制
 
注意:报文不会经过自定义链,只能在内置链上通过规则进行引用后生效;

iptables命令:

格式:
iptables [-t table] {-A|-D} chain_name rule-specification 添加或删除指定链上的规则,添加时默认为添加到链尾
iptables [-t table] -I chain_name [rulenum] rule-specification 插入规则到指定链上,默认插入到链首
iptables [-t table] -R chain_name rulenum rule-specification 修改指定链上的规则
iptables [-t table] -D chain_name rulenum 删除指定链上的规则
iptables [-t table] -S [chain_name [rulenum]] 
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] -L显示规则、-Z清零规则上的统计数、-F清空指定表的规则
iptables [-t table] -N chain_name 添加指定表上的自定义链
iptables [-t table] -X [chain_name] 删除自定义链
iptables [-t table] -P chain_name target 指定链的默认规则
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

匹配条件:

基本匹配:
-s\--src\--source IP|Netaddr :匹配源地址
!-s\--src\--source IP|Netaddr :匹配此源地址之外的其他源地址
-d\--dst\--destionation IP|Netaddr:匹配目标地址
!-d\--dst\--destionation IP|Netaddr:匹配此目标地址之外的其他目标地址
-p\--protocol {tcp|udp|icmp}:检查报文中的协议,即IP首部中的protocol所标识的协议
-i\--in-interface interface_name :数据报文的流入接口,仅能用于PREROUTING\INPUT\FORWARD链上
-o\--out-interface interface_name:数据报文的流出接口,仅能用于FORWARD\OUTPUT\POSTROUTING链上

扩展匹配

隐形扩展匹配:使用-p 指定的协议进行扩展,可省略-m选项

-p tcp|udp
注意:UDP只有--dport与--sport
--dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口
--sport PORT[-PORT]:源端口,可以是单个或连续多个端口
tcp-flags(TCP的标识位)LIST1 LIST2 检查LIST1所指明的所有标记位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有在LIST1中指明的,不作检查{SYN,ACK,FIN,RST,PSH,URG共6种标记位}
--tcp-flag SYN,ACK,FIN,RST SYN 匹配TCP三次握手中的SYN,ACK,FIN,RST标记位,其中SYN必须为1,其他为0.即匹配三次握手的第一次握手
--syn:检查是否为新建TCP连接的第一次请求
-p igmp
--igmp-type:(可用数字代表其类型)常见的0和8
0:echo-reply回送应答
8:echo-request请求答应


匹配条件的显示扩展

  显式扩展 :必须使用-m选项指定使用扩展,可扩展模块可通过rpm ql iptables | grep "\.so$" 查看

-m的选项(常见)
multiport扩展(多端口匹配)
以离散方式定义多端口,最多可定义15个端口 
[!] --source-ports,--sports port[,port|,port:port]...  若加[!],则是非的意思  源端口
[!] --destination-ports,--dports port[,port|,port:port]... 目标端口
[!] --destination-ports,--dports port[,port|,port:port]...
放开22、80、8080端口
iptables -I INPUT -s 192.168.0.0/24 -d 192.168.1.11 -p tcp -m multiport --dports 22,80,8080 -j ACCEPT
iptables -I OUTPUT -s 192.168.1.11 -d 192.168.0.0/24 -p tcp -m multiport --sports 22,80,8080 -j ACCEPT
 
 iprange扩展(IP范围)
指明连续的IP范围时使用(但一般是不能扩展为整个网络)
[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围
放开192.168.1.1-200访问22,80,8080端口
iptables -I INPUT -d 192.168.1.11 -p tcp -m multiport --dport 80,22,8080 -m iprange --src 192.168.1.1-192.168.1.200 -j ACCEPT
iptables -I OUPUT -s 192.168.1.11 -p tcp -m multiport --sport 80,22,8080 -m iprange --dst 192.168.1.1-192.168.1.200 -j ACCEPT 
 
 string扩展(字符串扩展)
检查报文中出现的字符串
 --algo {bm|kmp} 指定匹配字符串的算法 
[!] --string pattern 基于匹配模式进行检查
[!] --hex-string pattern 基于十六进制检查
iptables -I OUTPUT -m string -algo bm --string 'mover' -j REJECT \\拒绝访问‘mover’字符串的内容 
 
time扩展(基于时间做检查)
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 起始日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 结束日期
--timestart hh:mm[:ss] 起始时间,以每天为计
--timestop hh:mm[:ss]  结束时间,以每天为计
[!] --monthdays day[,day...] 每月的周期,
[!] --weekdays day[,day...] 每周的周期
iptables -I INPUT -d 192.168.1.11 -p tcp --dport 80 -m time --timestart 8:00 --timstop 17:00 -j REJECT \\拒绝8点到17点之间访问80端口
connlimit扩展(连接限制)
根据每个客户IP做并发连接数匹配
--connlimit-above n:连接的数量大于n 
--connlimit-upto n:连接的数量小于等于n
 iptables -I INPUT -D TCP --dport 22 -m connlimit --connlimit-above 3 -j REJECT;\\设置22端口的并发连接数量不能大于3个,大于的拒绝
 
limit扩展
基于收发报文包的速率做检查
令牌桶过滤器
--limit-burst number 一开始只是最多允许的报文数量
--limit rate[/second|/minute|/hour|/day] 当达到--limit-bust 指定的数量后,设置的速率,有秒、分钟、小时、天
iptables -A INPUT -d 192.168.1.11 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT \\设置开始时最多5个ping,然后每分钟30个
iptables -A INPUT -s 192.168.1.11 -p icmp --icmp-type 0 -j ACCEPT 
 
  
state扩展(状态扩展)
根据连接追踪机制,检查连接间的关系,记录的时长为半小时
调整连接追踪功能所能够容纳的最大连接数量:
    /proc/sys/net/nf_conntrack_max
已经追踪到并记录下的连接:
    /proc/net/nf_conntrack
不同协议或连接类型追的时长:
    /proc/sys/net/netfilter/
可追踪的连接状态:
NEW:新发出的请求;连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
INVALIED:无法识别的连接;
 
--state STATE1,STATE2,...
对22、80端口进行连接追踪
iptables -I INPUT -d 192.168.1.11 -p tcp -m multiport --dport 22,80 state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 192.168.1.11 -p tcp -m multiport --sport 22,80 state --state ESTABLEISHED -j ACCEPT
 
iptables -I OUTPUT -m state --state ESTABLEISHED -j ACCEPT \\对IN方向允许进来的所有连接追踪,都在out方向放开

处理动作:

-j TARGET:jump,跳转到指定的TARGET,TARGET如下:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装

练习依照以下图片

blob.png

说明:
SER1配置默认路由指向192.168.90.128
练习内容:
1、通过iptables拒绝SER1访问SER2的ssh\web,
2、SER3配置192.168.90.0路,让SER1连通SER3
3、在SER2上启用NAT,SER3不配置192.168.90.0路由,让SER1连通SER3
4、把SER2的192.168.10.128的22端口映射给SER1 192.168.90.129的22端口

SER1的配置

[root@SER1 ~]# ifconfig
eth2      Link encap:Ethernet  HWaddr 00:0C:29:1D:8D:A8  
          inet addr:192.168.90.129  Bcast:192.168.90.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe1d:8da8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:86 errors:0 dropped:0 overruns:0 frame:0
          TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:9529 (9.3 KiB)  TX bytes:10126 (9.8 KiB)
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:108 errors:0 dropped:0 overruns:0 frame:0
          TX packets:108 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7256 (7.0 KiB)  TX bytes:7256 (7.0 KiB)
 
[root@SER1 ~]# route add default gw 192.168.90.128
[root@SER1 ~]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.90.0    *               255.255.255.0   U     1      0        0 eth2
 
default         192.168.90.128  0.0.0.0         UG    0      0        0 eth2

SER2的配置

[root@SER2 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:76:31:7B  
          inet addr:192.168.10.128  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe76:317b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:613 errors:0 dropped:0 overruns:0 frame:0
          TX packets:157 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:57414 (56.0 KiB)  TX bytes:13174 (12.8 KiB)
 
eth1      Link encap:Ethernet  HWaddr 00:0C:29:76:31:85  
          inet addr:192.168.90.128  Bcast:192.168.90.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe76:3185/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:672 errors:0 dropped:0 overruns:0 frame:0
          TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:62895 (61.4 KiB)  TX bytes:15431 (15.0 KiB)

测试SER1与SER2的连通性,以下测试的结果说明SER1与SER2的连通性没有问题

[root@SER1 ~]# ping 192.168.90.128
PING 192.168.90.128 (192.168.90.128) 56(84) bytes of data.
64 bytes from 192.168.90.128: icmp_seq=1 ttl=64 time=0.691 ms
64 bytes from 192.168.90.128: icmp_seq=2 ttl=64 time=1.15 ms
^C
--- 192.168.90.128 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1262ms
rtt min/avg/max/mdev = 0.691/0.924/1.158/0.235 ms
[root@SER1 ~]# curl 192.168.90.128
test
[root@SER1 ~]# 
[root@SER1 ~]# ssh 192.168.90.128
root@192.168.90.128's password: 
Last login: Sat Jul  2 02:24:28 2016 from 192.168.90.129
[root@SER2 ~]# 
[root@SER2 html]# iptables -L   \\SER2的iptables表
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 html]#


一、通过iptables拒绝SER1访问SER2ssh\web

1、把SER2的filter表的规则清空

[root@SER2 ~]# iptables -F
[root@SER2 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 ~]#

2、拒绝SER1 ping SER2 和SER1 访问SER2 的SSH

[root@SER2 ~]# iptables -A INPUT -s 192.168.90.129 -p tcp --dport 80 -j DROP
[root@SER2 ~]# iptables -A INPUT -s 192.168.90.129 -p tcp --dport 22 -j DROP
[root@SER2 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.90.129       anywhere            tcp dpt:http 
DROP       tcp  --  192.168.90.129       anywhere            tcp dpt:ssh 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 ~]# 
[root@SER1 ~]# curl 192.168.90.128
curl: (7) couldn't connect to host
[root@SER1 ~]# ssh 192.168.90.128
ssh: connect to host 192.168.90.128 port 22: Connection timed out
[root@SER1 ~]#

3、拒绝SER1访问SER2的192.168.90.128的80端口及ping,但可以访问SER2的192.168.10.128的80端口与ping 

先清空SER2的现在的filter的规则表
[root@SER2 ~]# iptables -F
[root@SER2 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 ~]#

把 filter表的INPUT和OUTPUT默认策略修改为DROP

blob.png

修改INPUT及OUPUT的规则

blob.png

[root@SER1 ~]# curl 192.168.90.128
curl: (7) couldn't connect to host
[root@SER1 ~]# curl 192.168.10.128
test
[root@SER1 ~]# ping 192.168.90.128
PING 192.168.90.128 (192.168.90.128) 56(84) bytes of data.
^C
--- 192.168.90.128 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6907ms
 
[root@SER1 ~]# ping 192.168.10.128
PING 192.168.10.128 (192.168.10.128) 56(84) bytes of data.
64 bytes from 192.168.10.128: icmp_seq=1 ttl=64 time=1.48 ms
64 bytes from 192.168.10.128: icmp_seq=2 ttl=64 time=0.438 ms
^C
--- 192.168.10.128 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1495ms
rtt min/avg/max/mdev = 0.438/0.961/1.485/0.524 ms
[root@SER1 ~]#

二、SER3配置192.168.90.0路,让SER1连通SER3

1、打开SER2的核心转发功能

临时开启:把 /proc/sys/net/ipv4/ip_forward 修改为 1
永久开启,需要修改:/etc/sysct.conf ---> net.ipv4.ip_forward = 1
[root@SER2 ~]# cat /proc/sys/net/ipv4/ip_forward 
0
[root@SER2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 
[root@SER2 ~]# cat /proc/sys/net/ipv4/ip_forward 
1
[root@SER2 ~]#

2、在SER3上添加192.168.90.0的路由,指向192.168.10.128

[root@SER3 ~]# route add -net 192.168.90.0/24 gw 192.168.10.128
[root@SER3 ~]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    *               255.255.255.0   U     1      0        0 eth2
192.168.90.0    192.168.10.128  255.255.255.0   UG    0      0        0 eth2
default         192.168.10.2    0.0.0.0         UG    0      0        0 eth2
[root@SER3 ~]#

3、在SER1上测试与SER3的连通性

[root@SER1 ~]# ping 192.168.10.130
PING 192.168.10.130 (192.168.10.130) 56(84) bytes of data.
64 bytes from 192.168.10.130: icmp_seq=1 ttl=63 time=3.59 ms
64 bytes from 192.168.10.130: icmp_seq=2 ttl=63 time=0.877 ms
^C
--- 192.168.10.130 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5467ms
rtt min/avg/max/mdev = 0.685/1.675/3.592/1.034 ms
[root@SER1 ~]#

三、在SER2上启用NAT,SER3不配置192.168.90.0路由,让SER1连通SER3

1、SER3删除192.168.90.0的路由

[root@SER3 ~]# route del -net 192.168.90.0/24
[root@SER3 ~]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    *               255.255.255.0   U     1      0        0 eth2
default         192.168.10.2    0.0.0.0         UG    0      0        0 eth2
[root@SER3 ~]#

修改SER2之前SER1的连通性是不通的

[root@SER1 ~]# ping 192.168.10.130
PING 192.168.10.130 (192.168.10.130) 56(84) bytes of data.
^C
--- 192.168.10.130 ping statistics ---
25 packets transmitted, 0 received, 100% packet loss, time 24014ms

修改SER2的NAT

[root@SER2 ~]# iptables -t nat -A POSTROUTING -s 192.168.90.0/24 -d 192.168.10.0/24 -j SNAT --to-source 192.168.10.128
[root@SER2 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
 
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.90.0/24      192.168.10.0/24     to:192.168.10.128 
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 ~]#

再测试SER1与SER3的连通性

[root@SER1 ~]# ping 192.168.10.130
PING 192.168.10.130 (192.168.10.130) 56(84) bytes of data.
64 bytes from 192.168.10.130: icmp_seq=1 ttl=63 time=2.25 ms
64 bytes from 192.168.10.130: icmp_seq=2 ttl=63 time=0.947 ms
^C
--- 192.168.10.130 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1479ms
rtt min/avg/max/mdev = 0.947/1.600/2.254/0.654 ms
[root@SER1 ~]# curl 192.168.10.130
1234567890
[root@SER1 ~]#

三、把SER2的192.168.10.128的22端口映射给SER1 192.168.90.129的22端口

1、修改SER2的22端口映射到192.168.90.129

[root@SER2 ~]# iptables -t nat -A PREROUTING -d 192.168.10.128 -p tcp --dport 22 -j DNAT --to-destination 192.168.90.12
9[root@SER2 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             192.168.10.128      tcp dpt:ssh to:192.168.90.129 
 
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@SER2 ~]#

2、在SER3上使用SSH登陆到SER1

[root@SER3 html]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    *               255.255.255.0   U     1      0        0 eth2
default         192.168.10.2    0.0.0.0         UG    0      0        0 eth2
[root@SER3 html]# ssh 192.168.10.128
The authenticity of host '192.168.10.128 (192.168.10.128)' can't be established.
RSA key fingerprint is cc:d2:aa:95:51:57:67:df:df:0a:3c:02:bb:0b:a2:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.128' (RSA) to the list of known hosts.
root@192.168.10.128's password: 
Last login: Sat Jul  2 02:20:32 2016 from 192.168.90.1

3、在SER1上查看SER3登陆的情况

[root@SER1 ~]# who
root     tty1         2016-07-02 02:20
root     pts/0        2016-07-02 02:20 (192.168.90.1)
root     pts/1        2016-07-02 04:07 (192.168.10.130)  \\SER3已成功登陆
[root@SER1 ~]#

原创文章,作者:Net20-deamon,如若转载,请注明出处:http://www.178linux.com/21420

(0)
Net20-deamonNet20-deamon
上一篇 2016-07-02
下一篇 2016-07-02

相关推荐

  • Linux常用文件管理命令

    常用文件管理命令 cat cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容 语法 cat(选项)(参数) 选项 -n或-number:有1开始对所有输出的行数编号; -b或–number-nonblank:和-n相似,只不过对于空白行不编号; -s或–squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; …

    2018-03-11
  • http状态码大全

    状态值:100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 状态值:101 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个…

    Linux干货 2016-11-01
  • 马哥教育网络班22期第2周课程作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。     1、cp 文件复制 [选项]源文件 目标文件         -r 递归复制    …

    Linux干货 2016-08-31
  • CentOS进程管理

    CentOS进程管理 笔记 Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。 CentOS进程管理 一、进程概述 二、查看进程 1、使用ps命令 2、top命令 一、进程概述 程序是保存在存储介质中的可…

    Linux干货 2017-05-15
  • N25-第二周博客作业

    1.linux上的文件管理命令:   cp命令:copy                 源文件;目标文件;  单源复制:cp [option]… [-T]  SOURCE DEST       &…

    Linux干货 2016-12-12