分类 "Linux/Unix" 的存档.

Linux下DIG命令的基本用法

dig命令是一个用于询问 DNS 域名服务器的灵活的工具。
它执行 DNS 搜索,显示从受请求的域名服务器返回的答复。
多数 DNS 管理 员利用 dig 作为 DNS 问题的故障诊断,因为它灵活性好、易用、输出清晰。
在 unix 和 linux 下,建议大家使用 dig 命令来代替 nslookup。 dig 命令的功能比 nslookup 强大很多,不像 nslookkup 还得 set 来 set 去的,怪麻烦的。
下面是 dig 的一些比较常用的命令:

  # dig 最基本的用法

  dig @server sina.com.cn.

Read more…

linux终端PS1命令行显示IP地址

在使用终端时,由于经常需要切换到其它机器,导致不清楚现在到底在哪台机器,所以希望能在命令行处显示本机IP。
只要做如下处理即可:
编辑/home/username/.bashrc, 即~/.bashrc,加入以下一行。

export PS1="[u@`/sbin/ifconfig eth0 | sed -n '0,/^s+inet addr:([0-9]+[.][0-9]+[.][0-9]    +[.][0-9]+).*$/s//1/p'` w]$"

显示效果:

linux-ps1-shell-bash-display-ip

linux-ps1-shell-bash-display-ip


Read more…

crontab使用进程锁flock解决冲突

如果在crontab里有个定时任务设置为一分钟执行一次,但是它执行的时间可能会超过一分钟,此时crontab一分钟后会再次运行该脚本,这样就会出现冲突,如果程序不做容错处理,可能会导致出现一些问题。如果想解决这个问题,可以用Linux中的进程锁控制crontab执行的并发问题。

给一个shell脚本加锁,使用flock命令。

一般格式:
flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command…

常用选项:
-s, –shared :获得一个共享的锁。
-x, –exclusive :获得一个独占的锁。
-u, –unlock :移除一个锁,通常是不需要的,脚本执行完后会自动丢弃锁。
-n, –nonblock :如果没有立即获得锁直接失败而不是等待。
-w, –timeout :如果没有立即获得锁就等待指定的时间。
-o, –close :在运行命令前关闭文件的描述符。用于如果命令产生子进程时会不受锁的管控。
-c, –command :在shell中运行一个单独的命令。
-h, –help :显示帮助。
-V, –version :显示版本。

Read more…

php curl 设置host curl_setopt CURLOPT_HTTPHEADER 指定host

我们在开发测试时,有时web服务器会绑定一个域名,但是因为dns是无法解析的,我们需要设置host文件去访问。
但是,如果我们是需要通过curl访问的话,无法访问该url的host主机。所以,需要通过指定host的方式来访问,具体访问方式如下:
如果是linux下的curl命令:

curl --silent -H "Host: www.digdeeply.info" "192.168.0.1/index.php"

如果使用php的curl的话,使用curl_setopt设置一下CURLOPT_HTTPHEADER即可。
请参考以下函数使用:

//httpHeader	设置的 http head 参数 数组形式 如 array('Host: digdeeply.info')
function curl_by_host($url,$postString='',$httpHeader='')
{
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_POSTFIELDS,$postString);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
	curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);

	if(!empty($httpHeader) && is_array($httpHeader))
	{
		curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
	}
	$data = curl_exec($ch);
	$info = curl_getinfo($ch);
	curl_close($ch);
	if(curl_errno($ch)){
		return $info;
	}
	return $data;
}

crontab 添加设置偏移量(每分钟第几秒运行),防止脚本冲突

目前有一个需求,其它20台机器上每隔5分钟向另外一台服务器提交一些文件的MD5信息,这台服务器每隔几分钟跑一个脚本,把这些信息进行对比,如果有不一致的信息需要报警。
现在的问题就是,系统自带的crontab定时只能每几分钟跑一次,这样每次脚本跑的时候都是在某分的第一秒。
但是,如果在服务器提交信息的时候去进行比对信息,就可能发生异常了,所以需要把服务器上检查的脚本推迟一些运行,不要也是在1秒时候跑。
crontab不支持,但是脚本支持延迟啊,所以,解决办法很简单。在检查脚本里开头 sleep 10s 即可啦。这样这个脚本在1秒时开始执行,但是sleep一会后才继续后边检查,所以,不会发生冲突了~~
sleep用法Tips

sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
echo `expr $RANDOM % 60` 睡眠随机0-60秒

Read more…

Shell Script 变量中的路径解析,类似php的pathinfo()

编写Shell 脚本时,如果变量的值是一个路径的话,我们可以轻易的解析路径path信息,就像php中的pathinfo一样,来获取当中的路径(dirname) 或档名(basename).

变量		结果			说明
${path}		/usr/local/bin/emacs	原本值
${path#/*/}	local/bin/emacs		去除第一个资料夹
${path##/*/}	emacs			只取档名(basname)
${path%/*}	/usr/local/bin		只取路径(dirname)
${path:15}	emacs			取第15个字元后的所有字元
${path:10:4}	/bin			取第10个字元后的4 个字元

最后两个用法和Java 的subString 相同。

遍历获取目录所有文件的md5

遍历获取目录所有文件的md5:

DIR='/home/fukun'
find $DIR -type f -print0 | xargs -0 md5sum > ./md5.md5

svn: 无法使用外部编辑器取得日志信息;请尝试设定 $SVN_EDITOR 环境变数

svn: 提交失败(细节见下):
svn: 无法使用外部编辑器取得日志信息;请尝试设定 $SVN_EDITOR 环境变数,或是使用 --message (-m) 或 --file (-F) 选项
svn: 没有一个 SVN_EDITOR,VISUAL 或 EDITOR 环境变数被设定,执行时期的设定中也没有 'editor-cmd' 选项

解决方法: 设置vim为你的SVM_EDITOR

命令:

export SVN_EDITOR=vim

如果希望该环境变量能永久生效,把以下这行添加到你的个人文档目录下的.bash_profile文件中即可。文件路径~/.bash_profile

export SVN_EDITOR=vim

Read more…

Linux系统下的svn命令用法详解

svn在Linux下的使用(svn命令)

1、将文件checkout到本地目录

svn checkout path(path是服务器上的目录)

例如:svn checkout svn://192.168.1.1/pro/domain

简写:svn co

2、往版本库中添加新的文件

svn add file

例如:svn add test.php(添加test.php)

svn add *.php(添加当前目录下所有的php文件)

3、将改动的文件提交到版本库

svn commit -m “LogMessage“ [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

例如:svn commit -m “add test file for my test“ test.php

简写:svn ci

Read more…

Cygwin安装 autoscan 方法

Cygwin下安装thrift,使用bootstrap.sh时候,提示./bootstrap.sh: line 24: autoscan: command not found,需要安装autoscan,而在Cygwin下搜索autoscan又没搜索到,Google下,有人说搜索autotools,也没搜索到。。最后分别搜索M4,autoconf,automake,安装这三个就可以了。
Read more…