`

Linux笔记

阅读更多
Linux应用软件安装基本方法

  要充分发挥电脑的作用,就得有大量的应用软件,完成不同的工作。在Windows环境中安装各种应用软件的思路与方法,想必大家早已熟悉。然而,在使用Linux时,我们却总会被这些本不应该是问题的问题所困扰:怎么安装应用软件?我的软件安装在什么地方?如何删除不要的应用软件?……

  下面,我们就一起来认识一下这些方面的知识。

一、解析Linux应用软件安装包
  通常Linux应用软件的安装包有三种:

  1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。

  2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。

  3) dpkg包,如software-1.2.3-1.deb。它是Debain Linux提供的一种包封装格式。

  而且,大多数Linux应用软件包的命名也有一定的规律,它遵循:

  名称-版本-修正版-类型

  例如:

  1)software-1.2.3-1.tar.gz 意味着:

   软件名称:software

   版本号:1.2.3

   修正版本:1

   类型:tar.gz,说明是一个tar包。

  2)sfotware-1.2.3-1.i386.rpm

   软件名称:software

   版本号:1.2.3

   修正版本:1

   可用平台:i386,适用于Intel 80x86平台。

   类型:rpm,说明是一个rpm包。

   注:由于rpm格式的通常是已编译的程序,所以需指明平台。在后面会详细说明。

  而software-1.2.3-1.deb就不用再说了吧!大家自己练习一下。

二、了解包里的内容
  一个Linux应用程序的软件包中可以包含两种不同的内容:

  1)一种就是可执行文件,也就是解开包后就可以直接运行的。在Windows中所 有的软件包都是这种类型。安装完这个程序后,你就可以使用,但你看不到源程序。而且下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。

  2)另一种则是源程序,也就解开包后,你还需要使用编译器将其编译成为可执行文件。这在Windows系统中是几乎没有的,因为Windows的思想是不开放源程序的。

  通常,用tar打包的,都是源程序;而用rpm、dpkg打包的则常是可执行程序。一般来说,自己动手编译源程序能够更具灵活性,但也容易遇到各种问题和困难。而相对来说,下载那些可执行程序包,反而是更容易完成软件的安装,当然那样灵活性就差多了。所以一般一个软件总会提供多种打包格式的安装程序的。你可以根据自己的情况来选择。

三、搞定使用tar打包的应用软件
  1. 安装:

  整个安装过程可以分为以下几步:

  1)取得应用软件:通过下载、购买光盘的方法获得;

  2)解压缩文件:一般tar包,都会再做一次压缩,如gzip、bz2等,所以你需要先解压。如果是最常见的gz格式,则可以执行:“tar –xvzf 软件包名”,就可以一步完成解压与解包工作。如果不是,则先用解压软件,再执行“tar –xvf 解压后的tar包”进行解包;

  3)阅读附带的INSTALL文件、README文件;

  4)执行“./configure”命令为编译做好准备;

  5)执行“make”命令进行软件编译;

  6)执行“make install”完成安装;

  7)执行“make clean”删除安装时产生的临时文件。

  好了,到此大功告成。我们就可以运行应用程序了。但这时,有的读者就会问,我怎么执行呢?这也是一个Linux特色的问题。其实,一般来说,Linux的应用软件的可执行文件会存放在/usr/local/bin目录下!不过这并不是“放四海皆准”的真理,最可靠的还是看这个软件的INSTALL和README文件,一般都会有说明。

  2. 卸载:

  通常软件的开发者很少考虑到如何卸载自己的软件,而tar又仅是完成打包的工作,所以并没有提供良好的卸载方法。

  那么是不是说就不能够卸载呢!其实也不是,有两个软件能够解决这个问题,那就是Kinstall和Kife,它们是tar包安装、卸载的黄金搭档。它们的使用方法,笔者会另行文介绍。在此就不加赘述了。

四、搞定使用rpm打包的应用软件
  rpm可谓是Redhat公司的一大贡献,它使Linux的软件安装工作变得更加简单容易。

  1. 安装:

  我只需简单的一句话,就可以说完。执行:

   rpm –ivh rpm软件包名

  更高级的,请见下表:

  rpm参数      参 数 说 明
   -i         安装软件
   -t      测试安装,不是真的安装
   -p        显示安装进度
   -f        忽略任何错误
   -U         升级安装
   -v      检测套件是否正确安装


  这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。

  2. 卸载:

  我同样只需简单的一句话,就可以说完。执行:

   rpm –e 软件名

  不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:

   rpm –ivh software-1.2.3-1.i386.rpm

  而当卸载时,则应执行:

   rpm –e software。

  另外,在Linux中还提供了象GnoRPM、kpackage等图形化的RPM工具,使得整个过程会更加简单。这些软件的具体应用,笔者会另行文介绍。

五、搞定使用deb打包的应用程序
  这是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得更早,所以在各种版本的Linux都常见到。而debian的包管理器dpkg则只出现在Debina Linux中,其它Linux版本一般都没有。我们在此就简单地说明一下:

  1. 安装

   dpkg –i deb软件包名

   如:dpkg –i software-1.2.3-1.deb

  2. 卸载

   dpkg –e 软件名

   如:dpkg –e software

















不同的linux发行版的命令数量不一样,但是最少的命令也有200多个。

基本Shell命令使用:(区分大小写)
(1) 创建目录:mkdir
mkdir /home/dor
mkdir -p /home/dir/dr2 同时创建两个目录dir和dr2
(2) 显示目录
dir /home/xia
ls /home/xia 基本相同
ls -a 显示所有包括隐藏文件
ls -l 以列的形式 并显示文件的详细信息
ls -lat 显示文件的建立时间
ls -al a+l
(3) cd 目录定义
cd .. 回上一层目录
cd 或者 cd ~ 回主目录
(4) 移动 mv
mv /home/dir/dr /home/dir 文件夹移动
mv /home/dir/dir2/t /home/dir 文件移动
(5) 复制 cp
cp 复制文件
cp -r 复制文件夹 子目录 文件
cp -a 复制目录 子目录
cp -f 强制复制不提示覆盖
cp -i 提示覆盖
(6) 删除 rm 删除文件
rm -r 删除文件夹 包括非空的目录
rmdir 删除目录(空目录)
(7)cat 创建文本文件
cat >f2 之后输入文本内容........
按ctrl+D 结束输入,存盘退出
   若与现有文件重名,会覆盖
(8) vi文本编辑器
vi 1.txt 创建一个文本文件,若存在则打开该文件
按i 命令模式->输入模式
按ESC 输入模式->命令模式
命令模式下 按: 命令模式->末行输入模式
输入wq 存盘退出
输入q! 不存盘退出
命令模式下 h l j k可移动光标
<Ubuntu下也可以用gedit启动进行编辑>
(9) 解压
*.tar.gz 用tar -xzvf解压
*.tar.bz2 用tar -xjvf解压
*.rar unrar e 文件名 (注意没有-)
*.zip unzip 文件名
(10) gcc
gcc new.c ./a.out 默认生成a.out文件
gcc -o new new.c 生成new可执行二进制文件
gcc -o new.c 不可以这样用
以上:new.c必须在用户目录或者当前目录下
gcc -o new /home/xia/Down/new.c
生成的new也在用户目录或者当前目录下
(10)其他
安装和登陆命令:login shutdown halt reboot install mount umount chsh exit
网络操作: ifconfig ip ping telnet ftp route
find 档案搜寻 date 现在时间日期 who 查询目前和你使用同一台机器的人及login地点
w 查询目前上机者的详细资料 ps 显示进程状态 kill 停止某进程 su 权限转换
















gcc命令:

(1) 二进制可执行文件没有后缀(用cygwin生成的有exe后缀),加上任意的后缀均可。
gcc example.c //生成默认二进制文件 a.out 或者a.exe(cygwin环境)

gcc -o example example.c
gcc example.c -o example //两种写法均可,生成example二进制可执行文件

(2) 目标文件后缀名为.o 不能直接执行
gcc -c example.c
gcc example.c -c //两种写法均可,生成example.o目标文件

//不能使用gcc -c ex.o example.c生成指定文件名的.o文件
但是可以使用如下语句:
gcc -c example.c -o ex.o 或
gcc -c -o ex.o example.c
从而生成ex.o目标文件



gcc 编译选项中:
-o 要求编译器生成指定文件名的可执行文件
-c 要求编译器只进行编译不链接,生成.o目标文件 文件名为源文件的名字,将其后缀.c或.cc改成.o
-g 提供以后对程序进行调试的信息 (使用gdb进行调试时必须使用该选项)
-Wall 指定生成全部的警告信息
-O 编译时使用该选项进行优化,提高可执行文件的效率












gcc编译过程:

参考:http://it.china-b.com/linux/linuxbc/20090525/19438_1.html

===================================================


在使用GCC编译程序时,编译过程可以被细分为四个阶段:

预处理(Pre-Processing)

编译(Compiling)

汇编(Assembling)

链接(Linking)
====================
hello.c:

#include <stdio.h>

void main(){
printf("Hello World!");

}


然后执行下面的命令编译和运行这段程序:

# gcc hello.c -o hello
# ./hello
Hello World!
从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。首先,GCC需要调用预处理程序 cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着,GCC会调用ccl和as将处理后的源代码编译成目 标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。

为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。

*************************************************************

第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:


# gcc -E hello.c -o hello.i

此时若查看hello.cpp文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。

********************************************************
下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:


# gcc -c hello.i -o hello.o

GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。

***********************************************************
最后一步是将生成的目标文件链接成可执行文件:


# gcc hello.o -o hello

*******************************************************

在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成 了多个编译单元,使用GCC能够很好地治理这些编译单元。假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成 可执行程序foo,可以使用下面这条命令:


# gcc foo1.c foo2.c -o foo

假如同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。假如深究起来,上面这条命令大致相当于依次执行如下三条命令:


# gcc -c foo1.c -o foo1.o
# gcc -c foo2.c -o foo2.o
# gcc foo1.o foo2.o -o foo












Makefile 编写基本规则:

GNU Make的工作主要是读一个文本文件makefile。makefile是用bash语言写的,是一种很像basic的一种命令解释语言。这个文件主要描述了有关哪些文件时从哪些依赖文件中产生的,是用何种命令来进行这个产生过程的。有了这些信息,make就会检查磁盘的文件,如果目标文件的日期至少比它的一个依赖文件日期早的话,make就会执行相应命令,以更新目标文件。

一个makefile主要规则
目标文件名:依赖文件名
(Tab键)命令

最简单的makefile:

Hello : Hello.c
gcc -o Hello Hello.c
=============================
包含两个源文件的makefile

executable : main.o io.o
gcc main.o io.o -o excutable
main.o : main.c
gcc -c main.c -o main.o
io.o : io.c
gcc -c io.c -o io.o

========================
make从第一条规则开始,executable是makefile最终要生成的二进制可执行文件。
给出的规则说明executable依赖于两个目标文件 main.o io.o
如果executable比它依赖的文件中任何一个旧的话,下一行命令就会被执行。
但是,在检查main.o和io.o之前,它会往下查找那些把main.o和io.o作为目标文件的规则,即main.o依赖于main.c,如果main.o早于main.c,下面的命令就会被执行。
==========================

makefile既可以使用简单的命令,也可以使用分布式的命令,参考上面关于gcc的编译过程。
===========================================
安装开源软件的过程:

执行“./configure”命令为编译做好准备;

执行“make”命令进行软件编译;

执行“make install”完成安装;

执行“make clean”删除安装时产生的临时文件

目标文件包里经常只有configure configure.in makefile.am和makefile.in
这些文件和makefile是什么关系呢?
如下:

http://otho.douban.com/view/photo/photo/9613d191ee27ae16ae111e784e0e436d/x482983335.jpg


参考:
http://jaguar13.iteye.com/blog/614427
















转载自:http://www.douban.com/group/topic/11441467/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics