返回顶部
首页 > 资讯 > 精选 >UNIX命令行惯用语有哪些
  • 908
分享到

UNIX命令行惯用语有哪些

2023-06-13 03:06:10 908人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关UNIX命令行惯用语有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开始学习之旅在以前的对话 UNIX 专栏中曾多次介绍了 find 命令,这是一种非常有用的实用工具,可用于扫描并处

这篇文章给大家分享的是有关UNIX命令行惯用语有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

开始学习之旅

在以前的对话 UNIX 专栏中曾多次介绍了 find 命令,这是一种非常有用的实用工具,可用于扫描并处理各种文件,甚至整个 UNIX 文件系统。例如,我经常将 find 与 grep 或者 Perl 一起使用,以便对大量的文件进行处理。您需要了解在一大段代码中的何处定义了变量或常量吗?可以尝试下面的命令:

代码如下:


$ find /path/to/src  -type f | xargs grep -H -I -i -n string

该命令的输出是一个文件名列表,其中包含 string,包括行编号和匹配的特定文本。在每个匹配的文件名和行编号的前面分别加上了 -H 和 -n 选项。-i 选项忽略大小写。-I(大写“I”)跳过二进制文件。

您以前可能没有见过 xargs,它将使用列出的所有选项运行您所指定的命令,在本示例中是 grep,每次使用通过标准输入提供的一个参数。假设 /path/to/src 目录包含文件 a、b 和 c,使用 find 与 xargs 等价于:

代码如下:


grep -H -I -i -n string a
grep -H -I -i -n string b
grep -H -I -i -n string c

事实上,搜索文件集是一项常见的工作,所以 grep 具有相应的选项以递归遍历整个文件系统层次结构。可以使用 -d recurse 或其同义词 -R 或者 -r。例如,可以使用:

代码如下:


$ grep -H -I -i -n -R string/path/to/src

这个命令与 find/xargs 完成相同的任务。(您将发现,许多与文件相关的 UNIX 实用工具都具有递归选项。ls -R 可以递归地列出层次结构中的内容。chmod、chgrp 和 chown 使用 -R 可以递归地将模式、组和所有权变更应用到整个文件系统层次结构。在使用 chmod -R 时,请多加小心。如果删除了目录的执行位,比如 chmod -R a-x,您可能会使得一个目录变得不可使用。为了更具选择性,可以使用 find . -type f | xargs chmod a-x。)

那么,什么时候应该使用 find/xargs,什么时候应该使用 grep 呢?当需要具有一定的选择性时,可以使用 find。find 命令具有许多选项,使得您可以选择满足特定要求的文件,如“所有在午夜后修改过的、并由 Joe 拥有的常规文件”。否则,使用 grep -R 就可以了。

另一种实用工具可能比 find 使用起来更加方便,并且速度更快。如果您打算根据名称来查找一个文件,那么可以尝试使用 locate 来代替 find -name。locate 命令周期性地(大约每天一次,由系统管理员设置)为系统中所有的文件编制目录,并构建一个由路径和文件名组成的数据库。当您运行 locate 时,它将扫描其私有的数据库,尝试进行匹配。

例如,运行查询 locate '*.1',将得到名称以 .1 结尾的所有文件和目录。(前面的星号表示匹配任何字符串。)为了方便起见,运行 locate fish 命令与运行 locate '*fish*' 是相同的。

货币替换

有许多 UNIX 实用工具可以对文件进行修改。在大多数情况下,可以将经过修改的内容发送到标准输出,您可以使用重定向操作符对其进行进一步的处理(使用管道“|”)或捕获其中的结果(使用 > 或 >> 操作符)。

其他的实用工具(那些通常可以一次处理许多文件的工具)可以出于安全考虑而保留原始文件,并为修改后的内容生成一个新的文件。例如,您可以直接在命令行中使用 Perl 对文件进行处理。以下命令:

代码如下:


$ perl -i.bak -pe 's/\bdollar(s?)/buck\1/g' file.txt

将“dollar”替换为“buck”,将“dollars”替换为“bucks”。perl -i 命令在原地对 file.txt 进行修改,而 perl -i.bak 则为原始文件建立一个副本,并在其名称后面添加 .bak,以区别于新的、经过修改的版本。因此,如下的命令:

代码如下:


perl -i.bak -pe 's/\bdollar(s?)/buck\1/g' *

将为当前目录中每个文件创建一个备份。假设有文件 file1.txt、file2.txt 和 file3.txt,那么您将得到 file1.txt.bak、file2.txt.bak 和 file3.txt.bak。错误操作时常发生,所以建立备份是明智之举。

如果出现了错误,并且必须恢复原始文件,您只需输入:

