zoukankan      html  css  js  c++  java
  • 文件属性、正则表达式、文件权限

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

    一、文件属性

    [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等

    强制删除文件: m -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

    :表示回车换行。

    *号:前一个字符连续出现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 :支持 换行, 是tap键

    [root@oldboy-01 oldboy]# echo -e "a
    b
    	c"
    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
    pwd' > 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

    快捷键

  • 相关阅读:
    MVC学习笔记(六)---遇到的小问题汇总
    C# 手写将对象转换为Json方法
    C# 使用SuperSocket
    C#生成/调用动态链接库
    Winform串口编程---接收数据demo(VSPD虚拟串口)
    js获取浏览器内核判断终端(是QQ打开还是QQ浏览器打开)
    工具函数(获取url , 时间格式化,随机数)
    node和npm的安装和镜像源的修改
    atom常用插件
    查看并关闭端口号
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12046841.html
Copyright © 2011-2022 走看看