第七天:

1:true:真

0:false:假

与:只要有0结果就是0

或:只要有1结果就是1

短路与:

cmd1 短路与&& cmd2

如果cmd1 真,执行cmd2,结果未知

如果cmd1 假,不需要执行cmd2,结果为假


cmd1 短路或|| cmd2

如果cmd1 假,执行cmd2,结果未知

如果cmd1 真,不需要执行cmd2,结果为假


条件测试:

test:条件判断

test EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]:支持输入正则表达式


数值测试:

-gt 是否大于

-ge 是否大于等于

-eq 是否等于

-ne 是否不等于

-lt 是否小于

-le 是否小于等于

字符串测试:

= 是否等于

> ascii码是否大于ascii码

< 是否小于

!= 是否不等于

=~ 左侧字符串是否能够被右侧的PATTERN所匹配

   注意: 此表达式一般用于[[ ]]中;扩展的正则表达式

-z "STRING“ 字符串是否为空,空为真,不空为假

-n "STRING“ 字符串是否不空,不空为真,空为假

注意:用于字符串比较时的用到的操作数都应该使用引号

==后边是通配符,=~后边是正则表达式

[[ $file =~ \.sh$ ]] && chomd +x $file


存在性测试

-a FILE:同-e

-e FILE: 文件存在性测试,存在为真,否则为假

存在性及类别测试

-b FILE:是否存在且为块设备文件

-c FILE:是否存在且为字符设备文件

-d FILE:是否存在且为目录文件

-f FILE:是否存在且为普通文件

-h FILE 或 -L FILE:存在且为符号链接文件

-p FILE:是否存在且为命名管道文件

-S FILE:是否存在且为套接字文件

文件权限测试:

-r FILE:是否存在且可读

-w FILE: 是否存在且可写

-x FILE: 是否存在且可执行

文件特殊权限测试:

-u FILE:是否存在且拥有suid权限

-g FILE:是否存在且拥有sgid权限

-k FILE:是否存在且拥有sticky权限

文件大小测试:

-s FILE: 是否存在且非空

文件是否打开:

-t fd: fd 文件描述符是否在某终端已经打开

-N FILE:文件自从上一次被读取之后是否被修改过

-O FILE:当前有效用户是否为文件属主

-G FILE:当前有效用户是否为文件属组

双目测试:

FILE1 -ef FILE2: FILE1是否是FILE2的硬链接

FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)

FILE1 -ot FILE2: FILE1是否旧于FILE2

Bash的组合测试条件:

第一种方式:

COMMAND1 && COMMAND2 并且

COMMAND1 || COMMAND2 或者

! COMMAND 非

如:[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]

第二种方式:

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

必须使用测试命令进行,[[ ]] 不支持

示例:

[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] \

&& hostname www.magedu.com

[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

使用read命令来接受输入

使用read来把输入值分配给一个或多个shell变量

-p 指定要显示的提示

-s 静默输入,一般用于密码

-n N 指定输入的字符长度N

-d ‘字符’ 输入结束符

-t N TIMEOUT为N秒

read 从标准输入中读取值,给每个单词分配一个变量

所有剩余单词都被分配给最后一个变量

read -p “Enter a filename: “ FILE

条件选择if语句

单分支

if 判断条件;then

条件为真的分支代码

fi

双分支

if 判断条件; then

条件为真的分支代码

else

条件为假的分支代码

fi

多分支

if 判断条件1; then

条件1为真的分支代码

elif 判断条件2; then

条件2为真的分支代码

elif 判断条件3; then

条件3为真的分支代码

else

以上条件都为假的分支代码

fi

逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句


条件判断:case语句

case 变量引用 in case支持glob风格的通配符:

PAT1) *: 任意长度任意字符

分支1 ?: 任意单个字符

;; []:指定范围内的任意单个字符

PAT2) a|b: a或b

分支2

;;

...

*)

默认分支

;;

esac


bash如何展开命令行

把命令行分成单个命令词

展开别名

展开大括号的声明({})

展开波浪符声明(~)

命令替换$() 和 ``)

再次把命令行分成命令词

展开文件通配(*、?、[abc]等等)

准备I/0重导向(<、>)

运行命令


防止扩展

反斜线(\)会使随后的字符按原意解释

加引号来防止扩展

单引号(’)防止所有扩展

双引号(”)也防止所有扩展,但是以下情况例外:

$(美元符号) - 变量扩展

