我们今天发布的该材料的翻译版是为那些想要掌握 Linux 命令行的人准备的。 有效使用此工具的能力可以节省大量时间。 我们将在这里特别讨论 Bash shell 和 21 个有用的命令。 我们还将讨论如何使用命令标志和 Bash 别名来加速长指令的输入。
术语
当您学习使用 Linux 命令行时,您将遇到许多有助于导航的概念。 其中一些术语,例如“Linux”和“Unix”,或者“shell”和“终端”,有时会被混淆。 让我们来谈谈这些和其他重要术语。
现在我们已经介绍了重要术语,我想指出,我将在这里互换使用术语“Bash”、“shell”和“命令行”,以及术语“目录”和“文件夹”。
标准 stdin
)、标准输出(标准输出, stdout
)和标准错误输出(标准错误, stderr
).
如果在下面给出的示例命令中,您会发现类似的内容 my_whatever
- 这意味着这个片段需要用你的东西替换。 例如,文件的名称。
现在,在继续分析本材料专用的命令之前,让我们先看一下它们的列表及其简短描述。
21 Bash 命令
▍获取信息
man
:显示该命令的用户指南(帮助)。pwd
:显示有关工作目录的信息。ls
:显示目录的内容。ps
:允许您查看有关正在运行的进程的信息。
▍文件系统操作
cd
:更改工作目录。touch
:创建一个文件。mkdir
:创建一个目录。cp
:复制文件。mv
:移动或删除文件。ln
: 创建一个链接。
▍I/O 重定向和管道
<
: 重定向stdin
.>
: 重定向stdout
.|
:将一个命令的输出通过管道传输到另一命令的输入。
▍读取文件
head
:读取文件的开头。tail
:读取文件末尾。cat
:读取文件并将其内容打印到屏幕上,或连接文件。
▍删除文件、停止进程
rm
:删除文件。kill
: 停止进程。
▍搜索
grep
: 搜索信息。ag
:高级搜索命令。
▍归档
tar
:创建档案并使用它们。
让我们更详细地讨论这些命令。
团队详情
首先,让我们处理命令,其结果以以下形式发出 stdout
。 通常这些结果出现在终端窗口中。
▍获取信息
man command_name
:显示命令指南,即帮助信息。
pwd
:显示当前工作目录的路径。 在使用命令行的过程中,用户经常需要找出自己在系统中的确切位置。
ls
:显示目录的内容。 这个命令也经常使用。
ls -a
:显示隐藏文件。 此处应用标志 -a
命令 ls
。 使用标志有助于自定义命令的行为。
ls -l
:显示文件的详细信息。
请注意,标志可以组合。 例如 - 像这样: ls -al
.
ps
:查看正在运行的进程。
ps -e
:显示有关所有正在运行的进程的信息,而不仅仅是与当前用户 shell 关联的进程的信息。 该命令经常以这种形式使用。
▍文件系统操作
cd my_directory
: 将工作目录更改为 my_directory
。 要在目录树中上移一级,请使用 my_directory
相对路径 ../
.
cd命令
touch my_file
:文件创建 my_file
沿着给定的路径。
mkdir my_directory
:创建一个文件夹 my_directory
沿着给定的路径。
mv my_file target_directory
: 移动文件 my_file
到文件夹 target_directory
。 当指定目标目录时,您需要使用它的绝对路径(而不是像这样的结构 ../
).
团队 mv
也可用于重命名文件或文件夹。 例如,它可能看起来像这样:
mv my_old_file_name.jpg my_new_file_name.jpg
:创建文件的副本
cp my_source_file target_directorymy_source_file
并将其放入文件夹中 target_directory
.
ln -s my_source_file my_target_file
: 创建符号链接 my_target_file
每个文件 my_source_file
。 如果更改链接,原始文件也会更改。
如果文件 my_source_file
将被删除,然后 my_target_file
会保持。 旗帜 -s
命令 ln
允许您创建目录链接。
现在我们来谈谈 I/O 重定向和管道。
▍I/O 重定向和管道
my_command < my_file
:替换标准输入文件描述符(stdin
) 每个文件 my_file
。 如果命令正在等待来自键盘的某些输入,并且该数据已保存在文件中,则这可能很有用。
my_command > my_file
:重定向命令的结果,即通常会进入的内容 stdout
并输出到屏幕、文件 my_file
。 如果文件 my_file
不存在——它是被创建的。 如果该文件存在,则会被覆盖。
例如执行命令后 ls > my_folder_contents.txt
将创建一个文本文件,其中包含当前工作目录中的内容列表。
如果代替符号 >
使用构造 >>
,那么,只要命令输出重定向到的文件存在,该文件就不会被覆盖。 数据将添加到该文件的末尾。
现在让我们看一下数据管道处理。
一个命令的输出被馈送到另一命令的输入中。 这就像将一根管子连接到另一根管子
first_command | second_command
:输送机符号, |
,用于将一个命令的输出发送到另一命令。 所描述结构左侧的命令发送到什么 stdout
, 掉进 stdin
命令位于管道符号右侧。
在 Linux 上,几乎可以使用任何格式良好的命令来管道传输数据。 人们常说 Linux 中的一切都是管道。
您可以使用管道符号链接多个命令。 它看起来像这样:
first_command | second_command | third_command
多个命令的管道可以比作一个管道
请注意,当符号左侧的命令 |
,输出一些东西到 stdout
,她输出的内容可以立即作为 stdin
第二队。 也就是说,事实证明,我们正在使用管道来处理命令的并行执行。 有时这可能会导致意想不到的结果。 有关此内容的详细信息可以阅读
现在我们来谈谈从文件中读取数据并将其显示在屏幕上。
▍读取文件
head my_file
:从文件开头读取行并将其打印到屏幕上。 您不仅可以读取文件的内容,还可以读取命令输出的内容 stdin
使用此命令作为管道的一部分。
tail my_file
:从文件末尾读取行。 该命令也可以在管道中使用。
头(head)在前,尾(tail)在后
如果您使用 pandas 库处理数据,则命令 head
и tail
你应该很熟悉。 如果不是这样,看看上图,你就会很容易记住它们。
考虑其他读取文件的方式,我们来说一下命令 cat
.
团队 cat
将文件的内容打印到屏幕上,或连接多个文件。 这取决于调用时传递给此命令的文件数量。
猫命令
cat my_one_file.txt
:当单个文件传递给此命令时,它将输出到 stdout
.
如果您给它两个或更多文件,那么它的行为会有所不同。
cat my_file1.txt my_file2.txt
:收到多个文件作为输入后,此命令连接它们的内容并显示发生的情况 stdout
.
如果需要将文件拼接的结果保存为新文件,可以使用运算符 >
:
cat my_file1.txt my_file2.txt > my_new_file.txt
现在我们来谈谈如何删除文件和停止进程。
▍删除文件、停止进程
rm my_file
: 删除文件 my_file
.
rm -r my_folder
: 删除文件夹 my_folder
及其包含的所有文件和文件夹。 旗帜 -r
表示该命令将以递归模式运行。
为了防止系统在每次删除文件或文件夹时要求确认,请使用标志 -f
.
kill 012345
:停止指定的正在运行的进程,给它时间正常关闭。
kill -9 012345
:强制终止指定正在运行的进程。 查看旗帜 -s SIGKILL
与国旗含义相同 -9
.
▍搜索
您可以使用不同的命令来搜索数据。 尤其 - grep
, ag
и ack
。 让我们开始熟悉这些命令 grep
。 这是一个经过时间考验的可靠命令,但它比其他命令慢,而且使用起来也不方便。
grep 命令
grep my_regex my_file
: 搜索 my_regex
в my_file
。 如果找到匹配项,则针对每个匹配项返回整个字符串。 默认 my_regex
被视为正则表达式。
grep -i my_regex my_file
:搜索不区分大小写。
grep -v my_regex my_file
:返回所有不包含的行 my_regex
。 旗帜 -v
表示反转,类似于运算符 NOT
,在许多编程语言中都可以找到。
grep -c my_regex my_file
:返回有关在文件中找到的搜索模式的匹配数的信息。
grep -R my_regex my_folder
:对位于指定文件夹及其嵌套文件夹中的所有文件执行递归搜索。
现在我们来谈谈团队 ag
。 她后来来了 grep
,速度更快,使用起来更方便。
农业命令
ag my_regex my_file
:返回有关行号以及行本身的信息,其中找到了匹配项 my_regex
.
ag -i my_regex my_file
:搜索不区分大小写。
团队 ag
自动处理文件 .gitignore
并从输出中排除在该文件中列出的文件夹或文件中找到的内容。 非常舒服。
ag my_regex my_file -- skip-vcs-ignores
:自动版本控制文件的内容(例如 .gitignore
) 不包含在搜索中。
另外,为了告诉团队 ag
您可以在要从搜索中排除的文件路径上创建一个文件 .agignore
.
在本节的开头,我们提到了命令 ack
。 团队 ack
и ag
非常相似,我们可以说它们 99% 是可以互换的。 然而,球队 ag
工作速度更快,这就是我描述它的原因。
现在我们来谈谈档案工作。
▍归档
tar my_source_directory
:连接文件夹中的文件 my_source_directory
到一个 tarball 文件中。 此类文件对于将大量文件传输给某人非常有用。
焦油命令
此命令生成的 tarball 文件的扩展名为 .tar
(磁带存档)。 事实上,单词“tape”(磁带)隐藏在命令名称及其创建的文件名称的扩展名中,这表明该命令已经存在了多长时间。
tar -cf my_file.tar my_source_directory
:创建一个名为的 tarball 文件 my_file.tar
包含文件夹内容 my_source_directory
。 旗帜 -c
代表“create”(创造),而flag -f
作为“文件”(文件)。
从中提取文件 .tar
-文件,使用命令 tar
有旗帜 -x
(“提取”,提取)和 -f
(“文件”,文件)。
tar -xf my_file.tar
: 从中提取文件 my_file.tar
到当前工作目录。
现在我们来说一下如何压缩和解压 .tar
-文件。
tar -cfz my_file.tar.gz my_source_directory
:这里使用标志 -z
(“zip”,压缩算法)表示应该使用该算法来压缩文件 gzip
(GNUzip)。 文件压缩可以在存储此类文件时节省磁盘空间。 例如,如果计划将文件传输给其他用户,这有助于更快地下载此类文件。
解压文件 .tar.gz
你可以添加一个标志 -z
到提取内容命令 .tar
- 文件,我们上面讨论过。 它看起来像这样:
tar -xfz my_file.tar.gz
需要注意的是,团队 tar
还有许多更有用的标志。
Bash 别名
Bash 别名(也称为别名或缩写)旨在创建命令或其序列的缩写名称,使用它代替常规命令可以加快工作速度。 如果您有别名 bu
,隐藏命令 python setup.py sdist bdist_wheel
,那么要调用这个命令,使用这个别名就足够了。
要创建这样的别名,只需将以下命令添加到文件中即可 ~/.bash_profile
:
alias bu="python setup.py sdist bdist_wheel"
如果您的系统没有该文件 ~/.bash_profile
,然后你可以使用命令自己创建它 touch
。 创建别名后,重新启动终端,即可使用该别名。 在这种情况下,两个字符的输入代替了命令的三打多个字符的输入,这是为了
В ~/.bash_profile
您可以为任何常用命令添加别名。
▍结果
在这篇文章中,我们介绍了 21 个流行的 Bash 命令并讨论了创建命令别名。 如果您对这个话题感兴趣——
亲爱的读者! 您会在本文讨论的命令中添加哪些对初学者有用的命令?
来源: habr.com