歡迎您光臨本站 註冊首頁

UNIX 簡介

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0

登錄工作站
==========
..透過 PC 登錄工作站
===================
執行格式:telnet hostname     (在 dos 下執行)
         telnet ip-address
Example:
         telnet doc           telnet 140.122.77.120

目前繫上可用的工作站如下:
sun1 sun2 sun6 sun7 sun8 sun9 sun10 sun11 sun12 sun13 snow pacific atlantic
indian graph1 doc happy grumpy sneezy bashfule dopey ice
注: 可利用指令 arp hostname 或 arp domain_name 查詢 ip_address

..登錄步驟
=========
login    : _______  => 輸入 username
password : _______  => 輸入密碼

..登出步驟
=========
       % logout
   或  % exit
   或  %

更改帳號密碼
============
% yppasswd      => 執行後將會出現下列訊息
Changing NIS password for user on ice.
Old password: ______       => 輸入舊密碼
New password: ______       => 輸入新密碼(最好6-8字,英文字母與數字混合)
Retype new password: ______ => 再輸入一次密碼

線上指令說明
============
執行格式: man command-name
Example:  % man ls

進入遠端電腦系統
================
執行格式:rlogin hostname [-1 username]
Example:
%rlogin doc
       remote login 進入工作站 doc 中。
%rlogin doc -l user
       使用 user 帳號進入工作站 doc 中。

執行格式:telnet hostname 或 telnet IP address
Example:
%telnet doc    or %telnet 140.109.20.251

檔案或目錄處理
==================
.列出檔案或目錄下之檔案名稱
 執行格式: ls [-atFlgR] [name]  ( name 可為檔名或目錄名稱。)

Example :
ls      列出目前目錄下之檔名。
ls -a   列出包含以.起始的隱藏檔所有檔名。
ls -t    依照檔案最後修改時間之順序,依序列出檔名。
ls -F   列出目前目錄下之檔名及其類型。"/" 結尾表示為目錄名稱,
       "*" 結尾表示為執行檔,"@" 結尾表示為 symblic link。
ls -l   列出目錄下所有檔案之許可權、擁有者、檔案大小、修改時間及名稱。
ls -lg   同上,並顯示出檔案之擁有者群組名稱。
ls -R   顯示出目錄下,以及其所有子目錄之檔名。( recursive listing )

目錄之縮寫:
===========
~       使用者 login 時的 working directory ( 起始目錄 )
~username   指定某位 user 的 working directory ( 起始目錄 )
..            目前的工作目錄 ( current working directory )
..           目前目錄的上一層目錄 ( parent of working directory)

改變工作目錄位置
================
執行格式:cd  [name]   :name 可為目錄名稱、路徑或目錄縮寫。
Example:
cd         改變目錄位置,至使用者 login 時的 working directory (起始目錄)。
cd  dir1   改變目錄位置,至 dir1 之目錄位置下。
cd ~user   改變目錄位置,至使用者的 working directory (起始目錄)。
cd  ..     改變目錄位置,至目前目錄的上層( 即 parent of working directory)
cd  ../user     改變目錄位置,至相對路徑 user 之目錄位置下。
cd  /../..      改變目錄位置,至絕對路徑( Full path ) 之目錄位置下。

複製檔案
========
執行格式: cp [-r] source destination

Example:
cp file1 file2  將檔案 file1 複製成 file2
cp file1 dir1   將檔案 file1 複製到目錄 dir1 下,檔名仍為 file1。
cp /tmp/file1 . 將目錄 /tmp 下的檔案 file1 複製到現行目錄下,檔名仍為 file1。
cp /tmp/file1 file2 將目錄 /tmp 下的檔案 file1 複製到現行目錄下,檔名為 file2□
cp -r dir1 dir2   (recursive copy) 複製整個目錄。
               若目錄 dir2 不存在,則將目錄 dir1,及其所有檔案和子目錄,複製
               到目錄 dir2 下,新目錄名稱為 dir1。若目錄 dir2 不存在,則將
               dir1,及其所有檔案和子目錄,複製為目錄 dir2。

