工作笔记(2)

来源:互联网 发布:哪个软件看泰剧最全 编辑:程序博客网 时间:2024/06/05 19:18

1.解压

解压filename.tar.xz文件
xz -d解压成filename.tar文件. -z为压缩
tar -xvf 解压成源文件  -C表示解压到指定目录

2.redis key批量删除


redis-cli keys rActivity*|xargs redis-cli del


3.mysql 5.7 yum安装


https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

如果指定了gpgcheck=1则要设置gpgkey路径
wget http://repo.mysql.com/RPM-GPG-KEY-mysql -O /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
1.service mysqld start 启动失败
用/usr/bin/mysqld_safe (查看/etc/init.d/mysqld文件,可知执行文件位置)启动查看错误,
2.[ERROR] /usr/sbin/mysqld: Can't create/write to file '/usr/local/mysql/mysql.pid' (Errcode: 2 - No such file or directory)
创建目录:mkdir -p /usr/local/mysql
配置权限:chown mysql:mysql /usr/local/mysql
chmod 755 /usr/local/mysql
3.[ERROR] Can't find error-message file '/usr/local/mysql/share/mysql/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive

4.mysqld_safe A mysqld process already exists
测试有mysqld进程在运行,也可以用service mysqld start可以启动

5.配置开机启动
chkconfig mysqld on  
chkconfig  --list mysqld
6.mysql初始化
如果提示没有file directory,则创建相应的目录
mysqld --initialize --basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
 --lc_messages_dir=/usr/local/mysql/share/mysql  --lc_messages=en_US

4.luaRocks是lua的包管理器

配置: ./configure --with-lua=/usr/local --with-lua-include=/usr/local/include  
--with-lua是lua.h的目录, 
gmake build&& gmake install
通过luaRocks下载包:如 luarocks install md5

5.搭建和配置svn服务器

1. yum install subversion #安装svn2.   groupadd svn #为运行svn设置专用的用户组,非必须操作,但推荐3.   useradd -d /var/svn -g svn svn #为运行svn设置专用的用户,同时指定home目录为:/var/svn 非必须操作,但推荐4.   passwd svn #为运行svn专用用户设置密码,非必须操作,但推荐5.   su -l svn #开始切换为svn用户进行后续操作6.   mkdir -p /var/svn/default-repo #为即将创建的代码库建立一下文件夹7.   svnadmin create /var/svn/default-repo/ #建立代码库,/var/svn/default-repo/为代码库所在文件夹8.  cd /var/svn/default-repo/conf #进入新建立的代码库的 conf目录下,准备进行相关配置9.  vim svnserve.conf #设置认证相关的配置:svnserve -d -r /var/svn/default-repo/ #启动svn server (默认端口3690)注:同一台服务器可以运行多个svnserver,只需要启动时换一个端口即可:svnserve -d -r /var/svn/another-repo/ --listen-port 3691

6.查询当前svn版本号

svn info /data/www/poker  |grep Revision|awk -F ':' '{print $2}'

7.后台快捷搭建工具

http://www.fastadmin.net

8.nginx yum安装和配置

