鸟哥的Linux私房菜-基础学习篇(第四版)_读书笔记

鸟哥的Linux私房菜-基础学习篇(第四版)_读书笔记

第四章 首次登入与在线求助

4.2 文本模式下指令的下达

4.2.2 基础指令的操作

cal

cal					# 查看当月日历
cal -3				# 查看最近3月的日历(前月、当月、后月)

cal 2020			# 查看 2020 年的日历
cal -y 2020			# 查看 2020 年的日历

cal 3 2020			# 查看 2020 年 3 月的日历

Linux命令模式下查看日历

第六章 Linux 文件与目录管理

6.1 目录与路径

6.2 文件与目录管理

6.1.2 目录的相关操作

mkdir (建立新目录)

  • -v :verbose,创建过程可视化
  • -p :parents,先创建父目录,在创建子目录
mkdir -pv /data/mysql			# 递归创建/data, /data/mysql目录

6.2.2 复制、删除与移动: cp, rm, mv

cp (复制文件或目录)

-t, --target-directory=DIRECTORY:target,目标,-t 参数指定复制到的目标目录

rm (移除文件或目录)

6.3 文件内容查阅

cat 		从第一行开始显示文件内容,由第一行显示到最后一行
tac			从最后一行开始显示文件内容,由最后一行显示到第一行,tac 就是 cat 的倒着写

nl			显示的时候,顺便显示行号

more		分页显示文件内容
less		分页显示文件内容

head		取出并显示前几行
tail		取出并显示后几行

od			以二进制的方式读取文件内容

6.3.1 直接检视文件内容

cat (concatenate)

tac (反向列示)

nl (添加行号打印)

6.3.2 可翻页检视

more (一页一页翻动)

more:分页显示文件内容

space(空格键)					# 向后翻页
b 或 ctrl+b						# 向前翻页(只对文件有用,对管道无用)
enter							# 向下翻一行

:f								# 显示文件名及目前所在行数
q								# 退出

less (一页一页翻动)

less:分页显示文件内容

pagedown 或 space(空格键)		# 向后翻页
pageup							# 向前反野
enter							# 向下翻一行

g								# 跳转到文件的第一行
G								# 跳转到文件的最后一行

/string							# 向后搜索字符串 string
?string							# 向前搜索字符串 string
n								# 重复前一行搜索
N								# 反向重复前一个搜索

:f								# 显示文件名及目前所在行数
q								# 退出

6.5 指令与文件的搜寻

6.5.2 文件档名的搜寻

find

与时间相关的参数

与时间有关的参数,共有 -atime、-ctime、-mtime,以 -mtime 为例进行说明:
-mtime n:过滤 n 天之前的那天被修改过的文件

-mtime -n +n

-mtime -n +n:modify time,按照修改时间来查找文件或目录,-n 表示修改时间距现在 n 天以内,+n 表示修改时间距现在 n 天以前

find / -mtime 0

# 查找"~"目录下修改时间在最近7天以内、匹配"*jpeg"或"*jpg"的文件和目录,不区分大小写
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7	
与名称有关的参数
-name: 按名称过滤,可使用正则表达式,区分大小写
find ~ -name '*jpg'		# 查找"~"目录下所有匹配"*jpg"的文件及目录,区分大小写
-iname: 按名称过滤,可使用正则表达式,不区分大小写
find ~ -iname '*jpg'		# 查找"~"目录下所有匹配"*jpg"的文件及目录,不区分大小写
  • -name filename:查找文件名为 filename 的文件
  • -size [+/-]SIZE:查找大小大于(+size)/小于(-size) size 的文件,单位:c(byte),k(KB),m(MB)
  • -type TYPE:查找文件类型为 TYPE 的文件,对应文件类型有:f(文件),b、c(装置文件),d(目录),链接(l),socket(s),FIFO(p)
  • -perm MODE:查找文件权限为 MODE 的文件
  • -perm -MODE:查询文件权限包含 MODE 中所有权限的文件
  • -perm /MODE:查找文件权限包含 mode 中任一权限的文件
find / -name passwd			# 查找 / 目录下名称为 passwd 的文件
find / -name "*passwd*" 	# 查找 / 目录下名称含 passwd 字符串的文件,* 做通配符