搬移或更改檔案、目錄名稱
========================
執行格式: mv source destination
Example:
mv file1 file2  將檔案 file1,更改檔名為 file2。
mv file1 dir1   將檔案 file1,移到目錄 dir1 下,檔名仍為 file1。
mv dir1  dir2   若目錄 dir2 不存在,則將目錄 dir1,及其所有檔案和子目錄,移
               到目錄 dir2 下,新目錄名稱為 dir1。若目錄 dir2 不存在,則將
               dir1,及其所有檔案和子目錄,更改為目錄 dir2。

建立新目錄
==========
執行格式: mkdir directory-name
Exmaple :
mkdir dir1      建立一新目錄 dir1。

刪除目錄
========
執行格式: rmdir directory-name 或 rm directory-name
Example :
rmdir dir1      刪除目錄 dir1,但 dir1 下必須沒有檔案存在,否則無法刪除。
rm -r dir1      刪除目錄 dir1,及其下所有檔案及子目錄。

刪除檔案
========
執行格式: rm  filename  (filename 可為檔名,或檔名縮寫符號。)
Example :
rm  file1        刪除檔名為 file1 之檔案。
rm  file?        刪除檔名中有五個字元,前四個字元為file 之所有檔案。
rm  f*           刪除檔名中,以 f 為字首之所有檔案。


檔名的縮寫符號
==============
?   代表檔案名稱中之單一字元。
*   代表檔案名稱中之一字串。

列出目前所在之目錄位置
======================
執行格式: pwd

查看檔案內容
============
執行格式: cat filename
Example :
cat file1       以連續顯示方式,查看檔名 file1 之內容。

執行格式: more filename 或 cat filename | more
Example :
more file1     以分頁方式,查看檔名 file1 之內容。
cat file1 | more  同上。

查看目錄所佔磁碟容量
====================
執行格式: du [-s] directory
Example :
du dir1     顯示目錄 dir1 的總容量及其次目錄的容量(以 k byte 為容量)。
du -s dir1  顯示目錄 dir1 的總容量。

查看自己的 disk quota 使用狀況
==============================
disk quota : 工作站磁碟空間的使用限額。
執行格式: quota -v
Example :
quota -v   將會顯示下列訊息
Filesystem     usage  quota  limit    timeleft  files  quota  limit    timelef.
/home/ice/u01
               9344   8192  12288    1.9 days    160      0      0
欄位解說:
usage : 目前的磁碟用量。
quota : 你的磁碟使用額度。當你的 usage 超過 quota 時,雖然可以繼續使用,但是
       必須七天之內降到 quota 以下,否則即使用量沒有超 limit(最高限額),也無
       法再寫入或複製任何檔案。
limit : 最高使用額度。當你的 usage 達到 limit 時,無法再寫入或複製任何檔案。

檔案傳輸
========
.拷貝檔案或目錄至遠端工作站
============================
 執行格式: rcp [-r] source hostnome:destination
