shell网络管理
背景知识
联网就是通过网络将主机进行互联并采用不同的规范配置网络上的节点。我们以 TCP/IP 作为网络栈,所有的操作都是基于它进行的。网络是计算机系统中重要的部分。连接在网络上的每个节点都分配了一个用作标识作用的独一的 IP 地址。有很多联网参数,如子网掩码、路由、端口和 DNS 等,我们需要对这些知识有一个基本的理解。
Internet 依靠 TCP/IP 协议,在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的互联。在 Internet 上,每一个节点都依靠唯一的 IP 地址互相区分和相互联系。IP 地址是一个 32 位二进制数的地址,由 4 个 8 位字段组成,每个字段之间用点号隔开,用于标识 TCP/IP 宿主机。每个 IP 地址都包含两部分:网络 ID 和主机ID。网络 ID 标识在同一个物理网络上的所有宿主机,主机 ID 标识该物理网络上的每一个宿主机,于是整个 Internet 上的每个计算机都依靠各自唯一的 IP 地址来标识。IP 地址构成了整个 Internet 的基础,它是如此重要,每一台联网的计算机无权自行设定 IP 地址,有一个统一的机构 IANA 负责对申请的组织分配唯一的网络 ID,而该组织可以对自己的网络中的每一个主机分配一个唯一的主机 ID。
一些使用网络的应用通过打开并连接到防火墙端口进行运作。每一个应用都可以提供数据传输、远程 shell 登录等服务。有些管理任务可以通过网络进行。而 shell 脚本也能用来配置网络节点、测试周围主机是否可用、自动化执行远程主机命令等。
Web 正在成为反映技术发展的晴雨表,数据处理都要经由它来完成。尽管 shell 脚本没法像 PHP 一样在 Web 上大包大揽,但总还是有一些活适合它。
1.测试网络是否连通
ping的全名为Packet Internet Grope , 即因特网包探索器Ping 主要用于检测网络的连通性。ping 可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了 tcp/ip 协议后才可以使用。执行 ping 指令会使用 ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
常用语法:
ping [-c<完成次数>][-w<等待时间(s)]主机名称或 IP 地址
示例:
64 bytes:表示本次传送的 ICMP 包的大小,此值为预设值
icmp_seq=1:ICMP 所侦测的次数,第一次为 1,第二次为 2,依次类推
ttl=52: 生存时间
time:响应时间
备注:
TTL 是生存时间的外语缩写,就是说这个ping的数据包能在网络上存在多少时间。当对网络上的主机进行 ping 操作的时候,本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机但是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。当数据包传送到一个路由器之后,TTL就自动减 1,如果减到 0 了还是没有传送到目的主机,那么就自动丢失。
ICMP 是(Internet Control Message Protocol)Internet 控制报文协议。它是 TCP/IP 协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
#!/bin/bash read -p "please input a ID:" id if ping -c 2 $id | grep -q "ttl" ;then #-c后有无空格都可 echo "success" else echo "failed" fi
2.把当前目录(包含子目录)下所有后缀为“.txt”的文件后缀变更为“.h”
#!/bin/bash for file in `find -name *.txt` do mv $file ${file/%txt/h} done
3.分行打印本机ip地址、广播地址、掩码地址
ifconfig 命令
Linux 下网卡命名规律:eth0,eth1。第一块以太网卡,第二块lo 为环回接口,它的 IP 地址固定为 127.0.0.1,掩码 8 位。它代表你的机器本身。ifconfig [Interface]查看网卡信息,Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息。
启用/停用网卡操作命令(需要 root 权限):
ifconfig [Interface] up 启用 Interface 网卡
ifconfig [Interface] down 停用 Interface 网卡
ifconfig [Interface] 查看 Interface 网卡当前状态
示例:
第一行:连接类型:Ethernet(以太网)HWaddr(硬件 mac 地址)
第二行:网卡的 IP 地址、子网、掩码
第三行:IPV6 的地址相关信息
第四行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500 字节
第五、六行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息。
#!/bin/bash ifconfig wlan0 | grep "inet 地址:" | awk 'BEGIN{OFS="\n";} { print $2,$3,$4}'
4.编写脚本,使用case语句判断脚本的参数是否为"up/down",如果为"up"启用网卡,并输出网卡状态,如果是"down"则停用网卡,并输出网卡状态.若参数为其他,提示准确的参数
#!/bin/bash read -p "please input up/down :" a case $a in up) echo "eth0 is up" ;; down) echo "eth0 is down" ;; *) echo "failed" ;; esac
5.统计/etc/passwd中/bin/bash出现的次数
etc/passwd 文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序
#!/bin/bash cat /etc/passwd | grep "/bin/bash" | wc -l
6.打印/etc/passwd中奇数行的行号
#!/bin/bash cat /etc/passwd | awk '{if (NR%2==1) print NR,$0; else print $0;}' #NR表示行号,$0表示后面的内容
7.从网上下载一个文件,保存到~下
wget 是在 Linux 下开发的开放源代码的软件,作者是 HrvojeNiksic,后来被移植到包括 Windows 在内的各个平台上。它有以下功能和特点:
①支持断点下传功能;这一点,也是网络蚂蚁和 FlashGet 当年最大的卖点,现在,Wget 也可以使用此功能,那些网络不是太好的用户可以放心了;
②同时支持 FTP 和 HTTP 下载方式;尽管现在大部分软件可以使用 HTTP 方式下载,但是,有些时候,仍然需要使用 FTP 方式下载软件;
③支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
④设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标。
放到指定目录的用法
wget -P 指定目录 url 链接(绝对路径)
#!/bin/bash mkdir~/download wget -p ~/download http://upload.ldnews.cn/2014/0916/1410854723815.jpg
8.找出自己常用的5条命令以及使用次数
1.Bash shell 在“~/.bash_history”(“~/”表示用户目录)文件中保存了 500 条使用过的命令,这样可以使你输入使用过的长命
令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。
2.uniq 从已经排序好的文本文件 file1 中删除重复的行,输出到标注输出或file2 。常作为过滤器,配合管道使用在使用 uniq 命令前,必须确保操作的文本文件已经过 sort 排序。若不带参数运行 uniq,将删除重复的行。
uniq –c 在每行旁边显示该行重复出现的次数
#!/bin/bash cat ~/.bash_history | sort|uniq -c | sort -nr | head -5
9.找出当前目录下文件名中含有空格的文件,并将文件名中的空格去掉
#!/bin/bash find -name "* *"|while read line do newfile=`echo $line | sed -e "s/ //g"` #sed -e表示后面的脚本 -e可不加 mv "$line" "$newfile" #$line和$newfile都是字符串 done
10.列出局域网内的所有活动主机
/dev/null 看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.然而, /dev/null 对命令行和脚本都非常的有用.它可以禁止标准输出和标准错误的输出.
#!/bin/bash for i in `seq 1 254` do { ping -c2 192.168.1.$i &>/dev/null && echo "192.168.1.$i is alive" }& done wait
11.ftp服务器上下载文件
FTP是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP 网络和INTERNET上最早使用的协议之一。尽管 World WideWeb(WWW)已经替代了FTP的大多数功能,FTP 仍然是通过 Internet把文件从客户机复制到服务器上的一种途径。FTP 客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像 CUTEFTP这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于 FTP 协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用 FTP 来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名 FTP 服务器”。FTP 是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP 是一个 8 位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像 MIME 或 Unicode 一样。但是,FTP 有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登录进程。FTP 服务一般运行在 20 和 21 两个端口。端口 20 用于在客户端和服务器之间传输数据流,而端口 21 用于传输控制流,并且是命令通向ftp 服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。
#!/bin/bash ftp -n<<! open 192.168.1.171 user guest 123456 binary cd /home/data lcd /home/databackup prompt mget * close bye ! #!/bin/bash ftp -n<<! open 192.168.1.171 user guest 123456 binary cd /home/data lcd /home/databackup prompt mput * close bye !