存档

‘linux’ 分类的存档

解决https在火狐浏览器报sec_error_unknown_issuer问题

2016年3月21日 3 条评论

有使用facebook的 canvas业务,相当于把自己的网站iframe嵌入到他们画板中,要求里面的域名全部是https的,我们申请了个*.domain.com 的证书,子域名全部可以用,在其他浏览器都浏览正常,然而在火狐上报证书不安全,错误代码:sec_error_unknown_issuer

但是想想我这是正规网站买的证书啊,怎么会认不到,google了吧,说是要加上ca bundle,购买证书的时候,证书厂商会给你个xx_bundle.crt的

阅读全文…

分类: linux 标签: ,

[转]Ext4,Ext3的特点和区别

2014年7月16日 没有评论

 

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

1. 与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。

2. 更大的文件系统和更大的文件。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。

3. 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。

4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。

5. 多块分配。 当 写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。

6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。

7. 快速 fsck。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。

8. 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。

9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。

10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。

11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。

12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。

13. 默认启用 barrier。 磁 盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 “mount -o barrier=0” 命令禁用该特性。)

分类: linux 标签: ,

Sublime Text 3 (Build 3059) license

2014年6月25日 1 条评论
 

今天在新装系统的电脑上安装了submit 3,遇到些问题记录下

这里有篇破解文档,有兴趣同学可以看看

10分钟破解Sublime Text 3 Build 3059/3061/306

 

license

 

下面直接给个license,用网上sublime text v2.x.keygen-lz0.exe 这个激活没搞成功,软件运行框没弹出来。

 

Package Control安装

sublime 3的package control的安装方式和sublime 2版本不同了,如果按老方法安装会提示

Traceback (most recent call last):
File “<string>”, line 1, in <module>
ImportError: No module named ‘urllib2’

打开命令执行面板输入(菜单栏-查看-显示面板)(快捷键 ctrl+`)

import urllib.request,os,hashlib; h = ‘7183a2d3e96f11eeadd761d777e62404’ + ‘e330c659d4bb41d3bdf022e94cab3cd0’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( ‘http://sublime.wbond.net/’ + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h)) if dh != h else open(os.path.join( ipp, pf), ‘wb’ ).write(by)

 

如果是sublime2 版本是输入

import urllib2,os,hashlib; h = ‘7183a2d3e96f11eeadd761d777e62404’ + ‘e330c659d4bb41d3bdf022e94cab3cd0’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( ‘http://sublime.wbond.net/’ + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), ‘wb’ ).write(by) if dh == h else None; print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h) if dh != h else ‘Please restart Sublime Text to finish installation’)

 

 

sublime插件安装

以Zen Coding为例,点击快捷键 Ctrl + Shift + P 输入 Install 点击回车, 输入 Emmet 再点击回车.

 

常用配置

3059的光标变得很粗的问题

将下列配置放在用户设置文件的最后面——记得给原来的最后一行末尾添加一个半角逗号。

“caret_extra_top”: 1,
“caret_extra_bottom”: 1,
“caret_extra_width”: 1,

 

Sublime Text快捷键:

  • Ctrl+Shift+P:打开命令面板
  • Ctrl+P:搜索项目中的文件
  • Ctrl+G:跳转到第几行
  • Ctrl+W:关闭当前打开文件
  • Ctrl+Shift+W:关闭所有打开文件
  • Ctrl+Shift+V:粘贴并格式化
  • Ctrl+D:选择单词,重复可增加选择下一个相同的单词
  • Ctrl+L:选择行,重复可依次增加选择下一行
  • Ctrl+Shift+L:选择多行
  • Ctrl+Shift+Enter:在当前行前插入新行
  • Ctrl+X:删除当前行
  • Ctrl+M:跳转到对应括号
  • Ctrl+U:软撤销,撤销光标位置
  • Ctrl+J:选择标签内容
  • Ctrl+F:查找内容
  • Ctrl+Shift+F:查找并替换
  • Ctrl+H:替换
  • Ctrl+R:前往 method
  • Ctrl+N:新建窗口
  • Ctrl+K+B:开关侧栏
  • Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身
  • Ctrl+F2:设置/删除标记
  • Ctrl+/:注释当前行
  • Ctrl+Shift+/:当前位置插入注释
  • Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的
  • Ctrl+Shift+A:选择当前标签前后,修改标签用的
  • F11:全屏
  • Shift+F11:全屏免打扰模式,只编辑当前文件
  • Alt+F3:选择所有相同的词
  • Alt+.:闭合标签
  • Alt+Shift+数字:分屏显示
  • Alt+数字:切换打开第N个文件
  • Shift+右键拖动:光标多不,用来更改或插入列内容
  • 鼠标的前进后退键可切换Tab文件
  • 按Ctrl,依次点击或选取,可需要编辑的多个位置
  • 按Ctrl+Shift+上下键,可替换行

 

插件推荐

Sublime CodeIntel

代码自动提示

Bracket Highlighter

类似于代码匹配,可以匹配括号,引号等符号内的范围。

附录:

按住电脑键盘的 alt键, 即可出现菜单栏,不过再按一下alt键它又消失了,所以在它出现时 选择 view – show menu 即可将其固定住

再推荐一篇介绍插件的文章 http://www.oschina.net/translate/20-powerful-sublimetext-plugins

 

分类: linux 标签: ,

安装第三方库出现 Python version 2.7 required, which was not found in the registry

2014年3月12日 没有评论

 

分类: linux 标签:

如果你启动jira的时候出现SEVERE: StandardServer.await: create[8005]:

2014年3月7日 没有评论

如果你启动tomcat 的时候出现 SEVERE: StandardServer.await: create[8005]:,那你就要查看你本地的hosts文件, 或者ping   localhost  是不是指向127.0.0.1  

如果不是加下下面这个到hosts文件

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

分类: linux 标签:

Monitor name :UNIX Resources. Cannot initialize the monitoring

2013年9月29日 没有评论

转载
简述:LoadRunner监控Linux资源时弹出如下错误: Monitor name :UNIX Resources. Cannot initialize the monitoring on 192.168.52.189. Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility for this verification). Detailed error: RPC: Failed to create RPC client.
RPC-TCP: Failed to establish RPC server address.
上述问题的实质是Linux系统中未安装rpc.rstatd,服务未开启的原因造成。
于是接下来就验证我们的推测:
首先查看rpc.rstatd是否安装
[root@localhost bin]# whereis rpc.rstatd
发现系统未安装rpc.rstatd
备注:rstatd Rstat协议允许网络上的用户获得同一网络上各机器的性能参数。

1. 首先在Linux服务器上安装rpc.rstatd服务,这里用的是rpc.rstatd-4.0.1.tar.gz安装包,如果没有可以到该网址上去下载:http://sourceforge.net/projects/rstatd
2. 执行安装包:
tar -xzvf  rpc.rstatd-4.0.1.tar.gz   //解压rcp.rstatd
cd  rpc.rstatd-4.0.1            //进入到rpc.rstatd目录中
./configure                  //配置rc.rstatd的安装,以下我的是按照默认方式的

make                      //编译rc.rstatd  
make install               //安装
3. 重新启动xinetd:  /etc/init.d/xinetd restart;
4. 修改etc/xinetd.d 目录下的3个conf(rlogin,rsh,rexec)文件中的disable均设置为no,(如果系统中没有这三个文件,可以yum安装下rsh-server)
cd /etc/xinetd.d   //进入到etc/xinetd.conf目录中
Vi    rlogin //编辑disable=no,保存
Vi    rsh    //编辑disable=no,保存
Vi    rexec //编辑disable=no,保存
5. 启动rpc.rstatd并查看是否真正启动该服务:
rpc.rstatd                //启动rpc.rstatd进程 rpcinfo –p              //执行此命令检查rpc服务的状态
[root@localhost xinetd.d]# rpcinfo -p
结果如下:

从上图中可以看出rpc.rstatd服务已经启动
6. 启动LoadRunner并监控Linux系统资源:
在controller中,将System resource Graphs中的Unix resources拖到右侧的监控区域中,并单击
鼠标右键选择“Add Measurements”,在弹出的对话框中输入被监控的linux系统的IP地址,然后选择需
要监控的性能指标,并点击“确定”,出现如下结果:
Monitor name :UNIX Resources. Cannot initialize the monitoring on 10.10.15.62.
Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility for this verification).
Detailed error: RPC: Failed to create RPC client.
RPC-TCP: Failed to establish RPCserveraddress.
RPC-TCP: Failed to communicate with the portmapper on host ‘10.10.15.62’.
RPC: RPC call failed.
RPC-TCP: recv()/recvfrom() failed.
RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-47190]
检查原因,发现是Linux系统中的防火墙开启了并且阻挡了LoadRunner监控Linux系统的资源,因此要将
防火墙关闭。
7.关闭防火墙: [root@localhost ~]# /etc/init.d/iptables stop;
8. 重复步骤6,成功后结果如下图所示:

通过上面的实例可以得知,有些时候防火墙也会阻止一些服务或功能,只要关闭它即可。

分类: linux 标签:

linux下dd命令详解

2013年7月15日 没有评论

linux下dd命令详解
名称: dd
使用权限: 所有使用者

manpage 定义: convert and copy a file

使用方式:
dd [option]

dd –help

info dd

dd –version

输入或输出
dd if=[STDIN] of=[STDOUT]

强迫输入或输出的Size为多少Bytes
bs: dd -ibs=[BYTE] -obs=[SIZE]

语法:dd [选项]

if =输入文件(或设备名称)。

of =输出文件(或设备名称)。

ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。

skip = blocks 跳过读入缓冲区开头的ibs*blocks块。

obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。

bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。

cbs = byte 一次转换bytes字节。

count=blocks 只拷贝输入的blocks块。

conv = ASCII 把EBCDIC码转换为ASCIl码。

conv = ebcdic 把ASCIl码转换为EBCDIC码。

conv = ibm 把ASCIl码转换为alternate EBCDIC码。

conv = block 把变动位转换成固定字符。

conv = ublock 把固定位转换成变动位。

conv = ucase 把字母由小写转换为大写。

conv = lcase 把字母由大写转换为小写。

conv = notrunc 不截短输出文件。

conv = swab 交换每一对输入字节。

conv = noerror 出错时不停止处理。

conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

noerror
出错时不停止。

notrunc
不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

—————————————————————-

认识下两个”伪文件”

/dev/null

位桶文件(bit bucket),就是我们常说的空文件。是一个输出设备。

  任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。把/dev/null看作”黑洞”. 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

/dev/zero

是一个输入设备,你可你用它来初始化文件。

    该设备无穷尽地提供0(是ASCII 0 就是NULL),可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入NULL。
   像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.

————————————————————–

使用dd来测试硬盘读写速度
dd只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确。
 
读性能测试
# time dd  iflag=direct,nonblock  if=/dev/sda2 of=/dev/null bs=8k count=8388608

   因为/dev/sda2是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

写测试
# time dd oflag=direct,nonblock if=/dev/zero f=/opt/iotest bs=8k count=8388608 
    因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。 
读写测试
# time dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda2 f=/opt/iotest bs=8k count=8388608  
 
  注:bs是一次io读的规模,理论上bs越大,所测得性能越高
      count是读多少个”bs”,也可以写成count=16G
     规避掉文件系统cache,直接读写,不使用buffer cache

iflag=direct,nonblock

oflag=direct,nonblock

iflag=cio

oflag=cio

direct 模式就是把写入请求直接封装成io 指令发到磁盘

非direct 模式,就把数据写入系统缓存,然后就认为io 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘

分类: linux 标签:

glibc 和glibc-common版本冲突解决办法

2013年7月10日 没有评论
背景:
编译安装一个软件的时候,提示 configure: error: no acceptable C compiler found in $PATH ,一看应该知道应该是gcc没装,那准备yum安装gcc
yum安装gcc的时候报glibc 和glibc-common的版本冲突,centos6.3 x64 系统里面glibc-common有2个版本,glibc-common-2.12-1.107和glibc-common-2.12-1.80(至于为啥有2个版本的glibc-common无法追溯了),看报错,说要升级glibc的版本为 glibc-2.12-1.107.el6.x86_64
 –> Running transaction check
—> Package glibc.x86_64 0:2.12-1.80.el6 will be updated
–> Processing Dependency: glibc = 2.12-1.80.el6 for package: glibc-common-2.12-1.80.el6.x86_64
—> Package kernel-headers.x86_64 0:2.6.32-358.11.1.el6 will be installed
–> Finished Dependency Resolution
Error: Package: glibc-common-2.12-1.80.el6.x86_64 (@anaconda-CentOS-201207061011.x86_64/6.3)
Requires: glibc = 2.12-1.80.el6
Removing: glibc-2.12-1.80.el6.x86_64 (@anaconda-CentOS-201207061011.x86_64/6.3)
glibc = 2.12-1.80.el6
Updated By: glibc-2.12-1.107.el6.x86_64 (base)
glibc = 2.12-1.107.el6
You could try using –skip-broken to work around the problem
** Found 3 pre-existing rpmdb problem(s), ‘yum check’ output follows:
glibc-common-2.12-1.107.el6.x86_64 is a duplicate with glibc-common-2.12-1.80.el6.x86_64
glibc-common-2.12-1.107.el6.x86_64 has missing requires of glibc = (‘0’, ‘2.12’, ‘1.107.el6’)
libgcc-4.4.7-3.el6.x86_64 is a duplicate with libgcc-4.4.6-4.el6.x86_64
下载glibc 107版本。
显示依赖libfreebl3.so,(其他依赖比如glibc-common我们已经装过了)
那继续下载libfreebl3.so
他依赖libc.so.6 正好就是上面glibc
下载这2个软件后,同时安装这2个软件
然后查看下现在glibc 和glibc-common 的版本已经一致了,目前在yum 安装gcc就正常了。
分类: linux 标签:

vim操作大全

2013年5月28日 没有评论

Linux下命令行模式中打开vim的方式

vim FileName #打开文件 FileName,并将光标置于第一行首
vim +n FileName #打开文件 FileName,并将光标置于第 n 行首
vim + FileName #打开文件 FileName,并将光标置于最后一行
vim + /pattern File #打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处
vim –r FileName #在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileName
vim File1 … Filen #打开多个文件,依次对之进行编辑
vim -o File1 … Filen #用水平分隔的方式打开多个文件然后进行编辑
vimdiff filename1 filename2 #用垂直分割的方式打开两个文件 filename1,filename2 然后显示出两个文件的不同的比较

插入数据基本操作

行操作:
I #在光标所在行首插入文本
A #在光标所在行尾添加文本
o(open) #在光标所在行下面添加一行
O #在光标所在行上面添加一行
nS #从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,并进入编辑模式
:r filename #在编辑数据中读入一个文件内容数据,并把这些数据添加到光标所在行后面
字符操作:
i(insert) #在光标前插入文本
a(append) #在光标后插入文本
r(Replace) #替换光标所在处字符,结束替换
R #替换多个字符,以按下 [Esc] 键标志替换结束
ns #从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个字符,并进入编辑模式
改变某区域:
可以重复的:
[c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
c: #表示改变操作
重复操作次数: #num 表示操作重复次数
操作区域选择:
h #改变光标前一个字符
l #改变光标所在处的字符
j #改变本行与下一行
k #改变本行与上一行
w #改变光标开始到下一个单词词首处
b #改变光标开始到上一个单词词首处
e #改变光标开始到这个单词的结尾处
( #改变光标开始到句子结束处
) #改变光标开始到句子开始处
{ #改变光标开始到段落开始处
} #改变光标开始到段落结束处
$ #改变从光标开始处到行尾处
G #改变从光标所在行到行尾处
/word #改变从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
?word #改变从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
tc #改变从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )
Tc #改变从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )
fc #改变从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )
Fc #改变从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )
c #改变从光标开始到标记 c 这个位置
不可重复的:
[c]+[ 0 / ^ / H / L]
c: #表示改变操作
操作区域选择:
0 #改变从光标所在处到某一行的开始位置
^ #改变到某一行的第一个字符位置(不包括空格或TAB字符)
L #改变直到屏幕上最后一行的内容
H #改变直到屏幕上第一行的内容
[c]+[i]+[ { / } / ( / ) / ” / ‘ ]
c: #表示改变操作
i: #表示 in 即在里面的意思
操作区域选择:
{ #改变在 {} 中内容( 要求光标在 {} 内 )
} #改变在 {} 中内容( 要求光标在 {} 内 )
[ #改变在 [] 中内容( 要求光标在 [] 内 )
] #改变在 [] 中内容( 要求光标在 [] 内 )
( #改变在 () 中内容( 要求光标在 {} 内 )
) #改变在 () 中内容( 要求光标在 () 内 )
” #改变在 “” 中内容( 要求光标在 “” 内 )
‘ #改变在 ” 中内容( 要求光标在 ” 内 )

保存/退出

:q #退出 vim 返回到 shell,若有修改未被保存,vi 在末行给出提示信息并不退出 vim 到 shell
:q! #退出 vim 返回到 shell,放弃未保存的修改
:wq #保存后退出,无论文件是否有修改,都更新文件的修改时间
😡 #保存后退出,若文件没有修改的话,不更新文件的修改时间
:w #将编辑的数据写入硬盘中
:w! #若文件属性为”只读”时,强制写入该文件
:w filename #写入当前文件到 filename 文件
ZZ #若文件没有更动,则不保存离开,若文件被更动过,则保存后离开
:n1,n2 w filename #将 n1 到 n2 的内容保存到 filename 这个文件中

显示与取消行号,制表符,结尾标志位
:set nu #显示行号,设置之后,会在没一会的前缀显示该行的行号
:set nonu #与 :set nu 相反,为取消行号
:set list #显示制表符(^I)与行尾标志位($)
:set nolist #与 :set list 相反,为取消显示制表符和结尾标志符

光标移动方法

位移
字符操作:
nh / n← #向左移动 n 字符,无 n 移动一字符
nl / n→ #向右移动 n 字符,无 n 移动一字符
n #n 表示“数字”,光标会向右移动这一行 n 个字符.
0 #这是数字 “0”:移动到这一行的最前面字符处
^ #移动到这一行的最开始字符处

行操作:
nj / n↓ #向下移动 n 行,无 n 移动一行
nk / n↑ #向上移动 n 行,无 n 移动一行
[Ctrl+p] #光标上移一行
[Ctrl+n] #光标下移一行
n+ #光标下移到 n 行头,若没有 n 光标移到下行行头
n- #光标上移到 n 行头,若没有 n 光标移到上行行头
n$ #光标下移到 n 行尾,若没有 n 则移动到本行行尾
n_ #向下移动 n-1 行,并光标移动到非空白行首
H #光标移动到这个屏幕的最上方哪一行
M #光标移动到这个屏幕的中央哪一行
L #光标移动到这个屏幕的最下方哪一行
nG #n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行
gg #移动到这个文件的第一行,相当于 1G
n #向下移动 n 行,无 n 移动一行

跳转
W / w #光标右移一个字至字首.
B / b #光标左移一个字至字首.
E / e #光标右移一个字至字尾.
( #光标移到上个句子句首.
) #光标移到下个句子句首.
{ #光标移到上个段落句首.
} #光标移到下个段落句首.
fc #光标跳转到本行下一个字符 c 处( c 指代任意字符 )
Fc #光标跳转到本行上一个字符 c 处( c 指代任意字符 )
tc #光标跳转到本行下一个字符 c 的前一个字符处( c 指代任意字符 )
Tc #光标跳转到本行上一个字符 c 的后一个字符处( c 指代任意字符 )
/word #光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
?word #光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词
. #跳转至上次编辑位置
c #将光标转移到书签 c 处( c 为任意字符 )

下面两个与 / 与 ? 组合着用:
n #下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只会在高亮字符中切换)
N #上一个匹配(同上)

与 f/F 配合使用的命令:
; #重复上一个f命令

复原与重做

[Ctrl+f] #屏幕“向下”移动一页,相当于[Page Down]按键
[Ctrl+b] #屏幕“向上”移动一页,相当于[Page Up]按键
[Ctrl+d] #屏幕“向下”移动半页
[Ctrl+u] #屏幕“向上”移动半页
[Ctrl+e] #屏幕向下滚一行
[Ctrl+y] #屏幕项上滚一行
nz #将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶
:$ #屏幕滚到文章最后一行
:0 #屏幕滚到文章最开始一行

复制/删除/粘贴
总述
字符操作:
nx #向后删除 n 个字符,若没有 n 向后删除一个字符
nX #向前删除 n 个字符,若没有 n 向前删除一个字符
d0 #那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
d$ #删除游标所在处,到该行的最后一个字符
y0 #复制光标所在的那个字符到该行行首的所有数据
y$ #复制光标所在的那个字符到该行行尾的所有数据
p #将已复制的数据在光标下一列贴上
P #将已复制的数据在光标上一列贴上

行操作:
ndd #删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列
dnG #删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据
nyy #复制光标所在的向下 n 行,若无 n 复制游标所在的那一行
ynG #复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据
J #将光标所在列与下一列的数据结合成同一列

删除某区域:
可以重复的:
[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
d: #表示删除操作
重复操作次数: #num 表示操作重复次数
操作区域选择:
h #删除光标前一个字符
l #删除光标所在处的字符
j #删除本行与下一行
k #删除本行与上一行
w #删除光标开始到下一个单词词首处
b #删除光标开始到上一个单词词首处
e #删除光标开始到这个单词的结尾处
( #删除光标开始到句子结束处
) #删除光标开始到句子开始处
{ #删除光标开始到段落开始处
} #删除光标开始到段落结束处
$ #删除从光标开始处到行尾处
G #删除从光标所在行到行尾处
/word #删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用 正则表达式 )
?word #删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
tc #删除从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )
Tc #删除从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )
fc #删除从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )
Fc #删除从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )
c #删除从光标开始到标记 c 这个位置
不可重复的:
[d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / ” / ‘]
d: #表示删除操作
操作区域选择:
0 #删除从光标所在处到某一行的开始位置
^ #删除到某一行的第一个字符位置(不包括空格或TAB字符)
L #删除直到屏幕上最后一行的内容
H #删除直到屏幕上第一行的内容
[d]+[i]+[ { / }[ / ]( / ) / ” / ‘]
d: #表示删除操作
i: #表示 in 即在里面的意思
操作区域选择:
{ #删除在 {} 中内容( 要求光标在 {} 内 )
} #删除在 {} 中内容( 要求光标在 {} 内 )
[ #删除在 [] 中内容( 要求光标在 [] 内 )
] #删除在 [] 中内容( 要求光标在 [] 内 )
( #删除在 () 中内容( 要求光标在 {} 内 )
) #删除在 () 中内容( 要求光标在 () 内 )
” #删除在 “” 中内容( 要求光标在 “” 内 )
‘ #删除在 ” 中内容( 要求光标在 ” 内 )

复制某区域:
可以重复的:
[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
y: #表示复制操作
重复操作次数: #num 表示操作重复次数
操作区域选择:
h #复制光标前一个字符
l #复制光标所在处的字符
j #复制本行与下一行
k #复制本行与上一行
w #复制光标开始到下一个单词词首处
b #复制光标开始到上一个单词词首处
e #复制光标开始到这个单词的结尾处
( #复制光标开始到句子结束处
) #复制光标开始到句子开始处
{ #复制光标开始到段落开始处
} #复制光标开始到段落结束处
$ #复制从光标开始处到行尾处
G #复制从光标所在行到行尾处
/word #复制从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
?word #复制从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
tc #复制从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )
Tc #复制从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )
fc #复制从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )
Fc #复制从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )
c #复制从光标开始到标记 c 这个位置
不可重复的:
[y]+[ 0 / ^ / H / L]
y: #表示复制操作
操作区域选择:
0 #复制从光标所在处到某一行的开始位置
^ #复制到某一行的第一个字符位置(不包括空格或TAB字符)
L #复制直到屏幕上最后一行的内容
H #复制直到屏幕上第一行的内容
[y]+[i]+[ { / } / ( / ) / ” / ‘ ]
y: #表示复制操作
i: #表示 in 即在里面的意思
操作区域选择:
{ #复制在 {} 中内容( 要求光标在 {} 内 )
} #复制在 {} 中内容( 要求光标在 {} 内 )
[ #复制在 [] 中内容( 要求光标在 [] 内 )
] #复制在 [] 中内容( 要求光标在 [] 内 )
( #复制在 () 中内容( 要求光标在 {} 内 )
) #复制在 () 中内容( 要求光标在 () 内 )
” #复制在 “” 中内容( 要求光标在 “” 内 )
‘ #复制在 ” 中内容( 要求光标在 ” 内 )

高亮显示

/word #将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
?word #将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词
# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
:nohl #取消高亮显示

行移动操作

>> #将当前行右移一个单位
<< #将当前行左移一个单位(一个tab符)
== #自动缩进当前行

书签

mc #把当前位置记录为书签 c ( c 为任意字符 )
#当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效
`c #将光标转移到书签 c 处( c 为任意字符 )

十六进制查看文本内容

%!xxd #按十六进制查看当前文件
%!xxd -r #从十六进制返回正常模式

自动补全

[Ctrl+n] #自动补全(前提是以前打过的单词)
[Ctrl+p] #自动补全(前提是以前打过的单词)

标记文本

进入标记文本模式
v #进入标记文本模式,单字符模式
V #进入标记文本模式,行模式
[ctrl+v] #进入标记文本模式,列模式,类似于UE的列模式

对标记文本模式中区域选择
aw #选中一个单词,含单词后的空格
as #选中一个句子,含句号后的空格
ap #选中一个段落,含段落后的空格
ab #选中()括号中的所有内容,含()
aB #选中{}括号中的所有内容,含{}
iw #选中一个单词,不含单词后的空格
is #选中一个句子,不含句号后的空格
ip #选中一个段落,不含段落后的空格
ib #选中()括号中的内容,不含()
iB #选中{}括号中的内容,不含{}
除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]

移动标记文本模式中光标位置
o #光标在选择区域中的对角线之间的跳转
O #光标在选择区域中的横纵之间的跳转
当在 V 与 [ctrl]+[v] 模式中
我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些)

对标记文本模式中数据操作
~ #将选中块中的内容大小写翻转
u #将选中块中的内容转成小写
U #将选中块中的内容转成大写
y #复制选中块中的内容
d/D/x/X #删除选中块中的内容

窗口操作

:vne [filename] #打开文件 filename,并把光标所在窗口沿横向分为两个窗口
:sp [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:S [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:new [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
************************************************************
在 new 前面可以加的参数:
leftabove #当前窗口的左上方
aboveleft #同上
rightbelow #当前窗口的右下方
belowright #同上
topleft #整个 Vim 窗口的最上面或者最左边
botright #整个 Vim 窗口的最下面或者最右边
************************************************************
:only #关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败
:close #关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败
:vertical diffsplit [file] #纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:diffsplit [file] #横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:res -n #窗口高度减小n
:res +n #窗口高度增大n
[ctrl+w]+[=] #窗口等宽
[ctrl+w]+[h] #将光标移动到左方的窗口
[ctrl+w]+[←] #将光标移动到左方的窗口
[ctrl+w]+[l] #将光标移动到右方的窗口
[ctrl+w]+[→] #将光标移动到右方的窗口
[ctrl+w]+[j] #将光标移动到下方的窗口
[ctrl+w]+[↓] #将光标移动到下方的窗口
[ctrl+w]+[k] #将光标移动到上方的窗口
[ctrl+w]+[↑] #将光标移动到上方的窗口
[ctrl+w]+[t] #将光标移动到最上方的窗口
[ctrl+w]+[b] #将光标移动到最下方的窗口
[ctrl+w]+[ctrl+r] #将光标所在窗口下移
[ctrl+w]+[q] #退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q
[ctrl+w]+[+] #扩大所在窗口
[ctrl+w]+[-] #缩小所在窗口

对所有窗口执行命令

:qall #退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的
:wall #保存所有修改过的窗口
:wqall #保存所有修改过的窗口并关闭,然后退出 vim
:qall! #强制退出所有窗口,然后退出 vim

多档案编辑

:n #编辑下一个档案
:N #编辑上一个档案
:files #列出目前这个 vim 的开启的所有档案

执行 shell 命令

:sh #打开 shell,可执行shell命令,输入exit退出shell返回到vim
:!cmd #直接执行 shell ( cmd 表示为任意 shell 命令 )

命令行下行操作

:n1,n2 co n3 #将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下
:n1,n2 m m3 #移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下
:n1,n2 d #删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除
:n1,n2 y #复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制
:[range]s/{pattern}/{string}/[flag] [count] #字符替换
************************************************************
格式说明:
range #表示行数
% #表示所有行
n1,n2 #表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处
s #表示substitution,替换的意思
pattern #表示被替换的字符串
string #表示替换的字符串
flag #表示标志,取值g,i,c等
g #表示global,全部
i #表示ignore,忽略大小写
c #表示confirm,一个一个交互确认替换
count #表示从当前行到接下来的第几行,表示范围
**************************************************************

 

 

 

分类: linux 标签:

Mediawiki禁止游客编辑

2013年1月4日 没有评论

以下代码增加的位置:LocalSettins.php
因为require_once( “includes/DefaultSettings.php” )中初始化过,所以下面语句必须放在此语句之后。

禁止新用户注册
在LocalSettings.php中加入:
#Prevent new user registrations
$wgWhitelistAccount = array ( “user” => 0, “sysop” => 1, “developer” => 1 );
此时用户无法自助注册。管理员可以到登录页面(Special:UserLogin)里,输入一个用户名和email,然后点击“by email”,系统创建帐号并将随机密码发送到指定email里。

阅读全文…

分类: linux 标签:

[转]使用wget下载需要用户名和密码访问的网站资源

2012年12月2日 没有评论

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:

(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
(4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
(5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的;

wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
1、下载整个http或者ftp站点。
wget http://place.your.url/here
这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。

wget -r http://place.your.url/here
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。

要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。

2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget -c http://the.url.of/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。

3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)

4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget -m –reject=gif http://target.web.site/subdirectory
表示下载http://target.web.site/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,–reject=LIST拒绝接受的文件类型。

5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。

6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
这两个参数。
使用参数–proxy=on/off 使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。

附录:

命令格式:
wget [参数列表] [目标软件、网页的网址]

-V,–version 显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个 “.wgetrc”命令

-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;

-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O –output-document=FILE下载文件保存为别的文件名
-nc, –no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理

-nd,–no-directories 不建立目录
-x,–force-directories 强制建立目录

–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码

-r,–recursive 下载整个网站、目录(小心使用)
-l,–level=NUMBER 下载层次

-A,–accept=LIST 可以接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST可以接受的域名
–exclude-domains=LIST拒绝的域名
-L,–relative 下载关联链接
–follow-ftp 只下载FTP链接
-H,–span-hosts 可以下载外面的主机
-I,–include-directories=LIST允许的目录
-X,–exclude-directories=LIST 拒绝的目录

中文文档名在平常的情况下会被编码, 但是在 –cut-dirs 时又是正常的,
wget -r -np -nH –cut-dirs=3 ftp://host/test/
测试.txt
wget -r -np -nH -nd ftp://host/test/
%B4%FA%B8%D5.txt
wget “ftp://host/test/*”
%B4%FA%B8%D5.txt

由於不知名的原因,可能是为了避开特殊档名, wget 会自动将抓取档名的部分用 encode_string 处理过, 所以该 patch 就把被 encode_string 处理成 “%3A” 这种东西, 用 decode_string 还原成 “:”, 并套用在目录与档案名称的部分,decode_string 是 wget 内建的函式。

转载自:http://jythoner.iteye.com/blog/354221

分类: linux 标签:

CentOS 6.x 简单部署NFS服务器

2012年12月2日 没有评论

nfs 服务器端(192.168.100.100)

我想把我的data 目录共享出去,只能让192.168.100.101来挂载

vim /etc/exports 内容如下

备注:/date 表示nfs共享的目录 如果想192.168.100.0-192.168.100.254区间的IP都可以访问,则改为192.168.100.0/24,如果访问权限只让root访问则使用no_root_squash

 客户端配置(192.168.100.101)

开始挂载

排错

解决方法如下

修改如下应该是NFS V4的问题,试试以下方法:
1. 在client上: mount -t nfs -o vers=3 192.168.100.100:/data /data
2. 在NFS server上:
vi /etc/sysconfig/nfs, 添加:
RPCNFSDARGS=”–no-nfs-version 4″
service nfs restart

然后把nfs rpcbind 服务都重启一下
客户端执行
mount -t nfs -o vers=3 192.168.100.100:/data /data 就挂载成功了
进入到目录就可以看到服务器端共享出来的文件了

分类: linux 标签:

[转]shell 管道命令(pipe)使用及与shell重定向区别

2012年11月12日 没有评论
  • 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard
  • error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input.

管道命令使用说明:

  • 先看下下面图:

command1正确输出,作为command2的输入 然后comand2的输出作为,comand3的输入 ,comand3输出就会直接显示在屏幕上面了。通过管道之后:comand1,comand2的正确输出不显示在屏幕上面

注意:

1、管道命令只处理前一个命令正确输出,不处理错误输出
2、管道命令右边命令,必须能够接收标准输入流命令才行。

作为接收标准输入的命令才可以用作管道右边。否则传递过程中数据会抛弃。 常用来作为接收数据,管道命令有:grep,sed,awk,cut,head,top,less,more,wc,join,sort,split 等等,都是些文本处理命令
管道命令与重定向区别

1    左边的命令应该有标准输出 | 右边的命令应该接受标准输入
左边的命令应该有标准输出 > 右边只能是文件
左边的命令应该需要标准输入 < 右边只能是文件

2、管道触发两个子进程执行”|”两边的程序;而重定向是在一个进程内执行
这些都是网上总结很多的,其实只要多加清楚用法,也一定有自己的一份不同描述。

 

转自:http://hi.baidu.com/bpdsnail/item/9381df082acad0c89157184d
分类: linux 标签:

把语言环境变量改为英文

2012年11月9日 没有评论

把语言环境变量改为英文

将Ubuntu系统语言环境改为英文的en_US.UTF-8

查看当前系统语言环境

编辑配置文件,将zh_US.UTF-8改为en_US.UTF-8,zh改为en

继续查看更改后的系统语言变量,如果出现下列错误,说明没安装en_US的local

查看系统内安装的locale

看吧,没装en_US.UTF-8 安装en_US.UTF-8

查看,应该一切正常了。

分类: linux 标签:

perl python ruby 或者本地时间方法

2012年9月21日 没有评论

取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方
文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年到现在时间相隔的时间。

你可以试下下面的方式来取得当前时间的时间戳:
import time
print time.time()
输出的结果是:
1279578704.6725271

但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来处理:
time.localtime(time.time())
用time.localtime()方法,作用是格式化时间戳为本地的时间。
输出的结果是:
time.struct_time(tm_year=2010, tm_mon=7, tm_mday=19, tm_hour=22, tm_min=33, tm_sec=39, tm_wday=0, tm_yday=200, tm_isdst=0)

现在看起来更有希望格式成我们想要的时间了。
time.strftime(‘%Y-%m-%d’,time.localtime(time.time()))

最后用time.strftime()方法,把刚才的一大串信息格式化成我们想要的东西,现在的结果是:
2010-07-19

time.strftime里面有很多参数,可以让你能够更随意的输出自己想要的东西:
下面是time.strftime的参数:
strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

—————————-  华丽的分割线 ———————–

perl 获取本地时间

perl有两个取得时间的函数:localtime和gmtime

两个函数的用法一样,区别在于localtime为取得本地时间, gmtime格林威治时间。

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

其中:
$sec代表秒数[0,59]
$min代表分数[0,59]
$hour代表小时数[0,23]
$mday代表是在这个月的第几天[1,31]
$mon代表月数[0,11],要将$mon加1之后,才能符合实际情况。
$year从1900年算起的年数,所以要获得当前年就需要在$year的基础上加上1900
$wday从星期六算起,代表是在这周中的第几天[0-6]
$yday从一月一日算起,代表是在这年中的第几天[0,364]
$isdst只是一个flag

下面是一个获取当前系统时间的子函数:

sub getTime
{
#time()函数返回从1970年1月1日起累计秒数
my $time = shift || time();

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);

$mon ++;
$sec  = ($sec<10)?”0$sec”:$sec;#秒数[0,59]
$min  = ($min<10)?”0$min”:$min;#分数[0,59]
$hour = ($hour<10)?”0$hour”:$hour;#小时数[0,23]
$mday = ($mday<10)?”0$mday”:$mday;#这个月的第几天[1,31]
$mon  = ($mon<9)?”0″.($mon+1):$mon;#月数[0,11],要将$mon加1之后,才能符合实际情况。
$year+=1900;#从1900年算起的年数

#$wday从星期六算起,代表是在这周中的第几天[0-6]
#$yday从一月一日算起,代表是在这年中的第几天[0,364]
# $isdst只是一个flag
my $weekday = (‘Sun’,’Mon’,’Tue’,’Wed’,’Thu’,’Fri’,’Sat’)[$wday];
return { ‘second’ => $sec,
‘minute’ => $min,
‘hour’   => $hour,
‘day’    => $mday,
‘month’  => $mon,
‘year’   => $year,
‘weekNo’ => $wday,
‘wday’   => $weekday,
‘yday’   => $yday,
‘date’   => “$year$mon$mday”
};
}

通过下面的方法调用:

my $date = &getTime();#获取当前系统时间的Hash
my $ymd = $date->{date};#获取yyyymmdd这样的日期
my $year=$date->{year};#获取年
my $month=$date->{month};#获取月
my $day=$date->{day};#获取日

获取时分秒类似。

 

————-  ruby 获取时间 —————-

Ruby时间time用法:
t = Time.now
puts t.strftime(“%Y-%m-%d %H:%M:%S”)
资料:
转:Ruby中处理时间和日期
Ruby中处理时间和日期

所有strftime方法中可用的格式化符号:
=====================================================
%a 星期的缩写,如Wed
%A 星期的全称,如Wednesday
%U 本星期在全年中所属的周数
%W
%H 小时(24小时制)
%M 分钟
%S 秒
%I 小时(12小时制)
%p PM 或 AM

%b 月份的缩写,如 Jan
%B 月份的全称,如 January
%c 本地日期和时间,如 06/14/07 16:43:49
%d 日期 (1..31)
%j 本日在一年中所属的天 (1..366)
%m 月份 (1..12)
%w 星期的数字形式 (0..6)
%x 本地日期,如 06/14/07
%X 本地时间,如 16:43:49
%y 2位的年份表示,如07
%Y 4位的年份表示,如2007
%Z 时区名,如”中国标准时间”
%% 字面符号%

我们可以使用Time类来生成一个当前时间的对象:
t = Time.new

t = Time.now

Time类有类方法mktime(同义方法是local方法)来根据传入的参数生成时间对象,并且它使用的是当前的时区:
t1 = Time.mktime(2001) # January 1, 2001 at 0:00:00
t2 = Time.mktime(2001,3)
t3 = Time.mktime(2001,3,15)
t4 = Time.mktime(2001,3,15,21)
t5 = Time.mktime(2001,3,15,21,30)
t6 = Time.mktime(2001,3,15,21,30,15) # March 15, 2001 9:30:15 pm
Time.gm(同义方法是Time.utc)方法基本上和上面的mktime用法相同,但它使用的是GMT或UTC时区
t8 = Time.gm(2001,3,15,21,30,15)
t9 = Time.utc(2001,3,15,21,30,15)

生成的时间对象有一个to_a方法,可以把时间相关一信息转化成一个数组,数组中存放的信息格式如下:
seconds,
minutes,
hours,
day,
month,
year,
day of week (0..6),
day of year (1..366),
daylight saving (true or false),
and time zone (as a string)

因此,我们也可以这么用:
t0 = Time.local(0,15,3,20,11,1979,2,324,false,”GMT-8:00″)
t1 = Time.gm(*Time.now.to_a)

使用秒数来创建日期:
====================================================
在内部,日期存储为一个整数,代表从1970年开始到当前的秒数,我们可以获取这么秒数或则利用这个秒数来创建日期:
epoch = Time.at(0) # Find the epoch (1 Jan 1970 GMT)
newmil = Time.at(978307200) # Happy New Millennium! (1 Jan 2001)

now = Time.now # 16 Nov 2000 17:24:28
sec = now.to_i # 974424268
日期的格式化
====================================================
获取本日是星期几:
now = Time.now + 1
day_num = now.wday #3
day_abbr = now.strftime(“%a”) #Wed
day_full = now.strftime(“%A”) #Wednesday

获取一年中本日所在的周:
t1 = Time.local(2002,5,1)
1 = Date.new(2002,5,1)

week1a = t1.strftime(“%U”).to_i # 17
week1b = t1.strftime(“%W”).to_i # 17
week1c = d1.cweek # 18

获取当前时区:
z1 = Time.gm(2000,11,10,22,5,0).zone # “UTC”
z2 = Time.local(2000,11,10,22,5,0).zone # “中国标准时间”
格式化时间
====================================================
t = Time.now
puts t.strftime(“%H:%M:%S”) # 22:07:45

puts t.strftime(“%H:%M”) # 22:07
puts (t + 30).strftime(“%H:%M”) # 22:08 (加了30秒)

puts t.strftime(“%I:%M %p”) # 10:07 PM

分类: linux 标签:

[转+整理]利用GZIP压缩网页(Tomcat,apache,iis)各种方法总结

2012年9月21日 没有评论

网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度,因此当你为网站性能所苦恼时,你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度,你可以使用缓存或者是优化代码的执行效率来提升应用程序的速度。

网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。
什么是Gzip? Gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序。最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是Gzip格式的。现今已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用Gzip压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文本内容可压缩到原大小的40%。
Gzip开启后有什么好处? 开启Gzip后会在网页数据传输之前,先使用Gzip压缩后再传输给客户端,客户端接收之后由浏览器解压显示。这样就会减小通过网络传输的数据量,提高浏览的速度。 
Gzip Web压缩工作原理 Web服务器处理HTTP压缩的过程如下: 1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息); 2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名; 3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件; 4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件; 5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件; 6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
下面是两个演示图:
——————–》 使用gzip压缩
  • 一、Tomcat服务器
如果您的 WEB 应用程序是跑在 Tomcat 服务器下的,而且直接使用 Tomcat 所提供的 HTTP 服务,那建议你马上动手,因为实在是太简单了,你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效,
配置如下:
1) compression=”on” 打开压缩功能
2) compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB
3) noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩
4) compressableMimeType=”text/html,text/xml” 压缩类型我这里的配置内容为:

    <Connector port=”80″ maxHttpHeaderSize=”8192″
                maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”utf-8″
compression=”on”
compressionMinSize=”2048″
noCompressionUserAgents=”gozilla, traviata”
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”  />
Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType,这个参数可以用来指定压缩哪种类型的内容,例如可以指定该配置值为:text/html,text/plain ,则只压缩 contentType 为 text/html 和 text/plain 的页面,不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

ps:对于某些文本文件比如:log、txt等文件,我们也可以让服务器采用gzip压缩传输,修改conf目录下web.xml,添加

<mime-mapping>
<extension>log</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>

等,就可以指定压缩传输了。通常情况下,压缩传输能大幅度提高展示速度。

二、Apache 服务器 在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是mod_deflate.so下面我们介绍在 Windows 和 Linux 操作系统下如何启用并配置mod_gzip和mod_deflate模块。1、mod_gzip的启用 如果服务器开启了对Gzip组件的支持,那么我们就可以在http.conf或.htaccess里面进行定制,下面是一个.htaccess配置的简单实例:

下面就对Apache2.0及之后的版本作一个说明
1) 去掉#LoadModule headers_module modules/mod_headers.so前面的注释#,
2) 添加LoadModule deflate_module modules/mod_deflate.so
3) 在VirtualHost中添加

<Location “/”>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>

我这里面有一个完整的演示

# 加载deflate模块
LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so
<VirtualHost *:80>
DocumentRoot f:/apacheTest
<Location “/”>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
</VirtualHost>三、 IIS 服务器