find / -perm /7000			# 查找 / 目录下文件权限包含 7000 中任一权限的文件

find /run -type s			# 查找 /run 目录下类型为 s 的文件
-o: or,表示“或”的关系(括号需转义)
# 查找"~"目录下所有匹配"jpeg"或"jpg"的文件及目录,
# 不区分大小写,其中括号需使用"\"转义
find ~ \( -iname 'jpeg' -o -iname 'jpg' \)		
其他相关参数
  • -exec command:对 find 命令的查找结果执行命令 command
  • -print:默认参数,打印 find 命令查找结果
# 查找 /usr/bin, /usr/sbin/ 目录中、文件权限含 7000 中任一权限的文件,并使用 ls -l 命令罗列出来
find /usr/bin/ /usr/sbin/ -perm -7000 -exec ls -l {
    
    } \;

find -type f -name 'test.c' -exec rm -rf {
    
    } \;	# 查找当前目录下名称为 test.c 的文件并删除
find -type f -name "*.txt" -exec rm -rf {
    
    } \;	# 查找当前目录下后缀为 txt 的文件并删除
find /					# 查询 / 目录下的所有文件

# 查找"~"目录下修改时间为最近7天内、匹配"*jpeg"或"*jpg"的文件,并将其复制到 ~/Pictures 目录
sudo find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7 -print0 | xargs -0 cp -t ~/Pictures/
-type:按类型过滤:

-type:按类型过滤文件或目录,可选值如下:

  • b:块设备文件
  • c:字符设备文件
  • d:目录
  • f:普通文件
  • l:符号链接文件
  • p:管道文件
# 查找"~"目录下所有匹配"*jpeg"或"*jpg"的文件,不区分大小写,其中括号需转义
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f 	

# 查找"~"目录下所有匹配"*jpeg"或"*jpg"的目录,不区分大小写,其中括号需转义
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d 		
参考文档

在Linux系统中, 为找到文件try_grep含有以a字母
【日常小记】linux中强大且常用命令:find、grep
每天一个linux命令(22):find 命令的参数详解
Linux中find命令用法全汇总,看完就没有不会用的!
Linux之Find命令详解
find命令

第七章 Linux 磁盘与文件系统管理

7.2 文件系统的简单操作

7.2.1 磁盘与目录的容量

df

df——Disk File,查看磁盘大小
Linux 查看文件夹大小,磁盘剩余空间(du/df)

du

du——Disk Usage,查看文件/目录大小

  • -s, --summarize :对文件大小求和
  • -k, --kilobytes :以 KB 为单位进行计数
  • -m, --megabytes :以 MB 为单位进行计数
  • -h, --human-readable :以人类可读的方式进行统计计数,及以 GB 为单位进行计数
  • -t, --threshold=SIZE :筛选大小超过 SIZE 的文件或目录
man du						# 查看 du 命令的帮助信息

du -sm /home/fly/GoEnv		# 以 MB 为单位对 /home/fly/GoEnv 目录进行大小的求和统计

Linux 查看文件夹大小,磁盘剩余空间(du/df)
linux如何查询文件及文件夹大小?
Linux du命令
linux命令详解之du命令
du命令_Linux du命令:查看文件夹和文件的磁盘占用情况

第八章 文件与文件系统的压缩,打包与备份

8.2 Linux 系统常见的压缩指令

8.2.1 gzip, zcat/zmore/zless/zgrep

8.2.2 bzip2, bzcat/bzmore/bzless/bzgrep

8.2.3 xz, xzcat/xzmore/xzless/xzgrep

8.3 打包指令: tar

8.3.1 tar

tar

以下五个是独立的命令,压缩解压都要用到其中一个,可以和其他命令连用但只能用到其中一个。

  • -c: 建立压缩档案
  • -x: 解压
  • -v: 显示所有过程
  • -C: 解压到指定的目录

以下是根据压缩/解压的需要可选的参数

  • -x: 有gzip属性的

参数-f是必须的

  • -f: 文件名;切记:这个参数是最后一个参数,后面只能接文件名
tar cvf node_modules.tar node_modules/ 	# 压缩 node_modules/ 目录到 tar 格式的 node_modules.tar 文件

tar cvf test.tar airflow/ dags/			# 压缩 airflow/, dags/ 目录到 tar 格式的 test.tar 文件

