关于键盘和鼠标谁更快捷之争,是一个永远被程序员争论的话题。我想大多数人都不会极端的信奉一种操作方式,鼠标更为大众接受,但掌握一些快捷键对于提高操作速度是有帮助的。
si为我们提供了丰富的快捷键和灵活的定制方式,同时还支持自定义命令和脚本,熟练掌握这些之后相信可以使你更加喜欢它。
以下是我认为比较有用的快捷键:
1. ctrl+o,打开文件列表
2. F7,打开符号检索窗口(全局列表)
3. F8,打开符号检索窗口(本地文件)
4. ctrl+=,调转到符号的定义处
5. alt+, /alt+. 跳转到前/后一次停留的地方
7. ctrl+/,全局搜索
8. ctrl+',搜索并替换
9. shift+f8,把当前光标下的关键字标记为高亮
更多:阅读全文
si为我们提供了丰富的快捷键和灵活的定制方式,同时还支持自定义命令和脚本,熟练掌握这些之后相信可以使你更加喜欢它。
以下是我认为比较有用的快捷键:
1. ctrl+o,打开文件列表
2. F7,打开符号检索窗口(全局列表)
3. F8,打开符号检索窗口(本地文件)
4. ctrl+=,调转到符号的定义处
5. alt+, /alt+. 跳转到前/后一次停留的地方
7. ctrl+/,全局搜索
8. ctrl+',搜索并替换
9. shift+f8,把当前光标下的关键字标记为高亮
更多:阅读全文
问题:
为方便快速登录某系统,经常会对secureCRT会话设置默认登录用户名和密码。可一旦登录系统的密码做了修改,在secureCRT中要在哪修改已保存密码呢?
处理:
secureCRT将每个session的配置文件保存在
C:\Documents and Settings\Administrator\Application Data\VanDyke下的config文件夹。
根据session名找到对应的配置文件,删除配置文件中password对应的value即可。
如何恢复SecureCRT保存的密码
很老很土却很有效的办法,现公之于众。
登录密码保存在CRT的session配置文件中,不过是加密保存的,看不懂
也不知道它的加密算法,没法解密. 所以如果能让CRT自己显示出来就好了
首先修改要登录的主机的IP地址,改成另外一台机器, 这台的登录密码要跟原来机器的不一样
然后连接,这时因为登录密码错误,会弹出一个窗口,显示了用户名和密码,密码是用一串星号表示的
随便下一个星号密码查看软件,查看一下就行了
我用 “侠客密码查看器”,很不错的查看密码软件。
为方便快速登录某系统,经常会对secureCRT会话设置默认登录用户名和密码。可一旦登录系统的密码做了修改,在secureCRT中要在哪修改已保存密码呢?
处理:
secureCRT将每个session的配置文件保存在
C:\Documents and Settings\Administrator\Application Data\VanDyke下的config文件夹。
根据session名找到对应的配置文件,删除配置文件中password对应的value即可。
如何恢复SecureCRT保存的密码
很老很土却很有效的办法,现公之于众。
登录密码保存在CRT的session配置文件中,不过是加密保存的,看不懂
也不知道它的加密算法,没法解密. 所以如果能让CRT自己显示出来就好了
首先修改要登录的主机的IP地址,改成另外一台机器, 这台的登录密码要跟原来机器的不一样
然后连接,这时因为登录密码错误,会弹出一个窗口,显示了用户名和密码,密码是用一串星号表示的
随便下一个星号密码查看软件,查看一下就行了
我用 “侠客密码查看器”,很不错的查看密码软件。
BSD 和 SYSV 是世上最正统的 UNIX 操作系统,在 LINUX 出现之前,他们统治了整个 UNIX 世界。也正因为此,这两个最正统的 UNIX 核心流派都在实践中积累丰富的经验。
SYSV 偏向于商业,BSD 更偏向于自由和实用。
现 在,本文只讨论 BSD 流派最活跃的发行版 FreeBSD。FreeBSD 作为最重要的一个 BSD 发行版,它保持了 BSD 自由和实用的原则。但亦因为此而忽略很多商业的考虑的相应的功能。凭藉我自己多年 UNIX 的使用经验,列出一些 BSD 的优势与不足,希望以此作为读者的参考。
不足之处:
文件系统:
FreeBSD 的文件系统属于中上水平,但未达至企业级的应用需求。主要体现于文件系统本身存在的脆弱性。在高负载的情况下,文件系统存在有崩溃的可能性。需要注意的 是,导致这样的结果,也有可能由于磁盘控制器(SCSI, RAID 等等)驱动程序本身导致的。没有原厂设备驱动程序是个比较大的问题。
网络:
FreeBSD 的网络性能是无用置疑的!但是网卡驱动(是的,设备驱动是个很重要的因素)不完善会导致性能和稳定性大打节扣。虽然这与 FreeBSD 的核心没有关系,但对于一个可提供服务的整体来说,驱动程序却是一个很重要的组成部份。
另外,由于一个网卡接口上的线的松动,有可能导致网络中断。而一些商业化的 UNIX 操作系统可以在当主网卡不可用时将该网卡上的 IP 转移至可提供正确连接的网卡上。
多处理器(超线程)支持:
在 6.0 出版之前,FreeBSD 对多处理器支持是不尽人意的。INTEL CPU 提供有 HT(超线程)功能。FreeBSD 在 HT 开启的状态下会比在关闭的状态下差。我忘记了超线程的原理,只记得拥有超线程功能的 CPU 在过多的切换情况下性能就会降低,不过在什么时候切换和切换些什么我忘记了。FreeBSD 在开启 HT 后性能会变差,可能与这个有关。
出众之处:
网络:
FreeBSD 的网络性能非常好,可以同时处理海量的网络请求,这使 BSD 非常适合作为防火墙的环境。另外,在网络聊天服务器,如 IM 这种应用上,FreeBSD 也是很合适的选择。网易的 POPO 聊天软件服务器端就是在 FreeBSD 下开发并投入到实际环境中使用的,通过对内核的修改,可以轻松支持数以万计的用户连接,要注意,是永久性的连接,除非用户点击注销按钮。
内存:
你 会发现你服务器上的内存会被 FreeBSD 很好地利用,以使你的服务达至最佳的状态。FreeBSD 不会因为将过多的内存用于磁盘 CACHE 而使更重要的程序获取不到物理内存而让系统使用 SWAP。在实际的环境中,我就遇到过 LINUX 为保持磁盘的 CACHE,而让新任务使用 SWAP,导致新任务执行时间大大拉长。在执行 swapoff -a 操作后,运行同样的新任务只需要原来时间的一半。而系统并没有因为关闭 SWAP 而停机,表示物理内存并没有因为新任务而被耗尽。
一个例子:
Memcached 是一个非常出众的基于内存的缓存服务器。它可以为被其支持的程序语言提供串行化数据保存的功能,这样可以让同一份数据被多台服务器共享,而更重要的是,它的速度非常快。
我 可以利用 PHP 或 JAVA 从数据库中获取数据结果集,然后将结果集的内容保存进 Memcached,其他服务器上的程序同样可以相应的 key 从 Memcached 中获得相同的拷贝。在分布式的环境,这种需求非常明显。我自己也尝试当 SESSION 数据保存至 Memcached 而无需为共享 SESSION 数据而专门架设一台 MYSQL 数据库。
在利用 Memcached 作为数据的中心点,网络的流量会非常大,内存的使用会非常频繁,基本上不与磁盘打交道,而且整个系统的稳健性要求非常高。在这种应用需求下,FreeBSD 自然地成为首选。因为它为高效的网络性能,更合理的内存利用率,和稳健的系统基础。
一挥受到此文的影响故而最终决定在FreeBSD上装Memcached和图片服务器!
原文请见《FreeBSD是什么?FreeBSD的优缺点分析》
SYSV 偏向于商业,BSD 更偏向于自由和实用。
现 在,本文只讨论 BSD 流派最活跃的发行版 FreeBSD。FreeBSD 作为最重要的一个 BSD 发行版,它保持了 BSD 自由和实用的原则。但亦因为此而忽略很多商业的考虑的相应的功能。凭藉我自己多年 UNIX 的使用经验,列出一些 BSD 的优势与不足,希望以此作为读者的参考。
不足之处:
文件系统:
FreeBSD 的文件系统属于中上水平,但未达至企业级的应用需求。主要体现于文件系统本身存在的脆弱性。在高负载的情况下,文件系统存在有崩溃的可能性。需要注意的 是,导致这样的结果,也有可能由于磁盘控制器(SCSI, RAID 等等)驱动程序本身导致的。没有原厂设备驱动程序是个比较大的问题。
网络:
FreeBSD 的网络性能是无用置疑的!但是网卡驱动(是的,设备驱动是个很重要的因素)不完善会导致性能和稳定性大打节扣。虽然这与 FreeBSD 的核心没有关系,但对于一个可提供服务的整体来说,驱动程序却是一个很重要的组成部份。
另外,由于一个网卡接口上的线的松动,有可能导致网络中断。而一些商业化的 UNIX 操作系统可以在当主网卡不可用时将该网卡上的 IP 转移至可提供正确连接的网卡上。
多处理器(超线程)支持:
在 6.0 出版之前,FreeBSD 对多处理器支持是不尽人意的。INTEL CPU 提供有 HT(超线程)功能。FreeBSD 在 HT 开启的状态下会比在关闭的状态下差。我忘记了超线程的原理,只记得拥有超线程功能的 CPU 在过多的切换情况下性能就会降低,不过在什么时候切换和切换些什么我忘记了。FreeBSD 在开启 HT 后性能会变差,可能与这个有关。
出众之处:
网络:
FreeBSD 的网络性能非常好,可以同时处理海量的网络请求,这使 BSD 非常适合作为防火墙的环境。另外,在网络聊天服务器,如 IM 这种应用上,FreeBSD 也是很合适的选择。网易的 POPO 聊天软件服务器端就是在 FreeBSD 下开发并投入到实际环境中使用的,通过对内核的修改,可以轻松支持数以万计的用户连接,要注意,是永久性的连接,除非用户点击注销按钮。
内存:
你 会发现你服务器上的内存会被 FreeBSD 很好地利用,以使你的服务达至最佳的状态。FreeBSD 不会因为将过多的内存用于磁盘 CACHE 而使更重要的程序获取不到物理内存而让系统使用 SWAP。在实际的环境中,我就遇到过 LINUX 为保持磁盘的 CACHE,而让新任务使用 SWAP,导致新任务执行时间大大拉长。在执行 swapoff -a 操作后,运行同样的新任务只需要原来时间的一半。而系统并没有因为关闭 SWAP 而停机,表示物理内存并没有因为新任务而被耗尽。
一个例子:
Memcached 是一个非常出众的基于内存的缓存服务器。它可以为被其支持的程序语言提供串行化数据保存的功能,这样可以让同一份数据被多台服务器共享,而更重要的是,它的速度非常快。
我 可以利用 PHP 或 JAVA 从数据库中获取数据结果集,然后将结果集的内容保存进 Memcached,其他服务器上的程序同样可以相应的 key 从 Memcached 中获得相同的拷贝。在分布式的环境,这种需求非常明显。我自己也尝试当 SESSION 数据保存至 Memcached 而无需为共享 SESSION 数据而专门架设一台 MYSQL 数据库。
在利用 Memcached 作为数据的中心点,网络的流量会非常大,内存的使用会非常频繁,基本上不与磁盘打交道,而且整个系统的稳健性要求非常高。在这种应用需求下,FreeBSD 自然地成为首选。因为它为高效的网络性能,更合理的内存利用率,和稳健的系统基础。
一挥受到此文的影响故而最终决定在FreeBSD上装Memcached和图片服务器!
原文请见《FreeBSD是什么?FreeBSD的优缺点分析》
Uptimes-Project.org统计了各种操作系统的连续运行时间的最高纪录以及平均值。我们看到目前这项纪录的保持者是由运行于Alpha主机之上的OpenVMS集群系统保持的,其最长连续运行时间为10年180天6小时40分钟,平均运行时间也有4年多。我们常用的Windows系统最高纪录为189天1小时59分钟,平均值为10天多;Linux的表现则为1年 309天(最高值)和接近20天(平均值)
Uptimes Project
Welcome to the uptimes project. This site uses open source software to track, report, and generate statistics based on user data.
We currently have collectively monitored over 10907 Years 98 Days 10 Hours 30 Minutes of uptime.
With more than 2371 hosts reporting.
Overall Statistics
Highest Uptime
NameWVNETcluster
DescriptionWVNET VMScluster with both ...
Uptime11 Years 303 Days 20 Hours 57 Minutes
Detailed Stats
Overall Project Stats
Total Uptime10907 Years 110 Days 6 Hours 18 Minutes
Total Hosts
2371
Active Hosts
134
Operating System Hosts Highest Uptime
BeOS 2 1 Hours 32 Minutes
Darwin 15 89 Days 12 Hours 40 Minutes
Embedded 67 1 Years 131 Days 2 Hours 27 Minutes
FreeBSD 93 5 Years 64 Days 17 Hours 37 Minutes
Linux 466 3 Years 331 Days 14 Hours 24 Minutes
Mac OS X 1 1 Days 2 Hours 43 Minutes
mIRC 1 18 Days 18 Hours 13 Minutes
NetBSD 9 3 Years 4 Days 23 Hours 5 Minutes
OpenBSD 18 2 Years 76 Days 4 Hours 39 Minutes
OpenVMS 15 1 Years 265 Days 8 Hours 42 Minutes
OpenVMSClust 4 13 Years 337 Days 19 Hours 16 Minutes
OpenVMSCluster 1 10 Years 5 Days 1 Hours 17 Minutes
OS/2 3 250 Days 7 Hours 50 Minutes
Unknown 1 49 Days 16 Hours 41 Minutes
Windows 779 272 Years 74 Days 12 Hours 28 Minutes
Uptimes Project
Welcome to the uptimes project. This site uses open source software to track, report, and generate statistics based on user data.
We currently have collectively monitored over 10907 Years 98 Days 10 Hours 30 Minutes of uptime.
With more than 2371 hosts reporting.
Overall Statistics
Highest Uptime
NameWVNETcluster
DescriptionWVNET VMScluster with both ...
Uptime11 Years 303 Days 20 Hours 57 Minutes
Detailed Stats
Overall Project Stats
Total Uptime10907 Years 110 Days 6 Hours 18 Minutes
Total Hosts
2371
Active Hosts
134
Operating System Hosts Highest Uptime
BeOS 2 1 Hours 32 Minutes
Darwin 15 89 Days 12 Hours 40 Minutes
Embedded 67 1 Years 131 Days 2 Hours 27 Minutes
FreeBSD 93 5 Years 64 Days 17 Hours 37 Minutes
Linux 466 3 Years 331 Days 14 Hours 24 Minutes
Mac OS X 1 1 Days 2 Hours 43 Minutes
mIRC 1 18 Days 18 Hours 13 Minutes
NetBSD 9 3 Years 4 Days 23 Hours 5 Minutes
OpenBSD 18 2 Years 76 Days 4 Hours 39 Minutes
OpenVMS 15 1 Years 265 Days 8 Hours 42 Minutes
OpenVMSClust 4 13 Years 337 Days 19 Hours 16 Minutes
OpenVMSCluster 1 10 Years 5 Days 1 Hours 17 Minutes
OS/2 3 250 Days 7 Hours 50 Minutes
Unknown 1 49 Days 16 Hours 41 Minutes
Windows 779 272 Years 74 Days 12 Hours 28 Minutes
跨域名设置cookie需要用到两个文件 分别在两个域名下
比如你现在有两个域名 www.a.com www.b.com
你现在想在b下设置cookie并通过在b下面设置a的cookie
你需要b下面的文件b.php
setcookie("test", ‘value’, time()+3600, "/", ".b.com");//建立b的cookie
<script src="http://www.a.com/seta.php?id=value"></script>//[/url]传递到a中
同时在a下面建立接收文件a.php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//有些浏览器需要这句话
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com"); //在a中设置cookie
为你能睡个好觉,呵呵!
以前真没在意cookie的作用域问题,可能以前用.com域名没出过问题,今天用公司的一个cn域名测试,怎么也不能实现cookie共享,后来采用 js设置cookie,在另外一台服务器上共享cookie成功,真叫气人!翻阅了一下php的cookie 规范 ,里面有这么一段
Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: ".com", ".edu", and "va.us". Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT".
看出来了吧,真他娘的草蛋!除了"COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT"这几个后缀的域名可以设置二级作用域,其他的域名至少三级才可以,也就是说想通过设置作用域为b.cn来实现a.b.cn和c.b.cn下的 cookie共享用php是不行的,php只能实现作用域b.a.cn下的d.b.a.cn和e.b.a.cn间的cookie共享,希望大家注意,再遇到此类问题,别浪费时间拼命的测试了……
延伸阅读:http://www.ibiancheng.cn/Article/VBNetArticle/200711/67.html
比如你现在有两个域名 www.a.com www.b.com
你现在想在b下设置cookie并通过在b下面设置a的cookie
你需要b下面的文件b.php
setcookie("test", ‘value’, time()+3600, "/", ".b.com");//建立b的cookie
<script src="http://www.a.com/seta.php?id=value"></script>//[/url]传递到a中
同时在a下面建立接收文件a.php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//有些浏览器需要这句话
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com"); //在a中设置cookie
为你能睡个好觉,呵呵!
以前真没在意cookie的作用域问题,可能以前用.com域名没出过问题,今天用公司的一个cn域名测试,怎么也不能实现cookie共享,后来采用 js设置cookie,在另外一台服务器上共享cookie成功,真叫气人!翻阅了一下php的cookie 规范 ,里面有这么一段
Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: ".com", ".edu", and "va.us". Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT".
看出来了吧,真他娘的草蛋!除了"COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT"这几个后缀的域名可以设置二级作用域,其他的域名至少三级才可以,也就是说想通过设置作用域为b.cn来实现a.b.cn和c.b.cn下的 cookie共享用php是不行的,php只能实现作用域b.a.cn下的d.b.a.cn和e.b.a.cn间的cookie共享,希望大家注意,再遇到此类问题,别浪费时间拼命的测试了……
延伸阅读:http://www.ibiancheng.cn/Article/VBNetArticle/200711/67.html
if[空格 条件 空格] 注意空格!!否则shell无法解析
Shell Scripts学习之if
–b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p 当file存在并且是命令管道时返回为真 -r 当由pathname指定的文件或目录存在并且可读时返回为真 -s 当file存在文件大小大于0时返回真 -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。阅读全文
Shell Scripts学习之if
–b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p 当file存在并且是命令管道时返回为真 -r 当由pathname指定的文件或目录存在并且可读时返回为真 -s 当file存在文件大小大于0时返回真 -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。阅读全文
我们经常会遇到需要取出分字段的文件的某些特定字段,例如 /etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
cut 使用 将原串通过 符号 分割成行 cut -d 分割符号 第几行 ( f几 ) ( -f几 )
awk 将原串通过 符号 分割成行 awk -F 分割符号 "{print $几 }" 默认为空格
#!/bin/sh
udpstr=`netstat -anp | grep 7001 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$udpstr"]
then
$udpid = ` echo $udpstr | tr -d ' ' ` #去掉空格
kill "$udpid"
fi
tcpstr=`netstat -anp | grep 7002 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$tcpstr"]
then
$tcpid = ` echo $tcpstr | tr -d ' ' ` #去掉空格
kill "$tcpid"
else
exit 1
fi
cd /var/www/html/modules/sag_manager/socket
php -q /var/www/html/modules/sag_manager/socket/socket.server.php
exit $?
shell的一些语法:
表 31.4. 常用的位置参数和特殊变量
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv
[2]...
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$? 上一条命令的Exit Status
$$ 当前Shell的进程号
用户可以比较两个字符串相等或不等,也可以测试一个串是否赋了值。有关串的操作符如下:
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
1、 set命令
当没有参数的时候,列出系统中所有的自定义变量值;当有参数的时候,重置基本参数如$1、$2等。如set
`date` 将date命令的输出当作输入参数;
2、let命令
执行算术运算。功能如i=j+1,shell语法为:
let “i=$j+1”,等同于 ‘expr’。 后者只能作用于整数,如 i=`expr $i+1`; 如果使用非整数
,退出状态不为0
3、expr
expr也有模式匹配功能。
可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
$value=accounts.doc
$expr $value : '.*'
输出:12
在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。
$expr $value : '\(.*\).doc' 在圆括号前加转义符号是表示圆括号是用于提取功能的。
输出:accounts
4、shift命令
将参数表向左移动一个位置,$2变成$1,...,依次类推。
5、shell中可以嵌套命令,使用\`来保护内层命令,如`cd \`pwd\``。
6、设置IFS为换行符:IFS=’
’(还真得换行)
7、两个特殊操作
命令1 && 命令2 :只有在命令1执行成功时才执行命令2;
命令1 || 命令2 :命令1失败才执行命令2;
8、变量赋值
“”引用的字符串需要shell解析其中的``、$、\等特殊字符,而’’引用的字符串则被看作完全的
字符串,echo ‘`pwd`’将输出`pwd`;而echo “`pwd`”将输出当前目录;
变量
含义
$var
Var的值,若无定义则无值
${var}
同上,用于同$varx等类型变量区分
${var-thing}
Var有定义时,取值$var;无定义时取值thing,而$var不变
${var=thing}
Var有定义时,取值$var;无定义时取值thing,$var值设为thing
${var?message}
有定义时取值$var;否则打印message并退出shell,若message为空串,打印var:parameter not set
${var+thing}
有定义时取值thing;否则无值
9、shell内部变量
变量
含义
$#
参数个数
$*
所有参数
$@
同上,稍有区别
$-
Shell的选择项
$?
上次执行命令返回值
$$
Shell的进程标识符
$!
用&启动的最后一个命令的进程标识符
$HOME
cd命令的缺省参数
$IFS
参数分割词的字符表
$MAIL
信件文件,当其改变时给出信息you have mail
$PATH
搜索命令的目录表
$PS1
提示符串,缺省为$
$PS2
后继命令行提示符,缺省为>
有关$*和$@得归纳:
$*和$@扩展为参数,并被重复扫描;参数得空格将字符串分成多个参数;
“$*”表示shell文件的所有参数及其空格连在一起作为单个词处理;
“$@”与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。
10、 shell模式匹配规则
* 匹配任意字符串,包括空字符串
? 匹配任意单字符串
[ABC] 匹配ABC中任意字符
“…” 完全与…匹配,引号保护特殊字符,也可以写成’…’
\C 匹配C
11、 case语句
case word in
模式1) 命令;;
模式2) 命令;;
…
*) 命令[;;]
esac
只能匹配一个模式
12、 if 语句
if 命令
then
else
fi
其中换行很重要,then、else和fi仅在换行或分号之后被识别,else部分可选。可以利用case语句替代if
和test测试语句,对于test命令不是内部命令的情况下,case语句执行的要快;
13、循环
1)for i [in 文件(参数)列表]
do
循环体
done
如果i后面没有in部分,则隐含地表示对shell文件的全部参数,即$*
2) While 命令
do
循环体,只要命令返回状态为真便继续进行
done
3)until 命令
do
循环体,只要命令返回状态为假便继续执行
Done
例如:
While sleep 60
do
…
Done
每隔60秒执行一次循环中的操作;
另外,where处的控制命令可以是true、false、或者是:,冒号命令是一个shell内部命令,仅仅计
算参数值,然后返回“真”,但是它不需要调用系统中的命令,所以效率比true命令高;
4)break命令:退出循环,取自C语言。
14、点号命令:
将文件作为标准输入,从中读入一行一行的命令在当前shell中执行,不要求文件具有可执行权限;
15、 文件命令习惯,后面加上当前进程号码$$为好
16、标准输入命令read
$read greeting
Hello,world
$echo $greeting
Hello,world
17、here document 输入
<
<<’s’ 同上,不进行替换。
<<\s 同上。
awk 将原串通过 符号 分割成行 awk -F 分割符号 "{print $几 }" 默认为空格
#!/bin/sh
udpstr=`netstat -anp | grep 7001 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$udpstr"]
then
$udpid = ` echo $udpstr | tr -d ' ' ` #去掉空格
kill "$udpid"
fi
tcpstr=`netstat -anp | grep 7002 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$tcpstr"]
then
$tcpid = ` echo $tcpstr | tr -d ' ' ` #去掉空格
kill "$tcpid"
else
exit 1
fi
cd /var/www/html/modules/sag_manager/socket
php -q /var/www/html/modules/sag_manager/socket/socket.server.php
exit $?
shell的一些语法:
表 31.4. 常用的位置参数和特殊变量
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv
[2]...
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$? 上一条命令的Exit Status
$$ 当前Shell的进程号
用户可以比较两个字符串相等或不等,也可以测试一个串是否赋了值。有关串的操作符如下:
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
1、 set命令
当没有参数的时候,列出系统中所有的自定义变量值;当有参数的时候,重置基本参数如$1、$2等。如set
`date` 将date命令的输出当作输入参数;
2、let命令
执行算术运算。功能如i=j+1,shell语法为:
let “i=$j+1”,等同于 ‘expr’。 后者只能作用于整数,如 i=`expr $i+1`; 如果使用非整数
,退出状态不为0
3、expr
expr也有模式匹配功能。
可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
$value=accounts.doc
$expr $value : '.*'
输出:12
在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。
$expr $value : '\(.*\).doc' 在圆括号前加转义符号是表示圆括号是用于提取功能的。
输出:accounts
4、shift命令
将参数表向左移动一个位置,$2变成$1,...,依次类推。
5、shell中可以嵌套命令,使用\`来保护内层命令,如`cd \`pwd\``。
6、设置IFS为换行符:IFS=’
’(还真得换行)
7、两个特殊操作
命令1 && 命令2 :只有在命令1执行成功时才执行命令2;
命令1 || 命令2 :命令1失败才执行命令2;
8、变量赋值
“”引用的字符串需要shell解析其中的``、$、\等特殊字符,而’’引用的字符串则被看作完全的
字符串,echo ‘`pwd`’将输出`pwd`;而echo “`pwd`”将输出当前目录;
变量
含义
$var
Var的值,若无定义则无值
${var}
同上,用于同$varx等类型变量区分
${var-thing}
Var有定义时,取值$var;无定义时取值thing,而$var不变
${var=thing}
Var有定义时,取值$var;无定义时取值thing,$var值设为thing
${var?message}
有定义时取值$var;否则打印message并退出shell,若message为空串,打印var:parameter not set
${var+thing}
有定义时取值thing;否则无值
9、shell内部变量
变量
含义
$#
参数个数
$*
所有参数
$@
同上,稍有区别
$-
Shell的选择项
$?
上次执行命令返回值
$$
Shell的进程标识符
$!
用&启动的最后一个命令的进程标识符
$HOME
cd命令的缺省参数
$IFS
参数分割词的字符表
信件文件,当其改变时给出信息you have mail
$PATH
搜索命令的目录表
$PS1
提示符串,缺省为$
$PS2
后继命令行提示符,缺省为>
有关$*和$@得归纳:
$*和$@扩展为参数,并被重复扫描;参数得空格将字符串分成多个参数;
“$*”表示shell文件的所有参数及其空格连在一起作为单个词处理;
“$@”与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。
10、 shell模式匹配规则
* 匹配任意字符串,包括空字符串
? 匹配任意单字符串
[ABC] 匹配ABC中任意字符
“…” 完全与…匹配,引号保护特殊字符,也可以写成’…’
\C 匹配C
11、 case语句
case word in
模式1) 命令;;
模式2) 命令;;
…
*) 命令[;;]
esac
只能匹配一个模式
12、 if 语句
if 命令
then
else
fi
其中换行很重要,then、else和fi仅在换行或分号之后被识别,else部分可选。可以利用case语句替代if
和test测试语句,对于test命令不是内部命令的情况下,case语句执行的要快;
13、循环
1)for i [in 文件(参数)列表]
do
循环体
done
如果i后面没有in部分,则隐含地表示对shell文件的全部参数,即$*
2) While 命令
do
循环体,只要命令返回状态为真便继续进行
done
3)until 命令
do
循环体,只要命令返回状态为假便继续执行
Done
例如:
While sleep 60
do
…
Done
每隔60秒执行一次循环中的操作;
另外,where处的控制命令可以是true、false、或者是:,冒号命令是一个shell内部命令,仅仅计
算参数值,然后返回“真”,但是它不需要调用系统中的命令,所以效率比true命令高;
4)break命令:退出循环,取自C语言。
14、点号命令:
将文件作为标准输入,从中读入一行一行的命令在当前shell中执行,不要求文件具有可执行权限;
15、 文件命令习惯,后面加上当前进程号码$$为好
16、标准输入命令read
$read greeting
Hello,world
$echo $greeting
Hello,world
17、here document 输入
<
<<’s’ 同上,不进行替换。
<<\s 同上。
在写shell脚本的时候遇到了一个问题,对于下面这个字符串,想把后面从/local开始截取出来。
/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
请教同事,知道了一个方法,可以用cut命令,如上面我需要将从local开始的路径截取出来,就可以如下操作
path=/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
echo $path | cut -b25-
可是这样,我就得一个个的数要截掉多少个,前面一变动,又得数,呵呵。。。让我想起了初学数学是用手指头数数的时候了 :P 。这样对我现在这种情况来讲不方便,所以网上搜搜,搜到了下面这个小技巧,网上的都没有例子,而且有的说的还不准确,实验了几次才找到正确的。在这里顺便带上个例子。
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子如下:
[xiangyu@localhost ~]$ a="finding"
[xiangyu@localhost ~]$ echo ${a##*in}
g
[xiangyu@localhost ~]$ echo ${a#*in}
ding
[xiangyu@localhost ~]$ echo ${a%%in*}
f
[xiangyu@localhost ~]$ echo ${a%in*}
find
好了,为了让这个字符串截取完整些,把另外些方法也一并贴出来吧!
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
上面带例子的是第一种方法。
还有一种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
http://www.bsdlover.cn/html/25/n-3225.html
/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
请教同事,知道了一个方法,可以用cut命令,如上面我需要将从local开始的路径截取出来,就可以如下操作
path=/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
echo $path | cut -b25-
可是这样,我就得一个个的数要截掉多少个,前面一变动,又得数,呵呵。。。让我想起了初学数学是用手指头数数的时候了 :P 。这样对我现在这种情况来讲不方便,所以网上搜搜,搜到了下面这个小技巧,网上的都没有例子,而且有的说的还不准确,实验了几次才找到正确的。在这里顺便带上个例子。
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子如下:
[xiangyu@localhost ~]$ a="finding"
[xiangyu@localhost ~]$ echo ${a##*in}
g
[xiangyu@localhost ~]$ echo ${a#*in}
ding
[xiangyu@localhost ~]$ echo ${a%%in*}
f
[xiangyu@localhost ~]$ echo ${a%in*}
find
好了,为了让这个字符串截取完整些,把另外些方法也一并贴出来吧!
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
上面带例子的是第一种方法。
还有一种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
http://www.bsdlover.cn/html/25/n-3225.html
我对shell中的精髓是awk不敢苟同,不过awk对字符串的处理很是蛮强大的。
平时做unix/linux管理的朋友对cat、grep等肯定不会陌生,但我要说,awk才是shell中的精髓所在。
我们可以把awk看作一个小的c语言的实现,awk的灵活多变黎补了shell的不足。
学习awk可以从“man awk”开始,但更高级的用法,可以参考网上的更详尽的文档。nawk是awk的兄弟,算是awk的一个高级实现,能实现更多的更高级(好用)的应用。
不会用awk,别说你已经懂了shell编程。
这里附录一下awk的常识:
1、awk程序体的一般格式为:
awk '
BEGIN{} #程序开始前的预处理部分可以对一些变量进行初始化
{} #对每条记录进行操作的主体部分
END{}' <文件名> #程序的结束部分,可以对处理的结果作一些善后或总结
2、awk的程序风格完全可以按照c语言的风格书写。例如:
awk '{
if ($1 == "FIND")
regex = $2;
else
{
where = match($0, regex);
if (where)
printf("Match of %s found at %d in %s",regex,where,$0);
}
}' <文件名>
当然,awk支持一些更简洁的书写风格,例如上面的printf语句可以写成:
print "Match of", regex, "found at", where, "in", $0
3、记录和字段的表示法。
整条记录表示为$0,第n个字段表示为$n
4、常用内在变量。
NR 是记录号,即当前正在处理第几条记录。
NF 是当前记录共有多少个字段,
这样,每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)
FS 是一个说明各个字段如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.
RS 是一个说明各个记录如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.
OFS 定义各字段在输出时如何分隔开.
ORS 定义各条记录在输出时如何分隔开.
5、输出重定向。
例如:
awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list
双引号内为文件名。
6、在awk中利用管道向shell命令传递参数。
例如:
awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' BBS-list
7、awk的特有函数和其它功能请参阅awk手册。
另外,nawk比awk具有更多的功能,它能够把shell中的变量传递给nawk。
nawk格式:
Usage: nawk [-f programfile | 'program'] [-Ffieldstep] [-v var=value] [files]
例如,可以这样向nawk传递shell变量:
nawk -v dr=$HOME -v pk=`hostname` 'BEGIN{print dr pk}'
平时做unix/linux管理的朋友对cat、grep等肯定不会陌生,但我要说,awk才是shell中的精髓所在。
我们可以把awk看作一个小的c语言的实现,awk的灵活多变黎补了shell的不足。
学习awk可以从“man awk”开始,但更高级的用法,可以参考网上的更详尽的文档。nawk是awk的兄弟,算是awk的一个高级实现,能实现更多的更高级(好用)的应用。
不会用awk,别说你已经懂了shell编程。
这里附录一下awk的常识:
1、awk程序体的一般格式为:
awk '
BEGIN{} #程序开始前的预处理部分可以对一些变量进行初始化
{} #对每条记录进行操作的主体部分
END{}' <文件名> #程序的结束部分,可以对处理的结果作一些善后或总结
2、awk的程序风格完全可以按照c语言的风格书写。例如:
awk '{
if ($1 == "FIND")
regex = $2;
else
{
where = match($0, regex);
if (where)
printf("Match of %s found at %d in %s",regex,where,$0);
}
}' <文件名>
当然,awk支持一些更简洁的书写风格,例如上面的printf语句可以写成:
print "Match of", regex, "found at", where, "in", $0
3、记录和字段的表示法。
整条记录表示为$0,第n个字段表示为$n
4、常用内在变量。
NR 是记录号,即当前正在处理第几条记录。
NF 是当前记录共有多少个字段,
这样,每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)
FS 是一个说明各个字段如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.
RS 是一个说明各个记录如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.
OFS 定义各字段在输出时如何分隔开.
ORS 定义各条记录在输出时如何分隔开.
5、输出重定向。
例如:
awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list
双引号内为文件名。
6、在awk中利用管道向shell命令传递参数。
例如:
awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' BBS-list
7、awk的特有函数和其它功能请参阅awk手册。
另外,nawk比awk具有更多的功能,它能够把shell中的变量传递给nawk。
nawk格式:
Usage: nawk [-f programfile | 'program'] [-Ffieldstep] [-v var=value] [files]
例如,可以这样向nawk传递shell变量:
nawk -v dr=$HOME -v pk=`hostname` 'BEGIN{print dr pk}'
#!/bin/sh
var=$(awk '{print $1}' tmp.txt)
echo $var
注意:var= 后面没有空格;
-----------------------------------------
awk使用shell变量
1."'$var'"
#!/bin/bash
var="test"
awk 'BEGIN{print "'$var'"}'
这种写法要求变量var中不含有空格。若var中含有空格,那么就要用"'"$var"'"
2.export变量,然后用ENVIRON[“var”]
#!/bin/bash
var="test"
export var
awk 'BEGIN{print ENVIRON["var"]}'
3.使用-v选项。
#!/bin/bash
var="test"
awk -v nvar="$var" 'BEGIN{print nvar}'
shell使用awk传递出来的变量 --eval
$ cat awktest.sh
#!/bin/bash
var1="test"
var2="along"
eval $(awk 'BEGIN{print "var1=along;var2=test"}')
echo "var1:"$var1
echo "var2:"$var2
$ ./awktest.sh
var1:along
var2:test
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shuinieh/archive/2009/10/10/4649723.aspx
var=$(awk '{print $1}' tmp.txt)
echo $var
注意:var= 后面没有空格;
-----------------------------------------
awk使用shell变量
1."'$var'"
#!/bin/bash
var="test"
awk 'BEGIN{print "'$var'"}'
这种写法要求变量var中不含有空格。若var中含有空格,那么就要用"'"$var"'"
2.export变量,然后用ENVIRON[“var”]
#!/bin/bash
var="test"
export var
awk 'BEGIN{print ENVIRON["var"]}'
3.使用-v选项。
#!/bin/bash
var="test"
awk -v nvar="$var" 'BEGIN{print nvar}'
shell使用awk传递出来的变量 --eval
$ cat awktest.sh
#!/bin/bash
var1="test"
var2="along"
eval $(awk 'BEGIN{print "var1=along;var2=test"}')
echo "var1:"$var1
echo "var2:"$var2
$ ./awktest.sh
var1:along
var2:test
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shuinieh/archive/2009/10/10/4649723.aspx
武功再高,也怕菜刀
——解析武学衰落之路
遍观整个金庸武侠世界,可以说是一代不如一代,从北宋天龙那个群星闪耀,到韦爵爷宝衣匕首横行天下,这中间究竟发生了什么?
要解决这个问题,首先要回答另一个问题为什么要学武。或者说,武功有什么用?大致说来,武学拥有两个功能:第一强身健体;第二克敌制胜。有人或者会说,这种划分不正确。因为强身健体,自然就能克敌制胜,克敌制胜的同时也能强身健体。这是一而二,二而一的问题。本来也是这样,但从一代剑魔独孤求败的出现,这两个目的开始分化,并最终导致了整个武学的衰落。
大家知道,独孤求败有四柄长剑,两位传人。同为独孤传人的杨过和令狐冲,他们的剑法为什么会差别这么大。一个是“重剑无锋,大巧不工”,拿把几十斤的重剑砸过来砸过去,以浑厚的内力取胜;另一个却没有半点内力,有剑在手便纵横驰骋,没剑了便是废物一个。一个极度依赖内力,一个用一把剑就可以弥补内力的不足。我只能说杨过学的是第三把剑重剑,令狐冲学的是第四把剑木剑。
“四十岁后,不滞于物,草木竹石均可为剑自此精修,渐进於无剑胜有剑之境”这句话是什么意思。窃以为: “无剑胜有剑”说的是实事求是,具体问题具体分析。而“不滞于物,草木竹石均可为剑”是说“黑猫白猫,捉住老鼠就是好猫”。只要你能打败对方,不论你用什么,木头石头都是可以的,正所谓,“不滞于物”。而不是要求你把内力炼到飞花摘叶都可伤人的地步。这才是独孤求败的最高剑法——把你手中的东西捅进对方的身体,其他的东西你就不用管了。就这样,一代剑魔独孤求败把武学带进了魔道。
独孤求败用自己毕生的智慧揭示一个深刻无比的道理:武功再高,也怕菜刀。说到截金断玉,十年内功不如买把好刀。内力高有什么用,任我行抽再多的内力,也摸不到东方不败半点裙子。如果你能摸到,用内力劈还不如拿菜刀砍。与其花费毕生精力修习内力,不如把工夫花在琢磨怎么把菜刀砍在别人身上。
伟大的独孤求败天才地揭示了武学中的菜刀定理,伟大的令狐冲天才地实践了这一理念。在两位先哲的指导下,越来越多的大侠小侠们在追求武学的实用性上越走越远。于是韦小宝对陈近南的内功不屑一顾,拿着匕首石灰蒙汗药横行江湖。武学也一步步走向衰落。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
杀死一个人,最好的方法是什么?用手枪。——火器来了,武学走了。在中华大地武学一步步走向衰落的时候,在西方却有一种运动的兴起,奥林匹克。因为它们追求的是第一种目的强身健体,而中华武学却被那个疯子带入了魔道。
——解析武学衰落之路
遍观整个金庸武侠世界,可以说是一代不如一代,从北宋天龙那个群星闪耀,到韦爵爷宝衣匕首横行天下,这中间究竟发生了什么?
要解决这个问题,首先要回答另一个问题为什么要学武。或者说,武功有什么用?大致说来,武学拥有两个功能:第一强身健体;第二克敌制胜。有人或者会说,这种划分不正确。因为强身健体,自然就能克敌制胜,克敌制胜的同时也能强身健体。这是一而二,二而一的问题。本来也是这样,但从一代剑魔独孤求败的出现,这两个目的开始分化,并最终导致了整个武学的衰落。
大家知道,独孤求败有四柄长剑,两位传人。同为独孤传人的杨过和令狐冲,他们的剑法为什么会差别这么大。一个是“重剑无锋,大巧不工”,拿把几十斤的重剑砸过来砸过去,以浑厚的内力取胜;另一个却没有半点内力,有剑在手便纵横驰骋,没剑了便是废物一个。一个极度依赖内力,一个用一把剑就可以弥补内力的不足。我只能说杨过学的是第三把剑重剑,令狐冲学的是第四把剑木剑。
“四十岁后,不滞于物,草木竹石均可为剑自此精修,渐进於无剑胜有剑之境”这句话是什么意思。窃以为: “无剑胜有剑”说的是实事求是,具体问题具体分析。而“不滞于物,草木竹石均可为剑”是说“黑猫白猫,捉住老鼠就是好猫”。只要你能打败对方,不论你用什么,木头石头都是可以的,正所谓,“不滞于物”。而不是要求你把内力炼到飞花摘叶都可伤人的地步。这才是独孤求败的最高剑法——把你手中的东西捅进对方的身体,其他的东西你就不用管了。就这样,一代剑魔独孤求败把武学带进了魔道。
独孤求败用自己毕生的智慧揭示一个深刻无比的道理:武功再高,也怕菜刀。说到截金断玉,十年内功不如买把好刀。内力高有什么用,任我行抽再多的内力,也摸不到东方不败半点裙子。如果你能摸到,用内力劈还不如拿菜刀砍。与其花费毕生精力修习内力,不如把工夫花在琢磨怎么把菜刀砍在别人身上。
伟大的独孤求败天才地揭示了武学中的菜刀定理,伟大的令狐冲天才地实践了这一理念。在两位先哲的指导下,越来越多的大侠小侠们在追求武学的实用性上越走越远。于是韦小宝对陈近南的内功不屑一顾,拿着匕首石灰蒙汗药横行江湖。武学也一步步走向衰落。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
杀死一个人,最好的方法是什么?用手枪。——火器来了,武学走了。在中华大地武学一步步走向衰落的时候,在西方却有一种运动的兴起,奥林匹克。因为它们追求的是第一种目的强身健体,而中华武学却被那个疯子带入了魔道。
Shell是每一个UNIX系统都有的工具,他功能强大,有很多系统启动程序是用Shell来写的.
在这里,我们利用Shell程序来操作MySQL数据库.
约定: MySQL管理用户为root, 密码为secret.
# vi mysql_opt.sh
#!/bin/sh
#
# 调用方法: mysql_opt $db_name "SQL语句"
这样,就能通过调用mysql_opt函数来对MySQL数据库进行操作.
例: 要查找数据库test_db中test_table表的所有数据
如果需要导出mysql的记录到文本文件:
我知道的有如下两种方式可以在shell中访问操作mysql数据库
1. mysql -uusername -ppasswd -e "command;command"
对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须
用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号
,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。
例如,你可以用下面的命令获得用户账户列表:
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p
-e "SELECT User,Host FROM mysql.User"从外壳中执行。
可以按这种方式传递多个SQL语句,用分号隔开:
2. 如果sql语句比较多,可使用如下方式:
从查询结果中可以看出,两者的输出结果格式不一样,前一种方式保留了mysql的输出格式。
另外,与此篇文章有关的shell 重定向知识,可以查阅ABS guide第16章节“I/O重定向”和第17章节“Here Documents”
重定向示意:
自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 < use test;
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int type,only char type need single quote mark.
EOF
在这里,我们利用Shell程序来操作MySQL数据库.
约定: MySQL管理用户为root, 密码为secret.
# vi mysql_opt.sh
#!/bin/sh
#
# 调用方法: mysql_opt $db_name "SQL语句"
sql_user=root
sql_pass=secret
sql_opt="-u$sql_user -p$sql_pass -s"
mysql_opt() {
db_name=$1
sql_lan=$2
mysql $sql_opt << EOF
USE $db_name;
$sql_lan;
QUIT
EOF
}
#
# The file mysql_opt.sh ends here!
sql_pass=secret
sql_opt="-u$sql_user -p$sql_pass -s"
mysql_opt() {
db_name=$1
sql_lan=$2
mysql $sql_opt << EOF
USE $db_name;
$sql_lan;
QUIT
EOF
}
#
# The file mysql_opt.sh ends here!
这样,就能通过调用mysql_opt函数来对MySQL数据库进行操作.
例: 要查找数据库test_db中test_table表的所有数据
# vi select.sh
#!/bin/sh
#
. ./mysql_opt.sh
echo "Query..."
data=`mysql_opt test_db "SELECT * FROM test_table WHERE 1"`
echo $data
echo "Done!"
#
# The file select.sh ends here!
[root@kevin bin]# ./mysql -u root -p111111 -e "use mysql;select host,user,password from user";
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| kevin.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| kevin.com | | |
+-----------+------+-------------------------------------------+
****************************************
#!/bin/bash
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user";
exit 0;
****************************************
#!/bin/sh
#
. ./mysql_opt.sh
echo "Query..."
data=`mysql_opt test_db "SELECT * FROM test_table WHERE 1"`
echo $data
echo "Done!"
#
# The file select.sh ends here!
[root@kevin bin]# ./mysql -u root -p111111 -e "use mysql;select host,user,password from user";
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| kevin.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| kevin.com | | |
+-----------+------+-------------------------------------------+
****************************************
#!/bin/bash
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user";
exit 0;
****************************************
如果需要导出mysql的记录到文本文件:
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user into outfile '/home/mysql/aa.txt';"
mysql -u $user -p$password -e "create database test;"
mysql -u $user -p$password -e "create database test;"
我知道的有如下两种方式可以在shell中访问操作mysql数据库
1. mysql -uusername -ppasswd -e "command;command"
[root@localhost ~]# mysql -uroot -p123456 -e "select user,host from mysql.user"
+------+-----------------------+
| user | host |
+------+-----------------------+
| root | % |
| root | 127.0.0.1 |
| php | localhost |
| root | localhost |
| root | localhost.localdomain |
+------+-----------------------+
请看下面这段文字:(引自mysql参考手册)+------+-----------------------+
| user | host |
+------+-----------------------+
| root | % |
| root | 127.0.0.1 |
| php | localhost |
| root | localhost |
| root | localhost.localdomain |
+------+-----------------------+
对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须
用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号
,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。
例如,你可以用下面的命令获得用户账户列表:
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p
-e "SELECT User,Host FROM mysql.User"从外壳中执行。
可以按这种方式传递多个SQL语句,用分号隔开:
shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE
'AU%';SELECT COUNT(*) FROM City" world
'AU%';SELECT COUNT(*) FROM City" world
2. 如果sql语句比较多,可使用如下方式:
[root@localhost ~]# mysql -uroot -p123456 << EOF
> use mysql;
> select user,host from user;
> EOF
user host
root %
root 127.0.0.1
php localhost
root localhost
root localhost.localdomain
> use mysql;
> select user,host from user;
> EOF
user host
root %
root 127.0.0.1
php localhost
root localhost
root localhost.localdomain
从查询结果中可以看出,两者的输出结果格式不一样,前一种方式保留了mysql的输出格式。
另外,与此篇文章有关的shell 重定向知识,可以查阅ABS guide第16章节“I/O重定向”和第17章节“Here Documents”
重定向示意:
mysql -uroot -p123qwe <"/opt/sqlinfo.sql" >"a.txt"
自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 <
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int type,only char type need single quote mark.
EOF
cat /tmp/765469051.txt |grep 2009-12-06|awk '{print $2 " " $3}'|grep 5|wc
使用 pq magic 8.0分区出现 Error 983 报错信息的处理办法
解决方法:
1.确保登陆的用户为 Administrator,并且 Administrator 的缺省权限没有修改过。
2.执行 chkdsk /f 命令确认硬盘磁道及其文件和分区注册表没有问题
3.请关闭 norton 的自动保护功能和其他有系统保护功能的程序。
4.执行 pqmagic 8.0 进行分区工作。
另外,如果是ntfs分区格式的硬盘,请取消其对属性的改动。例如:取消压缩和设置密码。 这些都会导致操作的失败。
多数情况下只要在运行chkdsk /f 即可解决。
解决方法:
1.确保登陆的用户为 Administrator,并且 Administrator 的缺省权限没有修改过。
2.执行 chkdsk /f 命令确认硬盘磁道及其文件和分区注册表没有问题
3.请关闭 norton 的自动保护功能和其他有系统保护功能的程序。
4.执行 pqmagic 8.0 进行分区工作。
另外,如果是ntfs分区格式的硬盘,请取消其对属性的改动。例如:取消压缩和设置密码。 这些都会导致操作的失败。
多数情况下只要在运行chkdsk /f 即可解决。
sysfader:iexplore.exe-应用程序错误的解决方法
起因
每一次写blog就报这个错误……好打击积极性……还好有解决办法……
现象:
在运行iexplore.exe浏览网页的时候,有时会弹出错误提示框,一点确定就把IE关闭了。这由于设置了网页的指定颜色导致的。
错误信息提示如下:
错误:“0x029b6c3d”指令引用的“0x00000000”内存。该内存不能 为“read”。
sysfader.exe是附属于Nvidia显卡驱动程序的,用于处理桌面的淡入/淡出效果,以及气球提示条,在通常情况是不会出现在进程中并引起错误的。
解决
第一步:
注册所有的Dll,具体方法是:
点击:开始-->运行,在运行框中输入cmd,在命令提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
第二步:
请右键单击"我的电脑",点击"属性"-->"高级",在"性能"一栏中,将所有特殊效果取消。即调整为最佳性能。
(然后在转为最佳视觉看看还会不会出错……不然windows太难看了……)
起因
每一次写blog就报这个错误……好打击积极性……还好有解决办法……
现象:
在运行iexplore.exe浏览网页的时候,有时会弹出错误提示框,一点确定就把IE关闭了。这由于设置了网页的指定颜色导致的。
错误信息提示如下:
错误:“0x029b6c3d”指令引用的“0x00000000”内存。该内存不能 为“read”。
sysfader.exe是附属于Nvidia显卡驱动程序的,用于处理桌面的淡入/淡出效果,以及气球提示条,在通常情况是不会出现在进程中并引起错误的。
解决
第一步:
注册所有的Dll,具体方法是:
点击:开始-->运行,在运行框中输入cmd,在命令提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
第二步:
请右键单击"我的电脑",点击"属性"-->"高级",在"性能"一栏中,将所有特殊效果取消。即调整为最佳性能。
(然后在转为最佳视觉看看还会不会出错……不然windows太难看了……)