8月 022018
 

办法1: 使用ps命令

进程已经活了多长时间了(Age):

这里的 %c %t 不太好记,直接man就好了,或者也可以:

关于ELAPSED 的格式: [[dd-]hh:]mm:ss

看来,这个格式是不能自定义的(比如: 折合成秒),肉眼看起来还是非常友好的,但是,程序处理起来就不大方便(比如: 比较大小,做减法等),当然,也可以写个脚本自己转换

 

办法2:

 

 

相关参考:

 

 Posted by at 上午 11:05
8月 022018
 

UPX 是一个可执行文件压缩工具不同于其他的压缩软件,它:

  • 只压缩可执行文件
  • 压缩后的可执行文件依然是可以直接执行的文件,功能和没压缩的一样
  • 不需要额外的解压缩工具,因为压缩可执行文件相当于给可执行文件套了个壳儿,解压缩的功能已经在压缩后的文件里面了

 

用途:

  • 给病毒文件加壳
  • 压缩二进制文件,方便下载
  • 压缩docker镜像中的可执行文件,提高镜像分发效率

源码:

参考:

 Posted by at 上午 10:26
7月 202018
 

每次查找关心的进程都去ps 再 grep显得好麻烦,而且这是一个非常常用的操作,所以,熟练使用pgrep将有效提高工作效率。

 

如果不看文档直接去pgrep 你关心的东西,可能得不到想要的效果,因为你关心的是进程的参数,而不是进程名,而且只输出pid,似乎也用处不大,所以,你可能非常关心两个选项:

-f: 模拟情况下,只匹配进程名(/proc/$pid/comm),使用-f选项可以匹配整个命令行(/proc/$pid/cmdline);

-a: 默认只输出pid, 使用-a选项可以输出pid 和整个命令行

 

所以,pgrep的正确姿势为:

 

高级用法:

当我们想在 a.sh 中判断a.sh脚本是否已经在执行时,我们可以通过 -o 选项来实现:

如果得到的pid就是自己,则说明没有已经在运行的a.sh;

 

按照ppid来查找:

 Posted by at 下午 1:53
7月 062018
 

stat一个目录时卡死:

(这个错误和十年前遇到的执行du就卡死的问题,如出一辙)

dmesg 错误信息:

 

这个机器早被下线了,看来是下线时清理的不够好,现在还有一个机器挂载这死去的机器的nfs呢:(3年了)

 

 Posted by at 下午 2:37
5月 292018
 

问题: 如题。

现场情况:

  1. 我~/.ssh/下有多个秘钥
  2. 配置了 .ssh/config 文件,不同类型的机器使用不同的秘钥,也有一些机器使用默认的秘钥

问题原因:

  1. ssh-copy-id 默认使用的秘钥并不是 id_rsa.pub,而是最新修改过的秘钥:
  2. ssh 命令默认使用的秘钥是 id_rsa.pub
  3. 所以,ssh-copy-id 和 ssh 默认不同的秘钥时,就会出现上述问题
  4. 说明:
    1. ssh-copy-id 时,会提示使用的秘钥是哪个的:
    2. 可以通过 -i 选项来指定ssh-copy-id来使用哪个秘钥:
 Posted by at 上午 10:08
5月 112018
 

在配置了ansible的机器上启用了ControlPath配置: (这样效率会高一些)

 

然而,我还想在这个机器上使用ssh协议的git,这样不用每次都输入密码,然而,我不想使用默认的ssh key,于是在 ~/.ssh/config 中添加如下配置:

问题来了,如果没有Host * 的配置,git是好使的,有了Host * 的配置就不好使了,测试发现,是因为git不喜欢ControlPath, 然而,我google了一大圈,找不到unset掉ControlPath的方法,只好采用如下方式:

 

参考:

https://deepzz.com/post/how-to-setup-ssh-config.html

 Posted by at 下午 4:31
5月 112018
 

现象:

自从使用了docker容器,在容器中yum安装的软件就怎么着也man不了,man的时候就提示:

通过rpm查看软件包中是否包含man文件,确实包含; 使用rpm -V 也检查不到rpm包损坏; 实际上,man文件是不存在的。

原因:

  1. 我们使用的docker镜像已经被官方精简过了,把所有已安装软件的man页都删除了,这样镜像可以更小
  2. docker镜像中的/etc/yum.conf 也被刻意处理了一下,里面有个tsflags的选项,配置了nodocs,这样的话,新安装的软件也会被自动剔掉man文件(估计rpm知道man文件是被故意删掉的,所以也不报错)

解决办法:

  • /etc/yum.conf 中注释掉:
  • 卸载掉相关软件,重新yum安装

 

注: 上述情况是把docker容器当虚拟机使用的,并不太在乎镜像的大小

 

 Posted by at 下午 3:23
3月 052018
 

当vsftpd在容器里面,而且容器IP又是host内部的私有IP的情况,client采用passive模式来下载数据能行得通吗? 可以的

  1. passive模式下,vsftpd需要listen临时端口来传输数据,所以docker创建容器时,不仅要暴露21端口,还要暴露可能listen的临时端口,为了不映射太多端口,可以在vsftpd的配置文件中配置可能的临时端口的范围
  2. passive模式下,vsftpd需要通过协议内容告知client临时端口及IP地址,然而,容器网卡IP地址显然是不能被client直接访问到的,庆幸的是,vsftpd配置文件中有关于可以告知client的ip地址的配置,该ip地址并不要求本机上必须有的,显然该配置是给类似情况准备的

 Posted by at 下午 6:13