shell编程--3

1、ip
1)当前网络接口配置:ifconfig
2)显示ip地址信息:ifconfig wlan0
3)手动设置网络接口的ip地址:ifconfig wlan0 192.168.1.1
4)手动设置网络接口的ip地址和掩码:ifconfig wlan0 192.168.1.1 netmask 255.255.255.0
5)如果你连接到一个支持自动分配ip地址的有线网络中,以下命令可以主动配置网络接口:dhclient eth0
6)打印网络接口列表:ifconfig|cut -c -10|tr -d ‘ ‘|tr -s ‘\n’

#cut -c -10 提取每一行的前10个字符

#tr -d ‘ ‘ 删除每一行的所有空格

#tr -s ‘\n’ 压缩重复的换行符
7)提取ip地址:ifconfig eth0|egrep -o “inet 地址:[^ ]*“|egrep -o “[0-9.]*“

#模式以inet 地址:作为起始,以非空格字符序列(由[^ ]*指定)作为结束。然后在接下来的管道操作中,打印出数字与点号的组合
8)重写mac地址:ifconfig eth0 hw ether 00:1c:bf:87:25:d5

#重启之后会失效

2、dns
dns设置:/etc/resolv.conf
dns查找:
1)host:列出某个域名的所有ip地址
host google.com
2)nslookup:列出dns资源记录
nslookup google.com #server是dns解析的默认名字服务器
3)如果不使用dns,可以向/etc/hosts加入ip和要解析成的名称即可
echo 192.168.1.1 backupserver >>/etc/hosts

#添加条目之后,任何时候解析backupserver,都会返回192.168.1.1

3、路由表
1)显示路由表:route -n #使用-n会以数字形式的ip地址显示每一个条目,否则如果ip地址有对应的dns条目,直接使用route会显示主机名而不是ip地址
2)网关:route add default gw 192.168.1.1 wlan0

4、ping
1)获取往返时间
rtt:网络上两台主机之间的往返时间(round trip time,rtt),它是分组从源主机到目的主机的一来一回的时间,单位是毫秒
2)限制发送的分组数量:-c
ping 192.168.1.1 -c 2 #只发送2个分组

5、fping
可以同时ping一组ip地址,而且响应速度非常快。有以下选项:
-a 指定打印出所有活动主机的ip地址
-u 指定打印出所有无法到达的主机
-g 指定ip/掩码或者ip地址范围的形式来确定一组ip
例子:
fping -a 192.168.1.1/24 -g
或者:
fping -a 192.168.1.1 192.168.1.255 -g
还可以使用命令行参数的形式指定一组ip地址:
fping -a 192.168.1.1 192.168.1.5 192.168.1.6 #ip地址以参数传递
fping -a ip.list #ip.list是一组ip地址,表示从文件中传递一组ip地址
备注:
fping默认并没有安装在linux发行版中,需要手动安装

6、traceroute
显示分组途经的所有网关地址(如今linux发行版还包含了一个mtr命令,类似于traceroute,但是能够显示实时刷新的数据)

7、ssh
secure shell,使用加密通道来传输网络数据
ssh username@ip -p port
1)要想在远程主机执行命令,并将命令输出显示到本地shell中:
ssh username@ip ‘command’ #单条命令
ssh username@ip ‘command1;command2;command3’ #多条命令,命令之间用分号分隔
例子:
ssh root@192.168.1.1 “echo user:$(whoami);echo OS:$(uname)”
ssh -C username@ip ‘command’ #-C支持对数据进行压缩传输
2)在远程主机上执行图形化命令,然后图形化输出到本地主机:
设置变量display:
ssh username@ip “export DISPLAY=:0;command1;command2” #将会启用远程主机上的图形化输出
使用ssh的x11转发选项:
ssh -x username@ip “command1;command2” #该命令将在远程主机上执行,但图形化输出会显示在本地主机上
3)ssh实现无密码登录:
原理:ssh采用了非对称加密技术,认证密钥包含两部分:一个公钥和一个私钥。我们必须通过ssh-keygen命令创建认证密钥。要想实现自动化认证,公钥必须放在服务器中(将其加入文件~/.ssh/authorized_keys),与公钥对应的私钥放在客户机的~/.ssh目录中。关于ssh相关的配置信息,可以通过修改/etc/ssh/sshd_config进行配置(比如修改authorized_keys文件的路径与名称)
步骤:
a、创建ssh密钥
ssh-keygen -t rsa #指定加密类型为rsa
在创建期间,会提示你输入口令,当然不输入口令,也可以生成公钥和私钥。id_rsa.pub是生成的公钥,id_rsa是生成的私钥
b、添加公钥到远程主机上
ssh username@ip “cat >>~/.ssh/authorized_keys” < ~/.ssh/id_rsa_Pub
password:
在上面的命令中提供登录密码
备注:
多数linux发行版中提供了一个叫做ssh-copy-id的工具,可以自动将公钥加入到远程服务器的authorized_key文件中
ssh-copy-id username@ip
4)ssh实现交互式端口转发:
a、将本地主机端口8000上的流量转发到www.kernel.org的端口80上:
ssh -L 8000:www.kernel.org:80 username@ip #将上述命令的username替换成本地主机上的用户名
b、将远程主机上的8000端口上的流量转发到www.kernel.org的端口80上:
ssh -L 8000:www.kernel.org:80 username@remote_machine #将上述命令的remote_machine替换成远程主机的主机名或者ip,username替换成进行ssh访问的用户名
备注:
在进行转发的过程中,这个shell必须保持打开状态,什么时候想停止端口转发,只需要退出shell即可
c、非交互式端口转发:
ssh -fL 8000:www.kernel.org:80 username@localhost -N #只想设置端口转发,而不希望总是保持一个打开状态的shell。
-f指定ssh在执行命令前转入后台运行,-N告诉ssh无需执行命令,只进行端口转发
d、反向端口转发:
适用场景:如果你有一台无法通过互联网进行访问的主机,但是又希望其他用户可以访问到这台主机上的服务,这时候就需要使用到反向端口转发
ssh -R 8000:localhost:80 username@remote_machine #上述命令将远程主机端口8000上的流量转发到本地主机的端口80上

