目录
一、touch
touch 主要用于创建空文件或更新现有文件的时间戳(包括访问时间和修改时间)。它是一个简单但功能强大的工具,广泛应用于文件管理、脚本编写和自动化任务中。
1. 基本语法
touch [选项] 文件名...
如果指定的文件不存在,touch 会创建一个新的空文件。如果文件已存在,touch 默认会更新该文件的访问时间和修改时间为当前系统时间。
2. 常用选项
无选项:创建新文件或更新现有文件的时间戳。
-a:仅改变文件的访问时间。
-m:仅改变文件的修改时间。
-c 或 --no-create:不创建文件,如果文件不存在,则不进行任何操作。
touch -c non_existing_file.txt
-d 或 --date=字符串:使用指定的字符串设置文件的时间戳。
touch -d "2025-04-12 15:27:00" file.txt
-t:使用 [[CC]YY]MMDDhhmm[.ss] 格式的指定时间设置文件的时间戳。
touch -t 202504121527 file.txt
-r:使用另一个文件的时间戳来设置目标文件的时间戳。
touch -r reference_file.txt target_file.txt
二、which
which
用于查找并显示可执行文件的完整路径。它通过搜索系统的 PATH
环境变量中定义的目录,找到与指定命令对应的可执行文件的位置。which
命令的主要用途是帮助用户快速确定某个命令的实际位置,尤其是在系统中可能存在多个同名命令时。
1. 基本语法
which [选项] 命令名...
2. 主要功能
查找命令路径:
which
会在PATH
环境变量中列出的所有目录中搜索指定的命令,并返回第一个匹配的可执行文件的完整路径。验证命令是否存在: 如果
which
找不到指定的命令,则说明该命令可能未安装或不在PATH
中。
3. 常用选项
-a:显示所有匹配的可执行文件路径,而不仅仅是第一个。
[itjiang@jasmine ~]$ which -a python
/usr/bin/python
三、find
find 用于在文件系统中搜索文件和目录。它可以根据多种条件(如文件名、类型、大小、修改时间等)进行搜索,并支持对找到的文件执行操作。find 命令非常灵活,适用于各种复杂的查找需求。
1. 基本语法
find [路径] [选项] [表达式]
路径:指定搜索的起始目录。例如 . 表示当前目录,/ 表示根目录。
选项:控制搜索行为的参数。
表达式:定义搜索条件和操作。
2. 常用选项和表达式
(1)按名称查找
使用 -name 选项按文件名查找文件(区分大小写)。要忽略大小写,可以使用 -iname。
[itjiang@jasmine ~]$ find /home/itjiang -name test.txt
/home/itjiang/test.txt
使用 * 匹配任意文件名。* 是最常用的通配符,用于匹配任意长度的字符。
[itjiang@jasmine ~]$ find ~ -name "test*.txt"
/home/itjiang/test2.txt
/home/itjiang/test1.txt
/home/itjiang/test.txt
(2)按类型查找
使用 -type 选项按文件类型查找:
f:普通文件
d:目录
l:符号链接
c:字符设备
b:块设备
(3)按大小查找
使用 -size 选项按文件大小查找:
+n:大于 n 单位的文件
-n:小于 n 单位的文件
n:等于 n 单位的文件
单位:
c:字节
k:千字节
M:兆字节
G:千兆字节
示例:
[itjiang@jasmine ~]$ find ~ -size +1M # 查找~目录中大于1MB的文件
/home/itjiang/.cache/tracker/meta.db
/home/itjiang/.cache/tracker/meta.db-wal
/home/itjiang/.cache/gnome-software/odrs/ratings.json
(4)按修改时间查找
使用 -mtime、-atime 或 -ctime 按时间查找文件:
-mtime n:文件内容最后修改时间为 n 天前。 -atime n:文件最后访问时间为 n 天前。 -ctime n:文件状态最后改变时间为 n 天前。 +n:超过 n 天 -n:少于 n 天
[itjiang@jasmine ~]$ find ~ -mtime -1 # 查找最近1天内修改过的文件
/home/itjiang
/home/itjiang/.cache/gdm
/home/itjiang/.cache/gdm/session.log.old
/home/itjiang/.cache/gdm/session.log
(5)按权限查找
使用 -perm 按文件权限查找。
[itjiang@jasmine ~]$ find ~ -perm 644 # 查找权限为 644 的文件
/home/itjiang/.bash_logout
/home/itjiang/.bash_profile
(6)按所有者或组查找
使用 -user 和 -group 按文件的所有者或组查找。
find /path/to/search -user username # 查找属于某个用户的文件
find /path/to/search -group groupname # 查找属于某个组的文件
(7)删除文件
使用 -delete 直接删除找到的文件。
find /path/to/search -name "*.log" -delete
四、more
more 用于分页查看文本文件内容。与 less 类似,more 也允许用户逐屏浏览文件内容,但它提供的功能较少,且不支持向后滚动。尽管如此,对于简单的文件浏览任务,more 仍然是一个实用的工具。
1. 基本语法
more [选项] 文件名...
当我们使用 more 打开一个文件时,它会显示文件的前几行,之后可以通过简单的命令进行翻页或搜索等操作。
2. 常用操作
当文件内容超过一屏时,more 会暂停并显示当前屏幕的内容。此时可以使用以下按键进行导航:
空格键:向下翻一页。
回车键:向下滚动一行。
/:后面跟上关键词,然后按回车键可以在文件中向前搜索指定的文本。
b:仅在某些实现中有效,尝试向后翻页(回到之前的内容),但请注意,由于 more 的限制,这可能并不总是可用或工作如预期。
q:退出 more 查看器,返回到命令行提示符。
3. 对比 more 和 less
尽管 more 和 less 都用于分页查看文件内容,它们之间存在一些关键差异:
向前和向后滚动:more 主要设计为向前浏览文件,虽然有些版本支持向后翻页(b),但不如 less 方便和可靠。less 支持完全的前后移动。
搜索功能:两者都支持搜索,但 less 提供更强大的搜索选项,比如区分大小写的搜索、反向搜索等。
打开大文件:less 更加高效,因为它不会一次性读取整个文件,而 more 可能在处理特别大的文件时表现不佳。
因此,虽然 more 对于简单的需求已经足够,但在更多高级场景下,推荐使用 less 来替代 more。然而,由于 more 的广泛可用性和简单性,了解其基本用法仍然很有价值。
五、grep
grep (全称:Global Regular Expression Print)是一个强大的文本搜索工具,广泛用于 Linux 和 Unix 系统中。它通过正则表达式(regular expressions, regex)来搜索文件中的匹配行,并输出这些行或统计相关信息。grep 的名字来源于全球替换命令 g/re/p,意思是全局搜索正则表达式并打印出来。
1. 基本语法
grep [选项] 模式 [文件名...]
模式:要搜索的字符串或正则表达式。
文件名:要搜索的一个或多个文件。如果未指定文件名,则从标准输入读取数据。
2. 常用选项
无选项:在一个或多个文件中搜索指定模式,并显示包含该模式的所有行。
-i:忽略大小写差异进行搜索。
-v:反转匹配,即显示不包含匹配项的行。
-n:显示匹配行及其所在的行号。
-r 或 -R:递归地在目录及其子目录中搜索文件。
-l:仅列出包含匹配内容的文件名,而不是具体行。
-c:统计每个文件中匹配的行数。
-E:使用扩展正则表达式(ERE)。允许使用更复杂的正则表达式功能,如 |(或)、+(一次或多次)等。
-w:匹配整个单词,而非仅仅是子串。
-A n、-B n、-C n:分别表示显示匹配行后 n 行、前 n 行以及前后各 n 行的内容。
六、wc
wc(word count的缩写)用于统计文件中的字节数、字符数、单词数和行数。它是一个非常实用的工具,常用于文本分析、脚本编写以及日志文件处理等场景。
1. 基本语法
wc [选项] [文件名...]
如果不指定文件名,wc 将从标准输入读取数据。
2. 常用选项
无选项:默认情况下,wc 会输出文件的行数、单词数和字节数。输出格式为:行数 单词数 字节数 文件名
-l 或 --lines:统计文件的行数。
-w 或 --words:统计文件的单词数。
-c 或 --bytes:统计文件的字节数。对于纯文本文件,这通常等于字符数;但对于包含多字节字符的文件,则可能不同。
-m 或 --chars:统计文件的字符数。这对于理解文件中实际的字符数量特别有用,特别是在处理包含非ASCII字符的文件时。
-L 或 --max-line-length:打印最长行的长度。
七、管道符
在 Linux 和 Unix 系统中,管道符(|)是一个非常强大且常用的工具,用于将一个命令的输出作为另一个命令的输入。通过这种方式,用户可以将多个命令串联起来,以实现复杂的数据处理任务。这种机制极大地增强了命令行工具的功能性和灵活性。
1. 基本概念
管道符允许我们将前一个命令的标准输出(stdout)直接连接到下一个命令的标准输入(stdin)。其基本语法如下:
command1 | command2 | command3 ...
在这个例子中,command1 的输出会成为 command2 的输入,command2 的输出又会成为 command3 的输入,依此类推。
2. 基本使用
假设我们想查找某个目录下所有包含特定关键字的文件,并统计有多少个这样的文件。可以结合 grep 和 wc 来完成这个任务:
grep -rl "search_term" /path/to/search/ | wc -l
grep -rl "search_term" /path/to/search/:递归地在指定目录中搜索包含 "search_term" 的文件,并打印这些文件的路径。
wc -l:计算由前面的 grep 命令生成的文件列表中的行数,即找到的文件数量。
3. 处理大文件
如果我们有一个很大的日志文件,并希望查看其中最常见的错误信息,可以结合 cat、grep、sort 和 uniq 命令来完成:
cat large_log_file.log | grep "ERROR" | sort | uniq -c | sort -nr
cat large_log_file.log:读取日志文件的内容。
grep "ERROR":过滤出包含 "ERROR" 的行。
sort:对结果进行排序。
uniq -c:统计每个唯一错误信息出现的次数(-c 选项会在每行开头加上计数)。
sort -nr:按数字逆序排列结果(-n 表示按数值排序,-r 表示逆序)。
4. 结合awk和sed进行文本处理
假设我们有一个 CSV 文件,并希望提取第二列的数据,同时替换某些特定字符:
cat data.csv | awk -F',' '{print $2}' | sed 's/old/new/g'
cat data.csv:读取 CSV 文件内容。
awk -F',' '{print $2}':设置字段分隔符为逗号,并打印第二列的数据。
sed 's/old/new/g':将上一步输出中的 "old" 替换为 "new"。
5. 查找并实时监控日志文件
如果我们想实时监控一个日志文件,并只显示包含特定关键词的新添加的行,可以使用 tail 和 grep:
tail -f logfile.log | grep "keyword"
tail -f logfile.log:实时显示 logfile.log 中追加的数据。
grep "keyword":从实时流中筛选出包含 "keyword" 的行。
6. 注意事项
考虑效率:管道连接的命令序列应该尽可能简洁高效,因为数据需要经过多次传递。如果处理的数据量非常大,可能需要考虑优化或使用更高效的方法(如使用专门的工具或脚本)。
标准错误处理:默认情况下,只有标准输出可以通过管道传输,而标准错误(stderr)不会被传递。如果需要处理标准错误,可以将其重定向到标准输出再通过管道传输:
command 2>&1 | other_command
缓冲问题:某些命令可能会对输出进行缓冲,这可能导致管道链中的延迟或行为不符合预期。在这种情况下,可以尝试使用 stdbuf 或者相应命令的选项来调整缓冲行为。
八、echo
echo
用于在终端中输出文本或变量的值。它常用于脚本编写、调试以及生成文件内容等任务。尽管功能简单,但它是日常操作和自动化任务中非常实用的工具。
1. 基本语法
echo [选项] [字符串]
字符串:要输出的文本或变量。
选项:控制输出格式的参数。
``:反引号包围的内容会作为命令执行,而不是普通的字符串。
2. 常用选项
无选项: 默认情况下,
echo
会输出指定的字符串,并在末尾添加一个换行符。
-n
: 不输出末尾的换行符。
-e
: 启用转义字符解释(如\n
换行、\t
制表符等)。
-E
(默认行为): 禁用转义字符解释。
3. 常见用法
输出普通文本:直接输出一段文本:
输出变量值:结合变量使用,输出变量的内容:
name="Tom"
echo "Hello, $name!"
# 输出:Hello, Tom!
使用转义字符:启用 -e
选项后,可以使用以下常见的转义字符:
\n
:换行\t
:制表符\\
:反斜杠\"
:双引号
九、tail
tail 主要用于查看文件的尾部内容。它特别适用于实时监控日志文件或查看大文件的最后几行,因为直接打开大型文件可能会消耗大量资源或者不方便浏览最新的信息。tail 命令可以显示文件的末尾部分,并支持动态跟踪文件的更新。
1. 基本语法
tail [选项] 文件名...
如果不指定文件名,tail 将从标准输入读取数据。
2. 常用选项
无选项:默认情况下,tail 显示文件的最后 10 行。
-n 或 --lines=:指定要显示的行数。例如,显示文件的最后 20 行。
tail -n 20 filename.txt
-c 或 --bytes=:显示文件的最后 N 个字节的内容。
-f 或 --follow:实时输出文件新增加的内容(常用于监视日志文件的变化)。当文件被追加内容时,tail 会持续显示这些新内容。
tail -f logfile.log
-q 或 --quiet 或 --silent:不显示文件名头信息,当同时查看多个文件时有用。
tail -q -n 10 file1.txt file2.txt
-v 或 --verbose:对每个文件都显示其文件名头信息。
十、重定向符
重定向符(Redirection Operators)用于改变命令的标准输入、标准输出和标准错误的默认行为。通常情况下,程序的标准输入来自键盘,标准输出和标准错误则显示在终端屏幕上。通过使用重定向符,用户可以将这些数据流重定向到文件或其他设备。
1. 标准输入、输出和错误
标准输入(stdin):文件描述符为 0,默认来自键盘。
标准输出(stdout):文件描述符为 1,默认输出到终端。
标准错误(stderr):文件描述符为 2,默认输出到终端。
重定向符允许我们改变这些默认行为。
2. 常见重定向符
(1) 输出重定向 (> 和 >>)
>
:将标准输出重定向到文件。如果文件已存在,则覆盖其内容;如果文件不存在,则创建新文件。
echo "Hello, World!" > output.txt
将字符串 "Hello, World!" 写入 output.txt 文件中。
>>
:将标准输出追加到文件末尾。如果文件不存在,则创建新文件。
echo "Another line" >> output.txt
将字符串 "Another line" 追加到 output.txt 的末尾。
(2) 输入重定向 (<)
<
:将文件内容作为命令的标准输入。
wc -l < input.txt
统计 input.txt 文件中的行数。
(3) 错误重定向 (2> 和 2>>)
2>
:将标准错误重定向到文件。如果文件已存在,则覆盖其内容。
ls /nonexistent_directory 2> error.log
如果 /nonexistent_directory 不存在,则错误信息会被写入 error.log 文件。
2>>
:将标准错误追加到文件末尾。
ls /another_nonexistent_directory 2>> error.log
将新的错误信息追加到 error.log 文件中。