2014年4月7日 星期一

Linux筆記-指令整理(一)

最近還蠻常用到Linux的指令,所以簡單來的作個整理
雖然Linux的指令其實非常的複雜,一個指令可能擁有許多的參數
但其實就程式設師的角度來看,比較常用的指令就那些
不需要記所有的指令和參數
在鳥哥的網站應該有一份整理好的清單的
http://linux.vbird.org/linux_basic/redhat6.1/linux_06command.php
其實知道這份清單中的指令應該就夠用了
不過,我覺得最好還是大概看過鳥哥的基本篇的文章教學,建立觀念也是十分重要的

下面是我將鳥哥整理好的清單列出,然後加上紅色是我覺得一定要記住的指令

登入與登出(開機與關機):telnet, login, exit, shoudown, reboot 
Linux 多人多工與背景執行功能:& 與 [ctrl]+[z], fg, ps, kill 
檔案與目錄管理:cd, pwd, ls, cat, more, mkdir, rm, rmdir, mv, cp, ln, find, whereis, chmod, chown, chgrp, df, du 
磁碟與硬體管理:mount, fdformat, fdisk, mke2fs, mkbootdisk, badblocks, fsck, rpm
系統管理員:su, clear, dmesg, groupadd, useradd, userconf, passwd, who, whoami, top, free, quotacheck, edquota
壓縮指令:compress, gzip, tar 
一些網路功能:ifconfig, route, netstat, hostname, ping, nslookup,talk, traceroute, mail
其他有的沒的:date, cal, grep 
ftp 指令:ftp, ncftp, gftp
相關設定指令:set, uname, setup, lilo, Xconfigurator, xf86config
X-Window內的設定指令:startx, netconf, netcfg, XF86Setup

另一個指令使用的重點就是組合技了,就是學會使用管線指令,不會管線指令就像打格鬥天王只會重腳一樣,不過也不是所有指令都可以使用,需要自已慢慢摸索,我舉一個我比較常用的例子

比如我想在某個目錄下找特定檔名的檔案
# ls|grep Piece
|就是管線指令,ls會將目前所在目錄的檔案列出,利用|管線指令就檔案清單的資料交給grep,grep這個指令的作用就是找出包含Piece關鍵字的檔案

另外再補充一個就是,一開始在學習指令時或是看到別人寫的指令時,有時會不太了解,可以用利Linux指令解釋網站
http://blog.soft.idv.tw/?p=1628
這裏面列出了二個網站,不過我比較推薦
http://explainshell.com/
有可下載原始檔下來使用

在這篇並沒有特定的指令作解說,所以之後我可能針對常用和使用上比較複雜的指令進行整理。







2014年3月13日 星期四

如何在Linux下開啟oracle

每次重開機的時候oracle資料庫都不會重新啟動,所以查了一下如何開啟資料庫
系統的版本主要是Red Hat,Cent OS應該也是可以通用的。
當資料庫不能連線時,記得先檢查網路和主機狀態。

開啟資料庫:
su - oracle
sqlplus "/sysdba"
進入slqplus
sql> startup
sql> exit

開啟監聽器:
檢查監聽器
lsnrctl status
開啟
lsnrctl start


參考資料:
http://mrmo.cc/1594/%E5%9C%A8centos%E4%B8%8B%E5%95%9F%E5%8B%95%E5%AE%89%E8%A3%9D%E5%A5%BD%E7%9A%84oracle%EF%BC%8C%E4%B8%A6%E8%A8%AD%E5%AE%9A%E9%96%8B%E6%A9%9F%E8%87%AA%E5%8B%95%E5%95%9F%E5%8B%95/

Borland C++ short key

Borland Build C++ 6.0跟我很不熟的一套IDE,基本上比較常用的在功能選單上都有註明,不過這真的不是一套非常友善的開發軟體,畢竟也有一段歷史了,我在這裏記錄一些常用,但不在功能選單上的快速鍵。

書籤Bookmarks,有時trace code會需要用到…,但右鍵選單上設計的不夠理想,常常誤點…,雖然預設快速鍵也不是很好用就是了
<Ctrl-k><0> Sets bookmark 0
<Ctrl-0> Go to bookmark 0

之後,如果有其它常用的快速鍵,我再補充。

參考資料:
http://content.hccfl.edu/pollock/Docs/BCCEdit.htm

2014年3月5日 星期三

Oracle SYNONYM 的建立和刪除

