??xml version="1.0" encoding="utf-8" standalone="yes"?>色综合久久最新中文字幕,99久久精品免费看国产免费,久久久久亚洲AV成人网人人网站http://www.shnenglu.com/amazon/category/11064.htmlzh-cnFri, 30 Sep 2011 09:10:47 GMTFri, 30 Sep 2011 09:10:47 GMT60Shell脚本基本内容http://www.shnenglu.com/amazon/archive/2010/03/11/109440.htmlq风q风Thu, 11 Mar 2010 09:01:00 GMThttp://www.shnenglu.com/amazon/archive/2010/03/11/109440.htmlhttp://www.shnenglu.com/amazon/comments/109440.htmlhttp://www.shnenglu.com/amazon/archive/2010/03/11/109440.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/109440.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/109440.html#!/bin/bash
#脚本用途:
#创徏日期Q?br>#Written by someone
正文......

在shell中,所有没有声明的变量都默认是呈现字符串Ş式,所以var=5*7;$var成为字W串形式"5*7"Q而不会进行Q何算术运。声明变量用declare指o?br>delcare [-afirx] var=...
-a 定义为数l?br>-f 定义为函?br>-i 定义为整?br>-r 定义为只?nbsp;
-x 定义为通过环境输出变量

read name
read的功能是用户在键盘上输入的内容攑ֈ变量name中?br>read name < file的Ş式通过重定向改变了输入源ؓfile?br>
脚本的参CP
$0 脚本的文件名
$1 W一个附加参?br>$2 W二个附加参?br>$3 ......
$# 传递给脚本的参C?br>$@ 传递给脚本的所有参?br>$$ 脚本的进E号Q通常用它来生成唯一的时文Ӟ/tmp/tmpfile_$$

逻辑判断式:

关于文g与目录的逻辑判断Q格式是-×× file或? -×× fileQ注??xx和file之间有空|
-f 文件是否存?br>-d 测目录是否存在
-b 是否ؓblock文g
-c 是否ؓcharacter文g
-L 是否ؓW号链接文g
-S 是否ؓsocket标签文g
-e 某个东西是否存在,可以是Q何东?br>
关于E序的逻辑判断Q格式是-×× proc
-G 是否由GID所执行的程序拥?br>-O 是否由UID所执行的程序拥?br>
关于文g的属性检,格式?×× file
-r 是否ؓ可读属?br>-w 是否ؓ可写属?br>-x 是否ؓ可执行属?br>-s 是否ؓ非空白文?br>-u 是否具有SUID属?br>-g 是否具有SGID属?br>-k 是否具有sticky bit属?br>
两个文g的判断与比较Q格式是file1 -×× file2
-nt W一个文件比W二个文件新
-ot W一个文件比W二个文件旧
-ef W一个文件和W二个文件ؓ同一个文Ӟ诸如链接文gQ?br>
逻辑与、逻辑?br>&& 逻辑?br>|| 逻辑?br>
q算W:
-eq {于
-ne 不等?br>-lt 于
-gt 大于
-le 于或等?br>-ge 大于或等?br>-a 双方都成立(andQ?br>-o 单方成立QorQ?br>
字符串比较:
= 两个字符串相?br>!= 两个字符串不?br>-z I字W串
-n 非空字符?br>
条g判断Q?br>if [条g判断1] &&/|| [条g判断2]; then
  ……
elif [条g判断1] &&/|| [条g判断4]; then
  ……
else
  ……
fi
注意Q在[]中,只能有一个判断式Q在[]与[]之间Q可以?amp;&或者||l合判断式;[]中每一个独立的lg之间需要用I格键隔开Q这一点尤其要注意Q其中组件是指[、]、变量、运符号和字符丌Ӏ值等。例如:
if [ "$var" = "yes" ]; then

case var in
方式一 | 方式×)
  E序D?br>  ;;
方式?| 方式×)
  E序D?br>  ;;
*)
  echo "Usage {方式一|方式二}" 
  exit 1
esac
 
循环Q?br>for((条g1;条g2;条g3))
do
 E序D?br>done

for var in var_list     //var_list是以I格键分开的选择,多ؓ字符Ԍ例如for var in yes no other或者for var in "yes" "no" "other"
do
 E序D?br>done
看下面一D脚本程序,该程序演CZ$(command)的用法,for命o的参数来?()中的命o的结果:
for file in $(ls *.sh)
do
 lpr $file
done

while [条g]
do
 E序D?br>done

until [条g]
do 
 E序D?br>done

调试脚本Q?br>sh [-nvx] scripts
-n 不执行脚本,查询脚本内的语法Q若有错误则列出
-v 在执行脚本之前,先将脚本的内ҎC在屏幕?br>-x 用到的脚本内容昄在屏q上Q与-vE微不同

注意Q?br>1.在条件判断时一般?$var"的Ş式,q是Z防止出现var为空的情况,例如Qif [ $var = "yes" ]中,如果var为空Q那么会出现if [ = "yes" ]的情况,q是不合法的Q而if [ "$var" = "yes"]则不会出现该问题?br>



q风 2010-03-11 17:01 发表评论
]]>
q程在前C后台之间切换http://www.shnenglu.com/amazon/archive/2010/02/01/106948.htmlq风q风Mon, 01 Feb 2010 08:30:00 GMThttp://www.shnenglu.com/amazon/archive/2010/02/01/106948.htmlhttp://www.shnenglu.com/amazon/comments/106948.htmlhttp://www.shnenglu.com/amazon/archive/2010/02/01/106948.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/106948.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/106948.html
前台转入后台

