天天看點

Linux檔案編輯器vim、輸出輸入重定向以及程序

之前在上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>

輸入、輸出、重定向

輸入:過濾器的資料來源

輸出:過濾器的資料去向

重定向:标準輸入、輸出與錯誤輸出,都可以用特定符号改變資料來源或去向

&gt; , &gt;&gt;輸出重定向符

&gt;将螢幕上顯示到文本中,重新整理儲存(檔案的原内容會被覆寫)

&gt;&gt;将螢幕上顯示到文本中,追加儲存

&lt; ,&lt;&lt; 輸入重定向符

<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>

&lt;  不用鍵盤輸入,用其他輸入

<a href="http://s2.51cto.com/wyfs02/M00/86/C2/wKiom1fJaiOBLmoEAABKP_Z53eQ005.png" target="_blank"></a>

這裡用wall來廣播一下之前編輯的test檔案,寫法是# wall 0&lt; /mu1/test 意思就是将test中的檔案内容廣播出去

&lt;&lt;  輸入,直到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或非法操作。

&lt; :高優先級程序。

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

繼續閱讀