善用一些好用的 Linux指令以及VIM指令, 對於經常編輯與處理檔案的瑣碎工作有非常大的幫助, 並沒有非常深入的研究這些內容, 主要是紀錄一些常用的指令語法, 若有錯誤還請指正

#########
### Linux 快捷鍵
#########

1. 游標移至行首

% ctrl + a (長按ctrl鍵再按a鍵)

2. 游標移至行尾

% ctrl + e (長按ctrl鍵再按e鍵)

3. 刪除一個字詞

% alt + Backspace (長按ctrl鍵再按 Backspace 鍵)

例如刪除一個路徑的資料夾名稱 ccc

aaa/bbb/ccc


 

 

#########
### Linux 指令
#########

grep 尋找檔案中的字詞,會回傳符合字詞的整行內容,若是要搜尋壓縮檔,需要使用 zgrep

Syntax: grep search_key_word /home/directory1/filename

Example: 

1. 如果搜尋的關鍵字只有一個字, 可以不加雙引號, 有特殊字元或是空格的話, 需要使用雙引號

% grep vendor_id /proc/cpuinfo

% grep "model name" /proc/cpuinfo

2. 搜尋多個關鍵字時使用 \| 

% grep "Total\|Free" /proc/meminfo

3. 搭配 "|" 使用進行更進一步的搜尋或是過濾的動作

% grep keyword1 /home/path/filename | grep keyword2

% ls /home/path/filename | grep keyword

4. 使用 "-i",搜尋時不分大小寫:

% grep -i search_key /home/path/filename

5. 使用 "-c" 可以計算個數

 grep -c search_key /home/path/filename  

6. 使用 "-v" 可以過濾不要的內容 

 grep -v search_key /home/path/filename 

7. 使用 "-h" 可以不顯示檔案路徑與名稱

 grep -h search_key /home/path/filename 

8. 使用 "-r" 搜尋資料夾內的文檔

 grep -r search_key /home/path/filename 

9. 使用 "-n" 顯示搜尋到的行號

 grep -n search_key /home/path/filename 

10. 使用 "-A" ,後面帶數字,除了顯示搜尋到的該行之外,後面的幾行也會一併顯示 

 grep -A5 search_key /home/path/filename   

11. 使用 "-B" ,後面帶數字,除了顯示搜尋到的該行之外,前面的幾行也會一併顯示 

 grep -B2 search_key /home/path/filename  

12. 只搜尋某些字是在行首的,可以使用 "^"  

grep "^search_key" /home/path/filename 

13. 只搜尋某些字是出現在行尾,可以使用 "^" 

grep "search_key$/home/path/filename  

 

 其他應用

grep search_key /home/path/filename -3

% grep search_key /home/path/filename -a3

% grep search_key /home/path/filename | sed 's/PATTERN1/PATTERN2/g'  | grep xxx


 

find 搜尋檔案或是目錄, 如果目錄底下有許多子目錄, 也會一併搜尋

Syntax: find /path/directory -name keyword

Example:

1. 搜尋單一檔案

% find /proc/ -name cpuinfo

2. 搜尋某些特定副檔名

find /proc/ -name "*.txt"   

3. 搜尋目錄f

find /var/www/ -name html -type d

4. 搜尋之後, 接著進行 grep  

find /proc/ -name "*.txt"  | xargs grep -in "Pattern" 

5. 若有很多種副檔名, 可以使用 -or

find /proc/ -name "*.txt" -or -name "*.tcl"

6. 不分英文大小寫

find $path -iname $pattern 

7. 指定 type 

find $path -name $pattern [-type $value]

d 目錄 / f 檔案 /l 連結

 


 

awk 擷取檔案中的字詞, 通常擷取有規律的檔案中的某個字, 像是要擷取出每一行的第3個字和第5個字

Syntax: awk '{print $number1 $number2 }'  

            awk '{printf $number}' 

# printf 和 print 差異在於是否要換行, print 會在每個擷取的文字後加入換行, printf 則是會連接在一起

Example: 

1. 要擷取的文字可以是單一個或是多個, 印出的文字也可以是另外加上想要的文字

% more /proc/cpuinfo | awk '{print $1}'

% more /proc/meminfo | awk '{print "Size: " $2}'

% grep mem /proc/meminfo | awk '{print $1}'

% ... | awk '{SUM+=$5}END{print SUM}'  

 

wc 計算文字個數

wc -l 每一行只算一次, 等同於計算行數, 可用於計算關鍵字的個數

