【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

时间:2023-03-08 15:56:07

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握


内容简介

1、第二部分第二课:命令行,世界尽在掌握

2、第二部分第三课预告:文件和目录,组织不会亏待你


命令行,世界尽在掌握

今天的标题是不是有点霸气侧漏呢?

读者:“小编,你为什么每次都要起这么非主流的标题呢?不能愉快地玩耍么?”

小编:“那我问你,老子他为什么要写《道德经》咧?”

读者:“为什么咧?”

小编:“因为老子愿意!”

开个小玩笑轻松一下 O(∩_∩)O~

没办法,不能不激动,因为我们终于来到了这一刻,命令行的征程将从此课开始。

而且你会发现,一旦入门并且精通了Linux命令行,那么你就离极客又近了一步。想要像电影里面那样分分钟破解密码么,想要像《钢铁侠》里的托尼.斯塔克一样用命令行编译录入钢衣中的程序么?那命令行是一大利器。

当然了,一开始我们肯定会带大家从基础的知识点入门,不会一上来就上演《骇客帝国》的。


命令行提示符

首先,我们假设您已经打开了一个终端。如果不知道什么是终端或者不知道如何打开一个终端,那你肯定没看我们的上一课(【Linux探索之旅】第二部分第一课:终端Terminal,好戏上场)。

上一课我们也介绍了两种终端的模式:

  1. 真正的终端:没有图形界面,只有黑底白字的全屏幕的终端,只能通过键盘输入,也可以称为Console(控制台)。

  2. 图形模式的终端:一般我们在Ubuntu,Fedora等Linux发行版下日常使用的就是这种终端。你可以配置终端的外观,用鼠标操作,也可以同时运行其他应用程序,等等。

我们强烈推荐使用图形模式的终端。我们打开一个图形模式的终端,如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

可以看到终端的一行中开头是一串字符,后面白色的那一小块其实是闪动的光标,提示我们输入会从光标处开始。

那一串 oscar@oscar-laptop:~$ 是什么意思呢?我们还什么都没有输入呢,怎么就显示了这一串不明所以的文字呢?

不要慌,你可以把它看成电脑跟你说“你好”呢,这是终端打招呼的方式(我承认这种打招呼的方式有点非主流,但是考虑到命令行是在20世纪六七十年代出生的,请多多担待),术语叫做“命令行提示符”,顾名思义就是提示在其后面输入命令。

在你输入新的一行命令前,这个命令提示符都会出现。

很想知道到底这一串字符表示什么意思对吗?我们把其拆分开来讲解:

  1. oscar 这是当前用户的名字。Linux是一个多用户的操作系统,Windows也可以。不过Linux的多用户管理更方便。我们一般建议每个使用Linux系统的用户都创建一个属于自己的账户,便于隐私管理。我们之后的课程会讲如何在Linux下创建新用户。

  2. @ 这个符号我们应该不陌生,我们的电子邮件一般都是 name@domain.com 这样的不是吗。这个@就表示英语里的at,是“在...里面,落户在...的,在其中”的意思。@前面是用户名,后面是所在的域。

  3. oscar-laptop 这是当前电脑/操作系统的名字。上面说了在@后面的是一个域,所以 oscar@oscar-laptop 就表示oscar-laptop这台电脑的oscar这个用户。oscar-laptop在安装此Linux系统时可以任意指定。

  4. :  这是分隔符,没有什么特别的涵义。

  5. ~  这是当前所在目录的名字,会随着用户进入不同目录而改变。~表示当前用户的家目录,有点类似Windows系统的“我的文档”这个目录。

  6. $  指示你所具有的权限的字符。在Linux系统中有两种可能:

    $:表示普通用户,有权限的限制(比如不能修改重要的系统文件等)。因此我的账户oscar就是一个普通用户。

    #:表示超级用户,也就是root。表示你当前以root这个用户出现。root拥有所有权限,是系统的大管家,想干什么就干什么。所以一般不推荐初学者登录为root,因为一不小心可能会误删一些文件。之后的课程我们会再来研究root模式,暂时我们还是乖一点好了,以免办傻事。

因此, oscar@oscar-laptop:~$ 的意思就是:

《你好,你目前是以oscar这个用户登录;你的电脑名称为oscar-laptop;你目前位于 ~ 目录下,就是你的用户家目录。你是普通用户,拥有有限的权限》。