( source 可為檔名、目錄名或路徑,hostnome 為工作站站名,destination 為路徑名稱.
Example :
rcp file1 doc:/home/user
       將檔案 file1,拷貝到工作站 doc 路徑 /home/user 之目錄下。
rcp -r dir1 doc:/home/user
       將目錄 dir1,拷貝到工作站 doc 路徑/home/user 之目錄下。

.自遠端工作站,拷貝檔案或目錄
===============================
執行格式: rcp [-r] hostname:source destination
( hostname 為工作站名,source 為路徑名,destination 可為檔名、目錄名或路徑 )。
Example  :
rcp doc:/home/user/file1 file2
將工作站 doc 中,位於 /home/user 目錄下之目錄 dir1,拷貝到目前工作站之目錄下,
目錄名稱仍為 dir1。
rcp -r doc:/home/user/dir1 .
將工作站 iis1 中,位於 /home/user 目錄下之目錄 dir1,拷貝到目前工作站之目錄下□
目錄名稱仍為 dir1。

.本地工作站與遠端工作站之間檔案傳輸
====================================
( 必須擁有遠端工作站之帳號及密碼,才可進行傳輸工作 )
執行格式: ftp hostname or ftp ip_address
Example :
ftp doc        與遠端工作站 doc ,進行檔案傳輸
Name (doc:user-name)    : 輸入帳號
Password (doc:user-name): 輸入密碼

ftp> help        列出 ftp 檔案傳輸,可使用之任何命令。
ftp> !ls         列出本地工作站,目前目錄下之所有檔名。
ftp> !pwd        列出本地工作站,目前所在之工作目錄位置。
ftp> ls          列出遠端工作站目前目錄下之所有檔名。
ftp> dir         列出遠端工作站目前目錄下之所有檔名(略同於 UNIX 的 ls -l 指令).
ftp> dir . |more 同上,但每頁會暫停(可能不適用 Unix 以外的 ftp)。
ftp> pwd         列出遠端工作站目前所在之目錄位置。
ftp> cd  dir1    更改遠端工作站之工作目錄位置至 dir1 之下。
ftp> get file1   將遠端工作站之檔案 file1 ,拷貝到本地工作站中。
ftp> put file2   將本地工作站之檔案 file2 ,拷貝到遠端工作站中。
ftp> mget *.c    將遠端工作站中,副檔名為 c 之所有檔案,拷貝到本地工作站中。
ftp> mput *.txt  將本地工作站中,副檔名為 txt 之所有檔案,拷貝遠端工作站中。
ftp> prompt      切換交談式指令(使用 mput/mget 時不用每個檔案皆詢問yes/no)。
ftp> quit        結束 ftp 工作。
ftp> bye         結束 ftp 工作。
注: 從PC與工作站間的檔案傳輸也可透過在 PC端的 FTP指令進行檔案傳輸,指令用法與
   上所述大致相同。

檔案模式之設定
==============
.改變檔案或目錄之讀、寫、執行之允許權
======================================
執行格式:chmod [-R] mode name
( name 可為檔名或目錄名;mode可為 3 個 8 位元之數字,或利用ls -l 命令,列出
 檔案或目錄之讀、寫、執行允許權之文字縮寫。)
mode :  rwx   rwx    rwx   r:read   w:write   x:execute
         user  group  other
縮寫 :  (u)    (g)     (o)
Example :
%chmod  755  dir1 
將目錄dir1,設定成任何使用者,皆有讀取及執行之權利,但只有擁有者可做修改。
%chmod  700  file1
將檔案file1,設定只有擁有者可以讀、寫和執行。
%chmod  o+x  file2
將檔案file2,增加擁有者可以執行之權利。
%chmod  g+x  file3
將檔案file3,增加群組使用者可執行之權利。
%chmod  o-r  file4
將檔案file4,除去其它使用者可讀取之權利。

.改變檔案或目錄之擁有權
========================
執行格式:chown [-R] username  name     ( name 可為檔名或目錄名。)
Example :
%chown user file1
將檔案 file1 之擁有權,改為使用者 user 所有。
%chown -R user dir1
將目錄 dir1,及其下所有檔案和子目錄之擁有權,改為使用者 user 所有。

檢查自己所屬之群組名稱
======================
執行格式:groups

.改變檔案或目錄之群組擁有權
============================
執行格式:chgrp [-R] groupname name   ( name 可為檔名或目錄名 )
Example :
%chgrp vlsi file1
將檔案 file1 之群組擁有權,改為 vlsi 群組。
%chgrp -R image dir1
將目錄dir1,及其下所有檔案和子目錄,改為 image 群組。

.改變檔案或目錄之最後修改時間
==============================
執行格式:touch name     ( name 可為檔案或目錄名稱。)

檔案之連結
==========
同一檔案,可擁有一個以上之名稱,可將檔案做數個連結。
執行格式:ln oldname newname  ( Hard link )
Example :
ln  file1  file2    將名稱 file2,連結至檔案 file1。

執行格式:ln -s  oldname  newname  ( Symblick link )
Example :
ln  -s  file3  file4 將名稱 file4,連結至檔案file3。

檔案之字串找尋
==============
執行格式:grep string file
Example :
grep abc file1
尋找檔案file1中,列出字串 abc 所在之整行文字內容。

找尋檔案或命令之路徑
====================
執行格式:whereis command  ( 顯示命令之路徑。)
執行格式:which command    ( 顯示命令之路徑,及使用者所定義之別名。)
執行格式:whatis command   ( 顯示命令功能之摘要。)
執行格式:find  search-path  -name  filename  -print
                          ( 搜尋指定路徑下,某檔案之路徑 。)
Example :
       %find  /  -name  file1  -print ( 自根目錄下,尋找檔名為 file1 之路徑。.

比較檔案或目錄之內容
====================
執行格式:diff [-r] name1 name2 ( name1 name2 可同時為檔名,或目錄名稱。)
Example :
%diff file1 file2
       比較檔案 file1 與 file2 內,各行之不同處。
%diff -r dir1 dir2
       比較目錄 dir1 與 dir2 內,各檔案之不同處。

檔案列印輸出
============
使用者可用 .login 檔中之 setenv PRINTER,來設定列印資料時的列表機名。
printername :sp1 或 sp2  (1005 教室)
Example :
%setenv PRINTER sp2    設定自 sp2 列印資料。

一般檔案之列印
==============
執行格式:lpr [-Pprinter-name] filename
%lpr file1  或  lpr -Psp2 file1
       自 sp2,列印檔案 file1。

執行格式:enscript [-Pprinter-name] filename
%enscript file3  或  enscript -Psp1 file3
       自 sp1 列印檔案 file3。

.troff 檔案之列印
==================
執行格式:ptroff [-Pprinter-name] [-man][-ms] filename
%ptroff -man /usr/local/man/man1/ptroff.1
       以 troff 格式,自 Apple laser writer 列印 ptroff 命令之使用說明。

%ptroff -Psp2 -man /usr/man/man1/lpr1
       以 troff 格式,自 sp2 列印 lpr 命令之使用說明。


列表機控制命令
==============
.檢查列表機狀態,及列印工作順序編號和使用者名稱
================================================
執行格式:lpq [-Pprinter -name]
%lpq 或 lpq -Psp1
       檢查 sp1 列表機之狀態。

.刪除列表機內之列印工作        ( 使用者僅可刪除自己的列印工作 )
========================
執行格式:lprm [-Pprinter -name] username 或 job number
%lprm  user     或  lprm -Psp1 user
刪除 sp1 中,使用者 user 的列印工作,此時使用者名稱必須為 user。
%lprm -Psp2 456
刪除 sp2 編號為 456 之列印工作。

Job 之控制
===========
UNIX O.S.,可於 foregrourd 及 background 同時處理多個 process。
一般使用者執行命令時,皆是在 foreground 交談式地執行 process,亦可將 process
置於 background 中,以非交談式來執行 process。

.查看系統之 process
====================
執行格式:ps [-aux]
Example:
%ps 或 ps -x    (查看系統中,屬於自己的 process。)
%ps -au        (查看系統中,所有使用者的 process。)
%ps -aux       (查看系統中,包含系統內部,及所有使用者的 process。)

.結束或終止 process
====================
執行格式:kill [-9] PID  ( PID 為利用 ps 命令所查出之 process ID。)
Example:
%kill 456  或  kill -9 456
       終止 process ID 為 456 之 process。

.在 background 執行 process 的方式
===================================
執行格式:command &  (於 command 後面加入一 "&" 符號即可。)
Example:
%cc file1.c &
       將編譯 file1.c 檔案之工作,置於 background 執行。

執行格式:按下 "Control Z" 鍵,暫停正在執行的 process。鍵入 "bg" 命令,
         命令,將所暫停的 process,置入 background 中繼續執行。
Example:
%cc file2.c
^Z
Stopped
%bg


.查看正在 background 中執行的 process
======================================
執行格式:jobs

.結束或終止在 background 中的 process
======================================
執行格式:kill  %n
       (n 為利用 "jobs" 命令,所查看出的 background job 編號)
Example:
%kill  %       終止在 background 中的第一個 job。
%kill  %2      終止在 background 中的第二個 job。

shell varialbe
==============
.查看 shell variable 之設定值
==============================
執行格式:set       查看所有 shell variable 之設定值。
%set

執行格式:echo  $variable-name  顯示指定的 shell variable 之設定值。
%echo $PRINTER
sp1

.設定 shell variable
=====================
執行格式:set var = value
Example:
%set term=vt100
       設定 shell variable "term" 為 VT100 終端機之型式。

.刪除 shell variable
=====================
執行格式:unset var
Example:
%unset PRINTER
       刪除 shell variable "PRINTER" 之設定值。

environment variable
=====================
.查看 environment variable 之設定值
====================================
執行格式:setenv  查看所有 environment variable 之設定值。
Example:  %setenv

執行格式:echo $NAME  顯示指定的 environment variable "NAME" 之設定值。
Example:
%echo $PRINTER
       顯示 environment variable "PRINTER" 列表機名稱之設定值。

.設定 environment variable
===========================
執行格式:setenv NAME word
Example:
%setenv PRINTER sp1
       設定 environment variable "PRINTER" 列表機名稱為 sp1。

.刪除 environment variable
===========================
執行格式:unsetenv NAME
Example:
%unsetenv PRINTER
       刪除 environment variable "PRINTER" 列表機名稱之設定值。

alias
=====
.查看所定義的命令之 alias
==========================
執行格式: alias        查看自己目前定義之所有命令,及所對應之 alias 名稱。
執行格式: alias name   查看指定之 alias 名稱所定義之命令。
Example:
%alias dir      (查看別名 dir 所定義之命令)
ls -atl

.定義命令之 alias
==================
執行格式: alias   name   'command line'
Example:
% alias dir 'ls -l'
       將命令 "ls - l" 定義別名為 dir。

.刪除所定義之 alias
====================
執行格式: unalias name
Example:
%unalias dir            (刪除別名為 dir 之定義。)
%unalias *              (刪除所有別名之設定。)


history
=======
.設定命令記錄表之長度
======================
執行格式: set history = n
Example:
%set history = 40
       設定命令記錄表之長度為 40 (可記載執行過之前面 40 個命令)。

.查看命令記錄表之內容
======================
執行格式: history

.使用命令記錄表
================
執行格式: !!
Example: %!!             (重覆執行前一個命令)
執行格式: !n            ( n 為命令記錄表之命令編號。)
Example: %!5             ( 執行命令記錄表中第五個命令。)
執行格式: !string       ( 重覆前面執行過以 string 為起始字元之命令。)
Example: %!cat           ( 重覆前面執行過,以 cat 為起始字元之命令。)

.顯示前一個命令之內容
======================
執行格式: !!:p

.更改前一命令之內容並執行之
============================
執行格式: ^oldstring ^newstring
       將前一命令中 oldstring 的部份,改成 newstring,並執行之。
Example:
%find . -name file1.c -print
^file1.c^core
%find . -name core -print

註:檔案 core 為執行程式或命令發生錯誤時,系統所產生的檔案。作為偵錯(debug)之□
   ,因其所佔空間極大,通常將之刪除。

資料之壓縮
==========
為了避免不常用的檔案或資料,佔用太大的磁碟空間,請使用者將之壓縮。欲使用壓縮過
的檔案或資料前,將之反壓縮,即可還原成原來之資料型式。凡是經過壓縮處理之檔案,
會在檔名後面附加 " .Z " 之字元,表示此為一壓縮檔案。

.壓縮資料
==========
執行格式:compress filename              壓縮檔案
執行格式:compressdir directory-name     壓縮目錄

.解壓縮還原資料
================
執行格式:uncompress filename        反壓縮檔案
執行格式:uncompressdir directory-name   反壓縮目錄

pipe-line 之使用
================
執行格式:command1 | command2
       將 command1 執行結果,送到 command2 做為 command2 的輸入。
Example:
%ls -Rl | more
       以分頁方式,列出目前目錄下所有檔案,及子目錄之名稱。
%cat file1 | more
       以分頁方式,列出檔案 file1 之內容。

I/O control
===========
.標準輸入之控制
================
執行格式:command-line < file
       將 file 做為 command-line 之輸入。
Example:
%mail -s "mail test" user@iis.sinica.edu.tw < file1
       將檔案 file1 當做信件之內容,Subject 名稱為 mail test,送給收信人。

.標準輸出之控制
================
執行格式:command > filename
        將 command 之執行結果,送至指定的 filename 中。
Example: %ls -l > list
        將執行 "ls -l" 命令之結果,寫入檔案 list 中。
執行格式:command >! filename
        同上,若 filename 之檔案已經存在,則強迫 overwrite。
Example: %ls -lg >! list
        將執行 "ls - lg" 命令之結果,強迫寫入檔案 list 中。
執行格式:command >& filename
        將 command 執行時,螢幕上所產生的任何訊息,寫入指定的 filename 中。
Example: %cc file1.c >& error
        將編譯 file1.c 檔案時,所產生之任何訊息,寫入檔案 error 中。
執行格式:command >> filename
        將 command 執行結果,附加(append)到指定的 filename 中。
Example: %ls - lag >> list
        將執行 "ls - lag" 命令之結果,附加(append)到檔案 list 中。
執行格式:command >>& filename
        將 command 執行時,螢幕上所產生的任何訊息,附加於指定的 filename中。
Example: %cc file2.c >>& error
        將編譯 file2.c 檔案時,螢幕所產生之任何訊息,附加於檔案 error 中。

查看系統中的使用者:
===================
執行格式: who  或  finger
執行格式: w
執行格式: finger username or finger username@domainname

改變自己的 username 進入其他使用者的帳號,擁有其使用權利。
=========================================================
執行格式: su username
Example:
%su user        進入使用者 user 之帳號
passwrod:       輸入使用者 user 之密碼

查看 username:
==============
執行格式: who am i   查看 login 時,自己的 username。
執行格式: whoami     查看目前的 username。若已執行過 "su"命令(switch user),
                     則顯示出此 user 之 username。

查看目前繫上所有工作站的使用者:
===============================
執行格式: rusers
          => 結束

與某工作站上的使用者交談:
=========================
執行格式: talk username@hostname  或 talk username@ip_address
Example:
1. 可先利用 rusers 指令查看網路上的使用者
2. 假設自己的帳號是 u84987 ,在工作站 indian 上使用,現在想要與 doc 上的
  u84123 交談。
%talk u84123@doc ==> 此時螢幕上將會出現等待畫面
                    在對方(u84123)螢幕上將會出現下列訊息
             Message from Talk_Daemon@Local_host_name at xx:xx
             talk: connection requested by u84987@indian
             talk: respond with: talk u84987@indian

此時對方(u84123) 必須執行 talk u84987@indian 即可互相交談。
最後可按結束。

檢查遠端電腦系統是否正常
========================
執行格式:ping hostname 或 ping IP-Address
Example:
%ping doc

電子郵件(E-mail)的使用簡介
==========================
本系之 E-mail address 為 ice.ntnu.edu.tw

..將檔案當做 E-mail 的內容送出
=============================
執行格式:mail -s "Subject-string" username@address < filename
%mail -s "program" user < file.c
       將 file.c 當做 mail 的內容,送至 user, subject name 為 program。

..傳送 E-mail 給本系使用者
========================
執行格式:mail username
%mail user

..傳送 E-mail 至 外地
====================
執行格式:   mail username@receiver-address
Example
%mail paul@gate.sinica.edu.tw
Subject : mail test
       :
       :
鍵入信文內容
       :
       :
按下 "Control D" 鍵或 " . " 鍵結束信文。

連按兩次 "Control C" 鍵,則中斷工作,不送此信件。

Cc:
       ( Carbon copy : 複製一份信文,給其他的收信人 )

..檢查所傳送之 E-mail 是否送出,或滯留於本所之郵件伺服站中
=========================================================
執行格式:/usr/lib/sendmail  -bp
       ( 若螢幕顯示為 "Mail queue is empty" 之訊息,表示 mail 已送出。
         若為其它錯誤訊息,表示 E-mail 因故尚未送出。)

..讀取信件
=========
執行格式: mail
常用指令如下:
cd [directory]                  chdir to directory or home if none given
d [message list]                delete messages
h                               print out active message headers
m [user list]                   mail to specific users
n                               goto and type next message
p [message list]                print messages
q                               quit, saving unresolved messages in mbox
r [message list]                reply to sender (only) of messages
R [message list]                reply to sender and all recipients of messages
s [message list] file           append messages to file
t [message list]                type messages (same as print)
u [message list]                undelete messages
v [message list]                edit messages with display editor
w [message list] file           append messages to file, without from line
x                               quit, do not change system mailbox
z [-]                           display next [previous] page of headers
!                               shell escape

檔案編輯器 vi 之使用方法簡介
============================
vi、celvis(cvi) 是在工作站上被廣大使用的中英文編輯軟體。對初學者而言,
常因其特殊的使用方法,而不得其門而入;對已經在使用 vi 的使用者來說,也
常見因對 vi 的不熟悉或不夠了解,而無法發揮出 vi 強大的編輯能力,以下將
介紹 vi 之使用方法簡介。

..本文內容大綱
=============
進入 vi
離開 vi
輸入模式
    如何進入輸入模式
    如何離開輸入模式
指令模式
    游標的移動
    視窗的移動
    刪除、複製及修改指令介紹(delete、change、yank)
    刪除與修改(delete、replace)
    搬移與複製(delete/put、yank/put)
    指令重覆
    取消前一動作(undo)
    字串搜尋
    資料的連接與分行
    環境的設定
    ex 指令
其它方面
   中文編輯
   恢復編輯時被中斷的檔案
   編輯多個檔案

vi 是 visual editor 的縮寫,是 UNIX 所提供的編輯器之一。它提供使用者一個
視窗的編輯環境,在此視窗下,使用者可編輯所要的檔案。

..進入vi
=======
       直接執行 vi編輯程式即可:
       %vi test
       此刻螢幕上會出現 vi 的編輯視窗,同時 vi 會將檔案複製一份至記憶體中
       的緩衝區 (buffer) 。  vi會保留在磁碟中的檔案不變,而先對緩衝區的檔
       案作編輯,編輯完成後,使用者可決定是否要取代原來舊有的檔案。

..離開vi
=======
       若在輸入模式下,則先利用《ESC》進入指令模式,而後即可選用下列指令
       離開vi。
       :q!    離開vi,並放棄剛在緩衝區內編輯的內容。
       :wq    將緩衝區內的資料寫入磁碟中,並離開vi。
       :ZZ    同wq。
       :x     同wq。
       :w     將緩衝區內的資料寫入磁碟中,但並不離開vi。
       :q     離開vi,若檔案被修改過,則會被要求確認是否放棄修改的內容。
               此指令可與:w 配合使用。

..vi 的操作模式
==============
       vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)
       。當使用者進入 vi 後,即處在指令模式下,此刻鍵入之任何字元皆被視為
       指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入
       模式。

..輸入模式
=========
       如何進入輸入模式
               a (append)      由游標之後加入資料。
               A               由該行之末加入資料。
               i (insert)      由游標之前加入資料。
               I               由該行之首加入資料。
               o (open)        新增一行於該行之下供輸入資料之用。
               O               新增一行於該行之上供輸入資料之用。

       如何離開輸入模式
               《ESC》 結束輸入模式。

..指令模式
=========
游標之移動
       h       向左移一個字元。
       j       向上移一個字元。
       k       向下移一個字元。
       l       向右移一個字元。
       0       移至該行之首
       $       移至該行之末。
       ^       移至該行的第一個字元處。
       H       移至視窗的第一列。
       M       移至視窗的中間那列。
       L       移至視窗的最後一列。
       G       移至該檔案的最後一列。
       +       移至下一列的第一個字元處。
       -       移至上一列的第一個字元處。
       (       移至該句之首。 (注一)
       )       移至該句之末。
       {       移至該段落之首。 (注二)
       }       移至該段落之末。
       nG      移至該檔案的第 n 列。
       n+      移至游標所在位置之後的第 n 列。
       n-      移至游標所在位置之前的第 n 列。
              會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標
                       所在行號佔總行號之百分比。

       注一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
       注二:段落(paragraph)在vi中是指以空白行隔開的文字。

..視窗的移動
===========
             視窗往下卷一頁。
             視窗往上卷一頁。
             視窗往下卷半頁。
             視窗往上卷半頁。
             視窗往下卷一行。
             視窗往上卷一行。

..刪除、複製及修改指令介紹 (此單元較少使用)
=========================
       d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
       Operator + Scope = command
       (運運算元)   (範圍)
       運運算元:
       d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
       y       將資料(字組、行列、句子或段落)複製到緩衝區。
       p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
               料放置於游標所在位置之行列下。
       c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
               子等之資料,並插入新鍵資料。

       範圍:
       e       由游標所在位置至該字串的最後一個字元。
       w       由游標所在位置至下一個字串的第一個字元。
       b       由游標所在位置至前一個字串的第一個字元。
       $       由游標所在位置至該行的最後一個字元。
       0       由游標所在位置至該行的第一個字元。
       )       由游標所在位置至下一個句子的第一個字元。
       (       由游標所在位置至該句子的第一個字元。
       {       由游標所在位置至該段落的最後一個字元。
       }       由游標所在位置至該段落的第一個字元。

       整行動作
       dd      刪除整行。
       D       以行為單位,刪除游標後之所有字元。
       cc      修改整行的內容。
       yy      yank整行,使游標所在該行複製到記憶體緩衝區。

..刪除與修改
===========
       x       刪除游標所在該字元。
       X       刪除游標所在之前一字元。
       dd      刪除游標所在該行。
       r       用接於此指令之後的字元取代(replace)游標所在字元。
               如: ra 將游標所在字元以 a 取代之。
       R       進入取代狀態,直到《ESC》為止。
       s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
       S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。

..搬移與複製
==========
       利用 delete 及 put 指令可完成資料搬移之目的。
       利用 yank 及 put 指令可完成資料複製之目的。
       yank 和 delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
       可將緩衝區內的資料複製到螢幕上。
       例:
       搬移一行        .在該行執行 dd
                       .游標移至目的地
                       .執行 p
       複製一行        .在該行執行 yy
                       .游標移至目的地
                       .執行 p

..指令重複
=========
       在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
       次。
       例:
       刪除10行                .10dd
       複製10行                .10yy
                               .游標移至目的地
                               .p
       指標往下移10行  .10j

..取消前一動作(Undo)
===================
       即復原執行上一指令前的內容。

       u       恢復最後一個指令之前的結果。
       U       恢復游標該行之所有改變。

..搜尋
=====
       在vi中可搜尋某一字串,使游標移至該處。

       /字串           往游標之後尋找該字串。
       ?字串           往游標之前尋找該字串。
       n               往下繼續尋找下一個相同的字串。
       N               往上繼續尋找下一個相同的字串。

..資料的連接
===========
       J       句子的連接。將游標所在之下一行連接至游標該行的後面。

       若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
       (可利用 a、i等指令)再按《Enter》即可。
..環境的設定
===========
       :set nu                設定資料的行號。
       :set nonu              取消行號設定。
       :set ai                自動內縮。
       :set noai              取消自動內縮。

       自動內縮(automatic indentation)
       在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
       動內縮的功能,用下例解釋之:
       .vi test
       .(進入編輯視窗後)
         this is the test for auto indent
         《Tab》start indent           ← :set ai (設自動內縮)
         《Tab》data
         《Tab》data
         《Tab》data                   ← :set noai (取消自動內縮)
       the end of auto indent.
       .註: 可刪除《Tab》字元。

..ex指令
=======
       讀寫資料
       :w                     將緩衝區的資料寫入磁碟中。
       :10,20w test   將第10行至第20行的資料寫入test檔案。
       :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
       :r test                將test檔案的資料讀入編輯緩衝區的最後。

       刪除、複製及搬移
       :10,20d                刪除第10行至第20行的資料。
       :10d                   刪除第10行的資料。
       :%d                    刪除整個編輯緩衝區。
       :10,20co30             將第10行至第20行的資料複製至第30行之後。
       :10,20mo30             將第10行至第20行的資料搬移至第30行之後。

       字串搜尋與取代
       s(substitute)指令可搜尋某行列範圍。
       g(global)指令則可搜尋整個編輯緩衝區的資料。
       s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
       件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
       :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
       :10,20s/^/   /         將第10行至第20行資料的最前面插入5個空白。
       :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。

..恢復編輯時被中斷的檔案
=======================
       在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
       被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
       的檔案內容。
       %vi -r filename

..編輯多個檔案
=============
       vi亦提供同時編輯多個檔案的功能,方法如下:
       %vi file1 file2 ..

       當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
       再利用 『:n』載入下一個檔案。


[火星人 ] UNIX 簡介已經有2348次圍觀

http://coctec.com/docs/unix/show-post-74007.html