4.Linux文件管理

七言 2025-8-1 125 8/1

[toc]

Linux文件管理

Linux文件管理命令

touch -创建文件

touch newfile.txt
  • 如果newfile.txt不存在,则会创建一个空文件
  • 如果文件已存在,touch会将文件的 访问时间(atime)和 修改时间(mtime)更新为当前系统时间

    cp -复制文件/目录

    1. 复制文件 复制文件到目录:cp file.txt backup/ 复制文件并重命名:cp source.txt destination.txt 复制文件到目标目录:`cp .jpg ~/Pictures/`
    2. 复制目录 需要使用-r-R参数(递归复制目录及其内容) -r:若源中有子目录,则将子目录下的文件及目录亦全部复制至目的目录
      cp -r Documents/ Backup/     # 递归复制整个目录
      cp -rv logs/ archive/        # 递归复制并显示过程

      mv -移动/重命名文件

      语法

      mv [选项] 源文件... 目标路径

  • 如果目标目录存在,则是复制到该目录下
  • 如果目标目录不存在,则是改名
    1. 重命名文件
      mv oldname.txt newname.txt   # 文件重命名(同一目录下)
      mv Project/ archive/NewProject/      # 将整个目录移动到新位置,如果目标目录不存在,则重命名目录

    2. 移动文件到目录
      mv file.txt ~/Documents/     # 移动文件到目录(保留原名)
      mv *.jpg Pictures/           # 移动所有.jpg文件到Pictures目录

    3. 移动文件并重命名
      mv report.log /backup/final_report.log  # 移动文件到目录并重命名

    4. 交互模式(避免误覆盖)
  • -i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件
    mv -i important.txt ~/Documents/

    如果目标存在,会提示:

    mv: overwrite '/home/user/Documents/important.txt'? 

    1. 强制覆盖(无确认)
  • -f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用
    mv -f temp.log /var/log/

    cat -查看小文件内容

  • 避免直接用 cat 查看超大文件(如日志文件),可能导致终端卡死
  • -n:显示行数,由第一行开始对所有输出的行数编号
  • -b:与-n相似,只不过对于空白的行不进行编号
    1. 查看单个文件内容
      cat file.txt # 在终端显示 `file.txt` 的全部内容

    2. 同时查看多个文件内容
      cat file1.txt file2.log # 先显示 `file1.txt` 的内容,紧接着显示 `file2.log` 的内容(无分隔)

    3. 显示文件内容也添加行号(-n)
      cat -n server.log

      输出示例:

           1  [INFO] Server started
           2  [DEBUG] Listening on port 8080
           3                      # 空行也会编号
           4  [WARN] Disk space low

    4. 创建新文件(覆盖写入)
      cat > newfile.txt # 输入内容后按 `Ctrl + D` 保存退出。若文件已存在,原有内容会被覆盖!

    5. 合并多个文件内容并输出到新文件
      cat part1.txt part2.txt > complete.txt # `complete.txt` 包含 `part1.txt` 和 `part2.txt` 的全部内容(按顺序合并)

    6. 将一个文件内容追加到另一个文件末尾
      cat updates.log >> master.log # `updates.log` 的内容被添加到 `master.log` 的末尾

      more -分页查看,往后翻页

  • more是分页后只能往后翻页,翻到最后一页自动结束返回命令行
  • 回车是下一行,空格是下一页
    1. 基本查看
      more /var/log/syslog # 查看系统日志文件,文件内容会一屏一屏显示,按 空格键 看下一屏,按 `q` 退出

    2. 从第50行开始查看
      more +50 report.txt 

      less -分页查看,前后翻页

  • less是分页查看文件内容,往前往后都能翻页 选项 说明
    -N 显示行号
    -S 不换行,超长行截断
    -i 搜索时忽略大小写
    -I 搜索时完全忽略大小写
    -F 文件内容不足一屏时直接退出
    -X 不初始化终端(保留原始屏幕内容)
    +F 类似 tail -f,实时追踪文件变化
    +pattern 打开文件后直接跳转到匹配 pattern 的位置

  • 以下为交互命令,在less中按键 按键 功能
    空格 / PageDown 向下翻一屏
    b / PageUp 向上翻一屏
    回车 / j 向下滚动一行
    k 向上滚动一行
    /pattern 向下搜索 pattern
    ?pattern 向上搜索 pattern
    n 重复上一次搜索(同方向)
    g 跳转到文件开头
    G 跳转到文件末尾
    50g 跳转到第 50 行
    :n 打开下一个文件(多个文件时)
    :p 打开上一个文件
    q 退出 less

    1. 查看文件(带行号)
      less -N /var/log/syslog # 显示文件内容,左侧显示行号

    2. 打开时定位到关键词位置
      less +/error app.log # 直接跳转到`error`首次出现的位置

    3. 禁止自动换行(查看长行)
      less -S longfile.txt # 长行不换行显示,用左右箭头键横向滚动查看

    4. 实时监控日志文件更新
      less +F /var/log/nginx/access.log # 动态显示新增的日志(按`Ctrl+C` 退出监控,再按 `F` 恢复)

      head -显示开头部分内容

  • head用于显示文件开头部分的内容(默认显示前10行)
  • -n:参数为指定显示的行数
    1. 显示前5行
      head -n 5 file.txt 
      # 或简写
      head -5 file.txt

    2. 显示多个文件(自动标注文件名)
      head -3 file1.txt file2.txt

      输出:

      ==> file1.txt <==
      Line1_file1
      Line2_file1
      Line3_file1
       
      ==> file2.txt <==
      Line1_file2
      Line2_file2
      Line3_file2

      tail -显示末尾内容

  • tail用于查看文件末尾内容(默认显示最后10行)
  • -f:实时监控文件新增内容(日志监控)
  • -f 适用于持续写入的日志文件,按 Ctrl+C 退出
    1. 查看指定行数(末尾5行)
      tail -n 5 filename.txt
      # 简写形式
      tail -5 filename.txt

    2. 从第 20 行开始显示到文件末尾
      tail -n +20 filename.txt

    3. 实时监控日志文件(常用!)
      tail -f /var/log/syslog

      du -估算文件/目录的磁盘使用空间

  • du用于估算文件和目录的磁盘使用空间

    基本语法

    du [选项] [文件或目录...]
  • 如果不指定文件或目录,du 会报告当前工作目录及其所有子目录的磁盘使用情况
  • 可以指定一个或多个文件或目录路径 选项 说明
    -h 人类可读 格式显示(自动 KB、MB、GB)
    -s 仅显示指定目录的 总计大小,不显示其子目录的信息
    -a 显示 所有文件 的磁盘使用情况
    -c 显示 总计大小(在最后一行显示)
    -d N--max-depth=N 只显示 指定层级 的目录大小,显示目录深度不超过 N 层
    --time 显示目录或文件的 最后修改时间

    1. 查看当前目录及其所有子目录的大小(人类可读格式)
      du -h # 输出会列出当前目录下每个子目录的大小及其内容,最后是当前目录的总大小

    2. 仅查看当前目录的总大小(汇总)
      du -sh # 最常用的命令之一,快速知道一个目录占了多少空间

    3. 查看指定目录及其下一级子目录的大小(人类可读)
      du -h -d 1 /path/to/directory  # 或者使用 --max-depth=1

    4. 查看指定目录下所有文件(而不仅仅是目录)的大小(人类可读)
      du -ah /path/to/directory

    5. 结合 sort 找出当前目录下最大的子目录/文件
      du -h -d 1 | sort -hr

  • du -h -d 1: 列出当前目录下所有一级子项的大小(人类可读)
  • sort -hr: 对结果进行排序 -h: 按人类可读的数字大小排序(正确识别 K, M, G) -r: 反向排序(从大到小)

    lsof -列出当前系统被打开的文件

  • lsof用于列出当前系统已被打开的文件 选项 说明
    -c <进程名> 显示指定进程名打开的文件
    `-p
    ` 显示指定进程ID打开的文件
    -u <用户名> 显示指定用户打开的文件
    -i 列出所有网络连接
    -i :<端口号> 查看指定端口的连接
    -a 多个条件"与"关系(默认是"或"关系)
    +D <目录> 递归列出目录下所有被打开的文件
    -t 仅输出进程ID(用于脚本处理)
    -i TCP 仅显示TCP连接
    -r [秒] 重复模式(默认15秒间隔,-r0连续输出)
    -s 显示文件大小(需配合 -i 使用)

    1. 查看某个文件/目录被谁占用
      lsof /path/to/file-or-directory
      # 示例:查看谁在使用 /var/log/syslog
      lsof /var/log/syslog

    2. 按进程名查看(如 nginx)
      lsof -c nginx

    3. 按进程ID(PID)查看
      lsof -p 1234

    4. 按用户查看
      lsof -u root      # 查看root用户打开的文件
      lsof -u www-data  # 查看web用户打开的文件

    5. 查看网络连接
      lsof -i           # 所有网络连接
      lsof -i :80       # 查看80端口占用
      lsof -i TCP       # 所有TCP连接
      lsof -i UDP:53    # 查看53/UDP端口(DNS)

    6. 组合条件查询(用户 + 网络连接)
      lsof -a -u nginx -i  # 用户nginx的网络连接

    7. 递归查看目录下所有打开的文件
      lsof +D /var/log  # 查看/var/log及其子目录被打开的文件

    8. 查看已删除但仍被占用的文件(释放空间)
      lsof | grep deleted  # 找到"deleted"状态的文件

    9. 仅输出进程ID(用于结束进程)
      lsof -t -i :8080     # 输出占用8080端口的PID
      kill $(lsof -t -i :8080)  # 强制结束占用端口的进程

      chmod -更改文件/目录权限

  • chmod用于更改文件或目录访问权限的核心命令
  • 权限: r:读取文件内容 / 列出目录内容,=4,读权限 w:修改文件内容 / 在目录中创建、删除、重命名文件,=2,写权限 * x:作为程序执行文件 / 进入目录,=1,执行权限
  • 用户类别: u (user): 文件或目录的所有者 g (group): 文件或目录所属组的成员 o (others): 既不是所有者,也不属于文件组的其他所有用户 a (all): 代表 u, g, o 三者,即所有用户

    语法

    chmod [选项]... 符号模式 文件...
    chmod [选项]... 八进制模式 文件...

  • 主要选项: -R:递归地更改目录及其下所有文件和子目录的权限 -v:显示每个处理的文件信息(更改了权限的文件)

    指定权限模式

    1. 符号模式
  • 使用字母 u, g, o, a 和 r, w, x,结合操作符 +, -, =
  • 操作符 +:添加指定的权限 -:移除指定的权限 * =:精确设置权限(覆盖原有的权限)
  • 格式:[用户类别...][操作符...][权限字符...]
  • 省略用户类别:默认等同于a(所有用户)
  • 示例: chmod u+x file.txt :给文件/目录的所有者 (u) 添加 (+) 执行(x)权限 chmod go-w file.txt : 从组 (g) 和其他人 (o) 移除 (-) 写 (w) 权限 chmod a=rw file.txt : 为所有用户 (a) 精确设置 (=) 读 (r) 和写 (w) 权限(移除执行权限) chmod o= file.txt : 精确设置其他人 (o) 的权限为空(移除所有权限:rwx chmod g=r,o= file.txt : 给组 (g) 设置只读 (r),其他人 (o) 没有任何权限 chmod u+x,g-w,o=r file.txt : 给所有者加执行权限,从组移除写权限,给其他人设置只读权限
    1. 八进制/数值模式
  • 使用三位或四位八进制数(0-7)表示权限。每位数字代表一个用户类别(所有者、组、其他人)的权限组合
  • 权限值 4 = r (读) 2 = w (写) * 1 = x (执行)
  • 计算方式:将所需权限对应的数值进行相加,和值即为对应用户类型所具备的权限 7 (4+2+1) = rwx (读 + 写 + 执行) 6 (4+2) = rw- (读 + 写) 5 (4+1) = r-x (读 + 执行) 4 (4) = r-- (只读) 3 (2+1) = -wx (写 + 执行) 2 (2) = -w- (只写) - 很少单独使用 1 (1) = --x (只执行) - 对于目录常用 0 (0) = --- (无权限)
  • 格式:三位数字:[所有者权限][组权限][其他人权限]。有时会看到四位数字,第一位通常用于设置特殊权限,日常使用三位足够
  • 示例: chmod 755 file.sh : 7 (4+2+1) = rwx:所有者拥有读、写、执行权限。 5 (4+1) = r-x:组拥有读、执行权限(无写)。 5 (4+1) = r-x:其他人拥有读、执行权限(无写)
  • 常用示例:
    让脚本可执行(所有者)
    chmod u+x myscript.sh  # 符号模式:给所有者添加执行权限
    chmod 700 myscript.sh  # 数值模式:所有者完全控制(rwx),其他任何人无权限
    chmod +x myscript.sh   # 符号模式(省略用户类别):给所有用户(u, g, o)添加执行权限(可能不安全)

    clear -清屏

  • 清屏,清除当前终端屏幕上的所有内容,让屏幕回到空白状态(只保留命令提示符)

    history -查看历史记录

  • 用于查看、管理和重复执行用户在终端中输入过的命令历史记录
    1. 查看历史记录
      $ history        # 显示全部历史命令(带编号)
      history 20     # 显示最近20条命令

    2. 快速执行历史记录
  • 先用 history 查看命令编号,再进行!相关命令
  • !string 匹配的是命令开头,!?string? 匹配任意位置 方法 作用 示例
    !! 执行上一条命令 sudo !!(用 root 权限重跑上条命令)
    !n 执行编号为 n 的命令 !1024(执行第 1024 条命令)
    !-n 执行倒数第 n 条命令 !-3(执行 3 条前的命令)
    !string 执行最近一条以 string 开头的命令 !vim(执行最近 vim 开头的命令)
    !?string? 执行最近一条包含 string 的命令 !?config?(执行最近包含 config 的命令)

  • 使用示例:
    # 示例 1: 重试上条命令
    $ apt update
     Permission denied
    $ sudo !!  # 等价于 sudo apt update
     
    # 示例 2: 执行特定编号命令
    $ history | grep nginx
     1024  sudo systemctl restart nginx
    $ !1024  # 重新执行 nginx 重启命令
     
    # 示例 3: 执行最近以特定词开头的命令
    $ !ssh  # 执行最近 ssh 开头的命令
     
    # 示例 4: 执行包含特定词的命令
    $ !?log?  # 执行最近包含 "log" 的命令

    1. 清空历史记录
      $ history -c # 清空当前会话的历史记录
- THE END -

七言

8月01日16:04

最后修改:2025年8月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论