Shell 命令奇淫技巧,就是有点短

智码银月引
• 阅读 800

1、在任意目录之间快速移动

你发现自己要在两个或更多目录之间频繁移动,一会切换到这里,一会切换到那里,来回跳转。这些目录之间隔得还挺远,反复输入冗长的路径让人疲惫不堪。

使用内建命令 pushd 和 popd 来管理目录栈,轻松地在目录之间切换。下面是一个简单的示例:

$ cd /tmp/tank
$ pwd
/tmp/tank

$ pushd /var/log/cups
/var/log/cups /tmp/tank

$ pwd
/var/log/cups

$ ls
access_log error_log page_log

$ popd
/tmp/tank

$ ls
empty full

$ pushd /var/log/cups
/var/log/cups /tmp/tank

$ pushd
/tmp/tank /var/log/cups

$ pushd
/var/log/cups /tmp/tank

$ pushd
/tmp/tank /var/log/cups

$ dirs
/tmp/tank /var/log/cups

栈是一种后进先出的结构,这两个命令也正是这么做的。如果对一个新目录使用 pushd,那么它会将前一个目录压入栈中。当使用 popd时,它会弹出栈顶保存的当前位置,切换到新的栈顶目录。使用这些命令更改位置时,会从左到右输出目录栈中的值,对应于栈中自顶向下的顺序。

如果使用 pushd 时没有指定目录,那么它会交换栈顶的两个目录的位置,这样就可以重复使用 pushd 命令来实现两者之间的切换。cd命令也能够达到相同效果。

如果不记得目录栈中都有哪些目录,可以使用内建命令 dirs 按照从左到右的顺序显示。加上 -v 选项后,显示形式更形象。

$ dirs -v
 0  /opt/yongheng
 1  /opt/yongheng/Shell
$

数字可用来调整栈内目录的位置。pushd +1 会将编号为 1 的目录置为栈顶(并切换到该目录)并将其他目录下压。

$  pushd +1
/opt/yongheng/Shell /opt/yongheng

$  dirs -v 
0  /opt/yongheng/Shell
1  /opt/yongheng 

要想看到类似于栈的目录列表,但又不希望出现编号,可以使用 -p选项。

# dirs -p                                                                                              /opt/yongheng/Shell                                                                                    /opt/yongheng     

2、重复上一个命令

你刚刚输入了一个又长又麻烦的命令,其中包含了冗长的路径名和一堆复杂的参数。现在需要重新执行该命令。难道还得再输入一次?

这个问题有两种解决方法。第一种方法只需要在提示符下输入两个惊叹号,然后 bash 就会显示并重复执行上一个命令。例如:

$  cd /opt/                                                                                            $ !!                                                                                                   cd /opt/  

另一种(更现代的)方法是使用箭头键。按上箭头键会回滚到执行过的上一个命令。如果找到了需要的命令,按下 Enter 键就可以(再次)执行该命令。

3、参数重用

重用上一个命令很简单,使用 !! 就行了,但你需要的未必总是整个命令。如何只重用最后一个参数呢?

用 !$ 指明上一个命令中的最后一个参数。!:1 表示第一个参数,!:2 表示第二个参数,以此类推。

多个命令使用相同的文件名为参数是司空见惯的事情。最常见的场景之一就是程序员编辑源代码文件,然后编译、再编辑,再编译……有了 !$,事情就方便多了。如下:

$ vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$ vi !$
vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$

明白其中的意思了吗?这不仅省去了大量的键盘输入,还避免了错误。如果编译时输错文件名,那编译的可就不是刚刚编辑好的源代码文件了。有了 !$,就可以始终得到刚刚用过的文件名。要是想重用的参数位于命令行内部,可以使用带编号的 !: 命令来获取。

4、安全第一,命令测试

一不小心就会输错字符。 (不信你瞧!)即便是简单的 bash 命令,由此带来的后果也非常严重:你会移动错或删错文件。如果再加上模式匹配,结果更让人心跳,因为模式中的输入错误会导致南辕北辙的结果。小心谨慎的用户会怎么做?

可以使用命令历史特性和键盘便捷方式来重复参数,无须从头输入,因此能够减少输入错误。如果要用到棘手的模式来匹配文件,先用echo 测试一下模式能否正常匹配,然后再用 !$ 进行实际操作。例如:

$ ls
ab1.txt ac1.txt jb1.txt wc3.txt

