Fork me on GitHub
Suzf  Blog

Archive Linux

Bash Arrays

如果你使用的是类UNIX的shell 你可能对bash 的 数组不是很熟悉。虽然没有向P语言(Perl, Python, PHP)那样强大,但是它们往往是很有用处的。 Bash 数组只有索引编号,但是它们是单独的。也就是说你不必定义所有索引。整个数组可以通过封闭括号中的数组项分配:

arr=(Hello World)

单个项目可以用熟悉的数组语法被分配(除非你已经习惯了Basic或Fortran):

  arr[0]=Hello
  arr[1]=World

但是,当你要引用数组项它变得有点难看:

  echo ${arr[0]} ${arr[1]}

man 手册中的部分内容: 大括号是必需的,以避免与路径扩展冲突。

How-to use dot to draw flow chart

Graphviz (Graph Visualization Software的缩写) 是AT Labs-Research开发的图形绘制工具,他可以很方便的用来绘制结构化的图形网络,支持多种格式输出,生成图片的质量和速度都不错.Graphviz本身是开源的产品,下载可以到 这里,以及他的演示界面 Graphviz在windows上和Linux上都可以顺利运行.它的强大主要体现在“所思即所得"(WYTIWYG,what you think is what you get),这是和office的“所见即所得“(WYSIWYG,what you see is what you get)完全不同的一种方式。

graphviz中包含了众多的布局器:

  1. dot 默认布局方式,主要用于有向图
  2. neato 基于spring-model(又称force-based)算法
  3. twopi 径向布局
  4. circo 圆环布局
  5. fdp 用于无向图

graphviz的设计初衷是对有向图/无向图等进行自动布局,开发人员使用dot脚本定义图形元素,然后选择算法进行布局,最终导出结果。

使用graphviz的一般流程为:

  1. 定义一个图,并向图中添加需要的顶点和边
  2. 为顶点和边添加样式
  3. 使用布局引擎进行绘制

基础知识

graphviz包含3种元素,图,顶点和边。每个元素都可以具有各自的属性,用来定义字体,样式,颜色,形状等。下面是一些简单的示例,可以帮助我们快速的了解graphviz的基本用法。

图的属性

map_attributes

节点属性

node_attributes

边属性

node_attributes

Ubuntu 安装 Graphviz

sudo apt-get  install  graphviz -y

dot usage

dot -?
Usage: dot [-Vv?] [-(GNE)name=val] [-(KTlso)<val>] <dot files>
(additional options for neato)    [-x] [-n<v>]
(additional options for fdp)      [-L(gO)] [-L(nUCT)<val>]
(additional options for memtest)  [-m<v>]
(additional options for config)  [-cv]

 -V          - Print version and exit
 -v          - Enable verbose mode 
 -Gname=val  - Set graph attribute 'name' to 'val'
 -Nname=val  - Set node attribute 'name' to 'val'
 -Ename=val  - Set edge attribute 'name' to 'val'
 -Tv         - Set output format to 'v'
 -Kv         - Set layout engine to 'v' (overrides default based on command name)
 -lv         - Use external library 'v'
 -ofile      - Write output to 'file'
 -O          - Automatically generate an output filename based on the input filename with a .'format' appended. (Causes all -ofile options to be ignored.) 
 -P          - Internally generate a graph of the current plugins. 
 -q[l]       - Set level of message suppression (=1)
 -s[v]       - Scale input by 'v' (=72)
 -y          - Invert y coordinate in output

 -n[v]       - No layout mode 'v' (=1)
 -x          - Reduce graph

 -Lg         - Don't use grid
 -LO         - Use old attractive force
 -Ln<i>      - Set number of iterations to i
 -LU<i>      - Set unscaled factor to i
 -LC<v>      - Set overlap expansion factor to v
 -LT[*]<v>   - Set temperature (temperature factor) to v

 -m          - Memory test (Observe no growth with top. Kill when done.)
 -m[v]       - Memory test - v iterations.

 -c          - Configure plugins (Writes $prefix/lib/graphviz/config 
               with available plugin information.  Needs write privilege.)
 -?          - Print usage and exit

 

待续 ...

 

How-to: install couchbase on linux

上一篇我们介绍了 What is Couchbase Server 接下来我们来看如获取安装包以及简单地配置 官方站点: http://www.couchbase.com 文档归档: http://developer.couchbase.com/documentation-archive 有两个版本:企业版和社区版 这里以社区版为例

How-to Step by Step OpenLDAP Server Configuration on CentOS7

OpenLDAP轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。 它主要包括下述4个部分:

  • slapd - 独立LDAP守护服务
  • slurpd - 独立的LDAP更新复制守护服务
  • 实现LDAP协议的库
  • 工具软件和示例客户端

LDAP 服务器本质上是一个为只读访问而优化的非关系型数据库。它主要用做地址簿查询(如 email 客户端)或对各种服务访问做后台认证以及用户数据权限管控。(例如,访问 Samba 时,LDAP 可以起到域控制器的作用;或者 Linux 系统认证 时代替 /etc/passwd 的作用。)

Linux 下使用 strace 诊断疑难杂症

Strace是什么?
strace是一个用来跟踪系统调用的简易工具。它最简单的用途就是跟踪一个程序整个生命周期里所有的系统调用,并把调用参数和返回值以文本的方式输出。
当然它还可以做更多的事情:
strace可以过筛选出特定的系统调用。
strace可以记录系统调用的次数,时间,成功和失败的次数。
strace可以跟踪发给进程的信号。
strace可以通过pid附加到任何正在运行的进程上。
strace类似其他Unix系统上的truss,或者Sun's Dtrace

MySQL mysqldump 数据导出详解

介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具;它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明列出来。 语法: 默认不带参数的导出,导出文本内容大概如下:创建数据库判断语句-删除表-创建表-锁表-禁用索引-插入数据-启用索引-解锁表。
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

Hello Kafka

Kafka Setup

Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区、多副本、冗余,因此被广泛用于大规模消息数据处理应用。Kafka 支持Java 及多种其它语言客户端,可与Hadoop、Storm、Spark等其它大数据工具结合使用。

本教程主要介绍Kafka 在Centos 6上的安装和使用,包括功能验证和集群的简单配置。

kafka docs & download
-- http://kafka.apache.org/documentation.html
-- http://kafka.apache.org/downloads.html

1. 安装 zk & java
请参考 [译] zookeeper 入门教程

2. 运行zk
bin/zkServer.sh  start

3. 安装 kafka
下载 kafka 并配置

wget http://apache.fayea.com/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
tar xf kafka_2.11-0.9.0.1.tgz
mv kafka_2.11-0.9.0.1 /usr/loca/kafka

配置 server.properties 文件中的 zookeeper.connect,设置为 2 中的IP 和端口
创建多 broker

@[email protected][11:59:56][[email protected] kafka]#diff -ruN config/server.properties  config/server-1.properties |grep "^[[email protected]]"
--- config/server.properties  2016-02-12 08:37:25.000000000 +0800
+++ config/server-1.properties  2016-04-18 11:54:34.011797645 +0800
@@ -17,14 +17,14 @@
-broker.id=0
+broker.id=1
-#port=9092
+port=9093
@@ -57,7 +57,7 @@
-log.dirs=/tmp/kafka-logs
+log.dirs=/tmp/kafka-logs-1

4. 运行 kafka

bin/kafka-server-start.sh  -daemon config/server.properties
bin/kafka-server-start.sh  -daemon config/server-1.properties

停止

bin/kafka-server-stop.sh
pkill -9 -f config/server.properties

5. 创建Topic
创建一个名为“test”只有一个分区,只有一个副本的Topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 1 --topic lucy
Created topic "lucy".

如果你用的是Kafka 8.x之前版本,请用以下的命令创建topic

bin/kafka-create-topic.sh --zookeeper  localhost:2181 \
--replica 1 --partition 1 --topic lucy

运行list topic命令,可以看到Topic列表

bin/kafka-topics.sh --describe  --zookeeper localhost:2181
Topic:lucy  PartitionCount:1  ReplicationFactor:1 Configs:
Topic: lucy Partition: 0  Leader: 1 Replicas: 1 Isr: 1

6. 发送消息
kafka自带的一个命令行客户端,运行后可以输入消息,kafka会将其发送到kafka进群进行消息消费。默认情况下,每一行数据被作为一个消息进行发送。
接下来我们运行producer试试

^_^[12:02:21][[email protected] kafka]#bin/kafka-console-producer.sh --broker-list localhost:9092 --topic lucy
Hello Kafka
My name is jeffrey
This is test on lab.suzf.net

7. 启动消费者(consumer)
上面我们通过kafka自带的命令行输入了消息,那么我们现在启动消费者看看是否会接收到。

@[email protected][12:03:22][[email protected] kafka]#bin/kafka-console-consumer.sh  --zookeeper localhost:2181 --topic lucy --from-beginning
Hello Kafka
My name is jeffrey
This is test on lab.suzf.net
^CProcessed a total of 3 messages

可以看到消费者已经对我们上面输入的数据进行处理了.

8.  删除无用的topic

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test
Topic test is already marked for deletion.

bin/kafka-topics.sh --list --zookeeper localhost:2181
lucy
test - marked for deletion

并没有真正删除,如果要真正删除,配置 delete.topic.enable=true.

配置文件在kafka/config目录

vim config/server.properties
# Whether topic deletion should be allowed. Requires kafka >= 0.8.2
delete.topic.enable=true

# bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 1 --topic test2
Created topic "test2".

# bin/kafka-topics.sh --list --zookeeper localhost:2181
lucy
test - marked for deletion
test2

# bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test2
Topic test2 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
^_^[13:55:46][[email protected] kafka]#  bin/kafka-topics.sh --list --zookeeper localhost:2181
lucy
test - marked for deletion

[译] Moving a Volume Group to Another System

您可以将整个LVM卷组移动到另一个系统。建议您在执行此操作时使用 vgexport 和 vgimport 命令。

vgexport:使非活动卷组无法访问系统,它允许你分离物理卷。
vgimport:在执行vgexport命令使其禁用之后,再次使机器可以访问卷组。

一个系统卷组移动到另一个系统,请执行下列步骤:

1. 确保现在没有用户正在访问卷组中活动卷上的文件,然后卸载逻辑卷。

2. 使用vgchange命令的-a n 标记卷组为无效,以防止卷组上的任何进一步的活动。

3. 使用vgexport命令导出卷组。这可以防止由要从中删除它在系统被访问。

当您导出卷组后,在你执行pvscan命令时,物理卷将显示为导出卷组。如下面的例子。

# pvscan
PV /dev/sda1    is in exported VG myvg [17.15 GB / 7.15 GB free]
PV /dev/sdc1    is in exported VG myvg [17.15 GB / 15.15 GB free]
PV /dev/sdd1   is in exported VG myvg [17.15 GB / 15.15 GB free]
...

当系统下一次关机,就可以拔下构成卷组的磁盘,并将它们连接到新的系统。

4. 当这些磁盘被插入到新的系统之后, 使用 vgexport 命令导入,使得新的系统可以访问它。

5. 激活卷组 使用 vgchange -ay volune-group

6. 挂载文件系统,使其可用。

源文:Moving a Volume Group to Another System

 

dokuwiki 重置管理员密码

一直觉得如果写成系列的技术文章,用 wp 显得有点力不从心。最近 GitBook 也是不错的。
翻到一年多前,茫然想起自己曾经耍过 DokuWiki, 那么便拿出来耍耍吧。毕竟时间太久远了。
自己设置的密码已经抛在脑后了。也懒得想了,重置密码吧。简单粗暴有疗效。

后期会在网站中考虑 加入 wiki 或者 gitbooks, 欢迎小伙伴们前来围观。

dokuwiki 管理员默认用户名: admin
如果采用简单验证方法,用资料存储在文件中,第二列即为密码的 hash值.

cat conf/users.auth.php
# users.auth.php
# <?php exit()?>
# Don't modify the lines above
#
# Userfile
#
# Format:
#
# login:passwordhash:Real Name:email:groups,comma,seperated


lucy:$6$hdLEXRS9$X4lQKUDKoCnk9ubS.XPKR1:Lucy:[email protected]:admin,user



^_^[13:38:12][[email protected] tmp]#cat crypt_test.php 
<?php
// 设置密码
$password = 'yourpassword';

// 获取散列值,使用自动盐值
$hash = crypt($password);
echo "password: $password\n";
echo "hash: $hash\n";

?>

^_^[13:38:16][[email protected] tmp]php crypt_test.php 
password: yourpassword
hash: $1$rtfdScJg$uQh7Dl6bFFwgtI6iWDkcv.

将旧的hash 值替换为新的hash 就可以从新登录了。
同级目录下有 ./conf/acl.auth.php 文件是用来控访问权限的。