代码如下:


mv file1.txt.bak file1.txt

。但是,如果有数百个文件 需要进行重命名,那又应该怎么办呢?当然,您并不希望输入数百个单独的 mv 命令。相反,您可以输入下面的命令:

代码如下:


foreach file in (*.txt)
do
 mv $file.bak $file
done

它适用于一些简单的情况,如本示例中的情况。然而,这类任务非常常见,可以使用另一种特殊的实用工具,它能够更快速地完成这项任务。以下命令:

代码如下:


$ rename 's/\.bak$//' *.bak

执行了相同的任务。正则表达式 s/\.bak$// 将命令行中列出的每个文件名后面的 .bak 删去,在本示例中是 * 或所有文件,并使用缩短后的名称作为目标文件名。

当文件名没有什么规律时,rename 命令尤其有用。例如,可以考虑下面这个目录中的内容,它看起来像一个大学一年级新生的信件集合

代码如下:


$ ls
RenT.txt  bEErMoNey.txt  gASmoNey.TXt

上面的 foreach 脚本无法处理这个问题,因为这些文件名毫无规律可循。而 rename 可以轻松地对其进行处理:

代码如下:


$ rename 'y/A-Z/a-z/' *

正则表达式 y/A-Z/a-z/ 中的 y 操作符用于进行转换。转换工作需要两个列表:一个原始字符列表和一个替换字符列表。如果这两个列表大小相同,那么在这段文本中,将原始列表中第一个字符的实例替换为替换列表中的第一个字符。换句话说,在本示例中,每个大写“A”的实例都将替换为小写“a”、“B”替换为“b”,依此类推。文本中的小写字母保持不变。

如果您需要先对 rename 所执行的工作进行预览,那么可以添加 -n 选项。这个选项可以显示该命令所执行的工作,但并不真正地进行这些更改:

代码如下:


$ rename -n 'y/A-Z/a-z/' *
RenT.txt renamed as rent.txt
bEErMoNey.txt renamed as beermoney.txt
gASmoNey.TXt renamed as gasmoney.txt
$ rename 'y/A-Z/a-z/' *
$ ls
beermoney.txt  gasmoney.txt  rent.txt

其中有一个缺点需要避免:在 UNIX 系统中,文件名是区分大小写的。一个目录中可能包含 Aa.Txt 和 aA.txT。如上所述,可以编写一条重命名规则将区分大小写的文件名转换为小写文件名,这样可能会与以前已存在的唯一的文件名发生冲突。在这种情况下,rename 将如何操作呢?让我们来看一下:

代码如下:


$ rename -n 'y/A-Z/a-z/' *
Aa.Txt renamed as aa.txt
aA.txT renamed as aa.txt
$ rename 'y/A-Z/a-z/' *
aA.txT not renamed: aa.txt already exists
$ ls
aA.txT  aa.txt

如果您希望在进行重命名的过程中删除现有的文件,那么可以添加 -f 标志。在这个示例中,将得到一个名为 aa.txt 的文件。那么哪个文件是其原始文件呢?因为 rename 按照字母顺序进行处理,后面的 aA.txT 文件是现在的 aa.txt。为什么要使用 -f 呢?如果两个文件是相同的,仅仅是名称不同,rename -f 会删除重复的文件。

不要删除重复的文件

文件管理是使用 UNIX 系统时非常重要的工作。系统中包含大量的配置文件。您可能拥有非常多的数据文件和个人文件。您可能不时地需要删除或覆盖某个有价值的文件。shell 和一些文件管理实用工具可以帮助您避免灾难。

在 Shell 提示符处输入下面的命令。这些命令可以在 bash 中执行,但 zsh 和其他 Shell 也具有类似的选项。

代码如下:


$ alias mv=mv -i
$ alias rm=rm -i
$ set -o noclobber

前两个命令分别在命令行中将 mv 替换为 mv -i、将 rm 替换为 rm -i。交互式的模式强制您对操作进行确认。

第三个命令在 Shell 中提供了一定的安全性。启用了 noclobber 之后,您就不会一不小心使用 > 重定向操作符覆盖某个文件:

代码如下:


$ ls
secret.txt
$ cat > secret.txt
bash: secret.txt: cannot overwrite existing file

要禁用 noclobber,可以输入:

代码如下:


set +o noclobber

。您还可以在任何时候使用 >|(一个小于号加上一个竖线)重定向操作符强制进行覆盖。

代码如下:


$ cat secret.txt
I love green eggs and ham.
$ echo "No more secrets" >| secret.txt
$ cat secret.txt
No more secrets

关于本地的一些秘密

如果您真的希望发现一个城市,那么您得到当地的公众聚谈之处走访一下。下面是一些命令行的组合,相当于提供旅游资讯的 Zagat。

