2010年11月11日 星期四

利用netstat找出怪怪的連線

起因:
主機上偶爾有一個httpd的線程佔用大量記憶體,但一直不確定是那個網頁造成的
它會造成網路,暫時沒反應...>.<
努力找了很久都沒找到...(是我太笨嗎??)


後來先利用top來看出是那個httpd及其PID,
再利用netstat -ntup | grep ESTAB 來比對查詢是來自那一個ip
這樣就可以到httpd的log去查是那一個網頁

不過,查出來後竟然是因為mysql搜尋出來的資料量太大
它一直在收資料,整個頻寬都被它佔去了

所幸主機上還有另一張對內的網卡,於是把mysql的連線都轉而走那張對內的卡
這樣就解決這問題了
(這好像是早就應該要這麼做的事了....>.<)


以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat -na
顯示主機上所有已建立的連線。
netstat -an | grep :80 | sort
顯示所有 port 80 的連線,並把結果排序。
netstat -n -p|grep SYN_REC | wc -l
列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
netstat -n -p | grep SYN_REC | sort -u
同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出發送 SYNC_REC 的所有 ip 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每一個 ip 在主機上建立的連線數量。
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出從 TCP 或 UDP 連線到主機的 ip 的數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
列出每個 ip 建立的 ESTABLISHED 連線數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出每個 ip 建立的 port 80 連線數量。



參考資料:使用 netstat 找出不正常的連線
起因:
主機上偶爾有一個httpd的線程佔用大量記憶體,但一直不確定是那個網頁造成的
它會造成網路,暫時沒反應...>.<
努力找了很久都沒找到...(是我太笨嗎??)


後來先利用top來看出是那個httpd及其PID,
再利用netstat -ntup | grep ESTAB 來比對查詢是來自那一個ip
這樣就可以到httpd的log去查是那一個網頁

不過,查出來後竟然是因為mysql搜尋出來的資料量太大
它一直在收資料,整個頻寬都被它佔去了

所幸主機上還有另一張對內的網卡,於是把mysql的連線都轉而走那張對內的卡
這樣就解決這問題了
(這好像是早就應該要這麼做的事了....>.<)


以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat -na
顯示主機上所有已建立的連線。
netstat -an | grep :80 | sort
顯示所有 port 80 的連線,並把結果排序。
netstat -n -p|grep SYN_REC | wc -l
列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
netstat -n -p | grep SYN_REC | sort -u
同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出發送 SYNC_REC 的所有 ip 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每一個 ip 在主機上建立的連線數量。
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出從 TCP 或 UDP 連線到主機的 ip 的數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
列出每個 ip 建立的 ESTABLISHED 連線數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出每個 ip 建立的 port 80 連線數量。



參考資料:使用 netstat 找出不正常的連線

2010年9月14日 星期二

lsattr以及chattr的用法

前一陣子幫手上管理的網站換到別台主機
要去修改sshd登入時要用的key時..竟然不能修改..
我己經是root了耶...它竟然跟我說沒有權限修改這個檔案...>.<
差點沒瘋掉....研究好一陣子後...才知道原因
原來是該台主機安全性做得比較嚴謹,就是利用chattr來把部份檔案加上隱藏屬性

謎之音:你還有得學呢...


底下是chattr及lsattr的用法


