这也许需要几年甚至是几十年,才能真正掌握Linux shell 命令。这里有10个你从来没有听说或使用过的命令。他们在没有特定的顺序。我最喜欢的是mkfifo。
- pgrep, 替代:
# ps -ef | egrep '^root ' | awk '{print $2}'
1
2
3
4
5
20
21
38
39
...
你还可以这样:
# pgrep -u root
1
2
3
4
5
20
21
38
39
...
- pstree, 在tree 格式中列出进程,当有webSphere或重任务应用时非常有用。
# pstree
init-+-acpid
|-atd
|-crond
|-cups-config-dae
|-cupsd
|-dbus-daemon-1
|-dhclient
|-events/0-+-aio/0
| |-kacpid
| |-kauditd
| |-kblockd/0
| |-khelper
| |-kmirrord
| `-2*[pdflush]
|-gpm
|-hald
|-khubd
|-2*[kjournald]
|-klogd
|-kseriod
|-ksoftirqd/0
|-kswapd0
|-login---bash
|-5*[mingetty]
|-portmap
|-rpc.idmapd
|-rpc.statd
|-2*[sendmail]
|-smartd
|-sshd---sshd---bash---pstree
|-syslogd
|-udevd
|-vsftpd
|-xfs
`-xinetd
- bc 是个任意精度计算器语言,它可以Shell脚本执行平方根操作,expr 不支持平方根。
# ./sqrt
Usage: sqrt number
# ./sqrt 64
8
# ./sqrt 132112
363
# ./sqrt 1321121321
36347
Here is the script:
# cat sqrt
#!/bin/bash
if [ $# -ne 1 ]
then
echo 'Usage: sqrt number'
exit 1
else
echo -e "sqrt($1)\nquit\n" | bc -q -i
fi
- split, 你需要将大的文件分解称若干小部分?split是你的命令,下面是将250MB文件分解为2M的块儿,所有开始于LF_前缀。
# ls -lh largefile
-rw-r--r-- 1 root root 251M Feb 19 10:27 largefile
# split -b 2m largefile LF_
# ls -lh LF_* | head -n 5
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_aa
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ab
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ac
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ad
-rw-r--r-- 1 root root 2.0M Feb 19 10:29 LF_ae
# ls -lh LF_* | wc -l
126
- nl 数字线,在没发现nl之前,一直用脚本来实现。
# head wireless.h
/*
* This file define a set of standard wireless extensions
*
* Version : 20 17.2.06
*
* Authors : Jean Tourrilhes - HPL
* Copyright (c) 1997-2006 Jean Tourrilhes, All Rights Reserved.
*/#ifndef _LINUX_WIRELESS_H
# nl wireless.h | head
1 /*
2 * This file define a set of standard wireless extensions
3 *
4 * Version : 20 17.2.06
5 *
6 * Authors : Jean Tourrilhes - HPL
7 * Copyright (c) 1997-2006 Jean Tourrilhes, All Rights Reserved.
8 */9 #ifndef _LINUX_WIRELESS_H
- mkfifo 是最酷的一个,你一定知道如何创建管道 输送grep的结果到LESS,可能甚至perl。但是你知道如何使2个命令通过1个命名管道沟通?看下图,创建管道,开始写到它。
然后读取它:
- ldd, 想知道java链接到哪个Linux线程库?
# ldd /usr/java/jre1.5.0_11/bin/java
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00bd4000)
libdl.so.2 => /lib/libdl.so.2 (0x00b87000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a5a000)
/lib/ld-linux.so.2 (0x00a3c000)
- col, 想保存帮助页面为纯文本?
# PAGER=cat
# man less | col -b > less.txt
- xmlwf, 需要知道一个XML文档或许是配置文件是否合理?
# curl -s 'http://bashcurescancer.com' > bcc.html
# xmlwf bcc.html
# perl -i -pe 's@<br/>@ *本站禁止HTML标签噢* @g' bcc.html
# xmlwf bcc.html
bcc.html:104:2: mismatched tag
- lsof 列出打开文件,你可以用它做很多很cool的事情,比如查找哪个接口是开放的?
# lsof | grep TCP
portmap 2587 rpc 4u IPv4 5544 TCP *:sunrpc (LISTEN)
rpc.statd 2606 root 6u IPv4 5585 TCP *:668 (LISTEN)
sshd 2788 root 3u IPv6 5991 TCP *:ssh (LISTEN)
sendmail 2843 root 4u IPv4 6160 TCP badhd:smtp (LISTEN)
vsftpd 9337 root 3u IPv4 34949 TCP *:ftp (LISTEN)
cupsd 16459 root 0u IPv4 41061 TCP badhd:ipp (LISTEN)
sshd 16892 root 3u IPv6 61003 TCP badhd.mshome.net:ssh->kontiki.mshome.net:4661 (ESTABLISHED)
Note: OpenBSD 101 pointed out that “lsof -i TCP” a better way to obtain this same information. Thanks!Or find the number of open files a user has. Very important for running big applications like Oracle, DB2, or WebSphere:
# lsof | grep ' root ' | awk '{print $NF}' | sort | uniq | wc -l
179
提示,匿名评论者指出应该用“sort -u”代替sort | uniq,本人忘记了-u flag,谢谢!
该贴已经同步到 血のばら的微博
对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。
对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上)。。。
1、使用MyISAM而不是InnoDB
MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL 默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库。外键约束或者事务处理对于数据完整性 是非常重要的,但MyISAM都不支持这些。另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
结论很简单:使用InnoDB。
2、使用PHP的mysql函数
PHP自产生之日就提供了MySQL库函数(or near as makes no difference)。很多应用仍然在使用类似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
如果你在使用MySQL v4.1.3或者更新版本,强烈推荐使用您使用mysqli扩展。
mysqli(MySQL的加强版扩展)有以下几个优点:
可选的面向对象接口
prepared表达式,这有利于阻止SQL注入攻击,还能提高性能
支持更多的表达式和事务处理
另外,如果你想支持多种数据库系统,你还可以考虑PDO。
3、没有处理用户输入
这或者可以这样说#1:永远不要相信用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简单的SQL注入攻击会利用如下的代码:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';"; // run query...
只要在username字段输入“admin';--”,这样就会被黑到,相应的SQL语句如下:
SELECT userid FROM usertable WHERE username='admin';
狡猾的黑客可以以admin登录,他们不需要知道密码,因为密码段被注释掉了。
4、没有使用UTF-8
美国、英国和澳大利亚的我们很少考虑除英语之外的其他语言。我们很得意地完成了自己的“杰作”却发现它们并不能在其他地方正常运行。
UTF-8解决了很多国际化问题。虽然在PHP v6.0之前它还不能很好地被支持,但这并不影响你把MySQL字符集设为UTF-8。
5、相对于SQL,偏爱PHP
如果你接触MySQL不久,那么你会偏向于使用你已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,你不会使用MySQL自带的AVG()函数,却会先对记录集中的值求和然后用PHP循环来计算平均值。
此外,请注意PHP循环中的SQL查询。通常来说,执行一个查询比在结果中迭代更有效率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些SQL的知识将大有裨益。
6、没有优化数据库查询
99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
7、不能正确使用数据类型
MySQL提供了诸如numeric、string和date等的数据类型。如果你想存储一个时间,那么使用DATE或者DATETIME类型。如果这个时候用INTEGER或者STRING类型的话,那么将会使得SQL查询非常复杂,前提是你能使用INTEGER或者STRING来定义那个类型。
很多人倾向于擅自自定义一些数据的格式,比如,使用string来存储序列化的PHP对象。这样的话数据库管理起来可能会变得简单些,但会使得MySQL成为一个糟糕的数据存储而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select语句中的任何一个where子句表示的字段都应该使用索引。
举 个例子,假设我们有一个user表,包括numeric ID(主键)和email address。登录的时候,MySQL必须以一个email为依据查找正确的ID。如果使用了索引的话(这里指email),那么MySQL就能够使用 更快的搜索算法来定位email,甚至可以说是即时实现。否则,MySQL就只能顺序地检查每一条记录直到找到正确的email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后这些索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃,web主机提供商有可能会破产!丢失MySQL数据将会是灾难性的,所以请确保你已经使用了自动备份或者已经复制到位。
11、Bonus mistake-不考虑使用其他数据库
对于PHP开发人员来说,MySQL可能是使用最广泛的数据库系统,但并不是唯一的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,而且都没有被公司收购。微软提供了sql server Express,甲骨文提供了10g Express,这两者都是企业级数据库的免费版本。有时候,对于一个较小的web应用或者嵌入式应用,SQLite也不失为一个可行的替代方案。
本文转载自: boobooke.com
[查看全文]
该贴已经同步到 nekor的微博
据centos官网消息,centos镜像将于当地时间7月2日开始同步传输,快了,终于可能用到Centos-6了。以下是官网的原文。
It's been a long day of testing and fixing and retesting! We've gone through at least four or five different pushes to the trees, each time fixing some more issues. No big problems surfaced today, and I'm confident that we now have a more-or-less "final" tree for 6.0 release.
There are a few minor things which need fixing, but I don't believe anything that will delay the initial push to the mirrors. I'd expect this to start tomorrow, but it is a decision for Karanbir once he gets feedback from the QA team on the updated packages and isos which are just now finishing up syncing to the QA machines.
In short: everything is looking good to me for a release "real soon now". Will update with more details tomorrow as we wrap things up.
文章转载自:开源中国社区 [http://www.oschina.net]
[查看全文]
该贴已经同步到 nekor的微博
Query 1.6.2 正式版发布了,该版本包含了很多bug的修复。与往常一样,jQuery 提供两份代码的拷贝以供下载,一个最小化的压缩版本,另外是一个未压缩版本(用于开发和代码阅读):
- jQuery Minified (for production)
- jQuery Regular (for development and testing)
你也可以直接引入上述的URL地址,以提升用户访问的性能。
详细的改进记录包括:
Attributes
- #9286: Using live submit on forms
- #9298: $(elem).attr(eventName) not working properly in IE7
- #9329: attr(“title”) issue in ie7
- #9362: .attr(“value”) does not work for meter elements
- #9468: $(‘form’).attr(‘class’) always return undefined in IE 6
- #9499: removeClass will only remove the first instance of a class
- #9301: Setting data() via an object with hyphenated keys create inaccessible data.
- #9368: jQuery.camelCase() defined in css.js, but used more widely
- #9471: memory leak noticed when loading jquey.1.6.1.min.js included html pages in the iframe
- #9300: outerWidth(true) issue
- #9220: Animation Callbacks fire AFTER the next queue function executes.
- #9678: setInterval cleared by animation
- #9285: custom trigger
- #8950: (Chrome, Firefox) Second argument (event empty) in jQuery throws error while creating *本站禁止HTML标签噢*
- #9370: Compatibility Issue with jQuery 1.6 and IE6
- #9239: Version 1.6.0 breaks the background behavior on body element
- #9440: v1.6.1 messes up layout in IE8
该贴已经同步到 nekor的微博
本帖最后由 delete_lazy 于 2011-7-5 14:36 编辑
OK,终于把考试那些杂事办完了,几天更新一下,一直不知道我从哪里开始讲起,打算重新分下章节。当然看这个之前请阅读我的[url=我来误人子弟啦 https://www.gn00.com/forum.php?mo ... d=1428&fromuid=1404]那个帖子[/url]。
——————分——————————————界———————————————————线——————————————
第一章:函数第一节:了解函数在讲函数之前,我们先说一下算法吧,高中学过那个流程图的同学应该知道,每做一件事都应该分好条理,第一步先做什么,第二步又要怎么做,第三步......算法是程序设计的灵魂,设计一个程序应该先想好步骤。进入今天的正题,函数也可以叫方法,就是实现某项功能或服务的代码块,比如我们想在屏幕上输出“i love you”字样,我们就可以通过输出函数cout<<"i love you"<<endl;来实现,图在下面cout(输出),cin(输入)这种类型的函数,是库文件里有的,不需要自己定义,可以直接运用。那么,自己可以自定义一个函数,使其具有你想要的定功能吗?当然可以,比如,我想输出?+?=?,我就可以定义一个函数int sum(){int a,b; cin>>a>>b; cout<<a<<"+"<<b<<"="<<a+b;return a+b;}然后在主函数中直接或间接的调用这个函数,没办法,主函数是老大。图在下面int a;是什么意思?就是定义一个int型的变量a,int型就是整数类型,如1,2,3,-1,-11这些,a是变量你可以把-100赋给a(a=-100),也可以把99赋给a(a=99),因为a是变量,注意a一次只能存储一个整形量,想a=99,-100;这种语句是错误的,以后讲到数据类型会详细讲,每个函数都有返回值,函数int sum()的返回值类型为int,故函数结尾的时候返回了a+b(两个整数相加也是整数啊),return a+b;函数一下子讲不完,而且发现自己讲的很没条理,有点了解的同学可能还明白,新手真的会给我误导,让我好好想想到底应该怎么讲,这星期会再更新一节。[查看全文]
对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。
对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上)。。。
1、使用MyISAM而不是InnoDB
MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL 默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库。外键约束或者事务处理对于数据完整性 是非常重要的,但MyISAM都不支持这些。另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
结论很简单:使用InnoDB。
2、使用PHP的mysql函数
PHP自产生之日就提供了MySQL库函数(or near as makes no difference)。很多应用仍然在使用类似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
如果你在使用MySQL v4.1.3或者更新版本,强烈推荐使用您使用mysqli扩展。
mysqli(MySQL的加强版扩展)有以下几个优点:
可选的面向对象接口
prepared表达式,这有利于阻止SQL注入攻击,还能提高性能
支持更多的表达式和事务处理
另外,如果你想支持多种数据库系统,你还可以考虑PDO。
3、没有处理用户输入
这或者可以这样说#1:永远不要相信用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简单的SQL注入攻击会利用如下的代码:
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';"; // run query...
只要在username字段输入“admin';--”,这样就会被黑到,相应的SQL语句如下:
SELECT userid FROM usertable WHERE username='admin';
狡猾的黑客可以以admin登录,他们不需要知道密码,因为密码段被注释掉了。
4、没有使用UTF-8
美国、英国和澳大利亚的我们很少考虑除英语之外的其他语言。我们很得意地完成了自己的“杰作”却发现它们并不能在其他地方正常运行。
UTF-8解决了很多国际化问题。虽然在PHP v6.0之前它还不能很好地被支持,但这并不影响你把MySQL字符集设为UTF-8。
5、相对于SQL,偏爱PHP
如果你接触MySQL不久,那么你会偏向于使用你已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,你不会使用MySQL自带的AVG()函数,却会先对记录集中的值求和然后用PHP循环来计算平均值。
此外,请注意PHP循环中的SQL查询。通常来说,执行一个查询比在结果中迭代更有效率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些SQL的知识将大有裨益。
6、没有优化数据库查询
99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
7、不能正确使用数据类型
MySQL提供了诸如numeric、string和date等的数据类型。如果你想存储一个时间,那么使用DATE或者DATETIME类型。如果这个时候用INTEGER或者STRING类型的话,那么将会使得SQL查询非常复杂,前提是你能使用INTEGER或者STRING来定义那个类型。
很多人倾向于擅自自定义一些数据的格式,比如,使用string来存储序列化的PHP对象。这样的话数据库管理起来可能会变得简单些,但会使得MySQL成为一个糟糕的数据存储而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select语句中的任何一个where子句表示的字段都应该使用索引。
举 个例子,假设我们有一个user表,包括numeric ID(主键)和email address。登录的时候,MySQL必须以一个email为依据查找正确的ID。如果使用了索引的话(这里指email),那么MySQL就能够使用 更快的搜索算法来定位email,甚至可以说是即时实现。否则,MySQL就只能顺序地检查每一条记录直到找到正确的email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后这些索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃,web主机提供商有可能会破产!丢失MySQL数据将会是灾难性的,所以请确保你已经使用了自动备份或者已经复制到位。
11、Bonus mistake-不考虑使用其他数据库
对于PHP开发人员来说,MySQL可能是使用最广泛的数据库系统,但并不是唯一的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,而且都没有被公司收购。微软提供了sql server Express,甲骨文提供了10g Express,这两者都是企业级数据库的免费版本。有时候,对于一个较小的web应用或者嵌入式应用,SQLite也不失为一个可行的替代方案。
转自:http://boobooke.com/bbs/thread-102535-1-1.html
[查看全文]
该贴已经同步到 血のばら的微博
Mixin是对互不相关的类都有用处的一组功能。在支持多重继承的语言中mixin以第二基类的形式出现,而在动态强类型语言中则会被直接合并到类型中。C#和VB不支持这两种方式,一般通过基类来实现,从而导致类型肿胀或大量的复制粘贴。组合也不是好办法,因为被混入的方法和属性需要委托给内部对象执行。
re-mix项目提供了另一种选择。通过运行时代码生成,简单的类能和一个或多个mixin类合并。这看起来像是多重继承,但实际上则是结合了对象组合与接口匹配来实现。比如说,你想要一个mixin来为类添加深拷贝功能。你需要创建一个ICloneable接口,以及一个实现该接口的mixin类CloneableMixin。CloneableMixin自动会获得一个父对象的引用,通过这个引用就可以执行克隆操作。
你可以在运行时将CloneableMixin混入任何类中来创建新的类。新类会继承自之前的类,并且实现了mixin所实现的全部接口。所有这些接口中的方法都会被委托给一个mixin的实例来执行。
另一个mixin的用法是重载基类中的行为,在这种情况下,mixin中的方法将会在生成的类中改写原来类中的方法。
从Stefan Wenig和Fabian Schmied在Lang.NET的演讲中,可以学到更多关于re-mix和mixin的东西。
查看英文原文:Mixins for C# and Visual Basic
[查看全文]
该贴已经同步到 血のばら的微博
Buildr是一个简单直观的Java项目构建系统,在进行了10个月的开发并获得许多正面反馈之后,Apache基金会将会向Buildr敞开大门并最终接手这个项目,这将是Apache基金会的第一个Ruby项目。
Buildr 1.4.6 改进内容:
* Added: BUILDR-592 Allow Users to Specify SSH Options for Deployment (Marc-André Laverdière)
* Fixed: BUILDR-591 Sort modules in iml files generated by idea task to ensure
main_dependencies are exported
* Added: Support for Scala 2.9.0+ (with help of Alexis Midon)
* Fixed: BUILDR-583 Update jruby install to use jruby version 1.6.1 (Alexis Midon)
* Fixed: BUILDR-582 Revert the name change for the task to generate Intellij
project files to 'idea'
* Change: BUILDR-579 Format generated IDEA project files to look more like what
IntelliJ generates (Peter Royal)
* Change: BUILDR-574 Enhance idea task to generate test resources with test scope
(Jean-Philippe Caruana)
* Change: BUILDR-576 Upgrade to JUnit 4.8.2
* Change: Upgrade to JRuby 1.6.2
* Change: Scala 2.9.0-1 is now default, along with ScalaCheck 1.9, ScalaTest 1.6.1
and Specs 1.6.8.
* Change: ScalaCheck, ScalaTest and Specs now default to sane versions when using
older Scala versions.
* Fixed: BUILDR-571 Generated IDEA projects include resources multiple times (Peter Royal)
* Fixed: BUILDR-573 HTTP upload PUT request with incorrect Content-Type (Mathias Doenitz)
* Fixed: BUILDR-578 Tar task does not preserve uid/gid on folders (Jean-Philippe Caruana)
* Fixed: BUILDR-251 Classifier not handled when downloading snapshot artifacts (Ryan Fowler)
* Fixed: BUILDR-585 "TypeError : can't dup NilClass" when merging jars
* Fixed: BUILDR-586 ScalaTest uses deprecated ant task (Martin Partel)
* Fixed: BUILDR-584 eclipse plugin should use absolute path
* Fixed: BUILDR-587 ScalaTest uses deprecated reporter parameters
[查看全文]
该贴已经同步到 血のばら的微博