[toc]
Linux文件管理
Linux文件管理命令
touch -创建文件
touch newfile.txt
- 如果
newfile.txt不存在,则会创建一个空文件 - 如果文件已存在,
touch会将文件的 访问时间(atime)和 修改时间(mtime)更新为当前系统时间cp -复制文件/目录
- 复制文件
复制文件到目录:
cp file.txt backup/复制文件并重命名:cp source.txt destination.txt复制文件到目标目录:`cp .jpg ~/Pictures/` - 复制目录
需要使用
-r或-R参数(递归复制目录及其内容)-r:若源中有子目录,则将子目录下的文件及目录亦全部复制至目的目录cp -r Documents/ Backup/ # 递归复制整个目录 cp -rv logs/ archive/ # 递归复制并显示过程mv -移动/重命名文件
语法
mv [选项] 源文件... 目标路径
- 复制文件
复制文件到目录:
- 如果目标目录存在,则是复制到该目录下
- 如果目标目录不存在,则是改名
- 重命名文件
mv oldname.txt newname.txt # 文件重命名(同一目录下) mv Project/ archive/NewProject/ # 将整个目录移动到新位置,如果目标目录不存在,则重命名目录 - 移动文件到目录
mv file.txt ~/Documents/ # 移动文件到目录(保留原名) mv *.jpg Pictures/ # 移动所有.jpg文件到Pictures目录 - 移动文件并重命名
mv report.log /backup/final_report.log # 移动文件到目录并重命名 - 交互模式(避免误覆盖)
- 重命名文件
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件mv -i important.txt ~/Documents/如果目标存在,会提示:
mv: overwrite '/home/user/Documents/important.txt'?- 强制覆盖(无确认)
- -f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用
mv -f temp.log /var/log/cat -查看小文件内容
- 避免直接用 cat 查看超大文件(如日志文件),可能导致终端卡死
-n:显示行数,由第一行开始对所有输出的行数编号-b:与-n相似,只不过对于空白的行不进行编号- 查看单个文件内容
cat file.txt # 在终端显示 `file.txt` 的全部内容 - 同时查看多个文件内容
cat file1.txt file2.log # 先显示 `file1.txt` 的内容,紧接着显示 `file2.log` 的内容(无分隔) - 显示文件内容也添加行号(-n)
cat -n server.log输出示例:
1 [INFO] Server started 2 [DEBUG] Listening on port 8080 3 # 空行也会编号 4 [WARN] Disk space low - 创建新文件(覆盖写入)
cat > newfile.txt # 输入内容后按 `Ctrl + D` 保存退出。若文件已存在,原有内容会被覆盖! - 合并多个文件内容并输出到新文件
cat part1.txt part2.txt > complete.txt # `complete.txt` 包含 `part1.txt` 和 `part2.txt` 的全部内容(按顺序合并) - 将一个文件内容追加到另一个文件末尾
cat updates.log >> master.log # `updates.log` 的内容被添加到 `master.log` 的末尾more -分页查看,往后翻页
- 查看单个文件内容
more是分页后只能往后翻页,翻到最后一页自动结束返回命令行- 回车是下一行,空格是下一页
- 基本查看
more /var/log/syslog # 查看系统日志文件,文件内容会一屏一屏显示,按 空格键 看下一屏,按 `q` 退出 - 从第50行开始查看
more +50 report.txtless -分页查看,前后翻页
- 基本查看
-
less是分页查看文件内容,往前往后都能翻页选项 说明 -N显示行号 -S不换行,超长行截断 -i搜索时忽略大小写 -I搜索时完全忽略大小写 -F文件内容不足一屏时直接退出 -X不初始化终端(保留原始屏幕内容) +F类似 tail -f,实时追踪文件变化+pattern打开文件后直接跳转到匹配 pattern的位置 -
以下为交互命令,在less中按键 按键 功能 空格/PageDown向下翻一屏 b/PageUp向上翻一屏 回车/j向下滚动一行 k向上滚动一行 /pattern向下搜索 pattern?pattern向上搜索 patternn重复上一次搜索(同方向) g跳转到文件开头 G跳转到文件末尾 50g跳转到第 50 行 :n打开下一个文件(多个文件时) :p打开上一个文件 q退出 less - 查看文件(带行号)
less -N /var/log/syslog # 显示文件内容,左侧显示行号 - 打开时定位到关键词位置
less +/error app.log # 直接跳转到`error`首次出现的位置 - 禁止自动换行(查看长行)
less -S longfile.txt # 长行不换行显示,用左右箭头键横向滚动查看 - 实时监控日志文件更新
less +F /var/log/nginx/access.log # 动态显示新增的日志(按`Ctrl+C` 退出监控,再按 `F` 恢复)head -显示开头部分内容
- 查看文件(带行号)
head用于显示文件开头部分的内容(默认显示前10行)-n:参数为指定显示的行数- 显示前5行
head -n 5 file.txt # 或简写 head -5 file.txt - 显示多个文件(自动标注文件名)
head -3 file1.txt file2.txt输出:
==> file1.txt <== Line1_file1 Line2_file1 Line3_file1 ==> file2.txt <== Line1_file2 Line2_file2 Line3_file2tail -显示末尾内容
- 显示前5行
tail用于查看文件末尾内容(默认显示最后10行)-f:实时监控文件新增内容(日志监控)-f适用于持续写入的日志文件,按Ctrl+C退出- 查看指定行数(末尾5行)
tail -n 5 filename.txt # 简写形式 tail -5 filename.txt - 从第 20 行开始显示到文件末尾
tail -n +20 filename.txt - 实时监控日志文件(常用!)
tail -f /var/log/syslogdu -估算文件/目录的磁盘使用空间
- 查看指定行数(末尾5行)
du用于估算文件和目录的磁盘使用空间基本语法
du [选项] [文件或目录...]- 如果不指定文件或目录,du 会报告当前工作目录及其所有子目录的磁盘使用情况
-
可以指定一个或多个文件或目录路径 选项 说明 -h以 人类可读 格式显示(自动 KB、MB、GB) -s仅显示指定目录的 总计大小,不显示其子目录的信息 -a显示 所有文件 的磁盘使用情况 -c显示 总计大小(在最后一行显示) -d N或--max-depth=N只显示 指定层级 的目录大小,显示目录深度不超过 N 层 --time显示目录或文件的 最后修改时间 - 查看当前目录及其所有子目录的大小(人类可读格式)
du -h # 输出会列出当前目录下每个子目录的大小及其内容,最后是当前目录的总大小 - 仅查看当前目录的总大小(汇总)
du -sh # 最常用的命令之一,快速知道一个目录占了多少空间 - 查看指定目录及其下一级子目录的大小(人类可读)
du -h -d 1 /path/to/directory # 或者使用 --max-depth=1 - 查看指定目录下所有文件(而不仅仅是目录)的大小(人类可读)
du -ah /path/to/directory - 结合
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使用)- 查看某个文件/目录被谁占用
lsof /path/to/file-or-directory # 示例:查看谁在使用 /var/log/syslog lsof /var/log/syslog - 按进程名查看(如 nginx)
lsof -c nginx - 按进程ID(PID)查看
lsof -p 1234 - 按用户查看
lsof -u root # 查看root用户打开的文件 lsof -u www-data # 查看web用户打开的文件 - 查看网络连接
lsof -i # 所有网络连接 lsof -i :80 # 查看80端口占用 lsof -i TCP # 所有TCP连接 lsof -i UDP:53 # 查看53/UDP端口(DNS) - 组合条件查询(用户 + 网络连接)
lsof -a -u nginx -i # 用户nginx的网络连接 - 递归查看目录下所有打开的文件
lsof +D /var/log # 查看/var/log及其子目录被打开的文件 - 查看已删除但仍被占用的文件(释放空间)
lsof | grep deleted # 找到"deleted"状态的文件 - 仅输出进程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:显示每个处理的文件信息(更改了权限的文件)指定权限模式
- 符号模式
- 使用字母 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: 给所有者加执行权限,从组移除写权限,给其他人设置只读权限- 八进制/数值模式
- 使用三位或四位八进制数(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 -查看历史记录
- 用于查看、管理和重复执行用户在终端中输入过的命令历史记录
- 查看历史记录
$ history # 显示全部历史命令(带编号) history 20 # 显示最近20条命令 - 快速执行历史记录
- 查看历史记录
- 先用 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" 的命令- 清空历史记录
$ history -c # 清空当前会话的历史记录
- 清空历史记录
- THE END -
最后修改:2025年8月1日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qian777.cn/51.html
共有 0 条评论