1. Linux网络基础
计算机网络就是通信线路和通信设备将分布在不同地点的具有独立功能的多个计算机系统互相连接起来,在
网络软件的支持下实现彼此之间的数据通信和资源共享的系统
计算机网络核心内容就是网络协议。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是
约定的集合
网络层次划分
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织
(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System
Interconnection/Reference Model)
OSI七层网络模型
TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开
TCP/IP协议
IP地址
网络地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络
广播地址
广播地址通常称为直接广播地址,是为了区分受限广播地址
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息
时,该网络内的所有主机都能收到该广播消息
组播地址
D类地址就是组播地址
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255
B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255
C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通
信)
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号
255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广
播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本
地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段
192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到
0.0.0.0
常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想
要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽
的范围内)的服务器发送IP请求分组
回坏地址
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1
A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
子网掩码及网络划分
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以
其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个
高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用
ARP/RARP协议
路由选择协议,RIP、OSPF协议等
TCP/IP协议
TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协
议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确
地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址
2. Linux网络属性配置及工具
网络接口
网络接口(interface)设备在操作系统中的表示方法,在Windows系统中通过图形化界面来配置,Linux系统
下一切皆为文件,如centos6及以下的命令方式都以ethX,如eth0 eth1等。centos7则提供了不同的命名规
则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比
eth0、wlan0更难读。如ens33
网络接口配置文件
more /etc/sysconfig/network-scripts/ifcfg-ens32 #centos7的地址
more /etc/sysconfig/network-scripts/ifcfg-eth1 #centos6的地址
#配置概要
TYPE="Ethernet" #网卡类型 以太网
PROXY_METHOD="none" #代理方式 关闭
BROWSER_ONLY="no"
BOOTPROTO="dhcp" #网卡引导协议:dhcp、static、none
DEFROUTE="yes" #默认路由
IPV4_FAILURE_FATAL="no" #ipv4致命检测
IPV6_INIT="yes" #ipv6初始化
IPV6_AUTOCONF="yes" #ipv6自动配置
IPV6_DEFROUTE="yes" #ipv6默认路由
IPV6_FAILURE_FATAL="no" #ipv6致命错误
IPV6_ADDR_GEN_MODE="stable-privacy" #ipv6生成模式
NAME="ens32" #网卡物理名
UUID="de98dfba-1046-4814-a105-48106e4e4515" #唯一识别码,每个网卡都不同
DEVICE="ens32" #网卡设备名称,必须和name一致
ONBOOT="yes" #开机启动
DNS=8.8.8.8 #DNS
DNS配置文件
要访问DNS服务器来进行查询,需要设置/etc/resolv.conf文件
通过该文件设置DNS服务器的IP地址及DNS域名,该文件是由域名解析使用的配置文件
/etc/hosts文件
包含(本地网络中)已知主机的一个列表
hosts文件是dns服务的前身,用于域名解析
/etc/services
Internet网络服务文件,将网络服务名转换为端口号/协议
文件中每一行对应一种服务,它由4个字段组成,中间用TAB或者空格分隔,分别表示 “服务名称”、“使用端
口”、“协议名称”以及“别名”
more /etc/services
主机名配置及文件/etc/hostname
hostname
hostnamectl #设置主机名
centos7以后将hostname的配置从/etc/sysconfig/network中改到了/etc/hostname中,所以
在/etc/sysconfig/network中配置hostname是不起作用
centos6 hostname /etc/sysconfig/network /etc/hostname两个地方都需要修改!
所有以上出现的知识点,也需在windows中熟练掌握!
网络相关命令
ping #网络的连通性以及网速,域名解析
ping -c4 www.qq.com #-c指定发送数据包的个数
ctrl + c #停止ping,注意windows和linux的不同
netstat #当前建立的网络连接;查看本地系统打开了哪些端口
netstat -ntpl
netstat -nr
DNS2=8.8.8.8
配置完成后重启网络服务!
more /etc/resolv.conf
# Generated by NetworkManager
search localdomain #表示提供了一个不包括完全域名的主机时,在主机后面添加后缀
nameserver 192.168.5.2 #设置首选DNS,解析域名时使用该地址指定的主机为域名服务器
nameserver 192.168.5.3 #设置备用DNS
more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ss #查看网络连接的工具
route #查看修改路由表
route -n
tcpdump #命令行抓包工具
telnet #telnet协议客户端,用可来探测端口
ifconfg #网卡配置工具
ifup eth0
ifdown ens33
ip #网卡配置工具
ip addr
ip link set ens32 up
ip link set ens32 down
ip -s link
ip route
nmcli #网卡配置工具
nmcli con show
nmcli con show -active
nmcli con show ens32
nmcli dev status
nmcli dev show
nmcli con up ens32
nmcli con down ens32
brctl #网桥管理工具
nslookup #域名解析
dig #域名解析
whois #查看域名所有者信息
traceroute #统计到目标主机的每一跳的网络状态
3. Linux进程管理及工具
执行中的程序可称作进程。当程序以可执行文件存放在存储中,并且运行的时候,每个进程会被动态得分配
系统资源、内存、安全属性和与之相关的状态。可以有多个进程关联到同一个程序,并同时执行不会互相干
扰。操作系统会有效地管理和追踪所有运行着的进程
为了管理这些进程,用户应该能够:
查看所有运行中的进程
查看进程消耗资源
定位个别进程并且对其执行指定操作
改变进程的优先级
杀死指定进程
限制进程可用的系统资源等
ps #查看进程工具
ps -a #列出运行中进程
ps -ef | grep xxx #列出需要的进程的信息
ps -aux xxx #显示进程详细信息,包含用户,内存,cpu,优先级等
pstree #每个进程是由你进程创建的,通过树状图来显示
top #显示系统动态进程使用的资源
nice #设置进程的优先级,默认以0级启动,优先级可通过top的NI来查看,进程优先级范围从-20到19,值
越低,优先级越高
nice -3 top
renice #改变正在运行的进程优先值,用户只能改变属于他们自己的进程的优先值
renice -n -p xxx #改变指定进程的优先值
kill #用来发送信号来结束进程
kill <pid>
kill -9 <pid>
killall -9 <pid>
ulimit #用于控制系统资源在shell和进程上的分配量
jobs
fg
bg
4. Bash for、until、while循环
for
#for 遍历循环
for var in list
do
commands
done
more s1.sh
#!/bin/bash
# basic for command
#
for test in 1 2 3 4 5 6 7 8 9 10
do
echo The next number is $test
done
#每次for命令遍历值列表,它都会将列表中的下个值赋给$test变量。$test变量可以像for命令语句中的其他脚本
变量一样使用。在最后一次迭代后,$test变量的值会在shell脚本的剩余部分一直保持有效。它会一直保持最后
一次迭代的值(除非你修改了它)
more s11.sh
#!/bin/bash
# basic for command
#
for test in 1 2 3 4 5 6 7 8 9 10 #for循环假定每个值都是用空格分割的。如果有包含空格的数据值
do
echo The next number is $test
done
#
echo "The last number we visited was $test"
test=11 #test变量保持了其值,也允许我们修改它的值
echo "Wait, now we're visiting $test"
more s111.sh
#!/bin/bash
# basic for command part2
#
for test in i don't know how to use the for command
do
echo "word:$test"
done
#使用转义或者双引号来处理
#从变量读取列表
more s12.sh
#!/bin/bash
#
list="xian beijing shanghai hangzhou"
list=$list" wuhan"
for city in $list #$list变量包含了用于迭代的标准文本值列表
do
echo "Have you ever visited $city?"
done
#赋值语句向$list变量包含的已有列表中添加(或者说拼接)了一个值
#从命令读取值
more s13.sh
#!/bin/bash
# reading values from a file
#
file="city"
for city in $(cat $file)
do
echo "Visit $city"
done
#从通配置符读取目录
more s14.sh
#!/bin/bash
#
while
until
for file in /root/* #也可添加多个目录,空格 接下一个目录
do
if [ -d "$file" ] #-d:dir
then
echo "$file is a directory"
elif [ -f "$file" ] #-f:file
then
echo "$file is a file"
fi
done
#for (( variable assignment ; condition ; iteration process ))
#C语言风格的for
more s15.sh
#!/bin/bash
# testing for loop
for (( i=1; i <= 10; i++ ))
do
echo "The next number is $i"
done
while test command
do
other commands
done
more s15.sh
#!/bin/bash
# while command test
var=10
while [ $var -gt 0 ]
do
echo $var
var=$[ $var - 1 ]
done
#只要测试条件成立,while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修
改,否则就会陷入无限循环
#避免死循环!
#until命令和while命令工作的方式完全相反
until test commands
do
other commands
done
more s16.sh
#!/bin/bash
5. Sed 文本处理工具原理及使用
Sed是一种非交互式的流编辑器,可动态编辑文件;流编辑器则会在编辑器处理数据之前基于预先提供的一组
规则来编辑数据流
Sed本身是一个管道命令,可以分析 standard input 的,主要是用来分析关键字的使用、统计等,此外还可
以将数据进行替换、删除、选中、选取特定行等功能
# using the until command
var=100
until [ $var -eq 0 ]
do
echo $var
var=$[ $var - 25 ]
done
#打印行
cat -n /etc/passwd | sed -n '2p' #-n安静模式,STDIN的数据会被列出到屏幕上
cat -n /etc/passwd | sed -n '2,5p' #2-5行
#删除行
cat -n /etc/passwd | sed '2d' #d删除,删除第2行
cat -n /etc/passwd | sed '2,5d' #2-5行
cat -n /etc/passwd | sed '2,$d'
#增加行
cat -n /etc/passwd | sed '2i top' #i添加,第2行前添加top
cat -n /etc/passwd | sed '2a end' #a添加,第2行后添加end
cat -n /etc/passwd | sed '2a end \ #新行增加必须以要 \
new_line'
#替换
cat -n /etc/passwd | sed '2c new' #c替换
cat -n /etc/passwd | sed '2,5c new_line' #2-5
#修改并替换
# sed 's/old/new/g'
sed -n '1p' /etc/passwd
sed 's/root/root1/' /etc/passwd | head -n1 #只匹配第1个
sed 's/root/root1/g' /etc/passwd | head -n1 #g 全局
#测试
#只显示IP地址
ifconfig
ifconfig | egrep 'inet'
ifconfig | egrep inet | grep -v inet6 | sed 's/^.*inet//g' | sed 's/netmask.*$//g'
#去掉ssh配置文件中的带#行和空行
more /etc/ssh/sshd_config
more /etc/ssh/sshd_config | sed 's/#.*$//g'
more /etc/ssh/sshd_config | sed 's/#.*$//g' | sed '/^$/d'
练习:
#每一行结尾为.的换成!
more test
more test | sed 's/\.$/\!/g'
sed -i 's/\.$/\!/g' test
sed -i '$a # End' test
#sed_text,拷贝以下内容并进行练习
Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln , NB 92743:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive, Gzary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
6. awk文本处理工具原理及使用
相比于 sed 常常作用于一整行的处理,awk 则比较倾向于将一行分成数个“字段”来处理
awk 相当适合处理小型数据处理
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
#1.把Jon的名字改为Jonathan
#2.删除头3行
#3.打印第5~10行
#4.删除含有Lane的所有行
#5.打印所有生日在十一月或十二月的行
#6.在以Kare开头的行末尾加上3颗星
#7.将所有包含Jose的行都替换为JOSE HAS RETIRED
#8.把Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则式查找出来
#9.删除所有空行
#1
sed -n '/Jon/{p; s/Jon/Jonathan/g; p;}' sed_text #打印,替换,打印
#2
sed '1,3d' sed_text
#3
sed -n '5,10p' sed_text
#4
sed '/Lane/d' sed_text
#5
sed -n '/:1[12]\//p' sed_text
#6
sed -n 's/^Kare.*$/&***/p' sed_text
#7
sed '/Jose/c JOSE HAS RETIRED' sed_text
#8
sed -n '/Popeye/{p; sx[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*x11/14/46x; p}' sed_text
#s命令在进行替换时,允许用户指定定界符(分隔符),这里指定了x为定界符。因为如果使用的/的话,后面日期
里的/就不得不进行转义,写起来麻烦,还容易出错
#9
sed '/^\s*$/d' sed_text
#\s表示空格和制表符\t,把所有只包含空格和制表符的行进行了d删除操作
last -n 5 #登陆的前5行
last -n 5 | awk '{print $1 "\t" $3}' #账号与登陆者的IP,且账号与IP之间以[tab]隔开
练习
last -n 5 | awk '{print $1,$3}'
# $1指的就是第一列,但是$0则是代表一整行(第一行);每一行的每个字段都是有变量名称的,那就是$1,$2等
变量名称
more passwd | awk -F: '{print $1}' #-F指定源文档的分隔符,默认为空格
more passwd | awk -F: '{print $1,$7}'
#测试
#1.打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上"user_name: "
cat /etc/passwd | awk -F: '{print "user_name: "$1}'
#2.打印出/etc/passwd 第三个域和第四个域
awk -F: '{print$3$4}' /etc/passwd
awk -F: '{print$3"\t"$4}' /etc/passwd
#3.匹配/etc/passwd 第三域大于100的显示出完整信息
cat /etc/passwd |awk -F: '{if($3>100) print$0}'
#4.打印行号小于15的,并且最后一域匹配bash的信息
cat /etc/passwd |awk -F: '{if($NR<15 && $NF~/bash/) print$0}'
#awk 内的 NR 变量,awk 内的 NF 变量
#5.打印出第一域匹配daemon的信息
cat /etc/passwd | awk -F: '$1=="daemon"'
#6.请打印出第三域数字之和
cat /etc/passwd |awk -F: '{sum=sum+$3}END{print sum}'
#7.请将/etc/passwd 中的root替换成root1,临时替换
cat /etc/passwd |awk -F: 'gsub(/root/,"root1") {print $0}'
#sub匹配第一次出现的符合模式的字符串,相当于 sed 's//'
#gsub匹配所有的符合模式的字符串,相当于 sed 's//g'
#8.匹配passwd最后一段域bash结尾的信息,有多少条
awk -F: '($NF~/bash/){print NR}' /etc/passwd |wc -l
#9.请同时匹配passwd文件中,带mail和bash的关键字的信息
cat /etc/passwd |awk -F: '$0~/root|mail/'
#awk_text,拷贝以下内容并进行练习
#名称,电话,过去三个月捐款数
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
1.显示所有电话号码
2.显示Dan的电话号码
3.显示Susan的名字和电话号码
4.显示所有以D开头的姓
5.显示所有以一个C或E开头的名
6.显示所有只有四个字符的名,这里可以使用length函数,举例: length(1)==10 1字符为10
7.显示所有区号为916的人名
8.显示Mike的捐款.显示每个值时都有以开头.如250100175
9.显示姓,其后跟一个逗号和名
#
1. awk -F: '{print $2}' awk_text
#
2. awk -F: '{if(1~/Dan/) print2}' awk_text
#
3. awk -F: '{if(1~/Susan/) print1,$2}' awk_text
#
4. awk -F: '{if(1~/^D/) print1}' awk_text
#
5. awk -F: '{if(1~/^[C|E]/) print1}' awk_text
#
6. cat awk_text | awk -F: '{print1}'| awk '{if(length(1)==4) print $1}'
#
7. cat awk_text | awk '{print2}'| awk -F: '{if(2~/916/) print$1}'
#
8. cat awk_text | awk -F: '{if(1~/Mike/) print ""3""4""$5}'
#
9. cat awk_text | awk -F: '{print1}'|awk '{print2","$1}'
计算机网络就是通信线路和通信设备将分布在不同地点的具有独立功能的多个计算机系统互相连接起来,在
网络软件的支持下实现彼此之间的数据通信和资源共享的系统
计算机网络核心内容就是网络协议。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是
约定的集合
网络层次划分
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织
(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System
Interconnection/Reference Model)
OSI七层网络模型
TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开
TCP/IP协议
IP地址
网络地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络
广播地址
广播地址通常称为直接广播地址,是为了区分受限广播地址
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息
时,该网络内的所有主机都能收到该广播消息
组播地址
D类地址就是组播地址
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255
B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255
C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通
信)
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号
255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广
播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本
地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段
192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到
0.0.0.0
常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想
要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽
的范围内)的服务器发送IP请求分组
回坏地址
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1
A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
子网掩码及网络划分
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以
其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个
高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用
ARP/RARP协议
路由选择协议,RIP、OSPF协议等
TCP/IP协议
TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协
议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确
地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址
2. Linux网络属性配置及工具
网络接口
网络接口(interface)设备在操作系统中的表示方法,在Windows系统中通过图形化界面来配置,Linux系统
下一切皆为文件,如centos6及以下的命令方式都以ethX,如eth0 eth1等。centos7则提供了不同的命名规
则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比
eth0、wlan0更难读。如ens33
网络接口配置文件
more /etc/sysconfig/network-scripts/ifcfg-ens32 #centos7的地址
more /etc/sysconfig/network-scripts/ifcfg-eth1 #centos6的地址
#配置概要
TYPE="Ethernet" #网卡类型 以太网
PROXY_METHOD="none" #代理方式 关闭
BROWSER_ONLY="no"
BOOTPROTO="dhcp" #网卡引导协议:dhcp、static、none
DEFROUTE="yes" #默认路由
IPV4_FAILURE_FATAL="no" #ipv4致命检测
IPV6_INIT="yes" #ipv6初始化
IPV6_AUTOCONF="yes" #ipv6自动配置
IPV6_DEFROUTE="yes" #ipv6默认路由
IPV6_FAILURE_FATAL="no" #ipv6致命错误
IPV6_ADDR_GEN_MODE="stable-privacy" #ipv6生成模式
NAME="ens32" #网卡物理名
UUID="de98dfba-1046-4814-a105-48106e4e4515" #唯一识别码,每个网卡都不同
DEVICE="ens32" #网卡设备名称,必须和name一致
ONBOOT="yes" #开机启动
DNS=8.8.8.8 #DNS
DNS配置文件
要访问DNS服务器来进行查询,需要设置/etc/resolv.conf文件
通过该文件设置DNS服务器的IP地址及DNS域名,该文件是由域名解析使用的配置文件
/etc/hosts文件
包含(本地网络中)已知主机的一个列表
hosts文件是dns服务的前身,用于域名解析
/etc/services
Internet网络服务文件,将网络服务名转换为端口号/协议
文件中每一行对应一种服务,它由4个字段组成,中间用TAB或者空格分隔,分别表示 “服务名称”、“使用端
口”、“协议名称”以及“别名”
more /etc/services
主机名配置及文件/etc/hostname
hostname
hostnamectl #设置主机名
centos7以后将hostname的配置从/etc/sysconfig/network中改到了/etc/hostname中,所以
在/etc/sysconfig/network中配置hostname是不起作用
centos6 hostname /etc/sysconfig/network /etc/hostname两个地方都需要修改!
所有以上出现的知识点,也需在windows中熟练掌握!
网络相关命令
ping #网络的连通性以及网速,域名解析
ping -c4 www.qq.com #-c指定发送数据包的个数
ctrl + c #停止ping,注意windows和linux的不同
netstat #当前建立的网络连接;查看本地系统打开了哪些端口
netstat -ntpl
netstat -nr
DNS2=8.8.8.8
配置完成后重启网络服务!
more /etc/resolv.conf
# Generated by NetworkManager
search localdomain #表示提供了一个不包括完全域名的主机时,在主机后面添加后缀
nameserver 192.168.5.2 #设置首选DNS,解析域名时使用该地址指定的主机为域名服务器
nameserver 192.168.5.3 #设置备用DNS
more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ss #查看网络连接的工具
route #查看修改路由表
route -n
tcpdump #命令行抓包工具
telnet #telnet协议客户端,用可来探测端口
ifconfg #网卡配置工具
ifup eth0
ifdown ens33
ip #网卡配置工具
ip addr
ip link set ens32 up
ip link set ens32 down
ip -s link
ip route
nmcli #网卡配置工具
nmcli con show
nmcli con show -active
nmcli con show ens32
nmcli dev status
nmcli dev show
nmcli con up ens32
nmcli con down ens32
brctl #网桥管理工具
nslookup #域名解析
dig #域名解析
whois #查看域名所有者信息
traceroute #统计到目标主机的每一跳的网络状态
3. Linux进程管理及工具
执行中的程序可称作进程。当程序以可执行文件存放在存储中,并且运行的时候,每个进程会被动态得分配
系统资源、内存、安全属性和与之相关的状态。可以有多个进程关联到同一个程序,并同时执行不会互相干
扰。操作系统会有效地管理和追踪所有运行着的进程
为了管理这些进程,用户应该能够:
查看所有运行中的进程
查看进程消耗资源
定位个别进程并且对其执行指定操作
改变进程的优先级
杀死指定进程
限制进程可用的系统资源等
ps #查看进程工具
ps -a #列出运行中进程
ps -ef | grep xxx #列出需要的进程的信息
ps -aux xxx #显示进程详细信息,包含用户,内存,cpu,优先级等
pstree #每个进程是由你进程创建的,通过树状图来显示
top #显示系统动态进程使用的资源
nice #设置进程的优先级,默认以0级启动,优先级可通过top的NI来查看,进程优先级范围从-20到19,值
越低,优先级越高
nice -3 top
renice #改变正在运行的进程优先值,用户只能改变属于他们自己的进程的优先值
renice -n -p xxx #改变指定进程的优先值
kill #用来发送信号来结束进程
kill <pid>
kill -9 <pid>
killall -9 <pid>
ulimit #用于控制系统资源在shell和进程上的分配量
jobs
fg
bg
4. Bash for、until、while循环
for
#for 遍历循环
for var in list
do
commands
done
more s1.sh
#!/bin/bash
# basic for command
#
for test in 1 2 3 4 5 6 7 8 9 10
do
echo The next number is $test
done
#每次for命令遍历值列表,它都会将列表中的下个值赋给$test变量。$test变量可以像for命令语句中的其他脚本
变量一样使用。在最后一次迭代后,$test变量的值会在shell脚本的剩余部分一直保持有效。它会一直保持最后
一次迭代的值(除非你修改了它)
more s11.sh
#!/bin/bash
# basic for command
#
for test in 1 2 3 4 5 6 7 8 9 10 #for循环假定每个值都是用空格分割的。如果有包含空格的数据值
do
echo The next number is $test
done
#
echo "The last number we visited was $test"
test=11 #test变量保持了其值,也允许我们修改它的值
echo "Wait, now we're visiting $test"
more s111.sh
#!/bin/bash
# basic for command part2
#
for test in i don't know how to use the for command
do
echo "word:$test"
done
#使用转义或者双引号来处理
#从变量读取列表
more s12.sh
#!/bin/bash
#
list="xian beijing shanghai hangzhou"
list=$list" wuhan"
for city in $list #$list变量包含了用于迭代的标准文本值列表
do
echo "Have you ever visited $city?"
done
#赋值语句向$list变量包含的已有列表中添加(或者说拼接)了一个值
#从命令读取值
more s13.sh
#!/bin/bash
# reading values from a file
#
file="city"
for city in $(cat $file)
do
echo "Visit $city"
done
#从通配置符读取目录
more s14.sh
#!/bin/bash
#
while
until
for file in /root/* #也可添加多个目录,空格 接下一个目录
do
if [ -d "$file" ] #-d:dir
then
echo "$file is a directory"
elif [ -f "$file" ] #-f:file
then
echo "$file is a file"
fi
done
#for (( variable assignment ; condition ; iteration process ))
#C语言风格的for
more s15.sh
#!/bin/bash
# testing for loop
for (( i=1; i <= 10; i++ ))
do
echo "The next number is $i"
done
while test command
do
other commands
done
more s15.sh
#!/bin/bash
# while command test
var=10
while [ $var -gt 0 ]
do
echo $var
var=$[ $var - 1 ]
done
#只要测试条件成立,while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修
改,否则就会陷入无限循环
#避免死循环!
#until命令和while命令工作的方式完全相反
until test commands
do
other commands
done
more s16.sh
#!/bin/bash
5. Sed 文本处理工具原理及使用
Sed是一种非交互式的流编辑器,可动态编辑文件;流编辑器则会在编辑器处理数据之前基于预先提供的一组
规则来编辑数据流
Sed本身是一个管道命令,可以分析 standard input 的,主要是用来分析关键字的使用、统计等,此外还可
以将数据进行替换、删除、选中、选取特定行等功能
# using the until command
var=100
until [ $var -eq 0 ]
do
echo $var
var=$[ $var - 25 ]
done
#打印行
cat -n /etc/passwd | sed -n '2p' #-n安静模式,STDIN的数据会被列出到屏幕上
cat -n /etc/passwd | sed -n '2,5p' #2-5行
#删除行
cat -n /etc/passwd | sed '2d' #d删除,删除第2行
cat -n /etc/passwd | sed '2,5d' #2-5行
cat -n /etc/passwd | sed '2,$d'
#增加行
cat -n /etc/passwd | sed '2i top' #i添加,第2行前添加top
cat -n /etc/passwd | sed '2a end' #a添加,第2行后添加end
cat -n /etc/passwd | sed '2a end \ #新行增加必须以要 \
new_line'
#替换
cat -n /etc/passwd | sed '2c new' #c替换
cat -n /etc/passwd | sed '2,5c new_line' #2-5
#修改并替换
# sed 's/old/new/g'
sed -n '1p' /etc/passwd
sed 's/root/root1/' /etc/passwd | head -n1 #只匹配第1个
sed 's/root/root1/g' /etc/passwd | head -n1 #g 全局
#测试
#只显示IP地址
ifconfig
ifconfig | egrep 'inet'
ifconfig | egrep inet | grep -v inet6 | sed 's/^.*inet//g' | sed 's/netmask.*$//g'
#去掉ssh配置文件中的带#行和空行
more /etc/ssh/sshd_config
more /etc/ssh/sshd_config | sed 's/#.*$//g'
more /etc/ssh/sshd_config | sed 's/#.*$//g' | sed '/^$/d'
练习:
#每一行结尾为.的换成!
more test
more test | sed 's/\.$/\!/g'
sed -i 's/\.$/\!/g' test
sed -i '$a # End' test
#sed_text,拷贝以下内容并进行练习
Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln , NB 92743:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive, Gzary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
6. awk文本处理工具原理及使用
相比于 sed 常常作用于一整行的处理,awk 则比较倾向于将一行分成数个“字段”来处理
awk 相当适合处理小型数据处理
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900
#1.把Jon的名字改为Jonathan
#2.删除头3行
#3.打印第5~10行
#4.删除含有Lane的所有行
#5.打印所有生日在十一月或十二月的行
#6.在以Kare开头的行末尾加上3颗星
#7.将所有包含Jose的行都替换为JOSE HAS RETIRED
#8.把Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则式查找出来
#9.删除所有空行
#1
sed -n '/Jon/{p; s/Jon/Jonathan/g; p;}' sed_text #打印,替换,打印
#2
sed '1,3d' sed_text
#3
sed -n '5,10p' sed_text
#4
sed '/Lane/d' sed_text
#5
sed -n '/:1[12]\//p' sed_text
#6
sed -n 's/^Kare.*$/&***/p' sed_text
#7
sed '/Jose/c JOSE HAS RETIRED' sed_text
#8
sed -n '/Popeye/{p; sx[0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*x11/14/46x; p}' sed_text
#s命令在进行替换时,允许用户指定定界符(分隔符),这里指定了x为定界符。因为如果使用的/的话,后面日期
里的/就不得不进行转义,写起来麻烦,还容易出错
#9
sed '/^\s*$/d' sed_text
#\s表示空格和制表符\t,把所有只包含空格和制表符的行进行了d删除操作
last -n 5 #登陆的前5行
last -n 5 | awk '{print $1 "\t" $3}' #账号与登陆者的IP,且账号与IP之间以[tab]隔开
练习
last -n 5 | awk '{print $1,$3}'
# $1指的就是第一列,但是$0则是代表一整行(第一行);每一行的每个字段都是有变量名称的,那就是$1,$2等
变量名称
more passwd | awk -F: '{print $1}' #-F指定源文档的分隔符,默认为空格
more passwd | awk -F: '{print $1,$7}'
#测试
#1.打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上"user_name: "
cat /etc/passwd | awk -F: '{print "user_name: "$1}'
#2.打印出/etc/passwd 第三个域和第四个域
awk -F: '{print$3$4}' /etc/passwd
awk -F: '{print$3"\t"$4}' /etc/passwd
#3.匹配/etc/passwd 第三域大于100的显示出完整信息
cat /etc/passwd |awk -F: '{if($3>100) print$0}'
#4.打印行号小于15的,并且最后一域匹配bash的信息
cat /etc/passwd |awk -F: '{if($NR<15 && $NF~/bash/) print$0}'
#awk 内的 NR 变量,awk 内的 NF 变量
#5.打印出第一域匹配daemon的信息
cat /etc/passwd | awk -F: '$1=="daemon"'
#6.请打印出第三域数字之和
cat /etc/passwd |awk -F: '{sum=sum+$3}END{print sum}'
#7.请将/etc/passwd 中的root替换成root1,临时替换
cat /etc/passwd |awk -F: 'gsub(/root/,"root1") {print $0}'
#sub匹配第一次出现的符合模式的字符串,相当于 sed 's//'
#gsub匹配所有的符合模式的字符串,相当于 sed 's//g'
#8.匹配passwd最后一段域bash结尾的信息,有多少条
awk -F: '($NF~/bash/){print NR}' /etc/passwd |wc -l
#9.请同时匹配passwd文件中,带mail和bash的关键字的信息
cat /etc/passwd |awk -F: '$0~/root|mail/'
#awk_text,拷贝以下内容并进行练习
#名称,电话,过去三个月捐款数
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
1.显示所有电话号码
2.显示Dan的电话号码
3.显示Susan的名字和电话号码
4.显示所有以D开头的姓
5.显示所有以一个C或E开头的名
6.显示所有只有四个字符的名,这里可以使用length函数,举例: length(1)==10 1字符为10
7.显示所有区号为916的人名
8.显示Mike的捐款.显示每个值时都有以开头.如250100175
9.显示姓,其后跟一个逗号和名
#
1. awk -F: '{print $2}' awk_text
#
2. awk -F: '{if(1~/Dan/) print2}' awk_text
#
3. awk -F: '{if(1~/Susan/) print1,$2}' awk_text
#
4. awk -F: '{if(1~/^D/) print1}' awk_text
#
5. awk -F: '{if(1~/^[C|E]/) print1}' awk_text
#
6. cat awk_text | awk -F: '{print1}'| awk '{if(length(1)==4) print $1}'
#
7. cat awk_text | awk '{print2}'| awk -F: '{if(2~/916/) print$1}'
#
8. cat awk_text | awk -F: '{if(1~/Mike/) print ""3""4""$5}'
#
9. cat awk_text | awk -F: '{print1}'|awk '{print2","$1}'