背景:升级了一下mysql到最新版本 5.7.9,博客数据没有动,后导出数据备份时出现Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'',加上 --set-gtid-purged=off出现新错误的问题,总之一堆问题,最后还是终于导出了,特别是升级后一定要重启,啥玩意,艹。
实践如下,出现问题:
[root@iZ25dcp92ckZ backup]# mysqldump -uroot -p -ujustwinit_mysql_database > -ujustwinit_mysql_database.cn.sql
Enter password:
mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Table 'performance_schema.session_variables' doesn't exist (1146)




用mysqldump备份时出现下面的出错信息:
mysqldump:Couldn't execute  ‘SELECT @@GTID_MODE':Unknown system variable 'GTID_MODE' (1193)
造成此错误的原因是因为5.6引入了Global Transaction Identifiers (GTIDs) 。GTIDs可以让主从结构复制的跟踪和比较变得简单。mysqldump会试图查询这个系统变量,但这个变量在5.6之前的版本中不存在,所以产生错误。解决的方法很简单,在mysqldump后加上–set-gtid-purged=OFF命令
如:
mysqldump -h(主机名或ip) -u(用户名) -p(密码) 数据库名 --set-gtid-purged=off >d:/db.sql

From:http://www.rjkfw.com/s_3139.html
___________________________________________________________________

[root@iZ25dcp92ckZ ~]#  mysqldump  --set-gtid-purged=off -uroot -p -ujustwinit_mysql_database > -ujustwinit_mysql_database.cn.sql
Enter password:
mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'ndbinfo\_version'': Table 'performance_schema.session_variables' doesn't exist (1146)
解决办法:
[root@iZ25dcp92ckZ ~]# mysql_upgrade -u root -p --force
Enter password:
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
。。。。。。
sys.sys_config                                     OK
temperature.temperature                            OK
temperature.tempsetting                            OK
Upgrade process completed successfully.
Checking if update is needed.

再次导出:
[root@iZ25dcp92ckZ ~]#  mysqldump  --set-gtid-purged=off -uroot -p -ujustwinit_mysql_database > -ujustwinit_mysql_database.cn.sql
Enter password:
mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'ndbinfo\_version'': Native table 'performance_schema'.'session_variables' has the wrong structure (1682)

忘记重启了,于是重启下,再次导出,出现新的错:
[root@iZ25dcp92ckZ bin]#  mysqldump  --set-gtid-purged=off -u-ujustwinit_mysql_database_mysql_database -p -ujustwinit_mysql_database_mysql > -ujustwinit_mysql_database.cn.sql
Enter password:
mysqldump: Got error: 1044: Access denied for user '-ujustwinit_mysql_database_mysql'@'localhost' to database '-ujustwinit_mysql_database_mysql' when using LOCK TABLES

用mysqldump备份数据库时出现when using LOCK TABLES_:
--skip-lock-tables
普通用户备份mysql 数据库报错

mysql 无lock tables权限 报Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES

主要原因是该用户无lock tables 该权限,处理办法:

1. 给该普通用户赋予lock tables 权限,建议是删除该用户,重新用mysql命令建

2. 加上--skip-lock-tables即可

mysqldump -udbuser -p dbname --skip-lock-tables > dbname.sql


3. 使用root 备份


MySQL无lock tables权限 报Access denied for user when using LOCK TABLES:
http://www.linuxidc.com/Linux/2012-01/51802.htm

mysqldump  --set-gtid-purged=off --skip-lock-tables -u-ujustwinit_mysql_database_mysql_database -p -ujustwinit_mysql_database_mysql > -ujustwinit_mysql_database.cn.sql

成功了:
[root@iZ25dcp92ckZ bin]# mysqldump  --set-gtid-purged=off --skip-lock-tables -uroot -p justwinit_mysql_database  > jackxiang.com.database.bak.perfected.2015.12.29.sql
Enter password:



来自:http://www.amznz.com/error-native-table-performance_schema/


