2011/09/29

心愛的相機受傷惹

這次出國去馬來西亞玩
在希爾頓的時候不慎將相機衰落在地上
好死不死當時連閃光燈都有裝上
所以閃光燈硬生生的把相機的熱靴座給扯了下來
一屍三命,機身熱靴座斷裂,閃燈的柔光片跟電池蓋斷裂
鏡頭對焦時偶而會卡住
相機買了近 5 年,所以知道應該會有一筆不小的維修費用
心中定了一個預算,機身若超過該金額就不打算修
可能過一陣子存到錢再買新機吧
當時機身跟鏡頭是在口碑不錯的億華購買的
所以把機器全部送到他們的維修部請他們報價
傳回來的訊息是全部不能修,都要送回日本 Pentax
其實東西是我自己摔壞的,責無旁貸
但令我意外的是,原來台灣的維修技術差勁到這個地步
三個物品三種不同的損壞原因無一可修?
該不會只能做換換蒙皮、清清 CCD 那種功力吧
其實我有打去給億華的師父 argue
我說:熱靴跟鏡頭我不清楚啦,可是閃燈的蓋子感覺就是拿材料更換不是嗎
他回說:可是你內部的電池室也裂掉了你知道嗎?
我回:那感覺也是模組的東西,應該也是更換就好吧
又不是說像機板斷掉那種很麻煩的零組件,他就沒回我話了

報價的結果,機身加鏡頭 2000,閃光燈 1200
都是來回的金額,實際的維修費用要等 1-2 個月後日本 Pentax 回報
一到兩個月才送達聽起來是走海運的感覺
可是收費怎麼是收空運的等級
唉,買了 3C 產品過了保之後,大家還是自求多福吧

2011/09/27

表單檢查所有欄位不重複

假設今天要送出表單時,有一項欄位是名稱,規定不可以重複,該怎麼寫
寫法很多種,今天我用了 jQuery 提供的 utility $.unique 來做搭配

script 部份



html 部份




2011/09/14

xshell & xftp

簡介

最近比較常接觸到 Linux,因此一個可以連結 ssh 的 tool 是必備的
市面上比較多人用的軟體大致上是這兩種 pietty 以及 putty
putty 可以說是最多人用的,可以選用的項目很多,但這兩套軟體都有一個共通不便的地方
就是他們沒有支援多視窗,也就是說,每要開一個新的 ssh,你就要開一個 putty
相信我,東西處理起來,一口氣開 7-8 個視窗並不奇怪
於是我去找了能夠支援多視窗介面又好用易上手的軟體
讓我找到了 xshell

建議連 xftp 一起 download,可以交互搭配使用

使用

這是安裝好的畫面,他會在你的電腦模擬一個 terminal,可以下達一些指令
輸入 help,可以看到在 terminal 可以使用的功能

Internal Commands:
new:      Creates a new session.
open:     Opens a session or the session dialog box.
edit:     Opens the Session Property dialog box for a session.
list:     Lists information of all available sessions.
          'ls' and 'dir' do the same.
cd:       Changes the current working directory.
clear:    Clears the screen/address/command history.
help:     Displays this help. '?' does the same.
quit:     Quits Local Shell. 'exit' does the same.
ssh:      Connects to a host using the SSH protocol.
telnet:   Connects to a host using the TELNET protocol.
rlogin:   Connects to a host using the RLOGIN protocol.
sftp:     Connects to a host to transfer files securely.
ftp:      Connects to a host to transfer files.

External Commands:
ipconfig: Configures TCP/IP network interfaces.
ping:     Sends ICMP ECHO_REQUEST packets to network hosts.
tracert:  Prints the route packets take to network host.
netstat:  Displays current protocol statistics and current
          TCP/IP network connections.
nslookup: Resolves a hostname to IP address.

For more information, type 'help command' for each command.
ex) help telnet
Xshell:\> clear
Xshell:\> help
Internal Commands:
new:      Creates a new session.
open:     Opens a session or the session dialog box.
edit:     Opens the Session Property dialog box for a session.
list:     Lists information of all available sessions.
          'ls' and 'dir' do the same.
cd:       Changes the current working directory.
clear:    Clears the screen/address/command history.
help:     Displays this help. '?' does the same.
quit:     Quits Local Shell. 'exit' does the same.
ssh:      Connects to a host using the SSH protocol.
telnet:   Connects to a host using the TELNET protocol.
rlogin:   Connects to a host using the RLOGIN protocol.
sftp:     Connects to a host to transfer files securely.
ftp:      Connects to a host to transfer files.

External Commands:
ipconfig: Configures TCP/IP network interfaces.
ping:     Sends ICMP ECHO_REQUEST packets to network hosts.
tracert:  Prints the route packets take to network host.
netstat:  Displays current protocol statistics and current
          TCP/IP network connections.
nslookup: Resolves a hostname to IP address.

For more information, type 'help command' for each command.
ex) help telnet

terminal mode 輸入 new,或者是按下導覽列的 new 按鈕
變可以建立新的帳戶,可以使用的功能有 ssh、telnet、rlogin、sftp、serial
目前常用到的應該就是

  1. ssh:用來連結 Linux Server
  2. telnet:連結 bbs 如 ptt
  3. sftp:直接透過此模式存取 server 檔案

Connection 填入NameHost 之後,點選 Authentication
可以選擇 PasswordPublic Key 以及 Keyboard Interactive 模式連結 Server
基本上這樣就可以使用了,也可以針對不同的 case 來設定不同的內容
如語系(點選 Terminal 後選擇下方 Encoding

以 bbs 為例,預設的字型跟字級大小要瀏覽 ptt 很吃力 於是我點選了 Apperance,將 Font Name 改為細明體,Font Size 改為 14

這樣看 ptt 就很舒服了

指令模式

讓我們回到 terminal 模式,lsenter,可以列出你所有建立的帳戶
使用 open 後接你的帳戶,如 open ptt,便會連去 ptt
如果你想不建立任何帳戶,直接連線,可以直接下指令
ssh 123.123.123.123 或是 telnet ptt.cc

External Commands:
ipconfig: Configures TCP/IP network interfaces.
ping:     Sends ICMP ECHO_REQUEST packets to network hosts.
tracert:  Prints the route packets take to network host.
netstat:  Displays current protocol statistics and current
          TCP/IP network connections.
nslookup: Resolves a hostname to IP address.

像這些在 dos command line 常用的指令也可以在他的 terminal 使用

Toolbar

上述的所有功能都可以在最上方的 toolbar 找到對應的按鈕

設定

再來我們看一下 Options 幾個我覺得比較實用的內容
點選 OptionsAdvanced,我溝選了 Minimize to system tray
這樣當不使用的時候可以將 xshell 縮到 tray,少佔用了一個 CTRL+TAB 的切換空間,很方便
我另外將 Confirm connection close whe Xshell exitst 以及 Confirm connection close when a session 打勾取消
這樣我要關閉任何視窗時他都不會再詢問我

xftp

當你使用 ssh 進去某個帳戶之後,按下快捷鍵 CTRL+ALT+F
便可以叫出 xftp,讓你在視窗介面直接可以使用檔案傳輸的功能,是不是非常方便呢

快捷鍵一覽表

Shortcut key Description
Alt + N Same as New on the File menu.
Alt + O Same as Open on the File menu.
Alt + C Same as Close on the File menu.
Alt + Enter Changes to Full Screen view.
Alt + D Moves the keyboard focus to the Address bar.
Alt + Right Same as Next on the Window menu.
Alt + Left Same as Previous on the Window menu.
Ctrl + D Exit the Xshell on the local prompt.
Ctrl + Alt + ] Escape to the local prompt while connecting to a remote computer.
Ctrl + Alt + T Same as New Terminal on the Window menu.
Ctrl + Alt + F Same as New File Transfer on the Window menu.
Ctrl + Tab Switches to the next session within the same Xshell window.
Ctrl + Shift + Tab Switches to the previous session within the same Xshell window.
Shift + Home Scroll to Top.
Shift + End Scroll to Bottom.
Shift + PgUp Scroll Page Up.
Shift + PgDn Scroll Page Down.
Shift + Up Arrow Scroll Up.
Shift + Down Arrow Scroll Down.

Linux 常用指令

參考網站

鳥哥
Linux 指令集
Tsung’s Blog

chkconfig | cp | df | dpkg | du | find | ln | locate | ls | netstat | rm | rpm | tar | top | yum

chkconfig(管理系統服務預設開機啟動與否)

chkconfig

參數說明

  • chkconfig --list [服務名稱]
  • chkconfig [–level [0123456]] [服務名稱] [on|off]

範例

範例一:列出目前系統上面所有被 chkconfig 管理的服務
chkconfig --list | more
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:off   3:on    4:on    5:on    6:off
yum-updatesd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

xinetd based services:  <==底下為 super daemon 所管理的服務
        chargen-dgram:  off
        chargen-stream: off

# 你可以發現上面的表格有分為兩個區塊,一個具有 1, 2, 3 等數字,一個則被 xinetd 
# 管理。沒錯!從這裡我們就能夠發現服務有 stand alone 與 super daemon 之分。

範例二:顯示出目前在 run level 3 為啟動的服務
chkconfig --list | grep '3:on'

範例三:讓 atd 這個服務在 run level 為 3, 4, 5 時啟動:
chkconfig --level 345 atd on

範例四:先觀察 httpd ,再觀察預設有無啟動,之後以 chkconfig 設定為預設啟動
/etc/init.d/httpd status
httpd 已停止  <==根本就沒有啟動

chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
# 原因是預設並沒有啟動啊!

chkconfig httpd on; chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 已經設定為『開機預設啟動』了,再來觀察看看到底該服務啟動沒?

/etc/init.d/httpd status
httpd 已停止
# 哈!竟然還是沒有啟動喔!怎麼會這樣啊?因為要重新開機或者手動啟動

範例五:查閱 rsync 是否啟動,若要將其關閉該如何處理?
/etc/init.d/rsync status
-bash: /etc/init.d/rsync: No such file or directory
# rsync 是 super daemon 管理的,所以當然不可以使用 stand alone 的啟動方式來觀察

netstat -tlup | grep rsync
tcp  0 0 192.168.201.110:rsync  *:*     LISTEN     4618/xinetd
tcp  0 0 www.vbird.tsai:rsync   *:*     LISTEN     4618/xinetd

chkconfig --list rsync
rsync           on   <==預設啟動呢!將它處理成預設不啟動吧

