Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

上一讲我们曾经看到过一个gpgcheck=0,我们来稍微了解一些,仅仅是了解。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

看出GPG就是不一种对称加密,gpgcheck就是不进行签名检查。后面的enabled=1表示启用这个repo。

RPM工具管理软件包

我们上一讲使用的基本上都是yum,当然有些到官网安装的有的使用的rpm -ivh url的方式。

yum管理软件的好处就在于自动解决依赖关系,但是其实呢,yum安装软件最后还是调用的rpm。我们一般也直接用yum去安装会比较方便,不过我们还是来学一些rpm。

先来看rpm的帮助,其实主要还是学习这些选项是什么意思。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

-q一般是在查找的时候用,指的是查找某一个特定名字的包。-e是卸载的时候用的,-h就是说安装的时候会把进度条用码标线来显示,一般搭配v使用效果更佳。-i是直接安装包,也就是说rpm包里的文件释放,并且放在合适的位置。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

-U是更新。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

-v是显示更多的细节。有些额外选项下面也列出来了。rpm相对于yum来说可以说最大的不同就在于yum使用了源,而rpm没有,而yum源第一提供了很多软件,所以我们可以yum -y install httpd就可以装软件包名字是yum的软件,而rpm直接加软件名是不行的,它只有两种安装方式,一是本地安装,也就是把某个rpm包用wget或者curl下到本地,然后用rpm安装,二是后面直接加url,从网址安装,显然直接用第二种会更快。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

这里我们来了解一下软件包的命名,看到上面这个httpd软件包的全称应该是httpd.x86_64.2.4.6-80-el7.centos.1.rpm。各个部分是什么意思呢?可以用yum info看一下。

names是httpd,这个是我们直接可以yum安装的,架构是x86_64,x86是一种复杂指令集,现在还有x64,arm等,_64位是64位,也就是cpu里面的数据线是64根。软件版本是2.4.6。发行的平台是cetnos7,el是企业版的意思,后面的1是发行次数,是一个子版本,就和matlab每年都要出一个a,一个b是一个意思。80暂时不知道什么意思。

使用rpm安装需要考虑很多,一时你的操作系统版本,二是系统架构。我们都有命令可以看的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

三是考虑依赖关系,因为rpm不会帮我们自动解决依赖关系。四是rmp包的版本,因为涉及到软件的间兼容问题。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

yum当然后面也可以直接跟url,下面的例子里由于我zabbix上一讲装过了,我用了reinstall。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

因为yum解决了依赖关系以后靠的还是rpm,所以有rpm的功能也不奇怪。下面演示rpm的时候,我们得找一个有依赖关系的软件,不然体现不出来yum的优势。我们就用ntfs-3g-devel,ntfs-3g是一个可以让linux支持ntfs文件系统的软件。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们先来试试如果平台不对会如何。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

复制第一个的链接地址来试试。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

你会发现过了好久还是没有反应,当然也可能是我等的时间不够久。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们来试试这个。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

上面用了一种最麻烦的方式,就是用wge先下载下来再安装。

看到失败了,原因是依赖于ntfs-3g,但是这个没有装。我们可以用--nodeps来强行装上,这个选项就是不管三七二十一,先装上再说。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

不过你没有依赖是不可能用得了这个软件的,至少部分功能实现不了。所以说一般我们装软件还是用yum,自动解决依赖关系是真的方便,还记得安装scrapy库的时候被依赖支配的恐惧吗?需要指出的是上面先wget再rpm的话,wget下载的rpm包还在的。而rpm直接加url是不会

有这个包的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

rpm查询只能在本地的rpm数据库里面查,因为它没有repo,repo都是在yum.repo.d里面的。不过rpm查询的方式还是挺多的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

query就是查询的意思。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

看到ntfs-3g-devel虽然在yum list installed里面有,但是在rpm -q却没有找到,这大概是在安装的时候没有考虑依赖,--nodeps导致的矛盾。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

从套件中查询什么意思呢?就是查的名字是软件的安装包,而不是软件的名字。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

当然这个rpm包首先得有才行。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

yum我们可以用provides来解决第二个问题。

源码包管理

我们下面就以nginx为例来安装,这个过程当然是我故意的,因为就是要说明解决问题的方法。我们先去下载源码包。这次我们要点进去download。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

选一个右边复制链接,当然是不能选windows的了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

下载,解压(下面马上学到),然后切换路径进去。然后就要走下面的三步,首先要执行./configure。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

prefix是指定安装路径,with可以指定一些软件关联。我们先来看一下可能会出什么错误。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

首先出现的就是没有编译器错误。按照上面方法解决即可。它还可以指定user和group。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们再运行一次。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们其实是没有w这个用户的,但是它好像暂时还没有关注这个问题。先来简单了解一下pcre。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

如果你选择的with,关联里面出错的话,什么报错就yum -y install什么就对了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们再运行一次。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

再来一次。发现已经ok了,已经生成了makefile了。不知道为什么user的问题还没有发现。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

下一步就是make,编译,make会按照makefile里面的设定调c/c++编译器去编译了,这一步可能时间会长一点。make完了以后就可以make install,也就是安装了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

然后我们可以直接/home/lcl/sbin/nginx就可以启动nginx了。这个时候才报了没有w用户的错,没关系,我们建一个就行。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

我们先关闭防火墙。看一下我这个ip是多少,然后看看可以访问不能。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我这个ip是变过的,因为重装过好几次,以前是192.168.139.128后来就变成了192.168.139.129了。这是把防火墙停了的效果。是403,应该是nginx的原因。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

开了防火墙直接是这种了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

源码包安装过程还是比较复杂,但是也有好处啊,可以直接关联一些软件。

文件查找

首先要明白,我们前面学过的grep查找的并不是文件名,只是按照要求对文本的行进行过滤而已。它针对的并不是文件名。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

但是我们可以和tree结合起来实现查找文件的效果,不过这样看文件的绝对路径还是看不到。

我们可以用下面要用的一个find搭配去找。这样可以实现查找文件,效果还是不错的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

不过呢,linux里面还是有一些专门的查找文件的命令,其实上面的find就是,后面加一个grep其实是多此一举,因为find其实本身自己就有查找文件的功能,而且还很强大,下面就来学习文件查找的命令。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

第一个which我们不陌生了,它主要是用来查找命令或者说二进制文件的,它是有查找范围的,它的范围叫做PATH环境变量,以前讲在windows下python配置环境变量的时候就见到过PATH,它们的作用是一样的,就是放一些可以二进制的命令。echo $PATH可以打出来PATH里面的路径。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

linux默认的环境变量对于用户来说都是一样的,尽管普通用户的PATH里面有sbin,他如果不提权也运行不了sbin里面的命令,所以并没有什么问题。当然环境变量也是可以改的,不过我们就不在这里讲了,一百度就有,比如说https://www.cnblogs.com/qiuhong10/p/7815943.html。

不推荐乱改,除非你确信地知道自己在干什么,这么干的后果是什么。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

首先看到别名是ok的,然后我们又建立一个脚本文件(虽然后面没有后缀),但是执行的时候linux还是会以shell脚本运行。我们没有把它加入/bin之前,需要一个绝对路径才可以运行,并且which是找不到的。用root的权限把它加进去,直接1就可以运行,并且which也可以找到了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

最后最好把它删了。需要说明的一点是which可以找到又两个前提。

1是文件在PATH里。2是它必须有x权限。

能不能真正执行都无所谓,但是必须要有x权限。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

locate可以查找任意文件,不过说实话,这种方式有点麻烦。首先locate在centos里面还不是自带的需要yum -y install mlocate装一下。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

然后呢,locate查找的范围就是/var/lib/mlocate/mlocate.db这个数据库,这个数据库当然也是安上了mlocate才有的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

locate命令和which一样不需要加路径,因为其实都有自己的查找范围嘛。但是locate查找的时候,你每进行一次文件操作,比如说创建一个文件或者删除一个文件(其实拷贝,剪切都可以看做是创建文件和删除文件这两个命令的组合),就必须手动更新一次数据库,updatedb,不然数据库里面的数据不会随着你的文件操作而改变。上面的例子很好的反应了这一点。当然数据库是可以设为自动更新的,一般是在下面那个文件里面,不过这也得你自己去设置。呵呵。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

自己不设置是没有的。但是自动更新显然周期就太长了,因为你是实时地在创建和删除文件啊,那么自动更新的周期就得很短,最起码得是0.1s这个数量级的吧。下面才是今天的主角find登场了,find功能非常强大。一般我们常用的格式是

find [option] [path...] [expression] [action]。option是选项大家都很熟悉是怎么回事了,path就是查找的范围了,可以有多个,中间用空格隔开,expresion就是要查找的表达式,可以有很多种形式。action是要对查找的文件所作的动作。同时看到这些全部都有[],表示都是可选的,也就是说find就可以运行。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

那么tree和find的差别显而易见,find连隐藏文件都不放过,而tree就得加一个-a。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

find的第一种查找方式是按文件名查找。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

用通配符*和?的时候最好还是加上冒号,*的意思是可以代表任意个任意字符,?的意思是一个任意字符,和正则表达式里作为元字符的含义是不一样的。-iname是忽略大小写。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

文件大小呢,上图中的+5M是大于5M,5M就是正好5M的,-5M是小于5M的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

不过find被我们前面用/dev/zero做的一个假的977T大小的文件给骗住了,233。这后面的-ls是一个action,这个action不是我们的ls命令,而是find的一个动作参数,它在这里的作用就等价于ll。指定文件的目录深度呢,需要注意的是从指定的路径分隔开,后面有n个/则深度为n+1,拿下面的例子来说就是/etc/fstab把需要遍历的目录/去掉,后面的etc/fstab有一个/,所以深度为2,所以-maxdepth 1是找不到的,而-maxdepth 2和3都可以找到,因为maxdepth指定的深度是小于等于后面的数字的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

按照文件修改时间,atime是访问时间,mtime是文件内容修改的时间,而ctime是指文件的权限和属主,属组被修改的时间,一般我们对mtime更为关心。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

还可以按照文件的u和g来查找文件。里面的-a是指and的意思,也就是逻辑和,就是左右边的条件都得满足,可以不写,是默认的,而-o是or,是要写的。这里比较有意思的是nouser和nogroup。为什么会出现nouser和nogroup呢?

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

是因为我们删除用户的时候遗留下来的,看到删除用户c2之后,/home/c2的属主和属组都变成了uid。然后个时候/home/c2以及里面的文件就都可以用nouser和nogroup作为帅选条件找到。不过有意思的是又创建了一个c3之后/home/c2的u和g都变成了c2,这是因为c3的uid是1006。

我们再删除c3,发现/etc/group里面其实确实已经没有了1006了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

再说一下比较有意思的事情,如何查找u不是lcl的文件呢?就用到了!这个符号是not,非的意思。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

太多了,所以们只看前20行,也许你会怀疑怎么还有/home/lcl里的文件呢?

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

还可以按照文件类型去查看,参考上上上图。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

按照文件权限来查找文件有一个需要注意的地方,就是权限前加还是没加杠。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

也就是如果前面加了-表示的是只要包含这些权限的文件都算,可以多,但肯定不能少。而不加-就代表必须是775,多了的776,777都不行。不加-就认死理,而加-就比较通情达理了。当然,上面图里也算是复习了一下高级权限,权限用八进制表示其实是有四位的,后面三位我们比较熟,第一位是setuid,setgid和sticky,前面的高级权限里都有说到。setuid是4,setgid是2,sticky粘滞位是1。1000就是t---------,当然t的位置一般不在最前面。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

find后面的动作参数默认是-print也就是打印。-ls已经解释过,-delete是删除,-exec和-ok是相当于扩展动作的,后面跟的是命令。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

这里面可能你们对上图中划红线的地方比较疑惑,我们先来解释,{}代替的是前面find得到的内容,后面的\;可以认为是结尾的格式,都是必须有的,不然会报错。-ok和-exec的区别是会有提示,会有交互,但是我不知道-ok为什么没有成功,我去man了一下,找到了奇葩的原因

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

。。。。。。。。。我们用-exec就是了。

文件的压缩和解压

windows里面的压缩解压我们很熟悉了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

