• 技术文章 >运维 >linux运维

    Linux高频面试问题:查找大文件并安全清除

    青灯夜游青灯夜游2022-03-21 10:13:43转载93
    本篇文章给大家分享一个Linux 线上面试高频问题:如何查找大文件并安全地清除?,给大家分析分析,大家也可以对照着自己分析一下,希望对大家有所帮助!

    1 案例描述?

    2 命令一(目录统计排序最佳命令)

    (这里以当前目录 ./ 为例,统计 top5)

    【du -k --max-depth=1 ./ |sort -nr|head -n5】

    [root@test-001 /]# du -k --max-depth=1 ./ |sort -nr|head -n5
    137450839518./
    6785876./data
    2182577./usr
    1830341./home
    446856./var
    //du -k # 显示目录或文件大小时,以 kB 为单位;
    //du --max-depth=1 [目录] # 只显示指定目录下第一层目录(不含单个文件)的大小;
    //sort -nr # 以行为单位,根据数字大小从大到小排序;
    //head -n5 # 显示内容的开头 5 行,这里显示就是 top5 内容;

    3 命令二(最实用,目录和文件一起统计排序)

    (这里以当前目录 ./ 为例,统计 top5)

    (1)命令详情和说明

    【du -sk * ./ | sort -nr | head -n5 | awk -F'\t' '{if(1024 * 1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024 * 1024) {printf "%.2fT\t\t %s\n", $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) {printf "%.2fG\t\t %s\n", $1/(1024 * 1024), $2} else if (1024 * 1024 > $1 && $1 >= 1024) {printf "%.2fM\t\t %s\n", $1/1024, $2} else {printf "%sk\t\t %s\n", $1, $2}}' 】

    [root@test-001 /]# du -sk * ./ | sort -nr | head -n5 | awk -F'\t' '{if(1024 * 1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024 * 1024) {printf "%.2fT\t\t %s\n", $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) {printf "%.2fG\t\t %s\n", $1/(1024 * 1024), $2} else if (1024 * 1024 > $1 && $1 >= 1024) {printf "%.2fM\t\t %s\n", $1/1024, $2} else {printf "%sk\t\t %s\n", $1, $2}}'
    7.13G data
    2.17G usr
    1.75G home
    447.04M var
    408.50M run
    //du -sk * # 显示当前目录下每个文件夹和文件的大小以KB为单位(最常用),s表示汇总,k是以KB为统计单位;
    //./ #当前目录下
    //sort -nr # 以行为单位,根据数字大小从大到小排序;
    //awk -F'\t'# 以水平制表符进行分割,后面的程序就是进行换算单位,格式化输出成易懂的形式;

    (2)du、head、sort、awk 详细说明参考已有文章附录

    (3)Linux 中 printf 命令使用参考

    // Linux 中 printf 命令使用参考
    // https://www.linuxprobe.com/linux-printf-example.html
    '{
        if(1024 * 1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024 * 1024) 
        {
            printf "%.2fT\t\t %s\n", $1/(1024 * 1024 * 1024), $2
        } 
        else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) 
        {
            printf "%.2fG\t\t %s\n", $1/(1024 * 1024), $2
        } 
        else if (1024 * 1024 > $1 && $1 >= 1024) 
        {
            printf "%.2fM\t\t %s\n", $1/1024, $2
        } 
        else 
        {
            printf "%sk\t\t %s\n", $1, $2
        }
    }'

    4 如何安全使用 rm 命令删除文件?

    (1)rm 命令有哪些坑?

    cd ${log_path}
    rm -rf *

    目的是:进入到日志目录,然后把日志都删除。隐患:当目录不存在时,悲剧就发生了!

    (2)如何安全使用 rm 命令?

    cd ${log_path}
    rm -rf *

    改用逻辑与 && 进行连接,合并成一句,前半句逻辑失败,后半句命令不执行:

    ```shell

    cd ${log_path} && rm -rf *

    完整的日志清理 shell 脚本如下:

     ```shell
    #!/bin/bash
    base_home="/home/apps"
    log_path=${base_home}/logs
    cd ${log_path} && rm -rf *

    5 磁盘使用率报警,却查不到具体的大文件?

    (1)问题情景

    (2)排查思路

    1.pnglsof(List Open Files) 用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 命令需要访问核心内存和各种文件,所以需要root 用户权限执行。

    (3)占用磁盘空间释放

    重启下进程所指的服务,占用的磁盘空间即可释放掉。线上生产操作一定要谨慎,不要直接 kill 掉进程,评估看是否有进程服务自身的重启名命令,以及评估服务是否可以重启。

    (4)备注附录

    6 生产环境常用的安全清理大文件命令

    7 小结

    相关推荐:《Linux视频教程

    以上就是Linux高频面试问题:查找大文件并安全清除的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:今日头条,如有侵犯,请联系admin@php.cn删除
    专题推荐:Linux 面试题
    上一篇:linux内核和发行版有什么区别 下一篇:linux中boot是什么
    PHP编程就业班

    相关文章推荐

    • linux中sshd是什么• linux执行ls会引起哪些系统调用• linux编辑文件的命令是什么• linux怎么看某个端口是否打开• linux文件创建命令是什么• linux下信号量和互斥锁的区别是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网