文件属性、正则表达式、文件权限
文件属性、正则表达式、文件权限
一、文件属性
[root@oldboy-01 ~]# ls -lhi /etc/hosts
39 -rw-r--r--. 2 root root 352 Nov 19 2018 /etc/hosts
39:inode号码
-:文件类型
rw-r--r--. :文件的权限.(与selinux有关,关闭selinux就无点)
2:文件硬链接数量
root root:属主,属主组
352:文件的大小
Nov 19 2018:文件修改时间
*文件名不属于文件属性
(一)inode和block简介
获取一个磁盘到可以向磁盘中存放数据:
①硬盘,②分区,③格式化创建文件系统,④挂载
(1)inode
含义:index inode。用来存放文件属性的空间,通过inode号码找到这个空间。
inode号码是家庭地址,inode空间是家庭,文件名不存放在inode中。
如何来的:格式化创建文件系统
特点:
①inode存放文件属性,
②创建一个文件要占用一个inode。
③存放block的位置。
④inode节点号码相同,互为硬链接文件。
如何查看inode:
ls -lhi
ls -i
df -i 查看系统中剩余inode
(2)block
含义:数据块。用来实际存放数据的。
怎么来的:格式化创建文件系统
特点:①block是实际存放数据的位置,block4k(centos6)1k,8k
②创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
③创建一个非空文件要占用一个inode和至少1个block。
④每读取一个block就会消耗一个磁盘i/o。
df -h:磁盘block使用情况。
ls -lh
案例:磁盘空间不足问题排查。
no space left on device
空间不够:
①df -h
②du -sh /* | grep G #du -sh 查看每个目录大小
③du -sh /var/log/* | grep G #逐步排查
inode不够:
df -i
(二)文件类型
[root@oldboy-01 ~]# ls -lhi
total 57M
262603 -rw-r--r--. 1 root root 766 Nov 5 2018 access.log
400480 drwxr-xr-x. 2 root root 4.0K Oct 12 2018 data
-:相当于是f ,file
d:directory 目录
l:softlink 软连接(快捷方式)
查看文件类型:
[root@oldboy-01 ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
[root@oldboy-01 ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@oldboy-01 ~]# file /tmp/etc.tar.gz
/tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Sat Dec 14 01:23:53 2019
[root@oldboy-01 ~]#
(三)linux的扩展名:
windows通过扩展名确定不同类型文件。
linux :扩展名可以改动。
.sh脚本文件。
.conf 配置文件。
(四)用户和用户组简介
用户分3类:属主,属组,其他人
如,用户oldboy:id查看用户信息。
[root@oldboy-01 ~]# id oldboy
uid=500(oldboy) gid=500(oldboy) groups=500(oldboy)
(一)linux中存在于系统中用户如何分类
UID:用户的id号,唯一,身份证号码
GID:group id用户组的id号码,户口本的号码
①皇帝,root,uid :0
②虚拟用户,uid:1-499,系统中每个继承要有一个对应的用户,无法使用。
③贫民百姓,普通用户,uid:500+
如何保护root:
①禁止root远程登录
②修改ssh默认的端口22
③定期分析/var/log/message,查看登录日志。
(五)与用户有关的文件
/etc/passwd :存放的是 用户信息
[root@oldboy-01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
第一列:用户名
第二列:x,原来存放密码地方
第三列:uid
第四列:gid
第五列:用户的说明信息,默认为空
第六列:用户的家目录,~
root ~/root
oldboy ~ /home/oldboy
第七列:用户的使用shell,用户使用的命令解释器。
/bin/bash :centos默认命令解释器
/sbin/nologin:用户无法登陆系统,虚拟用户,傀儡用户。
(六)文件权限
linux基础权限介绍:
r:4 read可以读取文件内容
w:2 write修改文件内容
x:1 execute可以运行的文件(命令,脚本)
-:0 无权限
262603 -rw- r-- r--. 1 root root 766 Nov 5 2018 access.log
权限分为3部分:
第一部分是主人权限
第二部分是所属组权限
第三部分是其他人权限
(七)硬链接和软连接
(1)软连接
相当于Windows的快捷方式。
[root@oldboy-01 oldboy]# ln -s oldboy.txt oldboy.txt-soft
[root@oldboy-01 oldboy]# ls -l oldboy*
-rw-r--r--. 1 root root 0 Dec 13 23:51 oldboy
-rw-r--r--. 1 root root 0 Oct 12 2018 oldboy.sh
-rw-r--r--. 1 root root 16 Nov 2 2018 oldboy.txt
lrwxrwxrwx. 1 root root 10 Dec 14 15:48 oldboy.txt-soft -> oldboy.txt
特点:
①存放着源文件的位置。
②源文件删除,或者修改,软连接失效。
③节约时间,方便。
(2)硬链接
相当于是超市的前后门,通过不同的大门进入超市。
在同一个分区中,两个文件或者多个文件的inode号码相同,这些文件互为硬链接
[root@oldboy-01 oldboy]# ln oldboy.txt oldboy.txt-hard
[root@oldboy-01 oldboy]# ls -lhi oldboy*
402577 -rw-r--r--. 1 root root 0 Dec 13 23:51 oldboy
400489 -rw-r--r--. 1 root root 0 Oct 12 2018 oldboy.sh
402905 -rw-r--r--. 2 root root 16 Nov 2 2018 oldboy.txt
402905 -rw-r--r--. 2 root root 16 Nov 2 2018 oldboy.txt-hard
特点:
①相当于超市的前后门,硬链接数量就是超市一共多少个门。
②删除硬链接或者源文件,文件还是可以使用。
③把硬链接和源文件都删除,文件被删除==硬链接数量为0.
(3)软连接和硬链接的区别
①如何创建:
a、默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软连接。
②含义
a、硬链接文件与源文件的inode节点相同,而软连接文件相当于Windows下面的快捷方式(inode不同)。
③特点
a、不能对目录创建硬链接,但可以创建软连接,对目录的软连接会经常被用到。
b、软连接可以跨文件系统,硬链接不可以跨文件系统。
④如何创建(源文件,软连接,硬链接与删除)
a、除软连接文件,对源文件及硬链接文件无任何影响。
b、除文件的硬链接文件,对源文件及软连接文件无任何影响。
c、除链接文件的源文件,对硬链接文件无影响,会导致其软连接失效。
d、同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
(4)文件删除原理
①删除文件所有硬链接-rm
②这个文件的进程调用数为0,没有人在使用。
案例:某个文件没有被彻底删除,导致磁盘空间不足。
①df -h
②du -sh /*
以上还是查不到问题,文件没有彻底被删除。
解决方案:重启应用程序,如apach,nginx等
强制删除文件:\rm -r xxx,> xxx
lsof | grep deleted 标记,这个文件的硬链接数为0,进程调用数不为0
(5)磁盘空间不足总结:
①block满了,正常。
②inode满了,大量的小文件
③block 文件没有被彻底删除,导致磁盘空间不足。硬链接数为0,进程调用数不为0.
排查步骤:
①df -h:block
②du -sh /* 于上述一样,删除数据。如磁盘未满,判断为inode满了。
③df -hi :inode :判断inode是否满了
④lsof | grep deleted :查看硬链接数为0,调用数不为0。
(八)linux修改、访问、改变时间简介
mtime:modified time 文件的修改时间,文件内容的变化时间。
ctime:change time,文件属性的改变时间,硬链接数量,文件大小,文件权限
atime:access time,文件的访问时间,cat
[root@oldboy-01 oldboy]# stat oldboy.txt
File: `oldboy.txt'
Size: 16 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 402905 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-14 01:28:02.582435652 +0800
Modify: 2018-11-02 02:28:49.076043003 +0800
Change: 2019-12-14 15:52:24.126781848 +0800
[root@oldboy-01 oldboy]#
总结:
①文件删除原理
②软连接和硬链接
③磁盘空间不足
④/etc/passwd 每一列含义
⑤linux三种时间
⑥linux启动过程
⑦远程连接排错过程
⑧linux无法上网如何解决
⑨第二关练习题
二、正则表达式
(一)特殊符号讲解
'' :单引号,所见所得
"" :特殊符号会被解析运行
`` :反引号,相当于$(),先运行括号里的命令,把结果留下来
重定向> :先清空文件的内容,然后追加文件的最后
重定向>> :追加重定向,追加到文件最后
错误重定向2> :只有错误的信息才会通过这个漏洞进入文件中。
- 错误重定向2>> ,追加到文件最后
- :当前用户的家目录
root ~/root
oldboy ~/home/oldboy
! :查找并运行历史命令
!awk :包含awk的命令,最近一条运行,histroy | grep awk
注释:#
$ :取出变量的内容
awk $ 取某一列的内容
普通用户的命令提示符
*所有,任何东西
\撬棍,转义字符
&& 前一个命令执行成功后再执行后一个命令,ifdown eth0 && ifup eth0
|| 前一个命令执行失败后,执行后面的命令
(二) 通配符
通配符是用来查找文件的,以.txt结尾文件,.txt;.log
所有:*
[root@oldboy-01 oldboy]# find /oldboy/ -type f -name "*oldboy*"
/oldboy/oldboy.txt
/oldboy/oldboy
/oldboy/test/oldboy123.txt
/oldboy/test/oldboy.txtbak
/oldboy/test/oldboy.txt
/oldboy/test/oldboy123.bak.test
/oldboy/test/oldboy.txt.bak
/oldboy/oldboy.txt-hard-hard
/oldboy/oldboy.txt-hard
/oldboy/oldboy.sh
生成序列:{}
[root@oldboy-01 oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboy-01 oldboy]# echo stu{a..z}
stua stub stuc stud stue stuf stug stuh stui stuj stuk stul stum stun stuo stup stuq stur stus stut stuu stuv stuw stux stuy stuz
[root@oldboy-01 oldboy]# echo {1,9,20,31}
1 9 20 31
[root@oldboy-01 oldboy]# echo A{B,C}
AB AC
[root@oldboy-01 oldboy]# echo A{,C}
A AC
[root@oldboy-01 oldboy]# cp oldboy{,.bak}
(三)正则表达式简介
正则表达式含义:
通过符号表示文字内容,提升处理效率。
支持正则表达式:三剑客
正则表达式注意事项:
①正则表达式是按照行来处理,一次只处理一行。
②禁止使用中文符号。
③配置grep和egrep配置别名。
[root@oldboy-01 oldboy]# cat >> /etc/profile<<EOF
> alias grep='grep --color=auto'
> alias egrep='egrep --color=auto'
> EOF
[root@oldboy-01 oldboy]# source /etc/profile
[root@oldboy-01 oldboy]# grep '3306' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
[root@oldboy-01 oldboy]#
(四)正则表达式与通配符区别
通配符:用来匹配查找文件名,*.txt结尾的文件
正则:在文件中匹配查找内容,包含oldboy的行。linux三剑客
(五)正则表达式
基础正则(basic regular expression BRE):,$,.*,[],[] :grep ,sed,awk
扩展正则(extended regular expression ERE):| ,+,{},(),? :egrep,grep -E,sed ,awk
(1) 基础正则
cat -A :显示文件中特殊符号。
(.)点表示任意字符。
grep -o 表示grep执行的过程。
显示以点结尾的行:
撬棍,\转移字符。
grep '.$' oldboy.txt
grep '.$' oldboy.txt
\n:表示回车换行。
*号:前一个字符连续出现0次或者1次以上,>=0
如:A,AA,AAA,AAAA
grep -o '0*' oldboy.txt
[root@oldboy-01 oldboy]# grep -o '0*' oldboy.txt
000
00000
正则表达式,连续出现的时候表现出贪婪性。
连续出现0次0,什么也没有,就会把证文件都显示出来。
正则表达式:表示所有:.*,任意字符出现0次以上 。
[root@oldboy-01 oldboy]# grep '^.*o' oldboy.txt
oldboyedou.co1m
hello
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy-01 oldboy]#
正则表达式表示连续出现或所有的时候,贪婪性有多少匹配多少。
找出文件m开头和m结尾。
[root@oldboy-01 oldboy]# grep '^m.*m$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
[root@oldboy-01 oldboy]#
正则表达式:中括号:[],[abc],相当于一个字符,查找出a,b,c
[root@oldboy-01 oldboy]# grep '[abc]' oldboy.txt -on
1:b
1:c
3:a
3:b
3:a
3:c
4:a
4:c
5:b
5:a
5:b
5:a
5:b
5:a
5:b
5:a
5:a
5:c
5:c
6:b
6:b
6:b
6:c
6:c
7:a
7:a
10:a
10:b
10:b
grep '[a-z]' oldboy.txt -on
grep '[a-zA-Z]' oldboy.txt -on
以m后者n或者o开头的,并且以m后者g结尾的行。
[root@oldboy-01 oldboy]# grep '^[mno].*[mg]$' oldboy.txt
oldboyedou.co1m
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
[root@oldboy-01 oldboy]#
排除a或者b或者c的内容
[root@oldboy-01 oldboy]# grep '[^abc]' oldboy.txt
(2)扩展正则
1)+前-个符号连续出现1次或者多次。
[root@oldboy-01 oldboy]# egrep '0+' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboy-01 oldboy]# grep '0+' oldboy.txt -E
my qq num is 49000448.
not 4900000448.
[root@oldboy-01 oldboy]# grep '0+' oldboy.txt -E -o
000
00000
[root@oldboy-01 oldboy]# grep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboy-01 oldboy]#
取出文件中连续小写字母。
[root@oldboy-01 oldboy]# egrep '[a-z]+' oldboy.txt -o
加号(+):可以把连续的东西通过正则取出出来
一般与[]搭配使用。
2)竖线(|),或者
[root@oldboy-01 oldboy]# egrep 'oldboy|linux' oldboy.txt -o
oldboy
oldboy
linux
oldboy
[root@oldboy-01 oldboy]#
linux正则表达式之问题:[],与 | 区别
都可以表示或者[abc] a|b|c
区别:
①[]基础正则,|扩展正则
②[]表示的是单个字符或者[abc],| 单个字符的或者多个字符的都可以(oldboy|linux)
3),()括号中的内容相当于一个整体,后向引用(反向引用)
有括号的先算括号里面的。
[root@oldboy-01 oldboy]# egrep 'oldb(o|e)y' oldboy.txt
oldboyedou.co1m
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboy-01 oldboy]#
把你想要的内容先保护起来(通过小括号),然后再使用他。
如下:(.*)表示前面的数字,\1,表示前面的第一个括号中的内容。
[root@oldboy-01 oldboy]# echo 12345 | sed -r 's#(.*)#\1#g'
12345
[root@oldboy-01 oldboy]# echo 12345 | sed -r 's#(.*)#<\1>#g'
<12345>
[root@oldboy-01 oldboy]#
[root@oldboy-01 oldboy]# echo 12345 | sed -r 's#.(.).(.).#<\1>,\2#g'
<2>,4
[root@oldboy-01 oldboy]#
4),{}花括号,o{n,m} 前一个字符至少出现n次,做多出现m次。
o{,m}前一个字符连续出现至多出现m次。
o{n,}前面的字符连续出现至少出现n次。
o{n}前面的字符连续出现n次。
[root@oldboy-01 oldboy]# egrep -o '0{1,4}' oldboy.txt
000
0000
0
[root@oldboy-01 oldboy]# egrep -o '0{3,4}' oldboy.txt
000
0000
[root@oldboy-01 oldboy]# egrep -o '0{3,}' oldboy.txt
000
00000
[root@oldboy-01 oldboy]#
[root@oldboy-01 oldboy]# egrep -o '0{3}' oldboy.txt
000
000
[root@oldboy-01 oldboy]# egrep -o '[0-9]{8,}' oldboy.txt
49000448
4900000448
[root@oldboy-01 oldboy]#
4),问好?,表示前一个字符出现0次或者1次。
[root@oldboy-01 oldboy]# egrep 'gd|god' oldboy.txt
my god ,i am not oldbey,but OLDBOY!
[root@oldboy-01 oldboy]# egrep 'go?d' oldboy.txt
(3)总结
正则表达式总结:
连续出现(重复)
型号(*) >=0
加号(+) >=1
问号(?) 0 1
{n,m} >=n, <=m
{n} ==n
其他:
点(.) 任意一个字符。
[abc] 一个整体,相当于是一个字符。[a-z],[0-9],[A-Z]
[^abc] 中括号内有一个尖号表示,排除
竖线(|):或者
():后向引用,反向引用,先保护再使用。
尖号(^):开头
点号和星号.*:所有
开头和结尾符(^$):空行
基础正则 与扩展正则区别:
支持基础正则 基础+扩展
grep egrep ==egrep -E
sed sed -r
awk awk
[root@oldboy-01 oldboy]# grep 'gd\|god' oldboy.txt
man grep
grep help
(六)闯关练习
正则表达式相关练习
(1)取出网卡ip地址
awk方法1:
[root@oldboy-01 oldboy]# ifconfig eth0 | awk 'NR==2'| awk '{print $2}'|awk -F':' '{print $2}'
10.0.0.202
awk方法2:一个空格就要切一刀,所以要在第13列才能取到。+号把连续出现的空格或者冒号作为一个整体。
[root@oldboy-01 oldboy]# ifconfig eth0 | awk 'NR==2'| awk -F "[ :]" '{print $13}'
10.0.0.202
[root@oldboy-01 oldboy]# ifconfig eth0 | awk 'NR==2'| awk -F "[ :]+" '{print $13}'
[root@oldboy-01 oldboy]# ifconfig eth0 | awk 'NR==2'| awk -F "[ :]+" '{print $4}'
10.0.0.202
awk方法3:
[root@oldboy-01 oldboy]# ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}'
10.0.0.202
[root@oldboy-01 oldboy]#
sed命令方法1:
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2p'
inet addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2p'| sed 's#^.*addr:##g'
10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2p'| sed 's#^.*addr:##g' | sed 's# Bc.*$##g'
10.0.0.202
[root@oldboy-01 oldboy]#
sed方法2:后向引用。先用括号保护起来后面\1再利用。
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2p' | sed 's#^.*dr:(.*) Bc.*$#\1#g' -r
10.0.0.202
[root@oldboy-01 oldboy]#
sed方法3:后向引用,在行之间替换,'2s###gp'
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2p' | sed 's#inet#oldboy#g'
oldboy addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -n '2s#inet#oldboy#gp'
oldboy addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboy-01 oldboy]# ifconfig eth0 | sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'
10.0.0.202
[root@oldboy-01 oldboy]#
(2)取出文件的权限,使用如644等数字表示
awk方法1:
[root@oldboy-01 oldboy]# stat /etc/hosts | awk -F "[(/]" 'NR==4{print $2}'
0644
[root@oldboy-01 oldboy]#
sed方法1:
[root@oldboy-01 oldboy]# stat /etc/hosts | sed '4s#^.*\(([0-9]+).*$#\1#gp' -rn
0644
[root@oldboy-01 oldboy]#
stat命令参数方法3:
man stat
[root@oldboy-01 oldboy]# stat -c%a /etc/hosts
644
[root@oldboy-01 oldboy]#
(3)如何将文件空行过滤掉
方法1:grep -v #表示排除的意思,^$表示空行的意思。
grep -v '^$' test.txt
方法2:awk,查找内容格式:’/ /‘,!叹号表示排除。
[root@oldboy-01 oldboy]# awk '!/^$/' test.txt
方法3:sed ,查找格式'/ /',删除的意思:d
[root@oldboy-01 oldboy]# sed '/^$/d' test.txt
(4)通过正则表达式过滤出前两行
如何使用sed和awk实现过滤。
[root@oldboy-01 oldboy]# sed -n '4p' oldboy.txt
I teach linux.
[root@oldboy-01 oldboy]# sed -n '/oldboy/p' oldboy.txt
oldboyedou.co1m
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
[root@oldboy-01 oldboy]# sed -nr '/ol+dbo+y/p' oldboy.txt
oldboyedou.co1m
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
[root@oldboy-01 oldboy]# awk '/ol+dbo+y/' oldboy.txt
oldboyedou.co1m
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
[root@oldboy-01 oldboy]# egrep 'ol+dbo+y' oldboy.txt
oldboyedou.co1m
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
[root@oldboy-01 oldboy]#
小结:
1、sed,awk如何实现过滤类似egrep
2、awk 'NR1','NR1,NR==10',awk '//'
3、sed定位
sed -n '1p'
sed -n '1,10p'
sed -n '10,$p'
sed -n '//p'
(5)硬链接数
linux创建目录/alexdir,此目录的硬链接数是多少,为什么?然后在alexdir下面又创建一个目录test,问alexdir的硬链接数是多少。
①2个,/alexdir/和/alexdir/.
②3个,如下
[root@oldboy-01 test]# ls -ldia /alexdir/ /alexdir/. /alexdir/test/..
401703 drwxr-xr-x. 3 root root 4096 Oct 12 2018 /alexdir/
401703 drwxr-xr-x. 3 root root 4096 Oct 12 2018 /alexdir/.
401703 drwxr-xr-x. 3 root root 4096 Oct 12 2018 /alexdir/test/..
[root@oldboy-01 test]# cd ..
[root@oldboy-01 alexdir]# pwd
/alexdir
(6)网卡配置文件路径和DNS路径
/etc/sysconfig/network-scripts/ifcfg-eth0
DNS配置路径:
/etc/resolv.conf
网卡配置文件中可以配置优先DNS
(7)查找当前目录下所有文件,并把文件中www.etiantian.org 替换成www.oldboy.com
方法1:
[root@oldboy-01 oldboy]# find /oldboy -type f -name '*.txt' | xargs sed -i 's#www.etiantian.org#www.oldboy.com#g'
方法2:
ls -l 此处存放着which mkdir 命令的结果。
[root@oldboy-01 oldboy]# ls -l /bin/mkdir
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
[root@oldboy-01 oldboy]# ls -l $(which mkdir)
-rwxr-xr-x. 1 root root 50056 Mar 23 2017 /bin/mkdir
[root@oldboy-01 oldboy]# ls -l `which mkdir`
本题解法:
[root@oldboy-01 oldboy]# sed -i 's#www.etiantian.org#www.oldboy.com#g' $(find /oldboy -type f -name '*.txt')
方法3:exec ls -l {} ;# {}exec前面命令结果,;表示结尾。
[root@oldboy-01 oldboy]# find /oldboy -type f -name '*.txt' -exec sed -i 's#www.etiantian.org#www.oldboy.com#g' {} \;
(8)echo 常见命令参数详解
一行执行多个命令,使用分号;分割
echo -n #取消输出每一行结尾的换行符。
[root@oldboy-01 oldboy]# echo 'oldboy';echo 'oldboy'
oldboy
oldboy
[root@oldboy-01 oldboy]# echo -n 'oldboy';echo 'oldboy'
oldboyoldboy
[root@oldboy-01 oldboy]#
echo -e :支持\n换行,\t是tap键
[root@oldboy-01 oldboy]# echo -e "a\nb\n\tc"
a
b
c
echo -A 显示所有隐藏符号,如换行。
(9)date命令详解
[root@oldboy-01 oldboy]# date +%F
2019-12-15
[root@oldboy-01 oldboy]# date +%Y-%m-%d
2019-12-15
[root@oldboy-01 oldboy]# date +%w
0
[root@oldboy-01 oldboy]# date +%Y-%m-%d:%w
2019-12-15:0
[root@oldboy-01 oldboy]# date +%Y-%m-%d_%w
2019-12-15_0
[root@oldboy-01 oldboy]# date +%H:%M:%S
00:45:04
[root@oldboy-01 oldboy]#
man date
[root@oldboy-01 oldboy]# date -d '1day' +%F
2019-12-16
[root@oldboy-01 oldboy]# date -d '-1day' +%F
2019-12-14
[root@oldboy-01 oldboy]# date -s '20111111 11:11:11'
Fri Nov 11 11:11:11 CST 2011
[root@oldboy-01 oldboy]#
%F:%Y-%m-%d 年-月-日
%T:%H:%M:%S 时:分:秒
%w:周
-d “” 根据你的描述显示日期
-s “” 根据你的描述修改日期
ntpdate 根据时间服务器校对时间。
(10)从root切换到oldboy用户时候,执行ifconfig提示没有命令。
linux运行命令过程
输入命令,linux会在PATH查找,运行,报错
PATH环境变量:
永久环境变量的命令追加到/etc/profile中,source /etc/profile
安装程序在app下:
/app/mysql/bin
/app/mysql/bin/mysql
/app/mysql/bin/mysqldump
将以上命令路径加入到PATH中即可,即可不使用命令绝对路径。
小结:
①PATH是是什么
②如何修改环境变量,PATH
(11)请描述下列路径的内容是做什么的?
/var/log/messages 系统的默认日志
/var/log/secure 用户的登录信息
/etc/fstab 开机时候自动挂载列表,在开机的时候每个磁盘分区对应着什么入口的列表。
/etc/profile 配置环境变量和别名
/var/spool/cron/root 定时任务的配置文件
/etc/hosts 解析主机名,主机名---》ip地址
DNS--->将ip地址和域名进行相互解析。
查找命令位置:
方法1:
which sed #查看命令的绝对路径。
方法2:
find / -type f -name 'awk'
方法3:whiereis 显示命令相关的信息
whereis sed
whereis -b awk
方法4:
locate ls
根据名字,找出文件路径。文件名与文件路径表格,数据库
[root@oldboy-01 oldboy]# touch 555777.log
[root@oldboy-01 oldboy]# locate 555777
[root@oldboy-01 oldboy]# updatedb
[root@oldboy-01 oldboy]# locate 555777
/oldboy/555777.log
[root@oldboy-01 oldboy]#
(12)查看当前哪些用户在线
远程登录的用户:
方法1:w,谁登录了系统,在做什么
[root@oldboy-01 ~]# w
15:41:08 up 11:49, 1 user, load average: 0.05, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 15:37 0.00s 0.19s 0.16s w
系统的负载:系统繁忙程度,如果负载接近cpu核心总数,表示系统较忙。
查看cpu:lscup,cat /pro/memcpu
from:-减号表示本地登录。
[root@oldboy-01 ~]# last
last是谁在什么时候连接到系统,连接了多久。
lastlog显示系统中所有用户的最近一次登录信息。
(13)如何正确关闭和重启机器
①重启
init 6 (不推荐)
shotdown -r 1(1分钟)
shutdown -c(取消正在关闭的操作,1分钟内)
reboot
②关机
init 0
poweroff
shutdown -h
halt :需要手工关闭电源。
(14)linux快捷键
ctrl + a 把光标移动到行首。
ctrl + e 把光标移动到行尾。
ctrl + c 取消当前操作。
ctrl + d logout命令(当前行没有任何内容,退出当前用户)
ctrl + l (小写l),清除屏幕内容,clear
ctrl + u 剪切光标位置至行首的内容。
ctrl + k 剪切光标位置至行尾内容。
ctrl +y 黏贴
ctrl + 左、右,左右移动一个单词。
ctrl + r 搜索使用过的命令==history | grep ...
(15)vim快捷键
把光标移动到第一行,gg
把光标移动到最后一行:G
快速叨叨文件的第100行,100gg,100G
移动光标到行首:0或者^
移动光标到行尾:$
h j k l
左:h
上:l
右:k
下:j
删除光标所在位置的内容到行尾:D
在当前行下一行插入一空行,并进入编辑:o
剪切光标所在位置到行尾内容,然后进入编辑模式:C(大写)
撤销上一次的操作:u
恢复上一次操作:ctrl+r
删除当前行的内容到行尾:dG
复制当前行:yy
剪切(删除)当前行:dd
黏贴:p
搜索:/你要找的内容,继续向下搜索n,向上搜索N。
小结:
补充:vim查询帮助:如:
:h :wq
:h G
三、linux文件权限
linux中权限详解:
权限rwx
如何知道我对某个文件的权限
[root@oldboy-01 ~]# ls -l /etc/hosts
-rw-r--r--. 2 root root 352 Nov 19 2018 /etc/hosts
当前用户:[root@oldboy-01 ~]# whoami
显示当前用户信息:id oldboy
你与这个文件或者目录关系
主人,一家人,陌生人===》id
(一)修改文件的权限和文件的主人
(1)权限的计算
r:4
w:2
x:1
-:0
如:-rw-r--r--:644
(2)修改权限
①使用数字修改
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rw-r--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod 755 oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]#
②使用字符修改
主人:user:u,家人:group:g,默认人:other:o
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rw-r--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod u+x oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod u-x oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rw-r--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod u=x oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
---xr--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod u=rwx oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]#
[root@oldboy-01 oldboy]# chmod 644 oldboy.txt
[root@oldboy-01 oldboy]# chmod ugo+x oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod 644 oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rw-r--r--. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod +x oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 1 root root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chmod 644 oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
修改属主和属组:chown
[root@oldboy-01 oldboy]# chown oldboy.oldboy oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 1 oldboy oldboy 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]# chown .root oldboy.txt
[root@oldboy-01 oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 1 oldboy root 263 Dec 15 00:23 oldboy.txt
[root@oldboy-01 oldboy]#
(3)文件权限详解
环境准备:
[root@oldboy-01 oldboy]# echo -e 'hostname\npwd' > alex.sh
[root@oldboy-01 oldboy]# cat alex.sh
hostname
pwd
[root@oldboy-01 oldboy]#
[root@oldboy-01 oldboy]#
[root@oldboy-01 oldboy]# ll alex.sh
-rw-r--r--. 1 root root 13 Dec 15 16:46 alex.sh
[root@oldboy-01 oldboy]# chown oldboy.oldboy alex.sh
[root@oldboy-01 oldboy]# ll alex.sh
-rw-r--r--. 1 oldboy oldboy 13 Dec 15 16:46 alex.sh
[root@oldboy-01 oldboy]#
使用root用户修改文件权限:
[root@oldboy-01 oldboy]# ll alex.sh
-rw-r--r--. 1 oldboy oldboy 13 Dec 15 16:46 alex.sh
[root@oldboy-01 oldboy]# chmod u=r alex.sh
[root@oldboy-01 oldboy]# ll alex.sh
-r--r--r--. 1 oldboy oldboy 13 Dec 15 16:46 alex.sh
[root@oldboy-01 oldboy]#
使用oldboy进行验证:
[oldboy@oldboy-01 oldboy]$ cat alex.sh
hostname
pwd
[oldboy@oldboy-01 oldboy]$ echo "ls -l /root" >>alex.sh
bash: alex.sh: Permission denied
[oldboy@oldboy-01 oldboy]$ ./alex.sh
bash: ./alex.sh: Permission denied
[oldboy@oldboy-01 oldboy]$
(4)文件权限详解之wx权限
r:读取文件的内容
w修改文件的内容需要r配合,没有r的配合,会清空文件的内容。
x权限执行,需要r的配合。
(5)目录权限详解r权限
r:查看目录里面的内容,ls
w:可以在目录里面创建,删除,重命名文件
x:可以进入(cd)到这个目录。
环境:
mkdir -p /oldboy/alexdir
chown oldboy.oldboy /oldboy/alexdir
touch /oldboy/alexdir/luffy{01..5}.txt
[root@oldboy-01 oldboy]# mkdir -p /oldboy/alexdir
[root@oldboy-01 oldboy]# chown oldboy.oldboy /oldboy/alexdir
[root@oldboy-01 oldboy]# touch /oldboy/alexdir/luffy{01..5}.txt
[root@oldboy-01 oldboy]# ll -d alexdir/
d--xr-xr-x. 2 oldboy oldboy 4096 Dec 15 17:06 alexdir/
[root@oldboy-01 oldboy]# chmod u=x alexdir/
[root@oldboy-01 oldboy]# ll -d alexdir/
d--xr-xr-x. 2 oldboy oldboy 4096 Dec 15 17:06 alexdir/
[root@oldboy-01 oldboy]#
使用oldboy用户进行验证。
小结:
①对于目录来说,r表示查看目录里面内容的权限,ls需要x配合。
②没有x权限,那么显示的时候文件的属性无法显示。
(6)目录权限详解之wx权限
root用户目录下修改wx:
[root@oldboy-01 oldboy]# chmod u=w alexdir/
[root@oldboy-01 oldboy]# ll -d alexdir/
d-w-r-xr-x. 2 oldboy oldboy 4096 Dec 15 17:06 alexdir/
oldboy用户测试:
[oldboy@oldboy-01 oldboy]$ ll -d alexdir/
d-w-r-xr-x. 2 oldboy oldboy 4096 Dec 15 17:06 alexdir/
[oldboy@oldboy-01 oldboy]$ ls alexdir/
ls: cannot open directory alexdir/: Permission denied
[oldboy@oldboy-01 oldboy]$ touch alexdir/zhangsan.txt
touch: cannot touch `alexdir/zhangsan.txt': Permission denied
[oldboy@oldboy-01 oldboy]$ rm -f /alexdir/
rm: cannot remove `/alexdir/': Is a directory
[oldboy@oldboy-01 oldboy]$ rm -f alexdir/luffy02.txt
rm: cannot remove `alexdir/luffy02.txt': Permission denied
[oldboy@oldboy-01 oldboy]$
小结:
①w表示可以在目录中创建,删除文件,重命名文件权限。
②w无法删除,创建文件,w需要x配合
总结:
属性 文件 目录
r 读取文件的内容 查看目录的内容(需要x配合)
w 修改文件的内容(需要r配合) 在目录中创建、删除文件(需要x权限)
x 执行文件(需要r配合) 进入到目录的权限(cd)
(7)网站整体权限规划
删除一个文件,要看你这个文件所在的目录是否有wx权限。
对于文件来说默认什么权限较好:rw-r--r--644
对于目录来说默认什么权限较好:rwxr-xr-x 755
让文件和目录的所属主是root。
网站的程序存在/app/blog目录下
网站需要被运行起来,通过一个傀儡用户运行起来,www
blog目录下面:
文件:644
目录:755
blog目录下面:
/app/blog/..
blog上传目录:rwxr-xr-x 755
小结:
1、网站是通过傀儡用户运行www
2、网站用户上传目录file:644,目录755 www wwww
3、除了上传目录之外,file644,dir755 root root
(8)linux系统默认权限之umask
①根据umask计算出系统默认的权限
[root@oldboy-01 oldboy]# umask
0022
文件的最大权限是666
目录的最大权限是777
根据umask计算文件的默认权限
666-022=644
根据umask计算目录的默认权限
777-022=755
②修改umask
[root@oldboy-01 oldboy]# umask 032
[root@oldboy-01 oldboy]# umask
0032
[root@oldboy-01 oldboy]#
验证:
[root@oldboy-01 oldboy]# touch file032.txt
[root@oldboy-01 oldboy]# mkdir dir0322
[root@oldboy-01 oldboy]# ls -ld file032 dir0322
drwxr--r-x. 2 root root 4096 Dec 15 17:48 dir0322
-rw-r--r--. 1 root root 0 Oct 21 2018 file032
[root@oldboy-01 oldboy]#
根据umask计算文件的默认权限:
666
032
=634
+010
=644
根据umask计算目录的默认权限
777
032
745
根据umask计算出系统默认的权限规则
①对于目录777直接减去umask
②对于文件666减去umask的值,如果umask某一位上是奇数,奇数位需要+1
永久修改/etc/umask 中umask的值。
(9)文件系统属性-文件隐藏属性
设置:chattr:change attribute
a:append,只能追加
i:immutable,无敌的,不可修改的,不可删除。
查看:lssttr:ls attribute
[root@oldboy-01 ~]# chattr +a oldboy.txt
[root@oldboy-01 ~]# echo hello >> oldboy.txt
[root@oldboy-01 ~]# echo hello > oldboy.txt
-bash: oldboy.txt: Operation not permitted
[root@oldboy-01 ~]# rm -f oldboy.txt
rm: cannot remove `oldboy.txt': Operation not permitted
[root@oldboy-01 ~]# mv oldboy.txt /tmp/
mv: cannot move `oldboy.txt' to `/tmp/oldboy.txt': Operation not permitted
[root@oldboy-01 ~]# lsattr oldboy.txt
-----a-------e- oldboy.txt
[root@oldboy-01 ~]# chattr -a oldboy.txt
[root@oldboy-01 ~]# chattr +i oldboy.txt
[root@oldboy-01 ~]# echo hello >> oldboy.txt
-bash: oldboy.txt: Permission denied
(10)linux特殊权限
①suid:作用:运行某一个命令时候相当于这个命令的所有者(root)。
S s -rwsr-xr-x
setuid:
设置方法:chmod u+s /bin/rm 或者chmod 4755 /bin/rm
危险:所有用户运行命令的时候相当于root
passwd命令
②sticky 粘滞位,1777/tmp目录
1任何人都可以在这个目录里创建文件。
2每个人只能管理自己的文件,其他人处理不了。
sgid locate
(11)总结
rwx
chmod
umask
chown
正则表达式
特殊符号
三剑客,grep,sed,awk
快捷键