Linux基础
Sun Hao

1. 引言

Linux内核最初是由李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版UNIX操作系统Minix太难用了,于是决定自己开发一个操作系统。第一个版本于1991年9月发布,当时仅有10000行代码。

李纳斯·托瓦兹没有保留Linux源代码的版权,公开了代码,并邀请他人一起完善Linux。与Windows及其他有专利权的操作系统不同,Linux开放源代码,任何人都可以免费使用它。

据估计,现在只有2%的Linux核心代码是由李纳斯·托瓦兹自己编写的,虽然他仍然拥有Linux内核(操作系统的核心部分),并且保留了选择新代码和需要合并的新方法的最终裁定权。现在大家所使用的Linux,笔者更倾向于说是由李纳斯·托瓦兹和后来陆续加入的众多Linux爱好者共同开发完成的。

Linux受到广大计算机爱好者的喜爱,主要原因有两个:一是它属于开源软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿使用,无约束地继续传播;二是它具有UNIX的全部功能,任何使用UNIX操作系统或想要学习UNIX操作系统的人都可以从Linux中获益。

开源软件是不同于商业软件的一种模式,从字面上理解,就是开放源代码,大家不用担心里面会搞什么猫腻,这会带来软件的革新和安全。

另外,开源其实并不等同于免费,而是一种新的软件盈利模式。目前很多软件都是开源软件,对计算机行业与互联网影响深远。

UNIX/Linux系统可以粗糙地抽象为3个层次(所谓粗糙,就是不够细致、精准,但是便于初学者抓住重点理解),如图1所示。底层是UNIX/Linux操作系统,一般称之为系统内核(Kernel);中间层是Shell层,即命令解释层;高层则是应用层。

图1 UNIX/Linux系统结构层次概要

1.1 内核层

内核层是UNIX/Linux系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。

1.2 Shell层

Shell层是与用户直接交互的界面。用户可以在提示符下输入命令行,由Shell解释执行并输出相应结果或者有关信息,所以我们也把Shell称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作。

1.3 应用层

应用层提供基于X Window协议的图形环境。X Window协议定义了一个系统所必须具备的功能(就如同TCP/IP是一个协议,定义软件所应具备的功能),任何系统能满足此协议及符合X协会其他的规范,便可称为X Window。

现在大多数的UNIX系统上(包括Solaris、HP-UX、AIX等)都可以运行CDE(Common Desktop Environment,通用桌面环境,是运行于UNIX的商业桌面环境)的用户界面;而在Linux上广泛应用的有Gnome、KDE等。

X Window与微软的Windows图形环境有很大的区别:UNIX/Linux系统与X Window没有必然捆绑的关系,也就是说,UNIX/Linux可以安装X Window,也可以不安装;而微软的Windows图形环境与内核捆绑密切。UNIX/Linux系统不依赖图形环境,依然可以通过命令行完成100%的功能,而且因为不使用图形环境还会节省大量的系统资源。

2. Linux常用命令

2.1 命令的基本格式

2.1.1 命令提示符

登录系统后,第一眼看到的内容是:

1
[root@localhost ~]#

这就是Linux系统的命令提示符。

●[]:这是提示符的分隔符号,没有特殊含义。
●root:显示的是当前的登录用户,超哥现在使用的是root用户登录。
●@:分隔符号,没有特殊含义。
●localhost:当前系统的简写主机名(完整主机名是localhost.localdomain)。
●~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
●#:命令提示符,Linux用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是#;如果是普通用户,提示符就是$。
家目录是什么?Linux系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家。
●超级用户的home目录:/root/。
●普通用户的home目录:/home/用户名/。

用户在自己的home目录中拥有完整权限,现在切换一下用户所在目录,看看有什么效果。

1
2
[root@localhost ~]# cd /usr/local/
[root@localhost local]#

如果切换用户所在目录,那么命令提示符中的“~”会变成用户当前所在目录的最后一个目录(不显示完整的所在目录/usr/local/,只显示最后一个目录local)。

2.1.2命令的基本格式

Linux命令的基本格式为:

1
[root@localhost ~]# 命令 [选项] [参数]

命令格式中的[]代表可选项,也就是有些命令可以不写选项或参数,也能执行。下面用Linux中最常见的ls命令来解释一下命令的格式。如果按照命令的分类,那么ls命令应该属于目录操作命令。

1
2
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog

1)选项的作用
ls命令之后不加选项和参数也能执行,不过只能执行最基本的功能,即显示当前目录下的文件名。那么加入一个选项,会出现什么结果?

1
2
3
4
5
[root@localhost ~]# ls -l
总用量 44
-rw-------. 1 root root 1207 1月 14 18:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 24772 1月 14 18:17 install.log
-rw-r--r--. 1 root root 7690 1月 14 18:17 install.log.syslog

如果加一个“-l”选项,则可以看到显示的内容明显增多了。“-l”是长格式(long list)的意思,也就是显示文件的详细信息。至于“-l”选项的具体含义,我们稍后再详细讲解。可以看到选项的作用是调整命令功能。如果没有选项,那么命令只能执行最基本的功能;而一旦有选项,则可以显示更加丰富的数据。

Linux的选项又分为短格式选项(-l)和长格式选项(—all)。短格式选项是英文的简写,一般用一个减号调用,例如:

1
[root@localhost ~]# ls -l

而长格式选项是英文完整单词,一般用两个减号调用,例如:

1
[root@localhost ~]# ls --all

一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项。当然也有例外,比如ls命令的短格式选项-l就没有对应的长格式选项。所以具体的命令选项可以通过后面我们要学习的帮助命令来进行查询。

2)参数的作用

参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作。例如:

1
2
 [root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1207 1月 14 18:18 anaconda-ks.cfg

但是为什么一开始ls命令可以省略参数?那是因为有默认参数。命令一般都需要加入参数,用于指定命令操作的对象是谁。如果可以省略参数,则一般都有默认参数。例如:

1
2
root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog

这个ls命令后面没有指定参数,默认参数是当前所在位置,所以会显示当前目录下的文件名。

总结一下:命令的选项用于调整命令功能,而命令的参数是这个命令的操作对象。

2.2 目录操作命令

2.2.1 ls命令

ls是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:

●命令名称:ls。
●英文原意:list。
●所在路径:/bin/ls。
●执行权限:所有用户。
●功能描述:显示目录下的内容。

1)命令格式

1
2
3
4
5
6
7
8
9
[root@localhost ~]#ls [选项] [文件名或目录名]
选项:
-a: 显示所有文件
--color=when: 支持颜色输出,when的值默认是always(总显示颜色),也可以是
never(从不显示颜色)和auto(自动)
-d: 显示目录信息,而不是目录下的文件
-h: 人性化显示,按照我们习惯的单位显示文件大小
-i: 显示文件的i节点号
-l: 长格式显示

2)常见用法

“-l”选项

1
2
3
4
5
6
[root@localhost ~]# ls -l
总用量 44
-rw-------. 1 root root 1207 1月 14 18:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 24772 1月 14 18:17 install.log
-rw-r--r--. 1 root root 7690 1月 14 18:17 install.log.syslog
#权限 引用计数所有者所属组大小文件修改时间 文件名

我们已经知道“-l”选项用于显示文件的详细信息,那么“-l”选项显示的这7列分别是什么含义?

●第一列:权限。具体权限的含义将在4.5节中讲解。
●第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
●第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
●第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
●第五列:大小。默认单位是字节。
●第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
●第七列:文件名。

2.2.2 cd命令

cd是切换所在目录的命令,这个命令的基本信息如下。

●命令名称:cd。
●英文原意:change directory。
●所在路径:Shell内置命令。
●执行权限:所有用户。
●功能描述:切换所在目录。

Linux的命令按照来源方式分为两种:Shell内置命令和外部命令。所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所以会有命令的执行文件。Linux中的绝大多数命令是外部命令,而cd命令是一个典型的Shell内置命令,所以cd命令没有执行文件所在路径。
1)命令格式

1
[root@localhost ~]#cd [目录名]

2)常见用法

例1:基本用法

cd命令切换目录只需在命令后加目录名称即可。例如:

1
2
3
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]#
#进入/usr/local/src/目录

通过命令提示符,我们可以确定当前所在目录已经切换。

例2:简化用法

cd命令可以识别一些特殊符号,用于快速切换所在目录,这些符号如表1所示。

表1 cd命令简化用法

“cd ~”命令可以快速回到用户的家目录。

1
2
[root@localhost src]# cd ~
[root@localhost ~]#

cd命令直接按回车键也是快速切换到家目录

1
2
3
4
[root@localhost ~]# cd /etc/
[root@localhost etc]# cd
[root@localhost ~]#
#直接使用cd命令,也回到了家目录

再试试“cd -”命令。

1
2
3
4
5
6
7
8
[root@localhost ~]# cd /usr/local/src/
#进入/usr/local/src/目录 [root@localhost src]# cd -
/root
[root@localhost ~]#
#“cd –”命令回到进入src目录之前的家目录 [root@localhost ~]# cd -
/usr/local/src
[root@localhost src]#
#再执行一遍“cd –”命令,又回到了/usr/local/src/目录

再来试试“.”和“..”。

1
2
3
4
5
6
7
8
[root@localhost ~]# cd /usr/local/src/
#进入测试目录 [root@localhost src]# cd ..
#进入上级目录 [root@localhost local]# pwd
/usr/local
#pwd是查看当前所在目录的命令,可以看到我们进入了上级目录/usr/local/ [root@localhost local]# cd .
#进入当前目录 [root@localhost local]# pwd
/usr/local
#这个命令不会有目录的改变,只是告诉大家“.”代表当前目录

2.2.3 mkdir命令

mkdir是创建目录的命令,其基本信息如下。

●命令名称:mkdir。
●英文原意:make directories。
●所在路径:/bin/mkdir。
●执行权限:所有用户。
●功能描述:创建空目录。

1)命令格式

1
2
3
[root@localhost ~]# mkdir [选项] 目录名
选项:
-p: 递归建立所需目录

mkdir也是一个非常简单的命令,其主要作用就是新建一个空目录。

2)常见用法

例1:建立目录

1
2
3
[root@localhost ~]#mkdir cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog

我们建立一个名为cangls的目录,通过ls命令可以查看到这个目录已经建立。

例2:递归建立目录

如果想建立一串空目录:

1
2
[root@localhost ~]# mkdir lm/movie/jp/cangls
mkdir: 无法创建目录"lm/movie/jp/cangls": 没有那个文件或目录

这条命令报错,没有正确执行。这是因为这4个目录都是不存在的,mkdir默认只能在已经存在的目录中建立新目录。而如果需要建立一系列的新目录,则需要加入“-p”选项,递归建立才可以。例如:

1
2
3
4
5
6
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog lm
[root@localhost ~]# ls lm/
movie
#这里只查看一级子目录,其实后续的jp目录、cangls目录都已经建立

所谓的递归建立,就是一级一级地建立目录。

2.2.4 rmdir命令

既然有建立目录的命令,就一定会有删除目录的命令rmdir,其基本信息如下。

●命令名称:rmdir。
●英文原意:remove empty directories。
●所在路径:/bin/rmdir。
●执行权限:所有用户。
●功能描述:删除空目录。

1)命令格式

[root@localhost ~]# rmdir [选项] 目录名
选项:
-p: 递归删除目录

2)常见用法

1
[root@localhost ~]#rmdir cangls

就这么简单,命令后面加目录名称即可。既然可以递归建立目录,当然也可以递归删除目录。例如:

1
[root@localhost ~]# rmdir -p lm/movie/jp/cangls/

但rmdir命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。例如:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# mkdir test
#建立测试目录

[root@localhost ~]# touch test/boduo
[root@localhost ~]# touch test/longze
#在测试目录中建立两个文件

[root@localhost ~]# rmdir test/
rmdir: 删除 "test/" 失败: 目录非空

这个命令比较“笨”,所以我们不太常用。后续我们不论删除的是文件还是目录,都会使用rm命令。

2.3 文件操作命令

2.3.1 touch命令

touch的意思是触摸,如果文件不存在,则会建立空文件;如果文件已经存在,则会修改文件的时间戳(访问时间、数据修改时间、状态修改时间都会改变)。千万不要把touch命令当成新建文件的命令,牢牢记住这是触摸的意思。这个命令的基本信息如下。

●命令名称:touch。
●英文原意:change file timestamps。
●所在路径:/bin/touch。
●执行权限:所有用户。
●功能描述:修改文件的时间戳。

1)命令格式

1
2
3
4
5
6
[root@localhost ~]# touch [选项] 文件名或目录名
选项:
-a: 只修改文件的访问时间(Access Time)
-c: 如果文件不存在,则不建立新文件
-d: 把文件的时间改为指定的时间
-m: 只修改文件的数据修改时间(Modify Time)

2)常见用法

1
2
[root@localhost ~]#touch bols
#建立名为bols的空文件

如果文件不存在,则会建立文件。

1
2
3
[root@localhost ~]#touch bols
[root@localhost ~]#touch bols
#而如果文件已经存在,则也不会报错,只是会修改文件的访问时间

2.3.2 cat命令

cat命令用看来查看文件内容,这个命令地基本信息如下。

●命令名称:cat。
●英文原意:concatenate files and print on the standard output。
●所在路径:/bin/cat。
●执行权限:所有用户。
●功能描述:合并文件并打印输出到标准输出。

1)命令格式

1
2
3
4
5
6
7
[root@localhost ~]# cat [选项] 文件名
选项:
-A: 相当于-vET选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把Tab键用^I显示出来
-v: 列出特殊字符

2)常见用法

cat命令用于查看文件内容,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。不过Linux可以使用“PgUp+上箭头”向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。所以cat命令适合查看不太大的文件。当然,在Linux中是可以使用其他的命令或方法来查看大文件的,我们以后再来学习。cat命令本身非常简单,我们可以直接查看文件的内容。例如:

1
2
3
4
5
6
7
[root@localhost ~]# cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
lang zh_CN.UTF-8
…省略部分内容…

而如果使用“-n”选项,则会显示行号。例如:

1
2
3
4
5
6
7
8
[root@localhost ~]# cat -n anaconda-ks.cfg
1 # Kickstart file automatically generated by anaconda.
2
3
4 #version=DEVEL
5 install
6 cdrom
…省略部分内容…

如果使用“-A”选项,则相当于使用了“-vET”选项,可以查看文本中的所有隐藏符号,包括回车符($)、Tab键(^I)等。例如:

1
2
3
4
5
6
7
8
[root@localhost ~]# cat -A anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.$
$
$
#version=DEVEL$
install$
cdrom$
…省略部分内容…

2.4 目录和文件都能操作的命令

2.4.1 rm命令

rm是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。

●命令名称:rm。
●英文原意:remove files or directories。
●所在路径:/bin/rm。
●执行权限:所有用户。
●功能描述:删除文件或目录。

1)命令格式

1
2
3
4
5
[root@localhost ~]# rm [选项] 文件或目录
选项:
-f: 强制删除(force)
-i: 交互删除,在删除之前会询问用户
-r: 递归删除,可以删除目录(recursive)

2)常见用法

例1:基本用法

rm命令如果任何选项都不加,则默认执行的是“rm -i文件名”,也就是在删除一个文件之前会先询问是否删除。例如:

1
2
3
4
[root@localhost ~]# touch cangls
[root@localhost ~]# rm cangls
rm:是否删除普通空文件 "cangls"? y
#删除前会询问是否删除

例2:删除目录

如果需要删除目录,则需要使用“-r”选项。例如:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#递归建立测试目录 [root@localhost ~]# rm /test/
rm: 无法删除"/test/": 是一个目录
#如果不加“-r”选项,则会报错 [root@localhost ~]# rm -r /test/
rm:是否进入目录"/test"? y
rm:是否进入目录"/test/lm"? y
rm:是否进入目录"/test/lm/movie"? y
rm:是否删除目录 "/test/lm/movie/jp"? y
rm:是否删除目录 "/test/lm/movie"? y
rm:是否删除目录 "/test/lm"? y
rm:是否删除目录 "/test"? y
#会分别询问是否进入子目录、是否删除子目录

大家会发现,如果每级目录和每个文件都需要确认,那么在实际使用中简直是灾难!

例3:强制删除

如果要删除的目录中有1万个子目录或子文件,那么普通的rm删除最少需要确认1万次。所以,在真正删除文件的时候,我们会选择强制删除。例如:

1
2
3
4
[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#重新建立测试目录
[root@localhost ~]# rm -rf /test/
#强制删除

加入了强制功能之后,删除就会变得很简单,但是需要注意:

●数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如extundelete等。但要注意,数据恢复很难恢复完整的数据,一般能恢复70%~80%就很难得了。所以,与其把宝压在数据恢复上,不如养成良好的操作习惯。

●虽然“-rf”选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用“-rf”选项。

2.4.2 cp命令

cp是用于复制的命令,其基本信息如下:

●命令名称:cp。
●英文原意:copy files and directories。
●所在路径:/bin/cp。
●执行权限:所有用户。
●功能描述:复制文件和目录。

1)命令格式

1
2
3
4
5
6
7
8
9
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a: 相当于-dpr选项的集合
-d: 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i: 询问,如果目标文件已经存在,则会询问是否覆盖
-l: 把目标文件建立为源文件的硬链接文件,而不是复制源文件
-s: 把目标文件建立为源文件的软链接文件,而不是复制源文件
-p: 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r: 递归复制,用于复制目录

2)常见用法

例:基本用法

cp命令既可以复制文件,也可以复制目录。我们先来看看如何复制文件,例如:

1
2
3
4
[root@localhost ~]# touch cangls
#建立源文件
[root@localhost ~]# cp cangls /tmp/
#把源文件不改名复制到/tmp/目录下

如果需要改名复制,则命令如下:

1
2
[root@localhost ~]# cp cangls  /tmp/bols
#改名复制

如果复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为cp命令默认执行的是“cp -i”的别名,例如:

1
2
3
[root@localhost ~]# cp cangls  /tmp/
cp:是否覆盖"/tmp/cangls"? y
#目标位置有同名文件,所以会提示是否覆盖

接下来我们看看如何复制目录,其实复制目录只需使用“-r”选项即可,例如:

1
2
3
[root@localhost ~]# mkdir movie
#建立测试目录 [root@localhost ~]# cp -r /root/movie/ /tmp/
#目录原名复制

2.4.3 mv命令

mv是用来剪切的命令,其基本信息如下。

●命令名称:mv。
●英文原意:move (rename) files。
●所在路径:/bin/mv。
●执行权限:所有用户。
●功能描述:移动文件或改名。

1)命令格式

1
2
3
4
5
6
[root@localhost ~]# mv [选项] 源文件 目标文件
选项:
-f: 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i: 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n: 如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v: 显示详细信息

2)常见用法
例1:移动文件或目录

1
2
3
4
5
6
[root@localhost ~]# mv cangls /tmp/
#移动之后,源文件会被删除,类似剪切

[root@localhost ~]# mkdir movie
[root@localhost ~]# mv movie/ /tmp/
#也可以移动目录。和rm、cp不同的是,mv移动目录不需要加入“-r”选项

如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为mv命令默认执行的也是“mv -i”的别名,例如:

1
2
3
4
[root@localhost ~]# touch cangls
#重新建立文件 [root@localhost ~]# mv cangls /tmp/
mv:是否覆盖"/tmp/cangls"? y
#由于/tmp/目录下已经存在cangls文件,所以会提示是否覆盖,需要手工输入y覆盖移动

例2:强制移动

之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。如果我们确认需要覆盖已经存在的同名文件,则可以使用“-f”选项进行强制移动,这就不再需要用户手工确认了。例如:

1
2
3
4
[root@localhost ~]# touch cangls
#重新建立文件
[root@localhost ~]# mv -f cangls /tmp/
#就算/tmp/目录下已经存在同名的文件,由于“-f”选项的作用,所以会强制覆盖

例3:不覆盖移动

既然可以强制覆盖移动,那也有可能需要不覆盖的移动。如果需要移动几百个同名文件,但是不想覆盖,这时就需要“-n”选项的帮助了。例如:

1
2
3
4
5
6
7
[root@localhost ~]# ls /tmp/*ls
/tmp/bols /tmp/cangls
#在/tmp/目录下已经存在bols、cangls文件了

[root@localhost ~]# mv -vn bols cangls lmls /tmp/
"lmls" -> "/tmp/lmls"
#再向/tmp/目录中移动同名文件,如果使用了“-n”选项,则可以看到只移动了lmls,而同名的bols 和cangls并没有移动(“-v”选项用于显示移动过程)

例4:改名

如果源文件和目标文件在同一个目录中,那就是改名。例如:

1
2
[root@localhost ~]# mv bols lmls
#把bols改名为lmls

目录也可以按照同样的方法改名。

例5:显示移动过程

如果我们想要知道在移动过程中到底有哪些文件进行了移动,则可以使用“-v”选项来查看详细的移动信息。例如:

1
2
3
4
5
6
[root@localhost ~]# touch test1.txt test2.txt test3.txt
#建立三个测试文件 [root@localhost ~]# mv -v *.txt /tmp/
"test1.txt" -> "/tmp/test1.txt"
"test2.txt" -> "/tmp/test2.txt"
"test3.txt" -> "/tmp/test3.txt"
#加入“-v”选项,可以看到有哪些文件进行了移动

2.5 帮助命令

2.5.1 man命令

man是最常见的帮助命令,也是Linux最主要的帮助命令,其基本信息如下。

●命令名称:man。
●英文原意:format and display the on-line manual pages。
●所在路径:/usr/bin/man。
●执行权限:所有用户。
●功能描述:显示联机帮助手册。

1)命令格式

1
2
3
4
[root@localhost ~]# man [选项] 命令
选项:
-f: 查看命令拥有哪个级别的帮助
-k: 查看和命令相关的所有帮助

man命令比较简单,下面举个例子:

1
2
[root@localhost ~]# man ls
#获取ls命令的帮助信息

这就是man命令的基本使用方法,非常简单。但是帮助命令的重点不是命令如何使用,而是帮助信息应该如何查询。这些信息较多,下面将详细讲解。
2)man命令的使用方法

还是查看ls命令的帮助,我们看看这个帮助信息的详细内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@localhost ~]# man ls
LS(1) User Commands LS(1)
NAME
ls - list directory contents
#命令名称及英文原意
SYNOPSIS
ls [OPTION]... [FILE]...
#命令的格式
DESCRIPTION
#开始详细介绍命令选项的作用
List information about the FILEs (the current directory by default). Sort
entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
…省略部分内容…
AUTHOR
Written by Richard M. Stallman and David MacKenzie.
#作者
REPORTING BUGS
#bug的报告地址 Report ls bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report ls translation bugs to http://translationproject.org/team/
COPYRIGHT
#著作权受GPL规则保护
Copyright 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL
version 3 or later<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO
WARRANTY, to the extent permitted by law.
SEE ALSO
#可以通过其他哪些命令查看到ls的相关信息
The full documentation for ls is maintained as a Texinfo manual. If the info
and ls programs are properly installed at your site, the command info coreutils 'ls invocation' should give you access to the complete manual.
GNU coreutils 8.4 June 2012 LS(1)

虽然不同命令的man信息有一些区别,但是每个命令man信息的整体结构皆如演示这样。在帮助信息中,我们主要查看的就是命令的格式和选项的详细作用。

不过大家请注意,在man信息的最后,可以看到还有哪些命令可以查看到此命令的相关信息。这是非常重要的提示,不同的帮助信息记录的侧重点是不太一样的。所以,如果在man信息中找不到想要的内容,则可以尝试查看其他相关帮助命令。

3)man命令的快捷键
man命令的快捷键可以参考表2。

表2 man命令的快捷键

2.5.2 info命令

info命令也可以获取命令的帮助。和man命令不同的是,info命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。大家可以把info帮助信息看成一部独立的电子书,所以每个命令的帮助信息都会和书籍一样,拥有章节编号。例如:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# info ls
File: coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory
listing
10.1 'ls': List directory contents
==================================
The 'ls' program lists information about files (of any type, including
directories). Options and file arguments can be intermixed
arbitrarily, as usual.
…省略部分内容…

可以看到,ls命令的帮助只是整个info帮助信息中的第10.1节。在这个帮助信息中,如果标题的前面有“*”符号,则代表这是一个可以进入查看详细信息的子页面,只要按下回车键就可以进入。例如:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# info ls
…省略部分内容…
Also see *note Common options::.
* Menu:
* Which files are listed::
* What information is listed::
* Sorting the output::
* Details about version sort::
* General output formatting::
* Formatting file timestamps::
* Formatting the file names::
…省略部分内容…

这是ls命令的info帮助信息中可以查看详细的子页面的标题。info命令主要是靠快捷键来进行操作的,我们来看看常用的快捷键,如表3所示。

表3 info命令的常用快捷键

2.6 压缩和解压缩命令

在系统中,如果需要有大量的文件进行复制和保存,那么把它们打成压缩包是不错的选择。打包压缩作为常规操作,在Windows和Linux中都比较常见。Windows中常见的压缩包格式主要有“.zip”“.rar”和“.7z”等。、

在Linux中也是一样的,可以识别的常见压缩格式有十几种,比如“.zip”“.gz”“.bz2”“.tar”“.tar.gz”“.tar.bz2”等。我们也不需要知道这些压缩格式的具体区别,只要对应的压缩包会解压缩、想要压缩的时候会操作即可。

为什么还要区分是“.gz”还是“.bz2”的扩展名呢?这是因为,在Linux中,不同的压缩方法对应的解压缩方法也是不同的,这里的扩展名并不是Linux系统一定需要的(Linux不区分扩展名),而是用来给用户标识压缩格式的。只有知道了正确的压缩格式,才能采用正确的解压缩命令。

2.6.1 “zip”格式

“.zip”是Windows中最常用的压缩格式,Linux也可以正确识别“.zip”格式,这可以方便地和Windows系统通用压缩文件。
1)“.zip”格式的压缩命令
压缩命令就是zip,其基本信息如下。

●命令名称:zip。
●英文原意:package and compress (archive) files。
●所在路径:/usr/bin/zip。
●执行权限:所有用户。
●功能描述:压缩文件或目录。

命令格式如下:

1
2
3
[root@localhost ~]# zip [选项] 压缩包名 源文件或源目录
选项:
-r: 压缩目录

zip压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以方便解压缩时使用。举个例子:

1
2
3
4
5
6
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
adding: anaconda-ks.cfg (deflated 37%)
#压缩
[root@localhost ~]# ll ana.zip
-rw-r--r-- 1 root root 935 6月 17 16:00 ana.zip
#压缩文件生成

所有的压缩命令都可以同时压缩多个文件,例如:

1
2
3
4
5
6
7
[root@localhost ~]# zip test.zip install.log install.log.syslog
adding: install.log (deflated 72%)
adding: install.log.syslog (deflated 85%)
#同时压缩多个文件到test.zip压缩包中
[root@localhost ~]# ll test.zip
-rw-r--r-- 1 root root 8368 6月 17 16:03 test.zip
#压缩文件生成

如果想要压缩目录,则需要使用“-r”选项,例如:

1
2
3
4
5
6
7
8
[root@localhost ~]# mkdir dir1
#建立测试目录
[root@localhost ~]# zip -r dir1.zip dir1
adding: dir1/ (stored 0%)
#压缩目录
[root@localhost ~]# ls -dl dir1.zip
-rw-r--r-- 1 root root 160 6月 17 16:22 dir1.zip
#压缩文件生成

2)“.zip”格式的解压缩命令
“.zip”格式的解压缩命令是unzip,其基本信息如下。

●命令名称:unzip。
●英文原意:list, test and extract compressed files in a ZIP archive。
●所在路径:/usr/bin/unzip。
●执行权限:所有用户。
●功能描述:列表、测试和提取压缩文件中的文件。

命令格式如下:

1
2
3
[root@localhost ~]# unzip [选项] 压缩包名
选项:
-d: 指定解压缩位置

不论是文件压缩包,还是目录压缩包,都可以直接解压缩,例如:

1
2
3
4
[root@localhost ~]# unzip dir1.zip
Archive: dir1.zip
creating: dir1/
#解压缩

也可以手工指定解压缩位置,例如:

1
2
3
4
[root@localhost ~]# unzip -d /tmp/ ana.zip
Archive: ana.zip
inflating: /tmp/anaconda-ks.cfg
#把压缩包解压到指定位置

2.6.2 “.gz”格式

1)“.gz”格式的压缩命令
“.gz”格式是Linux中最常用的压缩格式,使用gzip命令进行压缩,其基本信息如下。

●命令名称:gzip。
●英文原意:compress or expand files。
●所在路径:/bin/gzip。
●执行权限:所有用户。
●功能描述:压缩文件或目录。

这个命令的格式如下:

1
2
3
4
5
6
7
[root@localhost ~]# gzip [选项] 源文件
选项:
-c: 将压缩数据输出到标准输出中,可以用于保留源文件
-d: 解压缩
-r: 压缩目录
-v: 显示压缩文件的信息
-数字: 用于指定压缩等级,-1压缩等级最低,压缩比最差;-9压缩比最高。默认压缩比是-6

例1:基本压缩

gzip压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可:

1
2
3
4
[root@localhost ~]# gzip install.log
#压缩install.log文件 [root@localhost ~]# ls
anaconda-ks.cfg install.log.gz install.log.syslog
#压缩文件生成,但是源文件也消失了

例2:保留源文件压缩

在使用gzip命令压缩文件时,源文件会消失,从而生成压缩文件。

1
2
3
4
5
6
[root@localhost ~]# gzip -c anaconda-ks.cfg anaconda-ks.cfg.gz
#使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中
#这样可以在压缩文件的同时不删除源文件
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog
#可以看到压缩文件和源文件都存在

例子3:压缩目录

我们可能会想当然地认为gzip命令可以压缩目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# mkdir test
[root@localhost ~]# touch test/test1
[root@localhost ~]# touch test/test2
[root@localhost ~]# touch test/test3
#建立测试目录,并在里面建立几个测试文件
[root@localhost ~]# gzip -r test/
#压缩目录,并没有报错
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog test
#但是查看发现test目录依然存在,并没有变为压缩文件
[root@localhost ~]# ls test/
test1.gz test2.gz test3.gz
#原来gzip命令不会打包目录,而是把目录下所有的子文件分别压缩

在Linux中,打包和压缩是分开处理的。而gzip命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况。

2)“.gz”格式的解压缩命令
如果要解压缩“.gz”格式,那么使用“gzip -d压缩包”和“gunzip压缩包”命令都可以。我们先看看gunzip命令的基本信息。

●命令名称:gunzip。
●英文原意:compress or expand files。
●所在路径:/bin/gunzip。
●执行权限:所有用户。
●功能描述:解压缩文件或目录。

常规用法就是直接解压缩文件,例如:

1
[root@localhost ~]# gunzip install.log.gz

如果要解压缩目录下的内容,则依然使用“-r”选项,例如:

1
[root@localhost ~]# gunzip -r test/

当然,“gunzip -r”依然只会解压缩目录下的文件,而不会解打包。要想解压缩“.gz”格式,还可以使用“gzip -d”命令,例如:

1
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz

3)查看“.gz”格式压缩的文本文件内容
如果我们压缩的是一个纯文本文件,则可以直接使用zcat命令在不解压缩的情况下查看这个文本文件中的内容。例如:

1
[root@localhost ~]# zcat anaconda-ks.cfg.gz

2.6.3 “.bz2”格式

1)“.bz2”格式的压缩命令
“.bz2”格式是Linux的另一种压缩格式,从理论上来讲,“.bz2”格式的算法更先进、压缩比更好;而“.gz”格式相对来讲压缩的时间更快。
“.bz2”格式的压缩命令是bzip2,这个命令的基本信息为:

●命令名称:bzip2。
●英文原意:a block-sorting file compressor。
●所在路径:/usr/bin/bzip2。
●执行权限:所有用户。
●功能描述:.bz2格式的压缩命令。

来看看bzip2命令的格式。

1
2
3
4
5
6
[root@localhost ~]# bzip2 [选项] 源文件
选项:
-d: 解压缩
-k: 压缩时,保留源文件
-v: 显示压缩的详细信息
-数字: 这个参数和gzip命令的作用一样,用于指定压缩等级,-1压缩等级最低,压缩比最差;-9压缩比最高

值得注意的是,gzip只是不会打包目录,但是如果使用“-r”选项,则可以分别压缩目录下的每个文件;而bzip2命令则根本不支持压缩目录,也没有“-r”选项。

例1:基本压缩命令

在压缩文件命令后面直接指定源文件即可,例如:

1
2
[root@localhost ~]# bzip2 anaconda-ks.cfg
#压缩成“.bz2”格式

这个压缩命令依然会在压缩的同时删除源文件。

例2:压缩的同时保留源文件

bzip2命令可以直接使用“-k”选项来保留源文件,而不用像gzip命令一样使用输出重定向来保留源文件。例如:

1
2
3
4
5
6
[root@localhost ~]# bzip2 -k install.log.syslog
#压缩 [root@localhost ~]
# ls
anaconda-ks.cfg.bz2
install.loginstall.log.syslog install.log.syslog.bz2
#压缩文件和源文件都存在

2)“.bz2”格式的解压缩命令

“.bz2”格式可以使用“bzip2 -d压缩包”命令来进行解压缩,也可以使用“bunzip2压缩包”命令来进行解压缩。先看看bunzip2命令的基本信息。

●命令名称:bunzip2。
●英文原意:a block-sorting file compressor。
●所在路径:/usr/bin/bunzip2。
●执行权限:所有用户。
●功能描述:.bz2格式的解压缩命令。

命令格式如下:

1
2
3
[root@localhost ~]# bunzip2 [选项] 源文件
选项:
-k: 解压缩时,保留源文件

先试试使用gunzip2命令来进行解压缩,例如:

1
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2

“.bz2”格式也可以使用“bzip2 -d压缩包”命令来进行解压缩,例如:

1
[root@localhost ~]# bzip2 -d install.log.syslog.bz2

3)查看“.bz2”格式压缩的文本文件内容

和“.gz”格式一样,“.bz2”格式压缩的纯文本文件也可以不解压缩直接查看,使用的命令是bzcat。例如:

1
[root@localhost ~]# bzcat install.log.syslog.bz2

2.6.4 “.tar”格式

通过前面的学习,我们发现,不论是gzip命令还是bzip2命令,好像都比较笨,gzip命令不能打包目录,而只能单独压缩目录下的子文件;bzip2命令干脆就不支持目录的压缩。

在Linux中,对打包和压缩是区别对待的。也就是说,在Linux中,如果想把多个文件或目录打包到一个文件包中,则使用的是tar命令;而压缩才使用gzip或bzip2命令。

1)“.tar”格式的打包命令
“.tar”格式的打包和解打包都使用tar命令,区别只是选项不同。我们先看看tar命令的基本信息。

●命令名称:tar。
●英文原意:tar。
●所在路径:/bin/tar。
●执行权限:所有用户。
●功能描述:打包与解打包命令。

命令的基本格式如下:

1
2
3
4
5
6
[root@localhost ~]# tar [选项] [-f 压缩包名] 源文件或目录
选项:
-c: 打包
-f: 指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定
要正确指定扩展名
-v: 显示打包文件过程

例1:基本使用

现在先打包一个文件练练手。

1
2
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
#把anaconda-ks.cfg打包为anaconda-ks.cfg.tar文件

选项“-cvf”一般是习惯用法,记住打包时需要指定打包之后的文件名,而且要用“.tar”作为扩展名。那打包目录呢?我们也试试:

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# ll -d test/
drwxr-xr-x 2 root root 4096 6月 17 21:09 test/
#test是我们之前的测试目录

[root@localhost ~]# tar -cvf test.tar test/
test/
test/test3
test/test2
test/test1
#把目录打包为test.tar文件

tar命令也可以打包多个文件或目录,只要用空格分开即可。例如:

1
2
[root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/
#把anaconda-ks.cfg文件和/tmp目录打包成ana.tar文件包

例2:打包压缩目录

我们已经解释过了,压缩命令不能直接压缩目录,我们就先用tar命令把目录打成数据包,然后再用gzip命令或bzip2命令压缩。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# ll -d test test.tar
drwxr-xr-x 2 root root 4096 6月 17 21:09 test
-rw-r--r-- 1 root root 10240 6月 18 01:06 test.tar
#我们之前已经把test目录打包成test.tar文件
[root@localhost ~]# gzip test.tar
[root@localhost ~]# ll test.tar.gz
-rw-r--r-- 1 root root 176 6月 18 01:06 test.tar.gz
#gzip命令会把test.tar压缩成test.tar.gz
[root@localhost ~]# gzip -d test.tar.gz
#解压缩,把test.tar.gz解压缩为test.tar
[root@localhost ~]# bzip2 test.tar
[root@localhost ~]# ll test.tar.bz2
-rw-r--r-- 1 root root 164 6月 18 01:06 test.tar.bz2
#bzip2命令会把test.tar压缩为test.tar.bz2格式

2)“.tar”格式的解打包命令

“.tar”格式的解打包也需要使用tar命令,但是选项不太一样。命令格式如下:

1
2
3
4
5
6
7
8
[root@localhost ~]# tar [选项] 压缩包
选项:
-x: 解打包
-f: 指定压缩包的文件名
-v: 显示打包文件过程

-t: 测试,就是不解打包,只是查看包中有哪些文件
-C 目录: 指定解打包位置

其实解打包和打包相比,只是把打包选项“-cvf”更换为“-xvf”。我们来试试:

1
2
[root@localhost ~]# tar -xvf anaconda-ks.cfg.tar
#解打包到当前目录下

如果使用“-xvf”选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用“-C(大写)”选项。例如:

1
2
[root@localhost ~]# tar -xvf test.tar -C /tmp
#把文件包test.tar解打包到/tmp/目录下

如果只想查看文件包中有哪些文件,则可以把解打包选项“-x”更换为测试选项“-t”。例如:

1
2
3
4
5
6
[root@localhost ~]# tar -tvf test.tar
drwxr-xr-x root/root 02016-06-17 21:09 test/
-rw-r--r-- root/root 02016-06-17 17:51 test/test3
-rw-r--r-- root/root 02016-06-17 17:51 test/test2
-rw-r--r-- root/root 02016-06-17 17:51 test/test1
#会用长格式显示test.tar文件包中文件的详细信息

2.6.5 “.tar.gz”和“.tar.bz2”格式