微软的 IIS 服务器同样也是目前用得最多的 WEB 服务器之一,而且用来运行 ASP 页面也是必不可少的。IIS6 本身支持 gzip 压缩,IIS5 就比较费劲了,你可以找一些第三方的组件来处理,不过这玩意是收费的。接下来我们介绍如何在 IIS6 中启用压缩功能。 打开 Internet 信息服务(IIS)管理器,右击”网站”->”属性”,选择”服务”。在 “HTTP压缩” 框中选中 “压缩应用程序文件” 和 “压缩静态文件”,按需要设置 “临时目录” 和 “临时目录的最大限制
接下来配置 gzip 组件,在 Internet 信息服务(IIS)管理器,点击 “Web 服务扩展”->”增加一个新的 Web 服务扩展…”,在 “新建 Web 服务扩展” 框中输入扩展名 “HTTP Compression”,添加 “要求的文件” 为 C:\WINDOWS\system32\inetsrv\gzip.dll,选中 “设置扩展状态为允许”,
还没完呢,我们还需要修改一个配置文件,修改之前请先停止 IIS 服务,打开 C:\Windows\System32\inetsrv\MetaBase.xml,这个文件很大,找到下面一段信息:<blockquote ‘;=”” color:=”” rgb(51,=”” 51,=”” 51);=”” line-height:=”” 22px;=”” background-color:=”” rgb(247,=”” 247,=”” 247);=”” “=””>
  1. <IIsCompressionScheme Location =”/LM/W3SVC/Filters/Compression/gzip” HcCompressionDll=”%windir%\system32\inetsrv\gzip.dll” HcCreateFlags=”1″ HcDoDynamicCompression=”TRUE” HcDoOnDemandCompression=”TRUE” HcDoStaticCompression=”TRUE” HcDynamicCompressionLevel=”0″ HcFileExtensions=”htm html txt” HcOnDemandCompLevel=”10″ HcPriority=”1″ HcScriptFileExtensions=”asp dll exe” > </IIsCompressionScheme>
    增加一些要进行压缩的文件后缀,其中 HcFileExtensions 是静态文件的扩展名,增加 js 和 css 等;HcScriptFileExtensions 为动态文件的扩展名,增加 aspx,保存后启动 IIS 即可生效。 最后我们介绍如何来测试前面所做的工作是否起效,你可能会觉得很奇怪,配置好了,用浏览器打开页面正常,查看页面源码,内容并没有变化,大小也跟原来一样,怎么回事呢?这是因为浏览器已经把内容解压了的结果,有两个方法来判断压缩是否生效:第一,查看 WEB 服务器的日志,不管是 Apache 或者是 IIS,二者的访问日志格式都差不多是下面这种格式:127.0.0.1 - - [14/May/2006:08:44:28 +0800] "GET /manual/style/css/manual.css HTTP/1.1" 200 19351 最后两个数字分别是 HTTP 的结果码(200 表示 OK),19351 表示的是响应内容的大小,把这个大小跟你在浏览器上查看源码的大小比较一下就可以知道是否生效。另外一种方法就是自己写一个 HTTP 客户端的小程序并设置 Accept-Encoding 的值为 gzip,deflate,由这个程序去请求服务器端的某个 URL 地址,然后打印出响应的内容,如果是一堆乱码,恭喜你,配置成功。
