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.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 | [root@localhost ~]# cd /usr/local/ |
如果切换用户所在目录,那么命令提示符中的“~”会变成用户当前所在目录的最后一个目录(不显示完整的所在目录/usr/local/,只显示最后一个目录local)。
2.1.2命令的基本格式
Linux命令的基本格式为:
1 | [root@localhost ~]# 命令 [选项] [参数] |
命令格式中的[]代表可选项,也就是有些命令可以不写选项或参数,也能执行。下面用Linux中最常见的ls命令来解释一下命令的格式。如果按照命令的分类,那么ls命令应该属于目录操作命令。
1 | [root@localhost ~]# ls |
1)选项的作用
ls命令之后不加选项和参数也能执行,不过只能执行最基本的功能,即显示当前目录下的文件名。那么加入一个选项,会出现什么结果?
1 | [root@localhost ~]# ls -l |
如果加一个“-l”选项,则可以看到显示的内容明显增多了。“-l”是长格式(long list)的意思,也就是显示文件的详细信息。至于“-l”选项的具体含义,我们稍后再详细讲解。可以看到选项的作用是调整命令功能。如果没有选项,那么命令只能执行最基本的功能;而一旦有选项,则可以显示更加丰富的数据。
Linux的选项又分为短格式选项(-l)和长格式选项(—all)。短格式选项是英文的简写,一般用一个减号调用,例如:
1 | [root@localhost ~]# ls -l |
而长格式选项是英文完整单词,一般用两个减号调用,例如:
1 | [root@localhost ~]# ls --all |
一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项。当然也有例外,比如ls命令的短格式选项-l就没有对应的长格式选项。所以具体的命令选项可以通过后面我们要学习的帮助命令来进行查询。
2)参数的作用
参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作。例如:
1 | [root@localhost ~]# ls -l anaconda-ks.cfg |
但是为什么一开始ls命令可以省略参数?那是因为有默认参数。命令一般都需要加入参数,用于指定命令操作的对象是谁。如果可以省略参数,则一般都有默认参数。例如:
1 | root@localhost ~]# ls |
这个ls命令后面没有指定参数,默认参数是当前所在位置,所以会显示当前目录下的文件名。
总结一下:命令的选项用于调整命令功能,而命令的参数是这个命令的操作对象。
2.2 目录操作命令
2.2.1 ls命令
ls是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:
●命令名称:ls。
●英文原意:list。
●所在路径:/bin/ls。
●执行权限:所有用户。
●功能描述:显示目录下的内容。
1)命令格式
1 | [root@localhost ~]#ls [选项] [文件名或目录名] |
2)常见用法
“-l”选项
1 | [root@localhost ~]# ls -l |
我们已经知道“-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 | [root@localhost ~]# cd /usr/local/src/ |
通过命令提示符,我们可以确定当前所在目录已经切换。
例2:简化用法
cd命令可以识别一些特殊符号,用于快速切换所在目录,这些符号如表1所示。
“cd ~”命令可以快速回到用户的家目录。
1 | [root@localhost src]# cd ~ |
cd命令直接按回车键也是快速切换到家目录
1 | [root@localhost ~]# cd /etc/ |
再试试“cd -”命令。
1 | [root@localhost ~]# cd /usr/local/src/ |
再来试试“.”和“..”。
1 | [root@localhost ~]# cd /usr/local/src/ |
2.2.3 mkdir命令
mkdir是创建目录的命令,其基本信息如下。
●命令名称:mkdir。
●英文原意:make directories。
●所在路径:/bin/mkdir。
●执行权限:所有用户。
●功能描述:创建空目录。
1)命令格式
1 | [root@localhost ~]# mkdir [选项] 目录名 |
mkdir也是一个非常简单的命令,其主要作用就是新建一个空目录。
2)常见用法
例1:建立目录
1 | [root@localhost ~]#mkdir cangls |
我们建立一个名为cangls的目录,通过ls命令可以查看到这个目录已经建立。
例2:递归建立目录
如果想建立一串空目录:
1 | [root@localhost ~]# mkdir lm/movie/jp/cangls |
这条命令报错,没有正确执行。这是因为这4个目录都是不存在的,mkdir默认只能在已经存在的目录中建立新目录。而如果需要建立一系列的新目录,则需要加入“-p”选项,递归建立才可以。例如:
1 | [root@localhost ~]# mkdir -p 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 | [root@localhost ~]# mkdir test |
这个命令比较“笨”,所以我们不太常用。后续我们不论删除的是文件还是目录,都会使用rm命令。
2.3 文件操作命令
2.3.1 touch命令
touch的意思是触摸,如果文件不存在,则会建立空文件;如果文件已经存在,则会修改文件的时间戳(访问时间、数据修改时间、状态修改时间都会改变)。千万不要把touch命令当成新建文件的命令,牢牢记住这是触摸的意思。这个命令的基本信息如下。
●命令名称:touch。
●英文原意:change file timestamps。
●所在路径:/bin/touch。
●执行权限:所有用户。
●功能描述:修改文件的时间戳。
1)命令格式
1 | [root@localhost ~]# touch [选项] 文件名或目录名 |
2)常见用法
1 | [root@localhost ~]#touch bols |
如果文件不存在,则会建立文件。
1 | [root@localhost ~]#touch bols |
2.3.2 cat命令
cat命令用看来查看文件内容,这个命令地基本信息如下。
●命令名称:cat。
●英文原意:concatenate files and print on the standard output。
●所在路径:/bin/cat。
●执行权限:所有用户。
●功能描述:合并文件并打印输出到标准输出。
1)命令格式
1 | [root@localhost ~]# cat [选项] 文件名 |
2)常见用法
cat命令用于查看文件内容,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。不过Linux可以使用“PgUp+上箭头”向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。所以cat命令适合查看不太大的文件。当然,在Linux中是可以使用其他的命令或方法来查看大文件的,我们以后再来学习。cat命令本身非常简单,我们可以直接查看文件的内容。例如:
1 | [root@localhost ~]# cat anaconda-ks.cfg |
而如果使用“-n”选项,则会显示行号。例如:
1 | [root@localhost ~]# cat -n anaconda-ks.cfg |
如果使用“-A”选项,则相当于使用了“-vET”选项,可以查看文本中的所有隐藏符号,包括回车符($)、Tab键(^I)等。例如:
1 | [root@localhost ~]# cat -A anaconda-ks.cfg |
2.4 目录和文件都能操作的命令
2.4.1 rm命令
rm是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。
●命令名称:rm。
●英文原意:remove files or directories。
●所在路径:/bin/rm。
●执行权限:所有用户。
●功能描述:删除文件或目录。
1)命令格式
1 | [root@localhost ~]# rm [选项] 文件或目录 |
2)常见用法
例1:基本用法
rm命令如果任何选项都不加,则默认执行的是“rm -i文件名”,也就是在删除一个文件之前会先询问是否删除。例如:
1 | [root@localhost ~]# touch cangls |
例2:删除目录
如果需要删除目录,则需要使用“-r”选项。例如:
1 | [root@localhost ~]# mkdir -p /test/lm/movie/jp/ |
大家会发现,如果每级目录和每个文件都需要确认,那么在实际使用中简直是灾难!
例3:强制删除
如果要删除的目录中有1万个子目录或子文件,那么普通的rm删除最少需要确认1万次。所以,在真正删除文件的时候,我们会选择强制删除。例如:
1 | [root@localhost ~]# mkdir -p /test/lm/movie/jp/ |
加入了强制功能之后,删除就会变得很简单,但是需要注意:
●数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如extundelete等。但要注意,数据恢复很难恢复完整的数据,一般能恢复70%~80%就很难得了。所以,与其把宝压在数据恢复上,不如养成良好的操作习惯。
●虽然“-rf”选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用“-rf”选项。
2.4.2 cp命令
cp是用于复制的命令,其基本信息如下:
●命令名称:cp。
●英文原意:copy files and directories。
●所在路径:/bin/cp。
●执行权限:所有用户。
●功能描述:复制文件和目录。
1)命令格式
1 | [root@localhost ~]# cp [选项] 源文件 目标文件 |
2)常见用法
例:基本用法
cp命令既可以复制文件,也可以复制目录。我们先来看看如何复制文件,例如:
1 | [root@localhost ~]# touch cangls |
如果需要改名复制,则命令如下:
1 | [root@localhost ~]# cp cangls /tmp/bols |
如果复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为cp命令默认执行的是“cp -i”的别名,例如:
1 | [root@localhost ~]# cp cangls /tmp/ |
接下来我们看看如何复制目录,其实复制目录只需使用“-r”选项即可,例如:
1 | [root@localhost ~]# mkdir movie |
2.4.3 mv命令
mv是用来剪切的命令,其基本信息如下。
●命令名称:mv。
●英文原意:move (rename) files。
●所在路径:/bin/mv。
●执行权限:所有用户。
●功能描述:移动文件或改名。
1)命令格式
1 | [root@localhost ~]# mv [选项] 源文件 目标文件 |
2)常见用法
例1:移动文件或目录
1 | [root@localhost ~]# mv cangls /tmp/ |
如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为mv命令默认执行的也是“mv -i”的别名,例如:
1 | [root@localhost ~]# touch cangls |
例2:强制移动
之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。如果我们确认需要覆盖已经存在的同名文件,则可以使用“-f”选项进行强制移动,这就不再需要用户手工确认了。例如:
1 | [root@localhost ~]# touch cangls |
例3:不覆盖移动
既然可以强制覆盖移动,那也有可能需要不覆盖的移动。如果需要移动几百个同名文件,但是不想覆盖,这时就需要“-n”选项的帮助了。例如:
1 | [root@localhost ~]# ls /tmp/*ls |
例4:改名
如果源文件和目标文件在同一个目录中,那就是改名。例如:
1 | [root@localhost ~]# mv bols lmls |
目录也可以按照同样的方法改名。
例5:显示移动过程
如果我们想要知道在移动过程中到底有哪些文件进行了移动,则可以使用“-v”选项来查看详细的移动信息。例如:
1 | [root@localhost ~]# touch test1.txt test2.txt test3.txt |
2.5 帮助命令
2.5.1 man命令
man是最常见的帮助命令,也是Linux最主要的帮助命令,其基本信息如下。
●命令名称:man。
●英文原意:format and display the on-line manual pages。
●所在路径:/usr/bin/man。
●执行权限:所有用户。
●功能描述:显示联机帮助手册。
1)命令格式
1 | [root@localhost ~]# man [选项] 命令 |
man命令比较简单,下面举个例子:
1 | [root@localhost ~]# man ls |
这就是man命令的基本使用方法,非常简单。但是帮助命令的重点不是命令如何使用,而是帮助信息应该如何查询。这些信息较多,下面将详细讲解。
2)man命令的使用方法
还是查看ls命令的帮助,我们看看这个帮助信息的详细内容。
1 | [root@localhost ~]# man ls |
虽然不同命令的man信息有一些区别,但是每个命令man信息的整体结构皆如演示这样。在帮助信息中,我们主要查看的就是命令的格式和选项的详细作用。
不过大家请注意,在man信息的最后,可以看到还有哪些命令可以查看到此命令的相关信息。这是非常重要的提示,不同的帮助信息记录的侧重点是不太一样的。所以,如果在man信息中找不到想要的内容,则可以尝试查看其他相关帮助命令。
3)man命令的快捷键
man命令的快捷键可以参考表2。
2.5.2 info命令
info命令也可以获取命令的帮助。和man命令不同的是,info命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。大家可以把info帮助信息看成一部独立的电子书,所以每个命令的帮助信息都会和书籍一样,拥有章节编号。例如:
1 | [root@localhost ~]# info ls |
可以看到,ls命令的帮助只是整个info帮助信息中的第10.1节。在这个帮助信息中,如果标题的前面有“*”符号,则代表这是一个可以进入查看详细信息的子页面,只要按下回车键就可以进入。例如:
1 | [root@localhost ~]# info ls |
这是ls命令的info帮助信息中可以查看详细的子页面的标题。info命令主要是靠快捷键来进行操作的,我们来看看常用的快捷键,如表3所示。
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 | [root@localhost ~]# zip [选项] 压缩包名 源文件或源目录 |
zip压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以方便解压缩时使用。举个例子:
1 | [root@localhost ~]# zip ana.zip anaconda-ks.cfg |
所有的压缩命令都可以同时压缩多个文件,例如:
1 | [root@localhost ~]# zip test.zip install.log install.log.syslog |
如果想要压缩目录,则需要使用“-r”选项,例如:
1 | [root@localhost ~]# mkdir dir1 |
2)“.zip”格式的解压缩命令
“.zip”格式的解压缩命令是unzip,其基本信息如下。
●命令名称:unzip。
●英文原意:list, test and extract compressed files in a ZIP archive。
●所在路径:/usr/bin/unzip。
●执行权限:所有用户。
●功能描述:列表、测试和提取压缩文件中的文件。
命令格式如下:
1 | [root@localhost ~]# unzip [选项] 压缩包名 |
不论是文件压缩包,还是目录压缩包,都可以直接解压缩,例如:
1 | [root@localhost ~]# unzip dir1.zip |
也可以手工指定解压缩位置,例如:
1 | [root@localhost ~]# unzip -d /tmp/ ana.zip |
2.6.2 “.gz”格式
1)“.gz”格式的压缩命令
“.gz”格式是Linux中最常用的压缩格式,使用gzip命令进行压缩,其基本信息如下。
●命令名称:gzip。
●英文原意:compress or expand files。
●所在路径:/bin/gzip。
●执行权限:所有用户。
●功能描述:压缩文件或目录。
这个命令的格式如下:
1 | [root@localhost ~]# gzip [选项] 源文件 |
例1:基本压缩
gzip压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可:
1 | [root@localhost ~]# gzip install.log |
例2:保留源文件压缩
在使用gzip命令压缩文件时,源文件会消失,从而生成压缩文件。
1 | [root@localhost ~]# gzip -c anaconda-ks.cfg anaconda-ks.cfg.gz |
例子3:压缩目录
我们可能会想当然地认为gzip命令可以压缩目录:
1 | [root@localhost ~]# mkdir test |
在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 | [root@localhost ~]# bzip2 [选项] 源文件 |
值得注意的是,gzip只是不会打包目录,但是如果使用“-r”选项,则可以分别压缩目录下的每个文件;而bzip2命令则根本不支持压缩目录,也没有“-r”选项。
例1:基本压缩命令
在压缩文件命令后面直接指定源文件即可,例如:
1 | [root@localhost ~]# bzip2 anaconda-ks.cfg |
这个压缩命令依然会在压缩的同时删除源文件。
例2:压缩的同时保留源文件
bzip2命令可以直接使用“-k”选项来保留源文件,而不用像gzip命令一样使用输出重定向来保留源文件。例如:
1 | [root@localhost ~]# bzip2 -k install.log.syslog |
2)“.bz2”格式的解压缩命令
“.bz2”格式可以使用“bzip2 -d压缩包”命令来进行解压缩,也可以使用“bunzip2压缩包”命令来进行解压缩。先看看bunzip2命令的基本信息。
●命令名称:bunzip2。
●英文原意:a block-sorting file compressor。
●所在路径:/usr/bin/bunzip2。
●执行权限:所有用户。
●功能描述:.bz2格式的解压缩命令。
命令格式如下:
1 | [root@localhost ~]# bunzip2 [选项] 源文件 |
先试试使用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 | [root@localhost ~]# tar [选项] [-f 压缩包名] 源文件或目录 |
例1:基本使用
现在先打包一个文件练练手。
1 | [root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg |
选项“-cvf”一般是习惯用法,记住打包时需要指定打包之后的文件名,而且要用“.tar”作为扩展名。那打包目录呢?我们也试试:
1 | [root@localhost ~]# ll -d test/ |
tar命令也可以打包多个文件或目录,只要用空格分开即可。例如:
1 | [root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/ |
例2:打包压缩目录
我们已经解释过了,压缩命令不能直接压缩目录,我们就先用tar命令把目录打成数据包,然后再用gzip命令或bzip2命令压缩。例如:
1 | [root@localhost ~]# ll -d test test.tar |
2)“.tar”格式的解打包命令
“.tar”格式的解打包也需要使用tar命令,但是选项不太一样。命令格式如下:
1 | [root@localhost ~]# tar [选项] 压缩包 |
其实解打包和打包相比,只是把打包选项“-cvf”更换为“-xvf”。我们来试试:
1 | [root@localhost ~]# tar -xvf anaconda-ks.cfg.tar |
如果使用“-xvf”选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用“-C(大写)”选项。例如:
1 | [root@localhost ~]# tar -xvf test.tar -C /tmp |
如果只想查看文件包中有哪些文件,则可以把解打包选项“-x”更换为测试选项“-t”。例如:
1 | [root@localhost ~]# tar -tvf test.tar |
2.6.5 “.tar.gz”和“.tar.bz2”格式
你可能会觉得Linux实在太不智能了,一个打包压缩,居然还要先打包成“.tar”格式,再压成“.tar.gz”或“.tar.bz2”格式。其实tar命令是可以同时打包压缩的,前面的讲解之所以把打包和压缩分开,是为了让大家了解在Linux中打包和压缩的不同。
使用tar命令直接打包压缩。命令格式如下:
1 | [root@localhost ~]# tar [选项] 压缩包 源文件或目录 |
例1:压缩与解压缩“.tar.gz”格式
我们先来看看如何压缩“.tar.gz”格式。
1 | [root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/ |
解压缩也只是在解打包选项“-xvf”前面加了一个“-z”选项。
1 | [root@localhost ~]# tar -zxvf tmp.tar.gz |
前面讲的选项“-C”用于指定解压位置、“-t”用于查看压缩包内容,在这里同样适用。
例2:压缩与解压缩“.tar.bz2”格式
和“.tar.gz”格式唯一的不同就是“-zcvf”选项换成了“-jcvf”。
1 | [root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/ |
把文件直接压缩成“.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 | [root@localhost ~]# ifconfig |
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 | [root@localhost ~]# ping [选项] IP |
例1:探测与指定主机通信
1 | [root@localhost ~]# ping 192.168.103.151 |
Linux是一个比较实在的操作系统,这个ping命令如果不使用“Ctrl+C”快捷键强行中止,就会一直ping下去,直到天荒地老……
例2:指定ping的次数
既然ping这么“实在”,如果不想一直ping下去,则可以使用“-c”选项指定ping的次数。例如:
1 | [root@localhost ~]# ping -c 3192.168.103.151 |
例3:探测网段中的可用主机
在ping命令中,可以使用“-b”选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址地进行探测。例如:
1 | [root@localhost ~]# ping -b -c 3192.168.103.255 |
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.