背景:有时有做一些H5的websocket做模仿linux下的tail -f,形成一个实时日志查看工具时,会对写入事件前的文件大小和写入事件后的文件大小作一个计算,而在实际调试时发现这个PHP的filessize函数是有缓存的,这个链接的兄弟在问怎么破?(http://segmentfault.com/q/1010000003843245),如下文所示 。

定义和用法
clearstatcache()函数的作用是:清除文件状态缓存。
PHP的缓存数据对更快更好的运行函数是非常有利的。如果一个文件在脚本中测试了多次,你也许会禁止对正确的结果进行缓存。为了实现这点,你可以使用clearstatcache()函数。
语法
clearstatcache()
提示和注意
提示:执行缓存的函数:
stat()
lstat()
file_exists()
is_writable()
is_readable()
is_executable()
is_file()
is_dir()
is_link()
filectime()
fileatime()
filemtime()
fileinode()
filegroup()
fileowner()
filesize()
filetype()
fileperms()

案例

上述代码将输出下面的结果:
事件前文件大小:59635
事件后文件大小:59639

来自:http://www.chinaz.com/program/2010/0302/107501.shtml
背景:想测试android的pad浏览器屏幕的显示情况,而测试机没有网络,如果用wifi热点作fiddler2的代理也成,可是不是人人都有代理,最好是修改一下host文件。
最近在做的项目要通过域名调用内网的服务器,因为android模拟器host文件无法修改,导致无法通过域名使用http方法调用内网服务,因此从网上大量转载的一种方法,这种方法:

    1. 通过emulator -avd avdName -partition-size 128 启动模拟器

    2.通过adb root 和 adb remount 命令获得root权限。

    3.通过 adb pull /system/etc/hosts 命令将hosts文件转移到PC上,手动修改hosts,并且通过adb push将hosts文件再推送回去。

     这个问题是因为linux中的换行符和window中的回车换行不一致引起的,网上大部分方法是让利用ultraedit等编辑器直接修改,但是我复制到编辑器上依然无法修改。上贴中的malbers回复说,利用echo命令,可以直接通过命令将需要修改的内容添加到hosts文件中,试了一下,果然可行。

     首先键入 adb shell 命令(新版本的sdk adb命令被转移到了platform-tools目录中),然后echo 192.168.0.246 www.aaa.com>>/system/etc/hosts,敲入上面这条命令后,再使用 cat /system/etc/hosts查看hosts文件修改情况,发现hosts果然已经被修改,但是问题是依然没有换行,貌似只有换行了以后才能被识别,

因此再次利用echo命令加入了换行符,问题解决。具体操作如下:

     前面几个步骤不变,但是不需要将hosts文件pull到电脑上,如果你已经修改了但是无效,可以先pull出来,还原到原始状态,不要有任何换行,并替换掉

模拟器上已经修改的hosts,使它回复到原始状态。即只有127.0.0.1 localhost。

    然后进入adb shell , 使用 echo -e \\n >> /system/etc/hosts 为hosts文件加入换行符。

    再次使用 echo 192.168.0.246 www.aaa.com >> /system/etc/hosts 。

    这样就完整解决了换行问题。再次在浏览器中敲入www.aaa.com,熟悉的页面也出现了。
转自:http://blog.csdn.net/landen11/article/details/7022376


首先请确认你修改的是文件是 /system/etc/hosts ,如果不是,那你即使改了也无效。

其次,如果你是在windows下修改hosts文件,那就必须注意换行符的问题,以及hosts文件格式的问题:

android下的hosts文件必须像以下这样写:

IP 域名

注意:

在IP和域名之间保留一个空格 每行只能有一个域名,不能一个IP后面跟多个域名。
android上的换行符(也就是回车)是LF,也就是\n,而windows上的换行符是CR LF,也就是\r\n
所以在windows下用记事本之类的软件编辑了hosts文件,放到手机上肯定认不出来的!解决的办法就是用NotePad++之类的文本编辑器,再使用“查找替换”,将“\r\n”替换成“\n”(注意要在notepad++里把查找模式设置为扩展模式,才能识别转义字符\r\n)
如果是在windows下编辑hosts,要保证最后一行结尾也是“\n”


终于搞掂!!!

转自:https://plus.google.com/105237252862440264277/posts/CF9F42e4axj
背景:听说要写rocksdb的PHP扩展,推荐到PHP官方去,一看发现这个db很牛,支持key-value的查找,Facebook开源闪存数据库RocksDB。

关于LevelDB的资料网上还是比较丰富的,如果你尚未听说过LevelDB,那请稍微预习一下,因为RocksDB实际上是在LevelDB之上做的改进。本文主要侧重在架构上对RocksDB对LevelDB改进的地方做个简单介绍并添加一些个人的看法,更详细的信息读者可参考其官网:http://rocksdb.org/

RocksDB是在LevelDB原来的代码上进行改进完善的,所以在用法上与LevelDB非常的相似。如下,就是简单的把原来Leveldb信息替换为Rocksdb,从继承的角度看,Rocksdb就像是Leveldb的后辈。

RocksDB:


#include "rocksdb/db.h"

rocksdb::DB* db;
rocksdb::Options options;
options.create_if_missing = true;

rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db);

