目录:

1 软件包管理

软件包管理是一种在系统上安装、维护软件的方法。可以通过 Lunux 经销商发布的软件包来安装,也可通过自行下载源代码,进行编译安装。


软件包系统

不同的 Linux 发行版用的是不同的软件包系统,不同的软件包系统使用了不同的技术,即 Debian 的 .deb 技术和 Red Hat 的 .rpm 技术。下面列出了两个基本软件包系统:

  • Debian 类(.deb 技术):发行版本包括 ubuntu 等。
  • Red Hat 类(.rpm 技术):发行版本包括 CentOS、Fedora、Red Hat 等。

软件包的工作方式

软件包文件

一个压缩文件,包括安装文件、文本说明以及安装脚本等文件。

一个中心库或者第三方库包含了成千上万个软件包。

高级和低级软件工具

软件包管理系统通常包含两类工具————执行安装、删除软件包文件等任务的高级工具和进行元数据搜索及提供依赖性解决的低级工具。低级如 dpkg,rpm;高级如 apt-get,yum。

常见软件包管理任务

在库里面查找软件包(下面的代码例子都以 Debian 系统为例)。

1
2
> apt-get update
> apt-cache search search_string

安装库中的软件包

1
2
> apt-get update
> apt-get install package_name

安装软件包文件中的软件包,如果软件包文件并不是从库源中下载的,那么我们就可用低级工具直接安装。

1
> dpkg --install package_file

例如,先下载第三方 MySQL 的 .deb 文件,然后在安装。

1
> sudo dpkg -i /路径/mysql-apt-config_w.x.y-z_all.deb

删除软件包,删除软件包可利用高级工具,也可利用低级工具,高级命令如下:

1
> apt-get remove package_name

更新库中的软件包

1
2
> apt-get update
> apt-get upgrade

更新软件包文件的软件包

1
> dpkg --install package_name

列出已安装的软件包列表

1
> dpkg --list

判断软件包是否已安装

1
> dpkg --status package_name

显示已安装软件包的相关信息

1
> apt-cache show package_name


2 编译程序

介绍如何通过源代码生成可执行程序。

为什么要编译软件?有如下两个原因:

  • 库中的程序不能够满足用户的所有需求。
  • 库中的版本不一定存在最新的版本。

什么是编译

编译是一个将源代码翻译成计算机处理器能够识别的语言的过程。

计算机的发展过程中经历了一下几个变化:

  1. 机器语言(数值代码)
  2. 汇编语言
  3. 高级编程语言

高级语言编写的程序通过编译器转换为机器语言,有些编译器将高级语言先转换为汇编语言,然后在把汇编语言转换为机器语言。

链接器程序可以实现编译器的输出与编译程序所需要的库之间的链接。该操作可以生成一个可执行文件。

编译一个 C 程序

1.获取程序,如:diction-1.11.tar.gz
2.解压

1
> tar -xzf diction-1.11.tar.gz

3.生成程序

1
2
3
> ./configure
> make
> sudo make install

4.查看程序是否可执行

1
> which diction

在上面的步骤中,每个步骤都做了什么呢,我们具体分析一下:

  • configure 程序其实是源代码树下的一个 shell 脚本,它的任务就是分析生成环境,适应不同的环境来生成可执行程序,同时还会校验当前系统是否安装了必要的外部工具和组件。
  • Makefile 是 configure 在源目录生成的文件,描述了生成最后可执行程序时的各部件之间的联系及依赖关系,它的作用是指导 make 命令如何生成可执行成的配置文件, make 是 Linux 提供的一个程序,该程序的作用其实就是输入 Makefile 编译最终的程序。
  • 打包好的源代码一般包含一个特殊的 make 目标程序,它便是 install(install 是在当前 make 文件夹下生成的目标文件),该目标程序将会在系统目录下安装最后生成的可执行程序,通常会主动安装在 /usr/local/bin 目录下,为了获得执行权限,需要使用 sudo 命令来运行安装可执行程序。

补充:make 会生成需要生成的文件,如果没有改动,就不会执行任何操作。可用于维护目标文件的更新。

3 文件搜索和grep

