2014年2月

Shell单引号和双引号

问题一:

/etc/hosts
192.168.1.1 www.firefoxbug.net

$ awk '{print $1}' /etc/hosts ==>> 打印IP
$ awk "{print $1}" /etc/hosts ==>> 打印整行

这两个打印出来是不一样的,同样是在一个bash下执行。因为$1在双引号里面,是属于弱引用,$1被shell解析了,解析出来是空,可以看看下面的实验。
$ echo $1
$ awk "{print }" /etc/hosts

问题二:

echo '\'' ==>> 等待输入
echo "\"" ==>> 输出"

在单引号的强引用下,所有的转义都已经失效了,所以第一个echo在等待第二个单引号的匹配。

resolv.conf中search作用

reslov.conf中的search主要是用来补全hostname的,有时候域名太长,可以做一个短域名做主机名字,但是DNS解析需要的是FQDN,而在resolv.conf中设置search能进行补全。

vim /etc/hosts
42.120.7.71 www

ping www能通,返回就是42.120.7.71,ping会首先解析hosts
vim /etc/resolv.conf
search firefoxbug.net
nameserver 114.114.114.114

这时候nslookup www
Server:		114.114.114.114
Address:	114.114.114.114#53

Non-authoritative answer:
Name:	www.firefoxbug.net
Address: 42.120.7.71

看到没,search的作用就是补全要访问的短域名

正确的域名解析顺序是:
1. 查找/etc/hosts
2. 根据nameserver查找域名
3. 如果在nameserver查找不到域名就进行search补全,重新走1~2步

shell数组和字典

#!/bin/bash

echo "shell定义字典"
#必须先声明
declare -A dic
dic=([key1]="value1" [key2]="value2" [key3]="value3")

#打印指定key的value
echo ${dic["key1"]}
#打印所有key值
echo ${!dic[*]}
#打印所有value
echo ${dic[*]}

#遍历key值
for key in $(echo ${!dic[*]})
do
        echo "$key : ${dic[$key]}"
done

echo "shell定义数组"

#数组
list=("value1" "value2" "value3")
#打印指定下标
echo ${list[1]}
#打印所有下标
echo ${!list[*]}
#打印数组下标
echo ${list[*]}
#数组增加一个元素
list=("${list[@]}" "value3")

pssh使用

pssh安装

wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz
tar zxvf pssh-2.3.1.tar.gz 
cd pssh-2.3.1/ 
python setup.py install 

远程命令执行

pssh -A -i -H 'username@ip:port' 'execute_cmd'
其中username默认是root,port默认是22,可以省略

$ pssh -A -i -H 'root@117.135.139.195:22' 'ls /' 参数 -A:ssh手动输入登入密码,不然没法登入,除非是免登入机制 参数 -i:把标准输出和错误输出都返回

- 阅读剩余部分 -

Linux read函数深入

之前Linux read函数浅析-高速缓存说到Linux下读写文件都是通过高速缓存区实现的,应用程序要和底层的设备打交道,首先是通过高速缓存区,要是所要读的数据不存在,高速缓存区会帮应用程序代理去“拿”数据,高速缓存区的处理程序会向设备的驱动程序发出读请求,等待数据返回,这里就说说高速缓存区怎么实现和底层设备驱动函数交互。

- 阅读剩余部分 -