Linux学习札记(四):程序编译和安装管理

本篇主要归纳总结Linux下程序编译和安装管理的相关知识点。

程序编写与管理

gcc命令

1
2
3
4
[hui@linux ~]$ gcc -c #编译程序
[hui@linux ~]$ gcc -O -c fie.c #根据环境使用最优化编译级别对程序进行编译
[hui@linux ~]$ gcc -o #连接程序,后加-Wall可输出最多信息
[hui@linux ~]$ gcc sin.c -lxx -L/lib -L/usr/lib #后两个参数可缺省,-l是加入函数库,m为libxx.so函数库

make命令

makefile文件规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
目标(target): 目标文件 1 目标文件 2
<tab> gcc -o 欲建立的执行文件 目标文件 1 目标文件 2
#makefile文件内容
main: c1.o c2.o
gcc -o hello c1.o c2.o
clean:
rm -f hello c1.o c2.o
# 先清除之前的编译文件再编译
[hui@linux ~]$ make clean main
#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}

通常一个未编译程序的安装步骤。如果安装在一个独立的目录中,需要将其man page的路径加入到/etc/man.config 里,在Ubuntu为/etc/manpath.config文件

  • ./configure,检测安装环境,生成makefile
  • make clean,清除之前留下的编译文件
  • make,编译文件生成可执行文件
  • make install,安装可执行文件

比较文件差异

1
2
3
4
#比较两个文件,并生成一个补丁
[hui@linux ~]$ diff -Naur expatch.old expatch.new > expatch.patch
#将补丁更新旧文件
[hui@linux ~]$ patch -p0 < expatch.patch #-p后数字为文件路径去掉几个“/”

动态函数库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#假如MySQL 数据库函式库在 /usr/lib/mysql 中,添加其到缓存
[hui@linux ~]$ vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib/mysql #这一行新增的啦!
#生成动态库
[hui@linux ~]$ gcc -shared -fPIC -o libtest.so test.c
#查看缓存中的函数库
[hui@linux ~]$ ldconfig -p
#查看某个文件的函数库
[hui@linux ~]$ ldd file
#找出 /lib/libc.so.6 这个函式的相关其它函式库,加-v参数可查看来源
[hui@linux ~]$ ldd /lib/libc.so.6

校验文件完整性

1
2
3
[hui@linux ~]$ wget http:www.lala.com/test.rpm #下载文件
[hui@linux ~]$ md5sum test.rpm #查看文件的md5
5a0c3fcfcd4c3f937644b8cd71a0cf89 test.rpm

程序管理

包管理工具

在Redhat系统的Linux发行版中主要使用rpm包管理工具,其软件包后缀为rpm。

rpm命令:

  • -i :install 的意思
    • -v :察看更细部的安装信息画面
    • -h :以安装信息列显示安装进度
1
2
3
4
5
6
7
8
9
10
[hui@linux ~]$ rpm -ivh file1.rpm file2.rpm #同时安装两个文件
[hui@linux ~]$ rpm -ivh http://website.name/path/pkgname.rpm #直接安装网上的文件
[hui@linux ~]$ rpm -Uvh fil... #后面的软件都会安装,如有旧版则升级
[hui@linux ~]$ rpm -Fvh fil... #能升级旧版软件
hui@hui-virtual-machine:~$ rpm -q python #查询某个软件是否安装
package python is not installed
[hui@linux ~]$ rpm -ql logrotate #查看某个软件的目录和文件
[hui@linux ~]$ rpm -e logrotate #卸载某个软件
[hui@linux ~]$ rpm -rebuilddb #卸载软件后需重建数据库

rpmbuild命令,用以安装SRPM文件
参数:

  • –rebuild,将SRPM进行编译和打包
  • –recompile,将SRPM进行编译和打包后安装

在Debian系统的Linux发行版中则主要使用apt-get包管理工具,这一系统的安装包后缀为deb。

apt-get命令

  • 安装软件,apt-get install
  • 卸载软件,apt-get remove
  • 卸载软件及配置文件, apt-get remove –purge
  • 卸载软件后删除无用的依赖,apt-get autoremove
  • 查看某一软件包的相关信息, apt-cache show

查看网络连接

1
2
3
[hui@linux ~]$ netstat -tulp #查看已经开户的网络服务
[hui@linux ~]$ netstat -lnp #查看有监听的网络服务
[hui@linux ~]$ netstat -anp #查看所有联网程序

systemctl,系统服务管理

1
2
3
4
5
[hui@linux ~]$ systemctl list-units --type=service #显示所有已开启的服务
[hui@linux ~]$ systemctl start nfs-server.service # 启动nfs服务,重启为restart
[hui@linux ~]$ systemctl enable nfs-server.service # 设置开机自启动
[hui@linux ~]$ systemctl disable nfs-server.service # 停止开机自启动
[hui@linux ~]$ systemctl status nfs-server.service # 查看服务当前状态

登录日志

  • /var/log/wtmp,记录登录用户的信息,已经被编码,必须由last命令读出
  • /var/log/messages,记录系统发生错误的信息或重要的信息
  • /var/log/boot.log,记录开机或服务启动时所显示的启动或关闭的信息
  • /var/log/mail.log,记录邮件的使用信息
  • /etc/syslogd,syslog配置各个服务记录日志所在路径的文件
1
2
3
4
5
6
7
[hui@linux ~]$ sudo vim /etc/rsyslog.conf
...
#所有等级为info或大于info的信息保存到指定路径
*.info /var/log/messages
#重启服务
[hui@linux ~]$ /etc/init.d/rsyslog restart

日志维护

登录日志的维护是靠logrotate来进行的,其配置文件为/etc/logrotate.conf和/etc/logrotate.d/

下的文件,前者为预设,后者存放每个服务建立的相应的配置文件,logrotate可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。

1
2
#执行一次 logrotate查看整个流程
[hui@linux ~]$ logrotte -v /etc/logrotate.conf