专栏首页JackeyGao的博客终端操作(SHELL)技巧

终端操作(SHELL)技巧

终端操作(SHELL)技巧

Posted November 29, 2018

本篇是一些小但是有用的终端操作技巧和一些快捷方式,可以让你在 linux 命令行有出奇的效率。一方面这些技巧可以让你的效率有所提高, 但有时候也会有隐患, 所以终端操作一定要注意高风险的行为, 每一步也都要小心的执行。

当然我相信你也有祖传的小技巧, 自己偷偷的使用, 希望你也能通过留言评论, 分享给大家。

0.使用 Tab 键补齐.

如果一个命令, 或者命令参数很长, 并且命令支持补全操作, 那么通过 Tab 键可以很方便的自动补全后面的参数。 当你在命令行键入内容的时候,可以按 Tab 键来显示可能的后面需要补齐的选项, 你可以根据这些选项来进一步操作。

一般执行一个命令, 命令可以补齐, 参数也可以补齐,一个命令操作一般连续按下多次 Tab 键才能完成输入, 最后确保没有问题的时候回车执行。

这个技巧可以让我们不需要死记硬背所有的命令和参数, 你只需要知道命令大概的名字和作用即可。

Bash

$ cd m[按下Tab]
my-test-directory-00001    my-test-directory-00002    my-test-directory-00003
my-test-directory-00004    main.py

$ cd my[按下Tab]
$ cd my-test-direction-0000[按下Tab]
my-test-directory-00001    my-test-directory-00002    my-test-directory-00003
my-test-directory-00004

1.回到上一个工作目录

假设你要在一个目录中工作, 但是你需要到其他的目录处理一个小的问题, 处理完后你可以快速的回到工作目录中. 这是一个非常常用的技巧.

Bash

$ pwd
/Users/jackeygao/Coding
$ cd ~/Downloads
$ pwd
/Users/jackeygao/Downloads
$ cd -
~/Coding
$ pwd
/Users/jackeygao/Coding

2.回到主目录

无论你在任何位置, 你可以通过下面命令快速回到用户目录.

Bash

cd ~

or

Bash

cd

3.一行执行多个命令

多个语句可以通过';'分割

Bash

$ echo Hello; echo World; echo '.';
Hello
World
.

4.一行执行多个命令 (只有上一句执行成功才执行)

比较类似于链式操作, 但需要保证上一句的结果. SHELL 语言没有好的异常停止机制, 所以你必须显式的控制语句. 和上面有区别的是, 可以通过&&串联多个语句, 来保证所有语句必须在上一次执行成功才能这执行. 下面例子中如果 python-devel 已经安装, echo no不会执行.

Bash

$ rpm -qa | grep python-devel &> /dev/null && echo "ok" || echo "no"
ok

在 shell 中, 执行成功或者成功的完成了某个命令(比如grep的匹配)返回码用0表示, 失败或者没有完成某个命令的逻辑则用非0表示.

  • && 表示上一句返回码0才会执行
  • || 表示上一句返回码非0才会执行
  • ; 无论如何都执行

关于返回码, 你可以需要进一步的了解https://www.shellscript.sh/exitcodes.html.

5.搜索并执行历史命令

通过搜索历史命令, 可以很轻松的对历史命令进行复用。 一般很多 SHELL 程序都支持历史命令搜索.

Bash

Ctrl + R   然后 键入关键字

Bash

$ docker run --rm -i -p 8001:8001 -t nova python manage.py runserver 0.0.0.0:8001
bck-i-search: docker run       < 在这个提示符输入关键字(通过 Ctrl + R快捷键调出)

6.解锁你的终端

如果你不小心按到了 Ctrl + S , 那么你会得到一个『冻僵』(只是暂停(Stop)了)的终端 , 好像和死了一样。 而 Ctrl + S 是一般保存文档的快捷键, 这在和 vim 命令编辑文件的时候经常遇到的事情, 不要慌可以通过Ctrl + Q快捷键解冻.

7. 移动到行首或行尾

如下图, 如果我输入一个长的命令, 输入到最后在执行前我发现了问题, 需要在行首增加 sudo 。 这时我可以使用 Ctrl + A移动光标到行首.

8. 删除一个单词

