• 文件管理的相关命令



    2.文件管理之:查看文件内容(cat tac less more head tail tailf grep ...)
    ----------------------------------------------cat #查看文件内容
    # cp /etc/passwd ./pass
    # cat pass
    # cat -n pass #-n显示行号
    # cat -A pass #查看文件的特殊符号,比如文件中存在tab键


    #cat >> longjiping.txt <<EOF #追加数据(扩展了解)
    test
    EOF
    1、cat f1.txt,查看f1.txt文件的内容。
    2、cat -n f1.txt,查看f1.txt文件的内容,并且由1开始对所有输出行进行编号。
    3、cat -b f1.txt,查看f1.txt文件的内容,用法与-n相似,只不过对于空白行不编号。
    4、cat -s f1.txt,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
    5、cat -e f1.txt,在输出内容的每一行后面加一个$符号。
    6、cat f1.txt f2.txt,同时显示f1.txt和f2.txt文件内容,注意文件名之间以空格分隔,而不是逗号。
    7、cat -n f1.txt>f2.txt,对f1.txt文件中每一行加上行号后然后写入到f2.txt中,会覆盖原来的内容,文件不存在则创建它。
    8、cat -n f1.txt>>f2.txt,对f1.txt文件中每一行加上行号后然后追加到f2.txt中去,不会覆盖原来的内容,文件不存在则创建它。

    创建文件以及写入文件内容的用法:
    [root@beua ~]# cat >1.txt<<EOF
    > hello,my name is longjiping
    > EOF

    *注意:创建文件的时候要设置文件结束标志,也就是<<EOF,可以把EOF换成别的字符,注意是大小写敏感的,
    当文件内容写完之后要输入结束标志EOF,这时命令会正确结束,表示成功创建文件并且写进内容。
    追加文件内容的用法:
    注意:与创建文件内容不同的是符号单边号>变成了双边号>>。
    -----------------------------------------------------
    #wc 命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。
           - c 统计字节数。
      - l 统计行数。
      - w 统计字数。
            这些选项可以组合使用。一般统计字数用wc -l
      输出列的顺序和数目不受选项的顺序和数目的影响。
    ----------------------------------------------tac 倒序查看文件
    # tac pass

    ----------------------------------------------less 查看大文件
    # less /etc/services #使用光标按行上下翻动,空格进行翻页,q退出

    ----------------------------------------------more 查看大文件(显示查看百分比)
    # more /etc/services #回车按上下翻动,空格进行翻页,q退出


    ----------------------------------------------head 查看文件头部内容,默认前十行
    # head /etc/passwd          #查看文件头部10行内容内容 
    # head -n5 /etc/passwd         #指定查看头部第几行

    ----------------------------------------------tail 查看文件尾部内容,默认最后十行
    # tail /etc/passwd            #查看文件尾部10行内容 
    # tail -f /var/log/messages      #-f查看文件尾部的变化
    # tailf /var/log/messages        #查看文件尾部的变化
    ----------------------------------------------grep过滤文件内容
    # grep "^root" pass          #查找pass文件中以root开头的行
    # grep "bash$" pass           #查找pass文件中以bash结尾的行
    # grep "failure" /var/log/secure             #过滤含有failure的行
    # grep -i "ftp" pass         #过滤含有ftp的行,不分大小写
    # grep -Ei "sync$|ftp" pass       #过滤多个内容用-E
    # grep -n -A 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,并同时打印它的下2行
    # grep -n -B 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,并同时打印它的上2行
    # grep -n -C 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,并同时打印它的上下2行


    3.文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)
    ----------------------------------------wget、curl联网下载文件----------------------------------------
    CentOS 7
    yum install wget -y #默认系统最小化安装则没有该命令


    wget http://mirrors.aliyun.com/repo/Centos-7.repo #下载互联网上的文件至本地
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    #将阿里云的centos-7.repo下载到/etc/yum.repos.d/并改名为CentOS-Base.repo -O参数指定


    curl http://mirrors.aliyun.com/repo/Centos-7.repo #仅查看这个url地址的文件的内容
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    # curl www.baidu.com > 1.html #将curl到的内容重新的写入到一个文件中.
    # curl -o 2.html www.baidu.com #使用-o参数将文件保存到指定的位置


    请下载一个图片至于/opt目录下(不要修改名称),最少使用2中方式, URl地址为: http://fj.xuliangwei.com/public/ks.jpeg

    1.最建议的方法是wget
    [root@www ~]# cd /opt
    [root@www opt]# wget http://fj.xuliangwei.com/public/ks.jpeg

    [root@www ~]# wget -O /opt/ks.jpeg http://fj.xuliangwei.com/public/ks.jpeg

    2.curl
    [root@www ~]# curl -o /opt/ks2.jpeg http://fj.xuliangwei.com/public/ks.jpeg

     

    -----------------------rzsz上传下载文件(Windows->Linux)----------------------------------------
    # yum install lrzsz -y #不安装软件则没有该命令
    # rz #只能上传文件文件上传,不支持上传大于4个G文件,同时也不支持上传目录,不支持断点续传
    # sz filename #只能下载文件(不能下载目录)


    ------------------------------------------------------------------------------
    wget curl #上互联网下载文件
    rz sz #Windows上传文件和下载文件至Linux服务器上

     

    4文件管理之:文件或命令查找(locate、which、whereis、find)

    ----------------------------------------文件查找----------------------------------------
    # locate /etc/sh #搜索etc目录下所有以sh开头的文件,全部列出来
    # locate -i /etc/sh #搜索etc目录下,所有以sh开头的文件,忽略大小写


    ----------------------------------------命令查找----------------------------------------
    1.# which ls #查找ls命令的绝对路径
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 上这些路径中查找命令
    # whereis ls #查找命令的路径、帮助手册、等
    2.# whereis -b ls #仅显示命令所在的路径
    3.# type -a ls #查看命令的绝对路径(包括别名)
    三种方法查询cd命令所在的绝对路径
    which cd
    whereis -b cd
    type -a cd

     

    5.文件管理之:字符处理命令(sort、uniq、cut、sed、grep、awk、wc、)
    ----------------------------------------sort排序----------------------------------------
    在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。

    sort [OPTION]... [FILE]...
    # -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3)

    #1.首先创建一个文件,写入一写无序的内容
    [root@beua ~]# cat >> file.txt <<EOF
    b:3
    c:2
    a:4
    e:5
    d:1
    f:11
    EOF

    #2.使用sort下面对输出的内容进行排序
    [root@beua ~]# sort file.txt
    a:4
    b:3
    c:2
    d:1
    e:5
    f:11

    #结果并不是按照数字排序,而是按字母排序。
    #可以使用-t指定分隔符, 使用-k指定需要排序的列。
    [root@beua ~]# sort -t ":" -k2 sort.txt
    d:1
    f:11 #第二行为什么是11?不应该按照顺序排列?
    c:2
    b:3
    a:4
    e:5

    #按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。
    #如果想要按照数字的方式进行排序, 需要使用 -n参数。
    [root@beua ~]# sort -t ":" -n -k2 p.txt
    d:1
    c:2
    b:3
    a:4
    e:5
    f:11

    #测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序
    [root@beua ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt
    ----------------------------------------uniq去重----------------------------------------
    如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用)。

    uniq [OPTION]... [INPUT [OUTPUT]]
    #选项:-c 计算重复的行

    #1.创建一个file.txt文件:
    [root@xuliangwei ~]# cat >> file1.txt <<EOF
    abc
    123
    abc
    123
    EOF
    #2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
    [root@beua ~]# sort file.txt
    123
    123
    abc
    abc
    #3.使用uniq去除相邻重复的行
    [root@beua ~]# cat file.txt |sort|uniq
    123
    abc
    #4.-c参数能统计出文件中每行内容重复的次数
    [root@beua ~]# cat file.txt |sort|uniq -c
    2 123
    2 abc


    请统计分析如下日志,统计访问量最高的IP,打印前top10的IP.
    [root@beua ~]# awk '{print $1}' docs.xuliangwei.log |sort |uniq -c|sort -n|tail -5
    101 139.226.172.91
    159 139.226.173.216
    347 139.226.173.12
    446 123.207.173.97
    495 114.92.159.100


    ----------------------------------------cut截取字段----------------------------------------
    cut OPTION... [FILE]...
    #选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算)

    echo "Im xlw, is QQ 552408925" >file.txt #过滤出文件里 xlw以及552408925


    [root@beua ~]# cut -d " " -f 2,5 file.txt |awk -F "," '{print $1,$2}'
    [root@beua ~]# awk '{print $2,$5}' file.txt |awk -F "," '{print $1,$2}'
    [root@beua~]# awk -F '[, ]' '{print $2,$6}' file.txt
    [root@beua ~]# awk -F '[, ]+' '{print $2,$5}' file.txt #参考
    [root@beua ~]# cut -d " " -f 2,5 file.txt|sed 's#,##g'

     

    取列:cut awk(推荐)
    替换:sed
    取行:grep awk
    #实现上述题目几种思路
    # cut -d " " -f2,5 file.txt
    # cut -d " " -f2,5 file.txt |sed 's#,##g'
    # sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
    # awk '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
    # awk -F "[, ]" '{print $2,$6}' file.txt
    # awk -F '[, ]+' '{print $2,$5}' file.txt

    过滤,取行
    # awk '/root/' /etc/passwd
    # awk '/^root/' /etc/passwd


    ----------------------------------------wc统计行号----------------------------------------
    wc [OPTION]... [FILE]...
    #选项:-l显示文件行数 -c显示文件字节 -w显示文件单词

    # wc -l /etc/fstab #统计/etc/fstab文件有多少行
    # wc -l /etc/services #统计/etc/services 文件行号

    #扩展方法
    # grep -n "." /etc/services | tail -1
    # cat -n /etc/services | tail -1

     

    习题:过滤出/etc/passwd以nologin结尾的.并统计有多少行
    # grep "nologin$" /etc/passwd | wc -l

    ----------------------------------------------------------sed流编辑器------------------------------

    sed                #流编辑器
    -n                  #取消文件默认输出
    -i                   #讲sed的操作写入至文件中
    -r                  #支持小括号的匹配方式
    s###g           #g贪婪匹配
    sed -n '2p'    #打印文件的第二行,并取消默认输出
    sed 's###g'  #替换的语法格式(在中可以写一些通配符.*$^)
    sed -n '2s#root#test#gp'    #打印文件的第二行,并将root替换为test(模拟执行)
    sed -r 's#(root)(bin)(test)#1 2 3#g'     #后向引用

    # sed -n '1p' /etc/passwd
    # sed -n '1p' /etc/passwd|sed -r 's#(root)(.*)(/bin/bash)#321#g'                    #取行和换顺序
    # sed -n '2p' /etc/passwd|sed -r 's#(^.*1:)(.*)(/.*:)(/.*)(/.*)#14325#g'    #取行和后向引用

     

    ---------------------------------------------------------练习题-------------------------------------------------------

    习题:使用ifconfig获取当前的IP地址,使用sedawkgrep取当前服务器的ens32的IP地址
    yum install net-tools -y #没有ifconfig请安装这个软件包
    1.我要取的值在哪
    2.如何去缩小范围,缩小到行,精确到列(想要的值)
    # ifconfig ens32|grep "inet "|cut -d " " -f 10
    # ifconfig ens32|grep "inet "|awk '{print $2}'
    # ifconfig ens32|awk '/inet /'|awk '{print $2}'
    # ifconfig ens32|awk '/inet /'|sed -r 's#^.*et (.*) net.*$#1#g' (扩展)
    awk取行
    # ifconfig ens32|awk 'NR==2 {print $2}' #NR代表的是行号,NR==2 代表要取输出结果的第二行
    sed取行
    # ifconfig ens32|sed -n '2p'|awk '{print $2}'
    # ifconfig ens32|sed -rn '2s#^.*et (.*) net.*$#1#gp' (扩展学习)


    习题: 分析如下日志,统计每个域名被访问的次数。
    [root@student tmp]# cat >> web.log <<EOF
    http://www.xuliangwei.com/index.html
    http://www.xuliangwei.com/1.html
    http://post.xuliangwei.com/index.html
    http://mp3.xuliangwei.com/index.html
    http://www.xuliangwei.com/3.html
    http://post.xuliangwei.com/2.html
    EOF

    1.提取域名
    2.对域名进行排序
    3.对域名进行去重,然后统计
    # awk -F "/" '{print $3}' web.log |sort |uniq -c
    # cat web.log |cut -d "/" -f3|sort|uniq -c
    # sed -r 's#^.*//(.*)/.*$#1#g' web.log #扩展


    习题:将该/etc/sysconfig/selinux文件中的SELINUX=enforcing替换为SELINUX=disabled

    1.提取需要替换的内容
    2.模拟演练
    3.真的修改
    [root@beua ~]# sed 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
    [root@beua ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux


    习题:将如下文件的内容root和/bin/bash位置交换
    [root@beua ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    # awk '/^root/' /etc/passwd|awk -F ":" '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}'
    # awk -F ":" '/^root/ {print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd



  • 相关阅读:
    BZOJ 2599: [IOI2011]Race [点分治]
    BZOJ 2152: 聪聪可可 [点分治]
    POJ1741Tree [点分治]【学习笔记】
    论避免手写堆的各种姿势(1)
    BZOJ 1835: [ZJOI2010]base 基站选址 [序列DP 线段树]
    Jmeter参数化
    Manjaro Linux执行某些命令缺少libtinfo.so.5问题
    Nmon的安装及使用
    JMeter性能测试-服务器资源监控插件详解
    linux 服务器性能监控(一)
  • 原文地址:https://www.cnblogs.com/longren/p/10726063.html
Copyright © 2020-2023  润新知