每当您旅行到一个居民说不同寻常的母语的国家时,您都可能会用一些基本的生存短语武装自己,例如“这要花多少钱?”,“这是哪种肉?”和“哪里在洗手间吗?” 记住这些小技巧可以确保您不会因订购的那条蛇三明治而被多收,而且您知道大自然母亲(或蛇三明治)打来电话时该去哪里。

UNIX®也拥有自己的方言,并且在过去的六个月中,该口语UNIX系列在命令行执行方面提供了一些速成课程。 本月,学习一些有用的短语,让您立即与当地人融合。 拿起牙刷,收拾一些舒适的鞋子,并更新接种疫苗。 您想去晒太阳,沙子和贝壳。 (对于阳光和沙滩,请sc起笔记本电脑,前往海滩,在水边附近俯冲,然后阅读本专栏。不要忘了防晒霜。)

参加徒步之旅

以前的许多UNIX口语专栏(请参阅参考资料 )都提供了find命令-一个非常有用的实用程序,用于扫描和处理文件甚至整个UNIX文件系统。 例如,我经常将findgrep或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,将findxargs结合使用等效于:

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递归列出层次结构的内容chmodchgrpchown使用-R将模式,组和所有权更改应用于整个文件系统层次结构。请小心使用chmod -R 。如果删除目录的执行位,可能会无意中使该目录不可用,例如使用chmod -R ax 。要想更具选择性,请尝试find . -type f | xargs chmod ax 。)

那么,什么时候应该使用find / xargs ,什么时候应该使用grep ? 需要选择时,请使用findfind命令具有许多条件,允许您选择满足特定要求的文件,例如概念上的“午夜之后修改并由Joe拥有的所有常规文件”。 否则, grep -R就足够了。

find相比,另一个实用程序可以更方便快捷地使用。 如果find -name名称查找文件,请尝试使用locate而不是find -namelocate命令会定期(一天左右一次,由系统管理员调整)对系统上的每个文件进行分类,并建立一个包含路径和文件名的数据库。 当您运行locate ,它会扫描其私有数据库,尝试进行匹配。

例如,运行查询locate '*.1'产生名称以.1结尾的所有文件和目录。 (星号开头表示匹配任何内容 。)为了方便起见,运行locate fish命令与locate '*fish*'

货币兑换

许多UNIX实用程序都会修改文件。 在大多数情况下,更改后的内容会发送到标准输出,您可以在其中使用重定向运算符进行进一步处理(使用管道-|)或捕获结果(使用>>>运算符)。

其他实用程序(通常可以一次处理多个文件的实用程序)可以保留原始文件以进行保管,并为更改后的内容生成一个新文件。 例如,您可以直接从命令行使用Perl来处理文件。 命令:

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

用“ buck”替换“ dollar”,用“ bucks”替换“ dollars”。 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)
domv $file.bak $file
done

在像这样的简单情况下,它确实可以很好地工作。 但是,此类任务非常普遍,以至于使用特殊的实用程序可以使工作更快。 命令:

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

执行相同的任务。 正则表达式s/\.bak$// 。bak s/\.bak$//从命令行上列出的每个文件名(此处为*或每个文件)中删除.bak ,并将缩写名称用作目标文件名。

当文件名特别不规则时, rename命令特别有效。 例如,考虑该目录的内容,它看起来像是大学新生的一封信。

$ ls
RenT.txt  bEErMoNey.txt  gASmoNey.TXt

上面显示的foreach脚本无法解决此问题,因为文件名太不规则了。 然而, rename可以通过一些按键来处理:

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

正则表达式y/AZ/az/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提示符下键入以下命令。 这些命令可在bash ,但zsh和其他Shell中也存在类似的选项。

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

前两个命令在命令行上分别用mv -irmrm -i替换mv 。 交互模式迫使您确认操作。

第三个命令在外壳本身中提供了一点安全性。 在启用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可以快速进行层次结构创建。 使用-pmkdir创建在命名路径中找到的每个目录和子目录:

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

如果您需要知道下一个发薪日是何时,只需键入cal 。 不带任何参数的cal输出当前月份的日历。 cal -3命令显示前一个,当前和下个月,而cal 06 2009显示您2009 cal 06 2009 6月。(我的生日在当年的星期一!)

$ calNovember 2006
Su Mo Tu We Th Fr Sa1  2  3  45  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 2009June 2009
Su Mo Tu We Th Fr Sa1  2  3  4  5  67  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 rmman mv查看rmmv说明。 而且,如果您知道要查找的主题,则可以使用make -k查找与该主题相关的手册页列表。

$ 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发现了这些实用程序的手册页,这些实用程序的单行描述包含单词cron 。 这些手册页可能会解释如何使用cron (系统作业计划守护程序)。

少量的数字是做什么的? 每个数字均指联机UNIX手册的一部分。 第1节保留给UNIX用户可以在Shell中运行的所有命令。 第5节介绍文件格式。 第8节对系统管理命令进行了分类。 其他部分介绍系统调用(2),库调用(3)等。