8、sshfs
将位于远程主机上的文件系统挂载到本地挂载点上:(linux发行版默认不包含sshfs,需要使用软件包管理器来自行安装)
sshfs -o allow_other username@remote_machine:/path /mnt/mountpoint #会提示输入密码,输入完成后就可以通过本地挂载点/mnt/mountpoint来访问/path中的数据了
卸载:
umount /mnt/mountpoint

9、网络传输文件
1)ftp:文件传输协议,是一个古老的用于在网络主机之间传输文件的文件传输协议。只有在远程主机上安装有ftp服务器才能使用ftp
lftp username@ftphost
备注:
也可以使用ftp命令用于ftp文件传输。相比较而言,lftp的用法更加灵活。
ftp自动传输:
ftp -i -n $HOST <<EOF
..
..
EOF
2)sftp:secure ftp,是一个类似于ftp的文件传输系统,运行在ssh连接之上。不需要远端运行ftp服务器来进行文件传输,但是必须安装并运行openssh服务器。进入sftp会话之后,命令跟ftp都是一样的,比如get下载文件,put上传文件,quit退出会话等。
备注:
有时候ssh并不运行在22端口上,我们可以通过-oPort来指定端口
例如:sftp -oPort=422 username@hostname
3)rsync:利用差异计算以及压缩技术来最小化数据传输量。相对于cp而言,rsync的优势在于使用了高效的差异算法。另外,它还支持网络数据传输,在进行复制的同时,rsync会比较源文件和目的端的文件,只有当文件有更新时才进行复制。rsync也支持压缩、加密等多种特性。
用法:
rsync -av source destination

#-a表示归档

#-v表示在stdout上打印出细节信息和进度
例子:
a、rsync -av username@ip:/path destination

#rsync命令用于ssh连接远程主机,因此必须使用username@ip这种形式来设定远程主机的地址
b、rsync -av /home/test/ /home/backups

#将源目录中的内容(不包含目录本身)复制到现有的backup目录中
c、rsync -av /home/test /home/backups

#将包括源目录本身在内的内容复制到现有的backup目录中(会在backup目录中创建一个test同名目录)
d、还可以排除部分文件:
–exclude:排除特定文件
$ rsync -avz /home/code/some_code /mnt/disk/backup/code –exclude “*.txt”
–exclude-from:通过一个列表文件指定需要排除的文件
e、在更新时,删除源端已不存在的文件:
默认情况下,rsync不会在目的端删除那些在源端已不存在的文件。使用–delete选项可以删除这些已经不存在的文件
rsync -avz source destination –delete
f、-z选项可以指定在网络传输时压缩数据:
rsync -avz source destination
g、定期备份:创建一个定时任务即可
0 */10 * * * rsync -avz /home/codeuser@IP_ADDRESS:/home/backups
4)scp
语法格式:
scp user@hostname:/path filename #表示将远程主机上的文件复制到当前目录,并指定文件名
备注:
如果ssh没有运行在22端口,使用-oPort指定特定端口
选项:
-r 递归复制
-p 复制文件的同时保留文件的权限和模式
5)lsof
-i:列出系统中的开放端口以及运行在端口上的服务的详细信息(列出本地主机和对应端口以及远程主机和对应端口)
只列出本地主机当前的开放端口:
lsof -i|grep -o “:[0-9]+->”|grep -o “[0-9]+“|sort|uniq
另外一个查看端口服务的命令:
netstat -tnp #列出开放端口与服务

10、创建套接字:
1)设置侦听套接字:
nc -l 1234 #在本机的端口1234上创建一个侦听套接字
2)连接到该套接字:
nc HOST 1234 #如果是在运行着侦听套接字的主机上执行该命令,那么需要将HOST更换成localhost,否则更换成其他主机的ip或者主机名
3)要想发送消息,只需要在执行第2步操作的主机终端输入信息并按回车键即可:
消息会出现在执行第一步操作的主机终端中
nc除了创建套接字,还可以在网络上进行快速文件复制:
1)在接收端执行以下命令:
nc -l 1234 >destination_filename
2)在发送端执行以下命令:
nc HOST 1234 <source_filename

11、iptables:
阻塞发送到特定ip地址的流量:
iptables -A OUTPUT -d 8.8.8.8 -j DROP
阻塞发送到特定端口的流量:
iptables -A OUTPUT -p tcp -dport 21 -j DROP