LINUX运维知识图谱

linux运维需要掌握的知识

初级内容

linux基础入门

linux系统管理

linux服务和安全管理

http服务,lamp,lnmp

cache服务,memcached,varnish

DB服务,数据库mariaDB

linux集群cluster

LB Cluster :Nginx,LVS

HA Cluster :Keepalived

linux运维工具:ansible,自动化工具

linux监控工具:zabbix


中级内容

httpd服务:tomcat,基于tomcat构建负载均衡服务器

分布式存储系统:

mogileFS,ClusterFS

HA CLUSTER

LB CLUSTER

Mysql:高可用HAcluster,MHA,备份和恢复,mysql replication,Mysql读写分离

Nosql:redis,mongodb,HBase

运维工具:puppet

虚拟化:

linux操作系统原理:虚拟化技术

kvm虚拟化技术:xen虚拟化

虚拟化网络:SDN

Openstack云服务

Docker:容器技术

ELK Stack:ElasticSerach,Logstash日志处理系统

大数据:hadoop技术,并行存储和分析平台

系统优化

Python编程技术


计算机语言基础

硬件和接口

CPU,内存,输入设备,输出设备

机器语言:二进制语言,二进制数据

软件:

低级语言:汇编,主要用于写驱动

高级语言:


    系统级别:

    C语言,C++语言,系统级别的语言,主要写对性能要求较高的程序

    

    应用级别:

    java,python,ruby,主要写一些应用级别的软件,如ansible,puppet等


基础命令

ss -tnl

查看当前系统监听端口状态


ifconfig 或者ip addrlist

查看网卡地址


systemctl disable firewalld.service

systemctl stop firewalld.service

关闭防火墙(centos7以上)


man commond 查看命令的帮助文档

man 数字 commond查看指定页面的帮助文档

man查看的文档中可以使用/查询字来查找所需要的文字


pwd 显示当前目录


cd 切换到指定目录


ls

ls -a 显示所有文件,包含隐藏的文件

ls -l 长格式显示,显示文件的详细信息


文件属性

-rw-r--r--

第一个-rw表示所属用户的权限

第二个r--表示所属用户组的权限

第三个r--表示其他用户的权限


linux目录结构

bin:所有用户可用的基本命令的目录

sbin:系统管理员可用的命令

boot:引导加载器必须用到的各静态文件,如内核,init,grub等

dev:设备文件

etc:程序的配置文件目录

home:用户的家目录

lib:系统启动或者根文件系统上的应用程序提供的共享库

lib64:64系统上的共享库

srv:为当前主机提供服务的数据

tmp:程序运行产生的临时文件

usr:全局共享的只读数据路径

usr/local:安装三方应用目录

var:系统发生变化的数据存储目录

proc:基于内存的,关机就没有来,内核和进程存储信息

sys:虚拟文件系统


BASH的基础

命令类型:

外部命令:显示为命令的文件路径

内部命令:builtin

命令别名:

可以用alias来定义,但是只针对当前的tty,如果想让这个alias一直有效,需要写入配置文件

which 命令:查看命令的存储路径

whereis 命令:查看命令位置

who 查找当前谁在登录

w 查找当前谁在线

history 看命令执行历史

esc键盘+.可以直接用上一个命令的最后一个参数

比如

我执行ls/etc/sysconfig/network-scripts/ifcfg-eth0

然后我想cat查看内容

我只需要输入cat,然后用快捷键esc和点,直接可以出来/etc/sysconfig/network-scripts/ifcfg-eth0


mkdir 创建命令

-p 自动按需要创建父目录

-v 显示过程


rmdir 删除命令(禁止使用)


问题:如何创建/tmp/x /tmp/b等

答案:mkdir -p /tmp/{x,b}


$? 可以查看命令的执行结果0和其他数值

echo $? 显示命令执行状态返回值


$() 小括号中是命令,这个是引用命令的执行结果

mkdir $(date +%H-%M-%S)创建时间为名字的文件夹


bash的强引用和弱引用

强引用:‘’,内部的任何字符都不变

弱引用:“”,内部的变量用值来替换

命令引用:$()


bash的快捷键

ctrl+a 快速来到命令的头

ctrl+l 清理屏幕 等同于clear


文本查看命令

cat

more

tail


cp复制

如果复制的文件不存在,那么会把源文件复制,填充到后来的文件上,也就是不存在就创建

cp -r 递归复制


mv剪切

rm删除


bash的基础特性之通配符

文件名匹配

匹配模式:元字符

*:指的是匹配任何字符

例子:pa* ,那么pa ,paa pass都匹配


?:指的是匹配单个字符

例子:Pa? ,那么pab,pac这样的匹配


[]范围内匹配单个字符

[a-z]匹配所有单词

[0-9]匹配所有数字


