Linux 软件开发人员指南:1 命令行如何工作
nanshan 2024-11-10 10:14 17 浏览 0 评论
命令行如何工作
在我们深入实用的Linux命令之前,你需要对命令行的工作方式有一个基本的了解。本章将为你提供这种理解。
对于新的开发者,我们将探索你在Linux命令行上开始所需的基本技能。对于那些有更多经验的人,仍然有一些细微差别需要发现,例如“shell”和“命令行”之间的区别。了解这些差异是值得的!
在本章中,我们将涵盖以下主题:
- 命令行界面(CLI)的基本概念
- 命令的形式
- 命令参数如何工作,以及当你在键入命令和查找文档时它们的外观
- “shell”的介绍,以及它与“命令行”的区别
- shell用于查找命令的核心规则
首先,我们将从命令行界面的基本概念开始。我们将了解CLI的工作原理,并快速举例说明。
最初是REPL
什么是命令行界面(CLI)?它是一个基于文本的交互环境,用于与计算机交互:
- 从你那里读取一些输入,
- 评估(或处理)该输入,
- 在屏幕上打印一些输出作为响应,然后
- 回到开始重复该过程。
让我们在实际层面上看看每一步发生了什么,以几页后你将看到的ls(列表)命令为例。现在,知道ls命令列出目录的内容就足够了。
步骤
这是什么意思
- 读取输入
你输入ls命令并按Enter键。
- 评估命令
shell查找ls二进制文件,找到它,并告诉机器执行它。
- 打印输出
ls命令发出一些文本——它找到的所有文件和目录的名称——shell将这些输出打印到你的终端窗口。
- 返回到1(重复该过程)
一旦命令调用的程序退出,就通过接受更多用户输入来重复该过程。
如果你再次阅读步骤1-4,你会注意到每个步骤的第一个字母拼写为“REPL”,这是在发明和完善这种工作流程的语言(如Lisp)中提及这种读取-评估-打印循环的常用方式。
用编程术语来说,你可以将上述REPL指令转换为代码:
while (true) { // 循环
print(eval(read()))
}
事实上,你可以在大多数编程语言中用几行代码创建一个能够执行基本计算的REPL。以下是用Perl编写的一行“shell”程序:
perl -e 'while (<>){print eval, "\n"}'
1+2
3
在这里,我们将代码作为参数编写,只要还有输入可以读取,就打印评估的输出。最后,我们添加一个新行并退出。
这个程序很小,但足以在命令行环境中实现交互式的读取-评估-打印循环——即shell。你在Linux和Unix中使用的shell比这个Perl迷你shell复杂得多,但原理是相同的。
重点是:作为开发者,你可能已经在使用REPL而没有意识到,因为几乎所有的现代脚本语言都自带一个。从本质上讲,Linux(或macOS,或其他Unix)命令行的作用就像解释型语言给你的“交互式shell”。因此,即使你不熟悉Lisp REPL,上面的Perl代码片段也应该让你想起一个非常基本的Ruby或Python shell。
现在,你了解了将在Linux中使用的命令行界面的基本机制,你已准备好尝试你的第一个命令了。为此,你需要知道要使用的正确命令行语法。
命令行语法(读取)
所有REPL(读取-求值-打印循环)都从读取输入开始。在Linux命令行上,shell需要读取具有正确语法的命令。命令的基本形式如下:
commandname options
从编程角度来看,你可以将命令名称视为函数名,将选项视为传递给该函数的任意数量的参数。这很重要,因为并非所有选项都有单一的固定语法——每个命令都定义了它将接受哪些参数。因此,shell除了检查命令是否映射到可执行文件之外,几乎无法验证命令的正确性。
注意
本章中,“程序”和“命令”这两个术语可互换使用。它们之间有一个非常细微的差别,因为一些shell内置命令是在shell的代码中定义的,因此从技术上讲并不是它们自己的独立程序,但你不必担心这一点——将这一区别留给Unix老手去处理。
让我们深入探讨这种“command [options]”语法的更复杂变体,你将会经常看到这种格式:
command [-flags,] [--example=foobar] [even_more_options ...]
这是你在大多数Linux环境的程序手册页(manpages)等帮助文档中看到的常规格式,它相当简单:
- command 是你正在运行的程序
- 括号中的项目是可选的,带有省略号的括号([xyz ...])表示你可以在这里传递零个或多个参数
- -flags 表示该程序的有效选项(在Unix中称为“标志”),例如 -debug 或 -foobar
- 一些程序还会接受参数的短版本和长版本,通常分别用单个和双连字符表示:因此 -l 和 --long 可能做同样的事情。但并非所有命令都如此一致;这种行为要求命令的创建者实现了设置相同参数的短参数和长参数。
并非所有命令都会在调用时实现所有这些传递配置的方式,但这些代表了你将看到的最常见形式。
默认情况下,空格表示参数的结束,因此与大多数编程语言一样,包含空格的参数字符串必须加单引号或双引号。你将在第12章“使用Shell脚本自动化任务”中了解更多内容。
接下来,我们将遵循shell解释你使用这种语法发出的命令的过程,但首先,我们想明确定义本章中有时可互换使用的两个术语之间的区别:“命令行”和“shell”。
命令行 vs. shell
在本书中,我们提到了“命令行环境”。我们将其定义为任何基于文本的环境,作为一种REPL,特别是用于与操作系统、编程语言解释器、数据库等进行交互。命令行环境或接口描述了你与系统交互的一般概念。
但这里有一个更具体的术语:shell。
shell是一个实现命令行环境的特定程序,允许你给它文本命令。从技术上讲,有许多不同的shell提供了相同类型的基于REPL的命令行环境,通常用于截然不同的事物:
- Bash 是与Linux和Unix操作系统交互的常见shell环境。
- 流行的数据库如Postgres、MySQL和Redis都为开发人员提供了与之交互并运行命令的shell。
- 大多数解释型语言都提供了一个shell环境来加速开发。在这些环境中,有效的命令只是编程语言语句。例如Ruby的irb,Python的交互式shell等。
- Zsh(Z shell)是另一种操作系统shell(类似于Bash),你可能在一些开发者的笔记本电脑上看到它,如果他们定制了自己的环境。
当我们在本书中谈到shell时,我们指的是Unix shell(通常是Bash),这是一个命令行接口,专门设计用于让你与底层的Linux或Unix操作系统进行交互。
shell如何知道要运行什么?(求值)
读取命令后,shell需要评估它,通过执行程序、获取一些信息或做一些对你有用的其他事情。
注意
关于shell如何工作的详细描述可能一开始看起来有些繁琐,但我们保证,当你需要排查丢失或权限设置不正确的程序的问题时,这些知识会非常有用。
当你在像Bash这样的shell中输入一个命令,如 foobar -option1 test.txt 并按Enter键时,会发生以下几件事:
- 如果命令指定了路径,则使用该路径。这可以采取多种形式:全路径,如命令 /usr/bin/foobar -option1 test.txt 中的 /usr/bin/foobar。相对路径,如命令 ./foobar -option1 test.txt 中的当前工作目录(. 表示当前目录,我们将在下面的绝对路径与相对路径部分中介绍;这个命令基本上是说“请执行我当前目录中的“foobar”文件”)。路径可能基于变量和符号,要么在shell的环境中(如 $HOME/foobar),要么由shell提供(如 ~/foobar,其中 ~ 字符表示“此用户的家目录”)。
- 如果没有指定路径,shell会检查它是否知道 foobar 的含义:它可能是一个内置shell命令。它可能是一个别名,这是为命令设置宏或快捷方式的方式。如果不是,shell通常会查看 $PATH 环境变量,其中包含了几个不同的位置来检查命令:/bin, /usr/bin, /sbin等。用户可以向 $PATH 列表添加位置,各种软件也会修改你的 $PATH:脚本语言的版本管理器、Python的虚拟环境以及许多其他程序都大量使用这种机制。shell会按照在 $PATH 变量中找到的顺序尝试这些指定的位置,以查看它们是否包含名为 foobar 的可执行文件。
- 如果shell仍然没有找到任何东西,它会返回一个错误,如 bash: foobar: command not found:。
另一方面,如果在任何时候shell确实找到了一个名为 foobar 的可执行文件,它就会执行该文件,并将 -option1 和 test.txt(按此顺序)作为参数传递。
此时,shell知道要使用哪个程序来评估命令,并这样做。随着命令的评估,任何输出都打印给用户,完成REPL过程的第三步。现在剩下的就是回到开头,开始新的过程,接受用户输入的另一个命令。
shell会尽其所能,使用我们上面概述的一般过程来猜测用户想要运行哪个程序,以解决歧义。然而,歧义可能是一件坏事,并导致误解或错误。在故障排除时,你通常会想知道真正运行的是哪个命令。为此,你可以使用 which <command> 命令,它将打印出完整路径(或正在运行的别名或脚本),并让你知道该命令是否是shell内置命令。根据系统的不同,which 可能不可用。在这些情况下,你可以使用 command -v 代替。这是POSIX等效项,我们接下来将学习:
bash-3.2$ which ls
/bin/ls
bash-3.2$ command -v ls
/bin/ls
POSIX的简要定义
维基百科告诉我们:“可移植操作系统接口(POSIX)是由IEEE计算机学会制定的一系列标准,旨在保持操作系统之间的兼容性。”从实际意义上讲,这是试图在Unix系统之间定义一些通用标准,否则这些系统可能会提供完全不同的基本命令集。
POSIX基本上规定了诸如“每个符合POSIX标准的操作系统都应该有一个名为ls的列表命令”等内容;在这种情况下,“每个符合POSIX标准的操作系统都应该有一种方法来检查给定命令名是否存在相应的可执行文件”。
如果你的脚本需要在Unix操作系统之间移植,限制自己只使用POSIX命令是一个好主意。然而,这仍然不能保证万无一失——许多非常流行的Linux发行版在许多方面都偏离了POSIX标准,其中大多数在你遇到问题之前都不会注意到。
理解POSIX是开始实际命令行工作之前你需要掌握的最后一个基础知识。到目前为止,我们已经涵盖了很多内容:
- 你了解了REPL(读取-求值-打印循环),并看到了这个基本过程是如何映射到所有现代shell的工作方式的
- 我们探讨了你在使用Linux时将使用的基本命令语法
- 你看到了shell如何决定如何获取你的命令输入并正确地“评估”它。你学习了将来会经常遇到的重要术语:shell、命令行界面、POSIX,以及一些如果你现在学习它们将会很有用的术语。有了这些知识,你就可以从理论走向实践了。在下一节中,我们将讨论你在运行命令时将面临的特定于Linux的上下文。你将学习Linux文件系统的绝对基础知识以及不同类型的路径是如何工作的。之后,本章的其余部分都是关于运行Linux命令的!
基本的命令行技能
为了有效地使用Linux,你需要知道一些绝对的基础知识:系统的结构、如何在系统中查看和移动、以及如何读取和编辑文件。在本节中,我们将涵盖所有这些内容,并让你熟悉在Linux系统中导航的非常基础知识。
在本书的其余部分中,我们将更深入地探讨这些主题和命令,但我们想要确保你在本章结束时拥有一套最小、可用的技能。
Unix文件系统基础
在图形用户界面(GUI)中,目录(在macOS中称为文件夹)由图标表示。也许你已经习惯在你的主目录中看到这些整齐的小行——桌面、文档、视频等。双击目录图标会打开一个新窗口,显示该目录内部的新视图。
当我们使用“文件系统”这个词时,我们指的就是这个——一个包含目录和文件的集合,它组织系统上的所有数据。在命令行环境中,底层概念完全相同,只是看起来有点不同。
而不是看到大量的窗口和图标,所有内容都以文本形式表示,并且只有当你请求时才会显示目录的内容。然而,文件和目录仍然以你习惯的方式工作。
在导航时,将文件系统保持在脑海中似乎一开始很难,但一旦你习惯了它,这通常是处理计算机的更高效方式。以这种方式工作几天后,大多数人在工作时都能在系统上详细查看文件系统,并只是偶尔验证这个视图。
绝对路径与相对路径
当初学者使用Linux时,他们经常会在绝对路径和相对路径之间混淆。这种简单的误解会导致浪费时间盯着像这样的错误:
没有这样的文件或目录
因为你需要理解路径作为运行几乎每个Linux命令的先决条件,所以我们将首先介绍它们。
绝对路径是文件系统上任何文件的完整路径,从根目录开始。你可以通过它以/开头来识别它,这表示根目录(文件系统的最顶部或开始处,包含所有其他文件和目录)。
以下是一些绝对路径的示例:
/home/dave/Desktop
/var/lib/floobkit/
/usr/bin/sudo
这些绝对路径就像一套完整的驾驶方向,从已知的起点(你的公寓,或者在Unix系统中,根目录)提供逐步的指令。
你可以通过它以“/”字符开头来立即识别绝对路径。无论你在文件系统的哪个位置,绝对路径都会起作用,因为它们是文件对象的完整、唯一的地址。
相对路径是一个部分路径,并且假定它从当前位置开始,而不是从根目录开始。你可以通过它没有以/字符开头来识别相对路径。
相对路径就像使用你当前位置作为起点的驾驶方向。如果你因为迷路而停在路边并需要新的方向,你想要从当前位置开始的方向,而不是从你的家庭地址开始。相对路径正好给你这个。
因此,相对路径通常更方便键入:如果你已经坐在/home/Desktop目录中,引用一个文件作为mydocument.txt比作为/home/Desktop/mydocument.txt更容易(尽管在文件系统的当前位置下,两种方式都是有效的)。真正的区别出现在你更改目录时。当你从/home/Desktop目录移动到/home目录时,绝对路径仍然会引用相同的文件,而相对路径引用则不会(现在,键入mydocument.txt将引用/home/mydocument.txt)。
想象这样一个部分目录结构——在我们的例子中,我们将说这是/home/dave/Desktop的目录树列表:
Desktop
├── anotherfile
├── documents
│ └── contract.txt
├── somefile.txt
└── stuff
├── nothing
└── important
你坐在这个桌面目录中;换句话说,你的当前目录(你可以通过运行pwd命令来查看)是/home/dave/Desktop。
以下是在此桌面目录中引用文件的一些相对路径示例:
anotherfile
documents/contract.txt
stuff/important
以下是这些相同文件的绝对路径:
/home/dave/Desktop/anotherfile
/home/dave/Desktop/documents/contract.txt
/home/dave/Desktop/stuff/important
你会注意到,相对路径只是从开头去掉了当前工作目录路径的绝对路径。
绝对路径与相对路径名回顾
回想我们的例子:
Desktop
├── anotherfile
├── documents
│ └── contract.txt
├── somefile.txt
└── stuff
├── nothing
└── important
现在想象你处于一个shell环境中,你的当前工作目录是这个Desktop目录。你想列出contract.txt文件。你如何引用该文件?你有两个选项:
ls /home/dave/Desktop/documents/contract.txt:这是绝对路径,从任何地方都有效。
ls documents/contract.txt:这是从当前目录到该文件的相对路径。
打开终端
在Ubuntu Linux和macOS上,你可以通过打开“终端”应用程序来进入命令行界面。
查看周围——命令行导航
作为初学者,当你打开一个shell时,首先要做的就是在系统中查看一下。在本节中,我们将介绍通过shell窗口在Linux环境中导航和查看的最重要命令。
话虽如此,让我们深入一些基本的Linux命令!
pwd - 打印工作目录
pwd代表“print working directory”(打印工作目录),当你在终端中输入它时,你的shell会打印出你当前所在的目录。Unix文件系统经常被比作一棵树,但现在你可以把它想象成一个杂乱的桌面,里面有很多目录。如果每个目录都像是一个房间,那么pwd可以让你看到你当前的命令行环境正在访问哪个房间。
新的shell会话通常会在你的家目录中启动。如果你在Linux上跟随操作,它看起来会像这样:
~ pwd
/home/dave
如果你在运行另一种Unix风格的系统,它可能会略有不同。这是在macOS上你会看到的:
~ pwd
/Users/dave
无论你在文件系统的哪个位置,你仍然可以引用所有目录中的文件(参见本章的“绝对路径与相对路径”部分),但有时候移动一下会使事情变得更简单。我们将在后面的章节中详细介绍文件系统的结构。
ls - 列出目录内容
ls命令允许你“列出”目录中的文件。如果你不带任何参数运行此命令,它将只列出你当前目录中的文件和目录。如果你传递一个目录路径作为参数,它将尝试查看该目录中的内容并将其列出:
ls /var/log
ls命令也会接受参数(“标志”)。有很多标志,但两个常用的标志是-l(“长格式”)和-h(“人类可读”)。
ls -l -h
# 也可以组合标志
ls -lh
# 列出特定目录
ls -lh /usr/local/
长格式列表将产生以下输出格式:
-rw-r--r-- 1 dcohen wheel 0 Jul 5 09:27 foobar.txt
让我们逐列解释一下:
- -rw-r--r--: 文件类型(第一个字符)和权限(三组三位,分别代表文件所有者、所有者组以及系统上其他所有人的权限)。
- 1: 对该文件的引用(硬链接)数量。
- dcohen: 拥有该文件的用户。
- wheel: 拥有该文件的组。
- 0: 文件使用的磁盘空间量(这个文件是空的)。-h标志将默认的输出从字节数更改为“人类可读”的格式,意味着在适当的时候会显示兆字节或吉字节。
- Jul 5 09:27: 文件修改时间。
- foobar.txt: 文件名。
这显示了一些我们尚未涵盖的知识(用户、组和权限)。没关系——我们将在第7章“用户和组”中介绍它们。
移动位置
既然你已经学习了最基本的Linux命令来定位自己,让我们来谈谈如何在命令行环境中导航到你想要去的地方。
cd - 切换目录
cd命令允许你“切换目录”到文件系统中的任何地方。使用之前的房间比喻,这相当于从当前房间传送出去并进入另一个房间。
成功切换目录后,pwd命令将显示你的新(更新后的)位置:
bash-3.2$ cd /etc/ssl
bash-3.2$ pwd
/etc/ssl
bash-3.2$ ls
README cert.pem certs misc openssl.cnf private
bash-3.2$ cd certs
bash-3.2$ pwd
/etc/ssl/certs
find - 查找文件
find命令允许你搜索文件。它是少数几个不遵循长选项约定(例如,--name)的命令之一。相反,它的标志用一个短划线指定。以下是一个示例:
bash-3.2$ find / -type d -name home
/home
...
上面的命令将在/(整个系统)中搜索名为home的目录(-type d)。请注意,当你不是以强大的root(管理员)用户身份执行此操作时,find将没有权限列出许多目录的内容,因此除了找到的内容外,你还会收到像“find: '/root': Permission denied”这样的输出。
另一个常见的用例是根据find的输出执行命令:
bash-3.2$ find . -exec echo {} \;
.
./foobar
这将对找到的每个文件运行echo命令,其中{}将被替换为文件名。生成的输出将类似于ls命令的调用。
如果我们不想对每个找到的文件运行echo,而是想将它们作为参数传递给echo,我们可以使用+代替\。
bash-3.2$ find . -exec echo {} +;
. ./foobar
find命令有许多其他标志。具体有哪些标志?这取决于你的操作系统附带的find版本。
以下是一些典型用例:
- find -iname foobar: 搜索foobar,但不区分大小写
- find -name "foobar*": 搜索以foobar开头的文件
- find -name "*foobar": 搜索以foobar结尾的文件
读取文件
既然你已经学会了如何找到你正在寻找的文件,让我们来看看如何在命令行上实际读取文件内容。
less - 分页查看文件
less命令允许你逐页(基于你的终端窗口的大小)阅读文件。
less somefile.txt
运行less将打开文件,并允许你逐行(上下箭头键)或逐页(空格键)滚动查看。
要在文件中搜索,键入/,后跟你的搜索字符串,然后按Enter键。使用n(下一个)和SHIFT-n(上一个)来导航匹配项。
要退出,键入q。
进行更改
现在您可以查找和读取文件了,让我们看看如何更改它们或创建新的文件。
touch – 创建一个空文件,或更新现有文件的修改时间 touch 创建一个文件,因此需要一个文件路径作为参数。如果您提供的路径尚不存在(并且假设您有权限这么做),则会在该路径创建一个空文件。
如果指定路径处已经存在文件,它的访问和修改时间戳将更新为当前时间。如果您只想更新访问时间或修改时间,可以分别使用 -a 或 -m 标志。
mkdir – 创建一个目录 mkdir 需要一个文件路径参数,并用它来创建(“make”)一个目录:
bash-3.2$ mkdir foobar
bash-3.2$ ls
foobar
如果您想创建多个目录,可以提供额外的参数:
bash-3.2$ mkdir foo bar baz
bash-3.2$ ls
foo
bar
baz
如果您想创建彼此嵌套的多个目录(或者如果您只想确保它们都存在),可以使用 -p 标志:
bash-3.2$ mkdir -p /var/log/myapp/error
bash-3.2$ ls /var/log/myapp
error
即使 /var/log/myapp 之前不存在,运行带有 -p 标志的 mkdir 也会确保 /var/log/myapp 被创建,然后在里面创建 /var/log/myapp/error。另一方面,如果您给 mkdir -p 的路径中的某个目录已经存在,-p 不会以任何方式伤害它,所以连续多次运行是安全的(“幂等”)。这使得 -p 标志成为脚本使用的标配。
rmdir – 删除空目录 rmdir 删除空目录。它们必须是空的,这个命令才能工作,这意味着它是一个相对安全的命令。大多数 Linux 用户最终只是使用 rm,因为它可以做到同样的事情。
rm – 删除文件和目录 要删除一个文件,使用 rm 命令:
rm filename
实际上,大多数人也使用 rm 来删除目录,因为与 rmdir 不同,它适用于非空目录。您需要 -r 标志来递归地应用命令(到您正在删除的目录中的所有目录),以及 -f 标志来“强制”删除,而不需要对每个文件和目录进行确认:
rm -rf /path/to/directory
注意
使用 rm -rf 时请非常小心,因为 Linux 会允许您删除对系统运行至关重要的目录。例如,rm -rf / 是告诉 rm 您想要删除根目录,它包含了系统上的所有内容。
一些 Linux 发行版和 Unix 操作系统以创造性的方式解决这个问题(Ubuntu 附带了一个带有 --no-preserve-root 选项的 rm 命令版本,作为一种询问“你确定要这样做吗?”的方式,Solaris 故意对 rm 应该做什么进行了宽松的解释,以避免删除根目录)。实际上,这些安全措施很容易被绕过。使用 rm 时要小心,并在从互联网粘贴命令到您的 shell 时要小心!
mv – 移动或重命名文件和目录 mv 是一个聪明的命令,因为它可以使用相同的语法做两件事。它要么“移动”文件从一个目录到另一个,要么——或者——它可以重命名一个文件,保持它在同一个目录中。
首先,我们将使用 touch 创建一个文件:
bash-3.2$ touch foobar.txt
bash-3.2$ ls
foobar.txt
然后,我们将就地重命名文件:
bash-3.2$ mv foobar.txt foobarbaz.txt
bash-3.2$ ls
foobarbaz.txt
请注意,上述命令如果存在名为 foobarbaz.txt 的现有文件,将覆盖它,所以在重命名时要小心。
要将文件移动到一个新目录,我们将创建一个新目录,然后将文件移动到那里:
bash-3.2$ mkdir targetdir
bash-3.2$ mv foobarbaz.txt targetdir/
bash-3.2$ ls targetdir/
foobarbaz.txt
您也可以组合这些操作。如果您想同时将文件移动到不同的目录并重命名它,可以:
bash-3.2$ mv foobarbaz.txt targetdir/renamed.txt
bash-3.2$ ls targetdir/
renamed.txt
获取帮助 除了最基本的环境外,大多数环境都带有手册页(manpages),这是您可以使用的文档,用于学习(或记住)如何使用您可用的命令行程序。
使用 `man $COMMANDNAME` 可以获取有关命令的信息。例如,`man ls` 会打印类似以下内容:
LS(1) 常规命令手册 LS(1)
名称
ls – 列出目录内容
概要
ls [-@ABCFGHILOPRSTUWabcdefghiklmnopqrstuvwxy1%,] [--color=when] [-D format] [文件...]
描述
对于每个操作数,如果它命名的文件类型不是目录,则 ls 会显示其名称以及任何请求的相关信息。对于每个操作数,如果它命名的文件类型是目录,则 ls 会显示该目录中包含的文件名称,以及任何请求的相关信息。
如果没有给出操作数,则显示当前目录的内容。如果给出了多个操作数,非目录操作数首先显示;目录和非目录操作数分别排序并以字典顺序排列。
以下是可用的选项:
-@ 在长格式(-l)输出中显示扩展属性键和大小。
-A 包括以点('.')开头的目录条目名称,但不包括 . 和 ...。除非指定了 -I,否则自动为超级用户设置。
由于手册页自动在分页应用程序中打开,滚动、搜索和退出使用的是您习惯的 `less` 命令中相同的快捷方式。
请记住,man 是一个旧的实用程序,它试图模仿实际的书籍,具有不同的部分(章节),涵盖不同的主题。在上面的示例中,ls(1) 中的 (1) 表示我们正在查看的手册部分。
有时,具有相同名称的手册页会存在于不同的部分中。要指定一个部分,在命令名称前加一个数字。例如,要获取与上述相同的手册,可以运行 `man 1 ls`。
大多数类 Unix 操作系统上的部分如下:
常规命令,即您通常在命令行上运行的命令
系统调用
库函数,涵盖 C 标准库
特殊文件(通常是设备,那些在 /dev 中找到的)和驱动程序
文件格式和约定。这包括配置文件
游戏和屏幕保护程序
杂项
系统管理命令和守护进程
因此,如果您想深入了解本书中涵盖的主题之一,您可能会首先查看手册部分 1、5 和 8。
如果您不确定您要查找的手册页的名称是什么,可以使用 `apropos <关键词>` 或 `man -k <关键词>` 来查找它。它将打印出包含指定关键词的所有手册页的列表。
Shell 自动补全
如果您处于交互式 shell 会话中(即,不是从脚本执行或创建 Dockerfile),您可以使用 shell 自动补全,也称为 tab-completion,以更少的击键次数和更低的拼写错误几率构建命令。
要使用 shell 自动补全,请开始输入文件或目录名称并按 Tab。shell 将逐步缩小您的选择,显示您正在键入的行下方的可能匹配项。当只剩下一个基于您已键入内容的选择时,shell 将自动补全该命令或参数,您可以按 Enter。让我们通过一个示例来了解。
如果您在 Linux 桌面系统的主目录中,视图可能如下所示:
~ pwd
/home/dave
~ ls
Desktop
Documents
Downloads
Library
Movies
Music
Pictures
Public
code
go
如果您想移动到 Documents 目录,将使用 cd(更改目录)命令来执行此操作:
~ cd Documents
首先,键入 cd D 并按 Tab:
~ cd D
Desktop/ Documents/ Downloads/
您将看到 shell 已将十个可能的选择缩小到三个。再输入一个字母并再次按 Tab。您将看到只有两个项目匹配:
~ cd Do
Documents/ Downloads/
再输入一个字母,c,将选择缩小到只有一个,再按 Tab 将自动补全目录名称:
~ cd Documents/
一旦您达到目录名称的自动补全,就可以像往常一样使用 Enter 执行命令,或者继续在该目录内自动补全。例如,在这里再次按 Tab 将再次开始 Documents 目录内的自动补全过程,保留 Documents/ 前缀并自动补全斜杠右侧的有效项目。您的 shell 的当前工作目录在您有有效路径并按 Enter 之前不会更改。
这个小技巧将在未来几年为您节省大量的输入。尽早开始使用它!
结论
在这一章中,您学到了在命令行上有效工作之前需要知道的所有基本理论。您看到了命令行语法的实用示例,并了解了大多数命令如何接受参数的基础知识。
我们还介绍了 shell 的概念,并介绍了一旦您输入命令并按 Enter 键,可执行文件是如何被查找的。令人惊讶的是,有许多高级用户并不完全理解这两个概念,这妨碍了他们快速高效地使用命令行环境。
最后,您学到了在命令行上在系统上移动的最重要的基本命令。您几乎每次在 Linux 系统上工作时都会使用这些命令——它们代表了任何人在进一步学习之前需要掌握的绝对基础。您甚至学会了您的第一个节省时间的技巧,shell 自动补全。
如果您正在跟随并尝试在真实的 Linux 系统上进行所有这些(您应该这样做!),请确保在继续下一章之前练习您所学到的内容几分钟。我们将在本书的其余部分中继续建立在这些知识上。
相关推荐
- 如何为MySQL服务器和客户机启用SSL?
-
用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...
- Mysql5.7 出现大量 unauthenticated user
-
线上环境mysql5.7突然出现大量unauthenticateduser,进mysql,showprocesslist;解决办法有:在/etc/hosts中添加客户端ip,如192.16...
- MySQL 在 Windows 系统下的安装(mysql安装教程windows)
-
更多技术文章MySQL在Windows系统下的安装1.下载mysql和Framework链接链接:百度网盘请输入提取码提取码:6w3p双击mysql-installer-communit...
- MySql5.7.21.zip绿色版安装(mysql数据库绿色版安装)
-
1、去网上下载满足系统要求的版本(mysql-5.7.21-winx64.zip)2、直接解压3、mysql的初始化(1)以管理员身份运行cmd,在mysql中的bin目录下shift+右键-在...
- MySQL(8.0)中文全文检索 (亲测有效)
-
在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:SELECT*FROM<表名>WHERE<字段名>like‘%ABC%’但是它的效率太低,是全盘扫描。...
- 新手教程,Linux系统下MySQL的安装
-
看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...
- 麒麟服务器操作系统安装 MySQL 8 实战指南
-
原文连接:「链接」Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装MySQL8的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL作为主流开源数据库之一,被广泛应用于各种业务...
- 用Python玩转MySQL的全攻略,从环境搭建到项目实战全解析
-
这是一篇关于“MySQL数据库入门实战-Python版”的教程,结合了案例实战分析,帮助初学者快速掌握如何使用Python操作MySQL数据库。一、环境准备1.安装Python访问Pytho...
- 安装MySQL(中标麒麟 安装mysql)
-
安装MySQL注意:一定要用root用户操作如下步骤;先卸载MySQL再安装1.安装包准备(1)查看MySQL是否安装rpm-qa|grepmysql(2)如果安装了MySQL,就先卸载rpm-...
- Mysql最全笔记,快速入门,干货满满,爆肝
-
目录一、MySQL的重要性二、MySQL介绍三、软件的服务架构四、MySQL的安装五、SQL语句六、数据库相关(DDL)七、表相关八、DML相关(表中数据)九、DQL(重点)十、数据完...
- MAC电脑安装MySQL操作步骤(mac安装mysqldb)
-
1、在官网下载MySQL:https://dev.mysql.com/downloads/mysql/根据自己的macOS版本,选择适配的MySQL版本根据自己需求选择相应的安装包,我这里选择macO...
- mysql主从(mysql主从切换)
-
1、本章面试题什么是mysql主从,主从有什么好处什么是读写分离,有什么好处,使用mycat如何实现2、知识点2.1、课程回顾dubboORM->MVC->RPC->SOApro...
- 【linux学习】以MySQL为例,带你了解数据库
-
做运维的小伙伴在日常工作中难免需要接触到数据库,不管是MySQL,mariadb,达梦还是瀚高等其实命令都差不多,下面我就以MySQL为例带大家一起来了解下数据库。有兴趣的小伙伴不妨评论区一起交流下...
- 玩玩WordPress - 环境简介(0)(玩玩网络科技有限公司)
-
简介提到开源博客系统,一般都会直接想到WordPress!WordPress是使用PHP开发的,数据库使用的是MySQL,一般会在Linux上运行,Nginx作为前端。这时候就需要有一套LNMP(Li...
- 服务器常用端口都有哪些?(服务器端使用的端口号范围)
-
下面为大家介绍一下,服务器常用的一些默认端口,以及他们的作用: 21:FTP服务所开放的端口,用于上传、下载文件。 22:SSH端口,用于通过命令行模式远程连接Linux服务器或vps。 23:...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
手机如何设置与显示准确时间的详细指南
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)