C++中,a++与++a有什么区别?
Php/Js/Shell/Go jackxiang 2012-8-12 16:37
一般来说他们的区别在于混合表达式中运算符的处理顺序。
a++是先处理其他运算,然后a再自加;
而++a则是先处理a自加运算,再处理其他表达式运算;
如果只是单纯的表达式a++;或者是++a;这两个表达式的结果就没什么区别。
譬如是
计算的结果是a=2,b=1,c=2
c=++a是表达式先处理自加运算后处理赋值运算;
b=a++是表达式先处理赋值运算后处理自加运算;
http://iask.sina.com.cn/b/16210468.html
a++是先处理其他运算,然后a再自加;
而++a则是先处理a自加运算,再处理其他表达式运算;
如果只是单纯的表达式a++;或者是++a;这两个表达式的结果就没什么区别。
譬如是
计算的结果是a=2,b=1,c=2
c=++a是表达式先处理自加运算后处理赋值运算;
b=a++是表达式先处理赋值运算后处理自加运算;
http://iask.sina.com.cn/b/16210468.html
PHP反转字符串函数strrev()函数的用法
Php/Js/Shell/Go jackxiang 2012-8-12 11:14
定义和用法
strrev() 函数反转字符串。
语法
strrev(string)
参数 描述
string 必需。规定要反转的字符串。
例子
复制代码 代码如下:
输出:
!dlroW olleH
Shell 也有对应的一个函数:
strrev() 函数反转字符串。
语法
strrev(string)
参数 描述
string 必需。规定要反转的字符串。
例子
复制代码 代码如下:
输出:
!dlroW olleH
Shell 也有对应的一个函数:
linux下的有农历的日历
Unix/LinuxC技术 jackxiang 2012-8-11 11:34
cal: linux下显示日历的一般命令
使用格式usage: cal [-13smjyV] [[month] year]
[root@jacky ccal-2.5]# cal 2 2009
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
参数介绍:
-1 输出显示当前月(默认)
-3 输出显示前一个/当前/下一个月
-s 输出显示星期天作为一周的第一天(默认)
-m 输出显示星期一作为一周的第一天
-j 输出显示Julian日历(从一月1号计数为1起,每一天计数加1)
-y 显示当前日历
ccal:网上有人做的显示有中国农历的日历
地址:http://ccal.chinesebay.com/ccal/ccal-2.5.tar.gz
安装:
tar zxf ccal-2.5.tar.gz
make
make install
root@192.168.1.104:~/software/ccal-2.5# ccal -u
August 2012 壬辰年七月大17日始
Sun 日 Mon 一 Tue 二 Wed 三 Thu 四 Fri 五 Sat 六
1 十四 2 十五 3 十六 4 十七
5 十八 6 十九 7 立秋 8 廿一 9 廿二 10 廿三 11 廿四
12 廿五 13 廿六 14 廿七 15 廿八 16 廿九 17 七月 18 初二
19 初三 20 初四 21 初五 22 初六 23 处暑 24 初八 25 初九
26 初十 27 十一 28 十二 29 十三 30 十四 31 十五
中国农历是一种以月亮和太阳运动为基础的历法,又称阴阳历。每个月由月亮的运动来确定,是为阴历,所以每月初一的公历日期不定。而节气则是由太阳的位置确 定,系阳历,是故节气的公历日期基本固定。由于地球绕太阳公转的周期不可被月亮绕地球公转的周期整除,农历一段时间后就要加入闰月。虽说增加闰月的规则并 不难描述,但若没有必须的天文知识则不易懂,且计算复杂不易应用。结果就是只有极少数人知道如何计算农历,印刷的日历成了大多数人知道如春节或中秋节等农 历节日的公历日期的唯一来源。
使用格式usage: cal [-13smjyV] [[month] year]
[root@jacky ccal-2.5]# cal 2 2009
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
参数介绍:
-1 输出显示当前月(默认)
-3 输出显示前一个/当前/下一个月
-s 输出显示星期天作为一周的第一天(默认)
-m 输出显示星期一作为一周的第一天
-j 输出显示Julian日历(从一月1号计数为1起,每一天计数加1)
-y 显示当前日历
ccal:网上有人做的显示有中国农历的日历
地址:http://ccal.chinesebay.com/ccal/ccal-2.5.tar.gz
安装:
tar zxf ccal-2.5.tar.gz
make
make install
root@192.168.1.104:~/software/ccal-2.5# ccal -u
August 2012 壬辰年七月大17日始
Sun 日 Mon 一 Tue 二 Wed 三 Thu 四 Fri 五 Sat 六
1 十四 2 十五 3 十六 4 十七
5 十八 6 十九 7 立秋 8 廿一 9 廿二 10 廿三 11 廿四
12 廿五 13 廿六 14 廿七 15 廿八 16 廿九 17 七月 18 初二
19 初三 20 初四 21 初五 22 初六 23 处暑 24 初八 25 初九
26 初十 27 十一 28 十二 29 十三 30 十四 31 十五
中国农历是一种以月亮和太阳运动为基础的历法,又称阴阳历。每个月由月亮的运动来确定,是为阴历,所以每月初一的公历日期不定。而节气则是由太阳的位置确 定,系阳历,是故节气的公历日期基本固定。由于地球绕太阳公转的周期不可被月亮绕地球公转的周期整除,农历一段时间后就要加入闰月。虽说增加闰月的规则并 不难描述,但若没有必须的天文知识则不易懂,且计算复杂不易应用。结果就是只有极少数人知道如何计算农历,印刷的日历成了大多数人知道如春节或中秋节等农 历节日的公历日期的唯一来源。
[实践OK]传说中的冒泡排序法在PHP中实现及排序原理描述。
Php/Js/Shell/Go jackxiang 2012-8-10 23:42
背景:在很多PHP面试上会给一些冒泡排序、或不说是冒泡排序,而说是自己实现一个按顺序排序,其实更高效呢需要更多时间写代码及思考,往往冒泡排序是最容易考察一个人对php也好,c的指针也好的一个驾驭以能力。
经典的冒泡排序法一直是许多程序沿用的其中一种排序法,话说冒泡排序法在效率上比PHP系统函数sort更高效。本章不讨论性能,所以就不拿它来跟系统性能做对比了。
我写了一个,其原理,就是无论给一个什么样的数组,其输入这个排序函数,就给按数组下标小的值小在前面,而大的给放后面,也就是相当于一个瓶子里的气泡,轻的下沉,重的上浮,这个用语言讲出来还真不太好讲:
1)对于由a[0],a[1],a[2],a[3]....a[n-2],a[n-1],n个数组,通整个数组进行扫描(挨个扫:下标:0,1一组,1,2一组...,一组发现数组下标小的值且大的则交换),一直这样交换下去会发现:
(1)最大的那个经过一次扫描就沉到最下面了。
(2)最下面那个下一次不用再扫一次了,省一次比对。
(3)根据2,对上面操作再扫一次,则这个倒数第二重的那个气泡也就排好了。
....依次类推,直至最上面两个数是最后一次,也就全排好了。(这个就是外层的一个:i最大,i--,因为内层一次后,最大那个已经到最下面了,于是,i--也就不用再扫它了)
12,45,28,30,88,67
第一次:12,28,30,45,67,88 //左右相邻比对,小下标大数值的往后挪
第二次:12,28,30,45,67,88 //这个其实一次就排好了,有些不规则的不止一次
.....
第N-1次 也就到了0,1两个下标的比对调整下位置,也就算排完了这个冒泡,确保正确。
---------- 调试PHP ----------
冒泡排序学习之PHP版本:Array
(
[0] => 12
[1] => 45
[2] => 28
[3] => 30
[4] => 88
[5] => 67
)
HeloArray
(
[0] => 12
[1] => 28
[2] => 30
[3] => 45
[4] => 67
[5] => 88
)
Output completed (0 sec consumed) - Normal Termination
下面这个是他人写的,感觉是反向,还不是太好理解,姑且放这儿吧:
冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。阅读全文
经典的冒泡排序法一直是许多程序沿用的其中一种排序法,话说冒泡排序法在效率上比PHP系统函数sort更高效。本章不讨论性能,所以就不拿它来跟系统性能做对比了。
我写了一个,其原理,就是无论给一个什么样的数组,其输入这个排序函数,就给按数组下标小的值小在前面,而大的给放后面,也就是相当于一个瓶子里的气泡,轻的下沉,重的上浮,这个用语言讲出来还真不太好讲:
1)对于由a[0],a[1],a[2],a[3]....a[n-2],a[n-1],n个数组,通整个数组进行扫描(挨个扫:下标:0,1一组,1,2一组...,一组发现数组下标小的值且大的则交换),一直这样交换下去会发现:
(1)最大的那个经过一次扫描就沉到最下面了。
(2)最下面那个下一次不用再扫一次了,省一次比对。
(3)根据2,对上面操作再扫一次,则这个倒数第二重的那个气泡也就排好了。
....依次类推,直至最上面两个数是最后一次,也就全排好了。(这个就是外层的一个:i最大,i--,因为内层一次后,最大那个已经到最下面了,于是,i--也就不用再扫它了)
12,45,28,30,88,67
第一次:12,28,30,45,67,88 //左右相邻比对,小下标大数值的往后挪
第二次:12,28,30,45,67,88 //这个其实一次就排好了,有些不规则的不止一次
.....
第N-1次 也就到了0,1两个下标的比对调整下位置,也就算排完了这个冒泡,确保正确。
---------- 调试PHP ----------
冒泡排序学习之PHP版本:Array
(
[0] => 12
[1] => 45
[2] => 28
[3] => 30
[4] => 88
[5] => 67
)
HeloArray
(
[0] => 12
[1] => 28
[2] => 30
[3] => 45
[4] => 67
[5] => 88
)
Output completed (0 sec consumed) - Normal Termination
下面这个是他人写的,感觉是反向,还不是太好理解,姑且放这儿吧:
冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。阅读全文
贪婪模式和最少模式:
*贪婪模式:
#php ee.php
Array
(
[0] => <h2>hello</h2><h2>world</h2>
[1] => hello</h2><h2>world
)
?问号的贪婪模式:
#php ee.php
Array
(
[0] => <h2>hello</h2>
[1] => hello
)
PHP的交互模式实践如下:
本人小新手,最近在看vbird的私房菜,在看chapter11和12时有个小疑问:
在两章中分别介绍了通配符和正则表达式的用法,两者在表达上存在差别,比如通配符用(*)表示任意多个字符,正则表达式则用(.)等等,
那么请问大家,两者使用的场合是怎么区别的呢,是根据命令的不同还是正则表达式只用于字符串的搜索匹配呢。
通配符是用来通配的
正则表达式是用来匹配字符串的
在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的。
而通配符多用在文件名上,比如查找find,ls,cp,等等。
这是我个人的一些看法,不知道对不对。
感觉通配符是系统level的
正则表达式需要相关工具的支持: egrep, awk, vi, perl。。
来源:http://bbs.chinaunix.net/thread-1255137-1-1.html
务必参考:http://blog.csdn.net/whxlovehy/article/details/6052366
如把Html里的脚本给去掉,怎么匹配,正确匹配如下:
如果没有问号,这样:<script[^>].*> ,你会发现这个> 给匹配到最后一个>了,因为是贪婪匹配,所以得加上:? ,后面一个也是一样的,
这里面有一个.*? ,这个?就是最小模式,如果说没有这个?,那么?让它去匹配:
<script type="text/javascript"></script></script> ,就会把最后的一个重复的</script>匹配上,因为是最大长度模式匹配,(第二个用的贪婪匹配),为此,这个?号作用可大了。
上面表达式中,".?是非贪婪模式匹配。也就是说,只要在一个字符后面跟上限定个数的特殊字符,匹配就是非贪婪模式了。
最终Ok的匹配且成功的结果:
结果如下:
<html><head>.</head><css></css></html>
用RegexBuddy测试好后,Copy,Copy regex as,copy regex as "//" preg string: '%<script[^>].*?>.*?</script>%' 后修改为:
$str='%<script[^>].*?>.*?</script>%'; 经测试,也是Ok的,这儿这个小工具帮我们规避掉下面文章所说的问题了。但它默认还是以//,这儿特殊它给我们规避,变为:%罢了,呵呵。
------------------------------------------------来自:http://hi.baidu.com/yglht/item/632a3dabf8a1cc9a15107300 ------------------------
遇到的问题:PHP正则preg_replace()函数 Unknown modifier 'c'问题
今天想用PHP正则去掉字符串中的JavaScript脚本,于是用了preg_replace()函数尝试。
PHP代码如下:
<?php
function ReplaceScript(&$txt)
{
$str="/<script[^>]*?>.*?</script>/si":
//[^>]*?表示匹配任意次除">"以外任意字符,但尽可能少重复
//.*? 表示匹配任意次任意字符
preg_replace("$str","",$txt);
}
$txt="<script language='javascript'> var preFrameW = '160,*'; </script>";
$txt.="hello world";
echo $txt;
ReplaceScript($txt);
echo $txt;
?>
预想结果为 连续两次输出 hello world,且查看html源代码时只有第一次会输出JavaScript代码。
但结果如下:
hello world
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'c' in ~~~
hello world
除了这个问题很纠结外,打开html看其源代码,依然有两次JavaScript代码输出。说明JavaScript代码并没有被取代为空格。
后面经过几次修改函数中的$str变量,依次出现了 Warning: preg_replace() [function.preg-replace]: Unknown modifier '/' in ~~~ 等稀奇八怪的提示。JavaScript代码也依旧没有被替换
郁闷啊,于是又改回到最初的函数,找出PHP5帮助文档,查看preg_replace() 说明。修改ReplaceScript()函数为
function ReplaceScript(&$txt)
{
$str="/<script[^>]*?>.*?</script>/si":
print preg_replace("$str","",$txt);
}
结果是输出了三次JavaScript代码,看来还是$str问题。于是乎,奈着性子看了大量的例子。觉得没有错啊,一般匹配字符都是这么写,开始结尾均有个" / "。但是这个时候,其实我并不知道这个 / 有什么作用。呵呵,还是觉得没有错。只好百度之,在百度里看到了例外,有人居然不是用 " / "放在开头结尾,而是用 " ' "字符代替。莫非PHP默认这个字符 / 的用处仅仅就是帮助PHP界定匹配字符串的区间,在这个区间外就不匹配。而实际只要用另外的一个字符分别放在匹配字符串的开头和结尾也可以达到同样的目的。于是果断把$str换为 $str="' <script[^>]*?>.*?</script>' ": 编译again 。
呵呵,万能的神,Warning: preg_replace() [function.preg-replace]: Unknown modifier 'c' in ~~~这个问题终于没有了。查看生成的htm源代码,输出了三次helloworld,输出了两次JavaScript(用print函数输出的没有)。看来是识别成功了,只是$txt没有替换。于是再次修改
function ReplaceScript(&$txt)
{
$str="' <script[^>]*?>.*?</script>'si ":
print $txt=preg_replace("$str","",$txt);
}
查看结果,这次是输出了三次helloworld,只在第一次输出helloworld前输出了JavaScript,后面两次都被替换掉了。呵呵,OK,问题搞定。
总结,我犯的错误在 $str="/<script[^>]*?>.*?</script>/si": 这里面的</script>已经有一个" / "了,所以开头的 " / "就和这个 " / "形成了匹配区间,而把这个" / "之后的" script>/ " 当成了模式修正符。但实际模式修正符只有i,m,s,x,e等少数几个,而"script>/ "里面的c,r,p,> ,/ 都不是模式修正符,所以才出了Unknown modifier 'c‘ Unknown modifier '/ ’ 等问题 (没有出现 Unknown modifier 's‘ ,是因为 s 是模式匹配符啊)。
模式修正符号可以参考学习:http://hi.baidu.com/longniao/blog/item/b2af346d658ea9f3431694db.html
*贪婪模式:
#php ee.php
Array
(
[0] => <h2>hello</h2><h2>world</h2>
[1] => hello</h2><h2>world
)
?问号的贪婪模式:
#php ee.php
Array
(
[0] => <h2>hello</h2>
[1] => hello
)
PHP的交互模式实践如下:
本人小新手,最近在看vbird的私房菜,在看chapter11和12时有个小疑问:
在两章中分别介绍了通配符和正则表达式的用法,两者在表达上存在差别,比如通配符用(*)表示任意多个字符,正则表达式则用(.)等等,
那么请问大家,两者使用的场合是怎么区别的呢,是根据命令的不同还是正则表达式只用于字符串的搜索匹配呢。
通配符是用来通配的
正则表达式是用来匹配字符串的
在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的。
而通配符多用在文件名上,比如查找find,ls,cp,等等。
这是我个人的一些看法,不知道对不对。
感觉通配符是系统level的
正则表达式需要相关工具的支持: egrep, awk, vi, perl。。
来源:http://bbs.chinaunix.net/thread-1255137-1-1.html
务必参考:http://blog.csdn.net/whxlovehy/article/details/6052366
如把Html里的脚本给去掉,怎么匹配,正确匹配如下:
如果没有问号,这样:<script[^>].*> ,你会发现这个> 给匹配到最后一个>了,因为是贪婪匹配,所以得加上:? ,后面一个也是一样的,
这里面有一个.*? ,这个?就是最小模式,如果说没有这个?,那么?让它去匹配:
<script type="text/javascript"></script></script> ,就会把最后的一个重复的</script>匹配上,因为是最大长度模式匹配,(第二个用的贪婪匹配),为此,这个?号作用可大了。
上面表达式中,".?是非贪婪模式匹配。也就是说,只要在一个字符后面跟上限定个数的特殊字符,匹配就是非贪婪模式了。
最终Ok的匹配且成功的结果:
结果如下:
<html><head>.</head><css></css></html>
用RegexBuddy测试好后,Copy,Copy regex as,copy regex as "//" preg string: '%<script[^>].*?>.*?</script>%' 后修改为:
$str='%<script[^>].*?>.*?</script>%'; 经测试,也是Ok的,这儿这个小工具帮我们规避掉下面文章所说的问题了。但它默认还是以//,这儿特殊它给我们规避,变为:%罢了,呵呵。
------------------------------------------------来自:http://hi.baidu.com/yglht/item/632a3dabf8a1cc9a15107300 ------------------------
遇到的问题:PHP正则preg_replace()函数 Unknown modifier 'c'问题
今天想用PHP正则去掉字符串中的JavaScript脚本,于是用了preg_replace()函数尝试。
PHP代码如下:
<?php
function ReplaceScript(&$txt)
{
$str="/<script[^>]*?>.*?</script>/si":
//[^>]*?表示匹配任意次除">"以外任意字符,但尽可能少重复
//.*? 表示匹配任意次任意字符
preg_replace("$str","",$txt);
}
$txt="<script language='javascript'> var preFrameW = '160,*'; </script>";
$txt.="hello world";
echo $txt;
ReplaceScript($txt);
echo $txt;
?>
预想结果为 连续两次输出 hello world,且查看html源代码时只有第一次会输出JavaScript代码。
但结果如下:
hello world
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'c' in ~~~
hello world
除了这个问题很纠结外,打开html看其源代码,依然有两次JavaScript代码输出。说明JavaScript代码并没有被取代为空格。
后面经过几次修改函数中的$str变量,依次出现了 Warning: preg_replace() [function.preg-replace]: Unknown modifier '/' in ~~~ 等稀奇八怪的提示。JavaScript代码也依旧没有被替换
郁闷啊,于是又改回到最初的函数,找出PHP5帮助文档,查看preg_replace() 说明。修改ReplaceScript()函数为
function ReplaceScript(&$txt)
{
$str="/<script[^>]*?>.*?</script>/si":
print preg_replace("$str","",$txt);
}
结果是输出了三次JavaScript代码,看来还是$str问题。于是乎,奈着性子看了大量的例子。觉得没有错啊,一般匹配字符都是这么写,开始结尾均有个" / "。但是这个时候,其实我并不知道这个 / 有什么作用。呵呵,还是觉得没有错。只好百度之,在百度里看到了例外,有人居然不是用 " / "放在开头结尾,而是用 " ' "字符代替。莫非PHP默认这个字符 / 的用处仅仅就是帮助PHP界定匹配字符串的区间,在这个区间外就不匹配。而实际只要用另外的一个字符分别放在匹配字符串的开头和结尾也可以达到同样的目的。于是果断把$str换为 $str="' <script[^>]*?>.*?</script>' ": 编译again 。
呵呵,万能的神,Warning: preg_replace() [function.preg-replace]: Unknown modifier 'c' in ~~~这个问题终于没有了。查看生成的htm源代码,输出了三次helloworld,输出了两次JavaScript(用print函数输出的没有)。看来是识别成功了,只是$txt没有替换。于是再次修改
function ReplaceScript(&$txt)
{
$str="' <script[^>]*?>.*?</script>'si ":
print $txt=preg_replace("$str","",$txt);
}
查看结果,这次是输出了三次helloworld,只在第一次输出helloworld前输出了JavaScript,后面两次都被替换掉了。呵呵,OK,问题搞定。
总结,我犯的错误在 $str="/<script[^>]*?>.*?</script>/si": 这里面的</script>已经有一个" / "了,所以开头的 " / "就和这个 " / "形成了匹配区间,而把这个" / "之后的" script>/ " 当成了模式修正符。但实际模式修正符只有i,m,s,x,e等少数几个,而"script>/ "里面的c,r,p,> ,/ 都不是模式修正符,所以才出了Unknown modifier 'c‘ Unknown modifier '/ ’ 等问题 (没有出现 Unknown modifier 's‘ ,是因为 s 是模式匹配符啊)。
模式修正符号可以参考学习:http://hi.baidu.com/longniao/blog/item/b2af346d658ea9f3431694db.html
如果我们想知道某个方法被谁调用了? debug_print_backtrace可以解决
debug_print_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然.
不过这是一个PHP5的专有函数,好在pear中已经有了实现,
PHP debug_backtrace() 函数生成一个 backtrace。
该函数返回一个关联数组。下面是可能返回的元素:
名称 类型 描述
function 字符串 当前的函数名。
line 整数 当前的行号。
file 字符串 当前的文件名。
class 字符串 当前的类名
object 对象 当前对象。
type 字符串 当前的调用类型,可能的调用:
返回: "->" - 方法调用
返回: "::" - 静态方法调用
返回 nothing - 函数调用
args 数组 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。
阅读全文
debug_print_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然.
不过这是一个PHP5的专有函数,好在pear中已经有了实现,
PHP debug_backtrace() 函数生成一个 backtrace。
该函数返回一个关联数组。下面是可能返回的元素:
名称 类型 描述
function 字符串 当前的函数名。
line 整数 当前的行号。
file 字符串 当前的文件名。
class 字符串 当前的类名
object 对象 当前对象。
type 字符串 当前的调用类型,可能的调用:
返回: "->" - 方法调用
返回: "::" - 静态方法调用
返回 nothing - 函数调用
args 数组 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。
阅读全文
第一步:
首先在「开始」>「执行」 然后输入:
cleanmgr /sageset:99
特别模式「清理磁碟」工具会执行,你会发觉多了很多清理选择,选择你想要清理的档案,通常全部都可以删除,完成你的选择后再按「确定」。
第二步:
你可能奇怪点选「清理磁碟」工具并有进行清理磁碟,因为 SAGESET 指令只是给你进行「清理磁碟」设定,现在我们真正进行清理磁碟。
再去「开始」>「执行」 然后打入:
cleanmgr /sagerun:99
「清理磁碟」工具就会工作。
第三步:
其实 SAGESET 指令是设定「清理磁碟」工具,Windows 会自动记下你这些设定,下次要再清理磁碟,只要再次执行cleanmgr /sagerun:99,就会用同一个设定来清理磁碟。
如要你要更改设定,只要再执行cleanmgr /sageset:99 就可以了。
首先在「开始」>「执行」 然后输入:
cleanmgr /sageset:99
特别模式「清理磁碟」工具会执行,你会发觉多了很多清理选择,选择你想要清理的档案,通常全部都可以删除,完成你的选择后再按「确定」。
第二步:
你可能奇怪点选「清理磁碟」工具并有进行清理磁碟,因为 SAGESET 指令只是给你进行「清理磁碟」设定,现在我们真正进行清理磁碟。
再去「开始」>「执行」 然后打入:
cleanmgr /sagerun:99
「清理磁碟」工具就会工作。
第三步:
其实 SAGESET 指令是设定「清理磁碟」工具,Windows 会自动记下你这些设定,下次要再清理磁碟,只要再次执行cleanmgr /sagerun:99,就会用同一个设定来清理磁碟。
如要你要更改设定,只要再执行cleanmgr /sageset:99 就可以了。
PHP对论坛帖子的过滤之海量关键字的过滤算法
Php/Js/Shell/Go jackxiang 2012-8-8 09:40
初略:
array(将=>array(军,来=>array(要=>array(升=>array(级)))),美=>array(人=>array(上,痣),女=>array(陪,聊)))
这种方式可能会高一点,但不利于海量,下面有一个思路,可以参考下。
关键词过滤的程序:
因为关键词比较多,用preg_replace效率极差,str_replace又不能有太多的关键词,strtr虽然效率比str_replace快四倍,但用于大数组效率却和str_replace比较接近,于是自己用PHP写了一个算法,觉得效率非常很不错,遂于大家分享,待程序完善后便贴出来,先占个位置
主要是思路,
对文章按字节进行遍历,然后对每个字节开始的位置进行递归匹配关键词(当然不是直接去匹配,这里做了一个技巧,是把关键词按字节的ACCSII码做为KEY分成N维数组),这样只遍历文章一次便定位出所有关键字的位置,递归部分不会减慢程序的速度,一般第一次就会被跳出,这样程序不会随关键字的数量而变慢,理论上几十万关键字和几千个个关键字速度差不多 在本机测试了下4万个关键词,替换一篇文章竟然才用0.01秒多,而str_replace 已经到了 0.4秒了,并且关键词数量越多 str_replace 时间越长。
DownLoad:
keyword.class.php 是类
example.php 是例子 和 与 str_replace的对比
badword.src.php 是关键词的文件
也可以参看:http://hi.baidu.com/actfish/item/7fc13be2431a9018585dd837
关于关键字过滤程序中发现的多层循环的改良技巧:
for循环的嵌套是很悲观的一件事情,多层嵌套时不出错的概率基本上是0(除非你的嵌套非常简单),当你的程序里充满了return,break时,是否头疼了呢?这时候我们常常忽略了C#语言的一个重要关键字“GOTO”。大胆尝试一下吧,虽然平时不鼓励使用GOTO来进行编程的,但有时候,使用它会大大提高你的效率,多层复杂循环就是“有时候”的一个时候。
array(将=>array(军,来=>array(要=>array(升=>array(级)))),美=>array(人=>array(上,痣),女=>array(陪,聊)))
这种方式可能会高一点,但不利于海量,下面有一个思路,可以参考下。
关键词过滤的程序:
因为关键词比较多,用preg_replace效率极差,str_replace又不能有太多的关键词,strtr虽然效率比str_replace快四倍,但用于大数组效率却和str_replace比较接近,于是自己用PHP写了一个算法,觉得效率非常很不错,遂于大家分享,待程序完善后便贴出来,先占个位置
主要是思路,
对文章按字节进行遍历,然后对每个字节开始的位置进行递归匹配关键词(当然不是直接去匹配,这里做了一个技巧,是把关键词按字节的ACCSII码做为KEY分成N维数组),这样只遍历文章一次便定位出所有关键字的位置,递归部分不会减慢程序的速度,一般第一次就会被跳出,这样程序不会随关键字的数量而变慢,理论上几十万关键字和几千个个关键字速度差不多 在本机测试了下4万个关键词,替换一篇文章竟然才用0.01秒多,而str_replace 已经到了 0.4秒了,并且关键词数量越多 str_replace 时间越长。
DownLoad:
下载文件
keyword.class.php 是类
example.php 是例子 和 与 str_replace的对比
badword.src.php 是关键词的文件
也可以参看:http://hi.baidu.com/actfish/item/7fc13be2431a9018585dd837
关于关键字过滤程序中发现的多层循环的改良技巧:
for循环的嵌套是很悲观的一件事情,多层嵌套时不出错的概率基本上是0(除非你的嵌套非常简单),当你的程序里充满了return,break时,是否头疼了呢?这时候我们常常忽略了C#语言的一个重要关键字“GOTO”。大胆尝试一下吧,虽然平时不鼓励使用GOTO来进行编程的,但有时候,使用它会大大提高你的效率,多层复杂循环就是“有时候”的一个时候。
Win7网络共享本地安全策略设置主体思路
一:关闭防火墙:三个防火墙,关闭家庭网络这一个即可。 (直接访问不了)
二: (登录失败:禁用当前用户)
但是Win7一会儿就会自动打开防火墙,禁止的办法:
在系统服务中找到Windows Firewall双击,选择手动或者禁用就可以了
那你运行services.msc,然后把Windows Firewall这个服务的启动类型改为“禁用”
运行–secpol.msc–本地策略–安全选项:
解决方法:
(1)共享电脑的GUEST用户被禁用:
右击“我的电脑”选择“管理”——“本地用户和组”——“用户”这时候就可以看到一个GUEST的用户,我们右击它选择“属性”这里就会弹出一个“GUEST属性”对话框(如图2),将“账户已禁用”前面的勾去掉,然后点击“确定”即可。
(2)是因为共享的电脑本地策略里面拒绝网络上面的计算机访问它: (否则会提示:登录失败:未授予在此计算机上的请求登录类型)
解决方法:打开“控制面板”里面的“管理工具”里面有一个“本地安全策略”,我们双击打开会弹出一个“本地安全策略”的对话框(如图4),这时候我们依次点击“安全设置”——“本地策略”——“用户权限分配”这时候我们在右边对话框中就可以看到一条策略,“拒绝从网络访问这台计算机”,后面还带有一个用户“GUEST”,我们双击它弹出一个“拒绝从网络访问这台计算机属性”对话框,我们选定GUEST用户点击“删除”,然后“保存”即可。
(3)是因为来宾身份验证设置的问题:
我们打开,“本地安全策略”下面的“安全设置”——“本地策略”——“安全选项”,然后我们在右边的对话框里面可以看到一个“网络访问:本地帐户的共享和安全模型”,这时候我们双击会打开一个“网络访问:本地帐户的共享和安全模型属性”对话框,然后将其修改成“仅来宾-本地用户以来宾身份验证,其身份为来宾”然后点击“确定”即可。
阅读全文
一:关闭防火墙:三个防火墙,关闭家庭网络这一个即可。 (直接访问不了)
二: (登录失败:禁用当前用户)
但是Win7一会儿就会自动打开防火墙,禁止的办法:
在系统服务中找到Windows Firewall双击,选择手动或者禁用就可以了
那你运行services.msc,然后把Windows Firewall这个服务的启动类型改为“禁用”
运行–secpol.msc–本地策略–安全选项:
解决方法:
(1)共享电脑的GUEST用户被禁用:
右击“我的电脑”选择“管理”——“本地用户和组”——“用户”这时候就可以看到一个GUEST的用户,我们右击它选择“属性”这里就会弹出一个“GUEST属性”对话框(如图2),将“账户已禁用”前面的勾去掉,然后点击“确定”即可。
(2)是因为共享的电脑本地策略里面拒绝网络上面的计算机访问它: (否则会提示:登录失败:未授予在此计算机上的请求登录类型)
解决方法:打开“控制面板”里面的“管理工具”里面有一个“本地安全策略”,我们双击打开会弹出一个“本地安全策略”的对话框(如图4),这时候我们依次点击“安全设置”——“本地策略”——“用户权限分配”这时候我们在右边对话框中就可以看到一条策略,“拒绝从网络访问这台计算机”,后面还带有一个用户“GUEST”,我们双击它弹出一个“拒绝从网络访问这台计算机属性”对话框,我们选定GUEST用户点击“删除”,然后“保存”即可。
(3)是因为来宾身份验证设置的问题:
我们打开,“本地安全策略”下面的“安全设置”——“本地策略”——“安全选项”,然后我们在右边的对话框里面可以看到一个“网络访问:本地帐户的共享和安全模型”,这时候我们双击会打开一个“网络访问:本地帐户的共享和安全模型属性”对话框,然后将其修改成“仅来宾-本地用户以来宾身份验证,其身份为来宾”然后点击“确定”即可。
阅读全文
linux账号都储存在/etc/passwd 中。
root:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
...
每一行代表一个用户,最前面是用户名称。
要想统计用户个数(统计文件行数):
wc -l /etc/passwd
详细说明:
/etc/passwd是个文本文件,每行一条记录,格式:
account:password:UID:GID:GECOS:directory:shell (帐号: 密 码: 用户ID:组ID:一般的信息:目录:shell)
字段描述如下:
account 使用者在系统中的名字,它不能包含大写字母
password 加密的用户密码,或者星号
UID 用户 ID 号
GID 用户的主要组 ID 号
GECOS 这字段是可选的,通常为了存放信息目的而设的.通常,它包含了用户的全名
directory 用户的 $HOME 目录
shell 登录时运行的程序(如果空的,使用/bin/sh). 如果设为不存在的执行(程序),用户不能通过 login(1) 登录
基于安全考虑,密码在/etc/passwd中通常为*号,而真正的密码(加密过的)放在/etc/shadow
----------------------
root:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
...
每一行代表一个用户,最前面是用户名称。
要想统计用户个数(统计文件行数):
wc -l /etc/passwd
详细说明:
/etc/passwd是个文本文件,每行一条记录,格式:
account:password:UID:GID:GECOS:directory:shell (帐号: 密 码: 用户ID:组ID:一般的信息:目录:shell)
字段描述如下:
account 使用者在系统中的名字,它不能包含大写字母
password 加密的用户密码,或者星号
UID 用户 ID 号
GID 用户的主要组 ID 号
GECOS 这字段是可选的,通常为了存放信息目的而设的.通常,它包含了用户的全名
directory 用户的 $HOME 目录
shell 登录时运行的程序(如果空的,使用/bin/sh). 如果设为不存在的执行(程序),用户不能通过 login(1) 登录
基于安全考虑,密码在/etc/passwd中通常为*号,而真正的密码(加密过的)放在/etc/shadow
----------------------
用python爬虫抓站的一些技巧总结
Php/Js/Shell/Go jackxiang 2012-8-7 14:36
首先说下/etc/ld.so.conf:
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr 这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添pplive.c />这个搜索路径,所以编译gtk+-2.4.13就会出错了
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了
对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了 (稍后说明)
二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择 ^_^
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
再来看看ldconfig是个什么东东吧 :
它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,"+arrRd[�就在/usr/lib下的,也是不会被使用的,结果
编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。 ^_^
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以
切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。
再来说说 PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。"都是这个变量搞的鬼。
先来看一个编译过程中出现的错误 (编译gtk+-2.4.13):
checking for pkg-config... /usr/bin/pkg-config
checking for glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0... Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
configure: error: Library requirements (glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.
[root@NEWLFS gtk+-2.4.13]#
很明显,上��nfoFun��找到glib-2.4.x,并且提示应该将glib-2.0.pc加入到PKG_CONFIG_PATH下。
究竟这个pkg-config PKG_CONFIG_PATH glib-2.0.pc 是做什么的呢? let me tell you ^_^
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:
The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.
pkg-config is a function that returns meta information for the specified library.
The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.
我想看过这段说明后,你已经大概了解了它是做什么的吧。
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:
prefix=/usr
exec_prefix=$
libdir=$/lib
includedir=$/include
glib_genmar��f���r
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L$ -lglib-2.0
Cflags: -I$/glib-2.0 -I$/glib-2.0/include
明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。
解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。并且确保configure找到的是正确的
glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话 ^-^)
设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig
从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个5D584569�/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦 ^_^
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr 这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添pplive.c />这个搜索路径,所以编译gtk+-2.4.13就会出错了
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了
对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了 (稍后说明)
二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择 ^_^
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
再来看看ldconfig是个什么东东吧 :
它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,"+arrRd[�就在/usr/lib下的,也是不会被使用的,结果
编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。 ^_^
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以
切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。
再来说说 PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。"都是这个变量搞的鬼。
先来看一个编译过程中出现的错误 (编译gtk+-2.4.13):
checking for pkg-config... /usr/bin/pkg-config
checking for glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0... Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
configure: error: Library requirements (glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.
[root@NEWLFS gtk+-2.4.13]#
很明显,上��nfoFun��找到glib-2.4.x,并且提示应该将glib-2.0.pc加入到PKG_CONFIG_PATH下。
究竟这个pkg-config PKG_CONFIG_PATH glib-2.0.pc 是做什么的呢? let me tell you ^_^
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:
The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.
pkg-config is a function that returns meta information for the specified library.
The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.
我想看过这段说明后,你已经大概了解了它是做什么的吧。
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:
prefix=/usr
exec_prefix=$
libdir=$/lib
includedir=$/include
glib_genmar��f���r
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L$ -lglib-2.0
Cflags: -I$/glib-2.0 -I$/glib-2.0/include
明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。
解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。并且确保configure找到的是正确的
glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话 ^-^)
设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig
从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个5D584569�/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦 ^_^
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_lo出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_lo出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
[实践Ok]php addslashes对Post多维数组过渡处理$_POST 数组替代magic_quotes_gpc=on
Php/Js/Shell/Go jackxiang 2012-7-31 17:20
php -i|grep magic_quotes_gpc
magic_quotes_gpc => Off => Off
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
php addslashes处理$_POST $_GET数组函数:
调用:
magic_quotes_gpc => Off => Off
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
php addslashes处理$_POST $_GET数组函数:
调用:
[实践Ok]Smarty截取中文乱码问题解决办法
Php/Js/Shell/Go jackxiang 2012-7-31 09:51
背景:因smarty原自带函数截取时会出现中文乱码(我的是GBK的编码),出现怪异符号。
目的:修改Smarty的变量调节器truncate无乱码截取中文。
正题:
网站的页面在展现时,为了美观,经常需要对一些标题的长度进行控制。在整个程序中,到处都是那忙碌的字符串截取函数,而且还可能出现中文乱码。用mb_substr()可以比较好的截取中文,但是它把中文和英文都按一个字符处理,截取的效果感觉不是太好。
如果你是用Smarty做表现层的话,可以用smarty的变量调节器truncate方法来控制字符串的长度,当然利用Smarty自己的truncate截取中文时,会出现乱码。我们可以改写它的truncate调节器,让它来帮我们截取字符串,达到一劳永逸的效果。
找到你的Smarty安装目录,打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。
参数$length:为截取字符串的最大长度,默认为80字符,一个中文按2个字符计算;$etc:截取字符串时,自动附加在后面的符号。默认为 (...);$break_words 本指为是否可以打断一个单词,在中文环境下,作用不大,在改写的方法中,后面两个参数不起什么作用。
最后说下使用,{$title|truncate:30:"..."} ,很简单不是?当然这30个字符的长度还包括(...),如果你不喜欢,可以自己修改上面代码中的一行。
目的:修改Smarty的变量调节器truncate无乱码截取中文。
正题:
网站的页面在展现时,为了美观,经常需要对一些标题的长度进行控制。在整个程序中,到处都是那忙碌的字符串截取函数,而且还可能出现中文乱码。用mb_substr()可以比较好的截取中文,但是它把中文和英文都按一个字符处理,截取的效果感觉不是太好。
如果你是用Smarty做表现层的话,可以用smarty的变量调节器truncate方法来控制字符串的长度,当然利用Smarty自己的truncate截取中文时,会出现乱码。我们可以改写它的truncate调节器,让它来帮我们截取字符串,达到一劳永逸的效果。
找到你的Smarty安装目录,打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。
参数$length:为截取字符串的最大长度,默认为80字符,一个中文按2个字符计算;$etc:截取字符串时,自动附加在后面的符号。默认为 (...);$break_words 本指为是否可以打断一个单词,在中文环境下,作用不大,在改写的方法中,后面两个参数不起什么作用。
最后说下使用,{$title|truncate:30:"..."} ,很简单不是?当然这30个字符的长度还包括(...),如果你不喜欢,可以自己修改上面代码中的一行。
[实践OK]用shell实现带日期的文件名备份及文件名后缀及文件名,shell 去掉文件名后缀的简单方法及shell调试的常用参数,提取文件名。
Php/Js/Shell/Go jackxiang 2012-7-26 15:52
echo -n `date +%Y%m%d%H%M%S`| pbcopy
20220805095854
shell如下:
cat /data/www/up.jackxiang.com/bak.sh
为何要这么干的需求来源@[实践OK]CentOS下sendfile直接下载文件结合PHP的配置,curl -T 上传后下载高效实现方法。
:https://jackxiang.com/post/10785/
1206分论坛三预排座次表?打印80份?.pdf
在文件后缀前加上一个日期:
1)shell 去掉文件名后缀的简单方法:
2)shell调试的常用参数:
提取文件名:
${var##*/}
echo $rpm
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
echo ${rpm##*/}
xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
提取文件后缀:
echo ${rpm##*.}
rpm
提取文件的多个后缀:
echo ${rpm#*.}
3.6-200925115211.el7.centos.x86_64.rpm
提取文件所在目录:
echo ${rpm%/*}
/root/rpmbuild/RPMS/x86_64
右边算起的最后一个'.'字符及其右边的内容
echo ${rpm%%.*}
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1
${}总结
其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。
看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。
*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。
看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。
更多摘录:
阅读全文
20220805095854
shell如下:
cat /data/www/up.jackxiang.com/bak.sh
为何要这么干的需求来源@[实践OK]CentOS下sendfile直接下载文件结合PHP的配置,curl -T 上传后下载高效实现方法。
:https://jackxiang.com/post/10785/
1206分论坛三预排座次表?打印80份?.pdf
在文件后缀前加上一个日期:
1)shell 去掉文件名后缀的简单方法:
2)shell调试的常用参数:
提取文件名:
${var##*/}
echo $rpm
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
echo ${rpm##*/}
xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
提取文件后缀:
echo ${rpm##*.}
rpm
提取文件的多个后缀:
echo ${rpm#*.}
3.6-200925115211.el7.centos.x86_64.rpm
提取文件所在目录:
echo ${rpm%/*}
/root/rpmbuild/RPMS/x86_64
右边算起的最后一个'.'字符及其右边的内容
echo ${rpm%%.*}
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1
${}总结
其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。
看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。
*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。
看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。
更多摘录:
阅读全文
#因gunzip -f *.tar.gz =>*.tar 会删除*.tar.gz所以不能重新再去gunzip的标志位。
gunzip -f
gunzip -f -c
-c --stdout write on standard output, keep original files unchanged
-f --force force overwrite of output file and compress links
原来的文件则没有了:
# gunzip test.txt.gz
它会将文件解压缩为文件 test.txt,原来的文件则没有了,为了保留原有的文件,我们可以加上 -c 选项并利用 linux 的重定向
阅读全文
gunzip -f
gunzip -f -c
-c --stdout write on standard output, keep original files unchanged
-f --force force overwrite of output file and compress links
原来的文件则没有了:
# gunzip test.txt.gz
它会将文件解压缩为文件 test.txt,原来的文件则没有了,为了保留原有的文件,我们可以加上 -c 选项并利用 linux 的重定向
阅读全文