assert(status.ok());

status = db->Get(rocksdb::ReadOptions(), key1, &value);
status = db->Put(rocksdb::WriteOptions(), key2, value);
status = db->Delete(rocksdb::WriteOptions(), key1);

delete db;
#include "rocksdb/db.h"

rocksdb::DB* db;
rocksdb::Options options;
options.create_if_missing = true;

rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db);

assert(status.ok());

status = db->Get(rocksdb::ReadOptions(), key1, &value);
status = db->Put(rocksdb::WriteOptions(), key2, value);
status = db->Delete(rocksdb::WriteOptions(), key1);

delete db;

LevelDB:


#include "leveldb/db.h"

leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;

leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);

assert(status.ok());

status = db->Get(leveldb::ReadOptions(), key1, &value);
status = db->Put(leveldb::WriteOptions(), key2, value);
status = db->Delete(leveldb::WriteOptions(), key1);

delete db;

#include "leveldb/db.h"

leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;

leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);

assert(status.ok());

status = db->Get(leveldb::ReadOptions(), key1, &value);
status = db->Put(leveldb::WriteOptions(), key2, value);
status = db->Delete(leveldb::WriteOptions(), key1);

delete db;


RocksDB虽然在代码层面上是在LevelDB原有的代码上进行开发的,但却借鉴了Apache HBase的一些好的idea。在云计算横行的年代,开口不离Hadoop,RocksDB也开始支持HDFS,允许从HDFS读取数据。而LevelDB则是一个比较单一的存储引擎,有点我就是我,除了我依然只有我的感觉。也是因为LevelDB的单一性,在做具体的应用的时候一般需要对其作进一步扩展。

RocksDB支持一次获取多个K-V,还支持Key范围查找。LevelDB只能获取单个Key

RocksDB除了简单的Put、Delete操作,还提供了一个Merge操作,说是为了对多个Put操作进行合并。站在引擎实现者的角度来看,相比其带来的价值,其实现的成本要昂贵很多。个人觉得有时过于追求完美不见得是好事,据笔者所测(包括测试自己编写的引擎),性能的瓶颈其实主要在合并上,多一次少一次Put对性能的影响并无大碍。

RocksDB提供一些方便的工具,这些工具包含解析sst文件中的K-V记录、解析MANIFEST文件的内容等。有了这些工具,就不用再像使用LevelDB那样,只能在程序中才能知道sst文件K-V的具体信息了。

RocksDB支持多线程合并,而LevelDB是单线程合并的。LSM型的数据结构,最大的性能问题就出现在其合并的时间损耗上,在多CPU的环境下,多线程合并那是LevelDB所无法比拟的。不过据其官网上的介绍,似乎多线程合并还只是针对那些与下一层没有Key重叠的文件,只是简单的rename而已,至于在真正数据上的合并方面是否也有用到多线程,就只能看代码了。

RocksDB增加了合并时过滤器,对一些不再符合条件的K-V进行丢弃,如根据K-V的有效期进行过滤。

压缩方面RocksDB可采用多种压缩算法,除了LevelDB用的snappy,还有zlib、bzip2。LevelDB里面按数据的压缩率(压缩后低于75%)判断是否对数据进行压缩存储,而RocksDB典型的做法是Level 0-2不压缩,最后一层使用zlib,而其它各层采用snappy。

在故障方面,RocksDB支持增量备份和全量备份,允许将已删除的数据备份到指定的目录,供后续恢复。

RocksDB支持在单个进程中启用多个实例,而LevelDB只允许单个实例。

RocksDB支持管道式的Memtable,也就说允许根据需要开辟多个Memtable,以解决Put与Compact速度差异的性能瓶颈问题。在LevelDB里面因为只有一个Memtable,如果Memtable满了却还来不及持久化,这个时候LevelDB将会减缓Put操作,导致整体性能下降。笔者目前写的引擎在这方面竟然跟RocksDB不谋而合,这里偷偷乐一下,呵呵。

看完上面这些介绍,相比LevelDB是不是觉得RocksDB彪悍的不可思议,很多该有的地方都有,该想的都想到了,简直不像在做引擎库,更像是在做产品。不过虽然RocksDB在性能上提升了不少,但在文件存储格式上跟LevelDB还是没什么变化的, 稍微有点更新的只是RocksDB对原来LevelDB中sst文件预留下来的MetaBlock进行了具体利用。