$ yum -y install gcc gcc-c++ autoconf automake$ yum -y install zlib zlib-devel openssl openssl-devel pcre-devel$ sudo groupadd -r nginx$ sudo useradd -s /sbin/nologin -g nginx -r nginx-user
$ yum -y install nginx 
php代理配置讲解nginx将会连接回环地址9000端口执行PHP文件,需要使用tcp/ip协议,速度比较慢.建议大家换成使用socket方式连将fastcgi_pass 127.0.0.1:9000;改成fastcgi_pass unix:/var/run/phpfpm.sock/usr/local/nginx-1.0.6/sbin/nginx -t/usr/local/nginx-1.0.6/sbin/nginx -s 
ngx_auth_request 模块发起的“子请求”确实是与其“父请求”共享一套 Nginx 变量的值容器。ngx_echo,ngx_lua,以及 ngx_srcache 在内的许多第三方模块都选择了禁用父子请求间的变量共享。$request_method 变量即使在 GET “子请求” /sub 中使用,得到的值依然是“主请求” /main 的请求方法,POST.我们并不能通过标准的 $request_method 变量取得“子请求”的请求方法。为了达到我们最初的目的,我们需要求助于第三方模块 ngx_echo 提供的内建变量 $echo_request_methodngx_lua 模块proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header remote_header_test "123123123";proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-PORT $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;set_real_ip_from:真实服务器上一级代理的IP地址或者IP段,可以写多行real_ip_header:从哪个header头检索出要的IP地址real_ip_recursive:递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IP在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。nginx模块nginx-http-footer-filter研究使用------------------------nginx升级-------------------------3. 执行完后,这里不用在 make install 了,接下来重名/sbin/nginx为nginx.old# mv /usr/local/webserver/nginx/sbin/nginx /usr/local/webserver/nginx/sbin/nginx.old4. 复制编译后objs目录下的nginx文件到nginx的安装目录sbin/下# cp objs/nginx /usr/local/webserver/nginx/sbin/5. 测试一下新复制过来文件生效情况:# /usr/local/webserver/nginx/sbin/nginx -tnginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful6. 让nginx把nginx.pid文件修改成nginx.pid.oldbin,随即启动nginx,实现不间断# kill -USR2 `cat /usr/local/webserver/nginx/nginx.pid`  更新配置文件# kill -QUIT `cat /usr/local/webserver/nginx/nginx.pid.oldbin` 优雅的关闭
7.检验升级配置和之前是否一样
openssl sha1 /usr/sbin/nginx 
openssl sha1 /usr/sbin/nginx_bak 

9./proc/cpuinfo

1.逻辑核数:cat /proc/cpuinfo | grep "processor" | wc -l  
2.系统CPU的物理核数: cat /proc/cpuinfo |grep "cpu cores"|uniq
详细参考:http://blog.csdn.net/wswit/article/details/52665413
10.mysql导入导出数据
select * from point_reports_1  where MOD(page_no,2) = 1 into outfile "/var/lib/mysql-files/fromtable_2.txt";如果出现安全方面的错误提示,show variables like '%secure_file_priv%';开启授权,/var/lib/mysql-files为导出授权目录load   data   infile   "/var/lib/mysql-files/fromtable_2.txt"   into   table   point_reports_0; 
11.php
php://memory 和 php://temp 是一次性的,比如:stream 流关闭后,就无法再次得到以前的内容了。
If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.This problem may be caused by an apache-module SecFilter.Adding the following lines to the .htaccess solves the problem.SecFilterEngine OffSecFilterScanPOST Off
eval() 不能被禁用,因为是语言构造,不是函数open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4). 
allow_url_fopen = On 会影响file_get_contents访问url

12.vim 

ctrl+r 向前恢复  u  撤销(向后恢复)

13.mkdir -m 711 -p 

umask 表示去掉的权限

14.查看当前时间 

date +%s 
---------查看指定时间 -------
#date -d 2008-01-01 +%s  
#date -d 20080101 +%s 
---------获取七天前的日期--echo `date -d "7 day ago" +%Y%m%d`

16.设置密码

echo "vagrant"|passwd --stdin vagrant
-d:删除密码,仅有系统管理者才能使用; 
-f:强制执行; 
-k:设置只有在密码过期失效后,方能更新; 
-l:锁住密码; 
-s:列出密码的相关信息,仅有系统管理者才能使用; 
-u:解开已上锁的帐号。chage -l vbird2chage -d 0 agetest// 此时此账号癿密码建立时间会被改为 1970/1/1 ,所以会有问题!下次改用户登录强制更改密码,bash 的 login shell 情况下所读取的整体环境配置文件其实叧有 /etc/profile,
所读取癿个人偏好配置文件其实主要有三个,依序分别是:1. ~/.bash_profile2. ~/.bash_login3. ~/.profile

