2013年3月28日 星期四

jQuery 基礎教學

Part1: 簡介

jQuery 是一個超級無敵強大的工具,有了他, javascript 變得十分簡單。
相信很多人都會跟我一樣,在剛學習的時候有一個問題:

Q: 要先學會javascript 還是 jQuery ?

A: 簡單一點來說,以C++ 做為舉例

javascript 就等於是 C++

而 jQuery 就等於是 別人幫你寫好的Class

因此你還是要先懂一些C++的語法

有哪些語法呢?

我覺得只要知道怎麼宣告變數、跟用迴圈就夠了

因為,其他javascript 辦得到得事情,jQuery 辦得更快

因此我直接切入正題

----------------------------------------------------------------------------

Part2: 基本的jQuery 架構


$(document).ready(function() {
// Handler for .ready() called.
});


基本上任何的javascript 都寫在 document .ready 裡面就對了

這個code 的意思就是:在我的網頁(DOM) load 完成之後,我要做些甚麼事情

在jQuery 中,  $   這個符號代表的就是jQuery

因此你也可以寫成jQuery(document).ready

----------------------------------------------------------------------------

Part3: 常用的語法

通常我們最常用的就是按下按鈕時,我們希望叫javascript 幫我們做事情

因此其實jQuery 的概念就是

1.利用選擇器選取要操作的DOM

2.修改他

我舉個例子:

<button id="click" class="me" type="button">Click Me!</button>

<input type="text" class="mouse" name="LastName" value="Mouse">

上面是兩個基本的DOM

buttom 擁有id 與 class

而input 擁有 class 與 name

所以我們首先第一步要先選擇DOM

在選擇器方面通常我們會選的依據有兩種

id 或者是 class

所以name在這邊沒屁用

假設我要選擇buttom這個東西的時候,我可以這樣寫

第一步驟:選擇DOM

$("#click")  或者是 $(".me")

記住一定要有單引號或雙引號,不然你可能會很納悶程式怎麼都跑不出來

我就在這邊吃了很多悶虧

第二步驟:做事情

通常我們會把事情寫在function 裡面,假設是click事件

$(".me").click(function() {
    //要做的事情
    $(".mouse").attr("value", "hello");
});

如此一來我在點擊button 時就會將input 的值從mouse 改成 hello

很簡單吧! 設定 input 的屬性竟然只需要一行就完成!!


大致上這就是jQuery 基礎會用到的東西

2013年3月25日 星期一

MYSQL基本語法

MYSQL基本語法


insert into 資料表名稱(欄位1,欄位2)
values('值1','值2');

http://james670818.pixnet.net/blog/post/4411857-%5Bphp%5D-pdo-ii
net start mysql啟動 MySQL

查詢資料庫、資料表、欄位等資訊
mysqlshow [
-h ipAddress] -u user_name -pmysqlshow -u user_name@ipAddress -p
列出所有資料庫

mysqlshow -u user_name -p db_name列出該 database_name 所有資料表

mysqlshow -u user_name -p db_name table_name列出該 database_name 裡 table_name 資料表裡的欄位

mysqlshow -u user_name -p db_name table_name field_name
列出該 database_name 裡 table_name 的 field_name 的欄位資訊

更改密碼mysqladmin password 'new_password'更改目前系統登入使用者的密碼

於資料庫中導入執行sql script 檔
mysql db_name < sql_filename.sql
與 MySQL 連線
mysql [
-h ipAddress] -u user_name -ppasswordmysql [-h ipAddress] -u user_name -p

切換使用資料庫 database_name
mysql> USE db_name
mysql> SELECT DATABASE();列出目前預設的資料庫名稱

mysql> SHOW DATABASES;
列出所有資料庫

mysql> SHOW DATABASES LIKE 'my%';
列出所有資料庫名稱為 my 開頭的

mysql> SHOW TABLES FROM db_name [LIKE ...];
列出該資料庫所有資料表名稱

mysql> SHOW COLUMNS FROM table_name [LIKE ...];
mysql> SHOW COLUMNS FROM table_name FROM db_name  [LIKE ...];mysql> SHOW FIELDS FROM table_name [LIKE ...];
mysql> DESCRIBE table_name ;
mysql> EXPLAIN table_name ;
列出該資料表所有欄位名稱