个人觉得RocksDB尚未解决的地方:

依然是完全依赖于MANIFEST,一当该文件丢失,则整个数据库基本废掉。
合并上依然是整个文件载入,一些没用的Value将被多次的读入内存,如果这些Value很大的话,那没必要的内存占用将是一个可观的成本。
关于这两个问题,尤其是后面那个问题,笔者已有相应的解决方案,至于结果如何只等日后实现之后再作解说了。

来自:http://tech.uc.cn/?p=2592
背景:Nginx的断点上传这块涉及到一个创建散列目录的的情况,这块得从0-9,a-z,A-Z, 搜索了一下网上,用awk比较吃香。


________________________________________________________________________________



参考:http://blog.csdn.net/ghosc/article/details/5721178

awk如何输出A-Z ,网上高手很多:
不用麻烦awk了

这样就行了
那个echo {A..Z}够牛逼的~~





http://bbs.chinaunix.net/thread-1815653-1-1.html
背景:现在H5做上传呢,想有好的用户体验是直接提交ajax上传文件,其实用form跳转也是可以的,不是说用户体验不好嘛,其实我觉得也没啥不好的,只要提示明确就好,非要在一个页面上做所有的操作,这是产品挖空心思想的问题,为什么不能呢,这儿有一个兄弟告诉我们说能的。其主要是设置http的header头符合一些h5的跨域规范就成(像Flash有一个xml文件作验证的,Flash不行了,咱还是H5吧。),这块啥语言都能设置头,包括nginx的conf文件里也能设置(http://www.anrip.com/post/1501 ,http://blog.csdn.net/oyzl68/article/details/18741057(讲到两次请求,这更像是flash的那套作法了,这块服务端配置上可能会不大一样。),html5rocks.com 上面的头返回可参考。),先转下,尽管没有通知作者。

选择了http头来实现跨越的原理概述:
ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。
即使使用jquery的jsonp方法,type设为POST,也会自动变为GET。
官方问题说明:
“script”: Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, “_=[TIMESTAMP]“, to the URL unless the cache option is set to true.Note: This will turn POSTs into GETs for remote-domain requests.
如果跨域使用POST方式,可以使用创建一个隐藏的iframe来实现,与ajax上传图片原理一样,但这样会比较麻烦。

——————————————————————————————————————————————————————————————
ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。

即使使用jquery的jsonp方法,type设为POST,也会自动变为GET。

官方问题说明:
“script”: Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, “_=[TIMESTAMP]“, to the URL unless the cache option is set to true.Note: This will turn POSTs into GETs for remote-domain requests.

如果跨域使用POST方式,可以使用创建一个隐藏的iframe来实现,与ajax上传图片原理一样,但这样会比较麻烦。

因此,通过设置Access-Control-Allow-Origin来实现跨域访问比较简单。

例如:客户端的域名是www.client.com,而请求的域名是www.server.com
如果直接使用ajax访问,会有以下错误
XMLHttpRequest cannot load http://www.server.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://www.client.com' is therefore not allowed access.

在被请求的Response header中加入

就可以实现ajax POST跨域访问了。

代码如下:
client.html 路径:http://www.client.com/client.html

server.php 路径:http://www.server.com/server.php

Access-Control-Allow-Origin:* 表示允许任何域名跨域访问
如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名
例如:header('Access-Control-Allow-Origin:http://www.client.com');

如果需要设置多个域名允许访问,这里需要用php处理一下
例如允许 www.client.com 与 www.client2.com 可以跨域访问
server.php 修改为

源码下载地址:http://download.csdn.net/detail/fdipzone/8779657
该文转自:http://blog.csdn.net/fdipzone/article/details/46390573
/opt   主机额外安装软件所摆放的目录。默认是空的。 一般安装软件的时候,可以自己指定安装到这个目录下,便于查找和管理:
[root@localhost opt]# ls /opt
20120207         mysql-5.6.11  

/根空间太小大了,直接挪动到其它盘符(data目录大: 171G   39G  123G  24% /data),做个软链接:
/opt -> /data/backdata/opt
MegaCli-1.01.39-0.i386.rpm
[root@localhost ~]# rpm -qa|grep MegaCli
MegaCli-1.01.39-0
/opt/MegaRAID/MegaCli/MegaCli
/opt/MegaRAID/MegaCli/MegaCli64


/opt/MegaRAID/MegaCli/MegaCli64  -PDList -aALL   //查看硬盘信息
阅读全文
背景:windows的cmd下复制很麻烦,clip一定程序上可以减少复制的麻烦,直接把执行完的结构复制到粘贴板。
内容可能是一堆的命令或exe的执行输出都可以复制在粘贴板上,因为cmd下复制太憋屈了,这个命令有点用。
dir |clip
提问:我管理着一台多人共享的Linux服务器。我刚使用默认密码创建了一个新用户,但是我想用户在第一次登录时更换密码。有没有什么方法可以让他/她在下次登录时修改密码呢?
在多用户Linux环境中,标准实践是使用一个默认的随机密码创建一个用户账户。成功登录后,新用户自己改变默认密码。出于安全考虑,经常建议“强制”用户在第一次登录时修改密码来确保这个一次性使用的密码不会再被使用。
下面是如何强制用户在下次登录时修改他/她的密码。


每个Linux用户都关联这不同的密码相关配置和信息。比如,记录着上次密码更改的日期、最小/最大的修改密码的天数、密码何时过期等等。
一个叫chage的命令行工具可以访问并调整密码过期相关配置。你可以使用这个工具来强制用户在下次登录修改密码、
要查看特定用户的过期信息(比如:alice),运行下面的命令。注意的是除了你自己之外查看其他任何用户的密码信息都需要root权限。
$ sudo chage -l alice


强制用户修改密码
如果你想要强制用户去修改他/她的密码,使用下面的命令。
$ sudo chage -d0 <user-name>
原本“-d ”参数是用来设置密码的“年龄”(也就是上次修改密码起到1970/1/1起的天数)。因此“-d0”的意思是上次密码修改的时间是1970/1/1,这就让当前的密码过期了,也就强制让他在下次登录的时候修改密码了。
另外一个过期当前密码的方式是用passwd命令。
$ sudo passwd -e <user-name>
上面的命令和“chage -d0”作用一样,让当前用户的密码立即过期。
现在检查用户的信息,你会发现:


当你再次登录时候,你会被要求修改密码。你会在修改前被要求再验证一次当前密码。
摘录:http://m.toutiao.com/i6210940210904826370/?tt_from=android_share&iid=3151331199&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
用 screenfetch 和 linux:

http://m.toutiao.com/i6212380828834447873/?tt_from=android_share&iid=3188867042&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
Core Dump是什么?
Core Dump乍听之下很抽象。
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。
我们可以认为Core Dump是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时dump下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。
Core Dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 Core Dump 文件可以再现程序出错时的情景。
在半导体作为电脑内存材料之前,电脑内存使用的是 磁芯内存(Magnetic Core Memory),Core Dump 中的 Core 沿用了磁芯内存的 Core 表达。图为磁芯内存的一个单元,来自 Wikipedia.


在 APUE 一书中作者有句话这样写的:
Because the file is named core, it shows how long this feature has been part of the Unix System.
这里的Core就是沿用的是早期电脑磁芯内存中的表达,也能看出Unix系统Core Dump机制的悠久历史。
Dump 指的是拷贝一种存储介质中的部分内容到另一个存储介质,或者将内容打印、显示或者其它输出设备。dump 出来的内容是格式化的,可以使用一些工具来解析它。
现代操作系统中,用Core Dump表示当程序异常终止或崩溃时,将进程此时的内存中的内容拷贝到磁盘文件中存储,以方便编程人员调试。
如何开启Core Dump?
临时开启Core Dump,并且设置大小不受限:
命令行输入: ulimit -c unlimited
要永久打开Core Dump并且使之大小不受限,网上说有两种方法:
1. 打开 core dump 功能
在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。
我们可以使用命令 ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,将 unlimited 改成你想生成 core 文件最大的大小,注意单位为 blocks(KB)。
用上面命令只会对当前的终端环境有效,如果想需要永久生效,可以修改文件 /etc/security/limits.conf文件。增加一行:
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value> * soft core unlimited
2. 在/etc/profile中加入 ulimit -c unlimited
我试了以上两种方法,但是输入
ulimit -c
输出结果始终是0。
后来自己想了一种方法,在Ubuntu下可以:
编辑 .bashrc 文件:
vi ~/.bashrc
添加:
ulimit -c unlimited
保存,退出。
source ~/.bashrc
source命令使修改立即生效。
来自:http://m.toutiao.com/i6215077284911514113/?tt_from=android_share&iid=3222127616&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
你曾经想过用安全 shell 挂载一个远程文件系统到本地吗?如果有的话,SSHfs 也许就是你所需要的。它通过使用 SSH 和 Fuse(LCTT 译注:Filesystem in Userspace,用户态文件系统,是 Linux 中用于挂载某些网络空间,如 SSH,到本地文件系统的模块) 允许你挂载远程计算机(或者服务器)到本地。


准备
在使用 SSHfs 挂载之前,需要进行一些设置 - 在你的系统上安装 SSHfs 以及 fuse 软件包。你还需要为 fuse 创建一个组,添加用户到组,并创建远程文件系统将会驻留的目录。
要在 Ubuntu Linux 上安装两个软件包,只需要在终端窗口输入以下命令:
sudo apt-get install sshfs fuse


如果你使用的不是 Ubuntu,那就在你的发行版软件包管理器中搜索软件包名称。最好搜索和 fuse 或 SSHfs 相关的关键字,因为取决于你运行的系统,软件包名称可能稍微有些不同。
在你的系统上安装完软件包之后,就该创建好 fuse 组了。在你安装 fuse 的时候,应该会在你的系统上创建一个组。如果没有的话,在终端窗口中输入以下命令以便在你的 Linux 系统中创建组:
sudo groupadd fuse
添加了组之后,把你的用户添加到这个组。
sudo gpasswd -a "$USER" fuse
别担心上面命令的 $USER。shell 会自动用你自己的用户名替换。处理了和组相关的工作之后,就是时候创建要挂载远程文件的目录了。
mkdir ~/remote_folder
在你的系统上创建了本地目录之后,就可以通过 SSHfs 挂载远程文件系统了。
挂载远程文件系统
要在你的机器上挂载远程文件系统,你需要在终端窗口中输入一段较长的命令。
sshfs -o idmap=user username@ip.address:/remote/file/system/ ~/remote
注意: 也可以通过 SSH 密钥文件挂载 SSHfs 文件系统。只需要在上面的命中用sshfs -o IdentityFile=~/.ssh/keyfile, 替换sshfs -o idmap=user部分。
输入这个命令之后,会提示你输入远程用户的密码。如果登录成功了,你的远程文件系统就会被挂载到之前创建的 ~/remote_folder目录。


使用完了你的远程文件系统,想要卸载它?容易吗?只需要在终端输入下面的命令:
sudo umount ~/remote_folder
这个简单的命令会断开远程连接同时清空 remote_folder 目录。
总结
在 Linux 上有很多工具可以用于访问远程文件并挂载到本地。但是如之前所说,如果有的话,也只有很少的工具能充分利用 SSH 的强大功能。我希望在这篇指南的帮助下,也能认识到 SSHfs 是一个多么强大的工具。
来自:http://m.toutiao.com/i6217571222784311809/?tt_from=android_share&iid=3250063669&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
背景: 我经常在命令行中切换 shell。是否有一个快速简便的方法来找出我当前正在使用的 shell 呢?此外,我怎么能找到当前 shell 的版本?

其一,一个名为 "$$" 的特殊参数表示当前你正在运行的 shell 实例的 PID。此参数是只读的,不能被修改。所以,下面的命令也将显示你正在运行的 shell 的名字:
$ ps -p $$
PID TTY          TIME CMD
21666 pts/4    00:00:00 bash
上述命令可在所有可用的 shell 中工作。
如果你不使用 csh,找到当前使用的 shell 的另外一个办法是使用特殊参数 “$0” ,它表示当前正在运行的 shell 或 shell 脚本的名称。这是 Bash 的一个特殊参数,但也可用在其他 shell 中,如 sh、zsh、tcsh 或 dash。使用 echo 命令可以查看你目前正在使用的 shell 的名称。
$ echo $0
bash
不要被一个叫做 $SHELL 的单独的环境变量所迷惑,它被设置为你的默认 shell 的完整路径。因此,这个变量并不一定指向你当前使用的 shell。例如,即使你在终端中调用不同的 shell,$SHELL 也保持不变。
$ echo $SHELL

/bin/shell


因此,找出当前的shell,你应该使用 $$ 或 $0,但不是 $SHELL。
找出当前 Shell 的版本
一旦你知道你使用的是哪个 shell,你可能想知道此 shell 的版本。为此,在命令行中输入 shell 并在后面加上 “--version” 参数可以查看版本信息。例如:
对于bashshell:
$ bash --version

GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
对于zshshell:
$ zsh --version

zsh 5.0.7 (x86_64-pc-linux-gnu)
对于tcshshell: $ tcsh --version
tcsh 6.18.01 (Astron) 2012-02-14 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,nd,color,filec
对于某些 shell,你还可以使用 shell 特定的变量(例如,$BASHVERSION 或 $ZSHVERSION)。
$ echo $BASH_VERSION

4.3.8(1)-release

摘自:http://m.toutiao.com/i6221626512869687810/?tt_from=android_share&iid=3283494589&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
背景:作者的服务器之前是Windows的后迁移到linux上,发现SQL查询的表在Linux上对大小写敏感,出现找不到该表,如何不改变服务器的表名称为对应的小写或代码改大写就能做到呢,改下my.cnf即可做到,如下摘录。
为什么在Windows能正常运行的程序和数据库,在Linux就会出现问题呢。这时一般会怀疑系统环境的问题,因为程序和数据库是一样的。
然而其实是英文字母大小写导致的结果。
比如在首页调取数据库数据的SQL文如下。
SELECT user_name,id from User;
User表在Windows系统上的Table名为user,因为不区别英文字母大小写所以没问题。
而在Linux会怎么样呢?
迁移过来的Table名是user,而在SQL文里指定的是User表。别忘了这家伙(Linux)区别英文字母大小写,因此会提示该表(User表)不存在。
解决方法
大概有3种解决方法,第一个是修改数据库的Table名,第二个是修改程序,第三个是修改MySQL的参数。
第一和第二,就无需多做说明了,而第三种方法是利用MySQL参数lower_case_table_names。
lower_case_table_names
参数lower_case_table_names是,在MySQL里怎么区别Table英文字母大小的,默认是0。
0:区别大小写1:不区别大小写(Table名以小写保存)2:不区别大小写(Table名以原来的大小写保存)
这样一来就简单了,可以让MySQL不区别Table名的大小写。在/etc/my.cnf(yum安装时的默认路径)文件的[mysqld]下面添加lower_case_table_names = 1就可以了。
[mysqld]
...
lower_case_table_names = 1
...
修改MySQL参数之后,重启一下数据库。

来自:http://m.toutiao.com/i6223691155964428802/?tt_from=android_share&iid=3283494589&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
背景:说WordPress提升了229%,我怎么没有察觉到呢?不管怎么样,GA了。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎

GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的

其他的还有:

RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从

Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。

Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
背景:说WordPress提升了229%,我怎么没有察觉到呢?不管怎么样,GA了。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎

GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的

其他的还有:

RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从

Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。

Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
wordpress的后台,当时我装过hhvm,感觉还成,传图片后切割处理这块的库好像不太支持,于是一直等待7,
装过hhvm, 感觉比它强,只是第一次慢点,后面老快到毫秒级别,那是相当顺畅,第一次访问慢可以接受的,
用户体验(特别强调后台操作流畅度的体验)感觉不如hhvm,只是兼容性可能好些吗?这块可能是太期望了:
点击在新窗口中浏览此图片

鸟哥这篇文章的数据,好像在我的这台vps上的用户体验上没有表现出来:
http://www.laruence.com/2014/12/18/2976.html


附录:
http://blog.bingxuecandong.com/?p=239

按大陆北京的鸟哥优化都优化了,感觉还是慢,难道是我vps慢?
http://jackxiang.com/post/8378/
centos7 如何刷新本地的DNS缓存
1)方法一:
[root@fl2 ~]# ping dl.z.com
ping: unknown host dl.z.com
[root@fl2 ~]# /etc/rc.d/init.d/nscd restart
-bash: /etc/rc.d/init.d/nscd: No such file or directory
[root@fl2 ~]# /etc/rc.d/nscd restart
-bash: /etc/rc.d/nscd: No such file or directory
[root@fl2 ~]#
centos7 dns

