1. 程式人生 > >linux學習筆記2.0

linux學習筆記2.0

筆記

命令
">" | >> file 標準輸入重定向(覆蓋);(追加)
2> | 2>> file 標準錯誤重定向(覆蓋);(追加)
file < 標準輸入重定向
&> file == >file 2>&1 全部標準輸出重定向
tr 轉換和刪除字符
tee [-a] file1 將stdin存入file1並輸出(追加)
cmd1 | cmd2 | cmd3 ... 管道(多次)
附加
mail -s “標題” 用戶 發郵件
mail 收郵件
seq -s + 1 100 |bc 從1加到100
openssl rand -base64 10 隨機生成10位字符串
chsh -s /bin/csh 用戶 修改用戶shell類型成csh
chfn 修改用戶描述
chown 修改所有者
chgrp 修改所屬組
scp 文件名 ip 路徑 跨服務器復制
reset 重置字符
last 顯示用戶登錄信息
netstat 網絡連接查看
&> /dev/null 不顯示輸出,$?顯示結果
namp -v -sP ip地址 掃描ip地址網段的地址up or down7

附加:
" ", ‘ ‘, 反引間區別

" ":能識別其中的變量
‘ ‘:不識別其中內容
反引:能識別其中任何內容(用於引用命令行)

標準輸入和輸出
程序:指令+數據
讀入數據:Input
輸出數據:Output
打開的文件都有一個fd: file descriptor (文件描述符)
Linux給程序提供三種I/O設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
I/O重定向:改變默認位置

把輸出和錯誤重新定向到文件


STDOUT和STDERR可以被重定向到文件
命令:操作符號+文件名
‘>‘ 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> |2>&1 把所有輸出重定向到文件
‘>‘ 操作文件內容會被覆蓋
‘>> ‘原有內容基礎上,追加內容
( ;) 合並多個程序的STDOUT
從文件中導入STDIN
< 重定向標準輸入
cat > filea < fileb
單行重定向:回車結束一次
多行重定向:<< 終止符

tr命令
轉換和刪除字符
tr [optino]...set1 [set2] set1轉換成set2
-d 將字符串中的set刪除
-c 取字符串的補集
-s 壓縮連續的字符
-t 將第一個字符集對應字符轉化為第二字符集對應的字符

管道:pipe
cmd1 | cmd2 | cmd3 | ...
cmd1的stdout作為cmd2的stdin,cmd2的stdout作為cmd3的stdin
stdout stderr |& cmd ==(等價於) stdout stderr 2>&1 | cmd
stdout和stderr共同作為stdout作為cmd標入使用
less:一頁一頁地查看輸入
ls -l /etc | less
mail:通過電子郵件發送輸入
echo "test email" | mail -s "test" [email protected]
lpr:把輸入發送給打印機
echo "test print" | lpr -P printer_name
管道中-符號
將 /home 裏面的文件打包,但打包的數據不是記錄到文件,而是傳送到 stdout,經過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取前一個命令的 stdout, 因此,就不需要使用臨時file了
tar -cvf - /home | tar -xvf -

tee命令
將命令執行結果存入文件並輸出
cmd1 | tee [-a] 文件名 | cmd2 將cmd1的stdout存入文件並輸出,作為cmd2的stdin使用(-a 追加不覆蓋)
標準輸入:
cat tr mail bc(高級運算命令 計算器) 等

用戶、組和權限
安全3A
Authentication:認證
Authorization:授權
Accouting|Audition:審計

用戶user
令牌token(uid,gid,groups),identity
file(授權uid,read讀r write寫w excute執行x)
訪問資源時根據token中攜帶的信息給與相應的授權
linux用戶:Username/UID
管理員:root/0
普通用戶:1-65535
系統用戶:1-499,1-999(centos7)
登錄用戶:500+,1000+(centos7)
交互式登錄

組group
linux組:Groupname/GID
管理員組:root/0
系統組:1-499,1-999(centos7)
普通組:500+,1000+(centos7)
Linux組的類別
用戶的主要組(primary group)
用戶必須屬於一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶可以屬於零個或多個,輔助組

安全上下文
context(運行此程序的用戶身份,用戶組身份)
以進程(proces)發起者的身份運行:
root:/bin/cat
user:/bin/cat
進程所能夠訪問資源的權限取決於進程的運行者的身份

