Day13
老男孩Linux云计算58期-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系统文件删除的原理(面试常考)。
Day14
1.正则表达式:
作用和字符一样
正则表达式是为了处理大量的字符串及文本而定义的一套规则和方法
开发者
假设“@”代表“I am”,“!”代表“oldboy”,
则执行echo“@!”的结果就输出“I am oldboy”。
2. 提高效率,快速获取到想要的内容。
3. 适用于三剑客命令grep (egrep),sed ,awk
4. 实践来讲解
其工作时以行为单位进行,即一次处理一行
易混淆事项
1、和通配符区别
2、开发正则,一般是Per1兼容正则表达式。
3、Linux系统三剑客正则表达
环境准备:
export LC_ALL=C
分类:
ERE grep
BRE egrep
mkdir ~/test -p
cat >~/test/oldboy.txt<<EOF
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!
EOF
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!
老男孩老师2019/3/19 9:21:38
[root@oldboyedu ~/test]# grep "m$" oldboy.txt
our site is
[root@oldboyedu ~/test]# grep "!$" oldboy.txt
grep "oldboy.txt" oldboy.txt
[root@oldboyedu ~/test]# grep "\!$" oldboy.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# grep "\.$" oldboy.txt
I teach linux.
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]# grep -n ".*" oldboy.txt
1:I am oldboy teacher!
2:I teach linux.
3:
4:I like badminton ball ,billiard ball and chinese chess!
5:our site is
http://www.oldboyedu.com
6:my qq num is 49000448.
7:
8:not 4900000448.
9:my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# cat -n oldboy.txt
1 I am oldboy teacher!
2 I teach linux.
3
4 I like badminton ball ,billiard ball and chinese chess!
5 our site is
http://www.oldboyedu.com
6 my qq num is 49000448.
7
8 not 4900000448.
9 my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# grep "[abc]" 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 god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# grep "[^abc]" 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]# grep -E "0?" 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 "oldboy|like|000" oldboy.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.
not 4900000448.
[root@oldboyedu ~/test]# egrep "0{1,2}" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]# egrep "0{5,}" oldboy.txt
not 4900000448.
[root@oldboyedu ~/test]# egrep "0{5}" oldboy.txt
not 4900000448.
[root@oldboyedu ~/test]# egrep "00000" oldboy.txt
not 4900000448.
[root@oldboyedu ~/test]# egrep "0{3}" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]# egrep "0{,3}" 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 "[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!
[root@oldboyedu ~/test]# grep -P "\d" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]# grep -Po "\d" oldboy.txt
sed:流编辑器
sed [选项] [sed内置命令字符] [输入文件]
选项:
!:表示对command的匹配范围取反
i \ :在模式匹配到的行前面添加新的内容。
a \ :在模式匹配到的行后添加新的内容
\n 在行之间换行
sed '/s/a \ wo zui ai ni \n 宋旭豪最帅' test.txt
-n 取消命令的默认输出
-i 直接修改文件内容
-e 允许多次编辑
-r 支持扩展正则
如果不使用-i选项sed只是修改
sed的内置命令字符说明
s 替换
g 全局global
p 打印 print
d delete 删除指定的行
a 表示追加文本,在指定行后添加一行或多行文本
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行内容※。
[root@songxvhao
~]# sed -n '2,3p' oldboy.txt
I like badminton ball ,billiard ball and chinese chess!
our site is
问题2:过滤出含有oldboy字符串的行※。
[root@songxvhao
~]# sed -n '/oldboy/p' oldboy.txt
I am oldboy teacher!
问题3:删除含有oldboy字符串的行※。
[root@songxvhao
~]# sed '/oldboy/d' oldboy.txt
I like badminton ball ,billiard ball and chinese chess!
our site is
my qq num is 49000448.
问题4:将文件中的oldboy字符串全部替换为oldgirl※。
[root@songxvhao
~]# sed 's#oldboy#oldgirl#g' oldboy.txt
I am oldgirl teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is
my qq num is 49000448.
问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
[root@songxvhao
~]# sed -e 's#oldgirl#oldboy#g' oldboy.txt -e 's#49000448#31333741#g' oldboy.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is
my qq num is 31333741.
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is
my qq num is 31333741.
Day15
练习sed:
正则是贪婪匹配模式,人性是贪婪的
问题1:取出Linux中执行ifconfig etho 后对应的ip地址(只能输出地址)。
[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 -nr '2s#^.*inet (.*) netm.*$#\1#gp'
10.0.0.201
三剑客自身是有特长的。
grep 过滤查找内容。 筛子
sed 取行,替换,删除,追加。
awk 取列
awk语法:
awk 参数 条件 文件
参数:
-F 指定分隔符
cut 按列切割
-d 指定分隔符 -f指定哪列 多列用,号或-
-c 按字符取内容
列:
$1 第1列 $2 第二列
$0 整行 $ NF 最后一列
cat test.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:取test.txt文件的第2行到第3行的内容。
[root@songxvhao
~]# sed -n '2,3p' test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@songxvhao
~]# awk 'NR>1&&NR<4' test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@songxvhao
~]# awk 'NR==2,NR==3' test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
问题2:过滤出含有root字符串的行※。
[root@songxvhao
~]# grep root test.txt
root:x:0:0:root:/root:/bin/bash
[root@songxvhao
~]# awk '/root/' test.txt
root:x:0:0:root:/root:/bin/bash
[root@songxvhao
~]# sed -n '/root/p' test.txt
root:x:0:0:root:/root:/bin/bash
问题3:删除含有root字符串的行※。
[root@songxvhao
~]# awk '/^[^root]/' test.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
[root@songxvhao
~]# grep -v root test.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
[root@songxvhao
~]# sed '/root/d' test.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
问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。
[root@songxvhao
~]# awk -F ":" '{print NR $1,$3,$NF}' test.txt
1bin 1 /sbin/nologin
2daemon 2 /sbin/nologin
3adm 3 /sbin/nologin
4lp 4 /sbin/nologin
问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。
[root@songxvhao
~]# ifconfig eth0 |sed -rn '2s#^.*net (.*) netm.*$#\1#gp'
10.0.0.200
[root@songxvhao
~]# ifconfig eth0 |awk -F " " 'NR==2{print $2}'
10.0.0.200
问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出
[root@songxvhao
~]# awk -F ":" 'NR==1{print $NF}' test.txt
/bin/bash
[root@songxvhao
~]# awk -F ":" '$1~/root/ {print $NF}' test.txt
/bin/bash (不太理解)
问题7:过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。
[root@songxvhao
~]# awk '$NF>70&&$NF<95' a.txt
李四男80
王燕女90
[root@songxvhao
~]# awk '$NF==80,$NF==90' a.txt
李四男80
王燕女90
[^r] 非r
^[^r] 以非r开头的字符
df -h 查看系统容量使用率
用grep取ifconfig eth0 ip
Day16
第十二章Linux系统权限知识及应用实践
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:<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、找到文件被篡改来源,并优化调整。
亡羊补牢。
5、写总结 故障报告。
控制默认权限的东西umask
[root@oldboyedu /oldboy]# umask
022
创建文件默认最大的权限为666(-rw-rw-rw-),其默认创建的文件没有可执行权限x位。
666
022 -
--------------------
644默认权限
[root@oldboyedu /oldboy]# umask 044 ====临时
[root@oldboyedu /oldboy]# touch abc
[root@oldboyedu /oldboy]# ls -l abc
-rw--w--w- 1 root root 0 Oct 7 23:42 abc
[root@oldboyedu /oldboy]# umask 044
[root@oldboyedu /oldboy]# touch abc
[root@oldboyedu /oldboy]# ls -l abc
-rw--w--w- 1 root root 0 Oct 7 23:42 abc
[root@oldboyedu /oldboy]# umask
0044
[root@oldboyedu /oldboy]# umask 043
[root@oldboyedu /oldboy]# umask
0043
[root@oldboyedu /oldboy]# touch a
[root@oldboyedu /oldboy]# ls -l a
-rw--w-r-- 1 root root 0 Oct 7 23:44 a
当umask中存在奇数位的时候,在计算完毕,奇数位加1
666
011
-------------------
655
11
-----------------
666
基于文件:默认权限规则了解
从666计算
umask都为偶数 默认权限用减法
umask有奇数 默认权限用减法 然后奇数位加1
基于目录:默认权限规则
从777计算
默认权限用减法
Linux系统特殊权限位知识
9位基础权限
还有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,加和放在基础权限数字的前面。
修改方法:
[root@oldboyedu /oldboy]# chmod 7755 abc
预测:-rwsr-sr-t
[root@oldboyedu /oldboy]# chmod 7755 abc
[root@oldboyedu /oldboy]# ls -l abc
-rwsr-sr-t 1 root root 0 Oct 7 23:42 abc
[root@oldboyedu /oldboy]# chmod 7644 abc
[root@oldboyedu /oldboy]# ls -l abc
-rwSr-Sr-T 1 root root 0 Oct 7 23:42 abc
工作中有啥用?
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一样。
回顾重点:
【文件】权限详细说明:*****
【目录】权限详细说明:*****
字符和数字(8进制)权限知识*****
chmod chown chgrp命令使用。*****
企业真实案例:网站文件被恶意修改了*****
umask默认权限控制*
特殊权限,suid** sgid sticky*
重点suid