linux 学习笔记 我 整理了好久

2023-05-16

printenv  查看环境
hash   查看缓存命令
clock /hwclock/date 查看时间
help  + command  获得帮助  command  --help   / man command
用户命令(/bin,/usr/bin,/usr/local/bin)
管理命令(/sbin;/usr/sbin/;/usr/local/sbin)
<>:必选
[]:可选
… 可以出现多个
|:多选一
{}:分组 没有特殊意义
向后翻一屏:space
向前翻一屏: b
向后翻一行:enter
向前翻一行:k
查找:
/keyword :向后
n:下一个
N:前一个
?keyword :向前
n:下一个
N:前一个
文档 /usr/share/doc
type  查看是内部命令还是外部命令
/boot   系统启动相关文件
/dev  设备文件
/ect  配置文件
/home  用户的家目录
/root  管理员的家目录
/lib  库文件
静态库 .a
动态库 .dll .so
/lib/modules内核 模块文件
/media挂载点目录 移动设备
/mnt  挂载点目录 额外的临时的文件系统
/misc 杂项
/opt  可选目录,第三方程序安装目录
/proc 伪文件系统,内核映射文件
/sys 伪文件系统,跟硬件设备相关的属性映射文件
/tmp :临时文件
/var :可变化的文件
/bin 可执行文件,用户命令
/sbin 管理命令
/usr   全局共享只读文件
 
目录管理
ls     cd    pwd
mkdir  创建空目录
-p 递归创建
-v 详细信息
mkdir /tmp/{x,m,y} 创建多个目录
{a,d}_{b.c}  创建a_b,a_c,d_b,d_c
rm   rmdir
stat 显示文件的信息
touch  创建文件 ,主要是改时间戳
nano 编辑软件
复制和移动文件
cp  src (源) dest(目标)
mv 
install   和mv 和cp 类似
file  查看文件是目录还是文件
 
tree 查看树目录
获取linux 当前最新的内核版本号 www.kernel.org
查看文本
cat tac more less head tail
tail – f  查看文件尾部,不退出,等待显示后续追加到这个文件的新内容  可以监控日志
文本处理:
cut/join/sed
cut
-d   指定字段分隔符,默认是空格
-f  指定要显示的字段
-f 1,3
-f 1-3
文本排序:  sort    uniq
文本统计: wc
字符处理命令:tr   -- 转换或删除字符
history  查看历史
-c  清空历史
环境变量
PATH : 命令搜索路径
HISTSIZE :命令历史缓冲区大小
命令历史的使用技巧:
!n    执行命令历史中的第n条命令
!-n  执行命令历史中的倒数第n条命令
!!:执行上一条命令
!string :执行命令历史中最近一个以指定字符串开头的命令
alias   cls = clear  给命令起别名
unalias 取消别名
bash 支持的引号:
`` 命令替换
“”弱引用,可以实现变量替换
‘’强引用,不完成变量替换
文件名通配:globbing
 
/etc/passwd     whatis passwd     man  5 passwd
account:登录名
password:密码
UID
GID:基本组id
comment 注释
HOME DIR :家目录
SHELL : 用户的默认shell
/etc/shadow
account:登录名
encrypted password :加密的密码
 
 
管理员:0
普通用户:1-65535
系统用户:1-499
一般用户:500-60000
 
