随笔 - 33  文章 - 0  trackbacks - 0
<2018年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿

随笔分类

随笔档案

收藏夹

调试技巧

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

yum install ntp //安装ntp服务
systemctl enable ntpd //开机启动服务
systemctl start ntpd //启动服务
timedatectl set-timezone Asia/Shanghai //更改时区
timedatectl set-ntp yes //启用ntp同步
ntpq -p //同步时间

posted @ 2018-04-21 22:06 长戟十三千 阅读(0) | 评论 (0)编辑 收藏
     摘要: 先从一个小例子开头123456789101112131415161718192021$ cat heap-use-after-free.cpp #include&lt;iostream&gt; using namespace std; int main(int argc, char **argv) {  int *array = new in...  阅读全文
posted @ 2018-04-17 15:19 长戟十三千 阅读(6) | 评论 (0)编辑 收藏
yum reinstall -y cracklib-dicts
posted @ 2018-04-09 21:13 长戟十三千 阅读(1) | 评论 (0)编辑 收藏
yum install lrzsz 
or
yum install lrzs
posted @ 2018-04-09 14:36 长戟十三千 阅读(5) | 评论 (0)编辑 收藏

通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。该镜像库只包含流行的公有镜像。私有镜像仍需要从美国镜像库中拉取。

您可以使用以下命令直接从该镜像加速地址进行拉取:

$ docker pull registry.docker-cn.com/myname/myrepo:mytag

例如:

$ docker pull registry.docker-cn.com/library/ubuntu:16.04

: 除非您修改了 Docker 守护进程的 `--registry-mirror` 参数 (见下文), 否则您将需要完整地指定官方镜像的名称。例如,library/ubuntu、library/redis、library/nginx。

使用 --registry-mirror 配置 Docker 守护进程

您可以配置 Docker 守护进程默认使用 Docker 官方镜像加速。这样您可以默认通过官方镜像加速拉取镜像,而无需在每次拉取时指定 registry.docker-cn.com。

您可以在 Docker 守护进程启动时传入 --registry-mirror 参数:

$ docker --registry-mirror=https://registry.docker-cn.com daemon

为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

修改保存后重启 Docker 以使配置生效。

posted @ 2018-04-03 16:46 长戟十三千 阅读(9) | 评论 (0)编辑 收藏
1、ruby
https://tecadmin.net/install-ruby-latest-stable-centos/
2、mysql访问权限

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100 

' IDENTIFIED BY '' WITH GRANT OPTION; 
posted @ 2018-01-30 15:53 长戟十三千 阅读(11) | 评论 (0)编辑 收藏
 有两种方式:
   1. command & : 后台运行,你关掉终端会停止运行
   2. nohup command & : 后台运行,你关掉终端也会继续运行
   
一、 简介 
    Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也有别具特色的管理思想。
我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和bg 命令,让你轻松调度正在运行的任务。假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,挂起这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了。
& 将指令丢到后台中去执行
[ctrl]+z 將前台任务丟到后台中暂停
jobs 查看后台的工作状态
fg %jobnumber 将后台的任务拿到前台来处理
bg %jobnumber 将任务放到后台中去处理
kill 管理后台的任务
二、&
在Linux中,当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。实际上,这样是将命令放入到一个作业队列中了:
$ ./test.sh &
[1] 17208
$ jobs -l
[1]+ 17208 Running                 ./test.sh &
    在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在上面的例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。 当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。 
例:查找名为“httpd.conf”的文件,并把所有标准输出和错误输出重定向到find.dt的文件中: 
# find /etc/httpd/ -name "httpd.conf" -print >find.dt 2>&1 & 
[2] 7832 
成功提交该命令之后,系统给出了它的进程号7832。 对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行,例如对正在前台执行的tesh.sh使用ctrl+z挂起它:
$ ./test.sh
[1]+ Stopped                 ./test.sh
$ bg %1
[1]+ ./test.sh &
$ jobs -l
[1]+ 22794 Running                 ./test.sh &
但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1)
$ echo $$
21734
$ nohup ./test.sh &
[1] 29016
$ ps -ef | grep test
515      29710 21734 0 11:47 pts/12   00:00:00 /bin/sh ./test.sh
515      29713 21734 0 11:47 pts/12   00:00:00 grep test
$ setsid ./test.sh &
[1] 409
$ ps -ef | grep test
515        410     1 0 11:49 ?        00:00:00 /bin/sh ./test.sh
515        413 21734 0 11:49 pts/12   00:00:00 grep test
上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:
$ ./test.sh &
[1] 2539
$ jobs -l
[1]+ 2539 Running                 ./test.sh &
$ disown -h %1
$ ps -ef | grep test
515        410     1 0 11:49 ?        00:00:00 /bin/sh ./test.sh
515       2542 21734 0 11:52 pts/12   00:00:00 grep test
另外还有一种方法,即使将进程在一个subshell中执行,其实这和setsid异曲同工。方法很简单,将命令用括号() 括起来即可:
$ (./test.sh &)
$ ps -ef | grep test
515        410     1 0 11:49 ?        00:00:00 /bin/sh ./test.sh
515      12483 21734 0 11:59 pts/12   00:00:00 grep test
注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。
还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:
$ screen -dmS screen_test
$ screen -list
There is a screen on:
        27963.screen_test       (Detached)
