Linux应用程序基础
应用程序与系统命令的关系
角色 | 系统命令 | 应用程序 |
---|---|---|
文件位置 | 一般在/bin和/sbin目录中,或为Shell内部命令 | 通常在/usr/bin和/usr/sbin目录中 |
主要用途 | 完成对系统的基本管理工作,例如IP配置工具 | 完成相对独立的其他辅助任务,例如网页浏览器 |
使用环境 | 一般只在字符操作界面中运行 | 根据实际需要,有些程序可在图形界面运行 |
运行格式 | 一般包括命令字、命令选项和命令参数 | 通常没有固定的执行格式 |
操作系统提供平台,系统命令(内部命令)来管理系统,应用程序(外部命令)来完成特定任务。
源代码要借助bash运行
/usr/bin
/usr/sbin
放命令
常见的软件包封装类型
文件类型 | 保存目录 |
---|---|
RPM软件包 | 扩展名为“.rpm” |
DEB软件包 | 扩展名为".deb" |
源代码软件包 | 一般为“tar.gz"、"tar.bz2"等格式的压缩包包含程序的原神代码 |
绿色免安装的软件包 | 软件包的扩展名不一,以TarBall格式的居多在压缩包内提供已编译好的执行程序文件解开压缩包后的文件即可直接使用 |
RPM软件包管理工具
Red-Hat Packet Manager
由Red Hat公司提出,被众多Linux发行版所采用
-
建立统一的数据库文件
-
详细记录软件包安装、卸载等变化信息
-
自动分析软件包依赖关系
作用:RPM常用于查询是否安装该软件
一般命名格式:bash-4.1.2-15.el6_4.x86_64.rpm
bash shell环境 版本信息 4.1.2 15发布次数 x86_64硬件(为“i386”或“i686”等)
rpm命令功能
查询、验证RPM软件包的相关信息——常用
安装、升级、卸载RPM软件包——安装略麻烦,不常用
维护RPM数据库信息等综合管理操作——我们不需要维护数据库
rpm命令的格式
查询
-
查询已安装的RPM软件信息:
rpm -q[子选项] [软件名]
常用选项:-qa、-qi、-ql、-qf、-qc、-qd
-
查询未安装的RPM软件包文件中信息:
rpm -qp[子选项] RPM包文件
常用选项:-qpi、-qpl 、-qpc 、-qpd
选项 | 功能效果 |
---|---|
rpm -qa(all) | 显示当前系统中以 RPM 方式安装的所有软件列表 |
rpm -q 软件名 | 查询指定软件是否已安装 |
rpm -qi 软件名 | 查看指定软件包的名称、版本、许可协议、用途描述等详细信息 |
rpm -ql(list) 软件名 | 显示指定的软件包在当前系统中安装的所有目录、文件列表 |
rpm -qc (configfiles ) 软件名 | 列出已安装的指定软件的配置文件 |
rpm -qd(docfiles) 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
rpm -qR (requires) 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
rpm -qf(file) 软件名 | 查看指定的文件或目录是由哪个软件包所安装的 |
rpm-qpd | 查询未安装指定软件包的文档位置 |
rpm -qpi | 查询未安装指定软件包的完整名称详细信息 |
rpm -qpl | 查询未安装指定软件包的文件列表 |
rpm -qpc | 查询未安装指定软件包的配置文件位置 |
例子:
1 [root@localhost system]# rpm -qa 2 #查询所有的已rpm方式安装的软件列表 3 4 [root@localhost data]# rpm -q httpd 5 #查看httpd有没有安装 6 httpd-2.4.6-67.el7.centos.x86_64 7 8 [root@localhost data]# rpm -qi httpd 9 [root@localhost data]# rpm -qi tree 10 #查看httpd的详细信息 11 12 [root@localhost data]# rpm -ql httpd 13 [root@localhost data]# rpm -ql tree 14 #目录或文件列表 15 16 [root@localhost data]# rpm -qc httpd 17 #配置文件位置 18 19 [root@localhost data]# rpm -qd tree 20 #软件包文档所在位置 21 /usr/share/doc/tree-1.6.0/LICENSE 22 /usr/share/doc/tree-1.6.0/README 23 /usr/share/man/man1/tree.1.gz 24 25 [root@localhost data]# rpm -qR tree 26 #查看依赖包 27 libc.so.6()(64bit) 28 libc.so.6(GLIBC_2.14)(64bit) 29 libc.so.6(GLIBC_2.2.5)(64bit) 30 libc.so.6(GLIBC_2.3)(64bit) 31 libc.so.6(GLIBC_2.3.4)(64bit) 32 libc.so.6(GLIBC_2.4)(64bit) 33 rpmlib(CompressedFileNames) <= 3.0.4-1 34 rpmlib(FileDigests) <= 4.6.0-1 35 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 36 rtld(GNU_HASH) 37 rpmlib(PayloadIsXz) <= 5.2-1 38 39 [root@localhost Packages]# rpm -qf /usr/bin/ls 40 #查看命令程序由那个包安装的 41 coreutils-8.22-18.el7.x86_64 42 43 [root@localhost Packages]# rpm -qpi tree-1.6.0-10.el7.x86_64.rpm 44 #查看未安装软件的 45 [root@localhost Packages]# rpm -qpc httpd-2.4.6-67.el7.centos.x86_64.rpm 46 /etc/httpd/conf.d/autoindex.conf 47 /etc/httpd/conf.d/userdir.conf 48 /etc/httpd/conf.d/welcome.conf 49 /etc/httpd/conf.modules.d/00-base.conf6 50 /etc/httpd/conf.modules.d/00-dav.conf 51 52 [root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm 53 错误:依赖检测失败: 54 /etc/mime.types 被 httpd-2.4.6-67.el7.centos.x86_64 需要 55 httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要 56 libapr-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.centos.x86_64 需要 57 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.centos.x86_64 需要 58 #####依赖关系原因需要安装以下包 59 rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 60 rpm -ivh apr-1.4.8-3.el7.x86_64.rpm 61 rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm 62 rpm -ivh httpd-tools-2.4.6-67.el7.centos.x86_64.rpm 63 rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm 64 65 66 67 [root@localhost Packages]# rpm -q tree 68 #查询是否安装 69 未安装软件包 tree 70 [root@localhost Packages]# rpm -ivh tree 71 #安装软件包 tree 72 [root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 73 #安装软件包 tree 74 [root@localhost Packages]# rpm -q tree 75 #查看是否安装 76 tree-1.6.0-10.el7.x86_64 77 [root@localhost Packages]# rpm -qi tree 78 #详细信息 79 Name : tree 80 Version : 1.6.0 81 Release : 10.el7 82 Architecture: x86_64 83 Install Date: 2021年08月27日 星期五 10时42分26秒 84 Group : Applications/File 85 Size : 89505 86 License : GPLv2+ 87 Signature : RSA/SHA256, 2014年07月04日 星期五 13时36分46秒, Key ID 24c6a8a7f4a80eb5 88 Source RPM : tree-1.6.0-10.el7.src.rpm 89 Build Date : 2014年06月10日 星期二 03时28分53秒 90 Build Host : worker1.bsys.centos.org 91 Relocations : (not relocatable) 92 Packager : CentOS BuildSystem <http://bugs.centos.org> 93 Vendor : CentOS 94 URL : http://mama.indstate.edu/users/ice/tree/ 95 Summary : File system tree viewer 96 Description : 97 The tree utility recursively displays the contents of directories in a 98 tree-like format. Tree is basically a UNIX port of the DOS tree 99 utility. 100 [root@localhost Packages]# rpm -ql tree 101 #文件列表 102 /usr/bin/tree 103 /usr/share/doc/tree-1.6.0 104 /usr/share/doc/tree-1.6.0/LICENSE 105 /usr/share/doc/tree-1.6.0/README 106 /usr/share/man/man1/tree.1.gz 107 [root@localhost Packages]# rpm -qc vsftpd 108 #配置文件 109 /etc/logrotate.d/vsftpd 110 /etc/pam.d/vsftpd 111 /etc/vsftpd/ftpusers 112 /etc/vsftpd/user_list 113 /etc/vsftpd/vsftpd.conf 114 115 [root@localhost Packages]# rpm -qd tree 116 #文档位置 117 /usr/share/doc/tree-1.6.0/LICENSE 118 /usr/share/doc/tree-1.6.0/README 119 /usr/share/man/man1/tree.1.gz 120 121 [root@localhost Packages]# rpm -qR tree 122 #查看已安装的包依赖关系 123 libc.so.6()(64bit) 124 libc.so.6(GLIBC_2.14)(64bit) 125 libc.so.6(GLIBC_2.2.5)(64bit) 126 libc.so.6(GLIBC_2.3)(64bit) 127 libc.so.6(GLIBC_2.3.4)(64bit) 128 libc.so.6(GLIBC_2.4)(64bit) 129 rpmlib(CompressedFileNames) <= 3.0.4-1 130 rpmlib(FileDigests) <= 4.6.0-1 131 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 132 rtld(GNU_HASH) 133 rpmlib(PayloadIsXz) <= 5.2-1 134 135 136 137 [root@localhost Packages]# type rpm 138 rpm 已被哈希 (/usr/bin/rpm) 139 [root@localhost Packages]# rpm -qf /usr/bin/rpm 140 rpm-4.11.3-25.el7.x86_64 141 #查看软件来自哪个rpm包 142 ###不要卸载rpm包否则无法再次安装 143 144 145 [root@localhost Packages]# rpm -K tree-1.6.0-10.el7.x86_64.rpm 146 tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定 147 #查看相关的 签名是否合法View Code
安装、升级、卸载
安装或升级:rpm [选项] RPM包文件;-i、-U、-F
rpm -ivh 软件名——下载
rpm -e 软件名——卸载
选项 | 效果 |
---|---|
-i | 安装一个新的RPM软件包 |
-U | 升级某个软件包,若未安装过则进行安装 |
-F | 升级某个软件包,若未安装过则直接结束 |
-h | 在安装或升级过程中已#号显示读条 |
-v | 显示安装过程的详细信息 |
--force | 强制安装某个软件包 |
-e 软件名 | 卸载指定的软件 |
--nodeps | 在安装或升级、卸载一个软件包时,不检查与其他包的依赖关系 |
[root@localhost Packages]#rpm -e tree [root@localhost Packages]#rpm -ive tree [root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm #进入 错误:依赖检测失败: httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
挂载
格式:mount 设备 文件夹路径 (已存在且是空的文件夹,原来的数据将被隐藏)解挂载用umount
挂载规则
-
一个挂载点同一时间建议只挂载一个设备(windows里只能挂载一个,linux 可以挂载多个)
-
一个挂载点同一时间可以挂载了多个设备,但只能看到最后一个挂载设备的数据,其它设备上的数据将被隐藏,不推荐
-
一个设备可以同时挂载到多个挂载点
-
通常挂载点一般是已存在空的目录(不为空也行,但可能会丢失原文件,不建议)
解挂载时要离开目标目录,目标目录不该处于被使用状态
光驱有两种刻录模式,一个是类似于USB闪存驱动器(可反复存取);另一个是“带有CD/DVD播放器”
维护RPM数据库
1.重建RPM数据库
当RPM 数据库发生损坏,可通过 重建RPM 数据库 修复
rpm --rebuild 或者 rpm --initdb
2.导入验证公钥
在没有导入用于数字签名验证的公钥之前,安装光盘中的一部分RPM 包时会报错。需要向RPM数据库中导入位于光盘根目录下的公钥文件。
源代码编译安装
1、大部分是c语言开发的,更方便的使用
2、优点
-
软件版本比较新,新功能,修复bug
-
可以自行定义配置文件的路径
-
源码可能有100个功能,红帽认为你可能不需要会自行处理砍掉,自行定制50
rpm中的软件包都是别人二次加工好的,更新速度慢,内容固定。
3、程序包编译安装:
源代码-->预处理-->编译-->汇编-->链接-->执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系
虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具可以大大减少编译过程的复杂度
编译过程名词概述
Tarball封包:".tar.gz"".tar.bz2"居多
完整性校验:”md5sum校验工具“
确认源代码编译环境:需要安装支持C/C++程序语言的编译器,如gcc、fcc-c++、make......
#分步骤编译运行 gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成了hello.i 文件 gcc -S hello.i -o hello.s 对预处理文件进行编译,生成了汇编文件 gcc -c hello.s -o hello.o 对汇编文件进行编译,生成了目标文件 gcc hello.o -o hello 对目标文件进行链接,生成可执行文件 #一步实现编译过程 gcc hello.c -o hello 直接编译链接成可执行目标文件 #include<stdio.h> int main() { printf("Hello World!\n"); } [root@localhost nginx-1.18.0]#find -name "*.c" -exec cat {} \;|wc -l #查看 nginx 包里有多少行 179605 ldd
编译安装过程(三步)
1、检测环境,检测是否有编译工具——./configure(在源码下输入,检测是否缺少工具);./configure --prefix=/apps/httpd(指定安装目录的选项)
2、make编译,高级语言转为机器语言——编译时在源码包下编译(主要依靠configure工具)
3、安装进磁盘,放到文件里make install
yum 安装
YUM(Yellow dog Updater,Modified)
yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间
/etc/mine.types会规定网页链接会跳转展示、文件下载
前言:linux中有三种安装方式
1、编译安装,自由度最高、复杂度最高
systemctl管理程序的开机是否自启动关闭开启查看进程状态
.service需要手写
./configure
make
make install
2、rpm安装 写好 .service systemctl start|stop|reload|status|enable|disable
开启 停止 重新加载 状态 开机自启 关闭开机自启
缺点:只检测依赖关系的缺失,却不解决
rpm -q 软件名
rpm -qc 配置文件
rpm -ql 全部文件
安装
rpm -ivh 软件名
rpm -e 软件名
3、yum 不但检测还解决问题,yum仓库——服务端与客户端(服务端提供安装包;客户端安装)需要配置路径
服务端包含:
-
RPM包(Packages 文件夹中)
-
元数据(repodata文件夹:目录(软件的目录),软件的依赖关系,软件的位置)
元数据里有:
-
指明安装包路径
-
依赖关系
客户端需要包含:配置文件
配置文件格式:
客户端默认配置文件在/etc/yum.repo.d/
配置文件必须以.repo结尾
服务端位置路径(mirrorlist、baseurl)
如何实现安装服务
配置的文件格式
[ local ]仓库描述
name=local 仓库名字
baseurl=file:// /mnt 仓库路径——指明服务端的位置
gpgcheck=1检测
gpgkey=路径——验证文件路径
gpgkey=file:// /piki/rpm-gpg/
file://——代表本地
本地搭建YUM仓库(三种)
1网页搭建
2文件共享
3自己当仓库
mount /dev/sr0/mnt 挂载提供安装包和元数据
cd /etc/yum.repos.d/ 切换到客户端的指定目录
mkdir bak 建立文件夹存放网络yum仓库的配置文件
mv *.repo bak/ 将网络源移走,减少干扰
vim local.repo
[local]
name=local
baseurl=file://mnt
gpgcheck=0
自己实验练习一下:
1 ####测试连通性(与下列操作无关) 2 [root@localhost ~]#ping www.baidu.com 3 PING www.a.shifen.com (180.101.50.188) 56(84) bytes of data. 4 64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=1 ttl=128 time=0.417 ms 5 64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=2 ttl=128 time=5.01 ms 6 64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=3 ttl=128 time=0.581 ms 7 ^C 8 --- www.a.shifen.com ping statistics --- 9 3 packets transmitted, 3 received, 0% packet loss, time 2002ms 10 rtt min/avg/max/mdev = 0.417/2.005/5.017/2.130 ms 11 ###本地搭建YUM仓库 12 ##1、挂载提供安装包和元数据 13 [root@localhost ~]#mount /dev/sr0 /mnt/ 14 mount: 在 /dev/sr0 上找不到媒体 15 [root@localhost ~]#mount /dev/sr0 /mnt/ 16 mount: /dev/sr0 写保护,将以只读方式挂载 17 18 [root@localhost ~]#cd /etc/yum.repos.d/ 19 [root@localhost yum.repos.d]#mount /dev/sr0 /mnt/ 20 mount: /dev/sr0 写保护,将以只读方式挂载 21 ####2、建立文件夹存放网络yum仓库的配置文件 22 [root@localhost yum.repos.d]#mkdir bak 23 [root@localhost yum.repos.d]#ls 24 bak CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo 25 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo 26 ####3、移走网络源,减少干扰 27 [root@localhost yum.repos.d]#mv *.repo bak/ 28 ####4、编写本地yum仓库 29 [root@localhost yum.repos.d]#vim local.repo 30 ####文件里: 31 [local]##仓库描述 32 name=local##仓库名字 33 baseurl=file:///mnt##仓库路径——指明服务端的位置 34 gpgcheck=1## 35 ####5、清除缓存 36 [root@localhost yum.repos.d]#yum clean all 37 已加载插件:fastestmirror, langpacks 38 正在清理软件源: local 39 Cleaning up everything 40 Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos 41 Cleaning up list of fastest mirrors 42 ####6、重新构建元数据 43 [root@localhost yum.repos.d]#yum makecache 44 已加载插件:fastestmirror, langpacks 45 local | 3.6 kB 00:00:00 46 (1/4): local/group_gz | 156 kB 00:00:00 47 (2/4): local/primary_db | 3.1 MB 00:00:00 48 (3/4): local/other_db | 1.2 MB 00:00:00 49 (4/4): local/filelists_db | 3.1 MB 00:00:00 50 Determining fastest mirrors 51 元数据缓存已建立
标签:管理程序,安装,tree,软件包,root,rpm,localhost From: https://www.cnblogs.com/bacolate/p/17575193.html