如您所见,大多数命令都发出一种或另一种输出。 大多数命令行命令将标准输出用于结果。 但是其他人则使用标准输出和标准错误按顺序显示进度和错误消息。 如果您想忽略这种输出(这很有用,因为它通常会干扰在命令行上的工作),则可以将输出重定向到UNIX 位存储区 / 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,则不会显示任何内容,因为所有位都已扔到虚拟的“永久垂直文件”中。 但是,如果您输入有误,则会显示错误消息,该错误消息会发出标准错误消息。 如果要忽略所有输出,请使用>&运算符将stdoutstderr发送到位存储桶。

您还可以将/ 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(内置Mac OS X图像查看器),并带有您的贵宾犬的图片。 Mac OS X open是命令行和Macintosh的窗口环境之间的重要链接-而且通常比诉诸Finder快得多。

必须再次访问!

ew! 那是一堂快节奏的课,但是现在您已经准备好进一步深入UNIX。 您甚至都知道大自然母亲来电话时比特桶在哪里。

与往常一样,还有更多内容要讲。 在接下来的几个月中, Speaking UNIX系列将深入研究作业控制,正则表达式(可以肯定,但并非不可能掌握的一种方言),如何构建可从Internet下载的新实用程序等等。

不要忘记防晒霜。


翻译自: https://www.ibm.com/developerworks/aix/library/au-speakingunix7.html

命令行执行java程序_命令行执行相关推荐

  1. java编译程序的基本命令是什么,【填空题】Java中编译java 程序的命令是 1 ,执行java程序的命令是 java 。...

    [填空题]Java中编译java 程序的命令是 1 ,执行java程序的命令是 java . 更多相关问题 [多选] 下列骨折中属于关节外骨折的是(). [多选] 骨折早期局部的并发症包括(). [多 ...

  2. 如何用命令行写java程序_如何用java实现doc命令行

    如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了. 不过有点小bug就是当你进去的是文件就会提示空指针异 ...

  3. 命令行编译java项目_命令行编译运行java工程(转)

    平时建立Java工程都是借助eclipse或intellij这些ide编辑器来构建,对于java工程的实际编译执行原理,从未了解过.作为一个曾经的C++程序员,对于源码刨根问底的那份执着从未丢过.于是 ...

  4. 怎么一键执行java程序_如何快速、低成本、低扰动地运行一段Java代码

    JVM是个运行服务端应用的好VM,但如果你只是想频繁地运行一段Java写的脚本,或者在跑一些辅助性的Java程序比如监控,比如日志收集,这时候的诉求就和平日里的应用不一样了: 1.启动快速,动静小. ...

  5. 定时执行java程序_如何让Java程序定时运行

    由于项目开发的需要,必须实现让一个Java程 序定时运行.比如,我的项目中,有一个网络蜘蛛,需要从互联网上抓取数据,与其配合,有另一个程序来对新抓取的页面进行索引的创建,由于数据源更新频率不 高,我们 ...

  6. bat执行java文件_.bat文件执行java程序

    脚本: @echo off echo 测试开始,请稍后.... echo path:%~dp0 set base=%~dp0 set class=%base%\classes set libs=%ba ...

  7. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  8. java命令行执行编译好的类_Java命令行编译并执行Java程序

    通过命令行执行Java程序. 首先,保证正常的环境变量配置正确: JAVA_HOME=C:\jdk150_04; PATH=%JAVA_HOME%\bin;%PATH% CLASSPATH=.;%JA ...

  9. java 程序命令_命令行运行JAVA程序

    如果出现找不到变量,核查环境变量是否配置好 可以运行javac java java -version看是否正常 注意要在对应的目录下 核查java文件里边的名字 class文件名是否与java文件名一 ...

最新文章

  1. 一致性哈希算法的理解
  2. Ext2.0 form使用实例
  3. python 查看字符编码,[Python]判断系统编码和字符编码chardet
  4. 代码安全检视方法有_在华为写了 13 年代码,都是宝贵的经验
  5. HttpApplication的认识与加深理解
  6. hue访问mysql,【原创】大叔经验分享(50)hue访问mysql(librdbms)
  7. 【Python】Python中文编码
  8. IBM推出Watson广告服务:认知计算将重塑营销市场?
  9. RTOS osDelay和taskDelay关系
  10. Service GIS
  11. 车牌识别LPR(八)-- 字符识别
  12. 食品安全事件曝光严重,SPC软件的应用刻不容缓
  13. 蓝牙设备删除失败_十代混动雅阁车载蓝牙连接不上怎么办?
  14. 解决error mounted is not defined no-undef
  15. 2022年湖北省企业吸纳就业补贴申请条件及具体奖励标准
  16. Tomcat无法用命令关闭
  17. 电容器的基础知识(2)
  18. 2018.03.18 临汾市游记
  19. 配音秀显示服务器去配音了,英语配音秀
  20. 晨曦记账本记录收支,图表查看收支账目

热门文章

  1. 事件冒泡,阻止事件冒泡
  2. 微软宣布Office 2019桌面版 2018年秋季发布公开预览版
  3. 回环检测回环校正(一):回环检测原理
  4. 华硕天选2 找不到WLAN网络
  5. 【nuXmv学习笔记】4:模型检测实例
  6. magjic mouse2频繁断开连接!
  7. CSDN学霸课表——软件设计师、信息系统监理师、数据库系统工程师、系统分析师
  8. pyspark--中位数计算
  9. 用python画lgx的图_[难度4]MOD教程之Python语言在Module System里的简单应用
  10. 机器学习——随机森林特征选择及周期性分析