chkconfig rsync off; chkconfig --list rsync
rsync           off  <==看吧!關閉了喔!現在來處理一下 super daemon 的東東!

/etc/init.d/xinetd restart; netstat -tlup | grep rsync

cp(複製檔案)

cp -參數 來源檔 (或目錄) 目的檔 (或目錄)

參數說明

  • a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
  • d:若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;
  • f:為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;
  • i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
  • l:進行硬式連結(hard link)的連結檔建立,而非複製檔案本身;
  • p:連同檔案的屬性一起複製過去,而非使用預設屬性(備份常用);
  • r:遞迴持續複製,用於目錄的複製行為;(常用)
  • s:複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;
  • u:若 destination 比 source 舊才更新 destination !

範例

範例一:用root身份,將家目錄下的 .bashrc 複製到 /tmp 下,並更名為 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆蓋,y為覆蓋
# 重複作兩次動作,由於 /tmp 底下已經存在 bashrc 了,加上 -i 選項後,
# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y 來二次確認呢!

範例二:變換目錄到/tmp,並將/var/log/wtmp複製到/tmp且觀察屬性:
[root@www ~]# cd /tmp
[root@www tmp]# cp /var/log/wtmp . <==想要複製到目前的目錄,最後的 . 不要忘
[root@www tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp
# 注意上面的特殊字體,在不加任何選項的情況下,檔案的某些屬性/權限會改變;
# 這是個很重要的特性!要注意喔!還有,連檔案建立的時間也不一樣了!
# 那如果你想要將檔案的所有特性都一起複製過來該怎辦?可以加上 -a 喔!如下所示:

[root@www tmp]# cp -a /var/log/wtmp wtmp_2
[root@www tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp
-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2
# 瞭了吧!整個資料特性完全一模一樣ㄟ!真是不賴~這就是 -a 的特性!

範例三:複製 /etc/ 這個目錄下的所有內容到 /tmp 底下
[root@www tmp]# cp /etc/ /tmp
cp: omitting directory `/etc'   <== 如果是目錄則不能直接複製,要加上 -r 的選項
[root@www tmp]# cp -r /etc/ /tmp
# 還是要再次的強調喔! -r 是可以複製目錄,但是,檔案與目錄的權限可能會被改變
# 所以,也可以利用『 cp -a /etc /tmp 』來下達指令喔!尤其是在備份的情況下!

範例四:將範例一複製的 bashrc 建立一個連結檔 (symbolic link)
[root@www tmp]# ls -l bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc  <==先觀察一下檔案情況
[root@www tmp]# cp -s bashrc bashrc_slink
[root@www tmp]# cp -l bashrc bashrc_hlink
[root@www tmp]# ls -l bashrc*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc  <==與原始檔案不太一樣了!
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc

範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複製過來
[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目標檔案與來源檔案有差異時,才會複製的。
# 所以,比較常被用於『備份』的工作當中喔! ^_^

範例六:將範例四造成的 bashrc_slink 複製成為 bashrc_slink_1 與bashrc_slink_2
[root@www tmp]# cp bashrc_slink bashrc_slink_1
[root@www tmp]# cp -d bashrc_slink bashrc_slink_2
[root@www tmp]# ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc
lrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1       <==與原始檔案相同
lrwxrwxrwx 1 root root   6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是連結檔!
# 這個例子也是很有趣喔!原本複製的是連結檔,但是卻將連結檔的實際檔案複製過來了
# 也就是說,如果沒有加上任何選項時,cp複製的是原始檔案,而非連結檔的屬性!
# 若要複製連結檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。

範例七:將家目錄的 .bashrc 及 .bash_history 複製到 /tmp 底下
[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以將多個資料一次複製到同一個目錄去!最後面一定是目錄!

df(查詢硬碟使用量)

df - 參數 目的

參數說明

  • a:顯示全部的檔案系統和各分割區的磁碟使用情形
  • i:顯示i -nodes的使用量
  • k:大小用k來表示 (預設值)
  • t:顯示某一個檔案系統的所有分割區磁碟使用量
  • x:顯示不是某一個檔案系統的所有分割區磁碟使用量
  • T:顯示每個分割區所屬的檔案系統名稱
  • H:以 M=1000K 取代 M=1024K 的進位方式

範例

df /etc/
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                     147310884   1926800 137780272   2% /
#df 指令很單純,只要接上目的就可以顯示該目的的總容量

df -h /etc/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      141G  1.9G  132G   2% /
#我最常應該就是這樣下,容量顯示比較友善

dpkg(管理系統套件)

dpkg -參數

參數說明

  • i:安裝套件
  • r:刪除套件
  • P:刪除套件(套件括配置文件)
  • L:列出與該套件關聯的文件
  • l:顯示該套件的版本
  • unpack:解開 deb 套件的內容
  • S:搜索所屬的套件內容
  • l:列出當前已安裝的套件
  • c:列出 deb 套件的內容
  • configure:配置套件

範例

範例一:利用 dpkg 查詢跟 vim 有關的套件
dpkg -l | grep vim
ii  vim                                    2:7.3.429-2ubuntu2.1                    Vi IMproved - enhanced vi editor
ii  vim-addon-manager                      0.4.4                                   manager of addons for the Vim editor
ii  vim-common                             2:7.3.429-2ubuntu2.1                    Vi IMproved - Common files
ii  vim-doc                                2:7.3.429-2ubuntu2.1                    Vi IMproved - HTML documentation
ii  vim-runtime                            2:7.3.429-2ubuntu2.1                    Vi IMproved - Runtime files
ii  vim-scripts                            20110813                                plugins for vim, adding bells and whistles
ii  vim-syntax-gtk                         20110314-1                              Syntax files to highlight GTK+ keywords in vim
ii  vim-tiny                               2:7.3.429-2ubuntu2.1                    Vi IMproved - enhanced vi editor - compact version

範例二:移除 vim 套件
dpkg -r vim

du(查詢檔案或目錄的磁碟使用空間)

du - 參數 目的

參數說明

  • a:顯示全部目錄和其次目錄下的每個檔案所佔的磁碟空間
  • b:大小用bytes來表示 (預設值為k bytes)
  • c:最後再加上總計 (預設值)
  • l:計算所有檔案大小
  • s:只顯示各檔案大小的總合
  • x:只計算同屬同一個檔案系統的檔案
  • L:計算所有的檔案大小
  • h:以人們較易讀的容量格式 (G/M) 顯示

範例

du -h
12K ./pm
8.0K    ./conman
1.6M    ./nginx
8.0K    ./ppp
16K ./mail
36K ./prelink
20K ./cups
8.0K    ./conman.old
9.5M    ./audit
34M .
#與 df 不一樣的是,du 這個指令其實會直接到檔案系統內去搜尋所有的檔案資料

du -ah
#這樣下會列出該目錄下所有的檔案以及目錄
#所以建議搭配 grep 或者是 more 來搜尋比較好

find(找尋檔案、目錄)

find 【起始目錄】 -name 【欲找的檔名】 -print

參數說明

  • mtime n :n 為數字,意義為在 n 天之前的『一天之內』被更動過內容的檔案;
  • mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的檔案檔名;
  • mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的檔案檔名。
  • newer file :file 為一個存在的檔案,列出比 file 還要新的檔案檔名
  • uid n :n 為數字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd 裡面與帳號名稱對應的數字。這方面我們會在第四篇介紹。
  • gid n :n 為數字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在 /etc/group
  • user name :name 為使用者帳號名稱喔!例如 dmtsai
  • group name:name 為群組名稱喔,例如 users ;
  • nouser :尋找檔案的擁有者不存在 /etc/passwd 的人!
  • nogroup :尋找檔案的擁有群組不存在於 /etc/group 的檔案!當你自行安裝軟體時,很可能該軟體的屬性當中並沒有檔案擁有者,這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。
  • name filename:搜尋檔案名稱為 filename 的檔案;
  • size [±]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。這個 SIZE 的規格有: c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB 還要大的檔案,就是『 -size +50k 』
  • type TYPE:搜尋檔案的類型為 TYPE 的,類型主要有:一般正規檔案 (f), 裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), 及 FIFO § 等屬性。
  • perm mode :搜尋檔案權限『剛好等於』 mode 的檔案,這個 mode 為類似 chmod 的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
  • perm -mode :搜尋檔案權限『必須要全部囊括 mode 的權限』的檔案,舉例來說,我們要搜尋 -rwxr–r-- ,亦即 0744 的檔案,使用 -perm -0744,當一個檔案的權限為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr–r-- 的屬性了。
  • perm +mode :搜尋檔案權限『包含任一 mode 的權限』的檔案,舉例來說,我們搜尋 -rwxr-xr-x ,亦即 -perm +755 時,但一個檔案屬性為 -rw------- 也會被列出來,因為他有 -rw… 的屬性存在!

範例

範例一:將過去系統上面 24 小時內有更動過內容 (mtime) 的檔案列出
find / -mtime 0
# 那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前,
# 有變動過內容的檔案都會被列出來!那如果是三天前的 24 小時內?
# find / -mtime 3 有變動過的檔案都被列出的意思!

範例二:尋找 /etc 底下的檔案,如果檔案日期比 /etc/passwd 新就列出
find /etc -newer /etc/passwd
# -newer 用在分辨兩個檔案之間的新舊關係是很有用的!

範例三:搜尋 /home 底下屬於 vbird 的檔案
find /home -user vbird
# 這個東西也很有用的~當我們要找出任何一個使用者在系統當中的所有檔案時,
# 就可以利用這個指令將屬於某個使用者的所有檔案都找出來喔!

範例四:搜尋系統中不屬於任何人的檔案
find / -nouser
# 透過這個指令,可以輕易的就找出那些不太正常的檔案。
# 如果有找到不屬於系統任何人的檔案時,不要太緊張,
# 那有時候是正常的~尤其是你曾經以原始碼自行編譯軟體時。

範例五:找出檔名為 passwd 這個檔案
find / -name passwd
# 利用這個 -name 可以搜尋檔名啊!

範例六:找出 /var 目錄下,檔案類型為 Socket 的檔名有哪些?
find /var -type s
# 這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的檔案,
# 例如 socket 與 FIFO 檔案,可以用 find /var -type p 或 -type s 來找!

範例七:搜尋檔案當中含有 SGID 或 SUID 或 SBIT 的屬性
find / -perm +7000 
# 所謂的 7000 就是 ---s--s--t ,那麼只要含有 s 或 t 的就列出,
# 所以當然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三個權限,
# 因此,就是 +7000 ~瞭乎?

範例八:將上個範例找到的檔案使用 ls -l 列出來~
find / -perm +7000 -exec ls -l {} \;
# 注意到,那個 -exec 後面的 ls -l 就是額外的指令,指令不支援命令別名,
# 所以僅能使用 ls -l 不可以使用 ll 喔!注意注意!

範例九:找出系統中,大於 1MB 的檔案
find / -size +1000k
# 雖然在 man page 提到可以使用 M 與 G 分別代表 MB 與 GB,
# 不過,俺卻試不出來這個功能~所以,目前應該是僅支援到 c 與 k 吧!
</pre>

* -mtime 搜尋檔案的修改時間()
* -mmin 搜尋檔案的修改時間(分鐘)
* -ctime 搜尋檔案的建立時間()
* -cmin 搜尋檔案的建立時間(分鐘)
* -atime 搜尋檔案的最後開啟時間()
* -amin 搜尋檔案的最後開啟時間(分鐘)

<pre class="brush: bash">
$ find ./ -mtime 3 # 在當前目錄下搜尋3天時修改的檔案
$ find ./ -mtime +3 # 在當前目錄下搜尋3天前修改的檔案
$ find ./ -mtime -3 # 在當前目錄下搜尋3天內修改的檔案

ln(製作檔案捷徑)

ln -參數 已存在的檔案 要連結成的檔案

參數說明

  • 不加:預設值;只限於相同檔案系統間的連結,且不能連結目錄
  • s:可作不同檔案系統間的連結,且能連結目錄
  • f:如果要連結成的檔案已存在,則砍掉這個已存在的檔案
  • n:如果要連結成的檔案已存在,則停止連結,不會砍掉該檔案

範例

ln -s /home/a/b tob
#這樣將會在你當下的目錄建一個叫 tob 的捷徑,連結到 /home/a/b/

lrwxrwxrwx 1 root root   10 Sep 14 17:51 tob -> /home/a/b/
#看起來像這樣子

rm -f tob
#要刪除此捷徑只要 rm 掉即可,記得不可以加 /

locate(找尋檔案)

locate -參數 檔名

參數說明

  • i:忽略大小寫的差異
  • r:後面可接正規表示法的顯示方式

範例

找出系統中所有與 passwd 相關的檔名
locate passwd
/etc/passwd
/etc/passwd-
/etc/news/passwd.nntp
/etc/pam.d/passwd

updatedb
#根據 /etc/updatedb.conf 的設定去搜尋系統硬碟內的檔名,並更新 /var/lib/mlocate 內的資料庫檔案;

ls(列出檔案資訊)

ls - 參數

參數說明

  • l:列出詳細的檔案資訊
  • a:列出全部檔案包括隱藏檔
  • R:遞回列出檔案及子目錄其下的所有子目錄和檔案
  • x:以多欄方式列出,字母順序由左而右
  • i:以i -node來列出,會列出每個檔案在磁碟中的編號
  • m:列出檔案時以逗號 , 來分隔
  • n:把群組及檔案擁有者名稱轉成數字代碼
  • t:依檔案的修改時間排序 (由新而舊)
  • u:依檔案上次的存取時間排序 (需與t配合)
  • s:檔案的大小以區塊為單位 (每個區塊block = 512 bytes)
  • o:用顏色來顯示各種類別的檔案
  • r:以相反的英文字母順序顯示
  • d:只顯示目錄訊息而非目錄下的檔案
  • h:將檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來

範例

ls
abrt               depmod.d                 idmapd.conf
acpi               dhcp                     init       
adjtime            DIR_COLORS               init.d     
aliases            DIR_COLORS.256color      inittab    
#直接會列出該目錄的檔案以及目錄

ls -l
total 1812
drwxr-xr-x.  3 root root   4096 Sep  3 04:30 abrt
drwxr-xr-x.  4 root root   4096 Sep  3 04:43 acpi
-rw-r--r--.  1 root root     45 Sep 13 10:59 adjtime
-rw-r--r--.  1 root root   1512 Jan 12  2010 aliases
-rw-r--r--.  1 root root  12288 Sep  3 11:17 aliases.db
drwxr-xr-x.  2 root root   4096 Sep  3 04:31 alsa
drwxr-xr-x.  2 root root   4096 Sep  3 04:49 alternatives
#這應該是最常用的參數,可以直列出詳細內容

ls -lh
total 1.8M
drwxr-xr-x.  3 root root 4.0K Sep  3 04:30 abrt
drwxr-xr-x.  4 root root 4.0K Sep  3 04:43 acpi
-rw-r--r--.  1 root root   45 Sep 13 10:59 adjtime
-rw-r--r--.  1 root root 1.5K Jan 12  2010 aliases
-rw-r--r--.  1 root root  12K Sep  3 11:17 aliases.db
drwxr-xr-x.  2 root root 4.0K Sep  3 04:31 alsa
drwxr-xr-x.  2 root root 4.0K Sep  3 04:49 alternatives
#可以讓檔案大小用比較 friendly 的方式顯示

ll
#因為 ls -l 太常用了,所以很多系統都會有 ll 這個功能
#ll = ls -l,也可以直接這樣下 ll -h = ls -lh

ls -l | grep pa
drwxr-xr-x.  2 root root   4096 Sep  3 04:56 pam.d
drwxr-xr-x.  3 root root   4096 Sep  3 04:30 pango
-rw-r--r--.  1 root root   1384 Sep  4 15:29 passwd
-rw-r--r--.  1 root root   1332 Sep  4 15:19 passwd-
-rw-r--r--.  1 root root    220 Oct 14  2008 quotagrpadmins
#ls 也可以搭配 grep

netstat(查詢網路目前狀況)

netstat - 參數 目的

參數說明

  • a:全部列出
  • c:每隔幾秒鐘重新列一遍
  • i:界面狀態
  • n:以網路IP位址代替名稱列出網路連接情形
  • o:列出時間狀態
  • r:列出網路的路徑表
  • t:列出tcp協定的連接情形
  • u:列出udp協定的連接情形
  • v:列出版本
  • w:列出raw程序連結的資訊
  • x:列出有關unix網域socket的資訊

範例

netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      2619/hpiod          
tcp        0      0 0.0.0.0:838                 0.0.0.0:*                   LISTEN      2352/rpc.statd      
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2744/mysqld
#這是我最常用的格式

rm(刪除檔案或目錄)

ls - 參數 目的

參數說明

  • r:刪除其下的檔案及目錄(類似 dos 之 deltree)
  • i:刪除時提出警告
  • f:刪除時不提出警告,也就是強制刪除
  • d:刪除目錄,即使該目錄並非空目錄

範例

rm -f a*
#強制刪除字母為 a 開頭的檔案
#-f 是會直接殺個爽,所以你最好確定你要刪的目的是正確的

rm a/
#假設你直接刪除 a 這個資料夾,會出現失敗訊息

rm -rf a/
#必須加上 -r 的參數,這樣會把 a 資料夾下的東西清光光

rm -rf *
#此指令會將你當下目錄「以下」的檔案或目錄清光,請小心使用

rpm(安裝軟體)

rpm - 參數 檔案

參數說明

  • -i:install 的意思
  • -v:察看更細部的安裝資訊畫面
  • -h:以安裝資訊列顯示安裝進度

範例

範例一:安裝 rp-pppoe-3.5-32.1.i386.rpm
[root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
Preparing...     ####################################### [100%]
   1:rp-pppoe    ####################################### [100%] 

範例二、一口氣安裝兩個以上的軟體時:
rpm -ivh a.i386.rpm b.i386.rpm *.rpm
# 後面直接接上許多的軟體檔案!

範例三、直接由網路上面的某個檔案安裝,以網址來安裝:
rpm -ivh http://website.name/path/pkgname.rpm

範例四、更新軟體
rpm -Uvh ai386.rpm

rpm -qa                              <==已安裝軟體
rpm -q[licdR] 已安裝的軟體名稱       <==已安裝軟體
rpm -qf 存在於系統上面的某個檔名     <==已安裝軟體
rpm -qp[licdR] 未安裝的某個檔案名稱  <==查閱RPM檔案
選項與參數:
查詢已安裝軟體的資訊:
-q  :僅查詢,後面接的軟體名稱是否有安裝;
-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟體名稱;
-qi :列出該軟體的詳細資訊 (information),包含開發商、版本與說明等;
-ql :列出該軟體所有的檔案與目錄所在完整檔名 (list);
-qc :列出該軟體的所有設定檔 (找出在 /etc/ 底下的檔名而已)
-qd :列出該軟體的所有說明檔 (找出與 man 有關的檔案而已)
-qR :列出與該軟體有關的相依軟體所含的檔案 (Required 的意思)
-qf :由後面接的檔案名稱,找出該檔案屬於哪一個已安裝的軟體;
查詢某個 RPM 檔案內含有的資訊:
-qp[icdlR]:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出
        某個 RPM 檔案內的資訊,而非已安裝的軟體資訊!注意!

tar(打包指令)

tar - 參數 文件與目錄

參數說明

  • c:建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)
  • t:察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;
  • x:解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開,特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。
  • j:透過 bzip2 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.bz2
  • z:透過 gzip 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.gz
  • v:在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來!
  • f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!
  • C 目錄:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
  • p(小寫) :保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔
  • P(大寫) :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;
  • –exclude=FILE:在壓縮的過程中,不要將 FILE 打包! 此程式不會於「新增/移除程式」或任何地方產生移除連結,若要移除,請將程式所在資料夾全部刪除即可!

範例

範例一:將整個 /etc 目錄下的文件全部打包成為 /tmp/etc.tar
tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮!
tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮
tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮
# 特別注意,在參數 f 之後的文件檔名是自己取的,我們習慣上都用 .tar 來作為辨識
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file
# 如果加 j 參數,則以 .tar.bz2 來作為附檔名
# 上述指令在執行的時候,會顯示一個警告訊息:
# 『tar: Removing leading `/' from member names'那是關於絕對路徑的特殊設定

範例二:查閱上述 /tmp/etc.tar.gz 文件內有哪些文件?
tar -ztvf /tmp/etc.tar.gz
# 由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的文件時
# 就得要加上 z 這個參數了!這很重要的!

範例三:將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下
cd /usr/local/src
tar -zxvf /tmp/etc.tar.gz
# 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個範例來說,
# 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz ,
# 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc
# 則會發現,該目錄下的文件屬性與 /etc/ 可能會有所不同喔!

範例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
cd /tmp
tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透過 tar -ztvf 來查閱 tarfile 內的文件名稱,如果單只要一個文件
# 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!

範例五:將 /etc/ 內的所有文件備份下來,並且保存其權限!
tar -zxvpf /tmp/etc.tar.gz /etc
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時!

範例六:在 /home 當中,比 2005/06/01 新的文件才備份
tar -N '2005/06/01' -zcvf home.tar.gz /home

範例七:我要備份 /home, /etc ,但不要 /home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

範例八:將 /etc/ 打包後直接解開在 /tmp 底下,而不產生文件!
cd /tmp
tar -cvf - /etc | tar -xvf -
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!

top(動態觀察程序的變化)

top - 參數

參數說明

  • d:後面可以接秒數,就是整個程序畫面更新的秒數。預設是 5 秒
  • b:以批次的方式執行 top ,還有更多的參數可以使用喔
  • n:與 -b 搭配,意義是,需要進行幾次 top 的輸出結果
  • p:指定某些個 PID 來進行觀察監測而已
  • ?:顯示在 top 當中可以輸入的按鍵指令
  • P:以 CPU 的使用資源排序顯示
  • M:以 Memory 的使用資源排序顯示
  • N:以 PID 來排序喔
  • T:由該 Process 使用的 CPU 時間累積 (TIME+) 排序
  • k:給予某個 PID 一個訊號 (signal)
  • r:給予某個 PID 重新制訂一個 nice 值
  • q:離開 top 軟體的按鍵

範例

top -d 2
top - 17:03:09 up 7 days, 16:16,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.5%us,  0.5%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    742664k total,   681672k used,    60992k free,   125336k buffers
Swap:  1020088k total,       28k used,  1020060k free,   311156k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND     
14398 root      15   0  2188 1012  816 R  0.5  0.1   0:00.05 top
    1 root      15   0  2064  616  528 S  0.0  0.1   0:01.38 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
#每兩秒鐘更新一次 top ,觀察整體資訊

top -b -n 2 > /tmp/top.txt
#這樣一來,嘿嘿!就可以將 top 的資訊存到 /tmp/top.txt 檔案中了

yum(安裝套件)

yum - 參數 套件

參數說明

  • install:安裝某個套件,後面需要接套件名稱
  • update:升級套件
  • list:列出目前在 yum server 上面有的 RPM 套件
  • info:某個套件的內容,類似 rpm -qi packages 的內容
  • clean:將已將下載到本機的 packages 或 headers 移除
  • remove:移除已經安裝在我們系統的某個套件

範例

yum search php
#在 yum server 上搜尋 php 這個套件
# server 會列出搜尋的結果,如果沒有此套件
#可能要透過 rpm 或是 tarball 安裝,或者是更新一下 yum server

yum install php
#如果有找到你要的套件,便可執行 install 這個參數

yum -y install php
#安裝過程中可能會有多次確認的互動,加上 -y 這個參數便可以跳過

yum clean php
#安裝過程會下載檔案暫存,可以使用 clean 去清除

yum clean all
#clean all 是比較常用的

yum remove php
#移除 php 這個套件

yum list installed
#可以列出安裝了哪些套件

yum list installed | grep php
#可搭配 grep 做篩選

yum list updates
#可以列出所有已經有更新檔的套件,一樣可以使用 grep 篩選

yum update php
#可以單獨更新 php 這個套件

yum -y update
#直接更新所有可以更新的套件

yum upgrade
#用來升級套件,功能和 yum update 類似,不同處在於
#yum upgrade 會連一些過舊即將洮汰的套件也一起升級
#比較類似在做大規模的版本升級動作
#(如從 xxx Linux 8.0 升級到 xxx Linux 9)
#所以要小心使用

2011/09/11

賽德克巴萊(太陽旗)

賽德克巴萊

如果你要我回答賽德克巴萊好不好看,我會覺得把這片看小了

如果你是要看高潮迭起的劇情,抱歉,本片只有平鋪直述,如果你是要看大明星爐火純青般的演技,抱歉,本片最大的主角是原住民朋友。

我想進場前觀眾或多或少都知道此片是根據霧社事件的史實改編,但多半也都僅此而已,台灣最令人惋惜的就是自我認同跟文化特色很薄弱,賽德克巴萊讓你靜靜的瞭解腳下這片土地過去的一段故事,這種格局跟氣勢是以前沒有人敢做的,就算敢也沒有做的這麼毫無保留的,魏導用他的方式,完成他的心願,說出他想說的故事。

在賽德克巴來裡面沒有真正的善或是真正的惡,只有對自己國家的認同跟崇尚自己的信仰而已,我們常常堅持的文明,對某些人來說可能也是無所適從的怪異行為,這種事情本來就沒有對錯,完全取決於你的生長環境背景,當你無法苟同賽德克人使用獵人頭的行為來證明自己成為真正的人時,你不也是站在一種無法接受別人文化的定位,跟片中的日本人並沒有太大的不同,只是沒有他們這麼殘忍罷了,很多事情可以反求諸己,當外國人對你說你們拿香拜拜好奇怪時,你心裡的想法是什麼?

坦白說,我覺得這片要賣到 15 億有點難,因為未必每個人都可以接受到他想給的東西,但我看完以後真的很愛,我愛他的不灑狗血、我愛他電影表現手法不商業、我愛魏導站在一個中立客觀的立場,來表現這段歷史、我愛他讓我看完走出戲院後,在打這篇文章時,腦子還盤旋著劇中幾個畫面跟幾句對白。

爽片固然容易得到共鳴,但我個人心目中的好看有兩個層次,有「意義」的、有「尾勁」的,賽德克巴萊符合了上述我對好片的定義,本片沒有好不好看的問題,只有要重看幾次的問題。

決定用 HTML 模式寫 Blog

其實 Blogger 也不是第一次改版了
雖然 Blogger 是很注重 UI 的 Google 旗下產品
但寫作上也沒有特別順手,尤其是圖片功能
或許跟產品是收購來的原因有關吧(因為是 Google 的子民幫他找理由,哈)

在看了第六遍 The Social Network 之後
如然想到,反正我 HTML 碼很熟,不如學我的偶像 Mark Zuckerberg 用 HTML mode 來寫 Blog
突然發現這樣對我來說順手多了
以後沒事應該會寫更多東西~哈

Lebron James 理成光頭

我常常在想這個問題,如果我是禿頭的話應該也會理成光頭吧 雖然成語可能用的不適當,但禿頭把僅有的頭髮留長真的有此地無銀三百兩的感覺…

postfix 指令送信的方式

postfix 是 Linux 目前取代 sendmail 的郵件發送套件
一般的寄送方式為

mail xxx@mail.com
Subject: my subject
輸入內容
. #單一個 . 再按 enter 為結束

另外有三種方式可以送出預設內容
echo "內容" | mail -s "標題" xxx@mail.com
# -s 為 subject 的縮寫

除此之外,你可以先將內容編寫完成,舉例來說 content.txt
然後用以下兩種方式寄出
cat content.txt | mail -s "標題" xxx@mail.com
mail -s "標題" xxx@mail.com < content.txt

如果想要夾帶檔案,可以利用 -a 的參數
echo "夾帶檔案測試" | mail -s "夾帶檔案" -a /home/a.jpg xxx@mail.com
真是簡單方便又強大

2011/09/08

台灣綜藝節目真的沒救了






















這是新出道的藝人叫趙芸,本來是個書法老師
第一次看到他是在國光幫幫忙,應該也是他第一次上節目
我猜他應該有得到某位主持人的青睞
因為上過國光幫之後,她便開始陸續出現在很多綜藝節目
完全沒有才藝,上節目只能當作工具人,例如說卸妝這種單元
我覺得這都無所謂,不過昨天晚上才在麻辣天后宮卸妝
剛打開電視又出現在康熙借裝單元,我覺得這有很多面向可以探討

  1. 台灣綜藝節目真的如詹仁雄說得遇到瓶頸了,單元互相抄襲之外
    重複性居然如此的高,主持人難道都不覺得無奈嗎?
  2. 節目內容乏善可陳,甚至卸妝可以當作是一種才藝,而且還一上再上
  3. 目前沒有看到任何有潛力有自我風格的新生代主持人,大斷層出現

最詭異的節目叫做今晚誰當家
每次都那幾批人輪流的上節目講自己的家務事
甚至還帶自己的小孩上節目講一些有的沒的
不然就是開始整人,Call Out 去給自己家人朋友借錢
或是把自己的二手商品在節目上競標,看!這樣也可以是節目內容
每次看到都想罵髒話


程式難免會掛點













台灣大哥大網站的信用卡付費功能我記得已經掛了快一個星期
即便資源跟財力雄厚如台哥大,難免遇到這種窘境
當然,這不可以當作是幫自己找理由的藉口
但工程師也是人,一個功能性強大的網站可以出事的點真的很多
硬體設備、線路、程式、被攻擊、資料庫、莫名就是查不出的原因
上面幾個條件隨便其中一個出事都可以使一個網站掛點
所以老闆們啊,在生氣之餘,不要每件事都怪到程式人員頭上吧

Google Maps API 大改囉

這是我之前幫 SYM 開發的案子,叫做 motorlove
這個案子用到了大量的 Google Maps API
當時 Maps API 版本是 2.0,今天剛好一個朋友問我 API 的問題
幫他跑去 Google Maps API 網站看了一下文件
發現現在 3.0 的語法已經跟 2.0 大相逕庭
我覺得這是資訊人的一種悲哀
一種語法推翻式的更新,會讓你之前做的事情就如沈家宜說的
變成徒勞無功,整套邏輯觀念等於打掉重練
好比 Flash AS3 跟 AS2 就是完全不同理念的產品
而且這些公司很賤,改版之後不久他們就會宣告停止上一個版本的 support
無可厚非啦,一直持續 maintain 舊東西那新的東西誰要用
不斷持續的 update 自己是資訊業的宿命
如果自己沒有精進新東西的想法跟衝勁,我是建議趕快換跑道比較好
因為現在的東西只會越 upgrade 越快

PS:Blogger 雖然 UI 大躍進,但圖片功能依舊相當難用

2011/09/07

Google 好多介面都更新了喔

Google Docs 跟 Blogger 後台的幅度最大
請了一個優秀的介面設計師之後,果然有心想要改變
目前 Google 對使用者體驗的精進
讓我付費我也願意