1. 开课介绍及vmware的使用入门
2. Vmware使用及Linux基础
2.1.vm使用入门
2.2.linux基础知识
3. linux发行版及命令基础
3.1.OS Linux发行版
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
3.2.netstat -tan 查看端口监听状态
4. Linux文件系统、系统管理类命令、bash基础特性
4.1.Linux文件系统
/boot:引导文件存放目录、内核文件(vmlinux)、引导加载器(bootloader,grub)都存放于此目录;
/bin:供所有用户使用的基本命令,不能关联至独立分区,OS启动会用到的程序;
/sbin:管理类的基本命令,不能关联至独立分区,OS启动会用到的程序;
/lib:基本共享库文件,以及内核模块文件(/lib/modules);
/lib64:专用于x86_64系统上的辅助共享库文件存放位置;
/etc/:配置文件目录(纯文本文件);
/home/USERNAME:普通用户家目录;
/root:管理员的家目录
/media:便携式移动设备挂载点;
cdrom
usb
/mnt:临时文件系统挂载点;
/dev:设备文件及特殊文件存储位置;
b:block device,随机访问
c:character device,线性访问
/opt:第三方应用程序的安装位置;
/srv:系统上运行的服务用到的数据;
/tmp:临时文件存储位置;
/usr:
bin:保证系统拥有完整功能而提供的应用程序;
sbin:
lib:
lib64:
include:c程序用到的头文件;
share:结构化数据,doc、man等
local:第三方应用程序的安装位置;
bin,sbin,lib,lib64,etc,share
/var:临时数据目录,日志,缓存
/proc:内核相关虚拟文件系统
/sys:当前系统硬件设备相关信息的虚拟文件系统;
/selinux:selinux相关的安全策略等信息的存储位置;
4.2.linux上应用程序的组成部分
二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/DIRECTORY,/usr/local/etc
帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc
4.3.linux下文件类型
-:普通文件;
d:目录文件;
b:块设备
c:字符设备;
l:符号链接文件;
p:管道文件
s:套接字文件:socket;
4.4.系统管理命令
4.4.1. 重启
reboot
4.5.bash基础特性及基础命令
4.6.命令历史
4.6.1. history命令
history
4.6.2. 调用上一次命令的参数
ESC,. ;先按esc松开后按.号
4.7.环境变量
4.7.1. 修改环境变量
修改环境变量的方式:export 变量名="值";
4.8.文件状态stat
查看文件状态:stat
查看时间戳、大小等
5. 文件管理、管道、用户与用户权限
5.1.文件管理、命令别名和glob
5.1.1. ls命令
-R:递归显示
5.1.2. 显示文件绝对路径
find $PWD '*' 显示文件绝对路径
5.1.3. 命令别名
5.1.3.1. 显示所有命令别名
alias
5.1.3.2. 定义命令别名
alias NAME='VALUE'
5.1.3.3. bash配置文件
当前用户:~/.bashrc
所有用户:/etc/bashrc
5.1.3.4. bash重新读取配置文件
source /path/config_file
. /path/config_file
5.1.4. glob通配符
支持符号:? * []
bash中实现文件名通配的机制
5.1.4.1. *:任意长度任意字符
ls a*b
?:任意单个字符
ls a?b
[]:指定范围内任意单个字符
[0-9]
[a-z]
[^]:指定范围之外的任意单个字符
5.1.5. tr字符替换
tr [option]... SET1 SET2
cat a | tr 'abc' 'ABC'
cat a | tr 'a-c' 'A-C'
5.1.6. 管道命令
|
5.1.7. tee命令
tee [option]...[File]...
cat a | tr 'a-c' 'A-C'|tee b
覆盖保存到文件中
5.1.8. wc命令
wc cut sort uniq
wc统计单词行数字节数
wc /etc/passwd
-l
-w
-c
ifconfig | wc -l
5.1.9. cut命令
cut命令 -f 显示字段序号,-d 分隔符 --output-delimiter=',' 输出分隔符
cut -f 2 -d ':' /etc/passwd
cut -f 2-3 -d ':' /etc/passwd
cut -f 2,3 -d ':' /etc/passwd
cut -f 2,3 -d ':' --output-delimiter=',' /etc/passwd
5.1.10. sort命令
sort排序命令:按字符比较
sort /etc/passwd
-n 按数值排序
-f 忽略大小写
-r 逆序
-t delimiter 分隔符
-k # 以指定序号字段排序
-u 去重
sort -t ':' -k 3 -n /etc/passwd|cut -d ':' -f 3
5.1.11. uniq命令
uniq命令:去重
uniq 连续且完全一样的才算重复,先用sort排序,再用uniq去重
6. shell编程初步,grep及正则表达式
6.1.shell编程初步
#!/bin/bash
6.2.grep查找字符串
6.2.1. 基本使用格式grep 'str' file
[root@ac-cmp1 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ac-cmp1 ~]#
6.2.2. 反向查找字符串-v
grep -v 反向匹配
ps -ef|grep 'abc'|grep -v 'grep'
[root@ac-cmp1 ~]# grep -v root /etc/passwd
ps -ef|grep 'abc'|grep -v 'grep'
6.2.3. 忽略大小写
grep -i 忽略大小写
[root@ac-cmp1 ~]# grep -i root /etc/passwd
6.2.4. grep -o 仅显示匹配到的字符串
[root@ac-cmp1 ~]# grep -o root /etc/passwd
root
root
root
root
6.2.5. grep -q不输出任何信息
grep -q root /etc/passwd
[root@ac-cmp1 ~]# grep -q root /etc/passwd
[root@ac-cmp1 ~]# echo $?
0
[root@ac-cmp1 ~]# grep -q roo2t /etc/passwd
[root@ac-cmp1 ~]# echo $?
1
6.2.6. -A -B -C显示行前后n行
[root@ac-cmp1 ~]#
-A n 显示匹配行及后n行
-B n 显示匹配行及前n行
-C n 显示匹配行及前后n行
[root@ac-cmp1 ~]# grep -C 3 root /etc/passwd
6.2.7. 基本正则表达式元字符
6.2.8. grep -e '' -e '' -e制动多个条件
6.2.8.1. . 匹配任意单个字符
6.2.8.2. [] 匹配指定范围内任意单个字符
6.2.8.3. [^] 匹配范围之外的任意单个字符
[root@ac-cmp1 ~]# grep 'r.*t' /etc/passwd
[root@ac-cmp1 ~]# grep 'r[a-z]*t' /etc/passwd
--color 加粗显示
6.2.8.4. 匹配次数
6.2.8.4.1. * 前面字符任意次
.*:任意长度的任意字符
6.2.8.4.2. \?:匹配前面字符0次或1次
[root@ac-cmp1 ~]# grep 'root\?t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ac-cmp1 ~]#
6.2.8.4.3. \+:匹配至少一次
[root@ac-cmp1 ~]# grep 'roo\+t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
6.2.8.4.4. \{n,m\}:匹配次数
[root@ac-cmp1 ~]# grep 'ro\{1,2\}t' /etc/passwd
6.2.8.5. 位置绑定
6.2.8.5.1. ^ 行开头
[root@ac-cmp1 ~]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@ac-cmp1 ~]#
6.2.8.5.2. $ 行结尾
6.2.8.6. 词首锚定
\<或\b:词首锚定,用于单词左侧
6.2.8.7. 词尾锚定
\>或\b:词尾锚定,用于单词右侧
[root@ac-cmp1 ~]# grep '\<se' /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
6.2.8.8. 分组
\(\)
[root@ac-cmp1 ~]# grep '\(:1000\)\{2\}' /etc/passwd
datafine:x:1000:1000::/home/datafine:/bin/bash
[root@ac-cmp1 ~]#
6.2.8.9. 后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式)
[root@ac-cmp1 ~]# grep '\(root\).*\1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@ac-cmp1 ~]#
\1 表示第一个()匹配到的字符串
\2 表示第二个()匹配到的字符串
[root@ac-cmp1 ~]# grep '\(r\(t\)\).*\1' /etc/passwd
ovirtagent:x:175:175:oVirt Guest Agent:/usr/share/ovirt-guest-agent:/sbin/nologin
[root@ac-cmp1 ~]#
[root@ac-cmp1 ~]# grep '\(r\(t\)\).*\2' /etc/passwd
ovirtagent:x:175:175:oVirt Guest Agent:/usr/share/ovirt-guest-agent:/sbin/nologin
[root@ac-cmp1 ~]#
7. egrep、bash环境配置及脚本、vi编辑器
7.1.egrep及扩展的正则表达式
7.1.1. 字符匹配
.
[]
[^]
7.1.2. 次数匹配
*:任意字符任意次数
?:0或1次
+:至少1此
{m} :m次
{m,n}:大于m次,小于n次
7.1.3. 锚定
^:开头
$:结尾
\<,\b:词首
\>,\b:词尾
7.1.4. 分组
()
7.1.5. 后向引用:
\1,\2...
7.1.6. 或者
a|b
(c|C)at:cat或者cat
7.2.bash变量
7.2.1. bash中的变量的种类
根据变量的生效范围等标准:
本地变量:
环境变量
局部变量
位置变量:$1,$2...脚本参数
特殊变量:$?,$0,$*,$@,$#
7.2.1.1. 本地变量
变量赋值:name='value'
value:
1、可以是直接字串
2、变量引用:name=${username}
3、命令引用:name=`COMMAND`或name=$(COMMAND)
变量引用:${name},$name
"",双引号,弱引用,其中的变量引用会被替换成变量值
'',单引号,强引用,其中的变量引用不会被替换成变量值
显示已定义的所有变量:
set
销毁变量
unset name
7.2.1.2. 环境变量
1、变量声明与赋值:
export name=VALUE
declare -x name=VALUE
2、变量引用:${name}
3、显示所有环境变量:
export
env
printenv
4、销毁变量
unset name
5、常见环境变量
bash有许多内建环境变量:PATH,SHELL,UID,HISSIZE,HOME,PWD..
7.2.1.3. 位置变量
$1,$2...对应第一、二个参数
$0:命令本身
$*或${*}:所有参数
$@:所有参数
$#:参数个数
7.3.bash的配置文件
7.3.1. 按生效范围划分,存在两类
7.3.1.1. 全局配置
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
7.3.1.2. 个人配置
~/.bash_profile
~/.bashrc
7.3.2. 按功能划分,存在两类
7.3.2.1. profile类
交互式登录(命令终端帐号密码登录;su - username;su -l username登录)
全局:/etc/profile,/etc/profile.d/*.sh
个人:~/.bash_profile
功用:
1、定义环境变量
2、启动时运行命令或脚本
vi /etc/profile.d/welcome.sh
echo "welcome $(who)"
7.3.2.2. bashrc类
非交互式登录(su Username;图形界面打开终端;执行脚本)
全局:/etc/bashrc
个人:~/.bashrc
功用:
1、定义命令别名
2、定义本地变量
7.3.3. 交互式、非交互式登录读取配置文件顺序
7.3.3.1. 交互式
/etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile->.bashrc ->/etc/bashrc
7.3.3.2. 非交互式
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
问题:
1、让用户的PATH的环境变量的值多出一个路径,例如/usr/loca/apache2/bin
管理员?
普通用户?
vi .bashrc
export PATH="/usr/local/apache2/bin:${PATH}"
[root@ac-cmp1 ~]# echo ${PATH}
/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
7.4.条件测试
[root@ac-cmp1 ~]# test 1>3
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]#
[root@ac-cmp1 ~]# test 1 > 3
[root@ac-cmp1 ~]# echo $?
0
[root@ac-cmp1 ~]#
数值大小测试不能用><符号
测试命令 []前后必须有空白字符
test 1 -gt 3
[ 1 -gt 3 ]
[root@ac-cmp1 ~]# test 1 -gt 3
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]# [ 1 -gt 3 ]
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]#
bash测试类型:
7.4.1. 数值测试:
-gt 大于
-lt 小于
-ge 大于等于
-eq 等于
-le 小于等于
-ne 不等于
7.4.2. 字符串测试:
== 等于
> 大于
< 小于
!= 不等于
~= 左侧字符串是否能够被右侧正则表达式匹配,必须用[[]]
[root@ac-cmp1 ~]# [[ "$name" =~ .*ma ]]
[root@ac-cmp1 ~]# echo $?
0
[root@ac-cmp1 ~]# [[ "$name" =~ .*maa ]]
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]#
-z "String" 是否为空
-n "String" 不为空
注释:字符串都要加引号
7.4.3. 文件测试
-e 存在
[root@ac-cmp1 ~]# [ -e /etc/ll ]
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]#
-f 存在却为普通文件
bash自定义退出状态码
exit [n] 自定义退出状态码,注意:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit后面的数字
组合测试条件:
逻辑运算
&& 与
|| 或
! 非
[root@ac-cmp1 ~]# [ a > b ] && [ c > d ]
[root@ac-cmp1 ~]# echo $?
0
[root@ac-cmp1 ~]#
[root@ac-cmp1 ~]# [ ! a > b ]
[root@ac-cmp1 ~]# echo $?
1
[root@ac-cmp1 ~]#
命令连接的方式
test expression1 -a expression2 与运算
test expression1 -o expression2 或
test ! expression1 非
[root@ac-cmp1 ~]# test a > b -a c>a
[root@ac-cmp1 ~]# echo $?
0
[root@ac-cmp1 ~]#
8. find命令、if语句、磁盘管理、文件系统管理
8.1.find按名称查找、按路径查找
find 目录 -options 'string'
-name "文件名";支持glob(? * [] [^])
-iname忽略大小写
[root@ac-cmp1 ~]# find /etc/ -name "passwd"
/etc/pam.d/passwd
/etc/passwd
[root@ac-cmp1 ~]#
-regex "正则表达式" 匹配整个文件路径字符串,不仅仅匹配文件名称
find / -regex ".*nginx.*"
8.2.if语句
if语句,判断语句就是命令;如果是表达式,则需要加test或中括号;如果if后是命令,则不需要再加test或中括号,/dev/null
#!/bin/bash
if [ $# -lt 1 ] then;
echo "At least on argument."
exit 1
fi
8.3.磁盘管理
8.3.1. 创建分区
分区管理工具:fdisk,parted,sfdisk
fdisk:对于一个硬盘来讲,最多只能管理15个分区
#fdisk -l 列出当前主机磁盘分区信息
#fdisk -l /dev/sda 显示磁盘/dev/sda分区信息
管理分区
#fdisk device
#fdisk /dev/sda
l 显示分区类型id 常用的类型有82 83 83
p 显示分区
n 创建分区
e 扩展分区
p 主分区
d 删除分区
w 保存并退出
q 放弃更新
m 获取帮助
t 调整分区类型id 常用的类型有82 83 83
设备或资源忙
cat /proc/partitions #查看真正的分区情况
通知内核读取硬盘分区表
partx -a /dev/sda 多次执行,重新扫描整个硬盘
partx -a -n 4:6 /dev/sda 指定4到6个分区
kpartx -a /dev/sda 扫描分区
kpartx -f 强制添加
centos5
partprobe /dev/sda 扫描分区
7.4Linux文件系统 格式化创建文件系统
8.3.2. 格式化创建文件系统
创建文件系统:
cat /proc/filesystems 查看系统支持的文件系统类型
lsmod 查看系统已装载的内核模块
mkfs+tab键,提示支持的格式化文件系统工具
mkfs.ext4 /dev/sda5 #分区格式化
mkfs.ext4 -L MYDATA /dev/sda5 #分区格式化,-L指定卷标
blkid /dev/sda5 显示分区的UUID,文件系统类型,卷标;必须格式化文件系统类型后才能查看
mke2fs:ext系统文件系统专用管理工具:
-t:{ext2|ext3|ext4}
-b:{1024|2048|4096}
-L 'LABEL'
-j 相当于 -t ext3
-i 数据空间中没多少个字节创建一个inode
blkid:块设备信息管理
blkid [OPTION].. [DEVICE]
e2label:管理ext系列文件系统的label
e2label DEVICE LABEL
tune2fs:
-L 'label' 修改卷标
-o 修改文件系统默认挂载选项
创建交换分区
fdisk /dev/sda
t
6
82 #交换分区类型
w
partx -a -n 6 /dev/sda
partx -a -n 6 /dev/sda
mkswap /dev/sda6 #创建交换分区
8.3.3. 文件系统挂载
reboot重启
挂载,mount,卸载umount
#mount 显示所有挂载情况
挂载:mount [-fnrsvw] [-t vsftype] [-o options] device mount_point
device:指明要挂载的设备
1、设备文件,分区:/dev/sda5
2、卷标:例如:-L 'LABEL'
3、UUID,例如:-U 'UUID'
4、伪文件系统名称:proc,sysfs,devtmpfs,configfs
mount_point:挂载点
事先存在,建议使用空目录
常用选项:
-t vsftype:指定挂载的设备上的文件系统类型,可省略
-r:只读挂载
-w:读写挂载
卸载命令:
umount device
umount mount_point
查看正在访问指定文件系统的进程:
fuser -v /mydata
fuser -km /mydata #结束正在占用的进程
挂载交换分区:
启用:swapon
swapon [option]... [device]
-a :激活所有交换分区
禁用:swapoff
swapoff device
mkswap /dev/sda5
swapon /dev/sda5
free -m #查看交换分区
df -h 查看磁盘使用情况
du -h 查看目录使用情况
挂载光盘
mount -t iso9660 /dev/sr0 /mnt/cdrom #/dev/cdrom或/dev/sr0
挂载iso文件到目录
mount /dir1/file1.iso /dir2
8.3.4. /etc/fstab配置开机挂载文件系统
fdisk -l
blkid
/dev/vdb1: UUID="425a7bfa-af03-421f-bf20-7267a60278f1" TYPE="ext4"
vi /etc/fstab
UUID=425a7bfa-af03-421f-bf20-7267a60278f1 /datafine ext4 defaults 0 0
reboot
8.3.5. RAID
8.3.6. LVM
8.3.6.1. 逻辑卷管理
Physical Volume 物理卷
Physical Extent
Volume Group 卷组
Logical Volume 逻辑卷
dm:device mapper设备映射
lvm
设备文件:/dev/卷组名/逻辑卷名
/dev/mapper/卷组名-逻辑卷名
/dev/myvg/lvdata
/dev/mapper/myvg-lvdata
1、创建2个逻辑分区
fdisk n t 8e
设备类型:8e 逻辑卷
cat /proc/partitions
物理卷管理命令:pv
2、pvs 查看 物理卷
3、pvcreate /dev/sda{2,3} 创建物理卷
4、pvs 查看 物理卷
5、pvdisplay 查看所有物理卷
pvcreate,pvremove,pvscan,pvs,pvdisplay
pvcreate /dev/sda{1,2}
6、卷组的管理命令:vg
创建:vgcreate myvg /dev/sda{2,3}
查看卷组:vgs, vg myvg
vgdisplay, vgextend, vgreduce, vgremove, vgrename
vgcreate
-s:PE大小,默认4M
vgremove myvg 删除卷组
vgcreate -s 8MB myvg /dev/sda[2,3] 创建时设置PE大小
vgextend myvg /dev/sdc6 增加物理卷到卷组
vgreduce myvg /dev/sda3 缩减卷组
7、逻辑卷管理命令:lv
lvcreate
-L:空间大小
-n:lv名称
创建逻辑卷步骤
lvcreate -L 3G -n testlv1 myvg 创建逻辑卷
lvdisplay /dev/myvg/testlv1 查看逻辑卷
mke2fs -t ext4 -b 2048 /dev/myvg/testlv1 格式化逻辑卷
mount /dev/myvg/testlv1 /mnt 挂载逻辑卷
扩展逻辑卷步骤
lvextend -L 5G /dev/myvg/testlvl 增加物理边界到5G空间
resize2fs /dev/myvg/testlv1 扩展逻辑边界
缩减逻辑卷的步骤
1、卸载卷,并执行强制检测
umount /path/to/lv_device
e2fsck -f /path/to/lv_device
2、缩减逻辑边界
resize2fs /path/to/lv_device SIZE
3、缩减物理边界
lvreduce -L SIZE /path/to/lv_device
mount /path/to/lv_device /mnt
8.3.6.2. lvm快照
快照卷,也是一种逻辑卷,通常是只读的。
9. 压缩、解压缩、ifelse语句
9.1.压缩、解压缩及归档工具
compress/uncompress:.z
gzip/gunzip:.gz
bzip2/bunzip2:.bz2
xz/unxz:.xz
zip/unzip
tar,cat
9.2.gzip/gunzip
gzip
-d:解压缩,相当于gunzip
-c:将结果输出到标准输出
-#:1-9,指定压缩比
9.3.bzip2/bunzip2/bzcat
bzip2 [option] .. file..
-k:keep,保留源文件
-d:解压缩
-#:1-9压缩比
9.4.zip/unzip
zip zipfile.zip file... 压缩
unzip zipfile.zip
9.5.tar
tar -cvf file.tar /path 压缩
tar -xvf d.tar [-C /path]解压缩
结合压缩工具
-j:bzip2;.bz2
-z:gzip;.gz
-J:xz,.xz
9.6.ifelse语句
多分支
if ...
elif ...
elif ...
else ...
fi ...
循环:for,while,until
10. 程序包管理
10.1. rpm
10.1.1. rpm安装
rpm -ivh package_file ...
--test:测试安装
--nodeps:忽略依赖关系
--replacepkgs:重新安装
10.1.2. rpm升级
rpm -U [options] package_file...(有则升级,无则安装)
rpm -F [options] package_file...(有则升级,无则不安装)
rpm -Uvh pack_file
--test:测试安装
--nodeps:忽略依赖关系
--replacepkgs:重新安装
10.1.3. rpm查询
rpm {-q} [select-options] [query-options]
-a:所有包
-f:查询指定文件由哪个程序包安装生成的
-g:查询包组信息
-c:查询程序的配置文件
-d:查询程序文档
-i:查询程序包信息
-l:查询指定程序包安装后生成的文件列表
-R:查询程序包依赖的CAPABiLITY
10.1.4. 导入公钥
rpm --import ...cdrom/RPM-GPG-KEY-CentOS-7
rpm --import /etc/pki/rpm-gpg/RPM*
10.1.5. 数据库
/var/lib/rpm
数据库重建
rpm {--initdb|--rebuilddb}
initdb 不存在则新建,否则不执行任何操作
rebuilddb 无论当前存在与否,都会重新创建数据库
10.2. yum
10.2.1. 文件服务器
nfs://
rpm -q yum #查看yum是否安装
rpm -qc yum #查看yum配置文件
文件服务器:
nfs://
10.2.2. yum客户端配置文件
配置文件:
/etc/yum.conf:为所有配置文件提供公共配置
/etc/yum.repos.d/*.repo:每个仓库特有配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url1://path/to/repository
url2://path/to/repository
url3://path/to/repository
mirrorlist:文件地址(文件里面放了上面的url地址列表)
enabled=(1|0) 是否启用默认1启用
gpgcheck=(1|0) 是否检查完整性与合法性
repo_gpgcheck=(1|0) 是否检查仓库元数据信息
gpgkey=URL gpg密钥文件
enablegroups=(1|0) 默认1支持组管理
cd /etc/yum.repos.d/
vi centos-local.repo
[mybase]
name=my Base repo
baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/(repodata上一级目录)#最后一定要加/
gpgcheck=0
10.2.3. yum repolist 查看仓库列表
yum命令用法:
yum repolist all 显示所有仓库
yum repolist 显示启用的仓库
10.2.4. 显示程序包
yum list all 查看所有程序包
yum list php 支持glob通配符
yum list available [glob]未安装的
yum list updates [glob] 可升级的
yum list installed [glob] 已安装的
10.2.5. 安装程序包
yum install 包1 包2 包3....
10.2.6. 升级程序包
yum update 包1 包2 包3....
10.2.7. 检查可用升级
yum check-update
10.2.8. 卸载程序包
yum remove 包名 (会同时把依赖于此包的程序包也卸载)
10.2.9. 查看程序包
yum info 包名
yum provides /bin/ls 查看文件由哪个程序包提供
10.2.10. 清理本地缓存
yum clean all
10.2.11. 构建缓存
makecache生成缓存
10.2.12. 搜索
yum search string1 搜索程序包名及summary信息 yum search php
10.2.13. 重新安装
reinstall
10.2.14. 降级
downgrade
10.2.15. 显示依赖关系
deplist yum deplist gcc
10.2.16. 查看yum事务
yum history
10.2.17. 包组管理命令
groupinstall 安装 yum groupinstall "Development Tools"
grouplist 查看包组列表
groupremove 卸载
groupinfo 查看信息
10.2.18. 如何使用光盘当作本地yum仓库
(1)mount -r -t iso9660 /dev/cdrom /media/cdrom 挂载光盘
(2)
[centos7]
name=
baseurl=file:///media/cdrom/
gpgcheck=
enabled=
10.2.19. yum的repo配置文件中可用的变量:
$releasever:当前os的发行版的主版本号
$arch:平台
$basearch:基础平台
$YUM0-$YUM9 自定义变量
http://mirrors.msdfu.com/centos/$releasever/$basearch/os
10.2.20. 创建yum仓库
(1)yum install createrepo
(2)createrepo [options] directory 例如createrepo ./
10.3. 程序包编译安装
程序包编译安装:
testapp-VERSION-realse.src.rpm -->安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C、C++:make (configure --> Makefile.in --> makefile)
java:maven
10.3.1. 编译安装三步骤:
./configure
(1)通过选项传递参数,指定启用特性、安装路径等,生成makefile
(2)检查依赖环境
make 根据makefile文件,构建应用程序
make install
开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in
10.3.2. 开源程序源代码的获取:
官方站点
apache.org
mariadb.org
...
代码托管:
SourceForge
Github.com
code.google.com
c/c++: gcc(GNU C Complier)
编译c源代码:
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库
10.3.3. 通过“包组”提供开发组件DEVtools Server PlatDEV
Centos 6: “Development Tools”,"Server Platform Development",
10.3.4. 编译安装一般步骤
10.3.4.1. 第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help:获取支持的选项 ./configure --help
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置,默认/usr/local
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件路径
系统类型system types:
可选特性
--disable-FEATURE 不启用
--enable-FEATRUE 启用
可选包
--with-PACKAGE
--without-PACKAGE
10.3.4.2. 第二步:make
10.3.5. 第三步:make install
10.3.6. 第四步:安装后配置
10.3.6.1. 1导出二进制程序目录至PATH环境变量中
/etc/profile.d/NAME.SH
export PATH=/PATH/TO/BIN:$PATH
10.3.6.2. 2导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在的目录至此文件中
10.3.6.3. 3让系统重新生成缓存
ldconfig
10.3.6.4. 4导出头文件
基于链接的方式实现:
ln -sv
10.3.6.5. 5导出帮助手册
/etc/man.config文件添加一个MANPATH
MANPATH /usr/local/apache2
11. 网络管理
11.1. route网络配置
11.1.1. route -n 查看主机路由
route -n #查看主机路由 0.0.0.0本地路由
Destination Gateway Genmask Flags Metric Ref Use Iface
92.168.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
11.1.2. route配置文件
route 命令,配置路由信息:配置后会立即生效,但不是永久生效,可以把route命令加到/etc/local.rc开机配置,但是会导致nfs失效,修改静态路由配置文件,重启network服务
11.1.3. 查看本机路由表信息
route -n 查看本机路由表信息
11.1.4. 添加路由表:
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目标:192.168.1.3 网关172.16.0.1 添加主机路由
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
route add -host 192.168.2.108 gw 192.168.2.254 dev eth0
目标:192.168.0.0 网关172.16.0.0 添加网络路由
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.2.254 dev eth0
默认路由,网关:172.16.0.1 添加默认路由
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1 dev eth0
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.1 dev eth0
route add default gw 192.168.2.1 dev eth0
11.1.5. 删除路由表
route del -host 192.168.1.3
route del -net 192.168.0.0 netmask 255.255.255.0
11.2. DNS服务器指定
/etc/resolv.conf
nameserver DNS1
nameserver DNS2
nameserver DNS3
正向解析:FQDN --> IP
反解:IP--> FQDN
FQDN:www.baidu.com
dig命令:
dig -t A wwww.baidu.com 测试dns解析
dig -x IP 反向解析
11.3. netstat命令:网络状态查看命令
netstat 显示所有连接
netstat -t 显示tcp协议
netstat -u 显示udp协议
netstat -a 所有状态连接,不加时默认显示连接的
netstat -l 显示监听状态连接
-n 不反解 IP、端口
-e 扩展信息
-p 显示相关进程 pid
常用组合
-tan -uan -tnl -unl -ptan
显示路由表
netstat --route
netstat -rn
接口统计数据
netstat -i
netstat -Ieth0
11.4. 网络配置文件
ip,mask等配置:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由:/etc/sysconfig/network-script/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE
DEVICE="eth0" 此配置文件应用到的设备
HWADDR="sjLJD2313400000000" mac地址配置
BOOTPROTO="static" dhcp/static/none/bootp 静态或动态
NM_CONTROLLED: NM是networkManager 的简写,此网卡是否接受NM控制,建议no
cat /etc/rc.d/init.d/NetworkManager
ONBOOT:在系统启动是否激活此设备,yes no
TYPE:接口类型 :Ethernet ,Bridge
UUID:设备唯一标识
IPADDR:指明ip地址
NETMASK:掩码
GETWAY:网关,默认网关
DNS1:dns服务器
DNS2:dns服务器
DNS3:dns服务器
USERCTL:普通用户是否可控制此设备 yes no
PEERDNS:如果BOOTPROTOL为"dhcp",是否允许dhcp server分配的dns服务器指向信息直接覆盖至i/etc/resolv.conf文件中
/etc/sysconfig/network-script/route-IFACE
两种风格:
1、TARGET via GW
2、每三行定义一条路由
ADDRESSS#=TARGET
NETMASK=mask
GATEWAY#=gw
vi route-eth0
192.168.0.0/24 via 172.16.0.1
service network restart
12. 进程管理、任务计划
linux进程查看及管理的工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill等。
12.1. pstree
显示进程树pstree
12.2. ps命令
显示系统所有进程状态
ps [option]...
选择:支持两种风格,带-或不带-
12.2.1. 常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程
x:与终端无关的进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 1540 ? Ss 09:37 0:01 /sbin/init
属主 id cpu占用 内存占用 虚拟内存大小 常驻内存
TIME:运行累计时长
COMMAND:启动命令
STAT:进程状态
R:running运行
S:可中断睡眠
D:不可中断睡眠
T:stopped停止
Z:僵死 zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
12.2.2. ps -ef
-e显示所有进程,相当于-ax
-f显示完整格式
12.2.3. ps -ejH
-H 树状结构展示
-j 任务格式显示
12.2.4. pidof根据进程名获取pid
pidof sshd
12.3. top查看实时进程
12.3.1. 排序
P:以占据cpu百分比排序
M:以内存排序
T:累计占据cpu时长
12.3.2. 字段说明
top第一行:
top-当前系统时间- up -运行时长 -登录用户数 -平均负载情况
uptime命令可以显示这些数据
top第二行:
进程总数 - 运行数 -睡眠数- 停止数 -僵死数
top第三行:
1:显示cpu信息,切换分别显示多个cpu信息
top第四行:
m:切换显示,内存使用情况
12.4. free -m 查看内存
12.5. vmstat 查看虚拟内存工具
memory
swap:交换内存使用的总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
12.6. kill、killall命令
kill -9 pid停止进程
killalll httpd 终止“名称”之下的所有进程
12.7. nohup .... & 后台启动
12.8. crontab 周期任务计划
command > /dev/null
command &> /dev/null
13. centos启动流程
13.1. init程序的类型:
SysV:init,centos5
配置文件:/etc/inittab
Upstart:init,centos6
配置文件:/etc/inittab,/etc/init/*.conf
Systemd:systemd,centos7
配置文件:/usr/lib/systemd/system,/etc/systemd/system
13.2. init配置文件
/sbin/init
centos5:
0-6:7个运行级别
0:关机
1:单用户(root)
2:多用户,维护
3:多用户,文本界面
4:预留级别
5:多用户,图形界面
6:重启
默认级别:3,5
切换级别:
init #
查看级别:
runlevel
who -r
配置文件:/etc/initab
每一行定义一种action以及与之对应的process
id:5:initdefault:
id:runlevel:action:process
action:
wait:切换至此级别运行一次
respawn:此process终止,就重新启动
initdefault:设定默认运行级别,process省略
sysinit:设定系统初始化方式,此处一般指定为/etc/rc.d/rc.sysinnit
13.3. chkconfig配置服务级别
13.3.1. 查看
chkconfig --list 查看服务运行级别
13.3.2. 设置
chkconfig --level 3 NetworkManager off 设置不同级别下服务起停
chkconfig --level 2345 NetworkManager off 设置不同级别下服务起停
添加
1、SysV的服务脚本放置在/etc/rc.d/init.d(/etc/init.d)
2、chkconfig --add name 添加连接文件
实例
vi /etc/rc.d/init.d/testsrv #!/bin/bash #chkconfig: 345 66 33 #description: test srv script echo "hello srv" chmod +x /et/crc.d/init.d/testsrv chkconfig --add testsrv chkconfig --list testsrv ls -l /etc/rc.d/rc0.d/K33testsrv |
13.3.3. 删除
chkconfig --del testsrv
13.4. /etc/rc.d/init.d/ 系统服务脚本目录
vi /etc/rc.d/init.d/NetworkManager
13.5. /etc/rc.d/rc.local特殊的开机执行的脚本
[root@localhost /]# ll /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Mar 12 06:25 /etc/rc.d/rc3.d/S99local -> ../rc.local
如果有需要开机执行的脚本,不需写为服务的,可以写在/etc/rc.d/rc.local或/etc/rc.local文件中。
13.6. /etc/rc.d/rc.sysinit:系统初始化脚本
1、设置主机名
2、设置欢迎信息
3、激活udev和selinux
4、挂载/etc/fstab文件中定义的文件系统
5、检测根文件系统,并以读写方式挂载跟文件系统
6、设置系统时钟
7、激活swap设备
8、根据/etc/sysctl.conf文件设置内核参数
9、激活lvm及software raid设备
10、加载额外设备的驱动程序
11、清理操作
14. 内核管理
14.1. uname
uname -a 查看内核信息
uname -n 节点名称,hostname
uname -r reales版本信息
uname -m 硬件平台
uname -p 平台架构
14.2. /proc 目录
/proc/sys内核参数
sysctl命令用于查看或设定此目录的参数
sysctl -w path.to.paramter=VALUE
echo "VALUE" > path/to/parameter
ls /proc/sys/kernel/hostname -l #主机名
sysctl -w kernel.hostname=myhostname
echo 'myhostname' > /proc/sys/kernel/hostname
内核中路由转发
cat /proc/sys/net/ipv4/ip_forward
永久有效
vi /etc/sys/sysctl.conf
net.ipv4.ip_forward=0
sysctl -p 使得立即生效
15. 内核编译及centos系统安装、SELinux、while循环
15.1. SELinux
配置SELinux:
SELinux是否启用:SELINUX=状态
cat /etc/selinux/config
SELinux的状态:enforcing:强制,permissive:启用,disabled:关闭
getenforce 命令查看selinux状态
15.2. bash循环
15.2.1. for循环语法
for NAME in LIST; do
循环体
done
列表生成方式:
(1) 整数列表
{start..end}
$(seq start [[step]end])
(2) glob
/etct/rc.d/rc3.d/K*
(3) 命令
通过ping探测172.168.1.1-172.168.1.250
vi ping.sh
#!/bin/bash
net=192.168.2
uphosts=0
downhosts=0
for i in {1..20}; do
ping -c 1 -w 1 ${net}.${i} &> /dev/null
if [ $? -eq 0]; then
echo "${net}.${i} is up."
let uphosts++
else
echo "${net}.${i} is down."
let downhosts++
fi
done
echo "UP hosts:${uphosts}"
echo "Down hosts: ${downhosts}"
ping -c ping的次数 -w 执行的时间,秒
检查语法bash -n ping.sh
bash ping.sh
15.2.2. while语句
while CONDITION;do
循环体
done
15.2.3. declare定义变量(整数、数组、函数)
核心语法:
-i 声明为整数
declare -i num=1;
-a 声明未数组
-f 声明未函数
-r 声明未只读
16. sed、until、while、for、case
16.1. sleep 3 睡眠3秒
16.2. until类似do while
16.3. sed命令
16.3.1. sed介绍
16.3.1.1. sed是什么
非交互式面向字符流的文本编辑器
16.3.1.2. sed流原理
模式框架与缓存框架
模式空间:
处理一行文本的临时空间,处理完会打印,清空内容
缓存空间:
不会自动和打印
工作流程
16.3.2. 正则表达式
16.3.2.1. 正则表达式基础
元字符:
. 匹配除换行符以外的任意字符
\w 匹配字母数字下划线
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串开始
$ 匹配字符串结束
\ 转义字符
限定符
* 重复0或更多次
+ 重复1或更多次
? 重复0或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
[1-9a-z] 指定范围内的一个字符
[^1-9] 指定访问以外的一个字符
反义:
\W 匹配任意不是字母、数字、下划线、汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>ex) 匹配ex,并捕获文本到名称为name的组里
(?:exp) 匹配exp,不捕获匹配的文本,也不分配组号
零宽断言:
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?<!exp) 匹配后面跟的不是exp的文职
(?<!exp) 匹配前面不是exp的位置
贪婪与懒惰:
*? 重复任意此,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能绍重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
16.3.2.2. 正则表达式进阶
16.3.2.3. sed正则表达式
sed默认为贪婪模式,不支持懒惰模式
sed使用正则表达式时要注意shell特殊字符冲突问题,如\(exp\)。
sed中不支持\d和反义中的\W等表达方式
16.3.3. sed命令基础
16.3.3.1. 命令格式
sed [-options] [commands] filename
command格式
[address-range] [pattern-to-match][sed-command]
例如:sed -n '5,8p' passwd
5,8 选址5到8行
p 打印
passwd文件
16.3.3.2. 查找、删除、打印
16.3.3.2.1. 查找
查找passwd文件中以bash结尾的行打印出来
cp /etc/passwd /home/passwd
sed -n '/bash$/p' /home/passwd
正则表达式要用//包起来
-n 参数抑制sed默认输出,sed默认会输出每行,只输出匹配的行
16.3.3.2.2. 删除
删除/home/passwd文件中以test开头的行
sed '/^test/d' /home/passwd # -i选项,直接修改源文件
16.3.3.2.3. 打印
打印3到8行
sed -n '3,8p' /home/passwd
16.3.3.3. 提取
提取passwd文件中有登录shell的用户名及家目录,-r 省略转义小括号
[root@localhost home]# sed -r -n '/bash$/s/(\w+):\w:[0-9]+:[0-9]+:.*:(.*):.*/\1 \2/p' passwd
root /root
16.3.3.4. 插入
sed -i '5i\hello world' /home/passwd #第5行上面插入
16.3.3.5. 追加
sed -i '5a\hello world' /home/passwd #第5行后面追加一行
16.3.3.6. 更改
sed -i '5c\hello world' /home/passwd 第5行修改为hello world
16.3.3.7. 转换
echo 'abcdef' | sed 'y/abcdef/ABCDEF/' 把小写转为大写
16.3.3.8. q打印
sed '5q' passwd 从第1行打印到第5行
16.3.4. sed流编辑器
sed:Stream Editor,行编辑器:
用法
sed [option]... 'script' inputfile...
常用选项:
-n:静默模式,不输出模式空间中内容到屏幕
-e: 多点编辑
-f /path/to/script_file: 从文件中读取脚本
-r:支持使用扩展正则表达式
-i: 直接编辑原文件
script:
'地址命令' #地址与命令间没有空格
地址定界:
(1)不给地址:对全文进行处理
(2)单地址:
#:指定的行
/pattern/:被模式匹配到的每一行
(3)地址范围:
#,# 第几行到第几行
#,+# 从第几行开始,向下多少行
/pat1/,/pat2/ 从模式1到模式2
#,/pat1/ 第几行到第一次匹配到pat1的行
编辑命令:
d:删除
sed '/^UUID/d' /etc/fstab 删除uuid开头的行
sed '1,4d' /etc/fstab 删除第1行到第4行
p:显示模式空间中的内容
sed -n '/^UUID/p' /etc/fstab
a:在行后追加一行
sed '/^UUID/a hello sed.' /etc/fstab
sed '/^UUID/a hello sed. \n new loine' /etc/fstab 多行
i:在前面插入
sed '/^UUID/i hello sed. \n new loine' /etc/fstab 多行
c:替换,替换符合的行为指定文本、单行或多行
sed '/^UUID/c hello sed. \n new loine' /etc/fstab
w:符合条件的内容另存为另外一个文件
sed -n '/^UUID/w /tmp/fstab.txt' /etc/fstab
=:为模式空间中的行打印行号
sed '/^UUID/=' /etc/fstab
r /path/to/somefile:读取,把/etc/issue内容读取到/etc/fstab第6行后面
sed '6r /etc/issue' /etc/fstab
!:取反条件
sed -n '/^UUID/!p' /etc/fstab 打印匹配到行以外的行
s///:查找替换,支持使用其他分隔符,s@@@,s###
替换标记:
g:行内全局替换
sed 's@^UUID@uuid@' /etc/fstab 替换行首UUID为uuid
sed '[email protected]@&er@' /etc/passwd &后向引用
17. bash函数数组、字符串处理、centos7systemd
17.1. 函数
语法一:
function f_name{
函数体
}
语法二:
f_name(){
函数体
}
#!/bin/bash
function start(){
echo "hello"
}
start
17.2. systemctl系统及服务
unit类型:service,target
.service,.target
service name start ==>systemctl start name.service
service name stop ==> systemctl stop name.service
service name restart ==>systemctl restart name.service
service name status ==>systemctl status name.service
查看所有服务当前状态
systemctl list-units --type service --all
centos7:
chkconfig name on ==> systemctl enable name.service
chkconfig name off ==> systemctl disable name.service
chkconfig --list ==> systemctl list-unit-files --type service
重启:systemctl reboot
17.3. 数组
18. awk、网络安全、openssl
18.1. awk
格式化文本处理工具
基本用法:gawk [options] 'program' file...
program: pattern{action statement}
语句之间用分号分隔
print,printf
选项:
-F:指明输入时的字段分隔符:
-v var=value:自定义变量
tail -f /etc/fstab| awk '{print $2,$4}' #打印第2、4个字段
tail -f /etc/fstab| awk '{print $2:$4}' 分隔:
变量
内建变量
FS:输入分隔符,默认空白字符
OFS:输出分隔符,默认空白字符
cat /etc/passwd |awk -v FS=':' -v OFS=':' '{print $1}'
cat /etc/passwd |awk -v FS=':' -v OFS=':' '{print $1,$2}'
RS:输入时的换行符
ORS:输出换行符
NF:字段数量
awk '{print NF}' /etc/fstab
awk '{print $NF}' /etc/fstab
NR:行号
FILENAME:文件名
ARGC:命令行参数个数
ARGV:命令行参数数组 ARGV[0] ARGV[1]
自定义变量
(1)-v var=value
(2){}中定义
awk 'BEGIN{test="hello";print test}'
awk -v test='hello' 'BEGIN{print test}'
18.2. 网络通信安全基础
18.3. openssl
19. dns
20. telnet、httpd、openssh、opessl
20.1. openssh
22/tcp,安全远程登录
客户端组件:
ssh,配置文件:/etc/ssh/ssh_config
格式:ssh root@host command
不用口令,基于密钥认证
生成密钥,把公钥放在对应远程服务端用户家目录
步骤:
1、ssh-keygen -t rsa
2、生成的文件在:/home/用户/.ssh目录下:
id_rsa私钥 id_rsa.pub公钥
3、把密钥传输远程服务器家目录:
ssh-copy-id -i .ssh/id_rsa_pub [email protected]
scp命令
scp -r [email protected]:/datafine/puss /datafine./sdl 拉取到本地
scp -r /datafine./sdl [email protected]:/datafine/puss 推送到远程
服务器端:
sshd,配置文件:/etc/ssh/sshd_config
20.2. openssl
OpenSSL:
三个组件:
openssl:多用途的命令行工具
libcrypto:加密解密库
libssl:ssl协议的实现
PKI:Public Key Infrastructure
CA:发证机构
RA:注册机构
CRL:吊销列表
证书存取库
建立私有CA:
OpenCA
opennssl
证书申请及签署步骤
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书
20.2.1. 创建私有CA
openssl的配置文件:cat /etc/pki/tls/openssl.cnf
1、所需要的文件
cd /etc/pki/CA
#touch index.txt
#echo 01 > serial #01 >之间一定要有空格
2、CA自签证书
(1)、(umask 077;openssl genrsa -out private/cakey.pem 2048) 生成私钥
(2)、openssl req -new -x509 -key private/cakey.pem -days 7300 -out cacert.pem 由私钥生成自签证公钥
new:生成新证书签署请求
x509:专用于CA生成自签证书
key:生成请求时用到的私钥文件
days n:证书有效期
out /path/to/somefile:证书的保存路径
交互式参数:
CN
Beijing
Beijing
MageEdu
Ops
ca.mageedu.com
3、发证
(1)用到证书的主机生成证书请求
(2)把请求文件传输给CA
(3)CA签署证书,并将证书发放给请求端
4、客户端申请证书步骤
rpm -q httpd
cd /etc/httpd/
mkdir ssl
(umask 077;openssl genrsa -out httpd.key 2048) 生成私钥
openssl req -new -key httpd.key -days 7300 -out httpd.csr 生成请求
交互式参数(域名等部分属性注意与服务端一致):
CN
Beijing
Beijing
MageEdu
Ops
ca.mageedu.com
可以不加密,不输入密码直接回车
scp httpd.csr [email protected]:/tmp/ 上传请求文件
5、服务端处理请求文件
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 365
交互式参数:y,y
cat index.txt
ls certs/
ls newcerts/
scp /tmp/httpd.crt 172.16.100.9:/etc/httpd/ssl/ 把证书推送给客户端
查看证书中的信息:
openssl x509 -in /path/from/cert_file -noout -test|-subject|-serial
6、客户端使用证书
httpd.key
httpd.csr
httpd.crt
吊销证书
1、客户端获取要吊销的证书的serial
openssl x509 -in /path/from/cert_file -noout -serial -subject
2、客户端CA
先根据客户端提交的serial与subject信息对比检验是否与index.txt文件中的信息一致
吊销证书:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem 指定的
生成吊销证书的编号(第一次吊销)
echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表
openssl ca -gencrl -out thisca.crl
查看crl文件
openssl crl -in /path/from/crl_file.crl -noout -text
20.3. 套接字及http基础知识
21. 网络管理