Linux tar gzip bzip zip打包 压缩 解压 命令

每次拿到压缩文件都不知道怎么解包,还在拿着后缀去百度?快快收下这篇文章吧,涵盖所有压缩格式,一站解决。

打包压缩格式

  • .zip
  • .gz
  • .bz2
  • .tar
  • .tar.gz
  • .tar.bz2

.tar格式

打包

$ tar -cvf 打包输出文件 源文件or文件目录
  • 参数说明
-c : 打包
-v或--verbose: 显示打包过程
-f : 指定打包后的文件名

解压文件

$ tar -xvf 打包文件

## 查看内部有啥文件
$ tar -tv 打包文件
  • 参数说明
-x或--extract或--get: 从备份文件中还原文件;
-v : 展示过程
-t或--list : 列出备份文件的内容;

.gz 格式

压缩文件

## 注意:源文件会消失!
$ gzip 源文件

## 压缩文件,源文件保留
$ gzip -c -3 源文件 > 压缩文件.gz

## 递归的压缩目录
$ gzip -rv 目录
  • 参数说明
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;

解压缩

$ gzip -d 压缩文件

$ gunzip 压缩文件

## 详细显示中压缩的文件的信息,并不解压
$ gzip -l *

## 把当前目录中中每个压缩的文件解压,并列出详细的信息
$ gzip -dv ./*
  • 参数说明
-l或——list:列出压缩文件的相关信息;
-d或--decompress或----uncompress:解开压缩文件;

gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。

.tar.gz 格式

其实,.tar.gz 格式是先将文件或目录打包文 .tar 格式,再压缩为 .gz 格式

压缩

$ tar -zcvf 压缩文件名.tar.gz 源文件

参数说明

-z或--gzip或--ungzip:通过`gzip`指令处理备份文件; 也就是 `.tar.gz`

解压

$ tar -zxvf 压缩包名.tar.gz

参数说明:

-z : 解压缩
-t : 查看压缩保内文件,但是不解压缩

.bz2 格式

压缩

## 源文件会移除
$ bzip2 源文件

## 保留源文件
$ bzip2 -k 源文件
  • 参数说明
-d或——decompress:执行解压缩;
-c或——stdout:将压缩与解压缩的结果送到标准输出;
-k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;

bzip2 不能压缩目录

解压缩

## 解压缩,默认不保留压缩文件。加 -k 可保留压缩文件
$ bzip2 -d 压缩文件

## 解压到标准输出:
$ bzip2 -dc filename.bz2 > filename

## 检查展示压缩文件内容,不解压
$ bzip2 -tv zipFile.bz2
  • 参数说明
-d或——decompress:执行解压缩;
-t或——test:测试.bz2压缩文件的完整性;
-v或——verbose:压缩或解压缩文件时,显示详细的信息;

.tar.bz2 格式

.tar.bz2 格式是先将文件或目录打包文 .tar 格式,再压缩为 .bz2 格式

压缩

tar -jxvf 压缩包名.tar.bz2 源文件or文件目录
  • 参数说明
-j : 使用`bzip2`处理,压缩为 .tar.bz2 格式

解压

$ tar -jxvf 压缩包名.tar.bz2
  • 参数说明:
-x : 解压
-t : 查看压缩保内文件,但是不解压缩
-C : 指定解压的目录(注意,该选项必须放在后面)

.zip 格式

一般Linux没有默认安装 zip 软件,需要手动安装 zip 以及 unzip 两个软件!

## debian,ubuntu
$ apt-get install zip unzip -y

## centos
$ yum install zip unzip -y

## mac os 目测有预装

压缩

$ zip 压缩文件名.zip 源文件

## 压缩目录
$ zip -r 压缩文件名.zip 文件夹目录

解压缩

$ unzip 压缩文件 [-d <文件解压缩后所要存储的目录>]

参考

  • https://man.linuxde.net/tar
  • https://man.linuxde.net/bzip2
  • https://segmentfault.com/a/1190000014479275

PHP拓展 mysql、mysqli、pdo_mysql 区别与选择

今天是2020年,PHP连接MySQL有什么接口呢?还在用mysql函数?试试mysqli、pdo_mysql吧?那mysqli和pdo_mysql又有什么异同呢?来看看

PHP_mysql

PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension

为了让自己强大起来,mysql 自己为安全也做了很多努力。以前例的 SQL 叙述来说,在sql 语句中使用 变量 直接拼接 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及
mysql_real_escape_string()解决此问题。

php_mysqli

PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性.

MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点, 就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。

PDO_mysql

其功能类似于JDBC、ODBC、DBI之类接口。

PDO是PHP5.1之后才支持的,他为访问数据库采用了一致性的接口,有非常多的操作却是MySQL扩展库所不具备的:

1). PDO真正的以底层实现的统一接口数库操作接口
2). PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
3). PDO是php官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级

过渡

那我自己举例,我最早接触的就是php_mysql 拓展,就是一个个的函数,封装一下就面向对象了。后来又听人说mysqli更好,更安全。发现从mysql过渡到mysqli,就是find mysql, repalce mysqli 这么简单。而PDO呢,对外提供的是完全的面向对象的API,而我们mysqli 同时对外暴露了 函数式和 面向对象 API。所以,你用mysqli面向对象那种方式,再切换到PDO 也很容易。

用PDO的好处是,PDO支持多种数据库,而MySQLi只支持MySQL,一但你掌握了就你可以使用连接多种数据库。

bind

php_mysql不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及 mysql_real_escape_string()来解决这个问题,不过这麽一搞,整个叙述会变得複杂且丑陋,而且如果栏位多了,可以想见会是怎样的 情形.

在 PHP-MySQLi 中有了不少进步,除了透过 Bind Column 来解决上述问题,而且也多援 Transaction, Multi Query ,

并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范例的写法) 和 Procedural style

直观对比

特性、指标 PHP的mysqli扩展 PDO (使用PDO MySQL驱动和MySQL Native驱动) PHP的mysql扩展
引入的PHP版本 5.0 5.0 3.0之前
PHP5.x是否包含
MySQL开发状态 活跃 在PHP5.3中活跃 仅维护
在MySQL新项目中的建议使用程度 建议 建议 不建议
API的字符集支持
服务端prepare语句的支持情况
客户端prepare语句的支持情况
存储过程支持情况
多语句执行支持情况 大多数
是否支持所有MySQL4.1以上功能 大多数
参数命名 不支持 支持 不支持
API 编程范式 OOP + 函数式 OOP 函数式
对象映射(Object Mapping) 不支持 支持 不支持

结语

其实从php_mysql, mysqli,pdo_mysql 得过渡就可以看到php自己的设计哲学,不要以很强硬的方式推倒以前的,要慢慢过渡,设计规则让用户慢慢适应。php_mysql->mysqli->pod_mysql, 从过程编码到过程和OOP兼得的mysqli,再到纯OOP的pdo_mysql. 慢慢得大家都用pdo了,mysql也淡出了php的版本。