17.标准IO

1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

18.linux开机启动

开机启动过程:BIOS,MBR,开机管理程序,操作系统核心档案window安装时,覆盖掉MBR,自己所在分割槽的启动扇区。linux安装时,可选择安装在MBR或者其他启动扇区,linux的loader可以手动设置选单,所以你可以在linux的bootloader里面加入windows的开机选项

19.at命令

我们可以利用 /etc/at.allow 不 /etc/at.deny 这两个档案来进行 at 癿使用限制呢! 加上这两个档案后, at 的工作情况其实是这样的:1. 先找寻 /etc/at.allow 这个档案,写在这个档案中癿使用者才能使用 at ,没有在这个档案中癿使用者则丌能使用 at (即使没有写在 at.deny 当中);2. 如果 /etc/at.allow 丌存在,就寻找 /etc/at.deny 这个档案,若写在这个 at.deny 癿使用者则丌能使用 at ,而没有在这个 at.deny 档案中癿使用者,就可以使用 at 咯;3. 如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。

20.批量杀死进程

 ps -aux|grep ver-dev|grep -v grep|awk '{print $2}'|xargs kill -9批量干死develop项目的poker进程

21.chkconfig命令用法

chkconfig --list [name]chkconfig --add namechkconfig --del namechkconfig [--level levels] name <on|off|reset>chkconfig [--level levels] name

22.linux IPC

Linux IPC消息队列是一个全内存设计,内核保证读写顺序和数据同步,并且性能非常强悍的先进现先出数据结构。它的特性如下:每秒可读写超过50万次(4核/4G内存的机器)支持消息多类型,抢队列时可根据需要获取特定的消息类型每个消息长度最大支持65535个字节,队列长度受内存大小限制,最大不超过机器内存的50%,可以修改内核参数来调整.

23.nginx HTTP模块

ngx_http_read_client_request_body 异步的,返回NGX_DONEngx_http_discard_request_body将来自客户端的HTTP包体丢弃,如果不接收发来的TCP流,有可能造成客户端发送超时ngx_http_send_header方法会首先调用所有的HTTP过滤模块共同处理headers_out中定义的HTTP响应头部全部处理完毕后才回序列化为TCP字节流发送到客户端ngx_http_output_filter方法即可向客户端发送HTTP响应包体,发送结束后HTTP框架会调用ngx_http_finalize_request方法结束请求http_rang_header_filter模块就是用来处理HTTP请求头部range部分的,ngx_cycle_t ngx_connection_t ngx_listening_t

24.创建一个10M的空文件

dd if=/dev/zero of=/tmp/s.tmp  bs=10M count=1

25.nginx服务用service管理

#!/bin/bash# chkconfig: - 85 15# description: Nginx server control script# processname: nginx# config file: /usr/local/nginx/conf/nginx.conf# pid file: /usr/local/nginx/logs/nginx.pid
关键是前三行是必须的

26.vagrant操作

vagrant box add mybox box路径
初始化mybox的box:vagrant init mysql 
vagrant up/halt/reload
vagrant destroy
vagrant ssh
打包:vagrant package --base vagrant_web_1513310482712_24913(虚拟机名称) --output lnmp.box

27.WIN和Linux编码转换包

yum -y install dos2unix*

28.ELK安装

常见问题解决:http://blog.csdn.net/u012246178/article/details/63253531

29.linux瘦身

