一、扩展字段匹配

首先我们来看一个叫做扩展字段匹配的功能。这个选项允许你执行比标准Bash所提供的更复杂的字段匹配。例如,你可以定位除了后缀为.tmp之外的所有文件。扩展字段匹配功能可以通过shopt命令启用,或者内置的shell选项:

$ shopt -s extblob

备注:你还可以运行shopt命令来查看其它选项、特性和它提供的一些秘密功能。

一旦启用,我们可以用一个简单的语法列出某个目录中除去后缀为.tmp的所有文件:

$ ls !(*.tmp)

你还可以使用多个参数:

$ ls !(*.tmp|*.log|*.bak)

你可以选择使用其它几个extglob的参数,比如:

?(pattern-list) Matches zero or one occurrence of the given patterns

*(pattern-list) Matches zero or more occurrences of the given patterns

+(pattern-list) Matches one or more occurrences of the given patterns

@(pattern-list) Matches exactly one of the given patterns

!(pattern-list) Matches anything except one of the given patterns

二、cdspell shell选项

Cdspell是另一个很有用并且少为人知的shell命令。Cdspell命令可以更正在cd命令中出现的小的拼写错误。你可以通过shopt命令行来启用cdspell选项。

$ shopt -s cdspell

举个例子,现在我们试着输入一个简单的关于更改目录的错误命令:

$ cd /ect

/etc

很快你能发现这个小错误被自动更正过来了,并且bash已经让你成功更改到了正确的目录下。

$ pwd

/etc

Cdspell选项可以自动更正字母顺序拼写错误的单词,漏了字母的单词,还可以去掉单词中多余的字母。

三、更好地管理Bash命令历史记录

Bash中最有用的功能之一就是可以自动记忆你曾经使用过的命令。你可以用history命令来列出一系列之前执行过的命令。然后你可以在bash shell中用叹号标注来找回并且执行之前的命令。例如,你可以从历史记录中通过数字列出某条命令:

$ !110

这样可以运行历史记录中的第110条命令。或者你也可以通过名称来指定某条命令:

$ !wget

这样执行最近的一条wget命令。

以下这种用法很少人知道:

$ !:0

这可以返回之前执行过的命令行中的命令字段,例如:

$ wget http://www.google.com

$ !:0

$ wget

如果不需要命令,只需要返回命令之后的参数,你可以用这个命令:

$ mkdir /tmp/newdirectory

$ cd !*

cd /tmp/newdirectory

然后,你的历史记录有可能因为重复使用而变得混乱,而且你会希望只返回一些比如ls或者ps命令这样的结果。Bash有一个叫做$HISTIGNORE的环境变量,它可以只记忆那些你想要的命令,而不是所有命令。让我们看看我的$HISTIGNORE设置:

$ HISTIGNORE="&:history:ls:ls * ps:ps -A:[bf]g:exit"

这个设置可以避免记录重复记录(&号),然后所有ls,ls*ps和ps-A,还有bg,fg和内置的exit命令都将被记录在历史列表中。另一个有用的小技巧就是加一个[ \t]*参数,可以避免所有以空格开始的命令被记录在历史列表中。最后,我们只要输出它就可以了:

$ export HISTIGNORE

四、交互式历史命令搜索

你以前知道这件事情吗,就是你可以互动式地搜索你的Bash历史命令,从而更好地整理好它?你可以输入Ctrl-r来启用这个搜索功能(这个可以对Emacs用户来说比较熟悉,就像Emacs一样,你可以用Ctrl-a和Ctrl-e到达命令行的开始或者结尾,象其它快捷键一样)。这会启动以下命令:

