2014年3月31日星期一

Linux_023:使用wodim命令刻录光盘

运行环境:RHEL 6.6

1. 如果光盘可反复擦写,在烧录之前使用如下命令擦除光盘上已有内容
# wodim -v dev=/dev/cdrw blank=fast

2.刻录
# wodim -v -eject /dev/cdrw [iso_file_name]
(1)-v 显示刻录过程信息
(2)-eject 刻录完毕后弹出光盘

参考文献:
1. http://www.linuxdiyf.com/viewarticle.php?id=127099

MAC_006:强大的内置搜索引擎Spotlight

OS X版本:10.9.2

Spotlight是Mac OS X中功能非常强大的内置搜索引擎。

Spotlight 基本操作介绍:

1. command + 空格:呼出Spotlight。
2. command + option + 空格:-在Finder中打开Spotlight。
3. esc:清空Spotlight搜索框。
4. 按两次esc:关闭Spotlight菜单
5. return:打开第一个搜索项目。
6. 上箭头、下箭头:在搜索结果中导航移动。
7. 光标移到某搜索结果上:快速预览。
7. command + return:打开文件所在位置。
8. command +上箭头、下箭头:在搜索结果中跳转分类。

通过Spotlight我们不仅可以找到任何文件和文件夹,还能把Spotlight当做应用程序的快速启动器把Spotlight当做应用程序的快速启动器。
比如,输入ter,然后按下return,就会打开Terminal。
比如,输入act,然后按下return,就会打开Activity Monitor。

参考文献:
1. http://www.macx.cn/thread-2039527-1-1.html
2. http://jingyan.baidu.com/article/9faa7231785bf0473c28cbd9.html

MAC_005:输入法切换和中英文切换

OS X 版本:10.9.2

1. 输入法切换
“打开键盘偏好设置”,选择快捷键,选择输入源,勾上“选择上一个输入源”。
默认情况下,“选择上一个输入源”和Spotlight快捷键冲突,所以这里,我设置的快捷键是 option + E。
勾上“选择下一个输入源”,设置其快捷键为 option + shift + E。

2. 中英文切换
中文输入法我使用的是搜狗拼音,其中英文切换的快捷键是 shift。

2014年3月30日星期日

Linux_022:classpath中循环加入所有.jar文件的脚本

运行java程序时,经常需要加入某个目录下的所有.jar文件,手工加入不可接受,因此写一个脚本势在必行。

假设.jar文件在当前目录的lib目录下,脚本如下:

#!/bin/sh
PWD=`pwd`
for i in lib/*.jar;
do classpath=$PWD/$i:"$classpath";
done
echo $classpath
java -cp $classpath com.example.Main

参考文献:
1. http://blog.163.com/liugangc@126/blog/static/20374821201102823252576/
2. http://unmi.cc/linux-unix-lib-classpath-shell/

2014年3月29日星期六

Linux_021:SSH 端口转发

环境:OS X EI Capitan 10.11.4 + RHEL 6.4

在客户现场做测试时,经常需要先经过一个跳板机才能连接到测试主机。为了能够访问测试主机的控制台,需要使用 SSH 的端口转发。

1. 参数说明
(1)-f:后台认证用户/密码,通常和-N连用,不用登录到远程主机。
(2)-N:不执行脚本或命令,通常与-f连用。
(3)-L:本地端口:目标IP:目标端口

这里以JBoss A-MQ 为例,假设在 10.2.1.15 和 10.2.1.16 上分别启动了 AMQ Server,控制台端口都为 8161。
(1)在跳板机上执行如下命令
ssh -fN -L 8115:10.2.1.15:8161 root@10.2.1.15
说明:访问跳板机 8115 端口时,转发到 10.2.1.15:8161端口上。
root@10.2.1.15 是 ssh 要登录的机器,这里使用的主机和前一个参数中的主机必须是在同一个网域当中,并且能相互访问,当然也可以是同一个机器。
ssh -fN -L 8116:10.2.1.16:8161 root@10.2.1.16
(2)在 MAC 机上执行如下命令
ssh -fN -L 18115:127.0.0.1:8115 yujian@168.7.62.17
说明:访问 MAC 机 18115 端口时,转发到 10.2.1.15:8161端口上。
yujian@168.7.62.17 是跳板机,是 ssh 要登录的机器,这里使用的主机和前一个参数中的主机必须是在同一个网域当中,并且能相互访问,当然也可以是同一个机器。
这里 127.0.0.1:8115 指的是登录 yujian@168.7.62.17 后的本机,即 168.7.62.17。
ssh -fN -L 18116:127.0.0.1:8116 yujian@168.7.62.17
(3)在 MAC 机上访问
http://localhost:18115
http://localhost:18116

参考文献:
1. http://www.cnblogs.com/david-zhang-index/archive/2012/08/18/2645943.html
2. http://blog.csdn.net/a351945755/article/details/21785647

2014年3月28日星期五

MAC_004:安装JDK6

OS X版本:10.9.2。

由于工作需要,要在MAC上安装JDK6,但是Oracle在JDK7以后才提供了MAC版本。
找了一圈,原来需要去这里下载:http://support.apple.com/downloads/#java。
选择下载Java for OS X 2013-005,其说明如下:
Java for OS X 2013-005 delivers improved security, reliability, and compatibility by updating Java SE 6 to 1.6.0_65.
也就是说,这个版本是从JDK6更新而来的,最后一个更新是Update 65。
Oracle 官网上JDK6最后一个更新版本是Update 45:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html。
和Oracle官网上的JDK6不同的是,Oracle官网上的JDK6已经停止更新,最后一个版本就是Update 45。
而Apple官网上的JDK6还在一直更新,所以请下载最新的,目前(2015-02-26),已经有了新的版本:Java for OS X 2014-001,描述如下:
Java for OS X 2014-001 includes installation improvements, and supersedes all previous versions of Java for OS X. This package installs the same version of Java 6 included in Java for OS X 2013-005.

下载,安装。
与JDK7和JDK8不同,这个JDK6是安装在这个目录下:/System/Library/Frameworks/JavaVM.framework/Versions。
$ ls -l
total 64
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10  3 28 14:59 1.6.0 -> CurrentJDK
drwxr-xr-x  7 root  wheel  238  3 28 14:59 A
lrwxr-xr-x  1 root  wheel    1  3 28 14:59 Current -> A
lrwxr-xr-x  1 root  wheel   59  3 28 14:59 CurrentJDK -> 
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
发现有很多版本,但是全都指向了CurrentJDK,而CurrentJDK指向了/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents。

进入/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin,运行./java -version。
注意,不能运行java -version,因为当前PATH中,我指向的是JDK7。
输出如下:
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
这个就是刚刚安装的JDK6。

修改/etc/profile,设置JAVA_HOME
#Set Java Environment
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

Linux_020:su - [用户名]与su [用户名]的区别

在《如何让普通用户有sudo的权限》中介绍了sudo的用法,实际操作中,还会经常用到另外两个命令:su - [用户名]与su [用户名]。

1. su - [用户名]
比如:su - redhat 表示当执行这个命令的时候切换到redhat用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户Home目录下.bash_profile和.bashrc文件,这个我们成为全切换,比如输入pwd,会发现已经是redhat用户的Home目录。
注意,如果只输入 su -,即相当于su - root。

2. su [用户名]
比如:su  redhat 当执行这个命令的时候表示切换到 redhat 用户,但是不读取以上两个文件,所以我们一般称它为半切换,这样切换过去之后,redhat 用户使用的依旧是此前用户的环境配置信息,比如输入 pwd,会发现还是原来用户的 Home 目录。

这两个命令都需要输入被切换用户的口令(如果是从 root 用户切换则不需要),这里就是redhat 用户的口令。
这一点是和 sudo 命令的区别。

参考文献:
1. http://blog.chinaunix.net/uid-24648486-id-3031852.html
2. http://xinchibaobei.blog.163.com/blog/static/12639250920097251498572/

2014年3月26日星期三

Linux_019:vi 的基本操作

vi 是“Visual Editor”的缩写,值得一提的是,vi在所有的UNIX系统中兼容,因此学习和掌握vi是必不可少的技能。
vi有两种模式:输入模式和指令模式。
在输入模式下,可以进行内容编辑(插入、删除和修改);在指令模式下,可以进行命令操作。
刚启动vi时,进入的是指令模式,此时用户输入的任何字符都将被认为是一个指令。
两种模式的切换使用“Esc”键。
进入输入模式后,会看到文档最下方有一行“-- INSERT --”,这说明文档目前是在输入模式下。

1. 启动 vi
vi [文件名称]

2. 退出 vi
在指令模式下:
(1)放弃编辑内容并退出::q!
(2)保存对文件的修改并退出::wq!
(3)保存编辑内容不退出::w

3. 进入输入模式的命令
在指令模式下:
(1)在光标之后加入文字:a (联想记忆:append)
(2)在光标所在行尾加入文字:Shift + a (联想记忆:增强的append)
(3)在光标之前加入文字:i (联想记忆:insert)
(4)在光标所在行首加入文字:Shift + i (联想记忆:增强的insert)
(5)在光标所在行的下一行增加一空行:o (联想记忆:open a new line)
(6)在光标所在行的上一行增加一空行:Shift + o (联想记忆:增强的open a new line)

4. 移动光标
在指令模式下:
(1)向左移一个字符:h (联想记忆:h j k l 在键盘上挨着,分别对应着“左、下、上、右”)
(2)向下移一个字符:j (联想记忆:同上)
(3)向上移一个字符:k (联想记忆:同上)
(4)向右移一个字符:l (联想记忆:同上)
(5)移至光标所在行首:0 (联想记忆:一切由O开始)
(6)移至光标所在行尾:$ (联想记忆:$即结束)
(7)移至文档的最后一行第一列:Shift + g (联想记忆:增强的open a new line)
(8)移至文档的第n行:n + Shift + g (比如1G,相当于移至文档的第一行第一列)
(9)窗口往下卷一屏:Ctrl + f (联想记忆:forward)
(10)窗口往上卷一屏:Ctrl + b(联想记忆:backward)
(11)光标移动到下一单词的词首:w
(12)光标移动到前一单词的词首:b
(13)光标移动到下一单词的词尾:e
(14)光标移动到前一单词的词尾:ge    

5. 删除与修改
(1)删除光标所在字符:x (联想记忆:相当于向前删除一个字符。)
(2)删除光标所在之前一字符:Shift + x (联想记忆:相当于向后删除一个字符。)
(3)删除光标所在行:dd  (联想记忆:double delete)
(4)复制光标所在行:yy  (联想记忆:double yank)
(5)粘贴复制的行:移动光标至要复制的行,然后执行 p 指令(联想记忆:paste)

6. 查找
(1)在光标之后查找该字符串:/字符串
(2)在光标之前查找该字符串:?字符串
(3)向下继续寻找下一个相同的字符串:n
(4)向上继续寻找下一个相同的字符串:shift + n

7. 撤销与重做
(1)恢复最后一个指令执行前的结果:u(联想记忆:undo)
(2)恢复光标所在行的所有改变:shift + u(联想记忆:shift 相当于“反”的意思,即反undo,就是redo)

8. 高级操作
(1)显示行号::set nu(联想记忆:number)
(2)隐藏行号::set nonu(联想记忆:no number)
(3)删除第5行至第15行的内容::5,15d(联想记忆:delete)
(4)将第5行至第15行的内容复制到第25行之后::5,15co25(联想记忆:copy)
(5)将第5行至第15行的内容移动到第25行之后::5,15mo25(联想记忆:move)
(6)将文件中所有的“wan”替换为“li”::1,$s/wan/li/g(联想记忆:substitute global)
(7)统计查找字符串“counter=1”的数量::%s/counter=1//gn

2014年3月25日星期二

Linux_018:实验室常用命令

1. 重写学生机分区表,并重启
for i in {1..20}
do ssh root@f$i "dd if=/dev/zero of=/dev/sda bs=1M count=100;reboot"
done

2. 关闭所有学生机
for i in {1..20}
do ssh root@f$i "init 0"
done

2014年3月24日星期一

MAC_003:设置Java环境

OS X版本:10.9.2。

我之前已经安装了JDK1.7,JDK8发布后,下载安装了JDK8。
接着运行java -version,发现已经指向了JDK8。
我觉得很奇怪,因为我并没有设置Java 环境变量。

查看java命令到底指向哪里?
cd /usr/bin
然后运行 ls -l java,输出如下:
lrwxr-xr-x  1 root  wheel  74 10 31 14:52 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
发现java 指向的是/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java。
那么,这个Current中的java到底是什么版本呢?其实,Current只是一个快捷方式而已,是为了方便设置默认java的。

如果安装了多个JDK,可以创建 ~/.bash_profile 文件,为每个用户设置JAVA_HOME等变量。
创建 ~/.bash_profile,增加如下内容:
#!/bin/sh

# Set JDK8 Environment
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export ANT_HOME=~/apache/ant
export M2_HOME=~/apache/maven
export MAVEN_OPTS="-Xms512m -Xmx1024m"
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$M2_HOME/bin:$PATH
alias ll="ls -alF"

注意,一般不建议修改/etc/profile,因为这是系统环境设置文件。

关闭所有 Terminal ,再次进入一个新的Terminal,运行java -version,发现已经指向JDK1.7了。

为了方便切换不同的JDK,我在~/目录下分别创建了3个脚本:setJdk6.sh,setJdk7.sh,setJdk8.sh。
(1)setJdk6.sh
#!/bin/sh

#set Java Environment
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH
(2)setJdk7.sh
#!/bin/sh

#Set Java Environment
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
#export ANT_HOME=/Users/maping/Apache/ant-1.9.3
export ANT_HOME=/Users/maping/Apache/ant
#export MAVEN_HOME=/Users/maping/Apache/maven-3.2.1
export MAVEN_HOME=/Users/maping/Apache/maven
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$PATH
(3)setJdk8.sh
#!/bin/sh

#Set Java Environment
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
#export ANT_HOME=/Users/maping/Apache/ant-1.9.3
export ANT_HOME=/Users/maping/Apache/ant
#export MAVEN_HOME=/Users/maping/Apache/maven-3.2.1
export MAVEN_HOME=/Users/maping/Apache/maven
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$PATH

在Terminal中执行 . ~/setJdk8Env.sh ,就切换到JDK8了。

Linux_017:Red Hat Linux版本介绍 (摘录+整理)

早期的Red Hat Linux操作系统是一套,就叫Redhat,最后一个版本是Redhat 9。
Red hat 9以后,红帽公司将发行版分成两条路线,一条是针对于企业用户的,更名为Redhat Enterprise,收费的Enterprise系列,这个系列分成:AS/ES/WS等分支,下载地址:https://www.redhat.com/products/enterprise-linux/。
而另一条针对于桌面用户的,交给了开源组织Fedora来维护,下载地址:http://fedoraproject.org。

(1)Advanced Server,缩写即AS。
AS在标准Linux内核的基础上,做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。可轻松识别 IBM/DELL/HP等常见机架式服务器的磁盘阵列卡等设备。AS主要版本2.x/3.x/4.x,也就是我们所说的AS3/AS4每一个版本还有若干个升级,例如最早推出的AS4后,遇到了一些更新此时就会发布AS4 Update1,以后还会陆续有AS4 Update2/Update3等出现简称AS4u3等。这和微软的发布形式也是非常类似的,微软的 NT4 从SP1出到SP6,Windows2000从SP1出到S6。AS这些Update版本所包含的主要程序包版本都有一定差别,最好不要混用.否则容易出现问题。Prima和Plesk的安装包,对于各种发行版都有了针对性的设计在下载页面上,通常都会标识出来,支持哪些版本和哪些update的系统。
(2)ES,是AS的精简版本。
ES与常见的AS系列的区别是,AS支持到4路以上CPU,而ES只能支持两路CPU。AS和ES在大多数程序包上并无区别,只在内核等少数软件包上有差异。 AS和ES的售价差别比较大,通常ES用在随服务器一同购买的OEM版本中例如购买DELL服务器,搭配的Linux会是ES系列。如果要搭配AS系列,则需要多花数千元。
(3)WS,是ES的进一步简化版。
主要针对企业内部的桌面办公市场,国内较少采用。

无论是Fedora Core Linux 还是 Enterprise Linux,都需要遵循GNU协议,即需要发布自己的源代码。所以,对于免费的Fedora Core Linux,从Redhat网站上可以直接下载ISO刻盘,还能下载到SRPM的ISO,即程序包源码光盘。对于收费的Enterprise Linux系列,是一款商业产品,所以网站上不能下载到ISO文件,需要购买正式授权方可。由于Enterprise Linux也需要遵循GNU协议,故必须发布源代码。所以在Redhat的网站上,可以获得AS/ES/WS系列的SRPM源码ISO文件。

这些文件可以被自由下载, 修改代码,重新编译。一个名为Community Enterprise Operating System的项目诞生了,即CentOS。CentOS社区将Redhat的网站上的所有源代码下载下来,进行重新编译。重新编译后,由于 AS/ES/WS是商业产品,必须将所有Redhat的Logo和标识改成自己的CentOS标识。
可以说,CentOS就是 Redhat的AS/ES/WS的免费版本。使用CentOS,可以获得和AS/ES相同的性能和感受。CentOS下载地址:http://www.centos.org。

参考文献:
1. http://blog.csdn.net/zhangxinrun/article/details/5889464
2. http://wenda.tianya.cn/question/6fe156fd21a3c5ae

Linux_016:Linux命令行快捷键 (摘录+整理)

准备把工作环境彻底改变到Linux环境下,因此准备写一系列Linux下必须掌握的技能。

先总结一下常用的Linux命令行快捷键,这些快捷键兼容于大多数Linux,掌握了这些,可以提高输入命令的效率。

1. 自动补齐:Tab

2. 取消本次命令的输入:Ctrl + c

3. 光标跳转的快捷键
(1)跳至命令行首:Ctrl + a (联想记忆:ahead of the line)
(2)跳至命令行尾:Ctrl + e (联想记忆:end of the line)
(3)向前跳转一个字符:Ctrl + f (联想记忆:forward)
(4)向后跳转一个字符:Ctrl + b (联想记忆:backward)
(5)向前跳转一个单词:Alt + f (与SecureCRT快捷键冲突,故不常用。)
(6)向后跳转一个单词:Alt + b (与SecureCRT快捷键冲突,故不常用。)

4. 编辑命令的快捷键
(1)向后删除一个字符:Ctrl + h
(2)向后删除一个单词:Ctrl + w
(3)从当前光标位置删除到行首:Ctrl + u
(4)从当前光标位置删除到行尾:Ctrl + k
(5)删除当前光标位置的字符:Ctrl + d (相当于向前删除一个字符。)

5. 复制粘贴的快捷键
鼠标选中文本
(1)Ctrl + Shift + c:复制
(2)Ctrl + Shift + v:粘贴
(3)Ctrl + Insert:复制
(4)Shift + Insert:粘贴

参考文献:
1. http://os.chinaunix.net/a2006/0112/967/000000967436.shtml