OSI模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
路由器的工作原理:最佳路径选择
三次握手四次挥手:...
shell是翻译官把人类语言翻译成二进制语言
Tab作用:自动补齐、确认输入是否有误
Ctrl+C 终止 取消命令
Ctrl+L 清屏 clear
man详细手册
help命令搭配哪些选项
-文件 d目录
硬链接:复制了自身,inode号相同
软连接:快捷方式
xfs inode号怎么办?
还能写100-300个,有宽容机制
磁盘空间越大,inode号越多
du -sh *最人性化展示当前目录下所有文件大小
cp -f 和 cp -i 没有区别,系统默认cp -i会询问
cp -a可以不用-r
查找opt目录下,所有大于1G的文件,然后把他们移动到etc目录下
find /opt -size +1G -exec mv {} /etc \;
o or 或者 满足一个条件即可
a and 并且 同时满足两个条件
-ok COMMAND {} \; 会询问,需要回复yes执行(一个文件问一次)
-exec COMAAND {} \; 直接执行command
find -mtime 10 十天到十一天
find -mtime +10 十一天以上
find -mtime -10 十天以内
查看硬盘分区情况 lsblk
查看机器架构:arch
查看内核版本:uname -a 、uname-r
查看当前系统时间:date
-d描述的日期
+%F:完整日记格式
+%T:时间(24小时制)
编译安装 /usr
yum安装配置 /etc
tail -f动态查看后十行
tar -zcvf xxxx.tar.gz yyyy
tar -zxvf xxxx.tar.gz yyyy
tar -jcvf xxxx.tar.bz2 yyyy
tar -jxvf xxxx.tar.bz2 yyyy -C 目录
mount /dev/cdrom /mnt
cd /etc/yum.repo.d
mkdir backup.bak
mv C* backup.bak
vim local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
yum clean all && yum makecache
gpgcheck=0
表示yum将不验证软件包的签名。这可以加快软件包的安装速度,但也会降低安全性
编译安装:
./configure --prefix=/usr/local/apache
yum -y install ...
make && make install
userdel -r连宿主目录一起删掉,腾出空间
777 : 所有者 所属组 其他用户
chmod -R:递归修改所有子目录文件权限
chown 属主:属组 名字
设置目录和文件的默认权限:umask
root umask 022 普通用户 002
文件默认权限:666 文件夹默认权限:777
文件逢奇数进一,没有执行权限
su 在root模式下 刷新作用
su 直接切换,不完全切换,还是之前的bash环境
su - 完全切换
/boot引导分区
swap 交换分区:当系统空间不够就从交换分区分配空间使用
磁盘分区优点:便于管理、优化读写性能
fdisk 小于2TB 2.2实际
gdisk 大于2TB
mkfs -t 文件系统类型 分区设备
mkfs -t 文件系统类型 分区设备
blkid查询设备uuid号
vim /etc/fstab永久挂载
/dev/sdb1 /opt xfs defaults 0 0
文件类型 定义默认值 备份开启
/dev/sr0 iso9660 defaults 0 0
镜像挂载 iso9660
iostat 查看磁盘读写性能
umount -lf 强制解除正在繁忙的文件
创建物理卷 创建卷组 创建逻辑卷 平滑扩容
格式化 挂载
pvcreate vgcreate lvcreate lvextend -L
扩容加-r,否则刷新xfs_growfs
LVM管理:scan、create、display、remove、extend、reduce
xfs只能扩容 ext4可以扩容可以缩容,但不考虑
磁盘配额:dd if=/dev/zero of=opt/123.txt bs=10M count=12
top查看进程动态信息
crontab -e 分时日月周
运行起来的代码就是进程
pstree -p 查看单进程多进程
日志文件:
公共消息日志:/var/log/messages
计划任务日志:/var/log/cron
系统引导日志:/var/log/dmesg
邮件系统日志: /var/log/maillog
用户登录日志: /var/log/secure 用户认证安全事件
/var/log/lastlog 最近登录
/var/log/wtmp 具体登录注销启停
/var/run/btmp 记录失败
route -n查看当前路由信息
网卡地址:/etc/sysconfig/network-script
修改DNS硬解析配置文件:vim /etc/resolv.conf
/etc/hosts/ 保存IP映射
ifconfig ens33 192.168.179.20:0 192.168.179.100 255.255.255.0 虚拟网卡
ftp:文传协议 20 21端口
作用:linux和windows互传
dhcp 分配地址池
rz 文件名 #下载指定文件到服务器
sz 文件名 #把服务器的文件下载到客户端
DNS迭代和递归:DNS(域名系统)的迭代和递归是两种不同的查询方式。
递归查询是客户端向DNS服务器发出请求,请求该服务器返回解析结果。如果该服务器不知道答案,它将会向其他服务器发送请求,直到找到答案并返回给客户端。这种查询方式要求DNS服务器尽可能提供完整的解析过程,而且可能涉及多个服务器之间的通信。递归查询通常由本地DNS服务器执行,而不是由最终用户的计算机执行。
相反,迭代查询是DNS服务器接收到查询请求后,它只返回一个指向下一个可能有答案的DNS服务器的“指针”,而不是直接提供解析结果。这个过程一直持续到DNS服务器找到答案,或者确认没有答案为止。如果没有找到答案,DNS服务器将返回“未找到”错误消息。这种查询方式要求客户端自己负责迭代查询过程。
总的来说,递归查询和迭代查询都是为了获取DNS解析结果。但它们的执行方式和角色是不同的。递归查询是在DNS服务器之间进行的,它要求服务器尽可能提供完整的解析过程,以便最终提供答案。而迭代查询则需要客户端参与到查询过程中,一步一步地找到答案。
ssh默认配置文件是:/etc/ssh/sshd_config(改端口号)
默认端口号:22
ssh -keygen -t
白名单比黑名单安全性高
允许所有,拒绝个别 /etc/hosts_deny
允许个别,拒绝所有/etc/hosts_allow
yum仓库 混搭:priority 优先级区分
NFS备份共享目录主要用来备份
showmount -e 查看共享目录
自动挂载:
192.168.179.20:/opt/wwwroot /myshare nfs defaults,_netdev 0 0
三剑客:grep sed awk
针对文件的内容的行操作
grep -w 匹配整个单词
grep -e -e 或者 或者
grep -o仅显示匹配到的字符串
grep -r 递归过滤目录中的文件的内容
sort排序
uniq连续去重
tr 字符串替换、压缩和删除
split -l 指定行分
split -b 指定大小分
通配符匹配文件和文件名
正则匹配文件内容
*一个或多个
?一个任意字符
[]任意单个字符
元字符:
. 匹配任意单个字符,可以是一个汉字 \.表示.
() 使用转义字符,不用转义符表示分组
[^] 表示范围外的任意单个字符
[ ]匹配范围内的任意单个字符
[:alnum:]字母和数字
[:alpha:]任何英文大小写字符
[:lower:]小写字母
[:upper:]大写字母
[:space:] 空格
^root$ 单独一行,只有root(用于匹配整行模式)
^行首锚定,用于模式最左侧
$行尾锚定,用于模式的最右侧
^$空行
扩展正则:
grep -E sed -r
| 或者 :C|cat C或cat (C|c)at Cat或者cat
sed 命令:
s:替换字符串
c:整行替换
y:字符替换,长度要一致
sed -f:前一个文件作为后面的文件的命令
awk默认分隔符:空格或tab
BEGIN打印模式:
awk 'BEGIN{...};{...};END{...}'文件
awk -v 变量赋值
RS默认分隔符 \n 换行
通信五元素:源/目的 端口 源/目的 IP 协议(tcp/udp)
四表五链:
优先级 :raw >mangle> nat> filter(默认)
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
iptables -t 表名 管理选项 [链名] [匹配条件] [-j 控制类型]
规则表的作用:容纳各种规则链
规则链的作用:容纳各种防火墙规则
表里有链,链里有规则
DROP与REJECT 都是拒绝,REJECT会给回应
iptables -vnL --line-number
iptables-save备份
iptables-restore导入
SNAT主要是用来做默认网关的,而DNAT主要是用来做端口映射的。
firewalld防火墙9个区域,默认public
提取主机名放入host文件:
awk -F'[ .]+' '{print $2}' 111.txt >host
awk ‘{print $2}’ 111.txt | awk -F. ‘{print $1}’
★取小数点几位和取整数(printf:f调用%.f方法)
result=$(awk 'BEGIN{printf "%.2f",2.32332*2.3213}') 取小数点2位
result=$(awk 'BEGIN{printf "%.F",2.32332*2.3213}') 取整(四舍五入)
★简单日志分割
awk '{print $1, $7, $9}' /var/log/messages
磁盘可用容量(G)
df | grep -w centos-root | awk '{sum+=$4} END{print "磁盘可用容量:"sum/1024/1024}'
df -h | awk '$NF=="/"{print $4}'
etc下文件的大小和(M)
ls -l /etc/ | awk '/^-/ {sum+=$5} END{print "文件总大小:"sum/1024“M”}
读取message 17:30-17:50
sed -n '/Mar 24 17:30:01/,/Mar 24 17:50:02/p' /var/log/message
修改网卡IP
sed -i '/^IPADDR/c IPADDR=192.168.179.20' /etc/sysconfig/network-scripts/ifcfg-ens33
★统计当前主机的连接状态
ss -ant | grep -v '^State' | cut -d " " -f 1 | sort | uniq -c
★统计当前连接主机数
ss -nt | tr -s "" | cut -d " " -f 5 | sort -n | uniq -c
先配置本地yum源
mount/dev/cdrom/mnt/ 把光盘临时挂载到/mnt目录下
cd/etc/yum.repos.d
mkdir repos.bak
mv * repos.bak
vim local.repo
[local] #文件名
name=local #描述
baseurl=file:///mnt #将制定光盘挂载目录座位软件仓库源
enabled=1 #开启此yum源,此为默认项,可省略
gpgcheck=0 #不去检查软件序列号
yum clean all && yum makecache #删除yum缓存并更新
查看系统启动耗时
systemd-analyze
硬盘满了,该如何解决?
答案:①删除没有用的文件,删除了一个大文件但是磁盘没有释放空间,原因是文件还在被使用。解决方法删除之前:echo “ ”>/大文件。将文件重定向为空。删除之后:lsof | grep delete显示打开的文件并过滤删除的文件,然后kill 杀死这个寻找到的进程。
②申请加硬盘
找到大于7天大于1g的普通文件并删除,一条命令解决。
答案:find -mtime +7 -type f -size +1G -delete
如何将俩个文件合并成一个文件?
答案:上下合成 cat 1.txt 2.txt >3.txt
答案:左右合成 paste 1.txt 2.txt >3.txt
我现在有一个文件夹,有很多文件,请快速过滤出这个文件夹下所有含有root字符串的文件。
答案:grep -rw root 文件夹
实时查看某软件运行的报错日志最后20行,目录/var/log/soft.log
答案: tail -f -n 20 /var/log/soft.log
cp /etc/passwd /opt/xxx :
cp的命令需要的最低权限 : 执行
passwd这个文件的最低权限: 读 写 执行
xxx目录的最低权限: 写 执行
总结安全加固的措施
1.将非登录用户shell设置为nologin
2.锁定长期不使用的账号(锁定用户)
3.删除无用账号
4.chattr锁定配置文件(重要文件passwd、shadow、fstab等加 i 权限,不让删除)
5.设置密码复杂性规则(长度、特殊字符、失效时间等)密码策略
6.修改history,记录历史命令,尽量缩短记录历史命令的条数
7.禁止su root,切换超级管理员
8.设置sudo权限,禁用不安全命令
9.给GRUB设置密码
10.只允许BIOS从硬盘启动,关闭除了硬盘启动外的(光驱、udisk 、网络)
11.给BIOS设置密码
12.限制root只在安全终端登录
13.禁止普通用户登录
14.改掉大家都知道的服务端口
15.做好日志权限管理
16.内核参数调整
如何优化Linux系统?
不用root,添加普通用户,通过sudo授权管理
更改默认的远程连接SSH服务端口及禁止root用户远程连接
定时自动更新服务器时间
配置国内yum源
关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
调整文件描述符的数量
精简开机启动服务(crond rsyslog network sshd)
内核参数优化(/etc/sysyctl.conf)
更改字符集,支持中文,但建议还是使用英文字符集,防止乱码
锁定关键系统文件
清空/etc/issue,去除系统及内核版本登陆前的屏幕显示
一台Linux系统初始化环境后需要做一些什么安全工作?
添加普通用户登录,禁止root用户登录,更改SSH端口号。修改SSH端口不一定绝对。如果暴露在外网,建议修改。
服务器使用密钥登录,禁止密码登录。
开启防火墙,关闭SElinux,根据业务需求设置相应的防火墙规则。
装fail2ban这种防止SSH暴力破击的软件。
设置只允许公司办公网出口IP能登陆服务器(看公司实际需求),也可以安装VPN等软件,只允许连接VPN到服务器上。
修改历史命令记录的条数为10条。
只允许有需要的服务器可以访问外网,其他全部禁止。
做好软件层面得防护:(1)设置nginx_waf模块防止SQL注入
(2)把Web服务器使用www用户启动,更该网站目录的所有者和所属组为www
面试题:提取版本号
[root@localhost opt]# grep -E "[0-9]+\." 1.txt
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar
[root@localhost opt]# cat 1.txt |sed -r 's/(.*)-(.*)(\.jar)/\1\2\3/' #完整版
[root@localhost opt]# cat 1.txt |sed -r 's/.*-(.*)(\.jar)/\1\2/' #把-前面的取消了
[root@localhost opt]# cat 1.txt |sed -r 's/.*-(.*)\.jar/\1/' #把.jar是不在引用,正确结果
#-r 表示引用扩展正则,(.*)表式"-"前面的所有,"-",就是"-",第二个(.*)表示"-"后面的内容到.jar,(\.jar)的第三个部分
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5
inode号满了怎么办
删小文件 不用的文件
扩容+格式化 lvm -r df -i
io读写占满了
磁盘坏了
次数抓包处理
tcpdump tcp -i ens33 -t -s0 -c 100 and dst port 80 and src net 192.168.179.0/24 -w ./target.cap
动态抓包处理:
tcpdump -i ens33 -s0 -w ./ens33.cap
第一题:CPU使用率
第二题:内存占用率
第三题:磁盘占用率
第一题:top -b -n 1 | grep -w %Cpu | awk '/ /{sum=$2+$4}END{print "CPU使用了"sum"%"}'
CPU使用了50%
第二题:free -m | grep -w Mem: | awk 'BEGIN{FS=" "}{if($3/$2>=0.9){printf"%.2f""内存使用了:"$3/$2*100"% 内存使用超过90%请注意!"} else{print" 系统统使用了"$3/$2*100"% 系统很健康!"}}'
系统统使用了8.02862% 系统很健康!
第三题:df -h | grep /dev/sda | awk '/ /{print$1"占用率"$5}'
/dev/sda3占用率16%
/dev/sda1占用率53%
第一题:top -b -n 1 | grep -w %Cpu | awk '{print "CPU使用了"$2+$4"%"}'
CPU使用了53.2%
第二题:function jiankong {
free -m | grep -w Mem: | awk '{avg=$3/$2}END{printf"磁盘使用率:%.2f%%\n",avg*100}'
}
jiankong $avg
function bijiao {
local a=$(jiankong)
if [[ `expr $a \>= 0.9` -eq 0 ]];then
echo "磁盘使用率超过90%请注意!"
else
echo "系统很安全!放心使用!"
fi
}
bijiao $a
磁盘使用率:22.52%
系统很安全!放心使用!
第三题:df -h | grep /dev/sda | awk '{print$1"占用率"$5}'