在Linux下使用vim配合xxd查看并编辑二进制文件
在命令模式下键入:
:%!xxd
回到命令模式输入
:%!xxd –r
:setlocal list
:set listchars=tab:>~,trail:.
执行 :setlocal list 命令后,会把 tab 字符显示为 CTRL-I 键的显示字符,实际显示为 ^I。同时会在行末显示一个 $ 字符。默认不会显示空格。
set listchars=tab:>~,trail:. 命令设置 tab 字符显示为 >~~~~ 的样式(假设 tab 字符的显示宽度是 4),设置行末空格显示为点号 .,不显示行首空格和行中间的空格,行末不显示字符。如果需要显示所有空格,可以把 trail 改成 space。
docker ps -a
执行镜像:docker run -it [image id] bash
执行容器:docker exec -it [容器id] bash
启动容器:docker start [容器id]
检查docker引擎:service docker status
重新加载配置文件:systemctl daemon-reload
重启docker: service docker restart
查看配置信息:docker inspect [容器id]
-t的作用是创建一个伪终端, -i是让该容器的标准输入保持打开。这样就可以进入到容器的交互模式。-i -t 一起使用才可以看到我们熟悉的Linux命令提示符。只有 -i 由于没有分配伪终端,界面没有我们熟悉的Linux提示符,但命令结果仍然可以返回。
后面的/bin/bash表示载入容器后运行bash ,docker中必须要保持一个进程的运行,不然容器启动后就会马上kill itself,/bin/bash 表示启动容器后启动bash。
docker exec -it –privileged 9ce3982ba7c5 bash
以root权限进入docker容器
docker exec -it -u root 9ce3982ba7c5 /bin/bash
以root权限进入docker容器
docker run -it –device=/dev/fuse:/dev/fuse –privileged 3171e55a9515 bash
将fuse设备添加到镜像
使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。 甚至允许你在docker容器中启动docker容器。
docker run –name tomcat –cpus 0.1 -m 512M -p 8080:8080 -itd feisky/tomcat:8
通过 -m 512M 选项,给容器设置了 512M 的内存限制。
用 –cpus 0.1 ,为容器设置了 0.1 个 CPU 的限制,也就是 10% 的 CPU。
docker cp ~/lzy.log a365b0626781:/home/
docker cp a365b0626781:/home/lzy.log /root/lzy2.log
docker ps -a
重启docker:systemctl daemon-reload && systemctl restart docker
停止所有容器
docker stop $(docker ps -a -q)
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm
删除全部镜像
docker rmi $(docker images -q)
删除单个镜像
docker rmi
强制删除全部镜像
docker rmi -f $(docker images -q)
Docker 从容器中拷贝文件到宿主机中
docker cp 容器id:容器内文件路径 目标路径
#示例
docker cp 6741xxxxxxxx:/xxxx/xxx/xxx/xxxx/common.log /home/log/yyy.log
docker inspect [container id]
查看容器信息找到容器完整id
docker-tools 给容器添加设备
docker-tools add-device [容器完整id]
docker pull [仓库地址]
用户制作了自己的镜像后,希望将它上传至仓库
docker export命令导出容器
docker save命令保存镜像
目前存储系统的接口已经有aufs, btrfs, devicemapper, vfs,overlay,zfs这6种具体实现。
查看当前使用的存储驱动:docker info
//停止运行中的docker引擎
systemctl stop docker
//启动docker引擎
systemctl start docker
//对原有数据Docker联合文件数据进行备份
cp -au /var/lib/docker /var/lib/docker.bk
创建一个名为our-volume的卷,命令如下:
docker volume create our-volume
检查卷的详细信息
docker volume ls
移除数据卷
docker volume remove our-volume
systemctl show –property=Environment docker
通过docker logs命令可以查看容器的日志。
https://blog.csdn.net/chengxuyuanyonghu/article/details/76560166
docker exec -it -e LINES=$(tput lines) -e COLUMNS=$(tput cols) 容器ID bash
1.Is the docker daemon running?
service docker start
docker.service启动失败:Unit not found的原因及解决办法
https://blog.csdn.net/u013392078/article/details/103800411
A.卸载docker,再重新安装,即可出现docker.socket。
B.创建docker.socket文件,然后systemctl daemon-reload,最后systemctl start docker.service,即可启动成功。
2.No space left on device
https://blog.csdn.net/yilvqingtai/article/details/122934209?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-122934209-blog-111244328.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://www.cnblogs.com/54chensongxia/p/15138314.html
A.df -h或 du -sh * |G 找到用量最大的空间[maxSpace] 和可用的最大空间[avaliableSpace];
B.docker info |grep Root 找到docker的root目录[docker-root];
C.service docker stop 停docker服务;
D.mv [docker-root] [avaliableSpace];
E.构建软链接 ln -s [avaliableSpace] [docker-root];
F.service docker restart;
| ping [ id | host ]: 发送icmp给目标主机 |
ping 可以验证目标主机是否连通
ping ip -t
ping检查主机是否在线的工具。发送ICMP ECHO REQUEST包到目标主机,如果目标主机在线井且不堵塞ping请求,将回复ICMP ECHO REPLY包。单击桌面,右键菜单选择“在终端中打开”。如图1所示 命令选项:-c count, ECHO_REQUEST包发进数量。-i interface address:源地址网络接口。该参数可以是lP地址或网卡名称。-s packetfsize;指定要发送的数据字节数。默认值是56,然后再与8字节的ICMP头数据组台成64字节的ICMP数据。
ping -c 5 -s 2000 192.168.10.127”,发送5个大小为2000字节的数据包
arping是一个在LAN中使用ARP地址解析协议发现目标主机的工具。arping工具测试特定IP地址在网络中是否在线。该命令只能运行本地局域网内,无法跨越路由器和网关,常用的选项为apring –c,在终端中输入命令“arping -c 4 192.168.10.127”,发送四个ping数据包到目标主机。
arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。
fping命令同时向多个主机发送ping (ICMP ECHO)请求,fping通过监视目标主机的回复来判断主机是否可用。如果目标主机发送回应将会从目标记录清单中删除,如果目标主机不响应,该主机将会被标记为不可达。默认情况下,fping将尝试向每个目标发送三个ICMP ECHO包。
fping - send ICMP ECHO_REQUEST packets to network hosts
UNIX和Windows环境都有许多可以用来进行ICMP ping扫描的工具。fping是UNIX环境里久经考验的ping扫描工具之一。早期的ping扫描工具大都需要等待前一个被探测主机返回某种响应消息之后才能继续探测下一台主机是否存在,但fping却能以轮转方式并行地发出大量的ping请求。这么一来,用fping工具去扫描多个IP地址的速度要比ping快很多。
与ping程序相比,fping可以同时向多个主机发送ping请求,您可以在命令行中指定多个目标主机,也可以在某个文件夹里指定需要被检测的主机。默认情况下,fping程序通过目标主机的回复来判断该主机是否在线。如果目标主机发送回应,该主机将会被标记为alive(在线):如果主机在同一段时间内(超过或超过尝试次数)没有进行回应,该主机则会被标记为unreachable(不可访问)。默认情况下fping将尝试向每个目标发送三次ICMP echo数据包。
nbtscan 通过扫描lP地址获取目标NetBIOS名字信息的工具,生成包含对应主机IP地址、NetBIOS计算机名、可用服务、登录用户名和MAC地址的报告
NRW算法是基于Quorum机制的是一种CP(Consistency&Partion tolerance)算法。
NWR策略(又称为Quorum仲裁协议),其中,N为数据的副本总数,W为更新一个数据对象时需要确保成功更新的份数,R为读取一个数据时需要读取的副本个数。
如果W+R>N, 那么久可以保证某个数据不能被两个不同的事物同时读/写。否则,如果有两个事物同时对同一数据进行读/写,那么在W+R>N的情况下,至少会有一个副本发生读/写冲突。
如果W>N/2, 那么可以保证两个事务不能并发写同一个数据,否则,至少会有一个副本发生写冲突。
强一致性:NRW中N=W, R=1, 比如313,616。
弱一致性:NRW中N!=W, R+W>N, 比如634。
最终一致性:暂时有段时间副本之间不一致,但是最终会成为一致。NRW中,N+W<=N, NRW=311
N: 数据复制的份数。
W:更新数据是需要保证写完成的节点数。
R:读取数据的时候需要读取的节点数。
一般采取N = 3, R = 2, W =2。
N至少达到3,大于3则付出更高的成本。小于3无法保障高可用。
W = 2 可以保障大多数写成功。 W未必等于N,则一定存在数据不一致的情况。 冲突解决策略一般有Cassandra使用的client tiemstamps和Riak的Vector clock等,如果无法解决,冲突可能会硬性覆盖或者推到业务代码。
R = 2 能保障读到大多数一致的最新版本。
Quorum机制与NRW算法
https://blog.csdn.net/jeffsmish/article/details/54171812
进程的 PID 不停在变,要么是这些进程在不停地重启,要么就是全新的进程,这无非也就两个原因:
第一个原因,进程在不停地崩溃重启,比如因为段错误、配置错误等等,这时,进程在退出后可能又被监控系统自动重启了。进程本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用相当多的 CPU。
第二个原因,这些进程都是短时进程,也就是在其他应用内部通过 exec 调用的外面命令。这些命令一般都只运行很短的时间就会结束,很难用 top 这种间隔时间比较长的工具发现。
一般当进程非正常退出时,会生成一个core文件,这个文件是进程猝死时内存的转储文件,也称为core dump。
core文件生成时间长,会导致业务进程一直挂着,会导致业务中断。
看是由什么信号触发
常见的段错误信号 4, 7, 11
每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO”, “SIGCHLD”等等。信号定义在signal.h投文件中,信号名都定义为正整数。
具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是从1开始编号的,不存在0号信号。kill对于信号0有特殊的应用。
表:term:信号终止进程;core:进程产生核心存储文件并退出;ignore:忽略该信号;stop:信号停止了进程;cont:信号恢复了一个已停止的进程
| 名 称 | 信 号 值 | 描 述 | SUSv3 | 默认 |
|---|---|---|---|---|
| SIGABRT | 6 | 中止进程 | ● | core |
| SIGALRM | 14 | 实时定时器过期 | ● | term |
| SIGBUS | 7(SAMP = 10) | 内存访问错误 | ● | core |
| SIGCHLD | 17(SA=20,MP=18) | 终止或停止子进程 | ● | ignore |
| SIGCONT | 18(SA=19,M=25,P=26) | 若停止则继续 | ● | cont |
| SIGEMT | undef(SAMP=7) | 硬件错误 | term | |
| SIGFPE | 8 | 算术异常 | ● | core |
| SIGHUP | 1 | 挂起 | ● | term |
| SIGILL | 4 | 非法指令 | ● | core |
| SIGINT | 2 | 终端中断 | ● | term |
| SIGIO | 29(SA=23,MP=22) | I/O时可能产生 | ● | term |
| SIGPOLL | ||||
| SIGKILL | 9 | 必杀(确保杀死) | ● | term |
| SIGPIPE | 13 | 管道断开 | ● | term |
| SIGPROF | 27(M=29,P=21) | 性能分析定时器过期 | ● | term |
| SIGPWR | 30(SA=29,MP=19) | 电量行将耗尽 | term | |
| SIGQUIT | 3 | 终端退出 | ● | core |
| SIGSEGV | 11 | 无效的内存引用 | ● | core |
| SIGSTKFLT | 16(SAM=undef,P=36) | 协处理器栈错误 | term | |
| SIGSTOP | 19(SA=17,M=23,P=24) | 确保停止 | ● | stop |
| SIGSYS | 31(SAMP=12) | 无效的系统调用 | ● | core |
| SIGTERM | 15 | 终止进程 | ● | term |
| SIGTRAP | 5 | 跟踪/断点陷阱 | ● | core |
| SIGTSTP | 20(SA=18,M=24,P=25) | 终端停止 | ● | stop |
| SIGTTIN | 21(M=26,P=27) | 后台进程组从终端读取 | ● | stop |
| SIGTTOU | 22(M=27,P=28) | 后台进程组向终端写 | ● | stop |
| SIGURG | 23(SA=16,M=21,P=29) | 套接字上的紧急数据 | ● | ignore |
| SIGUSR1 | 10(SA=30,MP=16) | 用户自定义信号1 | ● | term |
| SIGUSR2 | 12(SA=31,MP=17) | 用户自定义信号2 | ● | term |
| SIGVTALRM | 26(M=28,P=20) | 虚拟定时器过期 | ● | term |
| SIGWINCH | 28(M=20,P=23) | 终端窗口尺寸发生变化 | ignore | |
| SIGXCPU | 24(M=30,P=33) | 突破对CPU时间的限制 | ● | core |
| SIGXFSZ | 25(M=31,P=34) | 突破对文件大小的限制 | ● | core |
Kill -9一般不会生成core
信号15是主动杀
信号6一般是abort
信号11 是内存引用问题。(比如:指针为空)
如果有 core,则搜日志 “Signal captured” 或 “Assert”;
网络问题中,比较容易出现core问题。
没有core: 说明他们自身没有产生core的机制。
core生成原理,如果信号没有捕获到,也不会生成;还有一种可能性是不是信号量阻塞了。
原因可能如下:
1、没有开启 core:ulimit -c 如果显示为0是没有开启 core 的。
2、没配 core_pattern 路径。
解决方法:
gdb
(gdb) set sysroot /tmp/lib
(gdb) set solib-search-path /tmp/lib:/lib64
(gdb) file [二进制文件]
(gdb) core /tmp/corefiles/core-***
t a a bt查看所有线程堆栈
https://blog.csdn.net/liubangbo/article/details/84841181
https://blog.csdn.net/pcj_888/article/details/106882370
data 目录下面的 diag 目录下找下有没有 blackbox 目录,里面也有 trace 栈
1.blog.csdn.net/shaovey/article/details/2744487
Linux下core文件调试方法
2.andyniu.iteye.com/blog/1965571
linux下生成core dump文件调试方法及设置
3.信号概述