1 Socket in /tmp/uscreens/S-jiangfeng.
$ screen -r screen_test
三、 nohup 
    如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。 该命令的一般形式为: 
nohup conmmand &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 
在上面的例子中,输出被重定向到myout.file文件中。
四、.*,?,[...],[!...]等 
下面就是这些特殊字符: 
* 匹配文件名中的任何字符串,包括空字符串。 
? 匹配文件名中的任何单个字符。 
[...] 匹配[ ]中所包含的任何字符。 
[!...] 匹配[ ]中非感叹号!之后的字符。 
当s h e l l遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名。
1)列出以i或o开头的文件名:     #ls [io]*
2)列出log.开头、后面跟随一个数字、然后可以是任意字符串的文件名: #ls log.[0-9]* 
3)与例二相反,列出log.开头、后面不跟随一个数字、然后可以是任意字符串的文件名 : #ls log.[!0-9]* 
4)列出所有以LPS开头、中间可以是任何两个字符,最后以1结尾的文件名:#ls LPS??1
5)列出所有以大写字母开头的文件名:$ ls [A-Z]* 6)列出所有以. 开头的文件名(隐含文件,例如. profile、.rhosts、.histo ry等): $ ls .*
其他相关命令:
jobs:查看当前有多少在后台运行的命令
fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
杀死进程
杀死已经启动的程序和普通方式一样:
pkill -9 name
killall name
kill pid
posted @ 2018-01-29 09:35 长戟十三千 阅读(7) | 评论 (0)编辑 收藏

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)
set expandtab

 

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换: 
TAB替换为空格: 
:set ts=4
:set expandtab
:%retab!

 

空格替换为TAB:
:set ts=4
:set noexpandtab
:%retab!

 

加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。

posted @ 2017-11-30 11:51 长戟十三千 阅读(10) | 评论 (0)编辑 收藏

vim代码补全

现在的图形界面的IDE(Integrated Development Environment)一般具有语法高亮,语法检查,自动补全功能,大大提高了编程的效率。

vim作为文本编辑器其强大的编辑能力很大部分来自于普通模式命令,用户使用这些命令可以快速的在文档中移动、定位、查找、替换删除、而不用使用鼠标去完成这些操作。vim另一个强大之处是支持各种插件安装,用户可以根据功能需求和习惯安装需要的插件。本文将介绍两个非常强大的开源vim插件使得vim具有IDE一样的功能,提高使用vim编程的效率。这两个vim插件分别是spf13 和 YouCompleteMe

1. vim7.4添加Lua支持

之所以安装支持Lua的vim7.4,是因为spf13需要Lua支持。

1.1 安装Lua和LuaJit

Centos的官方源中包含Lua,可以直接使用Yum命令安装

sudo yum install lua lua-devel -y

Luajit不在Centos的官方源中,需要源码安装

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz tar -xzvf LuaJIT-2.0.4.tar.gz cd LuaJIT-2.0.4 // 使用默认安装路径 make sudo make install

1.2编译安装vim7.4

// git好处是以后可以方便地更新 git clone git@github.com:vim/vim.git tar xzvf vim-7.4.tar.bz2 cd vim74 ./configure --prefix=/usr/local/bin/vim74 \ --with-features=huge \ --with-luajit \ --enable-pythoninterp=yes \ --with-python-config-dir=/usr/lib64/python2.7/config \ --enable-luainterp=yes \ --enable-fail-if-missing --enable-fail-if-missing make sudo make install

2. 安装spf13

自己配置vim往往很繁琐,需要对vim配置很熟悉,spf13-vim不仅配置精良而且包含一整套精心挑选的插件,省去了很多配置细节。

curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh

3. 安装和配置YouCompleteMe

3.1 安装YouCompleteMe

YouCompleteMe是一个vim插件,而在spf13中指定安装YouCompleteMe插件也很方便,只需要在文件~/.vimrc.before.local中添加下面一行,然后使用Vundle安装命令即可。

let g:spf13_bundle_groups=['general', 'youcompleteme']

Vundle命令安装:

vim :BundleInstall!

