存档

‘unix’ 分类的存档

awk使用shell中变量的方法

2011年9月3日 没有评论

awk中使用shell变量的方法有三种:

1、使用双引号quoting方法,就是在搜索的正则表达式的pattern中使用shell变量,这里可以直接使用双引号取得shell中的变量

     printf "Enter search pattern: "
     read pattern
     awk "/$pattern/" '{ nmatches++ }
          END { print nmatches, "found" }' /path/to/data

2、使用系统的环境变量:在awk中可以用ENVIRON数组引用系统的环境变量,例子如下

#!/bin/bash
id=1000
export id

awk '\
BEGIN {
    print ENVIRON["id"];
}' test.txt
运行之后输出:1000

3、使用awk assign方法,-v参数

在awk的手册中,-v参数的描述如下:

 -v var=val
       --assign var=val
       Assign the value val to the variable var, before execution of
       the program begins.Such variable values are  avail-able to
       the BEGIN block of an AWK program.

-v参数后面可以给某一个变量赋值,这个就是连接shell和awk中程序的桥梁,这个应该是传递shell中的变量到awk中的正统方法,推荐使用这个方法。

使用例子如下:

#!/bin/bash                                                                                                                         

id=1000

awk -v awkId="$id" '\
BEGIN {
    print awkId;
}' test.txt

输出:1000

参考文献:

http://yanwang.blog.51cto.com/1123232/383259

http://www.gnu.org/software/gawk/manual/html_node/Using-Shell-Variables.html

Popularity: 16%

分类: shell, unix 标签:

freebsd+php+memcache、memcached安装和使用

2010年6月17日 没有评论

Memcache 介绍

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。起初作 者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时 访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcache作者对分布式 cache的理解和解决方案。 memcache完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。

Memcache官方网站:http://www.danga.com/memcached

Memcached服务器端安装:

freebsd下服务器端的memcached使用ports安装非常简单,

cd /usr/ports/databases/memcached
make install clean
rehash
memcached  -p 11211 -l 172.16.236.150 -d -u nobody -P  /var/run/memcached/memcached.pid -m  64M -c 1024 -vv

几个参数的解释:
-p memcached监听的TCP端口
-l 监听的ip地址,172.16.236.150是我服务器的IP地址,如果你需要多个服务器都能够读取这台memcached的缓存数据,那么就必须设定 这个ip
-d 以daemon方式运行,将程序放入后台
-u memcached的运行用户,我设定的是nobody,memcache默认不允许以root用户登录
-P memcached的pid文件路径
-m memcached可以使用的最大内存数量
-c memcached同时可以接受的最大的连接数
如果你希望以socket方式来访问memcached,那么在启动的时候就必须去掉 -l和-p参数,并加上-s参数:
-s memcached的socket文件路径

-vv显示debug信息

PHP Memecache 客户端的安装

PHP下使用Memcache 有3种方式。
1. 使用memcache 扩展 手册上有说明:http://php.net/manual/en/book.memcache.php
2. 使用memcached扩展 手册上有说明:http://php.net/manual/en/book.memcached.php
3. 使用memcache-client.php类库. 网上没有找到具体出处,暂且提供我珍藏的.(稍候上传..)
这三种方式都可以和Memcache缓存系统交互.但是有一些细微差别。

第一种,常见方式,这个扩展在Win环境下使用方便只要去下载一个memcache.dll 配置一下 php.ini就可以了。当然freebsd下配置也很简单。

freebsd下安装:

下载 memcache:http://pecl.php.net/get/memcache-2.2.5.tgz

tar -zvxf memcache-2.2.5.tgz

cd memcache-2.2.5

phpize

./configure

make

make install

最后在/usr/local/etc/php/extension.ini中加上extension=”memcache.so”

安装完毕之后重新启动apache,可以用下面的测试代码检查memcache工作是否正常:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
/* OO API */
 
$memcache = new Memcache;
 $memcache->addServer('192.168.30.192', 11211);
 $memcache->addServer('192.168.30.191', 11211);
 
$tmp_object = new stdClass;
 $tmp_object->str_attr = 'test';
 $tmp_object->int_attr = 123;
 
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
 echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";
 
$get_result = $memcache->get('key');
 echo "Data from the cache:<br/>\n";
 
var_dump($get_result);
 ?>

第二种方式,memcached 的版本比较新,并且使用的是 libmemcached 库。libmemcached 被认为做过更好的优化,应该比 php only 版本的 memcache 有着更高的性能。差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,这也意味着 memcached 会有更高的性能。但安装配置起来也比较麻烦.该扩展目前我没有看到能支持Win平台的。所以只能在freebsd下自行编译安装了
以下是linux安装:
1.首先安装libmemcached请参考:http://www.phpup.net/post/54

2.下载php的memcached:http://pecl.php.net/get/memcached-1.0.1.tgz

3.安装:

1) [root@localhost soft]# tar -zvxf phpmemcached-1.0.1.tgz

2)cd memcached-1.0.1

3) 在此目录下运行phpize(此处phpize是要安装php的开发包后才会有的,因为phpize是在/usr/bin目录下,所以可直接运行,完了会 在此目录下生成configure等文件)

4)在此目录下运行./configure –with-php-config=/usr/local/php/bin/php-config –with-libmemcached-dir=/usr/local/

5)运行 make && make install (实际安装过程中,这一步编译出错)

6)在/etc/php.ini中加入 extension=”memcached.so” 命令行: echo “extension = memcached.so” >> /usr/local/php/etc/php.ini