mysql> SHOW INDEX FROM table_name [LIKE ...];
mysql> SHOW INDEX FROM table_name FROM db_name  [LIKE ...];mysql> SHOW KEY FROM table_name [LIKE ...];
列出該資料表所有索引資訊

mysql> SHOW TABLE STATUS;mysql> SHOW TABLE STATUS FROM db_name  [LIKE ...];列出資料表的相關資訊

mysql> SHOW VARIABLES [LIKE ...];
顯示 MySQL 相關參數設定

mysql> SHOW VARIABLES LIKE '%character%' ;顯示資料庫語系設定資訊

mysql> SHOW PROCESSLIST;
列出與 MySQL 連線的 threads 狀態

mysql> SHOW STATUS;
列出與 MySQL 目前的狀態

當進行資料表檢查或修補時,鎖定資料表可確保資料表的安全
(READ:唯讀狀態、WRITE:無法寫入也無法讀取)
mysql> LOCK TABLE table_name READ;mysql> FLUSH TABLES;
鎖定資料表 

mysql> UNLOCK TABLE;
資料表解除鎖定 

2013年3月22日 星期五

無痛使用jQuery Ajax


今天要讓大家無痛使用 jQuery Ajax

讓大家可以跳過看複雜的document直接來這邊取用就可以了

Part1: 程式範例

先舉例一個做ajax的情況

例如: 點擊一個按鈕,做一些什麼事情

因此可以這樣寫:

$('.btn').click(function() {
    $.ajax({
        url: "check_password.php",
        data: {
            old_password: $("#old_password").val()
        },
        type: "POST",
        dataType: "json",
        success: function(data,textStatus,jqXHR) {
          .....code here
        },
        error: function() {
            ...code here
        },
        complete: function() {
            ...code here
        }
        
    });
});



只要在事件中寫入 $.ajax( ..... );

就算是做一次ajax 了

Part2: Ajax 設定與使用

然而 jQuery 的 Ajax 有許多方法可以呼叫

其中就以$.ajax() 有最多的東西可以設定,所以我們只介紹這個


在url設定要將資料傳到哪個檔案

在data設定要傳送的變數

在type設定傳送的方式 (GET/POST)

在dataType設定回傳的格式(html/script/json/xml)

在success, error, complete 設定ajax 回傳後要做的事件


Part3: 程式說明

這邊我們以json當作舉例

程式碼中我們將變數以POST的方式傳送到check_password.php

然後以json的方式傳回變數data

因此data就是我們做完ajax 所得到的資料



在這邊筆者一開始有一小點困惑

究竟在check_password.php中回傳資料要使用echo 還是 return?

A:答案是echo

因為data這個變數在一開始就像是一張空白的紙,你所有在check_password.php 做的輸出都會直接output 到 data

而Ajax 會將data 以 html的方式抓回來



到這邊有人會有疑問的是: 我不是選擇以json的方式抓回來嗎?

在這邊我要解釋的是,其實ajax 抓資料分為兩步驟

首先先以html的方式抓回, 再轉換為使用者要求的格式

如此就可以無痛的使用Ajax囉!

2013年3月21日 星期四

無痛安裝Solr

無痛安裝Solr

wget http://download.nextag.com/apache/lucene/solr/4.2.0/solr-4.2.0.tgz #下載
tar -zxvf solr-4.2.0.tgz #解壓縮執行

cd exampledocs
java -jar start.jar #執行主程式
INFO::Started SocketConnector@0.0.0.0:8983 #代表啟動

cd exampledocs
./post.sh monitor.xml #匯入index

http://localhost:8983/solr/select?q=*:*&wt=json #搜尋

http://localhost:8983/solr/ #瀏覽solr主頁


實作 Multi-Core
mkdir collection2/conf collection2/data


修改 solr.xml
<cores adminPath="/admin/cores">
  <core name="collection1" instanceDir="collection1" />
  <core name="collection2" instanceDir="collection2" />
</cores>

cp post.sh post2.sh
修改post.sh
URL = http://localhost:8983/solr/collection2/update

DIH ?
Memcached Solr ?

語法:


q - 查詢字串,必須的。
fq - q查詢符合結果中同時是fq查詢符合的。

fl - 指定返回那些欄位內容,用逗號或空格分隔多個。
start - 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。
rows - 指定返回結果最多有多少條記錄,配合start來實現分頁。
sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降冪, “price” 昇冪,默認是相關性降冪。

wt - (writer type)指定輸出格式,可以有 xml, json, php, phps, 


q.op - 覆蓋schema.xmldefaultOperator
df - 默認的查詢欄位,一般默認指定
qt - query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard
indent - true|on,json,php,phps,ruby輸出才有必要用這個參數。





參考:
http://www.solrtutorial.com/solr-in-5-minutes.html
http://blog.chenlb.com/category/solr-search
http://www.joetsuihk.com/apache_solr_%E5%A4%9A%E7%AB%99%E8%A8%AD%E5%AE%9A_multi_core_setup?language=zh-hant

Install a Web Server in CentOS on VirtualBox


下載 CentOS
http://isoredirect.centos.org/centos/6/isos/i386/

開一台虛擬機器
記憶體 512MB 硬碟 8G (沒出現圖形介面安裝 因為記憶體太小需652以上)
系統 > 處理器 > 啟用 PAE/NX
喜好設定 > 一般 > 可選擇機器資料夾
網路設定使用橋接器,跟實體機器橋接

安裝請選擇 Install or upgrade an existing system
完成

安裝 GNOME or KDE
yum  groupinstall "X Window System" "GNOME Desktop Environment"
yum groupinstall "X Window System" "KDE (K Desktop Environment)"

關閉 selinux
vim /etc/sysconfig/selinux
SELINUX=disabled

關閉 iptables
vim /etc/sysconfig/iptables
iptables -F # 清除 iptables 設定

設定網路卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes #開機自動使用 eth0 這張網卡

安裝 apache mysql php
yum install httpd
yum mysql mysql-server php-mysql
yum php

修改 DocumentRoot
vim /etc/httpd/conf/http.conf

設定開機啟動 apache mysql
chkconfig httpd on
chkconfig mysql on

同步資料夾需安裝 Guest Addition
出現錯誤訊息 Building the main Guest Additions module[FAILED]
安裝 yum install gcc make dkms kernel-devel kernel-headers
裝置 > 插入 Guest Addition CD 映像
點選 autorun.sh 安裝

裝置 > 共用資料夾設定 > 機器資料夾 > vbox D:\Dropbox\www
mount -t vbox /home/www
mount -l #查看 mount 的機器
umount vbox #卸除 mount 機器

設定開機啟動 my.script
vim /etc/rc.d/rc.local

host 設定
C:\Windows\System32\drivers\etc
192.168.0.x mysite.com

mysql 設定
mysqladmin -u root password 'your.password'
mysql -u root -p

mysql 匯出匯入
create db_name
mysqldump -u root -p db_name > backup.sql #匯出
mysql -u root -p db_name < backup.sql #匯入

(mac注意事項)
修改 VirtualBox 共同資料夾位置 (/users/abc/dropbox/www)
重啟 mount httpd

NameVirtualHost *:80 
<VirtualHost *:80> 
DocumentRoot /www/example1 
ServerName www.example1.com 
</VirtualHost> 

<VirtualHost *:80> 
DocumentRoot /www/example2 
ServerName www.example2.org 
# Other directives here 
</VirtualHost> 

2013年3月18日 星期一

將Click-Me imgur的圖片下載

將Click-Me imgur的圖片下載

#!/bin/bash
cat 'temp.txt' | while read line
do
    temp=$(echo $line | sed 's/^M//')
    index=$(echo $temp | awk -F "," '{ print $1 }')
    content=$(echo $temp | awk -F "," '{ print $2 }')
    picture=$(echo $temp | awk -F "," '{ print $3 }')
    flag=$(echo $temp | awk -F "," '{ print $4 }')

#如果等於1 就建一個資料夾
if [ ! -d /var/www/html/imgbackup/image/$index ]; then
    mkdir ./image/$index
fi

wget -t0 -O ./image/$index/$picture.jpg $content
echo "現在進行到-$index"
done

Linux Shell Script