1.查看/下所有文件夹大小:du -ah --max-depth=1 /
2.当我们在系统下运行某个程序出错的时候,系统会自动将残留在内存中的数据存成 core 文件
删除所有core文件(包含分号): find / -name core -print -exec rm -rf {} \;
3.Linux 提供了众多语言的手册页(man)比如 Ubuntu 的 手册页位于/usr/share/man 目录下 ,可以使用命令删除多余语言的手册页保留中英文即可
# cd /usr/share/man# find ./ -maxdepth 1 -type d | tail -n +2 | grep -E -v '(en|zh|man).*' | \
4.清理旧版本的软件缓存apt-get autoclean5.清理所有软件缓存:apt-get clean
6.在目录中查找更改时间在n日以前的文件并删除它们,一般用于日志文件类操作find . -type f -mtime +14 -exec rm {} \; 

30.gdb操作

b打断点  c继续运行 d清除所有断点 r运行,忽视断点 s(step in) n(step out) p 打印变量

31.Lua学习

不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。  3 print(type("hello"));  4 print("hello".." world")  5 print(23 .. 43)  6 function fun(a,callback)  7         result = {};  8         result['a']=0;  9         result['b']=0; 10         for k,v in pairs(a) do 11                 --result['a']+=k; 12                 --result['b']+=v; 13                 callback(k .. " " .. v); 14         end 15         return 0;--callback(result); 16 end 17 tab = {a=1,b=2} 18 print(type(tab)) 19 result = fun(tab,print); 20 -------a. 变量个数 > 值的个数             按变量个数补足nilb. 变量个数 < 值的个数             多余的值会被忽略控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。要注意的是Lua中 0 为 true:for i,val in ipairs索引迭代~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true其他运算符 —— #在获取表的长度时,根据的是表的最大索引的值:首先,使用gg调整光标到首行,然后使用dG命令即可。string.gsub(mainString,findString,replaceString,num)返回替换后的字符串string.char(arg) 和 string.byte(arg[,int])char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。string.gmatch(str, pattern)返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。string.match(str, pattern, init)string.match()只寻找源字串str中的第一个配对返回前段非汉子字符串local a = "23245023496830,!~#$$%汉字。。。。"print(string.match(a,"[%w%s%p]+"))去掉汉子 local a = "我23245023496830,!~#$$%汉字。。。。"s,n=string.gsub(a,"[^%w%s%p]+","")--------------table 长度相关----在求table的长度的时候,当索引不连续的时候,#table返回的值不会太准确1、在table中不要使用nil2、如果非要使用nil,必须用table.setn()函数去设置这个table表的长度。注意:新版本的lua已经不支持setn了。必须给你个结论:setn函数已过时,不要在lua的table中使用nil值,如果一个元素要删除,直接remove,不要用nil去代替。-------------数组-------------逻辑结构是线性表多维数组即数组中包含数组或一维数组的索引键对应一个数组。---------------模块与包--------------执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。---------------迭代器-----------------------------元表----------------setmetatable(table,metatable): 对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。getmetatable(table): 返回对象的元表(metatable)。__index访问__newindex 更新__newindex 元方法用来对表更新,__index则用来对表访问 。当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。以下实例演示了 __newindex 元方法的应用:__call__tostring------------------协程----------------

32.ldd和ldconfig

 查看执行文件所需要的动态链接库:ldd /usr/bin/mysql
如果缺失某些库文件,在添加了链接库后,需要ldconfig来生效

 ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件,缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

      linux下的共享库机制采用了类似于高速缓存的机制,将库信息保存在/etc/ld.so.cache里边,程序连接的时候首先从这个文件里边查找,然后再到ld.so.conf的路径里边去详细找,这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因。

33.jstree插件使用

