Linux查看文件头命令:head

head –help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost Linux_Test]# head --help
用法:head [选项]... [文件]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[-]K print the first K bytes of each file;
with the leading '-', print all but the last
K bytes of each file
-n, --lines=[-]K print the first K lines instead of the first 10;
with the leading '-', print all but the last
K lines of each file
-q, --quiet, --silent 不显示包含给定文件名的文件头
-v, --verbose 总是显示包含给定文件名的文件头
--help 显示此帮助信息并退出
--version 显示版本信息并退出

K 后面可以跟乘号:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, 对于T, P, E, Z, Y 同样适用。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告head 的翻译错误
要获取完整文档,请运行:info coreutils 'head invocation'
[root@localhost Linux_Test]#

head -n 行数

head默认只选择10 行, 加上-n 选项可以选择行数
显示文件ab.c 中前 15 行:

1
head n 15 ab.c

显示三个文件各自的前23 行共显示 69 行

1
head n 23 a.c b.c c.c | more

Linux字节打印命令od

od octal dump 逐字节打印( c, t c, t x1 t d1, t u1 选项)

od –help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
[root@localhost Linux_Test]# od --help
用法:od [选项]... [文件]...
 或:od [-abcdfilosx]... [文件] [[+]偏移量[.][b]]
 或:od --traditional [选项]... [文件] [[+]偏移量[.][b] [+][标签][.][b]]

将指定文件以八进制形式(默认)转储到标准输出。如果指定了多于一个的文件
参数,程序会自动将输入的内容整合为列表并以同样的形式输出。
如果没有指定文件,或指定文件为"-",程序从标准输入读取数据。

If first and second call formats both apply, the second format is assumed
if the last operand begins with + or (if there are 2 operands) a digit.
An OFFSET operand means -j OFFSET. LABEL is the pseudo-address
at first byte printed, incremented when dump is progressing.
For OFFSET and LABEL, a 0x or 0X prefix indicates hexadecimal;
suffixes may be . for octal and b for multiply by 512.

Mandatory arguments to long options are mandatory for short options too.
-A, --address-radix=RADIX output format for file offsets; RADIX is one
of [doxn], for Decimal, Octal, Hex or None
-j, --skip-bytes=BYTES skip BYTES input bytes first
-N, --read-bytes=BYTES limit dump to BYTES input bytes
-S BYTES, --strings[=BYTES] output strings of at least BYTES graphic chars;
3 is implied when BYTES is not specified
-t, --format=TYPE select output format or formats
-v, --output-duplicates do not use * to mark line suppression
-w[BYTES], --width[=BYTES] output BYTES bytes per output line;
32 is implied when BYTES is not specified
--traditional accept arguments in third form above
--help 显示此帮助信息并退出
--version 显示版本信息并退出


Traditional format specifications may be intermixed; they accumulate:
-a same as -t a, select named characters, ignoring high-order bit
-b same as -t o1, select octal bytes
-c same as -t c, select printable characters or backslash escapes
-d same as -t u2, select unsigned decimal 2-byte units
-f 即 -t fF,指定浮点数对照输出格式
-i 即 -t dl,指定十进制整数对照输出格式
-l 即 -t dL,指定十进制长整数对照输出格式
-o 即 -t o2,指定双字节单位八进制数的对照输出格式
-s 即 -t d2,指定双字节单位十进制数的对照输出格式
-x 即 -t x2,指定双字节单位十六进制数的对照输出格式


TYPE is made up of one or more of these specifications:
a named character, ignoring high-order bit
c printable character or backslash escape
d[尺寸] 有符号十进制数,每个整形数占指定尺寸的字节
f[尺寸] 浮点数,每个整形数占指定尺寸的字节
o[尺寸] 八进制数,每个整形数占指定尺寸的字节
u[尺寸] 无符号十进制数,每个整形数占指定尺寸的字节
x[尺寸] 十六进制数,每个整形数占指定尺寸的字节

SIZE is a number. For TYPE in [doux], SIZE may also be C for
sizeof(char), S for sizeof(short), I for sizeof(int) or L for
sizeof(long). If TYPE is f, SIZE may also be F for sizeof(float), D
for sizeof(double) or L for sizeof(long double).

Adding a z suffix to any type displays printable characters at the end of
each output line.


BYTES is hex with 0x or 0X prefix, and may have a multiplier suffix:
b 512
KB 1000
K 1024
MB 1000*1000
M 1024*1024
and so on for G, T, P, E, Z, Y.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告od 的翻译错误
要获取完整文档,请运行:info coreutils 'od invocation'
[root@localhost Linux_Test]#

示例

od:八进制打印

1
2
3
4
5
6
7
8
[root@localhost Linux_Test]# od date_test.txt 
0000000 030062 030062 030055 026461 032062 030040 035064 032460
0000020 030072 005066 030062 030462 032057 031057 005065
0000036
[root@localhost Linux_Test]# cat date_test.txt
2020-01-24 04:05:06
2021/4/25
[root@localhost Linux_Test]#

od -c:按字符打印

1
2
3
4
5
[root@localhost Linux_Test]# od -c date_test.txt 
0000000 2 0 2 0 - 0 1 - 2 4 0 4 : 0 5
0000020 : 0 6 \n 2 0 2 1 / 4 / 2 5 \n
0000036
[root@localhost Linux_Test]#

od -t x:单字节十六进制打印

1
2
3
4
5
[root@localhost Linux_Test]# od -x date_test.txt 
0000000 3032 3032 302d 2d31 3432 3020 3a34 3530
0000020 303a 0a36 3032 3132 342f 322f 0a35
0000036
[root@localhost Linux_Test]#

od -t x1:单字节十六进制打印

1
2
3
4
5
[root@localhost Linux_Test]# od -t x1 date_test.txt 
0000000 32 30 32 30 2d 30 31 2d 32 34 20 30 34 3a 30 35
0000020 3a 30 36 0a 32 30 32 31 2f 34 2f 32 35 0a
0000036
[root@localhost Linux_Test]#

od -t x2或者od -x:双字节十六进制打印

1
2
3
4
5
[root@localhost Linux_Test]# od -x date_test.txt 
0000000 3032 3032 302d 2d31 3432 3020 3a34 3530
0000020 303a 0a36 3032 3132 342f 322f 0a35
0000036
[root@localhost Linux_Test]#

od -t d[尺寸]:有符号十进制数

这里的尺寸是一个整型数,每个整型数占指定尺寸的字节。

