rm:删除目录“存档”? y
我们将在第 7 章讨论如何使这个选项成为默认选项,该章讨论自定义您的 shell 环境。
3.3.3. 查找文件
3.3.3.1. 使用外壳功能
在移动文件的例子中,我们已经看到了 shell 如何一次操作多个文件。 在该示例中,shell 会自动找出用户对方括号“[”和“]”之间的要求的含义。 Shell 可以替换数字范围以及类似的大写或小写字符。 它还可以用星号替换任意数量的字符,并且只用问号替换一个字符。
各种替换可以同时使用; 外壳非常符合逻辑。 例如,Bash shell 对像这样的表达式没有问题 ls 目录名/*/*/*[2-3].
在其他 shell 中,星号通常用于最大限度地减少打字的努力:人们会输入 cd 目录* 而不是 cd 目录. 然而,在 Bash 中,这不是必需的,因为 GNU shell 有一个称为文件名完成的功能。 这意味着您可以键入命令(任何地方)或文件(在当前目录中)的前几个字符,如果不可能混淆,shell 将找出您的意思。 例如
在包含许多文件的目录中,您可以通过键入来检查是否有任何以字母 A 开头的文件 ls A 并按下 制表 键两次,而不是按 输入. 如果只有一个文件以“A”开头,则该文件将显示为 ls (或任何 shell 命令,就此而言)。
3.3.3.2.哪个
查找文件的一种非常简单的方法是使用 这 命令,在用户搜索路径中列出的目录中查找所需文件。 当然,由于搜索路径只包含包含可执行程序的目录的路径, 这 不适用于普通文件。 这 这 命令在对“找不到命令”问题进行故障排除时很有用。 在下面的例子中,用户 蒂娜 不能使用 杂读 程序,而她的同事在同一系统上没有任何问题。 问题类似于 PATH 上一部分的问题:Tina 的同事告诉她,他可以在
/opt/acroread/bin,但是这个目录不在她的路径中:
蒂娜:~> 哪个 acroread
/usr/bin/which: 中没有 acroread (/bin:/usr/bin:/usr/bin/X11)
蒂娜:~> 哪个 acroread
/usr/bin/which: 中没有 acroread (/bin:/usr/bin:/usr/bin/X11)
可以通过提供要运行的命令的完整路径或通过重新导出该命令的内容来解决该问题
路径变量:
蒂娜:~> 导出 PATH=$PATH:/opt/acroread/bin
蒂娜:~> 回声 $ 路径
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
蒂娜:~> 导出 PATH=$PATH:/opt/acroread/bin
蒂娜:~> 回声 $ 路径
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
使用 这 命令还会检查一个命令是否是另一个命令的别名:
格里特:~> 哪个 -a ls
ls 别名为 `ls -F --color=auto' ls 是 /bin/ls
格里特:~> 哪个 -a ls
ls 别名为 `ls -F --color=auto' ls 是 /bin/ls
如果这在您的系统上不起作用,请使用 别号 命令:
直到@www:~/mail$ 别名 ls
别名 ls='ls --color'
直到@www:~/mail$ 别名 ls
别名 ls='ls --color'
3.3.3.3. 查找和定位
这些是真正的工具,用于搜索除搜索路径中列出的路径之外的其他路径。 这 发现 UNIX 中已知的工具非常强大,这可能是导致语法有些困难的原因。 GNU 发现,然而,处理语法问题。 此命令不仅允许您搜索文件名,还可以接受文件大小、上次更改日期和其他文件属性作为搜索条件。 最常见的用途是查找文件名:
发现 -姓名
这可以解释为“查看给定路径中包含的所有文件和子目录,并打印名称中包含搜索字符串的文件的名称”(而不是它们的内容)。
的另一种应用 发现 用于搜索特定大小的文件,如下例所示,其中用户 彼得
想要查找当前目录或其子目录之一中大于 5 MB 的所有文件:
彼得:~> 找 。 -大小+5000k
Psychotic_chaos.mp3
彼得:~> 找 。 -大小+5000k
Psychotic_chaos.mp3
如果你在手册页中挖掘,你会看到 发现 还可以对找到的文件进行操作。 一个常见的例子是删除文件。 最好先测试没有 执行 选择正确的文件后,可以重新运行该命令以删除所选文件。 下面,我们搜索以 .TMP:
彼得:~> 找 。 -name "*.tmp" -exec rm {} \;
彼得:~>
彼得:~> 找 。 -name "*.tmp" -exec rm {} \;
彼得:~>
优化!
此命令将调用 rm 找到满足要求的文件的次数。 在最坏的情况下,这可能是数千或数百万次。 这对您的系统来说是相当大的负担。
更现实的工作方式是使用管道 (|) 和 参数 工具与 rm 作为论据。 这样一来, rm command 仅在命令行已满时调用,而不是针对每个文件调用。 有关使用 I/O 重定向来简化日常任务的更多信息,请参阅第 5 章。
后来(根据手册页,在 1999 年,经过 20 年的 发现), 定位 已开发。 这个程序更容易使用,但比 发现,因为其输出基于每天仅更新一次的文件索引数据库。 另一方面,在搜索 定位 数据库使用的资源少于 发现 因此几乎可以立即显示结果。
大多数 Linux 发行版使用 定位 这些天,安全性增强定位,现代版本 定位 这会阻止用户获得他们无权阅读的输出。 中的文件 根的主目录就是这样的一个例子,这些通常不能被公众访问。 想要找到了解 C shell 的人的用户可以发出命令 定位 .cshrc, 显示所有拥有自定义 C shell 配置文件的用户。 假设用户 根 和 珍妮 正在运行 C shell,那么只有文件
/家/珍妮/.cshrc 将显示,而不是在 根的主目录。 在大多数系统上,
locate 是到 slocate 程序的符号链接:
比利:~> ls -l /usr/bin/定位
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*
比利:~> ls -l /usr/bin/定位
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*
用户 蒂娜 本来可以用 定位 找到她想要的应用程序:
蒂娜:~> 找到 acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/本地/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
蒂娜:~> 找到 acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/本地/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
不包含名称的目录 箱子 不能包含程序 - 它们不包含可执行文件。 剩下三种可能。 文件在 在/ usr / local / bin目录 是这一个 蒂娜 本来想要的:它是启动实际程序的 shell 脚本的链接:
蒂娜:~> 文件 /usr/local/bin/acroread
/usr/local/bin/acroread:到 ../Acrobat4/bin/acroread 的符号链接
蒂娜:~> 文件 /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread:Bourne shell 脚本文本可执行文件
蒂娜:~> 文件 /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1,动态链接(使用
蒂娜:~> 文件 /usr/local/bin/acroread
/usr/local/bin/acroread:到 ../Acrobat4/bin/acroread 的符号链接
蒂娜:~> 文件 /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread:Bourne shell 脚本文本可执行文件
蒂娜:~> 文件 /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1,动态链接(使用
共用的, 库), 不能 剥离 为了让路径尽可能短,让系统不用每次用户想要执行命令时都搜索太长,我们添加 在/ usr / local / bin目录 到路径而不是其他目录,其中
只包含一个特定程序的二进制文件,而 在/ usr / local / bin目录 包含其他有用的
程序也是如此。
再次,对完整功能的描述 发现 和 定位 可以在信息页面中找到。
3.3.3.4. grep 命令
3.3.3.4.1. 一般线路过滤
一个简单但功能强大的程序, grep的 用于过滤输入行并将某些模式返回到输出。 有数以千计的申请 grep的 程序。 在下面的例子中, 杰里 使用 grep的 看看他是怎么做的 发现:
杰瑞:~> grep -a 查找 .bash_history
找 。 -name userinfo man find
找到 ../ -name common.cfg
杰瑞:~> grep -a 查找 .bash_history
找 。 -name userinfo man find
找到 ../ -name common.cfg
搜索历史记录
在这些情况下也有用的是搜索功能 打坏, 按下激活 按Ctrl+R 立即,例如在我们想要检查我们最后是如何做到的示例中 发现 再次:
托马斯~> ^R
(reverse-i-search)`find': find `/home/thomas` -name *.xml
托马斯~> ^R
(reverse-i-search)`find': find `/home/thomas` -name *.xml
在搜索提示下输入您的搜索字符串。 您输入的字符越多,搜索受到的限制就越多。 这将读取此 shell 会话的命令历史记录(写入
.bash_历史记录 在您退出该会话时在您的主目录中)。 显示最近出现的搜索字符串。 如果要查看包含相同字符串的先前命令,请键入 按Ctrl+R 一次。
请参阅信息页面 打坏 了解更多信息。
所有稍有礼貌的 UNIX 都有一个在线词典。 Linux 也是如此。 字典是一个名为的文件中已知单词的列表 话, 位于 /usr/共享/字典. 要快速检查单词的正确拼写,不需要图形应用程序:
威廉:~> grep pinguin /usr/share/dict/words
威廉:~> grep 企鹅 /usr/share/dict/words
企鹅企鹅
威廉:~> grep pinguin /usr/share/dict/words
威廉:~> grep 企鹅 /usr/share/dict/words
企鹅企鹅
字典与单词列表
一些发行版提供 字典 命令,它提供了比简单地在列表中搜索单词更多的功能。
谁是我旁边那个主目录的所有者? 嘿,这是他的电话号码!
丽莎:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne,电话 203234:/home/gdbruyne:/bin/bash
丽莎:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne,电话 203234:/home/gdbruyne:/bin/bash
阿诺的电子邮件地址又是什么?
哔叽:~/邮件> grep -i 阿诺 *
已发送邮件: 至:[电子邮件保护]>
发送邮件:24 年 2001 月 XNUMX 日星期一, [电子邮件保护] 写道:
哔叽:~/邮件> grep -i 阿诺 *
已发送邮件: 至:[电子邮件保护]>
发送邮件:24 年 2001 月 XNUMX 日星期一, [电子邮件保护] 写道:
find 和 locate 通常与 grep 结合使用来定义一些严重的查询。 有关详细信息,请参阅有关 I/O 重定向的第 5 章。
3.3.3.4.2. 特殊的角色
对 shell 有特殊意义的字符必须是 逃脱了. Bash 中的转义字符是反斜杠,就像在大多数 shell 中一样; 这消除了以下字符的特殊含义。 shell 知道一些特殊字符,其中最常见的是 /、.、? 和 *。 完整列表可以在您的 shell 的信息页面和文档中找到。
例如,假设您要显示文件“*”而不是目录中的所有文件,则必须使用