1.Vmware使用及Linux基础

1. Vmware使用及Linux基础

1.1. vm使用入门

1.2. linux基础知识

2. linux发行版及命令基础

2.1. OS Linux发行版

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

2.2. netstat -tan 查看端口监听状态

3. Linux文件系统、系统管理类命令、bash基础特性

3.1. Linux文件系统

/boot:引导文件存放目录、内核文件(vmlinux)、引导加载器(bootloadergrub)都存放于此目录;

/bin:供所有用户使用的基本命令,不能关联至独立分区,OS启动会用到的程序;

/sbin:管理类的基本命令,不能关联至独立分区,OS启动会用到的程序;

/lib:基本共享库文件,以及内核模块文件(/lib/modules);

/lib64:专用于x86_64系统上的辅助共享库文件存放位置;

/etc/:配置文件目录(纯文本文件);

/home/USERNAME:普通用户家目录;

/root:管理员的家目录

/media:便携式移动设备挂载点;

cdrom

usb

/mnt:临时文件系统挂载点;

/dev:设备文件及特殊文件存储位置;

bblock device,随机访问

ccharacter device,线性访问

/opt:第三方应用程序的安装位置;

/srv:系统上运行的服务用到的数据;

/tmp:临时文件存储位置;

/usr

bin:保证系统拥有完整功能而提供的应用程序;

sbin:

lib

lib64

includec程序用到的头文件;

share:结构化数据,docman

local:第三方应用程序的安装位置;

binsbinliblib64etcshare

/var:临时数据目录,日志,缓存

/proc:内核相关虚拟文件系统

/sys:当前系统硬件设备相关信息的虚拟文件系统;

/selinuxselinux相关的安全策略等信息的存储位置;

3.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

3.3. linux下文件类型

-:普通文件;

d:目录文件;

b:块设备

c:字符设备;

l:符号链接文件;

p:管道文件

s:套接字文件:socket

3.4. 系统管理命令

3.4.1. 重启

reboot

3.5. bash基础特性及基础命令

3.6. 命令历史

3.6.1. history命令

history

3.6.2. 调用上一次命令的参数

ESC. ;先按esc松开后按.

3.7. 环境变量

3.7.1. 修改环境变量

修改环境变量的方式:export 变量名=""

3.8. 文件状态stat

查看文件状态:stat

查看时间戳、大小等

4. 文件管理、管道、用户与用户权限

4.1. 文件管理、命令别名和glob

4.1.1. ls命令

-R:递归显示

4.1.2. 显示文件绝对路径

find  $PWD  '*'  显示文件绝对路径

4.1.3. 命令别名

4.1.3.1. 显示所有命令别名

alias

4.1.3.2. 定义命令别名

alias NAME='VALUE'

4.1.3.3. bash配置文件

当前用户:~/.bashrc

所有用户:/etc/bashrc

4.1.3.4. bash重新读取配置文件

source /path/config_file

.  /path/config_file

4.1.4. glob通配符

支持符号:? * []

bash中实现文件名通配的机制

4.1.4.1. *:任意长度任意字符

ls a*b

?:任意单个字符

ls a?b

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

[0-9]

[a-z]

[^]:指定范围之外的任意单个字符

4.1.5. tr字符替换

tr [option]...  SET1 SET2

cat a | tr 'abc' 'ABC'

cat a | tr 'a-c' 'A-C'

4.1.6. 管道命令

|

4.1.7. tee命令

tee [option]...[File]...

cat a | tr 'a-c' 'A-C'|tee b

覆盖保存到文件中

4.1.8. wc命令

wc cut sort uniq

   

wc统计单词行数字节数

      wc /etc/passwd

            -l

            -w

            -c

        ifconfig | wc -l

4.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

4.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

4.1.11. uniq命令    

 uniq命令:去重

        uniq 连续且完全一样的才算重复,先用sort排序,再用uniq去重

5. shell编程初步,grep及正则表达式

5.1. shell编程初步

#!/bin/bash

5.2. grep查找字符串

5.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 ~]#

5.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'

5.2.3. 忽略大小写

grep -i 忽略大小写

[root@ac-cmp1 ~]# grep -i  root /etc/passwd

5.2.4. grep -o 仅显示匹配到的字符串

[root@ac-cmp1 ~]# grep -o  root /etc/passwd

root

root

root

