一、网络基础

TCPIP model and the corresponding of the OSI modelNetwork based

一、ISO/OSI七层模型
The OSI seven layer model

The OSI seven layers of the framework

二、TCP/IP四层模型
TCPIP four layers model

TCPIP model and the corresponding of the OSI model

网络接口层
#网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在些层,即OSI参考模型的数据链路层。

网际互联层
#网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)

传输层
#传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)。
TCPIP three-way handshake

应用层
#应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等。
Data encapsulation process

TCP/IP模型与OSI模型的比较
共同点:
(1)OSI参考模型和TCP/IP参考模型都采用了层次结构的概念
(2)都能够提供面向连接和无连接两种通信服务机制
不同点:
(1)前者是七层模型,后者是四层结构
(2)对可靠性要求不同(后者更高)
(3)OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络。

三、IP地址
The IP header
The IP address
IP address classification

四、子网掩码
子网掩码的使用
The use of the subnet mask_1
The use of the subnet mask_2
The use of the subnet mask_3

Variable-length subnet mask and subnet planning

五、端口作用
TCP protocol in baotou

UDP protocol in baotou

Common port

查看本机启用的端口
netstat -an
选项:
— -a:查看所有连接和监听端口
— -n:显示IP地址和端口号,而不显示域名和服务名

六、DNS作用
#在互联网中,通过IP地址来进行通信
#IP地址用数字表示,记忆起来太困难了(如116.213.120.232)
#人对域名更加敏感,如:http://wwww.imooc.com/

hosts文件
# C:\Windows\System32\drivers\etc\hosts
— 127.0.0.1 localhost

从Hosts文件到DNS
早期Hosts文件解析域名
#名称解析效能下降
#主机维护困难
DNS服务
#层次性
#分布式

DNS服务的作用
将域名解析为IP地址
#客户机向DNS服务器发送域名查询请求
#DNS服务器告知客户机Web服务器的IP地址
#客户机与Web服务器通信

The domain name space structure

DNS查询类型
(1)从查询方式上分
递归查询
#要么做出查询成功响应,要么作出查询失败的响应。一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。
迭代查询
#服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。
(2)从查询内容上分
正向查询由域名查找IP地址
反向查询由IP地址查找域名

七、网关作用
1、网关(Gateway)又称网间连接器、协议转换器。
2、网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
3、网关既可以用于广域网互连,也可以用于局域网互连。
4、网关是一种充当转换重任的服务器或路由器。

二、Linux网络管理

一、Linux配置IP地址
1、ifconfig命令临时配置IP地址
ifconfig命令:查看与配置网络状态命令

例:
— [root@localhost ~]# ifconfig eth0 192.168.0.200 netmask 255.255.255.0
#临时设置eth0网卡的IP地址与子网掩码

2、setup工具永久配置IP地址
红帽(redhat)专有图形化工具setup设置IP地址
注:有些redhat产品没有安装setup工具需另外安装
安装setuptool
— [root@locallhost ~]# yum install setuptool
安装防火墙设置
— [root@locallhost ~]# yum install system-config-securitylevel-tui
安装网络设置
— [root@locallhost ~]# yum install system-config-network-tui
安装系统服务管理
— [root@locallhost ~]# yum install ntsysv

二、Linux网络配置文件
1、网卡信息文件
— [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
— DEVICE=eth0 网卡设备名
— BOOTPROTO=none 是否自动获取IP(none、static、dhcp)
— HWADDR=00:0c:29:17:c4:09 MAC地址
— NM_CONTROLLED=yes 是否可以同Network Manager图形管理工具托管
— ONBOOT=yes 是否随网络服务启动,eth0生效
— TYPE=Ethernet 类型为以太网
— UUID=”44b76c8a-b59f-44d5-83fa-7f98fda86b3d” 唯一识别码
— IPADDR=192.168.0.252 ip地址
— NETMASK=255.255.255.0 子网掩码
— GATEWAY=192.168.0.1 网关
— DNS1=202.106.0.20 DNS
— IPV6INIT=no IPv6没有启用
— USERCTL=no 不允许非root用户控制该网卡

2、主机名文件
— [root@localhost ~]# 主机名文件
— NETWORKING=yes
— HOSTNAME=localhost.localdomain

— [root@localhost ~]# hostname [主机名]
#查看与临时设置主机名命令

3、DNS配置文件
— [root@localhost ~]# vi /etc/resolv.conf
— nameserver 202.106.0.20
— search localhost

三、虚拟机网络参数配置
1、配置Linux IP地址
2、启动网卡
— [root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
— 把 ONBOOT=no
— 改为 ONBOOT=yes
— [root@localhost ~]# service network restart
#重启网络服务

3、修改UUID
1)vi /etc/sysconfig/network-scripts/ifcfg-eth0
#删除MAC地址行
2)rm -rf /etc/udev/rules.d/70-persistent-net.rules
#删除网卡和MAC地址绑定文件
3)重启动系统

