月度归档:2012年03月

SSH实现免密码登录

如果用登录远程服务器每次都要输入密码,效率会很低。那么怎么实现SSH的免密码登陆呢?

方法很简单,先用ssh-keygen生成一对私钥和公钥,然后把公钥添加到远程主机的authorized_keys里就行了。

#生成私钥和公钥,默认放在~/.ssh/文件夹下,也可以自定义,提示输入passphare时,直接回车
#顺利的话就会在~/.ssh/文件夹下生成id_rsa.pub和id_rsa两个文件
ssh-keygen -t rsa

#把id_rsa.pub上传到远程主机,方法很多,ssh-copy-id只是其中一种
ssh-copy-id username@hostname
#如果id_rsa.pub在其他文件夹下
ssh-copy-id -i /path/to/id_rsa.pub username@hostname
#以后直接使用下面的命令登陆
ssh hostname

摘录自:http://blog.leezhong.com/tech/2010/08/28/ssh-tips.html
参考:http://hi.baidu.com/thinkinginlamp/blog/item/e74ab051102c5f12367abef6.html

shell脚本变量学习小记

转载自:http://blog.csdn.net/love__coder/article/details/6744332
1、查看所有的shell变量

set

2、查看所有的只读shell变量

readonly

3、变量设置值

格式:var_name=var_value

注意:=连接变量名和变量值,=两侧不能有空格;当值var_value含空格时,需要双引号把var_value包起来

4、输出变量值

echo $var_name

echo ${var_name}

5、变量值连接

echo $var_name1$var_name2

注意: 两个变量之间没有空格

6、查看所有环境变量

env

7、给环境变量设置值

VAR_NAME=VALUE

export VAR_NAME

8、清除变量

unset var_name

9、导出变量到子脚本中

父脚本中定义好变量,然后 export var_name

子脚本中可以使用该变量. $var_name或${var_name}

10、显示脚本执行状态

执行完脚步,输入 echo $?

注意:0,表示成功

11、脚本运行的当前进程id
$$

12、传递给shell脚本的参数个数
$#

13、反引号`

设置系统的命令输出到变量

echo “shell file name is :`basename $0` ”

14、以串行形式,打印当前整个目录

echo *

15、替换运算符

    • 1) ${var_name:-def_Val}如果变量var_name存在且为非null,返回该变量的值,否则返回默认值def_Val注意var_name与:之间没有空格,:与-之间可以有空格。主要用途,如果变量未定义,则用默认值.
    • 2) ${var_name:=val}如果变量var_name存在且为非null,返回该变量的值,否则,把val的值赋给变量var_name,并返回var_name的值val注意var_name与:之间没有空格,:与=之间也不能有空格。
    • 3)${var_name:?message},如果变量var_name存在且为非null,返回该变量的值,否则返回该变量的名字var_name:提示信息meesage,并退出当前命令或脚本注意var_name与:之间没有空格,:与?之间也不能有空格。
    • 4) ${var_name:+val}如果变量var_name存在且为非null,返回val,否则返回null注意var_name与:之间没有空格,:与+之间也不能有空格。

15、返回变量长度

${#val_name}

16、显示所有命令行参数

$* 或 $@

17、算术运算操作 $(())

$((var1 opr var2))

只能是+-*/ 和()运算符,并且只能做整数运算

例如: $((5+1))

18、命令代换$()

类似于 反引号`

例如:echo $(date)

shell脚本比较运算符及逻辑运算符小结

1、数值

格式:

test “num1” opr “num2”

[ “num1” opr “num2” ]

opr 取值:

  • 相等:-eq
  • 不等:-ne
  • 大于:-gt
  • 小于:-lt 【l是字母L的小写】
  • 小于等于:-le
  • 大于等于:-ge

2、字符串

格式:

[ str1 opr str2]

[ opr str ]

opr取值:

  • 相等:=
  • 不等:!=
  • 空串:-z
  • 非空串:-n

3、文件

格式:

[ opr file ]

opr取值:

  • 目录: -d
  • 文件: -f
  • 链接: -L
  • 可读: -r
  • 可写: -w
  • 可执行: -x
  • 文件非空: -s

4、逻辑运算符

  • 逻辑与: -a 格式: [ condition1 -a condition2 ]
  • 逻辑或: -o 格式: [ condition1 -o condition2 ]
  • 逻辑否: ! 格式: [ ! condition ]

注意:[ 与condition 之间必须有空格,condition与] 之间也必须有空格

注意: -a -o 用在一个[]中间连接多个条件,而 && || 则用在多个[]之间,连接多个[]条件

非法: [ condition1 && condition2 ]

bash中常用的几个特殊变量

$* 获得传入脚本的参数列表

$@ 获得传入脚本的参数列表

$# 传入参数的个数

$$ 当前脚本的进程ID

$!  最近在后台执行的进程ID

$?  最近执行命令的返回状态

$- 显示shell使用的当前选项,与set命令功能相同

$_前一条命令的最后一个参数

总结自:http://www.thegeekstuff.com/2010/05/bash-shell-special-parameters/

“sudo !!”想说爱你不容易

“sudo !!”命令用了有一段时间了,有时候还是能带来很多便利的,but今天才发现这个命令有多危险。

正常情况下”sudo !!”的作用是执行上一条命令, “!!”就是引用的上一条命令。

但是今天不小心敲成了”sudo !1″,可怕的是history中第一条命令是sudo reboot(要是halt之类的更悲剧)。

一般来说撞这种狗屎运的概率很小,但是···

所以以后尽量不用”sudo !!”了,一定要用也要加倍小心了···

推荐阅读:15 Linux Bash History Expansion Examples You Should Know

AWK内建变量

AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。

内建变量

AWK的内建变量包括域变量,例如$1, $2, $3,以及$0。这些变量给出了记录中域的内容。 内建变量也包括一些其他变量:

  • NR: 已输入记录的条数。
  • NF: 当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
  • FILENAME: 当前输入文件的文件名。
  • FS: “域分隔符”,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
  • RS: 当前的“记录分隔符”。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符。
  • OFS: “输出域分隔符”,即分隔print命令的参数的符号。其默认值为空格。
  • ORS: “输出记录分隔符”,即每个print命令之间的符号。其默认值为换行符。
  • OFMT: “输出数字格式”(Format for numeric output),其默认值为”%.6g”。

参考:http://zh.wikipedia.org/wiki/AWK