php代码://注意children节点的id不能有重,必须唯一,返回格式参考官网

 public function tree()    {        $id = request()->param('id');        //不变的        $provinceList = (new ActivityProvince())->select();        $str = model("ActivityCategory")->where(['id'=>$id])->field('channel_id_str')->find();        $channelList = json_decode($str['channel_id_str'],true);        $channelList = !$channelList?array():$channelList;        $allChannel = (new ActivityChannel())->getChannelList();        foreach($allChannel as $k=>$v)        {            $item=[];            $item['id'] = $v['id'];            $item['text'] = $v['channel_name'];            $item['state']=[            'opened' => false,            'selected' => false         ];            $province = isset($channelList[$v['channel_id']])?$channelList[$v['channel_id']]:array();            $selected = 0;            foreach($provinceList as $k1=>$v1)            {                if(in_array($v1['pno'],$province))                {                    $selected++;                    $item['children'][] = ['text'=>$v1['name'],'icon'=>'fa fa-folder tree-item-icon-color icon-lg','id'=>"{$v['channel_id']}-{$v1['pno']}",'state'=>['selected'=>true ]];                }else{                    $item['children'][] = ['text'=>$v1['name'],'icon'=>'fa fa-folder tree-item-icon-color icon-lg','id'=>"{$v['channel_id']}-{$v1['pno']}",'state'=>['selected'=>false]];                }            }            if($selected == count($provinceList))            {                $item['state']['selected'] = true;            }else{//                $item['state']['selected'] = false;            }            $result[] = $item;        }        return json($result);    }

js代码:主要是初始化input,列表变化时更新input

 var url = location.href.substr(0,location.href.indexOf("?"));    var arr = url.split("/");    $('#province-container').jstree({        'core': {            'data': {                "url" : "/activity/activitycategory/tree",                "dataType" : "json", // needed only if you do not supply JSON headers                "data":{"id":arr[arr.length-1]}            },            "themes": {                "dots": true,               // no connecting dots between dots                "responsive": false        //无响应            },            'multiple': true             //设置其为没有多选        },        //"checkbox": {        //    "keep_selected_style": false        //},        'types': {                         //这里就是图片的显示格式            "default": {                "icon": "fa fa-folder tree-item-icon-color icon-lg"            },            "file": {                "icon": "fa fa-file tree-item-icon-color icon-lg"            }        },        'plugins': [                       //插件,下面是插件的功能            'types',                      //可以设置其图标,在上面的一样。            'wholerow',                   //            'unique',                      //独特----防止重复。(新添加的)            'checkbox',        ]    });    //绑ready事件 ,初始化     $('#province-container').bind("ready.jstree", function (obj, e) {            // 处理代码        var checkedNodes = $('#province-container').jstree("get_all_checked");//获取选中节点和半选中节点        var channel_id_str={};        for(var i=0;i<checkedNodes.length;i++)        {            var tmp = checkedNodes[i].split('-');            if(tmp.length == 2)            {                if(typeof channel_id_str[tmp[0]] === "undefined")                {                    channel_id_str[tmp[0]] = new Array;                }                channel_id_str[tmp[0]].push(tmp[1]);            }        }        $("#c-channel_id_str").val(JSON.stringify(channel_id_str));                $(this).jstree("close_all");//收缩列表        });    $('#province-container').jstree(true).get_all_checked = function(full) {//重写get_all_checked事件,        var tmp=new Array;        for(var i in this._model.data){            if(this.is_undetermined(i)||this.is_checked(i)){tmp.push(full?this._model.data[i]:i);}        }        return tmp;    };    //绑定点击事件,更新input值    $('#province-container').bind("activate_node.jstree", function (obj, e) {        // 处理代码        // 获取当前节点        var checkedNodes = $('#province-container').jstree("get_all_checked");//获取选中节点和半选中节点        var channel_id_str={};        for(var i=0;i<checkedNodes.length;i++)        {            var tmp = checkedNodes[i].split('-');            if(tmp.length == 2)            {                if(typeof channel_id_str[tmp[0]] === "undefined")                {                    channel_id_str[tmp[0]] = new Array;                }                channel_id_str[tmp[0]].push(tmp[1]);            }        }        $("#c-channel_id_str").val(JSON.stringify(channel_id_str));    });

HTML:

 <div class="col-xs-12 col-sm-8" id="province-container"> </div> <input id="c-channel_id_str" data-rule="required" class="form-control" name="row[channel_id_str]" type="hidden" >


原创粉丝点击