笔记栈

  • 首页

  • 归档

  • 搜索

linux下使用vim修改jar包内文件内容

发表于 2017-08-01 | 更新于 2019-05-06

在平常工作中要经常把打包好的程序发布到linux机器中,有时候需要更改包内的文件,特别是对jar包中的配置文件进行更改后还要重新打包上传。当然也有别的替代方式。
在这介绍一种通过vim命令不解压压缩包直接更改文件内容的方法,以log4j.xml文件为例:

  1. cd到jar包所在目录,运行命令 vim xxx.jar

    1
    $ vim xxx.jar
  2. 输入如下查找命令查找文件

    1
    /log4j.xml
  3. 光标移动到该文件上之后敲回车,进入编辑界面

  4. 更改文件后,使用vim命令保存并退出即可

docker + php + nginx + postgresql

发表于 2017-07-14 | 更新于 2019-05-06
  1. 启动容器

    1
    2
    3
    $ docker run --name gg.php -p 2120:2120 -p 2121:2121 -p 2123:2123 -d \
    -v /volume1/homes/ggzdttt/app/php:/var/www/html \
    php:7.1-fpm

    如果步骤2和3都成功后执行下面的命令(记得将时间更改为北京时)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ docker exec -it gg.php /bin/bash
    $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    $ php /var/www/html/gzt/server/other/serial/realtime/start.php start -d
    $ exit

    $ docker run --name gg.nginx -p 8765:80 -d \
    -v /volume1/homes/ggzdttt/app/php:/usr/share/nginx/html \
    -v /volume1/homes/ggzdttt/nginx/conf.d:/etc/nginx/conf.d \
    --link gg.php:php \
    nginx

    $ docker exec -it gg.nginx /bin/bash
    $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    $ exit
  2. 安装php关于postgresql数据库的依赖

    1
    2
    3
    4
    5
    6
    7
    $ docker exec -it gg.php /bin/bash
    $ apt-get update
    $ apt-get install -y libpq-dev
    $ /usr/local/bin/docker-php-ext-configure pgsql
    $ /usr/local/bin/docker-php-ext-install pgsql
    $ exit
    $ docker restart gg.php
  3. 安装workerman依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ docker exec -it gg.php /bin/bash
    $ apt-get install -y wget
    $ #执行`php -v`确定php版本,然后到http://php.net/releases/查找相应版本的php
    $ wget http://php.net/distributions/php-7.1.4.tar.gz
    $ tar zxvf php-7.1.4.tar.gz
    $ cd php-7.1.4/ext/pcntl/
    $ phpize
    $ ./configure
    $ make
    $ make install
    $ #通过运行 php --ini查找php.ini文件位置,然后在文件中添加extension=pcntl.so
    $ apt-get install -y vim
    $ vim /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini
    $ #在文件中添加extension=pcntl.so,最后保存退出
    $ php /var/www/html/gzt/server/other/serial/realtime/start.php start -d
    $ exit
    $ docker restart gg.php

npm更换源

发表于 2017-07-12 | 更新于 2019-05-06

有很多方法来配置npm的registry地址,下面根据不同情境列出几种比较常用的方法。
以淘宝npm 镜像举例:

  1. 临时使用

    1
    $ npm --registry https://registry.npm.taobao.org install express
  2. 持久使用

    1
    $ npm config set registry https://registry.npm.taobao.org

配置后可通过下面方式来验证是否成功

1
$ npm config get registry

或者

1
$ npm info express

  1. 通过cnpm使用,这也是我自己常使用的
    1
    $ npm install -g cnpm --registry=https://registry.npm.taobao.org

http://www.jianshu.com/p/0deb70e6f395

Linux Shell 1>/dev/null 2>&1 含义

发表于 2017-07-07 | 更新于 2019-05-06

在shell中,每个进程都和三个系统文件 相关联:标准输入stdin,标准输出stdout、标准错误stderr,三个系统文件的文件描述符分别为0,1、2。所以这里2>&1 的意思就是将标准错误也输出到标准输出当中。

shell中可能经常能看到:echo log > /dev/null 2>&1

echo log > /dev/null 2>&1的含义:

  • /dev/null :代表空设备文件
  • > :代表重定向到哪里,例如:echo "123" > /home/123.txt
  • 0 :表示stdin标准输入
  • 1 :表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
  • 2 :表示stderr标准错误
  • & :表示等同于的意思,2>&1,表示2的输出重定向等同于1

1 > /dev/null 2>&1语句含义:

  • 1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
  • 2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

cmd >a 2>a 和 cmd >a 2>&1 为什么不同?

  • cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。
  • cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD1的管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。
  • 以上两者的不同点在于:
    cmd >a 2>a 相当于使用了FD1、FD2两个互相竞争使用文件 a 的管道。
    cmd >a 2>&1 只使用了一个管道FD1,但已经包括了stdout和stderr。
    从IO效率上来讲,cmd >a 2>&1的效率更高。

实例解析

下面通过一个例子来展示2>&1有什么作用:

1
2
3
$ cat test.sh
t
date

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout。

1
2
3
4
$ ./test.sh > test1.log
./test.sh: line 1: t: command not found
$ cat test1.log
Wed Jul 10 21:12:02 CST 2013

可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

1
2
3
4
$ ./test.sh > test2.log 2>&1
$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007

这次,stderr和stdout的内容都被重定向到log文件中了。
实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file。

总结

对于&1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了,其中0 表示键盘输入 1表示屏幕输出 2表示错误输出,把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。

command >out.file 2>&1 &

  • command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
  • 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
  • 最后一个& , 是让该命令在后台执行。

试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出,
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

可以试试

  • ls 2>1
    不会报没有2文件的错误,但会输出一个空的文件1。
  • ls xxx 2>1
    没有xxx这个文件的错误输出到了1中。
  • ls xxx 2>&1
    不会生成1这个文件了,不过错误跑到标准输出了。
  • ls xxx >out.txt 2>&1
    实际上可换成ls xxx 1>out.txt 2>&1,重定向符号>默认是1,错误和输出都传到out.txt了。

为何2>&1要写在后面?

  • command > file 2>&1
    首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
  • command 2>&1 >file
    2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

linux内存分析

发表于 2017-06-23 | 更新于 2019-05-06
  • 分析top命令以及smaps
    讲得比较浅显易懂
    link

  • 如何设置swap大小
    根据centos官网介绍可以得出如下公式:M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 Else S = M + 2。而且其最小不应该小于32M(never less than 32 MB.)
    link

  • linux内存介绍以及C与C++内存管理
    可以关注一下这个人的其他博文
    link

后台运行

发表于 2017-06-22 | 更新于 2019-05-06
  • $ java -jar xx.jar
    当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出。

  • $ java -jar xx.jar &
    窗口不锁定,&代表在后台运行,当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

  • $ nohup java -jar xx.jar &
    窗口不锁定,窗口关闭时,程序仍然运行,nohup意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。
    当用nohup命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。
    $ nohup java -jar xx.jar > temp.log &

可通过jobs命令查看后台运行任务,执行jobs命令后,就会列出所有后台执行的作业,并且每个作业前面都有个编号。
如果想将某个作业调回前台控制,只需要fg + 编号即可。

centos挂载ftp目录

发表于 2017-06-15 | 更新于 2019-05-06
  • 安装rpmforge-releae
    去某个地址)下载rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm,然后执行命令rpm -Uhv rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

  • 安装curlftpfs
    $ yum install curlftpfs

  • 挂载
    将挂载后的地址先创建好,例:

    1
    2
    $ mkdir -p /mod/t639/gmf
    $ curlftpfs -o rw,allow_other ftp://nwpdata:123456@10.20.49.99/mod/t639/gmf /mod/t639/gmf
  • 卸载
    $ fusermount -u /mod/t639/gmf

查找对应目录进行压缩

发表于 2017-06-08 | 更新于 2019-05-06

$ tar zcvf 20170608.tar.gz $(find ./post_data/png/ -name "20170608" -type d)

查看系统开机时间

发表于 2017-06-01 | 更新于 2019-05-06
  • 复杂的命令
    $ date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"

  • 简单的命令
    执行top,左上角就是开机时间

valgrind命令

发表于 2017-05-24 | 更新于 2019-05-06

$ valgrind --leak-check=full --show-reachable=yes --log-file=bump.log ./bump

1…345
呐喊

呐喊

真的勇士敢于直面惨淡的人生
45 日志
© 2021 呐喊
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Gemini v7.1.1
|