Shell保留变量

Posted by 4Aiur on 03/31/2010 in Shell with Comments closed |

保留变量

Bourne shell保留变量 Bash和 Bourne shell以同一种方法来使用特定的shell变量。某些情况下,Bash为变量分配一个默认的值。下表给出一个简单的shell变量的概览: 

保留的 Bourne shell 变量

变量名字 定义
CDPATH 一个由冒号分割的目录列表作为内建命令 cd 的搜索路径。
HOME 当前用户的home目录;默认为内建命令 cd 。这个变量的值同样被~扩展使用。
IFS 分割域的一个字符的列表;用于shell把词分开作为扩展。
MAIL 如果这个变量设成一个文件名并且 MAILPATH 变量没有设置,Bash在指定文件中通知用户邮件的到达。
MAILPATH 一个用冒号分隔的文件名列表,shell周期性地从这个文件里检测新邮件。
OPTARG getopts 内建命令处理的最后的选项参数的值。
OPTIND 最后一个由 getopts 内建命令处理的选项参数的索引号。
PATH 一个用冒号分隔的目录列表,shell从这些目录里寻找命令。
PS1 主要提示符。默认值是 “’\s-\v\$ ‘”。
PS2 次要提示符。默认值是 “’> ‘”。

Bash保留变量

这些变量是设置好的或者被Bash使用的,但是其他shell通常不会对它们进行特殊处理。
保留Bash变量
变量名 定义
auto_resume 这个变量控制shell如何与用户交互和作业控制。
BASH 用于执行当前Bash实例的全路径。
BASH_ENV 如果这个变量在Bash调用执行一个shell脚本时已被设置,它的值将被展开并用作在执行脚本前读取的启动文件名。
BASH_VERSION 当前Bash实例的版本号。
BASH_VERSINFO 一个只读变量数组,它的成员保存这个Bash实例的版本信息。
COLUMNS select 内建命令来决定打印选择列表时终端宽度。在收到 SIGWINCH 信号时自动设置。
COMP_CWORD 包含当前光标位置的字的 ${COMP_WORDS} 的一个索引。An index into ${COMP_WORDS} of the word containing the current cursor position.
COMP_LINE 当前命令行。
COMP_POINT 指明相对于当前命令起点的当前光标位置。
COMP_WORDS 一个由当前命令行中单个词组成的变量数组。
COMPREPLY 一个变量数组,Bash从中读取由一个可编程完整设备调用的一个shell函数生成的可能的完成。An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility.
DIRSTACK 一个保存当前目录栈内容的变量数组。
EUID 当前用户的数字有效用户ID。
FCEDIT 内建命令 fc 使用 -e 选项时默认使用的编辑器。
FIGNORE 一个由冒号分隔的在补全文件名时要忽略的后缀列表。
FUNCNAME 任意当前正在执行的shell函数名。
GLOBIGNORE 一个由冒号分隔的模板列表,定义在文件名展开时忽略的文件名集。
GROUPS 一个数组变量,包含当前用户作为成员的组的列表。
histchars 共有三个字符控制历史展开、快速替换和 标记
HISTCMD 当前命令的历史数字,或者在历史列表里的索引。
HISTCONTROL 定义一个命令是否加入到历史列表中。
HISTFILE 保存历史命令的文件名。默认值是 ~/.bash_history。
HISTFILESIZE 在历史文件中包含的最大行数,默认为500。
HISTIGNORE 一个由冒号分隔的模式列表,用来决定哪些命令行应该保存在历史列表中。
HISTSIZE 在历史列表中记录的最大命令数,默认为500。
HOSTFILE 包含与 /etc/hosts 格式相同的文件名,shell需要补全主机名时读取。
HOSTNAME 当前主机的名字。
HOSTTYPE 一个描述运行Bash的机器的字符串。
IGNOREEOF 控制shell接收到一个 EOF 字符作为独立输入的行为。
INPUTRC Readline初始化文件的名字,取代默认值为 /etc/inputrc。
LANG 用于为任意没有特别选择用LC_开头的变量指明的设置决定场合设置。Used to determine the locale category for any category not specifically selected with a variable starting with LC_.
LC_ALL 这个变量取代 LANG 的值并为任意其他 LC_ 变量指定一个区域种类。
LC_COLLATE 这个变量决定搜索文件名展开结果时使用的整理顺序,并决定在文件名展开和模式匹配里区域表达、等价类和处理序列的表现。This variable determines the collation order used when sorting the results of file name expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within file name expansion and pattern matching.
LC_CTYPE 这个变量决定在文件名展开和模板匹配里字符的解释和字符集的行为。
LC_MESSAGES 这个变量决定用于转换由 “$” 引导的双引号字符串的区域。
LC_NUMERIC 这个变量决定数字格式化的本地类别。
LINENO 当前执行的脚本或者shell函数的行数。
LINES 内建命令 select 用来决定打印选择列表的列长度。
MACHTYPE 一个以标准的GNU CPU-COMPANY-SYSTEM 格式来充分描述运行Bash的系统的类型的字符串。
MAILCHECK shell从 MAILPATH 或 MAIL 变量里指定的文件中检查邮件的频度(秒)。
OLDPWD 内建命令 cd 设置的之前的工作目录。
OPTERR 如果设置成1,Bash显示内建命令 getopts 生成的错误信息。
OSTYPE 一个描述运行Bash的操作系统的字符串。
PIPESTATUS 一个数组变量,包含一个最近运行过的前台管道(可能只包含一个命令)进程的退出状态值的列表。
POSIXLY_CORRECT 如果这个变量在 bash 启动的时候存在于环境变量中,shell将进入POSIX模式。
PPID shell父进程的进程ID。
PROMPT_COMMAND 如果设置了,这个值解释为一个在打印每个基本提示符(PS1)之前执行的命令。
PS3 这个变量的值被用作 select 命令的提示符。默认值是 “’#? ‘”。
PS4 这个值在 -x 选项启用时,在命令行前打印的提示符。
PWD 内建命令 cd 设置的当前工作目录。
RANDOM 每次这个参数被引用时,生成一个0和32767之间的随机整数。给这个变量指定一个值作为随机数生成器的种子。
REPLY 内建命令 read 的默认值。
SECONDS 这个变量扩展为shell运行的秒数。
SHELLOPTS 一个由冒号分隔的shell已经启用的选项列表。
SHLVL 新的Bash实例启动就增加一。
TIMEFORMAT 这个参数的值用来作为一个格式化的字符串用来指定以 time 保留字作为前缀的管道定时信息如何显示。
TMOUT 如果设成一个大于0的值。 TMOUT 作为内建命令 read 的默认超时时间。在一个交互shell中,当shell处于交互状态时,这个值作为等待在基本提示串后输入的秒数。 在这个秒数后如果没有输入Bash就终止。
UID 数值,当前用户的真实用户ID。

