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光盘镜像或者官方服务器
2,项目的官方站点
比如apache官网,nginx官网等
3,第三方组织
EPEL:社区组织维护的开源项目软件包
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 数据库图形化管理工具,可以通过网页打开数据库控制