??xml version="1.0" encoding="utf-8" standalone="yes"?>
q里的关键有几点Q?br />1 使用单个{号
2 注意到等号两边各有一个空|q是unix shell的要?br />3 注意?$test"x最后的xQ这是特意安排的Q因为当$test为空的时候,上面的表辑ּ变成了x = testxQ显然是不相{的。而如果没有这个xQ表辑ּ׃报错Q[: =: unary operator expected
二元比较操作W?比较变量或者比较数?注意数字与字W串的区?
整数比较
-eq {于,?if [ "$a" -eq "$b" ]
-ne 不等??if [ "$a" -ne "$b" ]
-gt 大于,?if [ "$a" -gt "$b" ]
-ge 大于{于,?if [ "$a" -ge "$b" ]
-lt 于,?if [ "$a" -lt "$b" ]
-le 于{于,?if [ "$a" -le "$b" ]
大于(需要双括号),?(("$a" > "$b"))
>= 大于{于(需要双括号),?(("$a" >= "$b"))
数据比较可使用AWK
字符串比?/strong>
= {于,?if [ "$a" = "$b" ]
== {于,?if [ "$a" == "$b" ],?{h
注意:==的功能在[[]]和[]中的行ؓ是不同的,如下:
1 [[ $a == z* ]] # 如果$a?z"开?模式匚w)那么ؓtrue
2 [[ $a == "z*" ]] # 如果$a{于z*(字符匚w),那么l果为true
3
4 [ $a == z* ] # File globbing 和word splitting会发生
5 [ "$a" == "z*" ] # 如果$a{于z*(字符匚w),那么l果为true
一点解?关于File globbing是一U关于文件的速记?比如"*.c"是,再如~也是.
但是file globbingq不是严格的正则表达?虽然l大多数情况下结构比较像.
!= 不等??if [ "$a" != "$b" ]
q个操作W将在[[]]l构中用模式匹?
大于,在ASCII字母序??
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]l构?>"需要被转义.
具体参考Example 26-11来查看这个操作符应用的例?
-z 字符串ؓ"null".是长度?.
-n 字符串不?null"
数字比较也可以用下面的表式方法:
if((${d1}==0)) if((${d1<0}))
]]>
1、没事不要用reboot,
2、reboot前最好备份数据库。(一ơreboot机子Q启动后mysql没有hQ发现mysql好像崩溃了,原因不详Q貌似是因ؓ机子上有两个版本的mysqlQ?/p>
3、不要随意用rmQrm时要保持头脑清晰。(最郁闷的是Q写好好久的shell,不小心一下rm了,我都快哭了)
4、尽量用cp,不要用mv。(tomcat会自动加载war包,当时不小心把zip更改成warQ项目下的图片是mvq去的,war自动解压Q把囄覆盖了,卛_除了Q郁P重先抓图片)
5、开攄口要。mysql仅请允许本机讉K?/p>
常用命oQ?/p>
一、jdk安装
mv jdk-6u24-linux-i586.bin /usr/java1.6/jdk-6u24-linux-i586.bin
cd /usr/java1.6/
chmod 755 jdk-6u24-linux-i586.bin
./jdk-6u24-linux-i586.bin
不用讄环境变量Q直接将tomcat的jdk指定到jdk目录
vi setclasspath.sh
在开始增加:
export JRE_HOME="/usr/java1.6/jdk1.6.0_24/"
export JAVA_HOME="/usr/java1.6/jdk1.6.0_24/"
启动tomcat,可以正常讉K?br /> 启动命oQ到tocmat目录下的bin
执行Q?br /> ./startup.sh start
停止命o
./shutdown.sh
通过以下命o可以查看q程以及端口受?br /> netstat -lpn
二、权限管?/p>
chmod
改变一个文件的权限Qchmod [mode] file.txt
改变一个目录的权限Qchmod [mode] dir
改变一个目录和其子目录的权限: chmod [mode] dir -R
mode = 777 or 752 and so on.
mode的三个数字,分别表示owner,group,others所具备的权限?br />1Qx 执行
2Qw ?br />4Qr ?br />比如ownerh所有权限,1+2+4=7,又比?group hd执行权限1+4=5?br />========================================================
chown
更改文g或目录的拥有?br />-R参数表示递归改变
[root@linux ~]#chown [-R] 账户名称 文g或目?br />[root@linux ~]#chown [-R] 账户名称:用户l名U?文g或目?
q个命o最好不要用得太猛了Q一ơ把var全改成了一个非root 用户Q结果导_ssh,mysql启动不v?br />mysql更改Q?font color="#333399"> chown -R mysql:mysql /mysqldatadir
sshd更改为root可以恢复
三、徏立一个用户和root权限相同
#useradd -o -u 0 -g 0 -M -d /root -s /bin/bash admin
#passwd admin
四、apache中整合tomcat时httpd.conf末尾dQ注Q必d启proxy(module)
<IfModule mod_proxy.c>
ProxyRequests On
<VirtualHost 127.0.0.1:80>
ServerName 127.0.0.1
ServerAlias test.com *.test.com
ProxyPass / http://localhost:8090/
ProxyPassReverse / http://localhost:8090/
ProxyPreserveHost On
ProxyVia On
</VirtualHost>
四、mysql操作
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpasswd');
xmysql的root密码讄为newpasswd
导入数据Q新建用户balidatabaseQ密码ؓQbali2010
grant all on mydatabase.* to username identified by 'passwd';
#生效用户权限更改
flush privileges;
q解决Q?/p>
my.cnf大致更改如下Q?/p>
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#使用utf-8
character-set-server=utf8
[client]
#使用utf-8
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
tomcat的server.xml更改如下Q?br /> <Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" acceptCount="100"
useBodyEncodingForURI="true"
URIEncoding="utf-8"
disableUploadTimeout="true" />
<!-- A "Connector" using the shared thread pool-->
在host节点下配|虚拟目录:
<Context path="" docBase="appName" />
五、日期设定:
#讄旉
date -s 16:54:00
date
#时间写入cmosQ保证下ơ启动时旉正常
clock -w
whereis clock
/sbin/clock -w
写得比较陋,自己能看懂?br />
1. 在LINUX命oq_输入1-2个字W后按Tab键会自动补全后面的部?前提是要有这个东西,例如在装了tomcat的前提下,输入tomcat的to按tab)?/p>
2. ps 命o用于查看当前正在q行的进E?/p>
grep 是搜?/p>
例如Q?ps -ef | grep java
表示查看所有进E里CMD是java的进E信?/p>
ps -aux | grep java
-aux 昄所有状?/p>
ps
3. kill 命o用于l止q程
例如Q?kill -9 [PID]
-9表示q程立即停止
通常用ps 查看q程PID Q用kill命ol止q程
|上关于q两块的内容
-----------------------------------------------------------------------------------
PS
-----------------------------------------------------------------------------------
1. ps?br />
ps命o是最Ҏ相应情况下也是相当强大地q程查看命o.q用该命令可以确定有哪些q程正在q行和运行地状态、进E是否结束、进E有没有僉|、哪些进E占用了q多地资源等{?M大部分信息均为可以通过执行该命令得到地.
2. ps命o及其参数
ps命o最l常使用地还是用于监控后台进E地工作情况,因ؓ后台q程是不和屏q键盘这些标准输?输出?br />
备进行通信?所以如果需要检其情况,便可以运用ps命o?
该命令语法格式如下:
ps [选项]
-e 昄所有进E?环境变量
-f 全格?br />
-h 不显C标?br />
-l 长格?br />
-w 宽输?br />
a 昄l端上地所有进E?包括其他用户地进E?br />
r 只显C正在运行地q程
x 昄没有控制l端地进E?br />
O[+|-] k1 [,[+|-] k2 [,…]] ҎSHORT KEYS、k1、k2中快捷键指定地多U排序顺序显CE列?
对于psC同格式都存在着默认地顺序指?q些默认序可以被用户地指定所覆盖.在这里面“+”字符是可选地,“-”字符是倒{指定键地方向.
pids只列E标识符,之间q用逗号分隔.该进E列表必d命o行参数地最后一个选项后面紧接着l出,中间不能插入I格.比如Qps -f1,4,5.
以下介绍长命令行选项,q些选项都运?#8220;--”开_
--sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYSD中选一个多字母?“+”字符是可选地,因ؓ默认地方向就是按数字升序或者词兔R?比如Q?ps -jax -sort=uid,-ppid,+pid.
--help 昄帮助信息.
--version 昄该命令地版本信息.
在前面地选项说明中提C排序?接下来对排序键作q一步说?需要注意地是排序中q用地值是psq用地内部?q仅用于某些输出格式地伪?排序键列表见?-3.
?-3 排序键列?br />
c
cmd
可执行地单名U?
C
cmdline
完整命o?
f
flags
长模式标?
g
pgrp
q程地组ID
G
tpgid
控制ttyq程lID
j
cutime
累计用户旉
J
cstime
累计pȝ旉
k
utime
用户旉
K
stime
pȝ旉
m
min_flt
ơ要错误地数量
M
maj_flt
重点错误地数量
n
cmin_flt
累计ơ要错?
N
cmaj_flt
累计重点错?
o
session
对话ID
p
pid
q程ID
P
ppid
父进EID
r
rss
ȝ大小
R
resident
ȝ?
s
size
内存大小(千字?
S
share
׃n地数量
t
tty
ttyơ要讑֤?
T
start_time
q程启动地时?
U
uid
UID
u
user
用户?
v
vsize
d虚拟内存数量(字节)
y
priority
内核调度优先U?br />
3. l常使用ps命o参数
最l常使用C个参数是u、a、x,下面通过例子来说明其具体用法.
[?0] 以rootw䆾dpȝ,查看当前q程状况
$ ps
PID TTY TIME COMMAND
5800 ttyp0 00:00:00 bash
5835 ttyp0 00:00:00 ps
可以看到,昄地项目共分ؓ四项,依次为PID(q程ID)、TTY(l端名称)、TIME(q程执行旉)
、COMMAND(该进E地命o行输?.
可以q用u选项来查看进E所有者及其他许详细信息,如下所C:
$ ps u
USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u
在bashq程前面有条横线,意味着该进E便是用户地dshell,所以对于一个登录用h说带短横U地q程只有一?q可以看?CPU?MEM两个选项,前者指该进E占用地CPU旉和L间地癑ֈ?后者指该进E占用地内存和d存地癑ֈ?
在这U情况下看到了所有控制终端地q程;当然对于其他那些没有控制l端地进E还是没有观察到,所以这时就需要运用x选项.q用x选项可以观察到所有地q程情况.
-----------------------------------------------------------------------------------
KILL
-----------------------------------------------------------------------------------
׃职责的要求,你不得不费力地阅读那些o你感到费解的晦ӆ的Linux应用E序的说明文件。然后,你将q行指o和编辑设|文件。一切都在正常运行,生活真美好。但是,你知道,好时光不会永q持l下厅R当你遇Co人恐惧的“send the process a SIGHUP”提示Ӟ好时光结束了?/p>
什么是“SIGHUPQ启动信P”Q你如何发送它?它像是你送给你的恋h的一束花?虽然你可以肯定这不是一个命令行指oQ不q,你还是试着键入它。当Ӟq没有结果。然后,你检查一下键盘。哦Q没有SIGHUP键。于是你又重新阅读这个应用程序的参考指南,看到下面q段文字:
当收C个hangupQ进E结束)信号ӞsshdE序会重新阅读配|文件。通过执行启动E序时的命o及选项来发送SIGHUP信号Q如:/usr/sbin/sshd?/p>
哦,原来是这栗?/p>
E序?VS 使用?/p>
LINUXE序的在U参考指南作者一般都要既照顾到最l用L需求也要照ֈ高E序员的需求。因此,有些说明比较难懂。不q,不要担心。现在我们就要揭开覆盖在这些让惑的内容上面那神U的面纱?/p>
信号与进E控?/p>
q个问题主要属于信号和进E控制的范畴。对于我们系l管理员和普通用h_我们主要兛_的是启动、停止和重新启动服务、停止失控的q程和被挂v的进E,q且可能不中断pȝq行。因Z同的
操作pȝ和不同的命o外壳处理信号的方式都不相同,我们q里只介lLinux操作pȝ和bash外壳?/p>
信号是用来与守护E序和进E通信的。Q何活动Q务都是一个进E,而守护程序是{待Ҏ些事件做出反应或者按照日E安排执行Q务的后台服务。一个程序必L建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal 参考指南解释了各种不同信号和这些信L用途。信h?#8220;kill”命o发出的。kill -l命o可以昄一个可用信号列表及其编受?/p>
所有的守护E序和进E都有一个进EID(PID)Q例如用ps命名所昄的内容:
$ ps aux
USER PID %CPU %MEM TTY STAT COMMAND
root 1 0.0 0.1 ? S init [2]
105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system
hal 7796 0.0 0.7 ? Ss /usr/sbin/hald
postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c
nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg
q个输出是经q简化的。你在系l中可以看到更多的行和栏目。如果某些进E消耗了你的全部CPU或者内存,你可以在q个输出?CPU?MEM列中发现它们。找到失控的q程的一U更快捷的方法是使用top命oQ因为按照默认的讄Q用占用CPU资源最多的q程在最上面昄。我们可以用一?#8220;yes”命o来测试一?
$ yes carla is teh awesum
q个命o以很高的速度反复昄“carla is teh awesum”Q直C停止它运行。这你的CPU使用率达到警戒线?/p>
$ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole
22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes
分析一下这个结果,你会发现一些有的事,你会发现Q占用CPU最多的E序是konsole虚拟l端E序Q而不?#8220;yes”命oQ这是因?#8220;yes”命o是在konsolel端E序中运行的。如果在一?#8220;真正?#8221;控制?按Ctrl+alt+f2?中运行同L命o序列Q你看?#8220;yes”命o被排在第一位?/p>
有许多停?#8220;yes”命oq行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命o停止“yes”命o的运行,Kill命o后面跟PID或者命令名Uͼ如下如示:
$ kill 22236
或?/p>
$ killall yes
按CTRL+c键发Z个SIGINTQ信?Q,q个信号是键盘要求取得控制权的中断信受kill和killallq两个命令按照默认的讄都发Z个SIGTERM信号(~号15)。程序中可以讄对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的E序对于KILL命o的反应与你预期不同,很可能是被KILL的目标程序的问题?/p>
l止一个父q程通常也终止了它的子进E。不q,情况q不L如此。你知道子进E是什么吗?使用ps命o加上-f选项可以看刎ͼ如下所C?
$ ps axf
22371 ? R 2:35 _ konsole [kdeinit]
22372 pts/3 Ss 0:00 | _ /bin/bash
24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum
22381 pts/4 Rs 0:00 | _ /bin/bash
24323 pts/4 R+ 0:00 | | _ ps axf
现在Q回到SIGHUP的话?/p>
SIGHUP的发x“sig-hup”Q是signal hangup的羃写,含义?#8220;中止信号”。你如何发送一个SIGHUP信号?q里有几U方?
# kill -HUP [pid]
# killall -HUP [process-name]
# kill -1 [pid]
# killall -1 [process-name]
因此Q你可以使用PID或者名Uͼ信号名称或者号码。那么ؓ什么要q样做而不使用/etc/init.d/foo命o重新启动?使用它们自己的init(初始?文g来控制服务是优先选择的方式,因ؓq些文g通常包含健全和错误检查以及额外的功能。?#8220;kill”命o和信L主要原因是尽可能明确地终止挂起和失控的进E,而不必重新启动或者登出?/p>
l止q程
正如你在关于信号的man page中所看到的,有十几种控制q程的方法。下面是一些常用的Ҏ:
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进E,而ƈ不消灭这个进E?/p>
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的q程?/p>
kill -KILL [pid]
发送SIGKILL (9)q程立即停止Qƈ且不实施清理操作?/p>
kill -9 -1
l止你拥有的全部q程?/p>
SIGKILL和SIGSTOP信号不能被捕捉、封锁或者忽略,但是Q其它的信号可以。所以这是你的终极武器?/p>
Bash shell的Kil命ol
Bash外壳包含一个内|的kill命oQ当执行下面命o:
$ type -all kill
kill is a shell built-in
kill is /bin/kill
命o的结果表明有两个kill命oQ一个是BASH的内|命令,另一个是/bin/kill可执行程序。一般来说这两个命o不太可能遇到冲突的情况,不过Q如果你实遇到了kill命o行ؓ异常Ӟ你可以明的指定/bin/kill命o?/p>
你一定要q一步查阅下面的资源中列出的参考资源来了解Linux中kill的妙用,因ؓq是你进入维护Linuxpȝ领域的门。这些知识能够让你像做外U手术一样对pȝq行l护Q而不用在遇到问题时每一ơ都重新启动pȝQ就像我们知道的某些y脚?/p>
操作pȝ那样?/p>
资源
Linux Cookbook一书的W七?#8220;开始和l止Linux”
bash (1) - GNU Bourne-Again Shell
yes (1) - 在被l止前反复打印字W?/p>
signal (7) - 可用信号列表
ps (1) - 报告当前q程的快?/p>
kill (1) - 向一个进E发Z?/p>
killall (1) - 按名字消灭进E?/p>
pkill (1) - Ҏ名字和其它属性查看或者发E信?/p>
skill (1) - 发送一个信h者报告进E状?/p>
xkill (1) - 按照X资源消灭一个客L?/p>
Fedora 13 如同前作 Fedora 12 一P默认开启了 Nouveau ?KMS 模块Q尽已l可以通过 Gallium3D 获得完整 3D 加速支持,但肯定还有一些追求性能和希望用高清视频加速的朋友需?NVIDIA 的二q制驱动?/p>
本文以?rpmfusion 打包?NVIDIA 的二q制驱动ZQ若需要安?Nvidia 官方站点提供的版本,请参?a > Fedora 12 的文?/a> q依照此文做出相应修攏V?/p>
1. d rpmfusion 仓库Q?/p>
su -c 'rpm -Uvh
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm'
2. 使用 yum 安装驱动Q?/p>
su -c 'yum --nogpgcheck install xorg-x11-drv-nvidia akmod-nvidia'
3. 屏蔽 initrd 中的 nouveau 模块Q?/p>
su -c 'sed -i '/root=/s|$| rdblacklist=nouveau|' /etc/grub.conf'
4. 重启
非常必要Q?/strong>
在此感谢 FedoraForm ?strong> leigh123linux ?/strong>?HowTo ?/p>