[root@www ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設定一定,且僅有後面接的參數

A :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的電腦有幫助
S :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a :當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這個屬性。
c :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d :當 dump 程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能設定此屬性
s :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!
注意:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定




[root@www ~]# lsattr [-adR] 檔案或目錄
選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來!


參考資料來源:鳥哥的Linux私房菜
前一陣子幫手上管理的網站換到別台主機
要去修改sshd登入時要用的key時..竟然不能修改..
我己經是root了耶...它竟然跟我說沒有權限修改這個檔案...>.<
差點沒瘋掉....研究好一陣子後...才知道原因
原來是該台主機安全性做得比較嚴謹,就是利用chattr來把部份檔案加上隱藏屬性

謎之音:你還有得學呢...


底下是chattr及lsattr的用法


[root@www ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設定一定,且僅有後面接的參數

A :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的電腦有幫助
S :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a :當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這個屬性。
c :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d :當 dump 程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能設定此屬性
s :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!
注意:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定




[root@www ~]# lsattr [-adR] 檔案或目錄
選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來!


參考資料來源:鳥哥的Linux私房菜

2010年8月27日 星期五

linux 單一目錄檔案太多時該怎麼刪?

今天為了要清出硬碟空間...
硬是要刪掉一些東西
但老是遇到幾個目錄出現
bash: /bin/rm: Argument list too long
這樣的訊息....找了一下文章

發現原來是 rm 有最大一次刪除的數量,所以當一個目錄裡有太多的檔案或目錄時,就會出現錯誤,估計應該是在二萬以下,可以使用 find ./ | xargs rm -rf 來刪除,在這邊的目的是先使用 find 列出檔案,再導向到 xargs,xargs 再餵給 rm,在這裡,xargs 會分批依照 rm 的最大數量餵給 rm,然後就可以順利刪除檔案了

相關文章內容請詳閱文章出处:飞诺网(www.firnow.com) 今天為了要清出硬碟空間...
硬是要刪掉一些東西
但老是遇到幾個目錄出現
bash: /bin/rm: Argument list too long
這樣的訊息....找了一下文章

發現原來是 rm 有最大一次刪除的數量,所以當一個目錄裡有太多的檔案或目錄時,就會出現錯誤,估計應該是在二萬以下,可以使用 find ./ | xargs rm -rf 來刪除,在這邊的目的是先使用 find 列出檔案,再導向到 xargs,xargs 再餵給 rm,在這裡,xargs 會分批依照 rm 的最大數量餵給 rm,然後就可以順利刪除檔案了

相關文章內容請詳閱文章出处:飞诺网(www.firnow.com)

2010年6月3日 星期四

postfix+mysql(auth)+postfixadmin at centos

之前一直找到在其他linux套件上的做法,一直做不成功
(要嘛是debian的,要嘛是ubuntu的,不然就是fedora的)

主要是postfix+dovecot來完成的
(還有一個是搭配courier-imap,但這個我一直做不起來..>.<)
此篇文章主要是參考這一篇
(http://www.campworld.net/thewiki/pmwiki.php/LinuxServersCentOS/Cent5VirtMailServer)

下面的內容僅從中摘錄部份重點

首先要準備的幾個軟件
1.postfix with mysql(這個可以參考http://www.pigo.idv.tw/archives/323)
(centos預設的postfix是不支援mysql的,務必參考上述文章重新安裝)
2.Dovecot
3.mysql
4.httpd
5.postfixadmin
(這個是網頁的程序,麻煩自己去抓回來放在你的web目錄下,之後透過web就可以管理郵件帳號)
6.cyrus-sasl,cyrus-sasl-lib,cyrus-sasl-devel,cyrus-sasl-sql,cyrus-sasl-plain
上面除了1,5之外,其他都可以用centos5.4內建的套件就好(yum install xxxx)

首先把postfixadmin設定好
新版的postfixadmin在安裝上做了一些改良,使用者只要先把資料庫及使用者建立起來
以及修改config.inc.php這個檔案,剩下的就全都可以在網頁上完成了(不必再自己手動建立資料表)
(config.inc.php裡面也都有針對各項參數做說明)
如同下面的步驟
Now we need to setup the mysql database for mysqladmin. We only need to create the database and user. The setup file will create the rest.
> mysql -u root -p -e "CREATE DATABASE postfix;"
> mysql -u root -p -e "CREATE USER postfix@localhost IDENTIFIED BY 'choose_a_password';"
> mysql -u root -p -e "GRANT ALL PRIVILEGES ON postfix . * TO postfix@localhost;"

Now its time to setup the config file. Don't forget to set your password. Find the following items and change them.
> cd /usr/share/postfixadmin
> nano -w config.inc.php


# 這一行要改成true,否則無法安裝
$CONF['configured'] = true;

// Postfix Admin Path
// Set the location to your Postfix Admin installation here.
$CONF['postfix_admin_url'] = '/mailadmin/';

// Database Config
// mysql = MySQL 3.23 and 4.0
// mysqli = MySQL 4.1
// pgsql = PostgreSQL
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';


$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';


接下來,換設定一下postfix的main.cf(/etc/postfix/main.cf)
關於postfix原本的一些設定我就不多談了
(如下這些)
# network settings
inet_interfaces = all
mydomain = yourdomain.com
myhostname = host.yourdomain.com
mynetworks = 192.168.0.0/16, 127.0.0.0/24,
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains = $mydestination
# mail delivery
recipient_delimiter = +
========================
上面這些設定用預設也行,要針對自己的情況修改也行
參考鳥哥的文章可以瞭解詳細內容(簡易 Mail Server 架設 -- Postfix 設定)
或是連到
HOWTO Virtual Mail Hosting on CentOS 5.x - Postfix MySQL Dovecot Postfix Admin
這篇原本的文章中,參考它文中所附上的完整main.cf及master.cf設定檔內容

本文只針對要利用mysql來管理所需增設的一些設定
在/etc/postfix/main.cf新增下述設定

# virtual setup
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf,
regexp:/etc/postfix/virtual_regexp
virtual_gid_maps = static:89 #your postfix gid
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
virtual_minimum_uid = 89
virtual_transport = virtual
virtual_uid_maps = static:89 #your postfix uid

# authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes

# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

# rules restrictions
# smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org
smtpd_helo_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_hostname
smtpd_sender_restrictions = reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain
smtpd_helo_required = yes
unknown_local_recipient_reject_code = 550
disable_vrfy_command = yes
smtpd_data_restrictions = reject_unauth_pipelining


然後新增下面幾個個檔案
The postfix / mysql config files.

/etc/postfix/mysql-virtual_alias_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = alias
select_field = goto
where_field = address


/etc/postfix/mysql-virtual_domains_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
這裡要注意一下,我在postfixadmin新增網域時,把"備份網域"勾起來了,造成我信件一直被主機退回
上面這一行sql語法,就是會造成找不到允許接收信件網域的原因
看是要把備份網域取消,或是修改這一行,把backupmx = '0' 拿掉都行


/etc/postfix/mysql-virtual_mailbox_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = mailbox
select_field = maildir
where_field = username


接下來,修改這個檔案(讓smtp在寄信要求驗證時使用的設定檔)
/usr/lib/sasl2/smtpd.conf


pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'


接下來,產生ssl的key讓postfix可以支援TLS

Now generate an SSL certificate for postfix to have TLS support.
> mkdir /etc/postfix/ssl
> cd /etc/postfix/ssl
> openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650

We need to touch a file. So type the follwoing.
> touch /etc/postfix/virtual_regexp
上面這個動作,就是在main.cf中
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf,
regexp:/etc/postfix/virtual_regexp
這一行要用到的檔案,讓你也可以手動編輯允許收信的電子郵件及網域
可以參考http://www.sympa.org/faq/postfix這篇文章
內文主要就是在講這檔案的用途

接下來是設定一下信件存放的目錄
Finally we'll configure the mail store directory. We put it in the /home directory to make backups and other item easy. So type the following.
> mkdir /home/vmail
> chmod 770 /home/vmail
> chown postfix:postfix /home/vmail

最後,修改dovecot的設定檔(/etc/dovecot.conf)

# Dovecot config file
auth default {
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
}
first_valid_uid = 89
default_mail_env = maildir:/home/vmail/%d/%n
protocols = imaps imap pop3s pop3
ssl_cert_file = /etc/postfix/ssl/smtpd.pem
ssl_key_file = /etc/postfix/ssl/smtpd.pem


新增/etc/dovecot-mysql.conf ,內容如下

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=yourpassword
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 89 AS uid, 89 AS gid FROM mailbox WHERE username = '%u'


到這裡,整個作業就完成了,把postfix,dovecot都重新啟動後
這樣postfix就可以用postfixadmin來做管理了

文章只針對postfix,dovecot(pop3,imap)的部份做重點摘錄

之前一直找到在其他linux套件上的做法,一直做不成功
(要嘛是debian的,要嘛是ubuntu的,不然就是fedora的)

主要是postfix+dovecot來完成的
(還有一個是搭配courier-imap,但這個我一直做不起來..>.<)
此篇文章主要是參考這一篇
(http://www.campworld.net/thewiki/pmwiki.php/LinuxServersCentOS/Cent5VirtMailServer)

下面的內容僅從中摘錄部份重點

首先要準備的幾個軟件
1.postfix with mysql(這個可以參考http://www.pigo.idv.tw/archives/323)
(centos預設的postfix是不支援mysql的,務必參考上述文章重新安裝)
2.Dovecot
3.mysql
4.httpd
5.postfixadmin
(這個是網頁的程序,麻煩自己去抓回來放在你的web目錄下,之後透過web就可以管理郵件帳號)
6.cyrus-sasl,cyrus-sasl-lib,cyrus-sasl-devel,cyrus-sasl-sql,cyrus-sasl-plain
上面除了1,5之外,其他都可以用centos5.4內建的套件就好(yum install xxxx)

首先把postfixadmin設定好
新版的postfixadmin在安裝上做了一些改良,使用者只要先把資料庫及使用者建立起來
以及修改config.inc.php這個檔案,剩下的就全都可以在網頁上完成了(不必再自己手動建立資料表)
(config.inc.php裡面也都有針對各項參數做說明)
如同下面的步驟
Now we need to setup the mysql database for mysqladmin. We only need to create the database and user. The setup file will create the rest.
> mysql -u root -p -e "CREATE DATABASE postfix;"
> mysql -u root -p -e "CREATE USER postfix@localhost IDENTIFIED BY 'choose_a_password';"
> mysql -u root -p -e "GRANT ALL PRIVILEGES ON postfix . * TO postfix@localhost;"

Now its time to setup the config file. Don't forget to set your password. Find the following items and change them.
> cd /usr/share/postfixadmin
> nano -w config.inc.php


# 這一行要改成true,否則無法安裝
$CONF['configured'] = true;

// Postfix Admin Path
// Set the location to your Postfix Admin installation here.
$CONF['postfix_admin_url'] = '/mailadmin/';

// Database Config
// mysql = MySQL 3.23 and 4.0
// mysqli = MySQL 4.1
// pgsql = PostgreSQL
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';


$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';


接下來,換設定一下postfix的main.cf(/etc/postfix/main.cf)
關於postfix原本的一些設定我就不多談了
(如下這些)
# network settings
inet_interfaces = all
mydomain = yourdomain.com
myhostname = host.yourdomain.com
mynetworks = 192.168.0.0/16, 127.0.0.0/24,
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains = $mydestination
# mail delivery
recipient_delimiter = +
========================
上面這些設定用預設也行,要針對自己的情況修改也行
參考鳥哥的文章可以瞭解詳細內容(簡易 Mail Server 架設 -- Postfix 設定)
或是連到
HOWTO Virtual Mail Hosting on CentOS 5.x - Postfix MySQL Dovecot Postfix Admin
這篇原本的文章中,參考它文中所附上的完整main.cf及master.cf設定檔內容

本文只針對要利用mysql來管理所需增設的一些設定
在/etc/postfix/main.cf新增下述設定

# virtual setup
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf,
regexp:/etc/postfix/virtual_regexp
virtual_gid_maps = static:89 #your postfix gid
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
virtual_minimum_uid = 89
virtual_transport = virtual
virtual_uid_maps = static:89 #your postfix uid

# authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes

# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

# rules restrictions
# smtpd_client_restrictions = reject_rbl_client zen.spamhaus.org
smtpd_helo_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_hostname
smtpd_sender_restrictions = reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain
smtpd_helo_required = yes
unknown_local_recipient_reject_code = 550
disable_vrfy_command = yes
smtpd_data_restrictions = reject_unauth_pipelining


然後新增下面幾個個檔案
The postfix / mysql config files.

/etc/postfix/mysql-virtual_alias_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = alias
select_field = goto
where_field = address


/etc/postfix/mysql-virtual_domains_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
這裡要注意一下,我在postfixadmin新增網域時,把"備份網域"勾起來了,造成我信件一直被主機退回
上面這一行sql語法,就是會造成找不到允許接收信件網域的原因
看是要把備份網域取消,或是修改這一行,把backupmx = '0' 拿掉都行


/etc/postfix/mysql-virtual_mailbox_maps.cf

hosts = localhost
user = postfix
password = postfix
dbname = postfix
table = mailbox
select_field = maildir
where_field = username


接下來,修改這個檔案(讓smtp在寄信要求驗證時使用的設定檔)
/usr/lib/sasl2/smtpd.conf


pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'


接下來,產生ssl的key讓postfix可以支援TLS

Now generate an SSL certificate for postfix to have TLS support.
> mkdir /etc/postfix/ssl
> cd /etc/postfix/ssl
> openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650

We need to touch a file. So type the follwoing.
> touch /etc/postfix/virtual_regexp
上面這個動作,就是在main.cf中
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf,
regexp:/etc/postfix/virtual_regexp
這一行要用到的檔案,讓你也可以手動編輯允許收信的電子郵件及網域
可以參考http://www.sympa.org/faq/postfix這篇文章
內文主要就是在講這檔案的用途

接下來是設定一下信件存放的目錄
Finally we'll configure the mail store directory. We put it in the /home directory to make backups and other item easy. So type the following.
> mkdir /home/vmail
> chmod 770 /home/vmail
> chown postfix:postfix /home/vmail

最後,修改dovecot的設定檔(/etc/dovecot.conf)

# Dovecot config file
auth default {
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
}
first_valid_uid = 89
default_mail_env = maildir:/home/vmail/%d/%n
protocols = imaps imap pop3s pop3
ssl_cert_file = /etc/postfix/ssl/smtpd.pem
ssl_key_file = /etc/postfix/ssl/smtpd.pem


新增/etc/dovecot-mysql.conf ,內容如下

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=yourpassword
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 89 AS uid, 89 AS gid FROM mailbox WHERE username = '%u'


到這裡,整個作業就完成了,把postfix,dovecot都重新啟動後
這樣postfix就可以用postfixadmin來做管理了

文章只針對postfix,dovecot(pop3,imap)的部份做重點摘錄

2010年6月2日 星期三

別輕估自己在朋友心中的重要性

這是一篇轉載的文章,看完後深有同感
但我的情況倒不像文章中有那麼大的改變

而是一些讓我一輩子都忘不掉的一句話
或是造成我日後做事的一些準則之類的

朋友,感謝有你們,才會有今天的我


我唸高一時,有一天看到一位同班同學吉米‧凱從學校走回家;他看來是把所有在學校用的書要都帶回家。我想著:為什麼有人要在禮拜五把所有的書都帶回家呢?他一定是個很無趣的人。這個週末我已經計畫好參加一個宴會加上明天下午與朋友們來一場足球賽;所以我聳了聳肩,繼續走在回家的路。

不一會兒,我看到一群小孩跑向他,撞了過去,把他的書全撞飛了,並且絆倒他,讓他跌到泥中。他的眼鏡也掉在離他有十尺遠的草地上,>當他抬頭起來時,我看到他流露出很悲傷的眼神;那時我心軟了,我趕緊跑到他的身邊幫他找到眼鏡,同時看到了他眼角的淚光。

當我把眼鏡遞還給他時,「那些小孩真是混蛋,他們真的是欠扁!」他臉上浮出一個大笑容,說:「謝了!」。那不是普通的一笑,而是由心裡發出對他人真誠的謝意。

我幫他撿起散落的書,並問他住在那裡,原來他住在我家附近,但我卻不曾看過他。

他說,因為之前他是上私立學校。我和他一直聊天到家,我也幫他揹著他的書,我又發現,他是一個蠻酷的小子。分手前,我問他要不要在禮拜日一起去踢足球。他說好。我們就整個週末都玩在一起,而且我又發現越認識吉米,我越喜歡他;我的朋友們也有同感。

禮拜一早上,我又碰到吉米和他那一大堆的書。我問他:「你真是不簡單喔,每天這樣下去,你的臂力將會不得了喔!」他只是笑笑,並把一半的書丟給我。在後來的四年,我跟吉米成了最好的朋友。當我們唸到高四時(這是美國的學制),經過一番考慮,吉米決定要到喬治城大學讀醫學,而我要到伯爵大學唸書;但我知道我們會永遠都是朋友。

畢業那一年是由吉米代表畢業班致詞,我一直以這是很無趣的事來開他的玩笑。畢業典禮的那一天,我見到吉米,他真是帥呆了!他胖了一點,帶眼鏡也比較好看些;而且他很受女孩們的喜歡,比我有更多的約會?天啊!有時候我真的會嫉妒耶!這時我看出他很緊張要上台致詞,所以就拍拍他的背,又說:「嘿!你一定沒問題的!」他很感激的看著我,並笑著說「謝謝!」

他上台後,先清了清喉嚨開始他的致詞,「畢業是要來感謝一些曾經幫你度過難關的人,

比如是你的父母、老師、兄弟姊妹,或是你的教練...和你的朋友們。在這裡我要告訴大家,

「做一個人的朋友」是你可以給對方的最好禮物。我要來說一個故事.......」我以不可思議的眼神看著他,當他講著我們第一次相遇的故事。他說,那時正計畫要在週末時自殺,於是把學校置物箱裡的東西都清光了,希望死後媽媽不必再為他收拾殘局。然後,他很認真的看著我,並對我微笑,「很幸運的,我被救了,我被我的朋友從要做的錯事中救了出來。」當全場的聽眾聽到這位帥哥說出這件事時,歎息聲四起;我看到他的雙親看著我,並且對我報以感激的微笑。直到那時我才發現到,千萬不要低估自己的行動可能帶來的後果,也許一個小小的動作可以改變一個人的一生。不管世界變的怎樣,上帝讓我們和別人的生活交錯在一起時,

要我們要儘量找出對方的優點來!

--摘自耕心週刊

這是一篇轉載的文章,看完後深有同感
但我的情況倒不像文章中有那麼大的改變

而是一些讓我一輩子都忘不掉的一句話
或是造成我日後做事的一些準則之類的

朋友,感謝有你們,才會有今天的我


我唸高一時,有一天看到一位同班同學吉米‧凱從學校走回家;他看來是把所有在學校用的書要都帶回家。我想著:為什麼有人要在禮拜五把所有的書都帶回家呢?他一定是個很無趣的人。這個週末我已經計畫好參加一個宴會加上明天下午與朋友們來一場足球賽;所以我聳了聳肩,繼續走在回家的路。

不一會兒,我看到一群小孩跑向他,撞了過去,把他的書全撞飛了,並且絆倒他,讓他跌到泥中。他的眼鏡也掉在離他有十尺遠的草地上,>當他抬頭起來時,我看到他流露出很悲傷的眼神;那時我心軟了,我趕緊跑到他的身邊幫他找到眼鏡,同時看到了他眼角的淚光。

當我把眼鏡遞還給他時,「那些小孩真是混蛋,他們真的是欠扁!」他臉上浮出一個大笑容,說:「謝了!」。那不是普通的一笑,而是由心裡發出對他人真誠的謝意。

我幫他撿起散落的書,並問他住在那裡,原來他住在我家附近,但我卻不曾看過他。

他說,因為之前他是上私立學校。我和他一直聊天到家,我也幫他揹著他的書,我又發現,他是一個蠻酷的小子。分手前,我問他要不要在禮拜日一起去踢足球。他說好。我們就整個週末都玩在一起,而且我又發現越認識吉米,我越喜歡他;我的朋友們也有同感。

禮拜一早上,我又碰到吉米和他那一大堆的書。我問他:「你真是不簡單喔,每天這樣下去,你的臂力將會不得了喔!」他只是笑笑,並把一半的書丟給我。在後來的四年,我跟吉米成了最好的朋友。當我們唸到高四時(這是美國的學制),經過一番考慮,吉米決定要到喬治城大學讀醫學,而我要到伯爵大學唸書;但我知道我們會永遠都是朋友。

畢業那一年是由吉米代表畢業班致詞,我一直以這是很無趣的事來開他的玩笑。畢業典禮的那一天,我見到吉米,他真是帥呆了!他胖了一點,帶眼鏡也比較好看些;而且他很受女孩們的喜歡,比我有更多的約會?天啊!有時候我真的會嫉妒耶!這時我看出他很緊張要上台致詞,所以就拍拍他的背,又說:「嘿!你一定沒問題的!」他很感激的看著我,並笑著說「謝謝!」

他上台後,先清了清喉嚨開始他的致詞,「畢業是要來感謝一些曾經幫你度過難關的人,

比如是你的父母、老師、兄弟姊妹,或是你的教練...和你的朋友們。在這裡我要告訴大家,

「做一個人的朋友」是你可以給對方的最好禮物。我要來說一個故事.......」我以不可思議的眼神看著他,當他講著我們第一次相遇的故事。他說,那時正計畫要在週末時自殺,於是把學校置物箱裡的東西都清光了,希望死後媽媽不必再為他收拾殘局。然後,他很認真的看著我,並對我微笑,「很幸運的,我被救了,我被我的朋友從要做的錯事中救了出來。」當全場的聽眾聽到這位帥哥說出這件事時,歎息聲四起;我看到他的雙親看著我,並且對我報以感激的微笑。直到那時我才發現到,千萬不要低估自己的行動可能帶來的後果,也許一個小小的動作可以改變一個人的一生。不管世界變的怎樣,上帝讓我們和別人的生活交錯在一起時,

要我們要儘量找出對方的優點來!

--摘自耕心週刊

注意飲食

脂肪瘤好像變多了...>.<

飲食習慣上有沒有多吃什麼能避免脂肪瘤的復發,或者少吃哪類食物?
不妨掌握下列原則:
1.盡量選擇燙的或煮的食材,避免油炸食物;
2.避免喝酒,因為每公克酒精會直接代謝、以脂肪形式儲存之;
3.每日熱量控制原則在二千大卡以內;
4.少吃消夜、少用油炸、少放調味料。





有益脂肪代謝的蔬果舉例

1.蔬果名稱:繖狀花科的胡蘿蔔與芹菜;洋 類:大蒜、韭菜、蘆筍、洋禾本
科的玉米、小麥與燕麥;對身體的好處:維生素A與胡蘿蔔素可以除去老化和提
供肝臟必要營養,加速脂肪代謝。

2.蔬果名稱:十字花科:甘藍、花椰菜
對身體的好處:豐富的膳食纖維可以減低脂肪的蓄積,加速體內糞便的排出。

3.蔬果名稱:香瓜、檸檬、西瓜、蘆薈、番茄、絲瓜
對身體的好處:除了有豐富的維他命C之外,這些水果也含有穩定血壓的鉀礦物
質,讓身體代謝正常化。



脂肪瘤

  脂肪瘤是相當常見的皮下良性腫瘤,其內容物為脂肪,脂肪瘤通常它的外圍有相當薄的一層纖維層,以和周圍的正常組織隔開。但有時也會沒有這層纖維層,因而不易和附近正常的脂肪組織做區分。

  脂肪瘤好發的部位可以遍及全身,最常見的位置是後背部、肩牓、後頸等部位,部份的病人也會有全身多發性的脂肪瘤。

  脂肪瘤本身極少會有惡性的變化。治療的方法便是手術切除,通常病人要求手術的時機,是因為脂肪瘤造成異物感,或皮膚的隆起。少部份的病人,因為脂肪瘤和鄰近脂肪組織不易區分,所以無法完全切除,造成復發。 http://bigchao.myweb.hinet.net/med/ps/chao_4.htm
脂肪瘤是一種良性腫瘤,多發生於皮下。瘤周有一層薄的結締組織包囊,內有被結締組織束分成葉狀成群的正常脂肪細胞。有的脂肪瘤在結構上除大量脂肪組織外,還含有較多結締組織或血管,即形成複雜的脂肪瘤。

病因
瘤周有一層薄的結締組織包囊,內有
被結締組織束分成葉狀成群的正常脂肪細胞。有的脂肪瘤在結構上除大量脂肪組織外,還含有較多結締組織或血管,即形成複雜的脂肪瘤。

症狀
此類腫瘤好發於肩、背、臀部及大腿內側,頭部發病也常見。位於皮下組織內的脂肪瘤大小不一,大多呈扁圓形或分葉,分界清楚;邊界分不清者要提防惡性脂肪瘤的可能。腫瘤質軟有彈性(注意與較大的囊腫區別),有的可有假性波動感。腫瘤不與表皮粘連,皮膚表面完全正常,基部較廣泛。檢查時以手緊壓脂肪瘤基部,可見分葉形態。皮膚可出現“桔皮”狀。腫瘤發展甚緩慢,大多對機體無嚴重不良影響,惡性變者甚少。

此外另有一類多發性圓形或卵圓形結節狀脂肪瘤,常見於四肢、腰、腹部皮下。腫瘤大小及數目不定,較一般脂肪瘤略硬,壓迫時疼痛,因而稱為痛性脂肪瘤或多發性脂肪瘤。



所有文章均從網路轉載而來,若有侵犯到原作者權益敬請告知,定會馬上處理!

脂肪瘤好像變多了...>.<

飲食習慣上有沒有多吃什麼能避免脂肪瘤的復發,或者少吃哪類食物?
不妨掌握下列原則:
1.盡量選擇燙的或煮的食材,避免油炸食物;
2.避免喝酒,因為每公克酒精會直接代謝、以脂肪形式儲存之;
3.每日熱量控制原則在二千大卡以內;
4.少吃消夜、少用油炸、少放調味料。





有益脂肪代謝的蔬果舉例

1.蔬果名稱:繖狀花科的胡蘿蔔與芹菜;洋 類:大蒜、韭菜、蘆筍、洋禾本
科的玉米、小麥與燕麥;對身體的好處:維生素A與胡蘿蔔素可以除去老化和提
供肝臟必要營養,加速脂肪代謝。

2.蔬果名稱:十字花科:甘藍、花椰菜
對身體的好處:豐富的膳食纖維可以減低脂肪的蓄積,加速體內糞便的排出。

3.蔬果名稱:香瓜、檸檬、西瓜、蘆薈、番茄、絲瓜
對身體的好處:除了有豐富的維他命C之外,這些水果也含有穩定血壓的鉀礦物
質,讓身體代謝正常化。



脂肪瘤

  脂肪瘤是相當常見的皮下良性腫瘤,其內容物為脂肪,脂肪瘤通常它的外圍有相當薄的一層纖維層,以和周圍的正常組織隔開。但有時也會沒有這層纖維層,因而不易和附近正常的脂肪組織做區分。

  脂肪瘤好發的部位可以遍及全身,最常見的位置是後背部、肩牓、後頸等部位,部份的病人也會有全身多發性的脂肪瘤。

  脂肪瘤本身極少會有惡性的變化。治療的方法便是手術切除,通常病人要求手術的時機,是因為脂肪瘤造成異物感,或皮膚的隆起。少部份的病人,因為脂肪瘤和鄰近脂肪組織不易區分,所以無法完全切除,造成復發。 http://bigchao.myweb.hinet.net/med/ps/chao_4.htm
脂肪瘤是一種良性腫瘤,多發生於皮下。瘤周有一層薄的結締組織包囊,內有被結締組織束分成葉狀成群的正常脂肪細胞。有的脂肪瘤在結構上除大量脂肪組織外,還含有較多結締組織或血管,即形成複雜的脂肪瘤。

病因
瘤周有一層薄的結締組織包囊,內有
被結締組織束分成葉狀成群的正常脂肪細胞。有的脂肪瘤在結構上除大量脂肪組織外,還含有較多結締組織或血管,即形成複雜的脂肪瘤。

症狀
此類腫瘤好發於肩、背、臀部及大腿內側,頭部發病也常見。位於皮下組織內的脂肪瘤大小不一,大多呈扁圓形或分葉,分界清楚;邊界分不清者要提防惡性脂肪瘤的可能。腫瘤質軟有彈性(注意與較大的囊腫區別),有的可有假性波動感。腫瘤不與表皮粘連,皮膚表面完全正常,基部較廣泛。檢查時以手緊壓脂肪瘤基部,可見分葉形態。皮膚可出現“桔皮”狀。腫瘤發展甚緩慢,大多對機體無嚴重不良影響,惡性變者甚少。

此外另有一類多發性圓形或卵圓形結節狀脂肪瘤,常見於四肢、腰、腹部皮下。腫瘤大小及數目不定,較一般脂肪瘤略硬,壓迫時疼痛,因而稱為痛性脂肪瘤或多發性脂肪瘤。



所有文章均從網路轉載而來,若有侵犯到原作者權益敬請告知,定會馬上處理!

2010年5月25日 星期二

vsftpd denyhost

本來打算改一下denyhosts的設定檔就好
但一直無法成功
只好另外找一個專門寫來檢查vsftpd.log的python程式

用法也很簡單,直接執行該檔案就好
(系統要安裝python)


下載點:
vsftpd_denyhost.py
本來打算改一下denyhosts的設定檔就好
但一直無法成功
只好另外找一個專門寫來檢查vsftpd.log的python程式

用法也很簡單,直接執行該檔案就好
(系統要安裝python)


下載點:
vsftpd_denyhost.py

2010年4月30日 星期五

mysql匯入/匯出

備份及匯入 mysql database
備份 SQL data:
>mysqldump -u 使用者名稱 -p –default-character-set=utf8 資料庫名稱 > backup.sql

匯入 SQL data:
>mysql -u 使用者名稱 -p 資料庫名稱 < backup.sql 備份及匯入 mysql database
備份 SQL data:
>mysqldump -u 使用者名稱 -p –default-character-set=utf8 資料庫名稱 > backup.sql

匯入 SQL data:
>mysql -u 使用者名稱 -p 資料庫名稱 < backup.sql

2010年4月22日 星期四

How to use ftp in a shell script

公司內部在用的備份機制原本用wput來上傳的
但無奈換個ftp server後,就一直無法順利上傳
研判應該是wput無法針對新版的ftp server正確使用PASV模式
於是只好改用shell script直接上傳
下面的資料摘自How to use ftp in a shell script


Example (non-working) script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST <<END_SCRIPT
user $USER
$PASSWD
put $FILE
quit
END_SCRIPT
exit 0

The above script will just hang if run in the foreground (in an xterm), or if run in the background (from a cron job), it will fail to perform the work of transferring file.txt.

/dev/tty names a strange, magic device. Each process (more strictly each process group) has a different /dev/tty, and you can not naively make ftp clients read the password from some non-magic, yet convenient source, like a "here document". When run in an xterm, the script above appears to hang because it reads the password from /dev/tty. The xterm constitutes the script's /dev/tty, so the script waits for keyboard input.

Example Working Script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0

公司內部在用的備份機制原本用wput來上傳的
但無奈換個ftp server後,就一直無法順利上傳
研判應該是wput無法針對新版的ftp server正確使用PASV模式
於是只好改用shell script直接上傳
下面的資料摘自How to use ftp in a shell script


Example (non-working) script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST <<END_SCRIPT
user $USER
$PASSWD
put $FILE
quit
END_SCRIPT
exit 0

The above script will just hang if run in the foreground (in an xterm), or if run in the background (from a cron job), it will fail to perform the work of transferring file.txt.

/dev/tty names a strange, magic device. Each process (more strictly each process group) has a different /dev/tty, and you can not naively make ftp clients read the password from some non-magic, yet convenient source, like a "here document". When run in an xterm, the script above appears to hang because it reads the password from /dev/tty. The xterm constitutes the script's /dev/tty, so the script waits for keyboard input.

Example Working Script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0

2010年3月22日 星期一

在javascript中抓取陣列資料

記錄在javascript中如何取得在HTML中的陣列資料
以及如何將之讀取出來


一般來說,我們在javascript裡使用的陣列型態的方法如下
例:

//宣告
var url_arr=new Array('software.sopili.net','dev.sopili.net');
//讀取
for(var i in url_arr){document.write(url_arr[i]+'
');}

那,如果想要像php一樣,array的key值是用字串
例:

$url_arr=Array('software'=>'software.sopili.net','dev'=>'dev.sopili.net');
foreach($url_arr as $key=>$value){
echo $key."
";
//重點是 key,有時候非常的需要key這個值,然後是字串型態
}


這時候要用JSON的格式
例:

//宣告
var url_arr={'software':'software.sopili.net','dev':'dev.sopili.net'};
//讀取
for(var key in url_arr){
//這裡面的key值,就真的是字串了!
document.write(url_arr[key]+'
');
}

接下來,要如何從html裡面讀取陣列的值呢?
假使資料來源如下:

<input name="education[]" type="text" size="20" maxlength="40" />
<input name="education[]" type="text" size="20" maxlength="40" />
<input name="education[]" type="text" size="20" maxlength="40" />

PHP的用法很簡單,直接使用"education"這個名稱就好
例:

foreach($_POST['education'] as $key=>$value) echo $key.' '.$value;

javascript的麻煩一點,但差不多的用法
例:

var mutli_education = document.form_name.elements["education[]"];
for(i=0;i < mutli_education.length;i++){ alert(mutli_education[i].value);}


參考資料:
1.http://dev.sopili.net/2008/11/javascriptarraykey_6376.html
2.http://roshanbh.com.np/2008/08/handling-array-html-form-elements-javascript-php.html
記錄在javascript中如何取得在HTML中的陣列資料
以及如何將之讀取出來


一般來說,我們在javascript裡使用的陣列型態的方法如下
例:

//宣告
var url_arr=new Array('software.sopili.net','dev.sopili.net');
//讀取
for(var i in url_arr){document.write(url_arr[i]+'
');}

那,如果想要像php一樣,array的key值是用字串
例:

$url_arr=Array('software'=>'software.sopili.net','dev'=>'dev.sopili.net');
foreach($url_arr as $key=>$value){
echo $key."
";
//重點是 key,有時候非常的需要key這個值,然後是字串型態
}


這時候要用JSON的格式
例:

//宣告
var url_arr={'software':'software.sopili.net','dev':'dev.sopili.net'};
//讀取
for(var key in url_arr){
//這裡面的key值,就真的是字串了!
document.write(url_arr[key]+'
');
}

接下來,要如何從html裡面讀取陣列的值呢?
假使資料來源如下:

<input name="education[]" type="text" size="20" maxlength="40" />
<input name="education[]" type="text" size="20" maxlength="40" />
<input name="education[]" type="text" size="20" maxlength="40" />

PHP的用法很簡單,直接使用"education"這個名稱就好
例:

foreach($_POST['education'] as $key=>$value) echo $key.' '.$value;

javascript的麻煩一點,但差不多的用法
例:

var mutli_education = document.form_name.elements["education[]"];
for(i=0;i < mutli_education.length;i++){ alert(mutli_education[i].value);}


參考資料:
1.http://dev.sopili.net/2008/11/javascriptarraykey_6376.html
2.http://roshanbh.com.np/2008/08/handling-array-html-form-elements-javascript-php.html

2010年3月16日 星期二

使用yum時遇到的錯誤

常會遇見在CentOS下使用yum或rpm指令時,發生錯誤:
錯誤訊息大概都大同小異
例:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: xxxx.....

主要做法如下,更新後即可使用


1. rm /var/lib/rpm/__db.00*
2. rpm --rebuilddb

rebuilddb之後,再重新執行安裝即可。

參考資料來源:http://www.kume.idv.tw/read-254.html
常會遇見在CentOS下使用yum或rpm指令時,發生錯誤:
錯誤訊息大概都大同小異
例:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: xxxx.....

主要做法如下,更新後即可使用


1. rm /var/lib/rpm/__db.00*
2. rpm --rebuilddb

rebuilddb之後,再重新執行安裝即可。

參考資料來源:http://www.kume.idv.tw/read-254.html

2010年3月8日 星期一

刪除特定的process

由於有些程式會當掉,於是用了笨方法,每n小時就重啟
原本是用killall xxxx 來把程式砍掉
但現在有一支程式不能刪...於是找了一些方式來過濾,語法如下



ps aux grep 關鍵字 grep -v grep awk '{print $2}'

但是這樣只會列出PID數字,還無法達成一行刪除,問了同事發現有個 xargs的好東西

所以要刪掉某個程式的所有 Process 的語法如下

ps aux grep 關鍵字 grep -v grep awk '{print $2}' xargs -L1 kill

這樣就會把前面 stdout 出來的 PID 數字,再倒給 kill 去砍囉~

參考資料: 一行刪除程式所有的 Process字串處理工具: Awk

由於有些程式會當掉,於是用了笨方法,每n小時就重啟
原本是用killall xxxx 來把程式砍掉
但現在有一支程式不能刪...於是找了一些方式來過濾,語法如下



ps aux grep 關鍵字 grep -v grep awk '{print $2}'

但是這樣只會列出PID數字,還無法達成一行刪除,問了同事發現有個 xargs的好東西

所以要刪掉某個程式的所有 Process 的語法如下

ps aux grep 關鍵字 grep -v grep awk '{print $2}' xargs -L1 kill

這樣就會把前面 stdout 出來的 PID 數字,再倒給 kill 去砍囉~

參考資料: 一行刪除程式所有的 Process字串處理工具: Awk