#!/bin/bash
cat 'temp.txt' | while read line
do
temp=$(echo $line | sed 's/^M//') #將讀取進來的資料去除^M
index=$(echo $temp | awk -F "," '{ print $1 }') #用逗點分隔開,第一個字串。

if [ ! -d /var/www/html/imgbackup/image/$index ]; then #如果$index資料夾不存在
    mkdir ./image/$index
fi

wget -t0 -O ./image/$index/$picture.jpg $content #下載資料

2013年3月12日 星期二

web禁止存取.git資料夾 (apache git folder deny)

『環境』
  CentOS 6.x , apache
===========================================

有時候你可能需要在web資料夾下使用git來拿取網頁資料

於是你會多了一個.git的資料夾,並且裡面有很多檔案

但是又希望別人不能存取這個資料夾底下的東西

解決方法

vim /etc/httpd/conf.d/git_deny.conf
(新增一個設定檔)

加入

<DirectoryMatch "^/.*/\.git/">
  Order allow,deny
  deny from all
</DirectoryMatch>

然後再重新啟動httpd即可


2013年3月11日 星期一

實作git server更新多台server


   Git

Q:什麼是Repository?
Ans:就是倉庫的意思
Q:需要做哪些基礎設定?
Ans:
git config --global user.name "Tsung"
git config --global user.email "username@email.com"
git config --global color.diff auto # git diff 要顯示顏色
git config --global color.status auto # git status 要顯示顏色
git config --global color.branch auto
git config --global color.log auto # git log --graph 會很漂亮, 感謝日落提供.
git config --global core.excludesfile ~/.gitignore # 設置忽略名單
相關連結
GitHub官網 - https://github.com/

下載git軟體  yum install git
(如有需要) 下載gitk軟體(以圖表方式顯示) yum install gitk

「server端」
  1. useradd git #新增git帳號
  2. cd /home/git/project #切換到git目錄底下的project資料夾
  3. git init --bare (單純repository)
  4. 無法在此新增檔案,只單純用在repository

「client端」

  1. useradd git #新增git帳號
  2. cd /home/git/ #切換到git目錄
  3. git clone git@192.168.10.130:/home/git/project #將server端的資料複製到client端
  4. vim test.php #新增檔案
  5. git add . #加入檔案
  6. git commit -m 'this is a test file.' #commit檔案
  7. git pull #更新server端資料
  8. git push # 將檔案上傳上去
  9. git status #查詢git狀況

注意事項:
  1. chown -R git:git /home/git/project #更改檔案目錄擁有者及群組為git
  2. git config receive.denyCurrentBranch ignore #發生錯誤,忽略server端的master
後面要加入的 re.local 以及新增機器自動判斷是否已有.git 及 拉檔案  新增排程。

# git clone 的時候會顯示資料夾是空的。
#必須新增檔案 vim test.php; git add .; git commit -a "this is a first file."; 才能push and pull
# 第一次push的時候要下 git push git@192.168.10.130:/var/www/html/project master
#

git.script
if [ -d /var/www/html/project/.git ] ; then
    echo "project存在,git資料夾有存在,開始更新網站內容。"
    cd /var/www/html/project
    git pull
else
    echo "資料夾不存在,建立網站資料"
    rm -rf /var/www/html/project
    cd /var/www/html/
    git clone git@192.168.10.130:/var/www/html/project
    exit 0
fi
service httpd start

push.script
cd /var/www/html/project
git push

#編輯排程
crontab -e 
*/1 * * * * /var/www/html/pull.script  #每1分鐘執行一次。


利用CronTab實作排程

#使用排程
crontab -e #開啟排程檔案
13 12 1 2 1-7 /var/www/html/should-fit/schedule.script #在2越1日的12點13分執行schedule.script
[分 時 日 月 星期幾 指令script檔]

find /var/www/html/should-fit/images2/ -mtime -1 -exec rm -f {} \;
參數說明:利用find指令找出資料夾內修改時間超過一天的圖片,並把它刪除。

mktime(以天計算 "-n"代表幾天內,"+n"代表幾天之前,"n"代表幾天) 
exec rm -f(執行移除) 
{}(find找到的檔案) 
\;(程式指令結束)。

2013年3月7日 星期四

CentOS 指令大全

CentOS 指令大全

yum install php mysql mysql-server

chkconfig httpd on # 開機啟動
chkconfig mysqld on # 開機啟動




ps aux | grep httpd #查詢httpd是否正在執行。
chkconfig --list #列出現在的服務狀態。
chkconfig --level 345 httpd on #r將httpd服務在level 3.4.5 開啟。

讓開啟可以執行root權限的指令

Defaults:nobody !requiretty

管理防火牆 iptables

iptables-save #查看防火牆狀況。
iptables -F #刪除防火牆規則,只保留前三項。

vim /etc/sysconfig/iptables # 修改防火牆規則。
iptables-restore /etc/sysconfig/iptables #載入防火牆規則至設定。

學習筆記開站

我的第一篇文章,以後就在這邊記錄一些程式上的學習經驗好了。

FreeBSD


FreeBSD

查看安裝過那些軟體可下 pkg_info
檔案搜尋指令
  • whereis, locate, find
vim設定檔位置
  • ~/.vimrc
安裝LAMP大絕
建立Symbolic捷徑可下 ln [-sf] 來源檔 目標檔

PHP + CSS + HTML

Ascii Table

Ascii code table - http://www.asciitable.com/
可查詢ascii code, binary code

CSS

教學網站
CSS 語法教學
1.選擇器有很多種,常用的幾種有#(ID selectors)、一種是.(Class selectors),最後一種是前面什麼都不加(Type selectors)
更多的選擇器請參考CSS 選取器(Selector)種類簡介
2.分辨 IE6 IE7 Firefox 的 CSS Hack
新版(新增IE8)
3.為什麼要寫DOCTYPE?
4.細說inline inline-block 與 block 差異
5.IE box model bug
6.CSS中 ".app .ios{}" 與 ".app.ios{}"的差異
在class 選擇器中,如果兩個class中間有空格的話
代表是屬於從屬關係
例如:
<div class="app">
    <div class="ios">
    </div>
</div>
另外如果中間沒有空格的話
則代表說一個標籤裡面會自帶兩個class
例如:
<div class="app ios">
7.<p></p> 裡面瀏覽器希望放inline的標籤
因此如果放block的標籤會出錯

HTML

免費icon

PHP

函式用法參考:
trim() - 刪除空格, 類似function有 ltrim() 及 rtrim()
strpos() - 查看指定字元在字串的哪個位置, 也有許多類似function
htmlspecialchars() - 將特殊字元轉成html,避免injection
跟htmlentities()相同
intval() - 得到整數值
round() - 進位
setlocale() - 設定編碼
ucfirst() - 自動大寫
array_values() - re-index array
mysql_real_escape_string() - 自動加入反斜線
stripslashes() - 移除反斜線
預設的 magic_quotes_gpc 是on
這會導致表單傳送時PHP會自動幫特殊字元加上反斜線
建議將它關掉,由自己控制

PSR

相關連結

PHP XTemplete

1.主要分為 .php 跟 .xtpl檔 .xtpl檔的副檔名可以隨便亂改沒關係,建議改成.html
這樣vim就可以幫忙上色
2.用{}可以直接存取PHP global variable
例如:
{PHP._SERVER.HTTP_HOST}
3.用{}標示可替代的變數
例如:
{VARIABLE}
4.parse()後.xtpl會被轉譯,但要out()之後才會被output
5.資料可以先儲存在array中,再由insert_loop()或者是$xtpl->assign()方法存入
例如:
$xtpl->assign('DATA', $row[$i]);
$xtpl->assign('ROW_NR', $i);
$xtpl->parse('main.table.row');
$xtpl->insert_loop('main.table.row', array('DATA'=>$rows[$i],'ROW_NR'=>$i));
6.如果要將同樣的區塊parse兩次,那麼要使用clear_reset()
否則預設是使用auto_reset();
7.如果要一次parse() Block跟 Sub_Block
可以使用rparse()
8.使用set_null_string('no value...','EMAIL')
可以設定空字串的預設值
也可以直接使用set_null_string('value not specified!')來指定所有的空值
例如:
$xtpl->set_null_string('value not specified!')
9.如果subblock 忘記parse(), 則可以使用set_null_block()來預設沒parse()時所預設要出現的文字
10.如果要在一個tpl檔中include 其他的tpl檔,那麼可以使用{FILE {ex7-inc2.html}}
類似這樣來include 其他tpl檔