(reverse-i-search)`':

然后你可以输入一个命令或者命令的一部分来搜索你的Bash历史命令,系统会列出匹配的命令。如果找到你需要的命令你可以通过敲击回车键来运行它或者敲ESC键来编辑匹配的命令行。

五、非别名命令

多数人都知道如何使用别名命令,它允许你创建自定义版本的命令,比如给rm命令加一个-r参数,或者给mkdir加一个-p参数:

$ alias rm='rm -r'

$ alias mkdir='mkdir -p'

你也可以不加标记的运行一个别名命令来获得一个当前可用的别名命令列表。

但是你可能不知道非别名命令。这可以让你在无需别名的情况下运行一个命令:

$ unalias rm /tmp/file

你还可以用\参数来获得相同的结果:

$ \rm /tmp/file

这将执行rm命令,而不需要象在别名命令中一样手动去加-r参数。

下面介绍另外五个同样十分实用的Bash命令:

六、更改Bash导航

大多数人都知道Bash的导航命令。用Emacs作编辑器的人对它们更是相当熟悉。它们包括:

Ctrl + a - 返回到当前命令的开始

Ctrl + e - 返回到当前命令的末尾

Ctrl + w - 删除光标左边的第一个条目(变量或者命令)

Ctrl + u - 剪切光标前面的所有内容

Ctrl + y - 剪切光标后面的所有内容

Ctrl + y - 粘贴你用Ctrl +u或者Ctrl + y剪切的内容

Ctrl + p - 滚动显示以前的命令

Ctrl + n - 下一个命令

Ctrl + l - 清屏

你可能不知道Bash不仅能够使用Emacs编辑模式,而且还能够使用vi模式(为那些更喜欢用vi命令的人准备)。你可以用下面的命令切换到vi编辑模式:

$ set -o vi

你还可以把这个命令添加到你的.bashrc文件中,以便永久地切换到vi模式:

$ set -o vi >> ~/.bashrc

现在你就可以用vi模式使用命令行了。比如,你可以用vi命令模式进行导航。按Esc键进入命令模式,然后你就可以使用以下命令:

l - 向前移动一个字符

h - 向后移动一个字符

0(零) - 把光标移动到该行最前面

$ - 把光标移动到行末

w - 往前移一个字

b - 往后移一个字

然后你可以按Esc键退出命令模式,或者像vi一样按A或I键进入插入模式,对命令行进行编辑。按enter键会执行当前命令。

如果你决定不用vi模式,你可以键入以下命令返回emacs模式:

$ set -o emacs

你还可以用命令:

$ bind -P

来显示你的所有命令以及它们的按键设置。你也可以用该bind命令对各种函数设置自己的按键组合。

cd -命令

你可以使用:

$ cd -

返回你原来所在的目录,你可以重复使用该命令返回上一级目录。

七、设置命令的输出路径

有时候你想告诉人们你的命令行发生了什么事情,但是又不想让他们拥有访问权。有一种快捷、简便的方法可以解决这个问题:使用脚本和nc命令在网络上显示你的命令行发生了哪些变化,只需输入:

$ script -f >(nc -l 8000)

这个命令会把所有在命令行中键入的内容输送到网络上,所有使用监听端口8000的人都能够看到你用nc命令键入的内容。

$ nc host 8000

八、文件首次重定向

我喜欢那些让我少打字的技巧。通常你想要用多种方式处理同一个文件。使用重定向,我们可以首先指定文件的名字,以及结束时执行的命令。比如:

$

$

$

这里我们指定了我们想要预先搜索的文件,然后指定了grep命令和我们想要查找的文本。现在如果我们想要从历史中检索该命令,我们只需要编辑要再次搜索的文本就可以了。

九、三个有用的查找(find)命令

最后,我要分享三个我经常使用的、非常有用的查找命令。Find命令是一个非常强大的小工具,尤其是与-exec选项搭配的时候,它们允许你在查找的结果中执行命令。我建议你阅读一下find的说明,以便更深入的使用该命令。

第一个命令:查找并列出当前目录中过去一天修改的所有文件。

$ find ./ -type f -mtime -1 -exec ls -al {} \;

你显然可以修改该命令,以便查找其他地方、不同时间(把-1改成不同的时间)的文件。

第二个命令:查找文件,然后执行一个基于Perl的寻找-替换功能。

$ find . -name '*.txt' -type f -exec perl -pi -e 's/goldfish/tiger/g' {} \;

在这种情况下,我们查找所有扩展名为.txt的文件,并在这些文件中查找单词“goldfish”,把这个单词替换成“tiger”。

最后一个查找命令:我经常用它从我的路径中递归删除.svn(和其他的)目录。

find . -name ".svn" -exec rm -rf {} \;

linux中shell命令行缩进,Linux下几个实用的bash命令 | 旺旺知识库相关推荐

  1. Linux中shell模块的考试,linux下的shell编程要考试了题目这里有可是表示不会 求帮忙...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 (1)创建用户 l 批量创建1000个用户 l 用户名为:班级+学号+昵称:每个班为一个组群 l 能够自动删除所创建的用户 l 每成功创建或删除一个用户, ...

  2. linux下变量名长度,Linux中shell的变量介绍

    Linux中shell的变量介绍 发布时间:2020-06-24 16:20:39 来源:亿速云 阅读:112 作者:元一 这期内容当中的小编将会给大家带来有关Linux中shell的变量介绍,以专业 ...

  3. linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}

    一直傻傻搞不清,还是梳理一下吧. linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Pr ...

  4. linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量

    原标题:Linux中shell基础.重定向.管道符.环境变量 1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核 ...

  5. Linux中shell提示符定制

    Linux中shell提示符定制   如果您很容易使 shell 提示行变得色彩绚烂斓且带有更多信息,为什么还要坚持用单调的标准 shell 提示行呢?在这篇技巧中,Daniel Robbins 将说 ...

  6. Linux中shell语法和脚本编写

    Linux中shell语法和脚本编写 原文地址:学习shell的语法,及脚本编写 其它相关辅助资料: 编写shell脚本所需的语法和示例 基础linux指令&简单的shell语法和脚本编写 什 ...

  7. 访问命令行(Linux基本命令)

    一.Bash Shell 简介 bash(Bourne Again SHell)是一种在许多Linux发行版中默认使用的命令行解释器(shell).它是Linux系统管理和开发的重要工具之一,也是Sh ...

  8. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $ ...

  9. Linux中shell的分类以及查看当前的shell

    DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令 shell 是与操作系统相分离的一层. 目前流行的shell有ash.bash.ksh.csh.zsh,如下介绍: b ...

最新文章

  1. python基础知识思维导图-总结 Python 知识点思维导图
  2. apt命令与yum命令
  3. SAP CRM Fiori Launchpad 登录之后,看不见任何 tile 的解决办法
  4. 盘点关于IDEA的几个调试的实用技巧
  5. 云计算及应用课程知识整理
  6. 【小夕精选】YJango 7分钟带你领略你未曾想过的线性代数+微积分
  7. arcgis批量处理nc文件_ArcGIS处理NetCDF(.nc)的多维科学数据
  8. 零基础转行Web前端开发自学靠谱吗?菜鸟学习前端的方法分享
  9. RequireJS模块化后JS压缩合并
  10. 关于ashx的基本应用
  11. ARP协议报文格式及ARP表简述
  12. 虚拟机VMware安装PhoenixOS(凤凰OS)
  13. 成功解决Collecting package metadata (current_repodata.json): failedCondaHTTPError: HTTP 000 CONNECTION
  14. Ubuntu下LimeSDR-USB或LimeSDR Mini使用说明
  15. 舒淇放下黎明战胜抑郁 自称没责任感且不会结婚q1h
  16. SPSS免费安装教程(详细版)
  17. HDOJ 最小长方形 1859
  18. Acwing 265. 营业额统计
  19. 【密码学原理】消息认证概述,Hash和MAC
  20. 三电(新能源)冷却管气密测试的密封方案

热门文章

  1. CSP基础-CSP入门简介
  2. 安卓手机与Linux同步后,搜索文件内的内容
  3. STM32,点亮RGB灯,指南者,新手
  4. 计算机科学与技术专业图书,《计算机科学与技术专业毕业论文选》—甲虎网一站式图书批发平台...
  5. STM32F407 电机编码器测量
  6. mysqldump 备份详解
  7. 什么是 Adobe AIR
  8. 闲聊互联网经济的现代化
  9. 接着这次机会,发一下我做试管的经历~
  10. 批量转换中文名称为英文名称(注:一般为转换格式拼音)