which useradd
ls  -l $(which useradd )   或 ls –l `which useradd`  命令替换
useradd  USERNAME
passwd    USERNAME
groupadd  GROUPNAME
用户管理:
useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage
/etc/shells :指定了当前系统可用的安全shell
id:查看用户的账号属性信息
usermod:修改用户账号信息
chsh:修改用户的shell信息
chfn:修改注释信息
密码管理:
passwd  [USERNAME]
pwck 检查用户账号的完整性
组管理:
groupadd,groupdel,groupmod,gpasswd
权限管理:
chown,chgrp,chmod,umask
chown  改变用的属主(只有管理员可以使用此命令)
#chown USERNAME FILE …
chgrp  改变文件属组
#chown  USERNAME:GROUPNAME  file…
chmod :修改文件的权限
#chmod MODE file  
修改某类用户或某些用户权限
u,g,o,a
chmod 用户类别=MODE file…
修改某类用户的某位或某些位权限
u,g,o,a
chmod 用户类别+|-MODE file ..
# chmod u+x,g-x  /mnt/hello.txt  
bc 是计算器
手动加密码
#openssl  passwd
#whatis passwd
#man sslpasswd
#openssl passwd  -1  -salt ‘123456’
umask   遮罩码    管理员022   普通用户 002
666-umask  文件
777-umask   目录
文件默认不能有执行权限,如果算的的结果有执行权限,则将其权限加1
bash的配置文件:
全局配置:
/etc/profile,/etc/profile.d/*.sh,/etc/bashrc
个人配置:
~/.bash_profile ,~/.bashrc
profile 类的文件
设定环境变量
运行命令或脚本
bashrc 类的文件
设定本地变量
定义命令别名
登录式shell 如何读取配置文件?
/etc/profile -> /etc/profile.d/*sh->~/.bash_profile->~/.bashrc-->/etc/bashrc
非登录式shell如何配置文件?
~/.bashrc /ect/bashrc  /ect/profile.d/*.sh
 
i/o  重定向
>:覆盖输出
>>:追加输出
set  -C:禁止对已经存在文件使用覆盖重定向    强制覆盖则使用>|
set +C 关闭上述功能
2> :重定向错误输出
2>>:追加方式
&>:重定向标准输出或错误输出至同一个文件
 <:输入重定向
tee:
练习:
1.统计/usr/bin 目录下的文件个数
#ls /usr/bin | wc –l
2 取出当前系统上所有用户的shell ,要求,每种shell 只显示一次,并按顺序进行排序
#cut –d :-f7  /ect/passwd | sort -u
3.思考:如何显示/var/log 目录下每个文件的内容类型
#file /var/log
4.取出/etc/inittab 文件的第6行
#head -6 /ect/inittab | tail -l
5 取出/ect/passwd 文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中
#tail -9 /etc/passwd | head -1 | cut –d:-f1,7 | tee /tmp/users
6显示/etc 目录下所有以pa开头的文件,并统计其个数
#ls  -d  /ect/pa* | wc -l
7 不使用文本编辑起,将alias cls = clear-行内容添加到当前用户的.bashrc文件中
# echo “alias cls = clear” >>~./bashrc
grep ,egrep ,fgrep
grep :根据模式搜索文本,并将符合模式的文本显示出来
 
 
bash 脚本编写
本地变量
VARANME = VALUE :作用域为当前代码段
局部变量:
local VARNAME = VALUE :作用于为当前代码段
环境变量:作用域为当前shell 进程及其子进程:
export VARNAME=VALUE
条件判断
if  判断条件 ;then
else
fi
练习
给定一个用户:
1 如果uid 为 0 , 就显示此管理员
2 否则,就显示其为普通用户
  1 #!/bin/bash
  2 NAME=user1
  3 UID=`id -u $NAME`
  4 if [ $UID -eq 0 ]; then
  5         echo "Admin"
  6 else
  7         echo "user"
  8 fi
 
ehco $?     结果 0
练习:
给定一个用户,判断其UID和GID是否一样
如果一样,就显示1,不一样显示2
#USERNAME=user1
#USERID=`id –u $USERNAME`
#GID=`id  -g $USERNAME`
 
 
shell 中算术运算
1  let 算术运算表达式
a = 3
b=6
let c = $a+$b
2  $[算术运算表达式]
c=$[$A+$b]
3 $((算术运算表达式))
Exit  退出脚本
bash测试:
整数测试  : [  expression  ]  [[  expression  ]] 
-gt  -le –ne –eq –ge –lt
文件测试: 
-e  FILE  文件是否存在
-f  FILE  文件是否是普通文件
-d  FILE   文件是否为目录
-r    FILE  文件是否有读权限
-w    FILE   文件是否有写权限
-x   FILE   文件是否有执行权限
多分支语句:
if  条件;then
elif 条件;then
else
fi
测试bash 是否有语法错误
bash  –n  bash文件
bash  -x  测试执行流程
bash变量:
本地变量(局部变量)
环境变量
位置变量:$1,$2
特殊变量:
$? 
$#  参数的个数
$*  参数列表
$@ 
练习:
接收一个参数(文件路径)
判断参数如果是一个文件输出‘file’
if [ $# -eq 0 ]; then
        echo "need param"
        exit
fi
 
if [ -e $1 ];then
        echo 'ok'
else
        echo 'err'
fi
sed (流编辑器):
sed 基本用法:
sed  ‘地址’  ‘文件’
address
1.起始行 – 结束行
a)比如1,100   $$ 表示最后一行
2.、/RegExp/
直接用模式定义
3./pattern1/、/pattern2/
第一次被pattern1 匹配到的行开始,到2结束
4.Linenumber 指定的行
命令
d:删除符合条件的行  #sed '1,5d' /etc/fstab
p:显示符合条件的行
a : \string 指定的行的后面追加新行 ,内容为‘string’
i:\string 指定的行的前面添加新行,内容为string
r  FILE :将指定的文件内容添加至符合条件的某处
w FILE: 将地址指定的范围内行另存至指定的文件中
s /pattern/string/:查找并替换
 
sed命令练习:
1.删除/etc/grub.conf文件中行首的空白字符;
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2.替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/grub.conf
3.删除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4.删除文件中的#号
sed 's@^#@@g' /etc/inittab
5.删除某文件中的#号及后面空白字符,但要求#号后面必须要有空白字符
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
6.删除某文件中以空白字符后面跟#类的开头的空白字符及#
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
7.取出一个文件路径的目录名称
echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
 
如何生成列表:
1.{1.100}
2.seq 起始数  ,步进数 ,结束数
 
vim 编辑器:
寧、打开文件
1.vim +# :打开文件,并定位第#行
2.vim +:打开文件,到最后一行
3.vim +/PATTERN:打开文件,地位第一次被匹配到的行首
랗、模式
1.编辑模式
2.末行模式
3.输入模式
编辑—》输入:i键  a键 o键  I / A / O
三、移动光标
1.H:左 L:右 J:下 K:上
2.按照单词为单位移动,
w:移动至下一个单词词首
e: 移动至下一个单词词尾
b: 移动至下一个单词词首
3.行内跳转
0 绝对行首    ^ 行首的非空白字符  s:绝对行尾
4.整段
末行模式下  直接输行号
四、翻屏
ctrl+f 向下翻一屏
ctrl+b: 向上翻一屏
ctrl+d: 向下翻半屏
ctrl+u: 向上翻半屏
五、粘贴 p
p: 如果删除的或复制的为整行内容,则粘贴至光标所在行的下方,如果非整行,则粘贴至光标所在行的后面
P: 如果删除的或复制的为整行内容,则粘贴至光标所在行的上方,如果非整行,则粘贴至光标所在行的前面
六、复制命令 y  和d 一样
七、修改 ,c 和 d 一样
八、撤销 ,u  ,撤销刚才的撤销操作,ctrl+r
九、V 是光标滑过的所有都选中
十、查找  /PATTER   ?PATTER   n/N
十一、打开多个文件 vim file1 file2 ..  退出 :qa
切换 在末行模式下 输入:next 下个文件 :prev 上个文件 :last  最后一个文件  :first  第一个
十二、分屏模式
ctrl+w , s 水平拆分窗口
ctrl+w , V 垂直拆分窗口
在窗口键切换  ctrl+w  , 方向键
十三、和shell 交互  :! Shell命令
十四、显示
1.显示或取消行号
:set nu  :set nonu
2.设置自动缩进
:set ai  :set noai
 
 
 
组合测试:
-a : 与关系
-o : 或关系
! :  取反
写法: if [  $# -gt 1  -a $# -le 3  ]  或  if [ $# -gt 1 ] && [ $# -le 3  ]
 
文件查找:
locate:非实时的,查找是根据全系统文件数据库进行的
find:
查找路径:默认当前目录
查找标准:默认指定路径下的所有文件
处理运作:默认显示
匹配标准:
-name  path  -name file    例子: find /etc/ -name 'passwd'
文件名统配:
*:任意长度的任意字符
?:
[]
-iname ‘FILENAME’ : 文件名不区分大小写
-regex PATH : 基于正则表达式
-user USERNAME: 基于用户查找
-group GROUPNAME : 根据所属组查找
-uid  UID :根据UID 查找
-gid GID  : 根据GID 查找
-nouser :查找没有数组的文件
-type :  根据文件类型查找
f:普通文件  d s c l p
-size :根据大小查找
[+|-]#k   /  #M
组合条件:
-a   -o  -not
日期时间:
-mtime
-ctime
-atime
[+|-]   find / -amin -5  5分钟之内访问的文件
运作:
--print 显示
--ls : 显示细节
--ok : command \; 结束 {} 作为名称占位符
find ./ -perm -006 –exec chmod  o-w  {} \;
-exec  command {} \;
特殊权限
SUID : 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者
Chmod u+s FILE
Chmod u-s FILE
如果FILE文件本来就有执行权限,则UUID显示为S,否则显示为S
SGID:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组
Chmod g+s FILE
Chmod g-s FILE
例子:
#useradd hbase 
#useradd hive
#groupadd  developteam
#usermod -a -G developteam hbase
#usermod -a -G developteam hive
#mkdir project
#chown :developteam project
#chmod g+s project/
#chmod –R +w prject
#chmod o+t project
 
Sticky:在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除
别人的文件
Chmod o+t DIR
Chmod o-t DIR
 
 
 
 
 
 
 
 
 
 
 
 
 
磁盘管理:
ls  [ -s  -v]  SRC  DEST
硬件连接:
只能对文件创建,不能应用于目录
不能跨文件系统
创建硬链接会增加文件被连接的次数
符号连接:
可以应用目录
可以跨文件系统
不会增加被连接文件的连接次数
其大小为指定的路径所包含的文件的个数
du :显示 文件的大小 –s / -h
df:显示整个磁盘分区的使用情况
 
设备文件:
b:按块为单位,随机访问的设备  代表:硬盘
c:按字符为单位,线性设备代表:键盘
/dev
主设备号:标示设备类型
次设备号:标示同一种设备类型的不同设备
mknod  创建设备
硬盘设备的设备文件名:
IDE:
第一个IDE口,主,从
/dev/hda,/dev/hdb
 
第二个IDE口,主,从
/dev/hdc,/dev/hdd
hda:
hda1:第一个主分区
hda2:
fdisk:查看当前系统识别了几个模块
fdisk  –l   [/dev/to/some_dev]
管理磁盘分区:
fdisk  /dev/sda
p:显示当前硬件的分区,包括没保存的改动
n:创建新分区
e:扩展分区
p:主分区
d:删除一个分区
w:保存退出
q:不保存退出
t:修改分区类型
l:显示所有支持的类型
cat /proc/partitions  查看分区名称
partprobe  更新下分区名称
 
创建分区:
fdisk  -l
fdisk  /dev/sda
cat  /proc/partitions
partx -l /dev/sda
 
mkfs : make file system
-t 
mkfs  –t  ext2  /dev/sda5
mkfs  –t  ext2  = mkfs.ext2
 
专门管理ext系列文件:
mke2fs 
-j:创建ext3类型的文件
-b BLOCK_SIZE:指定块的大小  ,默认是1024,可设置2048,4096
-l  指定卷标
-m :指定预留给超级用户的块数的百分比
-I : 用于指定为多少字节空间创建一个inode,默认为8192,这里给出的数值应该为块大小的2^n倍
-N :指定inode个数
-F : 强制创建文件系统
-E:用户指定额外文件系统属性
 blkid: 查询或查看磁盘上的uuid 相关属性
 e2label :用于查看或定义卷标
tune2fs:调整文件系统的相关属性
文件系统是要有类型的 :ext2,ext3
cat  /proc/filesystems :查看当前内核支持的文件类型
 
dumpe2fs : 显示文件属性信息
-h:只显示超级块中的信息
fsck:检查并修复linux 文件系统
-a :自动修复
e2fsck : 专用于修复ext2/ext3文件系统
-f : 强制升级
-p: 自动修复
将新的文件系统 ,关联至当前根文件系统,叫做挂载
将某文件系统,从当前根系统关系移除,叫卸载
 
mount  设备 挂载点  mount /dev/sda5 /mnt/guazai/
-a : 表示挂载/etc/fstab/文件中定义的所有文件系统
-n: 默认情况下,mount 命令每挂载一个设备,都会把挂载的设备信息保存至、
etc/mtab 文件,使用-n选项意味着挂载设备时,不把信息写入文件
-o loop:挂载本地回环设备
 
设备:
设备文件
卷标
uuid
挂载点:目录
要求:
1.此目录没有被其他进程使用
2.目录事先存在
3.目录中的原有文件将会暂时的隐藏
挂载完成后,通过挂载点访问文件
 
umount  : 卸载某文件系统
umount 设备  或 挂载点
 
 
free 查看交换分区
-m
创建交换分区:
fdisk 先调整分区类型为82
mkswap  /dev/sda8
swapon   /dev/sda8  挂载交换分区
swapoff   /dev/sda8  卸载交换分区
 
回环设备
loopback ,使用软件模拟实现硬件
 
创建一个镜像文件
 
dd命令:
if=数据来源 of=保存的位置
dd if=/dev/zero  of=/mnt/swapfile bs=1M count=1024
dd if=/dev/zero  of=/mnt/swapfile2  seek=1023 bs=1M count=1
 
制作iso 磁盘镜像
cat  /dev/cdrom  > /root/rhe15.iso
/dev/null 黑洞设备
/dev/zero 吐0设备,能源源不断的输出0
文件系统配置文件/etc/fstab
os在初始化时,会自动挂载文件里面的系统
要挂载的设备  挂载点  文件系统类型  挂载选项  转储频率  自检次序
/dev/sda5    /mnt/test  ext4    defaults  0 0
mount –a : 挂载/etc/fstab 文件中定义的所有文件系统
fuser -v /mnt/guzai  查看谁正在访问这个文件
fuser :验证进程正在使用的文件或套结字
-v 查看文件上正在运行的进程
fuser –km MOUNT_POINT 终止访问此挂载点的所有进程
 
https://www.kernel.org/  linux 内核
压缩及压缩命令:
gzip :.gz
gzip /PATH/TO/SOMEFILE  :压缩完之后会删除原文件
-d 相当于gunzip
gunzip :
gunzip /PATH/TO/SOMEFILE  :压缩完之后会删除原文件
bzip2 : 比着 gzip 有着更大压缩比
xz  /PATH/TO/SOMEFILE 
zip  : 即归档又压缩
archive:归档
tar: 归档不压缩 .tar
-c  : 创建归档文件
-f file.tar : 操作的归档文件
-x :展开归档
-t : 显示归档里面的文件,不展开归档
--xattrs:归档时,保留文件的扩展性信息
-zxf:   gz解压并展开归档
-zcf:   调用GZ归档并压缩
   cpio : 归档工具
 
read :  输入交互内容
-p “PROMPT” :给出提示
 
while循环:
while CONDITION;do
done
 
 
RAID
级别:仅代表磁盘组织方式不同,没有上下之分
条带
性能提升:读写
冗余能力:无
镜像
性能提升:读性能提升,写性能下降
空间利用率:1/2
 
3
4  校验码
5
性能表现:读,写提升
冗余能力:有
空间利用率:(n-1)/n
10
01
jbod
 
md:
mdadm:将任何设备做成RAID
模式化的命令:
创建模式
-C
专用选项:
-1 : 级别
-n : 设备个数
-a :  自动为其创建设备文件
-c  : 指定数据块chunk大小
-x  :指定空闲盘设备个数
管理模式
--add,--DEL
mdadm /dev/md#  --fail  /dev/sda7
监控模式
-F
增长模式
-G
装配模式
-A
 
RAID0:
2G
 
创建raid0镜像环境:
准备几个分区
mount
fdisk –l   查看分区
fdisk 创建分区
创键两个1G  ,然后调整为fd
cat  /proc/partitions
   partx -l /dev/sda
重启下计算机,执行
mdadm –C  /dev/md0 –a yes –l 0 –n 2 /dev/sda{5,6}
cat /proc/mdstat
mke2fs  /dev/md0 格式化md0
mount /dev/md0 /mnt/  挂载
 
 
创建raid0 软件镜像 环境
fdisk /dev/sda   
n  +2G    创建3个2G的分区
t  7,8,9  fd  格式化成fd raid 格式
w  保存
cat  /proc/partitions
partx -l /dev/sda
重启下计算机,执行
mdadm --create --level=1 --raid-devices=2 -a yes --metadata=0.90 /dev/md1  /dev/sda{7,8}
cat /proc/mdstat
mke2fs  /dev/md1 格式化md1
mount /dev/md0 /mnt/  挂载
 
 
unmount /media/  卸载挂载
 
模拟损坏镜像md1
mdadm –-detail /dev/md1  显示磁盘的状态
mdadm /dev/md#  --fail  /dev/sda7  模拟顺坏磁盘
mdadm /dev/md1  --remove /dev/sda7  移除换掉的磁盘
mdadm /dev/md1  --add /dev/sda9  更换换掉的,添加一块新盘
 
在增加一块盘作为 备份盘,如果其中一块盘坏了,就自动补上
mdadm /dev/md1  --add /dev/sda7 
 
停止阵列: mdadm –S /dev/md# 
 
watch 监控状态,周期性的指定命令,显示全屏结果
watch ‘cat /proc/mdstat’
 
mdadm  -D  -scan  显示  当前raid设备的信息
mdadm -D -scan > /etc/mdadm.conf  读取到配置文件,之后开机时就会自动读取该信息
 
 
lsmod :列出模块
mdadm : 只是个管理工具
 
MD: meta device
DM : LVM2 快照
 
Pv:
Pvcreate pvremove  pvscan  pvdisplay pvmove
Vg:
vgcfgbackup    vgchange       vgconvert      vgdisplay      vgextend       vgimportclone  vgmknodes      vgremove       vgs            vgsplit       
vgcfgrestore   vgck           vgcreate       vgexport       vgimport       vgmerge        vgreduce       vgrename       vgscan 
 
Lv:
lvcreate lvremove lvscan  lvdisplay  lvmove,lvextend,lvreduce
 
创建成物理卷:
先 生成分区,调整成8e 类型
pvcreate  /dev/sda{10,11}
pvs  查看当前的pvs
pvdisplay 显示的比较详细
pvscan 扫描当前的原数据
 
创建VG
vgcreate myvg /dev/sda{10,11}
可以指定PE的大小
vgcreate –s 8M myvg /dev/sda{10,11}
删除
vgremove myvg
 
 
缩减磁盘卷,先移动下数据
pvmove /dev/sda11
vgreduce myvg  /dev/sda11
pvremove /dev/sda11
 
 
如果发现不够用
pvcreate /dev/sda12
vgextend myvg /dev/sda12
 
创建lv
lvcreate --size  50M --name  testlv myvg
lvdisplay
mke2fs /dev/myvg/testlv 
mount /dev/myvg/testlv /var/testlvs/
mount 查看当前挂载
 
一》扩展逻辑卷
lvextend
-L [+] #:
resize2fs:
resize2fs /PATH/TO/LV 5G
resize2fs  -p /dev/myvg/testlv
 
lvcreate --size 2G --name tlv myvg
lvs
mke2fs /dev/myvg/tlv
mkdir user
vim /etc/fstab
#/dev/myvg/tlv           /var/user               ext4    defaults,acl        0 0
 
mount -a
lvextend --size 5G /dev/myvg/tlv 
df –lh
lvs
resize2fs –p /dev/myvg/tlv 
 
 
二》缩减逻辑卷
注意:1.不能在线缩减,得先卸载
2.确保缩减后的空间大小依然能够存储原有的数据
3.在缩减之前应该先检查文件系统
resize2fs  /PATH/TO/PV 3G 
lvreduce –L [-]#  /PATH/TO/PV
三》快照卷
lvcreate
-s
-p r|w
lvcreate –-size # --name  #  -p –r  /PATH/TO/PV
 
 
 
ping –c /-w
awk:
dd  if=/dev/zero  of=/dev/sdb   bs=512   count=1
 
写一个脚本(前提是:请为虚拟机新增一块硬盘,假设为sdb)为指定的硬盘创建分区
列出当前系统上的所有磁盘,让用户选择,如果选择quit则退出脚本;如果选择错就就重新选择
当用户选择后,提醒用户截下来的操作可能会损坏 数据,并请用户确认,如果用户选择就按y就继续,否则,让用户重新选择
抹除那块硬盘上的所有分区(提示:抹除分区后执行sync命令,让脚本睡眠3秒后再分区);并为其创建三个主分区,第一个20M ,第二个521M,第三个128M,且第三个为swap分区类型:(提示:将分区命令通过echo传递给fdisk 即可实现)
 
You have new mail.
bogon:~ luodongyun$ ssh root@192.168.225.214
^C
bogon:~ luodongyun$ ssh root@192.168.225.215
The authenticity of host '192.168.225.215 (192.168.225.215)' can't be established.
RSA key fingerprint is SHA256:DZAcpZeHl1tZvXB3kkuqcifvnJRWxja67TXtozcqShQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.215' (RSA) to the list of known hosts.
root@192.168.225.215's password:
Last login: Fri Jul 21 02:00:01 2017 from 192.168.225.1
[root@bogon ~]# cd /mnt/
[root@bogon mnt]# ls
file.sh  hgfs        jisuan.sh  swapfile   test      test2.sh
guazai   jisuan2.sh  project    swapfile2  test1.sh  test.sh
[root@bogon mnt]# touch j.sh
[root@bogon mnt]# chmod +x j.sh
[root@bogon mnt]# sudo vim j.sh
[root@bogon mnt]# pwd
/mnt
[root@bogon mnt]# sudo vim j.sh
[root@bogon mnt]# sudo vim j.sh
 
 
+512M
n
p
3
 
+128M
t
3
82
w" | fdisk $PARIDISK &> /dev/null
partprobe $PARIDISK
 
sync
sleep 2
mke2fs -j ${PARIDISK}1
mke2fs -j ${PARIDISK}2
mkswap  ${PARIDISK}3
 
fi
 
 
 
echo $PARTDISK
 
 
 
网络配置:
网关:
route
add:添加
-host  :主机路由
-net  :网络路由  0.0.0.0
route add –net 10.0.0.0/8 gw 192.168.0.1
route add –net | -host DEST  gw NEXTHOP
route add default gw NEXTHOP
 
 
del :删除
-host
-net
route del –net 10.0.0.0/8 gw NEXTTOP
route del –net 0.0.0.0
 
网络配置文件:
/etc/sysconfig/network
网络接口配置文件:
/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
 
DEVICE="eth0"  关联的设备名称,要与文件的后半部分保持一致  ifcfg-et0
BOOTPROTO="dhcp"    引导协议,static,dhcp,none,bootcp ,要使用静态地址,使用[static,none],dhcp 表示使用dhcp服务器获取地址,
IPADDR=IP地址
NETMASK= 子网掩码
GATEWAY=设定默认网关
HWADDR="00:0C:29:96:B1:CD" 硬件地址,要与硬件中的地址保持一致,可省略
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes" 是否自动激活此网络接口
TYPE="Ethernet"
UUID="aac7db94-31e0-4553-9907-0fc8b2a86f2f"
 
不会立即生效,重启网卡或重启后生效
重启脚本:  /etc/init.d/network restart
 
路由:
/ect/sysconfig/network-scripts/route-ethX
添加格式一:
DEST  via  nexthop
192.168.1.1  via  10.10.10.1
添加格式二:
ADDRESS0=192.168.1.1
NEXTMASK0=255.255.255.0
GETEWAY0=10.10.10.1
 
DNS 服务器指定的方法只有一种:
/etc/resolv.conf
nameserver    //定义DNS服务器的IP地址
domain       //定义本地域名
search        //定义域名的搜索列表
sortlist        //对返回的域名进行排序
 
指定本地解析:
/etc/hosts
 
DNS解析顺序:
先查询/etc/hosts  ,然后在去查询dns缓存,在找dns服务器
 
配置主机名:(立即生效,但不会永久有效)
hostname HOSTNAME
 
/etc/sysconfig/network
HOSTNAME=
 
Setup  设置
 
Ifconfig ,老旧
Ip命令: 功能强大
Ip Link:网络接口属性
Show  ip –s link show
Set    ip link set DEV {up|down}
Ip  addr : 网络协议
一块网卡可以有多个网址,网络设备可以别名:
配置方法:
1,ifconfig ethX:X   IP/NETWORK
 
2./etc/sysconfig/network-scripts/ifcfg-ethX:X
DEVICE=ethX:X
 
3.IP addr  add  192.168.225.218/24  dev  eth1
IP addr  del  192.168.225.218/24  dev  eth1
IP addr  show   dev  DEV to PREFIX
IP addr  flush   dev  DEV to PREFIX
 
4.Ip  route :路由
 
 
软件包安装:
 
安装
rpm 
–i /PATH/TO/PACKAGE_FILE
-h 以#显示进度:每个#表示2%
-v  显示详细过程
-vv 显示更详细的过程
rpm  -ivh   /PATH/TO/PACKAGE_FILE
--nodepes:忽略依赖关系
--relacepages : 重新安装,替换原有安装
--force: 强行安装,可以实现重装或降级
 
 
查询
rpm –q PAGENAME_NAME  :查询指定的包是否已经安装
rpm –qa  :查询已安装的所有包
rpm  -qi  PAGKAGE_NAME   查询指定包的说明信息
rpm  -ql  PAGKAGE_NAME   查询指定安装包生成的文件列表
rpm  -qc   PAGKAGE_NAME   查询指定安装的配置文件
rpm  -qd   PAGKAGE_NAME   查询指定安装的帮组文件
 
rpm –q  --script  PAGKAGE_NAME   查询指定包中包含的脚本
 
rpm  -qf  /path/to/file   :查询指定的文件是由那个rpm包安装完成
 
 
如果某rpm包尚未安装,我们需要查询其说明信息,安装以后会生成的文件
 
rpm –qpi  /path/to/file
 
 
升级
rpm   -Uvh  /path/to/file   如果有老版本则升级,否则安装
rpm  -Fvh  如果有老版本则升级,否则退出
 
卸载
rpm  -e  PAKEAGE_NAME
 
校验
rpm  -V   PAKEAGE_NAME
编译安装的三个步骤:
yum grouplist
 
安装“development tools”和“development libraries”
yum groupinstall development tools -y           #安装开发工具组
yum groupinstall development libraries -y     #安装开发工具包,有时可能不用安装
 yum install gcc 从软件仓库下载gcc,然后安装,这个是编译器
 yum install make 安装make,这个是自动编译源码的工具,写好makefile就可以方便编译
 yum install kernel-headers 安装内核头文件,编译内核,驱动必要的头文件
 yum install kernel-devel 同上
 
 
 
#./configure
--prefix =  /path/to/somewhere
--sysconfdir=/path/to/conffile_path
--help
#  make 
#    make install
 
 
 
nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx dso module path: "/usr/local/nginx/modules/"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
 
vim  /etc/profile
export 前加  PATH=$PATH:/usr/local/nginx/sbin
source /etc/profile  重读
nginx
netstat  -tnlp
 
【 Nginx 入门系列】第二章 外部无法访问 Nginx 服务器
vim /etc/sysconfig/iptables  
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  
service iptables stop  
service iptables start  
chkconfig iptables on  
chkconfig iptables off  
tengine 详细安装教程
环境:
系统硬件:VMware vsphere (CPU:2*4核,内存2G)
系统版本: CentOS  Linux release 7.0.1406
安装步骤:
1.系统环境
1.1 更新系统
[root@centos ~]# yum update -y
1.2 查看环境
[root@centos ~]# cat /etc/ RedHat-release
CentOS  linux release 7.0.1406 (Core)
[root@centos ~]# uname -a
Linux tengine 3.10.0-123.4.2.el7.x86_64 #1 SMP Mon Jun 30 16:09:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
2.安装tengine
2.1.准备安装
[root@centos ~]# cd /usr/local/src/
下载 pcre-8.35.tar.gz到/usr/local/src
[root@centos ~]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
下载zlib-1.2.8.tar.gz到/usr/local/src
[root@centos ~]# wget http://zlib .NET/zlib-1.2.8.tar.gz
下载 openssl-1.0.1h.tar.gz到/usr/local/src
[root@centos ~]# wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz
下载jemalloc-3.6.0.tar.bz2到/usr/local/src
[root@centos ~]#  wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
下载 tengine-2.0.3.tar.gz到/usr/local/src
[root@centos ~]# wget http://tengine.taobao.org/download/tengine-2.0.3.tar.gz
  
2.2 更新包
[root@centos ~]# yum install zlib-devel openssl-devel -y
2.3 安装Pcre
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf pcre-8.35.tar.gz
[root@centos ~]# cd pcre-8.35
[root@centos ~]# ./configure
[root@centos ~]# make && make install
2.4 安装openssl
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf openssl-1.0.1h.tar.gz
[root@centos ~]# cd openssl-1.0.1h
[root@centos ~]# ./config
[root@centos ~]# make && make install
2.5 安装zlib
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zlib-1.2.8.tar.gz
[root@centos ~]# cd zlib-1.2.8
[root@centos ~]# ./configure
[root@centos ~]# make && make install
2.6 安装jemalloc
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf jemalloc-3.6.0
[root@centos ~]# cd jemalloc-3.6.0
[root@centos ~]# ./configure
[root@centos ~]# make && make install
[root@centos ~]# echo ‘/usr/local/lib‘ > /etc/ld.so.conf.d/local.conf
[root@centos ~]# ldconfig
4.4 创建www用户和组,创建www虚拟主机使用的目录,以及Nginx使用的日志目录,并且赋予他们适当的权限
[root@centos ~]# groupadd www
[root@centos ~]# useradd -g www www
[root@centos ~]# mkdir -p /data/www
[root@centos ~]# chmod +w /data/www
[root@centos ~]# chown -R www:www /data/www
4.5 安装tengine
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# tar zvxf tengine-2.0.3.tar.gz
伪装服务器信息(可以不修改)
[root@centos ~]# cd nginx-1.6.0/src/core
[root@centos ~]# vim ./src/core/nginx.h
修改NGINX_VERSION为你希望显示的版号
修改NGINX_VER为你希望显示的名称
修改NGINX_VAR 为你希望显示的名称
保存  
开始安装NGINX
./configure --prefix=/opt/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35 --with-jemalloc
[root@centos ~]# make && make install
4.6 修改 nginx.conf
[root@centos ~]# vim /opt/nginx/conf/nginx.conf
修改前面几行为:
user www www;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
events{
  use epoll;
  worker_connections 65535;
}
4.7  测试和运行
[root@centos ~]# cd /opt/nginx
[root@centos ~]# ldconfig
[root@centos ~]# ./sbin/nginx -t
如果显示下面信息,即表示配置没问题
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
输入代码运行nginx服务
[root@centos ~]# ./sbin/nginx 
[root@centos ~]# ps au|grep nginx
如果显以类似下面的信息,即表示nginx已经启动
root 2013 0.0 0.0 103156 856 pts/0 S+ 03:22 0:00 grep nginx
  
输入代码检测是否支持加速
查看是否生效
[root@centos ~]# lsof -n | grep jemalloc
ginx 2346 root mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2347 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2348 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2349 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2350 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
[root@centos ~]# curl http://localhost
4.8 打开防火墙80端口
#停止firewall
[root@centos ~]# systemctl stop firewalld.service
#禁止firewall开机启动
[root@centos ~]# systemctl disable firewalld.service
安装 iptables
[root@centos ~]# yum install iptables-services
设置防火墙规则 (增加80端口)
[root@centos ~]# vim /etc/sysconfig/iptables
打开文件,增加80端口那一行
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq #保存退出
#重启防火墙使配置生效
[root@centos ~]# systemctl restart iptables.service
#设置防火墙开机启动
[root@centos ~]# systemctl enable iptables.service
 4.9 作为服务,开机后启动
[root@centos ~]# vim /usr/lib/systemd/system/tengine.service
增加以下内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
:wq 保存退出
 [root@centos ~]# systemctl stop tengine
 [root@centos ~]# systemctl start tengine
 [root@centos ~]# systemctl reload tengine
 [root@centos ~]# systemctl enable tengine
 [root@centos ~]# shutdown -r now
 
 
1.默认情况下,系统搜索库文件的路径/lib,/usr/lib,要增添额外搜索路径
2.在/ect/ld.so.conf.d/中创建以.conf为后缀文件,而后把要增添的路径直接写到这个文件中
#ldconfig 通知重新搜索文件 ,立即生效
头文件:输出给系统
默认:/usr/include
增添同文件搜索路径,使用连接进行
/usr/local/nginx/include/   /usr/include
两种方式:
ln –s /usr/local/nginx/include/*   /usr/include/ 或
ln –s /usr/local/nginx/include   /usr/include/nginx
man 文件路径,安装—prefix 指定目录下的man的目录,/usr/share/man
1.man –M /path/to/man_dir  command
2.在/etc/man.config添加一条路径manpath
 
netstat命令:
-nltp
-r :显示路由表
-n:以数字显示
-t:建立tcp连接
-u:显示udp连接
-l:监听状态连接
-p:监听指定套接字的进程号
 
进程管理
ps 
a:所有和终端有关的进程
u :
x :所有和终端无关的进程
进程的分类:
进程状态:
D:不可中断的睡眠
R:运行或就绪
S:可中断的睡眠
T:停止
Z:僵死状态
<:高优先级进程
N:低优先级进程
+:前台进程组中的进程
l:多线程进程
s:会话进程的首进程
 
pgrep 
pidof 显示pid
top : 监视进程
交互式选项:
M:根据驻留内存大小进行排序
P: 根据cpu使用百分比进行排序
T: 根据累计时间进行排序
l: 是否显示平均负载和时间
t: 是否显示进行和cpu状态相关信息
m: 是否显示内存相关信息
c: 是否显示完整的命令信息
q: 退出top
k: 终止某个进程
 
进程间通讯(IPC):
 
重要的信号:
kill   -l
1,2,9,15
kill  PID
killall  进程名
renice  调进程的优先级
 
&:后台运行
前台---》后台:命令后 + &
jobs:查看后台的所有作业,
作业号不同于进程,有 + 的 命令  将默认操作作业, - 命令将第二个默认操作作业
bg:让后台停止的作业继续运行  bg   [jobid]
fg:将后台的作业调回前台  fg  [JOBID]
kill %JOBID  :终止某作业
vmstat : 系统状态查看命令
cat  /proc/meminfo   :查看内存状态
 
 
日志系统:
chroot:
ldd : 显示二级文件所依赖的共享库
 
GIMP是什么
最容易理解的说法:Linux下的Photoshop,但现在的 Windows 版本同样好用。
lftp :下载ftp
 
查看运行级别:
runlevel/ who –r
查看内核relase号:
uname  –r
安装grub stage1:
#grub
grub >  root(hd0,0)
grub >  set(hd0)
 
安装grub 第二种方式:
#grub-install   --root-directory=/   /dev/sda
 
例子: 操作步骤
 
fdisk   /dev/sda  
n
p
+20M
w
partprobe /dev/sda
fdisk –l
mke2fs /dev/sda1
mkdir /mnt//boot
mount /dev/sda1  /mnt/boot/
grub-install --root-directory=/mnt /dev/sda
sync
ls /mnt/boot/
ls /mnt/boot/grub/
vim /mnt/boot/grub/grub.conf
 
 
如果grub.Conf 损坏
grub> find
grub> root(hd#,N)
grub> kernel /PATH/TO/KERNEL_FILE
grub> initrd /PATH/TO/INITRD_FILE
grub> boot
 
服务器脚本:
syav:/etc/rc.d/init.d
start|stop|restart|status|reload|configtest
 
 
/etc/rc.d/rc.local:系统最后启动一个服务,准确说,应该执行的一个脚本;
 
/etc/inittab的任务:
设定默认的运行级别
运行系统初始化脚本
运行指定运行级别对应的目录的脚本
设定ctrl+alt+del组合键操作
定义ups电源在电源故障/恢复时执行的操作
启动虚拟终端(2345级别)
启动图形终端(5级别)
 
chkconfig –list:查看所有独立守护服务的启动设定,独立守护进程
chkconfig –list SERVER_NAME
chkconfig –add SERVER_NAME
chkconfig –del  SERVER_NAME
chkconfig  --level  RUNLEVES  SERVER_NAME(on|off)
 
 
 
内核模块管理:
lsmod:查看
modprode  mod_name : 装载某模块
modprode –r mod_name:卸载某模块
modinfo mod_name:查看模块的具体信息
 
insmod /path/to/module_file:装载模块
rsmod mod_name : 卸载模块
 
 
如何手动编译内核:
make gconfig : Gname 桌面环境使用,需要安装图形开发组,
make kconfig: KDE桌面环境使用,需要安装图形开发库
 
make menuconfig
make
make modules_install
make install
 
 
 
系统的启动流程:
POST->BIOS(boot sequence)->BootLoader(MBR)->Kernel(initrd,initramfs)->init(/etc/inittab)
 
 
/etc/inittab:
设定默认运行级别
系统初始化(/etc/rc.d/rc.sysinit)
运行指定级别的脚本
/etc/rc.d/init.d
/etc/rc.d/rc#.d
rc0.d-rc6.d
启动虚拟终端
启动图形终端
 
 
/ect/rc.d/rc.sysinit:
检测以读写方式重新挂载根文件系统
设定主机名
检测并挂载/etc/fstab中的其他文件系统
启用swap分区
初始化外围硬件设备的驱动
根据/etc/sysctl.config设定内核参数
激活udev 和 selinux
激活LVM 和  RAID 设备
清理过期的锁和PID文件
装载键映射
 
/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
 
/etc/rc.d/rc.sysinit
echo
insmod
ifconfig
/bin/bash
 
 
REHL6:
Upstart--init
/etc/inittab
/etc/init/*.conf
 
 
内核初始化:
硬件检测
装载驱动
挂载根目录文件
启动用户空间中的第一个进程init
 
内核编译:
busybox;
 
kernel+ROOTFS()
 
查看本机硬件设备信息:
1、cat   /proc/cpuinfo
2.lsusb
3.lspci
4.hal-device
 
 
编译内核:
配置
make menuconfig
make gconfig
make kconfig
make oldconfig
make config
保存为.config
2.
make
make modules_install
make install
模块安装位置:/lib/modules/KERNEL_VERSION/
 
如何实现部分编译:
之编译某目录下的相关代码
make dir/
只编译某一模块
make  M=drivers/net
只编译某一模块
make drivers/net/pcnet2.so
将编译完成的结果放在别的目录中
make   O = /tmp/kernel
 
 
如何编译busybox:
 
bash 引入配置文件:
.   /mnt/a.conf
查看编译情况:bash   -x   a.sh
 
 
脚本编程知识点:
变量中字符的长度:${#VARNAME}
变量赋值等
${parameter:-word}:如果parameter 为空 或未定义,则变量展开为”word”,否则为parameter的值
 
 
mktemp  创建临时文件或目录:
mktemp test.XXXXXX
 
信号:
trap
trap ‘COMMAND’信号列表
 
 
任务计划:
在未来某个时间点执行某一次任务:
at
at 时间
at> COMMAND
at> ctrl+d
 
batch
周期性的执行某任务:
cron:自身是一个不间断的任务
anacron:cron的补充,能够实现让cron 因为各种原因在过去的时间执行而未执行的任务在回复正常执行一次
 
系统cron任务:
/etc/crontab 
   分钟 小时  天  月 周  用户  任务
用户cron任务:
/var/spool/cron/USERNAME
分钟 小时  天  月 周  用户  任务
 
时间取值范围:
分钟:0-59
小时:0-23
天:1-31
月:1-12
周:0-7   0和7都是周日
时间通配符:
*:表示对应的所有的有效取值
,:表示离散时间点取值  10,20  *  *  *  *
-:表示联系时间点  10-20  *  *  *  *
/:  每多长时间执行一次  */3  *  *   *  *
 
crontab  –l  : 列出当前用户的所有cron的任务
-e : 编辑
-r  :  移除所有任务
 
 
kernel  -> 物理终端(/dev/console) -> /var/log/dmesg
#dmesg
#cat /var/log/dmesg
 
/sbin/init
/var/log/messages: 系统标准错误日志信息
/var/log/maillog : 邮件系统产生的日志信息
/var/log/secure:
 
syslog:
syslogd
klogd
配置文件:/ect/syslog.conf
 
 
telnet:远程登录协议
scp :
scp  src   dest
-r
-a
scp username@host:/path   /localpath  远程主机复制到本地
scp /localpath   username@host:/path  把本地文件复制到远程主机
ssh-keygen:  
-r  rsa
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
  公钥保存到远程主机某用户的家目录下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件
ssh-copy-id
-I ~/.ssh/id_rsa.pub
ssh-copy-id  -I  ~/.ssh/id_rsa.pub   username@host
 
 
 
加密类型及加密算法:
   diffie->hellman 协议:
A-_---B:
P,G(大素数,大质数)
A:x
B: y
A:G^X%P  ----B
B:g^y%p   ----A
 
A:   (g^x%p)^y  = g^xy%p
B:   (g^y%p)^x  = g^xy%p
 
公钥加密算法:非对称加密算法
秘钥对:
公钥:P
私钥:s
发送方用自己的私钥加密数据,可以实现身份验证
发送方用对方的公钥加密数据,可以保证数据机密性
 
 
ca证书:
x509:
公钥及有效期
证书的合法拥有者
证书该如何被使用
CA的信息
CA签名的校验码
 
PKI : Tls/ssl: 使用的是x509
Pki:  OpenGPG
 
对称加密:
DES/3DES/AES/BlowFish
单向加密:
MD4,MD5,SHA1,SHA192,SHA256,SHA384,CRC32
公钥加密(加密、签名):
身份认证(数字签名)、数据加密,密钥交换
RSA:既能加密,又能签名/DSA:仅签名/ElGamal
 
OpenSSL:ssl的开源实现
Libcrypto:加密库
Libssl:TLS/SSL的实现
基于会话的/实现了身份认证,数据机密性或会话完整性的TLS、SSL库
openssl:多用途命令行工具
实现私有证书颁布机构
www.openssl.org
 
 
openssl  实现私有CA:需设置权限为600
先生成一对密钥
私钥:
openssl genrsa 2048 > server.key
或者
(umask 077; openssl genrsa -out server1024.key 1024)
公钥:
openssl  rsa   -in  server1024.key   -pubout  提取公钥
 
生成自签证书
openssl req -new -x509 -key server1024.key -out server.crt -days 365
 
cd  /etc/pki/tls/openssl.cnf  有CA配置项
 
 
具体实践生成(CA 先自己颁发个证书):
cd /etc/pki/CA
(umask  077; openssl  genrsa  -out  private/cakey.pem  2048  )  生成秘钥
openssl req -new -x509  -key private/cakey.pem -out cacert.pem  生成自签证书
mkdir  certs   newcerts  crl
touch  index.txt
touch  serial
echo 01 > serial
 
 
向CA申请证书:
cd 
mkdir  /etc/httpd
cd /etc/httpd
mkdir  ssl
cd  ssl
(umask 077 ; openssl genrsa –out  httpd.key  1024)
openssl req -new  -key httpd.key -out cacert.csr
openssl ca  -in  httpd.csr  -out  httpd.crt  -days  365 
 
安装配置DNS(只能做测试用)
https://www.isc.org/  下载bind 包
配置文件:
/ect/named.conf
BIND进程的工作属性
区域的定义
/ect/rndc.key
秘钥文件
配置信息:/ect/rndc.conf
/var/named
区域数据文件
/etc/rc.d/init.d/named
启动文件
 
 
DNS
监听的端口:
53/udp     53/tcp    953/tcp,rndc  
socket 套接字:
IP:PORT
 
 
状态代码:
1xx:纯信息
2xx:成功类的信息(200)
3xx:重定向类信息(301,302,304)
4xx:客户端错误类的信息(404)
5xx:服务器端错误类信息(500)
 
 
web服务器主要操作:
建立连接—接受或拒绝客户端连接请求
接收请求—通过网络读取HTTP请求报文
处理请求—解析请求报文并作出相应的动作
访问资源—访问请求报文中相关的资源
构建相应—使用正确的首部生成HTTP响应报文
发送响应—向客户端发送生成的响应报文
记录日志—当已经完成的HTTP事件记录进日志文件
 
 
www.netcraft.com:全球互联网产品排名
 
 
 
 
 
 
Httpd安装:
Getenforce  先看下  是不是  disenable,或者permissive
Setenforce 0  临时生效
Vim  /ect/sysconfig/selinux
Vim /ect/selinux/config
Httpd    工作:
/usr/sbin/httpd
/etc/rc.d/init.d/httpd
/etc/httpd:工作目录
/etc/httpd/conf 有配置文件
 
yum 安装
yum install httpd
rpm  -ql  httpd查看文件
 
service  httpd start  启动服务
ps aux | grep httpd
 
loadrunner  惠普公司 出的测试压力 工具
 
mpm
4种配置形式
mpm_winnt
prefork (一个请求一个线程相应)
worker(一个请求用一个线程相应,启动多个进程,每个进程多个线程)
event( 一个进程处理多个请求)
 
options
indexs :索引目录  ,生产环境关闭
 
 
elinks  文本浏览器
elinks  http://www.baidu.com
 
服务器配置https
cd /etc/pki/CA
(umask 077 ; openssl genrsa  -out  private/cakey.pem  2048)
ls  -l  private/
vim  ../tls/openssl.cnf
更改默认省份等信息
生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
 
vim ../tls/openssl.cnf
更改 openssl.cnf 配置
dir = /etc/pki/CA
cd /etc/pki/CA
mkdir  certs  ctl  newcerts
touch index.txt
echo 01>serial
 
 
cd /ect/httpd
mkdir ssl
cd ssl
(umask 077 ; openssl genrsa  -out  httpd.key  2048)
openssl req  -new –key  httpd.key  -out httpd.csr
#comon name  给那个虚拟主机用 ,就写哪个域名
把生成的文件发送到签署ca服务器
scp  httpd.csr 172.16.100.8:/tmp
正式颁发证书
openssl ca –in  /tmp/httpd.csr   -out  /tmp/httpd.crt  -days   3650
 
配置成https
yum install openssl mod_ssl -y
cd  /etc/httpd/conf.d/
mv ssl.conf  ssl.conf.bak
vim ssl.conf
 
<VirtualHost 192.168.225.232:443>
ServerName d.com
DocumentRoot "/ www/d.com"
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
 
service httpd restart
httpd –t
netstat  -nltp
 
vim hosts  192.168.225.332  d.com
 
解决安全性:
从服务器上下载 /etc/pki/CA/cacert.pem放到本地,并命名为.crt,然后把这个crt文件导入浏览器
 
 
 
数据库:
创建用户:
CREATE USER ‘ROOT’@’HOST’ [IDENTFIED BY ‘PASSWORD’]
DROP USER ‘USERNAME’@’HOST’
_:匹配任意字符,192.168.233._
%:匹配任意字符
授权
GRANT pri1,pri2…  ON DB_NAME.TB_NAME TO ‘USERNAME’@’HOST’ [IDENTFIELD BY ‘PASSWORD’];
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
取消授权
REMOVE pri1,pri2…  ON DB_NAME.TB_NAME TO ‘USERNAME’@’HOST’;
查看授权
SHOW GRANTS FOR ‘USERNAME’@’HOST’
 
为用户设定密码
SET PASSWORD FOR ‘USER’@’HOST’ = PASSWORD(‘password’);  FLUSH PRIVILEGES;
# mysqladmin –uUSERNAME –hHOST   -p password ‘12345’
mysql> UPDATE user SET Password=PASSWORD(‘password’) where user=’root’ ;
 
phpadmin
论坛:
discus/phpwind/phpbb
 
源码安装lamp
yum –y install pcre-devel
tar xf  apr-1.4.6.tar.gz
cd apr-1.4.6
./configure –prefix=/usr/local/apr
make
make install
 
 
tar xf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure  --prefix=/usr/local/apr-util   --with-apr=/usr/local/apr
make
make install
 
tar  xf httpd-2.4.4.tar.bz
cd httpd2.4.4
./configure  --prefix=/usr/local/apache   --sysconfdir=/etc/httpd  --enable-so  --enable-rewrite  --enable-ssl  --enable-cgi  --enable-cgid  --enable-modules = most  --enable-mpms-shared=all  --with-apr=/usr/local/apr  --with-apr-unil=/usr/local/apr-util  
make
make install
 
 
getenforce
setenforce 0
vim /etc/selinux/config
SELINUX=permissive
 
Cd /usr/local/apache
 
Vim  /etc/httpd/httpd.conf
PidFile=/var/run/httpd.pid
 
Cp  /usr/local/apache/bin/apachect1 /etc/init.d/httpd
 
Chkconfig –add httpd
Chkconfig –list | grep httpd
Chkconfig –level 2345 httpd on
Service httpd start
 