检查Bash的手册,信息或者文档页面得到更多扩展信息。一些变量是只读的,一些是自动设置的,另外一些如果设置了一个不同的值会失去原有的含义。

Tags:

使用bash用10种不同的方法计数到11

Posted by 4Aiur on 03/31/2010 in Shell with Comments closed |

使用bash用10种不同的方法计数到11

#!/bin/bash
# Counting to 11 in 10 different ways.
n=1; echo -n "$n "
let "n = $n + 1"   # let "n = n + 1"  also works.
echo -n "$n "

: $((n = $n + 1))
#  ":" necessary because otherwise Bash attempts
#+ to interpret "$((n = $n + 1))" as a command.
echo -n "$n "

(( n = n + 1 ))
#  A simpler alternative to the method above.
#  Thanks, David Lombard, for pointing this out.
echo -n "$n "

n=$(($n + 1))
echo -n "$n "

: $[ n = $n + 1 ]
#  ":" necessary because otherwise Bash attempts
#+ to interpret "$[ n = $n + 1 ]" as a command.
#  Works even if "n" was initialized as a string.
echo -n "$n "

n=$[ $n + 1 ]
#  Works even if "n" was initialized as a string.
#* Avoid this type of construct, since it is obsolete and nonportable.
#  Thanks, Stephane Chazelas.
echo -n "$n "

# Now for C-style increment operators.
# Thanks, Frank Wang, for pointing this out.

let "n++"          # let "++n"  also works.
echo -n "$n "

(( n++ ))          # (( ++n )  also works.
echo -n "$n "

: $(( n++ ))       # : $(( ++n )) also works.
echo -n "$n "

: $[ n++ ]         # : $[ ++n ]] also works
echo -n "$n "

echo
exit 0

Tags:

特殊Bash变量

Posted by 4Aiur on 03/31/2010 in Shell with Comments closed |

