前言0 n" c8 P6 \4 s; b
' M* u0 G# d4 o' ELinux常用命令中,除了cat还有很多其他用于文本查看的命令。本文将简单介绍一下这些文本查看的命令。
" X7 ]5 u8 v" b1 X$ S+ [5 h全文本显示--cat, s, M; c! H+ S
' E+ ^1 D7 p2 V. s0 |/ Ucat可能是常用的一个文本查看命令了,使用方法也很简单:- g- c7 [& C7 e7 D7 j
cat file #全文本显示在终端
! P$ g3 {& W W m& zcat -n file #显示全文本,并显示行号; C5 w& \2 L9 ^9 U4 u" d
另外,cat也可用作合并文件:
# Q- j5 w5 F( j, ?2 P1 H. Lcat file1 file2 >file3. X# j0 B' Q* W) K% Y
该命令将file1 file2的内容合并写到file3中。
% T( N& B, k' s. ]) o- D倒序显示全文本--tac
8 o* V6 i& ~, E% `' m
0 K1 F" \* v( }( o' v+ Mtac是cat倒过来的写法,tac以行为单位,倒序显示全文本内容。
! c. e4 j% i4 y* Q9 Ttac file5 W, z& L) e8 j2 U, j, o: ^" k, h
分页显示文本--more6 r% s( l Q; F( ?( m b4 H
3 T! h7 e8 L9 O$ T
cat将整个文本内容输出到终端。那么也就带来一个问题,如果文本内容较多,前面的内容查看将十分不便。而more命令可以分页显示。% R* x$ q1 `% \; _. [+ z5 `
1.显示内容
5 y! i' p4 b! x0 Z# u) mmore file. \; [0 ]* h& B/ W; X1 F6 i1 I
之后,就可以使用按键来查看文本。常用按键如下:
5 Z) r5 S/ E0 G1 p, z回车 #向下n行,默认为1行
) Q8 F' F6 c( i T! f2 `空格 #向下滚动一屏
7 K5 E6 N$ F% o) {5 [& gb #向上滚动一屏5 b T# n) V3 C; j+ R( j) n/ r9 S8 f
= #输出当前行号
2 @0 C3 x4 ~7 ?$ n0 {:f #输出当前文件名和当前行号6 S6 Y) c) S/ ~! _, X
q #退出# o( D* }4 f: G/ x8 B. G. z+ q$ ^
2.从指定行开始显示
0 a) ~1 e- _# tmore +10 file7 K- b- B v) N
该命令从第10行开始显示file的内容。
0 x) @- ^7 g0 W* n4 a& g' k3.从匹配的字符串行开始显示2 T9 m7 X6 ^' M' t4 f5 ^$ C1 o
more +/string file
0 R- c/ L0 G7 H h该命令从有string的行的前两行开始file的内容。! l* B0 |- O* o5 D
任意浏览搜索文本--less; @5 b' s' J a9 ?
0 V9 ~! H! w- H6 D- {6 L
less命令的基本功能和more没有太大差别,但是less命令可以向前浏览文件,而more只能向后浏览文件,同时less还拥有更多的搜索功能。
2 j4 Y( t2 T) J常见使用方法:$ D/ |$ d' I& p2 D- G$ c
less file #浏览file
8 E# y& `/ N5 m7 f$ X7 Hless -N file #浏览file,并且显示每行的行号
0 m, u& }0 h6 j2 G; I; [( @less -m file #浏览file,并显示百分比
4 V0 h0 d/ h/ T; b' ~% f- W* B常用按键如下:* r# v* B' Q6 @, @/ r; U
f #向前滚动一屏2 e [5 I$ o% h
b #向后滚动一屏
% ~; m$ a% ^0 ~回车或j #向前移动一行( @9 G7 h0 c' W K% A
k #向后移动一行& E/ A- E4 i" S) t6 h {
G #移动到最后一行. q* m6 C, T( g
g #移动到第一行) j8 s* [' i0 |
/string #向下搜索string,n查看下一个,N查看上一个结果% V/ `2 Y4 j: ?5 J) L7 i$ ^0 O5 L
?string #向上搜索string,n查看下一个,N查看上一个结果* I5 j; `* `7 a7 N ^
q #退出* L6 X' Q3 S7 w
相比more命令,less命令能够搜索匹配需要的字符串。
6 m! Q! }8 I/ w, d另外,less还能在多个文件间切换浏览:5 S/ q' g- b4 `* x& l' |) w. H w" \, X
less file1 file2 file3
: T' D: ?: }: ]) W( R:n #切换到下一个文件: T" K) x/ y3 J! Y- x/ b0 U/ D( i
:p #切换到上一个文件
1 |) R) r x4 ? r:x #切换到第一个文件
2 e; H, M3 z, C. Y& B( r:d #从当前列表移除文件) b& F* G/ r2 r# M; s
显示文本头部内容--head W" N% i8 u2 z$ y4 W! l: v i
4 Y7 ~! T8 x( d" `head命令的作用就像它的名字一样,用于显示文件的开头部分文本。2 J7 p4 u/ `! ?% ?& T1 B
常见用法如下:
0 \% N/ v+ ^8 Y, G; Ihead -n 100 file #显示file的前100行
) m, ?, d7 s- e( r V% _ shead -n -100 file #显示file的除最后100行以外的内容。
" z/ \! J" t. ^: R; X T显示文本尾部内容--tail
+ B: v, T" J; ^ e+ R7 ]/ y, |
' }4 a$ |% _4 m/ r1 k# M, N2 }' [; \和head命令类似,只不过tail命令用于读取文本尾部部分内容:7 i, D3 a5 D! n6 R
tail -100 file #显示file最后100行内容
- F2 A2 ^/ X: x) Mtail -n +100 file #从第100行开始显示file内容 2 O2 D5 C% ]4 U: u" z
tail还有一个比较实用的用法,用于实时文本更新内容。比如说,有一个日志文件正在写,并且实时在更新,就可以用命令:
" w5 U- i2 f# j4 f# }* D1 a: \tail -f logFile
3 ~9 U% t+ M$ f9 {对于更新的日志内容,会实时打印到终端上,方面查看实时日志。6 l6 B6 X5 b' t* u* o
指定顺序显示文本--sort3 D7 Q& L) e e3 j
' S( [+ c- R3 L$ m$ K4 G% B
sort可用于对文本进行排序并显示,默认为字典升序。
6 `1 x' X* M/ m+ K0 t例如有一段文本test.txt内容如下:
[2 }. w6 Y P' p6 k4 l8 uvim
( B1 l, d A8 U! \! \$ jcount
5 X. Y# ^. f$ H( Y: Y- ?! q% Dfail$ O5 ~: F% d0 i, M5 o% Z. \* r/ }
help
6 A+ K8 h' \, |: h! whelp" _; Y1 I8 W* G* \( `7 ^
dead0 }5 ^" V- p/ B
apple
W2 [$ h. I7 m6 S# P6 S% H9 s9 J& {1.升序显示文本
( L$ }- _8 v$ H7 G" `0 _1 K使用命令: l/ k0 |- |6 N& T
sort test.txt
& _: S) q9 A8 o+ @: `apple5 A+ V" i# ~! D- Z* \0 h8 n+ Z$ q
count
- M) L+ z( [9 e# t# Wdead
+ D% }* k! ]* nfail
- H# L9 L& w1 C1 Hhelp# m: m' i( E C' g( l5 \9 M
help4 V2 A1 }2 S0 f! I: ?/ m% k$ w Z# u: L, }
vim
9 }8 e6 w. x+ k- A4 W5 |! p" y文本内容将以升序显示。: H$ _1 u, A6 d' h4 b& I
2.降序显示$ }6 K n! Z% L
相关参数-r:
6 P# y/ H1 ]3 gsort -r test.txt
, X! k! x4 U( g. ~5 S, [3 i" Qvim
( W' J& F$ y k# _! mhelp6 e" F, I6 D1 x* _
help1 h- g- c! D+ W" `
fail4 @/ u M3 J% S4 u; R
dead
; {- Z7 r3 {& z" Acount
0 `1 I* ^* N- G2 f( }; s1 N4 i3 Sapple
7 m- y; }' q u3 m% d* T' S/ L3.去掉重复的行3 \8 }' q2 ]2 L- _, s* U" h" v) y
我们可以观察到,前面的help有两行,如果我们不想看到重复的行呢?可以使用参数-u,例如:
2 ^+ U. l5 u/ K4 |+ Y, usort -u test.txt( W2 i) t9 i$ W& f0 V
apple
0 P) f4 {* L* S. Z Qcount
+ V' q! J( c0 ?8 `3 n& _dead5 m% c7 ?" P9 f5 j& l1 x. Y
fail
6 u- o* ]% z) k! W, i$ Ghelp
% m" g* { v& u* o; ~8 b1 ~vim. k5 I9 W# U' l3 M0 G. o# o
可以看到help行不再重复显示。" H, Y, ^# L+ m: S' `( S4 J1 d! T
4.按照数字排序& X4 R0 n+ \0 F" Z1 o- V c$ c0 {
如果按照字典排序,10将会在2的前面,因此我们需要按照数字大小排序:5 u; G8 n4 ]! o, z5 |' u8 \
sort -n file! m4 [, x8 r( c2 C
由于本文篇幅有限,不在本文展开介绍,后续将单独介绍sort命令的妙用。
, N! z+ x* s1 O$ K) o0 e$ H过滤显示文本--sed+ Q5 h1 N; l; W
+ |0 J4 n( D* [' J! Q% m
sed是一个流编辑器,功能非常强大,但本文只介绍文本查看相关功能。
, F9 q6 ]2 X* [1 @' Q/ V1.显示匹配关键字行
. o& f( p% l9 x6 s# M有时候查看日志,可能只需要查看包含某些关键字的日志行:
' v N- i5 s! o' v" D& s2 Ased -n "/string/p" logFile
9 \9 o5 R0 G, o, Z上面的命令表示打印包含string的行。$ Q# G7 r+ G) c$ j
2.打印指定行
( I n9 l, u# q: Msed -n "1,5p" logFile #打印第1到5行
@0 v4 V2 s. o) S9 H5 F2 Jsed -n '3,5{=;p}' logFile #打印3到5行,并且打印行号
6 i( c: W( J: ]# Tsed -n "10p" logFIle #打印第10行7 {# p" w" u! Q! K7 M
去重显示文本--uniq
: x: R+ M& H0 d8 [3 U, N& f: k( _! r2 f$ ]6 _4 z& i3 y2 C$ t
常见用法如下:9 i& `* P9 ~$ e% j
uniq file #去除重复的行9 p0 }9 u! I. b$ i7 G! m
uniq -c file #去除重复的行,并显示重复次数3 e( l$ ?. h; O f
uniq -d file #只显示重复的行
, _' G) D1 T9 [7 k8 Z; T* huniq -u file #只显示出现一次的行3 P" `1 z5 y/ ?* c/ o
uniq -i file #忽略大小写,去除重复的行$ Q+ `+ s% G+ E8 L0 @2 j1 Z3 X+ [
uniqe -w 10 file #认为前10个字符相同,即为重复
/ D: B5 b; J! B" A9 _文本编辑查看--vi
2 i/ s# v7 A+ ]0 T/ P
' K. A, ]" m; R! A/ x- b: a查看文件也很简单:3 _; [" R: Z& V0 ?( _2 p
vi file, R, ?. y2 [* X. D
而从vi发展出来的被誉为编辑器之神的vim有着更加强大的功能,这里不作展开。. l- c$ h. S. `, e- s' d
总结
* w& l' r/ l* X- i" x5 P
; T! b7 E2 [& v( k4 I: ~3 }文本查看命令较多,可根据使用场景不同选择使用不同的命令。有些命令的用法较多,本文仅介绍经典用法,更多用法可使用man命令查看。很多命令可以结合其他命令使用,例如ps -elf|more,分页显示进程信息等等,更多用法可自行探索。/ b0 A: F# d" Y1 O* T1 L
|