该材料(我们今天发布的翻译)适用于那些希望掌握Linux命令行的人。 有效使用此工具的能力可以节省大量时间。 特别是,它将涉及Bash shell和21个有用的命令。 我们还将讨论如何使用命令标志和Bash别名来加快长指令的输入。

→
另请在我们的博客上阅读有关bash脚本的一系列出版物条款
在学习如何使用Linux命令行时,您可能会遇到许多对导航有用的概念。 其中有些有时会造成混淆,例如“ Linux”和“ Unix”,或“命令外壳”和“终端”。 让我们谈谈这些和其他重要术语。
Unix是由Bell Labs在1970年代开发的流行操作系统。 她的密码是私人的。
Linux是最流行的类Unix操作系统。 今天,它已在包括计算机在内的各种设备上使用。
终端或终端仿真器是提供对操作系统访问的程序。 您可以同时打开多个终端窗口。
Shell是一个程序,它允许您将以特殊语言编写的命令发送到操作系统。
Bash代表Bourne Again Shell。 这是用于与操作系统交互的最常见的外壳语言。 另外,macOS使用默认的Bash shell。
命令行界面(CLI)是人与计算机之间的一种交互方式,当用户使用该接口从键盘输入命令,并且计算机执行这些命令时,会以文本形式为用户显示消息。 基本上,CLI用于获取有关某些实体(例如文件)的最新信息,并用于处理文件。 命令行界面应区别于主要由鼠标使用的图形用户界面(GUI)。 命令行界面通常简称为命令行。
脚本是一个小程序,其中包含一系列shell命令。 脚本被写入文件,您可以重复使用它们。 编写脚本时,可以使用变量,条件构造,循环,函数和其他功能。
现在我们已经考虑了重要的术语,我想指出的是,在这里我将使用术语“ Bash”,“ shell”和“命令行”可互换使用,以及“目录”和“文件夹”的概念。
我们将在此处使用的标准
流是标准输入(标准输入,
stdin
),标准输出(标准输出,
stdout
)和标准错误输出(标准错误,
stderr
)。
如果在下面给出的命令示例中,您遇到了
my_whatever
类的
my_whatever
-这意味着该片段需要用您的东西替换。 例如,文件名。
现在,在继续分析致力于本材料的团队之前,让我们看一下他们的名单和简短描述。
21 Bash团队
information获取信息
man
:显示该命令的用户手册(帮助)。pwd
:显示有关工作目录的信息。ls
:显示目录的内容。ps
:允许您查看有关正在运行的进程的信息。
▍文件系统操作
cd
:更改工作目录。touch
:创建一个文件。mkdir
:创建目录。cp
:复制文件。mv
:移动或删除文件。ln
:链接创建。
▍I / O重定向和流水线
<
: stdin
重定向。>
: stdout
重定向。|
:使用管道将一个命令的输出重定向到另一个命令的输入。
files读取文件
head
:读取文件的开头。tail
:读取文件末尾。cat
:读取文件并在屏幕上显示其内容或连接文件。
▍删除文件,停止进程
▍搜索
▍存档
让我们更详细地讨论这些命令。
团队详情
首先,让我们处理其结果以
stdout
形式显示的团队。 通常,这些结果显示在终端窗口中。
information获取信息
man command_name
:命令手册的输出,即参考信息。
pwd
:显示当前工作目录的路径。 使用命令行时,用户经常需要准确地找到他在系统上的位置。
ls
:显示目录内容。 此命令也经常使用。
ls -a
:输出隐藏文件。
ls
的
-a
标志在此处应用。 使用标志有助于自定义团队行为。
ls -l
:显示详细的文件信息。
请注意,标志可以合并。 例如,像这样:
ls -al
。
ps
:查看正在运行的进程。
ps -e
:显示有关所有正在运行的进程的信息,而不仅仅是与当前用户外壳程序有关的信息。 此命令通常以这种形式使用。
▍文件系统操作
cd my_directory
:将工作目录更改为
my_directory
。 要在目录树中上
my_directory
一个级别,请使用相对路径
../
作为
my_directory
。
CD指令touch my_file
:在指定路径下创建
my_file
。
mkdir my_directory
:在指定路径下创建
my_directory
文件夹。
mv my_file target_directory
:将
my_file
文件移动到
my_file
文件夹。 指定目标目录时,必须使用其绝对路径(而不是
../
类的结构)。
mv
命令还可用于重命名文件或文件夹。 例如,它可能看起来像这样:
mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
:创建
mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
的副本并将其放在
target_directory
文件夹中。
ln -s my_source_file my_target_file
:创建到
my_source_file
的符号链接
my_source_file
。 如果更改链接,原始文件也将更改。
如果删除文件
my_source_file
,则
my_target_file
将保留。
ln
命令的
-s
标志允许您创建目录链接。
现在让我们谈谈I / O重定向和管道。
▍I / O重定向和流水线
my_command < my_file
:用文件
my_command < my_file
替换标准输入文件(
stdin
)的描述符。 如果该命令希望从键盘输入一些数据,并且该数据预先存储在文件中,则此功能很有用。
my_command > my_file
:将命令结果(即通常进入
stdout
并显示在屏幕上的结果)重定向到
my_file
文件。 如果文件
my_file
不存在,则会创建它。 如果文件存在,则将其覆盖。
例如,执行
ls > my_folder_contents.txt
,将创建一个文本文件,其中包含当前工作目录中内容的列表。
如果代替符号
>
使用构造
>>
,则只要有一个文件将命令的输出重定向到该文件,该文件就不会被覆盖。 数据将添加到此文件的末尾。
现在看一下流水线数据。
一个命令的输出将馈送到另一命令的输入。 就像将一个管道连接到另一个管道一样first_command | second_command
first_command | second_command
:管道符号,
|
,用于将一个小组的结果发送给另一小组。 位于所描述结构左侧的命令发送到
stdout
的事实落入
stdin
命令的
stdin
位于管道符号的右侧。
在Linux中,几乎可以使用任何正确组成的命令来组织流水线数据。 人们常说Linux中的一切都是流水线。
使用传送带符号,可以将多个命令链接在一起。 看起来像这样:
first_command | second_command | third_command
可以将多个团队的输送机与管道进行比较请注意,当命令位于
|
的左侧时
|
在
stdout
打印某些内容,它立即打印出的内容将作为第二条命令的
stdin
可用。 也就是说,事实证明,使用管道,我们正在处理命令的并行执行。 有时,这可能会导致意外的结果。 可以在
这里找到有关此内容的详细信息。
现在让我们讨论从文件中读取数据并将其显示在屏幕上。
files读取文件
head my_file
:从文件的开头读取行并显示它们。 使用此命令作为管道的元素,您不仅可以读取文件的内容,还可以读取命令输出到
stdin
的内容。
tail my_file
:从文件末尾读取行。 此命令也可以在管道中使用。
头在前面,尾巴在后面如果您正在使用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_file
搜索
my_regex
。 找到匹配项后,将为每个匹配项返回整个字符串。 默认情况下,
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文件。 此类文件使用方便,可以将大量文件传输给某人。
Tar命令通过此命令创建的tarball文件是扩展名为
.tar
文件(Tape ARchive)。 “ tape”一词隐藏在命令名称中以及由它创建的文件名称的扩展名中,表明该命令存在了多长时间。
tar -cf my_file.tar my_source_directory
:使用
my_source_directory
文件夹的内容创建一个名为
my_file.tar
的tarball文件。
-c
标志代表“创建”,
-f
标志代表“文件”。
要提取
.tar
文件中的文件,请使用带有
-x
(“提取”,提取)和
-f
(“ file”,文件)标记的
tar
命令。
tar -xf my_file.tar
:将文件从
my_file.tar
tar -xf my_file.tar
到当前工作目录中。
现在让我们谈谈如何压缩和解压缩
.tar
文件。
tar -cfz my_file.tar.gz my_source_directory
:此处,使用
-z
标志(“ zip”压缩算法)指示应使用
gzip
(GNU zip)来压缩文件。 存储此类文件时,文件压缩可节省磁盘空间。 例如,如果计划将文件传输给其他用户,则有助于更快地下载此类文件。
您可以通过在命令中添加
-z
标志来解压缩
.tar
文件的内容来解压缩
.tar.gz
文件。 看起来像这样:
tar -xfz my_file.tar.gz
应当注意,
tar
命令具有更多有用的标志。
重击别名
Bash别名(也称为别名或缩写)旨在创建命令或其序列的缩写名称,使用它们代替普通命令可以加快工作速度。
python setup.py sdist bdist_wheel
,如果您有一个别名
bu
,在其后隐藏了
python setup.py sdist bdist_wheel
,则只需使用该别名即可调用此命令。
要创建这样的别名,只需将以下命令添加到
~/.bash_profile
文件中:
alias bu="python setup.py sdist bdist_wheel"
如果您的系统没有
~/.bash_profile
文件,则可以使用
touch
命令自己创建它。 创建别名后,请重新启动终端,然后即可使用该别名。 在这种情况下,两个字符的输入将替换该命令的三个以上字符的输入,该命令旨在
构建 Python软件包。
在
~/.bash_profile
您可以为任何常用命令添加别名。
▍结果
在本文中,我们研究了21个流行的Bash团队,并讨论了为团队创建别名的问题。 如果您对此主题感兴趣,
这里是 Bash系列出版物。
在这里您可以找到这些出版物的pdf版本。 此外,如果您想学习Bash,请记住,与研究任何其他软件系统一样,练习很重要。
亲爱的读者们! 您将在本文讨论的命令中添加哪些对初学者有用的命令?
→
另请在我们的博客上阅读有关bash脚本的一系列出版物