假如我此时把用户切换为root,你可以看到命令提示符的变化,如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

看到了吗?我一切换成root,命令提示符就变成了 root@oscar-laptop:/home/oscar#

其实oscar/root和oscar-laptop这两个名字可以分别用hostname和whoami这两个命令来获知,如下图所示:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

当然了,这个提示符的格式和内容是可以自行配置的,如果你嫌它太长,你可以精简它;如果你嫌它不够详细,可以再加显示的内容。如何来配置,我们在之后的课程,等你学会如何在Linux下使用文本编辑器之后再说。


命令和命令参数

我们在终端中工作时,就是给它传递指令,让它做我们要求的事情。这些指令都是通过命令的形式来输入的。

Linux中有很多很多命令,好消息是我们不需要全部记住,只需要记得一些常用的就可以了。对于那些不常用的命令,我们只要在使用前懂得如何去阅读命令的使用手册就好了。

是的,Linux的开发者们为我们写了丰富详尽的命令使用手册,英语是manual。

Linux的使用手册可以说是Linux开发者的“圣经”,你会发现他们只信靠这本“圣经”。

为什么呢?因为这是参考的工具书。命令的使用方法,各种用例,都详细地记载在这部“圣经”里。只要我们肯花功夫去读,就能找到想要的答案。

我们之后会用单独的一课教大家如何阅读Linux的使用手册:太重要了。

特别提一下,你可能看到过一些Linux老手,当一些Linux初学者问他们看似很简单,百度就能搜出来的问题,比如这个命令怎么用之类时,会对新手说:RTFM。

你会诧异RTFM是什么意思,其实RTFM是Read The F***ing Manual的首字母缩写,意为:“阅读那该*死的使用手册”。这并不是侮辱人的话,而是有点无奈的叹息。

类似的还有RTFSC,是Read The F***ing Source Code,“阅读那该*死的源代码”的缩写,据说是Linus Torvalds最先说的。

所以,为了避免以后有人对你说这样的话,还是好好学习如何阅读使用手册吧。

简单的命令

OK,停止了饶舌,我们终于要输入我们的第一个Linux命令了!

首先,我们从最简单的命令开始。

在终端中输入 date,然后按下回车键。你可以看到如下显示:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

所以,我们输入 date 这个命令,终端显示了以下信息:

Sat Aug 1 20:30:09 CEST 2015

这是什么意思呢?我们知道date在英语中是“日期”的意思,所以机灵的读者应该已经猜到date这个命令的作用了吧。

是的,就是显示当前时间和日期。

  1. Sat是Saturday的缩写,是英语“星期六”的意思。

  2. Aug是August的缩写,是英语“八月”的意思。

  3. 1就是天数。

  4. 20:30:09 是时刻,就是20点30分09秒。

  5. CEST 欧洲中部夏令时间(Central European Summer Time,简称CEST)比世界标准时间(UTC)早两个小时的时区名称之一。它被大部分欧洲国家和部分北非国家在夏天采用,冬季这些国家使用欧洲中部时间(UTC+1)。

  6. 2015是年份。

所以可知小编输入此命令时正是《欧洲中部夏令时间 2015年8月1日的20点30分09秒》,小编此时在法国居住。

怎么样,你已经学会了第一个Linux的命令,date,用于显示当前时间。激动莫?

再来学习第二个常用命令:ls

在终端中输入ls,按回车键,可以看到输出如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

ls是list的缩写,list是英语“列举,列出”的意思。所以ls命令用于列出当前目录下的文件和目录。

不好意思,通常如果你刚装了Linux系统的话,是不可能有这么多文件的,小编因为学编程时在家目录下创建了上百个文件夹,所以一页显示不全。

如果ls命令没有返回任何信息,那么就说明当前目录下什么也没有。

看到了吗?命令其实很简单,就是不包含空格的字母组合。有时候是一个完整的英语单词,有时候是一个英语单词的一部分,有时候是几个单词连在一起。但是有很多时候,我们不仅仅只是输入一个命令,这个命令后还要跟一些参数。

参数

参数就是写在命令之后的一些补充选项。命令和参数之间有空格隔开。例如这样:

command parameters

上面的command和parameter分别是英语“命令”和“参数”的意思,只是演示一下格式,并不是说真有command这个命令和parameters这个参数。