tar xvf deploy.tar						# 解压 deploy.tar 文件

# 解压mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz文件到/usr/local/下的同名目录
tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /usr/local/	

Linux下常用压缩 解压命令和压缩比率对比
linux的tar命令详情;linux多个文件压缩打包到一个压缩文件
linux下解压tgz文件
linux解压rar文件
tar压缩解压缩命令详解

Ubuntu 下解压tar.xz方法

zip

zip -r Golang-Win.zip Golang-Win	# 将 Golang-Win 目录压缩为 Golang-Win.zip 文件

unzip Golang-Win.zip -d Golang-Win	# 将 Golang-Win.zip 文件解压到 Golang-Win 目录

8.6 其他常见的压缩与备份工具

8.6.1 dd

第九章 vim 程序编辑器

9.3 vim 的额外功能

9.3.5 vim 环境设定与记录: ~/.vimrc, ~/.viminfo

~/.viminfo

~.viminfo 文件用于记录 vim 的操作历史(越近的操作排在越上面),由系统自行创建

/etc/vimrc & ~/.vimrc

/etc/vimrc 和 ~/.vimrc 文件都是用于设置 vim 的环境变量的。

  • /etc/vimrc:vim 的全局环境变量设定文件,在这个文件中设定的 vim 环境变量对系统全局有效,该文件为系统自行建立,不需用户手动创建;
  • ~/.vimrc:vim 的个人环境变量设定文件,在这个文件中设定的 vim 环境变量对个人环境有效,该文件需用户自行创建

vim 相关的环境变量如下:

:set all	# 查看 vim 所有的环境变量

第十章、认识与学习 BASH

10.3 命令别名与历史命令

10.3.1 命令别名设定: alias, unalias

alias

alias					# 列出所有已设定的命令别名
alias ll='ls -l'		# 设定 ls -l 命令的别名为 ll

unalias

unalias ll				# 取消 ls -l 的命令别名 ll

Ubuntu学习之alias命令
ubuntu文件夹建立软链接方法

10.3.2 历史命令: history

history

history: 查看或写入历史命令到~/.bash_history文件
histroy 命令读取与记录 ~/.bash_history 文件的流程如下:

[dmtsai@study ~]$ history [n]
[dmtsai@study ~]$ history [-c]
[dmtsai@study ~]$ history [-raw] histfiles
选项与参数:
	n : 数字,要列出的历史命令的行数
	-c : 将目前的 shell 中的所有 history 内容全部消除
	-a : 将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history
	-r : 将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
	-w : 将目前的 history 记忆内容写入 histfiles 中!
# 范例一: 列出目前内存中的所有历史命令
history
# 列出的信息当中,包含两列,第一列为命令的行数,第二列为具体的命令;
# 总共列出的命令行数与系统参数 HISTSIZE 有关!

在这里插入图片描述

# 范例二: 列出最近的3笔历史命令
history 3
[dmtsai@study ~]$ !number
[dmtsai@study ~]$ !command
[dmtsai@study ~]$ !!
选项与参数:
	number : 执行第几笔指令的意思;
	command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;
	!! :就是执行上一个指令(相当于按↑按键后,按 Enter)

!66							# 执行第 66 笔指令
!! 							# 执行上一个指令
!al 						# 执行最近以 al 为开头的指令

10.6 管线命令 (pipe)

10.6.1 撷取命令: cut, grep

cut

10.6.2 排序命令: sort, wc, uniq

wc

linux中wc命令用法

10.6.6 参数代换: xargs

xargs

xargs:接受标准输入,并以"空格"作为分隔符,将标准输入组合为一行新的参数,传递给之后的命令或直接进行打印;
xargs 主要用于作为管道来传递参数,以方便传递参数给那些非管道命令

选项与参数:
-0 :如果输入的 stdin 含有特殊字符,例如 \、空格键等等字符时, 这个 -0 参数可以将他还原成一般字符。 这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串, 当 xargs 分析到这个字符串时,就会停止工作!
-p :通过 xargs 传递参数前进行询问
-n :number,每次通过 xargs 传递的参数的数量
# 获取标准输入,并将标准输入直接传递给 ls 命令
find /usr/sbin/ -perm /7000 | xargs ls -l

