2014年5月13日

命令标准输入

一个目录里的内容
IN[~]>>>ls -l 
total 56732 -rw-rw-r-- 1 minix 1236 Apr 29 09:19 
3g_total.sh -rwxr-xr-x 1 minix 50963038 Mar 26 08:36 
ap.log* -rw-r--r-- 1 minix 7031684 Nov 27 11:51 
VNC-Server-5.0.6-Linux-x86.deb -rwxrwxr-x 1 minix 543 Jan 1 23:36 
aa.sh* drwxr-xr-x 4 minix 4096 Feb 28 20:34 
aaa/ -rw-rw-r-- 1 minix 685 Dec 18 14:36 
check_status.sh -rw-rw-r-- 1 minix 246 Apr 25 16:31 
db.rb -rwxr-xr-x 1 minix 636 Oct 21 2013 
execltocvs.rb* -rw-rw-r-- 1 minix 731 Apr 23 10:00 
gr.rb -rw-rw-r-- 1 minix 61 Apr 30 10:12 
ip.txt drwxr-xr-x 3 minix 4096 Mar 5 22:23 
kibana/ -rwxrwxr-x 1 minix 1150 May 4 14:51 
log.rb* drwxrwxr-x 16 nagios 4096 Mar 15 2013 
nagios/ drwxrwxr-x 4 minix 4096 Mar 5 20:35 
nagios_dir/ drwxrwxr-x 3 minix 4096 Aug 7 2013 
operation/ -rw-rw-r-- 1 minix 0 Apr 30 10:12 
ping.log -rw-rw-r-- 1 minix 124 Apr 30 10:13 
ping.rb -rw-rw-r-- 1 minix 175 Sep 2 2013 
red.rb drwxr-xr-x 3 minix 4096 Sep 13 2013 
setup123/ drwxrwxr-x 2 minix 4096 Sep 3 2013 
sock/ -rw-rw-r-- 1 minix 1061 Aug 15 2013 
t.sh -rw-rw-r-- 1 minix 182 Apr 21 18:29 
te.rb -rw-rw-r-- 1 minix 259 Jul 18 2013 
test.rb -rw-rw-r-- 1 minix 319 Apr 17 10:09 
ton.py drwxrwxr-x 7 minix 4096 Apr 17 09:48 tornado-3.2.0/

使用echo将输入的内容写入文件 
IN[~]>>>echo `\ls` > aa.txt 
IN[~]>>>cat aa.txt 
3g_total.sh ap.log aaa aa.sh aa.txt check_status.sh db.rb execltocvs.rb gr.rb ip.txt kibana log.rb nagios nagios_dir operation ping.log ping.rb red.rb setup123 sock te.rb test.rb ton.py tornado-3.2.0 t.sh VNC-Server-5.0.6-Linux-x86.deb 
IN[~]>>>

下面完整输出命令的标准输出(这才是我要的效果)  
IN[~]>>>cat << EOF > aa.txt 
`\ls` 
EOF 
IN[~]>>>cat aa.txt 
3g_total.sh 
ap.log 
aaa 
aa.sh 
aa.txt 
check_status.sh 
db.rb 
execltocvs.rb 
gr.rb 
ip.txt 
kibana 
log.rb 
nagios 
nagios_dir 
operation 
ping.log 
ping.rb 
red.rb 
setup123 
sock te.rb 
test.rb 
ton.py 
tornado-3.2.0 t.sh 
VNC-Server-5.0.6-Linux-x86.deb 
IN[~]>>>

2014年3月25日

ruby正则

