第三周
day13 -1
[root@oldboyedu ~]# ls -lhi
total 32K
33631870 -rw-r--r--. 1 root root 4 Mar 13 2019 a.txt
第二列结尾的. 是标识selinux的符号
1、selinux是什么?
安全规则,让Linux系统更安全的一套规则。
这个规则太严格了,一般的情况下都会关闭selinux。
自己开启防火墙啊,用其他手段来实现同样的安全目的。
2、怎么关掉Selinux?
查看方法:
[root@oldboyedu ~]# getenforce
Enforcing
临时关掉:
[root@oldboyedu ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@oldboyedu ~]# setenforce 0
[root@oldboyedu ~]# getenforce
Permissive
永久关闭:
vim /etc/selinux/config
[root@oldboyedu ~]# grep dis /etc/selinux/config
# disabled - No SELinux policy is loaded.
SELINUX=disabled
Linux里防火墙C6 iptables C7 firewalld
作用:防护计算机,防止被入侵。
systemctl status firewalld.service
开启firewalld(C6 service iptables start 或者/etc/init.d/iptables start)
[root@oldboyedu ~]# systemctl start firewalld.service
[root@oldboyedu ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-10-04 20:48:49 CST; 1s ago
Docs: man:firewalld(1)
Main PID: 7003 (firewalld)
CGroup: /system.slice/firewalld.service
└─7003 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Oct 04 20:48:48 oldboyedu systemd[1]: Starting firewalld - dynamic firewall daemon...
Oct 04 20:48:49 oldboyedu systemd[1]: Started firewalld - dynamic firewall daemon.
让firewalld开机自启动
[root@oldboyedu ~]# systemctl enable firewalld.service
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
C6用法:chkconfig iptables off
C7就是一个命令systemctl
自学能力:总结两个命令systemctl和chkconfig。
[root@oldboyedu ~]# ls -lhi
total 32K
33631870 -rw-r--r--. 1 root root 4 Mar 13 2019 a.txt
硬链接数
1、什么是硬链接?
具有相同inode节点号的文件互为硬链接。
一个文件的两个入口。
[root@oldboyedu ~]# ls -ldi test test/.
16964029 drwxr-xr-x. 2 root root 4096 Oct 1 14:07 test
16964029 drwxr-xr-x. 2 root root 4096 Oct 1 14:07 test/.
[root@oldboyedu /data]# ls -ldi oldboy
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy
[root@oldboyedu /data]# ls -ldi oldboy oldboy/. oldboy/test{1..3}/..
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy/.
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy/test1/..
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy/test2/..
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy/test3/..
2、硬链接原理。
3、测试
创建硬链接:
ln 源文件 硬链接文件
a.文件硬链接
[root@oldboyedu /data]# echo "I am oldboy." >oldboy.txt
[root@oldboyedu /data]# cat oldboy.txt
I am oldboy.
[root@oldboyedu /data]# ln oldboy.t
oldboy.tar.gz oldboy.txt
[root@oldboyedu /data]# ln oldboy.txt oldboy_hard_link
[root@oldboyedu /data]# ls -lirt
total 20
33631860 -rw-r--r--. 1 root root 0 Oct 1 00:19 5.txt
33631855 -rw-r--r--. 1 root root 0 Oct 1 00:19 4.txt
33631847 -rw-r--r--. 1 root root 0 Oct 1 00:19 3.txt
33631845 -rw-r--r--. 1 root root 0 Oct 1 00:19 2.txt
33631841 -rw-r--r--. 1 root root 0 Oct 1 00:19 1.txt
33656236 -rw-r--r--. 1 root root 18 Oct 1 09:01 paichu.txt
33631869 -rw-r--r--. 1 root root 187 Oct 1 09:01 oldboy.tar.gz
33656257 -rwxr-xr-x. 1 root root 14 Oct 1 11:07 test.txt
33631853 drwxr-xr-x. 5 root root 45 Oct 4 21:03 oldboy
33656238 -rw-r--r--. 2 root root 13 Oct 4 21:10 oldboy.txt
33656238 -rw-r--r--. 2 root root 13 Oct 4 21:10 oldboy_hard_link
作用:
1、备份,防止误删。
[root@oldboyedu /data]# ln /etc/hostname /opt/hostname
[root@oldboyedu /data]# cat /opt/hostname
oldboyedu
[root@oldboyedu /data]# rm -f /etc/hostname
[root@oldboyedu /data]# cat /etc/hostname
cat: /etc/hostname: No such file or directory
[root@oldboyedu /data]# cat /opt/hostname
oldboyedu
[root@oldboyedu /data]# ln /opt/hostname /etc/hostname
[root@oldboyedu /data]# cat /etc/hostname
oldboyedu
b.目录硬链接
不支持人工创建目录硬链接。
[root@oldboyedu /data]# ln oldboy oldgirl
ln: ‘oldboy’: hard link not allowed for directory
老男孩的思考:
/etc/目录,对应一个分区
/home目录,还可能对应一个分区。
ln /etc/ /home/oldboy
软链接:
本质是快捷方式,指向源文件实体,本身和源文件是不同的文件。
实践:
文件
[root@oldboyedu /data]# !echo
echo "I am oldboy." >oldboy.txt
[root@oldboyedu /data]# cat oldboy.txt
I am oldboy.
[root@oldboyedu /data]# ln -s oldboy.txt oldboy_soft_link
目录:是工作中的重点
[root@oldboyedu /data]# mkdir oldboy
[root@oldboyedu /data]# touch oldboy/test.txt
[root@oldboyedu /data]# ln -s oldboy oldboy_soft_link_dir
[root@oldboyedu /data]# ls oldboy_soft_link_dir/
test.txt
[root@oldboyedu /data]# ls oldboy
test.txt
工作中为什么会使用软链接。
第一个用途:
安装软件:/application/nginx-1.10
过半年:/application/nginx-1.20
导致一个问题,工作中,开发等引用/application/nginx-1.10路径。
安装软件:/application/nginx-1.10===>/application/nginx(让开发用)
过半年: /application/nginx-1.20===>/application/nginx(让开发用)
第二个用途:
/etc/对应的分区要满了,没法放很多文件,但是程序还想通过/etc/目录访问文件。
此时,我们可以把文件放入/opt/oldboy下,然后做一个到/etc/oldboy的软链接。
[root@oldboyedu /data]# mkdir /opt/oldboy
[root@oldboyedu /data]# touch /opt/oldboy/{1..3}.txt
[root@oldboyedu /data]# ln -s /opt/oldboy/ /etc/oldboy
[root@oldboyedu /data]# ls /etc/oldboy
1.txt 2.txt 3.txt
[root@oldboyedu /data]# ll /opt/oldboy
total 0
-rw-r--r--. 1 root root 0 Oct 4 22:02 1.txt
-rw-r--r--. 1 root root 0 Oct 4 22:02 2.txt
-rw-r--r--. 1 root root 0 Oct 4 22:02 3.txt
必会面试题:软链接和硬链接的区别?
Linux文件删除原理:
1、静态文件:没有进程或程序正在访问的文件。
所有的硬链接数为0(i_link),即所有硬链接都被干掉了,包括自身。
硬链接的数量的代表变量符号i_link
rm -f oldboy.txt oldboy_hard_link
执行完 其实文件也没删,关机停止运行。
a.系统定时清理没有文件名的inode。
b.磁盘检查会清理。
c.增加新文件时优先占用没有文件名的inode。
恢复的工具:debugfs,ext3grep等等。
亡羊补牢其实不可取的,违反运维的三大核心原则。
多备份,操作前备份,异服务器和异地备份。
流浪地球,人类备份。
光一秒30w公里
月地距离 38万公里
日地距离 1.5亿公里 8分钟
太阳系大小
第二近的恒星 4光年
地球 46亿年了。42亿前。
太阳处于中年 寿命70亿年。大到太阳吞噬地球。
银河系大小 10万光年
宇宙大小 可探测到的直径1000亿光年
2、动态文件:有程序或进程访问的文件
删除原理:
a.所有硬链接删除。i_link为0.
b..i_count是进程调用文件的数量(引用计数)。所有进程调用都要停止取消。i_count为0
3、实践文件删除原理
环境准备,命令集合如下:
mkdir -p /app/logs #<==创建用于挂载的目录。
dd if=/dev/zero of=/dev/sdc bs=8K count=10 #<==创建指定大小的文件。
mkfs.ext4 /dev/sdc #<==格式化。
mount -o loop /dev/sdc /app/logs #<==挂载。
df -h #<==检查挂载结果。
实践:
[root@oldboyedu /data]# cd /app/logs/
[root@oldboyedu /app/logs]# touch nginx.log
[root@oldboyedu /app/logs]# tail -f nginx.log
[root@oldboyedu /app/logs]# cat /etc/services >>nginx.log
cat: write error: No space left on device
[root@oldboyedu /app/logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.9G 18G 10% /
devtmpfs 980M 80K 980M 1% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 73K 71K 0 100% /app/logs
明明删除了,结果还是100%。
[root@oldboyedu /app/logs]# rm -f nginx.log
[root@oldboyedu /app/logs]# lsof|grep nginx
tail 7927 root 3r REG 7,0 57344 12 /app/logs/nginx.log (deleted)
[root@oldboyedu /app/logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.9G 18G 10% /
devtmpfs 980M 80K 980M 1% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 73K 71K 0 100% /app/logs
重来:
模拟进程读文件:
[root@oldboyedu /app/logs]# touch nginx.log
[root@oldboyedu /app/logs]# tail -f nginx.log
ln nginx.log nginx_hard.log
当前:
i_link=2
i_count=1
模拟把文件变大,让分区满
[root@oldboyedu /app/logs]# cat /etc/services >>nginx.log
cat: write error: No space left on device
[root@oldboyedu /app/logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.9G 18G 10% /
devtmpfs 980M 80K 980M 1% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 73K 71K 0 100% /app/logs
分区满了:清理,删除。
删除源文件
[root@oldboyedu /app/logs]# rm -f nginx.log
结果:
i_link=1
i_count=1
ctrl+c 中断 进程调用文件
结果:
i_link=1
i_count=0
删除硬链接文件
[root@oldboyedu /app/logs]# rm -f nginx_hard.log
结果:
i_link=0
i_count=0
[root@oldboyedu /app/logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.9G 18G 10% /
devtmpfs 980M 80K 980M 1% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 73K 14K 54K 21% /app/logs
把他变成你的。
Web服务器磁盘满故障深入解析,地址为
http://oldboy.blog.51cto.com/2561410/612351
老师讲的就是你遇到的,你学习时遇到的就是你遇到的。
1、软硬连接区别。
2、文件删除原理。
1)掌握Linux文件属性的各个列的含义(ls -lhi结果)及对应知识概念。
2)磁盘空间不足故障的多重判断和解决(面试常考)。
3)请描述软链接和硬链接的特点及区别(面试常考)。
4)请描述Linux系统文件删除的原理(面试常考)。
day13 -2
通配符知识:
1、基本含义
通配符简单说就是键盘上的一些特殊字符,可以实现某些特殊的功能,
例如,可以用*代表所有,来模糊搜索系统中的文件。
2、范围:通配符试用范围是命令行中【普通命令】或脚本编程中。
3、
第一组 模糊匹配:
准备:
[root@oldboyedu /data]# touch a.txt b.txt aa.txt test.txt
[root@oldboyedu /data]# ls
aa.txt a.txt b.txt test.txt
* 所有
两个5000工资 保险公积金 多交1600以上 13200
一个10000的 11600
笔记本多发了一个 位置多占一个 电多用 管理复杂了。
[root@oldboyedu /data]# a="oldboy"
[root@oldboyedu /data]# echo '$a'
$a
[root@oldboyedu /data]# echo "$a"
oldboy
[root@oldboyedu /data]# echo $a
oldboy
[root@oldboyedu /data]# echo "$a is a teaher."
oldboy is a teaher.
[root@oldboyedu /data]# echo $a is a teacher.
oldboy is a teacher.
[root@oldboyedu /data]# echo date
date
[root@oldboyedu /data]# echo `date`
Sun Oct 4 23:54:38 CST 2020
[root@oldboyedu /data]# 希望系统把字符串当做命令就用反引号
day14
1、什么是正则表达式?
作用和特殊字符一样。
基本正则表达式 BRE basic regular expression
扩展正则表达式 ERE extended regular expression
BRE 和ERE 的区别仅仅是元字符的不同
特点:
是为处理大量字符串及文本而定义的一套规则和方法。
工作时以行为单位处理
化繁为简,提高工作效率
仅仅对三剑客命令有效
帮助我们快速过滤文件的内容
假设“@”代表“i am”
“!”代表oldboy
则执行echo @! 的结果就是输出“ i am oldboy”
2、提高效率,快速获取想要的内容。
3,三剑客命令
grep(egrep) sed awk
4、易混淆事项
和通配符区别
开发正则,一般是Perl兼容正则表达式。
Linux系统三剑客正则表达式。
分类:
BRE grep 基本正则表达式
ERE 扩展正则表达式
基本正则符号:
^
$
^$
\
.
[]
[^abc]
|()
()
es? 匹配e es
es* 匹配e es ess essssss essssssssss 更多s。
?0
0?
代表 自身是 .代表任意一个字符。
匹配 ? 匹配前一个字符。
e*s* 和e?s?
e* 空 e ee eeee eeeeee
s* 空 s ss sss ssssssssssssss
e*s* 空 es e s ees essssss
e?s? 空 e s es
e? 空 e
s? 空 s
=========================================
e+ e ee eee eeeee .........
e* 空 e ee eeee eeeeee .........
e? 空 e
在文件中显示行号
cat -n
less -N
a{n,m} 匹配前一个字符最少n次,最多m次
a{n,} 匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m} 匹配前一个字符最多m次
sed
sed stream edit 流编辑器 内置命令的字符
操作、过滤、和转换内容的强大工具组
常用功能是使对文件快速增删改查。
其中查询的功能 最常用的2大功能是过滤和取行
选项
sed -n 取消默认sed的输出,常与sed内置命令的p连用
sed -i 直接修改文件内容,而不是输出到终端
如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件
sed的内置命令字符说明
s 替换
g 全局global
p 打印
d 删除
sed -i `3d` 删除第三行
sed -i `5,8` 山顶处5到8行
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
[root@oldboyedu ~/test]# cat oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题1:输出oldboy.txt的第2-3行内容※。
sed -n '2,3p' oldgirl.txt
问题2:过滤出含有oldboy字符串的行※。
sed -n '/oldboy/p' oldgirl.txt
问题3:删除含有oldboy字符串的行※。
sed '/oldboy/d' oldgirl.txt
sed /oldboy/d oldgirl.txt
问题4:将文件中的oldboy字符串全部替换为oldgirl※。
vim替换:
:%s#oldboy#oldgirl#g
sed 's#想替换啥#用啥替换#g' oldgirl.txt
sed 's#oldboy#oldgirl#g' oldgirl.txt
修改文件:
sed -i 's#oldboy#oldgirl#g' oldgirl.txt
问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
sed -e 's#oldboy#oldgirl#g' -e 's#49000448#31333741#g' oldgirl.txt I
环境:
[root@oldboyedu ~/test]# cat oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题1:输出oldboy.txt的第2-3行内容※。
问题2:过滤出含有oldboy字符串的行※。
问题3:删除含有oldboy字符串的行※。
问题4:将文件中的oldboy字符串全部替换为oldgirl※。
问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
day 15
awk
awk 是一门编辑语言,可以是命令行操作,都是处理字符用的。
三剑客自身的特长
grep 过滤查找内容
sed 取行,替换,删除,追加
awk 取列 (竖向)
语法:
awk 【option】 pattern(action) file
参数 条件 动作 文件
参数:
-F
cut 按列切割
-d 指定分隔符,-f 指定具体列
取列
$1 取第一列
$3 取第三列
$ NF 最后一列
$ NF-1倒数第二列
NR 行号
awk -F(取列) “:(分隔符)” ’{print $1,$3,$NF}‘ oldboy.txt
[^r] 非r
^[^r] 以非r开头
www教学法
是什么?
在哪用?
如何使用?
听课效率要高
不会的怎么办?2|8定律
day 16
Linux 基础权限有9个字符
root@oldboyedu ~]# ls -lhi
rw-r--r--
前三个字表示用户(属主)权限位
中三 表示用户组权限位
后三 表示 其他用户权限位
同一组的三个字符权限也是有位置的
r 第一个字符读的权限位
w 第二个字符写
x 第三个字符执行
u user用户
g groups用户组
o others其他用户权限位
r 4 读取文件内容 读block的权限
w 2
x 1
- 0
文件权限说明:
incahome (家,组)
useradd 添加普通用户
groupadd 添加用户组
usermod
字符权限
修改文件的属性和组
chown change own 切换用户。用户组
安全权限临界点
企业环境下文件和目录的安全核心知识
绝大多数文件安全权限临界点644,不想被修改被执行
目录不醒被修改(删除移动创建)被执行(进入)755
服务器上的博客目录和文件的权限,防止被恶意篡改
企业案例:网站文件被恶意修改:打开网站有弹窗广告(不是你的网站)
用户打开网站,报警
原因:权限设置不到位。chmod -R 777,目录,开发人员的习惯
解决方案:
1,备份
2,找到被修改的文件。
3,批量删除
4,找到文件被篡改的来源,优化
5,写总结,故障报告
控制默认权限的东西 umask
创建文件默认的最大权限位666,默认没有执行权限位
当umask 中存在奇数位的时候,在计算完毕时,奇数位加1
基于文件:666计算
umask都位偶数,默认权限用减法,
umask有奇数,默认权限用减法,然后奇数位加1
基于目录
从777计算
直接做减法,默认权限全开
3位特殊权限位
还有3位特殊权限位
suid位:
suid(setuid)位通过S字符标识,
存在于基本权限的用户权限位的x权限对应的位置,
如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识,
suid的s对应的数字权限为4,完整权限用八进制数4000表示。
sgid位:
sgid(setgid)位同样是通过S字符来标识,
但是,sgid位存在于基本权限的用户组权限位的x权限对应的位置,
如果用户组权限位对应的x权限位上有x权限,则sgid就用小写的s标识,
suid的s对应的数字权限为2,完整的权限用八进制数2000表示。
sticky(粘滞位)知识简介
sticky(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,
如果其他用户位的x权限位上有x权限,
则sticky(粘滞)位通过小写的t标识,对应的数字权限是1,
完整的权限用八进制数1000表示。
修改方法:4,2,1 加和放在基础权限为前面
工作中有啥用?
suid到底有什么作用
简单地说,suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,
拥有和root管理员一样的身份和权限(默认情况)。
[oldgirl@oldboyedu /]$ ll -ld oldboy/
dr-x-wxrw-. 2 oldboy incahome 6 Oct 7 22:15 oldboy/
oldgirl属于incahome,增加一个用户属于incahome,是不是也和oldgirl有同样权限。
oldboy 给一个新用户设置suid,这个新用户的权限就和oldboy一样。
day 17
什么是定时任务?
周期性的执行任务计划的软件,Linux定时任务的常见软件crond
使用定时任务软件,可以每天,每月,每小时按你的需求重复执行的一项工作。
需要写一个程序自动备份,然后让定时软件帮你执行
怎样用?
1用户定时任务计划
2系统定时任务计划
cron 是定时任务软件名
crond是服务进程名,真正实现定时任务服务
crontab命令是用来设置定时任务规则的配置命令
要想配置定时任务,首先启动crond服务
systemctl start crond
stop
开机自启的:
启动:
crontab 命令是用来配置定时任务规则的命令
-l 是查看已经配置好的定时任务列表
-e edit 编辑定时任务
内容存放哪里?
定时任务内容存在/var/spool/cron/ 位置
指定用户查看定时任务:
-u user
书写定时任务基本方法:
crontab -l cat 。。。。。
crontab -e vim。。。。。。
编写定时任务的语法:
一共六列
第一列:minute(0-59)
第二列:hour (0-23)
第三列:day of month (1-31)
第四列:month (1-12)
第五烈:day of week (0-6)
第六列:要执行的任务命令和程序
特殊符号:
* 每 或每一的意思 00 23 * * *cmd
- 连续的分隔符 连续区间 1-10 00 23 * * *cmd
, 列举 1,2,3,4, 和的意思
\n n是数字,每隔n单位时间
第一列有* 就是每分钟的意思
00 *\1 每小时
30 9 **0
* * * * * echo “oldboy”>>/tmp/oldboy.log
taif -f /tmp/oldboy.log 跟踪文件进度
老男孩思想:
1先输入命令
2操作成功
3拷贝命令道定时任务编辑
yum install ntpdate -y 安装时间服务软件
/dev/null 黑洞设备 不用的东西往里面扔就没了
&>/d ev/null 等价 >/dev/null 2>&1
cron 定时任务报错日志 /var/log/cron
定时任务对% 的要求是: %要转义 \%
命令行打包不要v 不输出
server/scripts 脚本文件