od -t d1

1
[root@localhost Linux_Test]# od -t d1 date_test.txt |less

输出结果:

1
2
3
4
0000000   50   48   50   48   45   48   49   45   50   52   32   48   52   58   48   53
0000020 58 48 54 10 50 48 50 49 47 52 47 50 53 10
0000036
(END)

od -t u[尺寸]:无符号十进制整数打印

1
[root@localhost Linux_Test]# od -t u1 date_test.txt |less

输出结果:

1
2
3
4
0000000  50  48  50  48  45  48  49  45  50  52  32  48  52  58  48  53
0000020 58 48 54 10 50 48 50 49 47 52 47 50 53 10
0000036
(END)

echo 字符|od t x1:使用od命令查看字符的ASCII编码

echo a|od -t o1:显示字符a的八进制ASCII编码

1
2
3
[root@localhost Linux_Test]# echo a|od -t o1
0000000 141 012
0000002

注意,第一个数141才是字符a的八进制ASCII编码,后面的012是换行符的ASCII编码。

echo a|od -t d1:显示字符a的十进制ASCII编码

1
2
3
[root@localhost Linux_Test]# echo a|od -t d1
0000000 97 10
0000002

echo a|od -t x1:显示字符a的十六进制ASCII编码

1
2
3
4
[root@localhost Linux_Test]# echo a|od -t x1
0000000 61 0a
0000002
[root@localhost Linux_Test]#

od结合more、less使用

安装软件包

先安装epel-release软件包

很多软件包在yum里面没有的,解决的方法,就是使用epel源,也就是安装epel-release软件包。EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS等系统。

安装xclip

1
yum install xclip

安装xsel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
依赖关系解决

================================================================================================================================================
Package 架构 版本 源 大小
================================================================================================================================================
正在安装:
libX11-devel aarch64 1.6.7-3.el7_9 updates 981 k
libXmu-devel aarch64 1.1.2-2.el7 base 24 k
为依赖而安装:
libICE aarch64 1.0.9-9.el7 base 63 k
libICE-devel aarch64 1.0.9-9.el7 base 50 k
libSM aarch64 1.2.2-2.el7 base 38 k
libSM-devel aarch64 1.2.2-2.el7 base 12 k
libX11 aarch64 1.6.7-3.el7_9 updates 582 k
libX11-common noarch 1.6.7-3.el7_9 updates 164 k
libXau aarch64 1.0.8-2.1.el7 base 29 k
libXau-devel aarch64 1.0.8-2.1.el7 base 14 k
libXext aarch64 1.3.3-3.el7 base 37 k
libXext-devel aarch64 1.3.3-3.el7 base 74 k
libXmu aarch64 1.1.2-2.el7 base 68 k
libXt aarch64 1.1.5-3.el7 base 157 k
libXt-devel aarch64 1.1.5-3.el7 base 445 k
libxcb aarch64 1.13-1.el7 base 210 k
libxcb-devel aarch64 1.13-1.el7 base 1.1 M
xorg-x11-proto-devel noarch 2018.4-1.el7 base 280 k

事务概要
================================================================================================================================================
安装 2 软件包 (+16 依赖软件包)

参考资料

https://blog.csdn.net/you_you0329/article/details/108243871

Linux系统中的命令less

less is more

  • 回退浏览的功能更强
  • 可直接使键盘的上下箭头键,或者j,k,类似vi的光标定位键,以及PgUp,PgDn,Home,End键

有的Unix系统不提供less命令,但是可利用more命令的增强功能。

less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容,不同之处在于,使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
不仅如此,为了方面用户浏览文本内容,less 命令还提供了以下几个功能:

  • 使用光标键可以在文本文件中前后(左后)滚屏;
  • 用行号或百分比作为书签浏览文件;
  • 提供更加友好的检索、高亮显示等操作;
  • 兼容常用的字处理程序(如 Vim、Emacs)的键盘操作;
  • 阅读到文件结束时,less 命令不会退出;
  • 屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。

less –help

输入less --help或者less -?可查看less的帮组文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
                  SUMMARY OF LESS COMMANDS

Commands marked with * may be preceded by a number, N.
Notes in parentheses indicate the behavior if N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.

h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------

MOVING