`(反引号) - 命令替换

\(反斜线) - 禁止单个字符扩展

!(叹号) - 历史命令替换


bash的配置文件

按生效范围划分,存在两类:

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc


交互式登录:

执行顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录:

执行顺序: /etc/profile.d/*.sh --> /etc/bashrc -->~/.bashrc


Profile类

按功能划分,存在两类:

profile类和bashrc类

profile类:为交互式登录的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh

个人:~/.bash_profile

功用:

(1) 用于定义环境变量

(2) 运行命令或脚本

Bashrc类

bashrc类:为非交互式和交互式登录的shell提供配置

全局:/etc/bashrc

个人:~/.bashrc

功用:

(1) 定义命令别名和函数

(2) 定义本地变量

Bash 退出任务

保存在~/.bash_logout文件中(用户)

在退出登录shell时运行

用于

•创建自动备份

•清除临时文件

$-变量

h:hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭

i:interactive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,在脚本中,i选项是关闭的。

m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。

B:braceexpand,大括号扩展

H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第 n 个历史命令


文件的查找和压缩

文件查找:locate, find

非实时查找(数据库查找):locate

实时查找:find

locate

查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

依赖于事先构建的索引

索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)

索引构建过程需要遍历整个根文件系统,极消耗资源

工作特点:

•查找速度快

•模糊查找

•非实时查找

•搜索的是文件的全路径,不仅仅是文件名

•可能只搜索用户具备读取和执行权限的目录

有用的选项

-i 不区分大小写的搜索

-n N 只列举前N个匹配项目

-r 使用基本正则表达式

示例

搜索名称或路径中带有“conf”的文件

locate conf

使用Regex来搜索以“.conf”结尾的文件

locate -r ‘\.conf$’

find:

实时查找工具,通过遍历指定路径完成文件查找

工作特点:

• 查找速度略慢

• 精确查找

• 实时查找

• 可能只搜索用户具备读取和执行权限的目录

find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

选项:

指搜索层级

-maxdepth level 最大搜索目录深度,指定目录为第1级

-mindepth level 最小搜索目录深度

先处理目录内的文件,再处理目录

-depth

根据文件名和inode查找:

-name "文件名称":支持使用glob

*, ?, [], [^]

-iname "文件名称":不区分字母大小写

-inum n 按inode号查找

-samefile name 相同inode号的文件

-links n 链接数为n的文件

-regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称

根据属主、属组查找:

-user USERNAME:查找属主为指定用户(UID)的文件

-group GRPNAME: 查找属组为指定组(GID)的文件

-uid UserID:查找属主为指定的UID号的文件

-gid GroupID:查找属组为指定的GID号的文件

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

根据文件类型查找

-type TYPE

•f: 普通文件

•d: 目录文件

•l: 符号链接文件

•s:套接字文件

•b: 块设备文件

•c: 字符设备文件

•p: 管道文件

空文件或目录

-empty

find /app -type d -empty

组合条件:

与:-a

或:-o

非:-not !

德·摩根定律:

(非 A) 或 (非 B) = 非(A 且 B)

(非 A) 且 (非 B) = 非(A 或 B)

示例:

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根据文件大小来查找:

-size [+|-]#UNIT

常用单位:k, M, G,c(byte)

#UNIT: (#-1, #]

如:6k 表示(5k,6k]

-#UNIT:[0,#-1]

如:-6k 表示[0,5k]

+#UNIT:(#,∞)

如:+6k 表示(6k,∞)

处理动作

-print:默认的处理动作,显示至屏幕

-ls:类似于对查找到的文件执行“ls -l”命令

-delete:删除查找到的文件

-fls file:查找到的所有文件的长格式信息保存至指定文件中

-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认

-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

{}: 用于引用查找到的文件名称自身

find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

压缩工具:

gzip:

-d 解压缩,相当于gunzip

-c 结果输出至标准输出,保留原文件不改变

-# 指定压缩比,#取值为1-9,值越大压缩比越大

gunzip file.gz 解压缩

zcat file.gz 不显式解压缩的前提下查看文本文件内容

示例:

gzip -c messages >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

cat messages | gzip > m.gz


bzip2/bunzip2/bzcat:

bzip2 [OPTION]... FILE ...

-k keep, 保留原文件

-d 解压缩

-# 1-9,压缩比,默认为9

bunzip2 file.bz2 解压缩

bzcat file.bz2 不显式解压缩的前提下查看文本文件内容


xz/unxz/xzcat:

xz [OPTION]... FILE ...

-k keep, 保留原文件

-d 解压缩

-# 压缩比,取值1-9,默认为6

unxz file.xz 解压缩

xzcat file.xz 不显式解压缩的前提下查看文本文件内容


zip/unzip

打包压缩

zip –r /backup/sysconfig /etc/sysconfig/

解包解压缩

unzip sysconfig.zip

cat /var/log/messages | zip messages -

unzip -p message > message


tar工具

tar(Tape ARchive,磁带归档的缩写)

tar [OPTION]...

(1) 创建归档

tar -cpvf /PATH/FILE.tar FILE...

(2) 追加文件至归档: 注:不支持对压缩文件追加

tar -r -f /PATH/FILE.tar FILE...

(3) 查看归档文件中的文件列表

tar -t -f /PATH/FILE.tar

(4) 展开归档

tar -x -f /PATH/FILE.tar

tar -x -f /PATH/FILE.tar -C /PATH/

(5) 结合压缩工具实现:归档并压缩

-j: bzip2, -z: gzip, -J: xz

-exclude 排除文件

tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app

-T 选项指定输入文件 -X 选项指定包含要排除的文件列表

tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist


split:分割一个文件为多个文件

分割大的 tar 文件为多份小文件

split -b Size –d tar-file-name prefix-name

split -b 1M –d mybackup.tgz mybackup-parts

split -b 1M mybackup.tgz mybackup-parts

合并:

cat mybackup-parts* > mybackup.tar.gz


第八天:

cpio:复制文件从或到归档

cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件

cpio [选项] > 文件名或者设备名

cpio [选项] < 文件名或者设备名

选项:

-o 将文件拷贝打包成文件或者将文件输出到设备上

-O filename 输出到指定的归档文件名

-A 向已存在的归档文件中追加文件

-i 解包,将打包文件解压或将设备上的备份还原到系统

-I filename 对指定的归档文件名解压

-t 预览,查看文件内容或者输出到设备上的文件内容

-F filename 使用指定的文件名替代标准输入或输出

-d 解包生成目录,在cpio还原时,自动的建立目录

-v 显示打包过程中的文件名称


文本处理三剑客之SED

Stream EDitor, 行编辑器

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

参考: http://www.gnu.org/software/sed/manual/sed.html

用法:

sed [option]... 'script' inputfile...

常用选项:

-n 不输出模式空间内容到屏幕,即不自动打印

-e 多点编辑

-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本

-r 支持使用扩展正则表达式

-i.bak 备份文件并原处编辑

script:

'地址命令'

地址定界:

(1) 不给地址:对全文进行处理

(2) 单地址:

#: 指定的行,$:最后一行

/pattern/:被此处模式所能够匹配到的每一行

(3) 地址范围:

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4) ~:步进

1~2 奇数行

2~2 偶数行

编辑命令:

d 删除模式空间匹配的行,并立即启用下一轮循环

p 打印当前模式空间内容,追加到默认输出之后

a [\]text 在指定行后面追加文本,支持使用\n实现多行追加

i [\]text 在行前面插入文本

c [\]text 替换行为单行或多行文本

w /path/file 保存模式匹配的行至指定文件

r /path/file 读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行打印行号

! 模式空间中匹配行取反处理

s/// 查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

g 行内全局替换

p 显示替换成功的行

w /PATH/FILE 将替换成功的行保存至文件中

高级编辑命令

P: 打印模式空间开端至\n内容,并追加到默认输出之前

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:读取匹配到的行的下一行追加至模式空间

d: 删除模式空间中的行

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环



软件包管理


软件运行和编译:

ABI:Application Binary Interface

Windows与Linux不兼容

ELF(Executable and Linkable Format)

PE(Portable Executable)

库级别的虚拟化:

Linux: WINE

Windows: Cygwin

API:Application Programming Interface

POSIX:Portable OS

程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接

静态编译:.a

动态编译:.so


解决依赖包管理工具:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具


CentOS系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装:

rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose

-vv:

-h: 以#显示程序包管理执行进度

-e:卸载软件

--force强制安装

rpm -ivh PACKAGE_FILE ...

rpm包升级

升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

rpm {-F|--freshen} [install-options] PACKAGE_FILE...

--oldpackage:降级

--force: 强制安装

yum:

CentOS: yum, dnf

YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具

yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)

文件服务器:

http://

https://

ftp://

file://



第九天:

yum客户端配置文件:

/etc/yum.conf:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置

仓库指向的定义:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/

enabled={1|0}

gpgcheck={1|0}

gpgkey=URL

enablegroups={1|0}

failovermethod={roundrobin|priority}

roundrobin:意为随机挑选,默认值

priority:按顺序访问

cost= 默认为1000


yum仓库

yum的repo配置文件中可用的变量:

$releasever: 当前OS的发行版的主版本号

$arch: 平台,i386,i486,i586,x86_64等

$basearch:基础平台;i386, x86_64

$YUM0-$YUM9:自定义变量

实例:

http://server/centos/$releasever/$basearch/

http://server/centos/7/x86_64

http://server/centos/6/i384


yum源

阿里云repo文件

http://mirrors.aliyun.com/repo/

CentOS系统的yum源

阿里云:https://mirrors.aliyun.com/centos/ $releasever/os/x86_64/

清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/

EPEL的yum源

阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64

阿里巴巴开源软件

https://opsx.alibaba.com/


yum-config-manager

生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo

yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/

yum-config-manager --disable “仓库名" 禁用仓库

yum-config-manager --enable “仓库名” 启用仓库


yum命令

yum命令的用法:

yum [options] [command] [package ...]

显示仓库列表:

yum repolist [all|enabled|disabled]

显示程序包:

yum list

yum list [all | glob_exp1] [glob_exp2] [...]

yum list {available|installed|updates} [glob_exp1] [...]

安装程序包:

yum install package1 [package2] [...]

yum reinstall package1 [package2] [...] (重新安装)

升级程序包:

yum update [package1] [package2] [...]

yum downgrade package1 [package2] [...] (降级)

检查可用升级:

yum check-update

卸载程序包:

yum remove | erase package1 [package2] [...]

查看程序包information:

yum info [...]

查看指定的特性(可以是某文件)是由哪个程序包所提供:

yum provides | whatprovides feature1 [feature2] [...]

清理本地缓存:

清除/var/cache/yum/$basearch/$releasever缓存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

构建缓存:

yum makecache

搜索:yum search string1 [string2] [...]

以指定的关键字搜索程序包名及summary信息

查看指定包所依赖的capabilities:

yum deplist package1 [package2] [...]

查看yum事务历史:

yum history [info|list|packages-list|packages-info|

summary|addon-info|redo|undo|

rollback|new|sync|stats]

yum history

yum history info 6

yum history undo 6

日志 :/var/log/yum.log

安装及升级本地程序包:

yum localinstall rpmfile1 [rpmfile2] [...]

(用install替代)

yum localupdate rpmfile1 [rpmfile2] [...]

(用update替代)

包组管理的相关命令:

yum groupinstall group1 [group2] [...]

yum groupupdate group1 [group2] [...]

yum grouplist [hidden] [groupwildcard] [...]

yum groupremove group1 [group2] [...]

yum groupinfo group1 [...]

yum的命令行选项:

--nogpgcheck:禁止进行gpg check

-y: 自动回答为“yes”

-q:静默模式

--disablerepo=repoidglob:临时禁用此处指定的repo

--enablerepo=repoidglob:临时启用此处指定的repo

--noplugins:禁用所有插件

系统安装光盘作为本地yum仓库:

(1) 挂载光盘至某目录,例如/mnt/cdrom

mount /dev/cdrom /mnt/cdrom

(2) 创建配置文件

[CentOS7]

name=

baseurl=

gpgcheck=

enabled=

创建yum仓库:

createrepo [options] <directory>


DNF (DaNdiFied)

DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等


安装所需软件包,依赖epel源

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm

wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm

yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm

配置文件:/etc/dnf/dnf.conf

仓库文件:/etc/yum.repos.d/ *.repo

日志: /var/log/dnf.rpm.log


DNF 使用:

帮助:man dnf

dnf 用法:与yum一致

dnf [options] <command> [<arguments>...]

dnf --version

dnf repolist

dnf clean all

dnf makecache

dnf list installed

dnf list available

dnf search nano

dnf history

dnf history undo 1


程序包编译:

程序包编译安装:

Application-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装

源代码-->预处理-->编译-->汇编-->链接-->执行

源代码组织格式:

多文件:文件中的代码之间,很可能存在跨文件依赖关系

C、C++:make 项目管理器

configure脚本 --> Makefile.in --> Makefile

java: maven


C语言源代码编译安装三步骤:

1、./configure

(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile

(2) 检查依赖到的外部环境,如依赖的软件包

2、make 根据Makefile文件,构建应用程序

3、make install 复制文件到相应路径

开发工具:

autoconf: 生成configure脚本

automake:生成Makefile.in

注意:安装前查看INSTALL,README


开源程序源代码的获取:

官方自建站点:

apache.org (ASF:Apache Software Foundation)

mariadb.org

...

代码托管:

SourceForge.net

Github.com

code.google.com

c/c++编译器: gcc (GNU C Complier)

编译C源代码:

准备:提供开发工具及开发环境

开发工具:make, gcc等

开发环境:开发库,头文件

glibc:标准库

实现:通过“包组”提供开发组件

Development Tools

Server Platform Development

编译C源代码:

准备:提供开发工具及开发环境

开发工具:make, gcc等

开发环境:开发库,头文件

glibc:标准库

实现:通过“包组”提供开发组件

Development Tools

Server Platform Development

第一步:configure脚本

选项:指定安装位置、指定启用的特性

--help: 获取其支持使用的选项

选项分类:

安装路径设定:

--prefix=/PATH: 指定默认安装位置,默认为/usr/local/

--sysconfdir=/PATH:配置文件安装位置

System types:支持交叉编译

Optional Features: 可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

Optional Packages: 可选包

--with-PACKAGE[=ARG],依赖包

--without-PACKAGE,禁用依赖关系

注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION

第二步:make

第三步:make install

安装后的配置:

(1) 二进制程序目录导入至PATH环境变量中

编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2) 导入帮助手册

编辑/etc/man.config|man_db.conf文件

添加一个MANPATH


Ubuntu 软件管理

dpkg常见用法: man dpkg

dpkg -i package.deb 安装包

dpkg -r package 删除包,不建议,不自动卸载依赖于它的包

dpkg -P package 删除包(包括配置文件)

dpkg -L package 列出与该包关联的文件,类似rpm –ql

dpkg -l 列出当前已安装的包,类拟rpm -qa

dpkg -l package 显示该包的版本

dpkg --unpack package.deb 解开 deb 包的内容

dpkg -S keyword 搜索所属的包内容说明

dpkg -c package.deb 列出 deb 包的内容,类似rpm –qpl

dpkg --configure package 配置包,-a 使用,配置所有没有配置的软件包

dpkg示例:

列出系统上安装的所有软件包:

dpkg –l

列出软件包安装的文件:

dpkg -L bash

查看/bin/bash来自于哪个软件包:

dpkg -S /bin/bash

安装本地的 .deb 文件:

dpkg -i zip/zip_3.0-11build1_amd64.deb

卸载软件包:

dpkg -r zip

注意:一般建议不要使用dpkg卸载软件包。因为删除包时,但依赖于它的任何包仍将安装,并且可能无法再正常运行


apt与apt-get命令对比

apt 命令 被取代的命令 命令的功能

apt install apt-get install 安装软件包

apt remove apt-get remove 移除软件包

apt purge apt-get purge 移除软件包及配置文件

apt update apt-get update 刷新存储库索引

apt upgrade apt-get upgrade 升级所有可升级的软件包

apt autoremove apt-get autoremove 自动删除不需要的包

apt full-upgrade apt-get dist-upgrade 在升级软件包时自动处理依赖关系

apt search apt-cache search 搜索应用程序

apt show apt-cache show 显示安装细节




磁盘存储和文件系统:

I/O Ports: I/O设备地址

一切皆文件:open(), read(), write(), close()

设备类型:

块设备:block,存取单位“块”,磁盘

字符设备:char,存取单位“字符”,键盘

设备文件:

关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备号码:

主设备号:major number, 标识设备类型

次设备号:minor number, 标识同一类型下的不同设备


硬盘接口类型

并行:

IDE:133MB/s

SCSI:640MB/s


串口:

SATA:6Gbps

SAS:6Gbps

USB:480MB/s

rpm:rotations per minute


机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤

固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致

相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍

相较于SSD,HDD在价格、容量占有绝对优势

硬盘有价,数据无价,目前SSD不能完全取代HHD

磁盘设备的设备文件命名:/dev/DEV_FILE

SCSI, SATA, SAS, IDE,USB: /dev/sd

虚拟磁盘:/dev/vd 、/dev/xvd

不同磁盘标识:a-z,aa,ab…

/dev/sda, /dev/sdb, ...

同一设备上的不同分区:1,2, ...

/dev/sda1, /dev/sda5

硬盘存储术语

head:磁头

track:磁道

cylinder:柱面

sector:扇区,512bytes