特殊Bash变量

字符 定义
$* 展开为位置参数,从1开始。当扩展发生在双引号时,它展开成一个单独的词,每个参数的值由 IFS 特殊变量的第一个字符分隔。
$@ 展开为位置参数,从1开始。当在双引号里展开时,每个参数展开成独立的词。
$# 把位置参数展开为十进制数字。
$? 展开成最近执行的前台管道程序的退出状态。
$- 一个连字符展开为当前选项标志 内部命令集 或者那些shell自己的集(如-i)。A hyphen expands to the current option flags as specified upon invocation, by the set built-in command, or those set by the shell itself (such as the -i).
$ 展开成shell的进程ID。
$! 展开成最近在后台(异步)执行的命令的进程ID。
$0 展开成shell或者shell脚本名。
$_ 下划线变量在shell启动时设置,包含shell的绝对文件名或者作为参数列表被执行的脚本。随后,它展开为前一个命令扩展后的最后一个参数。它同样设置为每个执行程序的全路径,放在那个命令的输出环境中。当检查邮件时,这个参数保存邮件文件的名字。The underscore variable is set at shell startup and contains the absolute file name of the shell or script being executed as passed in the argument list. Subsequently, it expands to the last argument to the previous command, after expansion. It is also set to the full pathname of each command executed and placed in the environment exported to that command.

Tags:

使用expect配合ssh的key认证实现多台服务器的自动化处理

Posted by 4Aiur on 03/31/2010 in SysAdmin with Comments closed |

使用expect配合ssh的key认证实现多台服务器的自动化处理

使用以下方法可以方便、快速的实现多台服务器(500+)的管理,并且对中央管理服务器的配置要求不高。

使用crontab自动更新配置.

[root@4Aiur ~]# crontab -l
0 * * * * /usr/sbin/ntpdate -u -t 5 cn.pool.ntp.org >/var/log/ntpsync.log 2>&1
0 23 * * * /Application/Update/run.sh >/dev/null 2>&1

把加载key加入到系统自启动.

[root@4Aiur ~]# cat /etc/rc.local

#!/bin/sh
#
/root/.Batch/agent.exp

加载key的expect脚本.

[root@4Aiur ~]# cat /root/.Batch/agent.exp

#!/usr/bin/expect
spawn $env(SHELL)
send "cd /root/.Batch/\r"
expect "*"
send "killall ssh-agent\r"
expect "*"
send "ssh-agent | head -2 > /root/.Batch/.agent.env\r"
expect "*"
send ". /root/.Batch/.agent.env\r"
expect "*"
send "ssh-add key\r"
expect "Enter passphrase for key: "
send "example\r"
expect eof

定时在23点的自动更新程序.

[root@4Aiur ~]# cat /Application/Update/run.sh

#/bin/sh
# set -x
. /root/.Batch/.agent.env

DEVICE_LIST="/root/4Aiur/iplist"
SH_PATH="shell"
LOG_PATH="logs"

cd /Application/Update
/usr/java/jdk1.5.0_06/bin/java -jar Config.jar 2>/dev/null