當使用者B想用使用者A上的資料表時,除了使用Grant賦予權限外,可以使用synonym來建立table的同義字供別的使用者使用。

我主要建立public共用的synonym,建立指令如下:
CREATE PUBLIC SYNONYM synonym_name
   FOR user_name.table_name

刪除synonym指令如下:
DROP PUBLIC SYNONYM synonym_name

參考資料:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm
http://blog.itpub.net/12778571/viewspace-674453/

2013年12月7日 星期六

好用的系統和資料備份軟體-Macrium Reflect和FBackup

在電腦中最重要的部分就是資料了!因此,我也一直在思考如何快速和方便的備份資料,在偶然的機會發現了Macrium Reflect這套磁碟備份軟體,幾乎有所有我想要的功能,使用上也十分的方便,重點是Free的,不過現在官方網站已經沒有提供了,需要另外在自已抓就是了。

首先先介紹他一些我覺得非常好用的功能,
  1. 可以將partition的資料轉成image檔和還原,不過一次只能做一個實體硬碟就是了
  2. 另一個主要的功能是有排程備份的功能,並且可以選擇備份方式,如差異或是完整備份。
  3. 可以製作開機環原光碟和USB,這個功能十份的方便,可以用來做系統的還原功能。
  4. 可能網路讀取image的功能。
  5. 可以掛載image檔,然後還原想要還原的檔案

前三點是我主要使用的功能,第四點可能要等我買NAS之後再試吧(等NAS降到五千以下?)。不知道他有沒有提供大量主機還原的方案,可能Server版有提供吧,有興趣的朋友可能自已再進一步的研究!(中研究有研發一個叫再生龍的大量主機還原的軟體,可以參考看看)。

以下是他的教學網站,因為他寫的太好了,我就不作教學了XD

你可以到丫榮福利社來下載免費版

當然,每套軟體不可能都完美的符合你的需求,但Macrium Reflect這套軟體可以完美的達到系統備份的功能,也就是備份系統碟,但在資料碟中我並不需要備份整顆Partition,比如一些影片和照片我不想浪費儲存空間,或是把一些較不重要的資料放至網路儲存空間。這時可以使用FBackup,這是我用來備份特定資料夾所使用的備份軟體,為什麼我會推薦這套軟體最大的原因是穩定性和是Free的,由於我的系統主要是使用Windows 7 64位元版和資料量都多達幾百G,在我試過了幾套免費的資料備份軟體時,常常造成軟體當掉的情況,而FBackup算是很穩定的資料備份軟體。

在這我介紹一下他的特色和吸引我的地方,
  1. 可以自已設定需要備份那些資料夾,並將這些設定存成任務,只備份這個任務中的目錄
  2. 當然也有排程的功能,也可以選擇是差異備份或是完整備份。
  3. 將檔案儲存成壓縮檔,這可以節省空間,但相反的也需要花費較多的時間就是了!
  4. 在轉成壓縮檔的時候,可以設定密碼,增加安全性!

這裏是他的簡易教學

你可以到官網下載免費版本

個人在使用上,主要會依據資料的特性做份類,比如是個人或是公司的資料,另外一個分類是變動性較低的資料。

另外,我也開始在思考是否有優秀的網路儲存空間可以利用,主要有幾點需要考量的因素
  1. 儲存空間的大小,和是否有儲存時間的限制(某些免空有儲存時間的限制)
  2. 傳輸速率,可以根據使用的需求進行評估,如空間小但速率快,可以拿來做常變動資料的備份區,傳輸速率慢,但空間大,可以拿來做不常用,但資料量大的備份區,但如果太龜速,可能還是不適合做來資料備份使用。
  3. 特殊功能別的網路儲存空間,主要是網路相簿,如Flick、無名、google相簿或是Facebook的相簿等等。
  4. 介面操作的方便性
