顯示具有 系統 標籤的文章。 顯示所有文章
顯示具有 系統 標籤的文章。 顯示所有文章

2014年8月12日 星期二

mac終端機指令

1. Control + L 可以清除螢幕
2. Control + A 可以將游標跳到行首
3. Control + E 可以將由游標跳到行尾
4. Control + W 可以刪掉一個詞
5. Control + U 可以刪除一行
6. Control + R 可以快速完成曾經輸入過的命令

2014年5月18日 星期日

tmux 256色 設定

最近發生了在vim上面有256色

但是若在tmux上開vim卻沒有256色了 , 是因為在tmux上面沒有

所以在tmux上也是要設定

主要是在.tmux.conf加上這行就可以了
  • set -g terminal-overrides 'xterm:colors=256'






2014年3月19日 星期三

Shell Script - grep , awk

來源 http://ithelp.ithome.com.tw/question/10136126

grep 的主要目的是從文件中找關鍵字,接者再把有關鍵字的那一整行給列印出來。而 awk 列印的可就不是一整行,是可以選擇性的列印一整欄


所謂的 pipe (|) 就是把第一個指令處理的結果直接當成參數給第二個指令當成輸入來處理

比如說下面有一個表格:
編號 / 名稱 / 序號
A001 腳踏車 AEADDDEE9931
A002 機車 FDEAEDFJK3394
A003 火車 FJDKE3AK34940
A004 超機車 FFJJEEE99300
A005 飛機 AIRP33333900
A006 坦克 TANK00000001

grep "車" Day19TestData.txt | awk {'print $2" - "$3'} 

2014年3月13日 星期四

shell 讀檔案 及檢查檔案是否存在


突然需要檢查一些檔案是否存在
很少在寫shell 因此紀錄如下


1.開啟一txt檔
2.一行一行檢查
3.每一行的前三字元 會決定其所在的資料夾
4.移到他的目錄檢查對應的檔案是否存在

#!/bin/bash
filename='/home/cdrs/temp/ilake/nomoj.txt'
exec < $filename  #執行打開檔案
while read line    #讀檔案內容
do
        #echo ${line:0:3}   取每一行的前三個字元
    cd /home/cdrs/backup/response/${line:0:3}/              #移到此目錄  
    if [ -e $line.pgp ];then                      #檢查此內容檔案是否存在
       echo $line exists >>/home/cdrs/temp/ilake/nomojcheck.txt
    else
       echo $line does not exist >> /home/cdrs/temp/ilake/nomojcheck.txt
     fi
done

2014年3月6日 星期四

SCP和SFTP不用輸入密碼的公鑰方法



一.client端
  1.進入home目錄
     建立.ssh資料夾
# ll –a     查看有沒有.ssh
# mkdir .ssh  建立.ssh
  2.
#cd .ssh      進入.ssh
#ssh-keygen -t rsa  執行創建密鑰命令
3.
把.ssh目錄下的公鑰文件:/當前用户home目路/.ssh/id_rsa.pub文件傳輸到server上
#scp/home/ap/ilake/.ssh/id_rsa.pub ilake@28.192.141.129:/ilake/.ssh
#ssh-keygen 


二.server端

1.通過檢查home目錄的權限必須是755
2.
# cd /.ssh                      進入到.ssh目錄  .ssh權限必须是755或者700
# cp id_rsa.pub authorized_keys 第一次添加時將公鑰重命名為authorized_keys
# chmod 644 authorized_keys     公鑰文件的權限必须是644
如果有多個client,依次将client公鑰附加到server的authorized_keys文件内即可。

# cat /tmp/id_rsa.pub >> authorized_keys

測試時 直接輸入
# sftp ilake@ip    成功的話就可以直接登入
若只輸入sftp ip 則扔然要有密碼


來源 http://jingyan.baidu.com/article/e5c39bf56245ae39d7603331.html

Unix權限的基本概念


檔案的權限有三組,分別歸屬於Owner,Group,Everyone





















 755 就是代表:Owner可以讀寫執行(7)、Group只能讀取跟執行(5)、其他的人只能讀取跟執行(5)。


來源http://hiraku.tw/2010/03/227/

2014年1月8日 星期三

sed , awk



切割文件
awk '/^01/{x="'file.'"++i;}{print > x;}' file
此指令會以01開頭的行數為依據  切割檔案
原檔案file 切割產生  file.1 ,file.2  ............


刪除行數
sed -e '1d' file > file-temp
刪除file的第一行 存在file-temp

其他
shell中单引号、双引号、反引号的区别(转自互联网)
http://blog.csdn.net/wyyzsl212328/article/details/8501650

2013年11月27日 星期三

bash script runs manually , but fails on crontab

今天碰到一個問題是
寫的shell script 手動run的時候  是正常可以執行的

這個script 主要是呼叫mysql 執行一些資料庫的動作

查了一下發現是一些環境變數的問題
在crontab不認得一些變數--> path裡面所設定的mysql變數

因此先在環境下

下  echo $PATH   

可以知道PATH的變數設定

之後再script增加 

export PATH="上面得到的設定"

如此就可正常執行


參考
http://stackoverflow.com/questions/14612444/bash-script-runs-manually-but-fails-on-crontab

2013年11月25日 星期一

sql exist vs in

這邊比較一下sql exist 和in的差別


Select * from T1 where x in ( select y from T2 )

LIKE:

select *

from t1, ( select distinct y from t2 ) t2 >

where t1.x = t2.y;

如果使用EXISTS,如同上述的查詢結果
select * from t1 where exists ( select null from t2 where y = x ) 

LIKE: 

for x in ( select * from t1 ) 
loop 
if ( exists ( select null from t2 where y = x.x ) 
then 
OUTPUT THE RECORD 
end if 
end loop 


因此當子查詢比主查詢小的時候使用in  ,反之則使用exist
外大內小=IN,外小內大=EXISTS








參考了http://tw.knowledge.yahoo.com/question/question?qid=1306041509015

2013年7月19日 星期五

[SQL].2個經緯度坐標,計算直線距離

計算坐標距離的 SQL 呼叫範例:
SELECT
  htx.ID, Longitude, Latitude
  ,acos(sin(radians(24.80181500042168)) * sin(radians(Latitude )) + cos(radians(24.80181500042168)) * cos(radians(Latitude )) * cos(radians(120.971596999978 - Longitude))) * 6372.8
as rout_distance
  , 24.80181500042168 as route_lat
  , 120.971596999978 as route_lon
FROM Info htx 
WHERE
(Longitude BETWEEN 120.961801499978 
AND 120.981392499978) and(Latitude BETWEEN 24.7928168004217 
AND 24.8108132004217) order by rout_distance , Type desc , Name
說明1: 24.80181500042168 是我要查詢的中心點 LAT, 120.971596999978 是我的中心點 LON.

說明2: 原本用來取距離是用 between 取, 但這有一個問題, 就是在正方向角角的, 其實會超過預設的距離.



來源:http://maxtellyou.blogspot.tw/2012/09/sql2.html

2013年7月3日 星期三

SSH 免密碼登入

文章來源
http://josephjiang.com/article/understand-ssh-key/

http://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password/330740#330740


關於 SSH 免密碼登入,我的第一篇學習文章是參考 Tsung 的 ssh keygen 免輸入密碼。
他的文章很淺顯易懂,我依樣畫葫蘆就成功了。
但問題是公司的限制是必需要有 passphrase、Tsung 的文章並沒有解釋此部份、造成我不打密碼但還是得打 passphrase。
我決定花一些時間把這個原理徹底弄懂,並寫成一篇文章跟大家分享。

一、基本流程說明

1. 私密與公開金鑰

以 SSH 登入任何主機都必需要打帳號、密碼,除了不方便、另外還增加了被竊取的風險(有些軟體如 winscp 是可儲存的)。
解決的方式就是使用金鑰產生器來產生一筆公開金鑰(Public Key)與私密金鑰(Private Key)對應做免密碼的登入。
使用者只需將公開金鑰的內容附加系統上特定的檔案中,以及在自己的環境指定好私密金鑰,系統在登入流程中即會自動對應,正確無誤即可登入。
讓整個登入流程快速且安全。

2. 金鑰種類

但是對應並沒有想像中這麼簡單,就像是木門上只能裝喇吧鎖而無法裝大鎖,不同的主機所能使用的金鑰機制也有所不同:
SSH 有 Protocol 1 及 Protocol 2 兩種,常見金鑰編碼機制則有 RSA1、RSA2、以及 DSA 等三種。

3. 保護金鑰的措施

而另外一個問題,如果有人拿到了你的私密金鑰,就相當於他可以在你的主機為所欲為。
保護的措施就是使用 Passphrase(也可以不設)、私密金鑰的密碼,每次要用時就得輸入。

4. Agent 機制

有 Passphrase 保護當然是安全多了,但原本想用金鑰的好處就是可以省去每次打密碼的步驟,
現在若每次又得打 Passphrase,這樣的好處就沒有了,可能還得多記一套密碼、增加打錯的可能性。
還好有 Agent 機制,他相當是你的管家、我們只要把鑰匙及 Passphrase 請他保管,在登入主機時他就會幫你解決輸入 Passphrase 的問題。

二、一步一步教到會

以下就只針對 Mac OSX 及 *nix 系統做介紹(若你是使用 Windows 中的 PuTTY,請先做完步驟一與二,再看這裡):

步驟 1. 產生金鑰

在 Command Line 中你可以使用 ssh-keygen 來產生各種類的金鑰,而我也會鼓勵大家一次把三種金鑰產生好,省得碰到不同系統麻煩。

a. 產生 RSA 1 金鑰

這種金鑰是給比較舊的系統,例如 FreeBSD 4 及以前的版本、是走 SSH Protocol 1 的,最好就使用 RSA 1 這種金鑰
$ ssh-keygen -t rsa1
Generating RSA keys: Key generation complete.
Enter file in which to save the key ($HOME/.ssh/identity): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase [建議要使用 passphrase,最少 9 碼]
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/identity.
Your public key has been saved in /home/username/.ssh/identity.pub.
The key fingerprint is: 6c:96:8c:a8:86:1b:3b:eb:1b:48:8d:3d:8d:c1:4f:dc username@abc.com

b. 產生 RSA 2 金鑰

比較新的系統,如 FreeBSD 5 及之後版本或 Linux,用 RSA 2 或 DSA 這兩種金鑰
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com

c. 產生 DSA 金鑰

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_dsa): [按 Enter 使用預設值(建議)]
Enter passphrase: 輸入你的 Passphrase
Enter same passphrase again: 再一次輸入你的 Passphrase
Your identification has been saved in /home/username/.ssh/id_dsa.
Your public key has been saved in /home/username/.ssh/id_dsa.pub.
The key fingerprint is: cc:e8:a9:da:a3:41:c6:a9:97:52:59:ef:0c:cf:45:b6 username@abc.com
經過這樣的程序,我們總共會有公私鑰共三對:RSA1 ( identity.pub / identity )、RSA2 ( id_rsa.pub / id_rsa )、及 ( id_dsa.pub / id_rsa )。
我過去有一個錯誤的觀念,以為金鑰是對應系統的,所以在對每一台主機得另外產生一次。
事實上如果沒有特殊需求,你可以只用一份、用任一系統產生、並把這一份給保存好即可。希望大家不要跟我有一樣的錯誤囉!

步驟 2. 將公開金鑰放到主機

你現在在自己的機器上已經有了三對金鑰,接下來我們要把公開的三隻 (*.pub) 放到我們要登入的主機上。
$ scp ~/.ssh/*.pub 你欲登入的主機:~/.ssh/.
接著登入該系統,在沒設定好之前當然還是得乖乖打密碼
$ ssh 你欲登入的主機
系統預設處理放置公鑰的檔案叫做 authorized_keys,所以我們要把剛剛所傳的公鑰附加到這個檔案中:
$ cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 711 ~/.ssh
$ chmod 644 ~/.ssh/authorized_keys
如果沒有意外,你登出再登入主機,就會看到它請你輸入 Passphrase 的訊息。

步驟 3. 設定 ssh-agent

前面所提到,每次都要打 Passphrase 就太麻煩了,所以這裡要設定管家 ssh-agent、以保管私鑰及 Passphrase。
在你每次啟動 shell 後,請照這樣的方式來做:

a. 啟動 ssh-agent

$ eval `ssh-agent -s`

b. 將私密金鑰交給 ssh-agent 保管:ssh-add

我們將要用 ssh-add 來指定金鑰,如果你都照上面放預設的位置及相同的檔名,那就不用有任何的參數。
$ ssh-add
接著會要求你設定輸入 passphrase,如果三個都一樣,就只要打一次。
Enter passphrase for /home/username/.ssh/id_rsa:你的 Passphrase
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Identity added: /home/username/.ssh/id_dsa (/home/username/.ssh/id_dsa)
Identity added: /home/username/.ssh/identity (username@username.com)
接著再試看看登入已經放好公鑰的主機,應該就可以不用密碼登入了!

c. 自動化流程

如果每次進 Shell 都要做 a、b 動作,可能還是太麻煩且忘記,也因此我去找了可以放在 .bash_profile 的 script ( Joseph M. Reagle Jr ),
一進入 Shell 就會把該做的動作做好,且詢問你 Passphrase: SH_ENV="$HOME/.ssh/environment"

function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/lull
/usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn’t work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

三、公私鑰所需放的機器

我的歸納是,在本機上你必需一直保有這兩份以便後續的再製。而公鑰整理成 authorized_keys,以後有新機器需要登入時一律傳此檔案上去做附加。
而除了本機外,那些機器需要放私鑰呢?我的情況是最常用的那台開發機,因為你可能會利用他去 SSH 其它台機器。不然的話,應該減少私鑰的存放地點,以求安全。

四、延伸閱讀

2013年5月20日 星期一

Rsync 資料同步及異地備份


Rsync
使得本地端和遠端二部主機之間的檔案快速達到資料同步,由於它主要是傳送資料異動部份,而非每次都整份資料重從到尾再傳送一次所以資料同步速度相當地快,且 Rsync 可搭配 rsh、 ssh 甚至使用 Daemon 模式來加強傳輸資料時的安全性。

Rsync Server
step1
查詢是否有安裝rsync

[root@localhost ~]# rpm -qa | grep 'rsync'
rsync-2.6.8-3.1
#如果沒有安裝的話 請自行補上
[root@localhost ~]# yum -y install rsync
 step2
修改 /etc/xinetd.d/rsync 設定
在這邊所設定的rsync是用xinetd來做啟動的。所以如果在rsync並無特別設定的話,
則會依照xinetd.conf所設定的執行。

[root@localhost ~]# vim /etc/xinetd.d/rsync service rsync{        disable = yes  改為 no         socket_type     = stream        wait            = no        user            = root        server          = /usr/bin/rsync        server_args     = --daemon        log_on_failure  += USERID
 step3
修改rsync.conf 設定檔 (如果沒有此檔的話請自行建立)
以下所使用到的設定參數請依照需求選取設定。


[root@localhost ~]# vim /etc/rsyncd.conf###backup config###                      //註解 [web]                                   //module name            comment = backup dmz web      //說明           hosts allow = 192.168.1.222   //允許使用rsync連入的ip           hosts deny = *                //不允許連入的ip,*表示全檔           path = /home/backup/          //存放備份資料的目錄           auth users = root    //認證帳號 (要設定於rsyncd.secrets 內的帳號)           uid = root                    //用來啟動rsync server 的uid           gid = root                    //用來啟動rsync server 的gid            secrets file = /etc/rsyncd.secrets      //密碼檔存放路徑           read only = no                          //是否設定為唯讀     dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz                                          //不要對這些附檔名的檔案做壓縮

  step4
設定連線的帳號密碼


[root@localhost ~]# vim /etc/rsyncd.secretsroot:12345  (設定格式:  帳號:密碼)修改rsyncd.secrets使用權限 (很重要)[root@localhost ~]# chmod 600 /etc/rsyncd.secrets[root@localhost ~]# chown root.root  /etc/rsyncd.secrets
step5
測試看看是否都正常啟用 (rsync的port為873)

[root@localhost ~]#  netstat -tnlp | grep 873
tcp    0    0 0.0.0.0:873        0.0.0.0:*         LISTEN      4235/xinetd
[root@localhost ~]# telnet localhost 873
#若出現下列訊息表示正常
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
@RSYNCD: 29 
Rsync Client

step1
設定登入server的密碼
在client主機上只需要設定密碼就可以


[root@localhost ~]# vim /etc/rsyncd.secrets
12345  (設定格式:  密碼)
#修改rsyncd.secrets使用權限 (很重要)
[root@localhost ~]# chmod 600 /etc/rsyncd.secrets
[root@localhost ~]# chown root.root  /etc/rsyncd.secrets

step2
測試rsync是否可傳輸資料


[root@localhost ~]# /usr/bin/rsync -avrHS --delete --password-file=/etc/rsyncd.secrets  /opt root@192.168.1.122::web
#或是
[root@localhost ~]#/usr/bin/rsync -rvlHpogDtS --delete --password-file=/etc/rsyncd.secrets  /opt/ root@192.168.1.122::web
#rsync結束後會看到下列訊息
sent 19380160 bytes  received 1062 bytes  1685323.65 bytes/sec
total size is 19374133  speedup is 1.00
step3

如果剛才的同步指令沒有問題的話。就可以開始設定排程了
3.1先自行寫一個rsync 的script 用來設定排程

[root@localhost ~]# vim /root/bin/rsync.sh   #存放在/root/bin/#!/bin/sh/usr/bin/rsync -avrHS --delete --password-file=/etc/rsyncd.secrets  /opt root@192.168.1.122::web 

設定排程

#crontab -e    
 0 0 * * * /home/weithenn/rsyncweb.sh



資料來源:
http://www.weithenn.org/cgi-bin/wiki.pl?Rsync-%E8%B3%87%E6%96%99%E5%90%8C%E6%AD%A5%E5%8F%8A%E7%95%B0%E5%9C%B0%E5%82%99%E4%BB%BD#Heading15

http://ithelp.ithome.com.tw/question/10081360


2013年5月15日 星期三

jboss建立datasource


在window環境下的sql server

jboss連結設定
主要兩個步驟


A. 安裝JDBC Driver 
B. 設定JNDI 連結



安裝JDBC Driver 

使用網路畫面GUI

step1 :
在Runtime頁籤下
選擇Manage Deployment 的 Add Content

step2:


點選瀏覽 加入我們要的JDBC Driver 的jar檔

step3:
確認檔案無誤後
在enable就可以了


設定JNDI 連結


使用GUI 界面

step1:
在Profile下
選取Datasource 按Add增加
輸入Name 和JNDI Name

step:2
按下next選取剛剛設定的jar檔 

step:3

建立Connection

connection url :jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;

可參考
http://msdn.microsoft.com/en-us/library/ms378428(v=sql.90).aspx




step:4
要將jar檔搬到jboss的deployment下去讓他deploye

成功安裝後
按下 Test Connection
如下畫面就是成功了