你可能会觉得Linux实在太不智能了,一个打包压缩,居然还要先打包成“.tar”格式,再压成“.tar.gz”或“.tar.bz2”格式。其实tar命令是可以同时打包压缩的,前面的讲解之所以把打包和压缩分开,是为了让大家了解在Linux中打包和压缩的不同。
使用tar命令直接打包压缩。命令格式如下:

1
2
3
4
[root@localhost ~]# tar [选项] 压缩包 源文件或目录
选项:
-z: 压缩和解压缩“.tar.gz”格式
-j: 压缩和解压缩“.tar.bz2”格式

例1:压缩与解压缩“.tar.gz”格式

我们先来看看如何压缩“.tar.gz”格式。

1
2
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#把/tmp/目录直接打包压缩为“.tar.gz”格式,通过“-z”来识别格式,“-cvf”和打包选项一致

解压缩也只是在解打包选项“-xvf”前面加了一个“-z”选项。

1
2
[root@localhost ~]# tar -zxvf tmp.tar.gz
#解压缩与解打包“.tar.gz”格式

前面讲的选项“-C”用于指定解压位置、“-t”用于查看压缩包内容,在这里同样适用。

例2:压缩与解压缩“.tar.bz2”格式

和“.tar.gz”格式唯一的不同就是“-zcvf”选项换成了“-jcvf”。

1
2
3
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
#打包压缩为“.tar.bz2”格式,注意压缩包文件名 [root@localhost ~]# tar -jxvf tmp.tar.bz2
#解压缩与解打包“.tar.bz2”格式

把文件直接压缩成“.tar.gz”和“.tar.bz2”格式,才是Linux中最常用的压缩方式,这是一定要掌握的压缩和解压缩方法。

2.7 常用网络命令

2.7.1 ifconfig命令

ifconfig是Linux中查看和临时修改IP地址的命令,其基本信息如下。

●命令名称:ifconfig。
●英文原意:configure a network interface。
●所在路径:/sbin/ifconfig。
●执行权限:超级用户。
●功能描述:配置网络接口。

1)查看IP地址信息

ifconfig命令最主要的作用就是查看IP地址的信息,直接输入ifconfig命令即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:C5:FB:AA
#eth0网卡信息 网络类型为以太网 MAC地址 inet addr:192.168.44.3 Bcast:192.168.44.255 Mask:255.255.255.0
#IP地址 广播地址 子网掩码 inet6 addr: fe80::20c:29ff:fec5:fbaa/64 Scope:Link
#IPv6的地址(目前不生效) UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
#网络参数 最大传输单元 数据包转送次数 RX packets:881 errors:0 dropped:0 overruns:0 frame:0
#接收到的数据包情况 TX packets:853 errors:0 dropped:0 overruns:0 carrier:0
#发送的数据包情况 collisions:0 txqueuelen:1000
#数据包碰撞 数据缓冲区长度 RX bytes:82229 (80.3 KiB) TX bytes:273463 (267.0 KiB)
#接收包的大小 发送包的大小 Interrupt:19 Base address:0x2000
#IRQ中断 内存地址 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:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:840 (840.0 b) TX bytes:840 (840.0 b)

ifconfig命令主要用于查看IP地址、子网掩码和MAC地址这三类信息,其他信息我们有所了解即可。

lo网卡是Loopback的缩写,也就是本地回环网卡,这个网卡的IP地址是127.0.0.1。它只代表我们的网络协议正常,就算不插入网线也可以ping通,所以基本没有实际使用价值,了解即可。

2.7.2 ping命令

ping是常用的网络命令,主要通过ICMP协议进行网络探测,测试网络中主机的通信情况。ping命令的基本信息如下。

●命令名称:ping。
●英文原意:send ICMP ECHO_REQUEST to network hosts。
●所在路径:/bin/ping。
●执行权限:所有用户。
●功能描述:向网络主机发送ICMP请求。

命令的基本格式如下:

1
2
3
4
5
[root@localhost ~]# ping [选项] IP
选项:
-b: 后面加入广播地址,用于对整个网段进行探测
-c 次数: 用于指定ping的次数
-s 字节: 指定探测包的大小

例1:探测与指定主机通信

1
2
3
4
5
6
[root@localhost ~]# ping 192.168.103.151
PING 192.168.103.151 (192.168.103.151) 56(84) bytes of data.
64 bytes from 192.168.103.151: icmp_seq=1 ttl=128 time=0.300 ms
64 bytes from 192.168.103.151: icmp_seq=2 ttl=128 time=0.481 ms
…省略部分内容…
#探测与指定主机是否通信

Linux是一个比较实在的操作系统,这个ping命令如果不使用“Ctrl+C”快捷键强行中止,就会一直ping下去,直到天荒地老……

例2:指定ping的次数

既然ping这么“实在”,如果不想一直ping下去,则可以使用“-c”选项指定ping的次数。例如:

1
2
[root@localhost ~]# ping -c 3192.168.103.151
#只探测3次,就中止ping命令

例3:探测网段中的可用主机

在ping命令中,可以使用“-b”选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址地进行探测。例如:

1
2
3
4
5
6
7
8
[root@localhost ~]# ping -b -c 3192.168.103.255
WARNING: pinging broadcast address
PING 192.168.103.255 (192.168.103.255) 56(84) bytes of data.
64 bytes from 192.168.103.199: icmp_seq=1 ttl=64 time=1.95 ms
64 bytes from 192.168.103.168: icmp_seq=1 ttl=64 time=1.97 ms (DUP! )
64 bytes from 192.168.103.252: icmp_seq=1 ttl=64 time=2.29 ms (DUP! )
…省略部分内容…
#探测192.168.103.0/24网段中有多少可以通信的主机
 Comments