编译ycm_core.so:
ycm自动补全需要动态库ycm_core.so,需要用户自己编译,用户可以选择编译全部功能或者选择只支持C/C++自动补全:

cd ~/.vim/bundle/YouCompleteMe/ ./install.py --all #编译支持所有功能 or ./install.py --clang-completer #只支持C/C++补全

3.2 YouCompleteMe配置

YouCompleteMe有两个需要配置的地方一个是.virmc,另一个是.ycm_extra_conf.py。

.vimrc位于用户home目录下,用来配置YouCompleteMe的全局行为,例如全局ycm_extra_conf.py路径,代码跳转快捷键映射。我的.vimrc配置如下:

" YouCompleteMe {         if count(g:spf13_bundle_groups, 'youcompleteme')             let g:acp_enableAtStartup = 0             " global conf which is needed to resolve name in system include             " file or other  third-part include file             let g:ycm_global_ycm_extra_conf = '~/.vim/data/ycm/.ycm_extra_conf.py'              " enable completion from tags             let g:ycm_collect_identifiers_from_tags_files = 1             let g:ycm_seed_identifiers_with_syntax = 1             let g:ycm_confirm_extra_conf = 0             let g:ycm_cache_omnifunc=0             let g:ycm_key_invoke_completion = '<C-;>'               nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>             nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>

上面配置中全局.ycm_extra_conf.py路径很重要,如果不配置将无法解析C/C++头文件

.ycm_extra_conf.py 模版位于./YouCompleteMe/third_party/ycmd/cpp/ycm/,其中-isystem flag用来配置系统头文件路径,-I用来配置第三方头文件路径, 一个支持C/C++工程的ycm_extra_conf.py部分配置文件如下:

'-std=c++11', #'-std=c99', # ...and the same thing goes for the magic -x option which specifies the # language that the files to be compiled are written in. This is mostly # relevant for c++ headers. # For a C project, you would set this to 'c' instead of 'c++'. '-x', 'c++', '-isystem', '../BoostParts', #-isystem: system include file path '-isystem', '/usr/include', '-isystem', '/usr/local/include', '-isystem', '/usr/include/c++/4.8.5', ]

YouCompleteMe查找.ycm_extra_conf.py过程是在当前编辑文件所在目录查找,然后逐级向上查找,如果没有找到则使用全局配置文件。

最后截图:

posted @ 2017-11-24 15:40 长戟十三千 阅读(28) | 评论 (0)编辑 收藏
[1]Install some packages.
# install from EPEL

[root@dlp ~]# 
yum --enablerepo=epel -y install composer php-bcmath
[2]Install AMQP client library.
[cent@dlp ~]$ 
composer require php-amqplib/php-amqplib 

Using version ^2.6 for php-amqplib/php-amqplib ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev)   - Installing php-amqplib/php-amqplib (v2.6.3)     Downloading: 100%  Writing lock file Generating autoload files  
[cent@dlp ~]$ 
composer install 

Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Nothing to install or update Generating autoload files 
[3]This is an example of sending message on PHP.
For example, connect with RabbitMQ user "serverworld", virtualhost "my_vhost".
[cent@dlp ~]$ 
vi send_msg.php
<?php require_once __DIR__ . '/vendor/autoload.php';  use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage;  $connection = new AMQPStreamConnection('127.0.0.1', 5672, 'serverworld', 'password', '/my_vhost');  $channel = $connection->channel(); $channel->queue_declare('Hello_World', false, false, false, false);  $msg = new AMQPMessage('Hello RabbitMQ World!'); $channel->basic_publish($msg, '', 'Hello_World'); echo " [x] Sent 'Hello_World'\n";  $channel->close(); $connection->close(); ?>  
[cent@dlp ~]$ 
php send_msg.php 

 [x] Sent 'Hello_World' 
[4]This is an example of receiving message on PHP.
[cent@node01 ~]$ 
vi receive_msg.php
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection;  $connection = new AMQPStreamConnection('127.0.0.1', 5672, 'serverworld', 'password', '/my_vhost'); $channel = $connection->channel();  $channel->queue_declare('Hello_World', false, false, false, false);  echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";  $callback = function($msg) {     echo " [x] Received ", $msg->body, "\n"; };  $channel->basic_consume('Hello_World', '', false, true, false, false, $callback);  while(count($channel->callbacks)) {     $channel->wait(); } ?>  
[cent@node01 ~]$ 
php receive_msg.php 

 [*] Waiting for messages. To exit press CTRL+C  [x] Received Hello RabbitMQ World!
posted @ 2017-11-16 17:53 长戟十三千 阅读(7) | 评论 (0)编辑 收藏
仅列出标题  下一页