参数里可以包含多个参数,由空格隔开,也可以包含数字,字母,等等。可以说,参数没有固定的格式,但是一般来说还是遵循一定的规范的。

短参数(一个字母)

最常用的参数形式就是一个短横线后接一个字母。例如:

command -p

如果我们要一次加好几个短参数,可以用空格隔开,例如:

command -p -a -T -c

多个短参数也可以合并在一起,例如上面的命令等价于:

command -paTc

请注意:参数的字母的大小写是有区别的,大写的T和小写的t通常表示不同意思。

我们来举一个实际的例子,比如我们用下面的命令来演示:

ls -a

输入之后回车,就会显示如下图信息:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

这个参数中的a是英语all的缩写,表示“全部”,所以 ls -a就是列出当前目录下所有文件,包括隐藏文件。

LInux的隐藏文件是以一个点开头的,如 .bashrc 。如果此时我们的目录是家目录,那么应该会有不少隐藏文件,大多是配置文件。

长参数(多个字母)

长参数没有短参数那么常用,但也是很有用的。短参数是以一个短横线开始,而长参数是以两个短横线开始的。例如:

command --parameter

如果有多个长参数,是不能像多个短参数那样合并写的。而是只能以空格隔开,例如:

command --parameter1 --parameter2

当然我们也可以组合使用短参数和长参数,例如:

command -paTc --parameter1 --parameter2

有时候,同一个意义的参数有短参数和长参数两种形式,效果是一样的,可以任选哪一种。

例如 ls -a 和 ls --all 是一个作用,都是列出当前目录下的所有文件,包括隐藏文件。

参数的值

有一些参数你还需要给它赋一个值才行。而且短参数和长参数的赋值的方式不尽相同。

例如,短参数赋值,通常是这样的:

command -p 10

表示把10赋值给p参数。

如果是长参数,则一般是这样赋值:

command --parameter=10

长参数的方式更加容易理解,但是不如短参数那么简洁。

其他参数

正如我们说过的,参数的形式没有绝对的准则。我们上面给出的规则是一般的,有些命令的参数格式可能是我们没怎么见过的。

有些参数就不一样,而且取决于命令。例如对于 ls 这个命令,假如后面带了一个参数,这个参数是一个目录的路径名的话,那么就会列出此目录下的文件。

如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

我在 ~ 目录下执行了 ls linux_c 这个命令,因此列出了子目录 linux_c 中的文件。


如何找到一个命令

Linux的命令千千万,查找起来实在难。

那么如何在芸芸众令中找到你想要的那个命令呢?小编有时候就会想不起来一个命令到底是如何拼写的。

但是幸好,Linux的开发者们很有先见之明,早就为我们准备了对策,就是用Tab键来补全命令!

说实话,小编以前学Linux,学了有段时间了,还不知道Tab键的这个妙用。后来还是一个Linux高手演示给我看的,当时就震惊了,怎么还有如此好用的技能。“我读书少,你可不要骗我~”, 小编当时的内心也是醉醉的。

而且Tab键不仅可以补全命令,还可以补全文件名,路径名,绝对让你效率倍增。例如,我输入 da 这两个字母,然后按两次Tab键(记得不是按一次Tab键,是按两次),它将为我展示所有可能的补全选项,我们可以看到只有两个可能的选项:

dash和date两个命令。如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

此时,如果我继续输入,变为dat。再按两次Tab键,那么它就为我自动补全成了date了。因为只有一个可能了。

又例如,我用ls命令,后跟一个目录名,我可以写目录名的几个首字母,然后用Tab来帮我补全,有很长的路径名时极为方便:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

如果按Tab键N次一直没有显示什么选项,那说明不存在这几个字母开头的命令或路径。

有时候我们的命令候选项会太多,例如,我们来测试一下。假如,我不输入任何字符,而只是按两次Tab键,那么终端将会提示我所有可能的命令选项,如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

是不是有点吓人,因为我的系统里竟然有3408个命令。不同的人的系统里命令的数目是不一样的,取决于你安装了多少软件。安装的软件越多,可供选用的命令就越多。

我按下两次Tab键后,终端就询问我:Display all 3408 possibilities ? (y or n)

翻出来的意思就是“显示所有3408个可能的选项吗?(输入y表示确定,输入n表示否决)”。