% grep keyword /path/filename | wc -l  

 

sort 排序文字

sort -u 排序文字時, 重複的文字只會被保留一次

% grep keyword /path/filename | sort -u

sort -r 將排序結果反向顯示

% grep keyword /path/filename | sort -r


cp 檔案或資料夾

複製檔案到某個路徑

% cp SOURCE DESTINATION   

 

複製資料夾到某個路徑

% cp -r SOURCE DESTINATION    

 

alias 設定別名

% alias h history     # h 等同於 history

 

unalias 取消別名設定

% unalis h

 

ls 列出檔案、目錄名稱

% ls /proc/*info -ltr

 

vim/vi 開啟文字編輯器編輯檔案  

開起檔案時, 直接跳至第 N 行 

 vim file1 +Number 

同時開起多個檔案, 以水平方向同時顯示 

vim -o file1 file2  

同時開起多個檔案, 以垂直方向並排顯示

% vim -O file1 file2 

 

view 以唯讀方式瀏覽檔案 

 

diff 比較兩個檔案內容, 將差異內容以文字呈現 

diff filename1 filename2 

 

vimdiff 比較兩個檔案內容, 以vim的方式開啟檔案, 可以瀏覽兩個檔案的差異,後面可以搭配 -o, -O 改變檔案在視窗中的位置

vimdiff filename1 filename2 

vimdiff filename1 filename2 -o 

vimdiff filename1 filename2 -O

 

gvim 以視窗模式開啟文字編輯器

同時開啟多個檔案在同一個視窗時,後面可以搭配 -o, -O, -p 改變檔案在視窗中的位置,像是上下擺放、左右擺放,或是分頁擺放

 

gvimdiff 視窗模式比較文字內容

 

more 瀏覽檔案, 每次會翻閱一頁, 按空白鍵換頁 (檔案非常大的時候, vim 會非常花時間, 用 more 或是 less 都可以快速瀏覽檔案)

% more filename

grep "model name" /proc/cpuinfo | more

 

less 顯示部分檔案內容, 可以往前往後換頁

% less filename

 

tail 瀏覽檔案的最後一頁

% tail filename

 

cat 印出檔案全部內容, 可將多個檔案內容印出導到另一個檔案

% cat file1 file2 > total_file

 

pwd 顯示目前的工作路徑 (working direcory path)

 

date 印出日期

% date 

% date +%D

根據指令印出需要的資訊, %m:月, %d:日, %H%M%S:時分秒

% date +%m%d%H%M%S 

echo 印出文字內容, 或是環境變數

% echo TEMP

% echo $DISPLAY

setenv 設定環境變數

% setenv DISPLAY temp:0.0

unsetenv 解除環境變數

% unsetenv DISPLAY

history 顯示執行過、使用過的指令 

jobs 顯示目前正在背景執行的 process name, process status

ps 顯示目前正在執行的 process 狀態

% ps

kill 終止執行中的 process

% kill -9 %PROCESS_ID

bg 將執行中的程式轉換到背景執行

fg 將背景執行中的程式轉換到前景執行

chmod更改檔案或是目錄的權限

% chmod 755 filename

ln 建立連結、建立捷徑

% ln -s original_path link_name  # 建立符號連結 

mkdir 建立資料夾

% mkdir directory_name

rmdir 刪除資料夾

% rmdir directory_name      # 資料夾內容若不是空的, 會無法移除

rm 刪除單一或是多個檔案、資料夾

% rm filename filename2     # 刪除檔案時會需要使用者確認

% rm filename -f  # 強制刪除檔案, 刪除時不需要使用者確認

% rm directoryname -r  # 遞迴刪除檔案, 可用於刪除資料夾

touch 更新檔案的時間, 若檔案不存在則會新增檔案

% touch filename

which 尋找指令的執行位置

% which vim 

mv 移動檔案或是資料夾, 或是更改名稱 

% mv original_filename new_filename   # 更名

% mv filename ./dir_path/filename        # 移動

mv filename1 filename2 filename3  ./dir_path/filename        # 移動多個檔案

sed 取代檔案中符合條件的文字, 也可以刪除檔案內符合的文字

% sed 's/word1/word2/g' -i filename 

sed 's/word1/ \n word2\n/g' -i filename       # 插入換行符號

sed '/word1/ d' -i filename    # 將有包含 word 字串的一整行刪除

% sed '15,30d' -i filename        刪除檔案中第 15 至 30 行

tar 打包多個檔案, 沒有壓縮功能, 或是將 tar 檔解開

% tar -cvf new_file_name.tar files* 

tar -xvf file_name.tar

gzip 將檔案、資料夾壓縮/解壓縮, 

% gzip -d filename.gzip

% gzip filename

zmore 瀏覽 gzip 檔案

% zmore filename.gzip

zgrep 搜尋 gzip 檔案

% zgrep keyword filename.gzip

zgrep -c keyword filename.gzip  ### 統計個數

顯示 Linux machine 的資訊

% cat /proc/meminfo

% cat /proc/cpuinfo

top 顯示 machine 狀態, 像是 memory 與 CPU 使用狀況, 

% top

eog  開啟圖檔

% eog PICTURE_NAME 

開啟PDF檔

% evince PDF_NAME 

acroread -geometry 640x480 PDF_NAME 

htmlview 開啟 HTML 檔案

% htmlview HTML_FILE

 

date 顯示當下的時間與日期,可搭配 +% 改變格式

date 

% date +%a    顯示星期,以縮寫呈現,例如 Mon

% date +%   顯示星期,例如Monday

% date +%b    顯示月份,以縮寫呈現,例如Feb

% date +%B    顯示月份,例如February

% date +%m%d   顯示月份與日期

% date +%H%M%S   顯示小時、分鐘、秒

% date +%Z    顯示時區

 

cd  切換路徑

% cd -   回到前一個路徑

 

realpath 顯示完整路徑

sleep $second 

zcat tmp.a.gz | sed -n '1p'     // 印出 gzip 檔案第一行

zcat tmp.a.gz | sed -n '1,5p'  // 印出 gzip 檔案 1至 5 行

sed -n '1,3p' FILENAME        // 查看檔案內容 1~3 行

less FILENAME.gz | sed -n '1,5p' //查看 gz 檔案 1~5 行

ls `which vim`


 

#########
###  VIM 指令
#########

表示指令模式,要先輸入:再輸入指令

/ 表示搜尋模式, 要先輸入 / 在輸入要搜尋的關鍵字

沒有冒號的指令表示直接在鍵盤輸入指令

 

以下快捷鍵可以進入編輯模式, 並且有不同的功能

i 進入編輯模式後, 指標會停在原始指標位字

a 指標向右移動一個字元後, 進入編輯模式

s 刪除指標所在的字元後, 進入編輯模式

r 取代指標所在的字元

x 刪除指標所在的字元

 

ESC 可離開編輯模式, 返回瀏覽模式

 

[檔案相關]

顯示檔案名稱

:f

儲存檔案

:w

關閉檔案

:q

強制儲存/強制關閉

:w!

:q!

儲存後關閉

:wq

在同一個 VIM 視窗開啟其他檔案, 

:sp filename

vim_sp    

在一個VIM視窗內, 開啟多個檔案時, 可同時儲存或關閉

:wqa

:qa

在一個VIM視窗內, 開啟多個檔案時, 可以將指標切換到不同檔案

: ctrl+w + ctrl+w    #輸入兩次 ctrl+w, 指標會切換到下一個檔案

: ctrl+w + 上下鍵     # 搭配 上下方向件, 指標會往指定方向切換

[搜尋相關]

搜尋符合的字詞

/keyword

/keyword.*    # .*代表任意字詞

往檔案起始位置搜尋字詞

?keyword

移動到下一個符合搜尋的字詞

n   # vim 瀏覽模式下, 輸入 n

移動到前一個符合搜尋的字詞

 N (shift+n)  # vim 瀏覽模式下, 輸入 N

搜尋文字時, 將符合的字詞 highlight 

:set hlsearch

搜尋文字時, 不要將符合的字詞highlight, 取消 highlight

:nohlsearch

:noh

[編輯相關]

複製整行

Y  (shift + y) # 複製指標所在的整行

y +方向鍵 # 可搭配鍵盤上下鍵, 同時複製指標所在的行和上一行(or 下一行)

貼上複製的內容

P or p

替換指標所在的單一文字 chane word 

: cw

刪除指標所在的整行

dd  #在瀏覽模式下, 輸入dd

d + 方向鍵  # 搭配鍵盤上下鍵, 可刪除指標所在行以及上下行

只刪除指定的行數, 或是一整個段落

: 10 d          # 刪除第10行

:10, 50 d     # 只刪除第10行到第50行

同時取代多個文字

Syntax: $line1, $line2 s/word1/word2/g

Example:

1. 取代檔案中所有符合的關鍵字

: %s/word1/word2/g

%s?word1?word2?g   

2. 只取代第5行到第20行, 符合的文字

: 5,20 s/word1/word2/g 

3. 每行字首插入文字

: % s/^/word1/g 

4. 每行字尾插入文字

: % s/$/word1/g

5. 行號可用其他方式表示, 像是 "." 代表指標所在的行號, $ 代表最後一行

:.,$ s/word1/word2/g

在文字編輯器中開啟並編輯檔案

:fg filename

[選取/標記相關 (VISUAL BLOCK)]

在vim文字編輯器中, 透過ctrl+v可以選取一個字詞或是許多字詞, 可以複製所選取的字詞或是針對字詞進行編輯

 

[其他]

搜尋字元時, highlight 匹配字元是否被

: set hlsearch

搜尋字元時, 取消 highlight 匹配字元

: set hlsearch

 

顯示行號

: set nu

取消行號

:set nonu

 

當一行文字內容太多時, vim 會分段顯示

:set wrap

取消分段顯示, 太長的內容會看不到

:set nowrap

 

移動到某一行

: line_number     # 也可以在瀏覽模式下直接輸入行號

將指標移動到下一個字詞, 以空白鍵當作分割

w          # 在瀏覽模式下, 輸入w 

將指標移動到前一個字詞, 以空白鍵當作分割 

b          # 在瀏覽模式下, 輸入b 

移動到前一個或一個括弧所在的位置

 % (shift + 5)   #將指標放在其中一個括弧, 輸入 shift+5 切換到另一個配對的括弧, 常用於 trace code

開啟指標所在的檔案

gf   (鍵盤直接敲gf, 不需要切換成指令模式: go to file)

回到前一個檔案 (用gf開啟檔案後, 回到前一個檔案)

:bd

標記行號, 如此一來就不用敲行號, 可用代號取代

m a    # vim 瀏覽模式下, 在第十行敲依序輸入 m a, 把這行標記為 a

m b    # vim 瀏覽模式下, 在第二十行依序輸入 m  b, 把這行標記為 b

: 'a, 'b s/word1/word2/g                 #    <=等同於=>  : 10, 20 s/word1/word2/g

: 'a, 'b co .  # 將a行到b行的內容複製到指標所在的位置

拼字檢查 

: set spell

 

刪除符合字詞的行

: g /PATTEN/ d

 

刪除符合字詞以外的行

: g! /PATTEN/ d

 

搜尋不分大小寫

: set ic


 

#########
###  DOS 指令
#########

dir 顯示路徑底下的檔名、資料夾名稱, 相似於於 linux ls 指令

type 印出檔案內容, 相似於 linux cat 指令 


 

#########
### TCL 語法
########
#

 

<string>

 

string trim $VAR "char"

string trimleft $VAR "char"

string trimright $VAR "char"

 

string llength $VAR

 

string first "char" $VAR

 

string last "char" $VAR

string replace $VAR index1 index2 "char"

 

<regexp>

regexp {(\s+)/(\s+)} $line match VAR1 VAR2

 

<file>

file  isdirectory  $fileName; ### 檢查檔案是否為資料夾

file exists $fileName ; ###檢查檔案是否存在

file tail $fileName ; ### 回傳檔案後面的內容

file mkdir $Name ; ### 創建資料夾

file isfile $fileName ; ### 檢查是否為檔案型態

file normalize $fileName ;

file readlink $fileName; 

 

<開檔>

open "fileName" "r" ; ### 讀取一般檔案

open "|zcat "fileName" "r" ; ###讀取gzip 檔案

 

<lsearch>

lsearch $VAR "pattern"

lsearch -all $VAR "pattern"

lsearch -exact $VAR "pattern"

lsearch -inline $VAR "pattern"

 

<讀取 Linux 環境變數>

puts $::env(PATH)

 

<讀取tcl版本>

puts $tcl_version

 

<array>

array set varName

array get varName

array size varName

array exist varName

array unset varName

array name varName

 

proc temp {arrayName} {

array set newArrayName $arrayName

}

temp [array get varName]

 

regsub -all {\#} $VAR "char" newVAR

 


 

列出來的是我自己比較常用的指令, 如果有問題或是不曉得相關指令的話, 還請留言發問~


arrow
arrow

    Chibli/紅蜻蜓 發表在 痞客邦 留言(0) 人氣()