$ echo *1.txt
ab1.txt ac1.txt jb1.txt

$ echo [aj]?1.txt
ab1.txt ac1.txt jb1.txt

$ echo ?b1.txt
ab1.txt jb1.txt

$ rm !$
rm ?b1.txt
$

echo 是检查模式匹配结果的一种方法。一旦确信结果符合预期,就可以将模式用于实际命令。这里我们要删除有特定名称的文件,没人愿意在这种事上犯错。

如果本文对您有帮助,欢迎关注点赞`,您的支持是我坚持创作的动力。

转载请注明出处!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SSH公钥免密登录其他主机
在多台主机之间使用SSH免密登录,假设主机A免密登录主机B:1\.在主机A上生成自己的ssh公钥:root@A~sshkeygentrsa执行上面命令,一路回车,完成后,会在~/.ssh目录下生成2个文件:id\_rsa(私钥)和id\_rsa.pub(公钥)2\.将主机A上生成的公钥
混世魔王 混世魔王
2年前
Linux系统目录结构以及皕杰报表部署目录
我们用root登录linux系统后,这时是在root目录下,输入cd..返回上一级目录。输入ls回车,你会看到如下图所示:下面就每个目录加以说明:•/bin:bin是Binaries(二进制文件)的缩写,这个目录下是最经常使用的命令。•/boot:boot
Aaron445 Aaron445
4年前
46个Linux面试常见问题送给你
问题一:绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令?答案:绝对路径:如/etc/init.d当前目录和上层目录:./ ../主目录:/切换目录:cd
Stella981 Stella981
3年前
Atom安装插件的几种方式
Atom安装插件的几种方式Atom插件安装GUI安装1.打开AtomFileSettingsInstall2.输入你想要安装的插件名/Theme名命令行安装1.打开cmd命令行程序2.切换到.atom/package目录(一般在用户目录下)3.输入命
Stella981 Stella981
3年前
Python内置简易HTTP服务器的使用
Python内置了一个简单的HTTP服务器,命令行切换到放置网页文件(例如index.html)的目录,只需要在命令行下面敲一行命令,一个HTTP服务器就起来了:1)Python2.x:pythonmSimpleHTTPServer80802)Python3.xpythonmhttp.server80
Stella981 Stella981
3年前
LInux根目录详解
【Linux系统目录结构】登录系统后,在当前命令窗口下输入 ls/ 你会看到!image(http://www.92csz.com/study/linux/images/4_20.png)以下是对这些目录的解释:/binbin是Binary的缩写。这个目录存放着最经常使用的命令。/boot这里存放的是启动Lin
Wesley13 Wesley13
3年前
C++之虚函数与虚继承详解
准备工作1、VS2012使用命令行选项查看对象的内存布局微软的VisualStudio提供给用户显示C对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在\项目P\选项下找到“visual属性”后点击即可。切换到cpp文件所在目录下输入如下的命令即可    c
Wesley13 Wesley13
3年前
Mysql免安装版的应用
、首先netstopmysql服务,并且切换到任务管理器,有与mysql有关的,最好关闭进程。2、运行CMD命令切换到MySql安装bin目录cd/dD:\\ProgramFiles\\MySQL\\MySQLServer5.6\\bin接着执行mysqldskipgranttables(注意后面没有分号;)会出现下面
Wesley13 Wesley13
3年前
ubuntu14.04 开启root登陆
安装完成如需使用root身份登录,可打开终端输入以下命令:设置root密码sudopasswdroot切换到root用户sudos想要在登录界面使用root身份登录,可编辑/etc/lightdm/目录下的lightdm.conf文件,如没有此文件,直接创建vi/etc/lig
Stella981 Stella981
3年前
Linux系统的基本操作
_20200727_Linux目录结构基本介绍Linux的文件系统是采用层级式的树状结构,在此结构中的最上层是/根目录tip1:在Linux世界里,一切皆是文件示例/bin:bin是Binary的缩写,这个目录存放着最经常使用的命令。
Wesley13 Wesley13
3年前
E212:无法打开并写入文件
在Linux下用vim敲入:wq退出保存时,出现E212:无法打开并写入文件的错误提示。这是由于在该目录下当前用户没有写权限导致。解决办法如下:【1】将文件保存到用户目录下,再改变所有者,然后移动到配置目录下,步骤如下:1)保存退出时用 :wq!~/tmp/file.conf2)su切换到root用户,将file.conf