2013年8月15日 星期四

linux工作常用指令

工作常用指令
===============================================================================================================
tar ---壓縮及打包
[root@www ~]# tar [-j|-z] [cv] [-f 建立的檔名] filename...或目錄 <==打包與壓縮
[root@www ~]# tar [-j|-z] [tv] [-f 建立的檔名]               <==察看檔名
[root@www ~]# tar [-j|-z] [xv] [-f 建立的檔名] [-C 目錄]    <==解壓縮
選項與參數:
 -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 打包!
Rodney使用範例
--->tar -jpcv  -f  AES-M604+backup_20090323.tar.bz2  ./29-600-PAL
--->tar -zxvf   arm-linux-2.6.tar.gz 解壓縮此檔
--->tar -zxvf  pl_1029_src.tar.gz   -C   /home/abc/    解壓縮到 /home/abc/目錄下
--->tar -jxvf   AES-M604+backup_20090323.tar.bz2 解壓縮此檔
===============================================================================================================
useradd ---新增帳號
useradd -g 0 -G 0 -p 12345 username
若要把新增的帳號變成root,要進入/etc/passwd,將帳號的uid, gid,數字都改成0
===============================================================================================================
grep用途:顯示符合樣式的列
用法:
1.grep A *
結果:將含有 A 這個字元的檔案及列顯示出來
2.grep -i A *
結果:將含有 A或a 這個字元的檔案及列顯示出來 (-i 是不分大小寫之意)
3.grep -v La data3
結果:將不含 La 的列顯示出來 (-v 是不包含之意)
4.grep -l La *
結果:只顯示那些檔案包含 La,不秀出符合的列
5.grep -n La *
結果:也秀出列號
6.dmesg | grep eth0
結果:將含有 eth0 的訊息列顯示出來
7.grep -q keyword filename
結果:若 filename 含有 keyword 則傳回 0 (真),否則傳為非 0
命令執行完之後,它的傳回值放在 $? 這個變數中,只要 echo $? 便可得知成功與否,請記住:0 為成功,非 0 為失敗 !
8.grep  seti  *.txt
在現行目錄中,所有副檔名為".txt"的檔案之內容,尋找包含"seti"字串的檔案,並列出其檔案名稱.
9.grep  -r   deepwater   *
在現行目錄中的所有檔案,包括子目錄在內,尋找包含"deepwater"字串的檔案,並列出其檔案名稱.
==============================================================================================================
1.  linux下"搜尋特定內容的檔案"的方法:
$ grep   -r   "字串"   ./          --------------遞迴搜尋此層目錄包含其下所有子目錄中,包含「字串」的所有檔案,
    若「字串」中的英文字元大小寫不同,將被視為不同字串
2.找到 Linux 的 kernel 版本
 uname  -a   或   uname   -r
Rodney使用(20090722)--- PC---- 2.6.18-53.e15
   板子-- Linux pl1029 2.4.19
===============================================================================================================
vim --Linux下的文字編輯器1.搜尋 
 /  在 c-mode 的情形下,按 / 就會在左下方出現一個 /,然後鍵入您要尋找的字串,
  按個 Enter 就會開始找。? 和 / 相同,只是 / 是向前(下)找, ? 則是向後(上)找。 
 n 繼續尋找。 
 N 繼續尋找(反向)。

2.搜尋操作(Vim 才有) 
 * 尋找游標所在處之 word(要完全符合)。 
 # 同上,但 * 是向前(下)找,# 則是向後(上)找。 
 g* 同 * ,但部份符合即可。 
 g# 同 # ,但部份符合即可。n, N 之繼續尋找鍵仍適用。
3.視窗操作 
 Ctrl+w n 即 :new。開一空的新視窗。 
 Ctrl+w s 即 :sp(lit),會開一新視窗,且原檔分屬兩個視窗。 
 Ctrl+w f 開一新視窗,並編輯游標所在處之 word 為檔名的檔案。 
 Ctrl+w q 即 :q 結束分割出來的視窗。 
 Ctrl+w o 即 :only! 使游標所在之視窗,成為目前唯一顯示的視窗其它視窗會隱藏起來。 
 Ctrl+w j 移至下視窗。 
 Ctrl+w k 移至上視窗。還記得 hjkl 的按鍵移動方式嗎? 
 :sp 檔名 開另一新視窗來編輯檔案。 
4.書籤功能 
 這又是 Vim 的一個秘密武器,簡單的說,您可以在文章中的某處做個記號(marks),然後跑到其它地方去編輯,
  在呼叫這個 mark 時又會回到原處。妙吧! 
 mx x 代表 26 個小寫英文字母,這樣游標所在處就會被 mark。 
  `x 回到書籤原設定位置。` 是 backward quote,就是 Tab 鍵上面那一個。 
  'x 回到書籤設定行行首。' 是 forward quote,是 Enter 鍵隔壁那一個。
5.還原
 u 這個太重要了,就是 undo,傳統的 vi 僅支援一次 undo,Vim 及 elvis 就不只了,Vim 幾乎是沒有限制的。 
 U 在游標沒離開本行之前,回復所有編輯動作。 
 Crtl+r 這個也是很重要,就是 redo 鍵。 
 
6.複製
 yy 複製游標所在行整行。或大寫一個 Y。 
 2yy 複製兩行,y2y 也可以。ㄟ,請舉一反三好不好!:-) 
 y^ 複製至行首,或 y0。不含游標所在處字元。 
 y$ 複製至行尾。含游標所在處字元。 
 yw 複製一個 word。 
 y2w 複製兩個字。 
 yG 複製至檔尾。 
 y1G 複製至檔首。
        yl 複製一個字元
7.貼上
 p 小寫 p 代表貼至游標後(下)。 
 P 大寫 P 代表貼至游標前(上)。整行的複製,按 p 或 P 時是插入式的貼在下(上)一行。非整行的複製則是貼在游標所在處之後(前)。
8.刪除
       dd 刪除游標所在行整行
       2dd 刪除兩行
       d$ 刪除至行尾(= D)
       dw 刪除一個 word。 
       d2w 刪除兩個字。
       yG 刪除至檔尾
       dl 刪除一個字元
9.替換(substitute) 
:[range]s/pattern/string/[c,e,g,i]5.1 
range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。 
pattern 就是要被替換掉的字串,可以用 regexp 來表示。 
string 將 pattern 由 string 所取代。 
c confirm,每次替換前會詢問。 
e 不顯示 error。 
g globe,不詢問,整行替換。 
i ignore 不分大小寫。

g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。
[實例] :%s/Edwin/Edward/g 
這樣整篇文章的 Edwin 就會替換成 Edward。 

10.再command line下打
:set nu    使用顯示行號
:set ai    使用縮排
:set cin   使用C語言格式
:25        游標跳到第25行
以上set設定可以加到~/.exrc檔案中,使的每次可自動載入
:q!        離開,!表示不用再確認
:w!        儲存,!表示不用再確認
:wq!       儲存後離開,!表示不用再確認
:ZZ        儲存後離開
:x         儲存後離開

11.
更進階的搜尋、替換的例子在說明 regexp 的時候還會再詳述。目前只知道最基本的用法就可以了!其實光這樣就非常好用了。:-)

===============================================================================================================
netstat顯示等待關閉的client/server連結
==========================================================
du
du -h -->顯示目前目錄下的所有檔案使用多少空間
顯示第一層的目錄容量大小
du -h --max-depth=1 ./
--------------------------
ll -h
==========================================================
ln
用途:鏈結檔案;ln 提供一個方便的機制,使同一個檔案可以有多個檔名
用法:
1.ln f1 f2
結果:將 f1 鏈結到 f2 (硬式鏈結),f2 的檔案內容和 f1 一模一樣
2.ln -s f1 f3
結果:將 f1 鏈結到 f3 (軟式鏈結),f3 是 f1 的別名,取用 f3 時,實際上是存取 f1
軟連結
ln -s [source] [destination]
3.ln -sf f1 f3
結果:同上,唯若 f3 早已存的話,將被刪除後再重建一個新的
4.其它進一步的用法,請 man ln 查閱線上文件。

==========================================================
cp --複製檔案
cp [來源檔案] [新檔案]
----------------------------
複製目錄 --將來源目錄複製一份成新目錄名稱
cp -v -r [來源目錄] [新目錄]
cp -dpR 來複製,這樣才可以完 整地將檔案屬性複製過去(特別是那些設備檔及符號連結檔)。
==========================================================
mv --Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
mv [OPTION]... [-T] SOURCE DEST   --->更名
or:  mv [OPTION]... SOURCE... DIRECTORY   --->搬移
==========================================================
rm --刪除檔案或目錄
===============================================================================================================
screen ---Linux文字介面下的多視窗管理
$screen  --啟用多screen
$screen -R  --Reattach if possible, otherwise start a new screen.
$screen -A  --新增 screen.
$screen -d  --detach 目前的screen,或列出所有目前已存在的 detached screen.
$screen -r [pid] --reattach 一個之前 detached 的 screen,若有多個 detached的 screen,擇要指定 screen的pid.
$screen -U tell screen to use UTF-8 encoding.
$screen -ls  --列出所有目前已存在的 detached screen.
$screen -q (quiet)--新增一個視窗
$exit       --終止一個視窗
----------------------------------------------------- 
已在一個screen中可用以下的快捷鍵
Ctrl+A+C   --新增一個視窗
Ctrl+D        --刪除一個視窗
Ctrl+左右鍵 ---切換視窗
Ctrl+A        --切換視窗
Ctrl+A+D   --detach 目前的screen

===============================================================================================================
cat用途:連結檔案內容並顯示出來
用法:
1.cat dataf1
結果:顯示 dataf1 的檔案內容
2.cat dataf1 dataf2
結果:連結 dataf1, dataf1 的內容,並予顯示。
3.cat >>urmail.txt
kdkdkdkdkdkdkdkdkdk (Enter)
^D
將 cat 拿來當作簡易編輯器。
4.其它進一步的用法,請 man cat 查閱線上文件。
===============================================================================================================
id   [user name]
顯示使用者帳號訊息
==========================================================
其他
ls -al -->詳細列出所有檔案資訊(包括隱藏檔)
pwd  -->顯示當前路徑
who  -->顯示目前誰登入
df -h -->顯示磁碟分割區的使用狀況

===============================================================================================================
find ---搜尋檔案
find 從哪裡找 -name 條件 -exec 做什麼事 {}空格\; 
ex1:
find /root -name 'install.log' -exec ls -l {} \;
ex2:搜尋目前路徑下的所有檔案,找出檔名含有aaa字串的檔案
find ./ | grep aaa
=================================================================================
who
用途:顯示現在誰登入主機
用法:
who
顯示: ols3 pts/0 Aug 1 13:54
whoami 則顯示自己的登入帳號
=================================================================================
wc用途:計算檔案內字數或列數
用法:
1.wc -l dataf1
結果:顯示 dataf1 的檔案內共有幾列
2.wc -c dataf1
結果:顯示 dataf1 共有多少字元。
3.wc -w dataf1
結果:顯示 dataf1 共有多少句元。
4.其它進一步的用法,請 man wc 查閱線上文件。

=================================================================================
install ---複製檔案及設定檔案屬性權限
  用法1:
    insatll [OPTION]... SOURCE...DIRECTORY    
    insatll [OPTION]... -t DIRECTORY...SOURCE
    insatll [OPTION]... [-T] SOURCE...DEST
    複製SOURCE到DEST 或多個SOURCE到已存在的目錄DIRECTORY,同時亦可設定權限,擁有者及群組.
    
  用法2:
    install [OPTION]... -d DIRECTORY 
    新增這些指定的目錄 
     
  參數:
    -d, --directory 視所有引數為目錄名稱;
    -m, --mode 設定存取權限(如 chmod)
    -t, --copy all SOURCE arguments into DIRECTORY.
    -T, --treat DEST as a normal file.
    -v, --verbose
    -g, --group
    -o, --owner
    -p, --perserve_timestamps, apply acccess/modification times of SOURCE files to corresponding
          destination files.
            
===============================================================================================================
set
查看環境變數:
$set
===============================================================================================================
> ---輸出指向
查看執行檔(或指令)的執行結果:   1代表執行正確的輸出 ,2代表執行錯誤的輸出
[root@localhost ~]# ls 1.txt 5.txt
ls: 無法存取 5.txt: 沒有此一檔案或目錄
1.txt
[root@localhost ~]# ls 1.txt 5.txt >yesno 2>yesno
[root@localhost ~]# cat yesno
1.txt
�法存取 5.txt: 沒有此一檔案或目錄
[root@localhost ~]# ls 1.txt 5.txt >yesno 2>&1
[root@localhost ~]# cat yesno
ls: 無法存取 5.txt: 沒有此一檔案或目錄
1.txt
===============================================================================================================
排程
10 5 * * * root /usr/sbin/ntpdate time.stdtime.gov.tw && /sbin/hwclock -w
使用 cron 之後,每天 5:10 Linux 系統就會自動的進行網路校時,校時若成功則寫入 BIOS 時間!
===============================================================================================================
shell programming---------------------------------------------------------------------------
[rodney@cvs3 ~]$ basename --help
Usage: basename NAME [SUFFIX]
  or:  basename OPTION
Print NAME with any leading directory components removed.
If specified, also remove a trailing SUFFIX.
      --help     display this help and exit
      --version  output version information and exit
Examples:
  basename /usr/bin/sort       Output "sort".
  basename include/stdio.h .h  Output "stdio".
---------------------------------------------------------------------------
[rodney@cvs3 ~]$ dirname --help
Usage: dirname NAME
  or:  dirname OPTION