安装mysql
Group add –r -g 306  mysql
Useradd –g 306  -r –u 306 mysql
 
 
http://rpmfind.net/  rpm  库
 
创建分区
fdisk  /dev/sda
n
e  先加扩展卷
n
p
t  8e
w
partprobe /dev/sdb
pvcreate /dev/sdb2
vgcreate myvg /dev/sdb2
lvcreate -n mydata -L 5G myvg
lvs
mke2fs -j /dev/myvg/mydata
mkdir /mydata
 
vim /etc/fstab  开机自动挂载
/dev/myvg/mydata        /mydata                 ext3    defaults        0 0
mount –a  挂载
mount 查看
 
mkdir /mydata/data
chown -R mysql.mysql /mydata/data/
 
mysql服务器维护了两类变量:
服务器变量:
定义mysql 服务器运行属性
SHOW GLOBAL  VARIBALES
状态变量:
保存了mysql服务器统计数据
SHOW GLOBAL  STATUS
 
 
Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址
http://blog.csdn.net/zhulindan/article/details/72901140
Centos6.5 LAMP环境源码包安装与配置
http://pan.baidu.com/s/1nvNruzv 安装包百度网盘地址 
LAMP是一种web网络应用和开发环境,是linux,Apache,MySQL,php/perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代表的方面功能非常强大的组件。 
Linux:Linux 处在最底层,提供操作系统。它的灵活性和可定制化的特点意味着它能够产生一种高度定制的平台,让其它组件在上面运行。其它组件运行于Linux 之上,但是并不一定局限于 Linux,也可以在 Microsoft Windows, Mac OS X 或 UNIX上运行。 
Apache:Apache位于第二层,它是一个Web 服务平台,提供可让用户获得 Web 页面的机制。Apache 是一款功能强大、稳定、可支撑关键任务的Web服务器,Internet 上超过 50% 的网站都使用它作为 Web 服务器。 
MySQL:MySQL 是最流行的开源关系数据库管理系统,是LAMP的数据存储端。在 Web 应用程序中,所有帐户信息、产品信息、客户信息、业务数据和其他类型的信息都存储于数据库中,通过 SQL 语言可以很容易地查询这些信息。 
PHP/Perl:Perl是一种灵活的语言,特别是在处理文本要素的时候,这种灵活性使Perl很容易处理通过 CGI接口提供的数据,灵活地运用文本文件和简单数据库支持动态要素。PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。可以使用 PHP 编写能访问 MySQL 数据库中的数据和 Linux 提供的一些特性的动态内容。
系统环境
系统平台:CentOS release 6.5 
Apache版本:httpd-2.2.9.tar.gz 
Mysql 版本:mysql-5.5.20.tar.gz 
Php版本:php-5.3.22.tar.gz
安装前准备: 
安装gcc、gcc-c++编译器 
用gcc –v命令检查安装时使用的编译工作是否存在
如果未安装,在联网的情况下使用: 
yum install gcc和yum install gcc-c++安装
确认搭建LAMP所需的环境是否已经安装:
rpm -q make cmake gcc gcc-c++ zlib-devel libtool libtool-ltdl libtool-ltdl-devel bison ncurses-devel
备注:安装libpng时需要zlib-devel     安装php时需要libtool、libtool-ltdl、libtool-ltdl-devel     安装mysql时需要bison、ncurses-devel
如果以上所需环境没安装则yum安装:
yum -y install make cmake gcc gcc-c++ zlib-devel libtool libtool-ltdl libtool-ltdl-devel bison ncurses-devel
在安装PHP之前,应先安装PHP5需要的最新版本库文件,例如libxml2、libmcrypt以及GD2库等文件。安装GD2库是为了让PHP5支 持GIF、PNG和JPEG图片格式,所以在安装GD2库之前还要先安装最新的zlib、libpng、freetype和jpegsrc等库文件。而且中间还会穿插安装一些软件
ps -ef|grep mysqld #查看是否有mysqld进程 ps 命令用于查看当前正在运行的进程。 grep 是搜索 ps -aux | grep java #-aux 显示所有状态 kill 命令用于终止进程 例如: kill -9 [PID] #-9 表示强迫进程立即停止 通常用 ps 查看进程 PID ,用 kill 命令终止进程 ps [选项] -e 显示所有进程,环境变量 -f 全格式 -h 不显示标题 -l 长格式 -w 宽输出 a 显示终端上地所有进程,包括其他用户地进程 r 只显示正在运行地进程 x 显示没有控制终端地进程
查看是否安装httpd、MySQL、PHP是否安装:如果安装了就将其旧版本卸载
卸载Apache
rpm -qa | grep httpd #检查是否安装了httpd软件包 rpm -e httpd-2.2.3-63.el5.centos --nodeps #卸载软件包, --nodeps: 如果有连带关系,也强制卸载 cd /etc/httpd/ rm -rf * #到原来的apache安装目录下,将其所有的安装目录和文件都删掉
卸载Mysql
rpm -qa | grep mysql #检查是否安装了mysql软件包 rpm -e mysql-5.0.77-4.el5_4.2 --nodeps #卸载mysql
卸载Php
rpm -qa | grep php #检查是否安装了php软件包 rpm -e php-common-5.1.6-27.el5 --nodeps rpm -e php-ldap-5.1.6-27.el5 --nodeps rpm -e php-cli-5.1.6-27.el5 --nodeps rpm -e php-5.1.6-27.el5 --nodeps #卸载PHP
关闭selinux,清空防火墙规则
一、查看SELinux状态命令:
/usr/sbin/sestatus -v #如果SELinux status参数为enabled即为开启状态 SELinux status: enabled getenforce ##也可以用这个命令检查
关闭SELinux方法:
1、临时关闭(不用重启机器): 代码如下: setenforce 0 #设置SELinux 成为permissive模式 setenforce 1 #设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改vim /etc/selinux/config 文件 将SELINUX=enforcing 改为 SELINUX=disabled 重启机器即可
使用ssh shell将windows下的13个源码包上传到/usr/local/src 解包 
编译安装过程介绍: 
1)解压tar.gz为后缀的压缩软件包:LAMP环境搭建所需要的每个软件的软代码文件,都是以tar.gz或.tgz提供给我们的打包压缩文件,所以我们必须将其解压再解包。命令如下:
tar–zxvf *.tar.gz
2)在linux系统中源代码包安装过程:LAMP环境搭建所需要的软件都是使用C语言开发的,所以安装源代码文件最少需要配置、编译和安装三个步骤 
配置(configure)、编译(make)、安装(makeinstall)
安装LAMP
1、安装libxml2
cd /usr/local/src/libxml2-2.6.30 ./configure --prefix=/usr/local/libxml2 make && make install
2、安装libmcrypt
cd /usr/local/src/libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt make && make install
3、安装zlib
cd /usr/local/src/zlib-1.2.3 CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib/ (用64位元的方法进行编译) make && make install
4、安装libpng
cd /usr/local/src/libpng-1.2.31 ./configure --prefix=/usr/local/libpng --enable-shared #--enable-shared(建立共享库使用的GNU的libtool) make && make install
5、安装jpeg 
这个软件包安装有些特殊,其它软件包安装时如果目录不存在,会自动创建,但这个软件包安装时需要手动创建。
mkdir /usr/local/jpeg && mkdir /usr/local/jpeg/bin && mkdir /usr/local/jpeg/lib && mkdir /usr/local/jpeg/include && mkdir -p /usr/local/jpeg/man/man1 # mkdir /usr/local/jpeg (创建jpeg软件的安装目录) # mkdir /usr/local/jpeg/bin(创建存放命令的目录) # mkdir /usr/local/jpeg/lib (创建jpeg库文件所在目录) # mkdir /usr/local/jpeg/include(创建存放头文件目录) # mkdir -p /usr/local/jpeg/man/man1(建立存放手册的目录) cd /usr/local/src/jpeg-6b ./configure --prefix=/usr/local/jpeg --enable-shared --enable-static #>--enable-shared \ (生成动态链接库) #>--enable-static (生成静态链接库) make && make install
执行make时如果出现如下错误:
./libtool --mode=compile gcc-O2 -I. -c ./jcapimin.c make: ./libtool: Command notfound make: *** [jcapimin.lo] Error 127
解决方法: 
默认已安装libtool及libtool-ltdl-devel(如需帮助请看过程2)
[root@localhostjpeg-6b]# find / -name config.sub /usr/share/libtool/config/config.sub [root@localhostjpeg-6b]# find / -name config.guess /usr/share/libtool/config/config.guess 操作如下: [root@localhostjpeg-6b]# cp -vRp /usr/share/libtool/config/config.sub . [root@localhostjpeg-6b]# cp -vRp /usr/share/libtool/config/config.guess .
也就是把libtool里面的两个配置文件拿来覆盖掉jpeg-6b目录下的对应文件 
make clean 再重新configure
./configure --prefix=/usr/local/jpeg --enable-shared --enable-static make && make install
6、安装freetype
cd /usr/local/src/freetype-2.3.5 ./configure --prefix=/usr/local/freetype --enable-shared #>--enable-shared(建立共享库使用的GUN的libtool) make
安装 freetype make [install] 错误 1 (忽略) 报错问题
当 make install 时总是: rm -f /usr/local/modules/freetype/include/freetype2/freetype/cache/* rmdir /usr/local/modules/freetype/include/freetype2/freetype/cache rm -f /usr/local/modules/freetype/include/freetype2/freetype/internal/* rmdir /usr/local/modules/freetype/include/freetype2/freetype/internal rmdir: ‘/usr/local/modules/freetype/include/freetype2/freetype/internal’: 没有那个文件或目录 make: [install] 错误 1 (忽略) /usr/bin/install -c -m 644 ./builds/unix/ft2unix.h \ /usr/local/modules/freetype/include/ft2build.h /usr/bin/install -c -m 644 ./builds/unix/ftconfig.h \ /usr/local/modules/freetype/include/freetype2/freetype/config/ftconfig.h /usr/bin/install -c -m 644 /opt/src/lamp/freetype-2.2.1/objs/ftmodule.h \ /usr/local/modules/freetype/include/freetype2/freetype/config/ftmodule.h /usr/bin/install -c -m 755 ./builds/unix/freetype-config \ /usr/local/modules/freetype/bin/freetype-config /usr/bin/install -c -m 644 ./builds/unix/freetype2.m4 \ /usr/local/modules/freetype/share/aclocal/freetype2.m4 /usr/bin/install -c -m 644 ./builds/unix/freetype2.pc \ /usr/local/modules/freetype/lib/pkgconfig/freetype2.pc (报错)
解决办法:
mkdir /usr/local/freetype/include/freetype2/freetype/internal #需要在freetype的安装目录下创建internal 这个目录然后, make install
7、安装autoconf
cd /usr/local/src/autoconf-2.61 ./configure make && make install
8、安装GD库
cd /usr/local/src/gd-2.0.35 ./configure --prefix=/usr/local/gd --enable-m4_pattern_allow --with-zlib=/usr/local/zlib/ --with-jpeg=/usr/local/jpeg/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/ #>--enable-m4_pattern_allow \ #>--with-zlib=/usr/local/zlib/ \ (指定zlib库文件的位置) #>--with-jpeg=/usr/local/jpeg/ \ (指定jpeg库文件的位置) #>--with-png=/usr/local/libpng/ \ (指定png库文件的位置) #>--with-freetype=/usr/local/freetype/(指定freetype字体库的位置) make
出现错误:
make[2]: *** [gd_png.lo] Error 1 make[2]: Leaving directory `/usr/local/src/gd-2.0.35' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/src/gd-2.0.35' make: *** [all] Error 2
 
分析:这个问题是因为gd库中的gd_png.c这个源文件中包含png.h时,png.h没有找到导致的。 
解决: 
[root@localhostgd-2.0.35]# find / -name gd_png.c 
/usr/local/src/gd-2.0.35/gd_png.c 
[root@localhostgd-2.0.35]# find / -name png.h 
/usr/local/libpng/include/png.h 
[root@localhostgd-2.0.35]# vi gd_png.c 
在编译文件里
vi gd_png.c
将include “png.h” 改成 include “/usr/local/libpng/include/png.h” 
其中/usr/local/libpng/为libpng安装路径。
make install
9、安装Apache
cd /usr/local/src/httpd-2.2.9 ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite #> --enable-so \ (以动态共享对象编译)让apache核心装载DSO #>--enable-rewrite (基于规则的URL操控)启用重写功能 make make install
将apache加入开机启动
cp -vRp /usr/local/apache2/bin/apachectl /etc/init.d/httpd chmod +x /etc/init.d/httpd
添加apache服务↓
chkconfig --add httpd
执行chkconfig时,如果出现如下错误: 
不支持 chkconfig service httpd does not supportch kconfig apache 
解决方法: 
用chkconfig将自编译设置为系统服务的时候,httpd 服务不支持chkconfig。 
解决过程如下: 
1.编辑
vim /etc/init.d/httpd #!/bin/bash 添加: #chkconfig:345 61 61 #description:Apache httpd
保存后再执行chkconfig
chkconfig --add httpd chkconfig --list|grep httpd chkconfig --level 2345 httpd on service httpd start
启动服务时,如果出现如下错误:
httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName
解决方法:
[root@localhosthttpd-2.2.9]# vi /usr/local/apache2/conf/httpd.conf
找到#ServerName localhost.com:80 把#去掉,再重启apache即可没事了
配置Apache
启动Apache # /usr/local/apache2/bin/apachectl start 关闭Apache # /usr/local/apache2/bin/apachectl stop 查看80端口是否开启 # netstat -tnl|grep 80
访问Apache服务器 
 
防火墙 
打开防火墙80端口,以使外部网络可以访问
vi /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT service iptables restart
外部网络通过浏览器访问
编译安装mysql
(最新版本都需要cmake编译安装) 
如何清除 cmake 编译脚本 
删除文件夹下的文件 rm CMakeCache.txt 
重新编译即可。 
编译安装 MySQL5.5.20
[root@localhostsrc]# groupadd mysql #添加一个mysql标准组 [root@localhostsrc]# useradd -g mysql mysql #添加mysql用户并加到mysql组中 [root@localhostlinux]# tar -zxvf mysql-5.5.20.tar.gz [root@localhostlinux]# cd /usr/local/src/mysql-5.5.20 [root@localhostmysql-5.5.20]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_INNODB_MEMCACHED=1 -DWITH_DEBUG=OFF -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=ON -DMYSQL_MAINTAINER_MODE=OFF -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_TCP_PORT=3306 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 #cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ (安装根目录) #-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \ (UNIX socket文件) #-DDEFAULT_CHARSET=utf8 \ (默认字符集) #-DDEFAULT_COLLATION=utf8_general_ci \ (默认编码) #-DWITH_EXTRA_CHARSETS=utf8,gbk \ (额外的编码) #-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \(启用PERFSCHEMA引擎支持) #-DWITH_FEDERATED_STORAGE_ENGINE=1 \ (启用FEDERATED引擎支持) # -DWITH_PARTITION_STORAGE_ENGINE=1\ (启用PARTITION引擎支持) #-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ (启用ARCHIVE引擎支持) #-DWITH_READLINE=1 \(使用readline功能) #-DMYSQL_DATADIR=/usr/local/mysql/data \ (数据库数据目录) #-DMYSQL_TCP_PORT=3306 (TCP/IP端口) **mysql常用参数** # -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 # -DMYSQL_DATADIR=/usr/local/mysql/data \ #数据文件存放位置 # -DSYSCONFDIR=/etc \ #my.cnf路径 # -DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎 # -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎 # -DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎 # -DWITH_READLINE=1 \ #快捷键功能(我没用过) # -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ #连接数据库socket路径 # -DMYSQL_TCP_PORT=3306 \ #端口 # -DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据 # -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装支持数据库分区 # -DEXTRA_CHARSETS=all \ #安装所有的字符集 # -DDEFAULT_CHARSET=utf8 \ #默认字符 make make install
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
修改配置文件
[root@localhostmysql-5.5.20]# vi /etc/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data log-error=/usr/local/mysql/data/error.log pid-file=/usr/local/mysql/data/mysql.pid
初始化数据库文件
[root@localhostmysql-5.5.20]# /usr/local/mysql/scripts/mysql_install_db --defaults-flie=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid --user=mysql
权限设置↓(进入MySQL文件下)
cd /usr/local/mysql [root@localhostmysql]# chown -R root . [root@localhostmysql]# chown -R mysql data [root@localhostmysql]# chgrp -R mysql .
将mysql加入开机启动
[root@localhostmysql]# cp -vRp support-files/mysql.server /etc/init.d/mysqld [root@localhostmysql]# chmod +x /etc/init.d/mysqld
添加mysql服务
[root@localhostmysql]# chkconfig --add mysqld [root@localhostmysql]# chkconfig --level 345 mysqld on [root@localhostmysql]# service mysqld start
无法启动? 
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法 
原因:没有初始化权限表
[root@localhost ~]# cd /usr/local/mysql [root@localhost mysql]# chown -R mysql.mysql . [root@localhost mysql]# su - mysql [mysql@localhost ~]$ cd /usr/local/mysql [mysql@localhost mysql]$ scripts/mysql_install_db [mysql@localhost mysql]$ /usr/local/mysql/bin/mysqld_safe --user=mysql & [root@localhostmysql]# service mysqld start 或者 [mysql@localhost mysql]$ /etc/init.d/mysqld start
配置mysql
[root@localhostmysql]# bin/mysql
如果mysql进不去MySQL:
ln -s /usr/local/mysql/bin/mysql /usr/bin
有时候安装好MySQL程序的时候,直接输入命令MySQL或mysqladmin会发现提示命令不存在,这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:
ln -s /usr/local/mysql/bin/mysql(mysqladmin) /usr/bin
mysql> deletefrom mysql.user where Host!='localhost'; #(只留允许本机登录的帐号) mysql> flushprivileges; #(刷新授权表) mysql> setpassword for 'root'@'localhost'=password('123456'); #(设置用户密码) mysql> exit [root@localhostmysql]# bin/mysql -h localhost -u root -p123456 #(登录mysql)
编译安装php
[root@localhostlinux]# tar -zxvf php-5.3.22.tar.gz [root@localhostlinux]# cd /usr/local/src/php-5.3.22 [root@localhostphp-5.3.22]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql/ --with-libxml-dir=/usr/local/libxml2/ --with-png-dir=/usr/local/libpng/ --with-jpeg-dir=/usr/local/jpeg/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets **如果出错,将 --with-gd=/usr/local/gd/ 改为 --with-gd 系统gd** #./configure --prefix=/usr/local/php \ #--with-apxs2=/usr/local/apache2/bin/apxs \ #--with-mysql=/usr/local/mysql/ \ #--with-libxml-dir=/usr/local/libxml2/ \ #--with-png-dir=/usr/local/libpng/ \ #--with-jpeg-dir=/usr/local/jpeg/ \ #--with-freetype-dir=/usr/local/freetype/ \ #--with-gd=/usr/local/gd/ \ #--with-mcrypt=/usr/local/libmcrypt/ \ #--with-mysqli=/usr/local/mysql/bin/mysql_config \ #--enable-soap\ (变量激活SOAP和web services支持) #--enable-mbstring=all \ (使多字节字符串支持) #--enable-sockets (变量激活socket通讯特性) [root@localhostphp-5.3.22]# make [root@localhostphp-5.3.22]# make install [root@localhostphp-5.3.22]# cp -vRp php.ini-development /etc/php.ini [root@localhostphp-5.3.22]# vi /usr/local/apache2/conf/httpd.conf 找到: AddType application/x-compress .Z AddType application/x-gzip .gz .tgz 在后面添加: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .php5 找到: <IfModule dir_module> DirectoryIndex index.html </IfModule> 添加:在index.html后面添加index.php就行啦! [root@localhostphp-5.3.22]# service httpd stop [root@localhostphp-5.3.22]# service httpd start [root@localhostphp-5.3.22]# vi /usr/local/apache2/htdocs/phpinfo.php 添加内容为: <?php phpinfo(); ?>
打开浏览器进行访问,如果出现PHP版本界面,及安装成功。 
http://xxx.xxx.xxx.xxx./phpinfo.php
 
 
安装PHP扩展xcache
xcache模块可以缓存 php运行时编译生成的opcode可以加速php程序的效率,安装xcache和安装 memcache方法类似,都是以扩展的方式安装,PHP任何扩展方法基本上都是如下,所以不需要特意去找xxx扩展的文档.
与之类似的加速模块还有eaccelerator和apc,想了解的可以参考《 eaccelerator 加速》、《 apc 加速》
安装PHP扩展xcache
 
1
2
3
4
5
# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
# tar -xvf xcache-3.2.0.tar.gz
# cd xcache-3.2.0
# ./configure –with-php-config=/usr/local/php/bin/php-config  –enable-xcache
# make && make install
 
会生成类似如下信息
 
1
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
 
所有的模块都会生成到这个目录下
编辑php配置文件
 
1
2
# vim /usr/local/php/etc/php.ini
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
 
重载PHP
 
1
# service php-fpm reload
 
如果是你Apache+PHP模式,那么重启Apache即可.
 
1
2
3
# service httpd restart
或者
# /usr/local/apache-2.2.27/bin/apachectl restart
 
 
Ulimit –t 10000   调整线程  默认为1024
常用的测试工具
ab/http_load/webbech/siege
 
vmstat –l
 
 
 
 
 
邮件服务:
SMTP  协议/ POP3 / IMAP4 / UUTP
 
MTA: 邮件传输代理
Sendmail/qmail/postfix/exim/exchange
SASL:
Cyrus-sasl
Courier
MDA: 邮件投递代理
Procmail / maildrop
MRA : 邮件检索代理
Cyrus-imap/dovecot
MUA :邮件用户代理
Outlook,express,outlook,foxmail
Thunderbird,evolution,mutt
 
Webmail:
Openwebmail,squiremail,extmail
 
配置安装邮件系统
Postfix+SASL(courier+authlib) + mysql 
Dovecot + mysql
Webmail+extman+httpd
 
安装和配置postfix
http://www.postfix.org/   Postfix
groupadd   -g  2525   postfix
useradd   -g    postfix   -u   2525   -s   /sbin/nologin   -M   postfix
groupadd   -g   2526   postdrop
useradd    -g   postdrop   -u  2526   -s   /sbin/nologin  -M  postdrop
 
saslrpm 安装      http://download.csdn.net/detail/stuartjing/3694178
make makefiles 'CCARGS=-DHAS_MYSQL  -I/usr/local/mysql/include  -DUSE_SASL_AUTH  -DUSE_CYRUS_SASL –I/usr/include/sasl  -DUSE_ITS''AUXLIBS=-L/usr/local/mysql/lib  -lmysqlclient -lz  -lm  -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'
make
make isntall
 
postfix start
master:/etc/postfix/master.cf
main:/etc/postfix/main.cf
postconf:
-d:显示默认的配置
 
 
ftp:相关内容
服务器端:
vsftpd/proftpd/wu-ftpd/pureftpd/filezila
客户端:
ftp/lftp/gftpd/filezila
 
vsftpd:
/etc/vsftpd  :配置文件目录
/etc/init.d/vsftpd : 服务脚本
/usr/sbin/vsftpd:主程序
 
rpm -qa | grep vsftpd  查看是否安装vsftp
yum install vsftpd  安装vsftp
service vsftpd start  启动
rpm -ql vsftpd  查看生成的文件
chkconfig vsftpd on
 
Linux 使用 tcpdump 抓取网络数据包示例
配置vsftpd
提供rpc 服务的程序:portmap
yum install nfs-utils
yum install rpcbind
service rpcbind start
service nfs  start
 
showmount -e NFS_SERVER:查看NFS服务器“导出”各文件系统
客户端使用mount命令挂载
mount -t nfs  NFS_SERVER:/path/to/some_export  /path/to/
some_where
 
服务器端:
mkdir /shared
vim /etc/exports
/shared 192.168.2.156/16(ro)
service nfs restart
showmount -e 192.168.225.238
客户端:
mount -t nfs 192.168.225.238:/shared  /mnt/nfs
 
文件属性(ro,rw,sync,async,root_squash:将管理员映射成来宾账号,no_root_squash,all_squash,anonuid,anongid)
setfacl 可以以更详细的划分权限
 
让mountd,rquotad 监听在固定端口上
vim /etc/sysconfig/nfs
monutd_port=892
 
rpcinfo -p localhost  查看当前监听的端口
 
 
LINUX:网络防火墙
netfilter: 框架
iptables: 数据报文过滤,net,mangle等规则生成的工具
 
hook function :钩子函数
prerouting
input
output
forward
postrouting
 
filter(过滤):
INPUT
OUTPUT
FORWARD
 
nat(地址转换):
PREROUTING
POSTROUTING
 
mangle(拆开,修改,封装)
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
 
raw():
OUTPUT
PREROUTING
 
 
iptables [-t TABLES] COMMAND  CHAIN [num]  匹配标准  -j  处理办法
 
匹配标准:
通用匹配:
-s | —src : 指定原地址
-d | —dst : 指定 目标地址
-p |  (tcp | udp | icmp ) :指定的协议
-i  INTERFACE  :指定数据报文流入的接口,可用于定义标准莲(INPUT,PREROUTING,FORWARD)
-o INTERFACE  :  指定数据报文流出的接口 ,可用于定义标准莲(OUTPUT,POSTROUTING , FORWARD)
扩展匹配:
1.隐式匹配:不同特别指明有那个模块进行的扩展,因此使用-p(tcp|udp|icmp)
-p  tcp :
—sport PORT[PORT] :  源端口
—dport PORT[PORT] : 目标端口
  --tcp-flags mask comp : 只检查mask 指定的标示位
--tcp-flags SYN,ACK,FIN,RST SYN
-p icmp:
—icmp-type
0:echo-reply
8:echo-request
-p  udp 
—sport
—dport
2.显示匹配:-m  指明扩展模块
-m  EXESTION —spe-opt
state :状态扩展
结合ip_conntrack 追踪会话状态
NEW : 新连接请求
ESTABLESHED : 已建立的连接
INVALID: 非法连接请求
RELATED:想关联的
-m state  —state NEW, ESTABLESHED  -j  ACCEPT
-m multiport:离散多端口匹配扩展
—source-port
—destinaion-port
-m ipragne
—src-range
—dst-range
-m connlimit:连接数限定
! —connlimit-above  n
iptables  -A  INPUT  -d  192.168.225.239  -p tcp —dport 80 -m  connlimit  ! —connlimit-above 2 -j  ACCEPT
-m limit  :
—limit RATE
—limit-brust  7
-m string :
—algo ( bm  |  kmp )
—string “string”  
 
-j  TARGET
ACCEPT
DROP
REJECT
LOG
 
命令:
管理规则
-A : 附加一条规则,添加在链的尾部
-I  CHAIN [num] : 插入一条规则,插入为对应CHAIN上的第num条
-D   CHAIN [num] :  删除指定链中第num条规则
-R   CHAIN[num] : 替换特定的规则
管理链:
-F  [CHAIN]: flush 用于清空指定规则链 , 删除表中的所有链
-P CHAIN : 设定指定链的默认策略
-N :自定义一条新的空链
-X : 删除一个自定义空链
-Z :  置零所有计数链上的计数
-E : 重命名自定义的链
查看类:
-L : 显示指定表中的所有规则  iptables  -L -n -v -x
-n : 以数字格式显示主机地址和端口号
-v : 显示详细信息
-x  : 显示精确值
—line-numbers :  显示规则号码
动作:
ACCEPT :放行
DROP : 丢弃
REJECT : 拒绝
DNAT : 目标地址转换
SNAT : 原地址转换
REDIRECT : 端口重定向 
MASQUERADE: 地址伪装
LOG : 日志
MARK :  标记
保存:
方法一:service iptables save
方法二:
iptables-save > /etc/syscofig/iptables.2013
iptables-restore <  /etc/syscofig/iptables.2013
 
 
lsmod  | grep ip
 
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWORD DROP
iptables -t filter -A INPUT -s 192.168.1.105/16 -d 192.168.225.239  -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.225.239 -d 192.168.1.105/16  -p tcp --sport 22 -j ACCEPT
 
iptables -I INPUT -d 192.168.225.239 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -s 192.168.225.239 -p tcp --sport 80 -j ACCEPT
 
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1  -i lo -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1  -o lo -j ACCEPT
 
iptables -A OUTPUT -s 192.168.225.239 -p icmp --icmp-type 8 -j ACCEPT 
iptables -A INPUT -d 192.168.225.239 -p icmp --icmp-type 0 -j ACCEPT 
 
 
iptables -A INPUT -d 192.168.225.239 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.225.239 -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
 
一条规则放行
iptables -A INPUT -d 192.168.225.239 -m state —state ESTABLISHED -j ACCEPT
 
ipatbels -A INPUT -d 192.168.225.239  -p tcp -m state —state NEW,RELATED -j ACCEPT
ipatbels -A OUTPUT -s 192.168.225.239  -p tcp -m state —state ESTABLISHED,RELATED -j ACCEPT
 
iptables -A INPUT -d   192.168.225.239  -p tcp -m multiport —desinaion-ports 21,22,80  -m state  —state NEW -j ACCEPT
 
iptables -A INPUT -p tcp -m iprange -src-range 192.168.225.239-192.168.225.255 —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
 
利用iptables的recent模块抵御DOS攻击
ssh:远程连接
iptables -I INPUT -p tcp —dport 22 -m connlimit —connlimit-above 3 -j DROP
iptables -I INPUT  -p tcp —dport 22 -m state —state NEW -m recent —set —name SSH
iptables -I INPUT -p tcp —dport 22 -m state —state NEW  -m recent —update —sencond 300 —hitcount 3  -name SSH -j DROP 
 
 
cat /proc/net/ip_contrack |nf_contrack
cat /proc/sys/net/ipv4/ip_conntrack_max
iptstate  查看顶部显示的IP表状态表条目
modprobe 内核程序移出 或者 增加
lsmod 查看模块
装载模块
vim /etc/sysconfig/iptables-config
 
 
iptables 重启会清空所有的表
重新加载 /etc/sysconfig/iptables
 
service iptables save  保存规则
 
内核编译:
配置: .config (/proc/cpuinfo,lspci,lsusb,hal-device)
 
 
CentOS 更改 yum 源与更新系统
 
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[2] 进入yum源配置文件所在文件夹
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[3] 下载163的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
[4] 运行yum makecache生成缓存
yum clean all
[root@localhost yum.repos.d]# yum makecache
[5] 更新系统
[root@localhost yum.repos.d]# yum -y update
[6] 安装vim编辑器
[root@localhost ~]# yum -y install vim*
 
 
samba 服务: 共享 文件服务器
/etc/rc.d/init.d/smb
/etc/samba
vim /etc/samba/smb.cnf
[tools]
       comment = Public Stuff
       path = /share/test
       public = yes
       writable = yes
       printable = no
       write list = +staff
testparm  测试语法写的是不是有问题
service smb start
添加一个用户
smbpasswd -a luodongyun
 
 
 
mysql 数据库
http://www.yesky.com/imagesnew/software/mysql/manual_Reference.html  中文手册
单进程 多线程
 
约束:
域约束:数据类型约束
外键约束:引用完整性的约束
主键约束:某字段能卫衣标示此字段所属的实体,并且不能为空,一个表只有一个主键
唯一约束:每行的字段不允许出现相同值,可以为空 ,一张表可以有多个
检查性约束:age:int
数据查询和储存:
存储管理器:
权限及完整性管理器
事务管理器
文件管理器
缓冲区处理器
查询管理器:
DML解释器:
DDL解释器:
查询执行引擎:
MariaDB
Percona
 
用户密码修改:
1.mysqlamdin -u USERNAME  -h HOSTNAME password ‘newpass’ -p
2.mysql>SET PASSWORD FOR ‘USER’@‘HOSTNAME’=PASSWORD(‘PASS’);
3.mysql>UPDATE mysql.user SET PASSWORD=PASSWORD(‘PASS’) WHERE CONDITION ; FLUSH PRIVILEGES;
 
mysql 源码安装:
wget http://www.cmake.org/files/v2.8/cmake-2.8.5.tar.gz
tar -zxv -f /root/cmake-2.8.4.tar.gz
cd cmake-2.8.4
./configure
make && make install
 
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.37.tar.gz
groupadd  mysql
useradd -g mysql -s /bin/false -M mysql
 
 
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
 
make && make isntall
 
如果出错:
yum -y install ncurses-devel
make clean
rm -f CMakeCache.txt
rm -rf /etc/my.cnf
 
 
mysql 客户端工具:
mysql
mysqldump
mysqladmin
mysqlcheck
mysqlimport
mysql 非客户端工具:
myisamchk
myisampack
 
cd /usr/local/mysql
chown  -R  :mysql   .
scipts/mysql_install_db   —user=mysql
cp support-files/my.cnf   /ect/my.cnf
cp support-files/mysql.server   /etc/init.d/mysqld
chkconfig —add  mysqld
chkconfig  —list  mysqld
 
service mysqld start
 
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
./  etc/profile.d/mysql.sh
echo $PATH
 
删除两个匿名用户
drop user ''@'localhost' ;
drop user ''@'bogon' ;
修改密码:
update user set password=PASSWORD(‘123456’) where user=‘root’;
 
show variables;
 
 
Myisam:
每表三个文件:
.frm   表结构
.MYD  表数据
.MYI   表索引
InnoDB:
所有表共享一个表空间文件:建议每表一个独立的表空间
.frm 表结构
.ibd  表空间
mysql :  \?
—user  -u
—host  -h
 
mysql>
载入sql
批处理模式
\.  /tmp/test.sql   或者  mysql  -uroot -p  <  test.sql
mysql  命令两类:
客户端命令:
服务器语句命令:
help COMMAND 获取帮助
\d   定义语句结束符 
\g   无论语句结束符是什么,直接将语句送到服务器端执行
mysqladmin :
create database ;
drop databases;
ping
processlist
status
—sleep
—count
extended-status:显示状态量
variables:显示服务器变量
flush-priileges:让mysql 重读授权表
start-slave : 启动从服务器的复制线程
sql  thread
io   thread
stop-slave: 停止复制线程
 
show engines : 显示引擎
show table status like ‘user' : 显示特定表的引擎
/etc/mys.cnf->/etc/mysql/my.cnf->$MYSQL_HOME/my.cnf -> —-default-extra-file=/path/to/somefile  -> ~/.my.cnf
 
mysqld  —help —verbose  :查看可以配置的命令
 
出错:
1.killall mysqld
 
mysql > show  collation ;
mysql> show character set ;
 
last_insert_id(); 可以获得上次执行的结果
 
 
SET GLOBAL  sql_mode = ‘static_all_tables’;
 
查看状态:
show table status like ‘table’;
 
显示表上的索引:
SHOW INDEXES FROM TABLE;
 
创建数据库:
help create database;
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name CHARACTER SET [=] charset_name  COLLATE [=] collation_name
 
删除数据库:
help drop database;
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
 
创建表(有3种方法):
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(col_name col_defination ,constarct)
单字段:
PRIMARY KEY
UNIQUE KEY
单或多字段:
INDEX
 
 
create table tb1(id int unsigned not null auto increment primany key , name varchar(20) not null );
create table tb2(id int unsigned not null auto increment, name varchar(20) not null ,primany key(id) ,unique key(name) , index(age) );
 
仿照一张表创建另一张表:
create table tb2 select * from tb1 where id <= 2 ;
 
仿照一张表创建一张空表:
create table tb3 like tb1 ;
 
 
键也称为约束,可用于索引,属于特殊的索引,B+Tree
 
创建索引:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX ndex_name [index_type] ON tbl_name (index_col_name,…) ;
 
修改表:
help alter table
alter table tb3 add starttime date
alter table tb3 rename to tb3_1 ;
 
外键(在数据字段类型统一的情况下)(不建议使用):
alter table student add foreign key foreign_cid(cid) REFERENCES  course(id);
 
创建索引:
help create index ;
show index from student  ;
create index name_on_student on student (name) ;
 
DML:
SELECT
UPDATE
INSERT
DELETE
查询语句类型:
简单查询
select * from tb_bame ;
select [distinct]
多表查询
交叉连接:笛卡尔乘积
select * from student,course
自然连接
select * from student,course where student.cid = course.id ;
外链接:
left join ..on
select * from student left join course on student.cid = course.id ;
right join .. on
select * from student right join course on student.cid = course.id ;
 
自连接:
select * from student as c , students as s where c.tid = s.sid ;
子查询
比较操作中使用子查询
select * from students where age > (select avg(age) from student );
in()
select * from students where age in (select age from student );
在form 中使用子查询
select * from (select * from student ) as t where t.age > 20 ;
UNION 联合查询:s
select * from student UNION select * from teacher ;
 
创建视图:
help create view ;
create view sct  as  select name.cname,name from  student,teacher,course where student.cid = course.id  and course.tid = teacher.id ;
 
查看表怎么建立的语句:
show create table student
 
清空一张表:
TRUNCATE  tb_name ;
 
锁表:
lock table ;
 
 
隔离级别:
READ UNCOMMITED : 读  未提交
READ COMMITTED :  读  提交
REPATABLE READ :  可重读
SERIABLIZABLE : 可串行
 
修改变量:
SET tx_isolation = “READ-COMMITTIED”
开始事务:
START TRANSACTION ;
提交:
COMMIT;
回滚:
ROLLBACK
 
select @@autocommit
关闭自动提交:
SET autocommit=0 ;
设置保存点:
SAVAPOINT point_name ;
回滚到保存点:
ROLLBACK TO point_name ;
 
MYSQL 用户管理:
创建用户
help create use ;
create user amao@‘%’ indentfied by ‘haha’;
权限:
help grant
 
如果忘记mysql密码:
service mysqld stop
vim /etc/init.d/mysqld
找到start 下面 —datadir  前面加 —-skip-grant-tables  —-skip-networking
update table mysql.user set password=PASSWORD(‘pass’) where user=‘root’
然后再把上面的参数取消
 
错误日志:
一般查询日志:
general_log
general_log_file
log
log_output
 
慢查询日志:
long_query_time
log_slow_queries
slow_query_log
slow_query_log_file
二进制日志:任何引起或可能引起数据库变化的操作
复制,即时点恢复
mysqlbinlog
重放
查看当前的二进制文件
SHOW MASTER STATUS ;
SHOW BINLOG  EVENTS IN “mysql-bin.00005”;
mysqlbinlog “mysql-bin.000005”;
删除二进制文件:
HELP PURGE
PURGE LOGS TO ‘mysql-bin.00003’;
SHOW BINARY LOGS;
中继日志:
从服务上,从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件
事务日志:
事务性储存引擎用于保证原子性,一致性,隔离性和持久性
innodb_flush_log_at_trx_commit  :
0: 每秒同步,并执行磁盘flush操作
1: 每事务同步,比执行磁盘flush操作
2: 每事务同步,但不执行磁盘flush
任何产生IO的地方都是可以优化提升的地方
 
MYISAM:
不支持事务
表锁
不支持外键
B树索引,FULLTEXT索引,空间索引
支持表压缩
INNODB:
事务
行级锁
B树索引,聚簇索引,自适应hash索引
表空间,raw磁盘设备
mysql的备份和还原:
备份类型:
1.热备份 、 温备份 、冷备份
热备份:读写操作不受影响
温备份:能读不能写
冷备份:关机备份
2.物理备份,逻辑备份
物理备份:复制数据文件,速度快,
逻辑备份: 将数据导出文本文件中,速度慢,丢失精度,方便使用文本文件操作,可移植性强
3.完全备份,差异备份,增量备份
完全备份:备份全部数据(整表或整数据库)
增量备份:仅备份上次完全备份或增量备份的数据
差异备份:备份上次完全备份的数据
还原:
备份什么?
数据,二进制日志,事务日志,配置文件
热备份:
MYISAM:温备份
InnoDB:xtrackbackup,mysqldump,mysqlhotcopy
冷备份:
设置成主从服务器,从 从服务器上备份
mysql备份工具:
mysqldump : 逻辑备份,myisam(温) innodb(热)
mysqlhotcopy:物理备份工具,温备份
文件系统工具:
cp: 冷备
lv:逻辑卷的快照功能,几乎热备
mysql> flushs tables ;
mysql > lock tables ;
创建快照,释放锁,而后复制数据
第三方工具:
ibbckup:商业工具
xtrackbackup:开源工具
 
mysql> flush tables with read lock;
mysql> flish logs ;
mysql> show binary logs ;
mysqldump DB_NAME(tb1,tb2)
备份:mysqldump -uroot -p testdb > testdb.sql
导入:mysql -uroot -p testdb < testdb.sql
unlock tables;
 
—-master-data = (0|1|2)
0 : 不记录二进制文件 日志及数量
1 : 以 change master to 的方式 记录位置 ,可用于恢复后直接从服务器启动
2 : 以 change master to 记录位置,默认被注释掉的
mysqldump -uroot -p --master-data=2  testdb  > testdb-`date +%F-%H-%M-%S`.sql
 
—-lock-all-tables :锁定所有表
—-flush-logs : 执行日志flushs
 
如果指定库中所有表都是innodb ,可以使用—single-transaction启动热备
—-all-databases: 备份所有库
—-databases DB_NAME : 备份指定库
 
备份策略: 每周完全+每日增量
完全备份:mysqldump
增量备份:备份二进制日志文件,每天备份之前先(flush logs)
mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --lock-all-tables > all.sql
less all.sql
purge binary logs to ‘mysql-bin.000004’;(删除二进制日志,先备份下以前的再删除)
show binary logs ;
flush logs ;
mysqlbinlog mysql-bin.000005  > ~/mon-increment.sql
 
还原:
mysql -uroot -p < all.sql
mysql -uroot -p < mon-increment.sql
 
INNoDB 热备份:
—single-transaction
—flush-logs
—events
—routines
—triggers
—master-data={0|1|2}
保存为文本:
select * into outfile ‘/tmp/t1.txt’  from t1
导入:
load data infile  ‘/tmp/t1.txt’  into table t1 ;
 
几乎热备:lvm
SNAPSHOT
前提:
1.数据文件要在逻辑卷
2.此逻辑卷所在的必须有足够的快照卷空间
 
 
使用第三方备份工具:
https://www.percona.com/
 
xtrabackup + 二进制日志 备份
innobackupex —-user=root —-password=123456 /backup
innobackupex —-apply-log /backup/2017-09-04_00-50-31
恢复:
innobackupex —-copy-back /backup/2017-09-04_00-50-31
mysqlbinlog /root/mysql-bin.000004  > /tmp/adb.sql
mysql> set sql_log_bin=0 ;
mysql> SOURCE /tmp/adb.sql
mysql> set sql_log_bin=1 ;
 
做下增量备份:
innobackupex —-user=root —-password=123456 /backup
innobackupex —-incremental /backup —-incremental-basedir=/backup/2017-09-04_01-18-35
 
 
 
集群:
rr轮调/wrr加权轮调
 
cluser:
LB 集群
HA 集群 : 高可用集群
HP 集群 : 高性能计算  超级计算机集群
并行处理集群:分布式文件系统  将大任务分割为小任务,分别进行处理的机制
 
 
 
调度算法 :rr / wrr
hardware:
F5 , BIGIP ,A10 , Citrix ,Netscaler
software :
四层实现:LVS  七层实现: nginx(http,smtp,pop3,imap) , haproxy (http , tcp)
LVS :  linux virtual server
有三种类型:
NAT : 地址转化
集群节点需要和direct在同一IP网络中
RIP 通常是私有地址,仅用于各集群节点间的通信
director 位于 client 和 server 之间,并负责处理进出所有通信
realserver 必须将网关指向DIP
支持端口映射
realserver 可以使用任意操作系统
较大规模应用中,director 易成为系统瓶颈
DR :  直接路由
集群节点跟director 必须在同一个物理网络中
RIP 可以使用公用网址,实现便捷的远程管理和监控
director 仅负责处理入站请求,响应报文则由director直接发往客户端
realserver集群节点一定不能将网关指向DIP
TUN :  隧道
集群节点可以跨越互联网
RIP必须是公网地址
director 仅负责处理入站请求,响应报文则由director直接发往客户端
realserver 网关不能指向director
只有支持隧道OS才能用于realserver
不支持端口映射
iptables/netfilter 和 lvs  不能同时用
ipvasadm :
ipvs:
 
动态调度方法:
lc:最少连接
active*256 + inactive  谁的小选谁
wlc:加权最少连接
(active*256 + inactive) / weight
sed:最短期望延迟
(active + 1) *256 / weight
nq :
LBLC:基于本地最少连接
LBLCR:基于本地的带复制功能的最少连接
默认方法:wlc
 
先配置directer(设置另个网卡,一个桥接,一个只读主机)
lvs nat 连接:
setup
ifconfig eth1
service network restart
grep -i ‘vs’ /boot/config——…
yum install ipvsadm
然后配置readserver:
准备两个realserver(都是只读主机网卡)
setup 配置:和directer上的默认网关192.168...相同,ip写192.168...自己定义
同步时间
开启web服务并检查curl http://localhost
各主机之间相互ping下,看看通不通
在directer 上curl http://192.168.225.239  http://192.168.225.240
如果不同检查下防火墙  iptales -L -n  清空:iptables -F
开始集群:
ipvsadm -A -t 172.16.201.131:80 -s rr
ipvsadm -a -t 172.16.201.131:80 -r 192.168.225.239 -m
ipvsadm -a -t 172.16.201.131:80 -r 192.168.225.240 -m
ipvsadm -L -n
保存
service ipvsadm save 
清空
ipvsadm -C
重新加入
ipvsadm -R <  /etc/sysconfig/ipvsadm
 
 
 
网卡间的转换要打开
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
 
调整轮调方式:
ipvsadm -E -t 172.16.201.131:80 -s wrr
ipvsadm -e -t 172.16.201.131:80 -r 192.168.225.239 -m -w 3
ipvsadm -e -t 172.16.201.131:80 -r 192.168.225.240 -m -w 1
service ipvsadm save
 
注意:各节点时间偏差不能超过1秒钟  NTP  ntpdate
service ntpd stop
ntpdate 192.168.2.156
service ntpd start
 
 
ipvsadm用法:
管理集群服务
添加:-A | -t|u|f service-address [-s scheduler]
-t : TCP 协议的集群
-u : UDP 协议的集群
-f : firewallMark 防火墙标记
修改:-E
删除:-D -t|u|f service-address
#ipvsadm -A -t 172.168.100.1:80 -s rr
管理集群服务的RealServer
添加:-a|e -t|u|f service-address -r server-address
               [-g|i|m] [-w weight] [-x upper] [-y lower]
修改: -e
添加:-d
#ipvsadm -a -t 172.168.100.1:80 -r 192.168.10.8 -m
#ipvsadm -a -t 172.168.100.1:80 -r 192.168.10.9 -m
查看
-L
-n :数字格式显示主机地址和端口
—stats:统计数据
—rate:速率
—timeout:显示tcp,tcp和udp 的会话时长
-c:显示当前的ipvs连接状态
删除所有集群服务:
-C :清空ipvs规则
保存规则:
-S
#ipvsadm -S > /path
载入此前定义的规则:-R
#ipvsadm  -R < /path
 
 
 
 
 
 
遇见的错误:
bringing up interface eth0: error no suitable device found
 
虚拟机克隆的时候出现的问题,会因为复制了网卡信息导致这个情况,具体处理方式如下
解决办法:
首先,打开/etc/udev/rules.d/70-persistent-net.rules内容如下面例子所示:
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:67:c5:e2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
 
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:75:d1:d7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
也就是说,克隆的时候把网卡的MAC地址也克隆了,导致了有两个系统有相同的MAC地址。于是,要么把DEVICE=eth0改成DEVICE=eth1,然后HWADDR改成00:0c:29:75:d1:d7;要么在70-persistent-net.rules文件中把eth0的地址改成00:0c:29:75:d1:d7,同时把eth1的配置注释掉,然后在ifcfg-eth0中修改HWADDR。之后再service network restart即可。
我使用的方法是 注释eth1 把eth1的 ATTR{address}=="00:0c:29:75:d1:d7"粘贴到要使用的“eth0” 中去
然后修改配置文件  cat /etc/sysconfig/network-scripts/ifcfg-eth0 将其中的 HWADDR= 08:00:27:4f:47:15更改为刚才是信息
 
Bringing up interface eth0:  Error: Unknown connection: 985a38e0-eaa1-476c-bbb8-9c4bf4cd501d
 chkconfig NetworkManager off
chkconfig NetworkManager on
service network restart
 
 
 
DR 模型的lvs :
VIP : MAC(DVIP)
kernel parameter :
arp_ignore:定义接收到ARP 请求时的响应级别;
0:默认,只要本地配置的有响应地址,就予以响应
1:仅在请求的目标地址与请求到达的接口上的时候才响应
arp_announce:  定义将自己地址向外通告时的通告级别
0: 将本机接口上的任何地址向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2 : 仅将与本地接口地址匹配的网络进行通告
VIP(  172.16.100.1 ) / DIP(172.16.100.2) / RIP(172.16.100.8)  必须在同一网络
 
 
 
配置:(三个都使用桥接)
DIrector
eth0: ,DIP  172.16.100.2
Eth0:0 ,VIP :172.16.100.1
 
RS1:
Eth0 ,rip1: 172.16.100.7
Lo,vip :172.16.100.1
RS2:
Eth0 ,rip1: 172.16.100.8
Lo,vip :172.16.100.1
 
Director:
ifdown eth1 down
setup
ip : 172.16.100.2
save
ipconfig eth0:0 172.16.1001.1/16
service network restart
route  add -host  172.16.100.1  dev  eth0:0 
 
 
RS1:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.16.100.7
GATWAY=172.16.0.1
NETMASK=255.255.0.0
BOOTPROTO=none
service network restart
 
RS2:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.16.100.8
GATWAY=172.16.0.1
NETMASK=255.255.0.0
BOOTPROTO=none
service network restart
 
 
相互可以通信:
ping 172.16.100.2  172.16.100.7 172.16.100.8
 
RS1:
cd  /proc/sys/net/ipv4/conf/
sysctl  -w  net.ipv4.conf.eth0.arp_announce=2
cat eh0/arp_announce
sysctl  -w  net.ipv4.conf.all.arp_announce=2
cat all/arp_announce
 
 
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
ifconfig  lo:0  172.16.100.1  broadcast 172.16.100.1  netmask 255.255.255.255
route  add -host  172.16.100.1  dev  lo:0 
 
RS2:
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 
 
 
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
ifconfig  lo:0  172.16.100.1  broadcast 172.16.100.1  netmask 255.255.255.255
route  add -host  172.16.100.1  dev  lo:0 
 
 
ipvsadm  -C
ipvsadm  -A -t 172.16.100.1:80  -s   wlc
ipvsadm  -a  -t 172.16.100.1:80  -r  172.16.100.7  -g -w  2
ipvsadm  -a  -t 172.16.100.1:80  -r  172.16.100.8  -g -w  1
ipvsadm -L -n
 
 
检查 rs 的健康状况:
方式1 :elinks -dump http://192.168.2.130
方式2:echo “ok” >   .health_check.html
elinks -dump http://192.168.2.130/.health_check.html 
elinks -dump http://192.168.2.130/.health_check.html | grep ‘ok’  &>  /dev/null
echo $?
方式3 : curl    —connect—timeout  http://192.168.2.130  &> /dev/null
echo $?
 
脚本:
vim  health_check.sh
#!/bin/bash
VIP=192.168.0.3
CPORT=80
FALL_BACK=127.0.0.1
RIP=(“192.168.10.7”  “192.168.10.8”)
RSTATUS=(“1” “1”)
RW=(‘2’ ’1’)
RPORT=80
let COUNT=0
TYPE=g
 
add(){
ipvsadm  -a -t $VIP:$CPORT  -r  $1:$RPORT -$TYPE -w  $2
[  $?  -eq 0 ] && return 0  || return 1
}
 
del(){
ipvsadm  -d -t $VIP:$CPORT  -r  $1:$RPORT
[  $?  -eq 0 ] && return 0  || return 1
}
 
while ; do
 
for I in $(RS[*])  ; do
if  curl   —connect-timeout 1 http://$I  &> /dev/null ; then
if  [  $ (RSTATUS[$COUNT])   -eq  0  ]; then
      add  $I  $(RW[$COUNT)
[  $?   -eq  0 ]  &&  RSTATUS[$COUNT]   = 1
fi
else
if  [  $ (RSTATUS[$COUNT])   -eq  1  ]; then
del  $I
[  $?   -eq  0 ]  &&  RSTATUS[$COUNT]   = 0
fi
fi
let COUNT++
done
sleep 5
done
 
LVS 持久连接
无论使用算法,LVS持久都能实现哎一定时间内,将来自同一客户端请求派发到以前的RS
持久连接模板(内存缓冲区):
每一个客户端,及分配给他的RS的映射关系
ipvsadm -A | E  -p  timeout :
timeout : 就是设置连接时长
在基于SSL:用到持久连接
PPC:将来自于同一个客户端dui同一个集群服务的请求,始终定向至此前选定的RS ,持久端口连接:
pvsadm  -A -t 172.16.100.1:80  -s   rr  -p  600
PCC: 持久客户端连接,将来自同一客户端对所有端口的请求,始终定向至此前选定的RS,把所有端口统统定义为集群服务,一律向RS转发;(把端口定义为0)
pvsadm  -A -t 172.16.100.1:0  -s   rr  -p  600
PNMPP:持久防火墙标记连接
iptables -t mangle -A PREROUTING -d  192.168.10.3  -i eth0 -p tcp  —dport  80 -j MARK  —set-mark 8
iptables -t mangle -A PREROUTING -d  192.168.10.3  -i eth0 -p tcp  —dport  23 -j MARK  —set-mark 8
pvsadm  -A -f 8  -s rr  -p  600
 
同步更新:
方案一:rsync server (  inotify + rsync server )
方案二:sersync(金山开发的)
共享session :
可以用mamcache, redis
 
 
高可用集群详解
 
资源约束( constraint):
排列约束(  colation ):
资源是否能够运行同一节点:
socre:
正值,可以在一起
负值 , 不能在一起
位置约束:
正值,倾向于此节点
负值,倾向于逃离此节点
顺序约束:
定义资源启动或关闭的次序
 
-inf  :   负无穷
inf : 正无穷
 
 IDE/SATA/SCSI/SAS/USB
 
Messaging Layer
heartbeat
corosync
cman
keepalived
ultramokey
CRM:
haresoure
pacemaker
rgmaager
 
 
高可用集群 hearbeat 安装和配置:(使用host-only)
ha web
node1  , node2
节点名称:/etc/hosts
节点名称必须和uname -n 命令的执行结果一致
ssh 互信通信
时间必须同步
 
ha1 : 172.16.100.6
ha2 : 172.16.100.7
vip : 172.16.100.1
 
 
https://centos.pkgs.org
http://clusterlabs.org/quickstart-redhat-6.html
下载epel  
1.Download the latest epel-release rpm from http://dl. fedoraproject.org/pub/epel/6/x86_64/
 
2.Install epel-release rpm:# rpm -Uvh epel-release*rpm
 
3.Install heartbeat rpm package:# yum install heartbeat
 
 
 
 
 
HA1:
setup
static ip 172.16.100.6
netmask  255.255.0.0
gateway ip 172.16.0.1
service network restart
 
#配置主机名
hostname  node1.mage.com
hostname / uname -n
vim  /etc/sysconfig/network
HOSTNAME= node1.mage.com
#配置双机互信
ssh-keygen  -t   rsa   -f   ~/.ssh/id_rsa  -P  “”
ssh-copy-id -i  ~/.ssh/id_rsa.pub  root@172.16.100.7
ssh  172,16.100.7   ‘ifconfig’
 
#配置域名解析
vim /etc/hosts
172.16.100.6     node1.mage,com   node1
172.16.100.7     node2.mage,com   node2
 
scp   /etc/hosts   node2:/etc/
#清空
iptables -F
 
#配置时间同步
date
ntpdate  172.16.0.1
#建议使用ntpd
service ntpd stop
chkconfig  ntpd off
which  ntpdate
crontab -e
*/5  * * * *  /sbin/ntpdate  172.16.0.1  &>  /dev/null
 
#增加快照
#安装heartbeat
epel  搜索  ,上面有关于一些系统上的所用到的软件的下载
下载安装
 
三个主要配置文件:
1.秘钥文件  600权限  authkeys
2.heartbeat   服务的配置文件  ha.cf
3.资源管理配置文件  haresources
 
cd  /etc/ha.d
ls  /usr/share/doc/heartbeat-2.1.4/
cp  /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresouces}   ./
chmod 600 authkeys
vim authkeys
#auth1
#1  md5  salt
vim  ha.cf
#bcast  eth0
#node   node1.mage,com
#node   node2.mage,com
#ping 172.16.0.1
vim   haresources
ls  /usr/lib/heartbeat
yum install httpd
echo  “node1 test” > /var/ www/html/index.html
先手动启动下
service httpd start
在浏览器上看下
然后关掉
service httpd stop
一定不能开机启动
chkconfi  httpd  off
 
#配置
cd /etc/ha.d/
vim haresources
# node1.mage.com  IPaddr::172.16.100.1/16/eth0  httpd
 
scp   -p  authkeys  haresources  ha.cf   node2:/etc/ha.d/
service heartbeat start
ssh node2  ‘servic hearbeat start’
tail  -f  /var/log/messages
 
 
HA2:
setup
static ip 172.16.100.7
netmask  255.255.0.0
gateway ip 172.16.0.1
service network restart
#配置主机名
hostname  node2.mage.com
hostname / uname -n
vim  /etc/sysconfig/network
HOSTNAME= node2.mage.com
 
