[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.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 |
-
查看文件(带行号)
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_file2
tail -显示末尾内容
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/syslog
du -估算文件/目录的磁盘使用空间
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 755 file.sh :
-
常用示例:
让脚本可执行(所有者) 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" 的命令
3. 清空历史记录
```bash
$ history -c # 清空当前会话的历史记录
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qian777.cn/51.html
共有 0 条评论