7)重启apache

第三种方式,使用简单方便。适合新手使用,无须任何php配置,只要一个包含就可以使用了.并非底层,所以性能上面自然是稍逊不少。
以下是使用:
include "memcache-client.php";

文件下载地址: memcached-client-php-0.1.2.tar
..
?>

个人推荐使用第一种 memcached 扩展,毕竟性能不错,新手的话推荐使用 第三种 客户端类库,方便实用。第二种方式没有尝试成功,不知道是什么原因,编译安装出错,以后有空再解决吧。

Popularity: 37%

Shell判断文件,目录是否存在或者具有权限

2010年6月2日 1 条评论

#!/bin/sh

myPath=”/var/log/httpd/”
myFile=”/var /log/httpd/access.log”

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir “$myPath”
fi

#这里 的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir “$myPath”
fi

#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch “$myFile”
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo “$myVar is empty”
exit 0
fi

#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo ‘$var1 eq $var2′
else
echo ‘$var1 not eq $var2′
fi
原文链接:http://www.cublog.cn/u1/42339/showart_1355170.html

Popularity: 12%

分类: linux, shell, unix 标签: ,

linux 实现多台ssh信任 执行命令的操作

2010年6月2日 没有评论

以前发过一篇文章,介绍单台服务器的拷贝,脚本执行scp不用输入密码

其实多台很简单,就是在authorized_keys放入多个rsa_pub信息即可

1. A机上运行:ssh-keygen -t rsa

2. A机上运行:scp /root/.ssh/id_rsa.pub B:/root/.ssh/authorized_keys

3. C机上运行:ssh-keygen -t rsa

4. C机上运行:scp /root/.ssh/id_rsa.pub root@IP:/root/.ssh/   IP     (其中IP是B
机的)

5. 登录到B机,进入/root/.ssh下

6. B机上运行:cat IP >> authorized_keys.

至此,A,C机都可无需密码登录到B机上了, 其他的同样设置

详细信息参见:http://www.zouqingshui.net/headingto3/linux-ssh-command-execute- setting/

Popularity: 10%

分类: linux, unix 标签: ,

脚本执行scp不用输入密码

2010年2月3日 没有评论

有些时候, 我们在复制/移动文件到另一台机器时会用到scp,因为它比较安全。但如果每次都要输入密码,就比较烦了,尤其是在script里。不过,

ssh有另一种用密钥对来验证的方式。下面写出我生成密匙对的过程,供大家参考。

第一步:生成密匙对,我用的是rsa的密钥。 使用命令 “ssh-keygen -t rsa”

代码:

[user1@rh user1]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory ‘/home/user1/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 us@rh.test.com
[user1@rh user1]$

生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提 示输入一

个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒

, 不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa

然后改一下 .ssh 目录的权限,使用命令 “chmod 755 ~/.ssh”
代码:

[user1@rh user1]$ chmod 755 ~/.ssh
[user1@rh user1]$

之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为

~/.ssh/authorized_keys.

代码:

[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/
authorized_keys
user1@rh1′s password:
id_rsa.pub 100% 228 3.2MB/s 00:00
[user1@rh user1]$

之这 样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码

了,用在script上更是方 便。

Popularity: 26%

分类: linux, unix 标签: ,

uninx/linux系统中文件删除后,空间没有释放

2009年11月24日 没有评论

问题

文件被删除后,空间没有被释放

原因

在Linux或者Unix系统中,通过 rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一
个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

解决方法

最简单的方法是 重启,但是某些情况下不便于重启怎么办呢?

首先我们获得一个已经被删除但是仍然被应用程序占用的文件列表:

[bash]$ /usr/sbin/lsof|grep deleted
ora    25575 data   33u      REG              65,65  4294983680
31014933 /oradata/DATAPRE/UNDOTBS009.dbf (deleted)[/bash]

从lsof的输出中,我们可以发现pid为25575的进程持有着以文件描述号(fd)为 33打开的文件/oradata/DATAPRE/
UNDOTBS009.dbf。

在我们找到了这个文件之后可以 通过结束进程的方式来释放被占用的空间。

通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。这是 一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。
应用程序对这种方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题

[bash]$ echo > /proc/pid/fd/fd_number[/bash]

例如,根据之前lsof的输出:

[bash]$ file /proc/25575/fd/33
/proc/25575/fd/33: broken symbolic link to `/oradata/DATAPRE/
UNDOTBS009.dbf (deleted)’
$ echo > /proc/25575/fd/33[/bash]

Popularity: 16%

分类: unix 标签:

Freebsd下mount各种文件格式显示中文方法

2009年11月11日 没有评论

mount 光盘显示中文
mount_cd9660 -C gbk /dev/acd0  /cdrom/
另附上mount NTFS、MSDOS分区显示中文的方法:前提是你的locale环境下设定成如下
LC_CTYPE zh_CN.eucCN
mount ntfs分区显示中文
mount_ntfs -C eucCN /dev/XXX /mnt/XX
mount msdos显示中文
mount_msdos -L zh_CN.eucCN /dev/XXX mnt/XX

Popularity: 6%

分类: freebsd, unix 标签:

freebsd普通用户不能startx 错误: Server must be running with root

2009年11月11日 没有评论

freebsd普通用户不能startx 错误: Server must be running with root

这个说明Xorg执行的权限不够,在root下
chmod u+s /usr/X11R6/bin/Xorg
即可解决问题

无觅相关文章插件

Popularity: 10%

分类: freebsd, unix 标签: