在我刚开始使用Linux不久,我试图学习一些bash命令,于是我敲下了如下的命令:
$ man bash我立即发现bash用户手册简直就是一个长篇史诗。一页又一页的命令、功能说明、小技巧、小说明以及非常多的环境变量。20年过去了,我到现在还是能经常在bash中发现一些新的工具和功能 ,我不知道称呼Bash为一个工具是不是比一个代码更为恰当。在这篇文章中我将介绍Bash的一些不常用(但是还是非常有用)的特性。
一、扩展字段匹配
首先我们来看一个叫做扩展字段匹配的功能。这个选项允许你执行比标准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
/etcCdspell选项可以自动更正字母顺序拼写错误的单词,漏了字母的单词,还可以去掉单词中多余的字母。
三、更好地管理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文件首次重定向
我喜欢那些让我少打字的技巧。通常你想要用多种方式处理同一个文件。使用重定向,我们可以首先指定文件的名字,以及结束时执行的命令。比如:
$ </var/log/messages grep dhclient
$ </var/log/messages grep kernel
$ </var/log/messages grep yum这里我们指定了我们想要预先搜索的文件,然后指定了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基本bash命令_linux
bash命令历史记录功能允许用户回顾他们之前执行的命令,这对于常规命令的重复执行非常有用。然而,在某些情况下,用户可能不希望他们的命令历史被记录下来,尤其是在处理敏感信息或安全相关任务时。 为了隐藏bash...
和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令。 方法一:system调用 #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os....
掌握Bash命令和语法对于提高工作效率至关重要,特别是对于Python开发者来说,能够灵活运用Bash命令可以极大地增强他们在日常开发和脚本编写中的能力。"Python-bash命令和语法带你升级打boss"这个主题旨在帮助你更好...
本文将深入探讨如何在Python中通过调用子进程来执行Bash命令,特别是涉及到`sudo`的情况。 首先,让我们了解`sudo`的基本用法。`sudo`是一个在Unix和Linux操作系统中广泛使用的命令,它允许用户以其他用户(通常是...
但即便是熟练的用户,也会遇到在庞大的bash命令历史中查找特定命令的挑战。这时,一个能够提升效率、减少记忆负担的工具显得尤为重要。Go-Borg应运而生,它是一款基于Go语言开发的、针对bash命令的基于终端的搜索...
标题 "使用bash命令从WebUI控制和监视任何GNULinux系统" 暗示了我们正在探讨一种通过Web用户界面(Web UI)来管理和监控Linux系统的方法,这种方法可能利用了Bash shell脚本的威力。Bash是GNU/Linux操作系统中的默认...
"bash-git-prompt"项目正是一款专为Git用户设计的多功能、炫酷的Bash命令提示符工具。下面将详细介绍这个工具及其功能,以及如何在你的Linux环境中安装和使用。 **bash-git-prompt简介** bash-git-prompt是一个开源...
Linux_Bash命令清单_bash-tips
这个组件旨在为用户提供一种直观、交互式的终端体验,使用户能够在前端环境中模拟执行Bash命令,这对于创建教育工具、演示应用或者在Web应用中集成命令行功能非常有用。 ### 1. React基础知识 React是Facebook推出...
本文将深入探讨Bash命令的使用技巧和方法。 1. **Bash Shell脚本基础** - **Shebang(井号叹号)**: 脚本的第一行通常包含`#!/usr/bin/bash`,这个称为Shebang,告诉系统使用哪个解释器来执行脚本。 - **Hello ...
Linux运维-运维课程MP4频-05容器-19docker容器运行bash命令.mp4
1.在进行仓库的创建的使用通常需要进行记录用户的基本信息,name和email,在进本信息录入时使用一下命令 1.git config --global user.name "用户名" 2.git config --global user.email "邮箱地址" 2.创建仓库: ...
Bash命令是执行各种任务的基本工具,从简单的文件操作到复杂的脚本编写。下面是一些常用的Bash命令,这些命令在日常使用中非常实用: 1. **ls**:列出目录内容。例如,`ls -l`显示详细信息,`ls -a`显示包括隐藏...
在本文中,我们将深入探讨Git Bash中的常用命令及其用法。 1. **初始化Git仓库**: 使用`git init`命令可以在当前目录创建一个新的Git仓库。这将生成一个隐藏的`.git`目录,存放Git的所有元数据。 2. **添加文件...
在Linux系统中,Bash shell提供了一系列强大的命令来处理字符串,这些命令包括grep、sed、cut等。本文将详细介绍这些命令的功能、参数及其使用方法。 首先,让我们来看看grep命令。grep全称为Global Regular ...
鉴于目前绝大部分服务器因为没有注册的yum或者因不通外网等问题导致无法使用yum update -y bash 命令进行漏洞修复,如采用RPM包升级修复漏洞又存在各服务器系统有的是32位有的是64位或者bash的版本不一样导致需要...
C++执行Linux Bash命令的方法 在C++语言中,执行Linux Bash命令有多种方法,这篇文章将为大家分享两种常见的方法:使用popen()函数和system()函数。 方法一:使用popen()函数 popen()函数是一个系统调用函数,它...