1. Linux 系统上真正认识的可执行文件其实是二进制文件 ( binary program )
  2. shell scripts 只是利用 shell (例如 bash) 这支程序的功能进行一些判断式,而最终执行的除了 bash提供的功能外,它是呼叫一些已经编译好的二进制程序来执行的
  3. 小结:
    • 开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
    • 编译程序:将程序代码转译成为机器看的懂得语言,就类似翻译者的角色
    • 可执行文件:经过编译程序变成二进制程序后,机器看的懂所以可以执行的档案。
    • 函式库:就类似子程序的角色,可以被呼叫来执行的一段功能函数。
  4. 什么是 make 与 configure
    • make 是一支程序,会去找 Makefile,Makefile 的规则档案由侦测程序主动建立,通常这支侦测程序的文件名为 configure 或者是 config 。
    • 侦测程序会侦测的数据大约有底下这些:
      • 是否有适合的编译程序可以编译本软件的程序代码;
      • 是否已经存在本软件所需要的函式库,或其他需要的相依软件;
      • 操作系统平台是否适合本软件,包括 Linux 的核心版本;
      • 核心的表头定义档 (header include) 是否存在 (驱动程序必须要的侦测)。
  5. 什么是 Tarball 的软件
    • Tarball 档案,其实就是将软件的所有原始码档案先以 tar 打包,然后再以压缩技术来压缩。
    • Tarball 是一个软件包, 你将他解压缩之后,里面的档案通常就会有:
      • 源代码档案;
      • 侦测程序档案 (可能是 configure 或 config 等档名);
      • 本软件的简易说明与安装说明 (INSTALL 或 README)
  6. 更新的方法可以分为两大类,分别是:
    • 直接以原始码透过编译来安装与升级;
    • 直接以编译好的 binary program 来安装与升级。例如yum、APT等。
  7. Tarball 是如何安装的:
    1. 将 Tarball 由厂商的网页下载下来;
    2. 将 Tarball 解开,产生很多的原始码档案;
    3. 开始以 gcc 进行原始码的编译 (会产生目标文件 object files);
    4. 然后以 gcc 进行函式库、主、子程序的链接,以形成主要的 binary file;
    5. 将上述的 binary file 以及相关的配置文件安装至自己的主机上面。
      • 3, 4 步骤当中,我们可以透过 make 这个指令的功能来简化他,
      • 由于我们的原始码档案有时并非仅只有一个档案,所以我们无法直接进行编译。 这个时候就需要先产生目标文件,然后再以连结制作成为 binary 可执行文件。
  8. gcc 的简易用法 (编译、参数与链结)
    • 仅将原始码编译成为目标文件,并不制作链接等功能:

      • [root@www ~]# gcc -c hello.c.
    • 在编译的时候,依据作业环境给予优化执行速度
      • [root@www ~]# gcc -O hello.c -c
    • 在进行 binary file 制作时,将连结的函式库与相关的路径填入
      • [root@www ~]# gcc sin.c -lm -L/usr/lib -I/usr/include

        • -lm 指的是 libm.so 或 libm.a 这个函式库档案;

          • -l :是『加入某个函式库(library)』的意
          • m :则是 libm.so 这个函式库,其中, lib 与扩展名(.a 或 .so)不需要写
        • -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
        • -I 后面接的是原始码内的 include 档案之所在目录。
    • 将编译的结果输出成某个特定档名
      • [root@www ~]# gcc -o hello hello.c
    • 在编译的时候,输出较多的讯息说明
      • [root@www ~]# gcc -o hello hello.c -Wall
  9. 用 make 进行宏编译
    1. 例: 先创建makefile规则文件

      • vim makefile
      • main: main.o haha.o sin_value.o cos_value.o
        • gcc -o main main.o haha.o sin_value.o cos_value.o -lm
      • 执行make程序 make
    2. make 有这些好处:
      • 简化编译时所需要下达的指令;
      • 若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被修改了的档案进行编译,其他的 object file 不会被更动;
      • 最后可以依照相依性来更新 (update) 执行档。
    3. 基本的 makefile 规则是这样的:
      • 标的(target): 目标文件1 目标文件2
      • <tab> gcc -o 欲建立的执行文件 目标文件1 目标文件2

        • 『命令行必须要以 tab 按键作为开头』才行
      • 例:1. 先编辑 makefile 来建立新的规则,此规则的标的名称为 clean :

        • [root@www ~]# vi makefile
        • main: main.o haha.o sin_value.o cos_value.o
          • gcc -o main main.o haha.o sin_value.o cos_value.o -lm
        • clean:
          • rm -f main main.o haha.o sin_value.o cos_value.o
      • 2. 以新的标的 (clean) 测试看看执行 make 的结果:

        • [root@www ~]# make clean <==就是这里!透过 make 以 clean 为标的
        • rm -rf main main.o haha.o sin_value.o cos_value.o
      • makefile 里面就具有至少两个标的,分别是 main 与 clean
      • 例: 利用shell script简化makefile

        • [root@www ~]# vi makefile
        • LIBS = -lm
        • OBJS = main.o haha.o sin_value.o cos_value.o
        • main: ${OBJS}

          • gcc -o main ${OBJS} ${LIBS}
        • clean:

          • rm -f main ${OBJS}
        • 变量的基本语法为:

          • 变量与变量内容以『=』隔开,同时两边可以具有空格;
          • 变量左边不可以有 <tab> ,例如上面范例的第一行 LIBS 左边不可以是 <tab>;
          • 变量与变量内容在『=』两边不能具有『:』
          • 在习惯上,变数最好是以『大写字母』为主;
          • 运用变量时,以 ${变量} 或 $(变量) 使用;
          • 在该 shell 的环境变量是可以被套用的,例如提到的 CFLAGS 这个变数!
          • 在指令列模式也可以给予变量
          • make 指令列后面加上的环境变量为优先;
          • makefile 里面指定的环境变量第二;
          • shell 原本具有的环境变量第三。
          • $@:代表目前的标的(target)
  10. Tarball 安装的基本步骤
    1. 取得原始档:将 tarball 档案在 /usr/local/src 目录下解压缩;
    2. 取得步骤流程:进入新建立的目录底下,去查阅 INSTALL 与 README 等相关档案内容 (很重要的步骤!);
    3. 相依属性软件安装:根据 INSTALL/README 的内容察看并安装好一些相依的软件 (非必要);
    4. 建立 makefile:以自动侦测程序 (configure 或 config) 侦测作业环境,并建立 Makefile 这个档案;
    5. 编译:以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置文件,来进行 make (编译或其他) 的动作;
    6. 安装:以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个标的 (target) 的指定来安装到正确的路径!
      • 大部分的 tarball 软件之安装的指令下达方式:

        • ./configure
        • make clean
        • make
        • make install ,将上一个步骤所编译完成的数据给他安装到预定的目录中
  11. 安装的软件放置
    • 建议大家将自己安装的软件放置在 /usr/local 下,至于原始码 (Tarball)则建议放置在 /usr/local/src (src 为 source 的缩写)底下啊。
    • Linux distribution 默认的安装软件的路径
      • /etc/httpd  配置文件
      • /usr/lib  函式库
      • /usr/bin  执行档
      • /usr/share/man 联机帮助档
    • 以 tarball 来安装时:
      • /usr/local/etc
      • /usr/local/bin
      • /usr/local/lib
      • /usr/local/man
    • 如果你在安装的时候选择的是单独的目录:---------方便删除,但指令的路径要加到PATH当中
      • /usr/local/apache/etc
      • /usr/local/apache/bin
      • /usr/local/apache/lib
      • /usr/local/apache/man
  12. 为了方便 Tarball 的管理,通常鸟哥会这样建议使用者:
    1. 最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;
    2. 安装时,最好安装到 /usr/local 这个默认路径下;
    3. 考虑未来的反安装步骤,最好可以将每个软件单独的安装在 /usr/local 底下;
    4. 为安装到单独目录的软件之 man page 加入 man path 搜寻:
      • 如果你安装的软件放置到 /usr/local/software/ ,那么 man page 搜寻的设定中,可能就得要在/etc/man.config 内的 40~50 行左右处,写入如下的一行:MANPATH /usr/local/software/man
  13. 动态与静态函式库
    1. 静态函式库的特色:

      • 扩展名:(扩展名为 .a),这类的函式库通常扩展名为 libxxx.a 的类型;
      • 编译行为:这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的档案会比较大一些喔;
      • 独立执行的状态:这类函式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的内容 (请参照动态函式库的说明)
      • 升级难易度:在升级方面,只要函式库升级了,所有将此函式库纳入的程序都需要重新编译!
    2. 动态函式库的特色:
      • 扩展名:(扩展名为 .so),这类函式库通常扩展名为 libxxx.so 的类型;
      • 编译行为:动态函式库在编译的时候,在程序里面只有一个『指向 (Pointer)』的位置而已
      • 独立执行的状态:函式库档案『必须要存在』才行,而且,函式库的『所在目录也不能改变』。
      • 升级难易度:当函式库升级后,执行档根本不需要进行重新编译的行为,档名相同即可。
    3. 绝大多数的函式库都放置在:/usr/lib, /lib 目录下!kernel 的函式库放在/lib/modules 里面
  14. ldconfig 与 /etc/ld.so.conf
    • 将常用到的动态函式库先加载内存当中 (快取, cache),增进动态函式库的读取速度!
    1. 首先,我们必须要在 /etc/ld.so.conf 里面写下『 想要读入高速缓存当中的动态函式库所在的目录』,注意喔, 是目录而不是档案;
    2. 接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;
    3. 同时也将数据记录一份在 /etc/ld.so.cache 这个档案当中吶!
      • ldconfig [-f conf] [ -C cache]
      • ldconfig [-p]
        • -f conf :那个 conf 指的是某个文件名,也就是说,使用 conf 作为 libarary 函式库的取得路径,而不以 /etc/ld.so.conf 为默认值
        • -C cache:那个 cache 指的是某个文件名,也就是说,使用 cache 作为快取暂存 的函式库资料, 而不以 /etc/ld.so.cache 为默认值
        • -p :列出目前有的所有函式库资料内容 (在 /etc/ld.so.cache 内的资料
  15. 程序的动态函式库解析: ldd  -----------------判断某个可执行的 binary 档案含有什么动态函式库
    1. ldd [-vdr] [filename]

      • -v :列出所有内容信息;
      • -d :重新将资料有遗失的 link 点秀出来!
      • -r :将 ELF 有关的错诨内容秀出来!
    2. 例:范例一:找出 /usr/bin/passwd 这个档案的函式库数据
      • [root@www ~]# ldd /usr/bin/passwd
    3. 范例二:找出 /lib/libc.so.6 这个函式的相关其他函式库!
      • [root@www ~]# ldd -v /lib/libc.so.6
  16. 检验软件正确性
    1. md5sum/sha1sum [-bct] filename
    2. md5sum/sha1sum [--status|--warn] --check filename
      • -b :使用 binary 的读档方式,默认为 Windows/DOS 档案型态的读取方式;
      • -c :检验档案指纹;
      • -t :以文字型态来读取档案指纹。
    3. Linux 系统上为你的这些重要的档案进行指纹数据库的建立
      • /etc/passwd
      • /etc/shadow( 假如你不讥用户改密码了 )
      • /etc/group
      • /usr/bin/passwd
      • /sbin/portmap
      • /bin/login ( 这个也很容易被骇! )
      • /bin/ls
      • /bin/ps
      • /usr/bin/top

linux 软件的安装与Tarball的更多相关文章

  1. Linux软件的安装与卸载

    configure作用:是源码安装软件时配置环境用的 他根据你的配置选项和你的系统情况生成makefile文件 为make 做准备 最常用的参数: ./configure --prefix 作用: 不 ...

  2. linux软件的安装,更新与卸载

    Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类. 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件: 第二:对应的有管理 ...

  3. 分享几种Linux软件的安装方法

    Linux软件安装由于不同的Linux分支,安装方法也互不相同,介绍几种常见的安装方法. 1. 源码安装,     对于本身具有开源血统的Linux系统来说,几乎所有的开源软件都支持在Linux平台运 ...

  4. Linux实践篇--linux软件的安装,更新与卸载

    本文出处:http://www.cnblogs.com/lhj588/archive/2012/07/17/2595328.html,感谢作者分享. Linux常见的安装为tar,zip,gz,rpm ...

  5. 运维笔记10 (Linux软件的安装与管理(rpm,yum))

    概述:用rpm安装和管理软件(rpm解决依赖性),用yum安装与管理软件(yum解决依赖性). 1.linux的软件 linux能够说是一款改变时代的操作系统,可是一个操作系统再优秀假设没有好用的应用 ...

  6. linux软件的安装。使用rpm、yum或wget下载软件

    介绍 在linux中安装软件一般有一下几种方式: a.通过rpm包安装 b.通过yum在线安装(联网) c.weget url 在线下载软件(只负责下载,不安装) 1.通过rpm包来进行软件的安装和卸 ...

  7. Linux软件的安装方法!!!

    1.yum/rpm(*.rpm) 包管理器:直接yum/rpm安装. 优点:是全自动化安装,不需要为依赖问题发愁,缺点是自主性太差,软件的功能.存放位置固定,不易变更. 2.源码包(*.tar.gz) ...

  8. (十五)、linux软件的安装与查询-rpm与yum命令

    一.RPM软件管理程序:rpm 1.RPM安装软件(install) rpm命令的选项超级多,安装话直接使用-ivh即可,其余做了解即可 命令格式:rpm  -ivh  package_name.rp ...

  9. Linux软件的安装

    yum -y groups install "GNOME Desktop"  安装桌面系统startx  安装完成后输入指令进入到桌面化指令 安装tomcat sudo yum i ...

随机推荐

  1. Java上传文件

    Action /* * 后台商品管理的Action */ public class AdminProductAction extends ActionSupport implements ModelD ...

  2. Chrome和Firefox浏览器执行new Date() 函数传参数得到不同结果的陷阱

    某日,同事问到关于new Date() 函数传参数,在火狐浏览器和谷歌浏览器控制台运行,会得到不同的结果,刚开始觉得不可能,后来实际操作才发现此陷阱 var date = new Date('2014 ...

  3. cvs update后输出的文件标志 和 update常用的几个参数

    (1)update 和 checkout 在执行中,会为每个文件打印一行提示信息,文件的状态通过前面的单个字符指明:       U file        文件按要求从仓库得到更新.用在那些仓库里面 ...

  4. asp.net 一次性提交大量数据,服务器会报错,要在 web.config 中设置一下

    web.config <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应 ...

  5. Javascript猜数字游戏

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...

  6. Jmeter组件8. BeanShell Sampler

    BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样 ...

  7. Shuffling Machine和双向链表

    1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...

  8. 谈谈React Native环境安装中我遇到的坑

    谈谈React Native环境安装 这个坑把我困了好久,真的是接近崩溃的边缘...整理出来分享给大家,希望遇到跟我一样问题的小伙伴能尽快找到答案. 首先,这是在初始化App之后,react-nati ...

  9. 基于谷歌地图的Dijkstra算法水路路径规划

    最终效果图如下: 还是图.邻接表,可以模拟出几个对象=>节点.边.路径.三个类分别如下: Node 节点: using System; using System.Collections.Gene ...

  10. rabbitMQ学习(五)

    topic匹配模式,topic能满足匹配结果就行. 发送端: public class EmitLogTopic { private static final String EXCHANGE_NAME ...