我们可以输入y,按回车键,然后它就真的为我们显示了3408个命令。当然不是在一页中显示,分了很多页。

我们如何浏览这些页面呢?

  1. 空格键:用于跳到下一页

  2. 回车键:用于跳到下一行

  3. q :用于退出列表

一般情况下,我们是输入n,回车的,就什么都不显示了。毕竟要在3408个命令中找一个命令简直是大海捞针么。

命令的历史记录

很多时候,我们都需要找回我们之前输入的命令。不仅是因为有时我们忘了那句命令是什么,更重要的是,假如这句命令很长,我不想再花时间重新输入一遍了。那么显示命令的历史就很有用了。

有两个按键是很常用的:

  1. 向上键:按时间顺序向前查找用过的命令,每按一次就前进一个命令。

  2. 向下键:按时间顺序向后查找用过的命令,每按一次就前进一个命令。

如果你觉得用上下键每次进一个命令太花时间,那么你也可以用查找的方法:

Ctrl + R : 用于查找使用过的命令。

例如,我查找date这个命令,就可以用Ctrl + R,按回车,然后只输入da,因为我之前使用过date这个命令,它就为我自动补全了date命令,如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

history命令

history这个命令,用于列出之前使用过的所有命令,如下图:

【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

可以看到,系统自动保存了小编输入过的2003条命令,最近的一条命令正式history。

可以方便我们了解自己之前输入过那些命令。


一些实用的快捷键

Linux系统不但提供了N多的命令,而且其键盘快捷键组合也是大大滴多。练好了快捷键,足以让你键盘飞起来,就是这个feel,倍儿爽。想象自己是《骇客帝国》的Neo。

下面列举一些经常使用的快捷键:

  1. Ctrl + L   用于清理终端的内容,就是清屏的作用。其实clear命令也有同样效果,但是你不觉得Ctrl + L 的按键是比输入clear这五个字母更快速吗?

  2. Ctrl + D  给终端传递EOF (End Of File,文件结束符),在运行程序时很有用,有些程序我们需要在接收到EOF输入时结束,那么这个快捷键就可以派上用场了。如果你在命令行提示符后什么也不输入的情况下直接按下这组快捷键,那么就会关闭当前的终端。

  3. Shift + PgUp  用于向上滚屏,与鼠标的滚轮向上滚屏是一个效果,但岂不是很方便吗?

  4. Shift + PgDn  用于向下滚屏,与鼠标的滚轮向下滚屏是一个效果。

下面的快捷键在你编辑一条比较长的命令时很有用:

  1. Ctrl + A  光标跳到一行命令的开头。一般来说,Home键有相同的效果。

  2. Ctrl + E   光标跳到一行命令的结尾。一般来说,End键有相同的效果。

  3. Ctrl + U   删除所有在光标左侧的命令字符。

  4. Ctrl + K   删除所有在光标右侧的命令字符。

  5. Ctrl + W  删除光标左侧的一个“单词”,这里的“单词”指的是用空格隔开的一个字符串。例如 -a 就是一个“单词”。

  6. Ctrl + Y   粘贴用Ctrl + U, Ctrl + K或Ctrl + W“删除”的字符串,有点像“剪切-粘贴”。

当然了,好的快捷键绝不止这些。


总结

  1. Linux的终端在每一行的开头处会有一个被称为“命令行提示符”的一串字符串,一般这个提示符包含了你的用户名,你的电脑的名字和你所在的路径。这个提示符的格式可以自行设置。

  2. 我们在命令提示符后面输入命令,告诉电脑我们想要它完成的任务。

  3. 命令可以单独使用,也可以带参数。参数就好比选项,可以改变命令的行为。

  4. 命令的参数通常是由一个短横和一个字母组成,例如 -h ; 也可以由两个短横和几个字母组成,例如 --help 。

  5. 在输入了一个命令的首字母或前几个字母后,我们可以用Tab键来补全命令,非常方便。

  6. 可以用键盘上的上下键来前后翻看使用过的命令,也可以用Ctrl + R这组快捷键来查找使用过的命令。

  7. 在终端的操作中,有很多常用的快捷键组合。了解或记住一些快捷键将使我们效率倍增。


第二部分第三课预告

今天的课就到这里,一起加油吧!

下一课我们学习:文件和目录,组织不会亏待你