老男孩Linux运维58期课堂笔记
作者:于冬
归档:课堂笔记
日期:3.18
蓝色字体:注释
黄色背景:重要
绿色背景:注意
1、老男孩思想
老男孩思想之如何答笔试题?
1、字要好,工整,用心。
2、尽量多答一些。
3、一定要多种答案
4、问答题能画图就不用文字。
老男孩思想之如何解决拖延症?
1、把刀把交给别人。
破釜沉舟,不留后路。
a.告诉别人如果做不到,我就给你什么好处。
b.定制目标,然后告诉身边的人。
c.先把500放人家那,做到了还给你,做不到就不用给我了。
2、塑造价值观
a.正向价值观:多想做到结果后的好处。
拿到1万的工作。
找个好女朋友(女人)
自己有点面子,装装叉。
买车、买房。
父母有也有面子。
b.负面价值观
谁欺负你,韩信受胯下之辱。
谁看不起你,让他狗眼看人低。
3、让你最在意的人逼你(对你的好的人)
惊闻故里玉龙斗,
鳞甲纷飞苍穹下。
黄浦江畔无它愿,
二度梅花七月发。
2、链接的概念
创建软链接语法:“ln-s 原始文件 目标文件” (目标文件不能事先存在)
企业面试:请描述Linux中的软链接和硬链接的区别
1、答分类:链接可分为两种:一种是硬链接。另一种为软链接或符号链接。
2、答概念:硬链接文件与源文件的Inode节点号相同,而软链接文件相当于Windows下的快捷方式(Inode节点号与源文件不同)
3、答创建:创建硬链接语法:“ln 原始文件 目标文件” (注意空格)
创建软链接语法:“ln-s 原始文件 目标文件” (目标文件不能事先存在)
4、答特点:1、不能对目录创建硬链接,但可以可创建软链接
2、软链接可以跨文件系统,硬链接不可以跨文件系统
3、删除软链接文件,对源文件及硬链接文件无任何影响
4、删除文件的硬链接文件,对原文件及软连接文件无任何影响
5、删除软连接的源文件,对硬链接无影响,会导致其软连接失效,(红底白字闪烁状)
6、同时删除源文件及其硬链接文件,整个文件才会被正真地删除
5、答案例:硬链接用处不多,可以用来对重要文件做快照防止误删,而对目录建立软连接在工作中很长用。例如:安装软件中会用nginx_1.10作为目录,安装完后设置软连接为nginx即保持了版本号表识,又方便使用,以及方便后续软件升级。
3、通配符知识
1、基本含义
通配符简单说就是键盘上的一些特殊字符,可以实现某些特殊的功能,
例如,可以用*代表所有,来模糊搜索系统中的文件。
2、范围:通配符试用范围是命令行中【普通命令】或脚本编程中。
第一组 模糊匹配:
[root@oldboyedu/data]# touch a.txt b.txt aa.txt test.txt
[root@oldboyedu/data]# lsaa.txt a.txt b.txt test.txt
通配符参数
> #输出重定向
>> #输出追加重定向
< #输入重定向
<< #追加输入重定向
~ #当前用户家目录
$ #以。。。结尾(正则)
^ #以。。。开头(正则)
* #匹配全部字符,通配符
? #任意一个字符,通配符
# #注释
& #让程序或脚本切换到后台执行
&& #并且 同时成立
[] #表示一个范围(正则,通配符)
{} #产生一个序列(通配符)
. #当前目录的硬链接
.. #上级目录的硬链接
老男孩Linux运维58期课堂笔记
作者:于冬
归档:课堂笔记
日期:3.19
蓝色字体:注释
黄色背景:重要
绿色背景:注意
1、正则表达式
1、什么是正则表达式?作用和特殊字符一样。正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。假设"@"代表“I am”,"!"代表“oldboy”,则执行echo "@!"的结果就是输出“I am oldboy”。
2、提高效率,快速获取到想要的内容。
3、适用于三剑客命令 grep(egrep),sed,awk以行为单位处理。
4、实践来讲解
2、易混淆事项
1、和通配符区别。
2、开发人员正则,一般是Perl兼容正则表达式。
3、Linux系统三剑客正则表达式******。
3、正则表达式的分类
基本正则表达式(BRE)
扩展正则表达式(ERE)
分类:
1、BRE grep
2、ERE egrep
基础正则表达式+扩展正则表达式含义解释:
. 代表且只能代表任意一个字符(不包括空行)
*重复前面任意0个或多个字符
.*匹配所有字符。(包括空行)
sed -ri 's#(.*)#\1#g' bqh.txt
把前面正则匹配的括号内的结果,在后面用\1取出来操作。
^表示以什么开头,^oldboy以oldboy开头
$ 是以什么结尾
^$ 表示空行。
\例\. 就只代表点本身,转义符号,让有着特殊身份移动的字符,脱掉马甲,还原原型\$
^.* 以任意多个字符开头。
.*$ 以任意多个字符结尾。
(.*) 从第一字符匹配,到空格停止,
[abc] 匹配字符集合内的任意一个字符【a-zA-Z】
[^abc] 匹配不包括^后的任意字符的内容;中括号里的^为取反,注意和以...开头区别。
a\{n,m\} 重复n到m次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。
\{n,\} 重复至少n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。
\{n\} 重复n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。
^word 搜索以word开头的;vi
^ 一行的开够
word$ 搜索以word结尾的;vi
$ 一行的开头
^$ 表示空行。扩展的正则表达式:ERP(egrep或grep -E)
+ 重复一个或一个以上前面的字符? 复0个或一个0前面的字符
| 用或的方式查找多个符合的字符串
() 找出“用户组”字符串
a{n,m} 匹配前一个字符最少n次,最多m次
a{n,} 匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m} 匹配前一个字符最多m次
老男孩Linux运维58期课堂笔记
作者:于冬
归档:课堂笔记
日期:3.20
格式说明:
蓝色字体:注释
黄色背景:重要
绿色背景:注意
1、sed 流编辑器
Sed是操作、过滤和转换文本内容的强大工具。
常用功能有对文件实现快速增删改查(增加、删除、修改、查询),
其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。
Sed的参数语法
1、sed [选项] [sed内置命令字符] [文件]
-n 取消默认sed的输出,常与sed内置命令的p连用※
-i 直接修改文件内容,而不是输出到终端。如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※
-e 允许多次编辑
2、sed的内置命令字符说明
s 替换
g 全局global
p 打印print
d 删除delete
3、练习题
问题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/doldgirl.txt
问题4:将文件中的oldboy字符串全部替换为oldgirl※。
vim替换:
:%s#oldboy#oldgirl#g
sed 's#想替换啥#用啥替换#g' oldgirl.txt
2、cut 按列切割
-d 指定分隔符 -f指定哪列,多列用逗号
[root@oldboyedu~]# cat a.txt
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu~]# cut -d" " -f1,3,5 a.txt
1 3 5
[root@oldboyedu~]# cut -d" " -f3-5 a.txt
3 4 5
3、awk(linux三剑客之一)
awk语法:
awk [option] 'pattern{action}' file ...
awk [参数] '条件{动作}' 文件 ...
参数:
-F 指定分隔符打印第一列:
[root@oldboyedu~]# awk -F ":" '{print $1}' oldboyedu.txt
root
bin
daemon
adm
lp
[root@oldboyedu~]# awk -F ":" '{print $3,$5}' oldboyedu.txt
0 root
1 bin
2 daemon
3 adm
4 lp
awk 命令的常用变量及说明
$1第一列 $2第二列 以此类推....
$0 整行
$NF 最后一列 倒数第一列
$(NF-1) 倒数第二列
练习题
练习:打印 1 2 和最后一列。
[root@oldboyedu~]# awk -F ":" '{print $1,$2,$NF}' oldboyedu.txt
root x /bin/bash
bin x
/sbin/nologin
daemon x
/sbin/nologin
adm x
/sbin/nologin
lp x
/sbin/nologin
问题1:取test.txt文件的第2行到第3行的内容。
方法1
[root@oldboyedu~]# awk'NR>1&&NR<4'oldboyedu.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
方法2
[root@oldboyedu~]# awk 'NR==2,NR==3' oldboyedu.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
问题2:过滤出含有root字符串的行※。
[root@oldboyedu~]# awk '/root/' oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu~]# awk /root/ oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu~]#
[root@oldboyedu ~]#
awk "/root/" oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
问题3:删除含有root字符串的行※。
[root@oldboyedu~]# awk '/^[^r]/' oldboyedu.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[^r]和^[^r]注意点
[^r] 非r
^[^r] 以非r字符卡头
问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。
[root@oldboyedu~]# awk -F ":" '{print NR,$1,$3,$NF}' oldboyedu.txt
1 root 0
/bin/bash
2 bin 1
/sbin/nologin
3 daemon 2
/sbin/nologin
4 adm 3
/sbin/nologin
5 lp 4
/sbin/nologin
问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。
[root@oldboyedu~]# ifconfig eth0|awk 'NR==2{print $2}'
10.0.0.201
CentOS6取ifconfig etho对应的IP地址
[root@oldboy ~]#
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:D0:87:20
inet addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr:fe80::20c:29ff:fed0:8720/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:243 errors:0 dropped:0 overruns:0frame:0
TX packets:67 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20674 (20.1 KiB) TX bytes:8706 (8.5 KiB)
[root@oldboy ~]#ifconfig eth0|awk 'NR==2{print $2}'addr:10.0.0.202
[root@oldboy ~]#ifconfig eth0|awk 'NR==2{print $2}'|awk -F ":" '{print $2}'
10.0.0.202
[root@oldboy ~]#ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'
10.0.0.202
问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出
awk -F":" '$1~/root/ {print $NF}' test.txt~匹配
老男孩Linux运维58期课堂笔记
作者:于冬
归档:课堂笔记
日期:3.21
格式说明:
蓝色字体:注释
黄色背景:重要
绿色背景:注意
1、文件权限基础知识
[root@oldboyedu~]# ls -lhitotal 36K
33631870-rw-r--r--. 1 root root 21 Oct 6 22:54 a.txt
33631871-rw-r--r--. 1 root root 16 Oct 6 23:02 b.txt
33631857-rw-r--r-- 1 root root 61 Oct 7 00:11 c.txt
rw-r--r—
rser(用户)
group(用户组)
other(其他用户)
1、权限定义字母,
r代表读权限,用数字4表示
w代表写权限,用数字2表示
x代表执行权限,用数字1表示
-代表没有权限,用数字0表示
权限增减字符
+:添加权限
-:取消权限
=:取消其他所有权限
2、字符表示法
rw-rw-r-x 代表的数字权限为665
--xr-x-wx 代表的数字权限为153
-wx--x--x 代表的数字权限为311
3、修改文件属性的用户和组
chown 用户.用户组 文件 这里的点可以用:替换。
chown 用户 文件
chown .用户组文件 ====chgrp用户组文件
[if !supportLists]1、 [endif]企业真实案例:网站文件被恶意修改了,打开网站后有弹窗广告(不是你网站的)
解决方案:
1、备份
tar zcvf/opt/oldboy_$(date +%F).tar.gz ./oldboy/
2、找到被修改的文件
[root@oldboyedu/]# find /oldboy -type f |xargs grep 'ddddddddddddd'
/oldboy/oldboy.txt:<script>ddddddddddddd</scripts>
/oldboy/test.sh:<script>ddddddddddddd</scripts>
3、批量删除
[root@oldboyedu/]# find /oldboy -type f |xargs sed -i '/ddddddddddddd/d'
[root@oldboyedu/]# find /oldboy -type f |xargs grep 'ddddddddddddd'
找到文件被篡改来源,并优化调整。
亡羊补牢。
4、 写总结 故障报告。
4、特殊权限位基本说明
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表示
工作中有啥用?
suid到底有什么作用
简单地说,suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,
拥有和root管理员一样的身份和权限(默认情况)。
老男孩Linux运维58期课堂笔记
作者:于冬
归档:课堂笔记
日期:3.22
格式说明:
蓝色字体:注释
黄色背景:重要
绿色背景:注意
1、sgid权限知识
作用之一:
sgid的作用就是让普通用户可以在执行某个设置了sgid位的命令时,
拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。
sgid基于目录的作用:
让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限
2、 系统定时任务
1、什么是定时任务?
周期性的执行任务计划的软件,Linux定时任务的常用软件crond。
2、使用定时任务软件,可以每天,每小时按你需求重复的执行一项工作。
例如:备份 都是0点以后,2点爬起来备份,4点以后睡觉。
需要写一个程序实现自动备份,然后让定时任务软件帮你执行。
闹钟。。。。可以追女朋友。。。
3、系统定时任务计划
1.不用管理员干预,系统自动执行。
2.也可以利用系统任务为管理员服务
4、用户定时任务计划
在Linux系统中,
cron是定时任务的软件名,
crond是服务进程名,真正实现定时任务服务。
crontab命令是用来设置定时任务规则的配置命令。
要想配置定时任务,首先启动crond服务。
systemctl start
crond.service
systemctl stop
crond.service
systemctl status
crond.service
4、crontab定时任务编辑命令
-l 列表查看已经设置的定时任务*
-e 编辑定时任务*
-u 查看特定用户下定时任务
编写定时任务的语法:
# Example of jobdefinition:
#
.---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) ORjan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * (command to be executed)
共六列:
第一列:分 minute (0- 59)
第二列:时hour (0 - 23)
第三列:日 day ofmonth (1 - 31)
第四列:月 month (1 -12) OR jan,feb,mar,apr ...
第五列:周 day ofweek (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
第六列:要执行的任务命令或程序
特殊符号:
* 表示的 每或每一的意思00 23 * * *
cmd- 连续区间 1-1000 8-23 * * *
cmd
列举1,2,3,4,8
00 1,2,3,4,8 * * * cmd
/n n是数字。
n代表自然数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成
*/10 * * * * cmd
练习
命令实例1:*/1 * * * * /bin/sh /scripts/data.sh
在本例中除了数字与命令脚本外,还使用到了符号"*",*号的意思“每一”。
第一列的意思为分钟,特殊符号“/”表示每隔的意思,即表示每隔一分钟执行/bin/sh /scripts/data.sh程序。
命令实例2:30 3,12 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟;第二列为 3,12,这代表3点及 12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本。
命令实例3:30 */6 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟;第二列*/6代表每6个小时,也相当于 6、12、18、24 的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。
命令实例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh
在本例中,其中的第一列为30,表示30分钟;第二列8-18/2代表在早晨8点到下午18点之间每隔2小时,也相当于把8、10、12、14、16、18单独列出。
那么,此定时任务的意思就是早晨8点到下午18点之间,每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。
命令实例5:30 21 * * * /application/apache/bin/apachectl graceful
本例表示每晚的21:30重启apache。
命令实例6:45 4 1,10,22 * * /application/apache/bin/apachectl graceful
本例表示每月1、10、22日的凌晨4 : 45分重启apache。
命令实例7:10 1 * * 6,0 /application/apache/bin/apachectl graceful
本例表示每周六、周日的凌晨1 :
10分重启apache。
命令实例8:0,30 18-23 * * * /application/apache/bin/apachectl graceful
本例表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
命令实例9:00 */1 * * * /application/apache/bin/apachectl graceful
本例表示每隔一小时整点重启apache
命令实例10:* 23,00-07/1 * * * /application/apache/bin/apachectl graceful
本例并不表示晚上23点和早上0-7点之间每隔一小时重启Apache。
要说明的是,以上结果是不规范的,也是不对的。大家想想为什么?
以上定时任务的第一列为*,表示每分都执行任务即晚上23点和早上0-7点之间每隔一小时的每分都重启Apache,很可怕吧。
命令实例11:00 11 * 4 1-3 /application/apache/bin/apachectl graceful
本例表示4月的每周一到周三的上午11点整重启Apache。
命令实例12:30 09 * * 0 去老男孩教育上课
本例表示每周日上午9:30去老男孩教育上课,这是周末班的上课频率。
命令实例13:30 08 * * *去老男孩教育上课
本例表示每上午8:30去老男孩教育上课,这是脱产班的上课频率。
实践:
1、每分钟追加一次oldboy字符串到/tmp/oldboy.log里。
解答:大象放冰箱分三步
a.命令行执行成功。
[root@oldboyedu~]# echo "oldboy">>/tmp/oldboy.log
[root@oldboyedu~]# cat /tmp/oldboy.logoldboy
[root@oldboyedu~]# echo "oldboy">>/tmp/oldboy.log
[root@oldboyedu~]# cat /tmp/oldboy.log
oldboy
oldboy
b.配置定时任务crontab -e 编辑配置
[root@oldboyedu ~]# crontab -l#####* * * * * echo"oldboy">>/tmp/oldboy.log
c.检查
[root@oldboyedu~]# tail -f /tmp/oldboy.log
oldboy
oldboy
oldboy
5、老男孩思想:
1)先输入* * * * *
2)先命令行操作成功。
3)拷贝命令到定时任务编辑里
范例13-2:让服务器时间每5分钟和互联网时间做一次同步。
安装时间服务软件:yum
install ntpdate -y
更新互联网时间 /usr/sbin/ntpdate
ntp1.aliyun.com
6、生产环境下的定时Cron书写要领
要领4:/dev/null 黑洞设备
MH370>/dev/null
&>/dev/null等价>/dev/null 2>&1
要领1:为定时任务规则加必要的注释
要领2:所有的定时任务尽量都以脚本的形式执行
要领3:在执行的Shell脚本前加上/bin/sh
要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1
要领5:在指定用户下执行相关定时任务
要领6:生产任务计划程序中不要随意打印输出信息,有输出的想法去掉。
要领7:定时任务执行的脚本要存放到规范路径下
要领8:配置定时任务要规范操作过程,减少出错
要领9:定时任务脚本中程序命令及路径尽量用全路径
要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)
要领11:若脚本中调用了系统环境变量,要重新定义
要领12:出错或无法执行,就检查/var/log/cron日志
7、运维规范:
脚本位置:/server/scripts
软件位置:/server/tools
编译位置:/application/软件名字-版本,然后要软链接。