e ^E j ^N CR * Forward one line (or N lines).
y ^Y k ^K ^P * Backward one line (or N lines).
f ^F ^V SPACE * Forward one window (or N lines).
b ^B ESC-v * Backward one window (or N lines).
z * Forward one window (and set window to N).
w * Backward one window (and set window to N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to N).
u ^U * Backward one half-window (and set half-window to N).
ESC-) RightArrow * Left one half screen width (or N positions).
ESC-( LeftArrow * Right one half screen width (or N positions).
F Forward forever; like "tail -f".
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------

SEARCHING

/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
n * Repeat previous search (for N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&pattern * Display only matching lines
---------------------------------------------------
A search pattern may be preceded by one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
---------------------------------------------------------------------------

JUMPING

g < ESC-< * Go to first line in file (or line N).
G > ESC-> * Go to last line in file (or line N).
p % * Go to beginning of file (or N percent into file).
t * Go to the (N-th) next tag.
T * Go to the (N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F <c1> <c2> * Find close bracket <c2>.
ESC-^B <c1> <c2> * Find open bracket <c1>
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (N-th) close bracket in the bottom line.

m<letter> Mark the current position with <letter>.
'<letter> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------

CHANGING FILES

:e [file] Examine a new file.
^X^V Same as :e.
:n * Examine the (N-th) next file from the command line.
:p * Examine the (N-th) previous file from the command line.
:x * Examine the first (or N-th) file from the command line.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------

MISCELLANEOUS COMMANDS

-<flag> Toggle a command line option [see OPTIONS below].
--<name> Toggle a command line option, by name.
_<flag> Display the setting of a command line option.
__<name> Display the setting of an option, by name.
+cmd Execute the less cmd each time a new file is examined.

!command Execute the shell command with $SHELL.
|Xcommand Pipe file between current pos & mark X to shell command.
v Edit the current file with $VISUAL or $EDITOR.
V Print version number of "less".
---------------------------------------------------------------------------

OPTIONS

Most options may be changed either on the command line,
or from within less by using the - or -- command.
Options may be given in one of two forms: either a single
character preceded by a -, or a name preceded by --.

-? ........ --help
Display help (from command line).
-a ........ --search-skip-screen
Search skips current screen.
-A ........ --SEARCH-SKIP-SCREEN
Search starts just after target line.
-b [N] .... --buffers=[N]
Number of buffers.
-B ........ --auto-buffers
Don't automatically allocate buffers for pipes.
-c -C .... --clear-screen --CLEAR-SCREEN
Repaint by clearing rather than scrolling.
-d ........ --dumb
Dumb terminal.
-D [xn.n] . --color=xn.n
Set screen colors. (MS-DOS only)
-e -E .... --quit-at-eof --QUIT-AT-EOF
Quit at end of file.
-f ........ --force
Force open non-regular files.
-F ........ --quit-if-one-screen
Quit if entire file fits on first screen.
-g ........ --hilite-search
Highlight only last match for searches.
-G ........ --HILITE-SEARCH
Don't highlight any matches for searches.
--old-bot
Revert to the old bottom of screen behavior.
-h [N] .... --max-back-scroll=[N]
Backward scroll limit.
-i ........ --ignore-case
Ignore case in searches that do not contain uppercase.
-I ........ --IGNORE-CASE
Ignore case in all searches.
-j [N] .... --jump-target=[N]
Screen position of target lines.
-J ........ --status-column
Display a status column at left edge of screen.
-k [file] . --lesskey-file=[file]
Use a lesskey file.
-K --quit-on-intr
Exit less in response to ctrl-C.
-L ........ --no-lessopen
Ignore the LESSOPEN environment variable.
-m -M .... --long-prompt --LONG-PROMPT
Set prompt style.
-n ........ --line-numbers
Don't use line numbers.
-N ........ --LINE-NUMBERS
Use line numbers.
-o [file] . --log-file=[file]
Copy to log file (standard input only).
-O [file] . --LOG-FILE=[file]
Copy to log file (unconditionally overwrite).
-p [pattern] --pattern=[pattern]
Start at pattern (from command line).
-P [prompt] --prompt=[prompt]
Define new prompt.
-q -Q .... --quiet --QUIET --silent --SILENT
Quiet the terminal bell.
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
Output "raw" control characters.
-s ........ --squeeze-blank-lines
Squeeze multiple blank lines.
-S ........ --chop-long-lines
Chop (truncate) long lines rather than wrapping.
-t [tag] .. --tag=[tag]
Find a tag.
-T [tagsfile] --tag-file=[tagsfile]
Use an alternate tags file.
-u -U .... --underline-special --UNDERLINE-SPECIAL
Change handling of backspaces.
-V ........ --version
Display the version number of "less".
-w ........ --hilite-unread
Highlight first new line after forward-screen.
-W ........ --HILITE-UNREAD
Highlight first new line after any forward movement.
-x [N[,...]] --tabs=[N[,...]]
Set tab stops.
-X ........ --no-init
Don't use termcap init/deinit strings.
-y [N] .... --max-forw-scroll=[N]
Forward scroll limit.
-z [N] .... --window=[N]
Set size of window.
-" [c[c]] . --quotes=[c[c]]
Set shell quote characters.
-~ ........ --tilde
Don't display tildes after end of file.
-# [N] .... --shift=[N]
Horizontal scroll amount (0 = one half screen width)
........ --no-keypad
Don't send termcap keypad init/deinit strings.
........ --follow-name
The F command changes files if the input file is renamed.
........ --use-backslash
Subsequent options use backslash as escape char.


---------------------------------------------------------------------------

LINE EDITING

These keys can be used to edit text being entered
on the "command line" at the bottom of the screen.

RightArrow ESC-l Move cursor right one character.
LeftArrow ESC-h Move cursor left one character.
ctrl-RightArrow ESC-RightArrow ESC-w Move cursor right one word.
ctrl-LeftArrow ESC-LeftArrow ESC-b Move cursor left one word.
HOME ESC-0 Move cursor to start of line.
END ESC-$ Move cursor to end of line.
BACKSPACE Delete char to left of cursor.
DELETE ESC-x Delete char under cursor.
ctrl-BACKSPACE ESC-BACKSPACE Delete word to left of cursor.
ctrl-DELETE ESC-DELETE ESC-X Delete word under cursor.
ctrl-U ESC (MS-DOS only) Delete entire line.
UpArrow ESC-k Retrieve previous command line.
DownArrow ESC-j Retrieve next command line.
TAB Complete filename & cycle.
SHIFT-TAB ESC-TAB Complete filename & reverse cycle.
ctrl-L Complete filename, list all.

less交互指令

在使用 less 命令查看文件内容的过程中,和 more 命令一样,也会进入交互界面,因此需要读者掌握一些常用的交互指令。

交互指令 功能
/字符串 向下搜索“字符串”的功能。
?字符串 向上搜索“字符串”的功能。
n 重复*前一个搜索(与 / 成 ? 有关)。
N 反向重复前一个搜索(与 / 或 ? 有关)。
b 向上移动一页。
d 向下移动半页。
h 或 H 显示帮助界面。
q 或 Q 退出 less 命令。
y 向上移动一行。
空格键 向下移动一页。
回车键 向下移动一行。
【PgDn】键 向下移动一页。
【PgUp】键 向上移动一页。
Ctrl+f 向下移动一页。
Ctrl+b 向上移动一页。
Ctrl+d 向下移动一页。
Ctrl+u 向上移动半页。
j 向下移动一行。
k 向上移动一行。
G 移动至最后一行。
g 移动到第一行。
ZZ 退出 less 命令。
v 使用配置的编辑器编辑当前文件。
[ 移动到本文档的上一个节点。
] 移动到本文档的下一个节点。
p 移动到同级的上一个节点。
u 向上移动半页。

less选项

选项 选项含义
-N 显示每行的行号。
-S 行过长时将超出部分舍弃。
-e 当文件显示结束后,自动离开。
-g 只标志最后搜索到的关键同。
-Q 不使用警告音。
-i 忽略搜索时的大小写。
-m 显示类似 more 命令的百分比。
-f 强迫打开特殊文件,比如外围设备代号、目录和二进制文件。
-s 显示连续空行为一行。
-b <缓冲区大小> 设置缓冲区的大小。
-o <文件名> 将 less 输出的内容保存到指定文件中。
-x <数字> 将【Tab】键显示为规定的数字空格。

less -N filename:显示行号

如果要 less 显示行号,请使用以下 -N 选项启动程序:

1
less -N filename

less -X filename

默认情况下, less 退出时,将从屏幕中清除文件内容。要在屏幕上保留文件内容,请使用以下 -X 选项:

1
less -X filename
[root@localhost Linux_Test]# less -X date_test.txt 
2020-01-24 04:05:06
2021/4/25
[root@localhost Linux_Test]# 

less +F 日志文件

该 +F 选项告诉 less 您查看文件内容可能会更改。这在打开日志文件时很有用。
less +F /var/log/messages
添加了 +F 选项的 less的表现与 tail -f 命令几乎相同。

less使用示例

命令|less

查看命令历史使用记录并通过less分页显示

1
history | less

ps查看进程信息并通过less分页显示

1
ps -ef |less

查看多个文件

一开始就打开多个文件

方式一,传递多个参数给 less,就能浏览多个文件。

1
less log.txt log.log

在less中使用less查看另一个文件

方式二,正在浏览一个文件时,使用 :e 打开另一个文件。

1
:e file2

当打开多个文件时,使用如下命令在多个文件之间切换

1
2
:n - 浏览下一个文件
:p - 浏览前一个文件

参考资料

http://c.biancheng.net/view/4004.html
https://www.runoob.com/linux/linux-comm-less.html
https://www.linuxidc.com/Linux/2019-08/159901.htm
https://www.yiibai.com/linux/less.html
https://segmentfault.com/a/1190000011653442

Linux中的文本信息(1)

文本文件

  • C语言,Java语言等编程文件的源程序语言
  • 文本格式的数据文件
  • 文本格式的文字信息
  • 程序输出

系统配置信息

  • /etc下的配置文件(功能类似windows的注册表)

Linux中的文本信息(2)

文本型网络协议

  • 因特网大部分传输层以上的协议是文本型协议
  • 会话层协议:HTTP,POP3,SMTP,IMAP,
  • 表示层协议:HTML,XML,MIME

文本文件处理的命令

  • Linux提供大量的文本文件处理的命令
  • 多数命令都有复杂的选项

进程的标准输入/输出

进程的基本概念

  • 进程与程序
    • 程序是个文件,运行之中的程序就是进程。
  • 进程的生命周期

进程的输入输出

  • 标准输入stdin
  • 标准输出stdout

重定向与管道

重定向机制

输出重定向

ls –l > filelist.txt

输入重定向

sort < filelist.txt

管道机制

ls –l | sort
重定向机制和管道机制的重要性

文本文件处理命令的特点(1)

特点

  • 不指定处理对象文件名时,从标准输入获得数据
  • 指定处理对象文件名时,从文件中获取数据
  • 多数命令可以指定多个文件
  • 处理结果在标准输出显示

考虑的因素

  • 标准输入/标准输出
  • shell的文件通配符
  • 输入输出重定向
  • 管道

灵活性:工具命令的组合

  • Linux倾向于提供独立的多个精巧的工具命令,数据格式为文本信息
  • 鼓励使用重定向或管道机制将多个工具命令组合在一起,提供灵活的功能
  • 应用系统设计时,也应该考虑到这些特点
    • 例如:数据库内容的展示,直接输出多列文本,考虑到各种工具软件的使用

示例

输出重定向示例:ls命令

正常情况下的命令会输出在屏幕上(标准输出):

1
2
3
4
5
6
7
8
9
[root@localhost ~]# ls -l
总用量 12
lrwxrwxrwx. 1 root root 15 3月 19 02:30 blog -> /opt/hexo/blog/
drwxr-xr-x. 2 root root 4096 4月 11 17:27 C_Test
lrwxrwxrwx. 1 root root 14 3月 19 21:17 exam -> /opt/hexo/exam
drwxr-xr-x. 2 root root 4096 4月 20 18:21 Linux_Test
lrwxrwxrwx. 1 root root 11 3月 22 02:43 share -> /mnt/files/
drwxr-xr-x. 2 root root 4096 4月 12 02:29 Shell_Test
[root@localhost ~]#

把命令的输出重定向到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# ls -l > ls_out.txt
[root@localhost ~]# ls
blog C_Test exam Linux_Test ls_out.txt share Shell_Test
[root@localhost ~]# cat ls_out.txt
总用量 12
lrwxrwxrwx. 1 root root 15 3月 19 02:30 blog -> /opt/hexo/blog/
drwxr-xr-x. 2 root root 4096 4月 11 17:27 C_Test
lrwxrwxrwx. 1 root root 14 3月 19 21:17 exam -> /opt/hexo/exam
drwxr-xr-x. 2 root root 4096 4月 20 18:21 Linux_Test
-rw-r--r--. 1 root root 0 4月 22 15:08 ls_out.txt
lrwxrwxrwx. 1 root root 11 3月 22 02:43 share -> /mnt/files/
drwxr-xr-x. 2 root root 4096 4月 12 02:29 Shell_Test
[root@localhost ~]#

标准输入重定向示例:sort命令

直接输入sort命令时,sort命令会直接冲标准输入读取要处理的文本。
你可以输入一串数字进行排序,如果想结束输入,则按ctrl+D。
然后sort命令将你输入的内容进行升序排序后输出到屏幕上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# sort
98
87
65
54
32
21

//在此处按下Ctrl+D
21
32
54
65
87
98
[root@localhost ~]#

接下来创建一个文件sortFile.txt,写入上面的数字,然后对该文件中的数字进行排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost Linux_Test]# vim sortFile.txt
[root@localhost Linux_Test]# ls
date_test.txt ls_out.txt sortFile.txt vi_replaceAllTest.txt
[root@localhost Linux_Test]# cat sortFile.txt
98
87
65
54
32
21
[root@localhost Linux_Test]# sort < sortFile.txt
21
32
54
65
87
98
[root@localhost Linux_Test]#

管道示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost Linux_Test]# ls
date_test.txt ls_out.txt sortFile.txt vi_replaceAllTest.txt
[root@localhost Linux_Test]# ls |sort
date_test.txt
ls_out.txt
sortFile.txt
vi_replaceAllTest.txt
[root@localhost Linux_Test]# ls | sort > ls_sort.txt
[root@localhost Linux_Test]# cat ls_sort.txt
date_test.txt
ls_out.txt
ls_sort.txt
sortFile.txt
vi_replaceAllTest.txt
[root@localhost Linux_Test]#

逐屏显示文件的more和less命令

当一个文件内容比较长的的时候,屏幕显示不完全,则通常会使用到more和less命令。

历史

more:最先由BSD UNIX开发
less:Linux上广泛使用

使用方法

more 文件

more shudu.c 指定一个文件

more 多个文件

more *.[ch] 指定多个文件

例如使用more *.txt查看当前目录下的所有.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost Linux_Test]# more *.txt
::::::::::::::
date_test.txt
::::::::::::::
2020-01-24 04:05:06
2021/4/25
::::::::::::::
ls_out.txt
::::::::::::::
总用量 12
lrwxrwxrwx. 1 root root 15 3月 19 02:30 blog -> /opt/hexo/blog/
drwxr-xr-x. 2 root root 4096 4月 11 17:27 C_Test
lrwxrwxrwx. 1 root root 14 3月 19 21:17 exam -> /opt/hexo/exam
drwxr-xr-x. 2 root root 4096 4月 20 18:21 Linux_Test
-rw-r--r--. 1 root root 0 4月 22 15:08 ls_out.txt
lrwxrwxrwx. 1 root root 11 3月 22 02:43 share -> /mnt/files/
drwxr-xr-x. 2 root root 4096 4月 12 02:29 Shell_Test
::::::::::::::
ls_sort.txt
::::::::::::::
date_test.txt
ls_out.txt
--More--(34%)

ls -l | more 指定0个文件
less shudu.c

打印文件内容的cat和od命令

显示文件的头部和尾部的命令head和tail

vmstat命令:了解系统负载

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息。

1
2
3
4
5
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 49160 492020 2017324 0 0 57 15 108 374 10 2 87 0 0
[root@localhost ~]#

vmstat –help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 49160 492020 2017324 0 0 57 15 108 374 10 2 87 0 0
[root@localhost ~]# vmstat --help

Usage:
vmstat [options] [delay [count]]

Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition <dev> partition specific statistics
-S, --unit <char> define display unit
-w, --wide wide output
-t, --timestamp show timestamp

-h, --help display this help and exit
-V, --version output version information and exit

For more details see vmstat(8).
[root@localhost ~]#

vmstat输出字段说明

Procs(进程)

r: 运行队列中进程数量。
b: 等待IO的进程数量

Memory(内存)

swpd: 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小

swap

si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小

io

(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数

system

in: 每秒的硬件中断数(interrupt),包括时钟中断
cs: 每秒上下文切换数。每秒的环境切换次数(context switch)

cpu(以百分比表示)

us: 用户进程执行时间(user time)。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy: 系统进程执行时间(system time)。sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
id: 空闲时间(包括IO等待时间)(id=idle),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间(wa=wait for disk I/O)。wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
st:被虚拟机所盗用的 CPU 百分比。

如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。
如果bi,bo 长期不等于0,表示内存不足。

vmstat -a:显示活跃和非活跃内存

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1016976 121900 1388660    0    0    54    19  173  477 12  3 85  0  0
[root@localhost ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1015720 701804 1447844    0    0    54    19  173  477 12  3 85  0  0

使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与vmstat的输出结果相同。

1
2
3
4
5
6
7
8
[root@localhost ~]&#35; vmstat -a 2 4
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
0 0 0 1015684 701812 1447868 0 0 54 19 173 477 12 3 85 0 0
0 0 0 1015512 701844 1447560 0 0 0 122 567 2103 15 2 83 0 0
1 0 0 1015356 701844 1447896 0 0 0 38 959 2730 13 2 85 0 0
0 0 0 1015232 701852 1447976 0 0 0 128 441 1786 13 2 84 0 0
[root@localhost ~]&#35;

vmstat -d:查看磁盘的读/写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
ram0 0 0 0 0 0 0 0 0 0 0
ram1 0 0 0 0 0 0 0 0 0 0
ram2 0 0 0 0 0 0 0 0 0 0
ram3 0 0 0 0 0 0 0 0 0 0
ram4 0 0 0 0 0 0 0 0 0 0
ram5 0 0 0 0 0 0 0 0 0 0
ram6 0 0 0 0 0 0 0 0 0 0
ram7 0 0 0 0 0 0 0 0 0 0
ram8 0 0 0 0 0 0 0 0 0 0
ram9 0 0 0 0 0 0 0 0 0 0
ram10 0 0 0 0 0 0 0 0 0 0
ram11 0 0 0 0 0 0 0 0 0 0
ram12 0 0 0 0 0 0 0 0 0 0
ram13 0 0 0 0 0 0 0 0 0 0
ram14 0 0 0 0 0 0 0 0 0 0
ram15 0 0 0 0 0 0 0 0 0 0
loop0 0 0 0 0 0 0 0 0 0 0
loop1 0 0 0 0 0 0 0 0 0 0
loop2 0 0 0 0 0 0 0 0 0 0
loop3 0 0 0 0 0 0 0 0 0 0
loop4 0 0 0 0 0 0 0 0 0 0
loop5 0 0 0 0 0 0 0 0 0 0
loop6 0 0 0 0 0 0 0 0 0 0
loop7 0 0 0 0 0 0 0 0 0 0
zram0 0 0 0 0 0 0 0 0 0 0
mmcblk0 48322 103620 8479349 122610 112502 182009 3262515 655590 0 213
mmcblk0rpmb 0 0 0 0 0 0 0 0 0 0
[root@localhost ~]#

说明:这些信息主要来自于/proc/diskstats.merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.

vmstat -f:查看系统已经fork了多少次

1
2
3
[root@localhost ~]# vmstat -f
25753 forks
[root@localhost ~]#

vmstat -s:查看内存使用的详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@localhost ~]# vmstat -s
3686064 K total memory
1150608 K used memory
1439196 K active memory
702928 K inactive memory
1023524 K free memory
123272 K buffer memory
1388660 K swap cache
0 K total swap
0 K used swap
0 K free swap
961982 non-nice user cpu ticks
14417 nice user cpu ticks
194461 system cpu ticks
6825684 idle cpu ticks
12403 IO-wait cpu ticks
63 IRQ cpu ticks
5608 softirq cpu ticks
0 stolen cpu ticks
4264662 pages paged in
1487185 pages paged out
0 pages swapped in
0 pages swapped out
13762036 interrupts
38103830 CPU context switches
1619001796 boot time
25897 forks
[root@localhost ~]#

vmstat -m:获取

slab

由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。

1
2
3
[root@localhost ~]# vmstat -m
vmstat: your kernel does not support slabinfo or your permissions are insufficient
[root@localhost ~]#

翻译:vmstat:您的内核不支持slabinfo或您的权限不足

vmstat -w宽版输出

1
2
3
4
5
[root@localhost ~]# vmstat -w
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 1095624 110728 1352572 0 0 60 19 183 494 13 3 85 0 0
[root@localhost ~]#

vmstat -t显示时间

1
2
3
4
5
[root@localhost ~]# vmstat -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st CST
2 0 0 1067744 112572 1359264 0 0 60 19 182 493 13 3 85 0 0 2021-04-21 22:00:53
[root@localhost ~]#

vmstat -wt宽版输出并显示时间

1
2
3
4
5
[root@localhost ~]# vmstat -wt
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu-------- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st CST
0 0 0 1069064 112492 1359276 0 0 60 19 182 493 13 3 85 0 0 2021-04-21 22:00:40
[root@localhost ~]#

vmstat 秒数

每3秒输出一条结果vmstat 3

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1021912 117064 1387020 0 0 57 19 177 483 12 3 85 0 0
0 0 0 1025868 117128 1386988 0 0 0 197 631 2179 14 3 83 1 0
1 0 0 1025964 117152 1387008 0 0 0 99 468 1978 14 2 84 0 0
0 0 0 1025880 117152 1387032 0 0 0 0 669 2216 14 2 84 0 0
3 0 0 1025756 117176 1387012 0 0 0 76 432 1661 13 1 86 0 0
3 0 0 1025756 117176 1387028 0 0 0 20 468 1844 14 2 83 0 0
1 0 0 1025492 117220 1387004 0 0 0 153 598 2191 12 3 85 0 0
^C
[root@localhost ~]#

vmstat 间隔秒数 采集次数

每隔3秒采集一次,共采集4次:vmstat 3 4

1
2
3
4
5
6
7
8
[root@localhost ~]# vmstat 3 4
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1011904 119464 1388380 0 0 55 19 175 479 12 3 85 0 0
0 0 0 1011764 119468 1388380 0 0 0 25 371 1729 14 1 85 0 0
0 2 0 1011640 119520 1388356 0 0 0 176 716 2481 13 3 83 0 0
2 0 0 1011328 119524 1388380 0 0 0 24 631 2129 7 1 92 0 0
[root@localhost ~]#

参考资料

http://www.ha97.com/4512.html
https://wangchujiang.com/linux-command/c/vmstat.html
https://www.yiibai.com/linux/vmstat.html
https://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html
https://segmentfault.com/a/1190000018834649
http://c.biancheng.net/view/1081.html
https://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

free命令:了解内存使用情况

1
2
3
4
5
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 3686064 1049024 49864 1508 2587176 2605751
Swap: 0 0 0
[root@localhost ~]#

默认的free命令输出的单位是KB.

free -h

1
2
3
4
5
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 3.5G 1.0G 44M 1.5M 2.5G 2.5G
Swap: 0B 0B 0B
[root@localhost ~]#

这里空闲内存free只有44MB,这点内存好像不够用了。实际上是因为Linux为提高效率,利用程序暂时不用的内存,缓冲读写过的磁盘信息。
从上面的输出结果可以看出,当前有2587176KB的缓冲内存buffer/cache,不计buffer/cache的话,系统的实际可用内存available为2605751KB,远不止free的44MB。

free命令输出列的含义

free命令输出的列 含义
total 总内存
used 已使用的内存
free 空闲内存
buff/cache 缓存内存
available 实际可用内存

free命令手册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
FREE(1)                                                                User Commands                                                               FREE(1)

NAME
free - Display amount of free and used memory in the system

SYNOPSIS
free [options]

DESCRIPTION
free displays the total amount of free and used physical and swap memory in the system, as well as the buffers and caches used by the kernel. The
information is gathered by parsing /proc/meminfo. The displayed columns are:

total Total installed memory (MemTotal and SwapTotal in /proc/meminfo)

used Used memory (calculated as total - free - buffers - cache)

free Unused memory (MemFree and SwapFree in /proc/meminfo)

shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo, available on kernels 2.6.32, displayed as zero if not available)

buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)

cache Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)

buff/cache
Sum of buffers and cache

available
Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free
fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use
(MemAvailable in /proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)

OPTIONS
-b, --bytes
Display the amount of memory in bytes.

-k, --kilo
Display the amount of memory in kilobytes. This is the default.

-m, --mega
Display the amount of memory in megabytes.

-g, --giga
Display the amount of memory in gigabytes.

--tera Display the amount of memory in terabytes.

--peta Display the amount of memory in petabytes.

-h, --human
Show all output fields automatically scaled to shortest three digit unit and display the units of print out. Following units are used.

B = bytes
K = kilos
M = megas
G = gigas
T = teras
P = petas

If unit is missing, and you have exabyte of RAM or swap, the number is in terabytes and columns might not be aligned with header.

-w, --wide
Switch to the wide mode. The wide mode produces lines longer than 80 characters. In this mode buffers and cache are reported in two separate
columns.

-c, --count count
Display the result count times. Requires the -s option.

-l, --lohi
Show detailed low and high memory statistics.

-s, --seconds seconds
Continuously display the result delay seconds apart. You may actually specify any floating point number for delay, usleep(3) is used for
microsecond resolution delay times.

--si Use power of 1000 not 1024.

-t, --total
Display a line showing the column totals.

--help Print help.

-V, --version
Display version information.

FILES
/proc/meminfo
memory information

SEE ALSO
ps(1), slabtop(1), top(1), vmstat(8).

AUTHORS
Written by Brian Edmonds.

REPORTING BUGS
Please send bug reports to ⟨procps@freelists.org⟩

free选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost ~]# free --help

Usage:
free [options]

Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
--peta show output in petabytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output

--help display this help and exit
-V, --version output version information and exit

For more details see free(1).
[root@localhost ~]#

-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
B = bytes
K = kilos
M = megas
G = gigas
T = teras
-s<间隔秒数>  持续观察内存使用状况。
-c<重复次数>
-t  显示内存总和列。
-V  显示版本信息。

free -b以Byte为单位显示内存使用情况

1
2
3
4
5
[root@localhost ~]# free -b
total used free shared buff/cache available
Mem: 3774529536 1067212800 57638912 1544192 2649677824 2675276800
Swap: 0 0 0
[root@localhost ~]#

free -k以KB为单位显示内存使用情况

1
2
3
4
5
[root@localhost ~]# free -k
total used free shared buff/cache available
Mem: 3686064 1044696 53052 1508 2588316 2610079
Swap: 0 0 0
[root@localhost ~]#

free -m以MB为单位显示内存使用情况

1
2
3
4
5
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3599 1008 63 1 2527 2560
Swap: 0 0 0
[root@localhost ~]#

