对于某些人来说,在昏暗的终端窗口中输入命令可能显得过时,但对于许多计算机用户来说,这是完成计算机能够执行的几乎任何任务的最有效、最易访问和最清晰的方式。如今,由于所有将开源命令引入 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
用巴克鲁·班仔的话来说:“无论你走到哪里,你都在那里。”
当您需要弄清楚那究竟在哪里时,您可以使用 pwd
命令。 pwd
代表打印工作目录,这正是它的作用。 --physical
(或在某些实现中简称为 -P
)显示您的位置,其中所有符号链接都已解析。
$ pwd
/home/tux/presentation
$ pwd --physical
/home/tux/Documents/work/projects/conference/presentations
sed
更广为人知的是 sed
,流编辑器是一个强大的批量查找和替换命令,但它也是一个合法的文本编辑器。您可以通过阅读我的介绍性文章来学习使用它,然后通过我的高级教程和速查表成为专家。
grep
grep
命令非常普遍,以至于它经常被用作动词(“我将 grep 浏览一些文件”)和动名词(“grepping 一些输出”)。当您在 shell 中解析文本时,无论您是在查看日志文件还是解析其他一些命令的输出,它都是一个关键组件。这是忙碌的用户专注于特定信息的一种方式。鉴于计算世界中有如此多的数据,难怪它是一个流行的命令。 通过阅读我的介绍性文章来理解 grep,然后下载速查表。
file
当您需要知道文件包含什么类型的数据时,请使用 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
命令是终端的非交互式 Web 浏览器。它是 Web 和 API 开发人员的开发工具。对于它的灵活性来说,它是一个复杂的命令,但如果您想从终端顺利地与网络服务交互,那么值得学习它。
下载我们的免费 curl
速查表,以便您可以内化其许多选项。
ps
管理系统资源主要由内核负责,但是当您喜欢或需要手动方法时,可以使用 ps
命令。在我的使用 procps-ng 监控您的 Linux 系统文章中了解有关 ps
的信息。
cat
cat
命令是 concatenate 的缩写,它曾经非常有用,用于连接已使用(直观地称为 split
的命令)拆分成几个小文件的文件,因为大小限制。 如今,cat
主要用作将文本文件的内容转储到终端中以供快速参考的方式,除非您为此使用 head
、tail
、more
或 less
。
尽管其几乎被弃用的原始用途,并且尽管其他几个命令也执行其辅助功能,但 cat
仍然是一个有用的实用程序。例如,它可以替代复制 (cp
) 命令
$ cat myfile.ogg > /backups/myfile.ogg
它可以显示文件中不方便的不可见字符。 Tab 字符会破坏 YAML,使用 --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
find
命令可帮助您查找文件,但由于其许多选项,它可以帮助您使用各种过滤器和参数查找文件。从我的介绍性文章中学习基础知识。
如果您一直在想为什么所有命令中最基本的命令,不起眼的 ls
命令,不在这个列表中,那是因为 find
的灵活性。 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
[...]
这是一个技术细节,但这是一个值得了解的巧妙技巧。
tar
人们有时会通过引用 BSD 的 tar
语法来开 Linux 命令的玩笑。尽管它声名狼藉,但 tar
命令实际上可能非常直观。阅读我的如何解压缩 tar.gz 文件文章,了解按需快速输入 tar
命令的简单秘诀。
more 或 less 或 most
分页器就像 cat
,只是它们会在屏幕底部暂停输出,直到您向下滚动以查看更多内容。这是一个简单的应用程序,但每个实现都有细微差别。您是使用箭头键还是空格键滚动?您必须手动退出,还是分页器在显示的文件末尾退出?您首选的搜索行为是什么?选择您最喜欢的分页器并在您的 .bashrc
中设置它!
ssh 和 scp
OpenSSH 不仅有助于保护与远程系统的连接,它还启用了其他命令。例如,对于许多用户来说,正是他们的 .ssh
目录使他们能够顺利地与 Git 存储库交互、将更新发布到网站或登录到他们的云控制面板。
mv
mv
命令执行双重任务:它既移动文件,又重命名文件。 它有几个可用的安全措施,包括 --interactive
和 --no-clobber
选项以避免覆盖现有文件,--backup
命令以确保数据在验证其新位置之前被保留,以及 --update
选项以确保旧版本不会替换较新的文件。
sudo
当您有一个具有已知用户名和系统上所有特权的单个用户时,该用户很快就会成为攻击的目标。通过消除对字面意义上的 root
用户的需求,sudo
命令优雅地从一般知识中删除了有关您的系统的重要信息。但这并不是它的全部作用。借助 sudo
,您可以轻松地将权限管理到单个命令、用户和组。您可以启用对选定命令的无密码执行、记录用户会话、使用摘要验证验证命令,等等。
alias
通过使用 alias
命令将长命令变成易于记忆的快捷方式
$ alias ls='ls --classify --almost-all --ignore-backups --color'
clear
有时您的终端会变得杂乱。在键入 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
这只是一个小例子。
you
Linux 终端在某种程度上是关于创造性地解决问题的。当您学习命令时,您也在学习可以用来创建自己的命令的构建块。在我的shell 历史记录中的许多命令是我自己编写的 shell 脚本。结果是我的工作流程是根据我想要的工作方式定制的。 shell 中必不可少的命令也可以是您为自己的效率和舒适度设计的命令。花一些时间了解一些很棒的命令,然后构建您自己的命令。当您遇到真正好的东西时,使其开源,以便您可以与他人分享您的想法!
1 条评论