下面一行被我用正则匹配出来了,我还真佩服自己的耐心!
2014-03-05T03:49:43+08:00 autelanmaster eag1_0[1421]: eag_radius.c:1002:RadiusAcctRequestUpdate___UserName:73570,UserIP:20.3.141.241,Sessiontime:7200,SSID:shanlink,authtype:Portal,ApMAC:00-1F-64-EB-7C-CC,UserMAC:F8-A4-5F-C8-E9-B3,NasID:1
用ruby写的代码如下(其实我的编码水平就是个菜头):
  1 #!/usr/bin/env ruby
  2 #
  3 str = '2014-03-05T03:49:43+08:00 autelanmaster eag1_0[1421]: eag_radius.c:1002:RadiusAcctRequestUpdate___UserName:73570,UserIP:20.3.141.241,Sessiontime:7200,SSID:shanlink,authtype:Portal,ApMAC:00-1F-64-EB-7C-CC,UserMAC:F8-A4-5F-C8-E9-B3,NasID:1'
  4 value = str.match /(^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}) (\w+)\s(\w+\d_\d\[\d{4}\]:)\s(\w+_\w+\.\w:\d+:\w+__\w+:\d+\,\w+:)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\,\w+:\d+,\w+:)(shanlink)(,\w+:\w+,\w+:)([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-    F]{2}-[0-9A-F]{2})(\,\w+:)([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2})(\,\w+:\d)$/
  5 puts value[1, 5, 9, 12]

我要得到的结果是value的 [1,5,9,11] .这段代码还不是正确的。不过要拿出来已经很容易了。
应该有更好的办法的,只是我现在不知道而已!

2014年3月16日

osx10.6.8无法安装homebrew

IN[/data/software]>>>ruby homebrew.rb
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press ENTER to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> Downloading and Installing Homebrew...
dyld: Library not loaded: /usr/lib/libcurl.4.dylib
  Referenced from: /usr/libexec/git-core/git-remote-https
  Reason: Incompatible library version: git-remote-https requires version 7.0.0 or later, but libcurl.4.dylib provides version 6.0.0
Failed during: git fetch origin master:refs/remotes/origin/master -n

安装了 Snow Leopard 10.6.7后, 要使用brew来安装一些软件。我的办法就是将homebrew.rb文件下载下来,然后运行。不过运行过程出现上面的错误信息。
出现这个错误信息是因为curl的版本太低,无法运行git来下载。我的办法就是在网上下载一个最新的curl下来,然后自己编译安装(一开始是没有编译器的,要安装XCODE才可以). 记得要使用--prefix将它指定到一个地方,这样方便查找。编译完成后执行下面的命令:

mv /usr/lib/libcurl.4.dylib /usr/lib/libcurl.4.dylib.old   #将其改名字
ln -s /curl/install/diretcory/lib/libcurl.4.dylib /usr/lib/ #将编译好的curl下的lib/libcurl.4.dylib目录软链接到/usr/lib目录下


再一次运行 ruby homebrew.rb 就成功了!

git证书

昨天在安装ruby2.0的时候无法安装,再想下因为之前装了xcode3.2.1和xcode4,觉得是编译的版本问题,然后在/Developer/Library下运行那两个uninstall脚本将全部都删除。
然后再使用brew的时候就出现了下面的错误情况:
minixs-MacBook-Pro% brew update
Initialized empty Git repository in /usr/local/.git/
fatal: unable to access 'https://github.com/Homebrew/homebrew.git/': SSL certificate problem: unable to get local issuer certificate
Error: Failure while executing: git fetch origin

一开始觉得是git使用了curl来拉github.com上面的东西,因为没证书导致出现,因为curl可以使用参数--cacert来指定证书文件,所以拼命在找/usr/local/Library/Homebrew/目录下的所有文件,看下里面有没curl,有的话就加上这个参数。哪知道都没有!
搞了一会后再想下,因为github.com是使用https来传输,那git也有可以是缺少证书才不能连,然后根据这个线索上google搜索
"git SSL certificate problem: unable to get local issuer certificate"
然后得到了一个正确的结果:
git config --system http.sslcainfo /usr/share/ssl/cacert.pem
这样的意思是加上sslcainfo的信息,而/usr/share/ssl/cacert.pem文件是网上下载的。运行上面一行后再运行
brew update
就成功了!唉!

2014年3月2日

OSX安装其它版本xcode

  我的macbook是10年买的,前天之前都是使用10.9.1,用起来觉得不是很顺畅。因为10.6.7是刚买回来时默认安装的系统,而且还送了一个10.6.7的安装DVD,我昨天就拿来重装了。很悲剧的一件事就是APPLE官方不会再对10.6进行维护。如果打开APP STORE来进行更新,是无法找到任何可用的更新的。我只能上网找10.6.8的更新包和一些可以安全更新下载安装。
  如果要使用到brew来安装软件的话,必须得安装xcode或GCC来。我不喜欢GCC,只能用XCODE了,不过带UI的XCODE太大了,有4G左右。而xcode command line tool 3.2.6又不到。使用xcode 4.XX以上版本又无法安装。 刚好在一个Blog上看到可以使用高版本的XCODE来将到10.6.8上。我试过安装可以,就将过程写出来,供以看重装系统时方便安装。
  1. 下载一个高版本的command line tool for xcode 
  2. 点击下载好的command line tool for xcode,点击后就会被挂载。使用Terminal进入/Volumes/下可以看到可以看到 
  3. 运行下面的命令
      cd mkdir osx-gcc cd /Volumes/Command\ Line\ Tools 
      cp -r * ~/osx-gcc cd ~/osx-gcc 
      mkdir pkg 
      mv Command\ Line\ Tools.mpkg pkg/install.mpkg 
      cd pkg 
      xar -xvf install.mpkg
    上面的意思是“创建一个目录(这里是osx-gcc),将挂载出来的XCODE的内容全部复制到osx-gcc下。在osx-gcc目录下再创建一个pkg目录,将文件Command\ Line\ Tools.mpg移到pkg目录下改名为install.mpkg并解压缩

  4. 解压缩后会编辑文件Distribution,将里面第10行的
      var majorOSVersion = '10.7';
     改为
      var majorOSVersion = '10.6';
     然后保存。
     因为我是下载Lion版本的xcode, 所以majorOSVersion = '10.7'

  5. 恢复安装内容
      rm install.mpkg 
      xar -c . -vf ../install.mpkg 
      cd .. open install.mpkg
     这里是将pkg目前下的install.mpkg文件删除,然后重新压缩并放到上一级目前,也就是osx-gcc目前下面,退回到osx-gcc目前下运行刚压缩的install.mpkg。 这时候就会弹安装提示框,按提示点击下一步可以了。

  6. 安装过程完毕。

 其实里面最重要的就是修改Distribution里面的版本信息然后再重新打包安装!

2012年2月16日

更新dhclient.conf以防resolv.conf被改

有时使用ssh登录FreeBSD时会很慢,为什么呢?
是因为ssh要进行"DNS反查(查询主机IP所对应的域名)",所以在登录时候会很慢.有两个方法可以解决:
1) 编辑 /etc/ssh/sshd_conf , 将 #UseDNS yes 取消注释,设为no ,重启sshd
2) 编辑 /etc/resolv.conf(没有就新建),在里面写入DNS,如 nameserver 8.8.8.8.

使用2)的重启之后你会觉得第二个方法行不通,因为ssh登录还是很慢.这又为什么呢?
当再一次查看/etc/reslov.conf文件的时候就会发现,里面的内容不是你的内容.
你可以vim /sbin/dhclient-script文件的add_new_resolv_conf()函数时会发现:/etc/resolv.conf里面的内容是被替换的.
那解决的方法也是的,还不止一个,有二个!
1) 直接将 /sbin/dhclient-script文件的add_new_resolv_conf函数注释.
2) 在/etc/dhclient.conf文件里加上一句:

prepend domain-name-servers 8.8.8.8, 8.8.4.4;
man dhclient.conf里prepend小节的内容是
prepend { [option declaration] [, ... option declaration] } If for some set of options the client should use a value you sup‐ ply, and then use the values supplied by the server, if any, these values can be defined in the prepend statement. The prepend statement can only be used for options which allow more than one value to be given. This restriction is not enforced - if violated, the results are unpredictable.
重启之后查看/etc/resolv.conf,会发现多了两行!