free -g以GB为单位显示内存使用情况

1
2
3
4
5
[root@localhost ~]# free -g
total used free shared buff/cache available
Mem: 3 0 0 0 2 2
Swap: 0 0 0
[root@localhost ~]#

free -h以人类友好方式显示内存使用情况

1
2
3
4
5
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 3.5G 1.0G 61M 1.5M 2.4G 2.5G
Swap: 0B 0B 0B
[root@localhost ~]#

free -w

1
2
3
4
5
[root@localhost ~]# free -w
total used free shared buffers cache available
Mem: 3686064 1084684 54540 1508 464712 2082128 2570087
Swap: 0 0 0
[root@localhost ~]#

free -t以总和的形式查询内存的使用信息

1
2
3
4
5
6
[root@localhost ~]# free -t
total used free shared buff/cache available
Mem: 3686064 1087824 50896 1508 2547344 2566951
Swap: 0 0 0
Total: 3686064 1087824 50896
[root@localhost ~]#

free -s 秒数:周期性的查询内存使用信息

free -s 10表示每隔10秒执行一次free命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# free -s 10
total used free shared buff/cache available
Mem: 3686064 1080672 56516 1508 2548876 2574103
Swap: 0 0 0

total used free shared buff/cache available
Mem: 3686064 1072048 65064 1508 2548952 2582727
Swap: 0 0 0

total used free shared buff/cache available
Mem: 3686064 1077880 59172 1508 2549012 2576895
Swap: 0 0 0

......

free -s 间隔秒数 -c 执行次数:周期性执行free并统计次数

1
2
-s N, --seconds N   repeat printing every N seconds
-c N, --count N repeat printing N times, then exit

命令free -s 5 -c 3表示每隔5秒执行一次free命令,并重复执行3次。
运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# free -s 5 -c 3
total used free shared buff/cache available
Mem: 3686064 1084308 51740 1508 2550016 2570467
Swap: 0 0 0

total used free shared buff/cache available
Mem: 3686064 1082564 53464 1508 2550036 2572211
Swap: 0 0 0

total used free shared buff/cache available
Mem: 3686064 1080316 55648 1508 2550100 2574459
Swap: 0 0 0
[root@localhost ~]#

参考资料

https://www.runoob.com/linux/linux-comm-free.html

ps命令

功能:查阅进程状态

ps(process status)(实际上就是将内核中进程状态信息有选择地打印出来)

ps列出的进程属性

ps列出的属性 含义
UID 用户ID(注册名)
PID 进程ID
PPID 父进程的PID
C CPU占用指数:最近一段时间(秒级别)进程占用CPU情况
STIME 启动时间
SZ 进程逻辑内存大小(Size),如果一个进程的逻辑内存越来越大则可能发生内存泄露
TTY 终端的名字
COMMAND 命令名
WCHAN 睡眠通道,进程在内核的何处睡眠(Wait Channel)
TIME 累计执行时间(占用CPU的时间) ,如果一个进程无故占用CPU很长的时间,则该进程可能有问题
PRI 优先级
S 状态,S(Sleep)(睡眠状态,阻塞状态),R(Run), Z(Zombie)(僵尸状态)

ps选项

无选项

无选项:只列出在当前终端上启动的进程

1
2
3
4
5
[root@localhost ~]# ps
PID TTY TIME CMD
15469 pts/3 00:00:00 bash
15520 pts/3 00:00:00 ps
[root@localhost ~]#

ps -e:列出系统中所有的进程(进程范围)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost ~]# ps -e
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:01 ksoftirqd/0
......
19 ? 00:00:00 migration/3
22 ? 00:00:00 kworker/3:0H
......
94 ? 00:00:00 irq/86-msm_iomm
......
99 ? 00:00:00 irq/109-msm_iom
100 ? 00:00:00 irq/112-msm_iom
......
585 ? 00:00:00 rild
588 ? 00:00:00 qti
596 ? 00:00:00 netmgrd
......
1085 ? 00:00:00 ad_calc_wq
......
14353 ? 00:00:00 kworker/2:2
......
15648 ? 00:00:00 kworker/0:2
15697 ? 00:00:00 kworker/2:0
15730 pts/6 00:00:00 ps
[root@localhost ~]#

由于ps -e输出的结果很长,可以结合more或者less命令以前使用:ps -e|moreps -e|less

ps -f:以full格式列出每一个进程(控制列的数目)

1
2
3
4
5
[root@localhost ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 15563 15561 0 19:00 pts/6 00:00:00 -bash
root 15865 15563 0 19:07 pts/6 00:00:00 ps -f
[root@localhost ~]#

ps -l选项:以long格式列出每一个进程(控制列的数目)

1
2
3
4
5
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 15563 15561 0 80 0 - 27424 do_wai pts/6 00:00:00 bash
0 R 0 15874 15563 0 80 0 - 27844 - pts/6 00:00:00 ps
[root@localhost ~]#

参考资料

https://www.runoob.com/linux/linux-comm-ps.html

top命令:列出资源占用排名靠前的进程

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
常在linux系统下玩,这是必须掌握的命令之一;

top命令示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@localhost ~]# top
top - 14:32:01 up 2 days, 7:01, 2 users, load average: 6.11, 6.22, 6.34
Tasks: 472 total, 5 running, 459 sleeping, 6 stopped, 2 zombie
%Cpu(s): 17.3 us, 8.7 sy, 0.0 ni, 74.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3686064 total, 227300 free, 1768260 used, 1690504 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1881111 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12711 root 20 0 112604 2396 1372 R 27.3 0.1 0:00.13 top
454 aid_med+ 20 0 106552 29592 9628 S 22.7 0.8 933:10.56 mediaserver
9269 10116 16 -4 1811124 425120 204272 S 9.1 11.5 8:18.44 .taobao.litetao
7 root 20 0 0 0 0 S 4.5 0.0 6:00.27 rcu_preempt
272 root rt 0 0 0 0 S 4.5 0.0 26:36.71 cfinteractive
1 root 20 0 1256 1004 396 S 0.0 0.0 2:21.27 init
2 root -2 0 0 0 0 S 0.0 0.0 0:00.45 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 3:26.01 ksoftirqd/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.88 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:31.49 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:23.31 migration/1
12 root 20 0 0 0 0 S 0.0 0.0 2:14.52 ksoftirqd/1
15 root rt 0 0 0 0 S 0.0 0.0 0:19.59 migration/2
16 root 20 0 0 0 0 S 0.0 0.0 1:50.65 ksoftirqd/2
19 root rt 0 0 0 0 S 0.0 0.0 0:18.96 migration/3
20 root 20 0 0 0 0 S 0.0 0.0 1:37.55 ksoftirqd/3
23 root rt 0 0 0 0 R 0.0 0.0 0:05.20 migration/4
24 root 20 0 0 0 0 R 0.0 0.0 0:05.22 ksoftirqd/4
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.20 kworker/4:0H
27 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
29 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 wakelock_printk
30 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
37 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 smd_channel_clo
38 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 smsm_cb_wq
39 root 20 0 0 0 0 D 0.0 0.0 0:00.01 kworker/u16:1
40 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq
41 root 0 -20 0 0 0 D 0.0 0.0 13:29.07 kworker/u17:0
[root@localhost ~]#