#配置双机互信
ssh-keygen  -t   rsa   -f   ~/.ssh/id_rsa  -P  “”
ssh-copy-id -i  .ssh/id_rsa.pub  root@172.16.100.6
ssh  172,16.100.7   ‘ifconfig’
 
#配置域名解析
vim /etc/hosts
172.16.100.6     node1.mage,com   node1
172.16.100.7     node2.mage,com   node2
 
ping node1.mage,com
#清空
iptables -F
 
#配置时间同步
date
ntpdate  172.16.0.1
crontab -e
*/5  * * * *  /sbin/ntpdate  172.16.0.1  &>  /dev/null
#增加快照
 
 
 
 
进行测试:
 
cd /usr/lib/heartbeat
./hb_standby
 
 
挂载一个nfs服务器,作为备用
ifonfig  eth0  172.16.100.10/16   
mkdir  -p v  /web/htdocs
vim /etc/exports
/web/htdocs     172.16.0.0/255.255.0.0 (ro)
service nfs start
showmount -e  172.16.100.10
ssh node2   “/etc/init.d/heartbeat  stop ”  先停node2
service  hearbeat  stop  再停自己
setenforce 0
mount  172.16.100.10:/web/htdocs  /mnt
ls  /mnt
vim haresources
# node1.mage.com  IPaddr::172.16.100.1/16/eth0    Filesystem::172.16.100.10:/web/htdocs::/var/ www/html::nfs   httpd
 
 
 