root

5.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

5.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

5.2.7. 基本正则表达式元字符

5.2.8. grep -e '' -e ''  -e制动多个条件

5.2.8.1.  .    匹配任意单个字符

5.2.8.2. []    匹配指定范围内任意单个字符

5.2.8.3. [^]    匹配范围之外的任意单个字符

[root@ac-cmp1 ~]# grep 'r.*t' /etc/passwd

[root@ac-cmp1 ~]# grep 'r[a-z]*t' /etc/passwd

--color 加粗显示

    

5.2.8.4. 匹配次数

5.2.8.4.1. *  前面字符任意次

.*:任意长度的任意字符

5.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 ~]#

5.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

5.2.8.4.4. \{n,m\}:匹配次数 

[root@ac-cmp1 ~]# grep 'ro\{1,2\}t' /etc/passwd

5.2.8.5. 位置绑定

5.2.8.5.1. ^ 行开头

[root@ac-cmp1 ~]# grep '^root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@ac-cmp1 ~]#

5.2.8.5.2. $ 行结尾

5.2.8.6. 词首锚定

\<\b:词首锚定,用于单词左侧

5.2.8.7. 词尾锚定

\>\b:词尾锚定,用于单词右侧

[root@ac-cmp1 ~]# grep '\<se' /etc/passwd

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

5.2.8.8. 分组

 \(\)

[root@ac-cmp1 ~]# grep '\(:1000\)\{2\}' /etc/passwd

datafine:x:1000:1000::/home/datafine:/bin/bash

[root@ac-cmp1 ~]#

5.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 ~]#

6. egrepbash环境配置及脚本、vi编辑器

6.1. egrep及扩展的正则表达式

6.1.1. 字符匹配

.

[]

[^]

6.1.2. 次数匹配

*:任意字符任意次数

?01

+:至少1

{m} m

{m,n}:大于m次,小于n

6.1.3. 锚定

^:开头

$:结尾

\<,\b:词首

\>,\b:词尾

6.1.4. 分组

()

6.1.5. 后向引用:

\1,\2...

6.1.6. 或者

a|b

(c|C)atcat或者cat

6.2. bash变量

6.2.1. bash中的变量的种类

根据变量的生效范围等标准:

        本地变量:

        环境变量

        局部变量

        位置变量:$1,$2...脚本参数

        特殊变量:$?,$0,$*,$@,$#

6.2.1.1. 本地变量

        变量赋值:name='value'

            value:

                1、可以是直接字串

                2、变量引用:name=${username}

                3、命令引用:name=`COMMAND`name=$(COMMAND)

变量引用:${name},$name    

            "",双引号,弱引用,其中的变量引用会被替换成变量值

            '',单引号,强引用,其中的变量引用不会被替换成变量值

        显示已定义的所有变量:

            set

        销毁变量

            unset name

6.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..

6.2.1.3. 位置变量

        $1,$2...对应第一、二个参数

        $0:命令本身

        $*${*}:所有参数

        $@:所有参数

        $#:参数个数

6.3. bash的配置文件

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

6.3.1.1. 全局配置

            /etc/profile

                /etc/profile.d/*.sh

            /etc/bashrc

6.3.1.2. 个人配置

            ~/.bash_profile

            ~/.bashrc

6.3.2. 按功能划分,存在两类

6.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)"

6.3.2.2. bashrc

非交互式登录(su Username;图形界面打开终端;执行脚本)

            全局:/etc/bashrc

            个人:~/.bashrc

            功用:

                1、定义命令别名

                2、定义本地变量

6.3.3. 交互式、非交互式登录读取配置文件顺序

6.3.3.1. 交互式

        /etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile->.bashrc ->/etc/bashrc

6.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

6.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测试类型:

6.4.1. 数值测试:

        -gt 大于

        -lt 小于

        -ge 大于等于

        -eq 等于

        -le 小于等于

        -ne 不等于

6.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" 不为空

        注释:字符串都要加引号

6.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 ~]#

7. find命令、if语句、磁盘管理、文件系统管理

7.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.*"

7.2. if语句

if语句,判断语句就是命令;如果是表达式,则需要加test或中括号;如果if后是命令,则不需要再加test或中括号,/dev/null

#!/bin/bash

if [ $# -lt 1 ] then;

    echo "At least on argument."

    exit 1

fi

7.3. 磁盘管理

7.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 指定46个分区

kpartx -a  /dev/sda 扫描分区

kpartx -f 强制添加

centos5

partprobe /dev/sda 扫描分区

7.4Linux文件系统 格式化创建文件系统

7.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 #创建交换分区

7.3.3. 文件系统挂载

reboot重启

挂载,mount,卸载umount

#mount 显示所有挂载情况

挂载:mount [-fnrsvw] [-t vsftype] [-o options] device mount_point

    device:指明要挂载的设备

        1、设备文件,分区:/dev/sda5

        2、卷标:例如:-L 'LABEL'

        3UUID,例如:-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

7.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

7.3.5. RAID

7.3.6. LVM

7.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

-sPE大小,默认4M

vgremove myvg 删除卷组

vgcreate -s 8MB myvg /dev/sda[2,3] 创建时设置PE大小

vgextend myvg /dev/sdc6 增加物理卷到卷组

vgreduce myvg /dev/sda3 缩减卷组

7、逻辑卷管理命令:lv

lvcreate

-L:空间大小

-nlv名称

创建逻辑卷步骤

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

7.3.6.2. lvm快照

快照卷,也是一种逻辑卷,通常是只读的。

8. 压缩、解压缩、ifelse语句

8.1. 压缩、解压缩及归档工具

    compress/uncompress:.z

    gzip/gunzip:.gz

    bzip2/bunzip2:.bz2

    xz/unxz:.xz

    zip/unzip

    tar,cat

8.2. gzip/gunzip

    gzip

    -d:解压缩,相当于gunzip

    -c:将结果输出到标准输出

    -#1-9,指定压缩比

8.3. bzip2/bunzip2/bzcat

    bzip2 [option] .. file..

        -k:keep,保留源文件

        -d:解压缩

        -#1-9压缩比

8.4. zip/unzip

    zip zipfile.zip file... 压缩

    unzip zipfile.zip

8.5. tar

    tar -cvf file.tar /path 压缩

    tar -xvf d.tar [-C /path]解压缩

    结合压缩工具

        -j:bzip2;.bz2

        -z:gzip;.gz

        -J:xz,.xz

8.6. ifelse语句

多分支

if ...

elif ...

elif ...

else ...

fi ...

循环:for,while,until

9. 程序包管理

9.1. rpm

9.1.1. rpm安装

    rpm -ivh package_file ...

        --test:测试安装

        --nodeps:忽略依赖关系

        --replacepkgs:重新安装

9.1.2. rpm升级

    rpm -U [options] package_file...(有则升级,无则安装)

    rpm -F [options] package_file...(有则升级,无则不安装)

        rpm -Uvh pack_file

            

        --test:测试安装

        --nodeps:忽略依赖关系

        --replacepkgs:重新安装

9.1.3. rpm查询

    rpm {-q} [select-options] [query-options]

        -a:所有包

        -f:查询指定文件由哪个程序包安装生成的

        -g:查询包组信息

    -c:查询程序的配置文件

    -d:查询程序文档

    -i:查询程序包信息

        -l:查询指定程序包安装后生成的文件列表

        -R:查询程序包依赖的CAPABiLITY

9.1.4. 导入公钥

rpm --import ...cdrom/RPM-GPG-KEY-CentOS-7

rpm --import /etc/pki/rpm-gpg/RPM*

9.1.5. 数据库

    /var/lib/rpm

    数据库重建

        rpm {--initdb|--rebuilddb}

            initdb 不存在则新建,否则不执行任何操作

            rebuilddb 无论当前存在与否,都会重新创建数据库

9.2. yum

9.2.1. 文件服务器

    ftp://

    http://

    nfs://

    file:///

rpm -q yum #查看yum是否安装

rpm -qc yum #查看yum配置文件

文件服务器:

    ftp://

    http://

    nfs://

    file:///

9.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

9.2.3. yum repolist 查看仓库列表

yum命令用法:

    yum repolist all 显示所有仓库

    yum repolist 显示启用的仓库

9.2.4. 显示程序包

yum list all 查看所有程序包

yum list php 支持glob通配符

yum list available [glob]未安装的

yum list updates [glob] 可升级的

yum list installed [glob] 已安装的

9.2.5. 安装程序包

yum install 1 2 3....

9.2.6. 升级程序包

yum update 1 2 3....

9.2.7. 检查可用升级

yum check-update

9.2.8. 卸载程序包

yum remove 包名  (会同时把依赖于此包的程序包也卸载)

9.2.9. 查看程序包

yum info 包名

yum provides /bin/ls 查看文件由哪个程序包提供

9.2.10. 清理本地缓存

yum clean all

9.2.11. 构建缓存   

makecache生成缓存

9.2.12. 搜索

yum search string1 搜索程序包名及summary信息 yum search php

9.2.13. 重新安装

reinstall

9.2.14. 降级

downgrade

9.2.15. 显示依赖关系

deplist  yum deplist gcc

9.2.16. 查看yum事务

yum history

9.2.17. 包组管理命令

    groupinstall  安装 yum groupinstall "Development Tools"

    grouplist 查看包组列表

    groupremove 卸载

    groupinfo 查看信息

   

9.2.18. 如何使用光盘当作本地yum仓库

1mount -r -t iso9660 /dev/cdrom /media/cdrom 挂载光盘

2

[centos7]

name=

baseurl=file:///media/cdrom/

gpgcheck=

enabled=

9.2.19. yumrepo配置文件中可用的变量:

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

    $arch:平台

    $basearch:基础平台

    $YUM0-$YUM9 自定义变量

    http://mirrors.msdfu.com/centos/$releasever/$basearch/os

9.2.20. 创建yum仓库

   (1)yum install createrepo

   (2)createrepo [options] directory 例如createrepo ./

9.3. 程序包编译安装

程序包编译安装:

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

    源代码组织格式:

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

        CC++:make (configure --> Makefile.in --> makefile)

        java:maven

9.3.1.  编译安装三步骤:

        ./configure

            (1)通过选项传递参数,指定启用特性、安装路径等,生成makefile

            (2)检查依赖环境

        make 根据makefile文件,构建应用程序

        make install

    开发工具:

        autoconf:生成configure脚本

        automake:生成Makefile.in

9.3.2. 开源程序源代码的获取:

    官方站点

        apache.org

        mariadb.org

        ...

    代码托管:

        SourceForge

        Github.com

        code.google.com

    c/c++: gcc(GNU C Complier)

编译c源代码:

    前提:提供开发工具及开发环境

        开发工具:make,gcc

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

            glibc:标准库

9.3.3. 通过包组提供开发组件DEVtools Server PlatDEV

            Centos 6: “Development Tools”,"Server Platform Development",

9.3.4. 编译安装一般步骤

9.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

9.3.4.2. 第二步:make

9.3.5. 第三步:make install

9.3.6. 第四步:安装后配置

9.3.6.1. 1导出二进制程序目录至PATH环境变量中

/etc/profile.d/NAME.SH   

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

9.3.6.2. 2导出库文件路径

编辑/etc/ld.so.conf.d/NAME.conf

添加新的库文件所在的目录至此文件中

9.3.6.3. 3让系统重新生成缓存

ldconfig

9.3.6.4. 4导出头文件

基于链接的方式实现:

ln -sv 

9.3.6.5. 5导出帮助手册

/etc/man.config文件添加一个MANPATH

MANPATH  /usr/local/apache2

10. 网络管理

10.1. route网络配置

10.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

10.1.2. route配置文件

route 命令,配置路由信息:配置后会立即生效,但不是永久生效,可以把route命令加到/etc/local.rc开机配置

10.1.3. 查看本机路由表信息

route -n  查看本机路由表信息

10.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

10.1.5. 删除路由表

route del -host 192.168.1.3

route del -net 192.168.0.0 netmask 255.255.255.0

    

10.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 反向解析

10.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

10.4. 网络配置文件

    ipmask等配置:/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: NMnetworkManager 的简写,此网卡是否接受NM控制,建议no

            cat /etc/rc.d/init.d/NetworkManager    

        ONBOOT:在系统启动是否激活此设备,yes no

        TYPE:接口类型 :Ethernet ,Bridge

        UUID:设备唯一标识

        IPADDR:指明ip地址

        NETMASK:掩码

        GETWAY:网关,默认网关

        DNS1dns服务器      

DNS2dns服务器

DNS3dns服务器

USERCTL:普通用户是否可控制此设备 yes no

PEERDNS:如果BOOTPROTOL"dhcp",是否允许dhcp server分配的dns服务器指向信息直接覆盖至i/etc/resolv.conf文件中

/etc/sysconfig/network-script/route-IFACE

    两种风格:

        1TARGET 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

11. 进程管理、任务计划

linux进程查看及管理的工具:pstreepspidofpgreptophtopglancepmapvmstatdstatkillpkill等。

11.1. pstree

显示进程树pstree

11.2. ps命令

显示系统所有进程状态

ps [option]...

选择:支持两种风格,带-或不带-

11.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:进程状态

Rrunning运行

S:可中断睡眠

D:不可中断睡眠

Tstopped停止

Z:僵死 zombie

+:前台进程

l:多线程进程

N:低优先级进程

<:高优先级进程

ssession leader

11.2.2. ps -ef

-e显示所有进程,相当于-ax

-f显示完整格式

11.2.3. ps -ejH

-H 树状结构展示

-j 任务格式显示

11.2.4. pidof根据进程名获取pid

pidof sshd

11.3. top查看实时进程

11.3.1. 排序

P:以占据cpu百分比排序

M:以内存排序

T:累计占据cpu时长

11.3.2. 字段说明

top第一行:

top-当前系统时间- up -运行时长 -登录用户数 -平均负载情况

uptime命令可以显示这些数据

top第二行:

进程总数 - 运行数 -睡眠数- 停止数 -僵死数

top第三行:

1:显示cpu信息,切换分别显示多个cpu信息

top第四行:

m:切换显示,内存使用情况

11.4. free -m 查看内存

11.5. vmstat 查看虚拟内存工具

memory

swap:交换内存使用的总量

free:空闲物理内存总量

buffer:用于buffer的内存总量

cache:用于cache的内存总量

11.6. killkillall命令

kill -9 pid停止进程

killalll httpd 终止“名称”之下的所有进程

11.7. nohup .... & 后台启动

11.8. crontab 周期任务计划

command > /dev/null

command &> /dev/null

12. centos启动流程

12.1. init程序的类型:

SysVinitcentos5

配置文件:/etc/inittab

Upstartinitcentos6

配置文件:/etc/inittab,/etc/init/*.conf

Systemdsystemdcentos7

配置文件:/usr/lib/systemd/system,/etc/systemd/system

12.2. init配置文件

/sbin/init

centos5

0-67个运行级别

0:关机

1:单用户(root

2:多用户,维护

3:多用户,文本界面

4:预留级别

5:多用户,图形界面

6:重启

默认级别:35

切换级别:

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

12.3. chkconfig配置服务级别

12.3.1. 查看

chkconfig --list 查看服务运行级别

12.3.2. 设置

chkconfig --level 3 NetworkManager off 设置不同级别下服务起停

chkconfig --level 2345 NetworkManager off 设置不同级别下服务起停

添加

1SysV的服务脚本放置在/etc/rc.d/init.d/etc/init.d

2chkconfig --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

12.3.3. 删除

chkconfig --del testsrv

12.4. /etc/rc.d/init.d/ 系统服务脚本目录

vi /etc/rc.d/init.d/NetworkManager

12.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文件中。

12.6. /etc/rc.d/rc.sysinit:系统初始化脚本

1、设置主机名

2、设置欢迎信息

3、激活udevselinux

4、挂载/etc/fstab文件中定义的文件系统

5、检测根文件系统,并以读写方式挂载跟文件系统

6、设置系统时钟

7、激活swap设备

8、根据/etc/sysctl.conf文件设置内核参数

9、激活lvmsoftware raid设备

10、加载额外设备的驱动程序

11、清理操作

13. 内核管理

13.1. uname

uname -a 查看内核信息

uname -n 节点名称,hostname

uname -r  reales版本信息

uname -m 硬件平台

uname -p 平台架构

13.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 使得立即生效

14. 内核编译及centos系统安装、SELinuxwhile循环

14.1. SELinux

配置SELinux

SELinux是否启用:SELINUX=状态

cat /etc/selinux/config

SELinux的状态:enforcing:强制,permissive:启用,disabled:关闭

getenforce 命令查看selinux状态

14.2. bash循环

14.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

14.2.2. while语句

while CONDITION;do

循环体

done

14.2.3. declare定义变量(整数、数组、函数)

核心语法:

-i 声明为整数

declare -i num=1;
-a 声明未数组

-f 声明未函数

-r 声明未只读

15. seduntilwhileforcase

15.1. sleep 3 睡眠3

15.2. until类似do while

15.3. sed命令

15.3.1. sed介绍

15.3.1.1. sed是什么

非交互式面向字符流的文本编辑器

15.3.1.2. sed流原理

模式框架与缓存框架

模式空间:

处理一行文本的临时空间,处理完会打印,清空内容

缓存空间:

不会自动和打印

工作流程

15.3.2. 正则表达式

15.3.2.1. 正则表达式基础

元字符:

. 匹配除换行符以外的任意字符

\w 匹配字母数字下划线

\s 匹配任意空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串开始

$ 匹配字符串结束

\ 转义字符

限定符

* 重复0或更多次

+ 重复1或更多次

? 重复01

{n} 重复n

{n,} 重复n次或更多次

{n,m} 重复nm

[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}? 重复nm次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

15.3.2.2. 正则表达式进阶

15.3.2.3. sed正则表达式

sed默认为贪婪模式,不支持懒惰模式

sed使用正则表达式时要注意shell特殊字符冲突问题,如\(exp\)

sed中不支持\d和反义中的\W等表达方式

15.3.3. sed命令基础

15.3.3.1. 命令格式

sed [-options] [commands] filename

command格式

[address-range] [pattern-to-match][sed-command]

例如:sed  -n  '5,8p' passwd

5,8 选址58

p 打印

passwd文件

15.3.3.2. 查找、删除、打印

15.3.3.2.1. 查找

查找passwd文件中以bash结尾的行打印出来

cp /etc/passwd /home/passwd

sed -n '/bash$/p' /home/passwd

正则表达式要用//包起来

-n 参数抑制sed默认输出,sed默认会输出每行,只输出匹配的行

15.3.3.2.2. 删除

删除/home/passwd文件中以test开头的行

sed   '/^test/d' /home/passwd # -i选项,直接修改源文件

15.3.3.2.3. 打印

打印38

sed  -n  '3,8p' /home/passwd

15.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

15.3.3.4. 插入

sed -i '5i\hello world' /home/passwd #5行上面插入

15.3.3.5. 追加

sed -i '5a\hello world' /home/passwd #5行后面追加一行

15.3.3.6. 更改

sed  -i  '5c\hello world' /home/passwd 5行修改为hello world

15.3.3.7. 转换

echo 'abcdef' | sed 'y/abcdef/ABCDEF/' 把小写转为大写

15.3.3.8. q打印

sed '5q' passwd 从第1行打印到第5

15.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/fstab6行后面

sed '6r /etc/issue' /etc/fstab

!:取反条件

sed -n '/^UUID/!p' /etc/fstab 打印匹配到行以外的行

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

替换标记:

g:行内全局替换

sed  's@^UUID@uuid@' /etc/fstab 替换行首UUIDuuid

sed '[email protected]@&er@' /etc/passwd  &后向引用

16. bash函数数组、字符串处理、centos7systemd

16.1. 函数

语法一:

function f_name{

函数体

}

语法二:

f_name(){

函数体

}

#!/bin/bash

function start(){

  echo "hello"

}

start

16.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

16.3. 数组

17. awk、网络安全、openssl

17.1. awk

格式化文本处理工具

基本用法:gawk [options] 'program' file...

program: pattern{action statement}

语句之间用分号分隔

print,printf

选项:

-F:指明输入时的字段分隔符:

-v var=value:自定义变量

tail -f /etc/fstab| awk '{print $2,$4}'  #打印第24个字段

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}'

17.2. 网络通信安全基础

17.3. openssl

18. dns

19. telnethttpdopensshopessl

19.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

19.2. openssl

OpenSSL:

三个组件:

openssl:多用途的命令行工具

libcrypto:加密解密库

libssl:ssl协议的实现

PKI:Public Key Infrastructure

CA:发证机构

RA:注册机构

CRL:吊销列表

证书存取库

建立私有CA:

OpenCA

opennssl

证书申请及签署步骤

1、生成申请请求

2、RA核验

3、CA签署

4、获取证书

19.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

[email protected]

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

[email protected]

可以不加密,不输入密码直接回车

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

19.3. 套接字及http基础知识

20. 网络管理

猜你喜欢

转载自www.cnblogs.com/hhooooaaannoo/p/8974710.html