grep awk 之buffer问题

问题

如下命令可以看到我们预期的输出:

如下命令不能看到预期的输出: (不是立即看到,其实,只要等等她就会来)

原因: 第一个grep命令buffer了输出

解决办法: 添加 –line-buffered 选项

 

同样, awk 也有类似问题,但是使用awk就没有添加选项这么幸运了;可以通过在awk的输出后面添加 system(“”); 来刷新buffer,如:

参考资料: http://unix.stackexchange.com/questions/33650/why-does-awk-do-full-buffering-when-reading-from-a-pipe

 

各种代理(tsocks/privoxy/proxychains)

参考:

tsocks 代理

  • 通过重写connect等网络函数实现
  • 主要是一个 libtsocks.so ;tsocks本身是个脚本,原理是设置LD_PRELOAD 环境变量
  • tsocks的几种用法(参看 tsocks脚本)
    • tsocks command
    • tsocks <CR>  (这样会启动一个新的shell)
    • . tsocks -on    (在当前shell中设置 LD_PRELOAD 环境变量,注意: 前面需要一个 dot 即: . tsocks -on 或写作:  source tsocks -on)
  • man页: http://linux.die.net/man/8/tsocks   or  man 8 tsocks
  • 配置文件 (man 5 tsocks.conf)
    • path { … } 可以有多个,但是每个path中至少含有 server 指令和 reaches指令

how-to-install-oracle-java-on-ubuntu-14-04

参考:

 

说明:

使用 apt-get install oracle-java7-installer 方式安装时,会自动从官方下载JDK,如果下载到中途失败,再次执行该命令则可以从上次下载到的地方继续下载 (如果kill -9 杀死apt进程是不可取的)

多个java版本共存的配置切换:

 

ssh and tty

问题

通过ssh连接到服务器后,当终端窗口放大后,打开vim依然使用原来的小的区域

分析

  • 查看当前tty的size

     
  • 查看当前tty的更多信息

     
  •  resize 命令更新tty信息

    不幸的是,一般都没有这个命令,ubuntu中有这个命令,而且应该是在终端窗口变化时自动执行了,所以,在ubuntu中打开一个终端后缩放是及时生效的
  • 因为当终端窗口发生变化时,虽然不能重绘已有的内容,但是后续执行的ls命令都是能感知到窗口大小的变化的,为什么其他命令(如 vim)感知不到? resize命令是如何实现的?如何安装resize命令? 

 

参考资料:

http://superuser.com/questions/390935/how-can-i-get-terminal-to-repaint-the-contents-when-i-resize-the-terminal

http://stackoverflow.com/questions/19157202/how-do-terminal-size-changes-get-sent-to-command-line-applications-though-ssh-or   这个写的详细些

http://teaching.idallen.com/dat2330/06w/notes/terminal.txt

如何使用wireshark+ssh+tcpdump抓取远程数据包

tshark + wireshark+ssh

 
tcpdump + wireshark + ssh

 
fifo方式

 
原文地址:
http://www.commandlinefu.com/commands/view/4373/analyze-traffic-remotely-over-ssh-w-wireshark

关于http代理

疑问

http代理时,域名解析发生在client端还是代理服务器端?

使用gcloud sdk时,发现域名是在本地解析的,由于是在内网,本地解析到的ip比较特殊,如此以来,即使设置代理也无法规避这个问题,目前我的解决办法就是设置host,当然,修改本地的dns也行,只是内网域名就无法解析了

先说结论吧:

  • 只有python中的代理的实现是在本地解析域名的,curl/golang中设置代理时,域名的解析都是发生在代理服务器上的
  • 似乎在代理服务器上解析显得更合理一些,如果你要访问的地址有破坏和谐的嫌疑,则,你在dns解析域名的时候会被劫持的,或者无法得到任何响应,比如,歌华就由这样的功能;虽然有cryptDNS,但是还是有些麻烦,而且使用cryptDNS的多半是有不良行为的(至少现在是),也很容易被和谐掉。结论:在代理服务器上解析更加合理一些
  • 对于不同的agent,在本地解析还是在代理服务器上解析这事儿也没有个标准;就比如firfox有个选项:network.proxy.socks_remote_dns,允许设置是在本地解析还是在代理服务器上解析。(参考 http://serverfault.com/questions/337791/if-i-am-using-ssh-for-a-socks-proxy-do-dns-connections-go-through-it

分析

情形1:

  1. 不需要connect方法,显然(不显然吗)这种方式只支持http的情况,不支持https的情况
  2. 域名解析发生在代理服务器上

事实上,如果访问的是https的地址,自然会通过使用connect方法的方式实现

情形2:

  1. 使用connect方法 (通过给curl添加 -p 参数实现, 这应该是比较常见和通用的办法)
  2. 域名解析发生在代理服务器上

下面我们看看Golang中关于代理的实现,重点关注域名解析发生在了哪里:

golang代码:

通过环境变量设置代理:

 

http请求:

  1. 和curl实现一致
  2. 域名解析发生在代理服务器上

https请求:

  1. 和curl实现一致
  2. 域名解析发生在代理服务器端
  3. 意外发现: golang关于https请求的实现中,代理的connect和后续的数据交互发生在不同的线程中(看pid就能知晓)

python中的实现

脚本: (这里的httplib2是gcloud sdk中的)

 Http请求:

  1. 即使是http请求,也默认使用connect方法
  2. 域名是在client端解析的
 

网站体验调查方式

在访问微软的帮助页面(https://technet.microsoft.com/en-us/library/jj657728%28v=exchg.150%29.aspx)时,会弹出一个窗口,提示说不要关闭该弹出窗口,当浏览完(即:离开或关闭该页面)时,弹出窗口就会自动弹出到用户的视线内,然后填写一个使用体验的答卷.

问题:弹出窗口是如何知道原来的页面已经关闭了呢?应该可以有多种方法