分类: linux 标签:

编译keepalived时报configure: error: Popt libraries is required

2012年8月10日 没有评论

问题:

checking for MD5_Init in -lcrypto… yes
checking for SSL_CTX_new in -lssl… yes
checking for poptGetContext in -lpopt… no
configure: error: Popt libraries is required

 

解决:

yum install  popt-devel -y

分类: linux 标签:

编译keepalived时报[libipvs.o] Error 1

2012年8月10日 没有评论

make[2]: Leaving directory /data/xyws_sa/keepalived-1.2.4/keepalived/vrrp'
make[2]: Entering directory
/data/xyws_sa/keepalived-1.2.4/keepalived/libipvs-2.6′
gcc -g -O2 -I/usr/src/linux/include -I/usr/src/linux/include -DLIBIPVS_DONTUSE_NL -Wall -Wunused -c -o libipvs.o libipvs.c
libipvs.c:882: error: expected ‘)’ before ‘fwmark’
libipvs.c: In function ‘ipvs_strerror’:
libipvs.c:1099: error: ‘ipvs_get_service’ undeclared (first use in this function)
libipvs.c:1099: error: (Each undeclared identifier is reported only once
libipvs.c:1099: error: for each function it appears in.)
make[2]: *** [libipvs.o] Error 1
make[2]: Leaving directory /data/xyws_sa/keepalived-1.2.4/keepalived/libipvs-2.6'
make[1]: *** [all] Error 1
make[1]: Leaving directory
/data/xyws_sa/keepalived-1.2.4/keepalived’
make: *** [all] Error 2

 

 

解决办法:

[root@woyoo keepalived-1.2.4]# ln -s /usr/src/kernels/2.6.32-220.el6.x86_64/ /usr/src/linux
[root@woyoo keepalived-1.2.4]# yum install libnl* libpopt* popt-static

然后make 通过

 

分类: linux 标签: