zoukankan      html  css  js  c++  java
  • 每日一题20180326

    一、问题

    1.1 统计脚本执行时间

    如何统计脚本执行的时间?

    1.2 让rm命令失效

    要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效。

    [root@oldboy oldboy]# rm -f passwd
    Do not use rm command.
    

    1.3 删除文件

    删除/tmp/oldboy/下除passwd以外的其他文件。

    1.4 打印

    请打印/etc/passwd文件中的第2-5行

    1.5 调换列

    调换passwd文件里root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?

    例:

    默认:root:x:0:0:root:/root:/bin/bash
    修改后:/bin/bash:x:0:0:root:/root:root
    

    1.6 替换

    把/tmp/oldboy目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy。

    1.7 查找

    查找/tmp/oldboy下所有7天以前以log结尾的大于1M的文件移动/tmp下

    二、答案

    2.1

    # 说明
    # real指命令从开始到结束的时间
    # user指用于执行进程所花费的时间
    # sys指在内核中执行系统调用所花费的时间,进程使用CPU的时间
    

    2.2

    echo 'alias rm="echo Do not use rm command."' >> /etc/profile
    source /etc/profile
    

    思路:通过设置rm别名实现

    2.3

    准备数据:

    rm -rf /tmp/oldboy
    mkdir /tmp/oldboy
    cp /etc/passwd /tmp/oldboy/
    touch /tmp/oldboy/tmp{1..5}.txt
    touch /tmp/oldboy/tmp{1..5}.log
    tree /tmp/oldboy/
    

    答案:

    # 使用xargs
    find /tmp/oldboy/ -type f ! -name passwd | xargs rm -f
    # 使用find参数
    find /tmp/oldboy/ -type f ! -name passwd -exec rm -f {} ;
    

    分析:

    -type f 指定只查找文件
    -name passwd 指定查找名为passwd,加!表示排除passwd
    xargs 多行转1行
    rm -f 强制删除
    
    find的-exec参数
    {} ;   这是固定写法
    

    2.4

    # awk
    awk 'NR>1 && NR<6{print NR, $0}' /etc/passwd
    # sed
    sed -n '2,5p' /etc/passwd
    # head/tail
    head -5 /etc/passwd | tail -4
    

    分析:

    # awk
    NR是awk的内置变量表示行数
    # sed
    参考 sed速查手册
    

    2.5

    awk -F: '{print $7FS$2FS$3FS$4FS$5FS$6FS$1}' /etc/passwd
    

    分析:

    FS是awk的内置变量表示列之间的分隔符
    

    2.6

    准备数据:

    rm -rf /tmp/oldboy
    mkdir /tmp/oldboy
    touch /tmp/oldboy/{1..2}.txt
    touch /tmp/oldboy/{1..2}.log
    echo 'hello oldgirl' > /tmp/oldboy/1.txt
    echo 'hello oldgirl' > /tmp/oldboy/2.txt
    echo 'hello oldgirl' > /tmp/oldboy/1.log
    echo 'hello oldgirl' > /tmp/oldboy/2.log
    find /tmp/oldboy/ -type f | xargs -I {} cat {}
    

    答案

    find /tmp/oldboy/ -type f -name '*.txt' | xargs sed -i 's/oldgirl/oldboy/g'
    
    # 查看
    find /tmp/oldboy/ -type f -exec cat {} ;
    

    分析:使用sed的替换功能

    2.7

    模拟环境:

    rm -rf /tmp/oldboy
    mkdir /tmp/oldboy
    dd if=/dev/zero of=/tmp/oldboy/test1.log bs=1k count=1023
    dd if=/dev/zero of=/tmp/oldboy/test2.log bs=1k count=1024
    dd if=/dev/zero of=/tmp/oldboy/test3.log bs=1k count=1025
    dd if=/dev/zero of=/tmp/oldboy/test4.log bs=1k count=1025
    
    touch /tmp/oldboy/test3.log -m -d '20180101'
    

    答案:

    find /tmp/oldboy/ -type f -name '*.log' -size +1M -mtime +7 -exec mv {} /tmp ;
    

    分析:

    # 查看文件的时间
    stat test1.log
    atime 文件最近访问的时间
    mtime 文件的内容最近修改的时间
    ctime 文件属性最近修改的时间
    当文件的目录被修改或文件的所有者、权限等被修改时ctime也会更新
    # 修改文件的时间 mtime
    touch test1.log -m -d '20180101'
    

    三、参考

  • 相关阅读:
    php使用时间戳保存时间的意义
    php输出控制函数存在的意义
    php中foreach使用引用的陷阱
    mac下php添加openssl扩展
    gitlab配置自动同步
    lnmp集成环境tp nginx vhost配置
    上传文件中文文件名乱码的解决方法以及iconv函数的使用
    php返回数据格式
    怎样让Git忽略当前已经更改的文件
    connect() php-cgi.sock failed (2: No such file or directory)
  • 原文地址:https://www.cnblogs.com/okokabcd/p/8654145.html
Copyright © 2011-2022 走看看