同時有用 Clear Case 的 Windows 工具和 Linux 工具
Windows 介面親和功能操作方便但是很慢
Linux 介面使用指令操作,沒有華麗的GUI,但是快很多
有時候 clearcase view 整個資料夾位置經過搬動或是不正當被移除了
系統裡還存有之前的註冊資料,這時想要再用指令刪除 view 會遇到下面的錯誤:
%>cleartool unregister -view \\host1\ccstg_e\views\test.vws
cleartool: Error: Unable to open file "\\host1\ccstg_e\views\test.vws": No such file or directory.
cleartool: Error: \\host1\ccstg_e\views\test.vws is not a view: No such file or directory
cleartool: Error: Attempt to get location information about "\\host1\ccstg_e\views\test.vws" failed: ClearCase object not found.
這個時候必須要找出原來註冊的 uuid 才能刪除:
%>cleartool lsview -long test
Tag: test
Global path: \\host1\ccstg_e\views\test.vws
Server host: host1
Region: dev
Active: NO
View tag uuid:c8b329ed.60814357.9806.26:55:85:75:e2:bf
View on host: host1
View server access path: e:\ClearCase_Storage\views\test.vws
View uuid: c8b329ed.60814357.9806.26:55:85:75:e2:bf
View owner: DOM1\jdoe
移除註冊資訊:
VIEW example: cleartool unregister -view -uuid <uuid>
Example:
%>cleartool unregister -view -uuidc8b329ed.60814357.9806.26:55:85:75:e2:bf
移除 view tag
VIEW example: cleartool rmtag -view <view-tag>
Example:
%>cleartool rmtag -view test
移除 view
Run cleartool rmview -force -all -uuid <view uuid>
參考資料:
IBM: How to remove a VOB or View from the ClearCase registry whose storage was deleted
2013年1月28日 星期一
2012年12月26日 星期三
Linux 修改系統時間
設置時間,設置完了可以用date命令查看對不對
date -s 10:05:30
date -s 10:05:30
寫入主機板的BIOS
hwclock -w
=======================================
su -c 'date -s 月/日/年'
su -c 'date -s 時:分:秒'
=======================================
了解Linux的時鐘
由於Linux時鐘和Windows時鐘從概念的分類、使用到設置都有很大的不同,所以,搞清楚Linux時鐘的工作方式與設置操作,不僅對於Linux初學者有著重大意義,而且對於使用Linux服務器的用戶來說尤為重要。
Linux時鐘的分類
Windows 時鐘大家可能十分熟悉了,Linux時鐘在概念上類似Windows時鐘顯示當前系統時間,但在時鐘分類和設置上卻和Windows大相徑庭。和Windows不同的是,Linux將時鐘分為系統時鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時鐘兩種。系統時間是指當前Linux Kernel中的時鐘,而硬件時鐘則是主板上由電池供電的那個主板硬件時鐘,這個時鐘可以在BIOS的“Standard BIOS Feture”項中進行設置。
既然Linux有兩個時鐘系統,那麼大家所使用的Linux默認使用哪種時鐘系統呢?會不回出現兩種系統時鐘衝突的情況呢?這些疑問和擔心不無道理。首先,Linux並沒有默認哪個時鐘系統。當Linux啟動時,硬件時鐘會去讀取系統時鐘的設置,然後系統時鐘就會獨立於硬件運作。
從Linux啟動過程來看,系統時鐘和硬件時鐘不會發生衝突,但Linux中的所有命令(包括函數)都是採用的系統時鐘設置。不僅如此,系統時鐘和硬件時鐘還可以採用異步方式,見圖1所示,即係統時間和硬件時間可以不同。這樣做的好處對於普通用戶意義不大,但對於Linux網絡管理員卻有很大的用處。例如,要將一個很大的網絡中(跨越若干時區)的服務器同步,假如位於美國紐約的Linux服務器和北京的Linux服務器,其中一台服務器無須改變硬件時鐘而只需臨時設置一個系統時間,如要將北京服務器上的時間設置為紐約時間,兩台服務器完成文件的同步後,再與原來的時鐘同步一下即可。這樣系統和硬件時鐘就提供了更為靈活的操作。
設置Linux的時鐘
在Linux中,用於時鐘查看和設置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。由於目前絕大多數用戶使用x86硬件體系,所以可以視這兩個命令為一個命令來學習。
1.在虛擬終端中使用date命令來查看和設置系統時間
查看系統時鐘的操作:
# date
設置系統時鐘的操作:
# date 091713272003.30
通用的設置格式:
# date 月日時分年.秒
2.使用hwclock或clock命令查看和設置硬件時鐘
查看硬件時鐘的操作:
# hwclock --show 或
# clock --show
2003年09月17日星期三13時24分11秒-0.482735 seconds
設置硬件時鐘的操作:
# hwclock --set --date="09/17/2003 13:26:00"
或者
# clock --set --date="09/17/2003 13:26:00"
通用的設置格式:hwclock/clock --set --date=“月/日/年時:分:秒”。
3.同步系統時鐘和硬件時鐘
Linux系統(筆者使用的是Red Hat 8.0,其它系統沒有做過實驗)默認重啟後,硬件時鐘和系統時鐘同步。如果不大方便重新啟動的話(服務器通常很少重啟),使用clock或hwclock命令來同步系統時鐘和硬件時鐘。
硬件時鐘與系統時鐘同步:
# hwclock --hctosys
或者
# clock --hctosys
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
系統時鐘和硬件時鐘同步:
# hwclock --systohc
或者
# clock --systohc
使用圖形化系統設置工具設置時間
對於初學者來,筆者推薦使用圖形化的時鐘設置工具,如Red Hat 8.0中的日期與時間設置工具,可以在虛擬終端中鍵“redhat-config-time”命令,或者選擇“K選單/系統設置/日期與時間”來啟動日期時間設置工具。使用該工具不必考慮系統時間和硬件時間,只需從該對話框中設置日期時間,可同時設置、修改系統時鐘和硬件時鐘。
Internet同步時鐘設置
在Windows XP日期與時間設置中有一項與Internet同步的功能,有了這項功能只要上網便可得到十分準確的時間。 Red Hat 8.0也提供了這樣的功能,在日期與時間設置工具對話框中的下部,有一個“啟用網絡時間協議”的選項,將該項選中就可以使用網絡時間協議來同步Linux 系統時鐘。選中該項後,其下面的服務器下拉列錶框就變為可用狀態,可從中選擇一個時間服務器作為遠程時間服務器。然後單擊確定按鈕,便可連接所設定的時間服務器,並與之同步時間。
關於網絡校時: ntpdate
基本上,網絡校時需要兩個步驟:
1. 由time.stdtime.gov.tw 取得最新的時間,並實時更新Linux 系統時間;
2. 更改 BIOS 的時間。
[root @test root]# ntpdate time.stdtime.gov.tw
[root @test root]# clock –w
來源: http://www.uddtm.com/server/openssh/92.html
2012年12月21日 星期五
vim 進階設定
編碼的設定
我的環境是zh_TW.UTF-8那如果別人給我一個big5編碼的檔不就不能開了,不過vim會做轉碼的動作,所以可以放心。在.vimrc裡面加入
set fencs=utf-8,big5 "vim開檔自動判斷檔案編碼先從utf-8開始
set fenc=utf-8 "建立新檔的時候什麼編碼建立
set env=utf-8 "vim所使用的內部編碼
簡單來說三個例子
1、檔案編碼為utf-8
開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為utf-8,而它與我們vim的內部編碼相同都是utf-8,所以直接就可以正確顯示。
2、檔案編碼為big5
開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為big5,而它與我們vim的內部編碼不同,我們內部編碼是utf-8,所以vim會呼叫iconv把讀出來的big5轉換成utf-8編碼,就可以正確顯示,而如果我們修改完內容寫回檔案的時候,vim又會將utf-8自動轉換成big5寫回檔案。
3、開新檔案
由於設定fenc=utf-8所以檔案在建立的時候就會以utf-8來編碼,雖然不設定的話,預設vim會讀取目前locale所使用的語系來建立檔案,但是如果常常語系改來改去的話,常常建立的檔案自己都不知道是什麼編碼,所以加入這個設定。
視窗分割
vim可以把一個視窗分割成幾個視窗,可以縱切也可以橫切,通常我使用縱切的話分割成左右兩個畫面,這樣可以同時開兩個程式碼而且可以對照著看內容,非常的方便。ctrl+w, v 切割垂直分割
ctrl+w, n 切割水平分割
ctrl+w, q 關閉分割
ctrl+w, - 縮小分割大小
ctrl+w, + 放大分割大小
ctrl+w, = 平均分割大小
ctrl+w, 方向鍵 移動聚焦視窗
在程式碼中加速移動(必學)
※注意:要在normal mode下
[{ or [( 找左邊界第一個出現的{ or (
]} or ]) 找右邊界第一個出現的} or )
f@ or f" 向右找第一個出現匹配的符號或字元
$ 移到行尾,等於END
^ 移到行首,等於HOME
H 移到畫面最上方
M 移到畫面中間
L 移到畫面最下方
c$ 修改到行尾
d% 移除到行尾
dw 移除一個單字
d^ 移除到行首
% 找最近的() or {}
範圍選取技
※以下看到的"|"是「或」的意思v | c | d + i | a + { | [ | " | '
v: visual
c: change
d: delete
i: inner object
a: an object
{},[],"",'': region
va{ 選取最小範圍的{}部份
vi{ 選取最小範圍的{}部份(但不包含{})
di" 移除最小範圍的""部份(但不包含"")
ci( 修改最小範圍的()部份(但不包含())
va{= 選取最小範圍的{}部份並排列整齊
vim plugins
vim官網有非常多的plugin可以用,如果興趣可以自己上去慢慢找NERD_tree.vim 目錄列表插件
taglist.vim 函式列表插件(需安裝ctags)
要加入plugin先在家目錄下面建立.vim/plugin目錄
> mkdir -p ~/.vim/plugin
之後把下載的plugin解壓縮之後都放到plugin目錄下面就行了,之後看一下它所附上的說明檔, 看要怎麼來設定使用這個插件,之後在加入對映的快速鍵來啟動插件。
> vim .vimrc 加入
"ctags command set for bsd
let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"
"functional mapping
nmap <F1> :NERDTreeToggle<CR>
nmap <F2> :TlistToggle<CR>
我把F1, F2對映到這些plugin的啟動上面
總結
vim是個非常強大的編輯器,其實用起來像在打電動,所有很多的連續技,如果熟練的話,那麼寫程式或是編寫文件會大大的縮短時間,使工作更有效率。2012年12月13日 星期四
ssh 指令運用筆記
ssh tunnel
$ ssh -NfR 5566:localhost:22 ptchiang@140.113.209.4N : 不執行任何指令
f : 背景執行
R : 主要建立通道參數
5566 : 遠端主機 port
localhost:22 遠端主機要轉送的目的
ptchiang@140.113.209.4 遠端主機登入資訊
遠端主機使用下面指令作登入, wanda 是建立通道主機的使用者帳號
$ ssh wanda@localhost -p 5566
scp 用法
[root@www ~]# scp [-pr] [-l 速率] file [帳號@]主機:目錄名 <==上傳 [root@www ~]# scp [-pr] [-l 速率] [帳號@]主機:file 目錄名 <==下載 選項與參數: -p :保留原本檔案的權限資料; -r :複製來源為目錄時,可以複製整個目錄 (含子目錄) -l :可以限制傳輸的速度,單位為 Kbits/s ,例如 [-l 800] 代表傳輸速限 100Kbytes/s # 1. 將本機的 /etc/hosts* 全部複製到 127.0.0.1 上面的 student 家目錄內 [root@www ~]# scp /etc/hosts* student@127.0.0.1:~ student@127.0.0.1's password: <==輸入 student 密碼 hosts 100% 207 0.2KB/s 00:00 hosts.allow 100% 161 0.2KB/s 00:00 hosts.deny 100% 347 0.3KB/s 00:00 # 檔名顯示 進度 容量(bytes) 傳輸速度 剩餘時間 # 你可以仔細看,出現的訊息有五個欄位,意義如上所示。 # 2. 將 127.0.0.1 這部遠端主機的 /etc/bashrc 複製到本機的 /tmp 底下 [root@www ~]# scp student@127.0.0.1:/etc/bashrc /tmp |
其實上傳或下載的重點是那個冒號 (:) 囉!連接在冒號後面的就是遠端主機的檔案。 因此,如果冒號在前,代表的就是從遠端主機下載下來,如果冒號在後,則代表本機資料上傳啦! 而如果想要複製目錄的話,那麼可以加上 -r 的選項!
ssh 自動登入
Linux Client
1. 先產生認證用的公私鑰 ssh-keygen -t rsa -b 2048。2. 產生的 id_rsa 為私鑰,需留在本機當作開門的鑰匙。
3. 產生的 id_rsa.pub 為公鑰,需放到欲登入的 server 上某帳號的 .ssh 下(如 /home/jerry/.ssh)。
4. 將 .ssh 下的公鑰 id_rsa.pub 改名成 authorized_keys。
5. 修改 /etc/ssh/sshd_config,將 AuthorizedKeysFile .ssh/authorized_keys 前的#拿掉使其可透過 key 認證。
6. 重新啟動 sshd。
7. 注意 .ssh 目錄的權限需為 700 方有作用。
8. 在本機上, ssh jerry@server -i id_rsa 即可自動登入。
Windows Client
1. 先到 Putty 官方網頁 下載 putty, puttygen.exe, pageant.exe2. 在puttygen產生按下[Gererate]產生key, 此時會要求輸入key的Passphrase
3. 完成後(我大概等了3分鐘吧), 複製public key, 然後在要連線主機的 ~/.ssh/ 下建立authorized_keys, 內容剛剛我們複製 public key的內容,記得要把權限改 600
4. 儲存private key在自己的電腦上
5. 接著要設定putty, 在Connection->Data設定連線帳戶名稱
6. 在SSH->Auth 把我們產生的private key讀進來
7. 回到session按下儲存(囧, 我到今天才知道load按鈕是啥>"<)
8. 此時連線的話, 主機仍會要求輸入key的Passphrase... (這叫什麼自動連線啊!!!)
9. 這時我們打開pageant.exe, 然後把我們本機的private key加進來, 此時也會要求輸入key的Passphrase
10. 自動連線吧!!! BOY!!!
11. 把pageant.exe, 還有下面這段bash檔加入啟動中, 大功告成!!!
"YourPath\pageant.exe" YourPath\private_key.ppk
2012年12月7日 星期五
bash shell 環境變數內容的刪除與取代
[root@www ~]# echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin:/root/bin <==這兩行其實是同一行啦! 範例二:假設我不喜歡 kerberos,所以要將前兩個目錄刪除掉,如何顯示? [root@www ~]# echo ${path#/*kerberos/bin:} /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin |
上面這個範例很有趣的!他的重點可以用底下這張表格來說明:
${variable#/*kerberos/bin:} 上面的特殊字體部分是關鍵字!用在這種刪除模式所必須存在的 ${variable#/*kerberos/bin:} 這就是原本的變數名稱,以上面範例二來說,這裡就填寫 path 這個『變數名稱』啦! ${variable#/*kerberos/bin:} 這是重點!代表『從變數內容的最前面開始向右刪除』,且僅刪除最短的那個 ${variable#/*kerberos/bin:} 代表要被刪除的部分,由於 # 代表由前面開始刪除,所以這裡便由開始的 / 寫起。 需要注意的是,我們還可以透過萬用字元 * 來取代 0 到無窮多個任意字元 以上面範例二的結果來看, path 這個變數被刪除的內容如下所示: /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin:/root/bin <==這兩行其實是同一行啦!
|
# :符合取代文字的『最短的』那一個;
##:符合取代文字的『最長的』那一個;
上面談到的是『從前面開始刪除變數內容』,那麼如果想要『從後面向前刪除變數內容』呢? 這個時候就得使用百分比 (%) 符號了!來看看範例四怎麼做吧!
範例四:我想要刪除最後面那個目錄,亦即從 : 到 bin 為止的字串 [root@www ~]# echo ${path%:*bin} /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin <==注意啊!最後面一個目錄不見去! # 這個 % 符號代表由最後面開始向前刪除!所以上面得到的結果其實是來自如下: # /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin: # /usr/sbin:/usr/bin:/root/bin <==這兩行其實是同一行啦! 範例五:那如果我只想要保留第一個目錄呢? [root@www ~]# echo ${path%%:*bin} /usr/kerberos/sbin # 同樣的, %% 代表的則是最長的符合字串,所以結果其實是來自如下: # /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin: # /usr/sbin:/usr/bin:/root/bin <==這兩行其實是同一行啦! |
瞭解了刪除功能後,接下來談談取代吧!繼續玩玩範例六囉!
範例六:將 path 的變數內容內的 sbin 取代成大寫 SBIN: [root@www ~]# echo ${path/sbin/SBIN} /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin:/root/bin # 這個部分就容易理解的多了!關鍵字在於那兩個斜線,兩斜線中間的是舊字串 # 後面的是新字串,所以結果就會出現如上述的特殊字體部分囉! [root@www ~]# echo ${path//sbin/SBIN} /usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin: /SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin # 如果是兩條斜線,那麼就變成所有符合的內容都會被取代喔! |
我們將這部份作個總結說明一下:
| 變數設定方式 | 說明 |
| ${變數#關鍵字} ${變數##關鍵字} | 若變數內容從頭開始的資料符合『關鍵字』,則將符合的最短資料刪除 若變數內容從頭開始的資料符合『關鍵字』,則將符合的最長資料刪除 |
| ${變數%關鍵字} ${變數%%關鍵字} | 若變數內容從尾向前的資料符合『關鍵字』,則將符合的最短資料刪除 若變數內容從尾向前的資料符合『關鍵字』,則將符合的最長資料刪除 |
| ${變數/舊字串/新字串} ${變數//舊字串/新字串} | 若變數內容符合『舊字串』則『第一個舊字串會被新字串取代』 若變數內容符合『舊字串』則『全部的舊字串會被新字串取代』 |
變數的測試與內容替換
在某些時刻我們常常需要『判斷』某個變數是否存在,若變數存在則使用既有的設定,若變數不存在則給予一個常用的設定。 我們舉底下的例子來說明好了,看看能不能較容易被你所理解呢!
範例一:測試一下是否存在 username 這個變數,若不存在則給予 username 內容為 root [root@www ~]# echo $username <==由於出現空白,所以 username 可能不存在,也可能是空字串 [root@www ~]# username=${username-root} [root@www ~]# echo $username root <==因為 username 沒有設定,所以主動給予名為 root 的內容。 [root@www ~]# username="vbird tsai" <==主動設定 username 的內容 [root@www ~]# username=${username-root} [root@www ~]# echo $username vbird tsai <==因為 username 已經設定了,所以使用舊有的設定而不以 root 取代 |
在上面的範例中,重點在於減號『 - 』後面接的關鍵字!基本上你可以這樣理解:
new_var=${old_var-content} 新的變數,主要用來取代舊變數。新舊變數名稱其實常常是一樣的 new_var=${old_var-content} 這是本範例中的關鍵字部分!必須要存在的哩! new_var=${old_var-content} 舊的變數,被測試的項目! new_var=${old_var-content} 變數的『內容』,在本範例中,這個部分是在『給予未設定變數的內容』 |
不過這還是有點問題!因為 username 可能已經被設定為『空字串』了!果真如此的話,那你還可以使用底下的範例來給予 username 的內容成為 root 喔!
範例二:若 username 未設定或為空字串,則將 username 內容設定為 root [root@www ~]# username="" [root@www ~]# username=${username-root} [root@www ~]# echo $username <==因為 username 被設定為空字串了!所以當然還是保留為空字串! [root@www ~]# username=${username:-root} [root@www ~]# echo $username root <==加上『 : 』後若變數內容為空或者是未設定,都能夠以後面的內容替換! |
在大括號內有沒有冒號『 : 』的差別是很大的!加上冒號後,被測試的變數未被設定或者是已被設定為空字串時, 都能夠用後面的內容 (本例中是使用 root 為內容) 來替換與設定!這樣可以瞭解了嗎?除了這樣的測試之外, 還有其他的測試方法喔!鳥哥將他整理如下:
Tips:
底下的例子當中,那個 var 與 str 為變數,我們想要針對 str 是否有設定來決定 var 的值喔! 一般來說, str: 代表『str 沒設定或為空的字串時』;至於 str 則僅為『沒有該變數』。
| 變數設定方式 | str 沒有設定 | str 為空字串 | str 已設定非為空字串 |
| var=${str-expr} | var=expr | var= | var=$str |
| var=${str:-expr} | var=expr | var=expr | var=$str |
| var=${str+expr} | var= | var=expr | var=expr |
| var=${str:+expr} | var= | var= | var=expr |
| var=${str=expr} | str=expr var=expr | str 不變 var= | str 不變 var=$str |
| var=${str:=expr} | str=expr var=expr | str=expr var=expr | str 不變 var=$str |
| var=${str?expr} | expr 輸出至 stderr | var= | var=$str |
| var=${str:?expr} | expr 輸出至 stderr | expr 輸出至 stderr | var=$str |
參考來源:
2012年12月6日 星期四
Split screen in vi
Horizontal:
:split [FILE]
Ctrl w [ + / - ] or 10 Ctrl w [ + / - ]
resize:
Ctrl w [ < / > ] or 10 Ctrl w [ < / > ]
Refer To:
Split screen in vi
Vertical:
:vsplit [FILE]Ctrl w [ < / > ] or 10 Ctrl w [ < / > ]
switch between window:
(twice) Ctrl w or Ctrl w < LEFT KEY / RIGHT KEY >Refer To:
Split screen in vi
2012年12月4日 星期二
diff and patch howto
diff -urN a a.new > a.patch
patch -p1 < a.patch-pN N 指的是忽略 patch file 前面 N 層目錄
--- AppLibs/broadcom/trellis/Makefile 2012-12-04 18:01:55.209672926 +0800
+++ AppLibs/broadcom/trellis/Makefile.new 2012-12-04 18:19:50.949746930 +0800
@@ -73,6 +73,8 @@
TRELLIS_HAS_AIR ?= y
endif
+TRELLIS_HAS_DFB_EXAMPLE ?= y
+
#Miracast Streamer
ifeq ($(wildcard $(TARGET_DIR)/lib/libwfd_streamer.a),)
TRELLIS_HAS_WFD_STREAMER = n
訂閱:
文章 (Atom)