有时,用代码可能需要花费数小时才能完成的任务,通过终端几分钟就能搞定。
本文假定您已经熟悉诸如 rm、pwd 和 cd 这类基本命令。
grep
需要在代码库中查找某个函数或变量的使用位置,或者在日志中筛选出特定条目?grep 可以帮您解决这些问题。
grep 命令用于在文件中搜索特定模式。它就像一个超级强大的搜索功能,能够深入文件内容进行查找。
grep 命令的基本语法如下:
不区分大小写的搜索:添加 -i 标志以忽略大小写差异。
统计出现次数:使用 -c 标志来统计匹配行的数量。
分析日志:如果您正在排查问题,可以使用 grep 在日志中查找特定的错误消息。
搜索多个模式:您可以通过多次使用 -e 标志来搜索多个模式。
在 system.log 中匹配“error”或“404”。
递归搜索:若要在目录及其子目录中的所有文件中搜索某个模式,请使用 -r(或 -recursive)标志。
这将在指定目录及其子目录中的所有文件中进行搜索。 -o 选项告诉 grep 只打印行中匹配的部分。
管道 | 将左侧命令(grep)的输出作为右侧命令(wc -l)的输入。wc -l 会计算并显示其输入中的行数。
man
man 命令代表“手册”。它能帮助您查找有关其他命令和程序的详细信息。
cat
“cat”命令是“concatenate”(连接)的缩写。它用于显示文件内容、合并文件或创建新文件。
合并文件:`cat` 的一个关键特性是能够将多个文件合并为一个。例如,如果您想将 `file1.txt` 和 `file2.txt` 合并到 `file3.txt` 中,可以这样做:
上述命令将 file1.txt 和 file2.txt 的内容合并到 file3.txt 中。> 运算符用于将合并后的输出定向到一个新文件。
创建新文件:您还可以使用 cat 命令来创建新文件。输入您的文本,完成后按 Ctrl + D 保存并退出。
cat 命令有助于查看较小的文件,但对于非常大的文件,它可能会让人应接不暇,因为它会一次性输出所有内容。在这种情况下,使用 less 或 head 等命令以更可控的方式查看文件会更好。
head
在处理大型文件时,您通常无需查看全部内容。与其使用 cat 命令显示所有内容,不如使用 head 命令仅预览文件的前几行。
这在检查 CSV 文件、日志或任何其他大型文本文件的结构时特别有用。
默认情况下,head 命令会显示文件的前 10 行:
如果您需要更多或更少的行,可以使用 -n 选项指定确切的行数:
预览 CSV 标题:对于 CSV 文件,head 命令非常适合快速查看标题或结构:
awk
awk 是一种强大的模式扫描和处理工具。它特别适用于操作和分析文本文件及数据流。
使用 awk,您可以对文件中的数据或命令输出进行筛选、提取和转换。
awk 能够高效地从各种来源提取和组合数据,这得益于其关联数组。假设您有两个 CSV 文件:
员工名单。
工资表。
使用 awk 合并这些文件,并显示每位员工的姓名及其薪资。
- NR==FNR {salaries[$1]=$2; next}:在处理第一个文件(salaries.csv)时,将薪资存储在关联数组中。员工 ID($1)作为键,薪资($2)作为值。此操作仅针对第一个文件执行。
- FNR==1 {next}:跳过第二个文件(employees.csv)的标题行。
- 对于第二个文件(employees.csv)中的每一行,打印员工姓名($2)以及从数组(salaries[$1])中获取的其薪资。
您也可以将结果保存到一个新文件中。
sed
sed 是 Stream Editor(流编辑器)的缩写,是终端中用于文本处理的强大工具。它允许您在文件或数据流中查找、替换、插入或删除文本。
您可以用它进行快速编辑,无需打开文本编辑器,这对于编写脚本和实现自动化来说非常棒。
在文件中替换一个单词或模式:将“Trevor”替换为“John”。
如果您想要保存更改,请使用 -i 选项。
打印特定行:仅从文件中打印特定行。
这会打印出第 2 行到第 4 行的内容。
正则表达式:sed 支持正则表达式,从而能够执行复杂的查找和替换操作。例如,将所有数字替换为“X”:
批量重命名文件:假设您有多个扩展名为.txt 的文件,并且想要将它们重命名为.md。
sed 功能强大,用途广泛,而这些示例只是冰山一角。
tail
tail 是 head 的对应命令。它允许您查看文件的最后几行,而非开头几行。它常用于监控日志文件或查看文档的末尾。默认情况下,tail 会显示文件的最后 10 行。
查看更多或更少的行:您可以使用 -n 选项来调整显示的行数。
实时文件监控:tail 最强大的功能之一是 -f 选项,它能让您实时跟踪文件的增长情况。这对于实时查看日志文件特别有用。
随着新行被添加到 1.md 中,tail 将自动显示它们。
chmod
每个文件都有三组权限:所有者、所属组和其他用户。这些权限通常以类似“rwxr-xr-”的格式表示。
文件权限 -rw-r-r- 表示:
- 所有者(trevindreklasn):具有读取(r)和写入(w)权限。
- 组(员工):具有读取(r)权限。
- 其他人:具有读取(r)权限。
“@” 符号表示该文件具有扩展属性,这些属性是超出标准文件权限之外的附加元数据。
文件权限控制谁可以读取、写入或执行文件,通过防止未经授权的用户修改或查看敏感数据来确保安全性和适当的访问管理。
要限制对 sensitive.md 的访问,使其仅允许 root 用户或超级管理员查看和写入,您可以使用 chmod 命令来修改文件的权限。
首先,确保文件由 root 用户或超级管理员拥有。您可能需要使用 sudo 来更改所有权:
只有所有者(root)具有读写权限。而组和其他用户没有任何权限。这限制了对该文件的访问,使其仅能由所有者读写。
Improper file permissions can lead to security issues or system problems
未经授权的访问:包含敏感信息(如密码或财务数据)的文件设置过于宽松(例如,权限设置为 777),系统上的任何人都可以读取或修改它。这可能会导致数据泄露或敏感信息被未经授权访问。
恶意软件安装:所有用户都具有写入权限的文件或目录(例如,chmod 777)可能会被攻击者利用来放置恶意脚本或软件,从而有可能危及整个系统。
数据损坏:如果本应只读的文件(例如日志文件或系统配置文件)意外地被赋予了写入权限,用户或应用程序可能会无意中损坏或删除关键数据,从而导致系统不稳定或重要信息丢失。
xargs
xargs 命令使用其他命令的输出来构建和运行命令。它用于将项目列表作为参数传递给另一个命令。
假设你有一份想要删除的文件清单。
与其一个一个地删除它们,您可以使用 xargs 将文件列表传递给 rm 命令。
创建多个目录:如果您在一个文件中有一系列目录名称,并且想要创建所有这些目录,可以使用 xargs 和 mkdir 命令。
压缩文件:如果您有多个文件想要使用 gzip 进行压缩,可以使用 xargs 将文件名传递给 gzip。
find
在您的文件系统中根据各种条件搜索并定位文件和目录。它具有高度的可定制性,并且可以与其他命令结合使用以完成复杂的任务。
find 命令会在 node_modules 目录中搜索“astro”的出现情况,返回具有该名称的文件和目录的路径,包括可执行文件和包文件。
清理旧日志文件:定期删除一个月前的日志文件以释放磁盘空间。
备份重要文件:从主目录中找到所有 .docx 文件并复制到备份位置。
“find”命令功能极其强大,能够根据各种文件管理任务进行定制。
Honorable Mentions
- jq:像使用 sed、awk、grep 一样轻松地对结构化数据进行切片、筛选、映射和转换。
- cut:一个用于从文件的每行中删除部分内容的命令。
- netstat:一种网络实用程序,用于显示网络连接、路由表和接口统计信息。
- ping:一种用于测试 IP 网络中主机可达性并测量往返时间的工具。
- ifconfig:用于配置网络接口的命令(已被 ip 命令取代)。
- telnet:一个使用 Telnet 协议通过网络与远程主机进行交互的程序。
- SFTP:一种使用 SSH 协议的交互式文件传输程序。
- wget:一种网络实用程序,用于通过 HTTP 和 FTP 协议从万维网获取文件。
- ps:显示有关正在运行的进程的信息。
- 顶部:一个任务管理器,用于实时查看和管理正在运行的进程。
- kill:一个用于向进程发送信号的命令,通常用于终止进程。
- comm:一个逐行比较两个已排序文件的命令。