标签为 "Linux" 的存档

sudo echo ‘xxx’ > /path/file 重定向时 Permission denied

sudo "echo '[yaf]' > /usr/local/php/etc/include/yaf.ini"
#Permission denied 权限不够

使用sudo echo ‘xxx’ > /path/file 时,其实sudo只用在了 echo 上,而重定向没有用到sudo的权限,所以会出现“Permission denied”的情况,解决的方法也很简单,就是一个参数而已。加一个“ sh -c ”就可以把权限指定到整条shell了。

sudo sh -c "echo '[yaf]' > /usr/local/php/etc/include/yaf.ini"

另一种方法是利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:

echo “xxxx” | sudo tee -a test.txt

tee 命令de “-a” 选项的作用等同于 “>>” 命令,如果去除该选项,那么 tee 命令的作用就等同于 “>” 命令。

linux下添加PATH的几种方法【转载】

方法有三:
1.#PATH=$PATH:/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)
这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去
这种方法是针对用户起作用 的.
4.#vi ~/.bashrc
PATH=$PATH:/etc/apache/bin
export PATH
这种方法也是针对用户起作用。比如如果是在root权限操作,则root用户有效。

注意:想改变PATH,必须重新登陆才能生效,以下方法可以简化工作:
如果修改了/etc/profile,那么编辑结束后执行source profile 或 执行点命令 ./profile,PATH的值就会立即生效了。
这个方法的原理就是再执行一次/etc/profile shell脚本,注意如果用sh /etc/profile是不行的,因为sh是在子shell进程中执行的,即使PATH改变了也不会反应到当前环境中,但是source是在当前 shell进程中执行的,所以我们能看到PATH的改变。

摘自:linux下添加PATH的几种方法【转载加修改】

shell脚本,每次读取文件的一行,逐行读取并处理

shell脚本,每次读取文件的一行,逐行读取并做显示处理,如需其它处理,自行修改即可。
写法一:

#!/bin/bash
while read line
do
      echo $line     #这里可根据实际用途变化
done < filename		#filename 为需要读取的文件名

写法二:

#!/bin/bash 

cat filename| while read line	#filename 为需要读取的文件名,也可以放在命令行参数里。
do
    echo $line
done

Read more…

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…

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…

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

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

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

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…