第 三周课堂笔记

day13

第9章   软链接和硬链接

一.  标识符.

[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

[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

必会面试题:软链接和硬链接的区别?

(1)答分类:在Linux系统中,链接分为两种:一种称为硬链接,另一种被称为符号连接或软链接。

(2)答概念:硬链接文件与源文件的Inode节点号相同,而软链接相当于Windows下面的快捷方式。

(3)答创建:默认不带参数的情况下,ln命令创建的是硬链接,ln -s创建的是软链接。

(4)答特点:a.对目录能创建软链接,不能创建硬链接,对目录创建软链接会经常用到。

        b.软链接可以跨文件系统(分区),硬链接不可以跨文件系统。

        c.删除软链接文件,对源文件及硬链接文件无任何影响。

        d.删除文件的硬链接文件,对源文件及软链接文件无任何影响。

        e.删除文件的源文件,对硬链接文件无任何影响,会导致其软链接失效(红底白字闪烁状)。

        f.同时删除源文件及其硬链接文件,整个文件才会被真正的删除。

(5)答案例:硬链接用处不多,可以用来对重要文件做快照防止误删,且对目录建立软链接在工作中常用。例如:安装软件会用nginx-1.10作为目录,安装完后设置软链接为nginx,即保持了版本号标识,又方便使用,以及方便后续软件升级。

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

第10章   通配符与特殊符号

通配符知识:

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

一.基本正则(BRE)

3W1H:

1、什么是正则表达式?

作用和特殊字符一样。

正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。

开发者

假设"@"代表“I am”,"!"代表“oldboy”,

则执行echo "@!"的结果就是输出“I am oldboy”。

发明语言:

上了火星,发明火星语。

! 我喜欢你

@  滚

2、提高效率,快速获取到想要的内容。

3、适用于三剑客命令 grep(egrep),sed,awk

  以行为单位处理。

4、实践来讲解

易混淆事项

1、和通配符区别。

2、开发人员正则,一般是Perl兼容正则表达式。

3、Linux系统三剑客正则表达式******。

环境准备:

export LC_ALL=C

分类:

1、BRE  grep(查看,过滤)

2、ERE  egrep

^:用法^m,表示匹配以m单词开头的行

[root@oldboydu ~]# grep "^m" oldgril.txt(过滤以m单词开头的行)

mkbbvcxtuwiou

m.jdiuyu

mmmmm

$:用法ss$,表示匹配以ss单词结尾的行

[root@oldboydu ~]#grep "ss$" oldgril.txt(过滤以ss单词结尾的行)

sdddddssdss

^$:空行(逻辑解释是以^结尾的行,或者以$开头的行)

[root@oldboydu ~]#grep "^$" oldgril.txt

空白(这里还没开始就结束了,所以这里是空白)

.:点号,表示匹配任意一个且只有一个字符(但是不能匹配空行)(.本身就代表一个目录)

[root@oldboydu ~]#grep "^." oldgril.txt(过滤任意一个开头的行)

jihh

jhcu

kom

1274

98957180

jfuhacjm

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

[root@oldboydu ~]# grep ".$" oldgril.txt(过滤任意结尾的行)

jihh

jhcu

kom

1274

98957180

jfuhacjm

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

\:用法\.和\$和\*,让有特殊含义的字符脱掉马甲,现出原形,还原本意。

[root@oldboydu ~]#grep "\." oldgril.txt(.在正则表达式里是代表匹配任意一个字符,但在这里条命令只是过滤带有.的行)

m.jdiuyu

*:匹配所有内容

[root@oldboydu ~]#egrep "1*" oldgril.txt

jihh

jhcu

kom

1274

98957180

jfuhacjm

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

.*:表示所有内容

[root@oldboydu ~]# egrep ".*" oldgril.txt

jihh

jhcu

kom

1274

98957180

jfuhacjm

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

^.*:匹配以任意0个多个字符开头的内容

.*$:以任意0个或多个字符结尾

二.扩展正则(ERE)

(grep默认不支持扩展正则,在扩展正则里用grep -E或egrep,推荐使用egrep)

+:匹配前一个字符1次或多次

[root@oldboydu ~]#egrep "k+" oldgril.txt (过滤出+的前一个字符k1次或1次以上:过滤包含k的字符)

kom

mkbbvcxtuwiou

kkkkkki

【:/】+:匹配括号内的:或/字符1次或1次以上

[root@oldboydu ~]#sed 's#[abc]+#,#g' -r a.txt (把abc替换成,sed:修改。s###g:把前面的修改成后面的。s#a#b#g:把a修改成b。)

123

,

q,

,

,`

?:匹配前一个字符0次或1次

[root@oldboyedu ~/test]# ls /data

a.txt  aa.txt  b.txt  c.txt  f.txt  test.txt

[root@oldboyedu ~/test]# mkdir /data/oldboy

[root@oldboyedu ~/test]# ls -l /data

total 0

-rw-r--r--. 1 root root 0 Oct  4 23:28 a.txt

-rw-r--r--. 1 root root 0 Oct  4 23:28 aa.txt

-rw-r--r--. 1 root root 0 Oct  4 23:28 b.txt

-rw-r--r--. 1 root root 0 Oct  4 23:38 c.txt

-rw-r--r--. 1 root root 0 Oct  4 23:38 f.txt

drwxr-xr-x. 2 root root 6 Oct  5 01:08 oldboy

-rw-r--r--. 1 root root 0 Oct  4 23:28 test.txt

[root@oldboyedu ~/test]# ls -l /data|grep "^d"

drwxr-xr-x. 2 root root 6 Oct  5 01:08 oldboy

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

=========================================

a{n,m} 匹配前一个字符最少n次,最多m次

a{n,} 匹配前一个字符最少n次

a{n} 匹配前一个字符正好n次

a{,m} 匹配前一个字符最多m次

(0)===\1

(0)(0)    \1            \2

      第一个括号    第二个括号

egrep -o "(e)(s)\1\2" oldboy.txt ===== egrep -o "eses" oldboy.txt

特殊预定义中括号表达式

[root@oldboyedu ~/test]# egrep "[0-9]" oldboy.txt

my qq num is 49000448.

not 4900000448.

[root@oldboyedu ~/test]#

[root@oldboyedu ~/test]# egrep "[[:digit:]]" oldboy.txt

my qq num is 49000448.

not 4900000448.

[root@oldboyedu ~/test]# egrep "[[:lower:]]" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.oldboyedu.com

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu ~/test]# egrep "[[:upper:]]" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu ~/test]# egrep "\boldboy\b" oldboy.txt

I am oldboy teacher!

[root@oldboyedu ~/test]# egrep "oldboy" oldboy.txt

I am oldboy teacher!

our site is http://www.oldboyedu.com

[root@oldboyedu ~/test]# egrep -w "oldboy" oldboy.txt

I am oldboy teacher!

评书:三侠剑  老好了。

侠客、剑客

Linux三剑客

awk  sed  grep

sed

Sed是操作、过滤和转换文本内容的强大工具。

常用功能有对文件实现快速增删改查(增加、删除、修改、查询),

其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。

sed [选项]  [sed内置命令字符]  [文件]

选项:

-n 取消默认sed的输出,常与sed内置命令的p连用※

-i 直接修改文件内容,而不是输出到终端。

如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※

sed的内置命令字符说明

s 替换

g 全局global

p 打印print

d 删除delete

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。

day15

删除指定行

sed -i '3d' oldgirl.txt (加-i是永久修改)

[root@oldboydu~]# cat oldgril.txt

ooa  ooooo jdjj jkds kjodc

jihh

jfuhacjm

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

[root@oldboydu~]# sed -i '3d' oldgril.txt (删除第三行)

[root@oldboydu~]# cat oldgril.txt

ooa  ooooo jdjj jkds kjodc

jihh

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

sed -i '5,8d' oldgirl.txt

[root@oldboydu~]# cat oldgril.txt

ooa  ooooo jdjj jkds kjodc

jihh

mkbbvcxtuwiou

m.jdiuyu

ljdiusgl

jiohoi

njochlvo

kkkkkki

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

[root@oldboydu~]# cat oldgril.txt

jihh

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

sed '2d' oldgril.txt  (临时删除)

[root@oldboydu~]#sed '2d' oldgril.txt  (临时删除)

jihh

nnnnn

mmmmm

cccc

sdddddssdss

[root@oldboydu~]# cat oldgril.txt

jihh

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

[root@oldboydu~]# sed -i '5,8d' oldgril.txt (删除5-8行)

[root@oldboydu~]# cat oldgril.txt

ooa  ooooo jdjj jkds kjodc

jihh

mkbbvcxtuwiou

m.jdiuyu

lllllo

nnnnn

mmmmm

cccc

sdddddssdss

环境:

[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行内容※。

[root@oldboyedu ~/test]#sed -n '2,3p' oldgirl.txt    (-n p:输出)

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.oldboyedu.com

[root@oldboyedu ~/test]#head -3 oldgirl.txt |tail -2

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.oldboyedu.com

问题2:过滤出含有oldboy字符串的行※。

[root@oldboyedu ~/test]#sed -n '/oldboy/p' oldgirl.txt

I am oldboy teacher!

our site is http://www.oldboyedu.com

[root@oldboyedu ~/test]#grep oldboy oldgirl.txt

I am oldboy teacher!

our site is http://www.oldboyedu.com

问题3:删除含有oldboy字符串的行※。

[root@oldboyedu ~/test]#sed '/oldboy/d' oldgirl.txt

I like badminton ball ,billiard ball and chinese chess!

my qq num is 49000448.

[root@oldboyedu ~/test]#grep -v "oldboy" oldgirl.txt

I like badminton ball ,billiard ball and chinese chess!

my qq num is 49000448.

问题4:将文件中的oldboy字符串全部替换为oldgirl※。

[root@oldboyedu ~/test]# sed 's#oldboy#oldgirl#g' oldgirl.txt(s###g:把前面的替换成后面的)

I am oldgirl teacher!

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.oldgirledu.com

my qq num is 49000448.

vim替换:

问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。

[root@oldboyedu ~/test]#sed -e 's#oldboy#oldgirl#g' -e 's#49000448#31333741#g' oldgirl.txt  (-e 参数,多项编辑功能,不需要多次管道了)

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.oldboyedu.com

my qq num is 31333741.

问题6:在oldboy.txt文件的第2行后追加文本I teacher linux。

[root@oldboyedu ~/test]#sed '2a I teacher linux.' oldgirl.txt  (2a:在第二行的后面追加)

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese chess!

I teacher linux.

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.

[root@oldboyedu ~/test]#sed -i '2a I teacher linux.' oldgirl.txt

[root@oldboyedu ~/test]# cat oldgirl.txt

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese chess!

I teacher linux.

our site is http://www.oldboyedu.com

my qq num is 49000448.

[root@oldboyedu ~/test]#sed '2i I teacher linux.i' oldgirl.txt

I am oldboy teacher!

I teacher linux.i

I like badminton ball ,billiard ball and chinese chess!

I teacher linux.

our site is http://www.oldboyedu.com

my qq num is 49000448.

问题1:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。

练习sed

正则是贪婪匹配模式,人性是贪婪的。

方法1:

[root@oldboyedu ~/test]# ifconfig eth0|sed -n 2p|sed 's#^.*inet ##g'|sed 's#  netm.*$##g'

10.0.0.201

方法:要取一个目标,删除目标两边的,就得到了目标:

先匹配上,然后在删除

[root@oldboyedu ~]# ifconfig eth0|sed -n 2p|sed 's#^.*inet ##g'|sed 's#  netm.*$##g'

10.0.0.201

[root@oldboyedu ~]# ifconfig eth0|sed -n 2p|sed -e 's#^.*inet ##g' -e 's#  netm.*$##g'

10.0.0.201

[root@oldboyedu ~]# ifconfig eth0|sed -ne 's#^.*inet ##g' -e 's#  netm.*$##gp'

10.0.0.201

[root@oldboyedu ~]# ifconfig eth0|sed -nr '2s#^.*inet (.*)  netm.*$#\1#gp'  ((.*)代表自己,\1是应用()里面的内容)

10.0.0.201

验证是否懂了的练习题:

stat /etc/hosts自行取其中的644

[root@oldboyedu ~]# stat /etc/hosts

  File: ‘/etc/hosts’

  Size: 158      Blocks: 8          IO Block: 4096  regular file

Device: 803h/2051d Inode: 16829878    Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)  Gid: (    0/    root)

Access: 2020-10-06 20:40:18.463001804 +0800

Modify: 2013-06-07 22:31:32.000000000 +0800

Change: 2019-03-04 11:15:49.426692303 +0800

Birth: -

[root@oldboyedu ~]#stat /etc/hosts|sed -rn 's#^.*\(0(.*)/-.*$#\1#gp'

644

考试:ip add的输出取出IP。

[root@oldboyedu ~]# ip add|sed -rn 's#^.*net (.*)/24.*$#\1#gp'

10.0.0.201

1、象棋,教学,比赛,活动

2、踢毽子,比赛。最牛的单人前三,小组前三。

三剑客自身有特长的。

grep 过滤查找内容。筛子

sed  取行,替换,删除,追加

awk  取列

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

练习

[root@oldboyedu ~]# sed -n '1,5p' /etc/passwd >oldboyedu.txt

[root@oldboyedu ~]# cat oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

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

[root@oldboyedu ~]# cut -d":" -f3,4 /etc/passwd

0:0

1:1

2:2

[root@oldboyedu ~]# cat b.txt

oldboy 49000448

[root@oldboyedu ~]# cut -c1-6,8- b.txt

oldboy4900044

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

列:$1第一列 $2第二列 以此类推....

$0  整行

$NF 最后一列 倒数第一列

$(NF-1) 倒数第二列

[root@oldboyedu ~]# awk -F ":" '{print $NF}' oldboyedu.txt

/bin/bash

/sbin/nologin

/sbin/nologin

/sbin/nologin

/sbin/nologin

[root@oldboyedu ~]# awk -F ":" '{print $0}' oldboyedu.txt

root:x:0:0:root:/root:/bin/bash

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

练习:打印 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行的内容。

[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

[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字符卡头

问题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

C6

[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:0 frame:0

          TX packets:67 errors:0 dropped:0 overruns: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

~匹配

问题1:取test.txt文件的第2行到第3行的内容。

问题2:过滤出含有root字符串的行※。

问题3:删除含有root字符串的行※。

问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。

问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。

问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出

问题7:过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。

day16

Linux基础权限是9个字符。

[root@oldboyedu ~]# ls -lhi

total 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--

rw-r--r--

rw-r--r--

分3组:

前三个字符是表示用户(属主)权限位  user(用户) u

中三个字符是表示用户组权限位 group(用户组)    g

后三个字符是其它用户权限位 others(其他用户)    o

同一组的三个字符权限也是有位置的:

r-- 第一个字符的位置读的权限位

    第二个字符的位置写的权限位

第三个字符的位置是执行的权限位。

r  4

w  2

x  1

-  0

【文件】权限详细说明:****

【目录】权限详细说明:****

测试准备:

incahome(家、组)

oldboy 家庭男主人,用来代表用户(User)角色,是文件的所有者

oldgirl 女主人(和所有者oldboy属于相同组,oldboy的家人)用来代表用户组incahome的角色

test  其他人 其他(others)人,用来代表其他用户角色

[root@oldboyedu ~]# groupadd incahome

[root@oldboyedu ~]# useradd oldboy

useradd: user 'oldboy' already exists

[root@oldboyedu ~]# usermod -g incahome oldboy

[root@oldboyedu ~]# id oldboy

uid=1000(oldboy) gid=1004(incahome) groups=1004(incahome),1000(oldboy)

如果此前没有创建oldboy,可以执行下面命令,而不需要usermod命令。

[root@oldboyedu ~]# useradd oldboy -g incahome

[root@oldboyedu ~]# useradd oldgirl -g incahome

useradd: user 'oldgirl' already exists

[root@oldboyedu ~]# id oldgirl

uid=1001(oldgirl) gid=1001(oldgirl) groups=1001(oldgirl)

[root@oldboyedu ~]# usermod -g incahome oldgirl

[root@oldboyedu ~]# id oldgirl

uid=1001(oldgirl) gid=1004(incahome) groups=1004(incahome)

[root@oldboyedu ~]# useradd test

useradd: user 'test' already exists

准备环境:

[root@oldboyedu ~]# mkdir -p /oldboy

[root@oldboyedu ~]# echo "echo oldboyLinux" >/oldboy/test.sh

[root@oldboyedu ~]# chmod +x /oldboy/test.sh

1. 测试默认情况下不同用户的对应权限

[root@oldboyedu /oldboy]# chown oldboy.incahome test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

-rwxr-xr-x 1 oldboy incahome 22 Oct  7 21:18 test.sh

权限修改:

777 +x -x  u=w  g-x

Linux权限有两种表现形式:

1、数字表示法 称为8进制权限

r 4

w 2

x 1

- 0

实际的权限表示就是将每3位相加即可。

rwxr-xr-x  755

rwx 7

r-x 5

r-x 5

2、字符表示法

rw-rw-r-x  代表的数字权限为665

--xr-x-wx  代表的数字权限为153

-wx--x--x  代表的数字权限为311

而以下数字权限表示的字符权限如下:

755  代表的字符权限为rwxr-xr-x

644  代表的字符权限为rw-r--r--

134  代表的字符权限为--x-wxr--

修改文件属性的用户和组

chown 用户.用户组 文件  这里的点可以用:替换。

chown 用户 文件

chown .用户组 文件  ====chgrp 用户组 文件

chgrp incahome test.txt

[root@oldboyedu /oldboy]# chown oldboy test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 oldboy root 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]# chown .incahome test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 oldboy incahome 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]# chown root:root test.sh

[root@oldboyedu /oldboy]# ls -l

total 4

---x--x--x 1 root root 12 Oct  7 22:16 test.sh

[root@oldboyedu /oldboy]#

安全权限临界点:

文件不想被修改被执行:644

[root@oldboyedu /oldboy]# touch oldboy.txt

[root@oldboyedu /oldboy]# ls -l

total 4

-rw-r--r-- 1 root    root  0 Oct  7 23:21 oldboy.txt

目录不想被修改(删除移动创建)被执行(进入):755

博客:写博客。。。服务器的博客目录和文件的权限,防止被恶意篡改。

企业真实案例:网站文件被恶意修改了。。。。打开网站后有弹窗广告(不是你网站的)

用户打开网站,报警。

原因:权限设置不到位。chmod -R 777 目录 开发人员习惯

解决方案:

1、备份

tar zcvf /opt/oldboy_$(date +%F).tar.gz ./oldboy/

2、找到被修改的文件

[root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'

/oldboy/oldboy.txt:

你可能感兴趣的:(第 三周课堂笔记)