4、设置虚拟机网络连接方式

三、Linux网络命令

一、网络环境查看命令
1、ifconfig命令
ifconfig命令:查看与配置网络状态命令

2、关闭与启动网卡
ifdown 网卡设备名
#禁用该网卡设备

ifup 网卡设备名
#启用该网卡设备

3、查询网络状态
netstat 选项
选项:
— -t:列出TCP协议端口
— -u:列出UDP协议端口
— -n:不使用域名与服务名,而使用IP地址和端口号
— -l:仅列出在监听状态网络服务
— -a:列出所有的网络连接

netstat -rn
选项:
— -r:列出路由列表,功能和route命令一致

4、route命令
route -n
#查看路由列表(可以看到网关)

route add default gw 192.168.1.1
#临时设定网关

5、域名解析命令
nslookup [主机名或IP]
#进行域名与IP地址解析

注:CentOS 6.x 已经没有nslookup这个工具安装方法

— [root@localhost ~]# nslookup
— > server
#查看本机DNS服务器

二、网络测试命令
1、ping命令
ping [选项] ip或域名
#探测指定IP或域名的网络状况
选项:
— -c 次数:指定ping包的次数

2、telnet命令
telnet [域名或IP] [端口]
#远程管理与端口探测命令

— telnet 192.168.1.119 80

3、traceroute
traceroute [选项] IP或域名
#路由跟踪命令
选项
— -n 使用IP,不使用域名,速度更快

4、wget命令
wget http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz
#下载命令

5、tcpdump命令
tcpdump -i eth0 -nnX port 21
选项:
— -i:指定网卡接口
— -nn:将数据包中的域名与服务转为IP和端口
— -X:以十六进制和ASCII码显示数据包内容
— port:指定监听的端口

四、远程登录工具

一、SSH协议原理
1、对称加密算法
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
Symmetric encryption algorithm

2、非对称加密算法
非对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
Asymmetric encryption algorithm

SSH secure shell protocol

3、SSH命令
ssh 用户名@ip
#远程管理指定Linux服务器

scp [-r] 用户名@ip:文件路径 本地路径
#下载文件

scp [-r] 本地文件 用户名@ip:上传路径
#上传文件

二、SecureCRT远程管理工具

三、Xshell工具和WinSCP文件传输工具

CentOS 6.x 安裝 nslookup 的步驟 (與 yum 如何查詢套件)

在Linode VPS佈署的 CentOS 6.x 已經沒有 nslookup 這個工具程式了!!

以下將藉由安裝 nslookup 的同時,順便也復習一下 yum 的查詢套件功能…

安裝步驟

1. 執行 nslookup,系統回應「沒有這個指令」:

$ nslookup
-bash: nslookup: command not found

2. 直覺地用 yum 安裝 nslookup,結果跟你說「套件不存在」:

$ yum install nslookup
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.kernel.org
 * elrepo: ftp.osuosl.org
 * epel: mirrors.kernel.org
 * extras: mirrors.kernel.org
 * rpmforge: mirror.hmc.edu
 * updates: mirrors.kernel.org
Setting up Install Process
No package nslookup available.
Error: Nothing to do

3. 我們可以加 provides 參數查詢 nslookup 存在哪個套件中:

$ yum provides nslookup
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.linode.com
* epel: mirror.prgmr.com
* extras: mirrors.linode.com
* rpmforge: mirror.hmc.edu
* updates: mirrors.linode.com
Warning: 3.0.x versions of yum would erroneously match against filenames.
You can use "*/nslookup" and/or "*bin/nslookup" to get that behaviour
No Matches found

4. 雖然第一時間也是查不到,不過在上面遺留的訊息中, yum 有進一步顯示說檔案可能藏在 bin 目錄中。我們依樣畫葫蘆:

$ yum provides *bin/nslookup
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.linode.com
* epel: mirror.prgmr.com
* extras: mirrors.linode.com
* rpmforge: mirror.hmc.edu
* updates: mirrors.linode.com
32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 : Utilities for querying DNS name
                                            : servers
Repo        : base
Matched from:
Filename    : /usr/bin/nslookup

皇天不復苦心人,原來是藏在 bind-utils 套件中。

5. 事不宜遲,咱們快點安裝吧:

$ yum install bind-utils

PS. 連帶的 dighost 也存在於 bind-utils 套件裡

VIM文本编辑器

一、概述
Visual Interface(VI)
#可视化接口
#类似Windows中的记事本
#VI相对于记事本强大的不是一星半点

VI->VIM
VIM相对于VI做了哪些提升
— VIM支持多级撤销
— VIM可以跨平台运行
— VIM支持语法高亮
— VIM支持图形界面

二、VI编辑器的操作模式
Commmand Mode – 命令模式
Insert Model – 输入模式
Last Line Mode – 底行模式(尾行,末行)

三、VIM编辑器的命令模式
例:
[root@localhost ~]# vim abc
[root@localhost ~]# vim + abc
[root@localhost ~]# vim +3 abc
[root@localhost ~]# vim +5 abc
[root@localhost ~]# vim +/xxx abc

四、底行模式和命令模式常用指令
1、底行模式常用指令
— :w 保存文件
— :q 退出编辑
— :! 强制执行
— :ls 列出所有打开的文件
— :n 切换到后一个文件
— :N 切换到前一个文件
— :15 光标快速定位到15行
— /xxx 从光标位置开始向后搜索’xxx’字符串第一次出现所在的行
— ?xxx 从光标位置开始向前搜索’xxx’字符串第一次出现所在的行

2、命令模式常用指令
— h 光标左移
— j 光标下移
— k 光标上移
— l 光标右移
— ctrl+f 向下翻页(front)
— ctrl+b 向上翻页(back)
— ctrl+d 向下翻半页(down)
— ctrl+u 向上翻半页(up)
— dd 删除光标所在行
— o 在光标所在行的下方插入一行并切换到输入模式
— yy 复制光标所在的行
— p 在光标所在行的下方粘帖
— P 在光标所在行的上方粘贴

八、Shell基础

一、Shell概述
1、Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

2、Shell的分类
Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名

Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh

Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

3、Linux支持的Shell
/etc/shells :支持shell类型的记录文件

二、脚本执行方式
1、echo输出命令
echo [选项] [输出内容]
选项:
— -e:支持反斜线控制的字符转换
Control characters

例如:
[root@localhost ~]# echo -e “hell\bo”
#删除左侧字符

[root@localhost ~]# echo -e “h\te\tl\nl\to”
#制表符与换行符

[root@localhost ~]# echo -e “\x68\t\x65\t\x6c\n\x6c\t\x6f\t”
#按照十六进制ASCII码也同样可以输出

[root@localhost ~]# echo -e “\e[1;31m 嫁人就要嫁凤姐 \e[0m”

#输出颜色
— #30m=黑色,31m=红色,32m=绿色,33m=黄色
— #34m=蓝色,35m=洋红,36m=青色,37m=白色

2、第一个脚本
[root@localhost ~]# vi hello.sh
#!/bin/bash
#The first program

echo -e “\e[1;34m 天上掉下个林妹妹!\e[0m”

3、脚本执行
赋予执行权限,直接运行
— chmod 755 hello.sh
— ./hello.sh

通过bash调用执行脚本
— bash hello.sh

三、Bash的基本功能
1、命令别名与快捷键
1)什么是别名
— 命令别名==人的小名

2)查看与设定别名
alias
#查看系统中所有的命令别名

alias 别名=’原命令’
#设定命令别名

3)别名永久生效与删除别名
vi ~/.bashrc
#写入环境变量配置文件

unalias 别名
#删除别名

4)命令生效顺序
— 第一顺位执行用绝对路径或相对路径执行的命令。
— 第二顺位执行别名
— 第三顺位执行Bash的内部命令
— 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

5)常用快捷键
— ctrl+c 强制终止当前命令
— ctrl+l 清屏
— ctrl+a 光标移动到命令行首
— ctrl+e 光标移到到命令行尾
— ctrl+u 从光标所在位置删除到行首
— ctrl+z 把命令放入后台
— ctrl+r 在历史命令中搜索

2、历史命令
1)历史命令
history [选项] [历史命令保存文件]
选项:
— -c:清空历史命令
— -w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改

历史命令的调用
— 使用上、下箭头调用以前的历史命令
— 使用”!n”重复执行第n条历史命令
— 使用”!!”重复执行上一条命令
— 使用”!字串”重复执行最一条以该字串开关的命令

2)命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab”键就会自动进行补全

3、输出重定向
1)标准输入输出
The standard input and output

2)输出重定向
Output redirection
Output redirection-1