几种特殊匹配

[[:upper:]]所有大写字母

[[:lower:]]所有小写字母


IO重定向

程序的数据流三种

1、输入的数据流:<--标准输入stdin

2、输出的数据流:-->标准输出stdout

3,错误输出:-->stderr

把命令的结果执行输入到一个文件


输入


用户管理

useradd 添加用户

groupadd 添加用户组

userdel 删除用户

groupdel 删除组

usermod 修改用户属性


chmod 修改文件权限

r=4

w=2

x=1

chattr 添加特殊属性i,不能删除文件

lattr -i 删除特殊属性


bash的变量

变量不能以数字开头,可以是字母开头,包含数字,字母和下划线


bash的变量类型

本地变量:作用范围只在当前shell内

环境变量:作用范围只在当前shell和其子进程

局部变量:仅限某段代码内

bash定义了很多的环境变量,通常全大写写的

PATH,HISTSIZE,SHELL,HOME,UID,PWDDE等

查看这些环境变量的命令:

export,declare -x,printenv,env等


与运算 &&

1 && 1 = 1

1 && 0 = 0

短路运算,两个里面只要有一个不是真,那么结果就不是真的


或运算 ||

1 || 1 = 1

1 || 0 = 0

短路运算,两个中有一个真的就是真的


非运算 !

!1 = 0

!0 = 1

取反义


脚本举例子

vi a.sh

#!/bin/bash

#作用是显示/etc目录下的所有P开头的文件或者目录本身

ls /etc/P*

保存退出

sh a.sh执行脚本就可以了


LINUX文字处理三板斧

grep:文本过滤工具

sed:文本编辑工具

awk:文本格式化显示工具


正则表达式,意思就是一类特殊字符不是本身的意思,而是特殊含义

1、基本正则表达式

2、扩展正则表达式


举例子:

grep "UUID" /etc/fstab

grep -i 忽略大小写

grep -A 2 显示匹配的结果后的两行

grep -B 2 显示匹配的结果前的两行

[1]$ grep空行


cut命令

-d 指定分隔符,如: 空格等

-f 加数字,挑来需要的字段

cut -d: -f 2 /etc/passwd

找出来以:分割的文件中的第二个字段


sort排序命令

sort -n 排序

sort -r 逆向排序

sort -t 指定分隔符如:


uniq

uniq -c 对每行重复的次数进行计数

uniq -u 仅仅显示未重复的行

uniq -d 显示重复过的行


diff比较命令


patch 文件打补丁


VIM编辑器

vim a.txt

i 插入,进入编辑模式

o 面加一行,进入编辑模式

:/wenzi 查找wenzi

:wq 保存退出


dd 删除一行

d$ 删除当前字符到结尾的部分

p 粘贴,粘贴剪切板内容


替换

:%s/a/b/r 全文中的a替换成b

:se nu 设置行号


find查找命令


find -name 按照名字查找

find -iname 不区分大小写

find -mtime

find -ctime

find -atime

根据修改时间,创建时间等来查找


linux系统上的特殊权限

suid

sgid

sticky

安全上下文:

一个进程是否可以访问某个文件,需要看发起这个进程的用户是否是这个文件的属主,如果不是,看属组,如果还是不是,看other


磁盘分区学习


磁盘分区两种模式MBR和GPT

MBR模式

分为三部分

1、bootloader,446字节,引导启动程序

2、分区表,64字节,最多可以有4个分区

4个主分区

3个主分区1个扩展

2个主分区2个扩展

1个主分区3个扩展

扩展上可以分若干的逻辑分区

fdisk -l 查看分区表

fdisk -l /dev/sda


mount 查看系统当前挂在的所有盘


free 查看当前内存使用情况


df 查看空间

df -h 比较好看的方式展现空间


bash的脚本编程

脚本文件格式,要按照标准的格式来,方便自己,方便他人

第一行:声明#!/bin/bash

第二行:注释信息#写上脚本的作用

第三行:代码规范

缩进

适当添加空白行,分割,看着更直观

合适的位置做好注释


脚本是所有脚本语言中最简单的


linux Raid

raid0 条带卷 两个盘作为一个阵列

raid1 镜像卷 两个盘作为一个阵列,内容一样

raid5,最少三块硬盘

第一个盘存a

第二个盘存b

第三个盘存ab的运算校验码


raid10 ,读写性能提升,空间为总空间的一半,两组镜像,每组最多坏一个


系统软件raid实现

mdadm命令

支持raid0 raid1 raid4,5,6,10

模式:

创建 -C

装配 -A

监控 -F

管理 -f -r -a


在pv的基础上,多个pv合并成vg,逻辑卷组,然后创建成lv逻辑卷,格式化后可以用


dd命令

dd if=/path/src of=/path/dest