mkdir -p ${SH_PATH} ${LOG_PATH}
rm -f ${SH_PATH}/* ${LOG_PATH}/*

while read SN HOSTNAME IPADDRESS
do

(SH="${SH_PATH}/${HOSTNAME}"
LOG="${LOG_PATH}/${HOSTNAME}"
cat > ${SH}  ${LOG} 2>&1 &
)
done 

Tags:

使用shell进行大小写转换

Posted by 4Aiur on 03/31/2010 in Shell with Comments closed |

使用shell进行大小写转换

大写转小写

for f in *; do rename $f echo $f | tr "[:upper:]" "[:lower:]" $f; done

小写转大写

for f in *; do rename $f echo $f | tr "[:lower:]" "[:upper:]" $f; done

Tags:

使用ssh实现系统管理的自动化

Posted by 4Aiur on 03/31/2010 in SysAdmin with Comments closed |

使用ssh实现系统管理的自动化

常见的几种ssh认证方式:

  1. 密码认证
  2. 使用明文密钥
  3. 使用加密密钥
    从安全角度考虑,建议使用第三种方式“使用加密密钥”实施自动化。

一、密码认证的自动化
使用伪终端与SSH进行交互(例如,使用类似expect的工具)
一个更改密码的小例子

#!/bin/sh
# SCRIPT: chpass
#
# AUTHOR: Kevin Lee
#
# DATE: 05-17-2006
#
# PURPOSE:  This script is change nodes password.
#
#
# REV: 1.0.A
#
# REV.LIST:
#
#
# set -x # Uncomment to debug this script
# set -n # Uncomment to check command syntax without any execution
#
#######################################################

# Define and initialize variables here...

INPUTFILE="filelist"
NEWPASSWD="newpassword"
rm -f ~/.ssh/known_hosts

############ START of MAIN #######################

while read HOSTNAME OLDPASSWD IPADDRESS
do
LOG="logs/tmp_$HOSTNAME_.log"
EXP="tmp_$HOSTNAME_.exp"
SH="tmp_$HOSTNAME_.sh"
echo spawn ssh -l root $IPADDRESS >$EXP
echo 'expect "*(yes/no)?"' >>$EXP
echo send \"yes\\r\" >>$EXP
echo 'expect "*assword:"' >>$EXP
echo send \"$OLDPASSWD\\r\" >>$EXP
echo 'expect "#"' >>$EXP
echo 'send "passwd\r"' >>$EXP
echo expect \"*New password:\" >>$EXP
echo send \"$NEWPASSWD\\r\" >>$EXP
echo expect \"*new password:\" >>$EXP
echo send \"$NEWPASSWD\\r\" >>$EXP
echo expect '"*#" {send "exit\r"}' >>$EXP
echo expect eof  >>$EXP
echo echo $HOSTNAME $IPADDRESS > $SH
echo expect $EXP >>$SH
echo echo DONE >>$SH
sh $SH > $LOG &
done 

二、使用明文密钥

不推荐使用明文密钥,因为你把私钥放在服务器上执行自动化操作,任何可以读取该私钥的帐号都可以对你的服务器做出破坏.

三、使用加密密钥

强烈推荐使用此方法.
通过使用ssh-agent把密钥加载到内存中,在进行批处理的时候加载一次私钥,使用完毕后卸载私钥.
下面是一个小例子,供大家参考,希望大家可以发挥想象,做更多的事情.

#!/bin/sh
#set -x
INPUTFILE="filelist"

while read HOSTNAME IPADDRESS
do
LOG="UPDIR/tmp_$HOSTNAME.log"
SH="tmp_$HOSTNAME.sh"
echo echo $SN $HOSTNAME $IPADDRESS > $SH
echo "echo" >> $SH
echo scp tempfile $IPADDRESS:/tmp/tempfile >> $SH
echo ssh $IPADDRESS "ls -l /tmp/tempfile" >> $SH
echo "echo" >> $SH
sh $SH > $LOG &
done 

Tags: ,

vi使用小贴士

Posted by 4Aiur on 03/31/2010 in Linux with Comments closed |

vi使用小贴士

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次编辑

h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
d0:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令 :
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

VI tips

  1. 交换两个字符位置
    xp
  2. 上下两行调换
    ddp
  3. 上下两行合并
    J
  4. 删除所有行
    dG
  5. 从当前位置删除到行尾
    d$
  6. 从当前位置复制到行尾
    y$ 如果要粘贴到其他地方 p 就可以了
  7. :ab string strings
    例如 “:ab jn Ji Nan” ,
    当你在文见里插入 jn 时 ,Ji Nan 就蹦出来了
  8. 单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

Tags:

Bash命令行编辑的快捷键

Posted by 4Aiur on 03/31/2010 in SysAdmin with Comments closed |

Bash命令行编辑的快捷键

history 显示命令历史列表

Shortcuts Comment
显示上一条命令
显示下一条命令
!num 执行命令历史列表的第num条命令
!! 执行上一条命令
!ls 执行最后一个以ls开头的命令
Ctrl+r 然后输入若干字符,开始向上搜索包含该字符的命令,继续按Ctrl+r,搜索上一条匹配的命令
ls !$ 执行命令ls,并以上一条命令的参数为其参数
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Esc+b 移动到当前单词的开头
Esc+f 移动到当前单词的结尾
Ctrl+l 清屏
Ctrl+u 删除命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 删除命令行中光标所在处之后的所有字符(包括自身)
Ctrl+d 删除光标所在处字符
Ctrl+h 删除光标所在处前一个字符
Ctrl+y 粘贴刚才所删除的字符
Ctrl+w 删除光标所在处之前的字符至其单词头(以空格、标点等为分隔符)
Esc+w 删除光标所在处之前的字符至其单词尾(以空格、标点等为分隔符)
Ctrl+t 颠倒光标所在处及其之前的字符位置,并将光标移动到下一个字符
Esc+t 颠倒光标所在处及其相邻单词的位置
Ctrl+(x u) 按住Ctrl的同时再先后按x和u,撤销刚才的操作
Ctrl+s 挂起当前shell
Ctrl+q 重新启用挂起的shell

输入set -o emacs为使用emacs(默认),输入set -o vi为使用vi为编辑器。

我们经常用的是emacs的方式控制命令行,下面是常用快捷键的解释。

Shortcuts Comment
Ctrl-P Move up history file.
Ctrl-N Move down history file.
Ctrl-B Move backward one character.
Ctrl-R Search backward for string.
Esc B Move backward one word.
Ctrl-F Move forward one character.
Esc F Move forward one word.
Ctrl-A Move to the beginning of the line.
Ctrl-E Move to the end of the line.
Esc < Move to the first line of the history file.
Esc > Move to the last line of the history file.
Ctrl-U Delete the line.
Ctrl-Y Put the line back.
Ctrl-K Delete from cursor to the end line.
Ctrl-D Delete a letter.
Esc D Delete one word forward.
Esc H Delete one word backward.
Esc space Set a mark at cursor position. Ctrl-X Ctrl-X Exchange cursor and mark.
Ctrl-P Ctrl-Y Push region from cursor to mark into a buffer (Ctrl-P) and put it down (Ctrl-Y).
Ctrl+- Redo

Tags:

SecureCRT的使用技巧

Posted by 4Aiur on 03/31/2010 in SysAdmin with Comments closed |

SecureCRT的使用技巧

1、由于网络条件问题,SecureCRT经常会在不使用的时候开服务器的连接。

用下面的方法设置会很大程度上解决上面的问题。(以SecureCRT Version 5.1.0为例)

  • 打开SecureCRT选择Options的General
  • 点Default Session之后选择Edit Default Settions
  • 再选择Terminal,把Send protocol NO_OP 选上之后全部点ok即可。

注:
同样利用screen命令也可以
使用方法:
SSH登录后执行
# screen -S freebsd
一旦断线可使用
# screen -x freebsd
来恢复

2、密钥的使用

使用密钥便于连接与管理服务器,也极大的增加了系统的安全性。
个人建议禁止root直接登陆服务器,禁用密码直接登陆服务器,安装密钥时设置密码。
具体使用方法可以到网上搜集资料,这里不再多说。

3、与服务器之间的文件传输

设置连接的属性
选中一连接后鼠标右键点Properties,选择第一项Connection,把Protocol里面的Terminal设置为SSH2,File设置为SFTP(注需要事先安装SecureFX,否则没有次选项)
进入一个连接后点File菜单,点Connect SFTP Tab(快捷键为alt+p),会打开SFTP窗口,可以使用命令传输文件。
命令举例:

  • lcd 进入本地目录
  • lpwd 显示本地目录路径
  • cd 进入服务器本身的目录
  • pwd 显示服务器本身的路径
  • get 下载服务器文件至本地目录
  • put 上传本地文件至服务器

SecureFX是一个使用sftp协议的客户端程序,使用方法与其他ftp客户端类似。

4、使用鼠标键的左键复制与中键粘贴

在SecureCRT的options里面的Global Opations Terminal Mouse选项中。

SecureCRT的多窗口同时操作方法:

  • 菜单栏view->"Chat Window"
  • 右键点击SecureCRT下方的"Chat Window"栏,选中“Send chat to all tabs”
  • 之后在"Chat Window"栏中输入的命令即可发送到同一SecureCRT的多个tables里面。

UNIX-LIKE OS使用ssh命令连接其他ssh server时idle时间过长的话,会出现断开连接的问题。

可以通过配置ssh_config这个配置文件来解决。
加入下面两条配置来让ssh自动发送NOOP信息,保持ssh的连接。

  • ServerAliveInterval 60
  • ServerAliveCountMax 3
ServerAliveInterval
Sets a timeout interval in seconds after which if no data has been received from the
server, ssh will send a message through the encrypted channel to request a response
from the server.  The default is 0, indicating that these messages will not be sent
to the server.  This option applies to protocol version 2 only.

ServerAliveCountMax
Sets the number of server alive messages (see above) which may be sent without ssh
receiving any messages back from the server.  If this threshold is reached while
server alive messages are being sent, ssh will disconnect from the server, terminat-
ing the session.  It is important to note that the use of server alive messages is
very different from TCPKeepAlive (below).  The server alive messages are sent
through the encrypted channel and therefore will not be spoofable.  The TCP
keepalive option enabled by TCPKeepAlive is spoofable.  The server alive mechanism
is valuable when the client or server depend on knowing when a connection has become
inactive.

The default value is 3.  If, for example, ServerAliveInterval (above) is set to 15,
and ServerAliveCountMax is left at the default, if the server becomes unresponsive
ssh will disconnect after approximately 45 seconds.

Tags:

系统管理的几个小技巧

Posted by 4Aiur on 03/31/2010 in Linux with Comments closed |

系统管理的几个小技巧

一、SecureCRT的使用技巧

1、由于网络条件问题,SecureCRT经常会在不使用的时候开服务器的连接。

用下面的方法设置会很大程度上解决上面的问题。(以SecureCRT Version 5.1.0为例)

打开SecureCRT选择Options的General,点Default Session之后选择Edit Default Settions
再选择Terminal,把Send protocol NO_OP 选上之后全部点ok即可。

注:
同样利用screen命令也可以
使用方法
SSH登录后执行
# screen -S freebsd
一旦断线可使用
# screen -x freebsd
来恢复

2、密钥的使用

使用密钥便于连接与管理服务器,也极大的增加了系统的安全性。
个人建议禁止root直接登陆服务器,禁用密码直接登陆服务器,安装密钥时设置密码。
具体使用方法可以到网上搜集资料,这里不再多说。

3、与服务器之间的文件传输

设置连接的属性
选中一连接后鼠标右键点Properties,选择第一项Connection,把Protocol里面的Terminal设置为SSH2,File设置为SFTP(注需要事先安装SecureFX,否则没有次选项)
进入一个连接后点File菜单,点Connect SFTP Tab(快捷键为alt+p),会打开SFTP窗口,可以使用命令传输文件。
命令举例:

  • lcd 进入本地目录
  • lpwd 显示本地目录路径
  • cd 进入服务器本身的目录
  • pwd 显示服务器本身的路径
  • get 下载服务器文件至本地目录
  • put 上传本地文件至服务器

SecureFX是一个使用sftp协议的客户端程序,使用方法与其他ftp客户端类似。

4、使用鼠标键的左键复制与中键粘贴

二、关于BASH命令行使用的

输入set -o emacs为使用emacs(默认),输入set -o vi为使用vi为编辑器。
我们经常用的是emacs的方式控制命令行,下面是常用快捷键的解释。

Ctrl-P      Move up history file.
Ctrl-N      Move down history file.
Ctrl-B      Move backward one character.
Ctrl-R      Search backward for string.
Esc B      Move backward one word.
Ctrl-F      Move forward one character.
Esc F      Move forward one word.
Ctrl-A      Move to the beginning of the line.
Ctrl-E      Move to the end of the line.
Esc       Move to the last line of the history file.
Editing with emacs:
Ctrl-U      Delete the line.
Ctrl-Y      Put the line back.
Ctrl-K      Delete from cursor to the end line.
Ctrl-D      Delete a letter.
Esc D      Delete one word forward.
Esc H      Delete one word backward.
Esc space      Set a mark at cursor position.
Ctrl-X Ctrl-X      Exchange cursor and mark.
Ctrl-P Ctrl-Y      Push region from cursor to mark into a buffer (Ctrl-P) and put it down (Ctrl-Y).

三、vi的使用

进入vi的命令

vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次编辑
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令

Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令

i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令

ndw或ndW:删除光标处开始及其后的n-1个字
d0:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令 :

/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

VI tips

  1. 交换两个字符位置 xp
  2. 上下两行调换 ddp
  3. 上下两行合并 J
  4. 删除所有行 dG
  5. 从当前位置删除到行尾 d$
  6. 从当前位置复制到行尾 y$ 如果要粘贴到其他地方 p 就可以了
  7. :ab string strings
    例如 “:ab jn Ji Nan” ,
    当你在文见里插入 jn 时 ,Ji Nan 就蹦出来了
  8. 单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

Tags: ,

Copyright © 2010-2024 4Aiur All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.5, from BuyNowShop.com.