現在簡介幾個我知道的網路儲存空間,
  1. Dropbox,很有名的網路儲存空間,雖然使用空間不大,但是在同步性和使用方便性上十份杰出,適用用來做coworker的網路儲存空間!
  2. Google Drive,空間也不大,主要是拿來放google網路文件的空間,其實也可能拿來放檔案,基本上同步性和使用方便性也是十份優秀,再加上google document的文件功能,在多人修改文件有其優勢,再配合其它google產品,應用面可以說非常的廣泛,但有時在操作上會遇到一些異常的情況…BJ4,不過不是什麼大問題就是了,還是十份的推薦。。
  3. google相簿,可以即時的和手機的相簿做同步,但大量圖片上傳時會消耗大量的電力,不使用時記得關閉
  4. flick,儲存空間多達1G,而且照片的品質在網路上看起來蠻有質感的(google也不錯,不過這比較偏向個人觀點),也是蠻吸引人的,但最近已經沒有在玩單眼了,沒有需要大量的相簿空間
  5. youtube,拿來儲存影片的空間
  6. 其它,有聽過一些網路儲存空間,但因為沒有使用過,所以放這裏以後再進行研究,hinet的免空、skydrive、mega update
對於網路空間的用法我還沒想出一個最適合我的用法,也可以說幾乎沒在用,很多東西也是丟著,然後也沒什麼在使用就是了,之後如果有想出適合的用法再寫一篇,我如何利用網路儲存空間。



HG(Mercurial)的指令記錄

最近因為一些因素接觸到Mercurial這套版本控管的工具,在網路上都可以找到一些基本的教學,不過我主要先記錄一些我常用的指令就好了。之後有空會再慢慢補齊 。

先簡單介紹Mercurial,Mercurial的中文應該有很多意思,不過我想應該要翻成水銀,因為水銀的化學符號是hg,所以在打指令時都是hg開頭,另外,他是使用python所開發的,所以P派的人應該跟他比較熟吧XD,是類似git的分散式版本控管的,分散式版本控管的優點是,可以在本機端做版本控管,如果有需要再將檔案上傳至遠端主機上,這大幅度的降底主機的儲存成本,又可以更快速的做版本控管的動作,所以才會有github和bitbucket的網站出現。

*藍色的字是根據你實際狀況建立的名稱



第一步:建立HG的專案和基本設定

主要有二種情況,一種是遠端主機上無此專案,另一種則是遠端主要上已有些專案了

  • 遠端主機上無此專案

如果要建立新專案的話,先建立hg的目錄,輸入
hg init
到目錄底下的.hg/hgrc這個檔案中設定
主要是設定遠端主機的url和commit的username
[paths]
default=https://username@bitbucket.org/owner/project name/
[ui]
username=your name
可以使用Bitbucket這個類似Github的網站來做來遠端的版本控管主機
首先要在Bitbucket建立一個repository

將hg目錄新增至bitbucket
hg push https://username@bitbucket.org/owner/project name/ 如果有設定default path就不用輸入目的地

  • 使用遠端主機上的專案
如果,想要的project已經存在bucket上時,可以直接從上面複製下來,不用從頭建立,但還是需要設定.hg/hgrc,可以參考上面的設定
hg clone (https://your name@bitbucket.org/project owner/project name/)

第二步:本機端的版本控管

每次有新檔案時,都要新增檔案
hg add filename 想偷懶可以打
hg add *.* 如果有需要的話可以設定ingore檔,這樣特定的檔案類型就不會被新增了

再來commit到本機端
hg commit 會跳出筆記本讓你編輯(Linux版本應該是ui)
如沒有跳出筆記本的話,可能需要到.hg/hgrc設定
[ui]
editor=notepad.exe
或是在commit直接輸入註解
hg commit "your comment"

第三步:遠端的版本控管

主要有三個指令
將檔案和一些設定上傳至遠端主機上
hg push
將檔案從主要下載下來
hg pull
將檔案更新到最新的版本
hg update

第四步:分支的版本控管


branch的管理,當要建立一個新的分支來開發程式時所需要的指令

先查看一下目前在那個分支
hg branch
再查看一下有那些branch已被建立
hg branches
建立一個新的branch
hg branch branch name
在remote端建立branch的資訊
hg push --new-branch
之後我們就可以用push來上傳檔案

如果我們要在已存在的branch切換時,使用
hg update branch name 這樣會將資料更換到那個branch的最新資料,記得切換前要commit檔案

有時在使用update做branch的切換時會遇到一些問題
基本上會一個分支為出發點看你要取什麼名字,比如
hg branch stable 表示這個版本的分支是穩定版

在根據你的新功能從stable開立新分支
hg branch new_branch
當你開發完想做merge時,可以回到stable做merge的動作
hg update stable
hg merge new_branch

另外一個比較特別的情況是,當你回到stable做pull後,想回new_branch時,可能因為版本的差異造成無法切換,解決的辦法有merge和clean,merge已經在上面提過了, clean的方式是
hg update --clean 不過這個方法是確定新分支的修改都不要時才建議使用,各位可以想想是否有更聰明的辦法

第五步:其它常用的指令

我有一些比較常用的指令
如查看log檔
hg log 可以加上-l來選擇要秀最近的幾筆log
hg log -l number
其它我還未使用過的指令,但應該也是蠻有用的指令,我也大概先列出來,有興趣的朋友可以自已研究進一步的用法
hg st      看主線被合併進來的檔案
hg diff     看原始碼差異

結語

只是大概對我目前有用到的指令做個簡單的記錄,下面的網址算是我比較看的懂的介紹,有興趣的朋友可以看看,基本上我之後應該還是會使用git為主,而 hg和git就目前這些指令看起來使用上並沒有什麼不同,不過應該還是有些細微上的差異,比如hbase和branch的管理方式,這當然會對開發造成影響,所以是多人的 group在使用的話,最好還是做進一步的了解在使用。

參考資料



2013年10月1日 星期二

Git基本操作指令

這幾天看了一些Git和GitHub的資料,覺得Git真的是不錯的版本控管的軟體,在這邊記錄幾個比較常用的指令吧,網路上已經有許多的教學可以看了,因此,在這我主要是記錄一些我覺得我之後可能比較會用到的指令,需要進一步的資料的話,可以看我的參考資料。

初始化設定
  • 安裝git和設定
我主要是使用ubuntu的環境,所以使用apt-get來安裝,第一次使用時,需要設定使用者名稱和email。
sudo apt-get install git

git config --global user.name "your_name"

git config --global user.email


也可以設定alias name來簡化輸入,直接編輯~/.gitconfig
cd ~

vi .gitconfig



[vi]

alias

  checkout = co


之後如果需要連到github上的話,需要建立ssh的public key
cd ~

mkdir .ssh

cd .ssh

然後使用預設值,不用設定密碼
再將id_rsa.pub的全部內容,複製到github上(在個人設定有一個ssh key的地方)
ssh-keygen -t rsa -C your_email


  • 建立git的專案
初始化一個全新的資料夾,可以使用
git init


如果要複製專案下來,可以使用
git clone https|ssh

https的網址可以去github上面找,可以用來複製別人的專案
ssh可能用來處理自已的專案,就不用再輸入帳密


本機端處理

圖一:git的檔案狀態圖(資料來源[6])


從圖一中可以看出,在本機端中,git的檔案可分成三個階段,working, staging,和repository,我正在編輯的程式會存在working中,然後新增和修改的檔案我們會移至staging階段,當要寫這些修改的部分進行版本儲存時,會移至 repository。

  • 新增和儲存
當有檔案修改或新增時,需將檔案推至staging
git add your_file

或將所有新檔案全部推至staging
git add .

當需要將staging的檔案推至本機的repository時
git commit

然後會跳出vi視窗,然後輸入你要寫入的註解
可以使用-a和-m簡化步驟
-a 跳過add的步驟
-m 直接寫入comment

  • 刪除和移動檔案
需要移除檔案使可使用
git rm
需要移動檔案時,可使用
git mv

  • 狀態查詢
查詢git的狀態
git status

查詢commit的記錄
git log
查看各版本相異點
git diff

  • 建立tag
建立tag
git tag your_tag

  • 建立和管理branch
建立branch,ref可以參考tag或是它他branch
git branch branch_name [ref]

還原檔案或是移至分技
git checkout

將分技分併一起
git merge a1 a2

  • 進階應用
修改comment(應該會很少用到,確切使用方法也不清楚)
git rbase

  •  其它
其它可能用不到的,需要時再查詢
git show

git reset

git grep

git stash

git revert



遠端處理

  • 設定
遠端設定
git remote add new-branch project-url


  • 取得和上傳資料
取得遠端資料
git pull

上傳資料到遠端
git push




參考資料:
[1]  http://pulipuli.blogspot.tw/2013/02/github-part3-git.html
[2]  http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/
[3]  http://blog.longwin.com.tw/2009/05/git-learn-initial-command-2009/
[4]  http://ncu-csie-snmg.github.io/2013-NCU-CSIE-Website-Design-Competition/git.html
[5]  http://www.youtube.com/playlist?list=PLuW7NCGvKlyXAOC4Kn7VW0vtPNxSqICrX
[6]  http://git-scm.com/book/en/Getting-Started-Git-Basics