linux分享
325笔记
什么是软件,代码
软件程序,就是程序员通过编程语言写好一堆代码,通过一些方式运行,比如编译后,生成一个应用程序,称之为软件
以及手机APP,或者我们平时访问的网站,都是程序员通过写代码,开发出来的
软件包顾名思义就是将应用程序、配置文件和数据打包的产物
所有的linux发行版都采用了某种形式的软件包系统,这使得linux软件管理和在windows下一样方便,suse、red hat、fedora等发行版都是用rpm包,Debian和Ubuntu则使用.deb格式的软件包。
mysql-5-3-4.rpm
redis-3-4-3.rpm
nginx2-3-2.rpm
软件包顾名思义就是将应用程序、配置文件和数据打包的产物=======nginx_v.10.rpm
yum install nginx -y ============= 先下载 nginx.rpm 软件包 ,然后yum自动帮你去安装了这个包
/usr/bin/nginx
/etc/nginx/nginc.conf 配置文件,写了用于控制该软件不同功能的参数
centos,redhat ================= nginx-1.10.rpm
ubutnu ============nginx-1.10.deb
以网站后端源代码为例
golang 编译型
golang这样的编译型语言,写完一推200行的后端代码,编译产生 ./start_go 这样的可执行命令。编译后的命令,看不到源码。
golang 代码写完,发给你的就是一些【 可执行命令 + 一推配置文件 + 数据文件 = Linux后端程序 】
python 解释型语言
python 代码写完了,发给你的基本是一个压缩包,里面是一推 python 源码( 文件夹 + .py文件)
这些是能够看到程序源码的,运维要做的就是 (python 源代码解压缩 + 一推配置文件 + 数据文件 ==python后端网站)
nginx 配置文件
/etc/nginx/nginx.conf 配置文件,写了用于控制该软件不哦那个功能的参数
关于源代码,编译的过程理解
程序员写的代码,如 下代码,计算机是不认识的,只认识010101
package main
import "fmt"
func main() {
fmt.Println("于超老师带你学Linux")
}
因此代码都是经过系统的一个编译器,进行,编译成机器语言,计算机才能执行的
比如有哪些编译器
c语言用的gcc编译器
golang语言用的golang编译器
上面这俩特点是,代码写完,需要用户,手动的进行 build ,将源码编译成一个二进制的命令(机器可识别的)
编译型语言,是吧上述所有代码,全部检测完毕后,生成另一个正确的二进制命令
代码写完后,编译器,自动可以检测出所有的语法问题,因此编译型语言不易出错
golang ,c c++ ,适用于开发系统级工具,比如 docker k8s
比如linux操作系统
python 语言解释型语言(python编译器)
python一遍翻译程序员写的代码,一遍编译成机器认识的机器与语言
python是一行一行去读取文件,要是中途代码出错,程序直接崩溃
脚本型语言,如python很容易出错,代码自上而下,一行一行的去翻译
用在快速开发上,比如测试开发,运维开发,自动化开发
比如网站开发
二进制包
二进制包,也就是源码包经过成功编译之后产生的包
已经编译好, centos 平台可以使用的 rpm 包。———————————— nginx-1.10.rpm
特殊的,很方便的二进制包,支持二进制包下载的某些软件———————— .tar.gz 格式 下载解压即可用
二进制源码包
mysql-community-5.7.25-.el7.src.rpm
下载后还需要自己再构建rpm 构建命令 rpm.rpmbuild
常见的二进制软件包格式
RedHat/Centos/Fedora/SUSE —————————————— 安装包文件后缀格式 .rpm (rpm包相关命令 rpm / rpbuild)
Ubuntu/Debian —————————————————— 安装包文件后缀格式 .deb (deb 包相关命令 dpkg / 在线安装 deb apt命令)
比如去下载 nginx 软件包,会看到很多复杂的格式
编译好的 rpm 包—————————————————— nginx-1.10.rpm
nginx源代码包———————————————————— nginx-2.3.3.tar.gz (纯 C 语言文件)
解压即用的nginx二进制包——————————— nginx-2.3.3-x86-64.tar.gz
rpm二进制包—————————————————————— nginx-el7-src.rpm
3.关于源代码编译的过程解释
体验下,编译过程,和解释过程
对上述golang代码进行编译,生成二进制可执行的命令,并且添加软连接,可以快捷执行
可以用2种方式去运行这个代码
# 如果你不编译,就必须要求机器上,得存在,对应的编译器
go run hello.go # 不生成二进制命令,直接底层编译后执行,
go build hello.go # 生成二进制命令,源代码以及被写入到这个文件中了.
编译的好处,在于,该二进制命令,现在可以任意的丢到一个linux 统一是64位架构的机器上,可以直接运行
一次编译,到处运行(这也是docker的理念)
解释型过程
python3语言
yum install python3 python3-devel -y
[root@167 test_go]# cat hello.py
print ("你好 世界")
python想运行程序,必须要解释器存在机器上,然后才能执行
# python3是可以处理中文的
[root@167 test_go]# python3 hello.py
你好 世界
# python2是不能处理中文的
[root@yuchao-linux01 tmp]# python
python python2 python2.7
[root@yuchao-linux01 tmp]# python hello.py
File "hello.py", line 1
SyntaxError: Non-ASCII character '\xe4' in file hello.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
[root@yuchao-linux01 tmp]#
用python的公司,必须要求你,在linux机器上,安装好这个环境,程序员写的python代码,才能运行。
编译和rpm包的区别
二级制包---不需要从源代码再编译了,拿来即用,安装简单,但是程序安装路径受限,可定制性很差
源代码包---需要编译后使用,安装难度较难,定制化很强
在网络上找到链接,wget下载,再tar解压缩
如何去下载mysql的rpm包
用本地光盘的形式,获取rpm包安装nginx
确认光驱,选择本地镜像文件
在linux中找到该光驱,然后挂在即可
mount /dev/sr0 /mnt 挂载
取消光盘挂载
umount /mnt
rpm包升级软件
1.升级软件,获取新版的软件包
如何找到firewfox的rpm包,官网找,本地光盘找,去搜索引擎找
2.去官网中找新版本
如果软件升级的版本过大,里面会涉及很多的功能更新,说白了就是要再装一堆rpm包,无法手动管理
如果是小版本的升级 52.7 54.8 ,涉及依赖就会少很多
# 4.获取一个新版本,是52.7.3版本,只有一点点的升级,不会牵扯太多依赖关系
下载链接
http://ftp.pbone.net/mirror/ftp.scientificlinux.org/linux/scientific/7.2/x86_64/updates/security/firefox-52.7.3-1.el7_5.x86_64.rpm
# 5.在linux中下载
wget http://ftp.pbone.net/mirror/ftp.scientificlinux.org/linux/scientific/7.2/x86_64/updates/security/firefox-52.7.3-1.el7_5.x86_64.rpm
如何搜索下载rpm的包,去哪里找
很多软件的官网,以及第三方软件仓库,会提供rpm包的下载功能
http://rpm.pbone,net/
www.rpmfind.net
还有更好用,最精准,应该去该软件的官网,去下载它的rpm包
http://nginx.org/packages/
根据你的机器cpu架构,以及系统的版本,找到如下链接
http://nginx.org/packages/centos/7/x86_64/RPMS/
http://nginx.org/packages/centos/7/x86_64/RPMS//nginx-1.10.0-1el7.ngx.x86_64.rpm
rpm安装,查询,升级,删除
rpm -vih rpm包的名字 wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm
安装,rpm -vih nginx-1.10.0-el7.ngx.x86_64.rpm
查询
rpm -qa nginx-1.10.0-el7.ngx.x86_64
rpm -qi nginx
-q查询
-i显示软件的详细信息
查询机器上是否安装了某个软件
rpm -qa |grep vim
升级,获取软件的新版本
rpm -Uvh
删除
rpm -e nginx,卸载nginx
得先确认该软件得名字,通过正确得名字,才可以删除
rpm -qa |grep nginx
rpm -e vim-enhanced 卸载vim
rpm安装的软件,需要手动解决他们之间的依赖关系
rpm查询命令
rpm -qf 文件名,根据文件名查询属于哪个软件包
rpm -ql 软件包名,列出该软件包都生成了什么文件,如:rpm -ql nginx
总结
安装rpm -ivh 软件包
卸载rpm -e 软件包名
升级rpm -Uvh 软件包
rpm的依赖冲突,一定是要一层一层去解决,不能跳级----也就是依赖说少了什么软件,你就得先解决什么软件
源代码安装nginx工具,编译安装淘宝nginx
wget https://tengine.taobao.org/download/tengine-2.3.3.tar.gz
解压缩,进行编译安装,cd tengine-2.3.3/
开始编译,且安装,注意先进行编译参数的配置,
给nginx添加支持https证书的功能,需要注意linux系统支持https的模块,就是安装openss模块,
yum -y intsall openssl openssl-devel pcre pcre-devel zlib zlib-devel
执行编译参数,让nginx的安装,可以扩展其他功能---./configure --prefix=/opt/my_nginx0224/ --with-http_ssl_module
开始编译安装执行如下命令:make && make install
当你make命令执行成功后,自动执行make install命令
只有make install 成功后,才会生成你指定的nginx路径 /opt/my_nginx0224文件夹
检查你安装的nginx是否生成,编译安装的nginx全部在这个目录下了,cd my_nginx0224
conf 配置文件
html 前端的html文件
logs 日志文件
sbin 可执行二级制文件
可以用该目录下的二进制命令,启动淘宝nginx了 /opt/my_nginx0224/sbin/nginx
可以去用浏览器去发出http请求,访问你的nginx网站
还有一个命令可以验证,该nginx的信息,curl -l 自己的ip 192.168.0.159
查询
ls /opt/my_nginx0224/
删除
编译的软件,删除动作就是,直接干掉这个目录
rm -rf /opt/my_nginx0224/
解压即用软件包
就是一个已经编译好的二进制命令,拿来用就好了
给机器部署 Java 环境,选择下载 Java 的二进制包,解压即用
1. 下载二进制Java压缩包
[root@localhost ~]# wget http://yuchaoit.cn/jdk-8u221-linux-x64.tar.gz
[root@localhost ~]# mv jdk-8u221-linux-x64.tar.gz /opt
2. 解压缩包
[root@localhost opt]# tar -zxf jdk-8u221-linux-x64.tar.gz
## 配置环境变量
(1) 创建软连接
[root@localhost opt]# ln -s /opt/jdk1.8.0_221/ /opt/jdk
(2) 配置Java环境
[root@localhost opt]# vim /etc/profile
export JAVA_HOME=/opt/jdk
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/my_python3-9-11//bin://opt/my_tenginx/sbin:/opt/jdk/bin
(3) 退出重新登陆加载环境变量
3. 验证Java是否可用
[root@localhost opt]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
[root@localhost opt]#
4. 准备一段Java代码 验证环境是否可用
需要注意的是 创建的 Java 文件名要和代码中的名字一致 (即 public class 后边跟的名字)
[root@localhost opt]# vim HelloWorld.java
public class HelloWorld {
public static void main(String []args) {
System.out.println("超哥带你学linux");
}
}
5. 编译这个代码 (命令 javac + 文件名)
[root@localhost opt]# javac HelloWorld.java
[root@localhost opt]#
[root@localhost opt]#
[root@localhost opt]# ls
HelloWorld.class jdk1.8.0_221 my_tenginx Python-3.9.11.tgz
HelloWorld.java jdk-8u221-linux-x64.tar.gz nginx-1.10.0-1.el7.ngx.x86_64.rpm tengine-2.3.0
jdk my_python3-9-11 Python-3.9.11 tengine-2.3.0.tar.gz
6. 运行代码 (命令 java + 文件名没有后缀的)
[root@localhost opt]# java HelloWorld
超哥带你学linux
[root@localhost opt]#
由于 Java 比较特殊,必须配置Linux的环境变量才可以使用
如果是 golang 只需要直接解压缩,把命令加入到 PATH 变量即可快速使用
yum自动化软件管理命令
使用 yum 工具配置 yum 源即可。
yum源的配置官网 https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11oJtGAH
## 配置两个源
(1) 能够下载centos自带的绝大多数软件
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
(2) 能够下载绝大多数第三方软件的仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
## 配置源之前需要显备份默认的 yum 仓库配置文件
(1) 进入 yum 源默认的配置文件目录,备份所有的 *.repo 文件即可
[root@localhost ~]# cd /etc/yum.repos.d/ #yum 默认配置文件目录
[root@localhost yum.repos.d]# mv ./*.repo bak_repos.d/
(2) 下载新的 yum 仓库文件
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
## 看到文件目录结构
[root@localhost yum.repos.d]# ll
total 8
drwxr-xr-x. 2 root root 187 Mar 26 01:02 bak_repos.d
-rw-r--r--. 1 root root 2523 Dec 26 2020 CentOS-Base.repo
-rw-r--r--. 1 root root 664 Dec 26 2020 epel.repo
[root@localhost yum.repos.d]#
## 更新 yum 缓存
[root@localhost yum.repos.d]# yum clean all #删除原缓存
[root@localhost yum.repos.d]# yum makecache #更新新的缓存
## 可以自动化管理机器上 rpm 安装的软件
## yum 常见命令
yum install # 安装某文件
yum remove # 删除某文件
通过 yum 安装的程序,可以通过 systemctl 去管理启停操作如:
systemctl statr nginx
安装软件注意事项
安装方式有三种
1. rpm手动安装
手动解决所有依赖,比较难用
2. yum自动安装
yum就是去管理 rpm包的,自动解决依赖关系
3. 源码编译安装
软件都装到一个目录下,管理该目录即可,无法用 yum去管理
需要注意他们的安装路径以及管理脚本是否会发生冲突。所以要注意机器上的程序是通过上面哪一种方式安装的
学以致用
学会rpm,编译安装,yum安装后,安装其他软件的时候,要如何安装
作为运维,要提供服务器运行环境,开发环境
比如一个网站程序涉及到的安装程序
数据库软件—————— musql
开发语言环境———— Java golang python
web服务器—————— nginx apache(httpd)
缓存数据库—————— redis
太多软件都需要安装,具体要用什么方式去安装,就需要对每一种安装方式都要理解,然后灵活应用
比如在断网的环境下
yum 没办法去外网瞎咋软件就需要准备好该软件所需要的所有 rpm 上传到 Linux机器去安装这些恶 rpm 包
比如在限制了软件版本情况下
就需要选择源代码编译,自己去官网,随便找到符合要求的版本,进行定制化安装
安装大型,复杂的软件,以及有很多自定只要求的软件,需要选择编译安装
安装一些基础环境,比如Linux底层的一些软件,利用 yum 全部自动化安装就行
基本上小型工具 yum都可直接安装完成。