在黑暗的终端窗口中输入命令,对一些人来说可能是过时的,但对许多计算机用户来说,这是完成计算机能够执行的几乎所有任务的最有效、最方便和最清晰的方式。如今,由于所有将开源命令带到非开放平台(如macOS和Windows)的项目,终端命令与每个人都有关,而不仅仅是Linux和BSD用户。当你得知一台普通的POSIX计算机上安装了数千条命令时,你可能会感到惊讶,当然,其中相当多的命令并不是真的要用的,至少不是直接或定期使用。有些命令比其他命令更普遍有用,而更少的命令是有效使用终端的绝对必要条件。
下面是一个终端用户可能会发现自己使用的前20个命令。
cd
在终端之外,你点击图标,从一个文件夹移动到另一个,但在终端中,你使用cd 。cd 命令,它代表改变目录,是你在Linux系统中移动的方式。这是从一个地方到另一个地方的最快和最直接的路线。
例如,在桌面上,当你想从你的主目录(你保存所有文件夹的地方)移动到一个叫做presentations 的文件夹,那么你可能首先要打开你的Documents 文件夹,然后打开一个叫做work 的文件夹,然后是projects 文件夹,然后是conference 文件夹,最后是presentations 文件夹,其中包含你令人兴奋的LibreOffice Impress幻灯片。这是一个大量的双击。它也可能是在屏幕上的大量移动,这取决于新窗口出现的位置,以及你的大脑要跟踪的大量航点。许多人通过把所有东西都 放在桌面上来规避这个看似微小的任务。
终端用户通过直接打字来避免这个问题。
$ cd ~/Documents/work/projects/conference/presentations
有经验的终端用户甚至不屑于打出这些东西。他们使用Tab键来为他们自动完成单词。有时,你甚至不必求助于自动完成。你可以使用通配符来代替。
$ cd ~/Doc*/work/*/conf*/p*
pwd
用Buckaroo Banzai的话说:"无论你走到哪里,你都在那里。"
当你需要弄清楚那到底是什么地方时,你可以使用pwd 命令。pwd 代表*打印工作目录,*而这正是它的作用。--physical (或者在某些实现中只是-P )显示你的位置,并解决所有的符号链接。
$ pwd
/home/tux/presentation
$ pwd --physical
/home/tux/Documents/work/projects/conference/presentations
沉淀
更好地被称为sed ,流编辑器是一个强大的批量查找和替换 命令,但它也是一个合法的文本编辑器。你可以通过阅读我的介绍性文章学会使用它,然后通过我的高级教程和小抄成为专家。
grep
grep 命令是如此无处不在,以至于它经常被用作动词("我将grep穿过一些文件")和动名词("grepping一些输出")。它是在你的shell中解析文本时的一个关键组成部分,无论你是在查看日志文件还是解析其他命令的输出。这是一种让忙碌的用户专注于特定信息的方法。考虑到计算机世界中有多少数据,难怪它是一个受欢迎的命令。通过阅读我的介绍性文章去摸索grep,然后下载小抄。
文件
当你需要知道一个文件包含什么类型的数据时,使用file 命令。
$ file example.foo
example.foo: RIFF (little-endian) data, Web/P image [...]
$ file example.bar
example.bar: ELF 64-bit LSB executable, x86-64 [...]
当然,file 命令并不神奇。它只是根据一个文件如何识别自己来报告,而文件可能是错误的,被破坏的,或被掩饰的。用一个严格的检查 hexdump提供更多的确定性,但对于休闲使用来说,file 命令很方便。
awk
Awk不仅仅是一个命令,它还是一种字面上的编程语言。下载我们免费的Awk电子书,学习它,你就会写出你从未想过的脚本。
curl
curl 命令是你的终端的一个非交互式网络浏览器。它是网络和API开发者的一个开发工具。就其灵活性而言,这是一个复杂的命令,但如果你想从你的终端顺利地与网络服务互动,它是值得学习的。
下载我们免费的curl cheat sheet,这样你就可以内化它的许多选项了。
ps
管理你的系统资源主要是由内核决定的,但当你喜欢或需要手动操作时,可以使用ps 命令。在我的《用procps-ng监控你的Linux系统》一文中了解了ps 。
猫
cat 命令是连接(concatenate)的缩写,它曾经非常有用,用于连接那些由于大小限制而被分割(用一个直观的叫做split 的命令)成几个小文件的文件。今天,cat 主要被用作将一个文本文件的内容转储到你的终端,以便快速参考,除非你为此使用head,tail,more, 或less 。
尽管它的原始用途几乎被废弃,尽管其他几个命令也执行它的次要功能,cat 仍然是一个有用的工具。例如,它可以作为复制(cp )命令的替身。
$ cat myfile.ogg > /backups/myfile.ogg
它可以显示出文件中不方便的隐形字符。破坏YAML的Tab字符,通过--show-tabs 选项显示为^I 。
$ cat --show-tabs my.yaml
---
- hosts: all
tasks:
- name: Make sure the current version of 'sysstat' is installed.
dnf:
name:
^I- sysstat
^I- httpd
^I- mariadb-server
state: latest
它可以用--show-nonprinting 显示非打印字符,用--show-ends 标记行尾,用--number 提供行号,等等。
查找
find 命令帮助你查找文件,但由于它有许多选项,它可以用各种过滤器和参数帮助你查找文件。从我的介绍性文章中了解基本知识。
如果你一直想知道为什么最基本的命令,即简陋的ls 命令,没有出现在这个名单上,那是因为find 的灵活性。 查找不仅可以列出文件。
$ find .
./bar.txt
./baz.xml
./foo.txt
[...]
它还可以提供长的列表。
$ find . -ls
3014803 464 -rw-rw-r-- 1 tux users 473385 Jul 26 07:25 ./foo.txt
3014837 900 -rwxrwxr-x 1 tux users 918217 Nov 6 2019 ./baz.xml
3026891 452 -rw-rw-r-- 1 tux users 461354 Aug 10 13:41 ./foo.txt
[...]
这是一个技术问题,但却是一个值得了解的技巧。
焦油
人们有时会引用BSD的tar 语法来笑话Linux的命令。尽管有这样的名声,tar 命令实际上是非常直观的。阅读我的《如何解压缩tar.gz文件》一文,了解在需要时说出tar 命令的简单秘密。
更多或更少或大多数
寻呼机就像cat ,只是它们会在你的屏幕底部暂停输出,直到你向下滚动获取更多。这是一个简单的应用,但每个实现都有细微的差别。你是用方向键还是用空格键滚动?你必须手动退出,还是寻呼机在它所显示的文件结束时退出?你喜欢的搜索行为是什么?选择你最喜欢的寻呼机并在你的.bashrc 中设置它 !
ssh和scp
OpenSSH不仅可以帮助确保与远程系统的连接,还可以实现其他命令。例如,对许多用户来说,是他们的.ssh 目录使他们能够顺利地与Git仓库互动,在网站上发布更新,或登录到他们的云控制平面。
mv
mv 命令有双重作用:它既能移动文件,又能重命名文件。它有几个可用的保障措施,包括--interactive 和--no-clobber 选项,以避免破坏现有的文件;--backup 命令,以确保数据在新的位置被验证之前得到保留;以及--update 选项,以确保旧版本不会取代新文件。
sudo
当你在一个系统中拥有一个已知用户名和所有权限的单一用户时,该用户很快就会成为攻击的目标。通过消除对一个字面意义上的root 用户的需要,sudo 命令优雅地将关于你的系统的重要信息从一般知识中删除。不过,这并不是它的全部作用。通过sudo ,你可以很容易地管理权限,直至个别命令、用户和组。你可以启用无密码执行选定的命令,记录用户会话,用摘要验证命令,以及更多。
别名
通过使用alias 命令,将长的命令变成容易记忆的快捷方式。
$ alias ls='ls --classify --almost-all --ignore-backups --color'
清除
有时你的终端会变得很杂乱。没有什么比在输入clear (或在某些shell中按下Ctrl+L)后,有一个漂亮的、新鲜的屏幕更重要的了。
Setfacl
传统上,POSIX文件的权限是由chown 和chmod 决定的。不过,系统已经变得越来越复杂,所以有一个命令可以提供更多的灵活性。setfacl 命令让你创建一个访问控制列表(ACL),授予任意用户权限,并为文件夹和其中创建的内容设置默认权限。
netcat
不是每个用户都需要netcat (nc),但很少有使用它的人想放弃它。nc 命令是一个多用途的网络连接工具。
它可以连接到一个端口,类似于telnet 。
$ nc -u 192.168.0.12 80
它可以ping一个端口,类似于ping 。
$ nc -zvn 192.168.0.12 25
它可以探测开放的端口,类似于nmap 。
$ nc -zv 192.168.0.12 25-80
而这只是一个小例子。
Linux终端在某种程度上是关于创造性解决问题的。当你学习命令时,你也在学习可以用来创建你自己的命令的构建块。我的shell历史中的许多命令都是我自己编写的shell脚本。其结果是,我的工作流程是根据我想要的工作方式定制的。你的shell中的基本命令也可以是你为自己的功效和舒适度而设计的。花一些时间去了解一些伟大的命令,然后建立你自己的命令。当你发现一些非常好的命令时,请将其开源,这样你就可以与其他人分享你的想法。