2)方法二:
centos 7 已经用systemd 了,
试试 systemctl restart nscd。

From:http://segmentfault.com/q/1010000002925549/a-1020000002925718
背景:swoole的出现,其背景是带有腾讯mongo和rango,mongo曾经在腾达30楼(想不起了)传PHP道时,见过半面,问过一个问题,rango兄弟出来后带着其思想重新写了swoole,于是,swoole主要思想和之前的pws有一部分相同,但其更主要用在嵌入式的长连接这块,其省掉了rinit这块在高并发的性能上更高一些,但变量上不能运行完销毁导致不能定相同变量,这块追求性能是要有代价的。

众所周知,传统的 PHP 应用程序有 Request Startup 和 Request Shutdown 的生命周期,所有的对象在请求后都将销毁,而 Blink 于此不同, Blink 许多对象都能留存与多个请求之间,减少对象反复创建销毁的性能损失。
摘自:http://www.oschina.net/p/blink-framework

作为swoole的顾问(故得上就细问,顾不上就问一下),我想swoole的开源思想比技术可能更重要,未来swoole的方面可能会向linux裁剪下的内存小于8M的上面作一定程度的倾斜,用在非常小的cpu和路由上,以php为界面操作路由,联网控制长连为基础,把体积变更小,更省硬件成本。
http://mp.weixin.qq.com/s?__biz=MzI2OTA5NTM2Mg==&mid=400981627&idx=1&sn=1367db94644ff7f28e29971abde433d1
背景:微信浏览器能访问,出现,请在微信客户端打开链接。