mkdir -p 可以快速地创建层次结构。使用 -p 选项后,mkdir 将为指定路径创建所有的目录和子目录:

代码如下:


$ mkdir -p make/many/directories/at/once
$ ls -R
./make:
many</p><p>./make/many:
directories</p><p>./make/many/directories:
at</p><p>./make/many/directories/at:
once</p><p>./make/many/directories/at/once:

如果您需要了解下一个发薪日的时间,只需要输入 cal。不带任何参数时,cal 将显示当前月份的日历。cal -3 命令显示上个月、这个月和下个月的日历,而 cal 06 2009 将显示 2009 年 6 月的日历。(我的生日是那一年的某个星期一!)

代码如下:


$ cal</p><p>   November 2006    
Su Mo Tu We Th Fr Sa
         1  2  3  4
5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
$ cal 06 2009</p><p>     June 2009      
Su Mo Tu We Th Fr Sa
   1  2  3  4  5  6
7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

因为 UNIX 具有许多命令,所以不太可能记住所有实用工具的所有选项。事实上,有时候甚至记不住实用工具的名称。

在遇到困难时,可以求助于 man。例如,要查看如何使用 man 本身,可以输入 man man。使用 man rm 和 man mv,您还可以查看有关 rm 和 mv 的解释。并且,如果清楚需要查找的主题,那么您可以使用 man -k 查找与该主题相关的 man 页面列表。

代码如下:


$ man -k cron
cron (8)             - daemon to execute scheduled commands (Vixie Cron)
crontab (1)          - maintain crontab files for individual users (V3)
crontab (5)          - tables for driving cron
dh_installcron (1)   - install cron scripts into etc/cron.*

在本示例中,man 找出了一些实用工具的 man 页面,其中有一行描述内容中包含单词 cron。这些 man 页面中可能解释了如何使用 cron,这是一个负责系统任务调度的守护进程。

那么其中的数值代表什么含义呢?每个数值表示联机 UNIX 手册中的一个部分。第 1 部分保留用于 UNIX 用户可以在 Shell 中运行的所有命令。第 5 部分描述了一些文件格式。第 8 部分对系统管理命令进行了编目。其他的部分描述了系统调用 (2)、库调用 (3),等等。

正如您所看到的,大多数命令都会产生某类输出。大多数命令行命令使用标准输出来显示结果。但其他的一些命令则使用标准输出和标准错误,并按顺序显示处理过程和错误消息。如果您希望忽略这类输出(这是非常有价值的,因为它通常可以干预命令行中执行的操作),那么可以将输出重定向到 UNIX bit bucket,/dev/null。这些位只能进,不能出。

下面是一个简单的示例:

代码如下:


$ ls
secret.txt
$ cat secret.txt
I am the Walrus.
$ cat secret.txt > /dev/null
$ cat socrates.txt > /dev/null
cat: socrates.txt: No such file or directory
$ cat socrates.txt >& /dev/null
$ echo Done.
Done.

如果将 cat 的标准输出重定向到 /dev/null,那么将不会显示任何内容,因为已将所有的位发送到了虚拟的“永久竖向文件”。然而,如果出现了错误,将显示发送到标准错误的错误消息。如果您希望忽略所有的输出,可以使用 >& 操作符以便将 stdout 和 stderr 丢弃。

您还可以将 /dev/null 作为一个长度为零的文件,以清空现有的文件或者创建新的空白文件:

代码如下:


$ cat secret.txt
Anakin Skywalker is darth Vader.
$ cp /dev/null secret.txt
$ cat secret.txt
$ echo "The moon is made of cheese!" > secret.txt
$ cat secret.txt
The moon is made of cheese!
$ cat /dev/null > secret.txt
$ cat secret.txt
$ cp /dev/null newsecret.txt
$ cat newsecret.txt
$ echo Done.

Done.顺便提一下,如果您在 Macintosh 中使用 UNIX,那么可以在一个终端窗口中尝试 open 命令。例如,如果当前工作目录中有一个名为 poodle.jpg 的文件,命令 open poodle.jpg 将启动 Preview 并打开 poodle.jpg,Preview 是 Mac OS X 中内置的图像查看器。Mac OS X open 是命令行和 Macintosh 的窗口环境之间的纽带,并且它比借助于 Finder 要快得多。

感谢各位的阅读!关于“UNIX命令行惯用语有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: UNIX命令行惯用语有哪些

