Monday, May 31, 2010

絢麗的螢幕保護程式

給未來的裕翔

想要絢麗的螢幕保護程式

請安裝xscreensaver套件

Thursday, May 27, 2010

httpd的htaccess

給未來的裕翔

關於.htaccess

裡面的AuthName後接的字串如果沒有雙引號

似乎會錯

client端如果一直輸完密碼又出現視窗要求輸入密碼

可能是帳號大小寫錯誤

或是沒有為該帳號設密碼

被保護的資料夾可以放/var/www下

而不需要每次什麼都丟到/var/www/html裡面去

ifconfig設定虛擬interface

給未來的裕翔

使用ifconfig建立一個虛擬interface

這樣重開機之後就不見了, 僅供本次使用

ifconfig eth0:1 192.168.0.X netmask 255.255.255.0 up

拿來當ip based的virtual host使用

重新啟動後, ifconfig看不到我剛建立的虛擬interface

不過還是可以ping到!!!

yum的repo的enabled預設1?

給未來的裕翔

/etc/yum.repos.d裡面的repo檔

要設定來源時

似乎不需要特別設定enabled=1?

因為沒設也會成功說

httpd雜亂筆記

給未來的裕翔

對httpd而言, mod_ssl是跟加密相關的模組

/etc/httpd/conf.d/*   裡面是跟ssl相關的東東

在/etc/httpd/conf/httpd.conf裡面的設定

其中有個叫order, ex:

order deny, allow

deny from xxx

allow from all

因為放在order後面的那項優先度比較高

所以一旦衝突有它為優先

所以上面設定中的deny from xxx是白搭

網頁建立好後, 可用links指令來快速檢查是否有開成功

links -dump http://blabla...

dump就是把網頁的文字內容秀到console

不然會進到網頁裡去

至於virtual host, name based的那個

如果現在新增virt1和virt2在/var/www裡面

那之後除非在本機

links -dump http://localhost

不然是看不到/var/www/html裡面的網頁的

打IP也只會一直看到第一台設定的virtual host

建置virtual host重要的設定只有兩個

DocumentRoot和Servername, 不過IP要記得改三處

(事後細節驗證, 第一處不改會失效, 所以網址都指向第一個virtual host)

(而第二處和第三處可以改成ip也可改成網址)

(如果不改, 保持星號, 那就會跟第一處不改的結果一樣, 都指向第一個virtual host)

兩個virtual host的段落加上面的NameVirtualHost設定

Tuesday, May 25, 2010

pam雜亂小筆記

給未來的裕翔

pam有一堆模組

我也不是很懂, 先把懂的記下來

/etc/pam.d裡面放的都是可以用pam控管的

/etc/securetty如果註解哪一個, root就不能在那一個登入

/etc/nologin如果存在, non-root user就會無法登入

把/etc/pam.d/vsftpd秀出來看的話

auth pam_listfile.so sense=deny file=/etc/vsftpd/ftpusers

sense如果是deny, 那後面file就是黑名單

如果是deny, 那就面file就是白名單

xinetd雜亂小筆記

給未來的裕翔

雖然ldd in.telnetd看不到libwrap.so

不過因為它屬於xinetd控管

而xinetd有用到libwrap.so

所以依舊可以使用TCPWRAPPER來控管

練習時請先確定有安裝套件xinetd和telnet-server

注意: 如果我要開放telnet

只需要在hosts.allow增加in.telnetd即可

不需要增加xinetd

不過xinetd的service要開

service xinetd start

關於hosts.allow和hosts.deny機制

給未來的裕翔

關於hosts.allow和hosts.deny是有個機制存在的

當有個client跟我要求一個TCPWRAPPER控管的服務

它會先比對hosts.allow

有寫進去的就allow, 廢話

如果client不符和裡面寫的!?

就繼續比對hosts.deny

沒被寫進去的話視同allow

寫進去的當然就是deny

如果多個服務想寫在同一行, 以逗號區隔

如果多個網段或IP想寫在同一行, 以空白區隔

還可以用spawn接shell script

ex: sshd: ALL: spawn echo "%c try to login %s" | mail -s warning root

那個echo不需要完整路徑

通常可以用TCPWRAPPER控管的有:

sendmail

vsftpd

xinetd

in.telnetd   這是/etc/xinetd.d/telnet裡面的server設定

portmap

NAT簡介

給未來的裕翔

NAT是一個IP轉址的服務

內部網路如果要連外面

必須要改封包的source, 不然到目標機器後

回傳的destination(就是一開始的source)非公用IP

傳不回來

因此我需要NAT在我封包丟出的時候幫我改source

改source的NAT稱為SNAT

由於是在ROUTER(SNAT)決定destination是外部還是內部網路

是外部就改source, 是內部就不改, 所以是POSTROUTING

那如果是外面的機器跟我要求服務, 像是網路或是FTP

那我就要修改它的destination才可以通道內部網路

改destination的 NAT稱為DNAT

由於是先改再決定要傳到哪

所以是PREROUTING

如果我只有申請一個合法IP

以跟我要求服務的port來決定要怎麼改它們的destination

那就稱為NAPT

指令部份請參考筆記, 感覺現在打出來不太好

iptables的ESTABLISHED和RELATED

給未來的裕翔

終於懂了~

什麼是iptables裡面的ESTABLISHED和RELATED?

假設我是A我要找C, 中間必須透過B

所以, A->B->C, 然後C回一個封包給我

那就是ESTABLISHED

如果我在B救出問題了

A->B, 然後B回我一個封包, 那就是RELATED

ESTABLISHED是RELATED

但RELATED不一定是ESTABLISHED

不過現在大家都乾脆兩個一起寫了~

報告完畢

iptables為何需要自訂chain?

給未來的裕翔

iptables可以自訂chain

哪時會用到?

假設我現在iptables有三十條rule

1~10是關於192.168.0.0的

11~20是關於192.168.1.0的

21~30是關於192.168.2.0的

只要有個來自192.168.2.X的

總是會白白比對20條rule

可否改進? custom chain^^

自訂3個chain, 假設叫做chainA, chainB, chainC

新增三個規則chain 在INPUT

... 192.168.0.0 -J chainA

... 192.168.1.0 -J chainB

... 192.168.2.0 -J chainC

現在變成只要比對兩條就好了~

注意, custom chain沒有預設policy

比對沒成功的話, 就回剛剛來的地方繼續比對

實作:

iptables -N my-custom-chain

iptables -A my-custom-chain -s XXX.XXX.XXX.XXX -p icmp -j DROP

iptables -A INPUT -s XXX.XXX.XXX.0/24 -j my-custom-chain

要刪掉的話

iptables -X my-custom-chain   這樣會失敗

因為還有rule在my-custom-chain裡面

iptables -D my-custom-chain 1

iptables -X my-custom-chain   這樣還是會失敗, 哈哈哈

因為INPUT裡面有用到my-custom-chain

等chain INPUT裡面關於my-custom-chain那條也砍掉

就可以iptables -X my-custom-chain了

Monday, May 24, 2010

OpenOffice.org的formula

給未來的裕翔

formula裡面有個輔助視窗

讓你選想要的形式, 然後把指令輸在下面

萬一視窗不見了

View -> Selection 打勾即可

Sunday, May 23, 2010

檔案搜尋指令whereis, locate, find, which

給未來的裕翔

鳥哥建議先用whereis和locate, 找不到再考慮用find

當我whereis xxx的時候

會列出最後路徑最後一欄含有xxx的

如果是locate xxx

則路徑當中有etc的都會列出

ex:

which ps

=> /bin/ps

whereis

=> ps: /bin/ps /usr/share/man/man1/ps.1.gz

Thursday, May 20, 2010

各種服務的網段表示

給未來的裕翔

在此紀錄各服務網段表示供日後方便比較

iptables:   192.168.0.0/24   192.168.0.0/255.255.255.0   yahoo.com

192.168.0無效, 192.168.0.語法不行, 192.168.0.0無效, .yahoo.com語法不行

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

TCPWRAPPER:   192.168.0.   192.168.0.0/255.255.255.0

192.168.0無效, 192.168.0.0無效, 192.168.0.0/24無效

或是192.168.0.   以點結束

如果是名稱

.example.com   以點開頭

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

mail, 192.168.0   非以點結束

如果是xinetd的設定, 像是only_from或no_access

要用192.168.0.0/24或是.domain.com   以點開頭

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

在/etc/httpd/conf/httpd.conf的order的allow和deny

如果要接網段, 192.168.0.0/24

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

在squid裡的squid.conf, 如果要寫網域

192.168.0.0/24或192.168.0.0/255.255.255.0

如果要以網址表示單一台, ex: yahoo.com

acl xxx dst yahoo.com

如果要以網址表示domain, ex: yahoo.com

acl xxx dstdomain .yahoo.com

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

在named.conf裡面

網段可以是

192.168.0.0/24

或是192.168.0.

在IP或是網段前面加!就是not的意思

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

在/etc/exports裡面

如果要表示網段

192.168.0.0/255.255.255.0

或*.somdomain.blabla

192.168.0.0/255.255.255.0   可以

192.168.0.      語法錯

192.168.0.0      語法沒錯, 但不能用

192.168.0.0/24      可以耶! 以前好像不能用

.ee.nthu      語法錯

nvlab193.ee.nthu      可以, 不過這是針對一台......

*.somdomain.blabla      語法錯!? 以前好像可以

所以是要怎麼文字表示網域阿......

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

在/etc/samba/smb.conf裡面

網段表示是192.168.0.

DNS的tcp和udp port

給未來的裕翔

DNS會聽tcp和udp的port 53

udp的port 53是開放查詢的

tcp的port 53是提供DNS slave server作zone transfer

iptables雜亂小筆記

給未來的裕翔

老師說netfilter和iptables不是同一個東西

我一直以為是同一個說~

syslog裡面的格式是: facility.level action

而iptables裡面的LOG是屬於kernel facility

因此會依照syslog的設定紀錄到指定的log檔去

通常是/var/log/messages

防火牆有三個table(據說現在是四個)

filter, nat, mangle

每個talbe又有各自的chain

通常我們都是對filter作處理

filter裡面有三個chain: INPUT, OUTPUT, FORWARD

以iptables指令設定防火牆時

不指定-t就是使用預設的filter table

原則上建議直接以IP作設定, 而不是hostname

因為還需要另外解析, 耗資源

如果我把對方對我的icmp擋掉

它就不能ping我, 但我依然可以ping它

不過它被我ping之後, 回傳給我的icmp reply依然被我擋掉

所以我會不知道我ping它成功了

所以我不讓它ping的代價是我ping它也無法得知?

我們可以對icmp作更細部的規範免此問題

現在iptables -p icmp -h

-h是help的意思

這樣可以列出一堆關於icmp的東東

有八大類, 其中常用的是echo-request和echo-reply

所以我們剛才的設定可以改成

... -p icmp --icmp-type echo-request -j DROP

或是

... -p icmp --icmp-type echo-reply -j ACCEPT

另外, 作設定時, 如果沒有指定-p, protocol

但是有指定port, 這樣會失敗

因為沒指定protocol, 那就是指tcp, udp, icmp三個全部

可是icmp是沒有port概念的, 所以這樣會造成失敗

在設定過程, 驚嘆號的意思是not

如果想要表示連續port, 21:25就是21到25

如果是不連續port?

im multiport --dports 21,23,25

那就是針對21,23,25這三個port進行設定

以下列出個人認為比較有用的iptables指令

iptables -F chain   清掉所有規則, 不加chain就是清掉所有

iptables -L chain   列出chain的所有規則

iptables -P INPUT DROP   對input這個chain的預設policy是drop

自己依此類推OUTPUT, FORWARD和ACCEPT

這樣設定完後要記得service iptables save

老師是建議可以寫一個script放在/etc/rc.d/rc.local

不過我個人偏好直接修改/etc/sysconfig/iptables

man的-f和-k

給未來的裕翔

man -f就是whatis

man -k就是apropos

-f可以找到比較少

-k可以找到比較多

selinux的簡單雜亂筆記

給未來的裕翔

那個星星是由一個叫setroubleshootd的程式負責的

永久性修改selinux的狀態的話

到/etc/sysconfig/selinux

如果想讓某個服務脫離selinux控管

setsebool -P xxx_disable_trans 1

想看process的selinux context的話

ps -Z

要改變檔案的context, 別忘記加-t

chcon -t xxx_xxx_xxx_t file

如果對像是目錄, 且希望裡面的檔案context一次改完

chcon -R -t xxx_xxx_xxx_t dir

ssh套件&相關小筆記

給未來的裕翔

想要使用ssh時

請安裝openssh, openssh-clients, openssh-server

ssh server會以tcp的port 22來等待服務, ssh client則不是以port 22連過去

client端的~/.ssh/known_hosts會紀錄連過線的ssh server

要設定ssh server時

記住是/etc/ssh/sshd_config

而不是/etc/ssh/ssh_config

裡面有幾個設定可以注意一下

PermitRootLogin建議設為no

PermitRootLogin without-password, 這是讓開放root以passphrase登入

Banner /file/path, 可以在/file/path裡面加入文字, 秀給ssh client登入時看

sftp老師很喜歡

因為它有lls

get file [local-path]

put local-path [remote-path]

另外, 以下兩個指令通常很少用, -L是local, -R是remote

ssh -L client-port:hosta:hosta-port hostb

我聽本機的client-port, 然後直接丟給hostb, 請hostb幫我丟給hosta的hosta-port

ssh -R serverport:hosta:hosta-port hostb

我聽遠端的server-port, 有服務請求到它那的話, 我幫它丟給hosta的hosta-port

ssh passphrase

給未來的裕翔

如果client和ssh server想建立key passphrase

請照以下操作

首先在client端

ssh-keygen -t -rsa

這樣會在~/.ssh裡面產生

id_rsa, 這是private key

id_rsa.pub, 這是public key

接著使用ssh-copy-id -i ~/.ssh/id_rsa.pub target-user@ssh-server

(上面那個id_rsa.pub的確實位置要指定, 不然會找不到)

注意, ssh server的target一開始~/.ssh並不需要存在

因為不存在的話, client作ssh-copy-id時會自動在ssh server上建立它

那個ssh-keygen建立時如果沒輸入passphrase

之後就可以直接登入ssh server的target user

如果有輸入pass phrase

client可以ssh-agent bash

然後ssh-add, 輸入一次passphrase之後, 之後就不需要再輸入了

不過之後是到多之後我不知道

註記: ssh server的target user的~target-user權限不能是777

.ssh必須是700

authorized_keys必須是600

不然passphrase機制會出問題

Tuesday, May 18, 2010

pki的全名

給未來的裕翔

public key infrastructures

openssl對檔案加密

給未來的裕翔

openssl des3 -in filename -out filename2

輸入密碼兩次後, 把filename2傳給對方

對方執行

openssl des3 -d -in filename2 -out filename3

輸入你告知對方的密碼

如果只想看檔案內容而不另存新檔的話, -out filename3可以不用打

雖然看似平常

其實有個問題, 我如何安全的把密碼告知對方?

而以上加密解密都是同一把key, 稱為symmetric加密

加密介紹&指令

給未來的裕翔

先很快講一下md5sum

對任意檔案md5sum filename可以跑出一串固定長度的亂碼

這就是one-way hase

非加密, 只是拿來驗證用

接著介紹symmetric加密

symmetric的意思就是加密解密都用同一把key

那問題來了, 怎麼安全的把key傳給對方

萬一中間被誰拿到這把key

不就誰都可以解我加密過的東西了?

於是產生了asymmetric加密

asymmetric加密就是產生兩把key, private key和public key

用其中任一把解另一把加密的資料

舉例來說, 現在有兩個角色, client和server

當client對server請求https服務時

server會產生private key和public key, 簡稱server-pri & server-pub

server接著傳server-pub給client

然後client自己有把session key

利用server-pub把自己的session-key加密變成server-pub(session-key)

傳給server後, server利用server-pri解server-pub(session-key)

這樣依然有個問題

一開始client怎麼知道它請求服務的對象, 就是真正的server?

於是我們需要公正的第三方, CA

有了CA之後, 真正的sever為了要請公正的CA證明自己是真的server

填一張CSR(Certificate Service Request)給CA

裡面包含

1. Server info

2. Server pub

加上CA自己的

3. CA info

4. Expiration

然後CA對這四個資訊進行onw-way hash得到一個叫fingerprint的東東

利用CA自己的private key, 簡稱CA-pri, 來對它加密成CA-pri(fingerprint)

剛才的四個資訊+CA-pri(fingerprint)合稱D.C.(digital certificate)

回傳給server

之後, 如果有client跟server請求https服務

server就回傳給它一個D.C.(數位憑證)

那client對D.C.裡面的四個資訊進行one-way hash得到自己算的fingerprint

再使用隨處可得的CA的public key, 簡稱CA-pub

來解D.C.裡面的CA-pri(fingerprint)

比較兩個fingerprint

如果一樣, 就表示"server不但自稱就是我要找的它, CA也說就是它"

這樣就可以相信"我要找的它"

以上, 上課聽了兩次, 這次終於把它記下來了^^

屁了一堆, 接著講解怎麼操作

由於跟真的CA申請憑證要錢的, 不過就是承認我嘛......

所以我要自己當CA

到/etc/pki/tls/misc, 裡面有個叫CA的script

首先, 我要扮演server的角色, 跟CA申請一個CSR(certificate service request)

./CA -newreq

自己填需要的資料吧~ 中間會需要建server的passphrase, 要給(理由我忘了)

會產生newkey.pem(server的private key)

和newreq.pem(含有1. Server info, 2. Server pub)

我要為自己建立一個偽CA公司^^

./CA -newca

照舊, 自己填需要的資料, 這也需要建一個CA的passphrase

搞定後, 會多出一個/etc/pki/CA資料夾, 這就是我的偽CA公司^^

再來, 身為一個CA公司, 我當然要同意server跟我申請的CSR囉

操作位置依然是在/etc/pki/tls/misc

./CA -sign

它會對newreq.pem產生newcert.pem, 這就是D.C.(數位憑證)了

目前先到這裡, 因為老師也只講到這裡

註記: 老師說只要扯到private key就需要一個passphrase

註記: 一定要./CA -xxx, 不能/etc/pki/tls/misc/CA -xxx

因為CA script裡面用到很多相對位置

根據執行CA script所在位置的相對位置, 所以預設是在/etc/pki/tls/misc/底下執行

那我們就別耍酷/etc/pki/tls/misc/CA -xxx

報告完畢, 未來的裕翔一定會很感謝我^^

telnet也有分server和client

給未來的裕翔

telnet也有分server和client

server的套件名稱為: telnet-server

client的套件名稱為: telnet

取代service network start或stop

給未來的裕翔

如果單純以字數多少來建議的話

可以考慮用ifup eth0和ifdown eth0來取代原來的

service network start和service network stop

不過老師自己是習慣用ifconfig, 改天來比較一下

yum的grouplist, search, provides

給未來的裕翔

有些套件是以達成某功能再聚成一個group的

可以用yum groupinstall來安裝

安裝前可以先yum grouplist來看有哪些

另外, 如果不知到確實的套件名稱

可利用yum search string

string的搜尋範圍包括套件的name, summary, description

列出符合關鍵字的套件

最後, 以前都用yum whatprovides來看什麼檔是由什麼套件提供的

似乎yum provides就可以了?

改天來試試

如果缺檔或壞檔想從rpm補救

給未來的裕翔

簡單一點

rpm -ivh xxx.rpm --force

缺點是, 少的補上, 有的也蓋過了(沒親自嘗試過)

另一個方法是

rpm2cpio xxx.rpm | cpio -idmv ./bin/ps

上例是假設我缺ps執行檔

產生後就直接複製到原來ps應該在的位置

當然, 基本上有yum還是用yum吧

產生系統除錯資訊

給為來的裕翔

sosreport

rpm簡查那些檔案有更動

給未來的裕翔

rpm -V --root=/ --define '_dbpath /var/lib/prm' procps

如果是在rescue mode

--root=/mnt/sysimg

Monday, May 17, 2010

client端寄信

給未來的裕翔

從client端寄信時

因為只是client

別三八去修改/etc/postfix/main.cfmydestination

保持預設就好

不然不管怎樣都會"成功"寄給本機的帳號

Sunday, May 16, 2010

使用postfix寄信

給未來的裕翔

當我使用postfix寄信時

在同一台機器上寄給其他使用者

一開始會錯誤, /var/log/maillog有紀錄

原因是/etc/postfix/main.cf裡面的
myorigin=$mydomain

mydomain的值是dorm.nthu, 無法反查, 所以信拒收

改成
myorigin=$myhostname

myhostnameru129.dorm.nthu, 可以反查

這樣就可以在同一機器上寄信給對方了

Saturday, May 15, 2010

dovecot, sendmail, postfix練習時哪些要開?

給未來的裕翔

當我裝好dovecot時, 啟動這項服務

原本以為它跟sendmailpostfix是同角色的

不過以alternatives --config mta來查看時

卻似乎不是

所以, sendmailpostfix至少要開啟一個才可以練習

postfix也許少設定什麼, 沒有成功

所以暫時以sendmail來練習

補充:

如果我現在要關掉sendmail開啟postfix

最好是先把sendmail服務停掉

service sendmail stop

然後再改mta

alternatives --config mta

Tuesday, May 11, 2010

alsamixer

給未來的裕翔

如我覺得電腦聲音太小聲

可以藉由

alsamixer -c0

一個個調整聲音大小

萬一突然沒聲音?

可能是按到m

在沒聲音的那個位置再按一次m就好

Sunday, May 9, 2010

formula少用符號備忘錄

給未來的裕翔

倒三角符號   nabla

Reference:

Math commands - Reference

named的allow query

給未來的裕翔

如果要開放DNS服務給允許的對象

ex: 140.114.28.187

注意, IP是要加到named.confallow-query

而不是listen-on port 53

Saturday, May 8, 2010

cp和mv對context的影響

給未來的裕翔

如果現在有個檔案

我把它cpftp資料夾

它會自動變成可以下載的context

如果是mvftp資料夾

就必須手動restorecon一下

當然, 如果是cp -a, 那應該也需要手動restorecon一下

Friday, May 7, 2010

sendmail: local delivery

給未來的裕翔

如果想要稍微了解local端email寄信流程

mail -v bob

不過要記得在/etc/hosts.allow裡面加入127.0.0.1

當然, /etc/mail/local-host-names/etc/mail/access我也有設定

/etc/mail/local-host-names
ru129.dorm.nthu
nvlab187.ee.nthu
localhost.localdomain

/etc/mail/access
Connect:localhost.localdomain       RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
From:localhost.localdomain OK

不過我不確定這些是不是關鍵

先紀錄下來而已

Tuesday, May 4, 2010

iptables v.s. tcpdump

給未來的裕翔

iptables是Linux的防火牆

tcpdump是一個sniffer工具

現在如果我在server端設定ftp不開放

並且用tcpdump監聽我的port 21

sshclient

ftpserver

請問, tcpdump會不會探測到?

答案是會^^

所以, tcpdump似乎比iptables還要外層一些~

Sunday, May 2, 2010

檔案和資料夾權限

給未來的裕翔

最近到處接觸一些新東西

動輒談到權限

因此在此簡單釐清一下:

對資料夾而言

沒有x權限就進不去

進去後沒有r權限就看不到裡面的東西, ex: 檔案, 資料夾

沒有w權限就無法在該資料夾裡面新增或移除檔案

對檔案而言

rwx真是太簡單, 不講了^^

那~ 如果一個資料夾對我而言沒有r權限

我可以讀裡面的檔案或在進到子資料夾裡嗎?

可以的呦! 只要確實知道檔案或子資料夾的名稱即可

NextGen Gallery顯示相簿

給未來的裕翔

這裡先記大概

等我熟悉一點再紀錄完整一點

新增一個Page

內容[album=3,extend]

再到Manage Gallery設定連到剛設定的Page

就可以再部落格上看到了

不過真是陽春到爆!

Gallery突然可以用了?

給未來的裕翔

本來不管怎樣update database都不會離開鬼跳牆的Gallery

突然可以用了?

這就麻煩了, 這樣我哪知道哪步是關鍵步驟?

登出登入?

我覺得chown bob.bob -r wordpress這倒是更有可能

Saturday, May 1, 2010

WordPress: 張貼程式碼

給未來的裕翔

如果直接在WordPress裡面張貼程式碼

會被當成一般文字處理

也就是說, 關鍵字不會有色彩, 這當然......

空格模擬的縮排也會被無視

這樣程式碼就沒架構了, 難以閱讀

請安裝WP-syntax這個外掛

Download from WordPress

安裝好且啟動它後

在想要插入程式碼的地方, 切換成HTML編輯模式

然後

<pre lang="your-language">

想插入的程式碼

</pre>

支援的程式碼列表可以到以下網址查看

GeSHi - Generic Syntax Highlighter :: Home

似乎就算沒支援也有預設的highlight?

Matlab好像就是

matlab: 變數存在且非空

給未來的裕翔

如果想要測試一個變數是否存在且非空
if isfield(options, 'D') && not(isempty(options.D))
D = options.D;
end

上面的意思是

如果options.Doptions的一個成員&&有賦值

那就把options.D指定給D