linux

初学者完成Linux系统安装以后,学习Linux操作系统必备的指令,基于Linux指令管理Linux操作系统。

https://blog.csdn.net/qq_23329167/article/details/83856430

基础命令相关一:Cd、ls、pwd、help、man、if、for、while、case、select、read、test、ansible、iptables、firewall-cmd、salt、mv、cut、uniq、sort、wc、source、sestatus、setenforce;

基础命令相关二:Date、ntpdate、crontab、rsync、ssh、scp、nohup、sh、bash、hostname、hostnamectl、source、ulimit、export、env、set、at、dir、db_load、diff、dmsetup、declare;

用户权限相关:Useradd、userdel、usermod、groupadd、groupmod、groupdel、Chmod、chown、chgrp、umask、chattr、lsattr、id、who、whoami、last、su、sudo、w、chpasswd、chroot;

文件管理相关:Touch、mkdir、rm、rmdi、vi、vim、cat、head、tail、less、more、find、sed、grep、awk、echo、ln、stat、file;

软件资源管理:Rpm、yum、tar、unzip、zip、gzip、wget、curl、rz、sz、jar、apt-get、bzip2、service、systemctl、make、cmake、chkconfig;

系统资源管理:Fdisk、mount、umount、mkfs.ext4、fsck.ext4、parted、lvm、dd、du、df、top、iftop、free、w、uptime、iostat、vmstat、iotop、ps、netstat、lsof、ss、sar;

网络管理相关:Ping、ifconfig、ip addr、ifup、ifdown、nmcli、route、nslookup、traceroute、dig、tcpdump、nmap、brctl、ethtool、setup、arp、ab、iperf;

Linux系统开关机:Init、reboot、shutdown、halt、poweroff、runlevel、login、logout、exit。

liux 教程

远程连接linux xshell和ssh方式登录 ssh root@192.168.1.xxx

配置 ip vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改: 注 / 表示 或者 全部大写 bootproto= dhcp / static onboot=no / yes --表示开机状态不变 添加 ipaddr=192.168.1.xxx netmask=255.255.255.0 gateway=192.168.1.254 dns1=119.29.29.29

systemctl stop NETworkManager --禁用网络 systemctl restart network --启用网络

ip addr show

linux 默认7个终端 按下 ctrl+alt+f1~f7 ,切换7个终端

linux 命令 ls ls -a --显示全部,包括隐藏 ls -l --显示详细

whoami --显示当前用户 hostname --显示当前主机名 pwd --显示当前所在目录

linux目录结构 --window反斜杠'\'表示目录分割, linux 用斜杠'/' 主目录 例如: oldboy/ ->peng/ ->zhi/ ->li/ data/ etc/->sysconfig->network-scripts->ifcfg-eth0 etc/->hosts orrt/data/->oldboy.txt 根目录下 /dev --存放抽象硬件 /lib --存入系统库存文件 /sbin --存放特权级二进制文件 /var --存放经常变化的文件 /home --普通用户目录 /etc 存放配置文件目录 /boot --存放内核与启动文件 /bin --存放二进制文件(可执行命令) /usr --存放安装程序(软件默认目录) /mnt --文件挂载目录(u盘,光驱) /root --特权用户目录 /opt --大型软件存放目录(非强制)

linux 重要的配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/resolv.conf --ping命令返回内容,如把这文件的hostname 注释掉,就不能域名解xi了 cat /etc/hostname --显示主机名,cat 查看文件的命令 vim /etc/hosts/ --编辑hosts文件 vim /etc/motd --motd 登录时显示的信息 cat /etc/lsb-release --查看 系统版本等信息

ls /proc/ --proc里面存放着硬件信息,如:meminfo:内 存,cpuinfo:cpu信息,loadavg:负载,uptime结果,mounts:已加载的文 件系统列表

linux核心命令与文件管理 . --当前目录 .. --上一级目录

  • --上一次的工作目录 ~ --当前系统登录的用户家home目录

    ls
    -a -l -h (输出文件大小) --full-time (完整的时间)

     -t (根据最后修改时间排序)  -f (在文件结尾输出不同的特殊符号:/是文件夹,* 是可执行文件,@是链接)   -d (只显当前文件夹的信息,不显示子目录)  -r (reverse 逆转排序)  -S(大写的s,表示从大到小排序)  -i(显示出id 等详细信息)
    

    pwd cd - --进入上次操作目录 su - 用户名 --切换用户 logout --退出用户 data --显示当前上期

    mkdir mkdir {a,b,c,d} --表示同时创建 a,b,c,d 四个文件夹 mkdir {1..100} --创建1到100,100个文件夹 mkdiv -p ./a/b/c/d ---p递归创建文件夹(如果目录不存在就创建的功 能)

touch touch --可修改访问时间,不存在的文件会被创建 touch lin{1..100} --创建 lin1 - lin100 touch lin{a..z} --同上

cp cp a.txt a1.txt cp a.txt ./b/a2.txt cp a.txt ./b cp a.txt b.txt ./c cp -r a ./b --复制文件夹 需要加-r 表示目录包含的文件一起 cp -p a b --复制目录,-p 且保持创建目录一致为最新 cp link_a link_a2 --复制软连接时,a2会变成目标实体文件 cp -d link_a lina2 --复软链接(即快捷方式)a2也会是软链接 cp a.txt a.txt --会提示是否覆盖 cp -i a.txt a.txt --提示覆盖, 系统默认已经自带 -i

mv mv ./a.txt ./b --a.txt移动到b文件夹 mv a* ./b --以a开头的文件和文件夹移到b文件夹 mv a.txt aaa.txt --重命名 mv a.txt a.exe --如果目录下已有a.exe 会提示覆盖 mv -f a.txt a.exe --加-f 不提示 直接覆盖

