Linux 04打包、压缩、命令执行判断、rpm、yum、sed及其他

目录

压缩和打包概念

压缩:

打包:

Linux常见的压缩文件后缀名:

压缩命令 ---  gzip:

bzip2:

查看压缩文件中的内容:

 打包、解包命令

tar:

软件管理-RPM

优点:

缺点:

默认路径:

安装:

查询:

卸载:

RPM 升级与更新 

Centos7.5通过rpm安装mysql

1,安装环境查看

2,下载安装rpm包

3,安装

4,清理mysql-libs

软件管理-YUM

yum的查询:

yum的安装:

yum的卸载:

yum的更新:

yum客户端运行机制

更换阿里的centos7yum源

RPM和YUM的取舍

数据重定向

命令执行判断

linux其他常用命令

sed:


压缩和打包概念

压缩:

指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。

打包:

指将多个文件(或目录)合并成一个文件,方便传递或部署。

在Linux系统中,文件的后缀名不重要,但是针对于压缩文件的后缀名是必须的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。

Linux常见的压缩文件后缀名:

*.gz 

gzip程序压缩的文件

*.bz2

bzip2 程序压缩的文件

*.tar 

tar命令打包的数据,并没有压缩过

*.tar.gz 

tar程序打包的文件,并且经过 gzip 的压缩 

*.tar.bz2

tar程序打包的文件,并且经过 bzip2 的压缩

压缩命令 ---  gzip:

压缩/解压命令

选项:

-c :

将压缩的数据输出到标准输出(stdout)上

-d :

解压缩

-t :

可以用来检验一个压缩文件的一致性,看看文件有无错误

-v :

可以显示出原文件/压缩文件的压缩比等信息

-(1,2,...,9):

压缩等级,1最快,但是压缩比最差;9最慢,但是压缩比最好,默认是6。

-l :

查看压缩文件的压缩比: gzip –l  *.gz

案例:

cp /root/install.log /home/gzip

1,gzip -c install.log //将压缩的数据输出到标准输出

2,gzip –v install.log  //压缩完显示

这时发现源文件不在了,如果想保留源文件,可以用数据重导向技术

3,gzip -d install.log.gz  //解压

4,gzip -c install.log > install.log.gz

5,gzip -t  install.log.gz    //检查文件是否有误

6,gzip -c9v install.log    //提高压缩比(文件如果本身很小可能体现不出来)

练习:

在/tmp文件夹下创建part1/gzip

将/root/anaconda-ks.cfg文件拷贝到/tmp/part1/gzip

将拷贝后的文件进行gzip压缩,并显示压缩信息。

将压缩后文件的名称改为mygzip01.gz

bzip2

压缩/解压命令:

选项:

-c :

将压缩的过程产生的数据输出到标准输出(stdout)

-d :

解压缩的参数

-k :

保留源文件,而不会删除原始的文件 ,压缩完会自动生成压缩文件

-v :

可以显示出原文件/压缩文件案的压缩比等信息;

-(1,2,...,9):

与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快

gzip拥有更快的压缩性能。

bzip2拥有更高的压缩比。

单纯从压缩比方面来说,那么bzip2 > gzip > compress

查看压缩文件中的内容:

cat:可以用来查看文本文件中的内容。

zcat:可以用来查看gzip算法压缩的压缩文件内容。

bzcat:可以用来查看bzip2算法压缩的压缩文件内容。

 打包、解包命令

tar

可以将一个文件/夹打包成一个文件。可以结合gzip、bzip2的算法对包文件进行相应的压缩和解压。

语法:

压缩: tar [选项] newFileName.tar.gz sourceFileName

解压: tar [选项] fileName.tar.gz [-C /path]

选项:

-c :

建立打包文件,

-t :

查看打包文件的内容含有哪些文件

-x :

解打包或解压缩的功能,可以搭配-C(大写)在指定目录解开

-j :

通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2

-z :

通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz

-v :

在压缩/解压缩的过程中,将正在处理的文件名显示出来

-f filename:

-f 后面跟处理文件的全名称(路径+文件名+后缀名)

-C 目录:

这个选项用在解压的时候,若要在特定目录解压,可以使用这个选项

注:使用命令进行打包、压缩的时候,使用了什么算法,文件后缀名就一定要与其对应。

案例:

压缩:

1、使用gzip的算法进行打包压缩。

# bash

tar -zcvf install.log.tar.gz install.log

注意tar的语法,tar -zcvf       newFile      sourceFile

2、使用bzip2的算法进行打包压缩。

# bash

tar -jcvf install.log.tar.bz2 install.log

3、如果想要压缩指定目录中的内容时,可以考虑使用绝对路径。

# bash   tar -zcvf [path]/newFileName.tar.gz [path]/sourceFile

解压:

1、将一个压缩包文件解压到当前目录下

# bash    tar -zxvf install.log.tar.gz

执行完成之后,文件会在当前的目录下。

2、将一个压缩包文件解压到指定目录下

# bash    tar -zxvf install.log.tar.gz -C /

3、只解压包中的某个文件

# bash    tar -zxvf etc.tar.gz etc/shells

4、配置jdk环境变量:

# bash    tar -zxvf jdk-8u131-linux-x64.tar.gz

cd jdk1.8.0_131

pwd    # 复制路径

vim /etc/profile     # profile文件是系统环境变量的配置文件

在该文件的最后一行添加内容:

export JAVA_HOME=[path]

export PATH=$JAVA_HOME/bin:$PATH

保存退出

source /etc/profile

使环境变量生效

  

软件管理-RPM

最初只有.tar.gz的打包文件,用户必须编译每个他想在Linux上运行的软件。用户们普遍认为系统很有必要提供一种方法来管理这些安装在机器上的软件包,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。稍后RedHat才决定开发自己的“rpm”包管理系统。

优点:

自带编译后的文件,免除用户对软件编译的过程

可以自动检测文件系统(硬盘)的容量、系统的版本。避免软件被错误的安装。

自带软件的版本信息、帮助文档、用途说明等信息。

缺点:

无论安装还是卸载,RPM都有一个恶心人的依赖关系。

安装的软件需要依赖,那么优先安装依赖。

卸载的软件存在依赖,那么优先卸载依赖。

默认路径:

/etc   

一些配置文件放置的目录,例如/etc/crontab

/usr/bin

一些可执行文件

/usr/lib  

一些程序使用的动态链接库

/usr/share/doc

一些基本的软件使用手册与说明文件

/usr/share/man

一些man page(Linux命令的随机帮助说明)文件

安装:

语法:rpm -ivh packageName.rpm

选项:

i

表示安装

v

表示处理过程

h

显示处理进度(进度条)

案例:

软件包在资料中提供:

X:\课件V4.0提供的资料\rpm\

安装软件:

单个安装:

# bash

rpm -ivh pack1.rpm

多个安装:

# bash

rpm -ivh pack1.rpm pack2.rpm *.rpm

安装网络上的RPM包

# bash

rpm -ivh "https://网络地址/package.rpm"

查询:

rpm -[选项]

选项:

-q :

仅查询,后面接的软件名称是否有安装

-qa :

列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!

-ql :

列出该软件所有的文件与目录所在完整文件名 !!

-qc :

列出该软件的所有配置文件 !

-qd :

列出该软件的所有说明文件

-qR :

列出和该软件有关的相依软件所含的文件

案例1:查找是否安装jdk

# rpm -qa |grep jdk

案例2:查找所有系统已经安装的包,并只查看前3个

# rpm -qa |head  -n 3

案例3:查询lrzsz所包含的文件及目录

# rpm -ql lrzsz

案例4:查看lrzsz包的相关说明

# rpm -qi lrzsz

列出iptables的配置文件

# rpm -qc iptables

案例7:查看apr需要的依赖

# rpm -qR apr

卸载:

rpm -e package_Name   # package_Name需要通过qa的选项来查询出来。

强制卸载 --nodeps

RPM 升级与更新 

rpm -Uvh <package_name> (不管有没有都安装最新版)

-Uvh后面接的软件如果没有安装过, 系统会直接安装,若后面接的软件安装过但版本较旧,则更新至新版

[root@localhost soft]# rpm -Uvh jdk-8u111-linux-x64.rpm

Preparing...                ########################################### [100%]

package jdk1.8.0_111-2000:1.8.0_111-fcs.x86_64 is already installed

rpm -Fvh <pacakge_name> (只有安装才更新)

-Fvh如果后面接的软件并未安装到Linux系统上,则该软件不会被安装,只有已安装的软件才会被升级

Centos7.5通过rpm安装mysql

1,安装环境查看

2,下载安装rpm包

下载地址:MySQL :: Download MySQL Community Server (Archived Versions)

https://downloads.mysql.com/archives/get/file/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar

3,安装

解压

1

tar -xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar

解压后如下rpm安装包

4,清理mysql-libs

1

yum remove mysql-libs

安装,安装顺序为common-libs-client-server

rpm -vih mysql-community-common-5.7.22-1.el7.x86_64.rpm

rpm -vih mysql-community-libs-5.7.22-1.el7.x86_64.rpm

rpm -vih mysql-community-client-5.7.22-1.el7.x86_64.rpm

rpm -vih mysql-community-server-5.7.22-1.el7.x86_64.rpm

启动

systemctl start mysqld

systemctl status mysqld

systemctl enable mysqld

查看自动生成的密码

cat /var/log/mysqld.log | grep password

登录

mysql -uroot -p'<>fd!vher73Y'

PS:如果密码有特殊字符需要用引号引起来

修改密码:set password=password('password');

注意:如果提示不满足密码策略。可进行以下设置

  1. 首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值。
  2. 当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,输入设值语句 “ set global validate_password_length=6; ” 进行设值。修改密码策略后即可将密码修改成简单密码了。

修改my.cnf,默认在/etc/my.cnf,执行:vim /etc/my.cnf,添加如下内容:

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

character_set_server=utf8

如果通过物理机上的图形化工具连接报错的话

1,关闭服务器防火墙

2,对外开放权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'as12AS..' WITH GRANT OPTION;

刷新

Flush privileges;

  

软件管理-YUM

yum的由来,是因为rpm的缺点所导致,因为rpm无论安装还是卸载都需要解决依赖关系,并且比较繁琐,所以诞生yum的技术。

yum通过分析rpm的信息来进行软件的安装、升级、卸载。

优点:

可以一键解决rpm的依赖关系。

缺点:

yum的所有执行操作全都都需要repo文件(YUM源)。

使用yum安装软件,中招几率高达90%。

所有的yum源都存放在/etc/yum.repos.d/目录下。

工作环境中,一般都会屏蔽系统自带的yum源,而选择权威机构的yum源。

yum的查询:

search

查询某个软件名称或者是描述的关键字

list

列出目前yum所管理的所有的软件名称与版本,有点类似 rpm -qa

yum的安装:

yum install package_Name

案例:

# bash

yum install lrzsz

期间会提示y/N

输入y即可。

yum的卸载:

yum remove package_Name

案例:

# bash

yum remove lrzsz

yum的更新:

yum update package_Name

yum安装、卸载、更新的过程中出现的y/N,可以通过在命令的结尾出 -y,表示全部过执行yes操作。

yum客户端运行机制

       客户端每次使用yum调用 install或者search的时候,都会去解析/etc/yum.repos.d/下面所有以.repo结尾的文件,这些配置文件指定了yum服务器的地址。

      yum需要定期去“更新”yum服务器上的rpm “清单” ,然后把“清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum/$basearch/$releasever下、即/var/cache/yum/x86_64/6),每次调用yum安装包的时候都会去这个cache目录下去找“清单”,根据“清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,如果rpm包的cache不存在,就去yum服务器下载rpm包安装。

3.清理yum缓存,并生成新的缓存

yum clean all
yum makecache

例如:

yum install --downloadonly ntp vim-enhanced gcc gcc-c++ \
flex bison autoconf automake bzip2 gzip zip \
bzip2-devel ncurses-devel zlib-devel \
libjpeg-devel libpng-devel libtiff-devel \
unzip net-snmp-devel libXpm-devel gettext-devel  \
pam-devel libtool libtool-ltdl openssl openssl-devel \
fontconfig-devel libxml2-devel curl-devel  \
libicu libicu-devel

更换阿里的centos7yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

RPM和YUM的取舍

如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。

如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。

例如:

安装一个jdk,那么首选rpm的方式。

安装tomcat的话就可以考虑使用yum。

数据重定向

数据重定向

  1. 数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方,
  2. 通常执行一条命令的时候会有标准输出和标准错误输出  
  3. 标准输出是指命令执行之后,传回正确信息的输出目标    

[root@localhost ~]#ll  /media  

     total0  

  1. 标准错误输出是命令执行失败后,所传回错误信息的输出目标     [root@localhost~]#ll  m  

     ls:can  not  access  m  :No  such  file  or  directory    

标准输入(stdin):编号为0                  使用<或<<

标准输出(stdout):编号为1         使用>或>>

标准错误输出(stderr):编号为2         使用>或>>

1>:以覆盖的方法,将正确的数据输出到文件;  

1>>:以累加的方法,将正确的数据输出到文件;  

2>:以覆盖的方法,将错误输出的数据输出到文件;  

2>>:以累加的方法,将错误输出的数据输出到文件;  

案例:

某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。

# bash

ll /root /roo 1>fileName

某一条命令执行后会有标准输出和标准错误输出,将标准错误输出的内容输出到文件中。

# bash

ll /root /roo 2> fileName

某一条命令执行后会有标准输出和标准错输误输出,将标准出和标准错误输出的内容输出到文件中。

# bash

ll /root /roo > fileName 2>&1

还是上面的案例,只不过要求结果文件不保存

# bash

ll /root /roo > /dev/null 2>&1

>>用法同上

标准输入案例

打印文本中的行数

wc -l < 文本

并且可以将打印出来的重导向到新的文件中

wc -l< 文本 > count

利用标准输入编写文件

cat >> demo.txt<< "abc"

命令执行判断

命令执行判断

$?:命令回传值

命令回传值$?的两种用法:与 && 或 ||

&&:

cmd1 && cmd2  若cmd1运行完毕且正确运行($?=0),则开始运行cmd2;若cmd1运行完毕且为错误($?!=0),则cmd2不运行;

|| :

cmd1 ||  cmd2 若cmd1进行完毕且正确运行($?=0),则cmd2不运行;若cmd1运行完毕且为错误($?!=0),则开始运行cmd2;

不管与还是或,运行正确回传值均为0,不同的是与的时候运行cmd2,而或的时候不运行cmd2;若运行错误,则回传值均为非0,但与的时候不运行cmd2,而或的时候运行cmd2。

举例:

如果/tmp/test存在,则创建/tmp/test/demo

# bash

mkdir -p /tmp/test && touch /tmp/test/demo

如果/tmp/test1不存在,则删除/tmp/test/demo

# bash

cd /tmp/test1 || rm -rf /tmp/test/demo

linux其他常用命令

find:查找命令

由于Linux系统大部分都是应用于服务器上,所以查询数据的时候并没有图形化界面查找数据的便捷性。

语法:

find [path] [选项] 参数

选项:

-name

按文件名查询

-perm

按文件权限查询

-size

按文件的大小查找

-user

按用户(属主)查询

-group

按用户组查询

-type

按文件的类型查询

b  -  块设备文件。    

d  -  目录。    

c  -  字符设备文件。    

p  -  管道文件。    

l  -  符号链接文件。  (这是个小写的L)   

f  -  普通文件。

案例:

查找jdk安装的目录。

# bash  find / -name java

查找当前系统中所有的.log后缀名的文件

# bash  find / -name "*.log"

查找系统中/home目录下的非普通文件

# bash  find /home ! -type f

查找当前用户/home目录下权限为700的文件

#bash   find /home -perm 700

查找/dev目录下的块设备文件

#bash   find /dev -type b

sed

介绍:

sed本身是一个逐行处理工具,会逐行处理到文件的结束。默认情况下不修改源文件,因为sed是将源文件内容逐行copy到一个临时缓冲区(模式空间),对其进行编辑,行处理结束后,将其输出到屏幕上,也可以通过数据重定向将结果导入到新的文件中去。

sed本身提供修改源文件的选项。但是如果修改源文件时,结果内容并不会发送到屏幕上。

语法:

sed  [option]  "[action]"  [filename]

选项:

-e

