之前在上linux課的時候,老師說,vim使用的好的網絡管理者比普通的效率快好多。合抱之木,生于毫末;九層之台,起于累土;千裡之行,始于足下。撸基礎吧。
linux編輯工具
VI
VIM
EMACS
vim 是vi的更新版本,它不僅相容vi的所有指令,而且還有一些新的特性在裡面。vim的這些優勢主要展現在以下幾個方面:
易用性 vi隻能運作于unix中,而vim不僅可以運作于unix,windows ,mac等多操作平台。
文法加亮 vim可以用不同的顔色來加亮你的代碼。
可視化操作(ESC+V) 就是說vim不僅可以在終端運作,也可以運作于x window、mac os、windows。
對vi的完全相容 某些情況下,你可以把vim當成vi來使用
vim 檔案名
如果檔案已存在,則此檔案被打開且顯示檔案内容
如果檔案不存在,則vim在第一次存盤時自動建立在硬碟上
vim的三種模式:
指令模式:控制光标移動,删除字元,段落複制(按ESC)
編輯模式/插入模式:新增文字及修改文字
末行模式:儲存檔案,離開vi,以及其他設定
vim的基本使用
插入、定位、删除、複制、剪切、替換、取消、搜尋、儲存、退出
定位指令
0 數字0,将光标移動到該行的行首
$ 将光标移動到該行的行末
H 将光标移動到該螢幕的頂端
M 将光标移動到該螢幕的中間
L 将光标移動到該螢幕的底端
gg 将光标移動到文章的首行
G 将光标移動到文章的尾行
w或W 将光标移動到下一單詞
在指令模式下可以直接删除字元
在指令模式下鍵入v則進入塊操作:
1、移動光标以標明操作塊
2、c 剪切標明塊 或 y 複制標明塊
3、p 将標明内容貼在光标所在位置右手邊
在vim中删除
x/<del>:删除一個字元
nx:删除下n個字元
dd:删除目前行
dw:删至詞尾
ndw:删除後n個詞
d$:删至行尾
nd$:删除後n行
在vim中剪貼
yy:標明光标所在行複制
yw:標明光标所在詞複制
nyw:標明光标所在位置到之後n個單詞複制
y$:標明光标所在位置到行尾的部分複制
p:貼在光标所在位置之右
P:貼在光标所在位置之左
指令模式,取消操作
u:取消上一個更動
U:取消一行内的所有更動
:e! :放棄所有更動,重新編輯
VIM編輯模式
i光标目前處插入
I光标目前行首插入
a光标之後插入
A光标所在行的行尾插入
o光标所在行之後新起一行插入
O光标所在行之前新起一行插入
末行模式在指令模式下輸入“:”進入末行模式
:w [檔案名] 儲存目前檔案
:q 如果未對檔案做改動則退出
:wq :x 儲存目前檔案并退出
:q! 放棄存儲并退出
:e 檔案名 打開另一檔案并開始編輯
:r 檔案名 在目前光标插入檔案内容
:r! 指令在目前光标插入指令執行結果
set nu 顯示行号
set nonu 取消行号
/向下查詢
?向上查詢,在查找關鍵字後,可以用n繼續下一個關鍵字查找
Vim使用技巧
:r 檔案名 導入檔案,導入到光标所在位置
:! which 指令 在vim中使用指令操作
:r!r指令 聯合使用,把執行的指令結果導入
定義快捷鍵:我們要給某一行進行注釋的過程是I跳到首字元,i進入編輯模式,然後輸入#号,esc退出
:map ^p I#<ESC>,(^p是ctrl +v+p一起按出來的),然後我們隻要在任意位置按ctrl p就可以了
<a href="http://s3.51cto.com/wyfs02/M02/86/C2/wKiom1fJaAfSri1rAAA0Hip7VQo586.png" target="_blank"></a>
vim的替換
:起始行,終止行s/^/#/g
:起始行,終止行s/#//g
ab替換:輸入a的内容,自動變成b的内容
ab wozaigongzuo wozaixuexi
<a href="http://s2.51cto.com/wyfs02/M01/86/C2/wKiom1fJaa-zSGboAAAp8e6Fgqo133.png" target="_blank"></a>
重新開機後失效,永久存在,編輯家目錄下的vim.rc,有可能空的或者不存在
<a href="http://s5.51cto.com/wyfs02/M02/86/C2/wKiom1fJadHBN_42AAASVlsRKZc782.png" target="_blank"></a>
輸入、輸出、重定向
輸入:過濾器的資料來源
輸出:過濾器的資料去向
重定向:标準輸入、輸出與錯誤輸出,都可以用特定符号改變資料來源或去向
> , >>輸出重定向符
>将螢幕上顯示到文本中,重新整理儲存(檔案的原内容會被覆寫)
>>将螢幕上顯示到文本中,追加儲存
< ,<< 輸入重定向符
<a href="http://s5.51cto.com/wyfs02/M01/86/C2/wKioL1fJae7jXDHwAAA2dvHA11U740.png" target="_blank"></a>
輸出重定向
echo 單句輸出
<a href="http://s4.51cto.com/wyfs02/M01/86/C2/wKioL1fJagaghw4YAAAMyH0AgXg586.png" target="_blank"></a>
< 不用鍵盤輸入,用其他輸入
<a href="http://s2.51cto.com/wyfs02/M00/86/C2/wKiom1fJaiOBLmoEAABKP_Z53eQ005.png" target="_blank"></a>
這裡用wall來廣播一下之前編輯的test檔案,寫法是# wall 0< /mu1/test 意思就是将test中的檔案内容廣播出去
<< 輸入,直到end結束
<a href="http://s2.51cto.com/wyfs02/M02/86/C2/wKioL1fJalTwJPSLAAAgne9vBlQ856.png" target="_blank"></a>
<a href="http://s1.51cto.com/wyfs02/M00/86/C2/wKiom1fJalWQ8azpAAAshaTbIVY684.png" target="_blank"></a>
管道操作
将前一個指令的輸出結果作為後一個指令的輸入資料源
<a href="http://s1.51cto.com/wyfs02/M00/86/C2/wKioL1fJam7SFUX-AAAZxmQ2rbw728.png" target="_blank"></a>
程序
系統是通過程序來完成工作的,每一個程序都有一個獨立的程序号,系統通過調用程序号來排程操控程序.
系統的原始程序是init ,init的PID總是1
一個程序可以産生另一個程序,除了init以外,所有的程序都有父程序
pstree 以樹狀的方式表現程序的父子關系
<a href="http://s4.51cto.com/wyfs02/M01/86/C2/wKiom1fJaoyjOhBKAAA9_AccrXk422.png" target="_blank"></a>
init 是第一級的,Linux系統上所有運作的東西都可以稱之為一個程序。每個使用者任務、每個系統管理守護程序,都可以稱之為程序。Linux用分時管理方法使所有的任務共同分享系統資源.分時,也就是時間片。
程序狀态分為:建立态-就緒态-行動态-結束。
然而我們的系統能夠多任務的主要原因就是時間片。一個程序,比如說TELNET的程序,一個程序,比如說TELNET的程序,然後TELNET這個程序就進入就緒态,等待時間片。當CPU分給他的時間片的時間到了的話,他就開始運作,進入運作态.當時間片用玩以後,他就進入阻塞态,然後進入就緒态,等下次CPU配置設定的時間片。然後又進入運作态.當這個程式運作完了以後,就進入結束态。這就是簡單的程序狀态流程。
linux的程序樹是這樣的:KERNEL-0号程序-1号程序(INIT)-子程序
ps 【選項】
-l 長清單
-a 顯示同一終端下的所有程式
-A 顯示所有程序
-e 等于“-A”
e 顯示環境變量
f 顯示程式間的關系
-H 顯示樹狀結構
r 顯示目前終端的程序
T 顯示目前終端的所有程式
u 指定使用者的所有程序
-au 顯示較詳細的資訊
aux 檢視系統所有的程序
<a href="http://s5.51cto.com/wyfs02/M00/86/C2/wKioL1fJatajE-TNAAAatLlX3_A753.png" target="_blank"></a>
第一個F表示這個程序的标志FLAG,4表示使用者為超級使用者
第二個S 表示這個程序的狀态STAT,STAT有這幾種狀态
ps顯示中的STAT,可以為:
R:正在運作。
S:程序睡眠中,通常可以因事件發生而被喚醒。
T:程序已停止。
D:程序睡眠中,除非發生指定事件,否則不會被喚醒。
Z:僵屍程序,例如未能被父程序回收的子程序。通常是一個系統bug或非法操作。
< :高優先級程序。
N:低優先級程序。
UID 這個就是使用者識别碼 (ID),當 UID 是0 時,代表這個賬号是系統管理者!
PID 這個程序的ID
PPID為父程序的ID
C CPU使用的資源百分比
PRI PRIORITY(優先級)的縮寫,PRI的值越小,他的優先級越高
NI NICE值等下我們也會詳細介紹
ADDR 這個是核心功能,指出該程序在記憶體的哪一部分,如果是運作的程序,一般是 - ,-是個标志
SZ用掉的記憶體大小
WCHAN目前程序是否正在運作,若為- 表示正在運作,若為 WAIT 就是等待
TTY 登陸者使用的終端
TIME 用掉的CPU時間
CMD 所執行的指令(也就是用什麼指令産生的這個程序)
<a href="http://s4.51cto.com/wyfs02/M02/86/C2/wKiom1fJavXQ1XpvAABeGstQxcU185.png" target="_blank"></a>
ps -ef 顯示所有程序資訊,連同指令行
<a href="http://s1.51cto.com/wyfs02/M01/86/C2/wKioL1fJax-Q1fmZAAAsPyF4uxw373.png" target="_blank"></a>
<a href="http://s1.51cto.com/wyfs02/M01/86/C2/wKiom1fJax-SNOcAAAAThy52un4998.png" target="_blank"></a>
kill 控制程序
文法:kill 【參數】-PID
-l 信号,若果不加信号的編号參數,則使用“-l”參數會列出全部的信号名稱
-a 當處理目前程序時,不限制指令名和程序号的對應關系
-p 指定kill 指令隻列印相關程序的程序号,而不發送任何信号
-s 指定發送信号
-u 指定使用者
發送指定的信号到相應程序。不指定型号将發送SIGTERM(15)終止指定程序。如果任無法終止該程式可用“-KILL” 參數,其發送的信号為SIGKILL(9) ,将強制結束程序,使用ps指令或者jobs 指令可以檢視程序号。root使用者将影響使用者的程序,非root使用者隻能影響自己的程序。
隻有第9種信号(SIGKILL)才可以無條件終止程序,其他信号程序都有權利忽略。
<a href="http://s5.51cto.com/wyfs02/M01/86/C2/wKioL1fJazziykRbAABHPNfrffQ840.png" target="_blank"></a>
下面是常用的信号:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg指令)
STOP 19 暫停(同 Ctrl + Z)
init程序是不可殺的
因為水準有限,文中若有錯誤,多多包涵。同時也歡迎交流。
本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1845715