# 获取标准输入,并将标准输入以"空格"作为分隔符组合为一行新的数据,
# 然后传递给 id 命令,每次传递一个参数
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id

# 获取标准输入,并将标准输入以"空格"作为分隔符组合为一行新的数据,
# 然后传递给 id 命令,每次传递一个参数,在传递参数前将会进行询问
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 -p id

# 获取标准输入,并将标准输入以"空格"作为分隔符组合为一行新的数据,
# 然后传递给 id 命令,每次传递一个参数,在参数传递前将会进行询问,执行到'sync'参数时则终止(不包含)
cut -d ':' -f 1 /etc/passwd | xargs -n 1 -e'sync' id

10.8 本章习题

简答题

你输入一串指令之后,发现前面写的一长串数据是错的,你想要删除游标所在处到最前面的指令串内容,应该如何处理?

按下 ctrl + u 组合键即可

如何显示 HOME 这个环境变量?

echo $HOME

第十一章 正规表示法与文件格式化处理

11.1 开始之前:什么是正规表示法

11.2 基础正规表示法

11.2.2 grep 的一些进阶选项

11.2.5 sed 工具

sed——管道命令,用于对管道中的数据以行为单位进行增删改查。

sed [-nefr] [n1[,n2]]function
选项与参数:
	-n :slient,安静模式。常规 sed 的用法中,会打印所有行;使用安静模式后,只打印符合查询条件的行
	-e :edit, 编辑;
	-f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
	-r :sed 的动作支持的是延伸型正规表示法的语法。 (预设是基础正规表示法语法)
	-i :直接修改读取的文件内容,而不是由屏幕输出。
	n1, n2 :操作数据的行数,可为空
	function :操作数据的命令,支持如下操作:
		a :add,新增,a 后接字符串,在对应行后(对应行的下一行)新增字符串
		c :replace,替换,c 后接字符串,将指定行替换为字符串
		d :delete,删除
		i :insert,插入,i 后接字符串,在对应行前(对应行的上一行)新增字符串
		p :print,打印,通常与 sed -n 一起使用
		s :replace,取代,常用格式: sed 's/要被取代的字符串/新的字符串/g'

以行为单位进行删除

# 使用 nl 
nl /etc/passwd | sed '2d'		# 使用 sed 命令删除 'nl /etc/passwd' 命令输出数据的第2行
nl /etc/passwd | sed '2,5d'		# 使用 sed 命令删除 'nl /etc/passwd' 命令输出数据的第2-5行
nl /etc/passwd | sed '3,$d'		# 使用 sed 命令删除 'nl /etc/passwd' 命令输出数据的3-最后一行

以行为单位进行新增/插入

# 使用 sed 命令在 'nl /etc/passwd' 命令的输出数据的第二行后(即第三行)新增 'drink tea' 字符串
nl /etc/passwd | sed '2a drink tea' 
# 使用 sed 命令在 'nl /etc/passwd' 命令的输出数据的第二行前(即第二行)插入 'drink tea' 字符串
nl /etc/passwd | sed '2i drink tea'
# 使用 sed 命令在 'nl /etc/passwd' 命令的输出数据的第二行前(即第二行)插入 'drink tea or drink coffee' 字符串
nl /etc/passwd | sed '2i drink tea \
> or drink coffee'

以行为单位进行替换

# 使用 sed 命令将 '/etc/passwd' 输出数据的第2-5行替换为'No 2-5 number'字符串
nl /etc/passwd | sed '2,5c No 2-5 number'

以行为单位进行查询/打印

# 使用 sed 命令(显示所有数据,符合查询条件的数据会重复打印)查询并打印 'nl /etc/passwd' 命令的输出数据的第5-7行
nl /etc/passwd | sed '5,7p'
# 使用 sed 命令以安静模式(不符合查询条件的数据不显示)查询并打印 'nl /etc/passwd' 命令的输出数据的第5-7行
nl /etc/passwd | sed -n '5,7p'

行中数据的替换