允许对输入数据应用多条sed命令进行编辑。

-i

表示直接操作源文件

动作:

s

字符串匹配/查找

i:

插入

a:

追加

d:

删除

注意:选项和动作的字母i不是同样的功能。

案例:

源文件内容(demo):

hello  teduhadoop

hello  hadoop

hello  hdfs ,hi  sed

1、将全文的h替换为H。

# bash   sed "s/h/H/g" demo

2、修改全文的h/H,第一个l/L

# bash   sed -e "s/h/H/g" -e "s/l/L/1" demo

or

# 多条指令的另外一种写法:

sed "s/h/H/g;s/l/L/1" demo

3、修改全文的第一个和第二个h/H

# bash

sed "s/h/H/1;s/h/H/1" demo

4、部分文件中,由于不知道是第几行,且文件中存在多个相同的字符串时,如何修改。

# eth0文件内容:

DEVICE=eth0

HWADDR=00:0c:29:37:f6:95

TYPE=Ethernet

UUID=5c4fcaf0-7f4f-4ab1-8dee-a96aecb23823

ONBOOT=no

NM_CONTROLLED=yes

BOOTPROTO=dhcp

DNS2=8.8.8.8

DNS1=114.114.114.114

IPV6INIT=no

USERCTL=no

PEERDNS=yes

将文件中的ONBOOT=no修改为ONBOOT=yes

# bash

sed -i "s/ONBOOT=no/ONBOOT=yes/g" eth0

5、在文件中进行插入新的内容:

源文件内容:

hello  teduhadoop

hello  hadoop

hello  hdfs ,hi  sed

5.1、在第一行插入内容"hello bigdata"

# bash

sed "1 i hello bigdata" demo

5.2、在第一行追加内容"hello 小强"

# bash

sed "1 a hello 小强" demo

6、删除匹配的行

# bash

sed "/hdfs/d" demo

表示将匹配的到hdfs的整行删除,如果匹配的内容是h的话,当前文件的内容会被全部删除。

grep:

这是一款强大文本搜索工具选项:

-number

同时显示匹配行上下的n行

-b,--byte-offset

 印匹配行前面打印该行所在的块号码。  

-c,--count  

只打印匹配的行数,不显示匹配的内容。  

-i,--ignore-case  

忽略大小写差别。  

-q,--quiet  

取消显示,只返回退出状态。0则表示找到了匹配的行。

--color

将匹配内容上色区分

-n,--line-number

在匹配的行前面打印行号。

-v,--revert-match

反检索,只显示不匹配的行。

#bash

cd /root

ls |grep -2 log  #匹配上下两行

ls |grep -n log  #匹配行号

ls | grep  log --color

tail

文本监控,通常情况下用于监视文件的增长。

场景:

大数据环境中,很多软件在启动时,不会将真正的启动/过程日志打印在屏幕上,因为内容繁多,会影响程序员观察启动过程中,哪个进程没有启动。像此种场景,我们就可以利用tail工具用来监视该软件启动日志文件的实际内容。

语法:

tail [选项] fileName

选项:

-f

用于监控文件的增长!!!

-n

从指定的行中进行监控文件的内容

cut

cut命令在文件中负责剪切数据用的

选项:

-b  

字节  

-c  

字符  

-f   

提取第几列     

-d  

按指定分隔符分割列

案例:

源文件内容:

192.168.1.1

192.168.1.3

192.168.1.5

192.168.1.4

截取第11个字节:

# bash

cut -b 11 demo

截取第7-9的字节

# bash

cut -b 7-9 demo

截取最后一个字节进行排序:

# bash

cut -b 11 demo | sort

以点为 分隔符 获取第二个字段

# bash

cut -d . -f 2 demo

历史命令:

history

该命令可以用来查看Linux系统中曾经执行过的命令(默认1000条)。

用法:

!!  

运行上一条命令  

!88  

运行第88条命令  

!88  /test  

运行第88条命令并在命令后面加上/test  (可以用ls举例)

!ls  

运行上一个ls命令  

!ls:s/CF/l  

运行上一个ls命令,其中把CF替换成l  

history -c

表示清除历史命令  #  学习阶段不要使用此命令,会清空历史命令,不利于学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值