文件属性、正则表达式、文件权限

文件属性、正则表达式、文件权限

一、文件属性

[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

快捷键

posted @ 2019-12-16 01:06  cuiyongchao007  阅读(294)  评论(0编辑  收藏  举报