第1章:初识Linux系统——第4节:文件操作命令2
目录
一、more
(1)more 命令基本信息
(2)常用选项及示例
1.基本用法(无选项)
2.指定每页显示的行数(-n 选项)
3.从指定行开始显示(+n 选项)
4.显示行号(-c 选项)
5.与管道结合使用
(3)交互操作(在 more 查看模式中)
二、less
(1)less 命令基本信息
(2)常用选项及示例
1.基本用法(无选项)
2.显示行号(-N 选项)
3.忽略搜索时的大小写(-i 选项)
4.从文件末尾开始显示(+G 选项)
5.从指定行开始显示(+n 选项,n 为行号)
6.与管道结合使用
7.实时监控文件变化(+F 选项)
8.-m:显示读取文件的百分比
9.-M:显示读取文件的百分比、行号及总行数
10.-p
(3)交互操作(在 less 查看模式中)
三、head
(1)head 命令基本信息
(2)常用选项及示例
1.基础用法(默认行为)
2.指定显示行数(-n <数字> 或直接 <数字>)
3.排除末尾行(-n -<数字>)
4.按字节数显示(-c <数字>)
5.抑制文件名显示(-q,多文件时使用)
6.显示文件名(-v,强制显示)
四、tail
(1)tail 命令的核心作用
(2)tail 命令的语法格式
(3)常用选项及效果
(4)示例演示
1:默认显示文件最后 10 行
2:显示指定行数的末尾内容
3:显示文件末尾的指定字节数
4.实时跟踪文件新增内容(-f 选项)
5:跟踪文件并自动处理文件重建(-F 选项)
6:结合管道(|)处理其他命令的输出
五、cp
(1)cp 命令的核心作用
(2)cp 命令的基本语法
(3)常用选项及效果
(4)示例演示
1:复制单个文件到目标位置
2:复制多个文件到目标目录
3:复制目录(必须用 -r 或 -R)
4:交互式复制(避免误覆盖,-i 选项)
5:强制覆盖(-f 选项)
6:保留文件属性(-p 或 -a 选项)
7:创建链接而非复制文件(-l 硬链接,-s 软链接)
8:复制时显示详细过程(-v 选项)
9:为目标文件创建备份(--backup 选项)
(5)注意事项
六、rm
(1)rm 命令的核心作用
(2)rm 命令的基本语法
(3)常用选项及效果
(4)示例演示
1:删除单个文件(默认行为)
2:交互式删除(-i 选项,安全模式)
3:强制删除(-f 选项,无提示)
4:删除空目录
5:删除非空目录(必须用 -r 或 -R)
6:删除多个文件 / 目录
7:显示删除过程(-v 选项)
8:删除匹配模式的文件(结合通配符)
(5)注意事项
七、mv
(1)mv 命令的核心作用
(2)mv 命令的基本语法
(3)常用选项及效果
(4)示例演示
1:重命名文件(同一目录下移动)
2:移动文件到目标目录
3:移动多个文件到目标目录
4:重命名目录(同一目录下移动)
5:移动目录到另一个目录
6:交互式操作(避免误覆盖,-i 选项)
7:强制覆盖(-f 选项)
8:不覆盖已有文件(-n 选项)
9:显示操作过程(-v 选项)
10:移动时创建备份(--backup 选项)
11:批量重命名文件(结合通配符)
(5)注意事项
一、more
在 CentOS 系统中,more
是一个用于分页显示文本文件内容的命令,它允许用户逐页查看长文件,而不是一次性显示整个文件。执行more命令后,按“Enter”可以向下移动一行,按“Space”可以向下移动一页,按 “q”可以退出more命令。以下是关于 more
命令的详细说明和使用示例:
(1)more
命令基本信息
- 作用:分页显示文本文件内容,支持基本的交互操作(如翻页、退出等)
- 特点:只能向前浏览文件,不能向后滚动(与
less
命令不同)
(2)常用选项及示例
1.基本用法(无选项)
- 作用:按屏幕大小分页显示文件内容
- 示例:
more /etc/passwd
该命令会分页显示 /etc/passwd
文件的内容,底部会显示当前阅读进度(如 --More--(10%)
)
2.指定每页显示的行数(-n
选项)
- 作用:自定义每页显示的行数(n 为数字)
- 示例:
more -10 /var/log/messages
每页显示 10
行 /var/log/messages
文件的内容
3.从指定行开始显示(+n
选项)
作用:从文件的第 n 行开始显示内容
示例:
more +50 /etc/nginx/nginx.conf
从 /etc/nginx/nginx.conf
文件的第 50
行开始显示
4.显示行号(-c
选项)
作用:在显示内容时同时显示每行的行号
示例:
more -c /etc/profile
显示 /etc/profile
文件内容并附带行号
5.与管道结合使用
作用:分页显示其他命令的输出结果
示例:
ls -l /usr/bin | more
分页显示 /usr/bin
目录下的文件列表(因内容可能很多)
(3)交互操作(在 more
查看模式中)
- 按 空格键:显示下一页
- 按 Enter 键:显示下一行
- 按 b 键:显示上一页(部分版本支持)
- 按 q 键:退出
more
查看模式 - 按 / 字符串:在当前文件中向下搜索指定字符串(如
/error
搜索 "error") - 按 n 键:继续查找下一个匹配的字符串
二、less
(1)less
命令基本信息
- 作用:分页查看文本文件内容,支持前后滚动、搜索、跳转等多种交互操作
- 特点:相比
more
更灵活,可向前 / 向后浏览,加载大文件时效率更高(无需一次性加载整个文件)
(2)常用选项及示例
1.基本用法(无选项)
- 作用:分页显示文件内容,默认进入交互模式
- 示例
less /var/log/messages
分页查看系统日志文件 /var/log/messages
的内容
2.显示行号(-N
选项)
- 作用:在每行内容前显示行号
- 示例:
less -N /etc/nginx/nginx.conf
查看 Nginx 配置文件时显示每行的行号,便于定位配置项
3.忽略搜索时的大小写(-i
选项)
- 作用:搜索字符串时不区分大小写
- 示例:
less -i /etc/passwd
进入文件后,搜索 "root" 时会同时匹配 "Root"、"ROOT" 等
4.从文件末尾开始显示(+G
选项)
- 作用:打开文件后直接跳转到末尾(类似
tail
命令的效果) - 示例:
less +G /var/log/secure
直接查看安全日志的最后部分,适合查看最新的登录记录
5.从指定行开始显示(+n
选项,n 为行号)
- 作用:打开文件后直接跳转到第 n 行
- 示例:
less +100 /etc/profile
查看 /etc/profile
时从第 100 行开始显示
6.与管道结合使用
- 作用:分页显示其他命令的输出结果
- 示例:
ps aux | less
分页查看系统进程列表(因进程较多,避免一次性刷屏)
7.实时监控文件变化(+F
选项)
- 作用:类似
tail -f
,实时跟踪文件新增内容(按Ctrl+C
退出跟踪模式,回到正常浏览) - 示例:
less +F /var/log/httpd/access_log
实时监控 Apache 访问日志的新增记录
8.-m:显示读取文件的百分比
9.-M:显示读取文件的百分比、行号及总行数
10.-p
apple:在文件/etc/user中搜索单词apple ,“less -p apple /etc/user”。 在less命令执行的过程中,先按下“/”,再输入要查找的单词或字符,继续查找下一个单词或字符,按“Enter”键。
(3)交互操作(在 less
查看模式中)
-
移动操作:
- 按 ↑ 或 k:向上滚动一行
- 按 ↓ 或 j:向下滚动一行
- 按 PageUp 或 b:向上滚动一页
- 按 PageDown 或 空格:向下滚动一页
- 按 g:跳转到文件开头
- 按 G:跳转到文件末尾
-
搜索操作:
- 按 / 字符串:向下搜索指定字符串(如
/error
搜索 "error") - 按 ? 字符串:向上搜索指定字符串(如
?warning
向上搜索 "warning") - 按 n:跳转到下一个匹配结果
- 按 N:跳转到上一个匹配结果
- 按 / 字符串:向下搜索指定字符串(如
-
其他常用操作:
- 按 v:在当前位置用系统默认编辑器(如
vi
)打开文件 - 按 h:显示帮助信息(列出所有交互命令)
- 按 q:退出
less
查看模式
- 按 v:在当前位置用系统默认编辑器(如
三、head
(1)head
命令基本信息
- 作用:显示文件的开头部分内容,默认显示前 10 行
- 特点:可以指定显示的行数,支持同时处理多个文件,也能与管道结合使用处理命令输出
(2)常用选项及示例
1.基础用法(默认行为)
作用:显示文件前 10 行内容
示例:
head /etc/passwd # 显示/etc/passwd文件的前10行(系统用户信息)
2.指定显示行数(-n <数字>
或直接 <数字>
)
作用:自定义显示文件开头的行数(<数字>
为正整数)
示例:
head -n 5 /var/log/messages # 显示系统日志前5行
head -3 /etc/profile # 简化写法,显示/etc/profile前3行
3.排除末尾行(-n -<数字>
)
作用:显示文件中除最后<数字>
行外的所有内容
示例:
head -n -100 /var/log/secure # 显示安全日志,排除最后100行(适合查看较早记录)
4.按字节数显示(-c <数字>
)
作用:按字节数显示文件开头内容(而非行数)
示例:
head -c 200 /etc/hosts # 显示/etc/hosts文件的前200个字节
head -c 50 /dev/urandom # 从随机设备读取前50个字节(二进制内容)
5.抑制文件名显示(-q
,多文件时使用)
作用:同时查看多个文件时,不显示文件名分隔符
示例:
head -q -n 2 /etc/hosts /etc/resolv.conf # 显示两个文件各前2行,无文件名标识
6.显示文件名(-v
,强制显示)
作用:即使单个文件,也强制显示文件名标识
示例:
head -v -n 3 /etc/fstab # 显示/etc/fstab前3行,并添加"==> /etc/fstab <== "标识
四、tail
(1)tail
命令的核心作用
- 查看文件的末尾部分内容(默认最后 10 行)。
- 实时跟踪文件的新增内容(如日志文件的实时输出)。
- 从标准输入(如管道传递的数据)中读取并展示末尾内容。
(2)tail
命令的语法格式
tail [选项] [文件名]
(3)常用选项及效果
(4)示例演示
假设当前目录下有一个文件 example.txt
,内容如下(共 15 行):
Line 1: Hello, Linux
Line 2: This is a test file
Line 3:
Line 4: Used for tail command examples
Line 5:
Line 6: Line 6
Line 7: Line 7
Line 8: Line 8
Line 9: Line 9
Line 10: Line 10
Line 11: Line 11
Line 12: Line 12
Line 13: Line 13
Line 14: Line 14
Line 15: Line 15
1:默认显示文件最后 10 行
tail example.txt
效果:显示 example.txt
的最后 10 行(即 Line 6 到 Line 15)。
2:显示指定行数的末尾内容
# 显示最后 5 行(两种写法等价)
tail -n 5 example.txt
# 或
tail -5 example.txt
效果:显示 Line 11 到 Line 15。
3:显示文件末尾的指定字节数
tail -c 20 example.txt
效果:显示文件最后 20 个字节的内容(具体内容取决于文件编码,可能包含部分行的末尾字符)。
4.实时跟踪文件新增内容(-f
选项)
常用于监控日志文件(如 /var/log/messages
系统日志):
tail -f /var/log/messages
效果:终端会持续输出 /var/log/messages
的新增内容,按 Ctrl+C
可退出跟踪。
5:跟踪文件并自动处理文件重建(-F
选项)
日志文件可能会被轮转(如 logrotate
工具定期创建新文件并删除旧文件),-F
可自动跟踪新文件:
tail -F /var/log/nginx/access.log
效果:即使 access.log
被删除并重建,tail
仍会继续跟踪新文件的内容。
6:结合管道(|
)处理其他命令的输出
例如,先通过 ls
列出当前目录文件,再用 tail
显示最后 3 个文件:
ls | tail -3
效果:显示 ls
输出结果的最后 3 行(即最后 3 个文件名)。
五、cp
(1)cp
命令的核心作用
- 复制一个或多个文件到指定位置(文件或目录)。
- 复制目录(需配合
-r
或-R
选项,否则会报错)。 - 强制覆盖已有文件、保留文件属性、创建备份等高级操作。
(2)cp
命令的基本语法
cp [选项] 源文件/目录 目标文件/目录
- 源:可以是一个或多个文件 / 目录(复制多个源时,目标必须是目录)。
- 目标:若目标不存在,会创建该文件 / 目录;若目标已存在,会根据选项决定是否覆盖。
(3)常用选项及效果
-b:删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。默认的 备份字尾符串是符号"~"
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。
(4)示例演示
假设当前目录结构如下:
.
├── file1.txt # 普通文件
├── file2.txt # 普通文件
└── dir1/ # 目录├── subfile1.txt└── subdir/└── subsubfile.txt
1:复制单个文件到目标位置
# 将 file1.txt 复制到当前目录,并重命名为 file1_copy.txt
cp file1.txt file1_copy.txt# 将 file1.txt 复制到 dir1 目录下(文件名保持不变)
cp file1.txt dir1/
效果:
- 生成
file1_copy.txt
(与file1.txt
内容相同)。 dir1
目录下新增file1.txt
。
2:复制多个文件到目标目录
# 将 file1.txt 和 file2.txt 复制到 dir1 目录
cp file1.txt file2.txt dir1/
效果:dir1
目录下同时存在 file1.txt
和 file2.txt
。
3:复制目录(必须用 -r
或 -R
)
# 递归复制 dir1 到当前目录,并重命名为 dir1_copy
cp -r dir1 dir1_copy
效果:生成 dir1_copy
目录,其内容与 dir1
完全一致(包括子文件和子目录)。
4:交互式复制(避免误覆盖,-i
选项)
# 当目标文件已存在时,提示是否覆盖
cp -i file1.txt dir1/
效果:若 dir1/file1.txt
已存在,终端会提示:
cp: overwrite 'dir1/file1.txt'?
,输入 y
确认覆盖,n
取消。
5:强制覆盖(-f
选项)
# 强制覆盖目标文件,不提示
cp -f file1.txt dir1/
效果:直接覆盖 dir1/file1.txt
(即使文件已存在),适合脚本中自动执行。
6:保留文件属性(-p
或 -a
选项)
# 复制文件并保留权限、修改时间等属性
cp -p file1.txt file1_preserved.txt# 复制目录并保留所有属性(常用于备份)
cp -a dir1 dir1_backup
效果:
file1_preserved.txt
的权限、所有者、修改时间与file1.txt
一致。dir1_backup
及其内部所有文件的属性均与dir1
完全相同。
7:创建链接而非复制文件(-l
硬链接,-s
软链接)
# 创建硬链接(原文件和链接同步更新,删除任一不影响另一)
cp -l file1.txt file1_hardlink# 创建软链接(类似快捷方式,删除原文件后链接失效)
cp -s file1.txt file1_softlink
效果:
file1_hardlink
与file1.txt
指向同一数据块,内容实时同步。file1_softlink
是指向file1.txt
的快捷方式,ls -l
可见箭头标识。
8:复制时显示详细过程(-v
选项)
cp -v file1.txt file2.txt dir1/
效果:终端输出复制过程:
'file1.txt' -> 'dir1/file1.txt'
'file2.txt' -> 'dir1/file2.txt'
9:为目标文件创建备份(--backup
选项)
9:为目标文件创建备份(--backup 选项)
效果:若 dir1/file1.txt
已存在,会先将其重命名为 dir1/file1.txt.~1~
,再复制新文件。
(5)注意事项
- 复制目录时必须加
-r
或-R
,否则会报错cp: omitting directory
。 -i
(交互式)和-f
(强制)是互斥选项,同时使用时-f
会失效(系统优先保证交互安全性)。- 软链接(
-s
)复制的是路径引用,硬链接(-l
)复制的是数据关联,根据需求选择。 - 对于大文件或目录,
cp
效率较高,若需显示复制进度,可结合pv
工具(如pv largefile.iso | cp > /dest/largefile.iso
)。
六、rm
(1)rm
命令的核心作用
- 删除单个或多个文件。
- 删除空目录或非空目录(需配合
-r
选项)。 - 强制删除文件 / 目录(忽略权限限制或提示)。
(2)rm
命令的基本语法
rm [选项] 文件/目录
- 若删除多个对象,可在命令后依次列出(空格分隔)。
- 默认情况下,
rm
只能删除文件和空目录,删除非空目录需使用-r
选项。
(3)常用选项及效果
(4)示例演示
假设当前目录结构如下:
.
├── file1.txt # 普通文件
├── file2.txt # 普通文件
├── empty_dir/ # 空目录
└── non_empty_dir/ # 非空目录├── subfile.txt└── subdir/
1:删除单个文件(默认行为)
rm file1.txt
效果:直接删除 file1.txt
(若文件存在且有删除权限),无提示。
2:交互式删除(-i
选项,安全模式)
rm -i file2.txt
效果:终端提示确认:rm: remove regular file 'file2.txt'?
,输入 y
则删除,n
则取消。
3:强制删除(-f
选项,无提示)
# 强制删除文件(即使文件只读,且不提示)
rm -f file2.txt# 强制删除不存在的文件(无错误提示)
rm -f not_exist.txt
效果:
- 无论
file2.txt
是否有写权限,均直接删除,无提示。 - 删除不存在的文件时,不会报错(默认情况下会提示 “没有那个文件或目录”)。
4:删除空目录
# 删除空目录(无需选项,直接指定目录名)
rm empty_dir/# 或使用 -d 选项(专门用于删除空目录)
rm -d empty_dir/
效果:删除空目录 empty_dir/
,若目录非空会报错:rm: cannot remove 'empty_dir/': Is a directory
。
5:删除非空目录(必须用 -r
或 -R
)
# 递归删除非空目录及其所有内容
rm -r non_empty_dir/# 强制递归删除(无提示)
rm -rf non_empty_dir/
效果:
rm -r
会提示确认删除目录中的每个文件 / 子目录(如rm: remove directory 'non_empty_dir/subdir'?
)。rm -rf
直接删除整个目录及内容,无任何提示(危险操作,谨慎使用)。
6:删除多个文件 / 目录
# 同时删除多个文件
rm file1.txt file2.txt# 同时删除文件和目录(需加 -r 处理目录)
rm -r file1.txt non_empty_dir/
效果:一次性删除指定的多个对象,遵循单个删除的规则(如目录需 -r
)。
7:显示删除过程(-v
选项)
rm -v file1.txt non_empty_dir/
效果:终端输出删除过程:
removed 'file1.txt'
removed directory 'non_empty_dir/subdir'
removed 'non_empty_dir/subfile.txt'
removed directory 'non_empty_dir/'
8:删除匹配模式的文件(结合通配符)
# 删除当前目录下所有 .txt 文件
rm *.txt# 删除以 "log_" 开头的文件
rm log_*
效果:通过通配符批量删除符合条件的文件(注意:*
会匹配所有字符,避免在根目录等敏感位置使用)。
(5)注意事项
- 删除后难以恢复:Linux 中
rm
删除的文件不会进入回收站,除非系统配置了特殊的备份机制(如trash-cli
工具),否则误删可能导致数据永久丢失。 rm -rf
的危险性:rm -rf /
等命令会递归删除根目录下所有文件(系统默认通过--preserve-root
选项阻止,但仍需警惕类似操作),可能直接导致系统崩溃。- 权限问题:删除文件 / 目录需要对应的权限(如删除文件需对所在目录有写权限),无权限时会提示
Permission denied
。 - 保护重要文件:可通过
chattr +i 文件名
给文件添加不可修改属性,防止误删(删除时会提示权限不足)。
七、mv
(1)mv
命令的核心作用
- 移动文件或目录到指定位置(可跨目录、跨分区)。
- 重命名文件或目录(在同一目录下移动并修改名称)。
- 批量移动或重命名多个文件 / 目录。
(2)mv
命令的基本语法
mv [选项] 源文件/目录 目标文件/目录
- 若目标是文件:源必须是单个文件,操作会将源文件重命名为目标文件(若目标已存在,会覆盖)。
- 若目标是目录:源可以是多个文件 / 目录,操作会将所有源移动到该目录下(名称保持不变)。
- 若源和目标在同一目录:本质是重命名操作。
(3)常用选项及效果
(4)示例演示
假设当前目录结构如下:
.
├── file1.txt # 普通文件
├── file2.txt # 普通文件
├── dir1/ # 目录
└── dir2/ # 目录(为空)
1:重命名文件(同一目录下移动)
# 将 file1.txt 重命名为 newfile.txt
mv file1.txt newfile.txt
效果:原 file1.txt
消失,生成 newfile.txt
(内容与原文件一致)。
2:移动文件到目标目录
# 将 file2.txt 移动到 dir1 目录下(名称不变)
mv file2.txt dir1/# 将 newfile.txt 移动到 dir2 目录,并改名为 moved_file.txt
mv newfile.txt dir2/moved_file.txt
效果:
dir1
目录下新增file2.txt
。dir2
目录下新增moved_file.txt
(由newfile.txt
重命名而来)。
3:移动多个文件到目标目录
# 同时移动 file1.txt 和 file2.txt 到 dir1 目录
mv file1.txt file2.txt dir1/
效果:dir1
目录下同时存在 file1.txt
和 file2.txt
,原目录中这两个文件消失。
4:重命名目录(同一目录下移动)
# 将 dir1 重命名为 new_dir
mv dir1/ new_dir/
效果:原 dir1
目录消失,生成 new_dir
目录(内容与原目录一致)。
5:移动目录到另一个目录
# 将 new_dir 移动到 dir2 目录下(作为子目录)
mv new_dir/ dir2/
效果:目录结构变为 dir2/new_dir/
,原位置的 new_dir
消失。
6:交互式操作(避免误覆盖,-i
选项)
# 当目标文件已存在时,提示是否覆盖
mv -i file1.txt dir1/
效果:若 dir1/file1.txt
已存在,终端会提示:
mv: overwrite 'dir1/file1.txt'?
,输入 y
确认覆盖,n
取消。
7:强制覆盖(-f
选项)
# 强制覆盖目标文件,不提示
mv -f file1.txt dir1/
效果:直接覆盖 dir1/file1.txt
(即使文件已存在),适合脚本中自动执行。
8:不覆盖已有文件(-n
选项)
# 若目标存在则跳过,不覆盖也不提示
mv -n file1.txt dir1/
效果:若 dir1/file1.txt
已存在,命令无动作;若不存在,则正常移动。
9:显示操作过程(-v
选项)
mv -v file1.txt file2.txt dir1/
效果:终端输出移动过程:
'file1.txt' -> 'dir1/file1.txt'
'file2.txt' -> 'dir1/file2.txt'
10:移动时创建备份(--backup
选项)
# 若目标文件存在,先创建带编号的备份(如 file1.txt.~1~)
mv --backup=numbered file1.txt dir1/
效果:若 dir1/file1.txt
已存在,会先将其重命名为 dir1/file1.txt.~1~
,再移动新文件。
11:批量重命名文件(结合通配符)
# 将当前目录下所有 .txt 文件移动到 dir1 目录
mv *.txt dir1/# 将以 "img_" 开头的文件重命名为 "image_" 开头(需结合循环)
for file in img_*; domv "$file" "image_${file#img_}"
done
效果:
- 所有
.txt
文件被移动到dir1
。 - 文件名如
img_1.jpg
会被重命名为image_1.jpg
。
(5)注意事项
- 跨文件系统移动:当源和目标在不同文件系统(如从
/
移动到/home
,且两者为不同分区)时,mv
会先复制文件再删除源文件,效率低于同文件系统移动。 - 权限要求:移动文件 / 目录需要源的读取权限和目标目录的写入权限,否则会提示
Permission denied
。 - 目录覆盖规则:若移动目录到已存在的目录,源目录会成为目标目录的子目录(而非覆盖整个目标目录)。例如
mv dir1 dir2/
会生成dir2/dir1/
。 -i
与-f
优先级:若同时指定-i
和-f
,-f
会失效(系统优先保证交互安全性)。