用戶和組的配置文件
/etc/passwd:用戶及其屬性信息(NAME、UID、主組ID等)
七個字段:
用戶名:密碼:uid:gid:描述:家目錄路徑:shell類型
/etc/shadow:用戶密碼及其相關屬性(密碼一般用sha512加密)
用戶:密碼:口令修改時間:最短口令有效期:最長口令有效期:提前通知時間:寬限期:賬戶有效期:保留字段
/etc/group:組及其屬性信息
組名:密碼:gid:組員(以當前組為附加組的用戶)
/etc/gshadow:組密碼及其相關屬性
組名:密碼:組長:組員(以當前組為附加組的用戶)
附:
1、/etc下大部分都是配置文件(文本文件),可修改但有嚴格格式
2、創建給服務用的賬號shell類型用nologin
3、feild 域 列 字段 屬性;record 行 記錄
4、與創建用戶和組相關的文件:
/etc/passwd
/etc/shadow
/etc/login.defs
/etc/default/useradd
/etc/skel/*
/etc/group
/etc/gshadow

文件操作
vipw == nano /etc/passwd (vi==nano)
vigr == nano /etc/group
pwck | grpck 檢查用戶|組文件格式

用戶管理命令
用戶創建:
useradd [options] name 創建用戶(adduser -> useradd)
-u 創建用戶指定UID
-o 配合-u選項,不檢查UID唯一性
-g 創建用戶到指定組
-c 創建用戶並描述
-d 創建用戶到指定家目錄
-s 創建用戶指定shell類型(可用列表:/etc/shells)
-r 創建系統用戶(ID:1-499centos6;1-999centos7)
-G 創建用戶到指定附加組...
-N 創建用戶指定主組users
-m 創建家目錄,用於系統用戶
-M 不創建家目錄,用於非系統用戶
-D 顯示默認設置
newusers 批量創建用戶
chpasswd 批量修改用戶口令
用戶屬性修改:
usermod [option] name 修改用戶屬性
-u 新UID
-g 新GID
-G 新附加組,覆蓋原組,-a追加新組
-s 新的默認shell
-c 新的用戶描述
-d 新家目錄不自動創建,-m創建新家目錄並移動原家目錄數據
-l 新用戶名
-L 加鎖
-U 解鎖
-e 設置賬號過期日期
-f 設置非活動期限
刪除用戶:
userdel [option] name 刪除用戶(若某用戶正在使用,該用戶不能刪)
-r 刪除用戶和家目錄和郵箱
查看用戶ID信息:
id [option] name 顯示用戶信息(判斷用戶是否存在)
-u 顯示UID
-g 顯示GID
-G 顯示所屬組ID
-n 顯示用戶名,配合u,g,G使用
getent passwd|group|shadow|gshadow
查看這幾個文件,後跟u|g,只查看文件中的u|g
切換用戶:
su(switch user) user 切換用戶(不完全切換)
su - user 切換用戶(完全切換)
root切換至其他用戶無須密碼;非root用戶切換時需要密碼
設置密碼:
passwd [option] name 修改指定用戶密碼
-d 刪除指定用戶密碼
-l 鎖定指定用戶
-u 解鎖指定用戶
-e 強制用戶下次登錄修改密碼
-f 強制操作
-n 指定最短使用期限
-x 最長使用期限
-w 提前警告天數
-i 非活動期限
ehco ‘passwd’|passwd --stdin name 從標準輸入接收用戶密碼
修改用戶密碼策略:
chage [option] name 交互式修改用戶密碼時間參數
-d 修改最後期限
-E 修改過期時間
-I 修改非活動期限
-m 修改最短期限
-M 修改最長期限
-W 修改提前警告天數
-l 顯示密碼策略
用戶相關其他命令:
chfn 修改個人信息
chsh 修改shell
finger 查看用戶信息

組管理命令
創建組:
groupadd [option] name 創建組
-g 指明GID
-r 創建系統組(GID:1-499centos6;1-999centos7)
修改組:
groupmod [option] name
-n 修改新名字
-g 修改新GID
刪除組:
groupdel 刪除組(若某組是某用戶主組,該組不能刪)
更改組密碼:
gpasswd [option] name 交互式給組加口令(密碼)
-a user 將user添加至指定組
-d user 從指定組中移除user
-A user1,user2,... 設置有管理權限的用戶列表
newgrp 臨時切換主組(若用戶不在此組,需密碼)
更改和查看組成員:
groupmems [option] [action] 顯示指定組成員
options:
-g 更改為指定組
action:
-a 指定用戶加入組
-d 從組中刪除用戶
-p 從組中清除所有成員
-l 顯示組成員列表
groups [option].[username]... 查看用戶所屬組列表

文件權限
文件屬性操作:
修改文件的所有者
chown
用法:
owner
owner:group
:group
“:”可用“.”替換
-R 遞歸
chown [option]... --reference=file1 file2 修改file2所有者與file1相同
修改文件的所屬組
chgrp
用法:
chgrp [option]... group file... file屬於group
chgrp [option]... --reference=file1 file2... file2與file同屬一組
-R 遞歸

文件權限介紹
文件權限主要針對三類對象進行定義:
owner:所有者(u)
group:所屬組(g)
other:其他(o)
每個文件針對每類訪問者都定義了三種權限:
readable:讀權限(r)
writable:寫權限(w)
excutable:執行權限(x)
文件:
r:可使用文件查看類工具獲取其內容
w:可修改其內容
x:可以把此文件提進內核啟動為一個進程
目錄:
r:可以使用ls查看此目錄文件列表
w:可以在此目錄中創建文件,也可以刪除文件
x:可以使用ls -l查看此目錄文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限
規則:
1、普通用戶不能改文件所有者,可以改所屬組(文件所有者是自己,且自己在組裏)
2、目錄dir是一種特殊文件,其內容就是文件列表
刪除文件需要的是對該文件所在的目錄的w權限
3、對目錄來講,沒有x,即使有r,也無法進入目錄,無法查看目錄屬性,無法訪問目錄下文件
4、root對r w不受控制,對x受控制;r w x 對普通用戶有控制
二進制r權限不是必須的
5、用戶獲取權限順序:u-g-o,一旦匹配,不往下執行
6、文件屬性由文件系統決定,不是由操作系統決定

修改文件權限
chmod(change mod)
-R 遞歸修改
修改一類用戶所有權限:
u= g= o= a=
修改一類用戶某個權限:
u+/- g+/- o+/- a+/-
chmod [option]...--reference=file1 file2... 修改file2權限與file1相同

方法1:mode法
chmod who opt per file
who:u g o a(all)
opt:+ - =
per:r w x X(只對目錄加x,如果文件已有x,也對文件加x)
方法2:數字法(八進制授權)
rwx ... ---
111 ... 000
r:4
w:2
x:1
rwx ... ---
7 ... 0

修改默認權限法
默認權限(file:644;dir:755)
umask+default(默認)=file666/dir777(對位相加)
目錄777-umask,文件666-umask
umask真正含義:掩碼
功能:取消對應的權限
例:
666
125
110110110
001010101(逢1取消權限,1->0)
110100010
642
目錄公式不變,文件偶數不變奇數加一

特殊權限
suid(4)(u+s)
繼承程序所有者權限,只適合作用在二進制可執行程序
sgid(2)(g+s)
1)繼承程序所屬組權限
2)作用於目錄,該目錄下新建文件繼承目錄所屬組
Sticky(1)(o+t)
粘滯位,作用在文件夾,此目錄文件只能被所有者刪除

設定文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容(echo 內容 >>file,不能用nano)
lsattr 顯示特定屬性

訪問控制列表
ACL:Access Control List
實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
ACL生效順序:所有者,自定義用戶,自定義組,其他人
setfacl -m u/g:name:rwx file/diretory 針對用戶/組設置文件/目錄權限
-x 刪除用戶/組的文件/目錄權限
setfacl -m mask::rwx file/diretory 設置文件/目錄的mask權限
setfacl -b file/diretory 清空所有ACL權限
-Rm 遞歸設置 -M file.acl 批量設置(引用file.acl文件)
-X file.acl 批量刪除
getfacl -R /tmp/dir1 > acl.txt 備份acl
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt 恢復acl
mask權限
相當於限高桿的作用,是除所有者外的最高權限
ACL文件上的group權限是mask值(自定義用戶、自定義組、擁有組的最大權限),而非傳統的組權限

文本處理工具
文件查看
命令:
cat 查看文本文件
-E 顯示行結束符$
-A 顯示所有控制符
-n 對顯示出的每一行進行編號
-b 非空行編號
-s 壓縮連續空行成一行
tac 反寫cat(下->上)
rev 反寫(右->左)
分頁查看文件內容
命令:
more 分頁查看文件
-d 顯示翻頁及退出提示
less 一頁一頁查看文件或stdin輸出
/文本 搜索文本
n 跳到下一個匹配
N 跳到上一個匹配
less命令是man命令使用的分頁器
顯示文本前或後行內容
命令
head 顯示文件頭(默認前10行)
-c # 指定獲取前#字節
-n # 指定獲取前#行
-# 指定行數
tail 顯示文件尾(默認後10行)
-c# 指定獲取後#字節
-n# 指定獲取後#行
-# 指定行數
-f 顯示文件新追加的內容,常用於日誌監控
-F 跟蹤文件名
tailf類似tail -f,但當文件不增長時並不訪問文件

抽取和合並文本
命令:
cut 取出部分文件(列)
-d 指明分隔符,默認tab
-f# 第#個字段(#可多個,可連續)
-c 按字符切割
paste 合並兩個文件同行號列到一行
-d 指定分隔符,默認用tab
-s 所有行合成一行顯示

分析文本
收集文本統計數據:
wc 顯示文件行、單詞、字節、字符數
-l 只計數行數
-w 只計數單詞總數
-c 只計數字節總數
-m 只計數字符總數
-L 顯示文件中最長行的長度
文本排序:
sort 文本排序顯示(取列排序)
-r 執行反方向(上至下)整理
-R 隨機排序
-n 按數字大小整理
-f 忽略字符串中字符的大小寫
-u 刪除輸出中的重復行
-t c 使用c做為字段的界定符
-k 3 按第3列排序
刪除重復行:
uniq 刪除重復行
-c 顯示每行重復的次數
-d 僅顯示重復過的行
-u 僅顯示不曾重復的行
註:連續且完全相同的即為重復
比較文件
diff 比較文件不同,命令的輸出被保存在一種叫“補丁”的文件中
-u 輸出“統一的”diff格式文件,最適用於補丁文件
patch 復制在其它文件中進行的改變(慎用)
-b 自動備份改變了的文件

linux文本處理三劍客
grep:文本過濾工具(模式:pattern)
打印特定的行
三個變種:grep,egrep(支持擴展正則表達式),fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具
awk:linux上的實現gawk,文本報告生成器

grep
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢
查;打印匹配到的行
模式:由正則表達式字符及文本字符所編寫的過濾條件
grep 打印匹配到的行
--color=auto: 對匹配到的文本著色顯示
-v 顯示沒被pattern匹配到的行
-i 忽略字符大小寫
-n 顯示匹配的行號
-c 統計匹配的行數
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
-A # 多顯示後#行(After)
-B # 多顯示前#行(Before)
-C # 多顯示前後各#行(context)
-e 實現多個選項間的邏輯or關系
-w 匹配整個單詞(數字字母下劃線都算是單詞的一部分)
-f 引用文件內容匹配
-E 使用ERE,使用擴展模式
-F 相當於fgrep,不支持正則表達式

正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:
grep,sed,awk,vim,less,nginx,varnish等
分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE(grep -E,egrep)
正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
元字符分類:
字符匹配、匹配次數、位置錨定、分組
查看幫助:
man 7 regex

基本正則表達式元字符
正則表達式元字符匹配的是字符串(通配符匹配的是文件名)
/ 轉義符
字符匹配:
. 匹配任意單個字符(.轉義為 .;[.]也表示.)
[] 匹配指定範圍內的任意單個字符
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 任意大小寫字符,[A-Z,a-z]
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 空白字符,空格和制表符
[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字
[:xdigit:] 十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數:
用在要指定次數的字符後面,用於指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次(貪婪模式:盡可能長的匹配)
.* 任意長度的任意字符
\? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
位置錨定:
定位出現的位置
^ 行首錨定,用戶模式的最左側
$ 行尾錨定,用於模式的最右側
^PATTERN$ 用於模式匹配整行:
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 詞首錨定,用於單詞模式的左側
\> 或 \b 詞尾錨定,用於單詞模式的右側
\<PATTERN\> 匹配整個單詞
分組:
() 將一個或多個字符捆綁在一起,當作一個整體進行處理,如:(root)+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名方式為: \1, \2, \3, ...
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
示例:(string1+(string2))
\1 :string1+(string2)

\2 :string2
後向引用:引用前面的分組括號中的模式所匹配的字符結果,而非模式本身
或者:|
示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

egrep及擴展的正則表達式
egrep = grep -E
擴展正則表達式的元字符
字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
次數匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{n,m} 至少n,至多m次
位置錨定:
^ 行首
$ 行尾
\<, \b 語首
\>, \b 語尾
分組:
()
後向引用:
\1, \2, ...
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat

vim簡介
vi:Visual Interface(虛擬接口),文本編輯器
文本:ASCII,Unicode
文本編輯種類:
行編輯器:sed
全屏編輯器:nano,vi(vim -Vi Improved)
nano,vi 單個編輯
sed 批量編輯
其他編輯器:
gedit 一個簡單的圖形編輯器
gvim 一個Vim編輯器的圖形版本
打開文件
vim [option]... file...
+# 打開文件後,讓光標處於第#行的行首,+默認行尾
+/PATTERN 打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首
-b 二進制方式打開文件
-d 比較多個文件
-m 只讀打開文件
ex file|vim -e 直接進入ex模式
如果文件存在,文件被打開並顯示內容
如果文件不存在,當編輯後第一次存盤是創建文件
Vim模式
vim是一個模式編輯器
擊鍵行為是依賴於vim的模式
三種模式:
命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本
插入(Insert)或編輯模式:修改文本
擴展命令(extended command)模式:保存,退出等
Esc鍵 退出當前模式(總是返回到命令模式)

模式和轉換
命令模式:
字符間光標跳轉:
h左,l右,j下,k上
#command:跳轉#個數的字符
單詞間跳轉:
w下一個單詞首,e當前或下個單詞尾,b當前或前個單詞首
#command:跳轉#個數的單詞
當前頁跳轉:
H頁首,M頁中間行,L頁底
行首、尾跳轉
^跳轉至行首的第一個非空字符
0跳轉至行首
$跳轉至行尾
行間移動:
#G、擴展模式:跳轉至#行
G最後一行
1G,gg第一行
句間移動:
)下一句
(上一句
段落間移動:
}下一段
{上一段
翻屏操作:
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
操作:
字符編輯:
x刪除光標處字符
#x刪除光標處起始#個字符
xp交換光標所在處字符與其後面字符位置
~轉換大小寫
J刪除當前行後的換行符
替換:
r(replace)替換光標所在處的字符
R切換成替換(REPLACE)模式
刪除:
d刪除命令,可結合光標跳轉字符,實現範圍刪除
d$刪除到行尾
d^刪除到非空行首
d0刪除到行首
dw刪除到下個單詞首
de刪除到當前或下個單詞尾
db刪除到當前或上個單詞首
#command指定#個
dd刪除光標所在行
#dd多行刪除
D從當前光標位置一直刪除到行尾,留空行,等同於d$
復制:
y復制,行為相似於d命令
($,0,^,e,w,b,#command)
yy復制行
#yy復制多行
Y復制整行
粘貼
p(paste)緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處後面
P整行,粘貼當前光標所在行上方;否則,粘貼至當前光標所在處前面
撤銷更改:
u撤銷最近更改
#u撤銷#次更改
U撤銷光標落在這行後所有此行的更改
ctrl+r重做最後的“撤銷”更改
.重復前一個操作
n.重復前一個操作n次
關閉文件:
ZZ 保存退出
ZQ 不保存退出

命令模式-->插入模式
改變模式:
c(change)修改後切換成插入模式
($,^,0,b,e,w,#command)
cc刪除當前行並輸入新內容
#cc刪除#行並輸入新內容
C刪除當前光標到行尾,並切換成插入模式
i insert,在光標所在處輸入
I 在當前光標所在行的行首輸入
a append,在光標所在處後面輸入
A 在當前光標所在行的行尾輸入
o 在當前光標所在行的下方打開一個新行
O 在當前光標所在行的上方打開一個新行
插入模式-->命令模式
ESC

命令模式-->擴展命令模式
按“:”進入Ex模式
創建一個命令提示符,處於底部的屏幕左側
w 寫(存)磁盤文件
wq 寫入並退出
x 寫入並退出
q 退出
q! 不存盤退出
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另一個文件
!command 執行命令
r!command 讀入命令的輸出
地址定界:
#具體第#行
#,#從左側#表示起始行,到右側#表示結尾行
#,+#從左側#表示起始行,加上右側#的行數
.當前行
$最後一行
%全文,相當於1,$
/pat1/,/pat2/從匹配到pat1的行開始,到第一次匹配到pat2行結束
#,/pat/從#行開始到pat
/pat/,$從pat到最後一行
後跟一個編輯命令
d刪除所選範圍
y復制所選範圍
w file將範圍內的行另存為file
r file在範圍內插入指定文件中的所有內容
查找
/PATTERN從當前光標所在處向文件尾部查找
?PATTERN從當前光標所在處向文件首部查找
n與命令同方向
N與命令反方向
查找並替換
s在擴展模式下完成查找替換操作
格式
s/查找內容/替換內容/修飾符
查找內容:可使用模式
替換內容:不能使用模式,但可以使用\1,\2...後向引用符號;還可以使用“&”引用前面查找時查找到的整個內容
修飾符:
i忽略大小寫
g全局替換;每行只替換第一次出現
gc全局替換,每次替換前詢問
查找替換中的分隔符“/”可替換成其他字符
擴展命令模式-->命令模式
ESC,enter

vim的寄存器
26個命名寄存器(a,b,...z),1個無命名寄存器,長存放在不同的剪貼板內容,可以不同會話間共享
格式:
#+"寄存器+命令
如:3"tyy表示復制3行到t寄存器;"tp表示將t寄存器內容粘貼
未指定,將使用無命名寄存器
有10個數字寄存器,用0,1,...9表示,0存放最近復制內容,1存放最近刪除內容。當新文本變更和刪除時,1轉存到2,2轉存到3,以此類推。數字寄存器不能在不同會話間共享

編輯二進制文件
vim -b binaryfile 以二進制方式打開(二進制文件)
擴展模式下:
%!xxd 轉換成十六進制
%!xxd -r 轉換回二進制

可視化模式
允許選擇的文本塊
v面向字符
V面向行
ctrl-v面向塊
可視化鍵可以用於與移動鍵結合使用:
w,),},箭頭等
突出顯示的文件可被刪除,復制,變更,過濾,搜索,替換等

多文件模式
vim file1 file2 file3...
next下一個
prev前一個
first第一個
last最後一個
wall保存所有
qall退出所有
wqall保存退出所有

多窗口模式
多文件:
vim -o file1 file2 水平分屏file1和file2
vim -O file1 file2 垂直分屏file1和file2
窗口間切換:ctrl+w,Arrow
單文件:
ctrl+w,s(split)水平分屏
ctrl+w,v(vertical)垂直分屏
ctrl+w,q取消相鄰窗口
ctrl+w,o取消全部窗口
wqall保存退出全部

定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
個人:~/.vimrc
擴展模式:當前vim進程有效
(1)行號
顯示:set number, 簡寫為set nu
取消顯示:set nonumber, 簡寫為set nonu
(2)忽略字符的大小寫
啟用:set ic
不忽略:set noic
(3)自動縮進
啟用:set ai
禁用:set noai
(4)智能縮進
啟用:set smartindent 簡寫 set si
禁用:set nosi
(5)高亮搜索
啟用:set hlsearch
禁用:set nohlsearch
(6)語法高亮
啟用:syntax on
禁用:syntax off
(7)顯示Tab和換行符 (^I 和$顯示)
啟用:set list
禁用:set nolist
(8)文件格式
啟用windows格式:set fileformat=dos
啟用unix格式:set fileformat=unix
簡寫:set ff=dos|unix
(9)設置文本寬度
啟用: set textwidth=65 (vim only)
禁用: set wrapmargin=15
(10)設置光標所在行的標識線
啟用:set cursorline,簡寫cul
禁用:set no cursorline
(11)復制保留格式
啟用: set paste
禁用: set nopaste

linux學習筆記2.0