mysql不能启动,报找不到xxx.sock
kill -9 进程。不行 查看my.cnf配置。没错
看了一下error.log,发现没空间了
df -ks du -hs /opt
/opt占了三十几G,原来apache日志一直没清过,新上的产品每天又产生近2G的日志。
把日志删了后就正常了.
修改apache不产生日志 CustomLog combined /dev/null
关注互联网、网页设计、Web开发、服务器运维优化、项目管理、网站运营、网站安全…
mysql不能启动,报找不到xxx.sock
kill -9 进程。不行 查看my.cnf配置。没错
看了一下error.log,发现没空间了
df -ks du -hs /opt
/opt占了三十几G,原来apache日志一直没清过,新上的产品每天又产生近2G的日志。
把日志删了后就正常了.
修改apache不产生日志 CustomLog combined /dev/null
Posted in linux 维护优化, Mysql, 技术.
rev="post-131" No comments
– 2007/11/16
按照此贴安装 http://bbs.chinaunix.net/thread-873126-1-1.html
wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE23.tar.gz tar zxvf squid-2.6.STABLE23.tar.gz cd squid-2.6.STABLE23
./configure –prefix=/opt/squid-2.6.STABLE23 –enable-useragent-log –enable-referer-log –with-large-files –enable-default-err-language=Simplify_Chinese –enable-err-languages=”Simplify_Chinese English” –disable-internal-dns make make install ln -s /opt/squid-2.6.STABLE23 /opt/squid
++apache的log显示ip来源都是127.0.0.1,修改配置文件使其可以正常记录来访IP 将CustomLog的%h改为%{X-Forwarded-For}i,其它不变.
++快速清空cache echo ” ” > $CachePath/caches/swap.state
对于类似http://you.video.sina.com.cn/index.html之类的网页,squid只会生成一个缓存文件。可以用squid附带的squidclient工具清除: 引用 squidclient -m PURGE -p 80 “http://you.video.sina.com.cn/index.html“
多个网址可参考这里 但在取URL时存在10%的错误率 http://www.365bloglink.com/go.php?id=0215245 老外的程序,可以批量清除某类URL的Squid缓存,支持正则表达式 http://blog.s135.com/read.php/308.htm
常用命令 1,初始化你在 squid.conf 里配置的 cache 目录 #squid/sbin/squid -z 如果有错误提示,请检查你的 cache目录的权限。 2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。 #squid/sbin/squid -k parse 如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。 3,在前台启动squid,并输出启动过程。 #squid/sbin/squid -N -d1 如果有到 ready to server reques,恭喜,启动成功。 然后 ctrl + c,停止squid,并以后台运行的方式启动它。 4,启动squid在后台运行。 #squid/sbin/squid -s 这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。 5,停止 squid #squid/sbin/squid -k shutdown 这个不用解释吧。 6,重引导修改过的 squid.conf #squid/sbin/squid -k reconfigure 这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。 7,把squid添加到系统启动项 编辑 /etc/rc.d/rc.local 添加如下行: echo “65535”>/proc/sys/fs/file-max ulimit -HSn 65535 /usr/local/squid/sbin/squid -s 当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。
#查看运行信息 /usr/local/squid/bin/squidclient -h 127.0.0.1 -p 81 mgr:info
#分割日志 20 0 * /usr/local/squid/sbin/squid -k rotate
再来点其他的。 1,修改cache 缓存目录的权限。 #chown -R squid:squid /home/cache 我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。 2,修改squid 日志目录的权限 #chown -R squid:squid /usr/local/squid/var/logs 这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。 例如生成 access.log cache.log store.log 3,查看你的日志文档。 #more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT 该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。 #more /usr/local/squid/var/logs/access.log | grep TCP_HIT 该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。 #more /usr/local/squid/var/logs/access.log | grep TCP_MISS 该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。 关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。 当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名 www.xxxx.com ,同样可以看到access.log里关于该域名的行。
安装时需注意rh的selinux安全设置,会造成无创建cache目录
64位系统注意cache_mem 大小,过大会报 out of memory 可用tcmalloc 优化内存
Posted in Squid/varnish, 技术.
rev="post-130" No comments
– 2007/11/15
glibc-kernheaders glibc-headers glibc-devel cpp gcc 五个文件,注意顺序
http://download.quicklinux.org/RPMS.os/ http://download.quicklinux.org/RPMS.os/glibc-kernheaders-2.4-9.1.89.i386.rpm http://download.quicklinux.org/RPMS.os/glibc-headers-2.3.4-3.i386.rpm http://download.quicklinux.org/RPMS.os/glibc-devel-2.3.4-3.i386.rpm http://download.quicklinux.org/RPMS.os/cpp-3.4.3-17.i386.rpm http://download.quicklinux.org/RPMS.os/libgcc-3.4.3-17.i386.rpm http://download.quicklinux.org/RPMS.os/gcc-3.4.3-17.i386.rpm
相关的rpm包在redhat的iso镜像里都能找到。
wget 以上包
rpv -ivh 安装
安装好后,使用 rpm -qa | grep gcc 会发现gcc已经成功安装了,我们还可以使用 rpm -qR gcc-xxx 查询一下gcc都依赖于哪些文件。
rev="post-129" No comments
– 2007/11/14
http://www.w3c-cn.com/article.asp?id=88
//FF下需设一下安全 第一步.在Firefox浏览器的地址栏中输入 about:config 第二步.将 signed.applets.codebase_principal_support 的值从 false 更新为 true 。
Posted in JavaScript/DOM/XML, 技术.
rev="post-128" No comments
– 2007/11/14
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行
long_query_time = 1 log-slow-queries = /var/youpath/slow.log log-queries-not-using-indexes
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。 log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,我生成的log就在mysql的data目录 log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境。
接下来就是分析了,我这里的文件名字叫host-slow.log。 先mysqldumpslow –help以下,俺主要用的是 -s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default -t NUM just show the top n queries -g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 mysqldumpslow -t 10 -s t -g “left join” host-slow.log 这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。
rev="post-127" No comments
– 2007/11/13
说WAP是无聊经济,一点也不为过。在使用WAP的原因分布中,“在移动状态下(如上下班途中等)使用”的比例超过了一半,选择“在无聊的时候,打发时间”的比例也超过1/3,而“在一些突发需要上网的时候只能使用WAP”的比例也超过1/4,因此可以发现WAP的移动性即不受地理条件的限制是其吸引用户最主要的方面。此外“包月资费便宜”和“对新技术比较好奇,尝试一下”的比例分别为18.5%和17.0%。
WAP是被迫使用,用户只有在特定情况下,主要是在没有电视和电脑上网等替代品的情况下才使用WAP。据调查,用户一般在以下情况使用WAP:在车上,上课时(无聊时),等车中,临睡时床上,出差途中。
很少有人主动要使用WAP。与游戏相比较,游戏有瘾,人们会去想主动玩游戏,很多人买电脑是为了玩游戏;而很少有人为了上WAP而买手机的。WAP就如同最早的黑白屏幕的286电脑一样,早期只有技术狂热性的和非用不可的人群才会使用。WAP复杂的输入操作,缓慢的速度和内容的单调性等都是限制其发展的因素。
对于数字音乐产业来说,研究WAP用户其实是研究未来音乐消费者的特征。目前是铃声业务业务,接下来是全曲下载业务。未来手机会代替MP3,就如同手机会替代寻呼机一样。这里面会有一部分人会是使用免费的音乐,但仍然有一部分人会付费下载音乐。这个时候,了解什么样的用户会在什么特定情况下会为手机音乐付费,是我们要早做准备的事情。
WAP用户的特征:
WAP用户分布很广,也会有高低用户之分,例如有大城市用户和中小城市的用户;有高端机型用户和低端机型用户;有白领用户和农民工用户。但是,WAP仍然有一个主要消费人群。一般来说,低端用户虽然收入很低,但是却为WAP业务(图铃等)付费的主要人群;高端用户(高端收入、高端机型、大型城市)虽然是WAP的浏览用户,但是他们很少会为WAP业务付费(例如付费图铃业务等)。
高端机型用户一般为白领,销售人员,还有部分大学生,这一类人群中技术发烧性用户比较多;WAP的低端机型的用户一般为务工人群,例如广东外来务工人群,他们住集体宿舍,没有电脑上网,没有电视。
WAP用户有一个共同特点是:群居;在公司和公车上,外地出差中使用WAP;其中学生和打工仔都是没有电脑和电视的宿舍中使用,一般会集中在晚上临睡前上下班的公车上(铃声下载类的操作一般不会在地铁里,因为信号不太好)使用业务。
WAP用户在以下七个方面有鲜明的特征,并且都和“无聊经济”有着关系
1、用户的地域分布
WAP主要分布在广东、北京、上海、江浙等发达省份和城市。广东最多,广东WAP 用户数约为970 万人,占到了全国WAP 用户的1/4,北京和上海的WAP用户数量分别为170 万人和130 万人。
WAP 用户的地域分布集中在我国东部经济相对比较发达的东部地区,这些地方工厂、公司、学校比较集中。但是WAP却不属于最高端人群的业务,而是这些地方的中低端人群消费的业务。以广东为例,广东WAP用户占1/4,但是WAP业务规模却占全国一半以上。这是因为广东外来务工人群居多,一般都是封闭式的工厂,工人住宿舍,WAP是这个人群特有的消遣方式,是一个专门为低收入人群服务的市场。
2、上网条件
之前说过,WAP是无聊经济,是在没有电视和电脑上网的情况下才被迫使用的。根据WAP用户的使用动机,用户通常都会在闲暇无聊的情况下浏览WAP门户网站,拥有无聊闲暇时间最大的是经常跑外的销售人员,以及公车上班一族,以及上课时无聊的学生一族。在上下班高峰,以及夜间临睡前WAP的使用比例最高。
WAP用户与互联网用户重合度也低,估计在30%以内。WAP用户不是你我这样人手一台电脑的人,很多人都是没有接触过电脑而直接成为WAP用户的。
3、性别
WAP用户中,男性占到了8成,女性仅为2成(目前有调查说女性WAP用户在增加的趋势),而传统互联网网民中男性的比例为58.3%,女性为41.7%,可以发现WAP用户男性用户的比例更高。这和WAP的主要群体的职业也有关系。例如男性对技术性更敏感,愿意探索新事物。而女性一般会选择其他消遣方式,例如与人聊天、电话以及看电视等方式。
4、年龄
WAP 用户中,年龄在18~24 岁的比例超出了一半,为51.6%,年龄在25~30 岁的比
例也超出了1/4,为27.8%,31~40 岁的比例为13.1%, 40 岁以上的比例仅有2.2%。值得
一提的是,“80 后”的用户占到所有用户的73.2%。与传统互联网网民相比,WAP用户的年龄更加年轻,也更加集中于18~30 岁年龄段。年轻人更易接受新鲜事物,对技术性产品学习和掌握也更快。
5、职业
WAP 用户中,学生和基础职业(保安、军人、工人)占大部分。其中学生的比例超过了2 成,企事业单位普通员工的比例约为1/4,企事业单位的管理人员的比例也达到了10.8%,专业技术人员的比例也达到了16.2%,农民工虽然在这里面的比例不是太大,但是农民工却是WAP付费业务消费的中坚力量。
WAP 用户中,文化程度为高中的比例最高,为35.8%,文化程度为大学本科和大专的比例则分别为27.1%和21.7%。
6、收入
WAP 用户的个人月收入在1000-2000 元的比例最高,达到了29.5%,2000-3000元的比例为16.2%,而无收入的比例达到21.1%是由于学生用户占有相当的比例。WAP用户中月
收入在3000元以下的比例达到了78.1%,月收入在3000元以上的比例仅为21.9%。
WAP中高收入的人群是白领阶层,属于技术发烧型的人群。他们无论是电脑还是手机,还是其他数码产品都比较精通。WAP中的中收入人群可能是销售人员,上网条件不太便利。
WAP用户中,每月话费消费在100元以内的占56%。这也证明WAP是为特定的低收入用户服务的业务,他们钱不多。但是有闲,并且很少有其他可替代的娱乐项目;而高收入用户一是时间比较繁忙,有钱无闲;二是有其他的可替代WAP的娱乐项目。
7、PC以及手机操作水平
很多用户都是没有接触过互联网而直接使用WAP的。WAP用户的PC操作水平分三部分人,一是技术型用户,玩家级别的;二是初级水平;三是不会上网的。除了少量技术型用户,大部分用户对PC的操作水平都不是太高。
对于手机操作水平,无论用户使用高端机型还是低端机型,无论是高收入用户还是低收入用户,只要不是属于技术性的用户,对手机操作水平都不是太高。
例如,年龄在30岁以上的领导阶层,尽管使用高端机型,尽管收入也很高,但是他们的PC和手机操作能力都不高;另外是低收入使用低端机型的务工人群,PC和手机操作能力都不高;只有中间的白领和学生,操作能力比较高,他们一般是属于技术行用户。
所以,WAP网站和WAP业务在考虑业务设计时,一定要处处想着WAP用户这些人群的特点。懒人推动技术进步,为了他们着想的人才会赢得先机。
附:其他一些数据(以下数据来自互联网,仅供参考)
1、WAP用户形象目前手机上网的形象目前被认为是时尚一组。即便是农民工兄弟的使用,其形象也是在农民工群体中相对时尚新潮一组。
目前使用群体特征:时尚、对新鲜事物感兴趣、容易接受新事物,对资讯需求大,对技术感兴趣的男性年轻用户居多。
和彩铃业务一样,WAP初期的用户是第一批追求新事物的年轻时尚人群。随着业务的成熟,逐渐会扩散到大众用户市场。
2、WAP内容单调。内容方面是导致使用者放弃手机上网的原因。
内容上的单调、匮乏致使目前使用者新鲜感逐渐消失,导致每次上网都是无特别目的,而内容或服务的介绍文字非常古板,千篇一律缺乏特点与个性。内容更新慢,主要从铃声图片感觉明显--1-2个月才有些变化。
用户对全曲下载的内容要求比彩铃要挑剔的多。使用频率更活跃,也更容易退订因为彩铃用户听不到自己的歌曲,所以很容易沉默。全曲用户需要天天有新东西,因为近半数的用户会天天浏览。
3、WAP 上网的使用特征分析
WAP 用户中新增用户的规模较大,一年内的新增用户占到所有用户的47.5%;6成的用户使用WAP的频率不低于每周一次,平均每次使用WAP的时间以10~30 分钟最多,重度用户占所有用户的40.4%;有54.3%的用户只上或者尽量选择免费的网站,31.6%的被访者表示无所谓收费和免费,14.2%的被访者表示只上手机内置的网站。
WAP 用户认知WAP 站点主要通过三大途径:手机内置、口碑相传和传统互联网;用户使用较多的WAP服务有手机图铃下载、WAP 搜索、在线游戏、在线音乐和在线图书;WAP 用户对目前手机上网的意见主要集中在速度和资费方面。
4、WAP 用户使用频率
对WAP的使用频率分布中,每天使用多次的比例为13.8%,每天一次的比例也有15.3%,
每周至少一次的比例为28.3%,这三者汇总的比例占到了57.4%,这说明WAP用户对WAP
的使用频率较高,近6 成的用户使用WAP的频率不低于每周一次。学生用户的使用频率略
高于非学生用户。
WAP 用户平均每次使用WAP 的时间以10~30 分钟的比例最高,为31.8%,在5~10 分钟的比例也超过了两成,总体上看WAP 用户每次的使用时间都不长,平均在30 分钟以内的比例为64.7%,在1 小时以内的比例为80.9%。非学生用户平均每次使用时间要略高于学生用户。将WAP使用频率与每次使用时长交叉可以发现,使用频率较高的用户平均每次的使用时间长度也比较长,这是由于用户的使用习惯受到惯性影响。
5、WAP 用户对站点选择的态度
27.5%的被访者表示只上免费的WAP网站,还有26.8%的被访者表示尽量选择免费的网站,此两者占到了所有被访者的54.3%。有31.6%的被访者表示无所谓收费和免费,只选择上自己喜欢的网站,此外还有14.2%的被访者表示只上手机内置的网站。调查结果显示,免费网站更受欢迎,但收费网站如果能提供有吸引力的内容也会有相当的市场,还有部分用户由于操作等方面的原因只上手机内置网站,表明手机内置对WAP用户尤其是新用户是一个非常重要的渠道。
6、使用WAP 的平均每月花费
WAP 用户使用WAP 的平均每月花费在11~20 元间的比例占所有用户的1/4 强,在21~50 元间的比例超过了1/5,6~10 元的比例也达到了1/5,超过2/3 的用户每月花费在WAP上的费用在6~50 元之间。
手机图铃下载使用状况:最近半年内使用过WAP 下载手机图铃的比例占到了所有WAP 用户的63.0%,那么意味着半年内使用WAP下载图铃的用户约为2460万人。调查发现通过WAP下载手机图铃的用户典型特征为男性、24~30 岁、月收入为1001~3000 元的企事业单位普通员工。
WAP 音乐使用状况:最近半年内通过WAP 在线试听/下载音乐的比例为40.2%,那么意味着半年内通过WAP玩在线试听/下载音乐的用户约为1570 万人。文化程度为高中及以下,年龄在18~24 岁之间的用户更倾向于通过WAP 在线试听/下载音乐。
7、用户经常访问的WAP站点
WAP 用户经常访问的WAP 网站中,排名前十名的网站为(以下排名不分前后,按照中文名称拼音排序):
n 移动梦网
n 3G 门户
n 空中网
n 乐讯网
n 手机百度
n 手机搜狐网
n 手机腾讯网
n 手机新浪网
n 网易WAP
n 易查搜索
rev="post-126" No comments
– 2007/11/12
在root用户下编辑启动脚本
vi /etc/rc.d/rc.local
#加一句
/usr/bin/rdate -s time-a.nist.gov
ntp比较麻烦点 crontab 可能造成时间不连续
time-a.nist.gov 注:美国NIST守时中心 time.join.uni-muenster.de
Posted in linux 维护优化, 技术.
rev="post-125" No comments
– 2007/11/12
wget http://www.danga.com/memcached/dist/memcached-1.1.13.tar.gz tar -zxvf memcached-1.1.13.tar.gz cd memcached-1.1.13 sudo ./configure –prefix=/opt/memcahed sudo make sudo make install /opt/memcached/bin/memcached -d -m 2
imagemagick
Jpeg v6b、libPng、FreeType 的要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片
wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure –prefix=/usr/local/jpeg-6b –enable-shared –enable-static make mkdir /usr/local/jpeg-6b mkdir /usr/local/jpeg-6b/include mkdir /usr/local/jpeg-6b/lib mkdir /usr/local/jpeg-6b/bin mkdir /usr/local/jpeg-6b/man mkdir /usr/local/jpeg-6b/man/man1 make install
———————————————————————-
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.gz
tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5.tar.gz
./configure –prefix=/usr/local/freetype
make
make install
cp /usr/local/freetype/include/freetype2/freetype/* /usr/local/include/
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure –prefix=/usr/local/zlib
make
make install
wget http://jaist.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.29.tar.gz
tar zxvf libpng-1.2.29.tar.gz
cd libpng-1.2.29
./configure prefix=/usr/local/libpng
make
make install
http://www.imagemagick.org/script/install-source.php#unix
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.3.1 sudo ./configure –prefix=/usr/local/imagemagick –enable-shared –enable-lzw –with-modules LDFLAGS=’-L/usr/local/imagemagick/lib -R/usr/local/imagemagick/lib’ CPPFLAGS=”-I/usr/local/ jpeg-6b/include -I/usr/local/libpng/include -I/usr/local/freetype/include -I/usr/local/freetype/include/freetype2″ LDFLAGS=”-L/usr/local/lib -L/usr/local/jpeg-6b/lib -L/usr/local/libpng/lib -L/usr/local/freetype/lib” sudo make sudo make install
/sbin/ldconfig /usr/local/imagemagick/lib
/usr/local/imagemagick/bin/convert logo: logo.gif
Posted in Imagemagick, Memcached/redis.
rev="post-61" No comments
– 2007/11/05
单引号(‘)双引号(“) 反斜杠()
$(command) command 命令替換(command substitution),推荐用$()
${}
meta
$ A=ls $ B=la $ C=/tmp $ $A -$B $C
export variable
showvar() { var=${str=expr} echo \$var is $var echo \$str is $str } 变量null,unset,not null的差别
=和:=的差别
fork source exec 的差别
( ) 將 command group 置於 sub-shell 去執行,也稱 nested sub-shell。 { } 則是在同一個 shell 內完成,也稱為 non-named command group。 所謂的 function ,就是用一個名字去命名一個 command group ,然後再調用這個名字去執行 command group 。 從 non-named command group 來推斷,大概你也可以猜到我要說的是 { } 了吧 在 bash 中,function 的定義方式有兩種: 方式一:
function function_name { command1 command2 command3 …. }
方式二:
fuction_name () { command1 command2 command3 …. }
${ } 的一些特異功能: 假設我們定義了一個變量為: file=/dir1/dir2/dir3/my.file.txt 我們可以用 ${ } 分別替換獲得不同的值: ${file#/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt ${file##/}:拿掉最後一條 / 及其左邊的字串:my.file.txt ${file#.}:拿掉第一個 . 及其左邊的字串:file.txt ${file##.}:拿掉最後一個 . 及其左邊的字串:txt ${file%/}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3 ${file%%/}:拿掉第一條 / 及其右邊的字串:(空值) ${file%.}:拿掉最後一個 . 及其右邊的字串:/dir1/dir2/dir3/my.file ${file%%.}:拿掉第一個 . 及其右邊的字串:/dir1/dir2/dir3/my 記憶的方法為: [list]# 是去掉左邊(在鑑盤上 # 在 $ 之左邊) % 是去掉右邊(在鑑盤上 % 在 $ 之右邊) 單一符號是最小匹配﹔兩個符號是最大匹配。[/list] ${file:0:5}:提取最左邊的 5 個字節:/dir1 ${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2
我們也可以對變量值裡的字串作替換: ${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt
利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值): ${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理) ${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理) ${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理) ${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理) ${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理) ${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理) ${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理) ${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)
tips: 以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態. 一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.
還有哦,${#var} 可計算出變量值的長度: ${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節…
接下來,再為大家介稍一下 bash 的組數(array)處理方法。 一般而言,A=”a b c def” 這樣的變量只是將 $A 替換為一個單一的字串, 但是改為 A=(a b c def) ,則是將 $A 定義為組數… bash 的組數替換方法可參考如下方法: ${A[@]} 或 ${A[]} 可得到 a b c def (全部組數) ${A[0]} 可得到 a (第一個組數),${A[1]} 則為第二個組數… ${#A[@]} 或 ${#A[]} 可得到 4 (全部組數數量) ${#A[0]} 可得到 1 (即第一個組數(a)的長度),${#A[3]} 可得到 3 (第四個組數(def)的長度) A[3]=xyz 則是將第四個組數重新定義為 xyz …
接下來,再為大家介稍一下 bash 的組數(array)處理方法。 一般而言,A=”a b c def” 這樣的變量只是將 $A 替換為一個單一的字串, 但是改為 A=(a b c def) ,則是將 $A 定義為組數… bash 的組數替換方法可參考如下方法: ${A[@]} 或 ${A[]} 可得到 a b c def (全部組數) ${A[0]} 可得到 a (第一個組數),${A[1]} 則為第二個組數… ${#A[@]} 或 ${#A[]} 可得到 4 (全部組數數量) ${#A[0]} 可得到 1 (即第一個組數(a)的長度),${#A[3]} 可得到 3 (第四個組數(def)的長度) A[3]=xyz 則是將第四個組數重新定義為 xyz …
諸如此類的…. 能夠善用 bash 的 $( ) 與 ${ } 可大大提高及簡化 shell 在變量上的處理能力哦~~~ ^_^
好了,最後為大家介紹 $(( )) 的用途吧:它是用來作整數運算的。 在 bash 中,$(( )) 的整數運算符號大致有這些:
例: [code]$ a=5; b=7; c=2 $ echo $(( a+bc )) 19 $ echo $(( (a+b)/c )) 6 $ echo $(( (ab)%c)) 1[/code]
在 $(( )) 中的變量名稱,可於其前面加 $ 符號來替換,也可以不用,如: $(( $a + $b * $c)) 也可得到 19 的結果
此外,$(( )) 還可作不同進位(如二進位、八進位、十六進位)作運算呢,只是,輸出結果皆為十進位而已: echo $((16#2a)) 結果為 42 (16進位轉十進位) 以一個實用的例子來看看吧: 假如當前的 umask 是 022 ,那麼新建文件的權限即為: [code]$ umask 022 $ echo “obase=8;$(( 8#666 & (8#777 ^ 8#$(umask)) ))” | bc 644[/code]
事實上,單純用 (( )) 也可重定義變量值,或作 testing: a=5; ((a++)) 可將 $a 重定義為 6 a=5; ((a–)) 則為 a=4 a=5; b=7; ((a < b)) 會得到 0 (true) 的返回值。 常見的用於 (( )) 的測試符號有如下這些: [list]:大於 =:大於或等於 ==:等於 !=:不等於[/list] 不過,使用 (( )) 作整數測試時,請不要跟 [ ] 的整數測試搞混亂了
rev="post-86" No comments
– 2007/11/05
extended_valid_elements无法使用,HTML代码编辑时内容会消失. IE6下在贴word文档时不能正确转换,ie7和FF下没有问题 IE7下会出现Ø ,FF下没事 讨论http://drupal.org/node/32883 解决方法是入库时用PHP替换http://tinymce.moxiecode.net/punbb/viewtopic.php?id=4352
rev="post-124" No comments
– 2007/11/05
近期评论