关于openssh

ssh是linux上不可或缺的软件,一般来讲,我们也不关心我们使用的ssh是哪个版本,因为我们很少会用到一些高级的功能。

在学习ansible的时候,发现了一个ssh的高级功能: ControlPersist 选项,可以持久化ssh回话,避免多次操作的重新连接,可以极大地提高ansible的效率,于是怀着极大的好奇想用一把试试;才发现连这个小小的愿望都不能很好地满足。

ssh的ControlPersist选项是从5.6版本开始出现的;我们常用的操作系统是centos6,标配的openssh版本为5.3(https://pkgs.org/download/openssh),如果要升级openssh就需要自己编译,没有找见el6下更高版本的openssh的rpm包,编译却是一件比较麻烦的事情: Linux升级openssh及问题总结 ; 如果使用centos7就好了,标配openssh版本为6.6的(现在最新版本已经7.4了,MAC上的openssh已经是7.2的了),然而从centos6升级到centos7又谈何容易。

新版本的openssh需要更新版本的openssl,如果要通过rpm包的方式升级的话,会带来很多软件的升级,牵一发而动全身

(从此,我有了一个新的想法,有意识地尽量使用centos7)

gdb tui

gdb 的tui模式看起来会舒服一些,不过,有时候可能会由于终端处理不好而花掉,此时可以ctrl-z 推到后台在回来,重绘就好了

进入tui模式的两种方式:

  1. 启动时使用-tui选项
  2. 启动后使用ctrl – x a

 

关于窗口:

一共有4中展示方式:

  1. src: 显示源码窗口和命令窗口(如果是用纯汇编写的二进制程序,则源码窗口不会有东西的)
  2. asm: 显示汇编窗口和命令窗口
  3. split: 显示源码窗口、汇编窗口、命令窗口
  4. regs: 如果当前是源码窗口/汇编窗口和命令,则同时显示寄存器窗口,如果当前是split的,则。。。

ctrl+alt+j 可以快速切换窗口,所以有时候不必太过于纠结使用哪种layout

 

参考资料:

  1. http://mingxinglai.com/cn/2013/07/gdbtui/
  2. 图形界面的gdb: https://blog.csdn.net/shenyuflying/article/details/53931865

关于traceroute偶发超时的问题

刚配好的网络,traceroute测试一下:

-n 是不需要ip反解析,执行会比较快;于是就遇到了今天的问题:快速执行几次该命令就会出现失败(*)的情况,如果执行的慢点儿倒是没有问题

分析:

  1. 可能是网络不稳定
    1. ping 测试,大量请求,无一丢包 (显然不是网络问题)
  2. 限速?
    1. traceroute 涉及的是udp和icmp,不放sysctl -a|grep rate 试试

原因如下:

该问题和内核的两个参数有关:icmp_ratelimit、icmp_ratemask

虽然 ping 也是icmp,但是这种类型的icmp默认没有速率限制,而端口不可达的icmp是有限制的,所以,ping没有问题,traceroute有问题

参考:

icmp_ratelimit : INTEGER
默认值是100 Jiffie
限制发向特定目标的匹配icmp_ratemask的ICMP数据报的最大速率。0表示没有任何限制,否则表示jiffies数据单位中允许发送的个数。(如果在icmp_ratemask进行相应的设置Echo Request的标志位掩码设置为1,那么就可以很容易地做到ping回应的速度限制了)

icmp_ratemask : INTEGER
在这里匹配的ICMP被icmp_ratelimit参数限制速率.
匹配的标志位: IHGFEDCBA9876543210
默认的掩码值: 0000001100000011000 (6168 十进制)
关于标志位的设置,可参考 源程序目录/include/linux/icmp.h

0 Echo Reply
3 Destination Unreachable *
4 Source Quench *
5 Redirect
8 Echo Request
B Time Exceeded *
C Parameter Problem *
D Timestamp Request
E Timestamp Reply
F Info Request
G Info Reply
H Address Mask Request
I Address Mask Reply

* 号的被默认限速(见上表mask)

匹配的标志位: IHGFEDCBA9876543210
默认的掩码值: 0000001100 0 0 0 0 1 1001  (6169 十进制)

0 Echo Reply  掩码匹配

关于cmdline

/proc/$pid/cmdline 记录的是进程的显示名,默认是命令行中的信息,但是也可以修改,比如,php中使用cli_set_process_title()可以修改cmdline;

需要注意的是:

  1. 如果原本的 cmdline 比较长,而修改后的比较短,则cmdline保留原来的长度,多余的部分被修改为’\0’,所以,获取的时候需要处理一下,bash中可以使用strings,php中可以使用trim
  2. 如果原本的cmdline比较短,而修改后的比较长,则会被扩展,而不是截断

 

cmdline vs comm

/proc/$pid/comm 有16字节的限制

PowerShell 入门

PowerShell 是一个可以操作对象的高级shell,是一个支持模块的shell。

如何编写模块?参考:http://www.jb51.net/article/56229.htm 基本上就是在模块目录下写一个包含有一些函数的文件,一个这种文件就是一个模块,然后配之以一个同名(不同扩展名)的manifest文件

 

两种注释方式:

段注释:

 

行注释:

 

实例:

web请求:

方法1:http://blog.csdn.net/qq_34352010/article/details/53572234

方法2:

 

文本处理:

http://www.pstips.net/processing-text-1.html

http://www.pstips.net/processing-text-2.html

http://www.pstips.net/processing-text-3.html

解析url:http://www.pstips.net/processing-text-4.html

获取所有的IPv4地址:

获取ifconfig的ipv4地址:

注意: 正则表达式的正确使用使得事情变得更加利索

 

PowerShell 显示气球提示框: http://www.pstips.net/powershell-displaying-balloon-tip.html

多个对象之间用逗号分隔:

单引号与双引号:

单引号中的单引号,双引号中的双引号:

单引号中连续的两个单引号解释为1个单引号,双引号中连续的两个双引号解释为1个双引号

转移字符

一般都是用反斜线转义,但是powershell中使用反引号来转义,如:

 

命令结果赋值给变量的写法:

使用 $( cmd ) 的写法更舒服一些,更加接近于bash的写法

 

ISE比命令行写起来会舒服一些,不但有提示,还方便查帮助

PowerShell是已模块的形式添加功能的

选中命令时,下面就会出现命令的参数信息,按住ctrl点击命令时,参数信息界面就会隐藏

 

Win7升级Powershell 2.0到3.0

参考: https://www.microsoft.com/en-us/download/details.aspx?id=34595

下载一个十几MB的msu文件,执行安装,重启就行

注意:

如果提示您的系统不支持该更新,则可以尝试更新一下系统,然后在安装,本人遇到问题后,安装了几十个更新之后就可以安装该安装包了;

或者先安装 dotNetFx45_Full_setup.exe  ,在安装上面的下载也可以