善用一些好用的 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 +%A 顯示星期,例如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視窗內, 開啟多個檔案時, 可同時儲存或關閉
: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
列出來的是我自己比較常用的指令, 如果有問題或是不曉得相關指令的話, 還請留言發問~
留言列表