上面的例子我们看到用bandzip把毕业设计压缩成了一个毕业设计.zip。解压相信大家也很熟了,根本不需要再演示。那么我们先来看一下linux里面如何压缩。这里先补充一个知识,我们看目录中存放的文件总大小,可以用du -sh,可以用ll -h,但是结果却不太一样,下面的7.1和9.5差的还不是很大。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

但是看到35和1.2差的还是很大的。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

这是怎么导致的呢?参考了https://blog.csdn.net/mtawaken/article/details/8491413

https://blog.csdn.net/ysdaniel/article/details/6922055

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

那么我们应该看哪一个?一般来说还是应该看du -sh,当然sparse file肯定是不适用了。

我们试着压缩一下/root里面的文件,使用gzip,-r是递归的意思。别gzip -r /etc啊,会很惨,不过后面gunzip -r /etc回来就可以了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

看到结果是什么呢?看到为什么出来这么多个压缩包啊,这和windows不一样啊。这是因为其实windows里的压缩软件一般都会自动地做一步,叫做归档或者叫打包。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

打包很形象啊,就像什么呢?工厂生产出来的一盒一盒牛奶,装到一个箱子里面。打包之后的文件大小略大于被打包文件大小的总和,想想牛奶箱也能理解,打包是为了传输方便,想想也是,是一箱牛奶好拿呢,还是20盒散装的牛奶好拿呢?(虽然我们把文件打包传输的原因和这个不太一样)。压缩呢,就是让文件变得小一点,这个就拿喝完的牛奶盒为例吧,你可以把它踩得很扁,明显占用空间小了。当然或者比喻还是有点问题,因为文件里面是有内容的,但是总不能拿没喝过的牛奶去踩吧,233。在linux里面呢,打包的命令是tar。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

上面的demo我们就不演示了,主要是想说明虽然文件大小很小,但是数量很多的话,传输起来还是没有打包起来作为一个大文件传输的快,有兴趣的同学可以到https://www.bilibili.com/video/av18740388/?p=25&t=2970

55分开始看一看。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

下面主要是说明tar的一些选项。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

-c就是打包的意思下面还有对应的解包,-t仅仅是列出包里面的内容,而没有其它操作。-x就是解包。-C是指定解压解包路径,至于打包压缩,tar的打包压缩文件的存储路径是当前目录,你可以cd到你想要的目录。-f是指定打包或者解包后的文件名。-j是把包压缩成bzip2格式或者解压bzip2的包,cj搭配就是压缩的,xj搭配就是解压,也就是说tar命令可以直接打包压缩或者解压解包一条龙服务。-J的格式是xz。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

-v还是和以前一样,会在屏幕上打印过程。-z的格式是zip。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

下面来举一个例子。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

cjf不能运行是因为bzip2没有装。装完以后就可以了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

这些压缩的名字可以随便取,我这么取是因为人可以辨别出压缩文件的压缩格式,也比较规范。看到不同的压缩格式压缩率不一样,xz压缩的比较狠,但是压缩解压时间就会比较长了。

一般gzip的11M和原来的35M比已经算是很小了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

一般我们直接用最下面红字的那种就行,不指定g,j,J会自动判断。解压的文件都放在etc文件夹里(当然这么说是不对的,因为etc目录里存的这是文件的索引信息,文件是存在磁盘上的)。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

但是zip格式的没有办法解压,也很简单。yum -y install unzip就行。然后可以按照上面的命令解压了。

打包压缩传输要比多个小文件传输速度要快得多,还能更快吗?答案是肯定的。我们来看案例3,蓝色的-(这个位置原来是名字)可以理解为内存,也就是不写进磁盘,我们都知道内存的读写速度要比磁盘快得多。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

我们来试一下。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

案例四给出了一种远距离传输的一种方法,用nc,这个nc需要我们yum -y install nc装一下。

这种方式需要有某个端口,上面的8888是一个端口,如果这个端口没有打开,可以用常用的80端口,这种方式不需要输密码和解压(虽然有解压命令),速度比较快,这种方式需要先在接受的地方先设置监听,然后再传输数据,并且数据传输完毕,监听的进程也就结束了。

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

 

Linux学习笔记之十一(软件管理下,文件查看和压缩解压)

 

有兴趣的可以去看 https://www.bilibili.com/video/av18740388/?p=25

在第66分钟。