4.Linux文件管理

七言 2025-8-1 9 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 : 给所有者加执行权限,从组移除写权限,给其他人设置只读权限
  2. 八进制/数值模式

    • 使用三位或四位八进制数(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" 的命令


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

七言

8月01日16:04

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

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

共有 0 条评论