Notepad++

自訂副檔名對應程式語言

VMWARE

共用資料夾

MYSQL


MySQL

MySQL修改密碼與忘記密碼重設 - http://emn178.pixnet.net/blog/post/87659567-ysql%E4%BF%AE%E6%94%B9%E5%AF%86%E7%A2%BC%E8%88%87%E5%BF%98%E8%A8%98%E5%AF%86%E7%A2%BC%E9%87%8D%E8%A8%AD

CENTOS 安裝 mysql
yum install mysql mysql-server

移除rpm

mysql 有問題可能是之前裝了mysql-cluster

rpm -qa | egrep -i mysql* #找出之前的mysql-rpm
rpm -e mysql-cluster... #移除rpm

SQL語法

SQL 運算子大全
1.SELECT - 選取資料
SELECT * FROM table_name

或

SELECT LastName,FirstName FROM Persons
2.DISTINCT - 選取相異資料
SELECT DISTINCT City FROM Persons
3.WHERE - 指定條件
SELECT * FROM Persons
WHERE City='Sandnes'
4.AND與OR運算子範例
SELECT * FROM Persons WHERE
LastName='Svendson'
AND (FirstName='Tove' OR FirstName='Ola')
5.ORDER BY - 設定排序
SELECT * FROM Persons
ORDER BY LastName

或

SELECT * FROM Persons
ORDER BY LastName DESC
6.INSERT - 插入新資料
INSERT INTO Persons
VALUES (4,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')

或

INSERT INTO Persons (P_Id, LastName, FirstName)
VALUES (5, 'Tjessem', 'Jakob')
7.UPDATE - 更新資料
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND FirstName='Jakob'
8.DELETE - 刪除資料
DELETE FROM Persons
WHERE LastName='Tjessem' AND FirstName='Jakob'

如果要刪除全部列則下

DELETE FROM table_name

or

DELETE * FROM table_name

2013年3月5日 星期二

CentOS 實作SSH連線

實作過程:
  1. 以一個使用者(asami)的身分產生密鑰在/home/asami/.ssh/底下 (/ssh-keygen -t rsa)
  2. id_rsa id_rsa.pub
  3. 將密鑰灌進去 authorized_keys (cat id_rsa.pub >> authorized_keys) =>灌公鑰進去。
  4. 然後chmod 400 authorized_keys,稍微保護一下。
  5. 設定sshd_config  (vim /etc/ssh/sshd_config)

    /etc/ssh/sshd_config
    Protocol 2
    ServerKeyBits 1024
    PermitRootLogin no  # 禁止root登錄。

    #以下三行沒什麼要改的,把默認的#註釋去掉就行了
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile    .ssh/authorized_keys

    PasswordAuthentication no # 如果不用key登入,一定要設yes,KEY與密碼一定要二選一
    PermitEmptyPasswords no # 禁止使用空密碼登入
  6. 重啓sshd (/sbin/service sshd restart)
  7. 下載使用Puttygen,load id_rsa檔案,轉換另存private key。
    id_rsa -> id.rsa.ppk 。(亞馬遜pem -> ppk)
    filezilla 也要轉ppk
    遇到Puttygen不能使用,將檔案及Puttygen丟在D槽解決。

    無法登入原因,可能是你把KEY驗證開啟,又開啟不用密碼驗證。PasswordAuthentication no改爲PasswordAuthentication yes
    service sshd restart
  8. 下指令執行囉。 ssh -i id_rsa root@192.168.10.130  #用root登入遠端。(選擇私鑰~)
  9. /etc/hosts.allow and hosts.deny 可加入IP防止使用SSH連線。 #sshd 192.168.10.134
觀念提醒:
  1. server 端用 public key,client 端用 private key
  2. key傳的方式mail or filezilla的方式傳輸
  3. pem, id_rsa 利用 puttygen 轉 .ppk
  4. .ssh的資料夾權限務必設成755
  5. id_rsa.pub and authorized_keys 設成644
  6. id_rsa 權限設成600
  7. 用戶目錄權限設成755 or 700