# 1. 查看 wlp2s0 网卡相关信息
ifconfig wlp2s0
# 2. 查看 wlp2s0 网卡相关信息,并过滤 IP 相关行
ifconfig wlp2s0 | grep 'inet '
# 3. 查看 wlp2s0 网卡相关信息,过滤 IP 相关行,并将头部 inet 替换为空串
ifconfig wlp2s0 | grep 'inet ' | sed 's/^.*inet //g'
# 4. 查看 wlp2s0 网卡相关信息,过滤 IP 相关行,将头部 inet 替换为空串,并将尾部 netmask 替换为空串
ifconfig wlp2s0 | grep 'inet ' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'

# 1. 过滤 /etc/manpath.config 文件中 'MAN' 相关数据
cat /etc/manpath.config | grep 'MAN'
# 2. 过滤 /etc/manpath.config 文件中 'MAN' 相关数据,并将 # 开始的行替换为空行
cat /etc/manpath.config | grep 'MAN'| sed 's/#.*$//g'
# 3. 过滤 /etc/manpath.config 文件中 'MAN' 相关数据,将 # 开始的行替换为空行,然后删除空行
cat /etc/manpath.config | grep 'MAN'| sed 's/#.*$//g' | sed '/^$/d'

直接修改文件内容(危险动作)

sed -i 's/\.$/\!/g' regular_express.txt		# 将 regular_express.txt 文件中所有结尾处的.替换为!

sed -i '$a # This is a test' regular_express.txt	# 在 regular_express.txt 文件尾新增 '# This is a test'

11.4 文件的格式化与相关处理

11.4.2 awk:好用的数据处理工具

awk

awk——按列处理数据

  • -F :分隔符

awk 通常运作的模式是这样的:

 awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename

awk 后面接两个单引号并加上大括号 {} 来设定想要对数据进行的处理动作。 awk 可以处理后续接的文件,也可以读取来自前个指令的 standard output 。 但如前面说的, awk 主要是处理『每一行的字段内的数据』,而默认的『字段的分隔符为 “空格键” 或 “[tab]键” 』 !

在 awk 的括号内, 每一行的每个字段都是有变量名称的,那就是 $1, $2… 等变量名称。以上面的例子来说, dmtsai 是 $1 ,因为他是第一栏嘛!至于 192.168.1.100是第三栏, 所以他就是 $3 啦!后面以此类推~呵呵!还有个变数喔!那就是 $0 , $0 代表『一整列资料』的意思~以上面的例子来说,第一行的 $0 代表的就是『 dmtsai … 』那一行啊!

# last -n 5: 使用last指令取出登录用户,只取前5行
# awk '{print $1 "\t" $3}': 以空格(默认)为分隔符,打印(print)出第一列($1)和第三列($3)的数据,
# 并以"\t"为分隔符进行显示
last -n 5 | awk '{print $1 "\t" $3}'

awk 是『 以行为一次处理的单位』, 而『 以字段为最小的处理单位』。

awk的默认变量
变量名称 代表意义
FILENAME 当前文件名
NF Num Field,每一行 ($0) 拥有的字段总数;NF表示字段总数,$NF表示最后一个字段,$(NF-1)表示倒数第二个字段
NR Num Row,目前 awk 所处理的是『第几行』数据
FS Field Split,字段分隔符,默认是空格或制表符,也可使用-F参数指定
RS Row Split,行分隔符,用于分割每一行,默认是换行符。
OFS Output Field Split,输出字段的分隔符,用于打印时分隔字段,默认为空格
ORS Output Row Split,输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT 数字输出的格式,默认为%.6g
# last -n 5: 使用last指令取出登录用户,只取前5行
# awk '{print $1 "\t lines: " NR "\t columns: " NF}': 以空格(默认)为分隔符,拆分前面命令的输出,
# 并以\t为分隔符,打印出对应变量的数据
# 并以"\t"为分隔符进行显示
last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'
awk 的逻辑运算字符
运算单元 代表意义
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于
!= 不等于
# {FS=":"}, 以:为分隔符进行分割,从第二行开始生效
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'

# BEGIN {FS=":"}, 以:为分隔符进行分割,从第一行开始生效,BEGIN表示预设变量
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
函数
条件
if语句

awk提供了if结构,用于编写复杂的条件。

# 以":"为分隔符,查找demo.txt(/etc/passwd文件的备份)文件中第一列大于m的字段并输出
awk -F ':' '{if ($1 > "m") print $1}' demo.txt

if结构还可以指定else部分。

awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
参考文档

Linux三剑客之awk命令
awk 入门教程
AWK程序设计语言

