2018.05.12听课笔记

1. Linux网络基础

计算机网络就是通信线路和通信设备将分布在不同地点的具有独立功能的多个计算机系统互相连接起来,在网络软件的支持下实现彼此之间的数据通信和资源共享的系统计算机网络核心内容就是网络协议。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。

 

网络层次划分

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open SystemInterconnection/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.255D类地址作为组播地址(一对多的通信)

E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255E类地址为保留地址,供以后使用

注:只有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地址,例如在我们的RARPBOOTPDHCP协议中,若某个未知IP地址的主机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。

回环地址

127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1

ABC类私有地址

私有地址(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协议

路由选择协议,RIPOSPF协议等

TCP/IP协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

2.Linux网络属性配置及工具

网络接口

网络接口(interface)设备在操作系统中的表示方法,在Windows系统中通过图形化界面来配置,Linux系统下一切皆为文件,如centos6及以下的命令方式都以ethX,如eth0 eth1等。centos7则提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0wlan0更难读。如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"           #网卡引导协议:dhcpstaticnone

    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

    DNS2=8.8.8.8      ***配置完成后重启网络服务!

DNS配置文件

    要访问DNS服务器来进行查询,需要设置/etc/resolv.conf文件

    通过该文件设置DNS服务器的IP地址及DNS域名,该文件是由域名解析使用的配置文件

    more /etc/resolv.conf

    # Generated by NetworkManager

    search localdomain         #表示提供了一个不包括完全域名的主机时,在主机后面添加后缀

    nameserver 192.168.5.2     #设置首选DNS,解析域名时使用该地址指定的主机为域名服务器

    nameserver 192.168.5.3     #设置备用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两个地方都需要修改!

网络相关命令

    ping        #网络的连通性以及网速,域名解析

    ping -c4 www.qq.com    #-c指定发送数据包的个数

    ctrl + c                #停止ping,注意windowslinux的不同

    netstat                #当前建立的网络连接;查看本地系统打开了哪些端口

    netstat -ntpl

    netstat -nr

    ss                  #查看网络连接的工具

    route              #查看修改路由表

    route  -n         #查看路由信息

    tcpdump          #命令行抓包工具

    telnet               #telnet协议客户端,用可来探测端口

    ifconfig            #网卡配置工具

    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级启动,优先级可通过topNI来查看,进程优先级范围从-2019,值越低,优先级越高

nice -3 top

renice      #改变正在运行的进程优先值,用户只能改变属于他们自己的进程的优先值

renice -n -p xxx       #改变指定进程的优先值

kill          #用来发送信号来结束进程

        kill <pid>

        kill -9  <pid>   #强制杀进程

        ulimit      #用于控制系统资源在shell和进程上的分配量

            jobs

            fg

bg

4. Bash foruntilwhile循环

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

#

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

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

#until命令和while命令工作的方式完全相反

until test commands

do

other commands

done

more s16.sh

#!/bin/bash

# using the until command

var=100

until [ $var -eq 0 ]

do

echo $var

var=$[ $var - 25 ]

done

5. Sed 文本处理工具原理及使用

Sed是一种非交互式的流编辑器,可动态编辑文件;流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流

Sed本身是一个管道命令,可以分析 standard input 的,主要是用来分析关键字的使用、统计等,此外还可以将数据进行替换、删除、选中、选取特定行等功能

#打印行

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

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

sed -n '/Jon/{p; s/Jon/Jonathan/g; p;}' sed_text #打印,替换,打印

cat -n file11 | sed 's/Jon/Jonathan/g' | grep Jonathan

#2.删除头3

sed '1,3d' sed_text  

cat -n file11 | sed '3,5d'

#3.打印第5~10

sed -n '5,10p' sed_text

cat -n file11 | sed  -n '5,10p'

#4.删除含有Lane的所有行

sed '/Lane/d' sed_text

cat file11 | grep -n 'Lane' | sed -n d |grep -n 'Lane'

#5.打印所有生日在十一月或十二月的行

sed -n '/:1[12]\//p' sed_text

#6.在以Kare开头的行末尾加上3颗星

sed -n 's/^Kare.*$/&***/p' sed_text

sed -n 's/^Kare/***&/p' file11     // 行首添加***

#7.将所有包含Jose的行都替换为JOSE HAS RETIRED

sed '/Jose/c JOSE HAS RETIRED' sed_text

cat -n file11 | grep 'Jose' | sed 'c JOSE HAS RETIRED'

#8.Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则式查找出来

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为定界符。因为如果使用的/的话,后面日期里的/就不得不进行转义,写起来麻烦,还容易出错

cat file11 | grep 'Popeye' | sed 's/3\/19\/35/11\/14\/46/g'

#9.删除所有空行

sed '/^\s*$/d' sed_text    #\s表示空格和制表符\t,把所有只包含空格和制表符的行进行了d删除操作

cat file11 | sed '/^$/d'

6. awk文本处理工具原理及使用

相比于 sed 常常作用于一整行的处理,awk 则比较倾向于将一行分成数个“字段”来处理

awk 相当适合处理小型数据处理

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文件中,带mailbash的关键字的信息

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. 显示所有电话号码

awk -F: '{print $2}' awk_text  more file111 | awk -F: '{print$2}'

2. 显示Dan的电话号码

awk -F: '{if(1~/Dan/) print2}' awk_textmore file111 | grep ^D | awk -F: '{print$2}'

3. 显示Susan的名字和电话号码

awk -F: '{if(1~/Susan/) print1,$2}' awk_text

more file111 | awk -F: '{print$1,$2}' | grep Susan

4. 显示所有以D开头的姓

awk -F: '{if(1~/^D/) print1}' awk_text

more file111 | grep ^D | awk -F' ' '{print$1}'

5. 显示所有以一个CE开头的名

awk -F: '{if(1~/^[C|E]/) print1}' awk_text

more file111 | grep [C*,E*] | awk -F: '{print$1}' | awk -F' ' '{print$2}'

6. 显示所有只有四个字符的名,这里可以使用length函数,举例: length(1)==10 1字符为1

cat awk_text | awk -F: '{print1}'| awk '{if(length(1)==4) print $1}'

7.显示所有区号为916的人名

cat awk_text | awk '{print2}'| awk -F: '{if(2~/916/) print$1}'

more file111 | grep 916 | awk -F: '{print$1}'

8. 显示Mike的捐款.显示每个值时都有以开头.250100175

  cat awk_text | awk -F: '{if(1~/Mike/) print ""3""4""$5}'

more file111 | grep Mike | awk -F: '{print$3$4$5}'

9. 显示姓,其后跟一个逗号和名

cat awk_text | awk -F: '{print1}'|awk '{print2","$1}'

sed '/^$/d' file111 |awk -F: '{print $1}' |awk -F' ' '{print $1","$2}'

结语:

1、本节课前边对于协议很难理解,由于对计算机组成原理没有深入学习,对于协议、硬件等知识点不充分,课后需要找有关书籍补充知识点(计算机组成原理、网络协议等);

2、课程中其他命令的使用当堂课还可以了解,课后还是需要多练多记;

3、对课堂中的练习、小测试,能够在老师同学中帮助下操作起来,现在慢慢走上正轨,之前学的自我感觉很蒙蔽,现在慢慢找到节奏,学习状态也慢慢调整过来。

猜你喜欢

转载自blog.csdn.net/Wxq960906/article/details/80367380