[实践OK]printf("填充: %10s", $str); //指定填充符为%字符串宽度为10 printf格式输出数字,位数不够前面补0,适用与输出编号
Unix/LinuxC技术 jack 2015-5-25 16:00
字符s,整数d:
printf格式输出:%[flags][width][.perc][F|N|h|l]type
用到了flags中的 0 (注意是零不是欧) ,其百科描述为:将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)
width 即表示需要输出的位数。
也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;
来自:http://blog.chinaunix.net/uid-26295753-id-2981750.html
printf格式输出:%[flags][width][.perc][F|N|h|l]type
用到了flags中的 0 (注意是零不是欧) ,其百科描述为:将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)
width 即表示需要输出的位数。
也可以用 * 代替位数,在后面的参数列表中用变量控制输出位数;
来自:http://blog.chinaunix.net/uid-26295753-id-2981750.html
在CentOS7下的gdb中run出现的Missing separate debuginfos, use: debuginfo-install
Unix/LinuxC技术 jack 2015-5-22 17:19
背景:试着在centos7里调试一下c程序,出现,Missing separate debuginfos, use: debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 glibc-2.17-78.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
问题:
Missing separate debuginfos, use: debuginfo-install glib
解决方法:
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
实践如下过程:
uname -rsp
Linux 3.10.0-229.1.2.el7.x86_64 x86_64
http://debuginfo.centos.org/7/x86_64/
(例如本机uname -r 3.10.0-229.1.2 只能选 kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
)
安装debuginfo
rpm -ivh kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm
rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
配置yum源
or this to work, you need to have the debuginfo repository defined. For CentOS 5, put the following in /etc/yum.repos.d/CentOS-Base-debuginfo.repo:
[base-debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0
enabled=0
protect=1
priority=1
利用debuginfo-install安装glibc
debuginfo-install glibc
注意事项
安装debuginfo 去http://debuginfo.centos.org寻找和你内核完全匹配的rpm包。
详细:http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html
————————————————————————————————————
自己实践如下:
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kernel-debuginfo-common-x86_64-3.################################# [100%]
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
软件包 kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64 已经安装
再安装:
debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
问题:
Missing separate debuginfos, use: debuginfo-install glib
解决方法:
在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
实践如下过程:
uname -rsp
Linux 3.10.0-229.1.2.el7.x86_64 x86_64
http://debuginfo.centos.org/7/x86_64/
(例如本机uname -r 3.10.0-229.1.2 只能选 kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
)
安装debuginfo
rpm -ivh kernel-debuginfo-3.10.0-229.1.2.el7.x86_64.rpm
rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
配置yum源
or this to work, you need to have the debuginfo repository defined. For CentOS 5, put the following in /etc/yum.repos.d/CentOS-Base-debuginfo.repo:
[base-debuginfo] name=CentOS-$releasever - DebugInfo baseurl=http://debuginfo.centos.org/$releasever/$basearch/ gpgcheck=0
enabled=0
protect=1
priority=1
利用debuginfo-install安装glibc
debuginfo-install glibc
注意事项
安装debuginfo 去http://debuginfo.centos.org寻找和你内核完全匹配的rpm包。
详细:http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html
————————————————————————————————————
自己实践如下:
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:kernel-debuginfo-common-x86_64-3.################################# [100%]
rpm -ihv kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm
警告:kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID b6792c39: NOKEY
准备中... ################################# [100%]
软件包 kernel-debuginfo-common-x86_64-3.10.0-229.1.2.el7.x86_64 已经安装
再安装:
debuginfo-install cyrus-sasl-lib-2.1.26-17.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.12.2-14.el7.x86_64 libcom_err-1.42.9-7.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libstdc++-4.8.3-9.el7.x86_64 openssl-libs-1.0.1e-42.el7.4.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64
GDB调试断点的基本用法之多个文件时设置断点,断点后指定文件名加函数,也可指定文件名加行号。
Unix/LinuxC技术 jack 2015-5-22 16:12
背景:多个文件时设置断点时,可以在断点后指定文件名加函数,也可指定文件名加行号,还可以断点后跟偏移量,摘录下其他网站的。
设置断点:
——————————————————————————————————————————————————————————
(gdb) break 断点
程序运行后,到达断点就会自动暂停运行。此时就可以查看该时刻的变量值,显示栈针,重新设置断点或者重新运行等。
断点可以通过函数名,文件内的行号来设置,也可以先指定文件名再指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。
(gdb) break 函数名
(gdb) break 行号
(gdb) break 文件名:行号
(gdb) break 文件名:函数名
(gdb) break +偏移量
(gdb) break -偏移量
(gdb) break *地址
在设置断点的时候,如果不指定断点位置,就在下一行代码上设置断点。
条件断点
(gdb) break 断点 if 条件
仅在特定条件下中断。对于已存在的断点,可使用condition为其添加条件。
(gdb) break 断点编号 条件
而删除指定编号断点的触发条件同样使用condition。
(gdb) condition 断点编号
阅读全文
设置断点:
——————————————————————————————————————————————————————————
(gdb) break 断点
程序运行后,到达断点就会自动暂停运行。此时就可以查看该时刻的变量值,显示栈针,重新设置断点或者重新运行等。
断点可以通过函数名,文件内的行号来设置,也可以先指定文件名再指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。
(gdb) break 函数名
(gdb) break 行号
(gdb) break 文件名:行号
(gdb) break 文件名:函数名
(gdb) break +偏移量
(gdb) break -偏移量
(gdb) break *地址
在设置断点的时候,如果不指定断点位置,就在下一行代码上设置断点。
条件断点
(gdb) break 断点 if 条件
仅在特定条件下中断。对于已存在的断点,可使用condition为其添加条件。
(gdb) break 断点编号 条件
而删除指定编号断点的触发条件同样使用condition。
(gdb) condition 断点编号
阅读全文
概括:不急,解决,跟随,不太过于妥协。
咱对当前我们所正在谋划的产品并不是急于求成,慢慢的打磨一项产品,
也不急于推出,So遇到难题的时候他不会要求太过于妥协,想下办法解决,
哪怕会延长首款产品的内心里定的开发进度。对这种情况来说完全可以毫不在乎。
————————————————————————————————————————
摘要 : 虽然乔布斯已经驾鹤西去快4年了,然而他的传奇性一点没有减弱,甚至还有所加强。社会各界对于乔布斯的评价都非常极端,要么认为他是一个固执的管理者,要么认为它是新式管理方式的创始人,那么到底乔布斯在管理上究竟有什么精髓呢?
虽然乔布斯已经驾鹤西去快4年了,然而他的传奇性一点没有减弱,甚至还有所加强。社会各界对于乔布斯的评价都非常极端,要么认为他是一个固执的管理者,要么认为它是新式管理方式的创始人,那么到底乔布斯在管理上究竟有什么精髓呢?
对职业生涯更加有耐心
耐心,乔布斯的最大特点,这是新传记撰写人里克·特策利告诉我们的。据其介绍,乔布斯对一项工作的并不是急于求成,总是慢慢的打磨一项产品,并不急于推出。而且他还会通过一些规章制度来限制工作人员急于求成,遇到难题的时候他不会要求员工妥协,而是想办法解决,哪怕会延长产品的开发进度。这一点总被认为乔布斯是我行我素的,但乔布斯对此也毫不在乎。
提前做好120%的准备
苹果的发布会是全世界IT行业的焦点,之所以每次其发布新产品都会如此吸引人,发布会的功劳不可或缺,因此现在很多的企业和企业家都在模仿乔布斯的发布会形式。但是你知道吗?乔布斯的发布会总是会提前几个月准备对产品的介绍,并进行详尽的排练。曾经为乔布斯服务过的人揭露说,再一次发布会前夕,乔布斯前往现场进行排练,从调整幻灯片的速度、顺序到聚光灯的颜色,他每一项都进行了调整,直到达到最佳状态。在现场如果有人出现错误,那么他会显得很暴躁,如果按照当时的安排进行,但他并不满意的话,他并不会发火,而是在台下静静的想,甚至有时候会向一些记者朋友请教,从他们的角度看如何更有吸引力。
默默的帮助员工度过难关
乔布斯是一个沉默冷酷的人,这是外界对他的主观评价,但真正的他又如何呢?他对员工的帮助都很低调。在皮克斯的时候,导演艾德·凯特摩在繁忙的工作时出现了思维死角的情况,对于新片没有了任何的灵感。乔布斯知道后主动将把自己关在工作室里的艾德·凯特摩约出来散步、聊天,并且帮助他找到当初制作影片时的初衷。再次回到苹果公司后,特别是乔布斯患了癌症后,他还利用电子表格制作了一个关于治疗心得和医生、医院推荐的文档,并将该文档发送给每个家庭中有人患同样病症的员工,还会跟他们一起讨论病情。
坚持自己的初衷
乔布斯从建立苹果公司那天起的初衷就是改变世界,这个初衷知道他去世的时候也从未改变过。不管是创立之初的苹果公司,还是之后的皮克斯公司,再到最后重返苹果公司。只要他在位的时候设计出来的产品无一不是具有划时代意义的,都是走在了科技的最前沿,颠覆了我们对其同类产品的传统定义。
乔布斯是独一无二的,他的风格和习惯也是独一无二的,如果想依靠单纯的模仿他来获取成功却并非可取的,但是以上这些管理中的精髓却值得我们运用到实践中,相信对于一名管理者来说是有百利而无一害的。
咱对当前我们所正在谋划的产品并不是急于求成,慢慢的打磨一项产品,
也不急于推出,So遇到难题的时候他不会要求太过于妥协,想下办法解决,
哪怕会延长首款产品的内心里定的开发进度。对这种情况来说完全可以毫不在乎。
————————————————————————————————————————
摘要 : 虽然乔布斯已经驾鹤西去快4年了,然而他的传奇性一点没有减弱,甚至还有所加强。社会各界对于乔布斯的评价都非常极端,要么认为他是一个固执的管理者,要么认为它是新式管理方式的创始人,那么到底乔布斯在管理上究竟有什么精髓呢?
虽然乔布斯已经驾鹤西去快4年了,然而他的传奇性一点没有减弱,甚至还有所加强。社会各界对于乔布斯的评价都非常极端,要么认为他是一个固执的管理者,要么认为它是新式管理方式的创始人,那么到底乔布斯在管理上究竟有什么精髓呢?
对职业生涯更加有耐心
耐心,乔布斯的最大特点,这是新传记撰写人里克·特策利告诉我们的。据其介绍,乔布斯对一项工作的并不是急于求成,总是慢慢的打磨一项产品,并不急于推出。而且他还会通过一些规章制度来限制工作人员急于求成,遇到难题的时候他不会要求员工妥协,而是想办法解决,哪怕会延长产品的开发进度。这一点总被认为乔布斯是我行我素的,但乔布斯对此也毫不在乎。
提前做好120%的准备
苹果的发布会是全世界IT行业的焦点,之所以每次其发布新产品都会如此吸引人,发布会的功劳不可或缺,因此现在很多的企业和企业家都在模仿乔布斯的发布会形式。但是你知道吗?乔布斯的发布会总是会提前几个月准备对产品的介绍,并进行详尽的排练。曾经为乔布斯服务过的人揭露说,再一次发布会前夕,乔布斯前往现场进行排练,从调整幻灯片的速度、顺序到聚光灯的颜色,他每一项都进行了调整,直到达到最佳状态。在现场如果有人出现错误,那么他会显得很暴躁,如果按照当时的安排进行,但他并不满意的话,他并不会发火,而是在台下静静的想,甚至有时候会向一些记者朋友请教,从他们的角度看如何更有吸引力。
默默的帮助员工度过难关
乔布斯是一个沉默冷酷的人,这是外界对他的主观评价,但真正的他又如何呢?他对员工的帮助都很低调。在皮克斯的时候,导演艾德·凯特摩在繁忙的工作时出现了思维死角的情况,对于新片没有了任何的灵感。乔布斯知道后主动将把自己关在工作室里的艾德·凯特摩约出来散步、聊天,并且帮助他找到当初制作影片时的初衷。再次回到苹果公司后,特别是乔布斯患了癌症后,他还利用电子表格制作了一个关于治疗心得和医生、医院推荐的文档,并将该文档发送给每个家庭中有人患同样病症的员工,还会跟他们一起讨论病情。
坚持自己的初衷
乔布斯从建立苹果公司那天起的初衷就是改变世界,这个初衷知道他去世的时候也从未改变过。不管是创立之初的苹果公司,还是之后的皮克斯公司,再到最后重返苹果公司。只要他在位的时候设计出来的产品无一不是具有划时代意义的,都是走在了科技的最前沿,颠覆了我们对其同类产品的传统定义。
乔布斯是独一无二的,他的风格和习惯也是独一无二的,如果想依靠单纯的模仿他来获取成功却并非可取的,但是以上这些管理中的精髓却值得我们运用到实践中,相信对于一名管理者来说是有百利而无一害的。
如何禁用TaobaoProtect进程?如果删除不掉有程序在使用怎么办,unlock来解锁。
Unix/LinuxC技术 jack 2015-5-21 13:35
每次在电脑上安装支付宝安全控件时,默认都会强行安装与运行TaobaoProtect这个进程(如图)。电脑上装了这个程序以后,在我玩游戏时它总是会令我正在运行的程序自动跳出,使游戏最小化到任务栏上。令我感觉特别烦人!特别受骚扰!可是在淘宝上购物不安装支付宝又不行。最可恶的是购物以后我将支付宝安全控件卸载了然而这个该死的TaobaoProtect进程依然存在。阿里旺旺怎么净干这磋事啊?谁有办法禁用这个该死的进程啊?
1)首先删除C:\Users\“用户名”\AppData\Roaming\TaobaoProtect下的TaobaoProtect.exe和TaobaoProtectSE.dll。然后新建一个txt文件,重命名为TaobaoProtect.exe,右键属性设置只读打勾。目前最完美的解决方案了。
2)如果删除不掉有程序在使用怎么办,unlock来解锁:
http://www.anxz.com/down/1600.html
1)首先删除C:\Users\“用户名”\AppData\Roaming\TaobaoProtect下的TaobaoProtect.exe和TaobaoProtectSE.dll。然后新建一个txt文件,重命名为TaobaoProtect.exe,右键属性设置只读打勾。目前最完美的解决方案了。
2)如果删除不掉有程序在使用怎么办,unlock来解锁:
http://www.anxz.com/down/1600.html
短网址服务,很多人都已经不再陌生,如今社交产品和搜索引擎纷纷推出短网址服务。Google推出了短网址服务goo.gl、g.co,Twitter推出了t.co,新浪微博推出了t.cn,还有腾讯微博的url.cn等等。而今百度也加入了这个行列,推出了dwz.cn短网址。
2010年8月百度曾推出过短网址服务,为go.baidu.com,此域名被网友戏称为“域名最长的短网址服务”,后来百度很快就关闭了服务。此服务再次推出,使用了新域名dwz.cn,dwz是短网址拼音的首位字母缩写。
经whois查询得知,dwz.cn域名于2005年4月注册,目前域名信息已变更至百度公司名下,据业内人士表示,域名dwz.cn系百度收购所得,具体成交金额并未透露。不过国内域名交易平台—名商网的资深经纪人表示,3字母的cn域名价格一般都是在5位数左右,记者查询名商网上的3字母域名出售价格发现tyq.cn域名一口价3,000元,而贵的mnl.cn域名也只是要价15,000元,由此可以推测百度收购dwz.cn域名价格不会太高。
目前dwz的主流后缀均已经被注册,其中dwz.com在美国人手中,dwz.com.cn则被北京德威治医药连锁有限责任公司用作企业官网。
案例:百度微信二维码分享的二维码图片,解析一个看看是这样的:
格式:QR-Code
内容:http://dwz.cn/IWvXI
解析图片的地址:
http://demo.geekso.com/qrcode/current/tools
这个工具还能识别条形码呢?
传一个条型码上去后,识别出来核对发现是正确的:
识别结果
格式:EAN-13
内容:6937526503743
所花时间:0.011550903320312
试一个微信登录的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AU12KqUlH1LwKPcBUpAJ
再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/ASyhiIev6yVowLDZrsxl
再再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AV_wDVYd9z7aTCj77rhh
每打开一次微信网页版页面的时候会随机生成一个含有唯一uid的二维码,每次刷新页面都会不一样(这个可以保证一个uid只可以绑定一个账号和密码,如果一个uid可以绑定多个账号和密码,那么很可能你的电脑会登陆别人的微信哦)
(x后面的数码值不一样,应该是某种标识,这个标识可能是和手机端通信的一个特殊标志位。)
确实返回了唯一 id,但目的是为了识别用户身份,而且实际上打开这个页面的时候浏览器已经和 Server 创建了一个长连接等待确认信息。
使用登陆后的微信扫描该二维码的时候,会将这个id和手机上的微信账号及密码绑定,并上传到微信网页版。
浏览器展示完长连接里包含的用户信息(头像等)后,会新开一个长连接等待客户端的确认操作,
从体感来看,怎么着都不可能是页面1-2秒轮询发起GET请求的,实际是通过堵塞等待的长连接,近乎实时的获得信息。 (这个应该像nginx有类似的长连接事件驱动插件)
客户端确定登录成功请求了一个Url:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmok
拉我本人的头像链接:
http://wx.qlogo.cn/mmhead/ver_1/waWFJgkZsUDRLHiaicRUtciciajfjWYs51ia9rCrWRDFoiav4vIehxImHppzaB9tpF5wUyBVork0jR7DjaKJ4QSqXB1Q/0?randid=6772
这个估计是通知谁上线了吧(信息是从服务端返回时就已经加密了的看不到真实内容,我个人估计连Cookie都是放在base64包里进行传输的:This request did not send any cookie data.
):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/statusnotify
有没有消息作个消息同步请求:filename=micromsgresp.dat
http://short.weixin.qq.com/cgi-bin/micromsg-bin/mmsnssync
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
4 200 HTTP short.weixin.qq.com /cgi-bin/micromsg-bin/mmsnssync 1,617 application/octet-stream
POST http://short.weixin.qq.com/cgi-bin/micromsg-bin/getupdateinfo //检查版本更新
200 OK (application/octet-stream)
Content-Disposition: attachment; filename=micromsgresp.dat
Content-Length: 94
Content-Type: application/octet-stream
Connection: close
data:application/octet-stream;base64,el8AAAAAAJo4D8tCCA8bQh9cbV6RU4VmAHE5OQAAqdUlTCaKMpirKWKzwjBUbwQHkLqmjIErUMDNq6VIxOKn1T9MRBAAnUIgREZ3+tx+XewRORJ1naCw09rRSrq7rw==
获取用户的头像Http地址信息:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/batchgetheadimg
抓一个看到,的确是用户头像,如这个:
http://wx.qlogo.cn/mmhead/ver_1/z6OgOwB1t6HiaQWF6n6KfEsP9O4CeEvDhUYujWrsRvSib0Fa7DYyYtu7UzzMEkNZ1A8cUh5Wlvy69PQuQ8AViaZbsaSaXnDcgYmkTgxpOheIx8/132?randid=673
获取在线情况:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/getonlineinfo
正在输入 :
http://minorshort.weixin.qq.com/cgi-bin/micromsg-bin/clientperfreport
如果长时间不登录,重新扫码登录时,会向服务端请求一次(估计是销毁掉PC客户端的标识罢):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmcancel
所以说,核心过程应该是:浏览器获得一个临时 id,通过长连接等待客户端扫描带有此 id 的二维码后,从长连接中获得客户端上报给 server 的帐号信息进行展示。 并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护。
2010年8月百度曾推出过短网址服务,为go.baidu.com,此域名被网友戏称为“域名最长的短网址服务”,后来百度很快就关闭了服务。此服务再次推出,使用了新域名dwz.cn,dwz是短网址拼音的首位字母缩写。
经whois查询得知,dwz.cn域名于2005年4月注册,目前域名信息已变更至百度公司名下,据业内人士表示,域名dwz.cn系百度收购所得,具体成交金额并未透露。不过国内域名交易平台—名商网的资深经纪人表示,3字母的cn域名价格一般都是在5位数左右,记者查询名商网上的3字母域名出售价格发现tyq.cn域名一口价3,000元,而贵的mnl.cn域名也只是要价15,000元,由此可以推测百度收购dwz.cn域名价格不会太高。
目前dwz的主流后缀均已经被注册,其中dwz.com在美国人手中,dwz.com.cn则被北京德威治医药连锁有限责任公司用作企业官网。
案例:百度微信二维码分享的二维码图片,解析一个看看是这样的:
格式:QR-Code
内容:http://dwz.cn/IWvXI
解析图片的地址:
http://demo.geekso.com/qrcode/current/tools
这个工具还能识别条形码呢?
传一个条型码上去后,识别出来核对发现是正确的:
识别结果
格式:EAN-13
内容:6937526503743
所花时间:0.011550903320312
试一个微信登录的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AU12KqUlH1LwKPcBUpAJ
再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/ASyhiIev6yVowLDZrsxl
再再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AV_wDVYd9z7aTCj77rhh
每打开一次微信网页版页面的时候会随机生成一个含有唯一uid的二维码,每次刷新页面都会不一样(这个可以保证一个uid只可以绑定一个账号和密码,如果一个uid可以绑定多个账号和密码,那么很可能你的电脑会登陆别人的微信哦)
(x后面的数码值不一样,应该是某种标识,这个标识可能是和手机端通信的一个特殊标志位。)
确实返回了唯一 id,但目的是为了识别用户身份,而且实际上打开这个页面的时候浏览器已经和 Server 创建了一个长连接等待确认信息。
使用登陆后的微信扫描该二维码的时候,会将这个id和手机上的微信账号及密码绑定,并上传到微信网页版。
浏览器展示完长连接里包含的用户信息(头像等)后,会新开一个长连接等待客户端的确认操作,
从体感来看,怎么着都不可能是页面1-2秒轮询发起GET请求的,实际是通过堵塞等待的长连接,近乎实时的获得信息。 (这个应该像nginx有类似的长连接事件驱动插件)
客户端确定登录成功请求了一个Url:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmok
拉我本人的头像链接:
http://wx.qlogo.cn/mmhead/ver_1/waWFJgkZsUDRLHiaicRUtciciajfjWYs51ia9rCrWRDFoiav4vIehxImHppzaB9tpF5wUyBVork0jR7DjaKJ4QSqXB1Q/0?randid=6772
这个估计是通知谁上线了吧(信息是从服务端返回时就已经加密了的看不到真实内容,我个人估计连Cookie都是放在base64包里进行传输的:This request did not send any cookie data.
):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/statusnotify
有没有消息作个消息同步请求:filename=micromsgresp.dat
http://short.weixin.qq.com/cgi-bin/micromsg-bin/mmsnssync
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
4 200 HTTP short.weixin.qq.com /cgi-bin/micromsg-bin/mmsnssync 1,617 application/octet-stream
POST http://short.weixin.qq.com/cgi-bin/micromsg-bin/getupdateinfo //检查版本更新
200 OK (application/octet-stream)
Content-Disposition: attachment; filename=micromsgresp.dat
Content-Length: 94
Content-Type: application/octet-stream
Connection: close
data:application/octet-stream;base64,el8AAAAAAJo4D8tCCA8bQh9cbV6RU4VmAHE5OQAAqdUlTCaKMpirKWKzwjBUbwQHkLqmjIErUMDNq6VIxOKn1T9MRBAAnUIgREZ3+tx+XewRORJ1naCw09rRSrq7rw==
获取用户的头像Http地址信息:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/batchgetheadimg
抓一个看到,的确是用户头像,如这个:
http://wx.qlogo.cn/mmhead/ver_1/z6OgOwB1t6HiaQWF6n6KfEsP9O4CeEvDhUYujWrsRvSib0Fa7DYyYtu7UzzMEkNZ1A8cUh5Wlvy69PQuQ8AViaZbsaSaXnDcgYmkTgxpOheIx8/132?randid=673
获取在线情况:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/getonlineinfo
正在输入 :
http://minorshort.weixin.qq.com/cgi-bin/micromsg-bin/clientperfreport
如果长时间不登录,重新扫码登录时,会向服务端请求一次(估计是销毁掉PC客户端的标识罢):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmcancel
所以说,核心过程应该是:浏览器获得一个临时 id,通过长连接等待客户端扫描带有此 id 的二维码后,从长连接中获得客户端上报给 server 的帐号信息进行展示。 并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护。
php有个很方便的用法是在定义函数时可以直接给参数设默认值,如:
function simue ($a=1,$b=2){
return $a+$b;
}
echo simue(); //输出3
echo simue(10); //输出12
echo simue(10,20); //输出30
但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象。
js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到这个数组中。于是我们的js版支持参数默认值的函数可以通过另外一种变通的方法实现,修改上例:
function simue (){
var a = arguments[0] ? arguments[0] : 1;
var b = arguments[1] ? arguments[1] : 2;
return a+b;
}
alert( simue() ); //输出3
alert( simue(10) ); //输出12
alert( simue(10,20) ); //输出30
摘自:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html
——————————————————————————————————————————————————————————
自己实践:
fastEchoMessage("编号"+equipNum+"温度设失败。","red");
function simue ($a=1,$b=2){
return $a+$b;
}
echo simue(); //输出3
echo simue(10); //输出12
echo simue(10,20); //输出30
但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象。
js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到这个数组中。于是我们的js版支持参数默认值的函数可以通过另外一种变通的方法实现,修改上例:
function simue (){
var a = arguments[0] ? arguments[0] : 1;
var b = arguments[1] ? arguments[1] : 2;
return a+b;
}
alert( simue() ); //输出3
alert( simue(10) ); //输出12
alert( simue(10,20) ); //输出30
摘自:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html
——————————————————————————————————————————————————————————
自己实践:
fastEchoMessage("编号"+equipNum+"温度设失败。","red");
PHP连接Mysql时候用如何使用上try catch实现捕获连接上的错误简单示例。
Php/Js/Shell/Go jack 2015-5-20 11:39
背景:对于书上一些连接mysql的例子,总是像写c语言一样,一行一行的,直接写下去,确实好看明白,但是在实际使用中,如果暴露出错误到前端页面是不太好的,这时候需要try catch来捕获这些错误,对于mysql的连接句柄的密码是否正确可以用if直接判断其返回值,再用throw new exception("Sorry,could not connect to mysql.");而对于一些非密码的网络及数据库,得用上catch,网上有一篇文章就有这样的类似介绍。
自己简单实践如下,如果密码错误则会捕获并报如下信息,而不是直接抛出:
一)来个设置温度是否成功了,并无从db查询的数据返回的:
密码错会报如下错,前端用json去解析判断并提示用户即可,自己也好查错不是:
{"opt":"setTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
二)来个有数据查询并返回的简单示例:
(1)错误结果:
{"opt":"getTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
(2)正确结果:
{"opt":"getTemperatureValue","status":-1,"curTempOne":"40.2","curTempTwo":"38.6","curTempSetOne":"35.5","curTempSetTwo":"55.4"}
原始代码参考来源:http://bbs.csdn.net/topics/240078038
自己简单实践如下,如果密码错误则会捕获并报如下信息,而不是直接抛出:
一)来个设置温度是否成功了,并无从db查询的数据返回的:
密码错会报如下错,前端用json去解析判断并提示用户即可,自己也好查错不是:
{"opt":"setTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
二)来个有数据查询并返回的简单示例:
(1)错误结果:
{"opt":"getTemperatureValue","status":-1,"errMsg":"Sorry,could not connect to mysql."}
(2)正确结果:
{"opt":"getTemperatureValue","status":-1,"curTempOne":"40.2","curTempTwo":"38.6","curTempSetOne":"35.5","curTempSetTwo":"55.4"}
原始代码参考来源:http://bbs.csdn.net/topics/240078038
这个没有加上禁用cache,容易出现修改代码chrome不去读取:
/usr/local/scripts/restartChrome.sh
再次对第一个的代码修正:
在那个pi用户下,crontab -e
10秒启动一次:
* * * * * /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 10; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 20; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 30; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 40; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 50; /usr/local/scripts/restartChrome.sh >/dev/null
简介:
Solution of how to disable Cache in Chromimum browser.
转载请注明出处。
There's an option which does not appear in chromium's manual page --- "-disk-cache-dir".
This option specifies where the disk cache should be stored.
Hence, under Linux, we can set the disk-cache-dir to /dev/null. In that way, the cache will be disabled, and all contents will be read from the Internet directly.
Here is what the modified chromium-browser-chromium.desktop looks like:
[Desktop Entry]
Name=Chromium Type=Application
Comment=Open-source version of Google Chrome web browser
Exec=chromium-browser %U --disk-cache-dir=/dev/null 2>/dev/null
TryExec=chromium-browser
Icon=chromium-browser
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
Why I need to disable file cache?
Well, on my machine, when chromium browser starts up, it keeps reading cache and take a long time to show the homepage.
So I decided to disable it.
来自:http://www.cnblogs.com/yangyingchao/archive/2011/07/30/2178385.html
/usr/local/scripts/restartChrome.sh
再次对第一个的代码修正:
在那个pi用户下,crontab -e
10秒启动一次:
* * * * * /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 10; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 20; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 30; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 40; /usr/local/scripts/restartChrome.sh >/dev/null
* * * * * sleep 50; /usr/local/scripts/restartChrome.sh >/dev/null
简介:
Solution of how to disable Cache in Chromimum browser.
转载请注明出处。
There's an option which does not appear in chromium's manual page --- "-disk-cache-dir".
This option specifies where the disk cache should be stored.
Hence, under Linux, we can set the disk-cache-dir to /dev/null. In that way, the cache will be disabled, and all contents will be read from the Internet directly.
Here is what the modified chromium-browser-chromium.desktop looks like:
[Desktop Entry]
Name=Chromium Type=Application
Comment=Open-source version of Google Chrome web browser
Exec=chromium-browser %U --disk-cache-dir=/dev/null 2>/dev/null
TryExec=chromium-browser
Icon=chromium-browser
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;
Why I need to disable file cache?
Well, on my machine, when chromium browser starts up, it keeps reading cache and take a long time to show the homepage.
So I decided to disable it.
来自:http://www.cnblogs.com/yangyingchao/archive/2011/07/30/2178385.html
背景:听哥们说了个工具ngrok,可以让本机配置的web服务在外网访问,抱着将信将疑的态度试了试,发现还真的可以。下面记录下我自己的安装步骤,另外谈下自己还有些疑问的地方。
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok
-authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding
http://59ea2510.ngrok.com
-> 127.0.0.1:8000
Forwarding
https://59ea2510.ngrok.com
-> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
From:http://blog.csdn.net/ft305977550/article/details/21398591
ngrok 2.0 发布,该版本提升了可靠性、性能,支持 TLS 隧道,支持泛子域名、反向 TCP 地址以及重新 Host 头信息等等,详细介绍请看这里。
目前 ngrok 2.0 的源码还没有开放出来,可通过下面地址访问 ngrok 1.0 的源码:
https://github.com/inconshreveable/ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
来自:http://www.oschina.net/news/61495/ngrok-2-0-released
http://blog.csdn.net/gebitan505/article/details/39497779
参考资料网站:http://blog.csdn.net/liuxiyangyang/article/details/22922265
使用ngrok将树莓派web服务映射到公网:
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok -authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding http://59ea2510.ngrok.com -> 127.0.0.1:8000
Forwarding https://59ea2510.ngrok.com -> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
来自:http://shumeipai.nxez.com/tag/ngrok
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok
-authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding
http://59ea2510.ngrok.com
-> 127.0.0.1:8000
Forwarding
https://59ea2510.ngrok.com
-> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
From:http://blog.csdn.net/ft305977550/article/details/21398591
ngrok 2.0 发布,该版本提升了可靠性、性能,支持 TLS 隧道,支持泛子域名、反向 TCP 地址以及重新 Host 头信息等等,详细介绍请看这里。
目前 ngrok 2.0 的源码还没有开放出来,可通过下面地址访问 ngrok 1.0 的源码:
https://github.com/inconshreveable/ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
来自:http://www.oschina.net/news/61495/ngrok-2-0-released
http://blog.csdn.net/gebitan505/article/details/39497779
参考资料网站:http://blog.csdn.net/liuxiyangyang/article/details/22922265
使用ngrok将树莓派web服务映射到公网:
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok -authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding http://59ea2510.ngrok.com -> 127.0.0.1:8000
Forwarding https://59ea2510.ngrok.com -> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
来自:http://shumeipai.nxez.com/tag/ngrok
phpmyadmin出现空密码登录被禁止 (参见 允许空密码)的解决办法
Php/Js/Shell/Go jack 2015-5-13 15:55
在Windows或者Linux下mysql安装后默认的密码为空,
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
1..要是你想用空密码,则将phpmyadmin下的
config.inc.php(根目录)或者config.default.php(根目录)
再则:libraries\config.default.php
(友情提示,由于版本不一样可能涉及的文件不同,基本为这三个文件)
中的$cfg['Servers'][$i]['AllowNoPassword'] = false;
改为$cfg['Servers'][$i]['AllowNoPassword'] = true;
2.要是你想设置密码不为空则将
$cfg['blowfish_secret'] = '123456'; // use here a value of your choice 你要设置的密码
又当我们又安装了mysql的管理工具
phpmyadmin后登陆时出现“空密码登陆呗禁止(参见允许密码为空)”。不能登录成功
解决办法如下:
1..要是你想用空密码,则将phpmyadmin下的
config.inc.php(根目录)或者config.default.php(根目录)
再则:libraries\config.default.php
(友情提示,由于版本不一样可能涉及的文件不同,基本为这三个文件)
中的$cfg['Servers'][$i]['AllowNoPassword'] = false;
改为$cfg['Servers'][$i]['AllowNoPassword'] = true;
2.要是你想设置密码不为空则将
$cfg['blowfish_secret'] = '123456'; // use here a value of your choice 你要设置的密码
经常给别人安装lnmp但是安装时间过长MYSQL密码容易忘记,在这里给大家介绍下如何更改密码。
1.停掉LNMP
/root/lnmp stop
2.修改MYSQL配置文件
vim /etc/my.cnf
光标到[mysqld]后面按一次“i”进入插入模式,然后按enter回车输入“skip-grant-tables”,在按ESC输入“:wq”回车即可保存。
3.启动LNMP
/root/lnmp start
4.修改密码
mysql
update user set Password = password ( '123456' ) where user = 'root' ;
exit
其中123456就是你的新密码,别忘记最后的分号要不然是不会更新好的。
MySql 5.7.19 忘记密码:
update mysql.user set authentication_string=PASSWORD('你的密码') where User='root';
flush privileges;
5.将刚才配置过的my.cnf修改回来,删除掉skip-grant-tables即可,这样安全。
6.重启LNMP。
/root/lnmp restart
来自:http://jinzhe.net/post/42.html
Windows是my.ini,Linux是my.cnf:
步骤:
不要一上来就修改密码,会报错:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
[mysqld]
skip-grant-tables
skip-networking
innodb_fast_shutdown = 1
character_set_server = utf8
先这样操作:(一定要注意修改新的密码要写对,别多了一个❗️导致不对)
-- 刷新权限表(重要!)
FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Asdfjkl;****;
Query OK, 0 rows affected (0.05 sec)
FLUSH PRIVILEGES; #-- 再次刷新权限
-- 方法2:MySQL 5.7.5 及更早版本使用 SET PASSWORD
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPassword123!');
-- 方法3:直接更新权限表(通用,但较旧的方式)
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPassword123!')
WHERE user = 'root' AND host = 'localhost';
-- 再次刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
1.停掉LNMP
/root/lnmp stop
2.修改MYSQL配置文件
vim /etc/my.cnf
光标到[mysqld]后面按一次“i”进入插入模式,然后按enter回车输入“skip-grant-tables”,在按ESC输入“:wq”回车即可保存。
3.启动LNMP
/root/lnmp start
4.修改密码
mysql
update user set Password = password ( '123456' ) where user = 'root' ;
exit
其中123456就是你的新密码,别忘记最后的分号要不然是不会更新好的。
MySql 5.7.19 忘记密码:
update mysql.user set authentication_string=PASSWORD('你的密码') where User='root';
flush privileges;
5.将刚才配置过的my.cnf修改回来,删除掉skip-grant-tables即可,这样安全。
6.重启LNMP。
/root/lnmp restart
来自:http://jinzhe.net/post/42.html
Windows是my.ini,Linux是my.cnf:
步骤:
不要一上来就修改密码,会报错:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
[mysqld]
skip-grant-tables
skip-networking
innodb_fast_shutdown = 1
character_set_server = utf8
先这样操作:(一定要注意修改新的密码要写对,别多了一个❗️导致不对)
-- 刷新权限表(重要!)
FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Asdfjkl;****;
Query OK, 0 rows affected (0.05 sec)
FLUSH PRIVILEGES; #-- 再次刷新权限
-- 方法2:MySQL 5.7.5 及更早版本使用 SET PASSWORD
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPassword123!');
-- 方法3:直接更新权限表(通用,但较旧的方式)
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPassword123!')
WHERE user = 'root' AND host = 'localhost';
-- 再次刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
背景:想开机启动树莓派的chrome浏览器。
网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart service apache2 stop
或者
/etc/init.d/mysql restart /etc/init.d/apache2 stop
因为不同的Linux发行版本,对后台服务的处理方式不大一样,如redhat使用chkconfig来管理开机程序。所以下面的方法以debian类系统为例,如何写一个简单的开机启动脚本。所以,此方法适用于raspbian pi的系统。
以svn为例:
1.制作开机启动脚本svn_serve
#!/bin/sh
### BEGIN INIT INFO
# Provides: svn_serve
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFO
case $1 in
start)
svnserve -d -r /home/pi/svn_repository
;;
stop)
killall svnserve
;;
*)
echo "Usage: $0 (start|stop)"
;;
esac
如果不加上面的注释,执行下面步骤3时,update-rc.d会报如下的警告信息
update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
2.启动关闭服务
sudo service svn_serve start
sudo service svn_serve stop
3.让svn_serve开机启动
sudo update-rc.d svn_serve defaults
4.取消svn_serve的开机自动启动
sudo update-rc.d -f svn_serve remove
来自:http://www.cnblogs.com/mahang/p/3323474.html
网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart service apache2 stop
或者
/etc/init.d/mysql restart /etc/init.d/apache2 stop
因为不同的Linux发行版本,对后台服务的处理方式不大一样,如redhat使用chkconfig来管理开机程序。所以下面的方法以debian类系统为例,如何写一个简单的开机启动脚本。所以,此方法适用于raspbian pi的系统。
以svn为例:
1.制作开机启动脚本svn_serve
#!/bin/sh
### BEGIN INIT INFO
# Provides: svn_serve
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFO
case $1 in
start)
svnserve -d -r /home/pi/svn_repository
;;
stop)
killall svnserve
;;
*)
echo "Usage: $0 (start|stop)"
;;
esac
如果不加上面的注释,执行下面步骤3时,update-rc.d会报如下的警告信息
update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
2.启动关闭服务
sudo service svn_serve start
sudo service svn_serve stop
3.让svn_serve开机启动
sudo update-rc.d svn_serve defaults
4.取消svn_serve的开机自动启动
sudo update-rc.d -f svn_serve remove
来自:http://www.cnblogs.com/mahang/p/3323474.html
背景:用树莓派修改进程数后,想重启后出现问题及解决。
apache2: bad user name ${APACHE_RUN_USER} 解决
开工后,发现有个虚拟机的apache没起来,调用apache2 -k start 后,提示如下内容:
apache2: bad user name ${APACHE_RUN_USER}
apache 启动时,是由读取 /etc/apache2/apache2.conf 读取了运行 User
而运行的user环境变量定义在/etc/apache2/envvars
而不是使用默认的登录账户启动,因此apache提供了
apache2ctl 工具来使用,调用
apache2ctl -k start
即可
______________________________________________________________________________________
pkill -9 apache
/usr/sbin/apache2 -k start
apache2: bad user name ${APACHE_RUN_USER}
/usr/sbin/apachectl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
启动成功!
vi +178 /etc/apache2/apache2.conf
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
Syntax error on line 178 of /etc/apache2/apache2.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root. There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
Action '-k start' failed.
ls -lart /var/lock/apache2
total 0
drwxr-xr-x 2 root root 40 Aug 18 07:26 .
drwxrwxrwt 3 root root 60 Aug 18 07:26 ..
useradd -m www //它将创建用户的主目录即使不存在,不创建用户主目录
vi /etc/apache2/envvars
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www
成功了:
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
root@raspberrypi:/var/lock# ls -lart
drwxr-xr-x 2 www root 40 Aug 18 07:33 apache2
阅读全文
apache2: bad user name ${APACHE_RUN_USER} 解决
开工后,发现有个虚拟机的apache没起来,调用apache2 -k start 后,提示如下内容:
apache2: bad user name ${APACHE_RUN_USER}
apache 启动时,是由读取 /etc/apache2/apache2.conf 读取了运行 User
而运行的user环境变量定义在/etc/apache2/envvars
而不是使用默认的登录账户启动,因此apache提供了
apache2ctl 工具来使用,调用
apache2ctl -k start
即可
______________________________________________________________________________________
pkill -9 apache
/usr/sbin/apache2 -k start
apache2: bad user name ${APACHE_RUN_USER}
/usr/sbin/apachectl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
启动成功!
vi +178 /etc/apache2/apache2.conf
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
Syntax error on line 178 of /etc/apache2/apache2.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root. There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
Action '-k start' failed.
ls -lart /var/lock/apache2
total 0
drwxr-xr-x 2 root root 40 Aug 18 07:26 .
drwxrwxrwt 3 root root 60 Aug 18 07:26 ..
useradd -m www //它将创建用户的主目录即使不存在,不创建用户主目录
vi /etc/apache2/envvars
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www
成功了:
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
root@raspberrypi:/var/lock# ls -lart
drwxr-xr-x 2 www root 40 Aug 18 07:33 apache2
阅读全文
Git分支模型及版本控制
Unix/LinuxC技术 jack 2015-5-12 17:31
Git分支模型及版本控制:
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
https://github.com/wmzhai/advanced-git-topic/blob/master/branching-model.md
Firebug 的日志已达上限。 176 条未显示。
Unix/LinuxC技术 jack 2015-5-12 14:34
extensions.firebug.console.logLimit 配置的。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。
Firebug's log limit has been reached. %S entries not shown. Firebug 的日志已达上限。 %S 条目没有显示。 建议: Firebug 的日志已达上限。