bs=块大小

count=复制多少个bs

可以用于磁盘拷贝,直接把sda盘拷贝到sdb盘

dd if=/dev/sda of=/dev/sdb

备份mbr(因为mbr是前512字节,备份一个块,这样就把mbr备份了)

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

硬盘前512字节是mbr记录,谨慎操作

因为mbr记录的是磁盘的分区表,如果丢失,磁盘就不能用了

mbr=512字节

其中bootloader=446字节

剩余分区表=64字节


两个特殊设备

/dev/null  数据黑洞,可以放入无限数据

/dev/zero  吐零机器,可以把o字节吐入任何位置


LINUX压缩,解压缩工具


压缩比

目的:时间换空间

tar命令

tar -cvf 创建归档

tar -xvf 解压归档

tar -t    直接查看内容列表,不解压

命令使用例子:

tar -cvf a.tar 需要归档的目录

tar -t a.tar   可以直接查看归档的内容


如果创建归档的同时还压缩

有两种压缩工具

-z 是用gzip压缩

-j 是用bzip2压缩

tar -jcvf 使用bzip2进行归档压缩

tar -jxvf 使用bzip2进行解压缩归档


Bash之交互脚本

交互的意思是通过用户输入的数据,然后导入脚本内进行脚本处理


1、脚本参数


2、用户交互:通过键盘来输入,来完成变量赋值操作

read [options] [name]


#!/bin/bash

#test

#auther:dengken

#destriping:test


read -p "please input a numuber:" name

echo "your name is $name"


脚本2

#!/bin/bash



#读取用户name名字

read -p "please input you name:" name

#如果用户没有输入,提示用户必须输入

[ -z "$name" ] && "you must input a username" && exit 2

#读取用户输入的密码

read -p "enter you password:" password

#如果不输入,就用password作为密码

[ -z "$password" ] && password="password"

#如果用户名存在,name提示名字存在

if id $name &> /dev/null;then

echo "you name is exists"

else

#如果不存在,就添加用户

useradd $name

#把密码变量给用户设置为密码

echo "$password" | passwd --stdin $name &>/dev/null

#输出结果,提示添加用户成功了

echo "add user $name finished"

fi


计划任务

未来的某一个时间点之行一次某个任务:at

周期性的计划执行任务:crontab


atl now+1min 一分钟后执行什么命令

系统会出来一个空白行,等待输入内容

比如ls

一分钟后执行ls命令


at -l 查看现在在at中的队列

at now+X

x可以是min分钟,hours小时,days天


crontab

确保crond进程(守护进程)是否存在

systemctl status crond.service

查看进程是否存在,如果是存在的,才说明计划任务在进行


cron任务有两类别

1、系统cron任务:/etc/crontab

2、用户自定义的cron任务:可以用crontab来编辑

语法:


Example of job definition:


.---------------- minute (0 - 59)


|  .------------- hour (0 - 23)


|  |  .---------- day of month (1 - 31)


|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...


|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,


sat


|  |  |  |  |


       * user-name  command to be executed






          • 对应分,时,日,月,周
            分,0-59
            时,0-23
            日,1-31
            月,1-12
            周,0-6,sunday是0或者7
            分时日月和周不要同时使用
            user-name,运行任务的用户
            command to be executed 需要执行的命令


3 每小时的第3分钟执行,比如1点3分

3 4 * 每天的4点3分执行

5 6 7 * 每月的7号的6点5分执行

/3 * 每三分钟执行一次


crontab -e 编辑任务

crontab -l 列出任务

crontab -r 移除所有任务


LINUX程序包管理

API:application program interface

ABI:application binary inerface

unix-like:ELF

windows:exe,msi

库级别的虚拟化

linux:wine

wins:cywin

系统级别开发

C  C++ :httpd,vsftpd,nginx

新近出的go语言

应用级别开发

java python perl ruby php等

比如

java写的hadoop,hbase

python写的openstack

perl

ruby

php:网页程序等


C/C++程序格式

源代码:文本格式的程序源代码

二进制格式:二进制格式的程序代码

流程是:

源代码---编译器编译---二进制代码---安装

java,python等程序格式

源代码:能在虚拟机内运行的程序格式

二进制格式:


构建工具:

C C++:make编译构建

java:maven编译构建


linux系统软件包系统

debin系列的:apt-get

redhat系列的:rpm


获取程序包的途径

1,优先选择cdrom光盘镜像或者官方服务器

http://mirror.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com


2,项目的官方站点

比如apache官网,nginx官网等


3,第三方组织

EPEL:社区组织维护的开源项目软件包

网站:http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net


rpm命令适用语法

rpm -i install安装

rpm -U update升级

rpm -e erase删除卸载

rpm -q querry查询

rpm -V verify校验

rpm --builddb数据库维护