top命令第1行:系统正常运行时间

top命令输出的第一行信息:

1
top - 14:32:01 up 2 days,  7:01,  2 users,  load average: 6.11, 6.22, 6.34
top命令第一行信息 描述
14:32:01 当前系统时间
up 2 days, 7:01
2 users 当前有2个用户登录系统
load average: 6.11, 6.22, 6.34 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

和uptime的输出信息差不多:

1
2
3
[root@localhost ~]# uptime
14:31:59 up 2 days, 7:01, 2 users, load average: 6.11, 6.22, 6.34
[root@localhost ~]#

top命令第2行:系统进程状态

1
Tasks: 472 total,   5 running, 459 sleeping,   6 stopped,   2 zombie

第2行输出表示当前系统有多少个任务(进程),

top命令第2行输出 描述
Tasks: 472 total 系统有472个任务(进程)
5 running 有5个任务处于运行状态
459 sleeping 有459个任务处于睡眠状态(阻塞状态)
6 stopped 有6个任务处于停止状态
2 zombie 有2个任务处于僵尸状态

top命令第3行:CPU的状态

1
%Cpu(s): 17.3 us,  8.7 sy,  0.0 ni, 74.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
top命令第三行信息 描述
17.3 us 用户空间占用CPU的百分比。
8.7 sy 内核空间占用CPU的百分比。
0.0 ni 改变过优先级的进程占用CPU的百分比
74.0 id 空闲CPU百分比
0.0 wa IO等待占用CPU的百分比
0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si 软中断(Software Interrupts)占用CPU的百分比
0.0 st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)

注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可;折叠,再次按1;

top命令第4行:内存状态

1
KiB Mem :  3686064 total,   227300 free,  1768260 used,  1690504 buff/cache
top命令第4行输出 描述
3686064 total 物理内存总量
227300 free 空闲内存总量
1768260 used 使用的物理内存总量
1690504 buff/cache 用作内核缓存的内存量

第四行中
使用中的内存总量(used)指的是现在系统内核控制的内存数,
空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached。

top命令第5行:Swap交换分区相关信息 交换空间使用情况

1
KiB Swap:        0 total,        0 free,        0 used.  1881111 avail Mem 
top命令第6行输出 描述
0 total 交换分区总量
0 free 空闲交换分区总量
0 used 已经使用的交换分区总量

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

top命令第6行:空行

后面的是表格,空行作为分隔符。

top命令第7行之后:最后输出的表格

1
2
3
4
5
6
7
8
9
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                  
12711 root 20 0 112604 2396 1372 R 27.3 0.1 0:00.13 top
454 aid_med+ 20 0 106552 29592 9628 S 22.7 0.8 933:10.56 mediaserver
9269 10116 16 -4 1811124 425120 204272 S 9.1 11.5 8:18.44 .taobao.litetao
7 root 20 0 0 0 0 S 4.5 0.0 6:00.27 rcu_preempt
272 root rt 0 0 0 0 S 4.5 0.0 26:36.71 cfinteractive
1 root 20 0 1256 1004 396 S 0.0 0.0 2:21.27 init
2 root -2 0 0 0 0 S 0.0 0.0 0:00.45 kthreadd
......
top命令第7行 描述
PID 进程id
USER 进程所有者
PR 进程优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程逻辑地址空间大小(virtual),单位kb。VIRT=SWAP+RES,如果随着时间的增长,逻辑地址空间不断扩大,则该可能出现内存泄露
RES 驻留内存数(Resident),也就是真正占用物理的内存数,单位kb。RES=CODE+DATA
SHR 与其他进程共享的内存数,单位kb,共享的内存一般有共享函数库,以及其他的共享数据等
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比,CPU占用有超过100%的可能
%MEM 进程使用的物理内存百分比
TIME+ 占用的CPU时间,单位1/100秒。正常清空下占用CPU的时间不应随着时间的增长而增长。如果占用CPU的时间随时间的增长而增长,这说明该进程非常忙碌。则该进程可能出现了死循环
COMMAND 进程名称(命令名/命令行)

top命令交互操作指令

下面列出一些常用的 top命令操作指令

top命操作指令 功能
q 退出top命令
立即刷新
s 设置刷新时间间隔
c 显示命令完全模式
t: 显示或隐藏进程和CPU状态信息
m 显示或隐藏内存状态信息
l 显示或隐藏uptime信息
f 增加或减少进程显示标志
S 累计模式,会把已完成或退出的子进程占用的CPU时间累计到父进程的TIME+
P 按%CPU使用率排行
T 按TIME+排行
M 按%MEM排行
u 指定显示用户进程
r 修改进程renice值
kkill 进程
i 只显示正在运行的进程
W 保存对top的设置到文件~/.toprc,下次启动将自动调用toprc文件的设置。
h 帮助命令。
q 退出

注:强调一下,使用频率最高的是P、T、M,因为通常使用top,我们就想看看是哪些进程最耗cpu资源、占用的内存最多;
注:通过”shift + >”或”shift + <”可以向右或左改变排序列

只查看top的内存部分信息

free

如果只需要查看内存:可用free命令。

uptime

只查看uptime信息(第一行),可用uptime命令;

参考资料

https://www.cnblogs.com/me115/p/3842081.html
https://blog.csdn.net/yaomingyang/article/details/78968573
https://liam.page/2020/01/10/the-states-of-processes-on-Linux/
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html