文件操作
# 1. 创建文件(touch)
touch
命令主要用于创建空文件,或者改变现有文件的时间戳(包括访问时间和修改时间)。
# 1.1 创建空文件
touch a.txt
touch a.txt
:这条命令在当前目录下创建一个名为a.txt
的新文件。如果该文件已经存在,则touch
命令会更新文件的时间戳,将其设置为当前系统时间,而不会更改文件内容。
# 1.2 修改文件时间戳
使用 touch
命令还可以修改文件的时间戳,即使文件已存在:
touch a.txt # 更新 a.txt 的时间戳为当前系统时间
- 如果指定的文件不存在,
touch
将会创建一个新的空文件。
# 2. 删除文件(rm)
rm
(remove)命令用于删除文件和目录。
# 2.1 删除单个文件
rm 文件名
rm a.txt
:删除当前目录下名为a.txt
的文件。如果文件不存在,rm
会报错。
# 2.2 强制删除文件
rm -f 文件名
rm -f a.txt
:强制删除名为a.txt
的文件,即使文件不存在,也不会报错。-f
(force)选项意味着强制执行删除操作,不会询问用户确认。
注意事项
- 使用
rm
命令时要特别小心,因为一旦文件被删除,通常无法恢复。特别是使用-f
选项时,系统不会提示确认就直接删除文件。 - 在执行批量删除或删除重要文件之前,务必再次确认命令的正确性和当前的工作目录。
- 对于重要数据,建议在删除前进行备份。
# 3. 编辑文件(vi、vim)
在 Linux 系统中,vi
和 vim
(Vi IMproved)是两个非常流行的文本编辑器,它们提供了强大的文本编辑功能。
vi
/vim
编辑器在操作界面上有三种基本模式:
- 命令模式(Command Mode):默认进入的模式,可以使用快捷键执行删除、复制、粘贴等操作,但不能直接编辑文本。
- 插入模式(Insert Mode):在此模式下,可以直接编辑文本,即输入的内容会被加入到文件中。
- 底行模式(Last Line Mode):用于执行保存文件、退出编辑器等命令。
# 3.1 打开和创建文件
vi 文件名 # 打开指定文件进行编辑,如果文件不存在,则创建该文件
# 3.2 从命令模式到插入模式
i
:在光标所在字符前插入文本。a
:在光标所在字符后插入文本。o
:在当前行之下新开一行,并进入插入模式。O
:在当前行之上新开一行,并进入插入模式。
# 3.3 从插入模式返回到命令模式
按 `ESC` 键:从插入模式返回到命令模式。
# 3.4 命令模式下的操作
dd
:删除光标所在的整行。ndd
:从当前行开始,删除下面的n
行。yy
:复制光标所在行。nyy
:从当前行开始,复制下面的n
行。p
:粘贴。u
:撤销上一次操作。gg
:快速移动到文件开头。G
:快速移动到文件末尾。/str
:向下搜索字符串str
。
# 3.5 底行模式下的操作
:w
:保存文件。:q
:退出编辑器,如果文件被修改过,需要加!
强制退出,如:q!
。:wq
或:x
或Shift+z+z
:保存更改并退出编辑器。:set nu
:显示行号。:set paste
:启用粘贴模式,避免粘贴文本时的格式错乱。:%s/旧文本/新文本/g
:全局替换文件中的文本。
# 3.6 小技巧
- 在打开文件时直接跳转到指定行:
vim +行号 文件名
,例如vim +10 filename.txt
打开文件并跳转到第 10 行。 - 以只读模式打开文件:
vim -R 文件名
,例如vim -R /etc/passwd
。
# 4. 查看文件(cat,less,more)
在 Linux 系统中,查看文件内容是日常操作之一。cat
、less
、more
是几个用于在命令行查看文件内容的常用工具,它们各自有不同的特点和用途。
# 4.1 cat
cat
(concatenate)命令用于显示整个文件的内容。
cat a.txt # 查看文件 a.txt 的内容
- 查看文件内容并显示行号:
cat -n a.txt # 查看文件 a.txt 的内容,并显示行号
cat
命令将文件的全部内容加载到内存中再显示,因此在查看大型文件时可能会比较慢。
# 4.2 less
less
命令提供了一个高效的方法来查看大型文件,因为它不会一次性加载整个文件到内存。
less a.txt # 查看文件 a.txt 的内容
- 导航:使用 PgUp 和 PgDn 进行翻页,按
q
退出查看。 - 特点:
less
支持“懒加载”,只加载当前屏幕显示的内容,随着用户翻页,逐步加载新的内容。
# 4.3 more
more
命令也用于分页显示文本文件的内容,但它相比于 less
有更多限制。
more a.txt # 查看文件 a.txt 的内容
- 导航:使用空格键翻页,按
q
退出查看。 - 特点:
more
在查看之前需要加载整个文件内容,适用于中等大小的文件。
对比和选择
- 小文件查看:
cat
适合查看小到中等大小的文件。 - 大文件查看:
less
是查看大文件的最佳选择,因为它支持随机访问,不必加载整个文件。 - 分页查看:
more
和less
都可以实现分页查看,但less
提供了更多的功能和更好的性能。
# 5. 查看文件首尾(head,tail)
# 5.1 head
head
命令用于查看文件的开头部分,默认显示文件的前 10 行。
head a.txt # 查看 a.txt 文件的前 10 行内容
- 查看指定行数的内容:
head -n 5 a.txt # 查看 a.txt 文件的前 5 行内容
-n
选项后跟数字,用于指定显示文件开头的行数。
# 5.2 tail
tail
命令用于查看文件的尾部内容,默认显示文件的后 10 行。
tail a.txt # 查看 a.txt 文件的后 10 行内容
- 查看指定行数的尾部内容:
tail -n 5 a.txt # 查看 a.txt 文件的后 5 行内容
- 实时追踪文件更新:
tail -f a.txt # 查看 a.txt 文件的最新追加内容,并实时更新显示
-f
选项用于实时监控文件尾部的新增内容,特别适合于查看正在写入的日志文件。
# 6. 输出内容到控制台(echo)
echo
命令用于在命令行终端输出文本或命令执行结果。
echo "Hello World" # 输出文本 "Hello World"
- 输出环境变量:
echo $PATH # 输出环境变量 PATH 的值
- 执行命令并输出结果:
echo `pwd` # 执行 pwd 命令并输出当前工作目录的路径
反引号 `
(不是单引号)用于执行包围的命令,并将命令的输出作为 echo
命令的输入进行输出。
# 7. 输出重定向/追加(> / >>)
重定向和追加是将命令的输出从标准输出(通常是终端)重定向到文件的方法。
cat 文件1 > 文件2 # 将文件1的内容覆盖到文件2中(若文件2不存在,则创建)
ls -l /home > info.txt # 将 /home 下的文件列表重定向写入 info.txt 中
cal >> /time # 将当前日历信息追加到 /time 文件中
2
3
>
用于重定向输出,如果目标文件已存在,则覆盖原有内容。>>
用于追加输出,将新内容添加到目标文件的末尾。
# 8. 查看历史命令(history)
history
命令显示用户执行过的命令历史列表。
history # 查看所有执行过的命令历史
history 10 # 查看最近执行过的10条命令
!5 # 执行历史命令列表中编号为5的命令
2
3
history
命令显示的每个命令前都有一个编号,使用!编号
可以快速重复执行该命令。
# 9. 查看命令位置(which,whereis)
which
命令用于查找并显示给定命令的绝对路径,搜索基于用户的 $PATH
环境变量。
which bash # 查看 "bash" 命令的绝对路径
- 作用:确认一个命令的位置和哪个版本将被系统调用。
whereis
命令用于查找命令的二进制文件、源代码和帮助文件的位置。
whereis bash # 查找 "bash" 命令的相关文件位置
- 作用:提供命令相关文件的更全面信息,包括二进制、源代码和帮助文档的路径。
which和whereis的区别?
- 搜索范围:
which
仅搜索$PATH
中的目录寻找可执行文件,而whereis
搜索的范围更广,包括二进制文件、源代码和文档。 - 结果展示:
which
通常只返回第一个找到的命令路径,whereis
则提供命令相关的多个文件位置。 - 使用场景:
- 当你需要确认使用的命令的具体位置或版本时,
which
是更好的选择。 - 当你需要找到命令的相关文件,如源代码或帮助文档时,
whereis
提供了更全面的信息。
- 当你需要确认使用的命令的具体位置或版本时,
# 10. 过滤查找(grep)
grep
命令用于在文件或通过管道传递的数据中搜索与指定模式匹配的行。
grep "yes" hello.txt # 在 hello.txt 文件中搜索包含 "yes" 的行
-n
选项:显示匹配行及其行号。
结合管道使用:
cat hello.txt | grep "yes" # 将 hello.txt 文件的内容传给 grep,搜索包含 "yes" 的行
cat hello.txt | grep -n "yes" # 同上,但同时显示行号
2
- 管道符
|
:将左边命令的输出作为右边命令的输入。这在组合多个命令以进行复杂的文本处理时非常有用。
# 11. 数量统计(wc)
wc
命令可以提供一个或多个文件的行数、单词数、字符数等统计信息。
wc [选项] 文件路径
-l
:统计行数。-w
:统计单词数量。-c
:统计字节(byte)数量。-m
:统计字符数量。
wc -l a.txt # 统计文件 a.txt 的行数
wc -w a.txt # 统计文件 a.txt 的单词数
wc -c a.txt # 统计文件 a.txt 的字节数
wc -m a.txt # 统计文件 a.txt 的字符数
2
3
4
# 12. wc 结合管道符的用法
在 Linux 中,wc
命令经常与管道符(|
)结合使用,以实现更为强大和灵活的文本数据统计功能。管道符允许你将一个命令的输出作为另一个命令的输入,当 wc
与管道符结合使用时,你可以对其他命令的输出进行行、单词或字符的统计。
- 统计当前目录下文件和目录的数量:
ls | wc -l
- 这个命令首先列出当前目录下的所有文件和目录,然后
wc -l
统计这个列表的行数,即文件和目录的总数。
- 统计当前用户的进程数量:
ps -u $USER | wc -l
ps -u $USER
列出当前用户的所有进程,wc -l
统计这些进程的数量。
- 统计特定文件中包含特定字符串的行数:
grep '特定字符串' 文件名 | wc -l
- 这个命令首先使用
grep
查找文件中包含“特定字符串”的行,然后使用wc -l
统计满足条件的行数。
- 统计不重复行的数量:
cat 文件名 | sort | uniq | wc -l
- 这个命令首先将文件内容排序,然后使用
uniq
命令过滤掉重复的行,最后wc -l
统计结果中的行数,即不重复行的数量。
通过灵活地结合使用 wc
命令和管道符,你可以轻松地在 Linux 命令行中进行复杂的文本数据处理和统计。这种方法不仅提高了操作的效率,而且极大地扩展了 Linux 命令行的功能性。
# 13. 终止操作
在 Linux 终端中,Ctrl+C
和 Ctrl+Z
是两个非常重要的快捷键,用于控制正在运行的程序。
Ctrl+C:发送 SIGINT 信号给当前程序,请求终止程序运行。大多数程序会响应这个信号并进行清理工作后退出。
Ctrl+Z:发送 SIGTSTP 信号给当前程序,将其挂起(暂停执行)并放到后台。这使得用户可以在同一终端内执行其他命令。
管理后台程序:
fg
命令:将最近一个被挂起的后台程序恢复到前台继续执行。fg # 将最近挂起的程序恢复到前台
1bg
命令:使被挂起的程序在后台继续执行。bg # 将最近挂起的程序在后台继续执行
1jobs
命令:列出当前会话中所有的任务及其状态。