高可用集群之heartbeat基于crm 进行资源管理
vim  /ha.d/ha.cnf
#crm  respawn
cd  /usr/lib/heartbeat
/usr/lib/heartbeat/ha_propagate同步配置
service  hearbeat  start
ssh  node2  “service heartbeat start”
 
安装hb_gui
passwd  hacluster
hb_gui  &
 
 
基于hb   v2  crm    来实现mysql高可用集群
nfs:samba /  sisci
nfs:mysql,app,data
/etc/my.cnf————->/etc/mysql/mysql.cnf
$MYSQL_BASE
—default-extra-file =
 
 
高可用集群之  corosync 
http://corosync.github.io/corosync/
http://clusterlabs.org/quickstart.html
http://rpmfind.net/
 
需要安装packmaker , heartbeat , ,corosync
cluster-glue
cluster-glue-libs
corosync
corosynclib
hearbeat
hearbeat-libs
libesmtp
pacemaker
pacemaker-acts
pacemaker-libs
resource-angents
 
首先要配置 heartbeat 里面的配置
cd /etc/corosync
cp corosync.conf.example  corosync.conf
vim corosync.conf
可以查看文档怎么配置  http://www.cnblogs.com/xiaocen/p/3705937.html
#amf {
#        mode: disable
#}
#service {
#        ver: 0
#        name: packmaker
#}
 
 
corosync-keygen
scp -p  corosync-keygen  corosync.conf
mkdir /var/log/custer
ssh  node2   mkdir   /var/log/custer
service pacemaker start
service corosync start
 
检查是否正常
grep -e "Corosync Cluster Engine" -e "configurtion file" /var/log/cluster/corosync.log
查看初始化成员节点通知是否正常
grep TOTEM /var/log/cluster/corosync.log
查看有没有错误的产生
grep ERROR: /var/log/cluster/corosync.log
查看pacemaker是否正常启动
grep pcmk_startup  /var/log/cluster/corosync.log
 
安装crmsh
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
 yum -y install crmsh
 
 
#rpm –ivh pssh-2.3.1-15.1.x86_64.rpm
#yum install -y python-dateutil  redhat-rpm-config
#rpm –ivh crmsh-1.2.5-55.8.x86_64.rpm
 
 
 
 
在 CentOS 7下更改yum源与更新系统。
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[2] 进入yum源配置文件所在文件夹
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[3] 下载163的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)
[root@localhost yum.repos.d]# wget http://mirrors. 163.com/.help/CentOS6-Base-163.repo
[4] 运行yum makecache生成缓存
[root@localhost yum.repos.d]# yum makecache
[5] 更新系统(时间比较久,主要看个人网速)
[root@localhost yum.repos.d]# yum -y update
[6] 安装vim编辑器
[root@localhost ~]# yum -y install vim*
 
 
 
 
基于drbd+corosync的高可用mysql(没有看)
 
RHCS架构详解
( LVS 负载均衡, HA 高可用  )
cobbler  自动化程序
去fedora.redhat 网站下载
 
 
 
前提:
1 时间同步
2  名称解析,且主机的主机名和“uname -n ”保持一致
3  iptables 要通 ,配置每个节点yum
 
RHCS :
cman , rgmanager,system-config-cluster
1.每个集群都有唯一的集群名称
2.至少有一个fence设备
3.至少有三个节点,l两个节点的场景中使用qdisk
 
 
alias ha='for I in {1..2} ; do’
ha ssh node$I 'yum -y install scan rgmanager system-config-cluster' ;done
rpm -ql cman | less
man cman_tool
fence_manual -h
 
 
大规模高并发web服务器的相关架构:
复制的作用:
1.实现备份  2.高可用  3.容灾 4.分摊负载
读写分离软件:
mysql-proxy
amobea
数据拆分:
cobar
 