rpm -ivh 显示安装过程

(-v显示过程 -h显示进度)

rpm -ivh --test 测试安装,不是真正安装,显示是否能安装成功


rpm -ivh --nodeps 忽略依赖关系的安装


YUM程序管理

yum运行原理

当用户yum install 软件时,yum先去查找本地yum配置文件,查看yum源,根据配置文件中指明的地址,去查找原件,来安装


yum的文件服务器可以是以下几个

ftp,http,nfs,本地等


rpm -qc yum 查看yum的配置文件在哪里


定义自己的yum仓库

yum的配置文件在/etc/yum.conf

yum的其他配置文件可以放在/etc/yum.repos/*.conf

可以在这个conf文件中编辑,定义自己的需要的yum

样板:

[os]

#yum源地址

baseurl=http://mirrors.tencentyun.com/centos/$releasever/os/$basearch/


#名字,可以自定义

name=Qcloud centos os - $basearch


#要不要进行包校验,1是需要校验,0是不校验,需要校验的话,就需要gpgkey

gpgcheck=1


#gpgkey配置

gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7


#是否启用,1是启用,0是不用

enabled=1


yum命令使用


yum install 安装

yum repolist 列举repo可用的源

yum list app  列举软件

yum remove 卸载软件

yum install a.rpm 安装本地包,可以用yum来安装rpm包,会自动寻找依赖关系,安装软件


编译安装软件

./configure

(1)通过选项传递参数,指定安装路径,模块等,然后生成makefile配置文件

(2)查找依赖的关系

make

根据makefilie来构建

make install

安装


需要注意,编译安装,需要确定系统中是否有相关编译环境

1、开发工具:make,gcc等

2、开发环境:库文件如glibc

可以通过安装Development Tools ServerPlatformDevelopment来解决

yum groupinstall Development Tools

yum groupinstall ServerPlatformDevelopment


./configure 根据参数编

make && make install


安装后配置

导出二进制程序目录到PATH环境变量中

进入/etc/profile.d/xxx.sh

输入内容

export PATH=/软件安装路径/bin:$PATH

目的是为了让程序的bin文件可以直接用命令来调用,不需要在去输入绝对路径了


BASH脚本进阶

过程式编程语言执行流程

1、顺序执行

2、选择执行

3、循环执行


选择执行中有

1,&& 和 ||

2,if语句

3,case语句

单if语句

if 条件成立;then

执行命令

fi

双if语句

if 条件成立;then

执行命令

else

条件不成立

fi

多分支if语句

if conditon1;then

条件1为真时候

elif condition2;then

条件2为真时候

elif condition3;then

条件3为真时候

else

所有条件都不对时候

fi

结束


脚本练习

(1)传递一个参数给脚本,此参数是用户名

(2)根据其id判断类型

0是管理员

1-999是系统用户

1000+登录用户


cat << EOF

disk) show disk info

mem) show mem info

cpu) show cpu info

*)QUIT

EOF

read -p "you choice:" option

if [ "option" == 'disk' ]

then

fdisk -l /dev/sd[a-z]

fi


BASH进阶

for循环

while循环

until循环


for循环有两种方式

1、遍历列表

for 变量 in A B C

脚本举例

#!/bin/bash


for username in user21 user22 user23;do

useradd $username

done

作用是遍历suer21,22,23用户,然后赋值给username变量,创建用户


这个user21的列表不可能一一列举出来,所有就需要有方法来list这个列表

比如 seq 1 100

就是从1到100


比如去求1-100之间所有正整数的和

#!/bin/bash


for username in user21 user22 user23;do

useradd $username

done

echo $sum

结果输出为5050


while循环

while condition;do

循环体

declare -i sum=0

declare -i i=1

while [ $i -le 100 ];do

sum=$[$sum+$i]

let i++

done

while和for比的优势是,while每次赋值一个变量,省内存空间


until

当条件为真时循环


linux文本编辑三板斧之SED

grep文本过滤查找工具

sed文本编辑工具

awk文本格式化显示工具


sed [option] 脚本 文件

常用选项

-n 不输出模式空间中的内容到屏幕上

-e script 多点编辑

-f /path/to/sed_script_file每行一个编辑命令

-r 支持正则表达式


地址定界(选择范围)

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

(2)单地址:

#指定行

/pattern/被匹配的每一行

(3)地址范围:

#,# 从那一行到那一行

#,+# 从那一行到+多少行


命令

d命令,删除

sed '1,5d' file #删除第一行到第五行

sed '/^UUID/d' /etc/fstab

#删除匹配UUID开头的行

sed '3d' file

#删除文件第三行


a命令,在匹配的内容行后追加文本

a \text 追加text到指定位置

i命令,在匹配的内容前追加文本

i \text

举例子

sed '3i \testtest' ldk.sh


c命令把匹配的内容换成指定的文本


w命令,把内容重定向到一个指定文件中

比如


n命令,把匹配的内容显示出来


CCNA网络基础

计算机网络基础:TCP/IP协议

协议的意思是:双方学习了同一种规范,然后遵照这种规范,来进行,也可以称为标准规范

TCP/IP协议模型:四层或者五层

OSI协议模式:七层


TCP/IP可以大体分为2部分

上面2层是资源子网,关注数据组织方式

下面2层是通信子网,关注数据传输方式


1、以太网-传输数据协议csma/cd载波侦听和多路复用

就是发数据的时候先监控下线路情况,有空闲在发

2、传输数据方式令牌环token ring

谁抢到谁来


ip地址相当于人名,好记录

mac地址相当于地址,有唯一性

网络相当于发快递

A用户要给B用户发送快递,收件人有名字和mac地址,原则上就能找到


ipv4:32位

ipv6:128位,有无数个ip地址


ip地址分类(网络号+主机号)

A类,B类,C类,D类

8位:8位:8位:8位


A类:

(127个网络数量)

第一段:网络号

00000000

第一个0不变,后7位变化,变化范围为00000000-1111111,也就是1-127

后三段:主机号

00000000:00000000:00000000

每个网络中可以容纳的主机数来那个是2的24次方-全0-全1

2*24次方-2台主机

子网掩码

255.0.0.0,子网掩码的作用是和ip地址进行按位与运算,得到网络地址

主要作用是确定主机的网络地址

A类网络举例

10.0.0.1 ip地址

255.0.0.0/8 子网掩码

因为ip地址都是需要从icann购买地址块才能进行互联网通信,但是预留了一段ip地址,供内部私人测试使用

10.0.0.0/255.0.0.0


B类:

前两段:网络号

10 00000:10 111111

固定10前两位不变,后面6位变化,可用网络128-191

网络数:2的14次方

掩码:255.255.0.0/16

私有地址:172.16.0.0-172.31.0.0


C类:

前三段:网络号

110 00000 110 11111

固定前三位不变,后面5位变化

网络数:2的21次方

192-223

每个网络中主机数2的8次方-2

子网掩码:255.255.255.0/24


D类:组播地址,也就是前四位不变,后四位变,224-239

E类:科研预留,240-255


路由器

router

路由器通过路由表,把不同网络的主机联系起来,转发数据包

路由表有两类:

1、静态路由

2、动态学习,协议有rip2,OSPF协议


OSI分层模型

application layer 应用层

presentation layer 表示层

session layer 会话层

transport layer 传输层

network layer 网络层

data link layer 数据链路层

physical layer 物理层


TCPIP协议模型


applicaton layer 应用层

transport layer 传输层

internet layer 互联网层

physical layer 物理层


LINUX下的网络配置

1、静态指定ip地址

命令:

ifcfg家族

ifconfig 查看,配置

route 路由

netstat 查看网络状态和统计数据


iproute家族

ip addr 地址和掩码

ip link 借口

ip route 路由

ss 状态和统计数据


CentOS7以后出来的新工具

nm工具

nmcli:命令行工具

DNS服务器配置

1、动态获取

2、静态指定/etc/resolv.conf

nameserver 183.60.83.19

主机名字

如果想让本地通信用主机名字来通信,需要指定主机名

可以编辑配置文件/etc/sysconfig/network

CentOS7中可以用命令hostnamectl来编辑


2、动态方式获取

DHCP 服务器


LINUX网络进阶

ifconfig配置网络

ifconfig eth1 192.168.1.100/24 up

配置eth1网卡地址为192.168.1.100,子网掩码是255.255.255.0

iconfig eth1 192.168.1.100 netmask 255.255.255.0

ifconfig配置是立即生效,不要在ssh上直接配置,很容易就断开连接了


ip route添加路由

路由三种方式

1、对方是主机

2、对方是网络

3、对方是任何网络0.0.0.0

route -n

route add -net|-host 目标地址 gw 网关


netstat网络命令

netstat -nlpt 数字的形式显示连接

-t tcp协议相关的连接,有状态信息

-u udp协议相关

-w socket连接

-l 处理listen监听状态的连接

netstat -tl 显示tcp协议中,listen状态的连接

netstat -tnl

显示tcp协议中,listen状态的连接,并且以数字形式显示

-p 显示进程pid

用户kill杀掉进程用


我最常用的是

netstat -nlpt

数字形式显示,listen状态,pid显示,tcp协议的连接


dig dns测试解析


ip命令 CETNOS7以上

ip addr 查看网络地址

ip addr add 192.168.1.1/24 dev eth1

给eth1网卡设置地址和子网掩码


ss命令

ss -t tcp协议

ss -u udp协议

-l 监听的连接

-p 进程pid

-n 数字显示

-a 所有连接


tcp连接的几种状态

listen:监听

established:连接

fin_wait1

fin_wait2

syn_sent

syn_recv

closed


ip地址的配置文件修改后永久生效

ifcfg-eth0

device:设备名称

onboot:是否启动

uuid:唯一标识

ipv6:是否启动ipv6

ipaddr:配置的ip地址

gateway:网关

bootproto:static静态

dhcp动态

netmask:掩码

修改后需要生效,需要重启网络服务

centos6:

service network restat

centos7:

systemctl restart network.service


LINUX进程管理

进程优先级

0-139:

1-99:实时优先级

100-139:静态优先级

数字越小,优先级越高

Nice值:

可以通过调整nice数来调整优先级


进程类型:

守护进程:在系统引导中启动的进程,跟终端无关

前台进程:跟终端有关系,通过终端启动的进程,也可以把这个进程转化为守护进程,后台运行


进程状态:

运行:running

就绪:ready

睡眠状态:

可中断:interruptable

不可中断:uniterruptable

停止:stopped

僵死:zombie


进程管理常用命令

pstree 查看进程树

ps -aux

-a 查看所有与终端有关进程

-x 所有与终端无关进程

-u 以用户为中心的状态显示


状态缩写

R:running

S:interrupted sleeping

D:uninterrupted sleeping

T:stopped

Z:zombie

+:前台进程

l:多线程进程

N:低优先级进程

<:高优先级进程

s:session leader


ps -efH

-e 所有进程

-f 完整格式显示

-H 显示进程树


top 系统实时状态

uptime 系统负载和运行时间

vmstat 虚拟内存

free 内存


kill 杀掉进程

kill -l 可以查看可用的信号

kill -1 pid号码:可以重读配置文件,相当与reload

kill -2 pid号码:相当于ctrl+c

kill -9 pid号码:杀死进程

kill -15 pid号码:杀死进程,但是先通知一下

建议用15号信号,缓冲杀死


killall命令 根据进程名字来杀死进程

killall -l 查看信号


job命令

前台作业:通过终端启动,启动后占用界面

后台作业:可以通过终端启动,但启动后转入后台


traceroute 追踪网关和路由


ftp命令

文件传输协议,ftp服务的命令行工具


lftp命令

wget命令,非交互网络下载

wget -b 后台下载

wget -q 不显示进度

wget http://网址


LINUX的启动流程(腾讯面试题目)

linux系统的组成部分:内核+根文件系统

内核:进程管理、内存管理


centos启动流程

1、post开机自检

cmos自检,也就是bios自检

2、boot引导过程

bios中启动顺序,可以是硬盘,光盘,u盘

3、mbr或者grub

grub第一阶段:bootlader加载

grub第二阶段:系统驱动

grub第三阶段:/boot/grub分区等


4、内核

自身初始化

探测可识别的硬件设备

加载驱动

只读方式挂在根文件系统

运行init程序

centos7是systemd

/etc/systemd/system里面

centos6是0inittab


系统启动流程

post-bios-bootloader(mbr)-kernal(ramdisk)-rootfs(readonly)---init程序


CENTOS6

用户空间启动流程

/sbin/init读取/etc/inittab文件

设置默认运行级别

运行系统初始化脚本,完成初始化

关闭对应级别下需要停止的服务,需要开启的服务

设置登录终端

启动


CENTOS7

用户空间启动流程

启动进程在/usr/lib/systemd/*

systemctl 启动|重启|停止 服务


CENTOS7开机启动脚本如何操作

第一种

1、将脚本添加X执行权限,移动到/etc/rc.d/init.d/目录下面

2、设置开机启动

$ chkconfig --add autostart.sh

$ chkconfig autostart.sh on


第二种

将脚本写入rc.local文件中

给rc.local加入X执行权限


GRUB启动

grub的命令行接口在开机按下e键

手动在grub命令行输入

grub> root (hd#,#)

grub> vmlinz-XXXXXXXX

grub> initrd ramdisk

grub> boot


极端情况

如果root密码忘记,无法进入系统

grub引导时候,输入e,选择kernel一行,输入e,后面加入1,在启动

可以进入系统修改密码


安装grub

(1)grub-install命令

grub-insall --root-directory=ROOT

(2)grub

grub> root (hd#,#)

grub> setup


内核

内核组成部分:kernel,kernel object,ramdisk

kernel:uanme

kernel obj:lsmod,modinfo,modprobe,insmod,rmmod,depmod

ramdisk:mkinitrd,dracut


screen命令

screen 进入

screen -r id 进入后台的screen

ctrl+a,d 拆除screen


操作系统安装过程

安装程序:anaconda

bootloader加载内核,加载anaconda


anaconda的工作流程

安装前配置阶段

语言

键盘

目标存储:磁盘

主机名

网络接口

时区

管理员密码

分区和mbr位置

创建用户

需要安装的软件包

安装阶段

创建分区,格式化

安装的程序包到指定位置

安装bootloader

首次启动


CENTOS7新特性

systemd新特性:

系统引导时候实现服务并行启动

按需要启动进程

系统状态快照

基于依赖关系定制的服务控制逻辑


使用:

systemctl start name.service

systemctl stop name.service


设置开机启动

systemctl enable name.service

systemctl disable name.service


SELINUX

secure Enhanced Linux

工作于linux内核中

为每个文件定义了安全标签,也为进程定义了安全标签,按照规则来确定那种域可以访问那些文件


more /etc/selinux/config

配置中

SELINUX=disabled

禁止selinux启动


linux文件处理之awk  


awk

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

-v var=value 自定义变量


awk -F ":" '{print $2,$4} filename

注意:

逗号是变量分隔符,输出时候是空格隔开的

-F指定读取文件的分隔符


awk '{print NF} filename

NF字段数量

NR行数


printf命令

格式化显示

printf formart item1,item2

%c:显示字符的ascii码

%d:显示十进制整数


awk -F : '$3>=1000 {print $1,$3}'

/etc/passwd


LINUX安全和服务

openssl(ssl/tls)

openssh

bind(dns)

web(http)

file server:ftp,samba,ftp

dhcp,pxe

iptables


SSL:secure socket layer

安全的目标是

保密性:confidentiality

完整性:integrity

可用性:availability

攻击类型:

攻击保密:窃听,分析

攻击完整:更改,伪装,重放,否认

攻击可用:ddos


Openssl

有三部分构成

1、libencrypt库

2、libssl库

3、openssl多用途命令行工具


加密算法和协议

对称算法

加密和解密使用一个密钥

DES:64位算法

AES:128位,到384位

blowfish

twofish

IDEA

缺点是:

密钥过多,分发困难


公钥算法

公钥:从私钥中产生,公开给所有人

私钥,通过工具创建,使用者自己留存,私密的

特点:必须使用对应的公钥私钥解密

RSA算法

DSA算法


单向加密

md5

sha1

sha512当前最高


PKI public key infrastructure

公钥基础设施

签证机构:CA

注册机构:RA

证书吊销:CRL

证书存取库:


SSL加密的原理

第一步:

1客户端say hello

2客户端生成一个随机数,用加密算法生成一个会话密钥(aes,rsa都可以)

3发送给服务端

4服务器收到之后,生成一个随即受,用加密算法生成一个会话密钥,加入服务器证书

5发送给客户端

6客户端验证服务器发来的证书,主要确认公钥的发证机构,证书完整性,证书持有者,有效期,吊销与否等

7确定无误

8发送一个随机数给服务器,然后双方开始握手

9握手结束,开始通信


加密

openssl enc -e -des3 -a -salt -in fstab -out fstab.clphertext

解密

openssl enc -d -des3 -a -salt -out fstab -in fstab.clphertext


openssl genrsa 512

生成一个512位的密钥,privatekey


openssl rsa -in 私钥文件 -pubout

提取出公钥


DNS服务器

安装:

bind

bind-util 工具

bind-lib 库文件

配置文件:

/etc/named.conf 主配置文件

/var/named/zonefile 解析库文件


dig工具,dns测试用

dig -t A www.baidu.com

跟踪解析过程

dig -x ip

反向解析测试


nslookup命令

nslookup>

server ip:以指定的ip为dns服务器查询

set q=RR_TYPE 要查询的记录类型

name 要查询的域名


rndc命令

named服务远程控制命令

rndc status 状态

rndc flush 刷新


如何配置dns解析

1、编辑/etc/named.conf

2、include "/etc/named.rfc1912.zones";配置文件包含了这个zone文件

3、编辑这个zone文件,加入需要解析域名如www.ldk.com这个区域的配置

4、加入ldk.com这块的配置

5、编辑解析库文件

6、检查配置文件named-checkconf

named-checkconf -h

7、rndc status和rndc reload重新加载配置文件一下

8、dig测试配置


配置主从dns服务器

1、在从服务器上安装bind相关包

2、修改配置文件/etc/named.rfc1912.zones,类型type写slave

3、创建zone文件

4、重启服务


HTTP服务器

端口的划分

0-1023

永久分配给固定的应用使用

1024-41951

注册端口,分配给程序使用,如tcp3306

41952+

随机端口或者私有端口,范围在ip_local_port_range中定义


通信原理

1、三次握手,建立安全通信,开始通信

2、结束机制

closed关闭

listen监听

syn_sent客户端发送请求

syn_recv服务器收到请求

established,保持连接

fin_wait1客户端断开请求

close_wait服务器接收返回请求

fin_wait2客户端断开请求收到

last_ack最后确认

timewait等待

closed断开成功


HTTP hyper test mark  language 超文本标记语言

超文本文档

html文件,内部可以有css,js等内容


http1.0版本协议

mime:

method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

http1.1版本协议

增加了缓存功能

http2.0

http2.4 目前主流协议


http请求:http request

http响应:http response


web资源:web resource

静态资源:不需要额外处理,直接展现的

图片,音乐,视频等

动态资源:需要服务器做出处理

php,jsp等程序语言


一次完整的http请求,服务器的处理过程

1、客户端发送请求,服务器接收或者拒绝

2、服务器选择响应或者拒绝

3、处理请求,看客户端请求的资源或者请求方法

4、获取请求的资源,准备返回客户端

5、构建响应报文

6、发送响应报文

7、记录日志


目前解决并发多的最好的模型

启动M多个进程,每个进程启动N多个线程

那么可以处理的用户请求就是MN个请求


APACHE服务

ASF:apahce software foundation apahce软件组织

著名的apahce,tomcat,hadoop,zoopkeeper等软件都是这个组织的


httpd的特性

高度模块化 core+modules

DSO 动态加载模块

mpm 多路处理模块

prefork 多进程模式

worker 多进程线程模式

event 事件驱动,有个进程来接收请求,然后分配给各个线程来处理


如何安装httpd

yum install httpd

会安装如下的几个依赖关系的包


Downloading packages:

(1/5): apr-util-1.5.2-6.el7.x86_64.rpm                      |  92 kB  00:00:00

(2/5): apr-1.4.8-5.el7.x86_64.rpm                           | 103 kB  00:00:00

(3/5): httpd-tools-2.4.6-93.el7.centos.x86_64.rpm           |  92 kB  00:00:00

(4/5): mailcap-2.1.41-2.el7.noarch.rpm                      |  31 kB  00:00:00

(5/5): httpd-2.4.6-93.el7.centos.x86_64.rpm                 | 2.7 MB  00:00:00


配置文件在/etc/httpd/conf/httpd.conf

网站目录在/var/www/html/index.html


apache常见配置

1、修改监听ip和port

2、ssl通信

3、持久连接 KeepAlived off|on 设置连接的持续时间或者是否持续保持,默认off

4、load modules 加载模块

5、ServerName 定义名字

6、DocumentRoot 网页目录

7、目录权限控制

8、url映射路径权限控制

9、访问控制

10、设置默认字符集AddDefaultCharset UTF-8

11、日志设定

errorlog logs/error_log错误日志

loglevel warn 日志级别,warn

logFormat 日志格式

customlog 访问日志


basic认证配置

定义访问某个目录需要用户名和密码,用户名和密码用htpasswd生成


虚拟主机配置

可以在一个机器上定义多个域名网站


PV页面浏览量

UV用户浏览量


常用状态码

200 成功

301 本地url不存在,已经永久重定向

302 本地url不存在,临时重定向了

401 需要用户名密码验证

403 禁止

404 not found

500 服务器错误

502 bad gateway


ab 压力测试


LAMP架构

前端httpd

apache,nginx,lighted

中间解析

php:fpm

jsp:tomcat

python:Django

ruby:ror

数据库

关系型数据库:mysql-MariaDB,postgreSQL

非关系型数据库:Redis,MongoDB,HBase

关系型老大:mysql

nosql老大:mongoDB


PHP,脚本编程语言,主要用户web页面嵌入式开发,动态


php运行方式

1、把php编译成httpd的一个module,来加入httpd

安装php后,/usr/lib64/httpd/modules/lib.so

2、单独作为一个程序运行php-fpm

如果用第一种module模式

需要安装:httpd,php,php-mysql mariadb-server

如果是安装第二种fpm模式

需要安装:httpd,php-fpm,php-mysql,mariaDB-server


数据库操作

mariaDB===mysql

client:mysql,mysqldump,mysqladmin

server:mysqld,mysqld_safe,mysql_multi


命令:

mysql -uroot -p -hip地址

连接数据库,输入密码就进入了


客户端命令:

mysql> help

获得的就是客户端命令

服务端命令:

show databases;显示当前主机有多少数据库

create 创建数据库

drop 删除数据库

insert 在表中插入数据

delete 在表中删除数据

show tables from mydb;在mydb数据库显示有多少表


select * from table.dateabse; 显示某个数据库某个表中的全部数据


select Host,User,Passwrod From User;从user表中查看用户名密码


phpadmin 数据库图形化管理工具,可以通过网页打开数据库控制

上一篇:Maven POM 浅析


下一篇:Java设计模式之《适配器模式》及应用场景