一、服务相关命令
1.启动服务:systemctl start 服务名称;
2.重启服务:systemctl restart 服务名称;
3.停止服务:systemctl stop 服务名称;
4.查看服务状态:systemctl status 服务名称;
5.将服务设为启动项:systemctl enable 服务名称。
二、查看内存状态
1.查看内存使用状态:free
2.以M的形式来显示内存状态:free -m
3.以合适的单位来显示内存状态:free -h
三、屏幕显示命令echo
1.echo 要显示的字符
2.echo $PATH 打印环境变量显示在屏幕上
解析:PATH指环境变量,$PATH取出环境变量,echo将字符打印在屏幕上;连起来即为:取出环境变量的值并把值打印到屏幕上面。
四、日期时间命令
1.显示当前日期时间:date
2.显示当前年份:date "+%Y"
3.显示当前月份:date "+%m"
4.显示当前日期(每月的多少号):date "+%d"
5.显示当前小时(24小时制):date "+%H"
6.显示当前分钟:date "+%M"
7.显示当前秒:date "+%S"
8.日期时间格式化显示:date "+%Y-%m-%d %H:%M:%S"
五、从网上下载资源(需联网)
1.从网上下载资源:wget 资源地址
2.支持断点续传:wget -c 资源地址
六、系统进程状态
1.运行状态:R
2.停止/休眠状态:S 等待休眠状态
3.中断状态:D 即各种异常等
4.僵死状态:Z 吃系统资源且不提供服务
5.停止状态:T
七、top(任务管理器详解)
1:当前系统时间
2:系统已经开机时间(已运行时间)
3:当前终端数
4:从左到右依次为离当前时间最近1分钟,5分钟,15分钟的负载值
一般来说,负载值在0-1之间是正常的,大于1即负载过大,但是也有负载值在5-10之间还能保证服务器正常运行的情况;
看负载值是变高还是变低一般是从右往左看,如上图表示的是负载变大;
负载值过大会导致响应时间变大,甚至出现卡死情况;
5:表示当前系统的进程数为520个,后面的分别表示有1个进程在运行,有519个进程处于休眠状态,0个停止,0个僵死;
第三行表示的是cpu的状态:1.8 us 表示cpu使用了1.8%,97.8 id 表示空闲cpu为97.8%;
第四行表示系统的物理内存,单位为KB;
第五行表示系统的交换分区的值,单位也为KB;
第六行开始为各进程间详细信息:pid表示进程的标识id号,user表示进程的创造者(所属者),pr表示进程的优先级,优先级值越小代表优先级越高,S表示进程等待运行,R表示进程正在运行,%cpu表示所占cpu百分百,%mem表示所占内存百分比,time表示进程已经运行的时间。
补充:查询某个进程的pid:pidof 进程名称,如pidof sshd;
结束某个进程:kill 进程号(pid);
强制终止某个进程:kill -9 进程号(pid) 当kill命令结束不掉进程时可以尝试使用
关闭一个服务:killall 服务名称 当一个服务下有多个进程时可以使用此命令直接关闭服务,如:killall 服务名称
若不知道服务名可以使用:ps -aux 查询
八、ifconfig(类似windows系统ipconfig)
注意:因未配置网络信息,eno16777728网卡没有ip地址和子网掩码。
九、uname -a(显示系统内核等详细信息)
十、uptime
可以看到当前系统时间,系统运行时间,正在运行的终端数,cpu负载均衡
十一、显示用户信息:
1.显示用户信息:who
2.显示当前登录系统用户信息:who am i
十二、查看登录系统记录:last
查看登录系统的信息记录(仅参考):last
十三、查看历史操作记录
查看当前系统的历史操作记录(仅命令)
注:在此界面可以使用!+数字来执行历史记录中的命令,如此处使用:!5
另外,history默认显示条数为1000条,可以在/etc/profile 里面的histsize参数里面设置成其他条数
history -c 清除历史命令记录
十四、系统信息收集求救
sosreport 收集系统信息求救
输入命令后一直按回车然后等待收集即可,收集完了会生成一个压缩文件:
十五、常用命令
1.查看当前所在目录:pwd
2.返回上级目录:cd ..
3.返回上次所在的目录:cd -
4.返回用户家目录:cd ~
5.进入根目录:cd /
6.查看目录下有什么文件/文件夹:ls 加上参数:ls -a 查看所有的文件,包括隐藏的文件,在linux中,隐藏文件是以“.”开头的
7.查看目录下所有的文件及文件夹详细信息(以列的方式来展示):ll (ll是ls -al简写)
8.查看内容比较短小的文件:cat 文件名
9.以行或页的方式来看文件:more 文件名
10.查看文件的前五行:cat -n 5 文件名
11.查看文件后5行:tail -n 5 文件名
12.动态查看文件:tailf 文件名
13.替换字符(通常配合管道符 | 使用)
cat config.xml | tr [a-z] [A-Z] 把config.xml中的小写全部替换为大写
14.查询文件的行数:wc -l 文件名; 另外的一些参数及含义:wc -w 文件名 单词数; wc -c 文件名 字节大小
15.查看文件一系列时间:stat 文件名,如:
解析:access表示最后一次访问文件的时间;modify表示文件内容的最后一次修改时间;change表示文件属性、所有者等最后一次改变的时间;birth表示文件创建的时间。
16.根据需求来提取相关文件信息,如以下为以“:”为分割符提取第一列的所有信息,提取完后仅保留提取的列
cut -d : -f 1 /etc/passwd
结果如下:以冒号为分隔符来提取某文件中第一列的信息
17.修改文件的时间
使用touch -d "修改的时间" 文件名 -d参数可同时修改读取时间和修改时间
其他参数:touch -a 仅修改读取时间
touch -m 仅修改修改时间
18.创建文件以及目录:
①touch 文件名 创建一个文件
②mkdir 文件夹名 创建一个目录
③加上参数 -p 即可创建有递归关系的目录:mkdir -p a/b/c/d
19.复制文件及文件夹
①复制文件:cp 源文件 目标文件 此处的目标文件及位置可自行定义
②复制文件夹:cp -r 源目录 目标目录 此处的目标目录可自行定义修改
20.剪切和重命名
mv 源文件 目标文件 用mv命令源文件就不存在了,只保留目标文件
21.删除文件或文件夹
常用的命令:rm -rf 文件名/文件夹名
用此命令不可随意乱用 ,用之前先查询是否为您需要删除的,因为删除是不可恢复的
22.以块文件的方式进行文件的复制,一般情况下使用在镜像制作等
dd if=文件名 of=目标文件名 bs=20 count=3
解析:if=input file表示要取的文件,输入文件;of表示要输出的文件,即你要制作最终文件;bs表示每一块的大小为20字节;count表示需要取出3块,即取出的总大小为:20*3=60字节。
22.查看文件类型
file 文件名
23.打包与压缩(极其重要)
①打包
tar -czvf 压缩包名称.tar.gz 要打包的文件/文件夹
tar -cjvf 压缩包名称.tar.bz2 要打包的文件/文件夹
解析;c表示打包,z表示以gzip格式来进行打包,v显示打包过程,f代表打包过后的名称,j表示以bz2的格式进行打包
②解压
tar -xzvf 压缩包名称.tar.gz
tar -xjvf 压缩包名称.tar.bz2
解析;x表示解压缩,z表示解压gzip格式的压缩包,v显示解压过程,f代表要解压的压缩包名称,j表示解压bz2格式的压缩包
24.过滤
作用:在所有的字符中过滤出需要的内容
例:ps -aux | grep httpd 在所有的进程中过滤出httpd进程,并显示其详细信息
ggrep bash /etc/passwd 在etc/passwd文件中过滤出带字符“bash”的行
25.查找文件find
例:find / -name passwd
解析:find 在哪个目录下查找(递归查找) 通过什么属性查找 要查找的文件
以上例子表示在根目录下面通过文件名的方式查找文件名为passwd的文件
查找文件并过滤掉某个目录(忽略掉某个目录):find / -path 要忽略的目录 -prune -name 要查找的文件名;
如:find / -path /root -prune -name iptables
26.输出重定向
例:ifconfig >ifconfig配置信息.txt
作用:把屏幕信息输出到某个文件保存
其他类型:>>代表追加写入;2>代表报错写入,即把报错的信息写入文件;&>代表全部输出重定向;
27.输入重定向
作用:把一个文件信息写到命令里面,也可理解为文件导入,符号为"<"
例:wc -l < config.xml
以上是把config.xml的内容作为wc -l 的参数,即能把config.xml有多少行显示出来
28.管道符“|”
格式:命令1|命令2
作用:将前一个命令的输出信息交给第二个命令进行处理
例:ps -aux | grep httpd ps -aux显示所有的进程及详细信息,在这些进程中过滤出包含httpd的进程并显示出来。
29.通配符:
*代表匹配所有内容,如查找etc下以sda开头的所有文件,命令如:find /dev -name "sda*"
?代表匹配任意一个字符,用法和*相同
通配符需根据需求进行使用
其他匹配类型[1,2,3,5,8] 表示在1,2,3,5,8里面进行查找匹配;[a-z] 表示在a-z之间进行查找匹配
29.常用符号:
$变量名:取出变量的值
\转义符:把特殊的符号转换为本身字符,即在\后面的第一个符号就是符号本身。如:price=5,现需打印出价格为5美元。命令如下:
price=5
echo price is \$$price
结果:
""表示一个整体
''表示全局转义,即里面的是什么显示出来的就是什么
""和''的区别如下:
30.别名
alias aa="uptime"
执行aa即执行了uptime
效果如下:
31.命令执行的本质
在linux中一切皆为文件,当输入一个命令时,系统会自行查找此命令对应的文件,找到会就进行文件解析,把效果呈现出来,如此即完成了命令的执行
32.环境变量PATH
系统在执行某个命令时需要先去判断是否是内部命令,如果是则直接运行,若不是内部命令则先去环境变量中查找,找到后再运行。
十六、vim编辑器
vim中的三个模式:
①命令模式,一般进入vim的第一个模式即为,命令模式 ,命令模式的作用是进行文本的复制、粘贴、删除等
命令模式下yy是复制光标所在的当前行,5yy表示复制从光标位置起的5行;p表示粘贴复制的内容;dd表示删除或剪切光标所在的当前行,5dd表示删除或剪切从光标开始的5行;u表示撤销上一个操作。
②输入模式,从命令模式切换到输入模式需要输入a、i、o等;从输入模式切换到命令模式使用esc键即可。在输入模式下可对文本进行修改、增减等;a表示在当前光标后开始编辑文档,i表示在当前光标处进行文档的编辑,o表示在当前光标的下一行进行 文档的编辑。
③末行模式,在输入模式下先按esc键进入命令模式,然后输入“:”进入到末行模式。末行模式可以对文件进行 保存退出或者强行不保存退出等。
末行模式下:wq 保存并退出 :wq!强制保存退出 :w保存 :q退出 :q!强制退出。
实验:使用vim修改主机名称
过程如下:
vim /etc/hostname
dd删除里面的内容
i进入编辑模式
输入要修改的主机名
esc退出编辑模式
:wq!强制保存退出
十七、shell脚本
①脚本名称一般为xxxx.sh
②vim编辑第一行先写上脚本声明:#!/bin/bash #表示注释,无实际作用,内存会自动忽略掉注释的内容
③在脚本里面写上要完成某个功能的代码
④脚本写完后要给脚本附上执行的权限
脚本小知识:$0代表是脚本名称,$#代表是脚本的个数,$*代表的是分别每个参数,$1代表的是第一个参数,$?判断上一个命令是否成功执行,若成功执行则返回值为0;$$表示若前面的语句执行成功才执行后面的语句;||表示前面的语句执行失败才执行后面的语句。
如以下脚本
#!/bin/bash
echo $0
echo $#
echo $*
echo $1
echo $3
执行后输出结果如下:
-d 判断某个东西是否是一个文件夹(目录)
-f判断某个东西是否为文件
-e判断某个文件是否存在
判断当前的用户是否是root用户的脚本:
#!/bin/bash
if [ $USER==root ]
then
echo "当前登录的是管理员$USER账号"
else
echo "当前登录的不是管理员账号,登录的是普通账号$USER"
fi
十八、linux中的比较
①等于:-eq
②大于:-gt
③小于:-lt
④大于或等于:-ge
⑤小于或等于:-le
⑥不等于:-ne
⑦取反:!
十九、linux中提取查询出来的某一个数据
例如,提取空闲内存的值,以M的格式显示
思路:先使用free -m 查询内存结构,如:
由图可知我们要取的值是439,并且是处于Mem这行,且是第4列;
我们先过滤出Mem这一行,使用管道符结合grep
如:free -m | grep Mem:
接下来使用awk取出第四列
free -m | grep Mem: | awk '{print $4}'
学会了以上命令后我们可以写一个脚本来判断内存是否够用;
如:
echo "当前空闲内存为`free -m | grep Mem: | awk '{print $4}'`M!"
二十、判断某个变量是否已经被使用
[ -z $变量名称 ]
然后再执行 echo $?
若结果为0则表示没被使用过,可以使用,为其他值都表示被使用了
二十一、流程控制语句
①条件语句if
先看一个小脚本:
#!/bin/bash
#“#”代表注释,后面的内容会被内存直接忽略掉
if [ ! -e /usr/test/aaa ]
then
mkdir -p /usr/test/aaa
cd /usr/test/aaa
pwd
else
echo "该目录已存在!"
fi
以上基本就是一个条件语句的基本格式,总结如下:
if [ 条件判断 ]
then
条件成立要执行的语句
else
条件不成立要执行的语句
fi
ping脚本判断主机是否在线:
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /etc/null
if [ $? -eq 0 ]
then
echo "$1主机存活!"
else
echo "$1主机掉线!"
fi
解析:
ping -c 3代表ping总次数为3次;
ping -i 0.2代表ping的间隔时间为0.2s;
ping -W 3代表ping的响应时间为3秒;
$1代表第一个参数
&> /etc/null代表不输出任何信息,只执行命令,类似垃圾回收
多分支if条件选择结构脚本:
#!/bin/bash
read -p "请输入您的预算:" jine
if [ $jine -ge 8000 ] && [ $jine -le 10000 ] ; then
echo "建议您购买华为手机"
elif [ $jine -gt 5000 ] && [ $jine -lt 8000 ] ; then
echo "建议您购买小米手机"
else
echo "建议您先吃饱"
fi
解析:
read -p "请输入您的预算:" jine 读取输入的数据存到变量jine
②for循环语句
脚本实现批量创建用户并给初始化密码:
#!/bin/bash
read -p "请输入您要设置的初始密码:" PASSWD
for UNAME in `cat user.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ] ; then
echo "$UNAME 已存在,请替换其他用户名"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
echo "$UNAME添加成功,初始密码为:$PASSWD"
fi
done
echo "-------------------------------------------"
解析:
read -p "请输入您要设置的初始密码:" PASSWD 输入的数据传入变量PASSWD保存
for UNAME in `cat user.txt` 循环读取user文件,并将每一行读取到的内容存入UNAME变量里面
id $UNAME &> /dev/null 查询读取到的id是否在系统里面已存在,并不显示结果
if [ $? -eq 0 ] 判断上一个命令是否执行成功,若成功则返回0
useradd $UNAME &> /dev/null 添加新用户,用户名称为读取到的值
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null 根据用户名直接设置密码
插播一个bat脚本:
功能是进行批量ping,并返回结果
@echo off
for /f "tokens=*" %%i in (目标地址.txt) do (
ping %%i >> ping结果.txt
echo ........................................................ >> ping结果.txt
echo ........................................................ >> ping结果.txt
echo ........................................................ >> ping结果.txt
)
linux批量ping脚本:
#!/bin/bash
for IP in `cat ip.txt`
do
ping -c 5 -i 0.3 -W 4 $IP &> /dev/null
if [ $? -eq 0 ] ; then
echo $IP >> success.txt
else
echo $IP >> fail.txt
fi
done
echo "批量ping完成!"
while循环结合if判断做竞猜脚本:
#!/bin/bash
SUIJI=$(($RANDOM%3000+5000))
TIME=0
while true
do
read -p "欢迎参与华为新机竞猜,请输入您竞猜价格(5000-8000之间):" INTE
let TIME++
if [ $INTE -eq $SUIJI ] ; then
echo "恭喜您猜对了,您竞猜的次数为 $TIME 次!"
exit 0
elif [ $INTE -gt $SUIJI ] ; then
echo "您竞猜金额过高哦^_^"
elif [ $INTE -lt $SUIJI ] ; then
echo "您竞猜金额过低了哦^_^"
else
echo "别调皮了,请输入数字,否则您是在浪费机会哦^_^"
fi
done
解析:SUIJI=$(($RANDOM%3000+5000)) 获取5000-8000随机数,求某一个范围的随机数可以用以下公式:
$(($RANDOM%(最大值-最小值)+最小值))
let TIME++ 每循环一次数值在原来的基础上加1
③case语句
判断用户输入的类型
#!/bin/bash
read -p "qingshuru:" shuru
case $shuru in
[a-z]|[A-Z])
echo "您输入的是字母!"
;;
[0-9])
echo "您输入的是数字"
;;
*)
echo "只能输入字母和数字哦"
esac
二十二、定时任务
①at 单次定时任务
at 加上执行时间
at 输入执行命令
ctrl+d 启动定时任务
at -l 查看定时任务
at -c 任务编号 查看定时任务的详细信息
atrm 任务编号 删除定时任务
②计划任务
服务名称:crond
工具名称crontab
格式: 分 时 日 月 星期 命令
开启定时任务:crontab -e
查看定时任务:crontab -l
二十三、文件权限
使用ll查询文件详细信息,如上图所示。
现在,我们来详细分析上图文件信息
如第一行: drwxr-xr-x. 3 root root 14 Jun 12 10:52 a
第一个参数d代表的是此文件类型是文件夹类型,若为-则代表文件类型
第二个参数至第十个参数代表的是文件权限,每三个为一组;第一组为rwx表示所有者(创建者、所属者)拥有读、写、执行的权限;读的权限为r,用数字4表示,写的权限为w,用数字2表示,执行的权限为x,用数字1表示。第二组为所属组权限r-x代表所属组仅有读和执行的权限;第三组为其他用户拥有的权限为r-x,表示其他用户仅有读、执行的权限
第十一个参数为3 代表的是此目录有三个文件或文件夹
后面两个root分别表示该文件的所有者和所属用户组
接下来的14表示此文件的大小
后面的日期代表文件最后修改的日期(忘记是不是了,改的时候实验下)
最后的a且为绿色代表的是文件夹的名称
给文件赋权:chmod -R 777 文件名/文件夹名
三种特殊权限:
SUID:让命令的执行者临时获得所有者身份,SUID权限也是4
命令:chmod u+s 文件名
SGID:让目录中新的文件所有组归属于上级目录,SGID权限为2
命令:chmod -R g+s 文件名
SBIT:让目录内的文件只能被文件所有者删除,SBIT权限为1
命令 chmod -R o+t 文件名
其他权限:
rwsrwSrwt 原先所有者有rwx权限,加上suid权限后rwx变为rws(小写);原先所有组有rw-权限,加上sgid
rw权限后变成rwS(大写代表以前没有x权限);原先其他用户拥有rwx权限,加上SBIT权限后变成rwt(小写t代表以前有x权限)
若是大写的T则代表原先的权限为rw-
权限转换为对应数字:
rwsrw-rwT:先转换普通权限为766,再转换特殊权限为5(4+1),最后的结果为:5766
查看隐藏权限:lsattr 文件名
设置隐藏权限:chattr +权限 文件名 chattr -权限 文件名
隐藏权限的参数:a代表仅能增加 i代表不能对文件进行任何修改 s代表删除后不可被找回
文件访问控制列表
filesy access control list
setfacl 设置文件访问控制列表
getfacl 查看文件访问控制列表
给某个人设置特殊权限,而其他人没有任何权限(重要):
mkdir aaa (创建目录aaa)
chmod -Rf 000 aaa (-R表示递归f表示不提示 000 表示任何用户都没有任何权限)
setfacl -Rm u:wp:rwx aaa (-R代表递归赋权。m代表更改权限,u代表赋权对象为用户,如果是组则用g。给用户wp赋rwx权限,而其他用户都没有权限,仍然是000)
二十四、切换用户
若是管理员登录,切换到普通用户:su -普通用户名
从普通用户切换到超级用户需要输入密码:su -root
查看某个命令的目录:whereis reboot
给某个普通用户执行系统管理员权限的设置(比如说给wangwu执行重启的权限):
visudo
编辑:
wangwu ALL(ALL) /usr/sbin/reboot (ALL(ALL)用户来源即内网或外网)
然后保存后用wangwu登录系统,sudo reboot
输入自己的密码 即可执行超级管理员重启操作
二十五、linux设备文件
/dev
硬件设备 对应名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光盘 /dev/cdrom
鼠标 /dev/mouse
第一个硬盘记做sda,第二个记做sdb,依次类推
主分区和扩展分区的编号为1-4,逻辑分区的编号从5开始
linux中文件的保存:
分为两部分一部分为inode,保存的是文件名称、属性、修改的时间、权限、所有者、所有组,指针block等;指针指向另一部分,存的才是真实的文件内容,而且是按照每k来存储
二十六、挂载和卸载
挂载命令格式:mount 设备绝对路径 要挂载到的目录,如:
卸载命令格式:umount 设备绝对路径/挂载的目录,如:
修改/etc/fstab 可让挂载设备永久生效
格式如:/dev/sdb1 /usr/sdb1 ext4 defaults 0 0
解析:ext4文件挂载的底层版本, defaults代表默认的读写权限,第一个0表示不进行备份,若为1则表示备份,第二个0表示是否进行开机自检,检查数据是否丢失,若为1则为开启自检。
分区:
fdisk -p 显示分区信息
fdisk -d 删除分区
fdisk -n 新建分区
w 保存并退出
分区的过程:
①输入fdisk /dev/sdb
②输入n新建分区 提示输入p或e p代表的是创建主分区,e代表创建扩展分区
③输入p创建主分区,提示输入分区编号,1-4是主分区编号
④输入1,即创建的分区为/dev/sdb1,提示输入第一个起始分区
⑤直接回车默认第一个起始分区从2048开始,提示输入结束的扇区,每个扇区代表的是1kB,512字节,假如我们需要分配5G空间,则直接输入+5G即可
⑥输入p查看分区信息
⑦输入w保存设置的分区
⑧进行格式化
mkfs.ext4 /dev/sdb1 .ext4是把分区sdb1格式化为ext4文件格式
⑨进行挂载
mkdir -p /usr/sdb1
mount /dev/sdb1 /usr/sdb1
⑩查看挂载信息
df -h
(11)使挂载永久生效
vim /etc/fstab
添加一行: /dev/sdb1 /usr/sdb1/ ext4 defaults 0 0
保存配置文件 然后重启设备进行检查看是否生效
结果:
说明我们已经永久性挂载了。
二十六、SWAP交换分区
作用:当内存不够用时会临时将内存内的一些数据存储到硬盘内,这样的硬盘就叫SWAP,减轻物理内存的压力。将一部分内存空间临时当作内存来使用。
free -m 查看内存使用状态
如果内存还有空闲,就不会使用Swap,所以使用的为0
更改Swap的大小:例如我们要增加Swap的大小为2G
先创建10G的扩展分区,名称为/dev/sdb2 ,p是主分区,e是扩展分区
继续输入n创建逻辑分区,并分配2G逻辑分区内存,l代表的是逻辑分区
输入p即可看到我们分配的分区信息
然后w保存
继续输入partprobe把信息同步到内核
输入ls -l /dev/sdb* 查看我们的分区信息
可以看到我们进行的分区都在里面了
进行格式化 mkswap /dev/sdb5
格式化后此分区就成为了一个Swap格式的2G分区了
接下来还要把这个Swap格式的2G分区挂载到Swap
swapon /dev/sdb5
然后使用free -m 看内存中的Swap是否已经增加
结果:可以看到Swap的大小已经从2G变为4G了
进行永久性保存
vim /etc/fstab
添加一行: /dev/sdb5 swap swap defaults 0 0
保存后重启检查下,结果如下:已永久生效
注意,若是/etc/fstab 文件里面的信息写错了 在重启时会报错,此时不要着急,输入root密码,然后继续编辑/etc/fstab
把正确的信息写上即可。
二十七、对登录的用户进行磁盘配额限制
先编辑/etc/fstab文件,在xfs文件系统的default后面添加,uquota 使其支持磁盘配额技术,如图:(以前是用usrquota)
保存重启,然后检查是否已经支持磁盘配额
mount | grep boot
结果:
出现上图红框中的内容就说明已经支持磁盘配额技术
接下来就可以使用磁盘配额的设置命令了
xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 zhangsan' /boot
解析: bsoft=3m 软限制 isoft限制为3m,超出3m就警告
bhard=6m 硬限制,超出6m直接禁止
isoft=3 软限制 isoft限制文件个数超出3个就警告
ihard=6 硬限制 ihard限制超出6个文件直接禁止
zhangsan 被限制的用户
/boot 被限制的目录
①文件个数限制
软限制 isoft
硬限制 ihard
②文件大小限制
软限制 bsoft
硬限制 bhard
验证限制个数:切换到被限制的zhangsan用户:su - zhangsan
进入/boot 目录 :cd /boot
创建文件a、b、c、d、e、f :touch a b c d e f
然后再创建g文件 :touch g
创建文件g时已经被禁止了 因为超出了6个文件,说明个数限制成功
删除创建的文件:rm -rf a b c d e f
验证限制大小:
先创建3M的文件: dd if=/dev/zero of=test11 bs=3M count=1
成功创建并无问题
现在创建7M的文件: dd if=/dev/zero of=test11 bs=7M count=1
可以看到这个文件创建不成功,因为受到了bhard限制。说明文件大小限额是成功的。
修改磁盘限额的数据,命令:edquota -u zhangsan
如上图 修改大小和个数的限制
保存退出即可。
二十八、软硬链接
①软链接:类似于创建快捷方式,删除了源文件后,链接文件打不开
命令: ln -s 源文件 链接文件
②硬链接:就算删掉了源文件,链接文件也能打开,类似给文件新增一个指向文件的指针,当删除源文件(另外的指针)时,通过新的指针也能找到文件内容,但是硬链接不能对目录和磁盘来做。
命令: ln 源文件 链接文件
软硬链接的区别:
软链接就像是一个人只有一个名字,加上软连接后相当于给此人增加了一个绰号,如果把这个人的名字删除了那就找不到这个人了;而硬链接就像一个人有两个名字,加上硬链接就相当于重新取了个名字,如果删除了其中一个名字,通过另外的名字也能找到这个人。
二十九、硬盘优化
①RAID 0
把数据分开存在两个硬盘内,减少数据读写时的等待过程,提高读写速度,利用率为100%,但是安全性极低,安全性为50%。
②RAID 1
把数据分别存在两个磁盘内,类似备份,提高了安全性,就算一个磁盘数据损坏也还有另一个磁盘数据,缺点是磁盘利用率大大降低,为50%,成本增加。
③RAID 5
至少需要三块磁盘, 对速度和安全的一种妥协。
④RAID 10
至少需要4个盘符,综合了RAID 0和RAID 1 是目前用得最多的架构
构成是两两构成一个RAID1,而整体是一个RAID0,优点是集成了RAID0的快速和RAID1的安全
如图:
注:图片来源于百度百科,若有侵权请联系删除。
企业里面一般还会准备一块热备盘,在同一组里面准备一块热备盘,平时不工作,若是一组内的某个盘坏掉,马上启动热备盘进行备份,这样就能避免一组内所有的磁盘全部坏掉的情况,保证数据安全。
下面我们添加4块硬盘做RAID10,分别是sdc、sdd、sde、sdf,容量为20G,总共为80G,但是实际上使用RAID10我们只能使用40G,利用率50%
命令:mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sd[c-f]
-C是创建,-v是显示过程;
/dev/md0 是创建出来此10架构的名称(4块盘都包含在这里面,相当于是一个班级,里面有4个学生)
-n 4 表示需要用到4块硬盘
-l 10 表示使用的是RAID10架构
/dev/sd[c-f] 表示所需4个盘的路径
mdadm -D /dev/md0 查看创建的RAID10架构磁盘阵列(-D代表查看的是详细信息 -Q查看简要信息)
接下来进行格式化为ext4版本:mkfs.ext4 /dev/md0
然后进行挂载,挂载到目录/md0
mkdir /md0
mount /dev/md0 /md0
查看挂载情况:
df -h
可以看到有40G的硬盘已经被挂载到/md0
然后进行永久性保存:
vim /etc/fstab
添加一行:
/dev/md0 /md0 ext4 defaults 0 0
保存后进行重启,然后看结果
可以看到,40G的磁盘已经永久挂载上了。
下面我们在md0里面添加数据文件,然后对硬盘进行破坏,看md0里面的数据是否还存在
先cp -rf /etc/* /md0 复制etc里面的所有文件到md0里面
进入/md0目录,查看文件:ll
可以看到有1820个文件,如果我们把构成这个磁盘的4个磁盘移除掉一个,那么是不是数据就会丢失呢?
进行移除:
我们移除了磁盘6,现在查看我们创建的这个磁盘架构信息:mdadm -D /dev/md0
可以看到有一块磁盘已经被移除了,那么我们继续查看/md0目录的文件,看有没有缺少
ll /md0
结果是文件数量还是1820,数据未丢失
下面我们对被移除的硬盘进行处理,以保证磁盘架构的完整性
mdadm /dev/md0 -f /dev/sdf 告诉磁盘系统sdf硬盘已损坏
mdadm /dev/md0 -r /dev/sdf 对损坏的磁盘进行移除
然后查看磁盘架构状态信息:
接下来换上新的磁盘(若是虚拟机先关机)
把换上的硬盘添加到磁盘架构里面:
mdadm /dev/md0 -a /dev/sdf
然后查看磁盘架构信息:mdadm -D /dev/md0
可以看到,我们已经把新加的磁盘添加到磁盘架构里面了。
再查看我们挂载到的/md0,数据同样没问题
现在我们新增4个硬盘,分别为/dev/sd[b-e]进行RAID5架构的实验,主要功能是进行数据的自动备份
创建:mdadm -Cv /dev/md1 -n 3 -l 5 -x 1 /dev/sd[b-e]
mdadm -Cv /dev/md1 创建名为/dev/md1的磁盘架构组, -n 3使用的磁盘个数为3个,-l 5使用的是RAID5架构,-x 1表示使用的是备份盘为1个,/dev/sd[b-e]表示使用的是/dev/sd[b-e]这五个磁盘
格式化:mkfs.ext4 /dev/md1
创建文件夹:mkdir /md1
进行挂载:mount /dev/md1 /md1
进行永久化保存:vim /etc/fstab
添加一行:/dev/md1 /md1 ext4 defaults 0 0
保存后重启,然后使用df -h查看挂载的信息
可以看到RAID5的磁盘系统已经设置并挂载好了
复制数据到/md1里面:cp -rf /etc/* /md1
复制了1792个文件
下面我们破坏硬盘,例如移除sde
然后我们查看 : mdadm -D /dev/md1
可以发现,备份盘在某个盘被破坏后自动补上
再来查看/md1里面的数据,可以发现,数据还是存在的
三十、磁盘优化-LVM逻辑卷管理器
添加两个硬盘,名称为sdb、sdc
让这个两个硬盘支持LVM技术:pvcreate /dev/sdb /dev/sdc
给这两个磁盘组成的逻辑卷组取个名称:vgcreate testsd /dev/sdb /dev/sdc 名称为testsd
查看合成的逻辑卷组信息:vgdisplay
可以看到已经合成一个40G的磁盘,此处PE的大小为4M,即逻辑卷的最小单位为4M,即分配的空间为4M的倍数
若需要分配100M空间,则参数-l的值为25,即:-l 表示的是个数;否则-L 400,即:-L表示的是总的大小
分配出400M的逻辑卷:lvcreate -n testsd1 -l 100 testsd -n表示创建,testsd1表示名称,-l 100表示创建100个PE(400M)
testsd表示要从哪个组划分,此处表示从tsetsd组划分
查看分配的逻辑卷大小:
所创建的逻辑卷存在/dev/卷组名/逻辑卷名 此处为/dev/testsd/testsd1
进行格式化:mkfs.ext4 /dev/testsd/testsd1
进行挂载:
mkdir /testsd1
mount /dev/testsd/testsd1 /testsd1
接下来进行扩容:
先进行卸载 umount /testsd1
对/dev/testsd/testsd1进行扩容: lvextend -L 800M /dev/testsd/testsd1
对内容进行检查,看是否报错:e2fsck -f /dev/testsd/testsd1
通知文件系统,文件变更了大小:resize2fs /dev/testsd/testsd1
重新进行挂载:mount /dev/testsd/testsd1 /testsd1
查看挂载信息:df -h
接下来进行缩小
先进行卸载 umount /testsd1
进行检查:e2fsck -f /dev/testsd/testsd1
告知系统进行缩小看是否报错:resize2fs /dev/testsd/testsd1 300M
进行缩小:lvreduce -L 300M /dev/testsd/testsd1
有提示输入y
重新进行挂载:mount /dev/testsd/testsd1 /testsd1
查看挂载信息:df -h
缩小并挂载成功。
接下来进行快照功能实验(即复制还原)
创建的快照要和逻辑卷/testsd/testsd1大小一样:lvcreate -L 300M -s -n TESTSD1 /dev/testsd/testsd1
-s代表快照 -n代表快照名称 /dev/testsd/testsd1代表对其进行快照
把/testsd1里面的文件清空:rm -rf /testsd1/*
现在我们使用快照来进行恢复:
先卸载:umount /testsd1
快照恢复:lvconvert --merge /dev/testsd/TESTSD1
恢复挂载:mount -a
删除逻辑卷:
1.取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数
umount /testsd1
vim /etc/fstab
删除掉关于testsd1的行
2.删除逻辑卷设备
lvremove /dev/testsd/testsd1
3.删除卷组
vgremove testsd
4.删除物理卷设备
pvremove /dev/sdb /dev/sdc
三十一、防火墙配置
(1)网络配置
使用虚拟机配置网络时需注意:
①若是使用“仅主机模式”则对应的虚拟机适配器为VMware Network Adapter VMnet1
②若使用NAT模式,则对应的虚拟机适配器为VMware Network Adapter VMnet8
此处我们使用“仅主机模式”进行网络配置实验:
首先,我们需要先设置VMware Network Adapter VMnet1的子网掩码、网关、DNS和物理机的一致,设置IP和物理机在同一段。
然后编辑:vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
TYPE=Ethernet 网卡类型为以太网类型
BOOTPROTO=dhcp 动态获取IP地址,若值为static则是静态ip地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777728 网卡名称
UUID=8eee9c1f-de28-42a2-8586-b3627a9e8791 网卡唯一标识符
ONBOOT=yes 开机自启网络服务
IPADDR0=192.168.123.30 ip地址
PREFIX0=24 子网掩码为24位
DNS=192.168.123.1 dns服务器地址
HWADDR=00:0C:29:38:BC:6C 网卡物理地址(mac地址)
GATEWAY0=192.168.123.1 网关
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
重启网络服务:service network restart
设置网络的其他方式如下:
方式二:使用nmtui或者setup
方式三:使用nm-connection-editor
方法四:使用图形界面
②防火墙配置(5.6使用的是iptables,7使用的是firewalld,从7.2开始)
INPUT 外网流量输入
OUTPUT 内网流量输出
FORWARD 转发
INPUT规则链是从哪个上至下生效,即精准匹配要写在最上面
ACCEPT表示允许放行
DROP拒绝 对方只能看到超时
REJECT拒绝 对方能看到报错信息
iptables -L 显示防火墙的规则策略
iptables -F 清空所有策略
允许里面写特殊的拒绝,拒绝里面写特殊的允许
iptables -P INPUT DROP 拒绝所有外网访问 执行命令后所有的地址都不能访问了,如下:
下面我们添加策略使30可以被ping通:
iptables -I INPUT -p icmp -j ACCEPT
解析:-I代表的是写在最前面,-A代表写在最后面,即优先级不同,从上至下生效
INPUT代表的是此规则是对进来的流量生效
-p icmp代表的是此策略针对协议号是icmp(即ping)的生效
-j ACCEPT表示此策略是允许
效果:可以看到已经可以ping通
下面允许ssh服务策略
iptables -I INPUT -s 192.168.123.122/32 -p tcp --dport 22 -j ACCEPT
解析:-s 192.168.123.122/32 限定要做策略的ip地址
-p tcp 是指此策略针对的是tcp协议
--dport 22是指此策略针对的是22端口
-j ACCEPT表示动作,此处是指此策略是允许访问
综合:只允许122访问30的22端口
效果:已经可以连接了
删除指定的规则链,此处删除第二条:iptables -D INPUT 2
禁止掉端口号为8888的所有访问源:iptables -I INPUT -p tcp --dport 8888 -j REJECT
iptables -I INPUT -p udp --dport 8888 -j REJECT
因为没说禁止的是tcp还是udp,所以都要写上
把规则链恢复,即所有的都能访问:iptables -P INPUT ACCEPT
禁止掉端口号为10000-10500的所有访问源:
iptables -I INPUT -p tcp --dport 10000:10500 -j REJECT
iptables -I INPUT -p udp --dport 10000:10500 -j REJECT
防火墙区域模板:zone
public 默认使用,所有的流量都必须经过public区域
drop 拒绝所有
trusted 允许所有
下面进行firewall-cmd进行相关实验
firewall-cmd --get-default-zone 获取防火墙默认区域
firewall-cmd --set-default-zone 设置默认区域
runtime 当前生效,重启后失效(默认)
permanent 当前不生效,重启后永久生效
firewall-cmd --panic-on 断开所有的网络连接
firewall-cmd --panic-off 解除紧急模式
firewall-cmd --zone=public --query-service=ssh 查询某个服务是否开启(临时)
firewall-cmd --permanent --zone=public --query-service=https 查询某个服务是否开启(永久)
firewall-cmd --zone=public --add-service=http 添加某个服务,此处为添加http服务(临时生效,重启失效)
firewall-cmd --permanent --zone=public --add-service=https 添加https服务,重启后永久生效
重新加载firewall-cmd :firewall-cmd --reload
拒绝某个服务:firewall-cmd --zone=public --remove-service=http
添加端口:firewall-cmd --zone=public --add-port=80/tcp
查询端口:firewall-cmd --zone=public --query-port=80/tcp
删除端口:firewall-cmd --zone=public --remove-port=80/tcp
允许500-1000端口号:firewall-cmd --zone=public --add-port=500-1000/tcp
端口转发:
firewall-cmd --permanent --zone=public --add-forward-port=port=11111:proto=tcp:toport=22:toaddr=192.168.123.30
把服务器的22端口转发成11111,即访问服务器的22端口直接使用11111端口即可(作用是隐藏了端口号)
图形界面的防火墙配置:firewall-config
基于应用层的防火墙配置:TCP Wrappers
TCP Wrappers有两个配置文件:① /etc/hosts.allow ② /etc/hosts.deny
先看运行,再看拒绝
格式: 服务名:IP地址端 如: sshd: 192.168.123.0/24
网络模型中的物理层和数据链路层针对的是IP地址、端口、mac地址、协议等;而应用层针对的就是服务名称
三十二、多场景下切换网络模式
功能:在有线环境下切换网卡到有线,在wifi模式下切换到wifi,在办公网环境切换到办公网环境
nmcli connection show 查看当前有哪些网卡
nmcli connection add con-name gs ifname eno16777728 autoconnect no type ethernet ip4 192.168.123.30/24 gw4 192.168.123.1
创建了一个名称为gs的网络,ip为192.168.123.40,网关为192.168.123.1,不自动连接,类型为互联网方式
nmcli connection add con-name house type ethernet ifname eno16777728
创建了一个自动获取ip的,名称为jt,类型为互联网方式的网卡
下面我们分别启用一下网卡:
执行命令:nmcli connection up gs
启用house:nmcli connection up house
三十三、网卡绑定技术(端口聚合技术)
作用:共同协作实现了网络负载均衡,若其中一块网卡突然坏掉,另一块马上顶上继续工作。
①首先添加一个网卡(虚拟机里面直接添加网络适配器,皆为仅主机模式)
②进入网卡目录cd /etc/sysconfig/network-scripts/
编辑网卡文件:vim ifcfg-eno16777728
先整个清空,然后写入以下内容
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno16777728
MASTER=bond0
SLAVE=yes
③使用ifconfig查看另外一块网卡的信息,然后进行编辑:
vim ifcfg-eno33554968 创建名称为ifcfg-eno33554968的文件并编辑
写入以下内容:
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno33554968
MASTER=bond0
SLAVE=yes
④新建并编辑网卡配置文件
vim ifcfg-bond0
写入以下信息:
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=bond0
IPADDR=192.168.123.30
GETWAY=192.168.123.1
NETMASK=255.255.255.0
NM_CONTROLLED=no 使NetworkManager服务不影响网卡bond
⑤编辑 vim /etc/modprobe.d/bond.conf
作用:让内核支持网卡绑定技术
将以下信息写入:
alias bond0 bonding
options bond0 miimon=100 mode=6
解析:alias bond0 bonding 使bond0支持绑定技术
options bond0 miimon=100 mode=6 出故障响应时间为100ms,6是代表好的时候负载均衡带宽x2,坏的时候马上替换掉坏的使用好的
⑥重启网络服务:systemctl restart network
⑦进行测试:去掉一块网卡,然后看时延有没有变化
没去除其中一块网卡之前:时间都是<1ms
去除一块网卡后:出现了一次请求超时,说明了在100ms内网卡故障得以恢复,实验成功
三十四、SSH服务以及配置
SSH服务的配置文件: /etc/ssh/sshd_config
①修改ssh协议的端口号为8888(默认为22)
先设置:setenforce 0
然后编辑SSH配置文件vim /etc/ssh/sshd_config
找到“#Port 22”
把“#”去掉,并更改为8888,如:Port 8888
保存后重启SSH服务,服务名称为:sshd 命令:systemctl restart sshd
清空防火墙规则:iptables -F
然后进行连接:ssh 192.168.123.30 8888
可以发现使用8888端口成功远程连接到了30
②设置不允许超级用户登录ssh
编辑 vim /etc/ssh/sshd_config
把“#PermitRootLogin yes”此行中的“#”去掉,并且把yes改为no,如:PermitRootLogin no
保存退出后重启SSH服务
现在继续进行连接:ssh 192.168.123.30 8888
使用root登录,结果如下:
使用普通用户登录正常:
③禁用密码登录,只能使用秘钥登录
使用客户端40,使用服务端30
在客户端生成公钥和私钥:ssh-keygen
然后一直回车就在客户端创建了公钥和私钥
接下来上传带客户端:ssh-copy-id 192.168.123.30
输入“yes”
输入服务端的密码
设置 setenforce 0 直接输入即可
编辑服务端的ssh配置文件 命令:vim /etc/ssh/sshd_config
找到此行:PasswordAuthentication yes
把yes改为no,如:PasswordAuthentication no
保存退出后重启ssh服务:systemctl restart sshd
进行验证,在40客户端进行登录,不需要输入密码:
在未进行私钥和秘钥上传的设备上登录:密码禁止输入,说明限制成功
从服务器传送文件到客户端:例如从30传文件aaa到40的root目录
服务端输入命令:scp aaa 192.168.123.40:/root
输入yes
输入40的登录密码
然后转到40去查看目录root下是否有aaa,可以看到aaa已存在:
下载客户端的文件到服务器(在服务器上操作):例如把40的bbb文件下载到服务器30的/usr/test目录
服务端输入命令:scp 192.168.123.40:/root/bbb /usr/test
输入40的登录密码
查看服务器的/usr/test目录下是否有bbb文件
三十五、linux下软件的安装
(1)Yum仓库配置及使用
①进行yum仓库的配置
首先,把下载的镜像文件和cd/dvd绑定,如图:
然后进行挂载,此处我们的挂载目录选择为/media/cdrom
故,先创建挂载目录:mkdir -p /media/cdrom
进行挂载:mount /dev/cdrom /media/cdrom
查看挂载情况:df -h
进行永久性挂载配置:vim /etc/fstab
添加一行:/dev/cdrom /media/cdrom iso9660 defaults 0 0
解析:因为挂载的是光盘类型,所以格式为iso9660
接下来编辑yum仓库的配置文件:vim /etc/yum.repos.d/yum1.repo 注意,此处的文件名称可以随意取,但是结尾必须为repo
在里面写入以下内容:
[yum1]
name=yum1
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
解析:[]里面填的是yun仓库的唯一标识符
name是yum仓库的名称
baseurl是挂载路径,一般有三种:ftp:// http:// file:// /media/cdrom是挂载的路径
enabled=1代表启用yum仓库
gpgcheck=0代表不进行检查
保存退出之后我们就可以使用yum仓库进行安装软件了
命令格式:yum install 软件包名称
下面我们进行安装screen服务(作用是当客户端出现网络掉线等远程连接断开的时候,在做的工作会在服务器上继续进行)
yum install screen
安装完成后我们新建一个会话:
screen -S test 新建一个名为test的会话,在此会话里面执行工作不会因此会话中断而停止
查看当前有哪些会话:screen -ls 可以看到会话状态,id,名称等
恢复会话:screen -r test 可以使用会话名称也可以使用会话id
可以看到恢复会话后就直接恢复到刚才我们在会话里面执行的最后一个命令的状态。
还有一种实时保存会话的方式,即直接screen加上要执行的命令,如:screen vim haha
进行编写:
还未保存时突然远程断开或者断电
接下来我们只需要查询出我们进行编辑时的会话,然后重新启动此会话即可:
接下来我们进行恢复,命令:screen -r 30932
结果:恢复到断电前的状态
接下来进行会话的同步(屏幕共享,会话共享)
先在a客户端创建会话:screen -S test1
然后在b客户端执行:screen -x test1
此时我们在a端操作或在b端操作都会同时在a、b上面显示一样的内容,如:
可以看到,a端和b端完全是一样的屏幕
三十六、网站的部署
(1)windows系统部署网站需要的服务为IIS服务
(2)linux系统部署网站需要使用的服务为Apache、Nginx
Nginx能够进行网站负载均衡,俗称吃得少干得多
Apache软件包、服务名称等都叫做httpd
进行Apache前先配置ip地址等网络参数
yum仓库安装Apache :yum install httpd
接下来重启一下服务器:systemctl restart httpd
将httpd加入开机启动项:systemctl enable httpd
测试:在浏览器输入本机ip地址:192.168.123.30,若出现了以下界面,则说明Apache服务安装成功
一般情况下出现以上页面有几个原因:一是网站内没有数据,二是权限不足,三是
默认的网站的路径在/var/www/html目录下
下面我们在/var/www/html目录下新建一个名为index.html的文件,并写入以下几句话看看效果
hello
Welcome to my website
see you
继续输入:192.168.123.30,结果:不换行输出我们写的内容
下面我们来修改默认的网站的路径,比如说改成/usr/test/website目录:
查找主配置文件:/etc/服务名称/服务名称.con
httpd的主配置文件保存在/etc/httpd/conf/httpd.conf
先编辑httpd的主配置文件:vim /etc/httpd/conf/httpd.conf
找到大概119行:DocumentRoot "/var/www/html" 此路径即为默认网站的存放路径,修改为
DocumentRoot "/usr/test/website"
124行:<Directory "/var/www"> 修改为 <Directory "/usr/test/website">
然后保存退出,重启
在/usr/test/website目录下新建index.html,并写入一句话:echo "我已经更换了默认目录!">index.html,再次在浏览器输入ip,结果:
如果未出现以上的画面,那么有可能是安全子系统SELinux打开的原因,然后导致权限不足。
下面我们对selix进行设置,临时设置的命令为:
getenforce 查看selinux状态
setenforce 0 临时关闭selinux
setenforce 1 开启selinux
永久配置selinux,需编辑配置文件:vim /etc/selinux/config
使用命令setenforce 0后再在浏览器输入ip地址,现在是不是已经正常了呢?如果没有的话说明不是selinux原因导致的。
查询某个目录专属于什么服务的:ls -ldZ /var/www/html
修改selinux上下文,规定某文件夹能做某些服务:
semanage fcontext -a -t httpd_sys_content_t /usr/test/website 对目录修改不能加/
解析:-a代表修改,-t代表支持什么服务;以上就是修改/usr/test/website目录上下文,使此目录支持httpd_sys_content_t服务
接下来进行恢复,即通知系统让我们的配置参数立即生效,命令:restorecon -Rv /usr/test/website
现在继续在浏览器输入ip,是不是已经正常了呢?
下面我们实现个人用户主页功能
编辑配置文件:vim /etc/httpd/conf.d/userdir.conf
注释17行,开启24行。
切换到普通用户
在用户家目录里面创建public_html文件夹:mkdir public_html 创建的文件夹要和24行的一致
进入public_html目录,新建index.html文件:touch index.html
编辑文件,写入:专属于我的个人主页
在用户家目录里面执行:chmod -Rf 755 ~ 即赋权使其他用户能够访问此时的家目录
退出普通用户登录:exit
重启httpd服务:systemctl restart httpd
然后在浏览器输入ip以及某个用户名称:192.168.123.30/~wp
报错了,此时我们猜测应该是SELinux原因
先展示selinux对所有服务的限制状态:getsebool -a | grep httpd
然后我们需要开启httpd_enable_homedirs 命令:setsebool -P httpd_enable_homedirs=on -P代表永久生效
以上是开启用户主页功能并永久生效
现在继续在浏览器输入192.168.123.30/~wp 效果如下:
给个人主页网站进行加密,需输入密码才能访问
先设置密码:htpasswd -c /etc/httpd/passwd wp
输入进入网站的密码:123456
编辑/etc/httpd/conf.d/userdir.conf文件
修改信息如下:
<Directory "/home/*/public_html">
allowoverride all
authuserfile "/etc/httpd/passwd"
authname "这是私人站点,需输入密码才能访问!"
authtype basic
require user wp
</Directory>
然后保存退出
重启httpd服务
现在重新访问:192.168.123.30/~wp 结果如下:
输入用户名和密码后正常访问
接下来我们进行云服务器的配置
首先设置多ip,编辑 vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
IPADDR0=192.168.123.30
IPADDR1=192.168.123.40
IPADDR2=192.168.123.50
然后保存退出重启网络服务
创建3个目录用于存储不同的网站:
mkdir -p /usr/test/30
mkdir -p /usr/test/40
mkdir -p /usr/test/50
分别向30、40、50内写入文件index.html,文件内容分别写上:30、40、50
编辑httpd主配置文件
在124行添加如下配置:
<virtualhost 192.168.123.30>
documentroot /usr/test/30
servername wp
<directory /usr/test/30>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.123.40>
documentroot /usr/test/40
servername wp
<directory /usr/test/40>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.123.50>
documentroot /usr/test/50
servername wp
<directory /usr/test/50>
allowoverride none
require all granted
</directory>
</virtualhost>
保存后重启httpd服务
然后浏览输入192.168.123.30,如:
然后浏览输入192.168.123.40,如:
然后浏览输入192.168.123.50,如:
下面进行dns解析实验,
先创建三个文件夹:
mkdir -p /usr/test/a
mkdir -p /usr/test/b
mkdir -p /usr/test/c
然后在a、b、c里面创建文件index.html,并且分别写上aaaaaa、bbbbbbb、ccccccccccc
echo "aaaaaaaaaa">/usr/test/a/index.html
echo "bbbbbbbbbb">/usr/test/b/index.html
echo "cccccccccc">/usr/test/c/index.html
编辑配置文件:vim /etc/hosts 将域名解析到对应的ip
添加一行:192.168.123.30 www.a.com www.b.com www.c.com
测试,结果如下:能通过域名找到ip
编辑httpd服务的主配置文件 vim /etc/httpd/conf/httpd.conf
在120行左右添加以下配置:
<virtualhost 192.168.123.30>
documentroot /usr/test/a
servername www.a.com
<directory /usr/test/a>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.123.30>
documentroot /usr/test/b
servername www.b.com
<directory /usr/test/b>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.123.30>
documentroot /usr/test/c
servername www.c.com
<directory /usr/test/c>
allowoverride none
require all granted
</directory>
</virtualhost>
保存退出后重启httpd服务,然后进行测试,结果如下:输入不同的域名会自动找到对应的网站显示
下面进行端口访问不同网站的实验
创建两个文件夹:
mkdir -p /usr/test/8888
mkdir -p /usr/test/9999
分别在这两个文件夹下面创建index.html文件并写入数据:
echo "8888">/usr/test/8888/index.html
echo "9999">/usr/test/9999/index.html
编辑httpd服务的主配置文件 vim /etc/httpd/conf/httpd.conf
添加如下配置:
<virtualhost 192.168.123.30:8888>
documentroot /usr/test/8888
servername www.8888.com
<directory /usr/test/8888>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.123.30:9999>
documentroot /usr/test/9999
servername www.9999.com
<directory /usr/test/9999>
allowoverride none
require all granted
</directory>
</virtualhost>
接着进行监听8888、9999端口,添加数据如下:
Listen 8888
Listen 9999
保存后重启httpd服务后会出现报错。此时,我们先查看服务端口信息:
semanage port -l | grep http 过滤出http服务所允许的所有端口
因为8888和9999没有在里面,所以我们需要手动添加进去:
semanage port -a -t http_port_t -p tcp 8888
semanage port -a -t http_port_t -p tcp 9999
接下来重启httpd服务后就没有报错了,我们进行测试,结果:
下面设置仅能通过火狐浏览器访问网站
首先,创建目录:mkdir -p /usr/test/website/firefox /usr/test/website目录是默认的网站目录
新建index.html文件并写入信息:echo "此页仅能火狐浏览器访问">/usr/test/website/firefox/index.html
编辑httpd服务主配置文件:vim /etc/httpd/conf/httpd.conf
添加以下信息:
<directory "/usr/test/website/firefox">
setenvif user-agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</directory>
保存后重启httpd服务
看下结果:
三十七、FTP服务搭建
FTP服务名称:vsftpd
作用:文件的上传和下载
使用默认端口号:20是数据传输,21是指令
首先安装vsftpd服务:yum install vsftpd
编辑主配置文件:vim /etc/vsftpd/vsftpd.conf
过滤出来所有不包含#的行:grep -v "#" /etc/vsftpd/vsftpd.conf -v表示反选
anonymous_enable=YES 允许匿名登录
local_enable=YES 允许本地用户登录
write_enable=YES 允许本地用户写入
local_umask=022 文件权限反验码
dirmessage_enable=YES 显示提示信息
xferlog_enable=YES 启动系统日志 保存在/var/logmessages
connect_from_port_20=YES 通过20端口号进行文件传输
xferlog_std_format=YES 日志以标准格式写入
listen=NO 不允许将服务以独立形式进行允许
listen_ipv6=YES 支持ipv6
pam_service_name=vsftpd pam服务名称
userlist_enable=YES 用户列表开启
tcp_wrappers=YES 由防火墙进行限制
黑名单配置文件:user_list
下面配置匿名用户不用输入密码也能访问,添加红色部分:
anonymous_enable=YES
anon_umask=022 反验码
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户新建文件和目录
anon_other_write_enable=YES 允许匿名用户改名、修改、删除等
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
保存退出后重启vsftpd
然后把vsftpd加入到开机自启动
安装ftp yum install ftp
清空防火墙规则,然后保存:iptables -F
service iptables save
测试:在linux下需要输入登录名anonymous
匿名登录后会直接进入默认目录/var/ftp/pub内
若是创建目录不成功一般是selinux的域限制,先查看:getsebool -a|grep ftp
然后使用:setsebool -P ftpd_full_access=on 把ftpd_full_access功能开启
接下来给/var/ftp/pub赋权:chmod -R 777 pub
重新登录ftp,然后创建文件:
下面进行本地用户登录配置
vim /etc/vsftpd/vsftpd.conf
写入以下配置:
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
然后编辑:vim /etc/vsftpd/user_list文件,把root前面添加#,从黑名单移除
同样编辑:vim /etc/vsftpd/ftpusers 文件,在root前面添加#
保存后重启vsftpd服务
测试:成功连接
虚拟ftp专用用户设置(被动模式)
先创建一个文件,用来保存账号和密码:vim virtual.list 单数行是用户名,偶数行是密码
zhangsan 用户名
123456 密码
进行加密:db_load -T -t hash -f virtual.list virtual.db
解析:-T 加密 -t加密方式 -f要加密的文件 加密文件名称
删除明文密码信息:rm -rf virtual.list
更改virtual.db权限:chmod -R 600 virtual.db 仅root可读写
新建用户:useradd -d /var/ftproot -s /sbin/nologin virtual
解析:-d指定用户登录家目录 -s指定用户不能登录系统,仅能登录ftp
给文件夹赋权:chmod -Rf 755 /var/ftproot
修改pam模块:vim /etc/pam.d/vsftpd.vu 添加以下信息:
auth required pam_userdb.so db=/etc/vsftpd/virtual
account required pam_userdb.so db=/etc/vsftpd/virtual
编辑文件:vim /etc/vsftpd/vsftpd.conf
修改图中标示出来的行为:pam_service_name=vsftpd.vu (即加上.vu,上面创建的文件)
另外,修改的其他行为:
修改完成后的主配置文件是这样的:
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vusers_dir
userlist_enable=YES
tcp_wrappers=YES
pasv_enable=YES
pasv_min_port=41000
pasv_max_port=42000
新建文件夹:mkdir /etc/vsftpd/vusers_dir
新建文件:cd /etc/vsftpd/vusers_dir
touch zhangsan lisi
编辑文件:vim zhangsan
添加以下内容:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
重启ftp服务:systemctl restart vsftpd
三十八、tftp安装配置
安装:yum install tftp-server tftp (tftp-server指的是tftp服务名称,tftp指的是工具)
端口号默认69,udp协议
服务配置文件为:/etc/xinetd.d/tftp
内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = yes
per_source = 11
cps = 100 2
flags = IPv4
}
把disable = yes改为no即开启了tftp
重启服务:systemctl restart xinetd
将服务添加到启动项:systemctl enable xinetd
测试:
下载服务器的文件:get 文件名
三十九、Samba服务(文件共享)
1.安装服务:yum install samba
2.修改配置文件名称:cd /etc/samba
mv smb.conf smb.conf_bak
3.过滤出此配置文件不包含“#”,“;”,以及空行的所有行(即去掉所有的注释):grep -v "#" smb.conf_bak |grep -v ";" |grep -v "^$"
解析:-v代表反选,“^$”表示空行
4.并把剩余的信息写到配置文件:grep -v "#" smb.conf_bak |grep -v ";" |grep -v "^$" >smb.conf
5.编辑smb.conf :vim smb.conf
1 [global]
2 workgroup = MYGROUP
3 server string = Samba Server Version %v
4 log file = /var/log/samba/log.%m
5 max log size = 50
6 security = user
7 passdb backend = tdbsam
8 load printers = yes
9 cups options = raw
10 [homes]
11 comment = Home Directories
12 browseable = no
13 writable = yes
14 [printers]
15 comment = All Printers
16 path = /var/spool/samba
17 browseable = no
18 guest ok = no
19 writable = no
20 printable = yes
解析:14-20行表示的是共享打印机的配置,10-13行是共享用户家目录的配置,8、9行是打印机共享以及共享类型
此处,删掉第七行及后面的行,然后修改后文件如下:
1 [global]
2 workgroup = MYGROUP
3 server string = windows 2008
4 log file = /var/log/samba/log.%m
5 max log size = 50
6 security = user
7 passdb backend = tdbsam
redhat5、6使用的是PAM模块验证(即系统用户名和密码),而redhat7以后使用的是tdbsam数据库验证
6.接下来创建用来登录Samba的用户
pdbedit -a -u wp 将wp加入到验证登录tdbsam使用
然后输入密码
7.创建用来共享的目录:mkdir testgx
8.将testgx的所有者和所有组更改为wp :chown -Rf wp:wp /testgx
9.放行samba相关的策略
getsebool -a |grep samba
把samba_export_all_rw --> off 开启
setsebool -P samba_export_all_rw=on
10.编辑smb.conf : vim smb.conf
添加如下数据:
[testgx]
comment = tishixinxi 提示信息
path = /testgx 共享路径
public = no 是否公开
writable = yes 是否允许写入
11.重启smb服务:systemctl restart smb
systemctl enable smb
12.清空防火墙规则:iptables -F
service iptables save
13.在windows里面运行窗口里面输入:\\ip地址
未完待续