链接:https://zhuanlan.zhihu.com/p/30668155

Linux 桌面从开始的简陋到现在走了很长的路。在我早期使用 Linux 的那段日子里,掌握命令行是最基本的 —— 即使是在桌面版。不过现在变了,很多人可能从没用过命令行。但对于 Linux 系统管理员来说,可不能这样。实际上,对于任何 Linux 管理员(不管是服务器还是桌面),命令行仍是必须的。从管理网络到系统安全,再到应用和系统设定 —— 没有什么工具比命令行更强大。

但是,实际上……你可以在 Linux 系统里找到非常多命令。比如只看 /usr/bin 目录,你就可以找到很多命令执行文件(你可以运行 ls/usr/bin/ | wc -l 看一下你的系统里这个目录下到底有多少命令)。当然,它们并不全是针对用户的执行文件,但是可以让你感受下 Linux 命令数量。在我的 Elementary OS 系统里,目录 /usr/bin 下有 2029 个可执行文件。尽管我只会用到其中的一小部分,我要怎么才能记住这一部分呢?

幸运的是,你可以使用一些工具和技巧,这样你就不用每天挣扎着去记忆这些命令了。我想和大家分享几个这样的小技巧,希望能让你们能稍微有效地使用命令行(顺便节省点脑力)。

我们从一个系统内置的工具开始介绍,然后再介绍两个可以安装的非常实用的程序。

Bash 命令历史

不管你知不知道,Bash(最流行的 Linux shell)会保留你执行过的命令的历史。想实际操作下看看吗?有两种方式。打开终端窗口然后按向上方向键。你应该可以看到会有命令出现,一个接一个。一旦你找到了想用的命令,不用修改的话,可以直接按 Enter 键执行,或者修改后再按 Enter 键。

要重新执行(或修改一下再执行)之前运行过的命令,这是一个很好的方式。我经常用这个功能。它不仅仅让我不用去记忆一个命令的所有细节,而且可以不用一遍遍重复地输入同样的命令。

说到 Bash 的命令历史,如果你执行命令 history,你可以列出你过去执行过的命令列表(图 1)。

图 1: 你能找到我敲的命令里的错误吗?

你的 Bash 命令历史保存的历史命令的数量可以在 ~/.bashrc 文件里设置。在这个文件里,你可以找到下面两行:

HISTSIZE=1000

HISTFILESIZE=2000

HISTSIZE 是命令历史列表里记录的命令的最大数量,而 HISTFILESIZE 是命令历史文件的最大行数。

显然,默认情况下,Bash 会记录你的 1000 条历史命令。这已经很多了。有时候,这也被认为是一个安全漏洞。如果你在意的话,你可以随意减小这个数值,在安全性和实用性之间平衡。如果你不希望 Bash 记录你的命令历史,可以将 HISTSIZE 设置为 0

如果你修改了 ~/.bashrc 文件,记得要登出后再重新登录(否则改动不会生效)。

apropos

这是第一个我要介绍的工具,可以帮助你记忆 Linux 命令。apropos (意即“关于”)能够搜索 Linux 帮助文档来帮你找到你想要的命令。比如说,你不记得你用的发行版用的什么防火墙工具了。你可以输入 apropos “firewall” ,然后这个工具会返回相关的命令(图 2)。

图 2: 你用的什么防火墙?

再假如你需要一个操作目录的命令,但是完全不知道要用哪个呢?输入 apropos “directory” 就可以列出在帮助文档里包含了字符 “directory” 的所有命令(图 3)。

图 3: 可以操作目录的工具有哪些呢?

apropos 工具在几乎所有 Linux 发行版里都会默认安装。

Fish

还有另一个能帮助你记忆命令的很好的工具。Fish 是 Linux/Unix/Mac OS 的一个命令行 shell,有一些很好用的功能。

  • 自动推荐
  • VGA 颜色
  • 完美的脚本支持
  • 基于网页的配置
  • 帮助文档自动补全
  • 语法高亮
  • 以及更多

自动推荐功能让 fish 非常方便(特别是你想不起来一些命令的时候)。

你可能觉得挺好,但是 fish 没有被默认安装。对于 Ubuntu(以及它的衍生版),你可以用下面的命令安装:

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt update
sudo apt install fish

对于类 CentOS 系统,可以这样安装 fish。用下面的命令增加仓库:

sudo -s
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/shells:fish:release:2/CentOS_7/shells:fish:release:2.repo

用下面的命令更新仓库:

yum repolist
yum update

然后用下面的命令安装 fish:

yum install fish

fish 用起来可能没你想象的那么直观。记住,fish 是一个 shell,所以在使用命令之前你得先登录进去。在你的终端里,运行命令 fish 然后你就会看到自己已经打开了一个新的 shell(图 4)。

图 4: fish 的交互式 shell。

在开始输入命令的时候,fish 会自动补齐命令。如果推荐的命令不是你想要的,按下键盘的 Tab 键可以浏览更多选择。如果正好是你想要的,按下键盘的向右键补齐命令,然后按下 Enter 执行。在用完 fish 后,输入 exit 来退出 shell。

Fish 还可以做更多事情,但是这里只介绍用来帮助你记住命令,自动推荐功能足够了。

保持学习

Linux 上有太多的命令了。但你也不用记住所有命令。多亏有 Bash 命令历史以及像 apropos 和 fish 这样的工具,你不用消耗太多记忆来回忆那些帮你完成任务的命令。

记不住 Linux 命令?这三个工具可以帮你(转)的更多相关文章

  1. Java开发人员必须掌握的Linux命令(三)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博 ...

  2. Linux命令-下载文件的工具:wget

    Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...

  3. linux命令 iperf-网络性能测试工具

    博主推荐:更多网络测试相关命令关注 网络测试  收藏linux命令大全 iperf命令是一个网络性能测试工具.iperf可以测试TCP和UDP带宽质量.iperf可以测量最大TCP带宽,具有多种参数和 ...

  4. linux命令 dig-域名查询工具

    博主推荐:更多网络测试相关命令关注 网络测试  收藏linux命令大全 dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常. 语法 dig(选项)(参数) 选项 @<服务器地址&g ...

  5. Linux 命令行下搜索工具大盘点,效率提高不止一倍!

    在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令.grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂. 于是,为了简化 grep ...

  6. 每天记一些php函数,jQuery函数和linux命令(三)

    简介:学习完了php和jQuery之后,对函数的记忆不到位,导致很多函数没记住,所以为了促进自己的记忆,每天花一点时间来写这个博客. 时间:2016-12-21   地点:太原    天气:雨夹雪 一 ...

  7. Linux命令-文件管理(三)

    Linux more命令 Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(bac ...

  8. Linux命令(三)vim编辑器的常用命令

    .subTitle { background: rgba(51, 153, 0, 0.53); border-bottom: 1px solid rgba(0, 102, 0, 1); border- ...

  9. Linux基本配置和管理 3 ---- Linux命令行文本处理工具

    1 文件浏览(简单回顾) 1 cat 查看文件的内容 2 more 以翻页的形式查看,但是只能向下翻页 3 less 以翻页的形式查看,但是能够支持向上和向下翻页 4 head 默认是查看前10行,但 ...

随机推荐

  1. APICloud-数据存储

    APICloud 共有四种数据存储 1.file:目录操作,文件操作 文件存储方式,用于图片.文档的上传.下载.删除.管理. 2.db:本地 sqlite 数据库 用于离散数据的存储. 3.loacl ...

  2. hadoop.create.0.1

    #!/bin/shexit 0 linux单机分布式实验环境数据策略#数据:不同源  -v ,link 各自独立的文件夹#配置:同源,写时复制  存于docker images#程序体,基本不改变.或 ...

  3. C++面试笔记(2)

    11 explicit 显式构造函数 explicit修饰的构造函数可用来防止隐式转换 class Test1 { public: Test1(int n) // 普通构造函数 { num=n; } ...

  4. Python02(Linux命令)

    Trainning-day01回顾 1.who :查看登录到系统的用户信息 2.pwd :查看当前所在路径 3.ls :查看当前目录的内容 ls -l ls -a ls -la / ls -l -a ...

  5. java 第三周作业

    1.P132分析: long before = System.currentTimeMillis(); //返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1 ...

  6. Java中String类型的数据比较

    在Java中如果想比较两个字符串是否相等,可以使用string1==string2 或string1.equal(string2)来比较. 但是,第一种方法过于局限.例如, String string ...

  7. [转载] Fiddler为所欲为第二篇 像OD一样调试 [二]

    首先,如果大家没有看过第一篇,可以先看看第一篇,了解Fiddler script的脚本哦.传送门:https://www.52pojie.cn/thread-854434-1-1.html 导语:其实 ...

  8. 周强 201771010141面向对象程序设计(java)》第十七周学习总结

    线程同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. ⚫ 在Java中解决多线程同步问题的方法有两种: 1.- Java SE 5.0中引入Ree ...

  9. 神州数码标准访问控制列表配置(ACL)

    实验要求:熟练掌握标准访问控制列表配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip ad ...

  10. Shell编程(2)

    1 (1) (2) (3) 一.二都是显示数组所有元素,*是作为一个长字符串输出,@是作为数组一个一个输出 三.四都是输出数组的长度 五.六都是输出数组中第一个元素的长度 (4) unset是name ...