1.killall命令可以使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程
killall 进程名
通过网络端口来访问运行在 docker 容器内的服务。
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。
实现通过端口连接到一个 docker 容器。
网络端口映射
创建了一个 python 应用的容器。
runoob@runoob:~$ docker run -d -P training/webapp python app.py
fce072cc88cee71b1cdceb57c2821d054a4a59f67da6b416fceb5593f059fc6d
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。
我们使用 -P 参数创建一个容器,使用 docker ps 可以看到容器端口 5000 绑定主机端口 32768。
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
两种方式的区别是:
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。
runoob@runoob:~$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py95c6ceef88ca3e71eaf303c2833fd6701d8d1b2572b5613b5a932dfdfe8a857c
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
runoob@runoob:~$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES6779686f06f6 training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5000->5000/udp drunk_visvesvaraya95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
docker port 命令可以让我们快捷地查看端口的绑定情况。
runoob@runoob:~$ docker port adoring_stonebraker 5000127.0.0.1:5001
Docker 容器互联
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
容器命名
当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器,例如:
runoob@runoob:~$ docker run -d -P --name runoob training/webapp python app.py43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441
可以使用 docker ps 命令来查看容器名称。
runoob@runoob:~$ docker ps -l
CONTAINER ID IMAGE COMMAND ... PORTS NAMES43780a6eabaa training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp runoob
新建网络
下面先创建一个新的 Docker 网络。
$ docker network create -d bridge test-net
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
连接容器
运行一个容器并连接到新建的 test-net 网络:
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络:
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
点击图片查看大图:
下面通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。
如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。
apt-get update
apt install iputils-ping
在 test1 容器输入以下命令:
同理在 test2 容器也会成功连接到:
这样,test1 容器和 test2 容器建立了互联关系。
如果你有多个容器之间需要互相连接,推荐使用 Docker Compose,后面会介绍。
配置 DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
$ docker run -it --rm ubuntu cat etc/resolv.conf
手动指定容器的配置
如果只想在指定的容器设置 DNS,则可以使用以下命令:
$ docker run -it --rm host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
参数说明:
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
Linux系统如何设置定时重启,本文将针对此问题进行详细说明。
1.安装crontab 服务器基本都是默认安装的,如果没有安装可以根据以下命令进行安装。
Centos安装命令:
“yum install vixie-cron crontabs chkconfig crond on service crond start”。
Debian系统:
“apt-get install cron /etc/init.d/cron restart”。
2.输入“crontab -e”进入编辑。
3.输入a进入编辑状态(或者按insert),然后输入“16 26 * * * /sbin/reboot ”。( 16 21表示每天下午4点26分重启),然后按“Esc :”输入“wq”进行退出保存
4.然后输入
“service crond restart”
重启一下命令即可。
Iftop工具主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同哪台机器间的流量大小,非常适合于代理服务器和iptables服务器使用,这样可以方便的查看各客户端流量情况。iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。
1.安装iftop-编译安装
如果采用编译安装可以到iftop官网下载最新的源码包。
安装前需要已经安装好基本的编译所需的环境,比如make、gcc、autoconf等。安装iftop还需要安装libpcap和libcurse
安装所需要的依赖包
yum -y install flex byacc libpcap ncurses ncurses-devel libpcap-devel
2.安装步骤
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz #下载安装包
tar zxvf iftop-0.17.tar.gz #解压
cd iftop-0.17 切换到目录
./configure --prefix=/usr/local/iftop #配置安装目录
make && make install #编译、安装
3.运行iftop,必须以root身份运行效果图如下
监控某网卡:iftop -i eth0 -n
同时显示是什么服务:iftop -i eth0 -n -P
4.iftop相关参数
常用的参数
-i 设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n 使host信息默认直接都显示IP,如:# iftop -n
-N 使端口信息默认直接都显示端口号,如: # iftop -N
-F 显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h (display this message),帮助,显示参数信息
-p 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b 使流量图形条默认就显示;
-f 这个暂时还不太会用,过滤计算包用的;
-P 使host信息及端口信息默认就都显示;
-m 设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按< 根据左边的本机名或IP排序; 按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。
拓扑如下所示:
备注:R3和R4模拟不同出口的ISP运营商路由器。
具体配置(各接口IP的配置略,R5上有指向R2的默认路由)
R3、R4运行OSPF:
router ospf 1
network 0.0.0.0 255.255.255.255 area 0 \\直接将所有网段通告了
R2:
interface Ethernet0/0
ip address 1.1.1.2 255.255.255.0
ip nat outside
interface Ethernet0/1
ip address 10.45.1.1 255.255.255.0
ip nat outside
interface Ethernet0/3
ip address 192.168.1.1 255.255.255.0
ip nat inside
ip route 0.0.0.0 0.0.0.0 10.45.1.3
ip route 0.0.0.0 0.0.0.0 1.1.1.1
ip nat inside source route-map isp_a interface Ethernet0/0 overload \\分组被nat时要通过整个nat列表顺序(sh run时)过滤的,第一条匹配不再执行第二条
ip nat inside source route-map isp_b interface Ethernet0/1 overload
access-list 100 permit ip any any
route-map out_a permit 10
match ip address 100
match interface Ethernet0/0 \\匹配接口,强制nat的出口,从而指定nat列表中的条目。所以这条命令在多出口nat时很重要
route-map out_b permit 10
match ip address 100
match interface Ethernet0/1
验证:
R2(config)#do ping 2.2.2.2 sou 192.168.1.1
R2(config)#do ping 10.45.2.1 sou 192.168.1.1
看到ping两个出口isp都显示不可达。
为解决这种问题,将两条默认路由的管理距离修改一下。在这里将ip route 0.0.0.0 0.0.0.0 1.1.1.1 管理距离修改为5
R2(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.1 5
继续验证:
R2(config)#do ping 2.2.2.2 sou 192.168.1.1 \\只能走out_b但是不可达
R2(config)#do ping 10.45.2.1 sou 192.168.1.1 \\可达
到此解决了双出口路由冲突的问题。主备链路也形成,当R2出口到达ISPB之间出故障时,指向out_b的默认路由将消失并被指向out_a的默认路由取代,从而所有数据往out_a走。这种主备配置方法与接下来的介绍的另一种配置方法效果一样,但另一种的扩展性很好,可以对更远的ISP目标进行监测,如DNS等,从而将监测的结果决定默认路由在路由表中的存在与消失。
在双出口拓扑中,一般使用的技术有如下三种:
A、负载均衡法,即将内网分成两部分,一部分走out_a,另一部分走out_b。配置要点如下,
access-list 100 permit ip 192.168.1.0 0.0.0.127 any
access-list 110 permit ip 192.168.1.128 0.0.0.127 any
route-map nat1_iapa permit 10 \\在用路由映射表做nat
match ip address 100
match interface Ethernet0/0
route-map nat2_ispb permit 10 \\在用路由映射表做nat
match ip address 110
match interface Ethernet0/1
route-map route1 permit 10 \\在192.168.1.1接口上使用route1的策略路由
match ip address 100
set ip next-hop 1.1.1.1
route-map route1 permit 20
match ip address 110
set ip next-hop 10.45.1.3
注意这里没有配置默认路由。
由于这种没有备用链路的负载均衡配置法,当其一ISP出现故障就会使部分用户瘫痪,所以很少有人使用这种配置。
B、主备链路法,正常时使用主链路,当主链路出现故障时,使用备链路。这种配置法虽然也不是最佳方法,但里边的技术要点很重要,下面将具体介绍此配置法。
接着第1)步的配置,把双线形成主备链路。配置如下:
ip sla monitor 11 \\启用监测服务协议(sla全名Service-Level Agreement,服务等级协议),监测某服务的运行状态
type echo protocol ipIcmpEcho 1.1.1.1 source-interface Ethernet0/0 \\定义监测服务的内容
frequency 5
ip sla monitor schedule 11 life forever start-time now \\执行监测服务的时间等
ip sla monitor 22
type echo protocol ipIcmpEcho 10.45.1.3 source-interface Ethernet0/1
frequency 5
ip sla monitor schedule 22 life forever start-time now
track 1 rtr 11 reachability \\跟踪对象(track)用于跟踪ip sla操作的状态
track 2 rtr 22 reachability
ip route 0.0.0.0 0.0.0.0 1.1.1.1 5 track 1 \\将跟踪对象与该路由关联起来。
ip route 0.0.0.0 0.0.0.0 10.45.1.3 2 track 2
从默认路由与跟踪对象的关联,可知以out_b为主链路,out_a为备。
这种主备链路技术还有一种配置方法可以实现,比如与ISPB连接使用OSPF协且在ISPB端里边通告了默认路由。而与ISPA连接使用默认路由且一定要将管理距离修改大于OSPF的默认通告路由,这样在路由表中只显示ospf的默认路由了,当ospf端出现故障时,由于没有收到对端ospf的通告(即没有ospf默认路由),这时指向IPSA的默认路由将在路由表中显示,从而完成主备切换。
Centos7系统如何使用basename命令剥离文件名后缀?本教程以Centos7系统为例
本配置适用于Centos6,7版本
1.命令概述
basename - 从文件名中剥离目录和后缀
basename命令用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和输入文件名称有所差异的文件名称。
2.命令格式
basename 名称 [后缀]
basename 选项
3.常用选项
显示去掉目录成分后的NAME. 如果指定了SUFFIX,就同时去掉拖尾的
SUFFIX.
--help
显示帮助信息, 然后结束
--version
显示版本信息, 然后结束
4.参考示例
4.1 显示文件名,不包含目录
[deng@localhost ~]$ basename /home/deng/scott_data.sql
4.2 显示文件名,不包含目录,不显示后缀
[deng@localhost ~]$ basename /home/deng/scott_data.sql .sqll
scott_data
4.3 显示文件名,不包含目录,不显示后缀
-s指定移除的后缀
[deng@localhost ~]$ basename -s .sql /home/deng/scott_data.sql
scott_data
4.4 将多个参数按照顺序输出
[deng@localhost test]$ basename -a ./20190712.log ./20190713.log
20190712.log
20190713.log
4.5 显示最后一个目录的名字
如果最后一个是目录,那么就会显示最后一个目录的名字
[deng@localhost test]$ basename /home/deng/share/
Share
1.首先备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3.添加EPEL
CentOS 6
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
CentOS 7
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
4.清理缓存并生成新的缓存
yum clean all
yum makecache
5.查看yum 源,yum repolist。
1.使用该命令创建临时目录:`mkdir /new` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/152134fca061f.jpg) 2.使用该命令将磁盘挂载到临时目录:`mount /dev/sdb1 /new` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/1521340dc0f84.jpg) 3.使用该命令将目标目录所有数据复制到临时目录:`cp -R /home/* /new` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/15213419775d9.jpg) 4.使用该命令可以腾出空间给原来的磁盘:`rm -rf /home/*` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/152134a931573.jpg) 5.使用该命令解除挂载:`umount /new` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/1521348c0cf01.jpg) 6.使用该命令删除临时目录:`rm -rf /new` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/1521345972b6b.jpg) 7.使用该命令挂载目标目录到磁盘:`mount /dev/sdb1 /home` ![img](https://public-1251015552.cos.ap-guangzhou.myqcloud.com/Uploads/image/2023-11-14/152134f05e9c3.jpg)
BFD(Bidrectional Forwarding Detection)双向转发检测,用于快速检测系统设备之间的发送和接受两个方向的通信故障,并在出现故障时通知生成应用。BFD广泛用于链路故障检测,并能实现与接口、静态路由、动态路由等联动检测。本文将介绍如何在华为设备上配置BFD与OSPF联动,以提高链路的可靠性。具体拓扑如下:
1.IP地址的配置
R1:
inter g0/0/1
ip address 10.0.13.1 24
inter g0/0/0
ip address 10.0.12.1 24
R2:
inter g0/0/0
ip address 10.0.13.13 24
R3:
inter g0/0/0
ip address 10.0.12.12 24
配置ospf协议实现路由通信
R1:
ospf 1
area 0.0.0.0
network 10.0.12.0 0.0.0.255
network 10.0.13.0 0.0.0.255
R2:
ospf 1
area 0.0.0.0
network 10.0.13.0 0.0.0.255
R3:
ospf 1
area 0.0.0.0
network 10.0.12.0 0.0.0.255
area 0.0.0.1
2.配置bfd与ospf联动
配置BFD session需要在系统全局下开启BFD,并且在OSPF视图下启用联动BFD。
R1:
bfd // 启用bfd
quit
ospf 1
bfd all-interfaces enable //在osp视图下启用联动bfd
R2:
bfd
quit
ospf 1
bfd all-interfaces enable
3.display bfd session all查看bfd会话
在服务器运维的过程中,我们会发现个别宿主机的网速正常,但是Hyper-V虚拟机延时高,在排除掉ARP攻击和网速限制的因素后,可以判断问题是否是因为系统默认启用了虚拟机设备队列导致的。
虚拟机设备队列(Virtual Machine Device Queue,VMDq),这是一个专门用于提升网卡的虚拟化IO性能的技术,旨在通过加速网络数据从物理适配器传输至相应虚拟机来提高网络性能,但似乎对某些非Intel的网络适配器产生相反的效果,导致虚拟机的网络性能显著下降。当遇到此类问题时,我们可以试着禁用宿主机网卡的虚拟机设备队列功能,虚拟机延时高的问题或许就迎刃而解了。
那么如何禁用虚拟机队列呢?
1.打开宿主机的管理工具-计算机管理-设备管理器-网络适配器
2.在网络适配器列表中,右键选中和Hyper-V绑定的物理网卡,然后点击属性:
3.在弹出的网卡属性配置对话框中,将界面切换至高级,在属性列表中找到虚拟机队列选项,然后将值修改为已禁用,最后点击确定即可。