目录
一、压缩和打包
1、Linux常见的压缩文件后缀名:
*.gz | gzip程序压缩的文件 |
*.bz2 | bzip2 程序压缩的文件 |
*.tar | tar命令打包的数据,并没有压缩过 |
*.tar.gz | tar程序打包的文件,并且经过 gzip 的压缩 |
*.tar.bz2 | tar程序打包的文件,并且经过 bzip2 的压缩 |
2、压缩命令
i、gzip
压缩/解压命令
选项:
-c : | 将压缩的数据输出到标准输出(stdout)上 |
-d : | 解压缩 |
-t : | 可以用来检验一个压缩文件的一致性,看看文件有无错误 |
-v : | 可以显示出原文件/压缩文件的压缩比等信息 |
-(1,2,...,9): | 压缩等级,1最快,但是压缩比最差;9最慢,但是压缩比最好,默认是6。 |
-l : | 查看压缩文件的压缩比: gzip –l *.gz |
举例:
gzip -c initial-setup-ks.cfg //将压缩的数据输出到标准输出
gzip -c initial-setup-ks.cfg >> aaa.gz
解压
ii、bzip2
压缩/解压命令:
选项:
-c : | 将压缩的过程产生的数据输出到标准输出(stdout) |
-d : | 解压缩的参数 |
-k : | 保留源文件,而不会删除原始的文件 ,压缩完会自动生成压缩文件 |
-v : | 可以显示出原文件/压缩文件案的压缩比等信息; |
-(1,2,...,9): | 与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快 |
gzip拥有更快的压缩性能。
bzip2拥有更高的压缩比。
单纯从压缩比方面来说,那么bzip2 > gzip > compress
3、查看压缩文件中的内容
cat:可以用来查看文本文件中的内容。
zcat:可以用来查看gzip算法压缩的压缩文件内容。
bzcat:可以用来查看bzip2算法压缩的压缩文件内容。
4、打包、解包命令
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 目录: | 这个选项用在解压的时候,若要在特定目录解压,可以使用这个选项 |
注:使用命令进行打包、压缩的时候,使用了什么算法,文件后缀名就一定要与其对应。
案例:
压缩:
tar -zcvf install.log.tar.gz install.log 使用gzip的算法进行打包压缩。
注意tar的语法,tar -zcvf newFile sourceFile
tar -jcvf install.log.tar.bz2 install.log 使用bzip2的算法进行打包压缩。
tar -zcvf [path]/newFileName.tar.gz [path]/sourceFile 如果想要压缩指定目录中的内容是,可以考虑使用绝对路径。
解压:
tar -zxvf install.log.tar.gz 将一个压缩包文件解压到当前目录下
tar -zxvf install.log.tar.gz -C / 将一个压缩包文件解压到指定目录下
tar -zxvf etc.tar.gz etc/shells 只解压包中的某个文件
配置JDK:
tar -zxvf jdk-8u131-linux-x64.tar.gz 配置jdk环境变量
cd jdk1.8.0_131
pwd # 复制路径
vim /etc/profile # profile文件是系统环境变量的配置文件
在该文件的最后一行添加内容:
export JAVA_HOME=[path]
export PATH=$JAVA_HOME/bin:$PATH
保存退出
source /etc/profile
使环境变量生效
二、软件管理
1、软件管理-RPM
最初只有.tar.gz的打包文件,用户必须编译每个他想在Linux上运行的软件。用户们普遍认为系统很有必要提供一种方法来管理这些安装在机器上的软件包,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。稍后RedHat才决定开发自己的“rpm”包管理系统。
i、优点:
自带编译后的文件,免除用户对软件编译的过程
可以自动检测文件系统(硬盘)的容量、系统的版本。避免软件被错误的安装。
自带软件的版本信息、帮助文档、用途说明等信息。
ii、缺点:
无论安装还是卸载,RPM都有一个恶心人的依赖关系。
安装的软件需要依赖,那么优先安装依赖。
卸载的软件存在依赖,那么优先卸载依赖。
iii、默认路径:
/etc | 一些配置文件放置的目录,例如/etc/crontab |
/usr/bin | 一些可执行文件 |
/usr/lib | 一些程序使用的动态链接库 |
/usr/share/doc | 一些基本的软件使用手册与说明文件 |
/usr/share/man | 一些man page(Linux命令的随机帮助说明)文件 |
iv、安装:
语法:rpm -ivh packageName.rpm
选项:
i | 表示安装 |
v | 表示处理过程 |
h | 显示处理进度(进度条) |
rpm -ivh pack1.rpm 单个安装
rpm -ivh pack1.rpm pack2.rpm *.rpm 多个安装
rpm -ivh "https://网络地址/package.rpm" 安装网络上的RPM包
v、查询:
rpm -[选项]
选项:
-q : | 仅查询,后面接的软件名称是否有安装 |
-qa : | 列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!! |
-ql : | 列出该软件所有的文件与目录所在完整文件名 !! |
-qc : | 列出该软件的所有配置文件 ! |
-qd : | 列出该软件的所有说明文件 |
-qR : | 列出和该软件有关的相依软件所含的文件 |
rpm -qa |grep jdk 查找是否安装jdk
rpm -qa |head -n 3 查找所有系统已经安装的包,并只查看前3个
rpm -ql lrzsz 查询lrzsz所包含的文件及目录
vi、卸载:
rpm -e package_Name # package_Name需要通过qa的选项来查询出来。
强制卸载 --nodeps
vii、RPM 升级与更新
rpm -Uvh <package_name> (不管有没有都安装最新版)
-Uvh后面接的软件如果没有安装过, 系统会直接安装,若后面接的软件安装过但版本较旧,则更新至新版
viii、Centos7.5通过rpm安装mysql
1,安装环境查看
cat /etc/redhat-release
2,下载安装rpm包
3,安装
tar -xf mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar 解压
yum remove mysql-libs 清理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'); 修改密码
修改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;
2、软件管理-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
yum install lrzsz 期间会提示y/N ,输入y即可。
yum的卸载:
yum remove package_Name
yum remove lrzsz
yum的更新:
yum update package_Name
yum安装、卸载、更新的过程中出现的y/N,可以通过在命令的结尾出 -y,表示全部过执行yes操作。
清理yum缓存,并生成新的缓存
yum clean all
yum makecache
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包安装。
更换阿里的centos7yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RPM和YUM的取舍
如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。
如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。
三、数据重定向
数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方,通常执行一条命令的时候会有标准输出和标准错误输出。
标准错误输出是命令执行失败后,所传回错误信息的输出目标。
标准输入(stdin):编号为0 使用<或<<
标准输出(stdout):编号为1 使用>或>>
标准错误输出(stderr):编号为2 使用>或>>
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
举例:
某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。
ll /root /roo 1>fileName
利用标准输入编写文件
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。
举例:
mkdir -p /tmp/test && touch /tmp/test/demo 如果/tmp/test存在,则创建/tmp/test/demo
cd /tmp/test1 || rm -rf /tmp/test/demo 如果/tmp/test1不存在,则删除/tmp/test/demo
五、linux其他常用命令
1、find:查找命令
语法:
find [path] [选项] 参数
选项:
-name | 按文件名查询 |
-perm | 按文件权限查询 |
-size | 按文件的大小查找 |
-user | 按用户(属主)查询 |
-group | 按用户组查询 |
-type | 按文件的类型查询 b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 (这是个小写的L) f - 普通文件。 |
案例:
find / -name java 查找jdk安装的目录。
find / -name "*.log" 查找当前系统中所有的.log后缀名的文件
find /home ! -type f 查找系统中/home目录下的非普通文件
find /home -perm 700 查找当前用户/home目录下权限为700的文件
find /dev -type b 查找/dev目录下的块设备文件
2、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:
sed "s/h/H/g" demo
2、修改全文的h/H,第一个l/L
sed -e "s/h/H/g" -e "s/l/L/1" demo 或者 sed "s/h/H/g;s/l/L/1" demo
3、grep
这是一款强大文本搜索工具选项:
-number | 同时显示匹配行上下的n行 |
-b,--byte-offset | 印匹配行前面打印该行所在的块号码。 |
-c,--count | 只打印匹配的行数,不显示匹配的内容。 |
-i,--ignore-case | 忽略大小写差别。 |
-q,--quiet | 取消显示,只返回退出状态。0则表示找到了匹配的行。 |
--color | 将匹配内容上色区分 |
-n,--line-number | 在匹配的行前面打印行号。 |
-v,--revert-match | 反检索,只显示不匹配的行。 |
4、tail
文本监控,通常情况下用于监视文件的增长。
场景:
大数据环境中,很多软件在启动时,不会将真正的启动/过程日志打印在屏幕上,因为内容繁多,会影响程序员观察启动过程中,哪个进程没有启动。像此种场景,我们就可以利用tail工具用来监视该软件启动日志文件的实际内容。
语法:
tail [选项] fileName
选项:
-f | 用于监控文件的增长!!! |
-n | 从指定的行中进行监控文件的内容 |
5、cut
cut命令在文件中负责剪切数据用的
选项:
-b | 字节 |
-c | 字符 |
-f | 提取第几列 |
-d | 按指定分隔符分割列 |
案例:
源文件内容:
192.168.1.1 192.168.1.3 192.168.1.5 192.168.1.4 |
cut -b 11 demo 截取第11个字节
cut -b 7-9 demo 截取第7-9的字节
cut -b 11 demo | sort 截取最后一个字节进行排序
cut -d . -f 2 demo 以点为 分隔符 获取第二个字段
6、history
该命令可以用来查看Linux系统中曾经执行过的命令(默认1000条)。
用法:
!! | 运行上一条命令 |
!88 | 运行第88条命令 |
!88 /test | 运行第88条命令并在命令后面加上/test (可以用ls举例) |
!ls | 运行上一个ls命令 |
!ls:s/CF/l | 运行上一个ls命令,其中把CF替换成l |
history -c | 表示清除历史命令 # 学习阶段不要使用此命令,会清空历史命令,不利于学习 |