默认通过 退格键 可以删除一个字符, 但如果我的命令很长, 删除操作就会很慢。 可以通过 Esc + 退格键(Backspace) 来删除一个单词(以空格, 符号分割区分).

9. 使用上个命令的最后参数

这个是很常见的场景, 比如我们创建一个目录, 一般紧接着就进到这个空目录操作了. 虽然可以补全操作, 但有一种更简单的方法,你也应该知道, 这会让你显得很酷。 就是组合快捷键[ESC + .], .号就是英文状态下的句号. 也可以通过!$.

Bash

$ mkdir my-test-directory-00001
mkdir: test: File exists
$ cd [按下EST + .] my-test-directory-00001

方法二:

$ cd !$
$ cd  my-test-directory-00001

10. 使用上一个命令

和上面不同的是, 这个操作是直接使用上一个命令, 而不是最后一个参数.

假如我需要安装一个包, 执行完毕后发现需要 root用户才可以安装, 这时我需要在前面加sudo。 请谨慎使用这个.

Bash

$ yum -y install nginx
permission denied

$ sudo !!
sudo yum -y install nginx
Loaded plugins: fastestmirror
....

11.xargs

这是一个魔法命令, 希望你去研究并学会它.

main xargs

12.使用 Python 替代你的 Shell.

前面已经说到, SHELL 没有严谨的异常处理. 如果有自动脚本, 这让服务器运维增加风险属性。 小的脚本还好, 一旦脚本迭代了几个需求,臃肿复杂而且维护性极差, 甚至会非常不安全。 我推荐你使用高级语言来替代 SHELL。 推荐 Python, Ruby 等解释性语言. 大多数系统都自带了 Python, 这对我们对脚本打包提供便利.

以上 : )

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python生态圈

    在某些情况下,你不用覆盖已有的PYTHONPATH,只需要在开头或结尾加上新的路径即可。

    用户1416054
  • 五个很实用的Django 项目推荐

    很多Django的包都能很大的增加我们的开发效率或者增加我们项目的功能, 比如: django-rest-framework 、wagtail, 它们带来了很棒...

    用户1416054
  • 用户Python3解析超大的csv文件

    我在日前获得一个任务,为了做分析, 从一个超大的csv文件中解析email地址和对应的日期时间戳然后插入到数据库中. 我知道有其他工具可以方便的完成我的工作(比...

    用户1416054
  • Python有趣|中文文本情感分析

    前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下:

    罗罗攀
  • TensorFlow模型部署到Android,需要注意几点

    在前面一篇文章《从人工智能鉴黄模型,尝试TensorRT优化》我谈到了TensorFlow模型的优化,这是针对服务器端的优化,实际上优化结果并不理想。这篇文章我...

    云水木石
  • SAP最佳业务实践:SD–现金销售(238)-2销售、发货

    一、 VA01创建销售订单 在此活动中,输入现金销售订单。 1. 在 创建销售订单:初始屏幕 上,输入以下数据: 字段名称用户操作和值注释订单类型BV...

    SAP最佳业务实践
  • 发改委:正制定互联网+人工智能三年行动方案

      3月27日,2016中国(深圳)IT领袖峰会在深圳召开。国家发展改革委高技术产业司副司长孙伟做开幕致辞。孙伟表示,当前我国经济处于新旧动能转换的关键期,IT...

    腾讯研究院
  • (数据科学学习手札17)线性判别分析的原理简介&Python与R实现

    之前数篇博客我们比较了几种具有代表性的聚类算法,但现实工作中,最多的问题是分类与定性预测,即通过基于已标注类型的数据的各显著特征值,通过大量样本训练出的模型,来...

    Feffery
  • 朴素贝叶斯 – Naive Bayes classifier | NBC

    一旦计算,概率模型可用于使用贝叶斯定理对新数据进行预测。当您的数据是实值时,通常假设高斯分布(钟形曲线),以便您可以轻松估计这些概率。

    easyAI
  • 浅谈基于 Git 的版本控制工作流

    因此,在本文中,我们就从「[版本控制简史」出发,揭开「基于 Git 的版本控制工作流」的神秘面纱。

    CG国斌

扫码关注云+社区

领取腾讯云代金券