通配符:
注意:linux的通配符和三剑客(grep、awk、sed)正则表达式是不一样的,因此,代表的意义也是有较大的区别的。
通配符一般用户命令行bash环境,而linux正则表达式用于grep、sed、awk场景。
*代表所有(0到多个)字符
?通配符,代表任意一个字符
;连续不同命令的分隔符
# 配置文件注释 给人类看的 电脑不看
|管道 效率不高,能不用最好不用
~当前用户的家目录
-上一次的所在的路径
$变量前需要添加的符号
/路径分隔符号,也是根的意思
> 或者 1> 重定向,覆盖原有数据
>>追加重定向,追加内容文件尾部
<输入重定向
<<追加输入重定向(cat)
‘单引号不具有变量置换功能,输出时所见即所得。
"双引号具有变量置换功能,解析变量后输出,不加引号相当于双引号。常用双引号。
` tab键上面的键,反引号,两个``中间为命令,会先执行,等价于 $()
{}中间为命令区块组合或者内容序列
!逻辑运算中的"非"(not)。
&& -and 并且,当前一个指令执行成功时,执行后一个指令
|| -or 或者,当前一个执行执行失败时,执行后一个指令
..两个点代表上一级目录
. 点代表当前目录
示例:
示例:
小结:
示例:
示例:
linux正则表达式 企业实践:
取ip地址 ?
解答:sed -n ‘s#支持正则的位置##gp‘ file
方法1:
[[email protected] ~]# ifconfig eth0|sed -n ‘2p‘|sed -n ‘s#^.*inet addr:##gp‘|sed ‘s# B.*$##g‘
192.168.140.128
p和-n参数是一起使用的 -n取消默认输出 p表示打印的意思
方法2
-r 表示扩展模式 ^.*inet addr:表示addr:之前的字符串 Bcast:.*$表示 Bcast:之后的字符串
别的例子:
[[email protected] ~]# stat /etc/hosts
File: `/etc/hosts‘
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 812h/2066d Inode: 654118 Links: 3
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-27 16:17:59.254999993 +0800
Modify: 2010-01-12 21:28:22.000000000 +0800
Change: 2017-03-25 20:57:39.498978973 +0800
[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*Access: \(0(.*)\/-rw.*$#\1#gp‘
644
[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*0(.*)/-.*$#\1#gp‘ 更加简洁!!!
644
[[email protected] ~]# stat /etc/hosts |sed -nr ‘s#^.*Access: \(0##gp‘|sed -r ‘s#/-rw.*$##g‘
644
题目1 把目录或者文件前rwx-用数字显示出来
方法1:
方法2:
方法3:(还待完善)
[[email protected] ~]# stat test |awk -F "[(/]" ‘NR==4{print $2}‘ 稍微完善点的方法
0750
其他6种方法:
20170328 20:00-
date
[[email protected] ~]# date +%F\ %X
2017-03-28 09:17:15 PM
[[email protected] ~]# date +%Y-%m-%d
2017-03-28
[[email protected] ~]# date +%F -d "-2day"
2017-03-26
[[email protected] ~]# date +%F -d "+1day"
2017-03-29
口述:
1、描述linux系统开机到登录界面的启动过程:
bios通电自检----启动权交给硬盘 零磁盘零磁道零扇区第416字节 --mbr引导---grub---加载内核---init---/etc/inittab(比如启动3级别、rc.local等)---tty--login
2、描述linux下软硬连接的区别
软链接的block只存放源文件的绝对路径信息
3、描述linux shell中单双引号以及不加引号的区别:
双引号和不加引号相同的效果,双引号更加严谨,可以使用转义符\ 变量等
单引号不能使用转义符 输出都是所见即所得 其他类似双引号
单双引号里面的反引号表示命令先执行
4、描述linux的7个运行级别的各自含义:
0 关机 1单用户 2无nfs的多用户 3 标准多用户 4 备用预留 5 x11 桌面模式 6重启
5、描述linux下文件删除的原理
如果是静态文件 只要inode为零 就表示已经删除
如果是动态文件 inode(i_link)为零且i_count为零
df -h 和 df -i
Sed 是操作、过滤和转换文本内容的强大工具。常用功能有增a删d改i查s,过滤,取行。
三剑客都是 读取一行,处理一行,输出一行,再重复。。。。(串行的概念)
sed是会自动打印结果到屏幕
统一实验文本:
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1、增删改查
1.1增
a 追加文本到指定行后
i 插入文本到指定行前
1.1.1单行增加:
[[email protected] ~]# sed ‘2a 106,dandan.CSO‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2i 106,dandan.CSO‘ person.txt
101,oldboy,CEO
106,dandan.CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1.1.2多行增加:
[[email protected] ~]# sed ‘2a 106,dandan.CSO\n107,bingbing,CCO‘ person.txt #\n代表换行符 非变量
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2a 106,dandan.CSO \
> 107,bingbing,CCO‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan.CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[ ] 中括号代表里面的参数是可选项
2.2删
d 删除指定的行
[[email protected] ~]# sed ‘/feixue/,2d‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[[email protected] ~]# sed ‘/CEO/,1d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘/oldboy/,3d‘ person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘/oldboy/d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘1d‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.3改
2.3.1按行替换
c 用新行取代旧行
2.3.2文本替换
s:单独使用 将每一行中第一处匹配的字符串进行替换 属于sed命令
g:每一行进行全部替换 属于sed命令s的替换标志之一,非sed命令
-i: 修改文件内容 sed软件的选项
[[email protected] ~]# sed ‘s#zhangyao#20has#g‘ person.txt
101,oldboy,CEO
102,20has,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed -i ‘s#zhangyao#oldboyedu#g‘ person.txt
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,oldboyedu,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
制定行精确修改配置文件,这样可以防止修改了多的地方
[[email protected] ~]# sed ‘2s#102#106#g‘ person.txt
101,oldboy,CEO
106,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.3.3变量替换
[[email protected] ~]# x=a
[[email protected] ~]# y=b
[[email protected] ~]# echo $x $y
a b
[[email protected] ~]# sed ‘s#$x#$y#g‘ test.txt #‘’单引号输出所见即所得 不能解析变量
a
b
c
[[email protected] ~]# sed "s#$x#$y#g" test.txt #双引号或者不加引号 可以先解析变量再执行命令
b
b
c
[[email protected] ~]# sed "s#$y#$x#g" test.txt #eval 命令和双引号作用一样
a
a
c
20170329 20:30-
2.3.4分组替换 \(\)和\1的使用说明
例子:
[[email protected] ~]# echo I am oldboy teacher.|sed ‘s#^.*am \([a-z].*\) tea.*$#\1#g‘
oldboy
[[email protected] ~]# echo I am oldboy teacher.|sed -r ‘s#^.*am ([a-z].*) tea.*$#\1#g‘
oldboy
2.3.5 特殊符号&代表被替换的内容
[[email protected] test]# touch stu_102999_{1..5}_finished.jpg
[[email protected] test]# ls *.jpg |sed -r ‘s#(^.*99)_(.*)_finished.jpg#mv & \1_\2.jpg#g‘
mv stu_102999_1_finished.jpg stu_102999_1.jpg
mv stu_102999_2_finished.jpg stu_102999_2.jpg
mv stu_102999_3_finished.jpg stu_102999_3.jpg
mv stu_102999_4_finished.jpg stu_102999_4.jpg
mv stu_102999_5_finished.jpg stu_102999_5.jpg
[[email protected] test]# ls *.jpg |sed -r ‘s#(^.*99)_(.*)_finished.jpg#mv & \1_\2.jpg#g‘|bash
2.4查
p 输出指定内容,但默认会输出2次匹配的结果,因此使用-n取消默认输出
2.4.1按行查询
[[email protected] ~]# sed ‘2p‘ person.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed ‘2p‘ person.txt -n
102,zhangyao,CTO
说明:用sed取行是最简单的 awk取列很方便
2.4.3混合查询
[[email protected] ~]# sed -n ‘2,/CFO/p‘ person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
课后作业:
1、linux通配符
2、linux正则
3、第三关考试题
4、sed命令基础
预习:
12位权限
定时任务
第四关考试题
1、ln
ln make LiNks between files
无参数 创建硬链接 硬链接和源文件共享同一个inode 指向同一个block
-s 创建软链接 软链接和源文件不同的inode和block 软链接的block存放源文件的绝对路径信息
ln option 源文件 目标文件
只有同一个分区的inode一样的文件才是同样的文件
2、readlink 查看符号链接(软链接)的源文件
3、md5sum 计算和校验文件的md5值 (文件的指纹 独一无二的) -c 校验文件md5值
方法:先计算文件的md5值 保存到文件 然后用-c检测文件的md5值与原来的是否一致
[[email protected] ~]# md5sum a >md5.log
[[email protected] ~]# md5sum -c md5.log
a: OK
[[email protected] ~]# echo hello >a
[[email protected] ~]# md5sum -c md5.log
a: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
课前考试:
请大家讨论4个主题
1、linux文件属性 ls -lhi 结果每列
解答:
inode节点号、11位字符组成 文件类型和权限(l链接 -普通文件 d目录 s socket b块 属主读写执行 属组读写执行 其他用户读写执行 ) 硬链接个数 属主 属组 文件大小(h代表人类可读 M和K) 修改时间(-ctime change stat命令) (前面都是inode信息) 文件名(不在inode里面)
2、linux通配符讲课
解答:
. 当前目录 ..上级目录 *任意字符 ? 单个字符 \ 转义字符 # 注释 ‘无转换变量和所见即所得‘‘ 转换变量 !取反 |管道 -上一次的所在路径 ;命令分隔符 <输入重定向 <<追加输入重定向 >输出重定向 >>追加输出重定向 ~家目录 `反引号 里面的命令先执行
3、linux正则表达式
解答:
.匹配 *代表 .*匹配任意字符 $行尾 ^行首 ^$匹配空行 ?单个字符
4、取ip不低于3种方法
解答:
[[email protected] ~]# ifconfig eth0|sed -nr ‘2s#^.*ddr(.*) B.*$#\1#gp‘
:192.168.140.128
[[email protected] ~]# ifconfig eth0|sed -nr ‘2s#^.*ddr:(.*) B.*$#\1#gp‘
192.168.140.128
[[email protected] ~]# ifconfig eth0|awk -F "[ :]+" ‘NR==2{print $4}p‘
192.168.140.128
说明: [0-9]*表示0-9的数字轮询 -o 只显示匹配的字符
文件权限 要求精通
20170330 21:00-
测试环境准备:
[[email protected] ~]# groupadd incahome #创建一个家庭(oldboy的家)
[[email protected] ~]# useradd oldboy -g incahome #让家庭主人oldboy属于incahome这个家庭
[[email protected] ~]# su - oldboy
[[email protected] ~]$ ll
total 0
[[email protected] ~]$ id oldboy
uid=502(oldboy) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# useradd oldgirl -g incahome #创建incahome这个家的家庭成员
[[email protected] ~]# useradd test #外面的人,主人和家庭成员以外的人
[[email protected] ~]# id oldboy
uid=502(oldboy) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# id oldgirl
uid=503(oldgirl) gid=502(incahome) groups=502(incahome)
[[email protected] ~]# id test
uid=504(test) gid=504(test) groups=504(test)
[[email protected] ~]# mv /oldboy /tmp/
mv: overwrite `/tmp/oldboy‘? y
[[email protected] ~]# mkdir /oldboy
[[email protected] ~]# cd /oldboy/
[[email protected] oldboy]# ll
total 0
[[email protected] oldboy]# echo "echo oldboylinux" >/oldboy/test.sh
[[email protected] oldboy]# chmod +x /oldboy/test.sh
[[email protected] oldboy]# ll test.sh
-rwxr-xr-x 1 root root 17 2017-03-30 21:30 test.sh
[[email protected] oldboy]# cat test.sh
echo oldboylinux
总结如下:
我们删除一个文件 就是删除这个文件名 和该文件的权限无关 是 删除上一级目录的block存放的文件名 和上一级目录的权限相关
linux系统下文件读取的原理:
比如我要删除 oldboyfile 的权限就是受到 上一级目录的权限控制
例子:
5.3chmod
5.3.2数字组合权限表示法
网站目录安全权限深度讲解:
默认权限是安全权限的临界点,工作中尽量给这个临界点,或者小于临界点,不要大于临界点。
linux目录权限默认755 文件权限默认644
根据属主属组去控制文件和目录的读写可执行权限
如果需要修改umask永久生效 那就修改以上文件位置把 临时生效: umask 数字
目录从777开始算起 文件从666开始算起
老男孩方法:
如果umask全部偶数,则直接相减得到默认创建文件的权限,目录的权限直接相减;
如果umask含有奇数,则直接相减后含奇数的+1得到创建文件的权限,目录的权限直接相减。
特殊权限位 了解即可
setuid和setgid
当在二进制passwd命令上设置了suid权限的时候,普通用户在执行该passwd命令的时候就拥有了和命令对应的用户(root)对应的权限
[[email protected] oldboy]# ll `which passwd|tail -1`
-rwsr-xr-x 1 root root 30768 2015-11-24 00:30 /usr/bin/passwd
su和sudo的区别 su相当于推翻皇帝自己当皇帝 sudo相当于皇帝给你尚方宝剑
[[email protected] oldboy]# find /usr/bin -type f -perm 4755 -exec ls -l {} \; # 待优化的命令
-rwsr-xr-x 1 root root 51784 Aug 24 2016 /usr/bin/crontab
-rwsr-xr-x. 1 root root 22544 Mar 17 2015 /usr/bin/pkexec
-rwsr-xr-x 1 root root 30768 Nov 24 2015 /usr/bin/passwd
-rwsr-xr-x 1 root root 40240 May 11 2016 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 54496 Feb 20 2015 /usr/bin/at
-rwsr-xr-x 1 root root 75640 May 11 2016 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 70480 May 11 2016 /usr/bin/chage
-rwsr-xr-x 1 root root 2438336 Jul 13 2016 /usr/bin/Xorg
优化命令如下:find /usr/bin -type f -perm 4755 -exec chmod u-s {} \;
linux的优化之一: 就是干掉无用的suid、sgid、权限
20170331 20:30-
有s表示有特殊权限u+s g+s S表示无特殊权限u-s g-s
suid: chmod 4755 file 或者chmod u+s file
sgid: chmod 2755 file 或者chmod g+s file
一起修改: chmod 6755 file
chown
chattr change file attributes on a Linux file system
参数i 防止修改文件 锁定文件
[[email protected] test]# chattr +i /etc/passwd #+i 锁定passwd文件
[[email protected] test]# lsattr /etc/passwd
----i--------e- /etc/passwd
[[email protected] test]# useradd asdadsa
useradd: cannot open /etc/passwd
加锁关键文件 转移加锁命令 到别的文件夹
章节总结:
特殊权限: