??xml version="1.0" encoding="utf-8" standalone="yes"?>
google了好一阵,才找到线索。主要由于我前晚写shell脚本调试的时候,误将一些系l文件的宿主为新用户了。后来新的会话怎么都登录不上去了,好在q有一个rootd的会话,扑ֈ/var/empty/sshdQ修改宿d权限?br />
chmod 700 /var/empty/sshd
2、su 切换用户Q输入密码L提示Q密码不正确?br />
也是权限问题Qroot切到其他账号时没有问题;其他账号之间切换是不行Q密码输入也正确。后来其?bin/su 文g的权限不正确Q调整如下解决问?
]]>
折腾半天Q基本上可以判定q个问题应该与apache配置和版本无关了?br />
|上google了一把,有很多关于mod_encoding.so模块实现中文支持和IE览器中取消"发送UTF-8 URL"的设|,考虑到开发环境ƈ没有加入额外的moduleQ也没设|IE选项Q所以也没在意这些方案,况且q两个方案也不便于生产环境布|或实际应用?br />
后来Q又h了SA和其他同学,q是没有l果。只能l摸索,查找原因。通过两个环境的反复比较,l于发现了问题所在:
通过 locale 查看了系l的字符集,开发机上是en_US.UTF-8Q而测试机上是zh_CN.GBKQ开发机上显C的中文文g名是qQ测试机上显C正常,但反而显CZؓq的开发机上能被下载,而测试机上显C正常的文g不能被下载。后来,测试环境的字符集也设ؓ:en_US.UTF-8Qƈ从svn重新q出了中文名的文Ӟ发现实可以被读取到?br />
分析一下原因,ie客户是发?UTF-8 URL"到apacheQapache以utf-8~码的文件名查找相关目录下的文gQ如果此时中文文件是以GBK或其他字W集保存Ӟ无法找到匹配的文g。所以网上说的IE览器中取消"发送UTF-8 URL"的设|就有效的说法就可以解释了?br />
l论Qlinux环境下apache中文文g下蝲支持与该文g的字W集有关Q只要创建或从svnq出中文文g文gӞlinuxpȝ为UTF-8的字W集Q或中文文g名以UTF-8~码的文Ӟ卌被apache正确d?/strong>|上有资料说Qapache 2.x 以上版本x持中文文件名Q虽然未l验证,但至可以肯定apache 2.0.55?.0.63是没有问题的?
]]>
查看/etc/inittab文gQ其主要内容如下Q?br />
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
... ...
0Q停?不要讄为启动默认?
1Q单用户模式
2Q多用户Q无NFS(如果您没有配|网l,该别与3一?
3Q完全多用户模式
4Q不使用
5QX11囑Ş模式
6Q重?不要讄为启动默认?
如果惌pȝ不用囑Ş模式登陆可将id:5:initdefault: 中的5改ؓ3卛_?br />
2、Linuxq行U别
Linux 启动Ӟq行一个叫做init 的程序,然后由它来启动后面的dQ包括多用户环境Q网l等?br />
那么Q到底什么是q行U别呢?单的_q行U就是操作系l当前正在运行的功能U别。这个别从1 ? Q具有不同的功能。这些别在/etc/inittab 文g里指定。这个文件是init E序L的主要文Ӟ最先运行的服务是那些放?etc/rc.d 目录下的文g?br />
大多数的Linux 发行版本中,启动脚本攑֜/etc/rc.d/init.dQ这些脚本被ln 命o来连接到 /etc/rc.d/rcn.d 目录(q里的n 是q行U?-6)。如Q?etc/rc.d/rc5.d 下面的S10network 是q接?etc/rc.d/init.d下的network 脚本的。因此,我们可以知道Qrc5.d 下面的文件就是和q行U? 有关的?br />
3、Samba的自启动
samba安装完后Q默认是不会自启动的。通过查看/etc/rc.d/rcn.d/目录下的文g或通过chkconfig命o查询Q如Q?br />
[alisoft@kplan-dev8 ~]$ ll /etc/rc.d/rc5.d
ȝ?nbsp;272
lrwxrwxrwx 1 root root 22 8?nbsp;13 11:17 K30spamassassin -> ../init.d/spamassassin
lrwxrwxrwx 1 root root 13 8?nbsp;18 21:59 K35smb -> ../init.d/smb
lrwxrwxrwx 1 root root 19 8?nbsp;13 11:17 K35vncserver -> ../init.d/vncserver
lrwxrwxrwx 1 root root 17 8?nbsp;13 11:17 S10network -> ../init.d/network
[alisoft@kplan-dev8 ~]$ /sbin/chkconfig --list | grep smb
smb 0:off 1:off 2:off 3:off 4:off 5:off 6:off
要设|Samba自启动,需通过chkconfig命oq行讄Q?br />
[alisoft@kplan-dev8 ~]/sbin/chkconfig --level 35 smb on
[alisoft@kplan-dev8 ~]$ /sbin/chkconfig --list | grep smb
smb 0:off 1:off 2:off 3:on 4:off 5:on 6:off
Linuxpȝq行U别? 或?Ӟpȝ׃自启动Samba服务?
]]>
实现上述需求,关键有两点:1). 通过ssh信QdQ避免每ơ同步时要求输入密码Q?). 通过rsync命o实现服务器之间文件的同步。具体实现细节如下:
1. 完成单向Trusted SSH Authorized
首先在A产生public/private dsa key pairQ?br />
[root@kplan-test3 .ssh]# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
f3:47:3b:b0:2a:50:f8:77:7e:ca:29:85:e8:d9:05:9b root@kplan-test3
[root@kplan-test3 .ssh]#
……………………………………………………………………………………………………
完成上述命o后,会在pȝ/root/.ssh目录生成两个文g:id_dsa与id_dsa.pub。现在复制id_dsa.pub到B服务器,q更名ؓ authorized_keys2
[root@kplan-test3 .ssh]# scp id_dsa.pub 192.168.0.101:/root/.ssh/authorized_keys2
root@192.168.0.101's password:
id_dsa.pub 100% |*****************************************************| 612 00:00
[root@kplan-test3 .ssh]#
……………………………………………………………………………………………………
如果上述步骤利完成的话Q现在您可以执行”ssh 192.168.0.101”Q无需输入d密码Q即可登录到B服务器了?br />
2.使用rsync 做Remote syncH?br />
rsyncҎ简? rsync是unix-likepȝ下的数据镜像备䆾工具Q从命名上就可以看出来了remote sync。它的特性如下:
1、可以镜像保存整个目录树和文件系l?
2、可以很Ҏ做到保持原来文g的权限、时间等{?
3、无ȝD权限即可安装?
4、优化的程Q文件传输效率高?
5、可以用rcp、ssh{方式来传输文gQ当然也可以通过直接的socketq接?
6、支持匿名传输?
参数意义如下H?br />
-a, --archive
It is a quick way of saying you want recursion and want to preserve almost everything.
-v, --verbose
This option increases the amount of information you are given during the transfer.
-l, --links
When symlinks are encountered, recreate the symlink on the destination.
-R, --relative
Use relative paths. 保留相对路径...才不会让子目录跟 parent 挤在同一?..
--delete
是指如果Server端删除了一文gQ那客户端也相应把这一文g删除Q保持真正的一致?
-e ssh
建立起加密的q接?
3、同步脚?br />
创徏脚本Q实现自动配|工作?br />
[root@kplan-test3 backup]# vi install_env.sh
#!/bin/bash
WEBSERVER='kplan-test1 kplan-test2 kplan-test3'
echo "auto install envirment … ------------------------"
for webserver in $WEBSERVER
do
echo "install server:$webserver's envirment."
echo 'transport file : /etc/profile & /etc/hosts'
rsync -v -r -l -H -p -g -t -S -e ssh --delete /etc/profile root@$webserver:/etc/profile
rsync -v -r -l -H -p -g -t -S -e ssh --delete /etc/hosts root@$webserver:/etc/hosts
echo 'run shell command : /home/init_env.sh'
ssh -q -o StrictHostKeyChecking=no root@$webserver "/home/init_env.sh"
ssh -q -o StrictHostKeyChecking=no root@$webserver "rm -f /home/init_env.sh"
echo " $webserver is end ------------------------- "
done
sleep 1
clear
……………………………………………………………………………………………………
4、其?br />
如果你想用来做自动备份,则在crontab中加入备份脚本即可。如在每??分做备䆾(?root目录下已有完成备份的脚本 backup.sh)Q?br />
[root@kplan-test3 backup]# crontab -e
0 0 * * * /root/backup.sh
……………………………………………………………………………………………………
]]>
像高U程序设计语a一PShell也提供说明和使用变量的功能。对Shell来讲Q所有变量的取值都是一个字ԌShellE序采用$var的Ş式来引用名ؓvar的变量的倹{?/font>
Shell有以下几U基本类型的变量?/font>
Q?QShell定义的环境变量:
Shell在开始执行时已l定义了一些和pȝ的工作环境有关的变量Q用戯可以重新定义q些变量Q常用的Shell环境变量有:
HOME 用于保存注册目录的完全\径名?/font>
PATH 用于保存用冒号分隔的目录路径名,Shell按PATH变量中给出的序搜烦q些目录Q找到的W一个与命o名称一致的可执行文件将被执行?/font>
TERM l端的类型?/font>
UID 当前用户的识别字Q取值是由数位构成的字串?/font>
PWD 当前工作目录的绝对\径名Q该变量的取值随cd命o的用而变化?/font>
PS1 LC符Q在Ҏ用户下,默认的主提示W是#Q在普通用户下Q默认的LC符??/font>
PS2 在Shell接收用户输入命o的过E中Q如果用户在输入行的末尾输入“”然后回RQ或者当用户按回车键时Shell判断出用戯入的命o没有l束Ӟ显C个辅助提C符Q提C用Ll输入命令的其余部分Q默认的辅助提示W是>?/font>
Q?Q用户定义的变量Q?/font>
用户可以按照下面的语法规则定义自q变量Q?/font>
变量?变量?/font>
要注意的一ҎQ在定义变量Ӟ变量名前不应加符?Q在引用变量的内Ҏ则应在变量名前加$Q在l变量赋值时Q等号两边一定不能留I格Q若变量中本w就包含了空|则整个字串都要用双引hh?/font>
在编写ShellE序ӞZ使变量名和命令名相区别,所有的变量名都用大写字母来表示?/font>
有时我们惌在说明一个变量ƈ对它讄Z个特定值后׃在改变它的值时Q可以用下面的命令来保证一个变量的只读性:
readonly 变量?/font>
在Q何时候,创徏的变量都只是当前Shell的局部变量,所以不能被Shellq行的其他命令或ShellE序所利用Q而export命o可以一个局部变量提供给Shell执行的其他命令用,其格式ؓQ?/font>
export 变量?/font>
也可以在l变量赋值的同时使用export命oQ?/font>
export 变量?变量?/font>
使用export说明的变量,在Shell以后q行的所有命令或E序中都可以讉K到?/font>
Q?Q位|参敎ͼ
位置参数是一U在调用ShellE序的命令行中按照各自的位置军_的变量,是在E序名之后输入的参数。位|参C间用I格分隔QShell取第一个位|? 参数替换E序文g中的$1Q第二个替换$2Q依ơ类推?0是一个特D的变量Q它的内Ҏ当前q个ShellE序的文件名Q所以,$0不是一个位|参敎ͼ 在显C当前所有的位置参数时是不包?0的?/font>
Q?Q预定义变量Q?/font>
预定义变量和环境变量相类|也是在Shell一开始时定义了的变量。所不同的是Q用户只能根据Shell的定义来使用q些变量Q而不能重定义它。所有预定义变量都是?W和另一个符L成的Q常用的Shell预定义变量有Q?/font>
$# 位置参数的数量?/font>
$* 所有位|参数的内容?/font>
$? 命o执行后返回的状态?/font>
$$ 当前q程的进E号?/font>
$! 后台q行的最后一个进E号?/font>
$0 当前执行的进E名?/font>
其中Q??用于查上一个命令执行是否正。(在Linux中,命o退出状态ؓ0表示该命令正执行,M?DC命令出错。)
$$变量最常见的用途是用做暂存文g的名字以保证暂存文g不会重复?/font>
Q?Q参数置换的变量Q?/font>
Shell提供了参数置换功能以便用户可以根据不同的条g来给变量赋不同的倹{参数置换的变量?U,q些变量通常与某一个位|参数相联系Q根据指定的位置参数是否已经讄cd定变量的取|它们的语法和功能分别如下?/font>
a. 变量=${参数-word}Q如果设|了参数Q则用参数的值置换变量的|否则用word|换。即q种变量的值等于某一个参数的|如果该参数没有设|,则变量就{于word的倹{?/font>
b. 变量=${参数=word}Q如果设|了参数Q则用参数的值置换变量的|否则把变量设|成wordQ然后再用word替换参数的倹{注意,位置参数不能用于q种方式Q因为在ShellE序中不能ؓ位置参数赋倹{?/font>
c. 变量=${参数Qword}Q如果设|了参数Q则用参数的值置换变量的|否则显Cwordq从Shell中退出,如果省略了wordQ则昄标准? 息。这U变量要求一定等于某一个参数的倹{如果该参数没有讄Q就昄一个信息,然后退出,因此q种方式常用于出错指C?/font>
d. 变量=${参数+word}Q如果设|了参数Q则用word|换变量Q否则不q行|换?/font>
所有这4UŞ式中?#8220;参数”既可以是位置参数Q也可以是另一个变量,只是用位|参数的情况比较多?strong>ShellE序设计的流E控?/strong>
和其他高U程序设计语a一PShell提供了用来控制程序执行流E的命oQ包括条件分支和循环l构Q用户可以用q些命o创徏非常复杂的程序?/font>
与传l语a不同的是QShell用于指定条g值的不是布尔q算式,而是命o和字丌Ӏ?/font>
1Q测试命?/font>
test命o用于查某个条件是否成立,它可以进行数倹{字W和文g3个方面的试Q其试W和相应的功能分别如下?/font>
Q?Q数值测试:
-eq {于则ؓ真?/font>
-ne 不等于则为真?/font>
-gt 大于则ؓ真?/font>
-ge 大于{于则ؓ真?/font>
-lt 于则ؓ真?/font>
-le 于{于则ؓ真?/font>
Q?Q字串测试:
= {于则ؓ真?/font>
!= 不相{则为真?/font>
-z字串 字串长度伪则为真?/font>
-n字串 字串长度不伪则ؓ真?/font>
Q?Q文件测试:
-e文g?如果文g存在则ؓ真?/font>
-r文g?如果文g存在且可d为真?/font>
-w文g?如果文g存在且可写则为真?/font>
-x文g?如果文g存在且可执行则ؓ真?/font>
-s文g?如果文g存在且至有一个字W则为真?/font>
-d文g?如果文g存在且ؓ目录则ؓ真?/font>
-f文g?如果文g存在且ؓ普通文件则为真?/font>
-c文g?如果文g存在且ؓ字符型特D文件则为真?/font>
-b文g?如果文g存在且ؓ块特D文件则为真?/font>
另外QLinuxq提供了与(Q)、或Q?oQ、非Q?aQ三个逻辑操作W,用于测试条件连接v来,其优先顺序ؓQ!最高,-aơ之Q?o最低?/font>
同时Qbash也能完成单的术q算Q格式如下:
$[expression]
例如Q?/font>
var1=2
var2=$[var1*10+1]
则var2的gؓ21?/font>
2Qif条g语句
ShellE序中的条g分支是通过if条g语句来实现的Q其一般格式ؓQ?/font>
if 条g命o?/font>
then
条g为真时的命o?/font>
else
条g为假时的命o?/font>
fi
3Qfor循环
for循环对一个变量的可能的值都执行一个命令序列。赋l变量的几个数值既可以在程序内以数值列表的形式提供Q也可以在程序以外以位置参数的Ş式提供。for循环的一般格式ؓQ?/font>
for变量? [in数值列表]
do
若干个命令行
done
变量名可以是用户选择的Q何字Ԍ如果变量名是varQ则在in之后l出的数值将序替换循环命o列表中的$var。如果省略了inQ则变量var的取值将是位|参数。对变量的每一个可能的赋值都执行do和done之间的命令列表?/font>
4Qwhile和until循环
while和until命o都是用命令的q回状态值来控制循环的。While循环的一般格式ؓQ?/font>
while
若干个命令行1
do
若干个命令行2
done
只要while?#8220;若干个命令行1”中最后一个命令的q回状态ؓ真,while循环ql执行do...done之间?#8220;若干个命令行2”?/font>
until命o是另一U@环结构,它和while命o怼Q其格式如下Q?/font>
until
若干个命令行1
do
若干个命令行2
done
until循环和while循环的区别在于:while循环在条件ؓ真时l箋执行循环Q而until则是在条件ؓ假时l箋执行循环?/font>
Shellq提供了true和false两条命o用于创徏无限循环l构Q它们的q回状态分别是Mؓ0或Mؓ??/font>
5Qcase条g选择
if条g语句用于在两个选项中选定一,而case条g选择为用h供了Ҏ字串或变量的g多个选项中选择一的ҎQ其格式如下Q?/font>
case string in
exp-1)
若干个命令行1
Q;
exp-2)
若干个命令行2
Q;
……
*)
其他命o?/font>
esac
Shell通过计算字串string的|其l果依次和运式exp-1, exp-2{进行比较,直到扑ֈ一个匹配的q算式ؓ止。如果找C匚w,则执行它下面的命令直到遇C对分?Q;)为止?/font>
在caseq算式中也可以用Shell的通配W(“*”?#8220;Q?#8221;?#8220;[ ]”Q。通常?* 作ؓcase命o的最后运式以便在前面找不到M相应的匹配项时执?#8220;其他命o?#8221;的命令?/font>
6Q无条g控制语句break和continue
break用于立即l止当前循环的执行,而contiune用于不执行@环中后面的语句而立卛_始下一个@环的执行。这两个语句只有攑֜do和done之间才有效?/font>
7Q函数定?/font>
在Shell中还可以定义函数。函数实际上也是pq条Shell命ol成的,因此它与ShellE序形式上是怼的,不同的是它不是一个单独的q程Q而是ShellE序的一部分。函数定义的基本格式为:
functionname
{
若干命o?/font>
}
调用函数的格式ؓQ?/font>
functionname param1 param2…
Shell函数可以完成某些例行的工作,而且q可以有自己的退出状态,因此函数也可以作为if, while{控制结构的条g?/font>
在函数定义时不用带参数说明,但在调用函数时可以带有参敎ͼ此时Shell把q些参数分别赋予相应的位|参?1, $2, ...?*?/font>
8Q命令分l?/font>
在Shell中有两种命o分组的方法:()和{}。前者当Shell执行()中的命o时将再创Z个新的子q程Q然后这个子q程L行圆括弧中的命o? 当用户在执行某个命o时不惌命oq行时对状态集合(如位|参数、环境变量、当前工作目录等Q的改变影响C面语句的执行Ӟ应该把q些命o攑֜圆括? 中,q样p保证所有的改变只对子进E生媄响,而父q程不受Mq扰。{}用于顺序执行的命o的输出结果用于另一个命令的输入Q管道方式)。当我们? 真正使用圆括弧和花括弧时Q如计算q算式的优先序Q,则需要在其前面加上{义符Q)以便让Shell知道它们不是用于命o执行的控制所用?/font>
9Q信?/font>
trap命o用于在ShellE序中捕捉信P之后可以?U反应方式:
Q?Q执行一D늨序来处理q一信号?/font>
Q?Q接受信L默认操作?/font>
Q?Q忽视这一信号?/font>
trap对上?U方式提供了3U基本Ş式:
W一UŞ式的trap命o在Shell接收Csignal list清单中数值相同的信号Ӟ执行双引号中的命o丌Ӏ?/font>
trap 'commands' signal-list
trap "commands" signal-list
Z恢复信号的默认操作,使用W二UŞ式的trap命oQ?/font>
trap signal-list
W三UŞ式的trap命o允许忽略信号Q?/font>
trap " " signal-list
注意Q?/font>
Q?Q对信号11Q段q例Q不能捕捉,因ؓShell本n需要捕捉该信号去进行内存的转储?/font>
Q?Q在trap中可以定义对信号0的处理(实际上没有这个信PQShellE序在其l止Q如执行exit语句Q时发出该信受?
Q?Q在捕捉到signal-list中指定的信号q执行完相应的命令之后,如果q些命o没有ShellE序l止的话QShellE序l执行收Ch所执行的命令后面的命oQ这样将很容易导致ShellE序无法l止?/p>
另外Q在trap语句中,单引号和双引h不同的。当ShellE序W一ơ碰到trap语句Ӟ把commands中的命o扫描一遍。此时若
commands是用单引hh的话Q那么Shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具?
的值来替换?strong>q行ShellE序的方?/strong> 用户可以用Q何编辑程序来~写ShellE序。因?
ShellE序是解释执行的Q所以不需要编译成目的E序。按照Shell~程的惯例,以bashZQ程序的W一行一般ؓ“#Q?bin/bash”Q其
?# 表示该行是注释,叹号 Q?
告诉Shellq行叹号之后的命令ƈ用文档的其余部分作ؓ输入Q也是q行/bin/bashq让/bin/bashL行ShellE序的内宏V?/p>
执行ShellE序的方法有3U?/p>
1Qsh ShellE序文g?/p>
q种Ҏ的命令格式ؓQ?/p>
bash ShellE序文g?/p>
q实际上是调用一个新的bash命o解释E序Q而把ShellE序文g名作为参C递给它。新启动的Shell去L定的文gQ可执行文g中列出的命oQ当所有的命o都执行完后结束。该Ҏ的优Ҏ可以利用Shell调试功能?/p>
2Qsh 格式为: bash< ShellE序?/p>
q种方式是利用输入重定向,使Shell命o解释E序的输入取自指定的E序文g?/p>
3Q用chmod命o使ShellE序成ؓ可执行的 一个文件能否运行取决于该文档的内容本n可执行且该文件具有执行权。对于ShellE序Q当用编辑器生成一个文件时Q系l赋予的许可权都?44(rw-r-r--)Q因此,当用户需要运行这个文件时Q只需要直接键入文件名卛_?/p>
在这3U运行ShellE序的方法中Q最好按下面的方式选择Q当刚创Z个ShellE序Q对它的正确性还没有把握Ӟ应当使用W一U方式进行调试。当
一个ShellE序已经调试好时Q应使用W三U方式把它固定下来,以后只要键入相应的文件名卛_Qƈ可被另一个程序所调用?/p>
4QbashE序的调?/p>
在编E过E中隑օ会出错,有的时候,调试E序比编写程序花费的旉q要多,ShellE序同样如此?/p>
ShellE序的调试主要是利用bash命o解释E序的选择V调用bash的Ş式是Q?/p>
bash -选择ShellE序文g?/p>
几个常用的选择ҎQ?/p>
-e 如果一个命令失败就立即退出?/p>
-n d命o但是不执行它们?/p>
-u |换时把未设|的变量看做出错?/p>
-v 当读入Shell输入行时把它们显C出来?/p>
-x 执行命o时把命o和它们的参数昄出来?/p>
上面的所有选项也可以在ShellE序内部?#8220;set -选择?#8221;的Ş式引用,?#8220;set +选择?#8221;则将止该选择v作用。如果只惛_E序的某一部分使用某些选择ҎQ则可以该部分用上面两个语句包围v来?/p>
Q?Q未|变量退出和立即退?/p>
未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量q止ShellE序的执行。Shell通常允许未置变量的用,在这U情?
下,变量的gؓI。如果设|了未置变量退出选择,则一旦用了未置变量显C错误信息,q终止程序的q行。未|变量退出选择ؓ-u?/p>
当Shellq行Ӟ若遇C存在或不可执行的命o、重定向p|或命令非正常l束{情冉|Q如果未l重新定向,该出错信息会昄在终端屏q上Q?
ShellE序仍将l箋执行。要惛_错误发生时迫使ShellE序立即l束Q可以?e选项ShellE序的执行立即终止?/p>
Q?QShellE序的跟t?/p>
调试ShellE序的主要方法是利用Shell命o解释E序?v?x选项来跟t程序的执行?v选择Shell在执行程序的q程中,把它d?
每一个命令行都显C出来,?x选择Shell在执行程序的q程中把它执行的每一个命令在行首用一?加上命o名显C出来。ƈ把每一个变量和该变量所
取的g昄出来。因此,它们的主要区别在于:在执行命令行之前?vQ则昄出命令行的原始内容,而有-v时则昄出经q替换后的命令行的内宏V?/p>
除了使用Shell?v?x选择以外,q可以在ShellE序内部采取一些辅助调试的措施。例如,可以在ShellE序的一些关键地方?
echo命o把必要的信息昄出来Q它的作用相当于C语言中的printf语句Q这样就可以知道E序q行C么地方及E序目前的状态?strong>bash的内部命?/strong>
bash命o解释套装E序包含了一些内部命令。内部命令在目录列表时是看不见的Q它们由Shell本n提供。常用的内部命o有:echo,
eval, exec, export, readonly, read, shift, wait和点(.)。下面简单介l其命o格式和功能?/p>
1Qecho 命o格式Qecho arg 功能Q在屏幕上显C出由arg指定的字丌Ӏ?/p>
2Qeval 命o格式Qeval args 功能Q当ShellE序执行到eval语句ӞShelld参数argsQƈ它们组合成一个新的命令,然后执行?/p>
3Qexec 命o格式Qexec命o参数 功能Q当Shell执行到exec语句Ӟ不会d建新的子q程Q而是转去执行指定的命令,当指定的命o执行完时Q该q程Q也是最初的ShellQ就l止了,所以ShellE序中exec后面的语句将不再被执行?/p>
4Qexport 命o格式Qexport变量?或:export变量?变量?/p>
功能QShell可以用export把它的变量向下带入子ShellQ从而让子进E承父q程中的环境变量。但子Shell不能用export把它的变量向上带入父Shell?/p>
注意Q不带Q何变量名的export语句显C出当前所有的export变量?/p>
5Qreadonly 命o格式Qreadonly变量?/p>
功能Q将一个用户定义的Shell变量标识Z可变。不带Q何参数的readonly命o显C出所有只ȝShell变量?/p>
6Qread 命o格式Qread变量名表 功能Q从标准输入讑֤d一行,分解成若q字Q赋值给ShellE序内部定义的变量?/p>
7Qshift语句 功能Qshift语句按如下方式重新命名所有的位置参数变量Q即$2成ؓ$1Q?3成ؓ$2…在程序中每用一ơshift语句Q都使所有的位置参数依次向左Ud一个位|,q位置参数$#?Q直到减?为止?/p>
8Qwait 功能QShell{待在后台启动的所有子q程l束。wait的返回值L真?/p>
9Qexit 功能Q退出ShellE序。在exit之后可有选择地指定一个数位作回状态?/p>
10Q?#8220;.”Q点Q?/p>
命o格式Q? ShellE序文g?/p>
功能QShelld指定的ShellE序文gq依ơ执行文件中的所有语句?/p>
3、查?0端口的连接数
netstat -nat|grep -i “80″|wc -l
4、查看系l内核版?br />
uname -a
5、查看Linux版本
d到服务器执行 lsb_release -a Q即可列出所有版本信?scp 本地用户?/span>@IP地址:文g?/span>1 q程用户?/span>@IP地址:文g?/span>2
选项说明Q详l的可用 man scp查询Q:
-v 和大多数 linux 命o中的 -v 意思一?/span> , 用来昄q度 . 可以用来查看q接 , 认证 , 或是配置错误 .
-C 使能压羃选项 .
-P 选择端口 . 注意 -p 已经?/span> rcp 使用 .
-4 使用 IPV4 地址 .
-6
使用
IPV6
地址
.
-r Recursively copy entire directories.
注:ip地址和文件名之间?:"Q且两台服务器的ssh1版本不一致的话可能会有问题?br />
# 启动pȝȀz设?br># Loop回环地址
auto lo
iface lo inet loopback
# 启动pȝȀz设?br># |卡eth0讄为DHCPcd
auto eth0
iface eth0 inet dhcp
// 静态Static获得
# 启动pȝȀz设?br># Loop回环地址
auto lo
iface lo inet loopback
# 启动pȝȀz设?br># |卡eth0讄为Staticcd
auto eth0
iface eth0 inet static
# 指定IP地址、子|掩码、广播、网?br>address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
# 指定DNS服务器地址
dns-nameservers 202.103.0.117
dns-search somedomain.org
========================
DNS服务器配|文Ӟ /etc/resolv.conf
// 必须讄.否则无法讉KMURL
nameserver 202.103.0.117
nameserver 211.95.193.97