在日常的 Linux 操作中,常常需要搜索文件或者匹配一些文件或内容,这就需要几个常用的搜索命令,主要包括 find、grep 等,接下来详细介绍下使用。

文件搜索

locate 命令,通过快速搜索数据库,寻找路径名与给定字符串相匹配的文件。

查找 bin 目录下,以 zip 开头的程序。

1
> locate bin/zip

补充:locate 的数据库的内容是通过每天的定时任务获得,不保证实时性,为了实时更新,可以手动执行 updatedb 程序。

locate 程序仅仅是依据文件名进行查找,而 find 程序则是依据文件的各种数属性在既定的目录里查找。find 程序有两个比较重要的选项,test 选项和 action 选项。首先介绍 test 选项。

限制文件类型搜索,在当前目录下搜索文类型文件,并统计数量:

1
> find ~ -type f | wc -l

find 支持的常用文件类型:

  • f:普通文件。
  • l:符号链接。
  • d:目录。
  • b:块设备。
  • c:字符设备文件。

find 命令支持多种 test 参数:

  • -name pattern:匹配特定通配符模式的文件或目录。
  • -newer file:匹配内容的修改时间比 file 更近的文件或目录。
  • -pern mode:寻找权限与模式匹配的目录或文件。
  • -size n:匹配 n 大小的文件。
  • type c:匹配 c 类型的文件。

更多的选项还是通过 find 的 man 命令查看。

test 选项之间的可以使用操作符,可以建立复杂的匹配条件。

查找访问权限不是 0600 的文件和访问权限不是0700 的目录:

1
> find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

上述命令中使用了 -or ,-not 和 () 操作符,还存在一种另外一种未使用过的 -and 操作符。命令中由于括号在 shell 环境下有特殊含义,所有要对它进行转义,使用反斜杠。

action 选项可以对搜索的结果执行动作。以下是预定义动作:

  • -delete:删除匹配文件。
  • -print:输入。

一个例子:

1
> find ~ type f -name "*.bak" -delete

用户也可以自定义动作,有两种方式,第一种方式是使用 exec 操作,另一种是使用 xargs 处理。

1
> find ~ -type f -name "foo*" -exec ls -l '{}' ';'

其中,{} 花括号代表的是当前路径,分号为必须得分隔符表示命令结束。该例子中每次找到匹配的文件后执行 ls -l 命令,-ok 会在执行前询问。

该命令的缺点就是匹配到文件后就会执行一次命令,用户更希望只调用一次就完成所有操作。可以使用 xargs 来提高效率。

1
> find ~ -type f -name "foo*" -print | xargs ls -l

find 命令执行结果直接作为 xargs 输入,xargs 将其转化为 ls 命令的输入参数列表,执行 ls 操作。在 xargs 命令后添加 –show-limits 可查看最大输入参数数量。

grep文本搜索

grep名字源于“global regular expression print”,grep 搜索文本文件中与指定正则表达式匹配的行,并将结果送至标准输出。

语法:
grep [optins] regex [file…]

grep 常用选:

  • -c:输出匹配项数目。
  • -n:匹配行前加上行号。
  • -r:递归搜索。
  • -l:只输出匹配文件名。

例子:

1
2
3
> grep bzip dirlist*.txt
dirlist-bin.txt:bzip2
dirlist-bin.txt:bzip2recover

命令在文件中搜索到了两个匹配项。

只展示匹配的文件:

1
2
> grep -l bzip dirlist*.txt
dirlist-bin.txt


4 网络

检查网络

ping——向网络主机发送特殊数据包,ping 命令会向指定的网络主机发送特殊的网络数据包 IMCP ECHO_REQUEST 。多数网络设备收到数据包后会做出回应,通过此法验证网络连接是否正常。

1
$ ping baidu.com

traceroute——跟踪网络数据包的传输路径,显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。

1
$ traceroute www.baidu.com

netstate——检查网络设置及相关统计数据,netstat 可用于查看不同网络及数据。

1
$ netstat -ie

该命令用于查看网络接口信息。该命令的输出中,第一个称为 eth0 ,是以太网端口;第二个称为 l0 ,是系统用来自己访问自己的回环虚拟接口。