-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
diff
逐行比较两个文本文件,把文件的差异显示到标准输出。如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
diff [选项] files
2、选项列表
-v | --version
显示命令版本信息
--help
显示帮助文档
-m | --mode=MODE
设置目录的权限
-i | --ignore-case
比较的时候,忽略大小写
--ignore-file-name-case
在比较文件名的时候,忽略大小写
--no-ignore-file-name-case
比较文件名的时候,不能忽略大小写
-E | --ignore-tab-expansion
不比较tab
-b | --ingore-space-change
不比较空格数
-w | --ignore-all-space
忽略所有的空格
-B | --ignore-blank-lines
不比较空白行
-I res | --ignore-mathcing-lines=res
不比较含有指定字符串res的行
--strip-trailing-cr
出去输入行尾随的东西
-a | --text
将所有的文件都当做文本文件
-c -C NUM --context[=NUM]
显示不同之处的前后部分内容,默认是3行
-u -U NUM --unified[=NUM]
显示相同之处的前后部分内容,默认是3行
--label LABEL
使用文件的标签,而不是名字
-p | --show-c-function
比较c语言文件的时候,显示不同之处所在的函数
-F RE | --show-function-line=RE
显示匹配RE的最近的行
-q | --brief
只显示是否有差异,不显示详细内容
-e | --ed
输出一个ed脚本
--normal
输出一个正常的diff
-n | --rcs
结果以rcs的方式显示
-y | --side-by-side
将两个文件已并列方式显示比较结果
-W num | --width=NUM
使用“-y”选项的时候,指定列宽
--left-column
只输出公共行的左列
--suppress-common-lines
不要输出公共行
-D NAME | --ifdef=NAME
输出合并文件以显示‘#ifdef NAME’的差异
--GTYPE-group-format=GFMT
同上,但用GFMT格式化GTYPE输入组
--line-format=LFMT
同上,但用LFMT格式化GTYPE输入组
--LTYPE-line-format=LFMT
同上,但用LFMT格式化LTYPE输入行
-l | --paginate
将输出传递给pr”以分页
-t | --expand-tabs
将制表符展开为输出中的空格
-T | --initial-tab
通过预置选项卡使制表符对齐
-N | --new-file
将缺席文件视为空文件
--unidirectional-new-file
将缺席的第一批文件视为空文件
-s | --report-identical-files
当两个文件相同时报告
-X FILE | --exclude-from=FILE
排除与文件中任何模式匹配的文件
-S FILE | --starting-file=FILE
从文件开始比较目录时
-r | --recursive
用递归的方式比较子目录下的所有文件
-x path
不比较指定的文件
--from-file=FILE1
将FILE 1与所有操作数进行比较。FILE 1可以是一个目录
--to-file=FILE2
将所有操作数与文件2进行比较。文件2可以是一个目录
--horizon-lines=NUM
保持通用前缀和后缀的NUM行
-d --minimal
努力找出一组较小的变更
--speed-large-files
假设文件很大,并且有许多零散的小更改。
3、实例
1)比较两个文件,不使用参数 (两个文件只有第一行不同)
[root@localhost test02]# diff 1.c 2.c //直接比较,这里只输出不同之处
1c1
< 逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。
---
> 逐行比较两个文本文件,把文件的差异显示到标准输出。
2)使用选项-y,以分列的方式输出两个文件
[root@localhost test02]# diff -y 1.c 2.c //使用选项y,这里以列的方式,显示文件全部内容
逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。 | 逐行比较两个文本文件,把文件的差异显示到标准输出。
如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文 如果要指定要比较目录,那么diff命令会比较目录中相同文件 名的文
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS
[root@localhost test02]# diff 1.c 2.c
3)使用选项-W,指定列宽
[root@localhost test02]# diff -y -W 100 1.c 2.c //这里指定列宽100,并不能完全显示,因此看不到差异之处
逐行比较两个文本文件,把文件的差异显示到标准 | 逐行比较两个文本文件,把文件的差异显示到标准
如果要指定要比较目录,那么diff命令会比较目录 如果要指定要比较目录,那么diff命令会比较目录
此命令的适用范围:RedHat、RHEL、Ubuntu、CentO 此命令的适用范围:RedHat、RHEL、Ubuntu、CentO
4)比较目录
[root@localhost weijie]# diff test01 test02 //这里只比较目录下相同名字的文件
diff test01/1.c test02/1.c
1c1
< 逐行比较两个文本文件,把文件的差异显示到标准输出。
---
> 逐行比较两个文本文件,把文件的差异显示到标准输出,adAD文件。
5)使用选项-q,查看是否不同
[root@localhost weijie]# diff -q test01/1.c test02/1.c //比较是否不同
Files test01/1.c and test02/1.c differ //只显示是否相同,不显示详细不同之处
-------------------------
cmp
用字节的方式,比较两个文件是否存在差异,但是不保存运算结果。Cmp指令只会根据结果设置相关的标志位,这个指令之后往往会跟着一个条件跳转指令。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]
2、选项列表
-v | --version
显示命令版本信息
--help
显示帮助文档
-b | --print-bytes
输出不同的字节
-i num | --ignore-initial=num
跳过开始的num个字节
-i num1 num2 | --ignore-initial=num1:num2
第一个文件跳过num1个字节,第二个文件跳过num2个字节
-l | --verbose
输出不同之处的字节序号,以及这个字节的值
-n LIMIT | --bytes=LIMIT
最多比较LIMIT字节
-s | --quiet | --silent
不输出;只输出退出状态
3、实例
1)直接比较
[root@localhost weijie]# diff -y 1.c 2.c //首先使用diff查看不同之处
asd | ase
sdf | sdd
dfg dfg
[root@localhost weijie]# cmp 1.c 2.c //开始比较
1.c 2.c differ: byte 3, line 1 //只显示第一个不同之处,第一行,第3个字节
2)使用选项-b,显示不同之处的字节
[root@localhost weijie]# cmp -b 1.c 2.c
1.c 2.c differ: byte 3, line 1 is 144 d 145 e //显示不同的地方,第一个文件是d,第二个文件是e。但是这里还是只有第一个不同之处
3)使用选项-l,显示所有不同之处
[root@localhost weijie]# cmp -lb 1.c 2.c //同时使用了l 和 b选项
3 144 d 145 e //第一个不同之处
7 146 f 144 d //第二个不同之处
-------------------------
comm
逐行比较两个已经排序过的文件。结果以3列显示:第1列显示只在file1出现的内容,第2列显示只在file2出现的内容,第3列显示同时出现的内容。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
comm [OPTION]... FILE1 FILE2
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-1
不显示第一个文件中出现的内容
-2
不显示第二个文件出现的内容
-3
不显示同时出现的内容
--check-order
检查输入是否正确排序,即使所有输入行都已经配对
--nocheck-order
不检查输入是否正确排序
--output-delimiter=STR
使用STR将列分割
3、实例
1)直接比较
[root@localhost weijie]# diff -y 1.c 2.c //查看两个文件
abc | abd
def | efg
ghi | ghi
[root@localhost weijie]# comm 1.c 2.c //比较,这两个文件必须已经排序
abc
abd
def
efg
ghi
2)只显示两个文件共同出现的内容
[root@localhost weijie]# comm -12 1.c 2.c
ghi
-------------------------
diffstat
这个程序读取diff的输出,并显示每个文件的插入、删除和修改的直方图。Diffstat是一个用于检查大型复杂修补程序文件的程序。它从包含diff输出的一个或多个输入文件中读取,生成针对引用的每个文件更改的总行的直方图。如果输入文件名以.bz 2、.gz、.lzma、.z或.z结尾,Diffstat将通过管道从相应的程序读取未压缩数据。它还可以根据标准输入的管道文件推断压缩类型。
Diffstat识别来自diff的最流行的输出类型:
unified,修补程序首选。
context,最好的可读性,但不太紧凑。
default,不是很好,但很容易产生。
Diffstat检测由diff输出的行,以判断比较了哪些文件,然后在第一列中计数表示更改类型(插入、删除或修改)的标记。这些在直方图中显示为“、”-“和”!“字符。如果命令行上没有指定文件名,Diffstat将读取标准输入中的差异。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
diffstat [options] [file-specifications]
2、选项列表
-b
忽略diff中的“二进制文件XXX和YYY不同”匹配的行
-c
在每一行输出前加上“#”,使其成为shell脚本的注释行。
-D destination
指定一个目录,其中包含可作为应用差异的结果而引用的文件。Diffstat将计算相应文件中的行数(在通过-p选项调整名称之后),以获得每个文件中的总行数。
-e file
将标准错误重定向到文件
-f format
指定直方图的格式:
0,为了简洁,它只显示值和一个直方图代码insert (+),delete (-)或modify (!)。
1,正常格式。
2,用点填充直方图。
4,使用直方图打印每个值。
任何非零值都会给出直方图。点和个别值可以结合在一起,例如-f6给出两者。
-h
显示帮助信息并且退出
-k
禁止合并报表中的文件名
-l
只列出文件名。不生成直方图。
-m
从修补程序文件的每个“块”中合并插入/删除计数,以接近修改行的计数
-n number
指定用于文件名的最小宽度。如果不指定这一点,Diffstat在去掉常见前缀后使用最长文件名的长度。
-N number
指定用于文件名的最大宽度。超过此限制的名称在左侧被截断。如果您没有指定此选项,下面将检查-n选项。
-o file
将标准输出重定向到文件
-p number
重写删除公共路径名的逻辑,模拟修补程序“-p”选项。
-q
抑制空差异的“0文件更改”消息
-r code
提供直方图中显示的数据的可选舍入,而不是通过错误调整截断数据:
0,是默认的。不执行舍入操作,但累积错误将添加到下列中。
1,舍入数据。
2,对数据进行舍入并调整直方图,以确保在有任何差异的情况下显示某些内容,即使这些差异通常被四舍五入为零。
-S source
这类似于-D选项,但指定了一个可以找到原始文件(在应用差异之前)的位置。
-t
重写直方图,生成逗号分隔值的输出。
-u
禁止对报表中的文件名进行排序。
-v
显示进度,例如,如果输出重定向到文件,则将进度消息写入标准错误
-V
显示版本号,并且退出
-w number
指定直方图的最大宽度。直方图将永远不会小于10列,以防文件名过大。
3、环境变量
Diffstat运行在可移植的UNIX环境中。您可以通过设置与输入文件名称相对应的环境变量来覆盖用于解压缩输入文件的程序的编译路径。然而,Diffstat假设生成的程序使用相同的命令行选项,例如“-c”来解压缩到标准输出。
DIFFSTAT_BZCAT_PATH
DIFFSTAT_BZIP2_PATH
DIFFSTAT_COMPRESS_PATH
DIFFSTAT_GZIP_PATH
DIFFSTAT_LZCAT_PATH
DIFFSTAT_PCAT_PATH
DIFFSTAT_UNCOMPRESS_PATH
DIFFSTAT_ZCAT_PATH
4、实例
统计差异信息
[root@localhost wj]# diff 1.c 2.c
1c1
< asd
---
> add
3,4c3,4
< dfg
< ass
---
> dsgf
> sss
[root@localhost wj]# diff 1.c 2.c |diffstat -f 2
unknown | 6 +++---..........................................................
1 file changed, 3 insertions(+), 3 deletions(-)
[root@localhost wj]# diff 1.c 2.c |diffstat -f 1
unknown | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
You have new mail in /var/spool/mail/root
[root@localhost wj]# diff 1.c 2.c |diffstat -f 0
unknown | 6 3 + 3 - 0 !
1 file changed, 3 insertions(+), 3 deletions(-)
[root@localhost wj]#
-------------------------
file
判断指定文件的文件类型,它依据文件内容判断,并不依据扩展名。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
file [选项] filename
2、选项列表
-v | --version
显示命令版本信息
--help
显示帮助文档
-b | --brief
列出结果的时候,不显示文件名
-C | --compile
编写一个magic.mgc输出文件,其中包含魔术文件或目录的预解析版本
-c | --checking-printout
以检查魔术文件的解析形式的打印输出。这通常与-m标志一起使用,用于在安装新的魔术文件之前调试它。
-e | --exclude testname
从确定文件类型的测试列表中排除在testname中指定的测试。有效的测试名称是:
apptype,EMX应用程序类型(仅在EMX上)。
text,各种类型的文本文件(此测试将尝试猜测文本编码,而不管“编码”选项的设置如何)
encoding,用于软魔术测试的不同文本编码
tokens,在文本文件中查找已知的令牌
cdf,打印复合文档文件的详细信息
compress,检查并查看压缩文件
elf,打印ELF文件的细节。
soft,查阅魔法档案。
tar,检查tar文件
-F | --separator
指定文件名和结果之间的分隔符,默认:
-f namefile | --files-from namefile
从给定的文件中,读取文件名,然后操作
-h | --no-dereference
选项导致符号链接不被遵循(在支持符号链接的系统上)。如果没有定义环境变量POSIXLY_TRIDER,则这是默认的
-i | --mime
导致文件命令输出MIME类型字符串,而不是更传统的人类可读的字符串。因此,它可以说‘text/plain;;charset=us-ascii’而不是‘ASCII文本’。为了使此选项工作,文件更改了它处理命令本身识别的文件的方式(例如许多文本文件类型、目录等),并使用了另一个“魔术”文件。(见下文档案部分)
--mime-type | --mime-encoding
类似-i,但只打印指定的元素。
k | --keep-going
第一次匹配别停,继续。随后的匹配将具有字符串‘\012-’。(如果需要换行符,请参见‘-r’选项。)
-L | --dereference
选项导致符号链接被遵循,就像ls(1)中的同名选项(在支持符号链接的系统上)。如果定义了环境变量POSIXLY_TRIDER,则这是默认的
-m | --magic-file magicfiles
指定包含魔术的文件和目录的备用列表。这可以是单个项目,也可以是冒号分隔的列表。如果在文件或目录旁边找到已编译的魔术文件,则将使用它。
-N | --no-pad
让文件名在输出中对齐
-n | --no-buffer
检查每个文件后,强迫stdout被刷新。这只有在检查文件列表时才有用。它用于希望从管道输出文件类型的程序。
-p | --preserve-date
在支持utime(2)或utime(2)的系统上,尝试保留分析过的文件的访问时间,假装文件从未读取过它们。
-r | --raw
不要将不可打印的字符翻译为\ooo。通常,文件将不可打印的字符转换为它们的八进制表示形式
-s | --special-files
通常,文件只尝试读取和确定STAT(2)报告是普通文件的参数文件的类型。这可以防止出现问题,因为读取特殊文件可能会产生特殊的后果。指定-s选项会导致file也读取参数文件,这些参数文件是块文件或字符特殊文件。这对于确定原始磁盘分区中数据的文件系统类型非常有用,这些分区是块特殊文件。此选项还会导致文件忽略stat(2)所报告的文件大小,因为在某些系统上,它报告原始磁盘分区的大小为零。
-z | --uncompress
试着查看压缩文件
-0 | --print0
在文件名结束后输出空字符‘\0’。很好地削减了产量。这不影响仍然打印的分隔符。
-z
尝试读取压缩文件的内容
3、说明
file对每个参数进行测试,试图对其进行分类。按照这个顺序执行的测试有三组:文件系统测试、魔术测试和语言测试。成功的第一个测试将导致打印文件类型。打印的类型通常包含一个单词text(该文件只包含打印字符和几个常见的控制字符,并可能安全地在ASCII终端上读取)、executable (该文件包含以某种UNIX内核可以理解的形式编译程序的结果),或包含任何其他含义的data(数据通常是“二进制”或不可打印的)。异常是众所周知的包含二进制数据的文件格式(核心文件、tar存档).在修改魔术文件或程序本身时,请确保保留这些关键字。用户依赖于知道目录中的所有可读文件都打印了单词“text”。不要像Berkeley那样,把“shell命令文本”改为“shell脚本”
文件系统测试基于检查STAT(2)系统调用的返回。该程序检查该文件是否为空文件,或是否为某种特殊文件。如果在系统头文件中定义了适合您正在运行的系统的任何已知文件类型(套接字、符号链接或有名管道),则会直观地显示它们。
魔术测试用于检查具有特定固定格式的数据的文件。这方面的典型示例是二进制可执行文件(已编译的程序)a.out文件,其格式在标准include目录中的#include<a.out.h>中定义,或者#include <exec.h>。这些文件具有一个“魔术号”,存储在文件开头附近的某个特定位置,该位置告诉UNIX操作系统该文件是二进制可执行文件,以及其中的几种类型中的哪一种。“魔术”的概念已经通过扩展应用于数据文件。任何在一个小的固定偏移量处具有一些不变标识符的文件通常都可以用这种方式来描述。标识这些文件的信息是从已编译的魔术文件/usr/share/misc/magic.mgc中读取的,如果编译的文件不存在,则从/usr/share/misc/magc目录中读取这些文件。此外,如果$HOME/.magic.mgc或$home/.magic存在,则它将优先用于系统魔术文件。如果/etc/magic存在,它将与其他魔术文件一起使用。
如果文件与魔术文件中的任何条目不匹配,则检查它是否为文本文件。ASCII、ISO-8859-x、非ISO 8位扩展-ASCII字符集(例如在Macintosh和IBM PC系统上使用的字符集)、UTF-8编码Unicode、UTF-16编码Unicode和EBCDIC字符集可以通过构成每组可打印文本的不同范围和字节序列来区分。如果一个文件通过了这些测试中的任何一个,就会报告它的字符集。ASCII、ISO-8859-x、UTF-8和Extended-ASCII文件被识别为“Text”,因为它们在几乎任何终端上都是可读的;UTF-16和EBCDIC仅仅是“字符数据”,因为它们包含文本,但是文本需要翻译才能被读取。此外,文件将试图确定文本类型文件的其他特征.如果文件的行被CR、CRLF或Nel终止,而不是Unix标准LF,这将被报告。还将识别包含嵌入转义序列或过度醒目的文件。
一旦文件确定了在文本类型文件中使用的字符集,它将试图确定该文件是用哪种语言编写的。语言测试寻找特定的字符串(Cf. #include<names.h>),它可以出现在文件的前几个块中的任何地方。例如,关键字.br表示文件很可能是troff(1)输入文件,正如关键字struct表示C程序一样。这些测试不如前两组可靠,因此它们是最后执行的。语言测试例程还测试一些混类(例如tar(1)存档)。
任何无法标识为已在上述任何字符集中写入的文件,都被简单地称为“data”。
4、环境变量
环境变量MAGIC可以用来设置默认的魔术文件名。如果设置了该变量,那么文件将不会尝试打开$HOME/.magic。文件酌情将‘.mgc’添加到此变量的值中。环境变量POSIXLY_RIDER控制(在支持符号链接的系统上),文件是否会尝试遵循符号链接。如果设置了,那么文件将遵循符号链接,否则就不会。这也是由-l和-h选项控制的。
5、返回值
文件在成功时返回0,在错误时返回非零。如果文件操作数命名的文件不存在,无法读取,或者无法确定由文件操作数命名的文件的类型,则不认为这是影响退出状态的错误。
6、文件
/usr/share/misc/magic.mgc,默认已编译魔术列表。
/usr/share/misc/magic,包含默认魔术文件的目录。
7、实例
1)直接查看文件
[root@localhost weijie]# file 1.c
1.c: ASCII text //默认分隔符是冒号
[root@localhost weijie]# file -F , 1.c //指定分隔符为逗号
1.c, ASCII text
2)从给定文件中读取文件名,然后进行操作
[root@localhost weijie]# cat 1.c
2.c
3.c
[root@localhost weijie]# file -f 1.c //从1.c读取文件内容,将他们作为文件名重新进行file操作。
2.c: ASCII text
3.c: ASCII text
3)读取特殊文件的类型
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty
4)以MIME格式输出
$ file -i file.c file /dev/{wd0a,hda} //输出MIME类型
file.c: text/x-c
file: application/x-executable
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
-------------------------
whereis
查找命令的位置,包括执行文件、源代码、手册文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
whereis [选项] cmd
whereis [-bmsu] [-BMS directory... -f] filename...
2、选项列表
-b
只搜索二进制文件
-m
只搜索手册文件
-s
只搜索源代码
-u
寻找不寻常的条目。如果文件没有每个请求类型的一个条目,则该文件被认为是不寻常的。因此,“Whereis –m –u *”请求当前目录中没有文档的文件。
-B
在指定目录下搜索二进制文件
-M
在指定目录下搜索手册文件
-S
在指定目录下搜索源代码文件
-f
不显示文件名前的路径,在是使用-S 、–M、 -B选项时,必须使用这个选项
3、实例
1)查找某个命令的二进制文件
[root@192 bin]# whereis -b ls
ls: /bin/ls
2)查找命令的手册文件
[root@192 bin]# whereis -m ls
ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
3)查找/usr/bin中所有未记录在/usr/man/man 1中且源在/usr/src中的文件:
[root@192 bin]# cd /usr/bin
[root@192 bin]# whereis -u -M /usr/man/man1 -S /usr/src -f *
-------------------------
which
在环境变量PATH中搜索某个命令,返回命令的执行文件或者脚本位置,默认只显示第一个结果。这需要一个或多个参数。对于它的每个参数,它会打印出当在shell提示符下输入该参数时将执行的可执行文件的完整路径。它通过使用与bash(1)相同的算法在环境变量路径中列出的目录中搜索可执行文件或脚本来做到这一点。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
which [options] [--] programname [...]
2、选项列表
-v | -V | --version
显示命令版本信息
--help
显示帮助文档
-a | -all
输出所有的结果,而不只是第一个
--read-alias | -i
从stdin中读取别名,在stdout上报告匹配的别名。
--skip-alias
忽略“--read-alias”
--read-function
从标准输入读取函数,在stdout输出
--skip-functions
忽略“--skip-functions”
--skip-dot
忽略PATH中以点开头的目录
--skip-tilde
跳过路径中以主目录中的波浪线和可执行文件开头的目录。
--show-dot
如果路径中的目录以点开始,并为该路径找到匹配的可执行文件,则打印“./Programname”而不是完整路径。
--show-tilde
当目录与主目录匹配时,输出一个波浪线。如果将该选项作以root身份调用,则忽略此选项
--tty-only
如果不在TTY上,则停止右边的处理选项。
3、返回值
它返回失败参数的数量,或者当未指定“程序名”时返回-1。
4、实例
1)搜索指令
[root@192 /]# which -a ls
alias ls='ls --color=auto' //ls是一个别名
/bin/ls
2)显示所有结果
[root@192 /]# which -a ll
alias ll='ls -l --color=auto'
/bin/ls
/usr/bin/which: no ll in (/usr/lib/qt-3.3/bin:/usr/local/sbin:
/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/src/jdk1.8.0_181/bin:/root/bin)
-------------------------
sort
以行为单位,对文本文件进行排,并输出排序结果。默认情况下,以每一行为一个单位,从首字符开始按照ASCII码向后逐个比较。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
sort [选项] file
sort [OPTION]... --files0-from=F
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-b
忽略每行开头的空白字符
-d | --dictionary-order
排序时只考虑空格、数字、英语字母
-f | --ignore-case
将小写字母改为大写
-g | --general-numeric-sort
按一般数值比较
-i | --ignore-nonprinting
只考虑040到176之间的ASCII字符
-M | --month-sort
按月份排序
-h | --human-numeric-sort
按可读性数据排序,例如1K,2G
-n | --numeric-sort
按数值大小排序
-R | --random-sort
按键的随机散列排序
--random-source=FILE
从文件中获取随机字节
-r | --reverse
逆序排列
--sort=WORD
按给出的要求排序:general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
-V | --version-sort
按版本数字排序
--batch-size=NMERGE
最多一次合并NMERGE个输入;更多地使用temp文件
-c | --check | --check=diagnose-first
检测是否已排序,不排序
-C | --check=quiet | --check=silent
和“-c”一样,不要报告第一个坏行
--compress-program=PROG
用prog压缩时间,用prog-d解压
--files0-from=F
从文件F中以NUL结尾的名称指定的文件读取输入;如果F是-,则从标准输入中读取名称。
-k | --key=POS1[,POS2]
在POS 1(起始1)处启动键,在POS 2(默认行尾)结束键
-m | --merge
合并已经排序的文件,不排序
-o | --output=file
将结果输出到指定文件
-s | --stable
通过禁用最后的比较来稳定排序
-S | --buffer-size=SIZE
主内存缓冲器使用SIZE
-t | --field-separator=SEP
使用sep代替分隔符
-T | --temporary-directory=DIR
将DIR用于临时目录,而不是$TMPDIR或/tmp;多个选项指定多个目录
-u, --unique
和“-c”一起使用,检查是否有严格的排序;如果没有-c,则只输出相同运行的第一个。
-z, --zero-terminated
结束行为0字节,而不是换行符
3、实例
1)直接排序
[root@192 weijie]# cat 1.c
1K
1M
1G
1T
[root@192 weijie]# sort 1.c //直接对比字符排序
1G
1K
1M
1T
2)按照可读的单位来排序
[root@192 weijie]# sort -h 1.c //文件的内容按照单位排序,这些很明显是内存大小单位
1K
1M
1G
1T
3)按照数字排序
[root@192 weijie]# cat 2.c
123
23
212
[root@192 weijie]# sort 2.c //默认排序,按照字符逐个比较
123
212
23
[root@192 weijie]# sort -n 2.c //把内容当做数字排序
23
123
212
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
cat
连接文本文件或者标准输入,将结果输出到标准输出设备。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
cat [选项] file
cat file1 file2 > file3
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-A | --show-all
显示所有,等价于 –vET
-b | --number-nonblank
所有输出显示行号,除了空白行
-e
等价于 –vE
-E | --show-ends
在每一行的结尾输出 $
-n | --number
显示行号
-s | --squeeze
将连续的空行合并为一行
-T
将tab显示为^I
-t
等价 –vT
-v | --show-nonprinting
除了LDF和RAB,所有的控制符用“^“和“M-“方式显示
3、实例
1)输出文件内容,带行号
[root@192 weijie]# cat -b 1.c
1 2.c
2 3.c
2)合并两个文件到第三个
[root@192 weijie]# cat 1.c 2.c
2.c
3.c
123
345
[root@192 weijie]# cat 1.c 2.c > 3.c
[root@192 weijie]# cat 3.c
2.c
3.c
123
345
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
paste
将指定的文件按照列的方式合并,将结果显示到标准输出设备上,相当于两个并列的cat命令。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
paste [选项] files
2、选项列表
--help
显示帮助文档
--version
显示版本
-d list | --delimiters=list
以指定的分隔符区取代tab
-s
合并同一个文件的多行
3、实例
1)合并三个文件
[root@localhost weijie]# cat 1.c //显示这几个文件的内容
1K
1M
1G
1T
[root@localhost weijie]# cat 2.c
123
23
212
[root@localhost weijie]# cat 3.c
123
23
212
[root@localhost weijie]# paste 1.c 2.c 3.c //将文件合并
1K 123 123
1M 23 23
1G 212 212
1T
2)合并同一个文件的多行
[root@localhost weijie]# cat 4.c
123
23
212
[root@localhost weijie]# paste -s 4.c //将同一个文件的多行合并成多列
123 23 212
-------------------------
split
将一个大文件切割成较小的文件,默认情况下每1000行就会切割一次。分割后的文件,默认以xaa、xab、xac等命名。用户亦可以指定名字的前缀,例如指定前缀test,那么分割后的文件是testaa、testab、testac等。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
split [OPTION]… [INPUT [PREFIX]
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-a | --suffix-length=N
使用长度为N的后缀(默认为2)
-b | --bytes=SIZE
设置多少个字节分割一次
-C size | --line-size=size
设置每行最多size个字节
-d | --numeric-suffixes
用数字后缀代替字母
-l num | --line=num | -num
设置每多少行切割一次
--verbose
在打开每个输出文件之前打印一个诊断文件
3、实例
1)每2行分割一次
[root@localhost weijie]# split -2 5.c //每2行分割一次
[root@localhost weijie]# ls
1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c xaa xab xac //分割后的文件会自动命名
[root@localhost weijie]# cat xaa //查看分割后的文件
1,2c1,2
< 123
[root@localhost weijie]# cat xab
< 23
---
[root@localhost weijie]# cat xac
> 12345
> 2334
2)每10个字节分割一次,并指定输出文件的名字前缀
[root@localhost weijie]# split -b 10 5.c Tsplit //10个字节分割,前缀名Tsplit
[root@localhost weijie]# ls
1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c Tsplitaa Tsplitab Tsplitac Tsplitad xaa xab xac
[root@localhost weijie]# cat Tsplitaa
1,2c1,2
< [root@localhost weijie]# cat Tsplitab
123
< 23
-------------------------
fold
按照指定的宽度显示文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
fold [选项] file
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-b | --bytes
以字节为单位,指定宽度
-c | --characters
以字符为单位,指定宽度
-s | --space
以空格分割
-w | --width
指定列宽,默认30
3、实例
每6个字节一行输出
[root@localhost weijie]# cat 1.c
hello world, i am david. i love linux, love code.
[root@localhost weijie]# fold -b6 1.c
hello
world,
i am
david.
i lov
e linu
x, lov
e code
-------------------------
tr
删除或者更改文件中的字符串,这个指令一般需要两个字符集。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
tr [选项] set1 set2
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-c | -C | --complement
使用SET1的补码
-d | --delete
删除字符集1中指定的内容
-s | --squeeze-repeats
将set1中重复出现的内容,替换成单次出现的内容
-t | --truncate-set1
首先将SET1按照SET2的长度截断
集合指定为字符串。大多数人代表自己。解释序列是:
\NNN,具有八进制值nnn的字符(1到3位八进制数字)
\\,反斜线符号
\a,可听BEL
\b,(键盘的)退格键
\f,换页
\n,换行
\r,返回
\t,水平tab
\v,垂直tab
CHAR1-CHAR2,从CHAR 1到CHAR 2的所有字符按升序排列
[CHAR*],拷贝set2中的字符,长度为set1的长度
[CHAR*REPEAT],重复拷贝
[:alnum:],所有字母和数字
[:alpha:],所有字母
[:blank:],所有的水平空白
[:cntrl:],所有的控制字符
[:digit:],所有的数字
[:graph:],所有的可打印的字符,不包括空格
[:lower:],所有的小写字母
[:print:],所有的可打印字符,包括空格
[:punct:],所有标点符号
[:space:],所有的水平和垂直空格
[:upper:],所有的大写字母
[:xdigit:],所有的十六进制数字
[=CHAR=],所有等价于CHAR的字符
如果没有给出‘-d’,同时出现SET1和SET2,则会发生翻译。‘-t’只能在翻译时使用。通过在必要时重复SET1的最后一个字符,Set2被扩展到SET1的长度。Set2的多余字符将被忽略。只有[:lower:]和[:upper:]保证按升序展开;在set2翻译时使用,它们只能成对使用以指定大小写转换。‘-s’在不翻译或删除时使用SET1;压缩使用SET2,并在翻译或删除后发生。
3、实例
1)删除内容
[root@localhost weijie]# cat 1.c
hello world, i am david. i love linux, love code.
[root@localhost weijie]# tr -d hello < 1.c //将1.c的内容输出到tr,然后删除出现的字符
wrd, i am david. i v inux, v cd. //这里并不是删除一个单词hello,而是删除出现的这5个字母
2)将文件中的小写字母替换成大写
[root@localhost weijie]# tr -s a-z A-Z < 1.c
HELO WORLD, I AM DAVID. I LOVE LINUX, LOVE CODE.
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
touch
将文件的访问时间和修改时间修改为当前时间。如果指定的文件不存在,那么将会创造空文件,除非指定-c或-h选项。文件参数字符串‘-‘被专门处理,并导致touch更改与标准输出相关联的文件的时间。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
touch [选项] file
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-a
只改变访问时间
-c | --no-create
不创建文件
-d | --date=time
设置为指定的时间,而不是当前的时间
-f
忽略
-h
只改变符号链接
-m
只改变修改时间
-r | --reference=file
使用指定文件的时间
-t
使用CCYYMMDDhhmmss时间
--time=WORD
改指定的时间:Word为access、atime或use
“--date=STRING”是一种主要自由格式的人类可读的日期字符串,例如“Sun,2月29日16:21:42-0800”或“2004-02-29 16:21:21:42”,甚至“下星期四”。日期字符串可能包含指示日历日期、日时间、时区、周中日、相对时间、相对日期和数字的项。空字符串表示一天的开始。
3、实例
1)创建文件
[root@localhost weijie]# ls //文件不存在
1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c Tsplitaa Tsplitab Tsplitac Tsplitad xaa xab xac
[root@localhost weijie]# touch -c 6.c //使用选项-c,不创建文件
[root@localhost weijie]# ls
1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c Tsplitaa Tsplitab Tsplitac Tsplitad xaa xab xac
[root@localhost weijie]# touch 6.c //不使用任何选项,创建文件
[root@localhost weijie]# ls
1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c 6.c Tsplitaa Tsplitab Tsplitac Tsplitad xaa xab xac
2)用指定的文件来修改目标文件时间
[root@localhost weijie]# ll 1.c 2.c //查看文件时间
-rwxr--r-- 1 root david 50 9月 14 10:07 1.c
-rwxr--r-- 1 root root 11 9月 13 16:52 2.c
[root@localhost weijie]# touch -r 2.c 1.c //将1.c的时间修改和2.c一样
[root@localhost weijie]# ll 1.c 2.c //查看文件时间
-rwxr--r-- 1 root david 50 9月 13 16:52 1.c
-rwxr--r-- 1 root root 11 9月 13 16:52 2.c
-------------------------
umask
指定创建文件时所需要的权限掩码,掩码的执行权限对于文件没有效果。如果模式以数字开头,则解释为八进制数字;否则解释为符号模式掩码,类似于chmod(1)所接受的模式掩码。如果省略模式,则打印掩码的当前值。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
umask [选项] mask
2、选项列表
-S
以字符方式表示权限掩码
-P
显示当前权限掩码
3、实例
1)查看mask,创建目录
[root@localhost weijie]# umask //不用任何参数,可以查看掩码,0022
0022
[root@localhost weijie]# mkdir test //创建目录
[root@localhost weijie]# ll -d test //查看
drwxr-xr-x 2 root root 4096 9月 14 10:44 test //权限755
2)创建文件
[root@localhost weijie]# touch 11.c //创建文件
You have new mail in /var/spool/mail/root
[root@localhost weijie]# ll 11.c //查看权限
-rw-r--r-- 1 root root 0 9月 14 10:46 11.c //权限644,因为掩码中的执行权限,对文件没有效果
3)修改掩码,创建目录
[root@localhost weijie]# umask 0033 //修改掩码
[root@localhost weijie]# mkdir test/ //创建目录
[root@localhost weijie]# ll -d test/ //查看权限
drwxr--r-- 2 root root 4096 9月 14 10:48 test/ //权限是744
-------------------------
cksum
检查文件的crc是否正确,统计文件的字节数。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
cksum [选项] file
2、选项列表
--help
显示帮助文档
--version
显示版本信息
3、实例
检测文件
[root@192 weijie]# cksum 1.c
//crc校验 字节数 文件名
4188905735 12 1.c
sum
计算文件的校验码和块数,可以采用BSD和system V两种算法。如果没有指定文件,或者文件名是“-”,那么文件就是标准输入。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
sum [选项] file
2、选项列表
--version
显示版本信息
--help
显示帮助文档
-r
使用system v算法,使用1k字节。
-s
使用BSD算法,使用512字节
3、实例
1)BSD算法
[root@192 weijie]# sum -r 1.c
//校验 块数
35112 1
2)systemV算法
[root@192 weijie]# sum -s 1.c
//校验 块数 文件名
543 1 1.c
-------------------------
rm
删除文件和目录,默认情况下不会删除目录。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
rm [选项] file
2、选项列表
--help
显示帮助文档
--version
显示版本信息
-f | --force
强制执行,不交互
-i
交互模式,每删除一个文件都要询问
-I
在删除三个以上的文件之前,或者在递归删除之前,提示一次。“-I“的侵扰性不如“-i”,但仍能免受大多数错误的侵扰。
--interactive[=WHEN]
根据时间提示:从不(never),一次(-i),或始终(-i)。没有指定WHEN,总是提示
--one-file-system
递归删除层次结构时,跳过与相应命令行参数不同的文件系统上的任何目录。
--no-preserve-root
删除根目录
--preserve-root
不删除根目录,默认的
-r | -R | --recursive
递归的方式删除子目录
-v | --verbose
显示详细执行过程
3、说明
默认情况下,rm不删除目录。使用--recursive (-r or -R)选项也可以删除每个列出的目录及其所有内容。要删除名称以“-”开头的文件,例如“-foo”,请使用以下命令之一:
rm -- -foo
rm ./-foo
注意,如果使用rm删除文件,通常可以恢复该文件的内容。如果您想要更多的保证内容是真正不可恢复的,请考虑使用shred。
4、实例
1)删除te开头的文件
[root@localhost weijie]# ls
11.c 1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c 6.c te000 te001 test
[root@localhost weijie]# rm te*
rm:是否删除普通文件 "te000"?y
rm:是否删除普通文件 "te001"?y
rm: 无法删除"test": 是一个目录 //无法删除目录
2)删除目录
[root@localhost weijie]# rm -rf test/ //强制删除目录
[root@localhost weijie]# ls
11.c 1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c 6.c
-------------------------
tmpwatch
删除最近一段时间没有访问的文件,时间以小时为单位,节省磁盘空间。tmpwatch递归删除给定时间未被访问的文件。通常,它用于清理用于临时保存空间(如/tmp)的目录。当更改目录时,tmpwatch对可能的争用条件非常敏感,如果检测到错误,就会退出。它不遵循它正在清理的目录中的符号链接(即使给出一个符号链接作为它的参数),它不会切换文件系统,跳过根用户的lost+found目录,只删除空目录、常规文件和符号链接。
默认情况下,tmpwatch根据文件的atime(访问时间),而不是它们的Mtime(修改时间)来确定文件的日期。如果文件在“ls-l”暗示应该删除时没有被移除,请使用“ls-u”检查它们的数据,以确定这是否解释了问题的原因。
如果指定了--atime”,“--ctime”或者“--mtime”选项,那么删除文件的时间由他们中的最大值决定。如果“--dirmtime”选项意味着忽略目录的atime,即使使用了“—atime”选项。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
tmpwatch [选项] time file
tmpwatch [-u|-m|-c] [-MUadfqstvx] [--verbose] [--force] [--all] [--nodirs] [--nosymlinks] [--test] [--fuser] [--quiet] [--atime|--mtime|--ctime] [--dirmtime] [--exclude path] [--exclude-user user] time dirs
2、选项列表
-u | --atime
根据文件的atime(访问时间)做出删除文件的决定。请注意,定期更新的文件系统扫描使目录保持最近的状态。
-m | --mtime
根据文件的Mtime(修改时间)而不是atime做出删除文件的决定。
-c | -ctime
根据文件的ctime(Inode Changing Time)而不是atime来决定删除文件;对于目录,根据mtime做出决定
-M | --dirmtime
根据目录的Mtime(修改时间)而不是atime作出删除目录的决定;完全忽略目录的atime
-a | -all
删除所有文件类型,而不仅仅是常规文件、符号链接和目录。
-d | --nodirs
不要尝试删除目录,即使它们是空的。
-f | -force
强制删除,即使root用户没有写的权利
-l | --nosymlinks
不删除符号链接
-q | --quite
只报告致命错误
-s | --fuser
尝试在删除文件之前使用“fuser”命令查看文件是否已打开。默认情况下未启用。在某些情况下确实有帮助,但不是全部。依赖于/sbin中安装的fuser。不支持HPUX或Solaris
-t | --test
不删除,只是演示要做什么
-U | --exclude-user=user
不删除指定所有者的文件,可以指定用户名,也可以指定用户ID
-v | --verbose
显示详细信息
-x | --exclude
跳过目录及其内部文件,如果路径不存在,则它必须是不包含符号链接的绝对路径。
-X | --exclude-pattern=pattern
跳过路径匹配模式;如果目录匹配模式,则其中包含的所有文件也将被跳过。模式必须匹配不包含符号链接的绝对路径。
3、实例
1)删除当前目录1小时内没有访问的文件
[root@192 weijie]# ls
1.c 2.c 3.c magic.mgc test01 test03 wjtpflR
1.c~ 2.c~ 3.c~ my.iso test02 wj234.q1C
You have new mail in /var/spool/mail/root
[root@192 weijie]# tmpwatch 1 .
[root@192 weijie]# ls
1.c 1.c~ 2.c
2)不删除指定用户的文件
[root@192 weijie]# ll
总用量 12
-rwxr--r-- 1 root david 12 9月 13 16:49 1.c //文件所有者都是root
-rw-r--r-- 1 root david 30 9月 13 16:43 1.c~
-rwxr--r-- 1 root root 11 9月 13 16:52 2.c
[root@192 weijie]# tmpwatch -U root 1 . //不删除root用户的文件
[root@192 weijie]# ls
1.c 1.c~ 2.c
-------------------------
mkdir
如果目录不存在,那么就创建目录。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
mkdir [选项] dir
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-m | --mode=MODE
设置目录的权限
-p | --parents
创建多层目录的时候,如果父目录不存在,那么首先创建父目录
-v | --vervose
显示执行过程
3、实例
1)创建一个最大权限的目录
[root@localhost weijie]# mkdir -m 777 test
[root@localhost weijie]# ls -l
总用量 360
-rw-r--r-- 1 root root 0 9月 7 09:11 1.c
-rw-r--r-- 1 root root 358400 9月 7 15:46 my.iso
drwxrwxrwx 2 root root 4096 9月 10 11:33 test
2)创建目录及其父目录
[root@localhost weijie]# mkdir -v test01/test //目录test01不存在,无法在其下创建test目录
mkdir: 无法创建目录"test01/test": 没有那个文件或目录
[root@localhost weijie]# mkdir -p -v test01/test //使用选项-p,当目录test01不存在的时候,首先创建test01
mkdir: 已创建目录 "test01"
mkdir: 已创建目录 "test01/test"
You have new mail in /var/spool/mail/root
-------------------------
chattr
改变文件的属性,这个命令只有超级用户才能使用。这个指令适用于ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs系统。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
chattr [-RVf] [ -v version ] + | - | =[属性] file
运算符‘+‘使所选属性被添加到文件的现有属性中;’-’使它们被删除;‘=’使它们成为文件所拥有的唯一属性。
2、选项列表
-R
递归的方式修改目录及其子目录下的文件属性
-V
显示详细执行过程
-f
跳过错误信息
-v version
设置文件或者目录的版本号
3、属性
a,只能以append的方式打开
A,最后修改时间不被记录
c,对文件进行压缩,而读取的时候会得到解压数据
D,同步目录更新
d,不进行备份
E,压缩文件有错误,这个属性不能被用户手动修改
e,文件使用扩展区来映射到磁盘
-I,目录使用hash树来索引,这个属性不能被用户手动修改
h,文件大小超过2TB,这个属性不能被用户手动修改
i,文件不能被修改,但是可以删除或者重命名
s,将数据块清零并存入磁盘
S,同步更新。将文件修改之后,结果写入磁盘
u,预防意外删除
-T,目录层次结构顶部
-X,压缩原始存取。虽然lsattr(1)可以显示它,但它目前不能使用chattr(1)进行设置或重置。
-Z,压缩脏文件。虽然它可以由lsattr(1)显示,但不能使用chattr(1)设置或重置
4、实例
1)增加a属性,设置版本号。显示详细的执行过程
[root@192 weijie]# chattr -v 1 -V +a 1.c
chattr 1.41.12 (17-May-2010)
1.c的标志被设为 -----a-------e- //这里显示出最后的结果
Version of 1.c set as 1
2)删除a属性,增加c属性
[root@192 weijie]# chattr -Vv 2 -a +c 1.c
chattr 1.41.12 (17-May-2010)
1.c的标志被设为 --------c----e-
Version of 1.c set as 2
-------------------------
lsattr
显示指定文件或者目录的属性。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
lsattr [选项] file
2、选项列表
-v
列出文件版本号
-R
递归列出所有子目录中文件的属性
-a
列出所有文件的属性,包含隐藏文件
-d
列出目录的属性,而不是它里面内容的属性
-V
显示执行过程
3、实例
1)列出文件属性
[root@192 weijie]# lsattr 1.c
-------------e- 1.c
2)列出目录下所有文件属性
[root@192 weijie]# lsattr -a test01
-------------e- test01/.
-------------e- test01/..
-------------e- test01/1.c~
-------------e- test01/1.c
3)列出目录属性
[root@192 weijie]# lsattr -d test01
-------------e- test01
-------------------------
ar
ar指令可以创建、修改库,也可以从库中提取单个模块。库是一个单独的文件,里面包含了按照特定结构组织起来的其他文件,我们称作member。归档文件通常是一个二进制文件,我们一般将归档文件当作库来使用。原始文件的内容、模式(权限)、时间戳、所有者和组保存在存档中,并可在提取时恢复。
GNU ar可以维护其成员具有任意长度的名称的档案;但是,根据您的系统上对ar的配置方式,可以对成员名长度进行限制,以便与其他工具维护的存档格式兼容。如果存在,限制通常是15个字符(典型的与a.out相关的格式)或16个字符(典型的与coff相关的格式)。
当您指定修饰符的时候,ar会为存档中可重定位的对象模块中定义的符号创建一个索引。创建之后,每当ar对其内容进行更改时,这个索引就会在存档中更新(除了Q更新操作外)。具有这样一个索引的归档可以加速链接到库,并允许库中的例程相互调用,而不考虑它们在存档中的位置。您可以使用“nm -s”或“nm --print-armap”列出此索引表。如果存档缺少表,则可以使用另一种称为ranlib的ar形式来添加表。
GNU ar可以随意创建一个瘦存档,其中包含一个符号索引和对档案成员文件的原始副本的引用。这样的存档对于构建用于本地构建的库非常有用,因为在本地构建中,可重新定位的对象将保持可用,而复制每个对象的内容只会浪费时间和空间。薄档案也是扁平的,因此将一个或多个档案添加到一个瘦归档中将单独添加嵌套归档的元素。存档元素的路径是相对于归档本身存储的。
GNU Ar被设计成与两个不同的设施兼容。您可以使用命令行选项来控制它的活动,比如Unix系统上的不同类型的ar;或者,如果您指定了单一命令行选项-M,您可以使用标准输入提供的脚本来控制它,比如MRI "librarian"程序。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] archive [member...]
2、选项列表
GNU ar允许您在第一个命令行参数中按任意顺序混合操作代码p和修饰符标志mod。如果您愿意,可以用“-”开始第一个命令行参数。p键字母指定要执行的操作;它可能是以下任一操作,但您必须仅指定其中一个操作
操作代码
c,创建归档文件
d,删除归档中的成员文件,将要删除的模块的名称指定为member。如果没有指定要删除的文件,则存档将保持不变
m,改变成员文件在归档中的顺序 。如果在多个成员中定义了一个符号,则存档中成员的排序会改变程序使用库链接的方式。如果在“m”中没有使用修饰符,那么在成员参数中命名的任何成员都会移动到归档文件的末尾;您可以使用a、b或i修饰符将它们移动到指定的位置。
p,将存档的指定成员打印到标准输出文件。如果指定了v修饰符,请在将其内容复制到标准输出之前显示成员名。
q,将文件附加在归档文件的最后。修饰符a、b和i不影响此操作;新成员总是放在归档的末尾。修饰符v在追加时使每个文件都有ar列表。因为这个操作的重点是速度,所以存档的符号表索引不会更新,即使它已经存在;您可以显式地使用ar或ranlib来更新符号表索引。但是,有太多不同的系统假设快速追加索引,因此GNU ar实现了q作为r的同义词。
r,将文件‘member’插入到归档文件,如果归档中存在要插入的文件,那么就覆盖。此操作与q的不同之处在于,如果现有成员的名称与要添加的成员匹配,则删除它们。如果成员中不存在‘member’,ar显示错误消息,并保持与该名称匹配的任何现有存档成员不受干扰。默认情况下,在文件末尾添加新成员;但您可以使用其中一个修饰符a、b或i请求相对于现有成员的位置。与此操作一起使用的修饰符v将引发插入的每个文件的一行输出。字母a或r,以指示文件是否被追加(没有删除旧成员)或被替换。
t
,显示归档文件包含的文件列表。通常只显示成员名称;如果还希望查看模式(权限)、时间戳、所有者、组和大小,则还可以通过指定v修饰符来请求。如果未指定成员,则将列出存档中的所有文件。如果一个存档中有多个同名文件,只列出第一个实例;要查看它们,您必须要求一个完整的列表。
x
,从归档文件中提取成员文件,您可以在此操作中使用v修饰符,在提取时请求ar列出每个名称。如果不指定成员,则提取存档中的所有文件。无法从瘦存档中提取文件。
许多修饰符(Mod)可以紧跟p键,以指定操作行为的变化
修饰符
a,在存档的现有成员之后添加新文件。如果使用修饰符a,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。
b,在存档的现有成员之前添加新文件。如果使用修饰符b,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。(与i相同)
c,创建档案。当您请求更新时,如果指定的存档不存在,则始终创建它。但是,除非事先指定通过使用此修饰符来创建警告,否则将发出警告。
D,在确定性模式下操作。当添加文件和存档索引时,对UID、GID、时间戳使用零,并对所有文件使用一致的文件模式。当使用此选项时,如果ar与相同的选项和相同的输入文件一起使用,则多次运行将创建相同的输出文件,而不管输入文件的所有者、组、文件模式或修改时间。
f,截断存档中的名称。GNU ar通常允许任意长度的文件名。这将导致它创建与某些系统上的本机ar程序不兼容的档案。如果这是个问题,那么当将f修饰符放在归档文件中时,可以使用f修饰符来截断文件名。
i,在存档的现有成员之前插入新文件。如果使用修饰符i,则现有存档成员的名称必须作为relpos参数出现在归档规范之前。(与b相同)
l,没有用的修饰符
N,使用计数参数。如果存档中有多个具有相同名称的条目,则使用此方法。从存档中提取或删除给定名称的实例计数
o,提取成员时保留成员的原始日期。如果不指定此修饰符,则从档案中提取的文件将加盖提取时间。
P,在存档中匹配名称时使用完整路径名称。GNU ar不能创建具有完整路径名的存档(这类档案不是POSIX投诉),但其他归档创建者可以。此选项将导致GNU ar使用完整的路径名匹配文件名,这在从另一个工具创建的归档文件中提取单个文件时非常方便。
s,将对象文件索引写入存档,或更新现有的索引,即使没有对归档进行其他更改。您可以在任何操作中使用此修饰符标志,也可以单独使用。在存档上运行ar等于在它上运行ranlib。
S,不要生成存档符号表。这可以加快构建一个大型库的几个步骤。结果存档不能与链接器一起使用。为了构建符号表,必须在ar的最后一次执行时省略S修饰符,或者必须在归档文件上运行ranlib。
T,将指定的归档文件设置为瘦存档。如果它已经存在并且是一个常规存档,则现有成员必须与存档目录相同。
u,通常,ar r将列出的所有文件插入存档中。如果只想插入比同名的现有成员更新的文件,请使用此修饰符。u修饰符仅允许用于操作r(替换)。特别是不允许使用组合qu,因为检查时间戳将失去操作q的任何速度优势。
v,显示详细执行过程
V,显示ar的版本
AR忽略初始选项-x32_64,以便与AIX兼容。此选项产生的行为是GNU ar的默认行为。ar不支持任何其他-X选项;特别是,它不支持-x32,这是AIX ar的默认设置。
可选的命令行开关“--plugin name”使ar加载名为name的插件,这增加了对更多文件格式的支持。只有在工具链已启用插件支持的情况下,此选项才可用。
@file选项,从文件中读取命令行选项。已读取的选项被插入以代替原始的@file选项。如果文件不存在或无法读取,则将按字面处理该选项,而不删除该选项。file中的选项用空格分隔。可以在选项中包含空格字符,方法是将整个选项包围在单引号或双引号中。任何字符(包括反斜杠)都可以通过前缀所包含的字符来包括在反斜杠中。file本身可能包含额外的@file选项;任何此类选项都将被递归处理。
3、实例
1)创建归档文件
[root@localhost weijie]# ar -rc mlib.a 1.c 2.c //创建归档
[root@localhost weijie]# ls
11.c 1.c 1.c~ 2.c 3.c 4.c 4.c~ 5.c 6.c mlib.a
[root@localhost weijie]# ar -t mlib.a //查看归档的文件列表
1.c
2.c
2)在归档中插入文件
[root@localhost weijie]# ar -rc mlib.a 3.c //插入3.c,此时归档中还没有3.c
[root@localhost weijie]# ar -t mlib.a //查看文件列表,3.c被加入
1.c
2.c
3.c
[root@localhost weijie]# ar -rc mlib.a 1.c //插入1.c,注意此时1.c已经存在了
[root@localhost weijie]# ar -t mlib.a //查看文件列表,1.c已经被覆盖了
1.c
2.c
3.c
3)在归档的最后插入文件
[root@localhost weijie]# ar -q mlib.a 1.c //是用选项q来追加到最后,注意这个和r是不一样的
[root@localhost weijie]# ar -t mlib.a //查看文件列表,新增加了1.c
1.c
2.c
3.c
1.c
4)从归档中删除文件
[root@localhost weijie]# ar -d mlib.a 1.c //删除1.c
[root@localhost weijie]# ar -t mlib.a //查看文件列表,第一个1.c已经删除,但是最后还有一个
2.c
3.c
1.c
[root@localhost weijie]# ar -d mlib.a 1.c //再次删除1。C
[root@localhost weijie]# ar -t mlib.a //查看文件列表,1.c已经被删除
2.c
3.c
-------------------------
gzexe
压缩可执行文件,在执行程序的时候可以自动实现解压。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
gzexe file
2、选项列表
--help
帮助信息
--version
显示命令版本信息
-d
解压
3、实例
1)压缩ls指令
[root@localhost weijie]# gzexe /bin/ls //压缩ls指令,原来的指令文件变为ls~
/bin/ls: 56.0%
[root@localhost weijie]# ls -l /bin/ls* //压缩后的命令占用更少的磁盘,而且还可以执行
-rwxr-xr-x 1 root root 53198 9月 19 17:55 /bin/ls
-rwxr-xr-x 1 root root 118932 11月 22 2013 /bin/ls~
2)解压ls指令
[root@localhost weijie]# gzexe -d /bin/ls //解压
[root@localhost weijie]# ls -l /bin/ls* //解压之后,原来的压缩包变为ls~
-rwxr-xr-x 1 root root 118932 9月 19 17:58 /bin/ls
-rwxr-xr-x 1 root root 53198 9月 19 17:55 /bin/ls~
-------------------------
zip
zip是一种最通用的文件压缩方式,使用于unix、msdos、windows、OS等系统。如果在编译zip时包含bzip 2库,zip现在也支持bzip 2压缩。当将大于4GB的文件添加到存档中时,zip会自动使用Zip 64扩展名,包含Zip 64条目的归档将被更新(如果结果的归档仍然需要Zip 64),归档的大小将超过4GB,或者当归档中的条目数超过64K时。Zip 64也用于从标准输入中传输的档案,因为事先不知道这些档案的大小,但是选项fz可以用来强制zip创建与PKZIP 2兼容的档案(只要不需要Zip 64扩展)。必须使用PKZIP4.5兼容解压缩,例如解压缩6.0或更高版本,才能使用Zip 64扩展名提取文件。
zip程序将一个或多个压缩文件与有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到zip存档中。对于文本文件来说,压缩比为2:1和3:1是常见的。zip只有一种压缩方法(通缩),并且可以在不压缩的情况下存储文件。(如果添加了bzip 2支持,zip也可以使用bzip 2压缩,但这些条目需要一个合理的现代解压缩来解压缩。当选择bzip 2压缩时,它将通货紧缩替换为默认方法。)zip会自动为每个要压缩的文件选择更好的两个文件(通缩或存储,如果选择bzip2,则选择bzip2或Store)。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
zip [选项] zipfile list
2、选项列表
-? | -h | --help
帮助信息
-h2 | --more-help
显示扩展帮助,包括更多关于命令行格式、模式匹配和更模糊的选项。
-V | --version
显示命令版本信息
-a | --ascii
将系统使用的EBCDIC文件转换为ascii
-A | --adjust-sfx
调整自解压可执行档案。自解压缩的可执行存档是通过将SFX存根放在现有存档的前面创建的。-A选项告诉zip调整存储在归档中的条目偏移量,以考虑到这些“序言”数据。
-b path | --temp-path path
为临时zip归档使用指定的路径
-B | --binary
使用二进制格式,默认是文本格式
-c | --entry-comments
给被压缩的文件加上注释信息
-d | --delete
将指定的文件从压缩文件中删除
-db | --display-bytes
显示正在运行的字节计数,显示压缩的字节和要运行的字节。
-dc | --display-counts
显示已压缩的条目的运行计数和要运行的条目
-dd | --display-dots
在每个条目被拉链时显示点(除了在具有自己的进度指示器的端口上)。见下面的设置点大小-DS。默认情况下,每处理10 MB的输入文件就有一个点。-v选项还显示点(以前的速率比这个高得多,但现在-v也默认为10 MB),这个速率也是由-ds控制的。
-dg | --display-globaldots
显示存档的进度点,而不是为每个文件显示进度点。
-ds size | --dot-size size
设置为显示的每个点处理的输入文件的数量。尺寸为nm格式,其中n是一个数字,m是一个乘数。目前m可以是k(KB),m(MB),g(GB),或者t(TB),所以如果n是100,m是k,那么大小将是100 k,即100 KB。默认值为10 MB。
-du | --display-usize
显示每个条目的未压缩大小。
-dv | --display-volume
显示正在读取的每个条目的卷(磁盘)号,如果读取现有存档,并将其写入
-D | --no-dir-entries
不要在zip存档中为目录创建条目。
-DF | --difference-archive
创建一个包含自原始存档创建以来所有新的和已更改的文件的归档文件。
-e | --encrypt
压缩文件加密
-f | --freshen
替代压缩文件中的旧文件,如果文件不存在,那么不会追加文件
-F | --fix | -FF | --fixfix
尝试修复已经损坏的压缩文件
-FI | --fifo
通常zip会跳过读取遇到的任何FIFO(命名管道),因为如果FIFO没有被喂入,zip就会挂起。
-FS | --filesync
将存档的内容与操作系统上的文件同步
-g | --grow
将文件追加到已经存在的压缩文件结尾
-i | --include
仅包含指定的文件
-j | --junk-paths
压缩的时候,忽略文件名中的路径,只保存文件名和内容
-J | --junk-sfx
从存档中删除任何预置的数据
-i | --include
只包含指定的文件
-la | --log-append
附加到现有日志文件。默认值是覆盖
-lf | --logfile-path
在给定路径上打开日志文件。默认情况下,该位置的任何现有文件都会被覆盖
-li | --log-info
在日志中包含信息消息,例如正在压缩的文件名。默认情况下,只包含命令行、任何警告和错误以及最终状态。
-L | --license
显示zip的许可证
-m | --move
将指定的文件移动到压缩文件
-MM | --must-match
所有输入模式必须至少匹配一个文件,所有找到的输入文件必须是可读的。
-n | --suffixes
不要尝试压缩以给定后缀命名的文件。
-nw | --no-wild
不要执行内部通配符处理。
-o | --latest-time
将zip归档的“最后修改”时间设置为在zip归档中的条目中找到的最新(最老的)“最后修改”时间。
-O | --output-file
像往常一样处理归档更改,但不是更新现有存档,而是将新存档输出到输出文件。
-p | --path
将相对文件路径作为存储在存档中的文件名称的一部分
-P | --password
加密
-q | --quite
静默模式,不显示执行过程
-r | --recurse-paths
压缩的时候,递归处理目录
-R | --recurse-patterns
递归遍历目录结构,从当前目录开始。
-s | --split-size
启用创建拆分存档并设置拆分大小
-sb | --split-bell
如果拆分并使用拆分暂停模式,则在zip对每个拆分目标暂停时按下铃声。
-sc | --show-command
显示已处理并退出的启动zip的命令行
-sf | --show-files
显示要操作的文件,然后退出。
-so | --show-options
显示在当前系统上编译的zip支持的所有可用选项
-sp | --split-pause
如果使用-s启用拆分,则启用拆分暂停模式
-su | --show-unicode
和-sf一样,如果存在,还会显示路径的unicode版本
-sU | --show-just-unicode
和-sf一样,仅显示路径的Unicode版本(如果存在),否则显示路径的标准版本。
-sv | --split-verbose
在拆分时启用各种详细的消息,显示拆分是如何进行的。
-t mmddyyyy | --from-date mmddyyyy
不要对在指定日期之前修改的文件进行操作,其中mm是月份(00-12),dd是月份的日期(01-31),yyyy是年。
-T | --test
测试新zip文件的完整性。如果检查失败,旧的zip文件将保持不变,并且(使用-m选项)不会删除输入文件。
-TT | --unzip-command
当使用-T选项时,使用命令cmd而不是“unzip-tqq”来测试存档。
-U | --copy-entries
将条目从一个存档复制到另一个存档。
-u | --update
更新文件,不存在的时候,直接追加。仅当zip存档中的现有条目比zip存档中的版本修改得更近时,才替换(更新)它。
-UN | --unicode
确定zip应该如何处理unicode文件名
-x | --exclude
压缩时不包含指定的文件
-y
压缩时直接保存符号链接
-v | --verbose
显示执行过程
-ws | --wild-stop-dirs
通配符仅在目录级别匹配。
-#
使用指定的数字#调整压缩速度,其中-0表示没有压缩(存储所有文件),-1表示最快的压缩速度(压缩较少),-9表示最慢的压缩速度(最佳压缩,忽略后缀列表)。默认的压缩级别是-6
-@ | --names-stdin
从标准输入中获取输入文件列表。每行只有一个文件名。
4、模式匹配
?,匹配任意单个字符
*,匹配任意多个字符
[]匹配括号内所示范围内的任何字符(例如:[a-f],[0-9])。
5、退出码
0,正常,没有错误。
2,压缩文件的意外结束。
3,检测到zip文件格式中的通用错误。
4,在程序初始化期间,zip无法为一个或多个缓冲区分配内存。
5,检测到zip文件格式出现严重错误。
6,条目太大,无法处理(例如,不使用Zip 64或试图读取现有存档太大时,输入文件大于2GB)或条目太大,不能用zip拆分。
7,无效注释格式。
8,zip-T失败或内存不足。
9,用户使用Control-C(或类似的)过早中止zip。
10,使用临时文件时,zip遇到了一个错误。
11,读取或查找错误。
12,zip无事可做。
13,丢失或空压缩文件。
14,写入文件时出错。
15,zip无法创建要写入的文件。
16,坏命令行参数。
18,zip无法打开要读取的指定文件。
19,在此系统中不支持的选项编译了zip。
6、例子代码
创建存档stuff.zip(假设它不存在),并以压缩形式将所有文件放在当前目录中(.zip后缀自动添加,除非存档名称已经包含一个点;这允许明确说明其他后缀)。
zip stuff *
zip stuff .* *
压缩整个目录。创建存档foo.zip,其中包含当前目录中包含的目录foo中的所有文件和目录。
zip -r foo foo
您可能希望创建一个包含foo中文件的zip存档,而不记录目录名foo。可以使用-j选项关闭路径,如
zip -j foo foo/*
如果您缺少磁盘空间,您可能没有足够的空间来保存原始目录和相应的压缩归档文件。在这种情况下,您可以使用-m选项分步骤创建归档文件。如果foo包含子目录Tom、Dick和Harry。其中,第一个命令创建foo.zip,下两个命令添加到其中。在完成每个zip命令后,最后创建的归档文件将被删除,为下一个zip命令提供工作空间。
zip -rm foo foo/tom
zip -rm foo foo/dick
zip -rm foo foo/harry
使用-s设置拆分大小并创建拆分存档。大小可选地被k(KB)、m(MB)、g(Gb)或t(Tb)之一跟随。创建目录foo的拆分存档,每个分区不大于2GB。如果foo包含5 GB的内容,并且内容未经压缩就存储在拆分存档中(为了使这个示例变得简单),这将创建三个分块,分别是2GB的split.z01、2GB的split.z02和略高于1GB的split.zip。
zip -s 2g -r split.zip foo
虽然zip不更新拆分档案,但zip提供了新的选项-O(-Output-file),允许更新拆分档案并将其保存在新的存档中。读取归档文件,即使拆分,也会添加foo.c和bar.c文件,并将结果存档写入outArchive.zip。如果inArchive.zip是拆分的,那么outArchive.zip默认为相同的拆分大小。请注意,outArchive.zip和使用它创建的任何拆分文件都会在没有警告的情况下被覆盖。这种情况将来可能会改变。
zip inarchive.zip foo.c bar.c --out outarchive.zip
7、实例
1)压缩文件
[root@localhost weijie]# zip -r res . -i *.c //压缩当前目录下的所有.c文件
adding: 11.c (stored 0%)
adding: 4.c (stored 0%)
adding: 2.c (deflated 9%)
adding: 3.c (stored 0%)
adding: 5.c (deflated 13%)
[root@localhost weijie]# ls
11.c 1.c.gz 2.c 3.c 4.c 5.c 6.c~ res.zip
2)给压缩文件添加、删除内容
[root@localhost weijie]# zip res.zip -g 6.c~ //追加6.c~
adding: 6.c~ (stored 0%)
[root@localhost weijie]# zip res.zip -d 2.c //删除2.c
deleting: 2.c
3)压缩时设置密码
[root@localhost weijie]# zip -er res . -i *.c //设置密码,需要输入两次密码
Enter password:
Verify password:
adding: 11.c (stored 0%)
adding: 4.c (stored 0%)
adding: 2.c (deflated 9%)
adding: 3.c (stored 0%)
adding: 5.c (deflated 13%)
-------------------------
zipinfo
在不解压的情况下,获取zip压缩文件的的详细信息。zipinfo列出了ZIP档案中有关文件的技术信息,最常见的是在MS-DOS系统上。这些信息包括文件访问权限、加密状态、压缩类型、版本和操作系统或压缩程序的文件系统等。默认的行为(没有选项)是列出存档中每个文件的单线条目,标题和拖车行为整个归档提供摘要信息。格式是Unix‘ls-l’和‘unzip-v’输出之间的交叉。见下文的详细说明。请注意,zipinfo与解压缩程序相同(在Unix下,链接到它);然而,在某些系统上,在解压缩编译时可能忽略了zipinfo支持。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
zipinfo [-12smlvhMtTz] file[.zip] [file(s) ...] [-x xfile(s) ...]
2、参数和选项列表
file[.zip]
ZIP存档的路径。如果文件规范是通配符,则按操作系统(或文件系统)确定的顺序处理每个匹配的文件。只有文件名可以是通配符;路径本身不能。通配符表达式类似于unix egrep(1)(正则)表达式,可能包含
[file(s)]
要处理的归档成员的可选列表,用空格分隔。(用VMSCLI定义的VMS版本必须用逗号分隔文件。)正则表达式(通配符)可用于匹配多个成员;参见上文。同样,请务必引用否则将由操作系统展开或修改的表达式。
[-x xfile(s)]
要排除在处理之外的归档成员的可选列表。
-h | --help
帮助信息
-V | --version
显示命令版本信息
-1
只列出文件名称
-2
和“-1”类似,但是可以单配其他选项“-h”、-i”、-z”
-s
类似“ls –l”的短格式
-m
类似“ls -l”的medium格式
-l
类似“ls -l”的长格式
-v
显示zip文件的详细信息
-h
只列出压缩包的文件名、大小、包内文件数目
-M
类似more命令,分屏显示
-t
列出压缩文件内的文件数目、压缩前后文件大小、压缩率
-T
将压缩包内文件的日期以年、月、日、时、分、秒的顺序列出
-z
显示压缩文件的注释信息
3、例子代码
要获得包含头行和总计行的ZIP存档Storage.zip的完整内容的基本的、简短的列表,只使用归档名称作为zipinfo的参数。
zipinfo storage
要生成一个基本的、长格式的列表(而不是冗长的),包括标题和总计行,请使用-l:
zipinfo -l storage
要列出没有标题和总计行的存档的完整内容,可以忽略-h和-t选项,或者显式地指定内容:
zipinfo --h-t storage
zipinfo storage \*
默认情况下,若要关闭汇总行,请使用环境变量(此处假定为C shell):
setenv ZIPINFO --t
zipinfo storage
为了再次获得第一个示例的完整、简短的列表,考虑到前面示例中设置了环境变量,有必要显式地指定-s选项,因为-t选项本身意味着只打印页 脚行
setenv ZIPINFO --t
zipinfo -t storage [only totals line]
zipinfo -st storage [full listing]
若要以中等格式列出存档中单个文件的信息,请显式指定文件名。
zipinfo -m storage unshrink.c
任何成员文件的规范都将覆盖默认的标头和总计行;将只打印有关请求文件的一行信息。这是在请求有关单个文件的信息时所期望的直观结果。对于多个文件,了解总的压缩和未压缩大小通常是有用的;在这种情况下,可以显式地指定-t:
zipinfo -mt storage "*.[ch]" Mak\*
要获取有关ZIP存档的最大信息,请使用详细选项。如果操作系统允许,通常明智的做法是将输出输送到Unix More(1)这样的过滤器中:
zipinfo -v storage | more
要查看存档中最近修改的文件,请结合外部排序实用程序(如Unix Sort(1)和sed(1)使用-T选项
zipinfo -T storage | sort –nr -k 7 | sed 15q
4、实例
1)显示压缩文件内的信息
[root@localhost weijie]# zipinfo res.zip //查看压缩包内文件信息
Archive: res.zip
Zip file size: 907 bytes, number of entries: 5
-rw-r--r-- 3.0 unx 0 BX stor 18-Sep-14 10:46 11.c
-rwxr--r-- 3.0 unx 15 TX stor 18-Sep-19 16:08 4.c
-rwxr--r-- 3.0 unx 11 TX defN 18-Sep-19 16:08 2.c
-rwxr--r-- 3.0 unx 15 TX stor 18-Sep-19 16:08 3.c
-rw-r--r-- 3.0 unx 38 TX defN 18-Sep-14 09:41 5.c
5 files, 79 bytes uncompressed, 73 bytes compressed: 7.6%
2)使用-h选项
[root@localhost weijie]# zipinfo -h res.zip //只显示压缩包大小、文件数目
Archive: res.zip
Zip file size: 907 bytes, number of entries: 5
-------------------------
bunzip2
解压缩bzip2压缩过的文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
bunzip2 [-fkvsVL] 文件
2、选项列表
-f | --force
强制执行
-k | --keep
解压之后,保留源文件
-v | --verbose
显示详细信息
-s | --small
减少内存使用,用于压缩、解压缩和测试。使用修改的算法对文件进行解压缩和测试,该算法每个块字节只需要2.5字节。这意味着任何文件都可以在2300 k内存中解压缩,尽管速度是正常速度的一半。
-L | --license | -V | --version
显示软件版本,许可条款和条件。
3、实例
1)解压,保留压缩包
[root@localhost weijie]# bunzip2 -k 2.c.bz2 //解压之后保留压缩包
[root@localhost weijie]# ls
11.c 1.c.gz 1.gz 2.c 2.c.bz2 3.c 4.c 5.c 6.c~ rec000012.c.bz2 res.zip
2)解压
[root@localhost weijie]# bzip2 -d res.bz2 //解压
[root@localhost weijie]# ls
11.c 1.c.bz2 2.c 3.c 4.c 5.c 6.c~ bak res
3)将两个文件压缩到一个文件中
[root@localhost weijie]# cat 1.c 2.c //输出两个文件的内容
hello world,
i am david.
i love linux,
love code.
123
23
212
[root@localhost weijie]# bzip2 –c 1.c > foo.gz //将1.c压缩到foo
[root@localhost weijie]# bzip2 –c 2.c >> foo.gz //将2.c压缩到foo
[root@localhost weijie]# bgzip2 -d foo.gz //解压foo
[root@localhost weijie]# cat foo //显示foo的内容
hello world,
i am david.
i love linux,
love code.
123
23
212
-------------------------
bzcat
解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s。该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
bzcat [-s] 文件
2、选项列表
-s
降低程序运行时内存使用
3、实例
解压文件到标准输出
[root@localhost weijie]# cat 2.c
123
23
212
[root@localhost weijie]# bzcat -s 2.c.bz2 //将文件解压到标准输出
123
23
212
-------------------------
zcat
解压有gzip压缩的文件,将解压结果送到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
zcat [-fhVL] 文件
2、选项列表
-h | --help
帮助信息
-V | --version
显示命令版本信息
-f | --force
强制执行
-L | --licence
显示gzip的版本并且退出
3、实例
1)查看压缩包信息
[root@localhost weijie]# zcat -l 1.c.gz
compressed uncompressed ratio uncompressed_name
70 53 9.4% 1.c
2)解压文件到标准输出
[root@localhost weijie]# zcat 1.c.gz
hello world,
i am david.
i love linux,
love code.
-------------------------
bzmore
将bzip压缩过的文件解压到标准输出,同时也可以将普通文件显示到标准输出。该指令可以实现分屏显示,并且不会删除压缩包。bzmore是一个过滤器,它允许在软拷贝终端上一次检查压缩或纯文本文件。bzmore可以处理使用bzip2压缩的文件,也可以处理未压缩的文件。如果文件不存在,bzmore将查找同名文件,并添加.bz2后缀。Bzmore通常在每个屏幕后暂停,打印-更多-在屏幕底部。如果用户然后键入回车,则会显示多一行。如果用户点击一个空格,则会显示另一个屏幕。其他可能性将在后面列举。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
bzmore 文件
2、选项列表
Bzmore在文件“/etc/Tercap”中查找以确定终端特性,并确定默认窗口大小。在能够显示24行的终端上,默认窗口大小为22行。在bzmore暂停时可能键入的其他序列及其效果如下(i是可选的整数参数,默认为1):
i<space>
多显示i行(或另一个屏幕,如果没有给出参数)
ctrl+D
多显示11行(“滚动”)。如果给定i,则滚动大小设置为i。
d
同上
iz
与键入空格相同,但如果有i,则会成为新的窗口大小。请注意,窗口大小将恢复到当前文件末尾的默认值。
is
跳过i行,然后打印出满屏幕
if
跳过i屏幕,打印一整行的屏幕
q | Q
停止读取当前文件;继续下一个文件(如果有的话)
e | q
当输出提示符--More-- (Next file: file时,此命令将导致bzmore退出。
s
当输出提示符--More-- (Next file: file时,此命令将导致bzmore跳过下一个文件,然后继续
=
显示当前的行号
i/expr
搜索正则表达式expr的第i次出现。如果找不到模式,bzmore将继续到下一个文件(如果有的话)。否则,会显示一个屏幕,在找到表达式的位置之前开始两行。用户的擦除和删除字符可用于编辑正则表达式。通过第一列的擦除将取消搜索命令。
in
搜索输入的最后一个正则表达式的第i次出现
!command
使用命令唤醒shell。字符‘!’在“命令”中,将替换为前面的shell命令。序列“\!”改为“!”
:q | :Q
停止读取当前文件;转到下一个文件(如果有的话)(与q或Q相同)。
.
重复前面的命令
这些命令立即生效,即不需要键入回车。在给出命令字符本身的时间之前,用户可以点击行终止字符来取消正在形成的数值参数。此外,用户还可以点击擦除字符来重新显示-更多的消息。
在任何时候,当输出被发送到终端时,用户可以按退出键(通常是Control-\)。Bzmore将停止发送输出,并显示通常的“--More--”提示。然后,用户可以正常方式输入上述命令之一。不幸的是,当这样做时,会丢失一些输出,因为当退出信号发生时,终端输出队列中等待的任何字符都会被刷新。
该程序将终端设置为noecho模式,以便输出可以连续。因此,您键入的内容将不会显示在您的终端上,除了‘/’和‘!’命令。
如果标准输出不是teletype,那么bzmore就像bzcat一样,只是在每个文件之前打印一个头。
3、实例
1)解压bz2文件
[root@localhost weijie]# bzmore 2.c.bz2 //将内容解压到标准输出,不删除压缩包
------> 2.c.bz2 <------
123
23
212
2)显示普通文件
[root@localhost weijie]# bzmore 1.c //直接显示普通文件
------> 1.c <------
hello world,
i am david.
i love linux,
love code.
-------------------------
gunzip
解压缩被gzip压缩过的文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
gunzip [-acfhlLnNrtvV] [-S suffix] 文件
2、选项列表
-h | --help
帮助信息
-V | --version
显示命令版本信息
-f | --force
强制执行
-a | --ascii
文本模式。此选项仅在某些非Unix系统上支持。
-c | --stdout | --to-stdout
将解压的文件写到标准输出,源文件不变。如果有多个输入文件,则输出由一系列独立压缩的成员组成。为了获得更好的压缩,在压缩所有输入文件之前先将它们连接起来。
-l | --list
列出压缩文件的信息
-L | --licence
列出gzip的许可证并且退出
-n | --no-name
解压缩时,如果存在,不要还原原始文件名(仅从压缩文件名中删除gzip后缀),如果存在则不要恢复原始时间戳(从压缩文件中复制它)。此选项是解压缩时的默认选项。
-N | --name
解压缩时,如果存在,请还原原始文件名和时间戳。此选项对于限制文件名长度的系统或在文件传输后丢失时间戳的系统非常有用。
-r | --recursive
递归遍历目录结构。如果命令行中指定的任何文件名都是目录,则gzip将下降到目录中,并压缩它在目录中找到的所有文件(或者解压它们,如果是gunzip的话)。
-t | --test
测试压缩文件完整性
-v | --verbose
显示详细执行过程
-S
解压缩时,在从输入文件名派生输出文件名时,将.suf添加到后缀列表的开头以尝试。
3、实例
1)解压
[root@localhost weijie]# gunzip -v 1.gz //解压,显示详细执行过程
1.gz: 9.4% -- replaced with 1
2)指定文件后缀
[root@localhost weijie]# gunzip -v 1.mygz //解压,后缀不是gz,报错
gzip: 1.mygz: unknown suffix -- ignored
[root@localhost weijie]# gunzip -v -S "mygz" 1.mygz //指定后缀名,不报错
1.mygz: 9.4% -- replaced with 1.
-------------------------
安装telnet
telnet是标准的远程登录协议,历史悠久。但是telnet的对话数据没有加密,甚至用户名和密码都是明文显示,这样的服务风险极大。目前大多数系统多已经不会再安装这个服务了,用户需要自己手动安装
1、安装telnet软件,用户可以将telnet的服务器和客户端都安装
[root@localhost wj]# rpm -qa | grep telnet
[root@localhost wj]# yum install -y telnet-server //telnet服务器端,允许其他电脑连接
Installed:
telnet-server.i686 1:0.17-48.el6
Complete!
[root@localhost wj]# yum install -y telnet //telnet客户端,可以连接其他电脑
Installed:
telnet.i686 1:0.17-48.el6
Complete!
2、配置telnet,修改配置文件“/etc/xinetd.d/telnet”,将参数disable改为no
[root@localhost wj]# gedit /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
Service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no //这个默认是yes,只有改成no才可以启动telnet
}
3、修改端口。telnet默认的端口是23,用户可以修改“/etc/services”文件来改变端口。
[root@localhost wj]# gedit /etc/service
telnet 23/tcp //为了防止被攻击,一般都不会使用23端口。注意这里的23端口要使用tcp和udp两种协议
telnet 23/udp
4、修改防火墙,打开tcp和udp的23端口
[root@localhost wj]# gedit /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 23 -j ACCEPT
[root@localhost wj]# service iptables restart
iptables:将链设置为政策 ACCEPT:filter nat [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]
iptables:载入额外模块:nf_conntrack_ftp [确定]
5、启动telnet
[root@localhost wj]# service xinetd restart //telnet依赖xinetd
停止 xinetd: [确定]
正在启动 xinetd: [确定]
6、测试,在window端连接telnet。注意,不要用root用户登录,默认不允许。
[root@localhost wj]# telnet 192.168.0.119
Trying 192.168.0.119...
Connected to 192.168.0.119.
Escape character is '^]'.
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.i686 on an i686
login: david
Password:
Last login: Thu Aug 16 08:24:19 from 192.168.0.119
already login
-------------------------
head
显示文件开头的几行,默认显示10行,可以使用选项-n来指定行数。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
head [选项] files
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-c | --bytes=[-]K
显示文件开头的n个字节;-n显示所有内容,但是不包含最后n字节
-n | --lines=[-]K
显示开头的k行;-k显示所有行,但是不包含最后k行
-q | --quite | --silent
不显示文件名
-v | --verbose
显示文件名
3、实例
1)显示开头的10个字节
[root@localhost weijie]# cat 5.c //查看所有内容
1,2c1,2
< 123
< 23
---
> 12345
> 2334
[root@localhost weijie]# head -c 10 5.c //显示前10个字节
1,2c1,2
<
2)显示前3行
[root@localhost weijie]# head -n 3 5.c //使用-n选项指定显示前3行
1,2c1,2
< 123
< 23
-------------------------
more
将内容较长的文本文件内容分屏显示,支持定位关键字。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...]
2、命令和选项列表
--version
显示命令版本信息
--help
显示帮助文档
-num
每一页显示的行数
-d
在最后一行显示说明
-l
更常见的做法是将^L(表单提要)视为特殊字符,并在包含表单提要的任何行之后暂停。-l选项将防止这种行为。
-f
只处理正常行,太长的行不处理
-p
不滚动,清屏显示文本
-c
不滚动,清屏显示全新的一页
-s
将多个空白行合并
-u
压制下划线
+/
在显示之前查找字符串
+num
从第num行开始显示
当使用more指令之后,屏幕进入了more的命令模式,我们需要借助一些命令才能查看所有的内容。
h | ?
显示帮助信息
空格
显示下面的几行,默认是滚动一屏
z
显示下k行文本。默认为当前屏幕大小。参数成为新的缺省值。
回车
显示下面的几行,默认是一行
d | ^D
滚动几行,初始化时11
q | Q
退出
s
跳过前面的几行,默认是1
f
跳过前面的几屏,默认是1
b or ^B
跳过k个文本屏幕。默认为1。只适用于文件,而不是管道。
,
到以前搜索开始的地方
=
显示当前行号
!<cmd> or :!<cmd>
执行指令
v
在当前行启动编辑器。如果定义了环境变量VISUAL,则从环境变量获取编辑器;如果未定义VISUAL,则从EDITOR获取;如果未定义可视化或编辑器,则默认为“vi”。
^L
重新绘制屏幕
:n
跳转到下面的第n个文件,默认1
:p
跳转到前面的第n个文件,默认1
:f
显示当前的文件名和行号
.
重复之前的命令
/字符串
查找字符串,向尾部查找
?字符串
查找字符串,向头部查找
3、实例
管道配合more, 在最底部显示了more指令的说明信息
[root@localhost weijie]# less /etc/httpd/conf/httpd.conf
alsa-info
alsa-info.sh
alsaloop
alsamixer
amidi
amixer
amuFormat.sh
anthy-agent
--More--[Press space to continue, 'q' to quit.]
-------------------------
cut
将文件中每一行的指定内容显示到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
cut [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-b | --bytes=LIST
设置输出字节数或者范围
-c | --characters=LIST
设置输出的字符数或者范围
-d | --delimiter=DELIM
指定列的分隔符,默认是tab
-f | --fields=LIST
显示分割后的列
-n
和“-b”一起使用,不要分割多字节字符
--complement
补充选定的字节、字符或字段集
--output-delimiter=STRING
使用STRING作为输出分隔符,默认为使用输入分隔符
-s | --only-delimited
如果该行没有分隔字符,那么不显示这行
3、实例
显示以:分割后的第3列
[root@localhost weijie]# cat /etc/passwd //查看内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost weijie]# cut -f 3 -d: /etc/passwd //以:为分隔符,显示第3列
0
1
2
3
4
-------------------------
look
显示文件中以特定字符串开始的行。在look执行二进制搜索时,必须对文件中的行进行排序。如果未指定文件,则使用文件“/usr/share/dict/words“,只比较字母数字字符,忽略字母字符的大小写。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
look [选项] string files
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-d
只对比数字和英文字母,其他忽略
-f
忽略字符的大小写
-a
使用字典文件/usr/dict/web2
-t
指定字符串结束符
3、实例
显示以hello开头的行
[root@localhost weijie]# cat 1.c //查看文件
hello world,
i am david.
i love linux,
love code.
[root@localhost weijie]# look hello 1.c //显示以hello开头的行
hello world,
-------------------------
od
将指定文件的内容以八进制、十进制、十六进制等编码方式显示。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
od [选项] file
od [-abcdfilosx]... [FILE] [[+]OFFSET[.]]
od --traditional [OPTION]... [FILE] [[+]OFFSET[.] [+][LABEL][.]]
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-A | --address-radix=RADIX
设置偏移量的编码单位
-j | --skip-bytes=BYTES
跳过指定书目的字符
-N | --read-bytes=BYTES
输出指定字符数
-S | --strings[=BYTES]
输出至少BYTES个图形字符的字符串
-t | --format=TYPE
指定输出格式
-w | --width[=BYTES]
设置每一行的最大字数
-v | --output-duplicates
显示重复的数据
--traditional
接受传统形式的参数
3、实例
1)以八进制方式显示内容
[root@localhost weijie]# cat 3.c //查看内容
12345
2334
212
[root@localhost weijie]# od 3.c //以八进制显示
0000000 031061 032063 005065 031462 032063 031012 031061 000012
0000017
2)以字符方式显示内容
[root@localhost weijie]# cat 1.c //查看内容
hello world,
i am david.
i love linux,
love code.
[root@localhost weijie]# od -t c 1.c //以字符方式显示
0000000 h e l l o w o r l d , \n i
0000020 a m d a v i d . \n i l o v
0000040 e l i n u x , \n l o v e c
0000060 o d e . \n
0000065
-------------------------
tail
显示文本文件尾部的部分内容,默认显示最后10行。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
tail [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-c | --bytes=k
显示最后的k个字节
-f
持续读取文本尾部数据,通常用于监控日志文件
-F
等价于--follow=name
-n | --lines=k
显示最后的k行
--pid=PID
和-f一起使用,当指定进程号程序结束的时候,停止tail
-q | --quite | --silent
不显示文件名
--retry
继续尝试打开文件,即使文件是不可访问的或变得不可访问。
-v | --verbose
显示文件名
3、实例
1)显示最后一行
[root@localhost weijie]# cat 1.c //查看文件
hello world,
i am david.
i love linux,
love code.
[root@localhost weijie]# tail -n 1 1.c //显示最后一行
ove code.
2)显示最后几个字符
[root@localhost weijie]# tail -c 10 1.c //显示最后10个字符
ove code.
-------------------------
tac
将指定文件中的行,按照反序方式显示。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
tac [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-b | --before
将分隔符放到文件记录前
-r | --regex
将分隔符当做一般字符处理
-s | --separator=STRING
使用指定的间隔字符取代新建的控制字符
3、实例
1)反序显示
[root@localhost weijie]# cat 1.c //查看文件内容
hello world,
i am david.
i love linux,
love code.
[root@localhost weijie]# tac 1.c //反序显示
love code.
i love linux,
i am david.
hello world,
2)将分隔符放在文件前面
[root@localhost weijie]# tac -b 1.c //将分隔符“回车”放在文件最前面,导致最前面是两个空行,最后一行不能换行,
love code.
i love linux,
i am david. hello world, [root@localhost weijie]
-------------------------
tee
将标准输入的内容复制到指定的文件中,同时在标准输出中显示。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
tee [选项] [files]
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-a | --append
追加模式,并不覆盖
-i | --ignore-interrupts
忽略终端信号
3、实例
将文件内容排序之后保存到另外的地方
[root@192 weijie]# cat 2.c //查看内容
hello linux
i am weijie
love world
hehe
im join
[root@192 weijie]# sort 2.c | tee 4.c //排序之后保存到4.c,并且送到biaozhun输出
hehe
hello linux
i am weijie
im join
love worl
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
uniq
将文件中重复出现的行删除,结果送到标准输出或者指定文件。在使用uniq指令之前,必须使用sort对内容进行排序,否则没有效果。如果没有选项,则将匹配的行合并到第一个匹配项。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
uniq [选项] [input] [output]
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-c | --count
显示行重复出现的次数
-d | --repeated
仅显示重复出现的行
-D|--all-repeated[=delimit-method]
打印所有重复行
-f | --skip-fields=N
忽略前n个字段
-i | --ignore-case
比较时忽略大小写
-s | --skip-chars=N
忽略前n个字符
-u | --unique
只显示不重复的行
-z | --zero-terminated
以0字节为结束符,而不是换行
-w | --check-chars=N
比较不超过指定次数
3、实例
1)删除重复行
[root@192 weijie]# cat 3.c //查看内容
nihao linux.
i am david.
nihao linux.
i am david.
[root@192 weijie]# sort 3.c | uniq –c //先排序,然后再删除重复行,显示重复行出现的次数
2 i am david.
2 nihao linux.
2)只显示不重复的行
[root@localhost weijie]# cat 3.c //查看内容
nihao linux.
i am david.
nihao linux.
i am david.
i love linux
[root@localhost weijie]# sort 3.c | uniq -c –u //只显示不重复的行
1 i love linux
-------------------------
vim
vim是unix系统最通用的文本编辑器,它的功能可以说是非常强大了,它是vi的升级版。vim有三种工作模式:编辑模式、命令模式、末行模式,默认打开的时候进入命令模式。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
vim有许多内置命令,可以帮助我们更好的编辑文件
命令说明
ESC, 进入到命令模式
命令模式
a, 从光标位置之后添加内容
A, 从光标位置之后添加内容
i, 从光标位置开始插入内容
I, 从光标所在行的行首开始插入内容
o, 光标所在行的下方新建一行
O, 光标所在行的上方新建一行
D, 删除光标到这一行结束的字符
dd, 删除光标行
ndd, 删除光标开始的n行
yy, 复制光标行
nyy, 复制光标开始的n行
p, 粘贴到光标下方
P, 粘贴到光标上方
/字符串, 从光标开始向后查找
?字符串, 从光标开始向前查找
:, 进入末行模式
末行模式
num, 跳到指定行
w, 保存
q, 退出
q!, 强制退出
set nu, 显示行号
set nonu, 不显示行号
1、语法
vim [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
+num
从文本的指定行开始显示
-b
进入二进制模式
-d
进入diff模式,编辑多个文件时,显示差异部分
-m
不允许修改文件
-n
不使用缓存
-o
同时打开n个文件
-p
以tab形式显示每个文件
-r
列出缓存,并显示恢复的信息
-s
静默模式,不显示任何错误信息
3、实例
1)使用tab编辑多个文件
[root@localhost weijie]# vim –p 1.c 2.c //tab显示多个文件
1.c 2.c
hello world, x
i am david.
i love linux,
love code.
2)显示行号
1 hello world,
2 i am david.
3 i love linux,
4 love code.
~
:set nu //在末行模式下使用set nu显示行号
-------------------------
ex
ex会启动vim编辑器,它的执行效果和vim –E相同。从ex模式回到普通模式,可以在vim中输入:vim。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ex [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
+num
从文本的指定行开始显示
-b
进入二进制模式
-c
第一个文件编辑完成偶执行指定的指令
-d
进入diff模式,编辑多个文件时,显示差异部分
-m
不允许修改文件
-n
不使用缓存
-o
同时打开n个文件
-p
以tab形式显示每个文件
-r
列出缓存,并显示恢复的信息
-R
以只读模式打开
-s
静默模式,不显示任何错误信息
3、实例
ex模式编辑文件
[root@localhost weijie]# ex 1.c //进入ex模式编辑
"1.c" 5L, 62C
进入 Ex 模式。输入 "visual" 回到正常模式。
:visual //输入visual,回到正常模式
hello world,
i am david.
i love linux,
love code.
nihao ed
-------------------------
sed
sed是一种流编辑器,用来从输入流中读取内容并完成转换,输入流可以来自一个文件,也可以来自一个管道。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
sed [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-n | --quite | --slient
静默模式
-e | --expression=script
给指令添加脚本
-f | --file=script-file
将文件内容作为脚本,追加给指令
--follow-symlinks
处理到位时遵循符号链接;硬链接仍将被破坏。
-i[SUFFIX] | --in-place[=SUFFIX]
编辑文件到位(如果提供了扩展名,则进行备份)。默认的操作模式是中断符号链接和硬链接。这可以通过跟随符号链接和复制来改变。
-c | --copy
当在-i模式下对文件进行洗牌时,请使用复制而不是重命名。虽然这将避免断开链接(符号或硬链接),但结果的编辑操作并不是原子操作。这很少是想要的模式;-遵循符号链接通常就足够了,而且它更快、更安全。
-l | --line-length=N
指定每一行最大字符数,超过就自动换行
--posix
禁用所有的GNU表达式
-r | --regexp-extended
在脚本中使用扩展正则表达式。
-s
将文件看作是分离的,而不是单独连续的长字符串
-u | --unbuffered
从输入文件中加载最少数量的数据,并更频繁地刷新输出缓冲区。
如果没有给出-e、--expression,、-f或-file选项,那么第一个非选项参数将作为sed脚本进行解释。其余的参数都是输入文件的名称;如果没有指定输入文件,则读取标准输入。
1)没有地址的命令
: label
b和t命令的标签
#comment
注释将扩展到下一行(或-e脚本片段的末尾)。
}
{}块的结束括号
2)没有地址或者一个地址的命令
=
打印当前的行号
a \
text
追加文本,在换行符之前有一个嵌入的反斜杠
i \
text
插入文本,在换行符之前有一个嵌入的反斜杠
q [exit-code]
立即退出sed脚本,而不处理任何更多的输入,除非自动打印没有被禁用,当前的模式空间将被打印出来。退出代码参数是一个GNU扩展。
Q [exit-code]
立即退出sed脚本,而不处理任何更多的输入。这是一个GNU扩展
r filename
附加从文件中读取的文本。
R filename
附加从文件读取的一行。命令的每次调用都从文件中读取一行。
3)接受地址范围的命令
{
开始一个命令块(以)结尾)
b label
分支到标签;如果省略标签,则分支到脚本的末尾。
t label
如果“s///”自读取上一个输入行以来以及从最后一个t或T命令开始已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则将其分支到脚本的末尾。
T label
如果自读取上一个输入行以来,以及自最后一个t或T命令以来,没有“s///”已成功地进行了替换,则从“分支到标签”;如果省略“标签”,则从“分支到脚本的末尾”。这是一个GNU扩展。
c\
text
用文本替换徐那种的行,在换行符之前有一个嵌入的反斜杠
d
删除模式空间。开始下一个周期。
D
删除模式空间中的第一个嵌入换行符。开始下一个周期,但如果模式空格中仍然有数据,则跳过从输入中读取。
h H
复制/追加模式空间到保持空间
g G
复制/追加保持空间到模式空间
x
交换持有空格和模式空格的内容
l
以“视觉清晰”的形式列出当前行。
l width
以“视觉清晰”的形式列出当前行,在宽度width处将其拆分。这是一个GNU扩展。
n N
在模式空间中读取/追加下一行输入
p
打印到当前模式空间
P
打印到当前模式空间的第一个嵌入换行符
s/regexp/replacement/
尝试将regexp与模式空间匹配。如果成功,则将该部分替换为替换部分。替换可以包含特殊字符&引用匹配的模式空间的那一部分,特殊转义\1到\9引用regexp中相应的匹配子表达式。
w filename
将当前模式空间写入文件名
W filename
将当前模式空间的第一行写入文件名。这是一个GNU扩展。
y/source/dest/
将在源中出现的模式空间中的字符音译为dst中相应的字符。
3、地址
SED命令可以在没有地址的情况下给出,在这种情况下,命令将对所有输入行执行;使用一个地址,则只对与该地址匹配的输入行执行该命令;或者使用两个地址,在这种情况下,将对所有与从第一个地址开始并继续到第二个地址的包含行范围匹配的输入行执行命令。关于地址范围,需要注意三件事:语法是addr 1,addr 2(即地址用逗号分隔);addr 1匹配的行将始终被接受,即使addr 2选择了前面的行;如果addr 2是regexp,则不会根据addr 1匹配的行对其进行测试。
在地址(或地址范围)之后,在命令之前,可以插入一个“!”,这指定只有当地址(或地址范围)不匹配时才执行命令。支持以下的地址类型“
number,只匹配指定的行号。
first~step,从指定的行first开始,每step行匹配一次。
$,匹配最后一行。
/regexp/,匹配正则表达式regexp的行。
\cregexpc,匹配正则表达式regexp的行。c可以是任何字符
0,addr2,从“匹配的第一个地址”状态开始,直到找到addr 2为止。这类似于1,addr 2,但如果addr 2匹配输入的第一行0,addr 2表单将位于其范围的末尾,而1,addr 2窗体仍将位于其范围的开头。这只在addr 2是正则表达式时才起作用。
addr1,+N,将匹配addr 1和addr 1后面的N行。
addr1,~N,将匹配addr 1和addr 1后面的行,直到输入行号为N的倍数的下一行为止。
4、实例
从一个文件读取内容输入到另一个文件
[root@192 weijie]# cat 1.c //查看文件内容
hello world,
i am david.
i love linux,
love code.
nihao ed
[root@192 weijie]# sed r 1.c >> 2.c //将1.c读取,写入到2.c
[root@192 weijie]# cat 2.c //查看内容
123
23
212
i am david.
i love linux,
love code.
nihao ed
-------------------------
join
找出两个文件中相同的字段,根据相同字段合并两个文件,将合并结果显示到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
join [选项] file1 file2
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-a 1或2
将文件中没有相同字段的行显示出来
-e string
如果在文件中找不到指定的字符串,在输出中填入选项中的字符串
-I | --ignore-case
忽略大小写
-j FIELD
等价于“-1 FIELD -2 FIELD”
-o format
用指定的格式显示结果
-t CHAR
指定分隔符
-v 1或2
和-a一样,但是只显示没有相同字段的行
-1 FIELD
连接文件1指定的字段
-2 FIELD
连接文件2指定的字段
--check-order
检查输入是否正确排序,即使所有输入行都是可修的。
--nocheck-order
不检查输入是否正确排序
3、实例
1)合并两个文件到标准输出
[root@192 weijie]# cat 1.c 2.c //查看文件
hello world
i am david
love linux
this code
nihao ed
hello linux
i am weijie
love world
hehe
im join
[root@192 weijie]# join 1.c 2.c //合并相同行
hello world linux
i am david am weijie
love linux world
2)显示没有相同字段的行
[root@192 weijie]# join 1.c 2.c -v 1 //显示文件1中不没有相同字段的行
this code
nihao ed
[root@192 weijie]# join 1.c 2.c -v 2 //显示文件2中没有相同字段的行
hehe
im join
-------------------------
col
过滤掉影响阅读的控制字符,使用重定向符把说明手册的内容输出到文本文件时,控制字符就成乱码。col指令可以过滤掉控制字符,使文本可读。col从标砖输入读取内容,输出到标准输出。col在读取字符时跟踪字符集,并确保字符集在输出时是正确的。如果输入试图备份到最后一条刷新行,col将显示一条警告消息。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
col [-bfpx] [-lnum] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-b
过滤所有的控制字符
-f
过滤掉RLF字符,忽略HRLF字符
-p
忽略未知的控制字符
-x
将多个空格用tab代替
-lnum
设置缓冲区大小,默认128行
3、实例
将clear指令的手册经过过滤,输出到文本文件
[root@192 weijie]# man clear > 3.c //将手册从定向到文件
[root@192 weijie]# vim 3.c //编辑文件,内部有很多乱码,这些都是控制字符
clear(1) clear(1)
N^HNA^HAM^HME^HE
c^Hcl^Hle^Hea^Har^Hr - clear the terminal screen
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
c^Hcl^Hle^Hea^Har^Hr
D^HDE^HES^HSC^HCR^HRI^HIP^HPT^HTI^HIO^HON^HN
c^Hcl^Hle^Hea^Har^Hr clears your screen if this is possible. It looks in the environ-
ment for the terminal type and then in the t^Hte^Her^Hrm^Hmi^Hin^Hnf^Hfo^Ho database to figure
out how to clear the screen.
[root@192 weijie]# man clear | col -b > 3.c //将手册内容过滤之后,定向到文件
[root@192 weijie]# vim 3.c //编辑文件内容,没有乱码
clear(1) clear(1)
NAME
clear - clear the terminal screen
SYNOPSIS
clear
DESCRIPTION
clear clears your screen if this is possible. It looks in the environ-
ment for the terminal type and then in the terminfo database to figure
out how to clear the screen.
-------------------------
colrm
从标准输入读取数据,删除指定的列,然后送到标准输出。如果用一个参数调用,则将从指定的列开始删除每一行的列。如果使用两个参数调用,则将删除从第一列到最后一列的列。列编号以第1列开始。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
colrm [startcol] [endcol]
2、选项列表
无
3、实例
1)删除第5列之后的列
[root@192 weijie]# cat 1.c //显示内容
hello world
i am david
love linux
this code
nihao ed
[root@192 weijie]# colrm 5 < 1.c //删除第5列之后
hell
i am
love
this
niha
2)删除5~9列
[root@192 weijie]# colrm 5 9 < 1.c //删除5~9列
hellld
i amd
lovex
this
niha
3)不删除,全部显示
[root@192 weijie]# colrm < 1.c //不指定列,显示所有的
hello world
i am david
love linux
this code
nihao ed
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
paste
将文件以行的方式合并在一起,用tab字符分隔开,将结果送到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
paste [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-d | --delimiters=LIST
指定间隔字符
-s | --serial
顺序的合并一个文件的多行到一行
3、实例
1)顺序合并文件,使用间隔符“;”
[root@192 weijie]# cat 1.c //查看内容
hello world
i am david
love linux
this code
nihao ed
[root@192 weijie]# paste -d ";" -s 1.c //使用分号为间隔,合并文件的多行到一行
hello world;i am david;love linux;this code;nihao ed
2)合并两个文件
[root@192 weijie]# paste 1.c 2.c //合并两个文件,默认间隔符是tab
hello world hello linux
i am david i am weijie
love linux love world
this code hehe
nihao ed im join
-------------------------
wc
统计文件的字节数、单词数、行数。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
wc [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-c | --bytes
仅显示字节数
-m | --chars
仅显示字符数
-l | --lines
仅显示行数
-L | --max-line-length
显示文件中最长行的字符数
-w | words
显示单词数
3、实例
1)显示字节数
[root@192 weijie]# cat 1.c
hello world
i am david
love linux
this code
nihao ed
[root@192 weijie]# wc -c 1.c
53 1.c
2)显示行数
[root@192 weijie]# wc -l 1.c
5 1.c
3)显示单词数
[root@192 weijie]# wc -w 1.c
11 1.c
-------------------------
fmt
将指定文件的内容,按照指定的格式重新排版,结果送到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
fmt [width] [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-c | --crown-margin
每段前两行缩排
-p | --prefix=STRING
重新排版以指定字符串开头的行
-s | --split-only
将长行分割开
-t | --tagged-paragraph
将第一行缩进
-u | --uniform-spacing
字与字之间一个空白,句子后两个空白
-w | --width=WIDTH
设置每行字符数,默认75
3、实例
1)格式化文本
[root@192 weijie]# cat 3.c
nihao
linux
i
am
david
[root@192 weijie]# fmt 3.c //直接格式化,将所有的内容合并成行
nihao linux i am david
2)缩进第一行
[root@192 weijie]# cat 3.c
nihao linux.
i am david.
[root@192 weijie]# fmt -5 -t 3.c //每行5个字符,第一行缩进
nihao
linux.
i
am
david.
-------------------------
expand
将文件中的tab转换成空格,结果送到标准输出。如果没有指定文件,那么从标准输入读取。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
expand [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-i | --initial
不转换空白行的tab
-t | --tabs
指定tab代表的字符数,默认8个
3、实例
替换tab
[root@192 weijie]# cat 2.c //查看内容
hello linux
i am weijie
love world
hehe
im join
[root@192 weijie]# expand -t 1 2.c //将tab用1个空格代替
hello linux
i am weijie
love world
hehe
im join
unexpand
将文件中的空白字符转换为控制字符tab,将结果送到标准输出。空格数大于8才能被替换。如果没有指定文件,那么从标准输入读取。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
unexpand [选项] file
2、选项列表
--version
显示命令版本信息
--help
显示帮助文档
-a
转换所有的空格
--first-only
仅转换开头的空格
-t | --tabs
指定tab代表的字符数,默认是8
3、实例
替换空格
[root@192 weijie]# cat 3.c //查看内容,有16个空格
nihao linux
[root@192 weijie]# unexpand -a –t 16 3.c //替换16个空格,变为tab
nihao linux
-------------------------
chfn
chfn指令可以改变通过finger指令查看到的信息。此信息存储在/etc/passwd文件中,并由Finger程序显示。LinuxFinger命令将显示可由chfn更改的四条信息:您的真名、您的工作区和电话以及您的家庭电话。这四条信息中的任何一条都可以在命令行上指定。如果命令行上没有提供任何信息,chfn将进入交互模式。在交互模式下,chfn将提示每个字段。在提示符下,您可以输入新信息,也可以按“返回”使字段保持不变。输入关键字“None”使字段为空。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
chfn [选项] user
2、选项列表
-u | --help
显示帮助文档
-v | --version
显示命令版本
-f | --full-name
设置真实姓名
-o | --office
设置办公室地址
-h | --home-phone
设置家庭电话
-p | --office-phone
设置办公室电话
3、实例
修改用户真实姓名和家庭电话
[root@localhost david]# chfn -f wejie -h 110 root //修改信息
Changing finger information for root.
Finger information changed.
[root@localhost david]# finger root //查看信息,已经修改成功
Login: root Name: wejie
Directory: /root Shell: /bin/bash
Office: 110
On since 五 9月 7 21:02 (CST) on tty1 from :0
14 days 21 hours idle
On since 六 9月 22 07:36 (CST) on pts/0 from :0.0
9 hours 12 minutes idle
On since 四 9月 13 08:55 (CST) on pts/1 from :0.0
New mail received 六 9月 22 18:05 2018 (CST)
Unread since 二 8月 21 09:22 2018 (CST)
No Plan.
-------------------------
chsh
改变用户登录时使用的shell,默认使用bash。如果命令行上没有给出shell,chsh将提示输入一个shell。chsh将接受系统上任何可执行文件的完整路径名。但是,如果shell未在“/etc/shell”文件中列出,则将发出警告。另一方面,也可以将其配置为只接受此文件中列出的shell,除非您是root用户。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
chsh [选项] user
2、选项列表
-u | --help
显示帮助文档
-v | --version
显示命令版本
-s | --shell
改变登录后使用的shell环境
-l | --list-shells
显示系统当前可以用的shell
3、实例
1)查看可用的shell
[root@localhost david]# chsh -l david //显示当可用shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
2)改变用户shell
[root@localhost david]# chsh -s /bin/sh david //改变登录shell
Changing shell for david.
Shell changed.
[root@localhost david]# su david //切换用户,shell已经改变
sh-4.1$
-------------------------
usermod
修改用户的信息,包括用户名、密码、家目录、uid等。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
usermod [选项] [参数]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-c comment
修改备注信息
-d home_dir
修改账户每次登陆使用的目录
-e expire_date
修改账号终止日期,MM/DD/YY
-f inactive_days
账号过期后多久停用
-g initial_group
修改账户的组,这个组必须存在
-G group,[...]
修改用户的附加组
-l login_name
变更使用者login时的名称为login_name,其余不变。特别是,使用者目录名应该也会跟着更动成新的登入名。
-s shell
修改账户登录后使用的shell
-u uid
修改用户ID
3、文件
/etc/passwd,使用者帐号资讯。
/etc/shadow,使用者帐号资讯加密。
/etc/group,群组资讯。
4、实例
1)修改用户uid
[root@localhost david]# tail -n 2 /etc/passwd //查看用户信息
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
user01:x:502:502::/home/user01:/bin/bash
[root@localhost david]# usermod -u 503 user01 //修改uid为503
[root@localhost david]# tail -n 2 /etc/passwd //查看用户信息,uid已经改变
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
user01:x:503:502::/home/user01:/bin/bash
2)修改备注信息
[root@localhost david]# usermod -c "user01 test" user01 //修改备注信息为“user01 test”
[root@localhost david]# tail -n 2 /etc/passwd //查看用户信息
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
user01:x:503:502:user01 test:/home/user01:/bin/bash
-------------------------
useradd
创建新的系统用户,useradd指令只能以管理员的身份运行,创建的用户都在“/etc/passwd”文件中。当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHat Linux提供,可帮每个新加入的使用者建立个别的group,毋须添加-n选项。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
useradd [-D] [选项] [参数]
useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login
useradd -D [-g default_group] [-b default_home] [-f default_inactive] [-e default_expire_date] [-s default_shell]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
使用-D选项
-b dir
指定用户的基目录,默认是home
-e date
使用者账号有效日期
-f days
指定密码过期后多少天关闭账号
-g group
指定账户的组,这个组必须存在
-s shell
指定账户使用的shell
不使用-D选项
-c comment
备注信息
-d home
账户每次登陆使用的目录
-e date
账号终止日期,MM/DD/YY
-f days
账号过期后多久停用
-g group
指定账户的组,这个组必须存在
-G group
指定用户的附加组
-m
使用者目录如果不存在,自动创建
-n
取消自动创建于账号同名的组
-p password
设置账户的密码
-r
创建系统账号
-s
指定账户登录后使用的shell
-u uid
指定用户ID
3、文件
/etc/passwd,使用者帐号资讯。
/etc/shadow,使用者帐号资讯加密。
/etc/group,群组资讯。
/etc/default/useradd,定义资讯。
/etc/login.defs,系统广义设定。
/etc/skel,内含定义档的目录。
4、实例
1)创建用户
[root@localhost david]# useradd -p 123456 user01 //创建用户,密码123456
[root@localhost david]# tail -n 2 /etc/passwd //查看是否创建成功
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
user01:x:503:503::/home/user01:/bin/bash
[root@localhost david]# ls /home/ //在home下创建家目录
david test01 user01 weijie
2)设定用户的家目录、uid、备注
[root@localhost david]# useradd -d /home/other -u 600 -c "test user" user02 //创建用户
[root@localhost david]# tail -n 2 /etc/passwd //查看用户信息
user01:x:503:503::/home/user01:/bin/bash
user02:x:600:600:test user:/home/other:/bin/bash
[root@localhost david]# ls /home/ //家目录other
david other test01 user01 weijie
-------------------------
userdel
删除用户,如果没有附加选项,仅删除用户,不删除相关文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
userdel [-r] user
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-r
删除用户的同时,删除其相关文件
3、实例
1)不使用选项,删除用户
[root@localhost david]# userdel test01 //删除用户
[root@localhost david]# ls /home/ //相关文件还存在
david test01 user01 weijie
2)删除用户所有信息
[root@localhost david]# userdel -r user02 //删除用户,使用-r
[root@localhost david]# ls /home/ //相关文件也删除
david test01 user01 weijie
[root@localhost david]# tail -n 2 /etc/passwd
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
user01:x:503:503::/home/user01:/bin/bash
-------------------------
su
临时切换身份到另外一个用户,使用su切换用户之后,不会改变当前的工作目录,但是会改变一些环境变量。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
su [选项] [参数]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
- | -l | --login
切换用户时启动一个新的shell,可以改变工作目录以及环境变量
-c | --command
执行案指令后,立刻恢复原来的身份
--session-command=COMMAND
使用-c将单个命令传递给shell,而不创建新会话。
-f | --fast
使shell不读取启动文件
-m | -p | --preserve-environment
保留原来的环境变量
-s | --shell
指定切换用户后使用的shell
3、实例
1)切换用户
[root@192 weijie]# su david //切换用户,环境变量没有发生改变
[david@localhost weijie]$
2)使用选项“-”切换
[root@localhost weijie]# su – david //使用选项“-”,工作目录发生变化
[david@localhost ~]$
3)从其他用户切换到root
[david@localhost ~]$ su //没有任何选项和参数,可以直接切换到root用户,需要输入密码
密码:
[root@localhost david]#
-------------------------
pwck
检查用户密码文件“/etc/passwd”和“/etc/shadow”的完整性,将验证结果送到标砖输出。提示用户删除格式不正确或有其他不可更正错误的条目。检查以验证每个条目是否具有:正确的字段数、唯一有效的用户名、有效的用户和组标识符、有效的主组、有效的家目录、有效的登录shell。
当指定了第二个文件参数或系统上存在“/etc/shadow”时,就启用了shadow检查。它会检查一下信息:每个passwd条目都有一个匹配的阴影条目,每个影子条目都有一个匹配的passwd条目,在shadow文件中指定了密码,阴影条目有正确的字段数,阴影条目在shadow中是唯一的,最近的密码更改不会在将来发生。
检查正确的字段数和唯一用户名是致命的。如果条目有错误的字段数,则会提示用户删除整行。如果用户没有肯定地回答,所有进一步的检查都会被绕过。提示删除具有重复用户名的条目,但仍将进行其余检查。所有其他错误都是警告,并鼓励用户运行usermod命令来更正错误。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
pwck [选项]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-q
仅显示报错信息
-r
以只读模式执行
-s
使用UID作为文件的排序依据
3、配置
下面“/etc/login.defs“中的配置变量更改了该工具的行为:
PASS_MAX_DAYS,可以使用密码的最大天数。如果密码早于此,则将强制进行密码更改。如果没有指定,将假定-1(这将禁用限制)。
PASS_MIN_DAYS,密码更改之间允许的最短天数。任何密码更改尝试比这更早将被拒绝。如果未指定,则假定为-1(这将禁用限制)
PASS_WARN_AGE,在密码过期前发出警告的天数。零表示警告只在到期之日发出,负值表示没有发出警告。如未指定,则不会提供警告。
4、文件
/etc/group,组账户信息。
/etc/passwd,用户账户信息。
/etc/shadow,安全用户帐户信息。
5、返回值
pwck命令会返回下列结果
0,成功
1,无效的命令
2,1个或多个密码出错
3,无法打开密码文件
4,不能锁定密码文件
5,不能更新密码文件
6,无法排序密码文件
6、实例
1)普通用户调用pwck
[david@localhost ~]$ pwck //查看密码文件
pwck: cannot lock /etc/passwd; try again later.
[david@localhost ~]$ echo $? //打印返回值,这个返回值在shell变量“#?”中
4
2)root调用pwck
[root@localhost david]# pwck
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
user 'vboxadd': directory '/var/run/vboxadd' does not exist
user 'mailnull': directory '/var/spool/mqueue' does not exist
user 'smmsp': directory '/var/spool/mqueue' does not exist
-------------------------
passwd
更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码。这个任务是通过调用LinuxPAM和LibuserAPI来完成的。本质上,它使用LinuxPAM将自己初始化为一个“passwd”服务,并利用配置的密码模块对用户的密码进行身份验证和更新。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
passwd [选项] user
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-d
删除用户的密码,只有root用户才能使用
-e
使用户密码失效,强制用户下次登录改变密码,只有root用户才能使用
-n
设置密码的最短有效时间,只有root用户才能使用
-x
设置密码最大有效时间,只有root用户才能使用
-S
显示简短的密码信息,只有root用户才能使用
-l
锁定用户,只有root用户才能使用
-u
解锁用户,只有root用户才能使用
-k
选项-k用于指示更新只适用于过期的身份验证令牌(密码);用户希望像以前一样保留其未过期的令牌。
-i
这将设置此帐户的过期密码将被视为不活动的天数,如果用户帐户支持密码生存期,则应禁用该帐户。只对根用户可用。
-w
这将设置用户将开始收到警告,如果用户帐户支持密码生存期,其密码将过期的天数。只对根用户可用。
--stdin
此选项用于指示passwd应从标准输入中读取新密码,该输入可以是管道。
3、实例
1)锁定用户,锁定之后不能登录
[root@localhost david]# passwd -l david //锁定用户
锁定用户 david 的密码 。
passwd: 操作成功
[root@localhost david]# passwd -u david //解锁用户
解锁用户 david 的密码 。
passwd: 操作成功
2)删除用户密码
[root@localhost david]# passwd -d david //清除用户david密码
清除用户的密码 david。
passwd: 操作成功
[root@localhost david]# su weijie //切换到普通胡勇weijie
[weijie@localhost david]$ su david //从普通用户weijie切换到普通用户david,不需要密码
[david@localhost ~]$
-------------------------
finger
finger指令用来查找、显示指定用户的信息。查询远程主机信息是,可以用user@localhost来指定用户。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
finger [-lmsp] user
2、选项列表
-s
显示用户的用户名、真实姓名、登录终端、闲置时间、登录时间、地址、电话
-l
显示用户的用户名、真实姓名、用户家目录、登录后的shell、登录时间、电子邮件、计划文件
-p
和-l一样,但是不显示“.plan“、“.project”、“.pgpkey”文件
-m
不查找用户真实姓名
3、实例
查看用户root信息
[root@localhost david]# finger -l root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since 五 9月 7 21:02 (CST) on tty1 from :0
14 days 20 hours idle
On since 六 9月 22 07:36 (CST) on pts/0 from :0.0
9 hours 5 minutes idle
On since 四 9月 13 08:55 (CST) on pts/1 from :0.0
New mail received 六 9月 22 18:00 2018 (CST)
Unread since 二 8月 21 09:22 2018 (CST)
No Plan.
-------------------------
logname
显示当前登录的用户名称。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
logname
2、选项列表
--help
显示帮助文档
--version
显示命令版本
3、实例
查看当前登录用户
[root@localhost david]# logname //查看登录用户
root
[root@localhost david]# su david //切换用户
[david@localhost ~]$ logname //查看登录用户,依然是root
root
-------------------------
grpck
grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性。检查的内容包括:正确的字段数、唯一有效的组名称、有效的组标识符、成员和管理员的有效列表、“/etc/gshadow”文件中的相应条目。检查正确的字段数和唯一的组名是致命的。如果条目有错误的字段数,则会提示用户删除整行。如果用户没有肯定地回答,所有进一步的检查都会被绕过。提示删除具有重复组名的条目,但仍将进行其余检查。所有其他错误都是警告,并鼓励用户运行groupmod命令来更正错误。
对“/etc/group“和“/etc/gshadow“文件进行操作的命令不能更改损坏或重复的条目。在这种情况下,应该使用grpck来删除违规条目。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
grpck [选项] group
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-r
以只读模式运行
-s
使用gid对group和gshadow进行排序
3、配置
下面“/etc/login.defs”中的配置变量更改了该工具的行为:
MAX_MEMBERS_PER_GROUP(number),每个组条目的最大成员数。达到最大值时,在“/etc/group”中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的GID)。默认值为0,这意味着组中的成员数没有限制。此功能(拆分组)允许限制组文件中的行长度。这对于确保NIS组的行不大于1024个字符非常有用。如果你需要执行这样的限制,你可以使用25。注意:拆分组可能不支持所有的工具(即使在阴影工具集中)。除非您真的需要这个变量,否则不应该使用它。
4、文件
/etc/group,组账户信息。
/etc/gshadow,安全组账户信息。
/etc/passwd,用户账户信息。
5、实例
1)检查组信息
[root@localhost david]# grpck //检查组信息,返回0,没有任何错误
[root@localhost david]# echo $?
0
2)对/etc/group排序
[root@localhost david]# tail –n 2 /etc/group //查看组信息
smmsp:x:51:
webalizer:x:67:
user01:x:502:
group02:x:999:
[root@localhost david]# grpck -s /etc/group //按照gid排序
[root@localhost david]# tail –n 2 /etc/group //查看信息,已经排序
user01:x:502:
group02:x:999:
nfsnobody:x:65534:
-------------------------
groupmod
修改组的基本信息,包括组名称、组ID等信息。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
groupmod [选项] group
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-g gid
指定组id
-n name
指定组名
3、实例
修改组id合名字
[root@localhost david]# tail -n 2 /etc/group //查看组信息
user01:x:502:
group01:x:503:
[root@localhost david]# groupmod -g 999 -n group02 group01 //修改组id:999,组名字:group02
[root@localhost david]# tail -n 2 /etc/group //查看组信息,已经修改
user01:x:502:
group02:x:999:
-------------------------
gpasswd
gpasswd指令用来管理组文件“/etc/group”和“/etc/gshadow”,每个组可以设置管理员、组员、密码。系统管理员可以使用-A选项定义组管理员,使用-M选项定义成员。他们拥有组管理员和成员的所有权利。由具有组名的组管理员调用的gpasswd只提示输入组的新密码。如果设置了密码,则成员仍然可以在没有密码的情况下使用newgrp(1),而非成员必须提供密码。
组密码是一个固有的安全问题,因为允许多个人知道密码。然而,群组是允许不同用户之间合作的有用工具。
警告,此工具仅对“/etc/group”和“/etc/gshadow”文件进行操作。因此,您不能更改任何NIS或LDAP组。这必须在相应的服务器上执行。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
gpasswd [选项] group
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-a | --add user
向组中添加用户
-d | --delete user
删除成员
-r | --remove-password
删除组密码
-R | --restrict
限制对命名组的访问。只允许组成员使用newgrp加入命名组。
-M | --members user,...
向组添加多个成员
-A | --administrators user,..
设置组管理员
3、配置
下面“/etc/login.defs”中的配置变量更改了该工具的行为:
ENCRYPT_METHOD(string),这定义了用于加密密码的系统默认加密算法(如果命令行上没有指定算法)。可用的算法有:DES(默认)、MD5、 SHA256、SHA512。注意:此参数重写MD5_CRYPT_ENAB变量。
MAX_MEMBERS_PER_GROUP(number),每个组条目的最大成员数。达到最大值时,在/etc/group中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的GID)。默认值为0,这意味着组中的成员数没有限制。此功能(拆分组)允许限制组文件中的行长度。这对于确保NIS组的行不大于1024个字符非常有用。如果你需要执行这样的限制,你可以使用25。注意:拆分组可能不支持所有的工具(即使在阴影工具集中)。除非你真的需要这个变量,否则你不应该使用它。
MD5_CRYPT_ENAB(boolean),指示是否必须使用基于MD5的算法加密密码。如果设置为“是”,新密码将使用基于MD5的算法进行加密,该算法与FreeBSD最新版本使用的算法兼容。它支持无限长度的密码和更长的盐字符串。如果您需要将加密密码复制到其他不了解新算法的系统,则设置为“否”。默认为否。该变量由ENCRYPT_METHOD变量或用于配置加密算法的任何命令行选项取代。不推荐这个变量。您应该使用ENCRYPT_METHOD。
SHA_CRYPT_MIN_ROUNDS(number)、SHA_CRYPT_MAX_ROUNDS(number),当Encrypt_Method设置为SHA 256或SHA 512时,默认情况下这将定义加密算法使用的SHA轮数(当命令行上未指定轮数时)。有很多回合,这是比较困难的暴力强制密码。但是还要注意的是,需要更多的CPU资源来对用户进行身份验证。如果没有指定,libc将选择默认的回合数(5000)。数值必须在1000-999999999范围内。如果只设置了SHA_CRYPT_MIN_ROUNDS或SHA_CRYPT_MAX_ROUNDS中的一个,则将使用此值。如果SHA_CRYPT_MIN_ROUNDS>SHA_CRYPT_MAX_ROUNDS,则将使用最高值。
4、文件
/etc/group,组账户信息。
/etc/gshadow,安全组账户信息。
5、实例
1)将用户user01 添加到组weijie
[root@localhost david]# gpasswd -a user01 weijie //向组添加用户
Adding user user01 to group weijie
[root@localhost david]# cat /etc/group //查看组信息,已经成功添加
weijie:x:501:user01
2)设置组管理员
[root@localhost david]# gpasswd -A weijie weijie //设置管理员
[root@localhost david]# cat /etc/gshadow //查看组信息,管理员已经设置
weijie:!:weijie:
-------------------------
groupadd
指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
groupadd [选项] group
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-g gid
指定组id
-r
创建系统组
-f
新增一个已经存在的群组帐号,系统会出现错误讯息然后结束groupadd。如果是这样的情况,不会新增这个群组(如果是这个情况下,系统不会再新增一次)也可同时加上-g选项当你加上一个gid,此时gid就不用是唯一值,可不加-o参数,建好群组后会显结果
3、文件
/etc/group,群组信息。
/etc/gshadow,群组加密信息。
4、实例
创建组,指定组的id
[root@localhost david]# groupadd group01 -g 999 //创建组,指定id
[root@localhost david]# tail -n 2 /etc/group //查看组信息
user01:x:502:
group01:x:999:
groupdel
删除组,如果租内有用户,那么必须先删除用户。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
groupdel group
2、选项列表
--help
显示帮助文档
--version
显示命令版本
3、实例
删除组
[root@localhost david]# groupdel group01 //删除组
[root@localhost david]# tail -n 2 /etc/group //查看组信息,已经删除
webalizer:x:67:
user01:x:502:
-------------------------
init
init是所有进程的父进程,它由内核执行,可以启动其他所有的进程。init指令在启动时会参考/etc/inittab文件的配置,完成其他进程的启动。init通常不会由用户进程执行,并且期望进程id为1。如果不是这样,它将实际执行telinit(8)并将所有参数传递给它。
init管理的进程称为作业,并由/etc/init目录中的文件定义。init(8)是一个基于事件的init守护进程。这意味着作业将通过系统状态发生的更改自动启动和停止,包括作业的启动和停止。这与基于依赖项的init守护进程不同,后者启动一组指定的目标作业,并通过迭代它们的依赖项来解决它们应该启动的顺序和其他作业所需的顺序。主要事件是startup (7)事件,在守护进程加载完其配置后发出。其他有用的事件是以作业更改状态发出的starting (7)、started (7)、stopping (7)和stopped (7)事件。
init有7种运行等级
0,关机
1,单用户模式
2,多用户模式,不启动nfs
3,多用户模式,有网络功能
4,保留
5,图形界面
6,重启
Upstart init(8)守护进程不跟踪运行级别本身,而是完全由用户空间工具实现。为表示运行级的更改而发出的事件是runlevel(7)事件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
init [选项] [参数]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
--verbose
将有关作业状态更改和事件释放的详细消息输出到系统控制台或日志,这对于调试引导非常有用。
3、实例
无
-------------------------
nice
nice指令可以设置程序运行的优先级,优先级会影响到程序的调度时间。nice的范围是-20~19,其中-20级别最高,19级别最低。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
nice [选项] [cmd]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-n | --adjustment=N
设置优先级
3、实例
1)设置指令wc优先级
[root@localhost ~]# nice -n 19 wc //设置wc的优先级最低
^Z //按下组合键ctrl+z
[2]+ Stopped nice -n 19 wc
[root@localhost ~]#
2)查看进程优先级
[root@localhost ~]# ps -ao "%p%y%x%c%n" //查看进程等级,wc的等级是19
PID TTY TIME COMMAND NI
8321 pts/0 00:00:00 wc 19
8370 pts/0 00:00:00 ps 0
-------------------------
nohup
nohup可以使程序能够忽略挂起信号,继续运行。用户退出时会挂载,而nohup可以保证用户退出后程序继续运行。如果标准输入是终端,请将其从/dev/null重定向。如果标准输出是终端,则将输出附加到“nohup.out”(如果可能的话),否则追加到“$home/nohup.out”。如果标准错误是终端,请将其重定向到标准输出。若要将输出保存到文件中,请使用“nohup COMMAND > FILE”。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
nohup cmd
2、选项列表
--help
显示帮助文档
--version
显示命令版本
3、实例
以nohup形式运行find指令
[root@localhost ~]# nohup find /weijie/ -name *.c //运行find
nohup: 忽略输入并把输出追加到"nohup.out" //结果会保存到nohup.out文件中
[root@localhost ~]# cat nohup.out //查看结果
/weijie/11.c
/weijie/4.c
/weijie/2.c
/weijie/3.c
/weijie/5.c
/weijie/1.c
-------------------------
pkill
pkill可以给指定的进程发送信息,它可以结束某个执行的进程或者目录登录的用户。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
pkill [-signal] [-fvx] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-f
查找完成的文件名
-g pgrp
只匹配列出的进程组ID中的进程。进程组0被转换为pgrep或pkill自己的进程组。
-G gid
只匹配实际组ID列出的进程。可以使用数值或符号值。
-n
选择最近执行的进程
-o
选择最早的进程
-P ppid
选择父pid匹配的进程
-s sid
只匹配进程会话ID列出的进程。会话ID 0被转换为pgrep或pkill自己的会话ID。
-t term
查找符合终端号的进程
-u euid
只匹配其有效用户ID列出的进程。
-U uid
只匹配实际用户ID列出的进程。可以使用数值或符号值。
-v
查找不符合条件的进程
-x
只匹配其名称(如果-f指定了命令行)与模式完全匹配的进程。
-signal
要发送的信号
3、返回值
0,一个或多个进程符合。
1,没有进程符合
2,命令的语法错误
3,致命错误:内存不足等。
4、实例
杀死wc进程
[root@localhost ~]# pkill -SIGKILL wc //向wc发送KILL信号,杀死进程
[1]- 已杀死 nice -n 19 wc
You have new mail in /var/spool/mail/root
[root@localhost ~]# ps //查看进程,wc已经杀死
PID TTY TIME CMD
8266 pts/0 00:00:00 bash
8554 pts/0 00:00:00 ps
-------------------------
renice
renice指令可以重新调整程序运行的优先级,可以通过进程id、用户id、组id来修改优先级。修改组的等级,影响组内所有用户的所有进程优先级;修改用户等级,影响该用户的所有进程优先级。除了超级用户之外,其他用户只能改变他们拥有的进程的优先级,并且只能在0到PRIO_MAX(20)范围内单调地增加他们的“nice value”。(这防止了凌驾于行政法规之上。)超级用户可以更改任何进程的优先级,并将优先级设置为PRIO_MIN(-20)~PRIO_MAX。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
renice -n N –u username
renice -n N –g gid
renice -n N –p pid
2、选项列表
-h | --help
显示帮助文档
-v | --version
显示命令版本
-n | --priority
优先级
-u | --user=name
设置指定用户的优先级
-g | --pgrp=gid
设置组的优先级
-p | --pid=PID
设置指定进程的优先级
3、实例
1)通过pid修改指令wc优先级
[root@localhost ~]# ps -ao "%p%y%x%c%n" //查看进程优先级
PID TTY TIME COMMAND NI
8321 pts/0 00:00:00 wc 19
8451 pts/0 00:00:00 ps 0
[root@localhost ~]# renice -n 15 -p 8364 //重设wc进程的优先级,变为15
8364: old priority 19, new priority 15
2)修改用户root的优先级
[root@localhost ~]# renice -n 0 -u root //修改用户root的优先级为0
0: old priority -11, new priority 0
[root@localhost ~]# ps -ao "%p%y%x%c%n" //查看进程优先级,当前进程都是root用户的,优先级都是0
PID TTY TIME COMMAND NI
8321 pts/0 00:00:00 wc 0
8364 pts/0 00:00:00 wc 0
8458 pts/0 00:00:00 ps 0
-------------------------
killall
killall可以根据名字来杀死进程,它会给指定名字的所有进程发送信息。如果没有指定信号名,则发送SIGTERM。信号可以通过名称(例如-HUP或-SIGHUP)或数字(例如-1)或选项-s来指定。如果命令名不是正则表达式(选项-r),并且包含斜杠(/),则将选择执行该特定文件的进程,与其名称无关。如果每个列出的命令至少有一个进程被杀死,或者没有列出命令,并且至少有一个进程符合-u和-Z搜索条件,则KILLALL返回一个零返回代码。否则KILLALL返回非零。KILLALL进程永远不会杀死自己(但可能会杀死其他KILLALL进程)。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
killall [选项] name
2、选项列表
-e | --exact
进程需要和名字完全相符
-I | --ignore-case
忽略大小写
-g | --process-group
结束进程组
-i | --interactive
结束之前询问
-l | --list
列出所有的信号名称
-q | --quite
进程没有结束时,不输出任何信息
-r | --regexp
将进程名模式解释为扩展的正则表达式。
-s | --signal
发送指定信号
-u | --user
结束指定用户的进程
-v | --verbose
显示详细执行过程
-w | --wait
等待所有的进程都结束
-V |--version
显示版本信息
--help
显示帮助信息
3、实例
结束所有进程
[root@localhost ~]# ps //查看进程,有3个wc进程
PID TTY TIME CMD
8266 pts/0 00:00:00 bash
9781 pts/0 00:00:00 wc
9784 pts/0 00:00:00 wc
9785 pts/0 00:00:00 wc
9786 pts/0 00:00:00 ps
[root@localhost ~]# killall -9 wc //结束所有的wc进程
[root@localhost ~]# ps //查看进程,wc都被杀死
PID TTY TIME CMD
8266 pts/0 00:00:00 bash
9788 pts/0 00:00:00 ps
[1] 已杀死 nice -n 19 wc
[2]- 已杀死 nice -n 19 wc
[3]+ 已杀死 nice -n 19 wc
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
watch
watch指令可以间歇性的执行程序,将输出结果以全屏的方式显示,默认是2s执行一次。watch将一直运行,直到被中断。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
2、 语法
watch [-dhvt] [-n <seconds>] [--differences[=cumulative]] [--help] [--interval=<seconds>] [--no-title] [--version] <command>
2、选项列表
-d | --differences
高亮显示差异部分
--cumulative
高亮显示“sticky”
-n
指定时间间隔
-t | --no-title
不显示日期时间以及间隔秒数
-h | --help
帮助信息
-v | --version
显示版本信息
3、例子代码
查看邮件
watch -n 60 from
查看目录内容的变化
watch -d ls –l
如果您只对用户Joe拥有的文件感兴趣,可以使用
watch -d ’ls -l | fgrep joe’
要想看到引号的效果,请试一试
watch echo $$
watch echo ’$$’
watch echo "’"’$$’"’"
您可以监视管理员安装最新的内核。
watch uname -r
4、实例
每3s执行一次ls指令
[root@localhost ~]# watch –n 3 ls //每3s执行一次ls
Every 3.0s: ls Sun Sep 23 09:04:40 2018
1
1.c~
anaconda-ks.cfg
icmp_echo_ignore_all~
icmp_echo_ignore_alv~
icmp_echo_ignore_alw~
icmp_echo_ignore_alx~
icmp_echo_ignore_aly~
icmp_echo_ignore_alz~
install.log
install.log.syslog
mail
nohup.out
公共的
模板
视频
图片
文档
下载
音乐
桌面
-------------------------
pstree
pstree显示正在运行的进程的树形结构,树以PID为根;如果省略了pid则以init为根。如果指定了用户名,则显示根植于该用户拥有的进程的所有进程树。如果pstree被调用为pstree.x11,那么它将提示行尾的用户按RETURE,并且在这种情况发生之前不会返回。这对于在x终端中运行pstree非常有用。
pstree通过将相同的分支放在方括号中并以重复计数作为前缀,在视觉上合并它们。例如:
init-+-getty
|-getty
|-getty
‘-getty
变成下面的样子
init---4*[getty]
进程的子线程在父进程下找到,并以大括号显示进程名,例如:
icecast2---13*[{icecast2}]
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
pstree [选项]
2、选项列表
-a
显示每个进程的完整指令,包括路径、参数
-A
使用ascii码显示树形
-c
关闭精简表示法
-G
使用VT 100线条绘制字符
-h
高亮显示正在执行的程序
-H
类似“-h”,但是突出显示指定的进程。与-h不同,如果高亮显示不可用,pstree在使用-H时会失败。
-l
长格式显示
-n
以进程号排序,默认以名字排序
-p
显示pid
-u
显示用户
-U
以utf-8显示字符
-V
显示命令版本信息
-Z
每个SELinux的上下文
3、实例
1)显示完成的树形结构
[root@localhost ~]# pstree -a
init
├─NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid
│ ├─dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid ...
│ └─{NetworkManager}
├─VBoxClient --clipboard
│ └─VBoxClient --clipboard
2)显示进程号
[root@localhost ~]# pstree -p
init(1)─┬─NetworkManager(6362)─┬─dhclient(6377)
│ └─{NetworkManager}(6379)
├─VBoxClient(7869)───VBoxClient(7870)───{VBoxClient}(7872)
├─VBoxClient(7882)───VBoxClient(7883)
├─VBoxClient(7890)───VBoxClient(7891)───{VBoxClient}(7894)
├─VBoxClient(7898)───VBoxClient(7899)─┬─{VBoxClient}(7901)
│ └─{VBoxClient}(7903)
├─VBoxClient(7306)───VBoxClient(7308)
├─VBoxClient(7312)───VBoxClient(7314)───{VBoxClient}(7317)
├─VBoxClient(7318)───VBoxClient(7320)─┬─{VBoxClient}(7323)
│ └─{VBoxClient}(7325)
-------------------------
pidof
pidof可以查找指定名称的进程的pid,将结果送到标准输出。pidof有两种返回值:0,找到至少一个进程;1,没有找到进程。pidof实际上与killall5相同;程序根据调用它的名称进行操作。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
pidof [选项] name
2、选项列表
-s
一次只响应一个进程号
-c
只显示运行在root目录下的进程,这个选项只对root用户有效
-o
忽略指定进程号的进程
-x
同时显示在shell脚本运行中的相同名称
3、实例
1)查看指定进程的id
[root@localhost ~]# pidof bash //显示bash进程的id,有两个
8563 8266
2)一次只显示一个进程
[root@localhost ~]# pidof -s bash //只显示出一个进程id
8563
-------------------------
pgrep
pgrep指令可以按名字或者其他属性搜索指定的进程,显示出进程的id到标准输出。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,...] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...] [pattern]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-d delimiter
设置用于分隔输出中每个进程ID的字符串(默认为换行符)。(仅限于pgrep)
-f
查找完成的文件名
-g pgrp
只匹配列出的进程组ID中的进程。进程组0被转换为pgrep或pkill自己的进程组。
-G gid
只匹配实际组ID列出的进程。可以使用数值或符号值。
-l
列出进程的名字和id
-n
选择最近执行的进程
-o
选择最早的进程
-P ppid
选择父pid匹配的进程
-s sid
只匹配进程会话ID列出的进程。会话ID 0被转换为pgrep或pkill自己的会话ID。
-t term
查找符合终端号的进程
-u euid
只匹配其有效用户ID列出的进程。
-U uid
只匹配实际用户ID列出的进程。可以使用数值或符号值。
-v
查找不符合条件的进程
-x
只匹配其名称(如果-f指定了命令行)与模式完全匹配的进程。
3、实例
1)查看指定进程信息
[root@localhost ~]# pgrep -l wc //显示名称和进程号
8572 wc
2)查看某个终端的进程
[root@localhost ~]# pgrep -l -t tty1 //显示tty1下的进程id和进程名字
7734 Xorg
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk |
-------------------------
hostname
hostname指令用于设置或者显示系统主机名,没有任何参数就会返回gethostname()函数的返回值。使用hostname指令之后,主机名会立马被修改,但是重启系统之后就失效了。可以修改配置文件/etc/sysconfig/network,使主机名永久有效。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
hostname [选项]
2、选项列表
-h | --help
显示帮助文档
-V | --version
显示命令版本
-v
显示详细执行过程
-a | --alias
显示主机别名
-d | --domain
显示主机dns域名
-F file
从文件读取
-f | --fqdn | --long
显示完全格式的域名
-A | --all-fqdns
显示机器的全部FQDNs
-i | --ip-address
显示指定主机的ip地址
-I | --all-ip-address
显示主机所有的地址
-s | --short
以短格式显示,仅显示从第一个点分开的部分
-y | --yp | --nis
显示nis域名
3、FQDN
不能用此命令更改FQDN(由hostname-fqdn返回)或DNS域名(由dnsdomainname返回)。系统的FQDN是resolver为主机名返回的名称。技术上:FQDN是由gethostname(2)返回的主机名。DNS域名是第一个点之后的部分。因此,如何更改取决于配置文件(通常在“/etc/host.conf”中)。通常(如果在DNS或NIS之前解析主机文件),您可以在“/etc/host”中更改它。
如果一台机器有多个网络接口/地址,或者在移动环境中使用,那么它可能有多个FQDN/域名,或者根本没有。因此,避免使用“hostname -fqdn”、“hostname --domain”和“dnsdomainname”。“hostname --ip-address”地址也受到同样的限制,因此也应该避免。
4、实例
1)显示主机名
[root@localhost ~]# hostname //显示完整名字
localhost.localdomain
[root@localhost ~]# hostname –s //显示短格式名字
localhost
[root@localhost ~]# hostname –a //显示主机别名
localhost.localdomain localhost4 localhost4.localdomain4 localhost.localdomain localhost6 localhost6.localdomain6
2)显示主机ip
[root@localhost ~]# hostname -i
127.0.0.1 127.0.0.1
-------------------------
ypdomainname
ypdomainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机NIS/YP域名。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ypdomainname [-v]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-v
显示详细执行过程
3、实例
显示主机域名
[root@localhost ~]# ypdomainname //显示域名
www.weijie.com
[root@localhost ~]# ypdomainname www.david.com //设置域名
[root@localhost ~]# ypdomainname //显示域名
www.david.com
nisdomainname
nisdomainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机NIS/YP域名。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
nisdomainname [-v]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-v
显示详细执行过程
3、实例
显示主机域名
[root@localhost ~]# nisdomainname //显示域名
www.david.com
[root@localhost ~]# nisdomainname www.weijie.com //设置域名
[root@localhost ~]# nisdomainname //显示域名
www.weijie.com
domainname
domainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机域名。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
domainname [-v] [-F filename] [name]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-v
显示详细执行过程
-F | --file filename
从指定文件读取主机域名
3、实例
显示主机域名
[root@localhost ~]# domainname -v
getdomainname()=`(none)'
(none)
[root@localhost ~]# domainname www.david.com
You have new mail in /var/spool/mail/root
[root@localhost ~]# domainname
www.david.com
dnsdomainname
dnsdomainname将打印FQDN(完全限定域名)的域部分。系统的完整FQDN以“hostname --fqdn”返回。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
dnsdomainname [-v]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-v
显示详细执行过程
3、实例
显示主机域名
[root@localhost ~]# dnsdomainname –v //-v选项显示详细执行过程
gethostname()=`localhost.localdomain'
Resolving `localhost.localdomain' ...
Result: h_name=`localhost'
Result: h_aliases=`localhost.localdomain'
Result: h_aliases=`localhost4'
Result: h_aliases=`localhost4.localdomain4'
Result: h_aliases=`localhost.localdomain'
Result: h_aliases=`localhost6'
Result: h_aliases=`localhost6.localdomain6'
Result: h_addr_list=`127.0.0.1'
Result: h_addr_list=`127.0.0.1'
-------------------------
ifcfg
ifcfg是一个简单的脚本替换iconfig命令,它可以设置网络接口的ip地址。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ifcfg [device] [cmd] [address]
device就是网卡设备,它可能有别名。cmd可以是add、delete、stop。address就是ip地址。
2、选项列表
无
3、实例
1)添加ip地址
[root@localhost ~]# ifcfg eth0 add 192.168.0.250/24 //添加地址250
Forwarding is ON or its state is unknown (4). OK, No RDISC.
[root@localhost ~]# ifconfig //查看网络信息
eth0 Link encap:Ethernet HWaddr 08:00:27:14:33:57
inet addr:192.168.0.250 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
TX packets:72250 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83580745 (79.7 MiB) TX bytes:5842176 (5.5 MiB)
2)删除ip地址
[root@localhost ~]# ifcfg eth0 delete 192.168.0.250/24 //删除网卡地址
Forwarding is ON or its state is unknown (4). OK, No RDISC.
[root@localhost ~]# ifconfig //查看网卡信息,ip地址已经删除
eth0 Link encap:Ethernet HWaddr 08:00:27:14:33:57
inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83580745 (79.7 MiB) TX bytes:5842218 (5.5 MiB)
-------------------------
ifconfig
ifconfig指令用来配置网络接口参数,同时还可以显示当前内核网络接口的工作状态。如果没有提供参数,则ifconfig将显示当前活动接口的状态。如果给定单个接口参数,则只显示给定接口的状态;如果给定单个“-a”参数,则显示所有接口的状态,即使是关闭的接口也是如此。否则,它会配置一个接口。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ifconfig [interface | up | down]
2、选项参数列表
interface
接口的名称。这通常是一个驱动程序名,后面跟着一个单元号,例如用于第一个以太网接口的eth0。
up
此标志将导致激活接口。如果将地址分配给接口,则会隐式指定该地址。
down
此标志导致关闭此接口的驱动程序。
[-]arp
启用或禁用在此接口上使用ARP协议。
[-]promisc
启用或禁用接口的混杂模式。如果选中,网络上的所有数据包都将由接口接收。
[-]allmulti
启用或禁用所有多播模式。如果选中,则接口将接收网络上的所有多播数据包。
metric N
此参数设置接口度量。它在GNU/Linux下不可用
mtu N
此参数设置接口的最大传输单元(MTU)。
dstaddr addr
为点对点链路(如PPP)设置远程IP地址.这个关键字现在已经过时了;使用pointopoint关键字代替。
netmask addr
设置此接口的IP网络掩码。此值默认为通常的A、B或C类网络掩码(从接口IP地址派生),但可以设置为任何值。
add addr/prefixlen
向接口添加IPv 6地址
del addr/prefixlen
从接口中删除IPv 6地址
tunnel ::aa.bb.cc.dd
创建一个新的SIT(IPv6-in-IPv4)设备,通过隧道到达给定的目的地。
irq addr
设置此设备使用的中断行。并非所有设备都可以动态更改其IRQ设置。
io_addr addr
为该设备设置I/O空间中的起始地址
mem_start addr
设置此设备使用的共享内存的起始地址。只有少数几个设备需要这个
media type
设置设备要使用的物理端口或介质类型。并非所有设备都可以更改此设置,以及那些可以更改其支持的值的设备。典型的类型值是10 base 2(细以太网)、10 base T(双绞线10 Mbps以太网)、AUI(外收发信机)等。驱动的特殊介质类型可以用来告诉驱动对媒体进行自动感知。同样,并不是所有的驱动都能做到这一点。
[-]broadcast [addr]
如果地址参数给定,则为该接口设置协议广播地址。否则,设置(或清除)接口的IFF_BROADCAST标志。
[-]pointopoint [addr]
这个关键字启用了接口的点对点模式,这意味着它是两台机器之间的直接链接,没有其他人监听它。如果地址参数也给出了,就像过时的dstaddr关键字一样,设置链接另一端的协议地址。否则,设置或清除接口的IFF_POINTOPOINT标志。
hw class address
如果设备驱动程序支持此操作,则设置此接口的硬件地址。关键字后面必须跟着硬件类的名称和相当于硬件地址的可打印的ASCII。目前支持的硬件类包括ether (以太网)、ax25(AMPRAX.25)、ARCnet和netrom(AMPR NET/ROM)。
multicast
在接口上设置多播标志。这通常不应该需要,因为驱动程序本身设置正确的标志。
address
要分配给此接口的IP地址。
txqueuelen length
设置设备的传输队列的长度。对于具有高延迟(调制解调器链路,ISDN)的较慢设备,将其设置为小值是有用的,以防止快速批量传输过多地干扰诸如telnet之类的交互通信。
3、地址族
如果接口名称之后的第一个参数被识别为受支持地址族的名称,则该地址族用于解码和显示所有协议地址。目前支持的地址族包括Internet(TCP/IP,默认值)、inet6(IPv 6)、Axis25(AMPR分组无线电)、ddp(AppleTalk相位2)、IPX(Novell IPX)和netrom(AMPR分组无线电)。在IPv4虚线小数表示法中提供的所有数字都可以是十进制、八进制或十六进制,正如ISO C标准所指定的那样(即,前导0x或0x表示十六进制;否则,前导“0”表示八进制;否则,该数字被解释为十进制)。使用十六进制和八进制数字是不符合RFC的,因此它的使用是不鼓励的,可能会消失。
4、实例
1)查看当前网络状态
[root@localhost ~]# ifconfig //没有任何参数选项,显示当前所有网络状态
eth0 Link encap:Ethernet HWaddr 08:00:27:14:33:57
inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83580745 (79.7 MiB) TX bytes:5842218 (5.5 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:7347 errors:0 dropped:0 overruns:0 frame:0
TX packets:7347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:786270 (767.8 KiB) TX bytes:786270 (767.8 KiB)
2)查看指定网卡的状态
[root@localhost ~]# ifconfig eth0 //显示指定网卡状态
eth0 Link encap:Ethernet HWaddr 08:00:27:14:33:57
inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107276 errors:0 dropped:0 overruns:0 frame:0
TX packets:72251 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83580745 (79.7 MiB) TX bytes:5842218 (5.5 MiB)
3)启动网卡
[root@localhost ~]# ifconfig eth0 down //关闭eth0
[root@localhost ~]# ifconfig eth0 up //开启eth0
[root@localhost ~]# ifconfig eth0 //查看eth0,已经分配ip
eth0 Link encap:Ethernet HWaddr 08:00:27:14:33:57
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe14:3357/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107280 errors:0 dropped:0 overruns:0 frame:0
TX packets:72262 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83582067 (79.7 MiB) TX bytes:5843588 (5.5 MiB)
-------------------------
ifup
ifup指令用来启动网络接口设备,设备必须是定义在“/etc/sysconfig/network-scripts/ifcfg-ethX”或者“/etc/sysconfig/network”的文件。这些脚本通常使用一个参数:配置的名称(例如eth0)。在引导序列中,使用“boot”的第二个参数调用它们,以便在引导过程中不想打开的设备(ONBOOT=no)此时可以被忽略。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ifup interface
2、选项列表
无
3、实例
激活网卡
[root@localhost ~]# ifup eth0 //激活网卡eth0
活跃连接状态:激活中
活跃连接路径:/org/freedesktop/NetworkManager/ActiveConnection/2
状态:激活的
连接被激活
ifdown
ifdown指令用来关闭网络接口设备,设备必须是定义在“/etc/sysconfig/network-scripts/ifcfg-ethX”或者“/etc/sysconfig/network”的文件。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ifdown interface
2、选项列表
无
3、实例
关闭网卡
[root@localhost ~]# ifdown eth0 //关闭eth0
设备状态:3 (断开连接)
|
-------------------------
arp
arp指令用来管理系统的arp缓冲区,可以显示、删除、添加静态mac地址。ARP以各种方式操纵内核的ARP缓存。主要选项是清除地址映射项并手动设置。为了调试目的,ARP程序还允许对ARP缓存进行完全转储。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
arp [-evn] [-H type] [-i if] -a [hostname]
arp [-v] [-i if] -d hostname [pub]
arp [-v] [-H type] [-i if] -s hostname hw_ addr [temp]
arp [-v] [-H type] [-i if] -s hostname hw_ addr [netmask nm] pub
arp [-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub
arp [-vnD] [-H type] [-i if] -f [filename]
2、选项列表
--help
显示帮助文档
--version
显示命令版本
-H type
--hw-type type
-t type
在设置或读取ARP缓存时,这个可选参数告诉ARP应该检查哪类条目。此参数的默认值为ether(即IEEE 802.3 10 Mbps以太网的硬件代码0x01)。其他可能的值有,如ARCnet(Arcnet)、PROnet(PRINET)、AX.25(Axis 25)和Net/ROM(Netrom)。
-a [hostname] | --all [hostname]
显示本机的arp缓冲区内容
-d hostname | --delete hostname
从缓冲区删除指定的地址类型
-D | -use-device
使用指定接口的mac地址
-e
使用Linux风格显示
-i if | --device if
显示指定设备的arp缓冲区
-s hostname hw_addr
设置指定主机的mac地址映射
-f filename | --file filename
类似于-s选项,只是这次地址信息是从filename设置的。数据文件的名称通常是“/etc/ether”,但这不是正式的。如果没有指定文件名“/etc/ether”作为默认值。该文件的格式很简单;它只包含带有硬件地址和由空格分隔的主机名的ASCII文本行。此外,还可以使用pub、temp和netmask标志。
-n | --numeric
使用数字方式显示
-v | --verbose
显示执行过程
在所有需要主机名的地方,人们也可以用虚线小数点表示法输入IP地址。作为兼容性的特例,主机名和硬件地址的顺序可以交换。ARP缓存中的每个完整条目都将被标记为C标志。永久条目用M标记,已发布的条目带有P标志。
3、实例
1)添加静态映射
[root@localhost ~]# arp -i eth0 -s 192.168.1.6 ff:ee:ee:ee:ee:ee //将目标ip地址映射固定mac
[root@localhost ~]# arp –a //查看arp缓冲区
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
? (192.168.1.6) at ff:ee:ee:ee:ee:ee [ether] PERM on eth0
2)以数字方式显示
[root@localhost ~]# arp -vn
Address HWtype HWaddress Flags Mask Iface
10.0.2.2 ether 52:54:00:12:35:02 C eth0
192.168.1.6 ether ff:ee:ee:ee:ee:ee CM eth0
Entries: 2 Skipped: 0 Found: 2
-------------------------
arping
arping指令用于发送arp请求到一个相邻的主机,在指定网卡上发送arp请求指定地址,源地址使用-s指定。该指令可以直径ping MAC地址,找出哪些地址被哪些电脑使用了。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
arping [-AbDfhqUV] [-c count] [-w deadling] [-s source] -I interface destnation
2、选项列表
-A
与-U相同,但是发送的是ARP RELAY报文
-b
只发送物理层的广播报文
-c count
指定发送测试数据包的次数
-D
重复地址检测模式
-f
如果目的主机有回应,立刻停止发送测试数据包
-h
显示帮助信息
-I interface
指定网络设备接口
-q
静默模式
-s source
指定发送测试包的源地址
-U
更新邻居主机arp缓存
-V
显示版本信息
-w
指定超时时间
3、实例
向邻居主机发送请求
[root@localhost ~]# arping -I eth0 192.168.1.8 //指定网卡,向目标ip发送请求
ARPING 192.168.1.8 from 192.168.1.9 eth0
Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D] 0.817ms //可以看到目标ip的mac地址
Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D] 0.749ms
Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D] 0.741ms
Unicast reply from 192.168.1.8 [98:01:A7:9F:5E:9D] 0.787ms
-------------------------
做了一个Linux学习的平台,目前出来一个雏形,各位可以参考使用
链接:https://pan.baidu.com/s/1GOLVU2CbpBNGtunztVpaCQ 密码:n7bk
-------------------------
ipcalc
ipcalc提供了一种计算主机IP信息的简单方法。各种选项指定ipcalc应该在标准输出上显示什么信息。可以指定多个选项。必须始终指定要操作的IP地址。大多数操作还需要一个网络掩码或CIDR前缀。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ipcalc [OPTION]... <IP address>[/prefix] [netmask]
2、选项列表
-c | --check
检测ip地址
-4
指定ipv4
-6
指定ipv6
-b | --broadcast
显示指定ip的广播地址和网络掩码
-h | --hostname
显示指定ip的主机名
-m | --netmask
计算给定地址的掩码
-p | --prefix
显示给定掩码或者ip的前缀
-n | --network
显示给定ip和掩码的网络地址
-s | --slient
不显示任何错误信息
3、实例
1)计算网络地址
[root@localhost ~]# ipcalc -n 192.168.1.9/24
NETWORK=192.168.1.0
2)计算广播地址
[root@localhost ~]# ipcalc -b 192.168.1.9/24
BROADCAST=192.168.1.255
3)计算子网掩码
[root@localhost ~]# ipcalc -4 -m 192.168.1.9
NETMASK=255.255.255.0
-------------------------
netstat
netstat指令可以显示当前的网络连接、路由表、接口统计信息、伪装连接和多播成员资格等信息。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-ports] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c] [delay]
netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-ports] [--continuous|-c] [delay]
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-ports] [--continuous|-c] [delay]
netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-ports] [--continuous|-c] [delay]
netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-ports] [--continuous|-c] [delay]
netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w] [delay]
netstat {--version|-V}
netstat {--help|-h}
address_family_options:
[--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp, ... }] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]
2、选项列表
--help
显示帮助信息
--version
显示版本信息
-v | --verbose
显示执行过程
-n | --numeric
直接显示数字ip
--numeric-hosts
显示主机的数字地址,不影响端口和用户名
--numeric-ports
显示端口,不影响主机和用户名
--numeric-users
显示用户id,不影响主机和端口
-A | --protocol
指定网络类型
-c | --continuous
持续显示
-e | --extend
显示其他附加信息
-o | --timers
显示计时器
-p | --program
显示正在使用的socket程序pid和名字
-l | --listen
只显示监听的socket信息
-a | -all
显示所有连接中的socket信息
-F
显示FIB
-C
显示路由的缓存
-Z | --context
如果打开了SELinux,那么就打印SELinux的上下文
-T | --notrim
停止修剪长地址
3、说明
netstat打印有关Linux网络子系统的信息。打印的信息类型由第一个参数控制
(none)
默认情况下,netstat显示打开的套接字列表。如果不指定任何地址族,则将打印所有已配置地址家族的活动套接字。
-r | --route
打印内核路由表
-g | --groups
显示IPv4和IPv6的多播组成员信息
-i| --interfaces=iface , -I=iface
显示所有网络接口的表,或指定的ifaces。
-M | --masquerade
显示假连接列表。
-s | --statistics
显示每个协议的汇总统计信息。
4、输出
Active Internet connections(TCP, UDP, raw),说明
Proto,socket使用的协议,tcp, udp, raw。
Recv-Q,连接到此套接字的用户程序未复制的字节数。
Send-Q,远程主机未确认的字节数。
Local Address,套接字的本地端的地址和端口号。除非指定了“--numeric (-n)“选项,否则套接字地址将解析为其规范主机名(FQDN),端口号将被转换为相应的服务名称。
Foreign Address,套接字的远程端的地址和端口号。类似于“本地地址”。
State,socket的状态。由于在原始模式中没有状态,通常在UDP中也没有使用状态,因此这一列可以保留为空白。通常,这可以是几个值之一:
ESTABLISHED,套接字有一个已建立的连接。
SYN_SENT,套接字正在积极尝试建立连接。
SYN_RECV,已从网络接收到连接请求。
FIN_WAIT1,套接字关闭,连接正在关闭。
FIN_WAIT2,连接被关闭,套接字正在等待来自远程端的关闭。
TIME_WAIT,套接字在关闭后等待处理仍在网络中的数据包。
CLOSED,没有使用套接字。
CLOSE_WAIT,远程终端已关闭,等待套接字关闭。
LAST_ACK,远程终端已关闭,套接字已关闭。等待确认
LISTEN,套接字正在监听传入的连接。除非您指定“--listening”或“--all(-a)”选项,否则输出中不包含此类套接字。
CLOSING,两个套接字都已关闭,但我们仍然没有发送所有数据。
UNKNOWN,套接字的状态未知。
User
PID/Program name
Timer
Active UNIX domain Sockets,说明
Proto,套接字使用的协议(通常是Unix)。
RefCnt,参考计数(即通过这个套接字附加的进程)。
Flags,所显示的标志是SO_ACCEPTON (显示为ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果未连接套接字的相应进程正在等待连接请求,则在未连接套接字上使用SO_ACCECPTON。其他的标志不正常。
Type可能的几种值:
SOCK_DGRAM,套接字以数据报(无连接)模式使用。
SOCK_STREAM,这是一个流(连接)套接字。
SOCK_RAW,套接字用作原始套接字。
SOCK_RDM,这个服务提供可靠传递的消息。
SOCK_SEQPACKET,这是一个顺序的数据包套接字。
SOCK_PACKET,原始接口访问套接字。
UNKNOWN,不知道的状态
State
FREE,套接字还没有分配
LISTENING,套接字正在监听请求。
CONNECTING,套接字正在尝试连接。
CONNECTED,套接字已经连接。
DISCONNECTING,套接字断开连接。
(empty),套接字没有连接到其他地方。
UNKNOWN,未知的状态
PID/Program name,打开套接字的进程ID(PID)和进程名。更多信息可在上面写的活动互联网连接部分获得。
Path,这是连接到套接字上的相应进程的路径名。
5、文件
/etc/services,服务翻译文件
/proc,proc文件系统的挂载点,它允许访问内核状态。
/proc/net/dev,设备信息。
/proc/net/raw,raw套接字信息。
/proc/net/tcp,tcp套接字信息。
/proc/net/udp,udp套接字信息。
/proc/net/igmp,IGMP多播信息。
/proc/net/unix,Unix域名套接字信息。
/proc/net/ipx,IPX套接字信息。
/proc/net/ax25,AX25套接字信息。
/proc/net/appletalk,DDP (appletalk) 套接字信息。
/proc/net/nr,NET/ROM套接字信息
/proc/net/route,IP路由信息。
/proc/net/ax25_route,AX25路由信息。
/proc/net/ipx_route,IPX路由信息。
/proc/net/nr_nodes,NET/ROM 节点列表。
/proc/net/nr_neigh,NET/ROM邻居。
/proc/net/ip_masquerade,伪装连接。
/proc/net/snmp,静态。
6、实例
1)显示指定类型的网络信息
[root@localhost ~]# netstat -A inet //指定网络类型inet
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 192.168.0.113:33423 192.168.0.1:domain ESTABLISHED
udp 0 0 192.168.0.113:40242 192.168.1.1:domain ESTABLISHED
udp 0 0 192.168.0.113:50786 192.168.0.1:domain ESTABLISHED
2)显示路由表
[root@localhost ~]# netstat –r //显示路由表
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
255.255.255.255 - 255.255.255.255 !H - - - -
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
224.0.0.0 - 255.255.255.0 ! - - - -
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
3)显示网卡状态
[root@localhost ~]# netstat –i //显示网卡状态
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flag
eth0 1500 0 121817 0 0 0 79998 0 0 0 BMRU
lo 16436 0 8374 0 0 0 8374 0 0 0 LRU
-------------------------
traceroute
traceroute指令输出到目标主机的路由包。Traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路径上从每个网关激发ICMP TIME_SUBERS响应。
traceroute6等价于“traceroute -6”
唯一需要的参数是目标主机的名称或IP地址。探测数据包的总大小(IPv 4默认为60字节,IPv 6为80字节)是一个可选参数。在某些情况下,可以忽略指定的大小或将其增加到最小值。
该程序试图跟踪IP数据包将遵循的路由到某些Internet主机,方法是使用一个小的ttl(生命时间)启动探测包,然后从网关侦听ICMP“时间超过”的答复。我们以1开头,然后增加1,直到我们得到一个ICMP“端口不可达”(或TCP重置),这意味着我们到达了“主机”,或者达到了最大值(默认为30跳)。在每个ttl设置处发送三个探针(默认情况下),并打印一行,显示每个探针的ttl、网关地址和往返时间。在请求时,可以在地址之后添加其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在5.0秒(默认)内没有响应,则会为该探针打印一个“*”(星号)。
追踪结束后,可以打印一些附加注释:!h、!n或!P(主机、网络或协议不可达)、!s(源路由失败)、!F(所需碎片化)、!X(管理上禁止通信)、!v(主机优先级冲突)、!C(有效的优先截止),或!<num>(ICMP不可达代码<num>)。如果几乎所有的探测器都导致某种无法到达的情况,Traceroute就会放弃并退出。
我们不希望目标主机处理UDP探测包,因此目标端口被设置为一个不太可能的值(您可以使用-p标志更改它)。ICMP或TCP跟踪不存在这样的问题(对于TCP,我们使用半开放技术,这样可以防止目标主机上的应用程序看到我们的探测)。
在现代网络环境下,由于防火墙的广泛应用,传统的traceroute方法并不总是适用的。这样的防火墙过滤“不太可能”的UDP端口,甚至ICMP回音。为了解决这个问题,还实现了一些额外的跟踪方法
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,…] [-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos] [-l flow_label] [-w waittime] [-z sendwait]
[-UL] [-P proto] [--sport=port] [-M method] [-O mod_options] [--mtu] [--back] host [packet_len]
2、选项列表
--help
显示帮助信息
-V | --version
显示版本信息
-4 | -6
显式强制IPv4或IPv6跟踪。默认情况下,程序将尝试解析给定的名称,并自动选择适当的协议。如果解析主机名同时返回ipv4和ipv6地址,traceroute将使用ipv4。
-I
使用ICMP进行路由探测
-T
使用TCP协议的SYN进行路由探测
-d
是能socket调试功能
-f first_ttl
指定第一个数据包的TTL,默认是1
-F
不使用碎片
-g gateway
告诉Traceroute将IP源路由选项添加到传出数据包,该数据包通知网络通过指定网关路由数据包(大多数路由器出于安全原因禁用了源路由)。通常,允许多个网关(逗号分隔)。对于IPv 6,num,addr,addr.允许使用,其中num是路由标头类型(默认为类型2)。注意,0类型的路由头现在已不再推荐使用(Rfc 5095)
-i interface
指定网络接口
-m max_ttl
指定最大ttl,默认30
-N squeries
指定同时发送的探测数据包的数量。同时发送几个探针可以大大加快示踪速度。默认值为16。
-n
使用ip地址,不使用hostname
-p port
指定UDP端口
-t tos
对于IPv 4,设置服务类型(TOS)和优先级值。有用的值是16(低延迟)和8(高吞吐量)。注意,为了使用一些TOS优先级值,您必须是超级用户。对于IPv 6,设置流量控制值。
-w waittime
指定等待应答的时间,默认5s
-q nqueries
设置每个跳的探测数据包数。默认为3
-r
忽略正常的路由表
-s
指定发送数据包的ip地址
-z
探测之间的最小时间间隔(默认为0)。如果值大于10,则它指定一个以毫秒为单位的数字,否则为秒数(浮点值也允许)。当某些路由器对icmp消息使用速率限制时非常有用。
-e
显示ICMP扩展(Rfc 4884)。一般形式是类/类型:后面是十六进制转储。MPLS(Rfc 4950)以一种形式显示出来“MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL”
-A
在路由注册表中执行路径查找,并在相应地址之后直接打印结果。
--sport=port
选择要使用的源端口
-M method
对traceroute操作使用指定的方法。默认的传统UDP方法有名称Default,ICMP(-I)和TCP(-T)分别有ICMP和TCP。特定于方法的选项可以通过-O传递。
-O option
指定一些特定于方法的选项。几个选项用逗号分隔(或在cmdline上使用多个-O)。每种方法都可能有自己的特定选项,或者许多方法根本没有它们
-U
使用UDP对特定的目标端口进行跟踪(而不是增加每个探针的端口)。默认端口为53(DNS)
-UL
使用UDPLITE追踪
-P protocol
使用指定协议的原始数据包进行跟踪。默认协议为253(Rfc 3692)。
--mtu
沿着被追踪的路径发现MTU
--back
打印后跳数时,它似乎与前进方向不同。在假定远程跳发送初始ttl设置为64、128或255(这似乎是一种常见的做法)的情况下,猜测了这个数字。它以“-NUM”的形式打印为否定值。
3、可用的方法method
通常,特定的traceroute方法可能必须由-M名称来选择,但是大多数方法都有它们简单的命令行开关(如果存在,您可以在方法名称之后看到它们)。
default
传统的、古老的追踪方法。默认使用。
探测包是具有所谓“不可能”目标端口的UDP数据报。第一个探针的“不可能”端口是33434,然后每个下一个探针的端口增加一个。由于预期端口未使用,目标主机通常返回“ICMP不可访问端口”作为最终响应。(但是,没有人知道当某些应用程序侦听这样的端口时会发生什么)。
这个方法普通用户就可以使用。
icmp -I
目前最常用的方法是使用ICMP回波数据包作为探针。如果您可以ping(8)目标主机,则icmp跟踪也适用。
tcp -T
众所周知的现代方法,旨在绕过防火墙。使用常量目标端口(默认为80,http)。
如果网络路径中存在一些过滤器,那么很可能任何“不太可能”的UDP端口(对于默认方法而言)或甚至ICMP回波(对于ICMP)都会被过滤,并且整个跟踪只会在这样的防火墙上停止。要绕过网络过滤器,我们必须只使用允许的协议/端口组合。如果我们追踪一些,比如说,邮件服务器,那么更有可能“- T –p 25”可以到达它,即使-我不能。
这种方法使用了众所周知的“半开放技术”,它可以防止目标主机上的应用程序看到我们的探测。通常,发送TCP syn。对于未被监听的端口, 我们接收TCP重置,一切都完成了。对于活动侦听端口,我们接收TCP syn ack,但通过TCP重置(而不是预期的TCP ack)应答,这样即使应用程序从未注意到,远程TCP会话也会被删除。
这个方法有以下的一些选项,默认的是syn、sysctl
syn,ack,fin,rst,psh,urg,ece,cwr,在任意组合中为探测包设置指定的tcp标志。
flags=num,将TCP标头中的标志字段设置为num。
ecn,发送带有TCP标志ECA和CWR的syn数据包(用于显式拥塞通知,rfc 3168)
sack,timestamps,window_scaling,在传出探测包中使用相应的tcp标头选项。
sysctl,对上面的TCP头选项和ecn使用当前sysctl(“/proc/sys/net/*”)设置。默认情况下始终设置,如果没有其他指定的话
mss=num,对maxseg tcp报头选项使用num值(当syn)
tcpconn
TCP方法的初始实现,简单使用CONNECT(2)调用,完成TCP会话的完全打开
udp -U
使用带有常量目标端口的UDP数据报(默认为53,DNS)。也打算绕过防火墙。
注意,与TCP方法不同的是,目标主机上的相应应用程序总是接收我们的探测(带有随机数据),而且大多数都很容易被它们混淆。但是,大多数情况下,它不会响应我们的数据包,因此我们永远不会看到跟踪中的最后一跳。(幸运的是,似乎至少DNS服务器会以愤怒的方式回复)。此方法不需要特权。
udplite -UL
对探针使用udplite数据报(具有固定的目标端口,默认为53),此方法不需要特权。选项:
coverage=num,设置udplite范围num。
raw -P proto
发送协议原始数据包。选项:
protocol=proto,使用IP协议Proto(默认253)
4、说明
为了加速工作,通常同时发送几个探测器。另一方面,它制造了一个“包裹风暴”,特别是在回复方向。路由器可以节流ICMP响应的速率,有些应答可能会丢失。为了避免这种情况,减少同步探测的数量,甚至将其设置为1(类似于最初的traceroute实现),即-N1。
最终(目标)主机可以丢弃一些同时进行的探测,甚至可能只回答最新的探测。它可以导致额外的“看上去像过期”啤酒花接近最后一跳。我们使用智能算法来自动检测这种情况,但如果在您的情况下它无法帮助,只需使用-N1。
为了获得更好的稳定性,您可以通过-z选项来减缓程序的工作速度,例如,在探测之间使用“-z 0.5”进行半秒暂停。
如果有些跳对每种方法都没有任何报告,那么获得某些信息的最后机会是使用“ping -R”命令(ipv4,并且仅对最近的8跳)。
5、实例
追踪到baidu的路由信息
[root@localhost ~]# ping www.baidu.com -c 1 //ping目标,得到ip地址
PING www.a.shifen.com (111.13.100.91) 56(84) bytes of data.
[root@localhost ~]# traceroute -n www.baidu.com //追踪路由
traceroute to www.baidu.com (111.13.100.92), 30 hops max, 60 byte packets
1 192.168.1.1 4.124 ms 3.936 ms 3.882 ms
2 10.46.80.1 8.917 ms 9.238 ms 9.233 ms
3 183.203.226.201 12.855 ms 12.788 ms 12.802 ms
4 221.180.30.197 12.792 ms 221.180.30.45 12.776 ms 12.762 ms
5 221.183.47.225 13.526 ms 13.363 ms 13.259 ms
6 221.183.37.249 26.798 ms 23.556 ms 26.832 ms
7 * * *
8 111.13.98.101 20.569 ms 20.460 ms 111.13.98.93 24.463 ms
9 111.13.98.93 27.215 ms 111.13.98.101 20.895 ms 111.13.112.53 26.946 ms
10 111.13.108.5 24.136 ms 111.13.112.57 23.754 ms 111.13.112.61 23.712 ms
-------------------------
ip
ip指令可以显示或操作路由、网路设备,设置路由策略和通道。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
ip [选项] OBJECT COMMAND [help]
OBJECT对象可以是:link,网络设备;addr,设备的协议地址;route,路由表;rule,策略;neigh,arp缓存;tunnel,ip通道;maddr,多播地址;mroute,多播路由
COMMAND是操作命令,不同的对象有不同的命令配置。
link对象支持的命令:set、show。
addr对象支持的命令:add、del、flush、show。
route对象支持的命令:list、flush、get、add、del、change、append、replace、monitor。
rule对象支持的命令:list、add、del、flush。
neigh对象支持的命令:add、del、change、replace、show、flush。
tunnel对象支持的命令:add、change、del、show。
maddr支持的命令:add、del。
mroute支持的命令:show
2、选项列表
-V | -Version
显示版本信息
--help
显示帮助信息
-s | -stats | -statistics
显示详细的信息
-f | -family
指定协议类型
-4
等同-family inet
-6
等同-family inet6
-0
等同-family link
-o | -oneline
每条记录输出一行
-r | -resove
使用系统名字解析DNS
3、ip link---网络设备配置
链路是一种网络设备,相应的命令显示和改变设备的状态。
1)ip link set,改变设备属性
devNAME(default),NAME指定要操作的网络设备。配置SR-IOV虚拟功能(VF)设备时,此关键字应指定关联的物理功能(PF)设备。
up,down,改变设备的状态,开或者关。
arp on,arp off,更改设备的NOARP标志。
multicast on,multicast off,更改设备的MULTICAST标志。
dynamic on,dynamic off,更改设备的DYNAMIC标志。
nameNAME,更改设备的名字,如果设备正在运行或者已经有一个配置好的地址,那么操作无效。
txqueuelenNUMBER,txqlenNUMBER,更改设备发送队列的长度。
mtuNUMBER,更改设备MTU。
addressLLADDRESS,更改接口的站点地址
broadcastLLADDRESS,brdLLADDRESS,peerLLADDRESS,当接口为POINTOPOINT时,更改链路层广播地址或对等地址。
netnsPID,将设备移动到与进程PID关联的网络命名空间
aliasNAME,给设备一个符号名以便于参考
vfNUM,指定要配置的虚拟功能设备。必须使用dev参数指定关联的pf设备。
警告:如果请求更改多个参数,则在任何更改失败后立即中止IP。这是IP能够将系统移动到不可预测状态的唯一情况。解决方案是避免使用一个ip链路集调用来更改多个参数。
2)ip link show,显示设备属性
devNAME(default),NAME指定要显示的网络设备。如果省略此参数,则列出所有设备。
up,只显示运行的设备。
4、ip address---协议地址管理
该地址是附加到网络设备上的协议(IP或IPv 6)地址。每个设备必须至少有一个地址才能使用相应的协议。可以将几个不同的地址附加到一个设备上。这些地址不受歧视,因此别名一词不太适合它们,我们在本文件中也没有使用它。ip addr命令显示地址及其属性,添加新地址并删除旧地址。
1)ip address add,增加新的协议地址
devNAME,要向其添加地址的设备的名称。
localADDRESS(default),接口的地址。地址的格式取决于协议。它是一个用于IP的虚线四边形和一系列十六进制半字,用冒号分隔用于IPv 6。地址后面可以是斜杠和十进制数,它们编码网络前缀长度。
peerADDRESS,点对点接口的远程端点的地址。同样,地址后面可以是斜杠和十进制数,编码网络前缀长度。如果指定了对等地址,则本地地址不能具有前缀长度。网络前缀与对等端相关联,而不是与本地地址相关联。
broadcastADDRESS,接口的广播地址。可以使用特殊符号“和”-“代替广播地址。在这种情况下,通过设置/重置接口前缀的主机位来导出广播地址。
labelNAME,每个地址都可以用标签字符串标记。为了保持与Linux2.0网络别名的兼容性,此字符串必须与设备名称重合,或者必须以设备名后跟冒号作为前缀。
scopeSCOPE_VALUE,地址有效的区域的范围。可用的作用域列在文件“/etc/iproute2/rt_scopes“中。预定义的范围值是:
Ⅰ)global,地址全局有效。
Ⅱ)site,(仅IPv 6)该地址为站点本地地址,即该地址在此站点内有效。
Ⅲ)link,该地址是本地链接,即它仅在此设备上有效。
Ⅳ)host,该地址仅在此主机内有效。
2)ip address delete,删除协议地址
Arguments:与“ip addr add“的参数一致。设备名称是必需的参数。其余的都是可选的。如果没有提供参数,则删除第一个地址。
3)ip address show,显示协议地址
devNAME(default),设备名字
scopeSCOPE_VAL,仅列出具有此作用域的地址。
toPREFIX,仅列出匹配PREFIX的地址。
labelPATTERN,只列出与模式匹配的标签的地址。
dynamic,permanent,仅IPv 6)仅列出由于无状态地址配置而安装的地址,或只列出永久(非动态)地址。
tentative,(仅IPv 6)仅列出未通过重复地址检测的地址。
deprecated,(仅IPv 6)仅列出废弃地址
primary,secondary,只列出主(或辅助)地址。
4)ip address flush,刷新协议地址
此命令刷新由某些条件选择的协议地址。此命令具有与Show相同的参数。不同之处在于,当不给出参数时,它不会运行。警告:这个命令(以及下面描述的其他刷新命令)非常危险。如果你犯了一个错误,它不会原谅它,而是会残酷地清除所有的地址。
使用-statistics选项,命令变得详细。它打印出已删除地址的数量和为刷新地址列表而进行的轮次数。如果提供了两次此选项,则“ip addr flush“也会以上一小节描述的格式转储所有已删除的地址。
5、ip addrlabel---协议地址标签管理
IPv 6地址标签用于RFC 3484中描述的地址选择。优先级由用户空间管理,只有标签存储在内核中。
1)ip addrlabel add,增加地址标签
prefixPREFIX,devDEV,输出接口。
labelNUMBER,prefix的标签,0xffffffff保留。
2)ip addrlabel del,删除地址标签
该命令删除内核中的一个地址标签条目。参数:与“ip addrlabel add“的参数一致,但不需要标签。
3)ip addrlabel list,列出地址标签
显示地址标签的内容。
4)ip addrlabel flush,刷新地址标签
刷新地址标签的内容,并且不保存默认设置
6、ip neighbour---邻居/ARP表管理
邻居对象为共享相同链路的主机建立协议地址和链路层地址之间的绑定。邻接条目被组织成表。IPv 4邻居表的另一个名称是ARP表。相应的命令显示邻居绑定及其属性,添加新的邻居项并删除旧条目。
1)ip neighbour add,增加邻居表
2)ip neighbour change,改变已经存在的邻居表
3)ip neighbour replace,增加一个表或者修改已经存在的表
这些命令创建新的邻居记录或更新现有记录。上面的三个命令使用方法如下:
toADDRESS(default),邻居的协议地址。它要么是IPv4,要么是IPv6地址。
devNAME,连接到邻居的接口。
lladdrLLADDRESS,邻居的链路层地址,可以是null。
nudNUD_STATE,邻居的状态,可以是下面的值:
Ⅰ)permanent,邻居项永远有效,只能内管理员删除。
Ⅱ)noarp,邻居项有效。将不会尝试验证此条目,但可以在其生存期届满时删除该条目。
Ⅲ)reachable,邻居项在可达超时过期之前是有效的。
Ⅳ)stale,邻居的进入是有效的,但却是可疑的。如果邻居状态有效且此命令未更改地址,则此选项不会更改邻居状态。
4)ip neighbour delete,删除邻居表
此命令使邻居项无效。这些参数与“ip neigh add“相同,只是将忽略lladdr和nud。警告:试图删除或手动更改内核创建的noarp条目可能会导致不可预测的行为。特别是,即使在NOARP接口上,如果地址是多播或广播的,内核也可以尝试解析此地址。
5)ip neighbour show,显示邻居表
toADDRESS(default),选择要列出的邻居的前缀
devNAME,只列出与此设备相连的邻居
unused,只列出当前未使用的邻居
nudNUD_STATE,只列出此状态中的相邻项。NUD_STATE接受下面列出的值或特殊值all,这意味着所有状态。此选项可能发生不止一次。如果没有此选项,则IP列出除None和noarp以外的所有条目。
6)ip neighbour flush,刷新邻居表
此命令刷新相邻表,根据某些条件选择要刷新的条目。此命令具有与show相同的参数。不同之处在于,当不给出参数时,它不会运行,而要刷新的默认邻居状态不包括permanent和noarp。
-------------------------
7、ip route—路由表管理
操纵内核路由表中的路由条目保存其他网络节点的路径信息。路由类型可以是:
Ⅰ)unicast,路由条目描述到路由前缀所涵盖的目的地的实际路径。
Ⅱ)unreachable,这些目的地是无法到达的。丢弃数据包,生成不可访问的ICMP消息主机。本地发件人得到一个EHOSTUNEACH错误。
Ⅲ)blackhole,这些目的地是无法到达的。数据包被静默丢弃。本地发送者得到一个EINVAL错误
Ⅳ)prohibit,这些目的地是无法到达的。丢弃数据包并生成ICMP消息通信,该ICMP消息通信在管理上被禁止。本地发件人得到一个EACCES错误。
Ⅴ)local,目的地分配给此主机。数据包被环回并在本地传送。
Ⅵ)broadcast,目的地是广播地址。数据包作为链路广播发送。
Ⅶ)throw,与策略规则一起使用的特殊控制路径。如果选择这样的路由,则将终止此表中的查找,假装没有找到路由。如果没有策略路由,则相当于路由表中没有路由。丢包并生成不可到达的ICMP消息网。本地发送者得到一个ENETUNEACH错误。
Ⅷ)nat,一条特殊的NAT路线。前缀覆盖的目的地被认为是虚拟地址(或外部地址),需要在转发之前转换为真实地址(或内部地址)。选择要转换到的地址,并附带属性警告:Linux2.6中不再支持路由NAT。
Ⅸ)via,anycast,未实现目标是分配给此主机的任意广播地址。它们主要等同于本地地址,但有一个不同之处:当将这些地址用作任何数据包的源地址时,这些地址是无效的。
multicast,用于多播路由的一种特殊类型。它不存在于普通路由表中。
路由表:Linux-2.x可以将路由打包到从1到255范围内的数字标识的多个路由表中,或者根据文件/etc/iucte 2/rt_tables的名称,默认情况下,所有普通路由都插入主表(ID 254),内核只在计算路由时使用此表。实际上,另一个表总是存在的,这是不可见的,但更重要的是。它是本地表(ID 255)。此表由本地地址和广播地址的路由组成。内核自动维护这个表,管理员通常不需要修改它,甚至不需要查看它。使用策略路由时,多个路由表进入游戏。
1)ip route add,增加路由
2)ip route change,修改路由
3)ip route replace,改变或者增加路由
toTYPEPREFIX(default),路由的目标前缀。如果省略类型,则IP采用类型单播。以上列出了其他类型的值。前缀是一个IP或IPv 6地址,后面有斜杠和前缀长度。如果前缀的长度丢失,则IP将采用全长主机路由.还有一个特殊的前缀默认值-相当于“IP 0/0“或者”to IPv6 ::/0“。
tosTOS,dsfieldTOS,服务类型(TOS)密钥。该密钥没有关联的掩码,最长的匹配被理解为:首先,比较路由和数据包的TOS。如果它们不相等,那么数据包仍然可以匹配为零TOS的路由。TOS要么是8位十六进制数字,要么是“/etc/iproute2/rt_dsfield“中的标识符
metricNUMBER,preferenceNUMBER,路由的首选值。NUMBER是任意32位数。
tableTABLEID,要添加此路由的表。TABLEID可能是文件“/etc/iproute2/rt_tables“中的一个数字或字符串。如果省略此参数,则IP假定主表,但本地路由、广播路由和NAT路由除外,默认情况下这些路由被放入本地表中。
devNAME,输出设备名字。
viaADDRESS,下一个路由器的地址。实际上,这个字段的意义取决于路由类型。对于普通单播路由,它要么是真正的下一跳路由器,要么是安装在BSD兼容模式下的直接路由,它可以是接口的本地地址。对于NAT路由,它是已翻译的IP目的地块的第一个地址。
srcADDRESS,发送到路由前缀所涵盖的目的地时要首选的源地址。
realmREALMID,指定此路由的域。REALMID可能是文件“/etc/iproute2/rt_realms“中的一个数字或字符串。
mtuMTU,mtulockMTU,沿着到达目的地的路径的MTU。如果未使用修饰符锁,则由于路径MTU发现,内核可能更新MTU。如果使用修饰符锁,则不会尝试路径MTU发现,所有数据包都将在IPv4情况下不使用DF位发送,或者在IPv6中碎片到MTU。
windowNUMBER,TCP向这些目的地广告的最大窗口,以字节为单位。它限制了TCP对等点允许发送给我们的最大数据突发。
rttTIME,最初的RTT(‘往返时间’)估计。如果没有指定后缀,则单元是直接传递给路由代码的原始值,以保持与以前版本的兼容性。否则,如果使用s、sec或secs后缀指定秒,使用ms、msec或msecs指定毫秒。
rttvarTIME(2.3.15+ only),初始RTT方差估计。值与上述RTT指定的值相同。
rto_minTIME(2.6.23+ only),与此目标通信时要使用的最小TCP重传超时。值与上述RTT指定的值相同。
ssthreshNUMBER(2.3.15+ only),初始慢启动阈值的估计。
cwndNUMBER(2.3.15+ only),阻塞窗口的夹子。如果不使用锁标志,则忽略它
initcwndNUMBER,TCP连接的MSS中的最大初始拥塞窗口(CWND)大小。
initrwndNUMBER(2.6.33+ only),连接到此目标的初始接收窗口大小。实际窗口大小是此值乘以连接的MSS。默认值为零,意味着使用慢速开始值。
advmssNUMBER(2.3.15+ only),MSS(“最大段大小”)在建立TCP连接时向这些目的地做广告。如果未给出,Linux将使用从第一跳设备MTU中计算出来的默认值。(如果到达这些目的地的路径是不对称的,则这种猜测可能是错误的。)
reorderingNUMBER(2.3.15+ only),到达此目标的路径上的最大重排序。如果未给出,Linux将使用sysctl变量“net/ipv4/tcp_reordering“所选择的值。
nexthopNEXTHOP,多径路径的下一个。NEXTHOP是一个复杂的值,其语法类似于顶级参数列表:
Ⅰ)viaADDRESS,下一个路由器。
Ⅱ)devNAME,输出设备
Ⅲ)weightNUMBER,是反映其相对带宽或质量的多径路由的此元素的权重。
scopeSCOPE_VAL,路由前缀所涵盖的目的地的范围。SCOPE_VAL可以是文件“/etc/iproute2/rt_scopes“中的一个数字或字符串。如果省略此参数,则IP假定所有网关单播路由的作用域全局、直接单播和广播路由的范围链接以及本地路由的范围主机。
protocolRTPROTO,此路由的路由协议标识符。RTPROTO可以是文件“/etc/iproute2/rt_protos“中的一个数字或字符串。如果未给出路由协议ID,则IP假定协议启动(即假定路由是由不了解他们正在做的事情的人添加的)。一些协议值有固定的解释:
Ⅰ)redirect,该路由是由于icmp重定向而安装的。
Ⅱ)kernel,该路由是由内核在自动配置期间安装的。
Ⅲ)boot,该路由是在启动过程中安装的。如果路由守护进程启动,它将清除所有这些守护进程。
Ⅳ)static,管理员安装了该路由以覆盖动态路由。路由守护进程将尊重它们,甚至可能会向其对等方发布广告。
Ⅴ)ra,路由是由路由器发现协议安装的。
onlink,假装Nextthop直接连接到此链接,即使它不匹配任何接口前缀。
equalize,允许在多径路由上逐包随机化。如果没有这个修饰符,路由将被冻结到一个选定的下一个,这样负载拆分将只发生在每个流基上。只有当内核被修补时,均衡化才能工作。
4)ip route delete,删除路由
“ip route del“与”ip route add“具有相同的参数,但它们的语义略有不同。键值(to、tos、首选项和表)选择要删除的路由。如果存在可选属性,则IP验证它们是否与要删除的路由的属性一致。如果没有找到具有给定密钥和属性的路由,则”ip route del“将失败
5)ip route show,显示路由
toSELECTOR(default),仅从给定的目的地范围中选择路由。SELECTOR由一个可选修饰符(root、match、exact)和一个前缀组成。root选择前缀不小于PREFIX的路由。例如,“root 0/0“选择整个路由表。match选择前缀长度不超过PREFIX的路由。例如,”match 10.0/16“选择10.0/16、10/8和0/0,但未选择10.1/16和10.0.0/24。exact(或仅仅前缀)选择具有此前缀的路由。如果这两个选项都没有出现,则IP假设为根0/0,即它列出了整个表。
tosTOS,只选择具有给定tos的路由。
tableTABLEID,显示此表中的路线。默认设置是显示tablemain。TABLEID可以是实表的ID,也可以是特殊值之一:
Ⅰ)all,列出所有的表。
Ⅱ)cache,备份路由缓存。
cloned,cached,列出克隆的路由,即由于某些路由属性(F.E)而从其他路由动态分叉的路由。(MTU)已更新。实际上,它等同于“table cache“。
fromSELECTOR,语法与to相同,但它绑定源地址范围而不是目的地。请注意,FROM选项仅适用于克隆路由。
protocolRTPROTO,仅列出此路由的协议。
scopeSCOPE_VAL,仅列出具有此范围的路由
typeTYPE,只列出此类型的路由。
devNAME,只列出经过此设备的路由
viaPREFIX,只列出通过前缀选择的下一个路由器的路由
srcPREFIX,只列出由前缀选择的首选源地址的路由。
realmREALMID,realmsFROMREALM/TOREALM,只列出这些领域的路由。
6)ip route flush,刷新路由表
此命令刷新由某些标准选择的路由,参数具有与“ip route show“的参数相同的语法和语义,但是路由表没有列出,而是被清除。唯一的区别是默认操作:显示转储所有IP主路由表,但刷新打印助手页。
使用“-statistics“选项,命令变得详细。它打印出已删除路由的数目和刷新路由表的轮数。如果该选项被给予两次,IP路由刷新也会以上一小节描述的格式转储所有已删除的路由。
)ip route get,获取一个单独的路由
此命令获取一条到达目标的路由,并按照内核所看到的那样打印其内容。
toADDRESS(default),目标地址。
fromADDRESS,源地址。
tosTOS,dsfieldTOS,服务类型。
iifNAME,预期将从该包到达的设备。
oifNAME,强制将此数据包路由的输出设备。
connected,如果没有提供源地址(选项从),则重新查找从第一次查找中接收到的源设置为首选地址的路由。如果使用策略路由,则可能是不同的路由。
请注意,此操作不等同于“ip route show“。show显示现有路线。如果必要的话,get解决它们并创建新的克隆。
8、ip rule---路由策略数据库管理
rule规则在路由策略数据库中控制路由选择算法。Internet中使用的经典路由算法只根据数据包的目的地地址(理论上,而不是实际中的TOS字段)进行路由决策。在某些情况下,我们希望通过不同的方式路由数据包,这不仅取决于目的地地址,还取决于其他数据包字段:源地址、IP协议、传输协议端口,甚至包有效负载。此任务称为“策略路由”。为了解决这一问题,传统的基于目标的路由表按照最长的匹配规则排序,被替换为“路由策略数据库”(RPDB),该数据库通过执行一组规则来选择路由。
每个策略路由规则由一个选择器和一个动作谓词组成。RPDB按照增加优先级的顺序进行扫描。每个规则的选择器应用于{源地址、目标地址、传入接口、tos、fwmark},如果选择器与数据包匹配,则执行操作。动作谓词可能会成功返回。在这种情况下,它将给出路由或故障指示,并终止RPDB查找。否则,RPDB程序将继续执行下一条规则。
语义上,自然动作是选择下一个和输出设备。在启动时,内核配置由三条规则组成的默认rpdb:
Ⅰ)Priority: 0。Selector:匹配任何内容,Action:查找本地路由表(ID 255)。本地表是包含本地地址和广播地址的高优先级控制路由的特殊路由表。
Ⅱ)Priority: 32766。Selector:匹配任何内容,Action:查找路由表主(ID 254)。主表是包含所有非策略路由的普通路由表.管理员可以删除和/或用其他规则重写此规则。
Ⅲ)Priority: 32767。Selector:匹配任何内容,Action:查找路由表默认值(ID 253)。默认表为空。如果没有先前的默认规则选择数据包,则保留用于某些后处理。这一规则也可以删除。
RPDB可能包含以下类型的规则:
Ⅰ)unicast,该规则规定返回在规则引用的路由表中找到的路由。
Ⅱ)blackhole,这条规则规定要悄悄丢弃数据包。
Ⅲ)unreachable,该规则规定生成“网络不可达”错误。
Ⅳ)prohibit,该规则规定产生“在行政上禁止通信”错误。
Ⅴ)nat,该规则规定将ip数据包的源地址转换为其他值。
1)ip rule add,增加规则。
2)ip rule delete,删除规则。
typeTYPE(default),这个规则的类型
fromPREFIX,选择要匹配的源前缀
toPREFIX,选择要匹配的目标前缀
iifNAME,选择要匹配的传入设备。如果接口是回送的,则该规则只匹配来自此主机的数据包。这意味着您可以为转发包和本地数据包创建单独的路由表,从而完全隔离它们。
tosTOS,dsfieldTOS,选择要匹配的TOS值。
fwmarkMARK,选择要匹配的fwmark值。
priorityPREFERENCE,这条规则的优先级。每个规则都应该有一个显式设置的唯一优先级值。选项、偏好和顺序是优先级的同义词。
tableTABLEID,如果规则选择器匹配,则查找路由表标识符。还可以使用查找而不是表。
realmsFROM/TO,规则匹配和路由表查找成功时要选择的区域。只有当路由没有选择任何领域时,才使用要使用的领域。
natADDRESS,要翻译的IP地址块的基(用于源地址)。该地址可以是NAT地址块的开始(由NAT路由选择),也可以是本地主机地址(甚至为零)。在最后一种情况下,路由器不会翻译数据包,而是将它们伪装成这个地址。使用map-to而不是nat意味着同样的事情。
3)ip rule flush,刷新规则,还转储所有已删除的规则。
没有参数。
4)ip rule show,显示规则
没有参数
9、ip maddress---多播地址管理
1)ip maddress show,显示多播地址
devNAME(default),设备名字
2)ip maddress add,增加多播地址
3)ip maddress delete,删除多播地址
这些命令附加/分离一个静态链路层多播地址,以便在接口上侦听。请注意,不可能静态地加入协议多播组。此命令仅管理链接层地址
addressLLADDRESS(default),链路层多播地址。
devNAME,加入/删除多播地址的设备
10、ip mroute---多播路由缓存管理
mroute对象是由用户级mrouting守护进程创建的多播路由缓存条目。由于组播路由引擎当前接口的局限性,无法对多播路由对象进行管理更改,因此只能显示对象
ip mroute show,列出mroute缓存项
toPREFIX(default),选择要列出的目标多播地址的前缀。
iifNAME,接收多播数据包的接口。
fromPREFIX,选择多播路由的IP源地址的前缀
11、ip tunnel---通道配置
tunnel对象是隧道,它将数据包封装在IP包中,然后通过IP基础结构发送。加密(或外部)地址族由“-f“选项指定。默认的是ipv4。
1)ip tunnel add,增加一个新隧道
2)ip tunnel change,修改一个已经存在的隧道
3)ip tunnel delete,删除隧道
nameNAME(default),隧道设备名字。
modeMODE,设置隧道模式。可用的模式取决于封装地址系列。IPv 4封装可用的模式:ipip、SIT、isatap和grep;IPv6封装的模式:ip6ip6、ipip6和any。
remoteADDRESS,设置隧道的远程端点
localADDRESS,设置隧道数据包的固定本地地址。它必须是此主机的另一个接口上的地址。
ttlN,在隧道化的数据包上设置固定的TTL N。N是介于1-255范围内的一个数字.0是一个特殊值,意味着数据包继承TTL值。IPv 4隧道的默认值是:Inherence。IPv6隧道的默认值是:64。
tosT,dsfieldT,tclassT,在隧道数据包上设置固定的TOS(或IPv 6中的流量类)T。默认值是:inherit。
devNAME,将隧道绑定到设备名称,以便隧道数据包只能通过此设备路由,并且在到达端点的路由发生更改时无法逃逸到另一个设备。
nopmtudisc,禁用此隧道上的路径MTU发现。默认情况下启用它。请注意,固定的ttl与此选项不兼容:使用固定的ttl进行隧道操作总是会使pmtu发现。
keyK,ikey K,okey K,(只有GRE隧道)使用键控GRE与密钥K,K要么是一个数字或一个类似IP地址的虚线四边形。key参数设置在两个方向上使用的键。ikey和okey参数为输入和输出设置不同的键。
csum, icsum, ocsum,(只有GRE隧道)生成/要求隧道数据包的校验和。ocsum标志计算传出数据包的校验和。icsum标志要求所有输入数据包都具有正确的校验和。csum标志等效于组合icsum ocsum。
seq, iseq, oseq,(只有GRE隧道)序列化数据包。oseq标志允许对传出数据包进行排序。iseq标志要求对所有输入数据包进行序列化。seq标志等效于iseq oseq组合。这不是工作。不要用它
dscpinherit,(只有IPv 6隧道)在内部和外部报头之间继承DS字段
encaplimELIM,设置固定的封装限制。缺省值为4
flowlabelFLOWLABEL,(只有IPv 6隧道)设置固定的流标签。
4)ip tunnel prl,潜在路由器列表(只有ISATAP)
devNAME,
prl-defaultADDR,
prl-nodefaultADDR,
prl-deleteADDR,
添加或删除addr作为潜在的路由器或默认路由器
5)ip tunnel show,列出隧道
没有参数
-------------------------
iptables
iptables指令用来设置Linux内核的ip过滤规则以及管理nat功能。iptables用于在Linux内核中设置、维护和检查IPv4数据包的过滤规则表。可以定义几个不同的表。每个表包含许多内置链,也可能包含用户定义的链。每个链都是一个规则列表,可以匹配一组数据包。每条规则都指定如何处理匹配的数据包。这被称为“目标”,它可能是跳转到同一表中的用户定义链。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、语法
iptables [-t table] {-A|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name rule-specification = [matches...] [target]
match = -m matchname [per-match-options] target = -j targetname [per-target-options]
目前Linux内核支持3个相互独立的表:filter,过滤ip数据包;nat,配置nat功能;mangle,修改ip数据包。
filter是默认表,包含INPUT(发送给本机) 、OUTPUT(本机向外发送)、FORWARD(被路由出去)三个链。
nat表包含PREROUTING(修改刚收到的数据包) 、OUTPUT(在路由之前处理本机产生的数据包) 、POSTROUTING(修改将要发送的数据包)三个链
mangle表包含PREROUTING(路由之前,修改收到的包) 、OUTPUT(路由之前,修改本机产生的包) 、INPUT(修改发送到本机的包) 、FORWARD (修改路由之后的包) 、POSTROUTING(修改将被本机发送的包)五个链。
Linux系统中的内置目标包括:ACCEPT(允许数据包通过)DROP(丢弃数据包) QUEUE(传递包到用户空间)RETURN(停止向后检测其他的规则,返回之前的条用规则处)
2、选项列表
选项可以按组来区分
-t table
指定要管理的表
-A | --append chain rule-specification
追加记录
-D | --delete chain rule-specification
删除记录
-I | --insert chain [rulenum] rule-specification
插入记录
-R | --replace chain [rulenum] rule-specification
替换记录
-L | --list [chain]
列出记录
-S | --list-rules [chain]
列出已选择链的所有规则。如果没有选择任何链,则所有链都打印
-F | --flush [chain]
删除指定的记录
-Z | --zero [chain [rulenum]]
将数据计数和字节计数清零
-N | --new-chain chain
用户自定义新链
-X | --delete-chain [chain]
删除用户自定义链
-P | --policy chaintarget
为指定的链设置策略
-E | --rename-chain old new
重命名链
-h
显示帮助信息
参数
[!] –p | --protocol protocol
指定协议类型tcp、udp、icmp、all,协议前加!标识否定
[!] –s | --sourceaddress[/mask][,…
源地址
[!] –d
--destinationaddress[/mask][,…
目标
-j | --jump
指定跳转的目标
-g | --goto chain
这指定应在用户指定的链中继续处理。与“--jump”选项不同,返回将不再在此链中继续处理,而是在通过“--jump”调用我们的链中继续处理。
[!] –i | --in-interface name
接收数据包的接口名称(仅用于输入、转发和PREROUTING链的数据包)。当“!”参数在接口名称之前使用,意义被倒置。如果接口名以“+”结尾,则以此名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。
-o | --out-interfacename
指定数据包离开的网络接口
[!] –f | --fragment
这意味着该规则仅指分段数据包的第二段和更多的片段。
-c | --set-counters packets bytes
这使管理员能够初始化规则的数据包和字节计数器(在插入、追加、替换操作期间)。
其他选项
-v | --verbose
冗长的输出,该选项使List命令显示接口名称、规则选项(如果有的话)和TOS掩码。还列出了数据包计数器和字节计数器
-n | --numeric
数字输出IP地址和端口号将以数字格式打印。默认情况下,程序将尝试将它们显示为主机名、网络名称或服务(只要适用)。
-x | --exact
扩大数字。显示数据包和字节计数器的确切值,而不是只显示K‘s(1000倍)M’s(1000 K倍数)或G‘s(1000 m倍数)中的四舍五入数。此选项仅与-L命令相关。
--line-numbers
当列出规则时,将行号添加到每条规则的开头,对应于该规则在链中的位置。
--modprobe=command
在向链中添加或插入规则时,使用命令加载任何必要的模块(目标、匹配扩展等)
3、匹配扩展
iptable可以使用扩展的数据包匹配模块。它们以两种方式加载:隐式地,当指定“-p”或“—protocol”时,或者使用“-m”或“—match”选项,后面跟着匹配的模块名称;之后,根据特定模块的不同,可以使用各种额外的命令行选项。可以在一行中指定多个扩展匹配模块,并且可以在指定模块后使用“-h“或“--help“选项来接收特定于该模块的帮助。
1)addrtype
此模块根据数据包的地址类型匹配数据包。地址类型在内核网络堆栈中使用,并将地址分类为不同的组。该组的确切定义取决于特定的第三层协议。地址类型可以是以下的几种:
UNSPEC,未指明的地址,例如,0.0.0.0。
UNICAST,单播地址。
LOCAL,本地地址。
BROADCAST,广播地址。
ANYCAST,选播包。
MULTICAST,多播地址。
BLACKHOLE,黑洞地址。
UNREACHABLE,不可达到的地址。
PROHIBIT,被禁止的地址。
THROW,FIXME。
NAT,FIXME。
XRESOLVE,
[!] --src-type type,如果源地址为给定类型,则匹配。
[!] --dst-type type,如果目标地址是给定类型的,则匹配。
--limit-iface-in,地址类型检查可以限制在数据包即将进入的接口上。此选项仅在PREROUTING、INPUT和FORWARD链中有效。它不能用“--limit-iface-out “选项来指定。
--limit-iface-out,地址类型检查可以限制在包将要输出的接口上。此选项仅在POSTROUTING、OUTPUT和FORWARD链中有效。它不能用“--limit-iface-in“选项指定。
2)ah
此模块与IPSec数据包的身份验证头中的Spis匹配。
[!] --ahspi spi[:spi]
3)cluster
允许您部署网关和后端负载共享集群,而不需要负载平衡器。此匹配要求所有节点都看到相同的数据包。因此,集群匹配决定该节点是否必须处理给定以下选项的数据包。
--cluster-total-nodesnum,设置集群中的总节点数。
[!] --cluster-local-nodenum,设置本地节点编号ID。
[!] --cluster-local-nodemaskmask,设置本地节点编号ID掩码。您可以使用此选项而不是”--cluster-local-node“。
--cluster-hash-seedvalue,设置Jenkins散列的种子值。
iptables -A PREROUTING -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP
iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP
下面的命令使所有节点都看到相同的数据包
ip maddr add 01:00:5e:00:01:01 dev eth1
ip maddr add 01:00:5e:00:01:02 dev eth2
arptables -A OUTPUT -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01
arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
arptables -A OUTPUT -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02
arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 –j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
4)comment
允许向任何规则添加注释(最多256个字符)。
--commentcomment
iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"
5)connbytes
主要用途是检测长时间下载,并在流量控制中使用较低优先级的频带来标记它们。每个连接传输的字节也可以通过“conntrack -L”查看,并通过ctnetlink访问。
[!] --connbytesfrom[:to],将大于FROM,小于TO的连接中的数据包匹配,“!”用于匹配不在此范围内的数据包。
--connbytes-dir {original|reply|both},要考虑哪些数据包
--connbytes-mode {packets|bytes|avgpkt},是否检查数据包的数量、传输的字节数或到目前为止收到的所有数据包的平均大小(以字节为单位)。请注意,当“both”与“avgpkt”一起使用时,而且数据(主要是)只朝一个方向(例如HTTP)进行,平均数据包大小将约为实际数据包的一半。
iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes
6)connlimit
允许您限制每个客户端IP地址(或客户地址块)到服务器的并行连接数。
[!] --connlimit-aboven,如果现有连接的数目大于n,则匹配
--connlimit-maskprefix_length,使用前缀长度对主机进行分组。对于IPv 4,这必须是介于(包括)0和32之间的数字。对于IPv 6,在0到128之间。
#每个客户端主机允许2个telnet连接
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
#将并行HTTP请求的数量限制在每C类网络16次(24位网络掩码)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
#将链路本地网络的并行HTTP请求限制为16次
(ipv6) ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT
7)connmark
此模块匹配与连接关联的netfilter标记字段(可以使用下面的CONNMARK目标进行设置)。
[!] --markvalue[/mask],将连接中的数据包与给定的标记值相匹配(如果指定了掩码,则在比较之前用标记进行逻辑分析)
8)conntrack
此模块与连接跟踪结合时,允许访问此数据包/连接的连接跟踪状态。
[!] --ctstatestatelist,Statelist是要匹配的连接状态的逗号分隔列表。下面列出了可能的状态。
[!] --ctprotol4proto,第4层协议匹配(按号码或名称)
[!] --ctorigsrcaddress[/mask]
[!] --ctorigdstaddress[/mask]
[!] --ctreplsrcaddress[/mask]
[!] --ctrepldstaddress[/mask],与original/reply、source/destination地址匹配。
[!] --ctorigsrcportport
[!] --ctorigdstportport
[!] --ctreplsrcportport
[!] --ctrepldstportport,匹配original/reply、source/destination端口(TCP/UDP/等)或GRE键
[!] --ctstatusstatelis,Statuslist是要匹配的连接状态的逗号分隔列表。下面列出了可能的状态
[!] --ctexpiretime[:time],将剩余生存期(以秒为单位)与给定值或范围(包括)进行匹配。
--ctdir {ORIGINAL|REPLY},匹配按指定方向流动的数据包。如果根本没有指定此标志,则匹配两个方向的数据包。
ctstate的有效值
INVALID,意味着数据包与已知的连接没有关联。
NEW,意味着该数据包已启动一个新连接,或与未在两个方向上看到数据包的连接相关联。
ESTABLISHED,意味着该数据包与看到两个方向的数据包的连接相关联。
RELATED,意味着数据包正在启动新连接,但与现有连接相关联,例如FTP数据传输或ICMP错误。
SNAT,虚拟状态,如果原始源地址与回复目的地不同,则进行匹配。
DNAT,虚拟状态,如果原始目的地与应答源不同,则进行匹配。
ctstatus的有效值
NONE,不是下列任何一项。
EXPECTED,这是一个预期的连接。
SEEN_REPLY,ConnTrack在两个方向都看到了数据包。
ASSURED,连接项不应提前过期。
CONFIRMED,确认连接:原始数据包已离开框。
9)dccp
[!] --source-port,--sportport[:port]
[!] --destination-port,--dportport[:port]
[!] --dccp-typesmask,当DCCP数据包类型为“掩码”之一时匹配。“掩码”是以逗号分隔的数据包类型列表。类型可以是:REQUEST、RESPONSE、DATA、ACK、DATAACK、CLOSEREQ、CLOSE、RESET、SYNC、SYNCACK、INVALID。
[!] --dccp-optionnumber,匹配如果设置DCP选项
10)dscp
此模块与IP报头中TOS字段中的6位DSCP字段匹配。Dscp已经取代了IETF中的TOS。
[!] --dscpvalue,匹配数值(十进制或十六进制)值[0-63]
[!] --dscp-classclass,匹配DiffServ类。此值可能是BE、EF、AFxx或CSX类中的任何一个。然后,它将被转换为其相应的数值。
11)ecn
这允许您匹配IPv 4和TCP报头的ECN位。ECN是RFC3168中指定的显式拥塞通知机制。
[!] --ecn-tcp-cwr,如果设置了TCP ECN CWR(拥塞窗口接收)位,则匹配。
[!] --ecn-tcp-ece,如果设置了TCP ECN ECE(ECN Echo)位,则匹配。
[!] --ecn-ip-ect num,这与特定的IPv 4 ECT(ECN能力传输)相匹配。你必须在‘0’和‘3’之间指定一个数字。
12)esp
此模块与ipsec数据包的esp报头中的spis匹配。
[!] --espspispi[:spi]
13)hashlimit
哈希限制使用散列桶来表示一组连接的速率限制匹配(如极限匹配),使用单个iptables规则。分组可以完成perhostgroup(源和/或目标地址)和/或每个端口。它使您能够表达“每组每个时间量子N个数据包”:
源主机上的匹配:192.168.0.0/16期间每台主机每秒1000个数据包。
源Prot匹配:每项服务每秒100包(192.168.1.1)。
子网的匹配:10.0.0.0/8中每个/28子网每分钟10000包。
--hashlimit-uptoamount[/second|/minute|/hour|/day],如果速率低于或等于amount/quantum,则匹配。它被指定为一个数字,带有可选的时间量子后缀;默认值是3/小时。
--hashlimit-aboveamount[/second|/minute|/hour|/day],如果速率大于amount/quantum,则匹配
--hashlimit-burstamount,要匹配的数据包的最大初始数量:当未达到上述指定的限制时,该数目将被重新充电一次,最多可达到此数目;默认值为5。
--hashlimit-mode {srcip|srcport|dstip|dstport},...,要考虑的以逗号分隔的对象列表。如果给出了“--hash-limit-mode“选项,hashlimit就像limit一样,但是在进行哈希内务管理时会花费很大的代价。
--hashlimit-srcmaskprefix,当使用“--hashlimit-mode“时,所遇到的所有源地址都将根据给定的前缀长度进行分组,因此创建的子网将受到哈希限制。前缀必须介于(包括)0和32之间。
-------------------------
16)NFQUEUE
此目标是QUEUE目标的扩展。与QUEUE相反,它允许您将数据包放入任何特定队列中,该队列由其16位队列号标识。它只能与内核版本2.6.14或更高版本一起使用,因为它需要nfnetlink_Queue内核支持。队列平衡选项在Linux2.6.31中添加,队列旁路在2.6.39中添加。
--queue-numvalue,这指定要使用的队列号。有效队列号为0至65535。默认值为0。
--queue-balancevalue:value,这指定要使用的队列范围。然后在给定的队列中平衡数据包。
--queue-bypass,默认情况下,如果在NFQUEUE上没有用户空间程序侦听,那么所有要排队的数据包都会被丢弃。当使用此选项时,将悄悄绕过NFQUEUE规则。包将转到下一个规则。
17)NOTRACK
此目标禁用与该规则匹配的所有数据包的连接跟踪,只能在raw表中使用。
18)RATEEST
RATEEST目标收集统计数据,执行速率估计计算,并将结果保存起来,以便使用最优匹配进行以后的评估。
--rateest-namename,将匹配的数据包计数到按名称引用的池中,这是可以自由选择的。
--rateest-intervalamount{s|ms|us},速率测量间隔,以秒、毫秒或微秒为单位。
--rateest-ewmalogvalue,速率测量平均时间常数。
19)REDIRECT
此目标仅在NAT表、PREROUTING和输出链以及仅从这些链调用的用户定义链中有效。它将数据包重定向到机器本身,方法是将目标IP更改为传入接口的主地址(本地生成的数据包映射到127.0.0.1地址)。
--to-ports port[-port],这将指定要使用的目的端口或端口范围:否则,目标端口将永远不会更改。只有配合选项“-p tcp”和“-p udp”才有用。
--random,如果使用选项“--random”,则端口映射将是随机的(内核>=2.6.22)
20)REJECT
这用于响应匹配的数据包发送错误数据包:否则,它等同于丢弃,因此它是一个终止目标,结束规则遍历。此目标仅在输入、前向和输出链以及用户定义的仅从这些链调用的链中有效。以下选项控制返回的错误数据包的性质:
--reject-withtype,type可以是icmp-net-unreachable, icmp-host-unreachabl,icmp-port-unreachable,icmp-proto-unreachable,icmp-net-prohibited,icmp-host-prohibited,icmp-admin-prohibited
21)SAME
类似于SNAT/DNAT,取决于链:它接受一系列地址“--to 1.2.3.4-1.2.3.7”。为每个连接提供相同的源/目标地址。
--toipaddr[-ipaddr],要将源映射到的地址。可以为多个范围指定不止一次。
--nodst,在选择新的源-ip时,不要在计算中使用目标-ip。
--random,端口映射将强制随机化,以避免基于端口预测的攻击(内核>=2.6.21)。
22)SECMARK
这用于设置与数据包关联的安全标记值,以供安全子系统(如SELinux)使用。它只在残缺表中有效。标记宽32位。
--selctxsecurity_context
23)SET
此模块从ip集中添加和/或删除可由ipset(8)定义的项。
--add-setsetnameflag[,flag...],将数据包的地址/端口添加到集合中
--del-setsetnameflag[,flag...],从集合中删除数据包的地址/端口
24)SNAT
此目标仅在NAT表中的POSTROUTING链中有效。它指定应该修改数据包的源地址(并且这个连接中的所有未来数据包也将被破坏),并且应该停止检查规则。它需要一种选择
--to-sourceipaddr[-ipaddr][:port[-port]],它可以指定单个新的源IP地址、包含的IP地址范围以及可选的端口范围(只有在规则还指定-p TCP或-p UDP时才有效)。 如果未指定端口范围,则512以下的源端口将映射到512以下的其他端口:512和1023之间的端口将映射到1024以下的端口,而其他端口将映射到1024或以上端口。如有可能,不会更改端口。
--random,如果使用了选项“--random”,则端口映射将被随机化(内核>=2.6.21)。
--persistent,为每个连接提供相同的源/目标地址。这取代了同一个目标。对持久映射的支持可从2.6.29-Rc2中获得
25)TCPMMS
此目标允许更改TCP SYN数据包的MSS值,以控制该连接的最大大小(通常将其限制为输出接口的MTU减去40(ipv4)或者减去60(ipv6)。当然,它只能与-p TCP一起使用。它仅在mangle表中有效。
该目标用于克服阻碍“ICMP碎片需要”或“ICMPv 6数据包太大”数据包的犯罪行为。这个问题的症状是,Linux防火墙/路由器的所有功能都很好,但是它背后的机器永远不能交换大数据包:Web浏览器连接,然后挂起没有收到的数据;小邮件工作正常,但大型电子邮件挂着;SSH工作正常,但scp在初次握手后挂起。
解决办法:激活此选项并将规则添加到防火墙配置中,如
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
--set-mssvalue,显式地将MSS选项设置为指定的值。如果数据包的MSS已经低于值,则不会增加(从Linux2.6.25开始),以避免主机依赖适当的MSS出现更多问题
--clamp-mss-to-pmtu,自动将MSS值夹到(IPv4的PATH_MTU-40;IPv 6的PATH_MTU-60)。
26)TCPOPTSTRIP
此目标将从TCP数据包中删除TCP选项。(它实际上将以无操作代替。)因此,您需要添加“-p tcp”参数。
--strip-optionsoption[,option...],去掉给定的选项。这些选项可以由TCP选项号或符号名称指定。可以通过使用“-j TCPOPTSTRIP -h”调用iptable来获得可识别选项的列表。
27)TOS
此模块在IPv 4报头中设置服务类型字段(包括“优先级”位)或在IPv 6报头中设置优先级字段。注意,TOS与DSCP和ECN共享相同的位。tos目标仅在mangle表中有效。
--set-tosvalue[/mask],将掩码和XOR值给出的位归零到TOS/Priority字段中。如果省略掩码,则假定为0 xff。
--set-tossymbol,在为IPv4使用TOS目标时,可以指定一个符号名。它暗示了0xFF的掩码。可以通过使用“-j TOS -h”调用iptables来获得已识别的TOS名称的列表。
--and-tosbits,bits和TOS执行与操作。(助记符用于“--set-tos 0/invbits”,其中inbit是位的二进制否定。)
--or-tosbits,bits和TOS执行或操作。
--xor-tosbits,bits和TOS执行异或操作。
28)TPROXY
此目标仅在mangle表、PREROUTING链和用户定义链中有效,这些链仅从该链调用。它将数据包重定向到本地套接字,而不以任何方式更改数据包报头。它还可以更改标记值,然后在高级路由规则中使用。它有三个选项:
--on-portport,这指定要使用的目标端口。这是必需的选项,0表示新的目标端口与原始端口相同。这只有在规则还指定“-p tcp“或”-p udp“时才有效。
--on-ipaddress,这指定要使用的目标地址。默认情况下,该地址是传入接口的ip地址。这只有在规则还指定“-p tcp“或”-p udp“时才有效。
--tproxy-markvalue[/mask],用给定的值/掩码标记数据包。这里的fwmark值集可以被高级路由使用。(透明代理工作所必需的:否则这些数据包将被转发,这可能不是您想要的。)
29)TRACE
此目标标记Packes,以便内核在遍历表、链、规则时记录与数据包匹配的每条规则。(日志记录需要ipt_log或ip6t_log模块)。数据包以字符串前缀记录:“TRACE:tablename:chainname:type:ruenum”,其中type可以是普通规则的“rule”,用户定义的链末尾的隐式规则可以是“return”,内置链的策略可以是“policy”。
只能在raw表中使用。
30)TTL
这用于修改IPv 4 TTL头字段。TTL字段确定数据包可以遍历多少跳(路由器),直到超过生存时间。设置或递增ttl字段可能非常危险,因此应不惜任何代价加以避免。不要在离开本地网络的数据包上设置或增加值!
--ttl-setvalue,设置TTL值为value。
--ttl-decvalue,减少TTL的值value次。
--ttl-incvalue,增加TTL的值value次。
31)ULOG
此目标提供匹配数据包的用户空间日志记录。当为规则设置此目标时,Linux内核将通过NetLink套接字对此数据包进行多播。然后,一个或多个用户空间进程可以订阅各种多播组并接收分组。与日志一样,这是一个“不终止的目标”,即在下一个规则中继续进行规则遍历。
--ulog-nlgroupnlgroup,这指定了将数据包发送到的netlink组(1-32)。默认值为1
--ulog-prefixprefix,前缀为指定前缀的日志消息;长度可达32个字符,用于区分日志中的消息。
--ulog-cprangesize,要复制到用户空间的字节数。值为0总是复制整个数据包,而不考虑其大小。默认值为0
--ulog-qthresholdsize,内核中要排队的数据包数。例如,将此值设置为10,在内核内累加10个数据包,并将它们作为一个NetLink多部分消息传输到用户空间。默认值为1(用于向后兼容性)
5、实例
1)显示filter表的记录
[root@localhost ~]# iptables -t filter –L //显示指定表的记录
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
…
Chain FORWARD (policy ACCEPT
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
…
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2)禁止端口135的tcp数据包
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 135 -j DROP //添加记录,忽略135端口的tcp数据包
[root@localhost ~]# iptables –L //查看表,已经加入规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere tcp dpt:epmap
3)禁止目标地址访问本机
[root@localhost ~]# iptables -A INPUT -s 192.168.1.110 -j DROP //禁止110地址访问本机
[root@localhost ~]# iptables -L |grep DROP //查看filter表,已经添加记录
DROP tcp -- anywhere anywhere tcp dpt:epmap
DROP all -- 192.168.1.110 anywhere
-------------------------
accept
accept指令用来设置允许向目标打印机发送打印任务。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora。
1、语法
cupsaccept [ -E ] [ -U username ] [ -h hostname[:port] ] destination(s)
2、选项列表
-E
强制加密
-U
连接打印机的时候,发送用户名
-h
选择目标打印机ip和端口
3、实例
允许向目标打印机发送打印任务
[root@localhost /]# accept printer01
reject
reject指令用来设置拒绝向目标打印机发送打印任务。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
cupsreject [ -E ] [ -U username ] [ -h hostname[:port] ] [ -r reason ] destination(s)
2、选项列表
-E
强制加密
-U
连接打印机的时候,发送用户名
-h
选择目标打印机ip和端口
-r
设置拒绝的原因
3、实例
拒绝向目标打印机发送打印任务
[root@localhost /]# reject printer01 //拒绝发送打印请求
You have new mail in /var/spool/mail/root
[root@localhost /]# lpr /weijie/5.c //打印文件,可以看到结果失败了
lpr: Destination "printer01" is not accepting jobs.
-------------------------
lpc
lpc指令用来控制打印机,它提供了一个命令行,用户可以输出命令来控制打印机。如果命令行上没有指定命令,lpc将从标准输入中显示提示符并接受命令。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lpc [ command [ parameter(s) ] ]
2、命令列表
exit | quit
退出打印机命令行
? | help
显示帮助
status
显示打印机状态
3、实例
进入lpc命令行
[root@localhost /]# lpc //进入命令行
lpc> help //显示帮助
命令可能是缩写。命令是:
exit help quit status ?
lpc> ? //显示帮助
命令可能是缩写。命令是:
exit help quit status ?
lpc> status //显示打印机状态
printer01:
打印机在设备 'ipp' 上,速度 -1
队列已停用
打印已启用
1 个条目
监控程序已存在
lpc> exit //退出
You have new mail in /var/spool/mail/root
[root@localhost /]#
|
-------------------------
lpr
lpr指令用来打印文件,如果没有指定文件名,那么从标准输入读取内容。CUPS提供了许多设置默认目标的方法。首先查询“LPDEST”和“PRINTER”环境变量。如果没有设置,则使用lpoptions(1)命令的当前默认集,然后使用lpadmin(8)命令进行默认设置。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lpr [ -E ] [ -H server[:port] ] [ -U username ] [ -P destination[/instance] ]
[ -# num-copies [ -h ] [ -l ] [ -m ] [ -o option[=value] ] [ -p] [ -q ] [ -r ] [ -C/J/T title ] [ file(s) ]
2、命令列表
-E
使用加密模式
-H
指定远程打印服务器
-C | -J | -T “name”
设置打印任务名字
-P destination[/instance]
指定打印机名字
-U username
设置别名
-# copies
将要打印的副本数量从1份设置为100份。
-h
关闭标语打印
-l
指定文件已经被格式化,发送的时候不应该过滤
-m
打印完成之后发送邮件
-o option[=value]
设置job的选项
-p
指定文件应该被格式化
-q
等待打印
-r
打印之后,文件被删除
3、实例
打印指定的文件
[root@localhost /]# lpr -C P1 /weijie/4.c //打印文件,设置打印的名字
[root@localhost /]# lpq //查看打印队列
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
active root 2 5.c 1024 字节
1st root 3 P1 1024 字节
[root@localhost /]#
-------------------------
lp
lp指令用来打印文件,也可以修改存在的打印任务。使用该指令可以指定打印的页码、副本等。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lp [ -E ] [ -U username ] [ -c ] [ -d destination[/instance] ] [ -h hostname[:port] ] [ -m ] [ -n num-copies ]
[ -o option[=value] ] [ -q priority ] [ -s ] [ -t title ] [-H handling ] [ -P page-list ] [ -- ] [ file(s) ]
lp [ -E ] [ -U username ] [ -c ] [ -h hostname[:port] ] [ -i job-id ] [ -n num-copies] [ -o option[=value] ]
[ -q priority ] [ -t title ] [ -H handling ] [ -P page-list ]
2、命令列表
--
标记选项的结尾;使用它打印以(-)开头的文件。
-E
使用加密模式
-U username
设置用户名
-c
向后提供兼容
-d destination
目标打印机
-h hostname[:port]
远程打印机
-i job-id
指定要修改的打印任务
-n
设置打印副本的次数1~100
-m
打印完成之后发送邮件
-o "name=value [name=value ...]"
设置打印选项
-q priority
设置打印级别1~100,100最大,默认50
-s
静默模式
-t “name”
设置打印任务名字
-u username
以指定的名字提交作业。
-H hh:mm
设置打印开始时间。可以是时间格式,也可以是hold,等待打印;immediate,立即打印;restart,重新启动打印任务;resume,挂载打印任务。
3、实例
打印指定的文件
[root@localhost /]# lpq //查看当前打印队列
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
active root 2 5.c 1024 字节
1st root 3 P1 1024 字节
[root@localhost /]# lp -H 10:00 -q 100 /weijie/4.c //打印文件,指定最高级别和时间
请求 id 是 printer01-4(1 个文件)
You have new mail in /var/spool/mail/root
[root@localhost /]# lpq //查看打印队列,可以看到刚才的任务是第一个要打印的
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
1st root 4 4.c 1024 字节
active root 2 5.c 1024 字节
2nd root 3 P1 1024 字节
[root@localhost /]#
-------------------------
lprm
lprm指令用来删除当前打印队列上的任务,如果没有指定,那么就删除当前打印任务。您可以指定一个或多个职务ID编号来取消这些职务,或者使用选项”-”取消所有作业。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lprm [ -E ] [ -U username ] [ -h server[:port] ] [ -P destination[/instance]] [ - ] [ job ID(s) ]
2、命令列表
-E
使用加密模式
-P
指定打印机
-h
指定远程服务器
-U
设置别名
3、实例
删除打印任务
[root@localhost /]# lpq //查看当前打印队列
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
1st root 4 4.c 1024 字节
active root 2 5.c 1024 字节
2nd root 3 P1 1024 字节
[root@localhost /]# lprm 3 //删除3号任务
You have new mail in /var/spool/mail/root
[root@localhost /]# lpq //查看打印队列,3号任务已经删除
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
1st root 4 4.c 1024 字节
active root 2 5.c 1024 字节
[root@localhost /]#
-------------------------
cancel
cancel指令用来取消已经存在的打印任务。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
cancel [ -E ] [ -U username ] [ -a ] [ -h hostname[:port] ] [ -u username ] [id ] [ destination ] [ destination-id ]
2、命令列表
-E
使用加密模式
-a
取消所有打印任务
-h
指定远程服务器
-U
设置别名
-u
取消被指定用户拥有的打印任务
3、实例
取消打印任务
[root@localhost /]# lpq //查看打印队列
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
1st root 4 4.c 1024 字节
active root 2 5.c 1024 字节
[root@localhost /]# cancel 4 //取消4号任务
You have new mail in /var/spool/mail/root
[root@localhost /]# lpq //查看打印队列,4号任务已经取消
printer01 已准备就绪,正在打印
顺序 所有者 作业 文件 总大小
active root 2 5.c 1024 字节
[root@localhost /]#
-------------------------
lpq
lpq指令用来显示当前打印队列的状态。如果命令行中没有指定打印机或类,则将显示默认目标上排队的作业。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lpq [ -E ] [ -U username ] [ -h server[:port] ] [ -P destination[/instance] ] [ -a ] [ -l ] [ +interval ]
2、命令列表
-E
使用加密模式
-a
显示所有打印机的任务
-h
指定远程服务器
-U
设置别名
-P
设置目标打印机
-l
以长格式汇报信息
3、实例
查看打印任务
[root@localhost /]# lpq -l
printer01 已准备就绪,正在打印
root:active [作业 2 本地主机]
5.c 1024 字节
You have new mail in /var/spool/mail/root
[root@localhost /]#
-------------------------
lpstat
lpstat指令用来显示当前任务、打印机的状态。如果没有参数,那么就显示打印队列。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。
1、语法
lpstat [选项]
2、命令列表
-E
使用加密模式
-H
显示远程打印机的名字和端口
-R
显示任务的顺序
-U
设置别名
-W
设置要显示哪个任务
-a
显示允许打印的打印机队列
-c
显示打印机类
-d
显示默认打印机
-h server[:port]
指定备用服务器
-l
显示打印机、类或作业的长列表。
-o
显示指定打印机的队列
-p
显示指定打印机,无论打印机是否激活
-r
显示CUPS是否在运行
-s
显示状态总和
-t
显示所有的状态。等价于"-r", "-d", "-c","-v", "-a", "-p","-o"一起使用
-u [user(s)]
显示由指定用户排队的打印作业列表。如果未指定用户,则列出当前用户排队的作业。
-v [printer(s)]
显示打印机及其连接的设备。如果没有指定打印机,则列出所有打印机。
3、实例
查看CUPS是否运行
[root@localhost /]# lpstat -r
调度程序正在运行
You have new mail in /var/spool/mail/root
[root@localhost /]#
-------------------------
sysctl
sysctl指令用来修改正在运行的内核参数,可以修改的参数都保存在/proc/sys/目录中,修改会立即生效。Linux中的sysctl支持需要Procfs。您可以使用sysctl来读取和写入sysctl数据。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
sysctl [-n] [-e] variable ...
sysctl [-n] [-e] [-q] -w variable=value ...
sysctl [-n] [-e] [-q] –p <filename>
sysctl [-n] [-e] -a
sysctl [-n] [-e] -A
2、选项列表
-n
显示内核参数的值,不显示其名称
-e
忽略错误
-N
只显示名字
-q
不在标准输出显示值
-w
复制的时候需要
-p
加载sysctl的设置情况
-a | -A
显示所有内核参数的值和名字
variable
读取的变量名,可以用“/”做分隔符
variable=value
如果value包含由shell解析的引号或字符,则可能需要将该值括在双引号中。这需要使用-w参数。
3、实例
显示所有的内核参数
[root@localhost ntop-4.0.1]# sysctl –a //显示所有的内核参数名字和值
…
sunrpc.transports = tcp 1048576
sunrpc.transports = udp 32768
sunrpc.transports = tcp-bc 1048576
sunrpc.udp_slot_table_entries = 16
sunrpc.tcp_slot_table_entries = 2
sunrpc.tcp_max_slot_table_entries = 65536
sunrpc.min_resvport = 665
sunrpc.max_resvport = 1023
sunrpc.tcp_fin_timeout = 15
-------------------------
iostat
iostat指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态。iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载。iostat命令生成可用于更改系统配置的报告,以更好地平衡物理磁盘之间的输入/输出负载。
iostat命令生成的第一个报告提供了自系统启动以来的统计数据,除非在省略该第一个报告时使用-y选项。每一份后续报告都涵盖自上次报告以来的时间。每次运行iostat命令时都会报告所有统计信息。报告由CPU标题行和CPU统计数据行后面的一行组成。在多处理器系统中,CPU统计数据作为所有处理器之间的平均值计算在系统范围内.设备标题行后面显示配置的每个设备的一行统计信息。当使用选项-n时,会显示NFS标题行,并为每个已挂载的网络文件系统显示一行统计信息。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
iostat [选项]
2、选项列表
-c
显示cpu情况
-d
显示设备利用率
-h
配合-n选项使用,让输出更加易读
-j
显示指定设备的名字、id、label
-k
以“kb/s”为单位显示,默认使用“块/s”为单位
-m
以Mb/s为单位
-N
显示注册设备的映射名字
-n
显示NFS状态
-p
显示块设备状态
-t
显示报告时间
-x
显示扩展信息
-V
显示版本信息,并且退出
-y
如果在给定间隔内显示多个记录,则自系统启动以来省略带有统计信息的第一次报告。
-z
告诉iostat,对于在示例期间没有活动的任何设备,都要省略输出。
3、报告
iostat命令生成三种类型的报告:CPU利用率报告、设备使用报告和网络文件系统报告。
1)CPU利用率报告
iostat命令生成的第一个报告是CPU利用率报告。对于多处理器系统,CPU值是所有处理器之间的全局平均值。报告的格式如下:
%user,显示在用户级别(应用程序)执行时CPU利用率的百分比。
%nice,以良好的优先级在用户级别执行时显示CPU利用率的百分比。
%system,显示在系统级(内核)执行时出现的CPU利用率百分比。
%iowait,显示CPU或CPU空闲的时间百分比,在此期间,系统有未执行的磁盘I/O请求。
%steal,显示虚拟机管理程序为另一个虚拟处理器服务时,虚拟CPU或CPU在非自愿等待中花费的时间百分比。
%idle,显示CPU或CPU空闲的时间百分比,并且系统没有未执行的磁盘I/O请求。
2)设备使用报告
iostat命令生成的第二个报告是设备使用报告。设备报告提供每个物理设备或分区的统计信息。可以在命令行上输入要显示统计信息的块设备。如果不使用-x选项,也可以在命令行中输入分区。如果没有输入设备或分区,则为系统使用的每个设备显示统计信息,并提供内核为其维护统计信息。如果在命令行上给出ALL关键字,则会显示系统定义的每个设备的统计信息,包括从未使用过的设备。报告可能会显示以下字段,这取决于所使用的标志
Device:,该列给出了nth设备的设备(或分区)名称,它以devm-n的形式显示,内核为2.4,其中m是设备的主要数字,n是一个独特的数字。对于较新的内核,将显示/dev目录中列出的设备名称。
tps,指示每秒发送给设备的传输次数。传输是对设备的I/O请求。多个逻辑请求可以组合成对设备的单个I/O请求。转移是不确定的大小。
Blk_read/s,指示从设备读取的数据量,以每秒多个块表示。块等效于内核2.4及更高版本的扇区,因此其大小为512字节。对于较老的核,块的大小是不确定的。
Blk_wrtn/s,指示写入设备的数据量,以每秒多个块表示。
Blk_read,读入的总块数
Blk_wrtn,写入的总块数
kB_read/s,指示从设备读取的数据量,以每秒千字节表示。
kB_wrtn/s,指示从设备写入的数据量,以每秒千字节表示。
kB_read,读取的总量,kb
kB_wrtn,写入的总量,kb
MB_read/s,指示写入设备的数据量,以每秒兆字节表示。
MB_wrtn/s,指示读取设备的数据量,以每秒兆字节表示。
MB_read,读取的总量,Mb
MB_wrtn,写入的总量,Mb
rrqm/s,每秒合并到设备的读取请求数。
wrqm/s,每秒合并到设备的写入请求数。
r/s,每秒向设备发出的读取请求数。
w/s,每秒向设备发出的写入请求数。
rsec/s,每秒从设备读取的扇区数。
wsec/s,每秒从设备写入的扇区数。
rkB/s,每秒从设备读取的千字节数。
wkB/s,每秒从设备写入的千字节数。
rMB/s,每秒从设备读取的兆字节数。
wMB/s,每秒从设备写入的兆节数。
avgrq-sz,向设备发出的请求的平均大小(按扇区)
avgqu-sz,向设备发出的请求的平均队列长度。
await,向要服务的设备发出I/O请求的平均时间(毫秒)。这包括请求在队列中花费的时间和服务它们的时间。
svctm,向设备发出的I/O请求的平均服务时间(毫秒)。警告!不要再相信这个领域了。此字段将在以后的sysstat版本中删除。
%util,向设备发出I/O请求的CPU时间百分比(设备的带宽利用率)。当此值接近100%时,设备饱和发生。
3)NFS报告
NetworkFilessystem(NFS)报告为每个挂载的网络文件系统提供统计信息。报告显示了以下领域:
Filesystem:,此列显示NFS服务器的主机名,后面是冒号,以及安装网络文件系统的目录名。
rBlk_nor/s,指示应用程序通过Read(2)系统调用接口读取的块数。块的大小为512字节。
wBlk_nor/s,指示应用程序通过写(2)系统调用接口编写的块数。块的大小为512字节。
rBlk_dir/s,指示从使用O_DIRECT标志打开的文件中读取的块数。
wBlk_dir/s,指示写入使用O_DIRECT标志打开的文件的块数。
rBlk_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的块数。
wBlk_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的块数。
rkB_nor/s,指示应用程序通过Read(2)系统调用接口读取的千字节数。
wkB_nor/s,指示应用程序通过write(2)系统调用接口编写的千字节数。
rkB_dir/s,指示从使用O_DIRECT标志打开的文件中读取的千字节数。
wkB_dir/s,指示写入到使用O_DIRECT标志打开的文件中的千字节数。
rkB_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的千字节数。
wkB_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的千字节数。
rMB_nor/s,指示应用程序通过Read(2)系统调用接口读取的兆字节数。
wMB_nor/s,指示应用程序通过write(2)系统调用接口编写的兆字节数。
rMB_dir/s,指示从使用O_DIRECT标志打开的文件中读取的兆字节数。
wMB_dir/s,指示写入到使用O_DIRECT标志打开的文件中的兆字节数。
rMB_svr/s,指示NFS客户端通过NFS读取请求从服务器读取的兆字节数。
wMB_svr/s,指示NFS客户端通过NFS读取请求从服务器写入的兆字节数。
ops/s,指示每秒向文件系统发出的操作数。
rops/s,指示每秒向文件系统发出的“读”操作数。
wops/s,指示每秒向文件系统发出的“写”操作数。
4、环境变量
iostat命令考虑了以下环境变量:
S_TIME_FORMAT,如果存在此变量,且其值为ISO,则在报表标题中打印日期时,将忽略当前区域设置。iostat命令将使用ISO 8601格式(YYYY-MM-DD)。选项-t显示的时间戳也将符合ISO 8601格式。
5、例子代码
iostat
为所有CPU和设备显示自启动报告以来的单个历史记录
iostat –d 2
以两秒钟间隔显示连续设备报告
iostat –d 2 6
对所有设备每隔两秒钟播放六次报告
iostat -x hda hdb 2 6
以两秒钟的间隔显示六份扩展统计报告,用于设备HDA和HDB。
iostat -p sda 2 6
为设备SDA及其所有分区(sda 1等)以两秒钟间隔显示六个报告。
6、实例
1)显示cpu情况
[root@localhost ntop-4.0.1]# iostat –c //只显示cpu状态
Linux 2.6.32-431.el6.i686 (localhost.localdomain) 2018年10月10日 _i686_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.17 0.00 0.11 0.04 0.00 99.68
You have new mail in /var/spool/mail/root
[root@localhost ntop-4.0.1]#
2)显示nfs系统状态
[root@localhost ntop-4.0.1]# iostat -n -h –t //显示nfs状态,要求显示出时间
Linux 2.6.32-431.el6.i686 (localhost.localdomain) 2018年10月10日 _i686_ (1 CPU)
2018年10月10日 17时34分11秒
Filesystem: rBlk_nor/s wBlk_nor/s rBlk_dir/s wBlk_dir/s rBlk_svr/s wBlk_svr/s ops/s rops/s wops/s
[root@localhost ntop-4.0.1]#
-------------------------
tload
tload指令以字符的方式显示当前系统的平均负载情况。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
tload [-V] [-s scale] [ -d delay ] [tty]
2、选项列表
-d
显示更新时间间隔
-s
显示图表的垂直刻度单位
-V
显示版本信息
3、实例
显示中断负载情况
[root@localhost ntop-4.0.1]# tload -d 5 -s 1 /dev/pts/2 //显示指定中断的负载,每5s更新一次
0.00, 0.00, 0.00
-------
-------
-------
|
-------------------------
dmesg
dmesg指令用来打印和控制内核的输出信息,这些信息保存早ring buffer中。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
dmesg [-c] [-r] [-n level] [-s bufsize]
2、选项列表
-c
打印之后清除缓冲区
-r
打印raw信息
-s
设置缓冲区大小,默认16392
-n
指定记录信息的等级
3、实例
查看开机内核输出信息
[root@localhost dev]# dmesg -c //查看信息,之后删除缓冲区内容
。。。
e1000: eth0 NIC Link is Down
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
40:34:12.277699 timesync vgsvcTimeSyncWorker: Radical host time change: 40 928 048 000 000ns (HostNow=1 539 132 201 613 000 000 ns HostLast=1 539 091 273 565 000 000 ns)
40:34:22.278538 timesync vgsvcTimeSyncWorker: Radical guest time change: 40 932 566 440 000ns (GuestNow=1 539 132 211 613 841 000 ns GuestLast=1 539 091 279 047 401 000 ns fSetTimeLastLoop=true )
hrtimer: interrupt took 2772539 ns
-------------------------
free
free指令用来显示内存的使用情况,显示系统中可用和已使用的物理和交换内存的总量,以及内核使用的缓冲区。应该忽略共享内存列;它已经过时了。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
free [选项]
2、选项列表
-b
显示内存使用情况,单位byte
-k
显示内存使用情况,单位KB
-m
显示内存使用情况,单位MB
-o
不显示缓冲区调节行
-t
显示内存总和
-s
按照指定的时间间隔显示内存使用情况
-l
显示详细的低内存和高内存提高统计数据
-V
显示命令的版本并退出
3、实例
1)以kb为单位显示
[root@localhost ntop-4.0.1]# free –k //以kb为单位显示
total used free shared buffers cached
Mem: 1659316 1405992 253324 0 227856 741672
-/+ buffers/cache: 436464 1222852
Swap: 2940920 0 2940920
2)以MB为单位显示
[root@localhost ntop-4.0.1]# free -m –t //以MB为单位显示,同时显示总和
total used free shared buffers cached
Mem: 1620 1373 247 0 222 724
-/+ buffers/cache: 426 1194
Swap: 2871 0 2871
Total: 4492 1373 3119
|
-------------------------
top
top指令用来显示Linux的进程信息,这是一个动态显示的过程。top提供运行系统的动态实时视图。它可以显示系统摘要信息以及当前由Linux内核管理的任务列表。所显示的系统摘要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动期间使配置持久。
-------------------------
uname
uname指令用来显示计算机硬件以及操作系统的相关信息,例如计算机名、内核版本、硬件架构。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。
1、语法
uname [选项]
2、选项列表
-a | --all
显示所有的信息
-s | --kernel-name
显示内核名字
-n | --nodename
显示主机名
-r | --kernel-release
显示内核发型版本号
-v | --kernel-version
显示内核版本
-m | --machine
显示计算机硬件架构名字
-p | --processor
显示cpu类型
-i | --hardware-platform
显示硬件平台
-o | --operating-system
显示操作系统
--help
显示帮助信息,并且退出
--version
显示版本信息,并且退出
3、实例
显示系统所有信息
[root@localhost ntop-4.0.1]# uname –a //显示所有信息
Linux localhost.localdomain 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。