rm rm a.txt b.txt --删除a各b rm a --默认无法删除目录 rm -r a --递归删除a 文件夹
rm -d a --加-d 只能用于删除空文件夹 rm -f a --加-f 强制删除,不提示 rm -v ./* --显示当前目录所有,-v显示详细

man man cp --获取帮助 man rm

关机和重启
shutdown -h now shutdown -h 1 --1分钟后 init 0 --关机 poweroff reboot shutdown -r now shutdown -r 1 init 6 --重启 logout exit

常用快捷键 ctrl+c --取消当前操作 ctrl+l --清空屏屏内容 ctrl+d --退出当前用户 ctrl+a --光标移到行首 ctrl+e --光标移到行尾 ctrl+u --删除光标到行首的内容

linux的环境变量

echo echo $PATH --显示系统变量,以:分割 which ls --ls 这个命令所在的目录 会打印出/usr/bin/rm

vim 快捷键 h 向左 j 向下 k 向上 i 向右

w 以空格区分 移到下一个单词 b 移到上一个单词

数字0 移到行首 字符 $ 移到行尾

g 移到文章开头、 G 移到文章结尾

H 移到屏幕开头 L 移到屏幕的结尾 M 移到屏幕的中间

: 命令模式下。。 / 向下找,查找内容,n 跳到下一个匹配 ? 向上找,n 跳到下一个匹配

yy 复制光标所在行 4yy 复制4行 p 打印粘贴的内容 dd 删除光标当前行、 D 删除光标当前位置到行尾的内容 x 删除光标当前字符,向后删除 X 删除光标当前字符,向前删除 u 撤销当前操作

C 删除光标所在位置,到行尾的内容,且进入编辑模式 o 在当前光标的下一行开始编辑 O 在 光标的上一行开始编辑

A 快速进行尾,且进入编辑 zz 快速保存退出

ctrl+v 进入可视块模式 d 选中块按d 快速删除 I 选中块按I,写代码,按esc两次,会生成多行代码

交换文件 swp

重定向符号

   --输出覆盖重定向

--输出所加重定向 cat a.txt > ./a1.txt --输出 a.txt == a1.txt

cat a.txt >> ./a1.txt --输出 a.txt的内容追加到 a1.txt cat -n a.txt >> ./a1.txt -- -n显示行号

< << cat < a.txt --把a.txt内容发送给cat

xargs -n 3 < a.txt --把a.txt 发送给xargs, xargs拆分为每行显示 3个

cat >> a.txt << EOF --

cat cat a.txt -b --只给非空行列序号 cat a.txt -n --给每一行列序号,包括空行 cat a.txt -e --给每行结尾回$符号 cat a.txt b.txt > ./c.txt -- 合并a,b的内容,写入到c

cat >> a.txt << EOF

       >hello        --非交互式的写入文件内容信息,向a 写入 hello

echo > a.txt --清空文件a,留下一个空行

a.txt --清空文件a

cat /dev/null > a.txt --读取null空的文件,重定向写入到a,a会被覆盖清空

tac cat a.txt | grep "xx yy" --从a里找到包含‘xx yy’的行显示出来

more less --分屏显示

had tail head -5 a.txt -- 显示 a 内容的前5行 head a.txt -- 默认显示10行 head -c 5 a.txt -- -c指定字符数量, 只输出 a 的前5个字符

tail -5 a.txt -- 显示a 内容的最后5行 tail a.txt -- 默认显示最后10行

tail -f a.txt -- 实时刷新文件内容变化,主要用于监视文件变化 tail -F a.txt -- 监视文件,如果不存在会一直刷新

cut cut -c 5 a.txt -- 切a内容每行的第5个位置字符,空格算在内 cut -c 5-8 a.txt -- 切a内容每行的第5到8的位置的字符 cut -c 5,8 a.txt -- 切a内容每行的第5和8的位置的字符 cut -c -7 a.txt -- 切a内容每行的从头到第7个位置的字符 cut -c 8- a.txt -- 切a崆每行的第8个位置到最后 cut -d ":" -f 7 a.txt -- a.txt内容每行以‘:’分割,空格也算,输出第7组 cut -d ":" -f -3 a.txt -- 开头到第3组,其它以此类推

sort --排序 sort -n a.txt --从小到大,输出 sort -u a.txt --对排序结果去重 sort -n -t "." -k 4 a.txt --a内容每行以'.'分割,输出每行全部内容以第4组从小 到大排序

uniq --去重 uniq a.txt -- a内容去重 sort -n a.txt | uniq -d -c -- 排序后,再去重,-c会在最前面显示去重次 数,-d只显示有重复的, uniq -c -u 只显示出现1次重复的

wc --用于统计文件的行数,单词,字节数 wc -l a.txt -- 统计a的行数 echo "ab ac adc aaff " | wc -w --统计单词的数量 4 echo "abcdef" | wc -m --统计字符数量7,因为结尾有一个$, cat -E 验证 echo a.txt | wc -L --输出最长行的字符数 who | wc -l

tr echo "my name is alex" | tr '[a-z]' '[A-Z]' --a-z替换成大写

echo "my name is alex and 999" | tr -d 'a-z' --删掉a-z,只显示999,‘my’-删 掉'my','0-9' 删掉数字

tr 'a' "A" < a.txt --a文件内容里的a 替换为A

echo "aaaa and bbcd" | tr -s 'ab' --a,b字符去重 == a and bcd

find find /opt -maxdepth 1 -name ".txt" -- 查找/opt 1重目录下的所有txt文件 find . -name "[0-9]" --查找当前目录以数字开头的文件和文件夹 find . -type d -name "[0-9]" -- 只找文件夹 f 代表只找文件 find . -type f -name "[0-9]" -delete --找到文件并删除 find . -atime -2 --两天以内所有 2 正好两 +2 已经超过两天 find . -maxdepth 1 -type d --找到当前1重目录下所有的文件夹 find . -maxdepth 1 ! -type d --!表示取反,即所有的不是文件夹的所有文件 find . -type f -size +200M --找到所有大小超过200M的 find . -path "./abc" -prune -o -name ".txt" -print -- 忽略文件夹abc, 找到所有的txt文件 find . -type f -name ".txt" -ok rm {} \ --找到所有txt文件,并在提示下逐一 删除

xargs 管道命令

xargs < a.txt --将cat的输出结果,原本多行作为一行输出 xargs -n 2 < a.xtx --每行只显示2个字符

echo 'aa,adff,fdsfdsf,fdsff' | xargs -d "," -n 2 --以,分割,空格隔开组, 每行显示2个组

find . -name "*.txt" | xargs -i mv {} abc/ --当前目录包括下级目录找到txt文 件,移到 ./abc下面,

find . -name "*.txt" | xargs -I alltxt mv alltxt ./ --找到所有的txt,命 名为alltxt 放到目录alltxt, 放在当前目录

----------------------文件属性介绍

ls -lhi -- 详细信息

ln -s /a.txt /b.txt --创建快捷方式 a.txt是快捷方式 -> 指向 b.txt readlink a.txt --显示 /b.txt

file a.txt --检测文件类开,如ascii

which ls --显示 ls 这个命令来自哪个目录 /usr/bin/ls

echo $PATH --显示系统变量

whereis python -- 找到python 目录和文件

tar --打包 压缩

tar -cvf a.tar ./ --当前目录所有文件打包为a.tar

tar -xvf ../a.tar ./ --解压文件

tar -czvf a.tar.gz ./ --打包压缩

tar -zxvf a.tar.gz ./a1.txt --单独解压aq.txt

tar -ztvf a.tar.gz ./a1ink.txt -- 列出压缩包文件

tar -zxvf a.tar.gz -c ./abc/ -- -c 解压到指定目录

tar -zxvf a.tar.gz --exclude a1.txt --解压文件,排除文件 a1.txt

gzip

gzip ./*.txt --可以压缩文件,gzip无法压缩文件夹,必须先tar再gzip

gzip -l a.txtx.gz --查看压缩的内容

xip a.xip

zip

gip a.zip ./ --把当前目录压缩成a.zip

unzip a.zip --解压压缩

----------------用户管理 adduser addgroup

useradd userA -创建用户 password for userA -设置用户密码

shell脚本创建方式 echo 123|passwd --stdin userA

-----------特殊符号 '' 固定格式 “” 能识别函数

---------文件描述符 重定向 stdin < 或 <<

stdout > 或 >> echo "向文本文件里写入" 123 > a.txt echo "向文本文件里追加写入" 456 >> a.txt

tr -d 'a-c' < a.txt -- 删除 a.txt 里的 abc字符 wc -l < a.txt --

lsss abcd 2 >> cuowu.txt --没有lsss命令会报错,2 表示错误提示, 一起追加到cuowu.txt ls /tmp > /dev/null 2 > & 1 --把错误和正确的结果都写入/dev/null黑洞文件中

---- 其它特殊符号 ; -- 分隔,结束

-- 用于注释,root身份是提示符

| -- 管道符,通常用于过滤 ls | grep 'acb' $ -- 变量, name='变量的值' #echo $name \ -- 转义符, 将特殊符号转换为普通符号 {} -- 1.生成序号{1-10} 2.

mkdir /{a,b,c}

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bakc01} -- ,号前面表示相同的路径

&& -- 前个命令成功再执行后面的 如:ls abc && cd /bcd || -- 两个中哪个先对先执行哪个 如:ls abc || cd /bcd \ -- 前一个失败了,再执行下一个 ! -- bash(翻译器) 中表示取反,vim中表示强制, !1101 执行第1101行的命令 !! -- 执行上次的命令

alias -- 别名 如: alias rm="输入rm,显示此字符"

echo $PATH -- 显示系统变量bin which abc --显示出abc文件夹的目录,如果目录不存在显示系统变量bin路径 taba键 --自动补全

------------- 正则表达式 linux三剑客:
grep: 文本过滤 sed: stream editor, 流编辑器,文本编辑工具 awk: linux的文本报告生成器(格式化文本), 正则表达式的分类: linux三剑客主要分两类 基本正则表达式 (BRE -basic regular expression) BRE对应的字符有 ^$.[]* 扩展正则表达式 (ERE -extended regular expression) ERE 在BRE 基础上增加 (){}?+|

基本正则BRE ^ -- ^abc 表示以abc开头的行 $ -- &abc 表示以abc结尾的行 ^$ -- 组合符,表示空行

  • -- 匹配任意 . -- 匹配一个字符,不能匹配空行 .* -- 组合符,匹配所有内容 \ -- 转义,让符号变字符串 .$ -- 匹配多个字符结尾的内容 .^ -- 匹配多个字符开头的内容 [abc] -- 匹配集合内任一个字符 [^abc] -- 区配除了abc的内容

    扩展表达式 ERE

    • -- 一个字符一次或多次 [:/]+ -- 括号内的:或/ 字符1次或多次 ? -- 0 或 1 次 a{n,m} -- 一个字符最少n次,最多m次 a{n,} -- 匹配一个字符最少n次 a{n} -- 匹配a正好n次 a{,m} -- 匹配a最多n次

grep (global search REgular expression and Print out the line) -v -- 排除结果 -n -- 显示行 -i -- 不分大小写 -c -- 只统计匹配的行 -E -- 使用egrep -W -- 只匹配过滤的单词 -o -- 只输出匹配的内容

^ grep '^$' a.txt -n -v -- a.txt里的空行,-n显示行号,-v显示全部除了空行

grep '^#' a.txt -v | grep '^$ ' -v --以#开头的反显,空行反显,即找到没有#,并且没有空行

grep -i -n '^m' a.txt --匹配以m开头的,-n显示行号,-i不分大小写

$ grep -n ".$" a.txt -- 找出a.txt里以.结尾的行

grep -n "/bin/bash$" pwd.txt -o -v -- 找出pwd.txt里以"/bin/bash"结尾的行,-o表示,只显匹配到的内容, -v显示找到的这些行的非关键字

grep -En a.txt --每行结尾加$符

. grep ".s" a.txt --找出a.txt里所有带有a的行 grep "." a.txt --找出所有的内容 grep ".e" -- 找出所有带有e的单词

[]
grep "[a-zA-Z0-9]" a.txt -- 找出所有大小写字母和数字

扩展表达式 ERE 的使用 + grep "i+" a.txt --找出匹配多次,并且为i的内容,因+号是ere的,所以这里匹配失败。 grep -E "i+" a.txt

? grep -E "go?d" a.txt -- ?代表可替换任何字符

| find /data -name "*.txt" | grep -E "l|t" -- 找出data目录下所有带l或t的txt

()
grep -E "goo|gla" a.txt -- 找出包含 goo或gla 的行 grep -E "g(oo|la)d" a.txt -- 找出 good 和 glad 的行

grep -E "(l..e).*\1" a.txt -- 找出每行带有l..e的单词,并且一行有多个的话中间内容也包含

{} grep -E "y{2,3}" a.txt -o --匹配所有的带有y的字符,最小2次,最多3次,{,3}表示最少3次

------------- sed

-n --取消默认sed的输出 -i --直接交修改结果写入文件,不用-i,sed修改的是内存数据 -e --多次编辑,不需要管道符了 -r --支持正则扩展

sed的内置命令字符 a -- append,对文本追加,在指定行后面添加一行/多行文本 d -- delet,删除匹配行 i -- insert,表示插入文本,在指定行前添加一行/多行文本 p -- print,打印匹配行的内容,通常p与-n一起用 s/正则/替换内容/g --匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

sed匹配范围 空地址 -- 全文处理 单地址 -- 指定文件某一行 /pattern/ --被模式匹配到的每天一行 范围区间 -- 10,20 十到

案例 sed "2,3" a.com sed "/linux/p" a.com -n --打印内容

sed "/game/d" a.com --删除

sed "5,$d" a.com -- 从第5行删到结尾

sed "s/my/i/g" a.com -i -- my 替换成 i,-i写入文件,不用则只修改内存

sed "s/my/i/g" -e "s/001/01/g" a.com --把my换成i,且001换成01,-e表示多次编辑

sed "2a abcdef" a.com --第2行后面插入一行:abcdef;2表示第行;a表追加一行/多行文本

sed "4i aaaaa" a.com --第4行前面插入一行,i表示insert

sed "3a addA. \naddB" --\n表示换行

sed "a --------" a.com --在每一行后面插入行:--------;不写行号表示每一行

例: 列出ip地址 1.sed "2p" -n --列出ip所在的第二行

  1. sed "s/^.*inet//" -- s替换从inet之前,全部替换为空;;去掉前面的内容
  2. sed "s/net.$//" -- 替换'net'这后到结尾,全部替换为空;;去掉后面的内容 ifconfig eth0 | sed "2p" -n | sed sed "s/^.inet//" | sed "s/net.*$//"

用-e 代替管道符的方式 ifconfig eth0 | sed -e "2s/^.inet//" -e "2s/net.$//p" -n

-------------awk 参数 模式 动作 数据 awk options 'pattern {action}' file

awk '{print $1}' a.txt --打印出所有第一列,以一个或多个空格区分为一列,

$0 --表示一整行 $n --指定分隔符后,当前记录的第n个字段 FS --字段分隔符,默认是空格 NF(Number of fields) --分割后,当前行一共有多少字段 NR(Number of records) --当前记录数,行数 更多内置变量可以man手册查看 man awk

awk '{print “第一列:”$1,"第二列:"$4,"第三列:"$5}' a.txt --一次打印出3列

awk 'NR==5{print $0}' a.txt --打印第5行内容

awk 'NR==3,NR==6{print $0}' a.txt --打印第3行和第6行

awk '{print NR,$0}' a.txt --列出行号

awk'NR==37,NR==40{print NR,$0}' pwd.txt --打印37和40行,行号和内容

awk '{print $1,$(NF-1),$(NF-2)}' pwd.txt --打印第一列,最后一列,最后第2列

-F --输入分割符 awk -F ":" '{print $1}' pwd.txt --以:号分隔列,打印第1列 awk -v FS=":" '{print $1,$NF}' --效果同上

OFS --输出分割符 awk -F ":" '{print $1,"------",$SNF}' pwd.txt --以-----分割列

awk -F ":" -v OFS="===" '{print $1,$NF}' pwd.txt --以===分割

ifconfig eth0 | awk 'NR==2{print $1,$NF}'

-----------计划任务 -在linux中配置可以在指定时间执行的任务(定期备份,定期采集监测数据) rhel6中默认已安装了at,cronie软件包,通过atd和crond服务实现周期性功能,并通过at,crontab命令进行计划任务设置

分类 一次性 -atd 循环 -cronie 系统级 用户级

crontab安装 yum -y install crontabs

启动服务 rhe15/6: /etc/init.d/crond status /etc/init.d/crond start

rhel7: systemctl start crond.service systemctl status crond.service systemctl enable crond.service 开机启动(rhel5/6):chkconfig crond on

-创建计划任务:用户级别的计划任务 crontab -u 用户 -e -u是指定用户, 默认不写就是root

crontab -e -进入编辑 /1 /usr/bin/touch /tmp/1.txt -每隔9分钟创建一个1.txt 00 24 /user/bin/reboot -每天24点,重启任务

:wq

验证: tailf /var/log/cron -查看定是任务日志 找到命令所在的路径: which touch

两台linux主机已连接的情况下: scp /tmp/1.txt 192.168.42.130:/tmp/ -拷贝1.txt到130客户端 scp 192.168.42.130:/tmp/1.txt /tmp/ -从服务器130,拷贝1.txt

----------------cron 定时任务 /etc/crontab

crontab -r -删除所有的计划任务

crontab -l --列出定时任务 等于 cat var /spool/cron/root

crontab -e --编辑定时任务,乖于 vi /var/spool/cron/root

systemctl is-active crond --检查是否运行 crond 任务

systemctl status crond

定时任务的语法格式

          • --五颗星对应 分, 时, 日, 月, 周几

    30 08 * go to school --每天8点30分去学校

    00 00 * go home --每天12点回家

定时任务符号

0-10 10 * --每天的10点整 到 10:10 每分钟执行

3 4,5,6 * --每天的4,5,6点的 3钟 都去执行

/5 * -每隔5分钟执行

00 --每小时

          • --每周 1 2 4 --每周4,2点1分

    1 14 3 --每月3 号下午2点1分

    1 14 3,5 --每周3,周5 2点1分

  • 13,13 6,0 --周六日 下午1点和2点 的每1分钟

    /10 * --每10分钟

分钟 小时 天 月 天每星期 命令

每个字段代表的含义如下:

Minute 每个小时的第几分钟执行该任务

Hour 每天的第几个小时执行该任务

Day 每月的第几天执行该任务

Month 每年的第几个月执行该任务

DayOfWeek 每周的第几天执行该任务

Command 指定要执行的程序

在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选

字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。

举例如下:

5 ls 指定每小时的第5分钟执行一次ls命令

30 5 * ls 指定每天的 5:30 执行ls命令

30 7 8 ls 指定每月8号的7:30分执行ls命令

30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令

30 6 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

-------------------------------------------例:1 5 2 5 /root/bin/bakhs.sh

#!/bin/bash

DATE=$(date +%Y%m%d) BACKUP_ROOT=/root/backup/ BACKUP_FILE=test.$DATE

SOURCE_ROOT=/app/ SOURCE_FILE=ysjt/

cd $SOURCE_ROOT tar -czP -f $BACKUP_ROOT/$BACKUP_FILE.tar.gz $SOURCE_FILE > /dev/null 2>&1

------------------------------------------例2

centos7 自动备份 mysql 新建dbback.sh文件

加入

#!/bin/sh mysqldump -uroot -proot jd | gzip > /var/www/html/jd$(date +%Y%m%d%H%M%S).sql.gz find /var/www/html -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;

#end

第一句是备份成压缩文件,第二句是删除7天前的备份文件

chmod u+x dbback.sh 添加可执行权限

./dbback.sh 执行任务

还原数据库

mysql > use db mysql > source d:\bak\0101.sql

-------------------------------------------------例3 centos7-每天定时备份 mysql数据库 第一步:编写数据库备份脚本database_mysql_shell.sh 复制代码

#!/bin/bash DATE=date +%Y%m%d%H%M #every minute DATABASE=springboot-admin #database name DB_USERNAME=root #database username DB_PASSWORD="mysql" #database password BACKUP_PATH=/backup/mysqldata #backup path

#backup command

/usr/bin/mysqldump -u$DB_USERNAME -p$DB_PASSWORD -h 127.0.0.1 -R --opt $DATABASE | gzip > ${BACKUPPATH}\/${DATABASE}${DATE}.sql.gz

#just backup the latest 5 days

find ${BACKUPPATH} -mtime +5 -name "${DATABASE}*.sql.gz" -exec rm -f {} \; 复制代码

第二步:给脚本授权 chmod +x database_backup_shell.sh

第三步:编写定时备份任务 输入如下命令:

crontab -e 在页面中编写如下内容:

00 3 * /root/database_backup_shell.sh

可实现每天凌晨三点自动执行第一步编写的脚本,备份mysql数据库到/backup/mysqldata,且只保留最近5天的数据库备份。

-------------------------------------------------------以上为 定时备份 删除并保留指定日期数据

修改ssh端口: 关闭防火墙: systemctl stop firewalld 关闭selinux: setenforce 0 vi /etc/ssh/sshd_config Port 22 -把22修改1000 :wq systemctl restart sshd

-------------------- rz sz命令 yum install -y lrzsz 默认端口:22

rz -上传文件到windos sz /tmp/1.txt -下载到windows

----------jumper server 跳板机 关闭防火墙: systemctl stop firewalld 关闭selinux: setenforce 0

localedef -c -f UTF-8 ZH_CN ZH_CN.UTF-8 -修改字符集 export LC_ALL=zh_CN.UTF-8 echo 'LANG="ZH_CN ZH_CN.UTF-8"' > /etc/locale.conf

安装 yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

下载 安装python wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz 解压下载完的python包 tar xf Python-3.6.1.tar.xz 进入已解压的python包, 编译 ./configure && make && make install cd /opt python3 -m venv py3 source /opt/py3/bin/activate

git clone git://github.com/kennethreitz/autoenv.git echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc source ~/.bashrc

下载 jumpserver git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master

安装所需的python modules echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env cd requiements/

yum -y install $(cat rpm_requirements.txt) pip install --upgrade pip pip install -r requirements.txt

安装redis yum -y install redis systemctl enable redis systemctl start redis

安装mysql yum -y install mariadb mariadb-devel mariadb-server systemctl enable mariadb systemctl start mariadb

mysql -进入mysql mariadb[(none)]>create database jumpserver default charset 'utf8'; -创建数据jumpserver

grant all on jumpserver.* to 'jumpserveradmin'@'127.0.0.1' identified by 'jumpserverpwd'; -给本机授权

flush privileges; -刷新数据库

\q -退出

配置jumpserver pwd -查看路径 cd /opt/jumpserver/requirements/ cp config_example.yml config.yml
生成一个kye: SECRET_KEY='cat /dev/urandom | tr -dc A-Za-z0-9| head -c50'
echo $SECRET_KEY -显示key值

key写入到/.bashrc: echo "$SECRET_KEY=$SECRET_KEY" >> ~/.bashrc cat /.bashrc -查看写入情况

生成个个token: BOOTSTRAP_TOKEN=‘cat /dev/urandom | tr -dc A-Za-z0-9 |head -c 16’ echo $BOOTSTRAP_TOKEN -查看有没有该变量生成 echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc -写入 cat /.bashrc -查看写入情况

-内容过多,参照网络文档 sed -i "/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml

vi /opt/jumpserver/config.yml db_engine: mysql db_host: 127.0.01 db_port: 3306 db_user: jumpserveradmin db_password: jumpserpwd db_name: jumpserver

http_bind_host: 0.0.0.0 http_listen_port: 8080 :wq

启动/关闭jumpserver jumpserver目录: ./jms start ./jms stop 后台启动 ./jms start -d

部署koko 支持终端管理,默认port:2222 systemctl start docker server_ip=172.26.105.84 echo $BOOTSTRAP_TOKEN -显示token........ BOOTSTRAP_TOKEN=(token值......) docker run --name jms_koko -d -p 2222:2222 -p 5000:5000

部署guacamole docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN

部署luna cd /opt/ wget https://github.com/jumpserver/luna/releases/download/1.5.5.luna.tar.gz tar xf luna.tar.gz chown -R root:root luna

配置nginx 下载解压源码包 nginx-1.14.2 ./configure --prefix=/usr/local/nginx && make && make install -编译安装

cd /usr/local nginx/conf/ mkdir conf.d vi jummpserver.conf 复制nginx.conf内容进来 server{ listen 80; client_max_body_size 100m; localtion /luna/ { try_files $uri / /index.html; alias /opt/luna/; } localtion /media/ { add_header Content-Encoding gzip; root /opt/jumpserver/data/; }

}

vi nginx.conf 在keepalive_timeout 65 下面一行插入 include /usr/local/nginx.conf/conf.d/*.conf

http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include /usr/local/nginx/conf/conf.d/*.conf; ser{ listen 80; server_name localhost; ... } }

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

---------------------------linux网络基础 iso 国际标准化组织 iso 定义层模型: 物理 链路 以二进制形式在物理媒介上传输数据 iso@2100

网络 为数据包选择路由 ip,icmp,bgp,ospf 传输 提供端对端的接口 ip port tcp,udp 会话 表示 应用 提供文件传输,邮件,文件共享,数据加密等 http,snmp,ftp,nfs,dns

-应用层的交互叫报文

--------- route 路由命令 route -n -- 查看路由表信息 -n 去掉dns解析的路由表

destination 表示网络号 gateway 网关 如0.0.0.0 表示该路由是由本机发出的 genmask 掩码 flags 路由标记,标记当前网络状态 U up运行的状态 G 表示这个网关是一个主机 ! 表示当前这个路由已禁止

添加删除网关 route del default --删除默认路由 route -n -- 查看路由信息

route add default gw 192.168.1.3 -- 添加网关地址

--------- ifconfig

---------ip 命令 ip --help 查看帮助 object
link 网络设备 address ipv4,6 neighbour 查看arp缓存地址 (arp用于解析mac地址) maddress 多播地址 tunel ip上的通道

ip addr show

ip link show dev ens33 -- 指定显示网络设备信息 加 -s 显示详细 数据包等

ip link set ens33 down -- 关闭网卡 ip link set ens33 up --启用网卡

ip link set ens33 address 0:0c:29:12:10:11 修改网卡mac地址

ip address add 192.168.178.150/24 dev enss33 --添加ip 绑定多个IP

ip addr del 192.168.178.150/24 dev enss33 -- 删除

ip address add 192.168.178.188/24 dev ness33 label ens33:1 --添加别名,用 ifconfig查看

ip route --查看路由

ip neighbour -- 检查arp信息

-------------netstat -an -- 查看所有的网络连接信息 -a所有,-n显示数字地址而非主机名 proto 套接字使用的协议是什么 recv-Q 连接这个套接字的用户,还未拷贝的字节数 send-Q 远程主机还未确认的字节数

local address 套接字本地的地址和端口号 forign address 套接字的远程主机地址和端口号 state 套接字的运行情况,listen监听中

netstat -tunlp |grep 80 -- 查看80端口 kill -9 8614 -- 关闭80端口 Pkill -9 httpd --关闭端口

netstat -tunlp --查看机器上正在运行的所有端口,进程 情况 -t 显示tcp信息 -u 显示udp -n 不进行dns解析 -l 只显示正在监听中的套接字 -p 显示 进程

127.0.0.1 本地回环地址,用于本地,外部无法访问此地址,每个机器都有 0.0.0.0 绑定机器所有的网卡地址

netstat -tunlp |grep 3306 -- 查看是否运行了3306

netstat -rn 等同于 route -n 查看路由表

netstat -i # -i -- 显示出所有网络接口的列表情况 iface 网络设备的名字 MTU 最大的传输单元,单位是字节 rx-ok/tx-ok 正确接收了多少数据包,发送了多少数据包 rx-err/tx-err 丢弃了多少数据包 rx-ovr/tx-ovr 由于错误遗失了多少的数据包 flg标记 l 是回环地址 r 接口正在运行中 u 接口处于活动 b 设置了广播地址 m 接收了所有的数据包 o 表示在该接口上禁止arp p 端对端的连接 查看tx-err rx-rrr 最好是0 否则表示有丢包 查看服务器监听 netstat -tunlp |grep 3306 -- 监听数据库是否运行 netstat -tunlp |grep 80 -- 监听web服务是否运行 netstat -tunlp |grep 443 --监听https服务是否运行

centos7 有个查看网络的工具 : ss 需要安装: yum install iproute -y ss -help ss -an 显示所有连接情况 ss -tunlp |grep 80 --监听情况

-------------------------ping命令

ping 不通域名的是时候 检查 /etc/resolv.conf 相当于hosts文件

ping 正确的地址报错:destination host unreachable 需要检查本机网络ip,网关,路由

telnet 用于登录,检测端口 需要安装: yum install telnet -y telnet 192.168.1.5 返回 connected to 192.... escape character is 正确 返回 connection refused 失败

ssh 命令 ssh 命令是opens sh软件包中的一个套件命令,使用ssh加密协议进行远程登录,并且实现对服务器的运维管理

ssh 用户名@ip地址 -p 25589 -- -p 指定端部品口

wget 命令 用于下载指定的url资源文件, 支持断点续传 支持ftp,http 支持添加代理

安装: yum install wget -y

wget -o /tmp/yyy.jpg --limit-rate=1k https://www.xxxxx/x.jpg --下载图片另存为到/tmp改名为yyy.jpg, --limit-rate=1k 限速 -c 断点续伟 -b 后台运行 日志默认输出 到 wget-log中 -q 安装输出 -T 指定访问网站的超时时间 -t 重试访问几次

ll -h --中断

wget --user-agent="伪装的客户端信息,改成手机信息" www.baidu.com --下载为手机端网页

wget -q -T 3 -t 1 --spider www.baidu.com -- 访问badu网站 再用 echo $? 检测,非0则为不存在的网站

lsssss echo $? -- 输出127 表示命令错误

ls ssssss echo $? -- 输出2 表示命令正确,文件不存在, 0 表示 正常

--------yum /etc/yum.repos.d/*.repo --配置文件指定仓库地址 /etc/yum.conf --为所有仓库提供公共配置 yellow dog updater,modified --yum全称

cachedir=/var/cache/yum/$basearch/$releasever

mv /etc/yum.repos.d/centOS-Base.reCentOs-Base.repo.backup --备份

下载centos-6 wget -0 /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/centos-6.repo 或 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/centos-6.repo

systemctl status nginx --查看软件 systemctl stop nginx systemctl start nginx

yum repolist all -- 显示yum仓库

yum list nginx --显示软件包

yum install gcc path

wget 下载源码包

./sbin/nginx -s reload --重新读取nbginxr的配置文件

--------------数据链路层,局域网通信 tcp/ip 模型各层介绍 物理层 传递2进制电信号的介质 链路层 单纯传输01,标识每组电信号特征,然后分组按顺序发出去 一组电信号就是一个业的数据包,一个数据包以称一帧 确定主机的mac地址 网络层
定义ip,确认主机所在的网络位置,并通过ip进行mac寻址,对外网数据包进行路由转发 传输层 定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序 应用层 定义数据格式,并按照对应的格式解读数据

-----------------shell *.sh --shell脚本后缀名为.sh echo $SHELL -- /bin/bash 操作系统默认以bash婢

/usr/bin/bash ./a.sh -- 用bash 去执行 a.sh which sh --/usr/bin/sh

#! /bin/bash --作用是作什么--如果有个文件以这个开头,表示调用bash解析

python hello.py --用python 打开文件 hello.py

vim hello.py --写入

    #!/usr/bin/python      --指定用python去解析这个文件的以下内容
    print("hello world")

打开文件 ./hello.py (没有执行权限x怎么办- chmod u+x hello.py -给文件加上执行权限) ./hello.py 执行文件

#!/usr/bin/env

source a.sh --source 也是调用bash . a.sh -- . 也是调用bash bash a.sh --调用bash 执行

shell脚本语言 bash 的特性 history --使用过的命令记录 -c 清空 -r 恢复 !3080 --执行第3080条命令 !! --上次执行的命令 echo $HISTSIZE --历史记录有多大 多少个

 cat -n ~/.bash_history 或 ls -a ~/.bash_history  --显示存放历史记录的文件

 !c    --显示历史记录带c开头的语句

-----------磁盘和分区 fdisk -l |grep sd 显示磁盘信息 fdisk /dev/sdb 格式化第二块磁盘sdb (更改暂存内存中,类型为8e) 输入m接着下面的设置 p 打印现有的分区表
n 添加新的分区 p/e 主/扩展 默认p,默认起始扇区,默认结束扇区 -确认这些信息

df -h 显示磁盘挂载的文件系统

cat /proc/partitions 分区后的信息会写入到这个文件

partprobe命令 用于centos5或之前版本,可以重读分区表,当删除文件后仍然占用磁盘空间,是因为分区没更新,用此命令生读 partprobe /dev/sdb 重读磁盘/dev/sdb的分区表信息

partx 用于告诉内核,新的分区情况,让内核重读分区表

--针对超过2tb的磁盘分区 parted 小于2TB的可以用fdisk,大于2TB只能用parted 命令,且转换磁盘为GPT格式

删除分区: fdisk /dev/sdb p 打印信息 m 操作菜单 d 删除操作 默认删除 w 写入保存

parted /dev/sdb help 帮助 mklabel gpt 创建一个新的磁盘标签 类型为gpt yes 确认 mkpart primary 0 500 创建为主分区类型,从0开始分配500M ignore 确认 p 打印信息 mkpart logical 501 10000M 从501开始,创建分10G 逻辑分区 p 打印信息 q 退出 ls /dev/sdb fdisk -l |grep sdb 用fdisk查看 parted /dev/sdb 用parted查看 q 退出

-------------软硬链接 软链接 ln -s /opt/a.txt /tmp/a ln -s创建软链接 目标绝对路径 快捷方式绝对路径 (-浅蓝色,-ll用箭头表示,- 删除不影响源文件,- 源文件不存在颜色变红色 ,- 可针对文件夹创建) readlink /tmp/a 查看软链接的内容,存放的是源文件的路径

硬链接 stat /opt/a.txt 查看文件的详细信息 ls -li /opt 查看opt目录下的文件的inode号,inode号相当开身份证号

ln /opt/a.txt /opt/a1 ln /opt/a.txt /opt/a2 ll -i 显示表明,aq,a2,a.txt inode号一样

inode 元数据区保存的是: 文件大小 属主信息 用户组信息 文件权限数字 文件的修改时间 还存储了一个文件的实体指针,指向block的位置

软,硬链接的区别 软 inode号不一样 支持创建目录 删除软链接不影响源文件 硬 inode号一样 不支持创建目录 不得跨文件系统 硬链接数据量的增加,会增加inode号码的计数 删除源文件,硬链接数据还在

------------文件系统 vfs文件系统 virtualenv file system 虚拟文件系统 linux 文件系统格式有: ext2 ext3 centos5 ext4 centos6 xfs centos7

windows 98 fat fat16 fat32 windows 200 ntfs

网络共享文件系统 nfs -network file system smb -server message block 服务消息块

集群文件系统 gfs -goole file system 是google公司为了存储海量的数据而开发的文件系统 ocfs -oracle cluster file system 是oracle公司为了数据库存研发平台,而定制的文件系统

分布式文件系统 ceph 为了存储的可靠性和扩展性的分布式文件系统

交换文件系统 swap

区别主要在于 是否是日志型文件系统

--mkfs 针对磁盘分区进行格式化文件系统

fsck命令,修复文件系统的命令 默认读取 /etc/fstab 开机挂载文件的

查看文件系统的属性 对于centos7之前的文件系统,使用dumpe2fs命令,打印文件系统块组信息,适用于ext2,ext3,ext4

对于centos7之后的系统而主默认用的是xfs文件系统,使用xfs_info打印文件系统信息

tune2fs命令 设置linux是否开机自动检查文件系统正常与否

lsblk命令 列出所有的设备以及文件系统信息 lsblk -f

练习 mkfs.xfs /dev/sdc2 对sdc2这个分进行格式化

tune2fs -c -1 /dev/sdc1 关闭文件系统自检

fsck命令,是否检查磁盘文件系统,修复错误 1.禁止文件系统开机修复错误 修改/etc/fstab文件,然后改成如下设置 /dev/mapper/cent-root /

针对磁盘进行修复检查 fsck -t 文件系统类型 设备名

------磁盘设备挂载 挂载通常是指将一个存储设备挂接到另一个已经慧的文件夹中,访问这个文件夹相当于访问该存储设备的内容,这个文件夹称之为“挂载点” 。没有挂载的磁盘相当于没有门窗的房间

mount命令 mount命令能够将指定的文件系统挂载到指定的目录上

1.硬盘接到机器上,分区之后,针对分区格式化文件系统,ntfs,ext3,ext4,xfs... 2.此是未挂载分区还只是一个封闭的空间,无法读写 3.针对分区和linux的文件夹,合并, 关联,挂载,即可通过访问被挂载的文件夹

mount 命令常用参数 -l 显示系统所有挂载的设备信息 -t 指定设备的文件系统类型,如果不指定,mount自动选择文件系统类型 -o 添加挂载的功能选项,用的较多 -r read,挂载后的设备默认是只读的 -w write 写权限 -o rw权限

-or 的参数详解
    async 以异步的方式处理文件系统IO,加速写入,数据 不会同步的写入到磁盘,写入到一个缓冲区的,提高系统性能,损失数据安全性
    sync  同步写入,性能较弱,提高数据读写安全性
    atime/noatime    文件被访问的时候,是否修改期时间戳,能够提升磁盘IO速度
    auto/noauto       可以通过-a 能数自动挂载或不挂载
    defaults    默认参数,包括了 rw,suid,dev,exec,auto,nouser,async。。。、
    exec/noexec  是否允许执行挂载点内的可执行命令,提升安全性

centos7新出现的mount选项有 att2 在磁盘上存储内连扩展属性,提升磁盘性能 inode64 允许文件系统的任意位置创建inode noquota 强制关闭文件系统的限额功能

mount的使用 mount /dev/sdb5 /mnt 挂载 sdb5 到文件夹mnt 此时没有格式化文件系统,不能访问 mkfs.xfs /dev/sdb5 将sdb5格式化为xfs文件系统

mount -l |grep sdb5 查看sdb5的文件系统挂载信息

df -hT 当前挂载点磁盘使用情况

echo {1..500000} > test.txt 向test.txt写到1到50万的数字 du -h * 当前目录的大小

取消挂载 umount /mnt 取消挂载点mnt,如果目录正在使用,则取消失败 mount -l |grep sdb5 查看sdb5的挂载信息

以只读的形式挂载设备 mount -o ro /dev/sdb5 /mnt 以只读(ro)挂载到mnt mount -l |grep sdb5 可看到ro只读以及其属性

禁止执行二进制文件 mount -o noexec /dev/sdb5 /mnt 使用noexec 是无法执行脚本文件的 ./a.sh 权限不够 chmod 777 a.sh 给文件添加读写权限,因为noexec,仍然会读权限不够 通过重新挂载才能解决


buffers,缓冲区,buffers是给写入数据加速加用的 cached, 缓存,用于读取数据时,加速数据读取用的

cached,磁盘中读取,保存在内存中,直接从内存读取加速 buffers是在写入是先保存到内存,达到一定的数量后写入磁盘,减少磁盘碎片,提高速度

buff和cache的作用总结 buffers和cached都是基于内存的存储中间层 cached解决时间问题,加速读取的过程 buff解决空间存储问题,给数据一个临时存放的区域 cached利用内存的高速读取特性 buff利用内存的存储空间特性


swap 交换分区 swap是linux系统磁盘管理的一块特殊分区,物理机内存不足时,系统会从整个内存中取出一部分没在使用的内存,提供给正在使用的程序 (如:当前虚拟内存不足)

swap分区作用 通过操作系统的调取,可以用到的内存会远大于物理内存 swap分区大小,必须根据物理内存和硬盘容量来计算

什么时候需要使用swap分区 -占用内存大的任务,如图像,视频等,必须用swap分区防止内存不足 -物理内存太小,必须使用swap提升内存使用量 -当电脑休眠,内存中的数据会放入swap交换分区中,当电脑恢复后再从swap中读取

创建swap分区 centos7系统,计算swap分区如下 -内存小于2g,swap分配和内存同样大小的空间 -内存大于2g,swap也就分配2g的空间 步骤: 1.先给磁盘分一个区 fdisk /dec/sdc(定一个磁盘) 2.针对磁盘分区进行格式化 mkswap 3.使用swap分区 swapon /dev/sdc1

fdisk -l |grep sd 查看磁盘情况 假设sdc还没分区 fdisk /dev/sdc
p 打印分区信息 n 创建 p 主分区 默认起始扇区扇区 +500m 结束扇区 ---到这里分区结束,下面格式化类型

t
82 代码82表示是swap类型 p 打印信息 w 写入保存 --创建结束,可用lsblk -f 查看信息

mkswap /dev/sdc1 指定为swap分区

swapon /dev/sdc1 设置为on,开启交换空间,swapoff 关闭


我的内存被吃了,无故提示内存不足,但在cache,buff中又看到大理内存,如何释放 free -m 看内存情况

解决方案 1.echo 1 > /proc/sys/vm/drop_caches 等同于 sysctl -w vm.drop_caches=1 删除缓存生效 1为true。这条命令作用是释放cache free -m 再次查看内存情况,可见free增大,buff/cache减小

2.echo 2 > /proc/sys/vm/drop_caches 等同于 sysctl -w vm.drop_caches=2 清除目录缓存和inodes

3.echo 3 > /roc/sys/vm/drop_caches 等同于 sysctl -w vm.crop_caches=3 清除内存页的缓存

以上三种方法都是临时清理缓存,如果想永久生效,编辑 /etc/sysctl.conf,把清缓存命令写到该文件

除了以上3个命令,还可以清理文件系统缓存,使用sync命令,用于清理僵尸进程

sync 输入sync,执行清理进程 sync的作用:将内存缓冲区的数据,写入到磁盘中

--开机挂载文件 1.由于mount 命令直接输入是临时生效,重启失效 /etc/fstab文件,存放系统一静态文件的地方,主要是系统启动的时候,系统默认读取这个文件的信息,将指定的挂载点进行挂载

vim /etc/fstab 编辑开机启动,如挂载磁盘可写入以下内容: /dev/sdb5 /mnt xfs defaults 0 0

--第一列是设备的名字,可以是文件系统,也可以是设备名称,NFS远程网络文件系统, 第二列是挂载点, 第三列是指linux能够支持的文件系统类型如:ext,4,ext3,nfs,swap,nfs, 第四列是挂载的功能选项(如只读),有很多,默认是用defaults, 第五列,dump,表示将文件夹内从备份,一般不对挂载点备份,默认都是0, 第六列:fsck 磁盘检查 默认都是0,表示不对磁盘进行检查,但根文件系统默认是检查的

补充挂载点知识:mnt是一个目录,里面可以有文件,当mnt目录被磁盘挂载时,这时只显示磁盘的内容

同样效果,另一种写法 mount /dev/sdb5 /mnt 挂载磁盘到mnt目录 mount 192.168.1.15:/home/nfs /mnt/ -o nolock --把本地的/mnt文件夹挂载到nfs文件系统上,且不加锁

df命令,检查挂载点的使用情况 通过 mount -a 命令,可以读取/etc/fstab文件所有的挂载情况 mount -a
mount -l

df -hT 加T可显示文件系统类型

df 命令的实际案例 -h 显示kb,mb单位大小 -i 显示已inode数量

du 命令 -h 显示文件大小 以kb mb为单位 -h 显示当前目录所有文件的大小 -ah 显示出目录中所有文件的大小 -ah --max-depth=2 /opt/ 指定文件夹深度的参数,几层目录 -ah --exclude='.pyc' 过滤显示文件

------------ raid 磁盘冗余阵列 redundant arrays of independent drives raid技术是将多个磁盘,组成一个磁盘组,分散存储,提升读写性能,得到冗余备份 raid0 两块磁盘交替存储,速度是一块硬盘的两倍,一个硬盘块坏,数据就不完整 ,因此数据不安全

rai1 两块磁盘,一个硬盘作备份。速度不变。安全但速度没提升,成本高

raid3 AxorBorC,A异或B异或C,三个硬盘,磁盘3为存储异或值,若3坏了,备份就损坏

raid5 三个硬盘,校验码均匀的放在每一个硬盘,损坏任意一个硬盘都能恢复。不能坏两个

raid10 raid0+raid1,四个硬盘,整度快,数据安全,成本高。


硬raid 与软raid 硬raid,raid卡实现 软raid,由操作系统实现,占用cpu资源

linux raid10 搭建 1.准备四个硬盘 先分区好: fdisk n -新建 p -主分区 默认 -大小默认,分配整个硬盘 t -修改分区类型 l -显示列表 fd -raid分区格式 w -保存

2.检查磁盘信息 ls /dev/sd* 3.学习mdadm 用于建设,管理和监控raid技术的命令 yum install mdadm --安装 mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde -- 创建raid10 -C 表示创建raid阵列 -v 显示创建过程 /dev/md0 表示raid阵列名字 -a yes 自动创建阵列设备文件 -n 4 表示用4个硬盘创建 -l 10 表示指定raid的级别

4.进行文件系统格式化,将/dev/md0格式化为xfs文件系统 mkfs -t xfs /dev/md0

5.对分区进行文件夹持载,使用磁盘分区新建一个文件夹,用于和阵列分区挂载 mkdir /filename

6.使用mount命令进行挂载 mount 设备名 挂载点 mount /dev/md0 /filename

7.检查挂载情况 mount -l |grep md0

8.还可使用df命令,查看md0使用情况 df -hT |grep md0

9.检查阵列 raid10 情况 mdadm -D /dev/md0

10.可以向磁盘阵列中写入数据,如 echo {1..3000000000} >> ceshi.txt --再开一个连接,输入top可监测数据变化

du -hT        查看新数据情况
df -hT |grep md0

--11.取消持载 umount /dev/md0 df -hT

12.设置开机挂载 vim /etc/fstab 写入:/dev/md0 /filename xfs defaults 0 0

当raid10 一块硬盘坏了怎么办 1.剔除一个硬盘 fdisk -l |grep sd* 查看硬盘信息 mdadm /dev/md0 -f /dev/ssd 剔除硬盘ssd,mdadm是用用管理raid的命令 df -hT

2.检查raid10的状态, 需要重启,重新读取raid信息,之前设置开机自动挂载的要去掉,需修改/etc/fstab mdadm -D /dev/md0 查看raid10状态

3.验证即使持掉了一个硬盘也不会影响raid10的使用

4.先取消挂载,去掉坏硬盘,关机加入新硬盘 umount /dev/md0

5.开机将新硬盘sdd加入到阵列中 mdam /dev/md0 -a /dev/sdd

6.检查磁盘阵列组的信息,等待一个修复的过程 mdadm -D /dev/md0

7.等待修复完毕,且激活的设备回到了4块 Active Devices : 4 Working Devices : 4

--raid10的重启 1.创建raid的配置文件 echo DEVICE /dev/sd[b-e] > /etc/mdadm.conf cat /etc/mdadm.conf

2.扫描磁盘信息,追加到这个文件中 mdadm -Ds >> /etc/mdadm.conf cat /etc/mdadm.conf

3.取消raid10的挂载 umount /filename/

4.可以停止raid10了 mdadm -S /dev/md0

5.检查一下磁盘阵列组的信息 mdadm -D /dev/md0

6.启动raid10 mdadm -A /dev/md0 激活 mdadm -D /dev/md0

--raid10的删除 1.取消挂载 umount /dev/md0

2.停止raid服务 mdadm -S /dev/md0

3.卸载raid10中所有的磁盘信息 mdadm --misc --zero-superblock /dev/sdb mdadm --misc --zero-superblock /dev/sdc mdadm --misc --zero-superblock /dev/sdd mdadm --misc --zero-superblock /dev/sde

4.删除raid10的配置文件 rm /etc/mdadm.conf

5.清除开机自动挂载配置文件信息配置 /etc/fstab

--raid5与备份盘的学习 用四个硬盘,三个搭建raid组,一个做备份盘 1.用三个硬盘创建raid5 mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde -n 指定3个硬盘 -l 指定raid的级别是raid5 -x 1 指定一个备份盘 /dev/sd[b-e] 代表指定使用的四块硬盘

2.检查一下raid阵列组的信息 mdadm -D /dev/md0

3.格式化文件系统 mkfs.xfs -f /dev/md0

4.开始挂载,使用阵列组分区 mount /dev/md0 /filename/

5.检查挂载情况,以及数据写入情况 mount -l |grep md0 df- hT |grep md0

6.写入完数据验证 df -hT |grep md0

7.见证备份盘的作用,从磁盘阵列组中删除一个硬盘,检查阵列情况 mdadm /dev/md0 -f /dev/sdb

8.检查备份盘是否自动加入了阵列组,实验完成


lvm逻辑卷技术

raid缺点: 扩容问题 分区间都是独立的 一个分区满了,无法直接扩容 如果想合并分区,还得格式化

lvm (logical volume manager) 逻辑卷管理技术 lvm是讲一个或多个硬盘在逻辑上进行合并,相当于一个大的硬盘去使用,这就是动态的磁盘容量管理技术

lvm的使用方式 基于分区形式创建lvm 硬盘的多个分区,由lvm统一管理为卷组,可以弹性的调整卷组大小,加入新硬盘,可以充分的利用 磁盘容量 文件系统是创建在逻辑卷上,逻辑卷可以根据需求改变大小 基于硬盘创建lvm 多个硬盘做成逻辑卷,将整个逻辑卷统一管理,对分区进行动态扩容

lvm的常见名词: pp (physical parttion),物理分区,lvm直接创建在物理分区上 pv (physical volume),物理卷,出于lvm的最底层,一般一个pv对应一个pp pe (physical extends),物理区域,pv中可以用于分配的最小存储单位,同一个vg所有的ppv中的pe大小相同,如1m,2m vg (volume group),卷组,卷组创建在pv这上,可以划分为多个pv le (logical extends),逻辑扩展单元,le是组成lv的基本单元,一个le对应了一个pe lv (logical volume),逻辑卷,创建在vg这上,是一个可以动态扩容的分区概念

lvm原理 -lvm 动态扩容大小,其实就是通过互相交换pe的过程,达到能够弹性扩容分区大小 -想要减少空间容量,就是剔除pe的大小 -想要扩大容量,就是把其他的pe添加到自己的lv当中 -pe默认大小一般都是4m,lvm最多可以创建出65534个pe,因此lvm最大的vg卷且单位是256g -pe其实是lvm最小的存储单位,类似于操作系统的block(4k) -lv逻辑卷的概念(理解为普通的分区概念,/dev/sda /dev/sdb)

实际创建lvm的过程 lvm优点 -lvm的文件系统可以跨多个磁盘,分区大小不受磁盘容量限制 -可以在系统运行中,直接动态扩容文件系统大小 -可以直接增加的新的硬盘到lvm的vg卷组中

lvm的创建流程 1.物理分区阶段,针对物理磁盘磁盘或分区,进行fdisk 格式化,修改系统的id,默认是83,改为8e类型,是lvm类型 2.pv阶段,通过pvcreate,pvdisplay将linux分区改为物理卷pv 3.创建vg的阶段,通过vgcreate,vgdisplay,将创建好的物理卷pv改为物理卷组vg 4.创建lv,通过lvcreate,将卷组,分为若干个逻辑卷

转化为命令操作就是这样的过程: 1。fdisk 修改磁盘的系统id 2.pvcreate,创建pv,以及显示pv信息,pvdisplay 也可以直接输入pvs查看简单的信息 3.创建vg卷组,vgcreate vgs 显示卷组信息、 4.创建lv逻辑卷 lvcreate lvs 显示逻辑卷信息 5.开始格式化文件系统,使用lv分区了

lvm的管理常见命令 pv 物理卷 pvcreate 创建物理卷 pvscan 扫描物理卷信息 pvdispaky 显示各个物理卷详细参数 pvremove 删除物理卷

lv vg vgcreate vgscan vgdisplay vgreduce 缩小卷组,把物理卷从卷组中移除 vgextend 扩大卷组,把新的物理卷加入到卷组中 vgremove 删除整个卷组

lv逻辑卷 lvcreate lvscan lvs lvdisplay lvextend lvreduce lvremove

------------创建lvm 实例 1.四个硬盘 2.挑选/dev/sdb /dev/sdc 两个硬盘,创建物理卷,然后添加至卷组 3.创建pv
prvcreate /dev/sdb /dev/sdc 创建卷组 vgcreate abc /dev/sdb /dev/sdc pvs -查看信息 vgs pvscan vgscan pvdisplay vgdisplay

4.扩大缩小卷组 新加一块硬盘,然后创建物理卷 pvcreate /dev/sdd psv -检查一下物理卷信息 vgextend abc1 /dev/sdd -把新建的sdd加入到卷组abc1中 vgdisplay -查看vg大小

缩小卷组,易除/dev/sdd vgreduce abc1 /dev/sdd -剔除 pvremove /dev/sdd -删除 vgs

5.使用此时的卷组,创建逻辑卷,/dev/sdb /dev/sdc lvcreate -n lv1 -L _500m abc1 lvdisplay

6.对刚创建的lv1逻辑卷进行格式化文件系统 mkfs.xfs /dev/abc1/lv1

7.对逻辑卷进行挂载 mount /dev/abc1/lv1 /mnt

8.向磁盘中写入数据验证 df -hT ls /mnt

9.设置开机挂载 vim /etc/fstab 写入:/dev/abc1/lv1 /mnt xfs defaults 0 0

tail -l /etc/fstab -查看文件 mount -a -读取/etc/fstab中所有的挂载信息 mount -l |grep lv1

10.lv逻辑卷的扩容操作 vgdiplay -查看free pe 可用的空间

卸载lv的设备 umonut /mnt

扩容逻辑卷大小 lvextend -L +10G /dev/abc1/lv1

mount /dev/abc1/lv1 /mnt/

调整xfs文件系统大小,否则读取不到容量 vldisplay -查看lv size xfs_growfs /dev/abc1/lv1 -调整xfs文件系统 df -hT

--删除逻辑卷 卸载设备 umount /mnt/

删除逻辑卷 lvremove /dev/abc1/lv1

删除卷组 vgremove abc1

删除物理卷设备 pvs -查看 pvremove /dev/sdb /dev/sdc

检查所有lvm 信息 pvs vgs lvs 均没有相关信息,表示lvm被删除了

------------------------------进程管理

进程是什么 1.linux下存在process(进程)和thread(线程) 这两种操作系统基本概念 2.cpu只能一次处理一个任务 3.进程是可以有多个线程,--多线程 5.进程里是有存放空间的,线程轮流占用 6.如果线程不等待空闲,就会造成冲突,崩溃。这时占用的线程需要加锁,这就是操作系统进线程的互斥锁概念(mutex,互斥锁:防止线程对内存数据抢夺的作用用,防止多个线程同时读写同一块内存)

进程管理命令

--------------------------ps ps ps命令用于报告当前系统的进程状态

ps找出进程的号码 kill杀死进程,重启进程

ps 选项(功能参数) 要操作的对象

pid -代表进程对应的id号 cmd -正在执行的系统命令是什么 tty -进程所属的控制台号码 time -进程所使用cpu的总时长

kill -9 pid -强制杀死进程

ps的命令组合 ps -ef -显示出所有详细的进程信息 -e -列出所有进程环境变量 -f -显示uid,时间等信息

uid -这个进程是哪个用户使用 pid -进程的id ppid -父进程id c -表示cpu使用百分比 tty -该进程在哪个终端上执行 time -该进程使用的 cmd -使用的命令

ps参数分为两种系统形式 1.不带减号: 列出信息时,添加第个进程所在的环境变量,以ascii码显示 ps ef 2.带减号:
ps -ef

ps aux -a显示当前终端所有进程,包括用户信息,u以用户为主,x显示所有 user 用户 pid 进程id %cpu cpu百分比 %mem 内存百分比 vsz 进程使用的swap内存单位 rss 进程锁占用的内存量 tty 这个进程所在的终端信息 stat 进程状态 S 静止,睡眠中,可以补唤醒 s 该进程含有子进程 R 运行中 D 该进程不可终端睡眠 T 表示已停止 Z 僵尸进程

+    前台进程
N    低优先级
<    高优先级
L    锁定

time -进程运行的时间 cmd -进程执行的命令是什么

常用两大命令 ps aux |grep xxx ps -ef |grep xxx

ps -u -显示指定用户信息 ps -u root ps -u user

ps -eH -显示进程树

ps -eo pid,args -自定义查看

pstree -显示进程树,能够清晰表示层级 yum install psmisc -y

pgrep -判断进程是否存活,有id号表示存活 pgrep nginx pgrep -l nginx

-------------------------kill kill 命令 kill -l -列出所有,终止信号

sighup -挂起 singint -中断,ctrl+c 发送 sigquit -退出信号,ctrl+\ sigkill -强制中断信号,用于立即杀死某些进程 sigterm -默认使用15信号,终止进程 sigtstp -暂停,ctrl+z

kill pid -发送15信号,终止进程 kill -d pid -强制终止进程,可以杀死所有的进程,如僵尸进程等

特殊信息 -0, 常用在shell脚本中,--不发送信号给pid,但会检查pid,如果是0表示存在,是1表示不存在 kill -0 pid -可以检测是否存活 echo $? -取出上一次命令执行结果,0为正确,不为0都是错误状态码

killall命令 killall nginx -杀列所有的nginx进程

pkill -杀死父进程和子进程 pkill nginx pkill ping
pkill -t -9 pts/1 -通过终端的名字

---------------------linux资源管理器 top 用于实时监控系统处理器状态,以及其它硬件负载信息还有动动态的进程信息

top用法 z -z指令,打于打开/关闭

top命令第一大板块 18:20:00 up -当臆的机器时间,date命令查看时间 7:30 -当前系统运行了多久 users -当前机器几个用户在使用

load average: 0.00, 0.01, 0.05 -显示系统的平均负载情况,分别是1分钏,5分钟,15分钟显示平均值(值越小,负载越低)

tasks: 99 total, 1running, 98 sleeping, 0 stopped, 0 zombie -总共的进程任务情况 %cpu(s):0.3 us,0.3 sy, 0.0 ni, 99.3 id, 0.0 wa,0.0 hi,0.0 si, 0.0 st #cpu使用百分比情况 us -用户占用的cpu百分比情况 sy -系统内核空间占用的cpu百分比 ni -用户进程空间占用的cpu百分比 id -空间的cpu百分比 wa -等待输入输出的cpu百分比

kib mem: 997956 total, 577820, 125760 used, 283376 buff/cache -内存的状态 total -总物理内存大小 free -空闲的内存 used -已使用 buff/cache -缓存

kib swap:2097148 total, ..... -交换空间的状态

第二大板块, 动态的进程信息 pid
user pr -优先级 ni -nice值,越高优先 virt -虚拟内存总量 res -使用的物理内存大小 shr -共享内存大小,单位kb %cpu %mem

top的实际使用 1 输入指令1, 查看linux的逻辑cpu个数 M 输入指令M, 内存使用量,从大到小排序

top -c -显示进程的绝对路径 top -p -刷新时间 top -n 3 -刷新3次后结束 top -p nginx -指定观察进程

top 界面下: z 指令 打开颜色 x 指令 某一列高亮 b 指令 某一列加粗

-------------------------nohup nohup -可以将程序挂起,在后台运行,输出的结果不打印到终端 -nohup输出结果会写入到当前目录的nohup.out文件中 -如果当前目录禁止写入,会写到home目录的nuhup.out文件中

nohup ping baidu.com -不打印到前台,但前台会卡住,不能输入执行其它命令 tail nohup.out -验证输出结果 nohup ping baidu.cm & -在后台运行,前台可继续运行

重定向, 执行结果写入到自定义的 abc.out, 正确错误结果都写入 nohup ping www.baidu.com > abc.out 2>&1 & -等同于:nohup ping www.baidu.com 1>abc.out 2>abc.out &

重定向,无论正确或错误信息都直接销毁(linux黑洞) nohup ping www.baidu.com > /dev/null 2>&1 &

bg

bg命令,将进程放入后台运行,使得前台可以运行其他的命令 bg命令 等同于 &

-使用一个不中断的命令 ping baidu.com 使用ctrl+z 可暂停且放入后台 jobs -可查看到后台正在执行的程序命令 fg 1 -可放入到前台继续执行 bg 1 -可放入到后台运行:[1]+ ping www.baidu.com &

---linux系统的运行级别、 读取系统的/var/run/utmp 系统定位的运行级别 runlevel -检查当前系统的运行级别 N 3

常见的级别如下: 0 关机 1 单用户模式 2 多用户模式,无网络 3 完全的多用户,有网络 4 用户自定义级别 5 图形化,多用户 6 重启

--init init是linux进程的初始化工具,是所有父进程,进程id是1 -可以使用init加上级别,直接操作系统运行级别

htop htop命令,就是比top更直观好看的命令 yum install htop -y 1.进入htop,直接输入htop 2.按f2,或点击 setup,进入设置界面 3.可以使用上下左右进行状态栏选择,以及用空格切换风格 4.可以再次进入htop,输入f3,进行进程查找 5.定位到某一个进程后,如果要杀死,可以按f9,按enter 6.按下f5,显示进程的层级关系,父,子进程 7.支持一些快捷键 M 以内存使用量大小排序 P 以cpu使用量排序 T 以进程运行的时间排序 / 进入搜索输入,查找指定的进程

-------------- glances

系统资源检测工具有很多: top,htop,glances glances工具是由python语言编写,使用psutil模块来采集系统的硬件资源等 glances可以为unix和linux操作系统提供专家级别的性能检测,这么一个工具 -cpu使用率 -内存使用情况 -内核统计信息 -磁盘的io速度,读取数据,写入数据的一个速度,传输的速率 -文件剩余空间 -网络的io速度,网络的读取数据和写入数据的传输效率 -缓存空间的使用情况 swqp空间 -动态进程信息 -动态进程信息 -系统负载信息

glance不能将采集到的数据,输出到一个文件中,便于数据分析人员,对服务器性能报表进行分析以及绘制图表等

1.必须得安装此工具,第一种,用python的软件包管理工具pip pip3 install glaces 第二种: yum install glances -y

glances界面 h 帮助 q 退出 c 以cpu排序 m 以内存排序 i 以io速率排序 p 以进程名排序 d 打开/关闭磁盘读写情况 f 打开/关闭文件系统剩余空间情况

glance web服务功能 此功能能将glances监控到的数据,以网站形式做一个展示,用浏览器查看 yum install python python-pip python-devel gcc -y

再用python的包管理工具,安装一个模块,用于启动wdb服务 pip install bottle

使用glances运行一个web监控界面 glances -w

来自同一个机器的ip地址 127.0.0.1 本地回环地址,用于机器硬件之间的ip通信,只能用于内部访问 0.0.0.0:61208 表示绑定服务到这台机器的所有网卡上 192.168.178.183:61208 对外提供服务 192.168.178.180:61208 第二块网卡

glance还支持cs模式,glances运行一个serrver服务端,可以用xlient客户端支远程连接访问,查看系统状况

---------------------nds 服务器 dns服务器一般是安装bind服务

如果是小型的域名解析需求,使用dnsmasq即可

1.安装 yum install dnsmasq -y

2.dnsmasq配置 /etc/dnsmasq.conf

3.自定义域名和ip对应关系 /etc/dnsmasq.hosts -该文件需要手动创建

4.配置dnsmasq的上游dns服务器地址 /etc/resolv.dnsmasq.conf -也需要手动创建

5.修改/etc/dnsmasq.conf vim /etc/dnsmasq.conf resolv-file=/etc/resolv.dnsmasq.conf #指定上游dns服务器地址

#自定义域名及其子域名,解析到对应地址
address=/baidu.com/123.206.16.61
address=/taobao.com/123.206.16.61

#定义一个本地域名配置文件
addn-hosts=/etc/dnsmasq.hosts

#日志
log-queries

#定义目录下的文件类型
conf-dir=/etc/dnsmasq.d
#Include all the files in a directory except those ending in .bak
conf-dir=/etc/dnsmasq.d,.bak

#Include all files
conf -dir=/etc/dnsmasq.d/,*.conf

#自宝义的dnsmasq服务的配置文件 grep -v '^#' /etc/dnsmasq.conf |grep -v "^$" resolv-file=/etc/resolv.dnsmasq.conf address=/baidu.com/123.206.16.61 address=/taobao.com/123.206.16.61 listen-address=123.206.16.61 addn-hosts=/etc/dnsmassq.hosts log-queries conf-dir=/etc/dnsmasq.d conf-dir=/etc/dnsmasq.d,.bak conf-dir=/etc/dnsmasq.d,*.conf conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

6.内部解析 cat /etc/dnsmasq.hosts 123.206.16.61 baidu.com

7.本地内部解析不到就到上游找 cat /etc/resolv.dnsmasq.conf nameserver 119.29.29.29 nameserver 223.5.5.5

启动 dnsmasq systemctl start dnsmasq

修改本地配置文件
/etc/resolv.conf 修添加记录: nameserver 123.206.16.61

---------------- ssh远程加密 ssh是一套网络协议,目的在于保证安全的网络服务以及加密远程登录信息

linux的ssh协议管理的开源软件 是主流的openssh工具

ftp协议的telent工具进行远程登陆是明文传输的,不安全

对称加密 和 非对称加密

对称加密: 使用同一把密钥,数据和密钥一起发送 强度高, 如果机器数量大,都得发送密钥,如果一个密钥丢失,其它主机安全性无保障 密钥是通过客户端发送

非对称加密: 公钥,public key , 私钥private key 公钥是一把鍞,私钥是钥匙 私钥是 放在服务器上的,即使中途被截取,也无法解密

中间人攻击 伪装服务器,拦截客户端发出的数据

如何避免 验证中间人攻击 如:ssh root@192.168.178.142 首次连接的时候会提示信息,包含SHA256:...(yes/no) 登录以后输入: ssh-keyscan -t ecdsa 192.168.178.142 | ssh-keygen -lf - 这里显示的sha256:... 和登录时提示的sha256 看信息是否是一致,一致就是正确的

ssh相关配置文件,放在$home/.ssh/ ls ~/.ssh/ authorized_keys config id_rsa id_rsa.pub known_hosts

known_hosts -当客户端接收到服务器的公钥这后,公钥信息就记录在该文件中,下次就不再提示确认

authorized_keys -该文件是服务器将客户端的公钥信息保存在这个文件中(用于客户端免密码登录时使用)

id_rsa -私钥文件 id_rsa.pub -公钥文件

登录服务器的形式

基于口令 即我们普通的形式

基于公钥登录 1.前提: 客户端生成公私钥 2.客户端发送公钥给服务器,服务器写入authorized_key文件中 3.客户端再次发出登录请求,服务器生成一个随机数R,再用客户端的公钥对随机数据R加密公钥(R) 4.服务器发送公钥(R)给客户端 5.客户端用私钥解开公钥(R),得到随机数R; 再对随机数R和用户的一个会话key(sessionkey)采用 md5加密方式进行加密,得到一个摘要数据Digest1,发送给服务器 6.服务器也对该随机数R进行同的算法加密得于Digest2; Digest1和Digest2对比,一致则通过

-----ssh免密登录 实操 客户端: ssh-keygen -t rsa -默认回车

ssh-copy-id root@192.168.178.142 -发送公钥给服务器,服务器存在authorized_keys中

ssh root@192.168.178.142 -此时就能实现免密登陆了

-------ssh配置文件

sshd服务的配置文件 /etc/ssh/sshd_config

--在生产服务器下,一般会禁止root用户登录服务器,以及修改ssh的远程连接端口,最大程度保证服务器安全,防止被黑客攻击 grep -Ev '^$|^[# ]'

如何配置安全的服务器: 假设服务器ip:192.168.178.142

修改ssh端口 -Port 禁止root登录 -PermitRootLogin 禁止用密码登陆,只能用公私钥登录 -PasswordAuthentication vim /etc/ssh/sshd_config Port 23354 -把默认22 改成23354 AddressFamily any -这项是指定是否同时支持ipv4和v6,把这项启用 ListenAddress -绑定所有的网卡,启用 PermitRootLogin no -是否支持root登录,把yes改为no,表示禁用 PasswordAuthentication no -禁止用密码形式登陆 修改完保存,重启服务才能生效

useradd userA -创建用户,以便客户端登陆 passwd 123456

客户端操作: ssh-keygen -t rsa -生成公私钥

ssh-copy-id userA@192.168.178.142 -发送公钥给服务器,用userA用户登录,并首次输入密码

ssh userA@192.168.178.142 -此时可进行免密登录了

--使用 root登录服务器,配置userA用户支持sudo命令 vim /etc/sudoers 文件 添加如下:

##Allow root to run any commands anywhere root ALL=(ALL) ALL userA ALL=(ALL) ALL 保存退出

用用户userA登录,验证userA是否能使用sudo命令 su - userA -切换到用户userA sudo ls /root -能看到root目录表示配置生效

重启sshd服务: systemctl restart sshd

验证ssh密码登录,端口修改是否生效 ssh root@192.168.178.142 -提示port 22 无效 ssh root@192.168.178.142 -p 23354 -提示登录拒绝 ssh userA@192.168.178.142 -p 23354 -登录成功

---------------------- ftp 文件传输协议 ftp 默认有2个端口 20 端口 用于数据的传输端口 21 端口 用于接收客户端发来的ftp指令和参数

ftp两种工作模式 主动模式: 服务器向客户端发起连接请求 被动模式: 服务器等待客户端发来请求

linux ftp用vftp vftp使用 yum install -y vftp

vftp修改配置文件 /etc/vsftpd/vsftpd.conf 注意:这个conf文件不字段后面不要有注释,会报错 anonymouse_enable=YES
local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES listen=YES listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES

grep -E '^#|^$' /etc/vsftpd/vsftpd.conf -显示vsftpd.conf的内容,过滤掉#号开头的注释行和$以空格开头的行

vsftpd允许用户用三种认证的模式,登录到ftp服务 -本地模式 基于linux的本地账号密码进行验证,配置简单,但存在安全隐患,一旦ftp账号密码被破解,服务器无安全可言

-匿名用户模式 任何人不需要密码直接登录, -不安全,一般打开在内网,并且受防火墙规则控制,以保证安全

-虚拟用户模式 单独为ftp工具创建用户数据库存,基于口令和密码登录,这些数据仅仅用于ftp工具,不影响其它程序,因此是最安全的形式

命令行输入:ftp -进入ftp ? -可查看帮助, 重命名,删除等


修改完配置文件需 重启vsftp systemctl restart vsftpd

如报错:
systemctl status vsftpd 报错如有相关ipv6, 配置文件里把ipv6关闭即可

netstat -tunlp -可查看到 21,22端口已打开

匿名用户登录实验:

启用匿名用户,需配置: anonymous_enable=YES -启用匿名用户 anon_upload_enable=YES -支持匿名用户上传数据 anon_mkdir_write_enable=YES -支持匿名用户写入 anon_other_write_enable=YES -允许匿名用户修改,命名,删除

ftp 192.168.178.142 -连接到服务器 name:anonymousd -匿名登录,此为帐号 password: -用空的回车 ftp>ls -默认进入目录 /var/ftp/ cd pub ls mkdir abc
-如果 写入失败, pub用户是属于root用户, ll /var/ftp chown -Rf ftp.ftp pub -把pub这个文件夹,改组改为ftp

ftp>rmdir abc -删除abc目录

linux本地用户登录实验 vim /etc/vsftpd/vsftpd.conf

anonymous_enable-NO -关闭匿名用户登录 local_enable=YES -允许本地用户登录 write_enable=YES -允许写 local_mask=022 -用户写入数据时,默认的文件权限

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

#anon_other_write_enable=YES

#注释掉匿名相关的设置 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES userlist_deny=YES tcp_wrappers=YES

保存退出, 重启服务 systemctl restart vsftpd

grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf -查看配置文件

grep 'userA' /etc/passwd -查看用户是否有userA,没有用useradd创建 useradd userA passwd 123456

ftp 192.168.178.142 name: userA password: 123456 -登录后默认进入用户userA 家目录 ftp>mkdir abc -创建目录 ftp>rmdir abc -删除目录 ftp>quit

--有些用户无法登录ftp, 在一个用户名单里面被 禁止了 cd /etc/vsftpd/ ls -找到user_list,ftpusers 文件 cat ftpusers -这里面写的用户是不允许登录ftp的

ftp虚拟用户登录模式实验

yum install db4 db4-utils -y -安装db

cd /etc/vsftpd/ ls vim ftp_user.txt -创建用于验证vsftpd的数据文件 写入:
userAB 123 userBB 456 :w

-以上写入不安全,需要用db_load命令对这个ftp_user.txt文件进行加密,并且修改文件属性,让普通用户无权查看 db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db cat ftp_user.db -此时文件已加密 file ftp_user.txt -显示为ascII类型 file ftp_user.db -显示为hash加密

降低文件的读写权限 chmod 600 ftp_user.db

删除旧的数据文本,保证安全性 rm ftp_user.txt

创建当虚拟用户登录后进入的默认路径(目录),且和linux中的一个用户做一个映射关系,防止虚拟用户创建文件夹报错,因为系统没有此用户会报错

创建一个系统用户和虚拟用户映射,且不需要家目录,禁止登录shell useradd -d /var/ftpdir -s /sbin/nologin virtual_userABC id virtual_userABC -查看用户id grep 'virtual_userABC' /etc/passwd -查看用户信息 -virtual_userABC:x:1005:1005::/var/ftpdir:/sbin/nologin -nologin不能登录的用户,/var/ftpdir用户家目录位置

检查该用户的家目录 ll /var /ftpdir/ -该目录为空 ll -ld /var/ftpdir/ -查看属性,可见是属于virtual_userAA,且权限为该用户才能读写

更改文件夹权限 chmod -Rf 755 /var/ftpdir

修改virtual_userAA用户添加到ftpuser文件中,增大系统安全,该操作不会影响虚拟用户的操作 echo "virtual_userABC" >> /etc/vsftpd/ftpusers

修改vsftpd的配置文件,添加一个支持虚拟用户验证的PAM文件,pam是一组安全机制的模块,认证文件路径在 vim /etc/pam.d/vsftpd 在后面写入: 注意:这个文件自带的内容要删除或注释掉,只保留我们写入的这两行 auth required pam_userdb.so db=/etc/vsftpd/ftp_user account required pam_userdb.so db=/etc/vsftpd/ftp_user

修改vsftpd的配置文件,加载支持虚拟用户模式 /etc/vsftpd/vsftpd.conf anonymous_enable-NO -关闭匿名用户登录 local_enable=YES -允许本地用户登录 write_enable=YES -允许写 local_mask=022 -用户写入数据时,默认的文件权限

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

#anon_other_write_enable=YES

#注释掉匿名相关的设置 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES userlist_deny=YES tcp_wrappers=YES

guest_enable=YES guest_username=virtual_userABC -指定虚拟用户账号 allow_writeable_chroot=YES -如果用户被限制,只能在其家目录,允许用户可以对家目录写入数据 :wq

7.针对不同的虚拟用户设置不同的权限, 修改vsftpd文件,定义user_config_dir userAB 针对该用户,允许它能上传,新建,修改,查看,删除等权限 userBB 只读权限

创建一个管理虚拟用户家目录 mkdir /etc/vsftpd/virtual_user_dir vim userAB

#anonymous_enable=YES -启用匿名用户 anon_upload_enable=YES -支持匿名用户上传数据 anon_mkdir_write_enable=YES -支持匿名用户写入 anon_other_write_enable=YES -允许匿名用户修改,命名,删除

vim userBB anon_upload_enable=NO -支持匿名用户上传数据 anon_mkdir_write_enable=NO -支持匿名用户写入 anon_other_write_enable=NO -允许匿名用户修改,命名,删除

修改vsftpd主配置文件, /etc/vsftpd/vsftpd.conf 追加写入: user_config_dir=/etc/vsftpd/virtual_user_dir

systemctl restart vsftpd -重启服务

-------------------------文件共享 samba服务 samba 是一款能让linux系统应用微软文件资料的工具

微软指定了smb协议,用于局域网文件共享,smb协议全称是 服务消息块,(server message block)

smb协议移植到linux系统平台这后,就诞生了smaba软件

samba特点 -samba最大的特点就是可以用于linux和windows这之间进行文件共享和打印机共享 -samba不仅仅可以用于linux和windows之间 -samba还可以用于两台linux之间共享 -由于linux平台诞生了一个更好的工具,nfs网络文件共享系统,专门用于linux之间文件数据共享 -因此samba更多是用于linux和windows之间的数据传输

samba安装 注:安装软件之前,务必配置好linux的 阿里云的yum源以及 epel源 检查: ls /etc/yum.repos.d/ cat /etc/yum.repos.d

yum install samba -y

查看samba的配置文件 vim /etc/samba/smb.conf

主要分为 global,home 两个模块, 参数自行搜索学习

samba的共享文件夹配置 实验: [abc] -自定义文件夹 comment = this is test configure path = /home/abc -路径 public = no -不公开 writable = yes -可写 guest ok = yes -匿名登录

pdbedit命令 pdbedit是samba的用户管理命令 pdbedit -a username -新建samba帐号 pdbedit -r username -修改samba帐号 pdbedit -u, --user=USER pdbedit -x username -删除samba帐号 pdbedit -L -列出详细 pdbedit -Lv -列出用户详细 pdbedit -c "[D]" -u username -暂停用户 pdbedit -c "[]" -u username -恢复用户

使用pdbedit命令,创建samba服务专用的用户密码信息

创建samba的用户,必须保证这个用户在linux系统中在在 id userA -查看是否是有该用户id

如果系统没有该用户,可创建一个userA useradd userA

创建一个samba用户 pdbedit -a -u userA -创建一个samba用户userA

创建完毕,重启samba,并查看端口是否存活 systemctl restart smb

netstat -tunlp |grep smb

查看防火墙 iptables -L

关闭防火墙的操作 iptables -F systemctl stop firewalld

使用客户端连接samba服务器 windows进行连接 -运行- \192.168.178.111

macos连接 smb://192.168.178.111

------------------文件传输工具 ftp vsftpd samba linux和windows之间 NFS(network filesystem) linux和linux这间 以挂载的形式,映射在本地

nfs特点 nfs和samba很像,samba服务主要用于局域网 nfs发展有30年,有一个稳定的网络共享系统,中小型企业适用

nfs存储的形式 软件 -nfs服务搭建 硬件

nfs和rpc nfs通过port传输数据,nfs端口是随机选择的(可重启服务验证) nfs是通过rpc服务进行一个端口注册,实现告知用户,nfs的工作端口是哪一个

什么是rpc(远程过程调用) linux上使用nfs服务,必须启动2个服务 nfs rpc nfs服务通过rpc注册自己的端口功能 rpc服务功能就是记录每个nfs功能对应的一个端口号,并且rpc保证了nfs客户端发出请求的时候把该功能对应的端口信息告知nfs客户端,保证客户端能够正确连接到nfs服务端的端口,达到数据传输的目的

rpc服务如何知道nfs服务端的端口信息 因为,nfs服务启动时,会随机采用若干个端口,并且主动是rpc服务中进行注册 如此一来,rpc服务就正确知道所有nfs服务端口功能了,rpc服务默认使用linux的111端口来和nfs客户端进行交流,并通过111端口将正确的nfs服务端的端口作息,告知给nfs客户端

rpcbind -rpc在centos7平台下,实现软件rpcbind服务 -使用nfs服务,必须先运行好rpcbind服务 -如rpc服务重启了,那原本注册的nfs服务端的信息也就失效了,还得再重启nfs服务 -如果只是修自以为了nfs配置文件,不需要重启nfs,因为重启后,端口就更新了,不得重新注册,只需要执行如下命令,重新读取nfs配置文件即可 exrpotfs -rv systemctl reload nfs

安装配置nfs -nfs-utils:nfs服务的主程序,报过来rpc.nfsd, rpc.mountd这两个守护进程,相关的配置文件信息

rpm -q nfs-utils rpcbind -查看是否安装 如没装: yum install -y nfs-utils rpcbind

环境配置 nfs是c/s模式,client,server,准备一个nfs客户端,两台linux

在nfsserver端创建一个用于共享的文件夹,且设置读写权限 mkdir /nfsfile chmod -RF 777 /nfsfile

修改nfs服务的配置文件(server端) vim /etc/exports -nfs配置格式: nfs共享目录 nfs客户端地址(参数1,参数2。。。) nfs客户端地址 如下: / client(rw) client(rw) -把nfs服务端的根目录共享出去,且允许两个主机名为client1,client2的机器 ,进行rw

允许任意的客户端,都能挂载到nfs服务端的 /public目录下 /public *(rw)

只允许指定的ip地址能挂载到nfs服务端的/home/nfsf文件夹,且是只读的 /home/nfsf 123.206.16.61(ro)

nfs语法参数解释 -nfs共享目录:是nfs服务器需要共享出去的实际目录,文件夹,必须写绝对路径,且注意目录的读写本地权限,如果允许客户端读写操作,other有一个读写的权限(user,group,other三个身份)

-nfs客户端地址,也就是nfs服务器授权可以访问共享目录的地址,可以写主机名,可以写通配符,ip地址

-权限参数,对nfs授权的客户端,进行权限控制的参数,详见下面案例

nfs客户端地址形式 单一客户端 192.168.178.113 用的很少 允许 整个网段 192.168.178.0/24 指定网段,用的很多 授权整个个域名客户端 nfs.xxx.com 用的很少 授权子域名客户端 *.xxx.com 用的很少

nfs客户端权限参数 ro 只读 rw 读写 root_squash 当nfs客户端以root帐号访问nfs服务端共享目录数据的时候,反该root映射为nfs服务端的一个匿名用户,该用户的uid,gid会变成nfsnobody的信息 no_root_squash 几乎和上面一样,root帐号会映射成root,非常不安全,禁用

all_squash 所有的nfs客户端映射为匿名用户,很安全,生产环境常用

aync 数据同步写入到内存和磁盘,优点是保证内存数据安全,但是效率太低 async 娄据写入到内存,再持久化到磁盘,效率高,但有可能有数据丢失的隐患

启动nfs服务端的文件目录共享 -nfs服务都是基于rpc的111端口,必须确保先启动了rpc 如果rpcbind服务停止了,111端口也不会挂掉,因为centos7还提供了一个rpcbind.socket服务运行着

systemctl status rpc -查看111 systemctl stop rpc -111不会停 systemctl stop rpc.socket -111会停止

nfs服务端部署 1.确保rpcbind服务已启动

2.创建nfs目录,修改权限,修改属组 mkdir -p /nfsf chmod -Rf 777 /nfsf

id nfsnobody chown -R nfsnobody.nfsnobody /nfsf/

3.在nfs共享目录中创建文件 touch /nfsf/abc.txt

4.修改nfs服务端的配置文件,进行客户端授权 vim /etc/exports /nfsf *(insecure,rw,sync) -insecure:允许客户端大于1024的端口发请求

5.重新加载配置文件 systemctl restart nfs

6.检查本地的nfs服务挂载情况 showmount -e 127.0.0.1cat /var/lib/nfs/etab

7.再次检查nfs服务端的共享参数 cat /var/lib/nfs/etab

8.挂载到目录/mnt mount -l |grep mnt mount -t nfs 127.0.0.1:/nfsf /mnt mount -l |grep /mnt ls /mnt 取消挂载 umount /mnt

---------------nfs客户端远程挂载的使用 1.准备一个新linux,并开启nfs服务 yum install nfs-utils rpcbind -y

2.客户端也要运行rpcbind服务 systemctl status rpcbind -查看rpc运行情况,如没运行 systemctl start rpcbind -启动服务

3.可以远程的检查,nfs服务端的共享情况 showmount -e 192.168.178.110 -查看服务端nfs共享情况,如下为正确 export list for 192.168.178.110 /nfsf *

4.可以进行以nfs形式的挂载 mount -t nfs 192.168.178.110:/nfsf /mnt888

5.检查nfs客户端的挂载情况 mount -l |tail -l -本机的挂载详细

6.进行本地挂载目录,查看文件验证是否成功

7.取消挂载 umount /mnt888 -如果取消失败,注意,是否待在该目录下 -如果挂载失败,注意,是否是防火墙,或是服务器配置

------nfs自动挂载服务 (即重启后要生效) 1.把挂载命令写到 vim /etc/fstab -写入: 192.168.178.110:/nfsf /mnt888 nfs defaults 0 0

--如果fstab写入太多,开机受影响,因些可以根据需要选择动态挂载autofs

autofs 自动挂载服务 autofs和mount 区别 autofs是一个守护进程,它会在后台检测用户是否要访问某一个还末挂载的文件系统,autofs会自动检测该文件系统是否存在,如果存在就挂载,如果用户过了一段时间没有使用,autofs自断开

autofs缺点:如果是高并发的业务场景,autofs进行大理的挂载,会给服务器造成压力

安装autofs工具 yum install autofs -y

修改autofs配置文件 vim /etc/auto.master 找到第七行,添加如下代码: /misc /etc/auto.misc /- /etc/auto.home -添加这里的配置参数

修改自定义的自动挂载配置文件 vim /etc/auto.home /mnt888 -rw,soft,intr 192.168.178.110:/nfsf

重启autofs systemctl strart autofs systemctl status autofs

-注意/mnt888是否已经被挂载

------------------------------- 防火墙 防火墙可以定义流量规则,端口过滤

硬件防火墙 软件防火墙

-linux上提供的软件防火墙,名叫iptables,它是一个防火墙命令工具,iptables还是一个客户端代理,通过代理,将用户配置的安全策略执行到对应的安全框架中netfilter

iptables只是一个命令行的工具,处于用户空间,离用户最近

真正实现流量过滤的软件是netfilter,处于系统内核空间,和操作系统离的最近

iptables+netfilter共同组成了linux的软件防火墙,一般就用来替代昂贵的防火墙了

centos7系统下 firewalld软件,以替代了iptables工具

iptables是用户配置的防火墙规则,交给内核层的netfile工具去处理

firewalld服务是把用户配置的防火墙规则,交给内核层的nftables网络过滤器去处理

-iptables 是按照规则办事,由运维人员制定流量的出入 把控,分为三个链,i,f,o iptables -l -查看linux防火墙规则 input forward output

-iptables 默认会自上面下的读取规则,分两种策略 允许 拒绝

-当所有的是拒绝的,就需要制定一些允许的 -当所有的是允许的,就需要制定一些拒绝的

防火墙的规则默认是存储在linux内核空间的信息包中,这些规则定义了源地址信息,目的地址信息 传输协议类型等

规则链 多条规则组成规则链 linux默认的5个规则链 -路由选择前处理数据包,prerouting链 -处理流入的数据包,input链,入口 -处理流出的数据包,output链 -处理数据转发的数据包,forward链 -进行路由选择后处理数据包,postrouting链

动作

流量在通过input链后,进入到服务器内,还得遵循一些动作去处理这些数据包 -accept, 允许数据包通过 -reject, 拒绝数据包通过,还会给客户端一个响应,告知它被拒绝 -log,在linux系统的日志目录下/var/log/message中记录防火墙日志,再进行下一个数据包处理 -drop,直接丢弃数据包,不给于客户端任何的回应 -snat,源地址转换,解决内网用户用同一个公网的问题,用于forward链 -dnat,目标地址转换 -redirect,在本机做端口映射

drop和reject reject ,会有一个回应 drop, 没有回应

iptables命令 使用 案例
1.禁止服务器被ping,拒绝icmp协议流量 iptables -L -查看详细 iptables -F -清空规则

2.禁止服务器被ping,即拒绝icmp ,直接丢弃,丢弃后分响应和不响应 reject,drop iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT

3.删除指定的iptables规则,删除后又能ping了 iptables -D INPUT 1

4.拒绝ping流量,不给回应 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

5.禁止访问80端口 iptables -A INPUT -p tcp --dport 80 DROP

-禁止访问ftp,ftp默认端口是21 iptables -A INPUT -p tcp --dport 21 -j ACCEPT

-允许指定客户端访问22端口 iptables -A INPUT -s 192.168.178.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP -这个实例,1.指定网段可访问,2.拒绝所有的访问。可见规则自上而下执行

-禁止指定的机器,访问本机的80端口 iptables -A INPUT -p tcp -s 192.168.178.0/24 -p --dport 80 -j REJECT

-禁止所有的主机网段,访问8000-9000端口 iptables -A INPUT -p tcp -s 0/0 8000:9000 -j REJECT iptables -A INPUT -p udp -s 0/0 8000:9000 -j REJECT


tcp/ip协议

icmp internet control message protocol 消息传递协议 dns 域名解析协议,建立在udp和tcp上,默认53端口 ftp file transfer protocol,文件传输协议 nfs rpc+nfs 网络文件共享协议 snmp 预先警告发再网络设备问题 http 超文本传输协议

三次握手 1.syn seq=x 2.syn seq=y,ack=x+1 3.ack=y+1

sync 表示建立连接信号 ack 确认消息 x 是随机数 ack=x+1 表示明确客户端身份,它和x是同一个连接 ack=y+q 表示可以和服务端连接


静态网页 -指没有数据交互的网页 -主要用于展示型的网站,一般适用于中小型网站 -文本,图片,视频 特性,一般都有固定的url地址,url地址中不包含?&等特殊符号,没有数据库支撑,

动态网页 -指有数据交互的网页

url和uri uri -uniform resource identifer 统一资源标识符


软件包安装三种方式

--源码包
优点:可以修改源代码,编译安装,稳定高效 缺点:容易出错,编译时间长 安装: 先传到本地 解压: tar -zxvf .tar.gz
tar -jxvf
.tar.bz2 -z或--gzip或--ungzip:通过gzip指令处理文件; -x或--extract或--get:从文件中还原文件 -v:显示操作过和 -f或--file:指定一个文件 -j:支持bzip2解压文件 进入源码文件夹,然后执行后续操作 配置 config/configure/bootstrap - 编译 make/bootstrapd -安装 make install/bootstrapd install --prefix=路径 -指定安装路径 --with-PACKAGE名=包所在的路径

yum 本地 vim /etc/yum.repos.d/local.repo [local] name=local yum baseurl=file:///mnt gpacheck=0 enabled=1 :wq

网络源: mirrors.aliyun.com,mirrors.163.com vim /etc/yum.repos.d/163.repo [163] name=163 network yum baseurl=http://mirrors.163.com/centos/6/os/x86_64/ enabled=1 -启用 gpgcheck=1 -较验启用 gpgkey=http://mirrors.163.com/centos/6/os/x86_64/ rpm-gpg-key-CentOS-6 :wq

yum clean all -清空缓存 yum makecache -加载源 yum repolist -显示yum源内容

yum升级软件 yum -y install samba yum update samba rpm -ql samba -查看版本,包括路径,-qc是显示配置文件

man man -帮助文档 n -上一个 N -下一个 q -退出

/usr/local -源码包默认路径 /usr/local/etc -配置文件件默认路径 /usr/local/bin/ -命令

源码安装 .configure --prefix=/opt/axel make install

----------------日志管理 tail /var/log/secure
tail /avr/log/message -系统日志 lsof -i:80 80端口运行中的服务

rsyslog日志管理 类型 auth pam 产生的日志 authprive ssh ,ftp 等登录信息的验证信息 cron 时间任务相关 kern 内核 lpr 打印 mail 邮箱 mark rsyslog服务内部信息,时间标识 news 新闻组 user user用户程序产生的相关信息

日志优先级0-7 0 debug 有调信息的,日志作息最多(红色感叹号) 1 info 一般作息,最常用 2 notice 最具有重要性的普通条件信息 3 warning 警告级别 4 err 错误级虽,阻止某个功能或者模块不能正常工作的作息 5 crit 严重级别,阻止整个系统或者整个软件不能工作 6 alert 需要立刻修改的信息 7 emerg 内核崩溃严重信息 none 什么都不记录

自定义日志 vim /etc/rsyslog.conf 例: . /var/log/mylog kern.err /var/log/kernel.log -有关kern的错误写到,自定义的kernel.log *.info;mail.none /var/log/big.log -info相关,mail除外 mail.info /val/log/mai.log -大于等于info和邮件相关的信息 cron.info;cron.!err /var/log/ -天于等于info和cron相关的信息,错误信息不记录 cron.info /var/log/newcron

systemctl restart rsyslog

/var/log/mylog 清空mylog


日志轮转 vim /etc/logrotate.conf

-全局配置 weekly 一周一次 rotate 4 轮转次数,默认4次,保留4份 create 创建新文件 dateext 以轮转时候的时间作为轮转文件的结尾

-局部配置 include /etc/logrotate.d missingok 在文件不存在的时候也不报错 create 0644 root utmp

强制轮转 logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf -s指定最后的日志轮转记录文件为/var/lib/logrotate/logrotate.status 例: vim /etc/logrotate.d/yum /var/log/yum.log{ missingok

#notifempty
#size 30k
#yearly
daily        -每天轮转一次
rotat 3        -保留3份
create 0777 root root

} :wq 手动改时日期验证,查看/var/log/yum.log,是否有新文件生成

--日志安全,操作日志的隐藏权限 vi /etc/logrotate.d/messages 测试前先把/etc/logrotate.d/syslog中的message删除 /var/log/messages{ prerotate -指定轮转之前 chattr -a /var/log/messages -去掉属性 endscript

#notifempty
daily
crate 0600 root root
missingok
rotate 3

postrotate        -轮转完之后
    chattr +a /var/log/messages       -加a属性
endscript

} :wq

--------------- apache 关闭防火墙

安装 yum -y install httpd

个改配置文件 vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" -配置文件目录 Listen 80 User apache -子进程的用户 Group apache -子进程的组 ServerAdmin root@localhost -管理员邮箱 DocumentRoot "/var/www/html" -网站家目录

-网站容器开始标识 Options Indexes FollowSymLinks -找不到主页时,以目录方式呈现,并允许连接到网站,根目录除外 AllowOverride None -none不使用.htaccess控制,all允许 Require all granted -granted表示所有访问,denied表示拒绝所有的访问 DirectoryIndex index.html -定义主页文件,当访问到网站目录时如果有定义的主页文件,网站会自动访问 AddDefaultCharset UTF-8 -定义字符编码,如果有中文可能需要改为gb2312或gbk,因网站文件的默认编码而异

启动apache网站 systemctl start httpd yum -y install lsof lsof -i:80 systemctl stop httpd

cd /var/www/html/ 把主页放在这个位置 systemctl restart httpd

curl -i 192.168.1.123 -测度网站

更改网站根目录 vi /etc/httpd/conf/httpd.conf :119 -跳转到119行 documentRoot "/www" --修改根目录为:/www :set nu -显示行号 :131 -跳转到131行

-也要修改为:/www :wq

如果/www下没有.html,会自动跳到默认/www/html/ systemctl restart httpd

修改主页类型 vi /etc/httpd/conf/httpd.conf :164 跳转到164行 DirectoryIndex index.php -改成.php systemctl reload httpd

测试 echo "php main page" > /www/index.php -创建index.php

apache 常用命令 源码安装 安装环境: yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel

cd /tmp/ yum provides rz yum -y install lrzsz rz -上传httpd源码包 tar xf httpd cd httpd.tar.gz ./configure --prefix=/usr/local/apace2 && make && make install 如报错apr yum -y install apr-* 安装完成

cd /usr/local/apache2/bin/apachectl -M
-M -查看常见的模块 -l -查看加载的静态模块 -t -检查配置文件 graceful -加载配置文件,但不重启 start/restart/stop -启动,重启,停止

--apache配置用户认证 --配置登录网站需要密码

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

AllowOverride Authconfig AuthName "cct" AuthType Basic AuthuserFile /data/.htpasswd -指定存放用户和密码的文件 require valid-user

:wq

vi /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vhosts.conf -注释去掉

-htpasswd 生成密码文件 htpasswd -c /data/htpasswd cct -指定用户名为:cct,输入自已设定的密码 /usr/local/apche2/bin/apachectl graceful -加载配置

/usr/local/apache2/bin/apachectl -t 如报错‘servername‘ 解决:vi /usr/local/apache2/conf/httpd.conf 最后一行加入: ServerName localhost:80

cat /data/.htpasswd -查看用户信息

/usr/local/apache2/bin/ap apachectl apxs

/usr/local/apache2/bin/apachectl restart

访问: http://192.168.1.123/data/www/abc

--apache配置默认虚拟主机 可以运行多个站点,也可以多个域名 vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

-第一个虚拟主机 DocumentRoot: "/tmp/111" -该目录可以不存在 ServerName www.111.com

-第二个虚拟主机 DocumentRoot: "/data/www" -该目录可以不存在 ServerName test.com ServerAlias aaa.com -第二个域名,也叫别名

-这段设定放在虚拟主机配置的最上面,访问除了已设置的test,aaa.其它访问问的域名均跳转到/tmp/111下。

vim /usr/local/apache2/conf/httpd.conf :207 -跳转到207行

AllowOverride none Require all granted -修改为granted

:/virtual hosts -搜索 Include conf/extra/httpd-vhosts.conf -去掉注释 :wq

创建目录 cd /tmp/ mkdir 111 cd /tmp/111/ vi index.html hllow i am 111.com

同创建 /data/www/index.html echo 'i am www.aaa.com and www.test.com' >> /data/www/index.html

加本地解析 vi /etc/hosts 192.168.1.123 www.111.com 192.168.1.123 www.test.com 192.168.1.123 www.aaa.com

重启服务
-如果报错 httpd already running ; 解决:killall httpd /usr/local/apache2/bin/ap apachectl apxs

/usr/local/apache2/bin/apachectl restart

验证: 注:只能在本机验证访问,因为解析写在本地hosts

--------`apache配置rewrite规则 域名301跳转 web服务可能会用到多个域名,域名有主有次,输入次域名会自动跳转到主域名进行访问,设定为301永久跳转,302是暂时跳转 vi /usr/local/apache2/conf/httpd.conf :/rewirte -找到156行,注释去掉 LoadMoudule rewrite_module modules/mod_rewrite.so Include conf/extra/httpd-vhosts.conf -注释去掉481行
:wq

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf -全部清空

DocumentRoot "/data/www"

RewriteEngine on RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR] RewriteCond %{HTTP_HOST} ^www.bbb.com$ RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L] :wq

httpd.conf -t -检查配置文件 重启服务 /usr/local/apache2/bin/ap apachectl apxs /usr/local/apache2/bin/apachectl restart

创建 /data/www/index.html 创建 本地解析 /etc/hosts 192.169.1.123 www.aaa.com 192.169.1.123 www.bbb.com 192.169.1.123 www.test.com

验证 curl -I www.aaa.com -状态码301 curl -I www.bbb.com -状态码301 curl -I www.test.com -状态码200


禁止指定user_agent

vi /usr/local/apache2/conf/httpd.conf :/rewirte -找到156行,注释去掉 LoadMoudule rewrite_module modules/mod_rewrite.so Include conf/extra/httpd-vhosts.conf -注释去掉481行
:wq

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf -全部清空

DocumentRoot "/data/www"

RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^.curl. [NC,OR] -禁止curl和chrome浏览器访问 RewriteCond %{HTTP_USER_AGENT} ^.chrome. [NC] -NC是不区分大小写的意思 RewriteRule .* - [F] -表示禁止 :wq

httpd.conf -t -检查配置文件 重启服务 /usr/local/apache2/bin/ap apachectl apxs /usr/local/apache2/bin/apachectl restart

验证 curl -I www.aaa.com -因为禁止curl所以访问不到

---------- 通过rewrite限制某个目录 RewriteCond %{REQUEST_URI} ^.//tmp/. [NC] EewriteRule .* - [F]

------rewrite规则 R=301 强制外部重定向 [F]禁用URL,返回403HTTP状态码 NC不区分大小写 [OR] 或者

-----rewrite变量 %{HTTP_USER_AGENT} -表示访问的user_agent %{HTTP_HOST} -表示当前访问的网址,只是前缀部分,格式是www.xxx.com,不包括‘http://’和‘/’ %{REQUEST_URI} -表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的‘/’ www.123.com/abc/1.html -www.123.com表示host,abc/1.html表示 uri

-----------apache配置日志切割与管理 web服务器出现大量的访问日志和错误日志,所以我们要对日志进行切割,方便查询,一些不重要的记录,可以规定日志中不显示

日志的路径: /usr/local/apache2/logs ErrorLog "logs/test.com-error_log" -错误日志 CustomLog "logs/test.com-access_log" common -common是日志类型

相关模式规定 LogFormat "%h %l %u %t %r %>s %b \"%{Referer}i\" \"%{User-Agent}i"" combined

LogFormat "%h %l %u %t %r %>s %b" common %h -来源ip %l %u -访问的user %t -时间 %r -动作 %>s %b
%Y%m%d 年月日

vi /usr/local/apache2/conf/httpd.conf :/log_config LoadModule log_config_module modules/mod_log_config.so -去掉注释,开启该功能

:/LogFormat -定位到格式模块

---切割 vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/www" ServerName www.test.com CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined -规定一天切割一次 86400为一天的秒数 :wq

----不记录指定文件类型的日志 vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/www" ServerName www.test.com ErrorLog "logs/test.com-error_log" SetEnvIf Request_URI ".\png$" image-request SetEnvIf Request_URI ".\bmp$" image-request SetEnvIf Request_URI ".\swf$" image-request SetEnvIf Request_URI ".\js$" image-request SetEnvIf RequestURI ".*\css$" image-request CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access%Y%m%d_log 86400" combined env=!image-request -规定一天切割一次 86400为一天的秒数, env=!image-request表示以上规则都不记录
:wq

---配置静态缓存 vi /usr/local/apache2/conf/httpd.conf :/expires -113行 loadModule expires_module modules/mod_expires.so -去掉注释

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/www" ServerName www.test.com ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min"
:wq

重启服务 /usr/local/apache2/bin/ap apachectl apxs /usr/local/apache2/bin/apachectl restart

验证:访问192.168.1.123/q.jpg curl -x192.168.1.123:80 'http://www.test.com/q.jpg' 如正确有状态码: cache-control:max-age=86400

------apache配置防盗链 防止其它网站大量使用自己已网站里的一些图片,流量跑的是自己的网站,造成带宽的浪费,防止图片被盗用

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/www" ServerName www.test.com SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref -给网址做标注 Order Allow,Deny -禁止引用 Allow from env=local_ref -允许local_ref引用
:wq

重启服务 /usr/local/apache2/bin/ap apachectl apxs /usr/local/apache2/bin/apachectl restart

----apache访问控制 -针对某些目录进行访问控制,禁止一些ip地址的访问

AllowOverride None Options none Order allow,deny -先允许后拒绝 Allow from all deny from 192.168.1.111 -该地址为禁止访问的IP地址 <、Directory>

-针对uri做限制访问

-包含有‘admin’的网址 Order allow,deny Allow from all Deny from 192.168.1.111

-表示所有uri中包括admin的都进行ip访问限制

-------apache 禁止解析 php 多用在网络安全方面,比如:某些目录上传文件,避免上传的有木马,针对某些路径禁止解析php

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

-对data目录进行php解析限制 php_admin_flag engin off -将php解析引擎关闭 Order deny,allow Deny from all -禁止解析所有,若不加filesmatch,只是将engine off,在浏览器访问该文件时,会将php文件下载来

----------------------------------nginx服务的搭建与配置 安装 yum -y install nginx

epel源安装 rpm -Uvh http://nginx.org/packages/centos/7/noarch/rpms/nginx-release-centos-7-0.el7.ngx.noarch.rpm

vi /etc/nginx/conf.d/admin.conf root /var/www/card/public; :wq

创建文件 mkdir /var/www/card/public echo "<?php echo 'hello world'?>" >> /var/www/card/public/php_info.php

systemctl restart php-fpm lsof i:9000

systemctl restart nginx

yum -y install php-fpm

vi /etc/php-fpm.d/www.conf :/apche RPM:apache choosed to be able to access some dir as httpd user = nginx group = nginx :wq

------------------- nginx反向代理 cd /etc/nginx/conf.d/ vi default.conf upstream test{ server 192.168.1.100 weight=1; server 192.168.1.99 weight=1; } server{ listen 80; server_name www.test.com; access_log /var/log/nginx/host.access.log main;

location / { proxy_pass http://test; } } :wq

systemctl restart nginx;

------------- LA/NMP 架构 LNMP是linux+nginx+mysql+php的组全方式,其特点是利用nginx的快速与轻量级,替代以前的LAMP(linux+apache+mysql+php)的方式。由于安装方便,并且安装脚本也随时更新。

LNMP方式的优点:占用vps资源少,nginx配置起来也比较简单,利用fast-cgi的方式动态解析php脚本

LNMP方式的缺点:php-fpm组组的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 bad gateway错误

----------- mysql yum -y install epel-release.noarch

yum -y install wget wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm -官网下载源安装包 yum -y localinstall mysql57-community-release-el7-11.noarch.rpm -安装mysql官方yum源

yum -y install mysql-community-server mysql -安装服务端和客户端

systemctl restart mysqld

查看复制 mysql初始密码
grep 'password' /ar/log/mysqld.log 复制: PqC:sJjs70+

mysql -uroot -p', PqC:sJjs70+' -登陆mysql mysql> alter user 'root'@'localhost' identified by 'Qf.123com'; -修改密码为Qf.123com mysql>\q -退出

重启mysql systemctl restart mysqld

mysql -uroot -p'Qf.123com' mysql -uroot -p -登陆方式2

--创建库 qfedudb 并设置权限

create database qfedudb character set utf8 collate utf8_bin; show databases grant select,insert,update,delete,create,drop,alter,index on qfedudb.* to 'qfedu'@'localhost' identified by 'yangge.123com';

flush privileges; -刷新 show grants for 'qfedu'@'localhost'

systemctl enable mysqld

----------------------------------------mariaDB mariaDb 源配置 vi /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64 gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 :wq

mariadb安装 yum -y install MariaDB-server MariaDB-client

MariaDB基本配置 systemctl start mariadb systemctl stop mariadb systemctl restart mariadb systemctl enable mariadb

MariaDB进程查看 netstat -ntlp |grep 3306

MariaDB 数据库初始化 -为了确保数据库存的安全性和正常运转,需要先对数据库进行初始化: 1.设置root管理员在数据库中的密码值(注意,该密码并非root管理员在系统中的密码,这里的密码值应该为空,可直接按回车键)

2.设置root管理员在数据库中的专有密码

3.随后删除匿名帐户,并使用root管理员从远程登录数据库,以确保数据库上运行的业务的安全性

4.删除默认的测试数据库,取消测试数据库的一系列访问权限

5.刷新授权列表,让初始化的设定立即生效

初始化命令 mysql_secure_installation enter crrent password for root (enter for none): -初次运行直接回车 set root password? [y/n] y -是否设置root用户密码 new password: re-enter new password: remove anonymous users?[y/n] y -是否删除匿名用户 disallow root login remotely? [y/n] n -是否禁止过程登录 remove test database and access to it?[y/n] y -是否删除test数据库存 reload privilege tables now?[y/n] y -是否重新加载权限表

初始化测试登录 mysql -uroot -p"Aa112233"

show databases

mariaDB 设置utf8编码 vim /etc/my.cnf [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake

MariaDB的使用 mariaDB的使用和mysql的语句完全一样

mariaDB基本使用 修改密码 MariaDB [(none)]> set password = PASSWORD('Aa112233');

创建tests数据库,如果加charset=utf8 表示指定utf8编码

create database test;

进入test数据库

use test;

创建mytest数据表

create table mytest(id int,name char(32));

show tables;

desc my test; -查年表结构

mariadb增删改查 增

insert into mytest(id,name) values(1,"zero"),(2,"one"); 查 select id,name from mytest; 删 delete from mytest where id=2; 改 update mytest set name="ten" where id=1

关于用户及权限常用命令 创建用户和密码 create user zero@'%' identified by 'zero';

授权 grant grant 权限 on 数据库.表名 to 帐户@主机名 -对特定数据库中的特定表授权 grant 权限 on 数据库. to 帐户@主机名 -对特定数据库中的所有表给与授权 grant 权限1,权限2,权限3 on . to 帐户@主机名 -对库中所有表给与多个授权 grant all privileges on . to 帐户@主机名 -对所有库和所有表授权所有权限 grant all privileges on . to username@'%' identified by 'password'; -授与最大的权限,即所有的权限
grant create on test.
to zero@'%' identified by 'zero'; -授予zero用户,只有创建test数据库的权限 grant create on . to one@"%" identified by 'one'; -授予one创建的权限,对于所有的库表生效

删除用户 drop user one; 刷新权限 flush privileges

----mariadb数据库备份与恢复 备份所有的数据库存命令 all全备份 mysqldump -u root -p --all-databases > /tmp/db.dump enter password:

ll /tmp/db.dump -退出查看是否备份成功

单独备份某个数据库存 mysqldump -u root -p test > /tmp/test.sql enter password:

删除数据库 再恢复 drop database test; -删除test这个库 show databases;

mysql -uroot -p < /tmp/db.dump -恢复 enter password:

------------------php安装配置 安装epel源 yum -y install epel-release

安remi源: yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装yum源管理工具 yum instal yum-utils

安装php7.3 yum install -y php73-php-fpm php73-php-cli php73-php--bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pcl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll 装完需重启计算机

启动php服务 systemctl restart php73-php-fpm

rpm -qa |grep php -查看安装包 rpm -ql php73-php-fpm-7.3.6-1.el7.remi.x86_64 -查看安装位置

find /etc/opt/remi/php73 -name php.ini -查找php配置文件位置

php73 -v -查看版本

yum updata -升级

------------基于LNMP快速简单搭建wordpress平台 wrodpress是一种使用php语言开发的博客平台,用户可以在支持php和mysql数据库存的服务器上架设属于自己的网站,也可以反wordpress当作一个内容管理系统cms来使用,wordpress是一款个人博客系统,并正逐步演化成一款内容管理系统软件,它是使用php语言和mysql数据库开发的,用户可以在支持php和mysql数据库的服务器上使用自己的博客,wordpress有许多第三方开发免费模板,安装方式简单易用,不过要做一个自己的模板,由需要你有一定的专业知识,比如你至少要懂的标准通用标记语言下的第一个应用html代码,css,php等相关知识,wordpress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中中文语言包,wordpress拥有成千上万个各式插件和不计其数的主题模板样式

基础环境要求 mysql ,php, nginx

安装mysql yum -y install mysql57-community-release-el7-10.noarch.rpm

启动mysql systemctl start mysqld

修改mysql登录密码 mysql>alert user 'root'@'localhost' identified by 'Aa112233'
创建wordpress数据库存并授权 mysql>create database wordpress; mysql>create user 'wordpress'@'localhost' identified by 'Aa112233' mysql>grant all privileges on wordpress.* to 'wordpress'@'localhost'; mysql>flush privileges;

安装nginx环境 yum install nginx -y 添加配置文件 vim /etc/nginx/conf.d/wordpress.conf server{ lsten 80; server_name opswordpress.transspay.net; root /wordpress; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php index.php } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } :wq

nginx -s reload

安装php环境 安装php-fpm yum install php-fpm php-mysql -y 启动php-fpm systemctl start php-fpm.service 检测php-fpm端口 lsof -i:9000

安装 wordpress 下载解压wordpress wget https://wordpress.org/latest.tar.gz tar xf latest.tar.gz

设置wordpress-config.php文件,根据自己的数据库修改相关的配置 cd /wordpress/wp-config-sample.php /wordpress/wp-conig.php vim /wordpress/wp-config.php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'Aa112233'); define('DB_HOST', 'utf8'); define('DB_COLLATE', '');

设置秘钥的部份 略。。。

浏览器访问ok

启动mysql systemctl restart mysqld

grep "password" /avr/log/mysqld.log -查看复制密码

mysql -uroot -p"Aa112233"

alter user 'root'@'localhost' identified by 'Aa112233' create database wordpress; create user 'wordpress'@'localhost' identified by 'Aa112233' -创建数据库‘wordpress’ grant all privileges o wordpress.* to 'wordpress'@'localhost' -授权 flush privileges; -刷新权限 \q

安装nginx环境 yum install nginx -y vi /etc/nginx/conf.d/wordpress.conf server{ lsten 80; server_name www.test.com; root /wordpress; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php index.php } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } :wq

vi /etc/nginx/nginx.confi 删除server模块

配置php环境 yum install php-fpm php-mysql -y

ststemctl restart php-fpm

vi /etc/php-fpm.d/www.conf user = nginx group = nginx :wq

导入网站源码 cd /tmp/ 解压wordpress文件 修改权限 chmod -R 777 wordpress/

systemctl restart nginx systemctl restart mysqld systecmtl restart php-fpm

----------------- 源码安装部置lnmps环境 mysql 官方链接 官网:https://nginx.mysql.com/ 一般下载:https://dev.mysql.com/downloads/mirrors/ 文档:https://dev.mysql.com/doc/relnotes/mysql/5.7/en/ 注:每个版本都有对应的文档,上面的例子是mysql5.7的文档

mysql版本 四种: alpha 内测,有很多bug beta 开发测试版 rc 接近稳定版 ga 发行版,bug少,稳定版 release 最终版 一般用(R)表示

查看版本号

status; selectversion(); select@@version; show variables like"%version";

不登陆查询方法 mysql -u root -p mysqladmin -uroot -p version; mysql -v mysql --version mysql --help |grep Distrib$ mysql -? | grep Distrib$ mysql -I |grep Distrib rpm -qa|grep mysql

yum安装 优点:操作简单,服务器可以联网且yum源没有问题即可

编译安装 5.1.X及这前的版本是通过下载tar包以后解压,然后./configure,make,make install 5.4.X到5.7.X通过下载tar包以后解压后进入软件包解压路径,然后cmake,make,make install(cmka需要提前装) 优点:可以定制功能特性

二进制安装 官方下载二制包,解压初始化即可直接使用不用安装

rpm安装 下载rpm软件包上传到服务器系统本地 使用rpm或者yum命令直接安装

本例采用编译安装
创建个mysql 安装包目录 mkdir -p /usr/local/src/mysql

安装编译环境依赖包 yum -y install gcc gcc-c++ glibc automake autoconf libtool make

软件包下载 cd /usr/local/src/mysql wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz wget https://github.com/kitware/cmake/releases/download/v3.14.5/cmake-3.14.5.tar.gz wget http://ftp.ntu.edu.tw/mySQL/Downloads/mySQL-5.7/mysql-5.7.27.tar.gz ls -l

解压缩 tar -zxvf 解压boost库到/usr/local/目录 tar xf boost_1_59_0.tar.gz -C /usr/local/ cd /usr/local/ mv boost_1_59_0/ boost cd boost ls -l

编译安装mysql 安装编译mysql依赖包 yum install ncurses-devel -y

创建安装mysql相关目录 mkdir -p /database/mysql /{data,tmp,binlog,logs} tree -L 2 /database/

创建mysql 组和用户 groupadd mysql

JS
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。