3)输入重定向
[root@localhost ~]# wc [选项] [文件名]
选项:
— -c 统计字节数
— -w 统计单词数
— -l 统计行数

命令 < 文件:把文件作为命令的输入
命令 << 标识符 … 标识符:把标识符之间内容作为命令的输入

4、多命令顺序执行
1)多命令顺序执行
Many command execution sequence

例子:
[root@localhost ~]# pwd;touch abc; ls; date
[root@localhost ~]# ls anaconda-ks.cfg && echo yes
[root@localhost ~]# ls anaconda-ks.cfg || echo no
[root@localhost ~]# 命令 && echo yes || echo nos

2)管道符
命令格式:
[root@localhost ~]# 命令1 | 命令2
#命令1的正确输出作为命令2的操作对象

例子:
[root@localhost ~]# ll -a /etc/ | more
[root@localhost ~]# netstat -an | grep “ESTABLISHED”

5、Shell中特殊符号
1)通配符
The wildcard

2)Bash中其他特殊符号
Bash other special symbols

七、其他常用命令

一、挂载命令
1、查询与自动挂载
[root@localhost ~]# mount
#查询系统中已经挂载的设置

[root@localhost ~]# mount -a
#依据配置文件/etc/fstab的内容,自动挂载

2、挂载命令格式
[root@localhost ~]# mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
选项:
— -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
— -o 特殊选项:可以指定挂载的额外选项
Special options

[root@localhost ~]# mount -o remount,noexec /home/
#重新挂载/home分区,并使用noexec权限
[root@localhost ~]# cd /home
[root@localhost ~]# vi hello.sh
[root@localhost ~]# chmod 755 hello.sh
[root@localhost ~]# ./hello.sh
[root@localhost ~]# mount – o remount,exec /home/
#记得要改回来,要不会影响系统启动

3、挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom/
#建立挂载点

[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘

[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/

4、卸载命令
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom

5、挂载U盘
[root@localhost ~]# fdisk -l
#查看U盘设备文件名

[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/

注意:Linux默认是不支持NTFS文件系统的

二、用户登录查看和用户交互命令
1、查看登录用户信息
w 用户名
命令输出:
— USER:登陆的用户名
— TTY:登陆终端
— FROM:从哪个IP地址登陆
— LOGIN@:登陆时间
— IDLE:用户闲置时间
— JCPU:指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
— PCPU:是指当前进程所占用的时间
— WHAT:当前正在运行的命令

who 用户名
命令输出:
— 用户名
— 登录终端
— 登录时间(登录来源IP地址)

2、查询当前登录和过去登录的用户信息
last
— last命令默认是读取/var/log/wtmp文件数据
命令输出:
— 用户名
— 登录终端
— 登录IP
— 登录时间
— 退出时间(在线时间)

3、查看所有用户的最后一次登录时间
lastlog
— lastlog命令默认是读取/var/log/lastlog文件内容
命令输出:
— 用户名
— 登录终端
— 登录IP
— 最后一次登录时间

一、命令基本格式

命令提示符
[root@localhost ~]#
其中:
— root:当前登录用户
— localhost:主机名
— ~:当前所在目录(家目录)
— #:超级用户的提示符(普通用户的提示符是$)

命令格式
命令 [选项] [参数]
注意:个别命令使用不遵循此格式,当有多个选项时,可以写在一起简化选项与完整选项
— -a 等于 –all

查询目录中内容:ls
ls [选项] [文件或目录]
选项:
— -a:显示所有文件,包括隐藏文件
— -l:显示详细信息
— -d:查看目录属性
— -h:人性化显示文件大小
— -i:显示inode

文件权限
-rw-r–r–
— -:文件类型( – 文件 d 目录 l 软链接文件)
— rw-:u所有者
— r–:g所属组
— r–:o其他人

— r:读
— w:写
— x:执行

六、关机和重启命令

1、shutdown命令
[root@localhost ~]# shutdown [选项] 时间
选项:
— -c:取消前一个关机命令
— -h:关机
— -r:重启

2、其他关机命令
[root@localhost ~]# halt
[root@localhost ~]# poweroff
[root@localhost ~]# init 0

3、其他重启命令
[root@localhost ~]# reboot
[root@localhost ~]# init 6

4、系统运行级别
— 0 关机
— 1 单用户
— 2 不完全多用户,不含NFS服务
— 3 完全多用户
— 4 末分配
— 5 图形界面
— 6 重启

[root@localhost ~]# cat /etc/inittab
#修改系统默认运行级别
id:3:initdefault:

[root@localhost ~]# runlevel
#查询系统运行级别

5、退出登录命令
[root@localhost ~]# logout