user agent switcher for firefox:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
FF越来越不行了,下载都下载不下来~

user agent switcher1.0.34中文版for chrome:
http://www.pc6.com/soft/FireFox_133175.html
http://bbs.kafan.cn/thread-1712463-1-1.html
Chrome的在扩展里拖动安装后,在右上出现一个戴眼镜的人,
使用方法:
输入粘贴的URL,微信浏览器能访问不让进时,点右边那个戴眼镜的人换成IOS或Android的,也就是修改头的chrome重新发起了http头,就Ok了。
还是不行啊,那就在右边那个戴眼镜的头像上给右键->选项->自己模拟下能过得去的http头。

最简单办法:
右击桌面上的Chrome浏览器快捷图标,在弹出的右键菜单中选择“属性”,打开相应的对话框,在“目标”文本框的字符后面添加以下语句:“–user-agent=”Android””或“–user-agent=”iPhone””,需注意在“chrome.exe”与“–user”之间有一个空格,然后确定双击打开就成手机版了。如需恢复电脑版,改回即可。
什么,还不行?找到原因是开启了网页授权用户基本信息,是不是用户需要微信登录标识,这得要模拟cookie啥的了,和浏览器头无关了。
———————————————————————————————————————————————————————————————


火狐浏览器模拟微信浏览器内核教程 :
http://blog.csdn.net/qwangwei1231/article/details/40980281
首先,下载火狐浏览器的User Agent Switcher 插件,下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/user-agent-switcher/ 插件如图:

笔者用自己的GT-I9300获取的agent为:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


http://archives.guao.hk/posts/chrome-extension-chromeleon-user-agent-spoofer.html

现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动。

微信浏览器中打开网页游戏效果还不错,对手机要求不高,而且微信网页游戏不用考虑手机兼容性问题,采用html5,而且大部分手机浏览器,特别是微信浏览器对html5的支持很高。

怎么把别人的微信网页游戏移植到自己的网站上并分享给好友呢?

许多网站的微信网页游戏都设置了判断浏览器,只有使用微信浏览器打开才能访问,这使我们在电脑上打开网址找不到源代码。方法很简单,我们可以伪造微信浏览器HTTP_USER_AGENT,从而在pc上可以访问,这样就可以获取你想要的css,js,html等资源,移植到自己的网站上。
如何伪造微信浏览器HTTP_USER_AGENT

使用谷歌浏览器非常方便伪造微信浏览器HTTP_USER_AGENT,打开你需要伪造HTTP_USER_AGENT的网页,按F12,进入开发者模式,下面默认是显示css调试的工具,你找到下面一排,有个图片所示的地方:

用谷歌浏览器如何伪造微信浏览器HTTP_USER_AGENT

用谷歌浏览器伪造微信浏览器HTTP_USER_AGENT

这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT。选择USER_AGENT,选other,微信的HTTP_USER_AGENT是:

在iPhone下,返回

Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B176 MicroMessenger/4.3.2

在Android下,返回

Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255

经过这样的设置之后,你刷新就可以访问之前不能访问的网页了,现在你就是伪装成微信浏览器访问,同时你使用谷歌浏览器查看源代码,就可以找到资源的路径了。
实践如下:
1)获取登录用户的电脑IP地址:
[root@localhost htdocs]# who -u am i 2>/dev/null
xiangdong pts/2        2015-11-09 09:45   .         16729 (10.65.12.52)
经过awk脚本做下简单处理一下:
[root@localhost htdocs]# who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'
10.65.12.52
2)把IP放到History的环境变量里面去:
[root@localhost htdocs]# vi  /etc/profile
export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` "
=============================================================

阅读全文
分页: 17/194 第一页 上页 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 下页 最后页 [ 显示模式: 摘要 | 列表 ]