第十三章 Linux 账号管理与 ACL 权限设定

13.6 Linux 主机上的用户讯息传递

13.6.1 查询使用者: w, who, last, lastlog

w

who

lastlog

第十四章 磁盘配额(Quota)与进阶文件系统管理

14.1 磁盘配额 (Quota) 的应用与实作

14.2 软件磁盘阵列 (Software RAID)

14.3 逻辑滚动条管理员 (Logical Volume Manager)

14.3.1 什么是 LVM: PV, PE, VG, LV 的意义

14.3.2 LVM 实作流程

14.3.3 放大 LV 容量

14.3.4 使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率

14.3.5 LVM 的 LV 磁盘快照

14.3.6 LVM 相关指令汇整与 LVM 的关闭

14.4 重点回顾

14.5 本章习题

14.6 参考数据与延伸阅读

第十六章 进程管理与 SELinux 初探

16.3 进程管理

16.3.1 进程的观察

top-动态查看进程信息

16.4 特殊文件与进程

16.4.3. 查询已开启文件或已执行进程开启之文件

lsof :列出被进程所开启的文件档名

sudo lsof -i :80				# 列出所有在使用80端口的进程
lsof -p 2148|grep 1521|wc -l	## 查看项目使用的相关连接文件

lsof命令
linux lsof命令详解

第十八章 认识与分析登录档

18.1 什么是登录档

18.1.1 CentOS 7 登录档简易说明

18.4 systemd-journald.service 简介

18.4.1 使用 journalctl 观察登录信息

第十九章 开机流程、模块管理与 Loader

19.3 Boot Loader: Grub2

第二十章 基础系统设定与备份策略

20.1 系统基本设定

20.1.1 网络设定 (手动设定与 DHCP 自动取得)

手动设定 IP 网络参数

自动取得 IP 参数

修改主机名

主机名的查看
hostname					# 查看主机名

hostnamectl 				# 查看主机名、系统内核、架构、操作系统

cat /etc/hostname			# 查看主机名
主机名的修改
hostnamectl set-hostname fly			# 修改主机名为 fly

第二十二章 软件安装 RPM, SRPM 与 YUM

22.1 软件管理员简介

22.1.1 Linux 界的两大主流: RPM 与 DPKG

22.1.2 什么是 RPM 与 SRPM

22.1.3 什么是 i386, i586, i686, noarch, x86_64

22.1.4 RPM 的优点

22.1.5 RPM 属性相依的克服方式: YUM 在线升级

22.2 RPM 软件管理程序:rpm

22.2.1 RPM 默认安装的路径

22.2.2 RPM 安装 (install)

[root@study ~]# rpm -ivh package_name
选项与参数:
	-i :install
	-v :view,查看安装详细安装信息
	-h :以安装信息列显示安装进度