本文链接: https://www.lsjlt.com/news/264788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • UNIX命令行惯用语有哪些
    这篇文章给大家分享的是有关UNIX命令行惯用语有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开始学习之旅在以前的对话 UNIX 专栏中曾多次介绍了 find 命令,这是一种非常有用的实用工具,可用于扫描并处...
    99+
    2023-06-13
  • Unix/Linux命令技巧有哪些
    这篇文章给大家分享的是有关Unix/Linux命令技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 删除一个大文件我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,...
    99+
    2023-06-15
  • 有哪些Unix/Linux命令技巧
    这篇文章主要讲解了“有哪些Unix/Linux命令技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Unix/Linux命令技巧”吧!> /path/to/file.l...
    99+
    2023-06-09
  • mysql命令行常用命令有哪些
    这篇文章将为大家详细讲解有关mysql命令行常用命令有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 MySql地址:www.mysql.org 第一招、mysq...
    99+
    2024-04-02
  • mysql命令行中常用的命令有哪些
    这篇文章主要介绍mysql命令行中常用的命令有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql命令行常用命令第一招、mysql服务的启动和停止net stop mysql...
    99+
    2024-04-02
  • Linux命令行下常用svn命令有哪些
    本篇内容主要讲解“Linux命令行下常用svn命令有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux命令行下常用svn命令有哪些”吧!本文讲述了Linux命令行下常用svn命令的使用...
    99+
    2023-06-17
  • Linux/Unix 磁带管理命令有哪些
    Linux/Unix 磁带管理命令有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们要想将文件归档或者数据从一台服务器传送到另一台可以使用磁带设备,磁带设备与 Uni...
    99+
    2023-06-28
  • Linux命令行下有哪些常用的svn命令
    这篇文章主要介绍Linux命令行下有哪些常用的svn命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux命令行下将文件checkout到本地目录svn checkout path(path是服务器上的目录)例...
    99+
    2023-06-17
  • 常用的linux命令行有哪些
    常用的Linux命令行有:1. cd:切换工作目录2. ls:列出目录内容3. pwd:显示当前工作目录的完整路径4. mkdir:...
    99+
    2023-06-04
    linux命令行 linux
  • R语言常用命令有哪些
    这篇文章将为大家详细讲解有关R语言常用命令有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。R语言常用命令help.start()//打开帮助文档q()//推出函数ls()//返回处于现在名空间的对象名...
    99+
    2023-06-14
  • 实用的Linux/Unix磁带管理命令有哪些
    这篇文章给大家分享的是有关实用的Linux/Unix磁带管理命令有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么备份一个备份计划对定期备份文件来说很有必要,如果你宁愿选择不备份,那么丢失重要数据的风险会...
    99+
    2023-06-16
  • 有哪些C语言编程习惯
    本篇内容主要讲解“有哪些C语言编程习惯”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些C语言编程习惯”吧!判断失败而非成功下面是一段简化过后的代码片段:if (physap_ala...
    99+
    2023-06-16
  • Linux有趣的命令行有哪些
    本篇内容主要讲解“Linux有趣的命令行有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux有趣的命令行有哪些”吧!你有将Linux物尽其用吗?对很多Linux用户来说,有很多看起来是...
    99+
    2023-06-13
  • 常用Perl命令行参数有哪些
    这篇文章将为大家详细讲解有关常用Perl命令行参数有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Perl命令行应用介绍Perl语言中有很多Perl命令行参数.通过它们,我们有机会写出更简单的程序,在...
    99+
    2023-06-17
  • Perl命令行有哪些常见用法
    这篇文章主要介绍了Perl命令行有哪些常见用法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Perl命令行之替换◆将所有C程序中的foo替换成bar,旧文件备份成.bakpe...
    99+
    2023-06-17
  • nmap实用命令行技巧有哪些
    这篇文章将为大家详细讲解有关nmap实用命令行技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1) 获取远程主机的系统类型及开放端口nmap -sS -P0 -sV -O <target&g...
    99+
    2023-06-16
  • 常用的mysql命令语句有哪些
    1. 创建数据库:CREATE DATABASE database_name;2. 删除数据库:DROP DATABASE ...
    99+
    2023-06-10
    mysql命令 mysql
  • 常用dos命令及语法有哪些
    这篇文章给大家分享的是有关常用dos命令及语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用dos命令及语法cd 改变当前目录,dir 列出 文件 和 文件夹名,dir /ad /b  指列出...
    99+
    2023-06-08
  • node.js命令行有哪些特点
    1. 异步非阻塞:Node.js使用异步的事件驱动模型,可以处理大量并发连接,不会阻塞其他的操作。2. 单线程:Node.js使用单...
    99+
    2023-08-16
    node.js
  • Git惯用操作有哪些
    这篇“Git惯用操作有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Git惯用操作有哪些”文章吧。一、创建 Git 仓库...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作