W一U,在要q行的命令后面加?amp;Q命令自动{入后台运行,不占用前台终端。例如运行一个不断打印字W串到标准输出的可执行程序,输入如下Q?br>$ vi test.c
#include <stdio.h>
main()
{
   while(1)
      print("ok \n");
}
$ gcc -o test test.c
$ ./test &
此时testE序{入后台l执行,q在标准输出x制台上打印出字符。停止该E序的方法是利用ps命o扑ֈ该程序的对应q程号numQ然后运行kill num。注意:在控制台中不断出现的打印字符会没输入的命oQ但是没有Q何媄响,命o依然可以被正解析?br>
W二U,q行./test后,使用ctrl+z使正在运行的命o./test暂停Qctrl+c是终止)Q用命ojobs查看惌转入后台的命令编号nQ然后运行bg n卛_。注意,该命令的最l作用等价于?/test命o后面加上&W号?br>
W三U,使用nohup+命o的运行方式,在缺省情况下该命令的所有输出都被重定向C个名为nohup.out的文件中Q除非有指定的重定向文g。例如:
nohup command &
nohup command >result 2>&1 &
而且使用nohup转入后台的命令,在关闭shell后重新登录,该命令依然处于运行状态,但通过ps命o不会昄Q而是使用ps x或者ps –A命o方可昄?br>注意Q如果是执行脚本q定向输出的话Q不应该在脚本内部写Q而是写成Q?br>nohup ./***.sh >result 2>&1 &

以上三种Ҏ的特ҎQ第一、二U方法在退shellq程后命令均不存在。第三种Ҏ即退出shellq程后,命o依然存在Q而命令的控制权交l了init?br>
后台转入前台

使用jobs命o查看要{入前台的命o~号nQ然后运行fg n卛_。fg命o?front ground"?br>


q风 2010-02-01 16:30 发表评论
]]>
Linux串口~程http://www.shnenglu.com/amazon/archive/2010/01/28/106644.htmlq风q风Thu, 28 Jan 2010 08:16:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/28/106644.htmlhttp://www.shnenglu.com/amazon/comments/106644.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/28/106644.html#Feedback2http://www.shnenglu.com/amazon/comments/commentRss/106644.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/106644.html阅读全文

q风 2010-01-28 16:16 发表评论
]]>
tar命o的C参数http://www.shnenglu.com/amazon/archive/2010/01/13/105571.htmlq风q风Wed, 13 Jan 2010 07:10:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/13/105571.htmlhttp://www.shnenglu.com/amazon/comments/105571.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/13/105571.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/105571.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/105571.html
解答1Q?br>$ tar -cvf file2.tar /home/usr2/file2
tar: Removing leading '/' from members names
home/usr2/file2
该命令可以将/home/usr2/file2文g打包到当前目录下的file2.tar中,需要注意的是:使用l对路径标识的源文gQ在用tar命o压羃后,文g名连同绝对\径(q里是home/usr2/Q根目录'/'被自动去掉了Q一q被压羃q来。用tar命o解压~后会出C下情况:
$ tar -xvf file2.tar
$ ls
…… …… home …… ……
解压~后的文件名不是惌中的file2Q而是home/usr2/file2?br>
解答2Q?br>$ tar -cvf file2.tar -C /home/usr2 file2
该命令中?C dir参数Q将tar的工作目录从当前目录改ؓ/home/usr2Q将file2文gQ不带绝对\径)压羃到file2.tar中。注?span style="COLOR: #ff0000">Q?C dir参数的作用在于改变工作目录,其有效期命o中下一?C dir参数之前?br>使用tar?C dir参数Q同样可以做到在当前目录/home/usr1下将文g解压~到其他目录Q例如:
$ tar -xvf file2.tar -C /home/usr2
而tar不用-C dir参数时是无法做到的:
$ tar -xvf file2.tar /home/usr2
tar: /tmp/file: Not found in archive
tar: Error exit delayed from previous errors



q风 2010-01-13 15:10 发表评论
]]>
库文档的开发与使用http://www.shnenglu.com/amazon/archive/2010/01/12/105471.htmlq风q风Tue, 12 Jan 2010 02:41:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/12/105471.htmlhttp://www.shnenglu.com/amazon/comments/105471.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/12/105471.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/105471.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/105471.html库对应的头文件有两种Q包括公有头文g和私有头文g。公有头文g声明的资源对其他E序是有效的Q而私有头文g声明的资源只能被对应的库代码使用?span style="COLOR: red">Z使库成ؓ公有的,应将它安装在目录/usr/lib中,q将它的头文件放?usr/include中,q在用户E序中?include <>的方式引入库头文?/span>。将头文件的路径名放|在引号中,可私有头文g攑օE序中,比如#include "hello.h"Q预处理E序会首先在当前目录查找hello.h头文Ӟ如果写成#include "-/include/hello.h"Q预处理E序׃在目录~/include中搜索头文ghello.h?br>库文档必M.a扩展名结束,一旦ؓ一l目标模块创Z一个库文gQ通过制定库文档作为参敎ͼq些模块可以被CE序Ҏ-l*链接使用?span style="COLOR: red">对于标准库,例如C中的libc.aQ只需要在用户E序中添加相应的头文件比如stdio.h、stdlib.h、ctype.h{,而不需要明地?l~译E序选项去链接该库;但还有许多库不是标准库,例如数学库libm.aQ除了需要添加相应头文g之外Q还必须明确地用~译E序选项-lm链接该库Q其?l~译选项在lib?a之间指定子串Q不明确指定的话会在~译器生错误?br>注意Q?br>1.标准C语言库libc.a在编译程序的链接阶段自动被链接?br>2.一些常见的与库相关的编E错误:
没有为库加入头文?br>没有明确链接一个库Q而这个库不能被程序自动链?br>使用了错误版本的?br>链接了不兼容的库

------------------------------------------------------------------------------------------------------

库的开?/strong>

使用arE序可以执行各种与库相关的Q务,比如在库文g中创建、修改和提取模块{。与linux命o不同Qar命o的关键字不需要?q字W?br>
ar 关键?nbsp;库文档名 文g列表
d    在库文档中删除一个文?br>q    在现有库文档中添加一个文Ӟ若库文档不存在,则创Z
r     新徏一个库文档或覆盖一个现有库文档
t     昄一个库文档目录
s    强制生成库文档符可
x     从一个库文档中提取一个或多个文gQƈ它们保存在当前的工作目录中
v    生成一个详l的输出

假设已存在main.c、compute.c、input.c、main.h、compute.h、input.hq些文gQ且compute.c使用了数学库libm.aQ下面的例子用于库文档的创徏和追加等?br>ar r libmath.a input.o compute.o
该命令创Z文ginput.o和compute.o的库文档文glibmath.aQ如果该库文档已存在则会被覆盖。上q命令当libmath不存在时Q可以?strong>ar q libmath.a input.o compute.o
代替Q该命o在libmath.a中追加新文gQ当libmath.a不存在时自动创徏Q当惛_当前目录中所有目标文仉攑օ库文件中Q也可以使用ar r libmath.a *.o或?strong>ar r libmath.a `ls *.o`q样的命令?br>gcc main.c libmath.a -o power -lm
该命令将库文档中的input.o和compute.o链接到main.o上,使用-lm链接数学库libm.aQ因为在compute.o中用了pow函数。将libmath.a安装?usr/lib后,可以通过-lmath的方式用了?br>rm compute.o input.o
创徏目标模块的库文档后,可以删除原有模块?br>ar t libmath.a
该命令用于显C库文档libmath.a的目录,同理可以使用ar vt libmath.a命o获得更详l的输出?br>ar d libmath.a input.o
该命令用于从库文档libmath.a中删除一个或多个目标模块?br>ar x libmath.a compute.o
该命令下哦那个库文档libmath.o中提取一个或多个目标模块Qƈ攑֜当前目录中?br>
在makefile中也可以使用ar命oQ这样创Z软g的可执行文g之后Q也可以创徏目标文档的库文档Q具体方法如下:
CC=gcc
OPTIONS=-03
OBJECTS=main.o input.o compute.o
SOURCES=main.c input.c compute.c
HEADERS=main.h input.h compute.h
ARCHIVE=compute.o input.o
LIBRARY=libmath.a
AR_KEYS=qv
complete : power
    @echo "Build complete"
power : $(OBJECTS)
    $(CC) $(OPTIONS) -o $@ $^ -lm
    @echo "The executable is in the 'power' file"
main.o : main.h input.h compute.h
compute.o : compute.h
input.o : input.h
buldle :
    @echo "Archiving object modules..."
    ar $(AR_KEYS) $(LIBRARY) $(ARCHIVE)
    @echo "Archiving is complete."
power.tar : makefile $(HEADERS) $(SOURCES)
    tar -cvf $@ $^
clean :
    rm -f *.o

---------------------------------------------------------------------------------------------

库的使用

在安装库文档之前Q需要给库文档生成和d一个目录烦?/span>。库文档中的目标文g不是以Q意顺序排列的Q而是依赖于模块被插入到库文档中的序。带有目录的库文档在链接阶段是必要的Q它允许库文档中的函C相调用,而无些函数在库文档中的位|如何?br>ranlib 库文档列?/strong>
该命令可以ؓ库文档列表中的每个库文档生成和添加一个目录,该命令与如下命o相同Q?br>ar s 库文?br>
一旦添加了目录之后Q就可以安装该库使其成ؓ公有Q主要采取两个步骤:
1.创徏库的头文件ƈ把它攑֜/usr/include目录中,头文件包含库中资源的声明。一个库文档可以对应多个头文Ӟ例如libmath.a可以对应input.h和compute.h?br>2.?usr/lib目录中放|该库文档,例如/usr/lib/libmath.a?br>3.在用该库时Q在E序中加入对应头文gQƈ用带?lmath的编译命令即可?br>
可以用nm命o昄一个库、目标或可执行文件的W号表,表中包括名称、类型、大和q入点等信息。它的输出告知该库的属性,输出的每一行是每一个标识符Q例如文件中的某个函数名或者变量名。nm命o昄的信息用于调试库和可执行文gQ对于库文档中的每个文g或成员,nm命o臛_会将下面的信息发送到标准输出Q每个符L地址、符Lg及其cd。根据选项Q也可能输出库或目标的名UC及符L大小{?/p>

nm [选项] [文g列表(库文?目标文g/可执行文?]
-D    只显C动态符P当用动态库时很有用
-V    nm命o版本?br>-g    只显C全局W号的相关信?br>-l     为每一个符h扑֒昄文g名和行号
-n    用地址l外部符号分c?br>-u    只显C未定义的符Px个目标模块的外部W号
-w   l出更多警告信息
-f 格式    以不同格式输出,可以是bsd、sysv、posix{,默认是bsd

对nm命oQ以后再q行详细学习Q在此省略?br>




q风 2010-01-12 10:41 发表评论
]]>
makefile和make规则http://www.shnenglu.com/amazon/archive/2010/01/10/105358.htmlq风q风Sun, 10 Jan 2010 12:46:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/10/105358.htmlhttp://www.shnenglu.com/amazon/comments/105358.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/10/105358.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/105358.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/105358.html首先介绍make实用E序的语法和常用选项Q然后细剖makefile文g的组成?br>
make命o

make [选项] [目标] [宏定?/span>]
通过命o行参C的targetQ可指定make要编译的目标Qƈ且允许同时定义编译多个目标,操作时按照从左向右的序依次~译target选项中指定的目标文g。如果命令行中没有指定目标,则系l默认target指向描述文g中第一个目标文件?br>-d    昄调试信息
-n    不运行Q何makefile文gQ只打印需要执行的命o
-p    输出所有宏定义和目标文件描q?br>-s    静止状态下q行Q不昄M命o行信?br>-f file    通知makeE序从file中读取内部依赖说明,~省情况下会dmakefile或者Makefile文g处理Q文件名-表示d标准输入Q在Linux中,GNU make工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索makefile文g

注意Q在源文件没有被修改的情况下Q运行make命o会生成一条消息,说源文g的可执行文g是最新的Q不需要用make命o重新~译和链接。要强制再创建可执行代码Q需要改变源文g的上ơ更新时_可以使用touch命oQ然后再ơ运行make命o?/span>

touch [选项] 文g或目?br>-r 文g或目?nbsp; 把指定文件或目录的日期时_设成和参考文件或目录的日期时间相?br>-d 日期旉     使用指定的日期时_而非现在的时?nbsp;


makefile规则

makeE序Z文g之间的依赖性,需要徏立的目标文gQ以及徏立目标文件时要执行的命oQ以上所有被UCؓ规则Q存攑֜文gmakefile中。定制规则的语法如下Q?br>目标列表 : 兌性列?br><TAB>命o列表
注意Q?br>1.可以在关联性列表和命o列表中用shell文g名模式匹配字W,例如??、[]{等?br>2.如果目标的命令列表中某个命o前面带有@Q那么当makeE序执行Ӟ该命令是不会有反应的Q在E序q行完毕之后Q所有前面带@的命令按照反序执行。可以通过执行make -n命o昄q些命o以供查看?br>3.如果目标的命令列表中某个命o前面带有-Q说明如果该命o执行有误Q会跌该命令ƈl箋执行?/span>

makeE序使用makefile中的规则军_E序中需要重新编译的文gQƈ再次链接生成可执行代码。如果源文g上修改的旉x目标文g上的旉x斎ͼ那么make重新~译build中包含的源文件。例如,如果修改了一?h头文ӞmakeE序׃重新~译所有包含该头文件的源文Ӟ前提是头文g在这些源文g的目标文件的兌性列表中Q再如某.c源文件被修改Q那么该源文件被重新~译Q生成对应的新的目标文g?br>myprog : foo.o bar.o
    gcc –o myprog foo.o bar.o
foo.o : foo.c foo.h bar.h
    gcc –o foo.o –c foo.c
bar.o : bar.c bar.h
    gcc –o bar.o –c bar.c
上述规则中,只要目标文g比冒号后面的文gM一个旧Q将会执行下一行的命oQ但是在查foo.o和bar.o的时间之前,会往下查N些把foo.o和bar.o作ؓ目标文g的规则;以此cLQƈ最l回到myprog规则?br>如何得到每个C文g的输则呢Q可使用-M?MM~译选项。注意:使用-M?MM~译选项Ӟ仅在shell中输则信息,不能用于产生可执行文Ӟ即不能写成gcc -o hello -M hello.cq样的Ş式?br>gcc –M hello.c            //输出hello.c和该文g中所?lt;>?#8221;”包含的头文g
gcc –MM hello.c        //仅输出hello.c和该文g中所?#8221;”包含的头文g

后缀Q隐含)规则

make -p命o昄了所有后~规则列表。ؓ了徏立一个目标,make使用E序会遍历一q串的依赖关p,从而决定从何处开始徏立。如果没有找到目标文ӞmakeE序按照优先序查找源文Ӟ首先查找.c?f?s后缀的文Ӟ然后再查找SCCSQ带.c~后缀Q文Ӟ如果没有扑ֈM一个源文gQmakeE序׃报告一个异常?br>makeE序知道调用gcc -c xxx.c -o xxx.o的预定义命oQ而且q知道目标文仉常和源文g是相同的Q这U功能称作标准依赖性,所以foo.o : foo.c foo.h bar.hq样的语句可以简写成foo.o : foo.h bar.h。同Ӟ如果把生成foo.o和bar.o的命令从规则中删除,make自动查扑֮的隐含规则(gcc -M/MM输出的代码)Q然后找C个适当的命令,命o中会使用一些变量,q且按照一定步骤设定?br>因此Q上qmakefile的内容可以根据后~规则写成Q?br>myprog : foo.o bar.o
    gcc –o myprog foo.o bar.o
foo.o : foo.h bar.h
bar.o : bar.h

宏定义(变量Q?/strong>

makefile中的变量定义可以存储文g名列表、可执行文g名以及编译器标识{,主要是用如下方法:

VAR=name     变量定义
define VAR   
    name
endef        同上
$(VAR)       使用变量Q如果变量名为单字符Q可以不使用圆括h花括?br>${VAR}       同上
$@           当前目标文g
$*           删除了后~的目标名
$<           依赖列表中,比当前目标更新的当前依赖名称Q即W一个依赖文Ӟ
$^           整个依赖列表
$?           依赖列表中,比当前目标更新的当前依赖列表
CFLAGS       通常默认值是-OQ但是可以被修改

未用后~规则的makefile文g变成如下Q?br>OBJS=foo.o bar.o
SOURCES=foo.c bar.c
HEADERS=foo.h bar.h
CC=gcc
CFLAGS=-Wall -O -g
myprog : $(OBJS)
    $(CC) $^ -o $@
foo.o : foo.c foo.h bar.h
    $(CC) $(CFLAGS) –c $< -o $@
bar.o : bar.c bar.h
    $(CC) $(CFLAGS) –c $< -o $@
而用了后缀规则的makefile文g变成如下Q?br>OBJS=foo.o bar.o
SOURCES=foo.c bar.c
HEADERS=foo.h bar.h
CC=gcc
myprog : $(OBJS)
    $(CC) S^ -o $@
foo.o : foo.h bar.h
bar.o : bar.h

虚目?br>
假设一个项目最后需要生两个可执行文gexec1和exec2Q但两个文g是相互独立的Q此时可使用假想目的all来达到效果?br>all : exec1 exec2
all文gq不存在QmakeL会假讑֮需要被生成Q因此会查它的依靠文件exec1和exec2是否需要更斎ͼ当把它的依靠文g更新后,׃执行它的规则里的命o行,但是在规则里没有哪个命o作用于名为all的实际文Ӟ所以该规则q不真正改变all的状态?br>注意下面的语句用法,q些语句可以d到makefile文g后:
myprog.tar : makefile $(SOURCES) $(HEADERS)
    tar -cvf $@ S^
clean :
    rm *.o
当make命o不带参数执行Ӟ最后两个目标myprog.tar和clean的命令不会执行,因ؓq些文g没有依赖文g。将q两个目标作为参C递给make命oQ可以调用与目标兌的命令。例如:执行make myprog.tar命o会执行tar -cvf myprog.tar makefile foo.c bar.c foo.h bar.h语句Q而执行make clean命o会执行clean *.o语句?br>
下面l出一个较完整的makefile文gQ?br>---------------------------------------------------------
#Updated makefile that uses some built-in macros and
#@-preceded commands
define CC
    gcc
endef
OPTIONS=-03
OBJECTS=main.o input.o compute.o
SOURCES=main.c input.c compute.c
HEADERS=main.h input.h compute.h
complete : power
    @echo "Build complete"
power : $(OBJECTS)
    $(CC) $(OPTIONS) -o $@ $^ -lm
    @echo "The executable is in the 'power' file"
main.o : main.h input.h compute.h
compute.o : compute.h
input.o : input.h
power.tar : makefile $(HEADERS) $(SOURCES)
    tar -cvf $@ $^
clean :
    rm -f *.o
-----------------------------------------------------
执行l果为:
-----------------------------------------------------
$ make
gcc -c main.c -o main.o
gcc -c input.c -o input.o
gcc -c compute.c -o compute.o
gcc -o3 -o power main.o input.o compute.o -lm
The executable is in the 'power' file
Build complete
$ make power.tar
tar -cvf power.tar makefile main.h input.h compute.h main.c input.c compute.c
makefile
main.h
input.h
compute.h
main.c
input.c
compute.c
$ make clean
rm -f *.o
------------------------------------------------------



q风 2010-01-10 20:46 发表评论
]]>
Linux通配W?/title><link>http://www.shnenglu.com/amazon/archive/2010/01/07/105105.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Thu, 07 Jan 2010 09:08:00 GMT</pubDate><guid>http://www.shnenglu.com/amazon/archive/2010/01/07/105105.html</guid><wfw:comment>http://www.shnenglu.com/amazon/comments/105105.html</wfw:comment><comments>http://www.shnenglu.com/amazon/archive/2010/01/07/105105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/amazon/comments/commentRss/105105.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/amazon/services/trackbacks/105105.html</trackback:ping><description><![CDATA[<p>在用shell命o对多个文件对象执行单一操作Ӟ例如删除当前目录下的file1到file8Q多ơ用相同的命orm file1到rm file8非常ȝQ通常使用通配W模式解册个问题:rm file[1-8]?br>当用通配W指定一U模式时Q该模式与底层系l上的一个或多个文g匚wQshell以空格隔开的所有匹配对象的列表来替换该模式Q当模式不能扑ֈ匚w对象Ӟshell不理会参数、通配W等Q保留原栗例如,当ls -d /etc/g*不能扑ֈ/etc/g*的Q何文件时Q就会报错?br><br>* <br>--------代表L个字W,但不会匹配以.开始的文g?br>? <br>--------代表一个字W?br>\ <br>--------转义字符Q可通配W或者特D字W还原成一般字W?br>[abc]<br>--------匚w[]里面的某个字W?br>[a-z]<br>--------匚wa到z之间的某个字W,q能写成[A-Z]、[0-9]、[A-Za-z]{?br>[!abc]<br>--------匚wL不包含在[!]里的字符Q同样包括[!a-z]{的用法Q这里[?之间不能有空?br>{c1,c2}<br>--------同c1或者c2相匹配,其中c1和c2也是通配W,比如{[0-9]abc,[efg]}与[0-9]abc、[efg]均通配<br>;<br>--------q箋性命令,比如command1;command2Q不前者是否正,后者都会执行,使用&&和||则会有先后顺?br>! <br>--------逻辑q算中的?br>/<br>--------路径字符<br>$<br>--------d变量字符Q例如echo $PATH<br>>,>> <br>--------输出导向Q分别ؓ清空与末?br>' <br>--------单引?br>" <br>--------双引?br>`` <br>--------两个`中间为可以先执行的指令,例如cat /etc/`pwd`/hello.<br><br><span style="COLOR: red">注意Q?/span><br>使用[]Ӟ[与]之间l对不能为空Q所以[][*]表示[、]?L一个字W来匚wQ如果要处理与通配W相关的字符Q需要用{义字W\Q例如:<br>echo $[abc]<br>输出l果是a、b或者c变量的倹{?br>echo $\[abc\]<br>输出l果是[abc]变量的|举例而已Q当然不存在[abc]q样的变量名Q?br>echo '[abc]'<br>单引号也能vC转义字符同样的作用?span style="COLOR: red">双引号内部保留所有通配W的原义Q而单引号内部通配W视为普通字W?/span>?/p> <br> <img src ="http://www.shnenglu.com/amazon/aggbug/105105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/amazon/" target="_blank">q风</a> 2010-01-07 17:08 <a href="http://www.shnenglu.com/amazon/archive/2010/01/07/105105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gcc~译器用简明指?/title><link>http://www.shnenglu.com/amazon/archive/2010/01/07/105096.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Thu, 07 Jan 2010 07:46:00 GMT</pubDate><guid>http://www.shnenglu.com/amazon/archive/2010/01/07/105096.html</guid><wfw:comment>http://www.shnenglu.com/amazon/comments/105096.html</wfw:comment><comments>http://www.shnenglu.com/amazon/archive/2010/01/07/105096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/amazon/comments/commentRss/105096.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/amazon/services/trackbacks/105096.html</trackback:ping><description><![CDATA[<p>gccҎ件的处理需要经q预处理->~译->汇编->链接的步骤,从而生一个可执行文gQ各部分对应不同的文件类型,具体如下Q?br>file.c      cE序源文?br>file.i       cE序预处理后文g<br>file.cxx   c++E序源文Ӟ也可以是file.cc / file.cpp / file.c++<br>file.ii      c++E序预处理后文g<br>file.h      c/c++头文?br>file.s      汇编E序文g<br>file.o      目标代码文g<br><br></p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">gcc </span><span style="COLOR: #800000; FONT-WEIGHT: bold">[</span><span style="COLOR: #800000">选项</span><span style="COLOR: #800000; FONT-WEIGHT: bold">]</span><span style="COLOR: #000000"> 文g列表<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-ansi        强制完全ANSI一?br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-c           仅编译或汇编Q生成目标代码文Ӟ?c?i?s{文件生?o文gQ其余文件被忽略<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-S           仅编译,不进行汇~和链接Q将.c?i{文件生?s文gQ其余文件被忽略<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-E           仅预处理Qƈ发送预处理后的.i文g到标准输出,其余文g被忽?br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-o file      创徏可执行文件ƈ保存在file中,而不是默认文件a.out<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-g           产生用于调试和排错的扩展W号表,用于GDB调试Q切?g?O通常不能一起?br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-w           取消所有警?br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-W           l出更详l的警告<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-O </span><span style="COLOR: #800000; FONT-WEIGHT: bold">[</span><span style="COLOR: #800000">num</span><span style="COLOR: #800000; FONT-WEIGHT: bold">]</span><span style="COLOR: #000000">     优化Q可以指?-3作ؓ优化U别Q?表示没有优化<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-x language  默认?x noneQ即依靠后缀名确定文件类型,加上-x lan定后面所有文件类型,直到下一?x出现为止<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-D macro</span><span style="COLOR: #800000; FONT-WEIGHT: bold">[</span><span style="COLOR: #800000">=</span><span style="COLOR: #800000; FONT-WEIGHT: bold">]</span><span style="COLOR: #000000">  cM于源E序里的#defineQ在-D macro中的macro可被源程序识别,例如gcc -D NUM -D FILE</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bbs.txt\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> hello.c -o helloQ第一?D选项定义宏NUMQ在E序中可以?ifdef来检查是否被讄Q第二个-D定义宏FILEQ在源程序中可用<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-U macro     cM于源E序开头定?undef macroQ也是取消源程序中的某个宏定义<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-I dir       dir目录加到搜寻头文件的目录中去Qƈ优先于gcc中缺省的搜烦目录Q有多个-I选项Ӟ按照出现序搜烦<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-L dir       dir目录加到搜烦-lname选项指定的函数库文g的目录列表中去,q优先于gcc~省的搜索目录,有多?L选项Ӟ按照出现序搜烦<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-lname       在链接时使用函数库libname.aQ链接程序在-L dir指定的目录和/lib?usr/lib目录下寻找该库文Ӟ在没有?static选项Ӟ如果发现׃n函数库libname.soQ则使用libname.soq行动态链?nbsp;       <br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-fPIC        产生位置无关的目标代码,可用于构造共享函数库<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-static      止与共享函数库链接<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">-shared      量与共享函数库链接Q默认)</span></div> <p><br>以下是从某些博客中摘录的使用例子Q?br><a >http://hi.baidu.com/eng_cheng/blog/item/37c2f3aee20a79c47dd92ab2.html</a><br><br><strong>1.~译单个文g<br></strong>vi hello.c               //创徏源文件hello.c<br>gcc -o hello hello.c  //~译为可执行文ghelloQ在默认情况下生的可执行文件名为a.out<br>./hello                  //执行文gQ如果只写hello是错误的Q因为系l会hello当指令来执行Q然后报?br><br><strong>2.~译多个源文?br></strong>vi message.c<br>gcc -c message.c         //输出message.o文gQ是一个已~译的目标代码文?br>vi main.c<br>gcc -c main.c            //输出main.o文g<br>gcc -o all main.o message.o    //执行q接阶段的工作,然后生成all可执行文?br>./all<br>注意Qgcc对如何将多个源文件编译成一个可执行文g有内|的规则Q所以前面的多个单独步骤可以化ؓ一个命令?br>vi message.c<br>vi main.c<br>gcc -o all message.c main.c<br>./all<br><br><strong>3.使用外部函数?/strong><br>GCC常常与包含标准例E的外部软g库结合用,几乎每一个linux应用E序都依赖于GNU C函数库GLIBC?br>vi trig.c<br>gcc -o trig -lm trig.c<br>GCC?lm选项Q告诉GCC查看pȝ提供的数学库libm。函数库一般会位于目录/lib或?usr/lib中?br><br><strong>4.׃n函数库和静态函数库<br></strong>静态函数库Q每ơ当应用E序和静态连接的函数库一L译时QQ何引用的库函数的代码都会被直接包含进最l二q制E序?br>׃n函数库:包含每个库函数的单一全局版本Q它在所有应用程序之间共享?br>vi message.c<br>vi hello.c<br>gcc -c hello.c<br>gcc -fPIC -c message.c<br>gcc -shared -o libmessge.so message.o<br>其中QPIC命o行标记告诉GCC产生的代码不要包含对函数和变量具体内存位|的引用Q这是因为现在还无法知道使用该消息代码的应用E序会将它链接到哪一D地址I间。这L译输出的文gmessage.o可以被用于徏立共享函数库?shared标记某目标代码文g变换成共享函数库文g?br>gcc -o all -lmessage -L. hello.o<br>-lmessage标记来告诉GCC在连接阶D用共享数据库libmessage.soQ?L.标记告诉GCC函数库可能在当前目录中,首先查找当前目录Q否则GCCq接器只会查扄l函数库目录Q在本例情况下,找不到可用的函数库了?br><br></p> <img src ="http://www.shnenglu.com/amazon/aggbug/105096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/amazon/" target="_blank">q风</a> 2010-01-07 15:46 <a href="http://www.shnenglu.com/amazon/archive/2010/01/07/105096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重定向与道http://www.shnenglu.com/amazon/archive/2010/01/06/104886.htmlq风q风Wed, 06 Jan 2010 02:59:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/06/104886.htmlhttp://www.shnenglu.com/amazon/comments/104886.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/06/104886.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/104886.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/104886.html重定?br>
Linux shell接收或发送徐和字符串流行是的输入或输出Q不实际的字符串流q入或来自哪个文件、键盘、显C窗口等讑֤Q都使用文gI/O技术来讉K。Linux shell使用3U标准的I/O,每种都与一个文件描q符相关Q?br>1.stdout是标准输出流Q显C来自命令的输出Q文件描q符?
2.stderr是标准错误流Q显C来自命令的错误输出Q文件描q符?
3.stdin是标准输入流Qؓ命o提供输入Q文件描q符?

重定向输出:
--------------------------------------------------------------------------------------------------
>            输出重定向到一个文件或讑֤Q覆盖原来的文g
>!           输出重定向到一个文件或讑֤Q强制覆盖原来的文g
>>          输出重定向到一个文件或讑֤Q追加原来的文g
n>          标准输出/标准错误重定向到一个文件或者设备,覆盖原来文gQ?为默认)
n>>        标准输出/标准错误重定向到一个文件或者设备,q加原来的文Ӟ1为默认)
m>&n     标准输出/标准错误重定向到标准错误输出/标准错误
m>>&n
&>         标准输出和标准错误重定向到同一个文件中
&>>
--------------------------------------------------------------------------------------------------
注意Q?br>1.以下两个指oQ?br>command 2>&1 1>output.txt
command 1>output.txt 2>&1
q个指o是不一LQ?span style="COLOR: red">W一U情况中Qstderr被重定向到stdout的当前位|,然后再将stdout重定向到output.txtQ但1>output.txt只媄响stdoutQ不影响stderr。第二种情况中,stderr被重定向到stdout的当前位|,即output.txt?/span>?br>2.可以选择的流重定向到I文?dev/nullQ这L当于完全忽略所选的标准。用cat命o昄/dev/null是空的?br>3.文g重定向的命o行内Ҏ从左到右估算?/span>。以下面的两个命令ؓ例:
sort 0<students 1>students.sorted 2>sort.error
如果上述命o中因为students文g不存在而无法启动,那么1>students.sorted 2>sort.errorq一D便无法执行Q所以错误消息依然被发送到昄屏,而不是保存到文gsort.error中?br>sort 2>sort.error 0<students 1>students.sorted
上述命o解决了这个问题,如果sort命o不能启动是因为students文g不存在,错误消息会被保留到文件sort.error中,因ؓshell在确定文件students不存在之前就已经处理了错误输出重定向?br>
重定向输入:
-------------------------------------------------------------
<        输入重定向到一个程序,如tr ' ' '\n' < text
0<      标准输入重定?br>-------------------------------------------------------------
注意Q?br>1.输入重定向与道是可以互换的Q例如cat file | tr ' ' '\t'使用道命ocat指o的标准输出果作ؓtr指o的标准输入,可以写成tr ' ' '\t' < file?br>2.shell存在here-document的概念,q是另一U输入重定向的Ş?/span>Q它?lt;<和一个单词结合构成一个标讎ͼ用来表示输入端结束符Q例如:
sort -n << END
该指令接收来自标准输入端的字W,直到END为止Q然后sort排序。当然也可以使用sort -n以及CTRL+D来代ѝ?br>


1.在两个命令之间用管道|操作W将前一个命令的stdout指向W二个命令的stdinQ可以通过d更多的命令和道操作W来构造更长的道Uѝ用管道操作符后,可以使用q字W?取代文g名作Z个参敎ͼ用于表述输入来自stdin而不是文件?br>2.需要注意,道U仅stdout导向stdinQ不能?|q样的Ş式单独到处stderrQ但是可以先stderr重定向到stdoutQ然后用管道命令,例如ls y* x* z* 2>&1 | sort?br>3.道不涉及到中间文gQ第一个命令的stdout没有写到一个文件中Q然后再q二个命odQ相当于重定向的写法Q,例如bunzip2 -c somefile.tar.bz2 | tar -xvf -命o?br>
与管道相关的一些指?br>
cut -d "分割字符" [-cf] fields file
         //使用某分隔符分割q列求的区域
-d    后面接的是分割字W,默认是空格符
-c    后面接的是第几个字符
-f    后面接的是第几个区块
例子Q?br>cat /etc/passwd | cut -d ":" -f 1
passwd文g中每一行里?:"用作分隔W,列出W一个区块?br>last | cut -d " " -f 1
以空g为分隔,q列出第一个区块?br>
sort [-t 分隔W] [(+起始)(-l束)] [-nru] file       //排序
-t     分隔W,用来隔开不同的区块,默认是TAB
-n    使用U数字排序(默认以字母方式排序)
-r    反向排序
-u    相同出现的一行,只列Z?br>+start -end    qstart区块排序到第end区块

wc [-lmw] file
-l      计算有多行
-m    计算有多字W?br>-w    计算有多字
wc用于l计Q例如要知道目前帐号文g里有多少帐号Q就是用wc -lQ因?etc/passwd里一行代表一个用P卻Icat /etc/passwd | wc -l?br>
uniq [-cdu] inputfile [outputfile]          //默认用来昄所有的行一?br>-c    用于计算每行出现的次?br>-d    只打C重复的行
-u    只打印重复的?br>例如Q?br>last | cut -d " " -f 1 | sort | uniq

tee file
tee命o数据同时显C在屏幕上和文g中,使用方式如下Q?br>last | tee file | cut -d " " -f 1
last的输出数据传入file中,也会同时传给stdout?br>
tr [-ds] SET1 [SET2]                //从标准输入中译、删除字W串Qƈ写到标准输出?br>-d    删除SET1q个字符?br>-s    对SET1出现的字W,当连l出现时仅打C?br>例如Q?br>cat /etc/passwd | tr -d :
q个命o会删?:'q个W号q显C出?br>last | tr '[a-z]' '[A-Z]'
q个命o小写改成大写,取代原有的字W?br>
split [-bl num] 输入文g 输出文g前导字符
-b    以文件size来分
-l    以行数来?br>该指令将某文件内容分割成几个子文Ӟ子文件名字ؓ前导字符+aa、ab、ac{,使用-l指定每个文g的行敎ͼ使用-b指定每个文g的大?br>例子Q?br>split -l 5 /etc/passwd test    //产生testaa、testab{文件?/p>


q风 2010-01-06 10:59 发表评论
]]>
vi常用指ohttp://www.shnenglu.com/amazon/archive/2010/01/05/104841.htmlq风q风Tue, 05 Jan 2010 08:57:00 GMThttp://www.shnenglu.com/amazon/archive/2010/01/05/104841.htmlhttp://www.shnenglu.com/amazon/comments/104841.htmlhttp://www.shnenglu.com/amazon/archive/2010/01/05/104841.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/104841.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/104841.html一般模式:
0       Udq一行的W一个字W处
$       Udq一行的最后一个字W处
G      Udq个文g的最后一行第一个字W?br>gg     Udq个文g的首行第一个字W?br>x       向后删除一个字W?br>X      向前删除一个字W?br>dd     删除光标所在的一整行
ndd   删除光标所在行的向下n?br>yy     复制光标所在行
nyy   复制光标所在行的向下n?br>p,P    p为粘贴在光标下一行,P为粘贴在光标上一?br>u       恢复前一个动?br>J       光标所在行与下一行结合成一?br>n<Enter>    光标向下Udn?br>
命o行模式:
:w             编辑的数据写入盘文g?br>:w!            强制保存
:q              退出vi
:q!             强制退出viQ不保存文g
:wq           保存后退?br>:wq!          强制保存后退?br>:w file        数据保存ؓ另一个文Ӟ原文件不?nbsp;
:n1,n2 w file  n1行到n2行的内容保存为file文g
:set nu           昄行号
:set nonu       不显C?br>:/word           在光标之后查找一个名为word的字W串
:?word          在光标之前查找一个名为word的字W串
:n1,n2 s/word1/word2/g     在第n1与第n2行之间查找word1q个字符Ԍq将该字W串替换为word2Q例如n1?Qn2?
:n1,n2 s/word1/word2/gc   同上Qƈ昄提示W供用户认




q风 2010-01-05 16:57 发表评论
]]>
Linux常用指o汇?/title><link>http://www.shnenglu.com/amazon/archive/2010/01/04/104609.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Mon, 04 Jan 2010 08:53:00 GMT</pubDate><guid>http://www.shnenglu.com/amazon/archive/2010/01/04/104609.html</guid><wfw:comment>http://www.shnenglu.com/amazon/comments/104609.html</wfw:comment><comments>http://www.shnenglu.com/amazon/archive/2010/01/04/104609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/amazon/comments/commentRss/104609.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/amazon/services/trackbacks/104609.html</trackback:ping><description><![CDATA[<p>提供《Linux命o大全.chm》文Ӟ下蝲地址为:<br><a href="http://www.shnenglu.com/Files/amazon/Linux命o大全.rar">/Files/amazon/Linux命o大全.rar</a><br><br>shutdown指oQ?br>shutdown命o用于l止操作pȝ、重开机或者向所有用户传送信息,具体路径?sbin/shutdownQ只有root权限才有权运行此命o?br><strong>shutdown [-t seconds] [-arkhncfF] minutes [警告信息]<br></strong>-h    shutdown后立即halt<br>-k    不shutdownQ仅发送警告信息给所有用?br>-r    shutdown后重新开?br>-n    非正常方式关机,用强q的方式kill掉所有程序然后关?br>-t sec    在警告信息和x信号之间有secU的延迟<br>-f    xq开机后Q略qfsck工具的磁盘检?br>-F   xq开机后Q强制fsck工具的磁盘检?br>-c   取消shutdown指oQ不需要用minutes参数Q但是可以有警告信息<br><span style="COLOR: #ff0000">注意Qminutes参数是强制性的Q可以用now表示立即x?br><br></span>linux文g属性:<br>-rwxrwx---<br>W一个属性代表文件是目录QdQ、文Ӟ-Q、链接文ӞlQ、设备文件中供存储的接口讑֤QbQ、设备文件中的串口设备如键盘鼠标QcQ?br>接下来的属?个ؓ一l,其中r代表可读、w代表可写、x代表可执行?代表不具备某个属性。第一lؓ拥有者的权限Q第二组为群l的权限Q第三组为其他非本群l的用户的权限?br>对于目录的权限要额外注意。如果对某目录的权限是rwxQ那么可d写可执行Q如果权限是r-xQ那么可dq入Q但无法写入Q如果权限是r--Q那么不可进入该目录。注意:<span style="COLOR: #ff0000">目录与x的关pd重要Q如果某用户Ҏ目录没有x权限Q自然也无法执行ls、cd{指令,所以也无法进入目?/span>。如果某用户Ҏ目录仅有r的权限,是不能进入该目录的?br><span style="COLOR: #000000">linux下的文g是否可执行与后缀名无养I而是由xq个属性来军_的,后缀</span>仅vC饰的作用。文件名之前如果有一?."Q说明该文g是隐藏文Ӟ例如“.bashrc_history”Q用ls -al可以昄隐藏文档?br><br>改变所在群l?bin/chgrpQ?br><strong>chgrp group file/dir</strong><br>注意Q改变的组名必d/etc/group中存在,否则会显C错误?<br><br>改变拥有?bin/chownQ?br><strong>chown [-R] owner file/dir<br>chown [-R] owner:group file/dir</strong><br>-R    循环地将该目录下的所有文仉Ҏowner与group的名Uͼ而不仅仅是该目录<br> <br>改变权限/bin/chmodQ?br><strong>chmod [-R] xyz file/dir</strong><br>-R    循环地将该目录下的文仉改变Q而不仅仅是该目录<br>xyzZlrwx属性数值的相加Q其中r?Qw?Qx?Q那?wx是3Qrwx是7?br><strong>chmod [-R] u=,o=,g= file/dir</strong><br>其中Q?br>u是userQg是groupQo是othersQa是所有三l。例如:chmod u=rwx,og=rx fileQchmod u=rwx,g=rx,o=r file?br>+是加入,-是除厅Rchmod a+w file/dirQchmod u-x file/dir?br><br>chattr/lsattrQ?br><span style="COLOR: #ff0000">待查?br></span></p> <br>------------------------------------------------------------------------------------------------<br><br>cd命oQ?br><strong>cd 相对路径/l对路径</strong><br>dlinuxpȝ后,root的工作\径会自动切换到root目录下,而用户会自动转到/home/user下?br><br>/bin/pwd命oQ?br><strong>pwd</strong><br>pwd用于昄当前所在目录?br><br>/bin/mkdir?bin/rmdir命oQ?br><strong>mkdir [-p] 目录名称<br></strong>-p    序创徏目录和子目录Q例如mkdir -p a/b/cQ则序建立a、a/b和a/b/c?br>mkdir建立新的目录Q尤其注意:<span style="COLOR: #ff0000">当徏?home/amazon/test的目录时Q必ȝ保前面的目录都存?/span>?br><strong>rmdir 目录名称<br></strong>-p    序删除目录和子目录Q同上?br>rmdir删除旧有的目录,目录需要层层删除,而且<span style="COLOR: #ff0000">被删除的目录中不能有其他的目录或文g</span>Q除非用rm -rf 目录名称 q样的命令?br><br>/bin/ls命oQ?br><strong>ls [-ailS]</strong><br>-a    列出所有文Ӟ包括隐藏文档Q?br>-i    打印inode的?br>-l    详细列出Q包括文件大,属性数据等<br>-S   以文件大排?br>--color=never 不显C颜?br>--color=always LC颜?br>--color=auto ql自行判?br>如果想ls默认没有颜色Q可以在/root/.bashrc或者根用户?bashrc文g中加入下面的代码Q?br>alias ls='ls --color=never'<br><br>/bin/cp命oQ?br><strong>cp [-drsu] 源文?目标文g</strong><br>-r    可以q行目录的复?br>-s    做成W号链接文gQ与ln指o功能相同<br>-u    如果源文件较斎ͼ或者没有目标文Ӟ才会q行复制动作Q可用于备䆾操作<br>-d   如果是复刉接文Ӟ若不加Q何参数则默认情况下会链接到的源文g复制到目的地Q若?dQ则链接文g可原不动地链接q个快捷方式到目的地Q即保留软硬链接<br><span style="COLOR: red">注意Q只有目标\径而缺目标文件的话,只要源目录与目标目录不相同即可,复制后的目标文g与源文g同名?/span> <br><br>/bin/rm命oQ?br><strong>rm [-irf] 文g?/strong><br>-i    提供用户认Q默认|<br>-r    循环删除Q直到没有东西ؓ?br>-f    强制删除<br><span style="COLOR: red">注意Q?rf可以q箋删除某目录下所有文件与目录Q以及该目录本n?/span><br><br>/bin/mv命oQ?br><strong>mv [-u] 源文?目标文g<br></strong>-u 为update的羃写,当源文g比目标文件还新时才会动作<br>CZQ?br>mv file file.new       //更改文g?br>mv file1 file2 /tmp  //最后一?tmp才是目标文g目录Qfile1和file2是源文g<br><br>/bin/cat?bin/tac命oQ?br><strong>cat [-n] 文g?br></strong>-n 昄Ӟq行号一赯出到屏幕?br><strong>tac 文g?/strong><br>tac刚好cat反写q来Q从最后一行到W一行反向显C在屏幕上?br><br>/bin/more?usr/bin/less命oQ?br><strong>more 文g?/strong><br>more命o可以一一地昄文g内容Q而通常情况下用cat没法看清楚。more也可以用来配合管道用,例如ls -al | more可以显C的内容一一地列出?br><strong>less 文g?/strong><br>使用more时无法向前翻看,而用less可以用pageup和pagedown向前向后ȝ?br><br>/usr/bin/head?usr/bin/tail命oQ?br><strong>head [-n number] 文g?/strong><br>昄一个文件的前几行,若没有加?n参数Q默认显C前10行,若只xCZ行,可以输入head -n 1 filename?br><strong>tail [-n number] 文g?/strong><br>同上?br><span style="COLOR: red">例子Q要求输出某文g的第n行到Wn+m行,可以使用head -n n+m file | tail -n mq样的指令?br><br></span>/usr/bin/nl命oQ?br><strong>nl 文g?/strong><br>nl指o的用法和cat -n用法怼Q即查看文g的同时也可以昄行号?br><br>/usr/bin/od命oQ?br><strong>od 文g?/strong><br>od用于d非ASCII文gQ例如二q制文gQ用cat或者vid二进制文件是q?br><br>--------------------------------------------------------------------------------------------<br><br>链?W号链接Q?br>hard link是重新建立一个inode链接到文件放|的block块,q在查询时利用原来的inode与后来添加的inode均可指定到该文g攄的地点,d两个indoe的结果都是存取同一个文件的内容。但是用硬链接有两个最大限Ӟ<br>1.不能跨文件系l,因ؓ不同文gpȝ有不同的inode tableQ?br>2.不能链接目录Q因为目录本w不是文Ӟ仅仅消耗inode而没有blockQ而inode是链接到block块的?br>symbolic link是再徏立一个独立文Ӟq个文g会让数据d操作指向它链接的那个文g。其~点在于Q当源文件被删除Q符号链接的文g打不开了,屏幕昄“无法开启某文g”?br><br><strong>ln [-s] 源文?目标文g<br></strong>-s    提供W号链接Q不加该参数为硬链接<br>假设a为文Ӟa.hard为硬链接文gQa.sym为符号链接文Ӟ那么使用rm a之后Qmore a.hard依然正常昄文g内容Q而more s.sym昄“不存在该目录或文?#8221;。这是因为a.sym为符号链接文Ӟ对其q行操作相当于对a指定的block内文件进行操作;而a.hard为硬链接文gQ相当于a的另外一个别名,La只是L了其中一个别名而已Q但文gq在block中?br><br>-----------------------------------------------------------------------------------------<br><br>/usr/bin/which?usr/bin/whereis?usr/bin/find{指令:<br><br><strong>which command</strong><br>which查看命o所在可执行文g的位|(仅仅是可执行文gQ,即通过PATH环境变量到该路径内寻扑֏执行文g?br><br><strong>whereis [-bmsu] command</strong><br>-b    只寻找二q制文g<br>-m   只寻扑֜说明文gmanual路径下的文g<br>-s    只寻找source源文?br>-u    只寻N说明文档的文?br>whereis命令行所在文件的路径列出来?br><br><strong>find 路径 [参数]<br></strong>find命o某一路径下的文g列印出来?br>-atime n      n×24时内被存取q的文g列出?br>-ctime n      n×24时内被改变、新增的文g或目录列出来<br>-mtime n      n×24时内被修改q的文g列出?br>-newer file   把比fileq要新的文g列出?br>-gid n        L组ID为n的文?br>-group name   L组名称为name的文?br>-uid n        L拥有者ID为n的文?br>-user name    L用户名ؓname的文?br>-name file    L文g名ؓfile的文?br>-type type    L文g属性ؓtype的文Ӟ包括b、c、d、p、l、s{?br><br><strong>locate dir/file</strong><br>使用locate查找数据比find快,因ؓlocate是从已经建立的数据库/var/lib/slocate中查找数据,不用直接在硬盘中存取数据?br><br>----------------------------------------------------------------------------------------------<br><br>查看盘或目录的定w指o/bin/df?bin/duQ?br><br><strong>df [-ikm]</strong><br>查看盘的d量、已用容量与inode{?br>-i     使用inodes昄l果<br>-k    使用KBytes昄l果Q默认)<br>-m   使用MBytes昄l果<br><br><strong>du [-abckms] [目录名称]</strong> Q省略表C当前所在目录)<br>l计某目录下的文件容量?br>-a    列出所有的文g与目录,默认值是列出目录的?br>-b    列出的gbytes输出<br>-c    最后求总total<br>-k    列出的gKB输出Q默认)<br>-m    列出的gMB输出<br>-s    只列出最后求ȝ?br><br>---------------------------------------------------------------------------------------------<br><br>/bin/echo指oQ?br><strong>echo $variable</strong><br>昄当前variable变量?br><br>/bin/env指oQ?br><strong>env</strong><br>昄pȝ的所有环境变量,某些重要的环境变量如下:<br>ENV=/home/amazon/.bashrc              用户自定义环境变量的配置文gQroot用户的是/root/.bashrc<br>HISTSIZE=1000                               当前指o记忆数量<br>HOME=/home/amazon                       d者的根目?br>HOSTNAME=localhost.localdomain  L的名?br>HOSTTYPE=i386                             Lg的等U状态(i386、i686Q?br>LANGUAGE =C                               默认语言的资?br>LOGNAME=amazon                         d者的帐号<br>MAIL=/var/spool/mail/amazon            邮g文g<br>PATH=......                                        指o路径<br>PWD=/home/amazon                          当前所在\?br>USERNAME=amazon                       d者的帐号<br>USER=amazon                                   用户帐号<br><br>/bin/set指oQ?br><strong>set</strong><br>昄当前的环境变量,也会昄自定义的变量。注意:自定义变量只能自׃用,而不会干扰到别hQ除非修改了pȝ的配|文件?br><br>变量讑֮规则Q?br><strong>var='......'</strong><br>1.变量与变量内容用=q结Q?br>2.{号两边不能直接接空格符Q如name = variable错误Q?br>3.变量只能是英文字母与数字Q数字不能开_<br>4.<span style="COLOR: #ff0000">有空格符的情况下Q用双引号或者单引号括住变量Q?/span><span style="COLOR: #ff0000">双引LҎ字符可以保留变量Ҏ,?$PATH"Q单引号不可?/span>Q?br>5.\{义字W,可以特D字W(Enter?、\、空格符?{)变成一般符P而不需要双引号Q?br>6.扩增变量需要用"$PATH":/home?$PATH:/home"或?PATH:/homeq样的Ş式篏加;<br>7.若该变量需要在其他子程序执行,以export使变量可以动作,如export PATHQ(什么意思?Q?br>8.pȝ预设变量用大写,自定义变量用写Q?br>9.<span style="COLOR: #ff0000">用unset variable取消变量</span>?br><br>别名alias指oQ?br><strong>alias name='.....'</strong><br>别名和变量的定义基本一致?br><strong>alias</strong><br>查询所有别名,包括pȝ默认别名和自定义别名?br><strong>unalias name</strong><br>取消别名?br><br>-----------------------------------------------------------------------------------------<br><br>/usr/bin/compress指oQ?br><strong>compress [-d] filename</strong><br>-d    解压~参敎ͼ也可以?strong>uncompress filename</strong>指o<br><strong>zcat filename.Z <br></strong>zcat可以d.Z压羃文g的内宏V?br>注意Qcompress用来压羃与解压羃后缀名ؓ.Z的文件。用compress压羃后,如果没有l出其他参数Q?span style="COLOR: red">原始文g会被后来?Z文g取代</span>Q用uncompress指o也是一栗?br><br>/usr/binbzip2?usr/binbzcat指oQ?br><strong>bzip2 [-dz] filename</strong>                    <br>-d    解压~,可以使用<strong>bunzip2 filename</strong>取代<br>-z    压羃Q默认)<br><strong>bzcat filename.bz2</strong>                      //d压羃文g内容Q而不需要解压羃<br>注意Q当文g后缀?bz?bz2、tbz、tbz2{时Q可以用bzip2q行解压?span style="COLOR: red">原始文g会被压羃文g.bz2{取代?br></span><br>/bin/gzip?bin/zcat指oQ?br><strong>gzip [-d#] filename<br></strong>-d    解压~参?br>-#    压羃{Q?最不好Q?最好,默认?<br><strong>zcat filename.gz</strong><br>注意Qzcat不仅可以d.gz后缀的压~文Ӟ也可以同时读取compress的压~文Ӟ.ZQ?span style="COLOR: red">原始文g会被压羃文g.bz2{取代?/span><br><br>/bin/tar指oQ?br><strong>tar [-zxcvfpP] tarfile file</strong><br>-z    同时hgzip<br>-j    同时hbzip<br><span style="COLOR: #ff0000">-x    解开一个压~文?br></span><span style="COLOR: #ff0000">-t    查看tarfile的文?br></span>-c    建立一个压~文?br>-v    压羃q程中显C文?br>-p    使用原文件的属?br>-P    可以使用l对路径<br>-f  file   使用file文g名作为目?br>-N 'yyyy/mm/dd'    比后面接的日期还要新的文件才会被打包q新建的文g?br>--exclude FILE  在压~过E中Q不要将FILE打包<br>例子Q?br>tar -cvf file.tar file                    //<span style="COLOR: red">可以打包目录Qƈ且原文g/目录依然存在</span><br>tar -zcvf file.tar.gz file<br>tar -xvf file.tar                         //不?zxvfQ因为是.tar文g而不?tar.gz文gQ且<span style="COLOR: red">压羃文g依然存在<br><font color=#000000>tar -zxvf file.tar.gz</font></span><br>tar -ztvf file.tar.gz                    //查看tar.gz里面的文件信息,而不需要解压羃<br>tar -tvf file.tar<br>tar -N '2002/06/25' -zcvf home.tar.gz /home  //?home目录中,比日期还要新的文件打包进入home.tar.gz?br>tar -zcvf host.tar.gz /home --exclude /amazon --exclude /host  //除amazon和host外,home目录打包<br>tar -cvf - /home | tar -xvf -          //直接打包后解压羃Q没有中间文?br><br>-------------------------------------------------------------------------------------------<br><br>正则表达?bin/grepQ?br><strong>grep "word" filename</strong><br>某filename文g中含有word的那一行显C出来?br>例子Q?br>grep root /var/log/secure<br>grep "*[a-d]*" /var/log/secure<br>grep boot /etc/*                  //输出的是/etc下文件内容含有boot的所有行<br>grep \* /etc/*<br>grep "a\{5\}" file                 //必须要有双引?br>W号Q?br>^    句首字符相符<br>$    句尾字符相符<br>?    M一个单一字符<br>*    L几个字符Q包??br>\     转义字符Q^??{变为普通字W?br>[list]       列表中的字符Q例如[123456789]<br>[range]   列表范围内的字符Q例如[1-9]<br>\{n\}      与前一个相同字W连ln?br>\{n,m\}  与前一个相同字W连ln到m?br><br>------------------------------------------------------------------------------------------<br><br>如何增加用户Q?br>1.如果用户所属群l不存在Q先新增组。(增加用户前,该群l必d在)<br>2.新增用户帐号?br>如何删除组Q?br>3.如果某群l中有用P先删除用戗(删除组前,该群l必MؓI)<br>4.删除组?br><br><strong>groupadd [-g GID] groupname</strong><br>-g GID    自行讑֮GID的大,否则默认提供<br><strong>groupdel groupname</strong><br>注意Q在删除组之前Q必d该群l下的用户删除?br><br><strong>useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] username</strong><br>-u    直接l出一个UID<br>-g    直接l出一个GIDQ此GID必须已存在)<br>-d    直接其根目录指向已l存在的目录Q系l不会再默认建立Q?br>-M   不徏立根目录<br>-s     定义其用的shell<br><strong>userdel [-r] username</strong><br>-r    该帐号的[home directory]和[/var/spool/mail/username]一q删除,默认情况下是保留?br><br>密码理与设定:<br>root可以讑֮M样式的密码,而且可以帮助user讑֮他们的密码,而user仅能修改自己的密码?br><strong>passwd [username]</strong><br><br>用户w䆾切换Q?br><strong>su</strong> <br>使用su可以q行w䆾切换Q但是需要注意:<br>1.<span style="COLOR: #ff0000">环境依然属于当初d的那个用?/span>Q例如以test的n份登入linuxQ再切换到rootQ但是个人的mail、PATH{环境变量都q是test的?br>2.对于环境变量Q最ȝ的当属PATHQؓ了避免一般用户用root的管理指令,通常linux会将指o分类攑֜两个目录下,分别?bin?sbinQ其?sbin存放的大多是root用来理pȝ的指令。所以,当从一般用户切换到root后,某些指o不可用,是因ؓPATH中没?sbinq个路径?nbsp;<br>具体解决Ҏ如下Q?br>1.使用命o的完整\径?br>2.?sbin?usr/sbin路径d到普通用LPATH路径中?br>3.<span style="COLOR: #ff0000">使用<strong>su -</strong>命o切换Q?是指同时切换用户的环境变?/span>?br><strong>sudo [-u username/#uid] [command]</strong><br>-u    分w变成username的n?br>使用sudo可以不需要root的密码也能执行rootw䆾的工作。具体情늕?br><br>用户查询Q?br><strong>id [username]</strong><br>直接输入id查询当前帐号的UID、GID与所属群l,输入id username生成username的相关信息。不需要察?etc/passwd?etc/group?br><strong>finger [-s] [username]</strong><br>-s 完整列出<br>使用finger可以知道某用L相关信息Q基本都?etc/passwd上,q包?var/spool/mailq个邮g存放地点Q所以还会显C是否有邮g信息?br><strong>groups</strong><br>直接输入groups可以显C当前用h属的组?br><br>手动d用户Q?br>大致步骤如下Q?br>1.先徏立需要的组Qvi /etc/groupQ?br>2.建立帐号的各个属性(vi /etc/passwdQ?br>3.passwd与shadow同步QpwconvQ?br>4.建立该帐L密码Qpasswd acountQ?br>5.建立用户根目录(cp -r /etc/skel /home/accountQ?br>6.更改根目录属性(chown -R account.group /home/accountQ?br>删除帐号步骤Q?br>1.删除/etc/passwd?etc/shadow中的相关信息<br>2.转到/home下删除该帐号的根目录<br>3.转到/var/spool/mail下删除该帐号的邮?br><br> <img src ="http://www.shnenglu.com/amazon/aggbug/104609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/amazon/" target="_blank">q风</a> 2010-01-04 16:53 <a href="http://www.shnenglu.com/amazon/archive/2010/01/04/104609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GNU automake步骤及分?/title><link>http://www.shnenglu.com/amazon/archive/2009/12/23/103811.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Wed, 23 Dec 2009 08:23:00 GMT</pubDate><guid>http://www.shnenglu.com/amazon/archive/2009/12/23/103811.html</guid><wfw:comment>http://www.shnenglu.com/amazon/comments/103811.html</wfw:comment><comments>http://www.shnenglu.com/amazon/archive/2009/12/23/103811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/amazon/comments/commentRss/103811.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/amazon/services/trackbacks/103811.html</trackback:ping><description><![CDATA[<p>前言Q该文从《Linux应用开发基》一书中摘要所得?br><br>首先认pȝ已经安装以下软gQ?br>GNU automake<br>GNU autoconf<br>GNU m4<br>perl<br>GUN Lib工具<br><br>W一步,用编辑器vi生成hello.c文gQ然后用autoscan命o产生一个configure.in的雏形configure.scanQ如下编辑configure.scan文gq将文g名改为configure.in?br>autoscan<br>vi configure.scan<br>----------------------------------------------<br>AC_INIT(hello.c)<br>AM_INIT_AUTOMAKE(hello, 1.0)<br>#..........................<br>AC_PROG_CC<br>#...........................<br>AC_OUTPUT(makefile)<br>-----------------------------------------------<br>mv configure.scan configure.in<br><br>W二步,执行aclocal和autoconfQ分别生aclocal.m4和configure两个文g。configure文g内信息由configure.in和aclocal产生的巨集生成?br>aclocal<br>autoconf<br><br>W三步,~辑makefile.am文档Q内容如下:<br>vi makefile.am<br>-----------------------<br>AUTOMAKE_OPTIONS=foreign<br>bin_PROGRAMS=hello<br>hello_SOURCES=hello.c<br>----------------------<br>然后执行automake –add-missingQautomake会根据makefile.am文g产生一些文Ӟ包含最重要的makefile.in?br>automake –add-missing<br><br>W四步,执行./configureQ生成makefile文档。大功告成,接下来执行make指o可以编译hello.c生成可执行文件?br>./configure<br>make<br>./hello<br>注意Q除了make指o之外Q还有make clean / make install / make dist{指令?br><br><br>步骤详细解释Q?br><br><strong>autoconfQ?/strong><br>autoconf是用来生configure档的工具Qconfigure是一个shell scriptQ它可以自动核定原始E序以符合各U不同^CUnixpȝ的特性,q且Ҏpȝ参数及环境生合适的makefile档或者header file档,让原始程序可以很方便地在q些q_上被~译。autoconfdconfigure.in档然后生configureq个shell script?br>configure.in档的内容是一q串GNU m4的巨集,q些巨集l过autoconf处理后会变成查系l特征的shell script configure.in内巨集的序要求Q每一个configure.in档必d所有巨集前加入AC_INIT巨集Q然后在所有巨集后面加上AC_OUTPUT巨集?br>先用autoscan扫描原始档以产生一个configure.scan档,在对该档做些修改Q生configure.in档,在范例中用到的巨集如下:<br>AC_INIT(file)Q用来检查原始文件所在的路径?br>AM_INIT_AUTOMAKE(PACKAGE, VERSION)Q用automake必备的巨集,PACKAGE是要产生软g套g的名UͼVERSION是版本编受?br>AC_PROG_CCQ检查系l可用的C~译器,如果原始E序是用C写的需要用q个巨集?br>AC_OUTPUT(file)Q设定configure所要生的文档名,如果是makefile的话Qconfigure便会把它查出来的l果带入makefile.in中然后生合适的makefile?br>在用automakeӞq需要一些其他的巨集Q这个额外巨集我们用aclocal来生。执行aclocal会生aclocal.m4档,一般来说不用修攏V有了configure.in和aclocal.m4档,可以执行autoconf来生configure档了?br><br><strong>automakeQ?/strong><br>automake会根据configure.in中的巨集把makefile.am转成makefile.in档。在makefile.am档中需要定义要产生的目标,具体包括Q?br>AUTOMAKE_OPTIONSQ设定automake的选项。automake主要是帮助开发GNU软g的h员维护Y件套Ӟ一般在执行automake时会查目录下是否存在标准GNU套g中应具备的文件档案,例如NEWS、AUTHOR、ChangeLog{,设成foreignӞautomake会改用一般Y件套件标准来查,而gnu是缺省设|,该别下尽可能地检查包是否服从GNU标准Qgnits是严格标准,不推荐?br>bin_PROGRAMSQ定义要产生的执行档名称Q生多个执行档的话Q需要用I格W隔开?br>hello_SOURCESQ定义helloq个执行档的原始档,如果该程序由多个原始档生,必须把所用到的原始档都列出来Q空格符隔开Q例如hello_SOURCES=hello.c main.c hello.h。如果定义了多个执行档,则对每个执行档都要定义相对的filename_SOURCES?br>automake --add-missing指o可以用makefile.am来生makefile.inQ加?-add-missing是要automakeZY件套件必备的档案加入包装?br>之后再执?/configureQ根据makefile.in档生makefile文档Q有几个预设的目标可供用:<br>make allQ生设定的目标Q即可执行文件。和只打make的结果相同,此时开始编译原始码Q然后连接,q生最l执行文档?br>make cleanQ清除之前所~译的执行文件和目标代码文g?br>make distcleanQ除了清楚执行文件和目标代码文g外,也把configure产生的makefile清除掉?br>make installQ将E序安装至系l中Q系l预讄执行文g存放路径Q。用bin_PROGRAMS巨集的话Q程序会被安装到user/local/binq个目录?br>make distQ将E序和相x案定制成压羃包的形式Q名UCؓPACKAGE-VERSION.tar.gzQ其中PACKAGE和VERSION以configure.in中的AM_INIT_AUTOMAKE(PACKAGE, VERSION)为准?br>make distcheckQ压~ƈ且检查压~包是否正常Q有相应昄?br><br><br></p> <img src ="http://www.shnenglu.com/amazon/aggbug/103811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/amazon/" target="_blank">q风</a> 2009-12-23 16:23 <a href="http://www.shnenglu.com/amazon/archive/2009/12/23/103811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gdb调试相关指ohttp://www.shnenglu.com/amazon/archive/2009/12/23/103809.htmlq风q风Wed, 23 Dec 2009 08:10:00 GMThttp://www.shnenglu.com/amazon/archive/2009/12/23/103809.htmlhttp://www.shnenglu.com/amazon/comments/103809.htmlhttp://www.shnenglu.com/amazon/archive/2009/12/23/103809.html#Feedback0http://www.shnenglu.com/amazon/comments/commentRss/103809.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/103809.htmlgcc –o hello –g hello.c
其中-g的意思是生成带源代码调试W号的可执行文ghelloQ不使用-gq行~译的可执行文g也可以用gdb调试Q但是缺部分调试信息(如行受函数名{)。调试信息包括用L序里的每个变量的cd和在可执行文仉的地址映射以及源代码的行号?br>
W二Q用gdb helloq入gdbQ进行调试阶Dc启动gdb有以下几U方式:
gdb filename        //指定要调试的E序
gdb filename core    //指定要调试的E序及其coredump文g
gdb filename pid    //指定要调试的E序及对应进Eid?br>可以使用命o行参数更加详l地控制gdb的行为:
-silent            //不显C入gdb开头的提示信息
-help(h)        //命o行辅助信?br>-se file        //从file中读取符Pq作为可执行文g
-core(c) file        //指定core dump文gfile
-c id            //q接到进E号为idQ与attach命o怼
-x file            //file中存放一pd的gdb命oQ执行file中的gdb命o
-symbols(s)        //从file中读取符P但不作ؓ可执行文?br>-directory(d) path    //指定路径pathQ将path加入到搜索源文g的\径中
注意Qgdb开始运行时Q它把Q何一个不带选项前缀的参数都当作一个可执行文g或core文g或进E号Q具体ؓQ把W一个前面没有选项说明的参数看作加?se选项Q而第二个看作是跟着-c选项后面。在gdb中可以把选项名掐头去,只要保证gdb能唯一判断是哪个选项p?br>
W三Q逐步调试Q部分命令如下:
break(b) [file:] func / line / addr / +num / -num    //某函数、某行或者某内存地址处设断点Q可同时讄多个断点
break args if COND                    //COND非零时在args处中?br>tbreak agrs                        //断点只有效一?br>clear 
[file:] func / line / addr / +num / -num        //清楚某种断点Q可同时清除多个
delete(d) breaknum                    //使用断点h清除断点或观察点Q没有参数则清除所有断?br>disable(dis) breaknum                    //止……
enable 
[once] breaknum                    //启用或者仅启用一?#8230;…
--------------------------------
watch expr            //expr值改变时停止E序Q用于捕获错误很有效
run(r) arg            //从头开始运行程序,q以arg作ؓ参数Q可多个Q?br>continue(c)            //l箋被中断的E序Q不能用作程序的q行启动
step(s)                //单步q入Q跟t到函数?br>next(n)                //单步Q不q入函数?br>list(l)                //昄源代码(正在执行区域附g10行)
backtrace(bt) / where(w)    //昄函数栈的内容
print(p) expr            //查看变量或者表辑ּ的?br>display expr            //每次中断Ӟ昄expr的?br>undisplay 
[expr]        //取消displayQ没有参数的话则取消全部
whatis expr            //昄expr的资料Ş态,例如变量cd{?br>------------------------------
set width 
70            //讄屏幕列数
quit(q)                //l止退?br>kill(k)                //l止正在调试的程序,但不退试,可重?br>file                //装入惌调试的可执行文g
shell command            //在gdb中直接运行shell命o且不需要退出gdb
help command            //command命o说明
complete arg            //列出所有arg开头的命o
Esc + Shift + ?            //查看所有命令的列表
------------------------------
attach pidat pid        //接上一个执行的q程pidQ这会pid暂停Q中断Q何sleep以及可中断的pȝ调用
detach pid            //解除目前接上的进Epid
jump address            //跛_指定的内存位|,q开始执?br>make filename            //不退出gdbp重新产生可执行文?/span>
注意Q?br>Q?Q有的命令后面可以跟参数Q例如step接受一个参数表C单步执行多步Q有的命令不接受M参数?br>Q?Q空行表C重复上一个命令;有的命o不可重复Q例如runQ还有一些重复后会生严重后果,不用空行重复?br>Q?Q可以用gdb的info(i)和show命o来查询程序状态,每个命o可以查询一pd的状态,具体如下Q?br>infoQ?br>info breakpoints           //查看断点情况
info args                       //查看E序参数
info display                  //查看所有display
info stack                    //查看函数栈内容,与backtrace相同
info watchpoints          //查看观察?br>showQ?br>show version              //昄gdb版本?br>show copying             //昄版权信息
setQ?br>set命o用来为程序设|运行环境,比如可以用set prompt $ 来把gdb提示W设|ؓ$。用set命o可以改变l大多数show昄的信息?br>
W四Q调试完成后Q可以用strip命o删除那些带有-g选项的C~译E序所生成的信息,释放一些磁盘空间?br>strip命o减少XCOFF对象文g的大,strip命o从XCOFF对象文g中有选择地除去行号信息、重定位信息、调试段、注释段、文件头以及所有或部分W号表。一旦用该命oQ则很难调试文g的符P因此通常只在已经调试和测试过的生成模块上使用strip命o?br>/usr/binstrip [选项] file 
strip的具体选项信息在这里不作ȝ?br>



q风 2009-12-23 16:10 发表评论
]]>
Install Adobe FlashPlayer for LInuxhttp://www.shnenglu.com/amazon/archive/2009/07/03/89188.htmlq风q风Fri, 03 Jul 2009 13:29:00 GMThttp://www.shnenglu.com/amazon/archive/2009/07/03/89188.htmlhttp://www.shnenglu.com/amazon/comments/89188.htmlhttp://www.shnenglu.com/amazon/archive/2009/07/03/89188.html#Feedback2http://www.shnenglu.com/amazon/comments/commentRss/89188.htmlhttp://www.shnenglu.com/amazon/services/trackbacks/89188.html
1.在网上下载个install_flash_player_10_linux.tar.gz
2.解压~后得到libflashplayer.so
3.该文g攑օ/usr/lib/firefox/plugins中,打开Firefox卛_使用?br>




q风 2009-07-03 21:29 发表评论
]]>
ubuntu拼音安装Ҏ【{载?/title><link>http://www.shnenglu.com/amazon/archive/2009/07/03/89154.html</link><dc:creator>q风</dc:creator><author>q风</author><pubDate>Fri, 03 Jul 2009 05:29:00 GMT</pubDate><guid>http://www.shnenglu.com/amazon/archive/2009/07/03/89154.html</guid><wfw:comment>http://www.shnenglu.com/amazon/comments/89154.html</wfw:comment><comments>http://www.shnenglu.com/amazon/archive/2009/07/03/89154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/amazon/comments/commentRss/89154.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/amazon/services/trackbacks/89154.html</trackback:ping><description><![CDATA[原文Q?span style="COLOR: red">http://canofy.javaeye.com/blog/274426</span><br><br>下面是步骤: <br><br>1).l端输入Qsudo apt-get remove scim <br><br>q一步是删除安装pȝ的时候装的那个scimQ实际是个假的,我这里不可以?<br><br>2Qsudo apt-get install scim <br><br>q一步下载安装scim输入法。下载完了系l会自己装上Q中间会有提C,直接yp?<br><br>3Qsudo apt-get install scim-chinese <br><br>q一步是下蝲安装中文输入法,前面那一步只是下载一个可以运行输入法的^収ͼ现在是在q个具体q_上安装中文输?<br><br>4) sudo gedit /etc/X11/Xsession.d /95xinput <br><br>q个步骤是新Z?5xinput的文Ӟ该文件的具体内容如下Q?<br><br>Java代码 复制代码Q?br><br>/usr/bin/scim -d <br>XMODIFIERS="@im=SCIM" <br>export XMODIFIERS <br>export GTK_IM_MODULE=scim <br><br>具体Z么,我也不知道,反正可以用?<br><br>然后Q确定无误后Q保存,退出gedit <br><br>5Qexit 退出终?<br><br>6QLogoutQ重新登录,然后用Ctrl+Space可以激zM文输入法啦~<br><br><br><br><br> <img src ="http://www.shnenglu.com/amazon/aggbug/89154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/amazon/" target="_blank">q风</a> 2009-07-03 13:29 <a href="http://www.shnenglu.com/amazon/archive/2009/07/03/89154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.padshow.cn" target="_blank">ɫɫۺϾþҹҹ</a>| <a href="http://www.huiju58.cn" target="_blank">ƷѾþþþþþ</a>| <a href="http://www.lpxiu.cn" target="_blank">þþþƷר </a>| <a href="http://www.wxhtjflvs.cn" target="_blank">Ʒ99þþþƷ</a>| <a href="http://www.netbirds.cn" target="_blank">޼VëƬþþƷ</a>| <a href="http://www.tv81.cn" target="_blank">˾þô߽AV</a>| <a href="http://www.zfrnhbv.com.cn" target="_blank">þþƷ۲ӰԺ</a>| <a href="http://www.yuleluntan.cn" target="_blank">þۺɫ</a>| <a href="http://www.gdchengye.com.cn" target="_blank">ھƷþþþav </a>| <a href="http://www.sfttc.cn" target="_blank">þùֱ</a>| <a href="http://www.vrmn.cn" target="_blank">ŷ޷avþò</a>| <a href="http://www.yundizhijia.cn" target="_blank">Ůþþ</a>| <a href="http://www.jumbo8.cn" target="_blank">ҹƷþþþ</a>| <a href="http://www.nic-xie.cn" target="_blank">þ777߿ۿƷ</a>| <a href="http://www.bleg.cn" target="_blank">þþĻձ</a>| <a href="http://www.wltceiling.cn" target="_blank">Ʒþþþþ</a>| <a href="http://www.52wysq.cn" target="_blank">þ޵Ӱ</a>| <a href="http://www.yk999.cn" target="_blank">91ƷۺϾþ㽶</a>| <a href="http://www.xyszgh.cn" target="_blank">þþþþϸApp</a>| <a href="http://www.effusion.net.cn" target="_blank">þþƷ77777</a>| <a href="http://www.donglianggc.cn" target="_blank">պݺݾþ͵͵ɫۺ0</a>| <a href="http://www.english711.cn" target="_blank">Ʒþһ</a>| <a href="http://www.68360.cn" target="_blank">þۺϹ׾Ʒ</a>| <a href="http://www.hilxb.cn" target="_blank">ŷþۺϾɫۺ</a>| <a href="http://www.918jj.cn" target="_blank">þѸƵ</a>| <a href="http://www.d5430.cn" target="_blank">þseƷһƷ</a>| <a href="http://www.vgunu.cn" target="_blank">þþƷŷƬ</a>| <a href="http://www.sheersky.cn" target="_blank">þ޹Ʒ123</a>| <a href="http://www.dw172.cn" target="_blank">˾þں2019</a>| <a href="http://www.shangtoo.cn" target="_blank">þþƷaĻ</a>| <a href="http://www.400bxg.cn" target="_blank">99þֻƷ</a>| <a href="http://www.puerteam.cn" target="_blank">ۿ ۺϾþþþùɫ ŷ һ</a>| <a href="http://www.ipingpong.cn" target="_blank">þþ뾫Ʒպý </a>| <a href="http://www.macroshot.cn" target="_blank">޾Ʒþþ</a>| <a href="http://www.odcb.cn" target="_blank">þþƷ72</a>| <a href="http://www.arqing.cn" target="_blank">þó˾ƷƵ</a>| <a href="http://www.niluoya.cn" target="_blank">һֻƴƬ99þ</a>| <a href="http://www.bushenba.cn" target="_blank">ƷɫۺϾþ</a>| <a href="http://www.vjyg.cn" target="_blank">ھƷþþþav</a>| <a href="http://www.ywck.net.cn" target="_blank">97þóƷɰ</a>| <a href="http://www.bjnyjdxcj.cn" target="_blank">99þùۺϾƷ鶹</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>