范例一:安装原版光盘上的 rp-pppoe 软件
	[root@study ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
	Preparing... ################################# [100%]
	Updating / installing...
	1:rp-pppoe-3.11-5.el7 ################################# [100%]

范例二、一口气安装两个以上的软件时:
	[root@study ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
	# 后面直接接上许多的软件文件!

范例三、直接由网络上面的某个文件安装,以网址来安装:
	[root@study ~]# rpm -ivh http://website.name/path/pkgname.rpm

rpm 安装时常用的选项与参数说明

可下达的选项 代表意义
–nodeps 使用时机:当发生软件属性相依问题而无法安装,但你执意安装时
危险性: 软件会有相依性的原因是因为彼此会使用到对方的机制或功能,
如果强制安装而不考虑软件的属性相依, 则可能会造成该软件的无法正常使用!
–replacefiles 使用时机: 如果在安装的过程当中出现了『某个文件已经被安装在你的系统上面』的信息,
又或许出现版本不合的讯息 (confilcting files) 时,可以使用这个参数来直接覆盖文件。
危险性: 覆盖的动作是无法复原的!
所以,你必须要很清楚的知道被覆盖的文件是真的可以被覆盖喔!否则会欲哭无泪!
–replacepkgs 使用时机: 重新安装某个已经安装过的软件!
如果你要安装一堆 RPM 软件文件时,可以使用 rpm -ivh *.rpm ,
但若某些软件已经安装过了, 此时系统会出现『某软件已安装』的信息,导致无法继续安装。
此时可使用这个选项来重复安装喔!
–force 使用时机: 这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体!
–test 使用时机: 想要测试一下该软件是否可以被安装到使用者的 Linux 环境当中,
可找出是否有属性相依的问题。范例为:rpm -ivh pkgname.i386.rpm --test
–justdb 使用时机: 由于 RPM 数据库破损或者是某些缘故产生错误时,
可使用这个选项来更新软件在数据库内的相关信息。
–nosignature 使用时机: 想要略过数字签名的检查时,可以使用这个选项。
–prefix 新路径 使用时机: 要将软件安装到其他非正规目录时。
举例来说,你想要将某软件安装到 /usr/local而非正规的 /bin, /etc 等目录,
就可以使用『–prefix /usr/local 』来处理了。
–noscripts 使用时机: 不想让该软件在安装过程中自行执行某些系统指令。
说明: RPM 的优点除了可以将文件放置到定位之外,还可以自动执行一些前置作业的指令,
例如数据库的初始化。 如果你不想要让 RPM 帮你自动执行这一类型的指令,就加上他吧!

例题

在没有网络的前提下,你想要安装一个名为 pam-devel 的软件,你手边只有原版光盘,该如何是好?
	你可以透过挂载原版光盘来进行数据的查询与安装。请将原版光盘放入光驱,底下我们尝试将光盘挂载到/mnt 当中, 
	并据以处理软件的下载啰:
	1. 挂载光盘,使用: mount /dev/sr0 /mnt
	2. 找出文件的实际路径: find /mnt -name 'pam-devel*'
	3. 测试此软件是否具有相依性: rpm -ivh pam-devel... --test
	4. 直接安装: rpm -ivh pam-devel...
	5. 卸除光盘: umount /mnt

22.2.3 RPM 升级与更新 (upgrade/freshen)

22.2.4 RPM 查询 (query)

  • RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据库文件啦!
[root@study ~]# rpm -qa 								<==已安装软件
[root@study ~]# rpm -q[licdR] 已安装的软件名称 			<==已安装软件
[root@study ~]# rpm -qf 存在于系统上面的某个文件名 			<==已安装软件
[root@study ~]# rpm -qp[licdR] 未安装的某个文件名 			<==查阅 RPM 文件
选项与参数:
	查询已安装软件的信息:
		-q : query,查询;
		-qa :query all,查询所有已安装在本机 Linux 的 RPM 格式的软件;
		-qi :query information,查询该软件的详细信息,包括开发商、版本与说明等;
		-ql :query list,查询该软件包含的所有目录及文件;
		-qc :query config,查询该软件所有的配置文件 (找出在 /etc/ 底下的檔名而已)
		-qd :query description,查询该软件所有的说明文件 (找出与 man 有关的文件而已)
		-qR :query Required,查询该软件所依赖的软件和文件
		-qf :query father,由后面接的文件名,找出该文件属于哪一个已安装的软件;
		-q --scripts:列出是否含有安装后需要执行的脚本档,可用以 debug 喔!
	
	查询某个 RPM 文件内含有的信息:
		-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。
			但用途仅在于找出某个 RPM 文件内的信息,而非已安装的软件信息!注意!

范例一:找出你的 Linux 是否有安装 logrotate 这个软件?
	[root@study ~]# rpm -q logrotate
	logrotate-3.8.6-4.el7.x86_64
	[root@study ~]# rpm -q logrotating
	package logrotating is not installed
	# 注意到,系统会去找是否有安装后面接的软件名称。注意,不必要加上版本喔!
	# 至于显示的结果,一看就知道有没有安装啦!

范例二:列出上题当中, 属于该软件所提供的所有目录与文件:
	[root@study ~]# rpm -ql logrotate
	/etc/cron.daily/logrotate
	/etc/logrotate.conf
	....(以下省略)....
	# 可以看出该软件到底提供了多少的文件与目录,也可以追踪软件的数据。

范例三:列出 logrotate 这个软件的相关说明数据:
	[root@study ~]# rpm -qi logrotate
	Name : logrotate # 软件名称
	Version : 3.8.6 # 软件的版本
	Release : 4.el7 # 释出的版本
	Architecture: x86_64 # 编译时所针对的硬件等级
	Install Date: Mon 04 May 2015 05:52:36 PM CST # 这个软件安装到本系统的时间
	Group : System Environment/Base # 软件是放再哪一个软件群组中
	Size : 102451 # 软件的大小
	License : GPL+ # 释出的授权方式
	Signature : RSA/SHA256, Fri 04 Jul 2014 11:34:56 AM CST, Key ID 24c6a8a7f4a80eb5
	Source RPM : logrotate-3.8.6-4.el7.src.rpm # 这就是 SRPM 的檔名
	Build Date : Tue 10 Jun 2014 05:58:02 AM CST # 软件编译打包的时间
	Build Host : worker1.bsys.centos.org # 在哪一部主机上面编译的
	Relocations : (not relocatable)
	Packager : CentOS BuildSystem <http://bugs.centos.org>
	Vendor : CentOS
	URL : https://fedorahosted.org/logrotate/
	Summary : Rotates, compresses, removes and mails system log files
	Description : # 这个是详细的描述!
	The logrotate utility is designed to simplify the administration of
	log files on a system which generates a lot of log files. Logrotate
	allows for the automatic rotation compression, removal and mailing of
	log files. Logrotate can be set to handle a log file daily, weekly,
	monthly or when the log file gets to a certain size. Normally,
	logrotate runs as a daily cron job.
	Install the logrotate package if you need a utility to deal with the
	log files on your system.
	# 列出该软件的 information (信息),里面的信息可多着呢,包括了软件名称、
	# 版本、 开发商、 SRPM 文件名、打包次数、 简单说明信息、 软件打包者、
	# 安装日期等等!如果想要详细的知道该软件的数据,用这个参数来了解一下

范例四:分别仅找出 logrotate 的配置文件与说明档
	[root@study ~]# rpm -qc logrotate
	[root@study ~]# rpm -qd logrotate

范例五:若要成功安装 logrotate ,他还需要什么文件的帮忙?
	[root@study ~]# rpm -qR logrotate
	/bin/sh
	config(logrotate) = 3.8.6-4.el7
	coreutils >= 5.92
	....(以下省略)....
	# 由这里看起来,呵呵~还需要很多文件的支持才行喔!

范例六:由上面的范例五,找出 /bin/sh 是那个软件提供的?
	[root@study ~]# rpm -qf /bin/sh
	bash-4.2.46-12.el7.x86_64
	# 这个参数后面接的可是『 文件』吶!不像前面都是接软件喔!
	# 这个功能在查询系统的某个文件属于哪一个软件所有的。

范例七:假设我有下载一个 RPM 文件,想要知道该文件的需求文件, 该如何?
	[root@study ~]# rpm -qpR filename.i386.rpm
	# 加上 -qpR ,找出该文件需求的数据!

例题

1. 我想要知道我的系统当中,以 c 开头的软件有几个,如何实做?
	rpm -qa | grep ^c | wc -l

2. 我的 WWW 服务器为 Apache ,我知道他使用的 RPM 软件文件名为 httpd 。现在,我想要知道这
个软件的所有配置文件放置在何处,可以怎么作?
	rpm -qc httpd

3. 承上题,如果查出来的配置文件案已经被我改过,但是我忘记了曾经修改过哪些地方,所以想要直
接重新安装一次该软件,该如何作?
	假设该软件在网络上的网址为:http://web.site.name/path/httpd-x.x.xx.i386.rpm
	则我可以这样做:rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs

4. 如果我误砍了某个重要文件,例如 /etc/crontab,偏偏不晓得他属于哪一个软件,该怎么办?
	虽然已经没有这个文件了,不过没有关系,因为 RPM 有记录在 /var/lib/rpm 当中的数据库啊!
	所以直接下达:rpm -qf /etc/crontab,就可以知道是那个软件啰!重新安装一次该软件即可!

22.2.5 RPM 验证与数字签名 (Verify/signature)

22.2.6 RPM 反安装与重建数据库 (erase/rebuilddb)

22.3 YUM 在线升级机制

22.4 SRPM 的使用:rpmbuild (Optional)

22.5 重点回顾

22.6 本章习题

22.7 参考数据与延伸阅读

猜你喜欢

转载自blog.csdn.net/CSDN_FlyYoung/article/details/104745819