主服务器:
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.54-linux2.6-i686.tar.gz
mkdir /mydata/data
chown mysql.mysql  /mydata/data
tar zxvf mysql-5.5.54-linux2.6-i686.tar.gz
mv mysql-5.5.54-linux2.6-i686.tar.gz mysql
cd mysql
chown -R  root.mysql ./*
./scripts/mysql_install_db  —user=mysql  —datadir=/mydata/data/
cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
cp support-files/my-large.cnf /etc/my.cnf
chkconfig —add mysqld
vim /etc/my.cnf
log-bin=master-bin
log-bin-index=master-bin.index
binlog_format=mixed
server-id       = 1
innodb_file_per_table=1
datadir = /mydata/data
vim  /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin/
.  /etc/profile.d/mysql.sh
 
mysql>grant replication slave on *.* to 'zhangsan'@'192.168.%.%' identified by 'zhangsan';
mysql>flush privileges;
mysql>show master status
mysql>show binlog events in ‘master-bin.000002’
mysql>show global variables like ‘log’
mysql>set sync-binlog=1  
从服务器:
vim /etc/my.cnf
relay-log=relay-log
relay-log-index=relay-log.index
server-id=11
mysql>show slave status;
mysql>change master to master_host=‘192.168.1.113',master_user='zhangsan',master_password='zhangsan',master_log_file='master-bin.000002',master_log_pos=498
mysql>start slave
mysql>show slave status\g;
mysql>show global variables like ‘%read%’
mysql>set global read_only = 1
vim /etc/my.cnf
read_only = 1
 
 
 
 
配置mysql复制的步骤:
一.master
1.启动二进制日志
log-bin = master-bin
log-bin-index = master-bin.index
2.选择唯一的server_id
server-id = {0 - 2^32}
3.创建具有复制权限的用户
REPLICATION SLAVE
REPLICATION CLIENT
二.slave
1.启用中继日志
relay-log = relay-log
relay-log-index =
2.选择一个唯一的server_id
server-id = {0 - 2^32}
3.连接到主服务器,并开始复制数据
mysql> CHANGE MASTER TO MASTER_HOST=“” , MASTER_PORT=“” , MASTER_LOG_FILE=“” ,MASTER_LOG_FILE_POS = “” ,MASTER_USER=“”,MASTER_PASSWORD=“”;
mysql> START SLAVE ;
mysql> START SLAVE IO_Thread ;
mysql> START SLAVE SQL_Thread ;
复制线程:
master:dump
slave : IO_Thread ,SQL_Thread
先配置好mysql的服务器,安装好mysql
node1 :
 
vim my.cnf
datadir = /mydata/data
log-bin = mysql-bin
log-bin-index = master-bin.index
innodb_file_per_table = 1
server-id= 1
 
给权限从服务器:
GRANT REPLICATION SLAVE ON *.* TO ‘repluser’@‘192.168.%.%’ IDENTIFIED BY “replpass” ;
FLUSH PRIVILEGES;
 SHOW MASTER STATUS ;
SHOW BINLOG EVENTS IN “mysql-bin.000002”
 
 
 
 
node2 :
datadir = /mydata/data
relay-log = relay-log
relay-log-index = relay-log.index
innodb_file_per_table = 1
server-id= 11
 
连到主服务器上:
CHANGE MASTER TO MASTER_HOST=“192.168.225.140” , MASTER_PORT=“3306” ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=“mysql-bin.000002” ,MASTER_LOG_POS = 473 ;
 
SHOW SLAVE STATUS \G;
START SLAVE ;
SHOW SLAVE STATUS \G;
 
让从服务器变成只读
SHOW GLOBAL VARIABLES LIKE ‘read%’
vim /etc/my.cnf
read-only=on
sync-binlog=on
在主服务器上设定 ,用于事务安全
 
cd  /lib/plugin
设置半同步步骤:
在master和slave的mysql命令运行如下:
on master :
mysql>  INSTALL  PLUGIN rpl_semi_sync_matser SONAME ‘semisync_master.so’
mysql> SET GLOBAL rpl_semi_sync_matser_enabled = 1 ;
mysql> SET GLOBAL rpl_semi_sync_matser_timeout = 1000 ;
on slave :
mysql> INSTALL  PLUGIN rpl_semi_sync_slove SONAME ‘semisync_slove.so’
mysql> SET GLOBAL rpl_semi_sync_slove_enabled = 1 ;
mysql> STOP SLAVE IO_THREAD ; STOP SLAVE IO_THREAD ;
 
在Master和Slave的my.cnf中编辑:
on master:
[mysqld]
rpl_semi_sync_matser_enabled = 1
rpl_semi_sync_matser_timeout = 1000
on slave :
[mysqld]
rpl_semi_sync_slove_enabled = 1
查看服务器上semi_sync是不是开启:
mysql> SHOW GLOBAL STATUS LIKE ‘rpl_semi%’
 
管理工具:
percona
 
 
设置主主复制:
1.在两台服务器上各建立y一个具有复制权限的用户;
2.修改配置文件;
#在主服务器上
[mysqld]
server-id=10
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
auto-increment-increment=2
auto-increment-offset=1
#在从服务器上
[mysqld]
server-id=20
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
auto-increment-increment=2
auto-increment-offset=2
3.如果此时两台服务器都为新建立,且无其他写入操作,各服务器只需记录当前z自己二进制日志文件及事件位置,以作为另外的服务器复制的起始位置
server1 | mysql> SHOW MASTER STATUS \G ;
server2 | mysql> SHOW MASTER STATUS \G ;
4.各服务器接下来指定另一个服务器作为自己的主服务器:
server1 | mysql> CHANGE MASTER TO MASTER_HOST=“192.168.225.135” , MASTER_PORT=“3306” ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=“mysql-bin.000002” ,MASTER_LOG_POS = 473 ;
server1 | mysql> CHANGE MASTER TO MASTER_HOST=“192.168.225.140” , MASTER_PORT=“3306” ,MASTER_USER=‘repluser’ , MASTER_PASSWORD=‘replpass’ , MASTER_LOG_FILE=“mysql-bin.000002” ,MASTER_LOG_POS = 473 ;
 
 
 
 
 
 
 
 
MYSQL主从复制——MySQL-5.6基于GTID及多线程的复制:
http://blog.csdn.net/winsonyuan/article/details/41646579
master:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/mydata/data
innodb_file_per_table=ON
server-id=1
socket=/tmp/mysql.sock
log-bin=master-bin
log-bin=master-bin.index
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
port=3306
report-host=192.168.1.113
 
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.18.%' IDENTIFIED BY 'replpass'; 
mysql> flush privileges; 
如果 不能登录,删除空的用户,然后flush
 
 
slave:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/mydata/data
innodb_file_per_table=ON
server-id=11
socket=/tmp/mysql.sock
log-bin=master-bin
relay-log = relay-log  
relay-log-index = relay-log.index  
binlog-format=ROW  
log-slave-updates=true
gtid-mode=on   
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE  
sync-master-info=1   
slave-parallel-workers=2  
binlog-checksum=CRC32   
master-verify-checksum=1  
slave-sql-verify-checksum=1  
binlog-rows-query-log_events=1  
report-port=3306  
port=3306  
report-host=192.168.1.114
 
show global variables like ‘%uuid%’;
 
change master to master_host='192.168.1.113', master_user='lisi',master_password='123456',master_auto_position=1;
 
 
mysql-proxy:
另一个服务器:
https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz
vim /etc/profile.d/mysql-proxy.sh
export PATH=$PATH:/usr/local/mysql-proxy/bin
. /etc/profile.d/mysql-proxy.sh
 
 mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy"  --proxy-backend-addresses="192.168.1.113:3306" --proxy-read-only-backend-addresses="192.168.1.114:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
 
192.168.1.113  master
grant all on *.* to 'root'@'%' identified by '123456';
flush privileges ;
 
 
可以用mysql的
mysql -uroot -p -h192.168.1.112 --port=4040
 
 
 
 
 
 
mysql 工具:mysqlreplicate  , mysqlrplcheck , mysqlrplshow ,mysqlfailover , mysqlrpladmin
 
 
在mysql5.6中使用复制功能的时候,其服务器配置【mysqld】中至少应该定义如下选项
binlog-format:二进制日志格式,有row,statement和mixed几种类型:
需要注意的是:当设置隔离级别为READ
COMMITED 必须设置二进制日志格式为ROW,现在MYSQL官方认为STATEMENT这个y已经不再适合继续使用,但mixd类型在默认事务隔离级别下,可能导致主从数据不一致
log-slave-updates , gtid-mode , enforce-gtid-consistency,report-port和report-host  : 用于启动 GTID 及满足 附属的其他需求
master-info-repository 和 relay-log-info-repository :启用此两项和,可用于实现崩溃时保证二进制功能和服务器安全
sync-master-info: 启用可确保无信息丢失
slave-paralles-workers:设定从服务器的线程数,0 表示关闭多线程复制功能
binlog-checknum,master-verify-checknum 和 slave-sql-verify-checknum :启用复制有关的校验功能
binlog-rows-query-log-events:启用之可用于在二进制日志记录相关信息,可降低故障排查的复杂度
log-bin:启用二进制文件
server-id:同一个复制拓扑中的所有服务器的id号必须唯一
 
读写分离软件:
mysql proxy(lua)
amoeba(java)
cobar(java)
 
mysqlDB 封闭 ,关注下MariaDB,PerconaDB
 
 
nginx1.4 安装
groupadd -r -g 108 nginx
useradd -r -g 108 -u 108 nginx
 
rpm -ql pcre-devel
yum install pcre-devel
 
nguni 配置:
location {= | ~ | ~* | ^~ | } uri {…}
location  URI {}:
对当前路径及子路径下的所有对象生效
location = URI {} :
精确匹配指定路径,不包括路径,因此,只对当前资源生效
location ~ URI
localtion ~* URI {}:
模式匹配URI ,此处的URI可以使用正则表达式,~区分大小写,~*不区分大小写
location ^~ URI{}:
不使用正则表达式
反向代理
location /forum/ {
proxy_pass  http://192.168.100.11:8080/bbs/ ;
}
 
http://www.mage.com/forum  会被转发到
————>  http://192.168.100.11:8080/bbs/ ;
 
location  ~ ^/forum {
proxy_pass http://192.168.100.11:8080;
}
 
http://www.mage.com/forum  会被转发到 服务器本身要有这个目录
————>  http://192.168.100.11:8080/forum;
 
upstream  websrvs{
ip_bash;
server 172.16.100.6  weight=1 max_fails=2 fail_timeout=2
server 172.16.100.7 weight=1 max_fails=2  fail_ttimeout=2
#server 127.0.0.1:8080 weight=1 backup  这个是代理到错误页
}
 
server {
listen 80 ;
index index.html ;
proxy_pass http://websrcs
proxy_set_header X-Real-IP $remote_addr;
proxy_path first ;
}
 
server{
listen 8080 ;
server_name localhost;
index index.html;
root /html/errorpage;
}
 
 
nginx :
cache : 共享内存,储存键和缓存对象
磁盘空间:存储源数据
proxy_cache_path:不能定义在server{}中
proxy_cache_path /nginx/cache/first levels=1:2  keys_zone first:20m max_size=1g;
 
查看缓存命中状态:
add_header X-Cache “$upstream_cache_status from $server_addr”;
 
php服务器
upstream phpsrvs{
server1
server2
}
图片突兀器:
upstream imgsrvs{
server1
server2
}
静态资源及文件服务器:
upstream staticfilesrvs{
server1
server2
}
location / {
root /web/roots;
index index.php;
}
location ~*\.php$ {
fastcgi_pass http://phpsrvs ;
}
location ~*\.(gif|png|joeg|jpg)${
proxy_pass http://imgsrvs;
}
rewrite url 模块:(用在location里)
if(condition ){
}
location /image/ {
rewite http://172.16.100.19/images/
}
location / {
root html;
index index.html;
rewrite “^/bbs/(.*)” http://172.16.100.19/forum/$i last;
}
last : 本次重写之后,重启下一次检查
读写分离:
location / {
proxy_pass  http://172.16.100.19;
if($request_method = ‘PUT’ ){
proxy_pass 172.16.100.18;
}
}
防盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
root html
valid_referers none blocked *. nginxcn.com
if($invalid_referer){
rewrite ^/ wwww.nginx.cn
#return 404 ;
}
}
 
memcached 安装和配置:
内存缓存服务器:48byte-1M
buddy system : 伙伴系统
避免内存外碎片
 
 
 
haproxy : 工作在7层的 反向代理服务器
keeplive + nginx  keeplive + haproxy  keeplive+lvs 三种常用的前端负载均衡
 
好用的缓存服务器:varnish
早期的缓存服务器:squid
 
cpu 优化:  如果是numad 架构
 
运行在linux 上面的虚拟化技术
 
xen虚拟化及domU的实现
 
xen 和 kvm  都是虚拟化技术
 
xen:自己百度,
kvm:自己百度
 
openstack:构建私有云
 
google pagerank : google的 网页排名算法
 
学习hadoop的过程:
1.安装配置HDFS
2.安装配置MapReduce
3.HBase
4.Hive
5.sqoop
6.flume/scribe/chukwa
 
 
 
mysql优化思路及框架:
1.sql语句的优化;
2.索引的优化;
3.数据结构的优化;
4.InnoDB表的优化;
5.Memory表的优化;
6.理解查询执行计划;
7.缓冲和缓存
8.锁优化;
9.MYSQL服务器优化;
10.性能评估;
11.mysql优化内幕
 
 
去mysql 查询explain 的优化:
索引分为:
1.B树索引:
适用全键值,键值范围或左前缀查找
局限性:
1):如果不是从最左开始,索引没有用;where name like ‘jjj%’;
2):不能跳过索引中的列;where name like ‘kkk%’ and salary>3000;
3):存储引擎不能优化访问任何一个范围条件右边的列;
  Hash索引(速度快):
适合精确查找
只支持适用 = IN()  <=> 条件进行的比较;
缺陷:(1) 无法适用索引排序(2)不支持部分键匹配
2.主索引  辅助索引
explain 显示执行计划,在每句查询语句前面加;
type:一般出现all,index ,range ,索引需要优化
 
 
企业级监控———SNMP实战和原理:
工具:SNMP , RRDTool , cacti , Nagios
SNMP+RRDTool+cacti;
安装net-snmp  / net-sump-utils
service snmpd start
 
rpm 安装制作:
cd /usr/src/
rpmbuild --showrc
su - luodongyun
vim .rpmmacros
#%_topdir    /home/luodongyun/rpmbuild
mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
 rpmbuild --showrc | grep _topdir
 
 
 
 
 
 
挂载:
fdisk /dev/sdb
n
 
p
 
w
格式化:
mkfs -t ext4 /dev/sdb1
挂载:
mount /dev/sdb1  /mnt/sdb1
 
按卷标挂载:
e2label /dev/sdb1 web
mount -L “web” /web
自动挂载
/etc/fstab
/dev/sdb1               /mnt/sdb1               ext4    defaults        0 0
 
 
 
mysql

转载于:https://www.cnblogs.com/luomir/p/7908231.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 学习笔记 我 整理了好久 的相关文章

  • ogeek线下赛web分析1-python-web

    1 python from flask import Flask request render template send from directory make response from Archives import Archives
  • java学习杂记-更新

    1 maven添加下载依赖jar文件 xff1a maven官方仓库 xff0c 需要哪个jar文件直接找到对应的依赖标签 https search maven org 直接将 lt dependency gt 放到pom xml文件中 x
  • javascript/Jquery 将字符串转换成变量名

    var a 61 39 a 39 39 b 39 39 c 39 var obj 61 for i 61 0 i lt a length i 43 43 obj a i 61 34 abc 34 43 1 alert obj a alert
  • Navicat 看历史执行SQL

    Navicat可以通过这个框口看手动操作所执行的代码操作 转载于 https www cnblogs com sunxun p 5286657 html
  • MWC四轴飞行器代码解读

    MWC v2 2 代码解读annexCode 红色是一些暂时没去顾及的部分 xff0c 与我现在关心的地方并无太大关系 函数对rcDate进行处理 xff08 去除死区 xff0c 根据油门曲线 xff0c roll pitch曲线 xff
  • 云讷科技推出Kerloud数传电台

    介绍 Kerloud Telemetry是由云讷科技推出的一款面向无人系统 传输可靠的短距离无线传输电台 产品基于ISM Sub G频段 xff0c 采用FSK调制 抗干扰能力强 xff0c 具备Uart USB通用接口 xff0c 支持P
  • Requests方法 --- post 请求body的四种类型

    常见的 post 提交数据类型有四种 xff1a 1 第一种 xff1a application json xff1a 这是最常见的 json 格式 xff0c 也是非常友好的深受小伙伴喜欢 的一种 xff0c 如下 34 input1 3
  • 中文转拼音 (utf8版,gbk转utf8也可用)

    中文转拼音 utf8版 gbk转utf8也可用 https git oschina net cik pinyin php 64 param string str utf8字符串 64 param string ret format 返回格式
  • Pycharm激活方法(license server方法)

    strong pycharm所有版本 span class hljs string http span class hljs comment www jetbrains com pycharm download previous html
  • idc函数大全

    A80 addc A80 addcix A80 addciy A80 addix A80 addiy A80 cmpd A80 cmpi A80 im0 A80 im1 A80 im2 A80 jrc A80 jrnc A80 jrnz A
  • 视觉SLAM漫淡

    视觉SLAM漫谈 1 前言 开始做SLAM xff08 机器人同时定位与建图 xff09 研究已经近一年了 从一年级开始对这个方向产生兴趣 xff0c 到现在为止 xff0c 也算是对这个领域有了大致的了解 然而越了解 xff0c 越觉得这
  • 无人机基础知识点总结

    一 xff0e 基本概念 飞控 xff1a 飞机的控制系统 xff0c 其中硬件包含传感器部分IMU和控制部分的MCU xff0c 软件部分包含控制算法 俯仰 xff1a pitch xff0c 绕坐标系y轴旋转 xff0c 想象一下平时的
  • 谈一谈编程中遇到的一些死循环(递归死循环,AOP死循环,业务死循环)

    最简单最基础死循环 xff0c 一般都是这样的 while 1 while true for 然而在编程中常常会用到一些并不是那么基础的死循环 xff0c 这里列举一些我在编程中所遇到的一些死循环 方法已经不记得了 xff0c 只是大概说明
  • 简历上的项目经历怎么写?这3条原则不可忽视!

    阅读本文大概需要 5 分钟 作者 xff1a 黄小斜 文章来源 xff1a 微信公众号 程序员江湖 作为一个程序员 xff0c 想必大家曾经都做过一些项目 xff0c 可能现在手头上也还有一些项目 不过还是有很多学生朋友来问我 没有项目怎么
  • “四通一达”本一家,这家人是如何“承包”中国快递半壁江山的?

    微博上有张图火到不行了 看明白没 xff1f 原来 xff0c 这些年为我们奔走送快递的申通 中通 圆通 韵达 xff0c 这四家公司 xff0c 以及汇通 天天等快递公司 xff0c 都有一个共同的老家 xff1a 仅有40万人口的浙江桐
  • 在远方

    远方不是脚到达的地方 xff0c 而是心超越的地方 剧情简介 姚远在孤儿院长大 xff0c 后被二叔接出 xff0c 早早进入社会 xff0c 从底层快递员做起 在被邮政执法堵截损失惨重后 xff0c 他设局结识国营邮政稽查负责人的千金路晓
  • c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new

    条款21 xff1a 尽量使用std make unique和std make shared而不直接使用new 让我们从对齐std make unique 和 std make shared这两块开始 std make shared是c 4
  • 快递 10 年,逆袭为王

    2009 2018 xff0c 双十一 全民狂欢已走过十载 xff0c 网购成为了国民消费不可或缺的重要组成 xff0c 并带动了上下游众多产业的狂飙发展 xff0c 这其中 xff0c 以民营快递最为突出 金风玉露一相逢 xff0c 便胜
  • BPDU报文(RSTP)

    与STP 的BPDU报文格式相同 xff0c 就是在flags字段报文中间几位得到应用 主要原理 xff1a 利用flages位中的Proposal与Agreement来进行协商 xff0c 从而快速从 discarding 转成 forw
  • 怎么在一堆身份证中筛选出大于18岁的?

    最近一朋友找我帮个忙 xff0c 让我在N多身份证中找到18岁以上的人 我还想着用SQL查询来弄 xff0c 谁让是干IT的呢 xff0c 没想到被我一个朋友用excel瞬间解决 学习新的东西是多么的重要啊 其实就是利用了excel中的MI

随机推荐

  • 微信小程序我的界面

    前言 感谢 承蒙关照 微信小程序我的界面 界面效果 界面结构 小程序代码 我们先看me json代码 34 navigationBarTitleText 34 34 个人中心 34 me wxml代码 lt view class 61 34
  • __sync_fetch_and_add

    最近在公司离职的前辈写的代码哪里看到了 sync fetch and add这个东东 比较好奇 找些资料学习学习 http www lxway com 4091061956 htm http www cnblogs com FrankTan
  • 2.5年, 从0到阿里

    从来没有想到自己的求职之路会这么顺利 第一次投阿里就拿到了offer 以前一直都是做好被刷的准备的 3月31号晚上收到了来自阿里的正式offer 签下录取意向书 粗略算了一下 从2012年9月份正式入学进入计算机系到2015年3月签下阿里o
  • Cmake知识整理

    目录 CMake官方文档 CMake特点CMake命令find package二进制目标构建选项CMake文本内置命令CMake工程内置命令CMake toolchainsCMake变量 信息描述部分CMake变量 动作行为部分CMake变
  • closstol-ng制作交叉编译器

    crosstool ng制作交叉编译器 本文档基于凌云物网智科实验室文档制作 1 xff0c gt gt mkdir crosstool gt gt cd crosstool gt gt wget http crosstoolng org
  • How to resolve `unmet dependencies, Depends: nodejs but it is not going to be installed` npm

    为了安装Node Red xff0c 将ubuntu 18 04 的node js v8 升到 node js v10 Supported Node versions https nodered org docs faq node vers
  • Android开源项目及库搜集

    TimLiu Android 自己总结的Android开源项目及库 github排名 https github com trending github搜索 xff1a https github com search 目录 UI 卫星菜单节选
  • 深入Linux内核架构——简介与概述

    一 内核的任务 纯技术层面上 xff0c 内核是硬件与软件的之间的一个中间层 作用是将应用程序的请求传递给硬件 xff0c 并充当底层驱动程序 xff0c 对系统中的各种设备和组件进行寻址 从应用程序视角上看 xff0c 内核可以被认为是一
  • Flask快速入门(4) — CBV写法与解析

    目录 方式一 xff1a 继承View as view 源码分析方式二 xff1a 继承MethodView 方式一 xff1a 继承View code from flask import Flask views app 61 Flask
  • Flask快速入门(6) — 常见的请求与响应参数

    Flask快速入门 6 常见的请求与响应参数 code from flask import Flask from flask import request from flask import render template from fla
  • Flask快速入门(5) — 模板渲染

    Flask快速入门 5 模板渲染 视图函数 code from flask import Flask request render template Markup app 61 Flask name 64 app route 39 39 e
  • [转帖]windows10,business版和consumer版本区别

    windows10 business版和consumer版本区别 时间 2018 07 08 10 50 来源 原创 作者 5分享 点击 7113 次 windows10系统 xff08 1803 xff09 business editio
  • \0 的ASCII码值是多少

    0 的ASCII码值是多少 include lt iostream gt using namespace std void main char c 61 39 0 39 cout lt lt int c lt lt endl 输出是0 xf
  • python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。...

    python练习 xff1a 编写一个程序 xff0c 要求用户输入10个整数 xff0c 然后输出其中最大的奇数 xff0c 如果用户没有输入奇数 xff0c 则输出一个消息进行说明 重难点 xff1a 通过input函数输入的行消息为字
  • thenApply()和thenCompose()的区别

    thenApply 和thenCompose xff08 xff09 的区别 xff1a thenapply xff08 xff09 是返回的是非CompletableFuture类型 xff1a 它的功能相当于将CompletableFu
  • 超宽带(UWB)无线通信技术介绍

    http hi baidu com hieda blog item 1cb9c81122eaed7acb80c42e html 一 超宽带无线通信技术 UWB 简介 二 超宽带无线通信技术概述 作者 李唐 刘亚峰 三 超宽带 UWB 无线通
  • TTGO T-Watch-2020 编程系列(二) 开发环境的搭建Windows

    现阶段只介绍windows下的环境搭建 xff0c Linux和Mac的环境类似 这里只介绍Arduino开发 xff0c 还可以用其他的工具 visual studio code 43 PlatformIO或者micropython等 x
  • Bag-of-words model

    Bag of words model BoW model 最早出现在NLP和IR领域 该模型忽略掉文本的语法和语序 用一组无序的单词 words 来表达一段文字或一个文档 近年来 BoW模型被广泛应用于计算机视觉中 与应用于文本的BoW类比
  • 链式队列小结

    1 队列的特性是先进先出 xff1b 最小单元是一个节点 包含了datatype和next xff0c 其中datatype是可以自定义的结构体 xff0c 包含了多种类型的数据 2 对队列有队尾指针和队头指针进行封装 后面的操作是对他进行
  • linux 学习笔记 我 整理了好久

    printenv 查看环境 hash 查看缓存命令 clock hwclock date 查看时间 help 43 command 获得帮助 command help man command 用户命令 bin usr bin usr loc