Print NAME with its trailing /component removed; if NAME contains no /'s,
output `.' (meaning the current directory).
      --help     display this help and exit
      --version  output version information and exit
Examples:
  dirname /usr/bin/sort  Output "/usr/bin".
  dirname stdio.h        Output ".".

===============================================================================

2013年8月14日 星期三

[備忘]Linux Error List

source:    kernel/include/asm-generic/errno-base.h
                  kernel/include/asm-generic/errno.h

#define EPERM 1      /* Operation not permitted */
#define ENOENT 2      /* No such file or directory */
#define ESRCH 3      /* No such process */
#define EINTR 4      /* Interrupted system call */
#define EIO 5      /* I/O error */
#define ENXIO 6      /* No such device or address */
#define E2BIG 7      /* Argument list too long */
#define ENOEXEC 8      /* Exec format error */
#define EBADF 9      /* Bad file number */
#define ECHILD 10      /* No child processes */
#define EAGAIN 11      /* Try again */
#define ENOMEM  12      /* Out of memory */
#define EACCES 13      /* Permission denied */
#define EFAULT 14      /* Bad address */
#define ENOTBLK  15      /* Block device required */
#define EBUSY 16      /* Device or resource busy */
#define EEXIST 17      /* File exists */
#define EXDEV 18      /* Cross-device link */
#define ENODEV 19      /* No such device */
#define ENOTDIR 20      /* Not a directory */
#define EISDIR 21      /* Is a directory */
#define EINVAL 22      /* Invalid argument */
#define ENFILE 23      /* File table overflow */
#define EMFILE 24      /* Too many open files */
#define ENOTTY 25      /* Not a typewriter */
#define ETXTBSY 26      /* Text file busy */
#define EFBIG 27      /* File too large */
#define ENOSPC 28      /* No space left on device */
#define ESPIPE 29      /* Illegal seek */
#define EROFS 30      /* Read-only file system */
#define EMLINK 31      /* Too many links */
#define EPIPE 32      /* Broken pipe */
#define EDOM 33      /* Math argument out of domain of func */
#define ERANGE 34      /* Math result not representable */
#define EDEADLK 35      /* Resource deadlock would occur */
#define ENAMETOOLONG 36      /* File name too long */
#define ENOLCK 37      /* No record locks available */
#define ENOSYS 38      /* Function not implemented */
#define ENOTEMPTY 39      /* Directory not empty */
#define ELOOP 40      /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN  /* Operation would block */
#define ENOMSG 42      /* No message of desired type */
#define EIDRM 43      /* Identifier removed */
#define ECHRNG 44      /* Channel number out of range */
#define EL2NSYNC 45      /* Level 2 not synchronized */
#define EL3HLT 46      /* Level 3 halted */
#define EL3RST 47      /* Level 3 reset */
#define ELNRNG 48      /* Link number out of range */
#define EUNATCH 49      /* Protocol driver not attached */
#define ENOCSI 50      /* No CSI structure available */
#define EL2HLT 51      /* Level 2 halted */
#define EBADE 52      /* Invalid exchange */
#define EBADR 53      /* Invalid request descriptor */
#define EXFULL 54      /* Exchange full */
#define ENOANO 55      /* No anode */
#define EBADRQC 56      /* Invalid request code */
#define EBADSLT 57      /* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59      /* Bad font file format */
#define ENOSTR 60      /* Device not a stream */
#define ENODATA 61      /* No data available */
#define ETIME 62      /* Timer expired */
#define ENOSR 63      /* Out of streams resources */
#define ENONET 64      /* Machine is not on the network */
#define ENOPKG 65      /* Package not installed */
#define EREMOTE 66      /* Object is remote */
#define ENOLINK 67      /* Link has been severed */
#define EADV 68      /* Advertise error */
#define ESRMNT 69      /* Srmount error */
#define ECOMM 70      /* Communication error on send */

#define EPROTO 71      /* Protocol error */
#define EMULTIHOP 72      /* Multihop attempted */
#define EDOTDOT 73      /* RFS specific error */
#define EBADMSG 74      /* Not a data message */
#define EOVERFLOW 75      /* Value too large for defined data type */
#define ENOTUNIQ 76      /* Name not unique on network */
#define EBADFD 77      /* File descriptor in bad state */
#define EREMCHG 78      /* Remote address changed */
#define ELIBACC 79      /* Can not access a needed shared library */
#define ELIBBAD 80      /* Accessing a corrupted shared library */
#define ELIBSCN 81      /* .lib section in a.out corrupted */
#define ELIBMAX 82      /* Attempting to link in too many shared libraries */
#define ELIBEXEC 83      /* Cannot exec a shared library directly */
#define EILSEQ 84      /* Illegal byte sequence */
#define ERESTART 85      /* Interrupted system call should be restarted */
#define ESTRPIPE 86      /* Streams pipe error */
#define EUSERS 87      /* Too many users */
#define ENOTSOCK 88      /* Socket operation on non-socket */
#define EDESTADDRREQ 89      /* Destination address required */
#define EMSGSIZE 90      /* Message too long */
#define EPROTOTYPE 91      /* Protocol wrong type for socket */
#define ENOPROTOOPT 92      /* Protocol not available */
#define EPROTONOSUPPORT  93      /* Protocol not supported */
#define ESOCKTNOSUPPORT  94      /* Socket type not supported */
#define EOPNOTSUPP 95      /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96      /* Protocol family not supported */
#define EAFNOSUPPORT 97      /* Address family not supported by protocol */
#define EADDRINUSE 98      /* Address already in use */
#define EADDRNOTAVAIL 99      /* Cannot assign requested address */
#define ENETDOWN 100     /* Network is down */
#define ENETUNREACH 101     /* Network is unreachable */
#define ENETRESET 102     /* Network dropped connection because of reset */
#define ECONNABORTED 103     /* Software caused connection abort */
#define ECONNRESET 104     /* Connection reset by peer */
#define ENOBUFS 105     /* No buffer space available */
#define EISCONN 106     /* Transport endpoint is already connected */
#define ENOTCONN 107     /* Transport endpoint is not connected */
#define ESHUTDOWN 108     /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109     /* Too many references: cannot splice */
#define ETIMEDOUT 110     /* Connection timed out */
#define ECONNREFUSED 111     /* Connection refused */
#define EHOSTDOWN 112     /* Host is down */
#define EHOSTUNREACH 113     /* No route to host */
#define EALREADY 114     /* Operation already in progress */
#define EINPROGRESS 115     /* Operation now in progress */
#define ESTAL 116     /* Stale NFS file handle */
#define EUCLEAN 117     /* Structure needs cleaning */
#define ENOTNAM 118     /* Not a XENIX named type file */
#define ENAVAIL 119     /* No XENIX semaphores available */
#define EISNAM 120     /* Is a named type file */
#define EREMOTEIO 121     /* Remote I/O error */
#define EDQUOT 122     /* Quota exceeded */
#define ENOMEDIUM 123     /* No medium found */
#define EMEDIUMTYPE 124     /* Wrong medium type */
#define ECANCELED 125     /* Operation Canceled */
#define ENOKEY 126     /* Required key not available */
#define EKEYEXPIRED 127     /* Key has expired */
#define EKEYREVOKED 128     /* Key has been revoked */
#define EKEYREJECTED 129     /* Key was rejected by service */
/* for robust mutexes */
#define EOWNERDEAD 130     /* Owner died */
#define ENOTRECOVERABLE 131     /* State not recoverable */

2013年8月13日 星期二

「轉貼」ubuntu10.04熱鍵

ubuntu 10.04 快捷鍵

------
windows 鍵配合 
win + E  在桌面間選擇切換
win + W  在當前桌面的所有窗口間選擇切換
win + A  在所有桌面的所有窗口間選擇切換
win + N  當前窗口反色
win + S  下拉關機菜單
win + M  下拉通信菜單

------
ctrl + alt 鍵配合
ctrl + alt + ←  切換到左邊的桌面
ctrl + alt + →  切換到右邊的桌面
ctrl + alt + shift + ←  移動當前窗口到左邊的桌面
ctrl + alt + shift + →  移動當前窗口到右邊的桌面
ctrl + alt + D  顯示桌面/還原顯示
ctrl + alt + T  啟動終端
ctrl + alt + L  鎖屏/顯示登錄對話框
ctrl + alt + F1-F6  進入1-6命令行環境
ctrl + alt + F7  進入圖形界面環境
 
------
alt + tab 鍵配合
alt + Tab  在當前桌面的窗口間順序切換
alt + shift + Tab  在當前桌面的窗口間逆序切換
alt + ctrl + Tab  在所有桌面的窗口間順序切換
alt + ctrl + shift + Tab  在所有桌面的窗口間逆序切換
 
------
other
printscreen  抓圖-全屏
alt + printscreen  抓圖-當前窗口
alt + F10  最大化/取消最大化窗口
alt + F9  最小化窗口
alt + F1  下拉應用程序菜單
alt + F2  打開運行應用程序的窗口
 
------
終端快捷鍵
編輯:
複製:  ctrl + shift + c
粘貼:  ctrl + shift + v
 
窗口:
啟動終端:  ctrl + alt + t
新建窗口:  ctrl + shift + n
新建標籤:  ctrl + shift + t
切換到第i個標籤:  alt + i
關閉當前標籤:  ctrl + shift + w
關閉窗口:  ctrl + shift + q
 
頁面控制
放大:  ctrl + +  (對於筆記本默認沒有+,則使用ctrl + shift + +)
縮小:  ctrl + -
原始大小:  ctrl + 0
清理:  ctrl + L
全屏:  F11
 
配置快捷鍵:
編輯-> 鍵盤快捷鍵
 
------
gedit 快捷鍵
ctrl + N  新建標籤
ctrl + W  關閉當前標籤
ctrl + Q  關閉整個gedit
ctrl + I  跳轉到行
ctrl + D  刪除當前行或選中的多行
ctrl + F  查找
ctrl + H  替換
ctrl + K  全文高亮匹配查找
alt +上箭頭 向上移動當前行或選中的多行
alt +下箭頭 向下移動當前行或選中的多行
 
------
ubuntu 設置快捷鍵
* 全局快捷鍵
入口:
系統-> 首選項-> 鍵盤快捷鍵,
 
設置方法:
修改& 新增:
選中已有快捷鍵,然後輸入,即可
刪除:
選中已有快捷鍵,然後按Backspace 鍵,即僅用了該快捷鍵,
 
* 具體軟件快捷鍵
在具體軟件中設置,
 
* 衝突
如果全局快捷鍵和軟件快捷鍵有衝突,則應修改其中1個,以便使用,

2013年8月12日 星期一

[ubuntu] rar command

#安裝 rar package
sudo apt-get install rar

#壓縮檔案
rar a FileName.rar

#解壓縮檔案
rar e FileName.rar

[轉錄]Code::Block 兩三事 設定 快速鍵

說明:

1)以下需要設置的地方均在Settings->Editor...彈出的對話框中。

2)不少命令都可針對當前行或選中的代碼塊,下文簡稱當前行或選中塊。

==日常編輯==

• 按住Ctrl滾滾輪,代碼的字體會隨你心意變大變小,對保護視力特別有好處。
• 在編輯區按住右鍵可拖動代碼,省去拉(尤其是橫向)滾動條之麻煩;相關設置:Mouse Drag Scrolling。
• Ctrl+D可復製當前行或選中塊。
• Ctrl+Shift+C註釋掉當前行或選中塊,Ctrl+Shift+X則解除註釋。
• Tab縮進當前行或選中塊,Shift+Tab減少縮進。
• 可拖動選中塊使其移動到新位置,按住Ctrl則為復製到新位置。
• 按下Atl,再拖動鼠標,可以實現部分選擇(即隻選中一個區域內的字符,而不會包含它們所在行的其他字符)。
• 需要更大編輯空間時,F2和Shift+F2分別可以顯隱下方Logs & others欄和左方的Management欄。

==自動完成與縮寫==

1)優化代碼自動完成功能:在Code-completion and symbol browser中,
• 將Automatically launch when typed # letter中的4改成2,這樣打兩個字母就會有提示了。
• 將Keyword sets to additionally include中1到9都勾上(可在Syntax highlighting 的keywords...中設置,其中1是C++關鍵字,3是Doxygen關鍵字;我曾將wxWidgets的類名都加入7並設置相應的字體(粗黑 體),看代碼時特別爽)
• 將Delay for auto-kick-in when typing [.::->]拉到 200ms,這樣快點出來提示
• 選中Case-sensitive match,防止一些無關的東西幹擾,如果你想它幫你糾正大小寫,那就去掉勾
• 在Keyboard short-cuts中將Edit->Code complete的快捷鍵由Ctrl+Space改為Alt+/,因為前者與中文輸入法切換沖突,該快捷鍵為已經輸入的(不是正在輸入的)詞提供自動完成。

2)看Abbreviation一欄,裡面定義了許多縮寫(還可以自定義),隻要輸入這些縮寫,並按Ctrl+J,就可以自動完成常用的代碼框架,並將光標放在恰當的地方(自定義時用|表達)。常用的有:guard、class、switch等。

3) 如果你聲明了一個類,你可以在cpp文件中右擊,Insert->All class methods without implementation...來插入你還沒定義的方法的定義(省去不少打字的功夫哦),也可使用Insert->Class Method declaration/implementation...來插入一個方法的聲明或定義。

==導航相關==

• Ctrl+G 到達指定行,ALT+G 到達指定文件,Ctrl+Alt+G 到達指定函數(支持頭文件中的函數定義),F11 切換源文件與頭文件。
• Ctrl+PageUp 到達上一個函數,Ctrl+PageDown 到達下一個函數。
• Ctrl+B 添加書簽,Alt+PageUp和Alt+PageDown可以切換書簽。
• Ctrl+Shift+B可找到匹配的括號。
• 看長代碼時,可右擊,Folding->Fold All,然後慢慢展開來看,也可充分利用左方Management欄的Symbol瀏覽器。
• 在一個變量、函數或宏上右擊,三個以Find開頭的菜單項,分別可以為你轉到它的聲明、定義和找到所有出現的地方(按F2在下方Thread Search那裡查看)。
其他:
• General Settings中可以設置縮進、自動換行等細節。
• 讓Code::Blocks永遠記住你的Layout,尤其是debug的layout,善用debug工具欄。
• 備份C:\Documents and Settings\[你的用戶名]\Application Data\codeblocks\Default.conf,如遇重裝,將其放在codeblocks.exe所在目錄,就不會丟失你的配置;這樣也可以 打造出Code::Blocks的綠色版。



Ctrl+L 剪切選中行


F11 切換源文件與頭文件


F10 全屏


Ctrl+Shift+B 括號匹配

按下ATL,再拖動鼠標,可以實現部分選擇


Ctrl+B 添加書簽,ALT+PageUp和PageDown可以切換書簽。


Ctrl+G 到達指定行


ALT+G 到達指定文件


Ctrl+Alt+G 到達指定函數(支持頭文件中的函數定義)


Ctrl+PageUp 到達上一個函數


Ctrl+PageDown 到達下一個函數

2013年8月7日 星期三

轉貼 [C] printf 引數說明

函式原型:  int printf ( const char * format, ... ); 
引數說明: %[flags][width][.precision][length]specifier                %[旗標][寬度][.精度][長度修飾]資料型態

1. 資料型態 %[旗標][寬度][.精度][長度修飾]資料型態 ) 必填欄位 
(1.1) 字元/字串
   %c, %C : 字元,  char c;
       %s : 字元陣列, char buffer[MAX_PATH];
       %S : 字元陣列(Unicode), wchar buffer[MAX_PATH];
[註] %C / %S 並未被收在標準函式庫裡,屬 MSVC 特殊支援。
(1.2) 整數

    %d, %i : 10進制整數  , int x; [lemma] 

        %u : 10進制無號數, unsigned int x;
        %o : 8進制無號數,  unsigned int x;
     %x, %X : 16進制無號數, 小寫x輸出為"abcdef", 大寫 X 輸出為 "ABCDEF", 
              unsigned x;
%lld, %I64d : long long int, __int64 輸出型態 
             (註:vc6.0 下只有 __int64,沒有long long int)
%ull, %I64u : unsigned long long int  輸出型態
[lemma] %d : dec; %i : integer,於 scanf 時有部份差異 (%d 只接受10進位, %i 可接受指定進位,如 0x23, 045),但於 printf 時 %d, %i 並無顯著差異 (感謝 Jacob Lee 補充指導)

(1.3) 浮點數

   %e, %E : 浮點數使用科學符號表示之,指數將帶正負號, float x,doubley;
       %f : 單精度浮點數(預設輸出精度6位), float x; 
            (註 : 對 printf 而言, %f/%lf 可適用於 double / float)
      %lf : 倍精度浮點數(預設輸出精度6位), double x;
%llf, %LF : 雙倍精度浮點數(預設輸出精度6位), long double x;
   %g, %G : 由系統決定是否採科學符號表示。
(1.4) 特殊 原創:edisonx.pixnet.net
       %p : 變數位置。 ex: 
            int a=0, printf("%p", &a);  即 printf("%08x", &a);
       %n : 輸出至緩衝區之長度, ex:
            char str[]="test", int len, printf("%s%n", a, &len);
            輸出4bytes,len = 4
(1.5) C99新增 < 建議 k spec. 最清楚 >

(註 : C99 新增了一些資料型態在 inttypes.h / stdint.h 裡面,有興趣搜尋 n1256.pdf 下載下來 K 標準, in section 7.8 。當然 MSVC 不支援 C99 是眾所皆知的事。)
部份原則還是掌握了 %i, %u, %d, %x,另由於這部份在 printf 會顯得很亂,故直接做範例對應。掌握一原則:新的資料型態在 printf 前三個字母一定是 PRI
   "%" PRIdN , "%" PRIiN: 以十進位有號數顯示 intN_t 系列之數值。ex : 
         int8_t i8  = 8  ; <----> printf( "i8 = %" PRId8  " \n", i8);
         int8_t i16 = 16 ; <----> printf( "i16= %" PRIi16 " \n", i16);
         int8_t i32 = 32 ; <----> printf( "i32= %" PRId32 " \n", i32); 
         int8_t i64 = 64 ; <----> printf( "i64= %" PRIi64 " \n", i64); 

另上述將 PRIdN / PRIiN ,換成 PRIoN / PRIuN / PRIxN / PRIXN ,便可轉對 uintN_t 資料型態做輸出,分別為 ( 8 進位、10進位、16進位小寫、16進位大寫),有空自己試試,不贅述。 

   "%" PRIdLEASTN , "%" PRIiLEASTN: 以十進位有號數顯示 int_leastN_t 系列之數值。ex : 
         int_least8_t  i8  = 8  ; <----> printf( "i8 = %" PRIdLEAST8  " \n", i8);
         int_least16_t i16 = 16 ; <----> printf( "i16= %" PRIiLEAST16 " \n", i16);
         int_least32_t i32 = 32 ; <----> printf( "i32= %" PRIdLEAST32 " \n", i32); 
         int_least64_t i64 = 64 ; <----> printf( "i64= %" PRIiLEAST64 " \n", i64); 

 另上述將 PRIdLEAST/ PRIiLEAST, 換成 PRIoLEASTN/ PRIuLEASTN/ PRIxLEASTN/ PRIXLEASTN, 便可轉對 uint_leastN_t 資料型態做輸出,分別為 ( 8 進位、10進位、16進位小寫、16進位大寫),有空自己試試,不贅述。 

    "%" PRIdFASTN , "%" PRIiFASTN: 以十進位有號數顯示 int_fastN_t 系列之數值。ex : 
         int_fast8_t  i8  = 8  ; <----> printf( "i8 = %" PRIdFAST8  " \n", i8);
         int_fast16_t i16 = 16 ; <----> printf( "i16= %" PRIiFAST16 " \n", i16);
         int_fast32_t i32 = 32 ; <----> printf( "i32= %" PRIdFAST32 " \n", i32); 
         int_fast64_t i64 = 64 ; <----> printf( "i64= %" PRIiFAST64 " \n", i64); 

 另上述將 PRIdFAST/ PRIiFAST,換成 PRIoFASTN/ PRIuFASTN/ PRIxFASTN/ PRIXFASTN,便可轉對 uint_leastN_t 資料型態做輸出,分別為 ( 8 進位、10進位、16進位小寫、16進位大寫),有空自己試試,不贅述。 

   "%" PRIdMAX , "%" PRIdPTR : 分別顯示整數最大值與指標型態。

[註 : 特別注意 inttypes.h 裡面之型態,printf 引數和 scanf 引數差很多,一樣掌握一原則,新的資料型態在 scanf 前三個字母一定是 SCN, 如 intN_t  系列,scanf 用的是 "%" SCNdN / "%" SCNi; uintN_t 系列,scanf 用的是 "%" SCNoN / "%" SCNu/ "%" SCNxN / "%" SCNX; int_fastN_t / int_leastN_t 等系列資料型態便不贅述。 )

2. 寬度 %[旗標][寬度][.精度][長度修飾]資料型態 ) 選填欄位net
      %m : 指定輸出之寬度。ex:
           int a=2, b=10;
           printf("%d%5d", a, b);
           輸出為   "2   10"  (2與10之間有3個空白,因10為5個文字寬度)。
      %* : 以引數方式代入指定輸出之寬度。ex:
           int a=2, width=10;
           printf("%*d",width, a);
           輸出為   "         2"  (10個文字寬度)。
3. 長度修飾 ( %[旗標][寬度][.精度][長度修飾]資料型態 ) 選填欄位

      %h : 將數字視為 short int (%hd) 或 unsigned int (%hu), 
           此修飾只對整數型態之 %hi, %hd, %ho, %hu, %hx, %hX 有效。
           且針對 char 可用 %hhd,unsigned char 可用 %hhu。
     (註 : MSVC 認得 %hd / %hu / %hhd / %hhu , 但在 gcc 下會發出認不得的警告 )
      %l : 將數字視為 long  int (%ld) 或 unsigned long int (%lu), 
           此修飾只對整數型態之 %li, %ld, %lo, %lu, %lx, %lX 有效。
      %L : 此修飾只對浮點數型態之 long double 有效, 可用於修飾
           %Le, %LE, %Lf, %Lg, %LG。
4. 精度 ( %[旗標][寬度][.精度][長度修飾]資料型態 ) 選填欄位 
     %.n : 欲輸出小數點後幾位數,即顯示之精度,此修飾只對浮點數資料型態有效(f,F,e,E,g),
           若使用其它整數型態 (i, d, o, u, x, X) 則將 n 視為 0, 即不輸出小數位數。ex:
           double a=2.1234, printf("%.2lf", a);
           輸出則為  "2.12" 。
     %.* : 和 %.n 相似,但其 n 值可用變數引入。ex:
           double a=1.3456, int preci=2, printf("%.*",preci, a);
           輸出則為  "1.35" 。
     %m.n: 這是寬度和精度合用之方法, 代表輸出會有小數點後 n 位,
           且整個輸出文字寬 m 個字(包含小數點、正負號及數字)。ex:
           double c = -102.34567, printf("%10.3lf", c);
           結果會輸出  "  -102.346" ,前面將會保留二個空白,使得整體寬度為 10 。
     %*.*: 和上一說明一樣, 但寬度與精度可用引數決定。ex:
           double c = -102.34567, int m=10, int n=3;
           printf("%*.*lf", m, n, c);
           結果會輸出  "  -102.346" ,前面將會保留二個空白,使得整體寬度為 10 。
5. 旗標 ( %[旗標][寬度][.精度][長度修飾]資料型態 ) 選填欄位 
       %- : 原本輸出預設為向右對齊,使用後輸出向左對齊, 需與[寬度]配合使用。ex:
            char buf[] = "Test";
            printf("%-10s");
            輸出結果為 "Test      ", Test 後面將保留6個空白。             
       %+ : 需為數值型之資料型態,強制輸出正負號,可與 '-' 旗標合用。 ex:
            double a = 3.4567:
            printf("%-+8.2lf", a); 
            // '-'使輸出靠左對齊, '+'強調輸出正負號, 整體寬度為8, 小數點顯示2位。
            輸出結果為 "+3.46   "
       %0 : 若輸出之左半部為空白處, 則進行補0, (所以這不能和 '-' 合用) ex:
            unsigned int x = 122;
            printf("%05u", x); 
            // 寬度為5, 前半空白補零
            輸出結果為 "00122"
       %# : 對進制加上前綴符號, 只對 %o, %x 有用, 
            %#o為8進制,前綴符號為 0, 
            %#x為16進制,前綴符號為 0x, %#X前綴符號則為 0X。ex:
            unsigned int a = 15;
            printf("%u %#o %#X", a, a, a);
            輸出結果為 "15 017 0XF" 

   %(空白): 若數字為正號, 則會在該數字前面加上一空白,(故不可與 '+' 合用)。 ex:
            int a=10;
            printf("% -5d"); // 寬度5, 向左對齊, 保留正號位置
            輸出結果為 " 10  "

2013年7月16日 星期二

優秀程式設計師必備的一些素質

網上看到的文章,分享一下~~
作爲一個合格而優秀的程式設計師,應該具有哪些素質?其實才工作半年的我,好像遠遠不够資格來談論這個話題,不過這半年的成長讓我獲益匪淺,在程式設計師這個話題上也可以多多少少說出一點有價值的東西來。
一、對開發工作要有必要的興趣
興趣是最好的老師,對某個事物有了一定的興趣,才會潜下心來學習、研究它,工作同樣如此。如果對程式設計師的工作完全沒有興趣,甚至是抱著厭惡的態度,那麽其工作結果和能力就可想而知了。在這裏說興趣,幷不要求你達到對編程有著狂熱的愛好這種程度,只需要你還算喜歡這份工作即可,哪怕抱著平常心來面對也好。
二、要善于學習和總結
都說程式設計師是一個吃青春飯的職業,雖然這話說的略顯絕對,但也有一定的道理。IT領域的技術更新換代太快了,一門新的語言興起幷不需要太久的時間,只有不斷的接觸幷學習新東西,才能不被淘汰掉。所謂“活到老,學到老”,這話用在程式設計師身上可能是最適合不過的了。
而在學習的同時,也要善于進行總結。每次完成了一項工作,都對這次的工作進行一下總結,比如用了什麽技術、如何進行的項目設計、如何考慮的用戶體驗等,而在工作中出現的問題也應該牢牢記住,從自己的不足中吸取教訓,這樣才能使自己成長起來。
三、要養成良好的習慣
首先,要有寫文檔的習慣,不要覺得程式設計師的工作只是寫程式碼,這樣的程式設計師一輩子也就是個“碼農”了,絕對沒有前途的。在正規的軟件公司中,文檔的地位很高,開發流程裏面通常也體現出了各個環節的文檔的位置。沒有文檔的軟件是很難長久的存活下去的,因爲在測試、複用、升級等方面都會遇到越來越大的阻力。越是高級的程式設計師,就越應該重視文檔。
其次,要養成良好的編碼習慣。變量如何命名?函數(方法)如何命名?程序中的注釋怎麽寫?程序的縮進格式怎樣確定?好一點的公司都會有這方面的文檔,但是總有程式設計師從來都不看這些文檔,他們認爲最牛的程式設計師寫出來的程序應該除了自己沒有人能看懂,然後他們真的就這樣做了——結果就是別人看不懂,沒法合作,到最後連他們自己都看不懂,這種人連作爲一個程式設計師的基本素質都不具備。寫出規範化、標準化的程序程式碼,是一個合格程式設計師最基本的素質。
最後要提一下的是測試習慣。雖然正規的軟件公司都有專門的測試部門,但是開發部門也不能就此降低自我要求。軟件所含問題發現的越早,付出的成本就越低,如果開發人員在開發早期就能發現一些問題幷解决,就可以節省大量的人力和物力。同時,程式設計師應該對自己開發的程序進行功能性測試,你總要保證自己開發的軟件能正常使用吧?如果連這點都做不到,那你這程序寫的就沒用了。而且要盡可能的模擬用戶實際使用的一些狀况,要想到一些特殊的异常狀况。雖然在實際工作中開發人員很難做到全方位的測試,但一定要清楚這項工作的重要性。
四、要能正確理解用戶需求
現在什麽都講究個用戶體驗,而這對軟件來說簡直就是賴以生存的根本。一個軟件的用戶體驗如何,在極大的程度上能决定這款軟件能否成功。通常在開發工作開始前,項目組會對該項目的用戶需求進行分析和討論,正確的理解了用戶需求,再劃分合理的模塊,甚至考慮到一些潜在的威脅,這都是一個優秀的程式設計師所具有的素質。做到這一點很不容易,像我這樣的程式設計師,目前只能停留在口頭上,實際工作中我想的都非常不全面。
五、要注重程序的複用性和模塊化
是不是一直覺得做程式設計師太累了?是的,程式設計師這份工作確實壓力比較大,但是有些程式設計師的工作壓力相當一部分是自己給自己添加的,他們總是在做一些重複的工作,而從來不會考慮複用性和模塊化的思想。程式設計師在完成某個功能模塊的時候,不應該把思維局限在這次工作中,而是應該想想,能否把這部分程式碼脫離出本次工作,能否將其設計成其他系統也能調用的功能模塊?如果每個人都能有這樣的思維,日積月累下來,大家的重複性工作就會大大减少,也就有更多的精力來進行新功能的開發與創新。
六、擁有團隊協作的精神
雖然我把這一點放在最後,但是它的重要性我想不需要太强調了吧。現在的軟件功能通常很複雜,而且還要涉及到良好的UI(用戶界面),甚至要考慮到整個系統的協調,一個人是根本不可能完成這種工作的,所以團隊協作是必要也是必須的。在一個項目團隊中,如何根據每個人所擅長的領域來分配工作,如何協調人力資源等,都是非常重要的。而在工作中遇到了問題,團隊應該立刻想辦法互相幫助來解决。
關于程式設計師必備的專業素質,暫時我就只想到這麽多。雖然只有六點,但是能做到的那就真的是很優秀的程式設計師了,相信這樣的幷不多見。這些素質的養成需要一個時間,想要一蹴而就是不現實的,而是應該在日常工作中先培養起自己的意識,然後逐漸的養成這些素質。祝每個程式設計師,都能擺脫“碼農”的狀態,成爲一個優秀的程式設計師。