阅读 508

《调教命令行03》感觉不是说来就来的

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。

据说,如果和一个人对视5秒,就能爱上对方。小王知道这个道理,渐渐的想入非非。他想象着嘴唇传来一阵微凉的触感,然后丹田里的空气被迅速抽干。

来一场无拘无束的桌咚,闪亮的屏幕是他们的见证,跳动的字符是他们的伴奏。

他的背逐渐靠在了键盘上,双手倒扣着桌子,乱七八糟的字符流源源不断的输入到终端。但是等等!这些肆意输入的字符,会不会伤害到他管理的服务器?或者,在他按下Enter键之前,都是安全的?

这个想法把他拉回到了现实,让他从恍惚中惊醒。

稍微思考了一下,他确定,是不容许猫这样的动物在他键盘上跳来跳去的。

万事开头难。面对黑漆漆的Linux窗口,要勇敢的走出第一步。不要怕输错了什么,系统健壮的很。命令行通常会拥有比图形界面更高的效率,更加重要的是它可以做自动化之类的小工具,这使得生产力产生质的飞跃。

现在,你已经安装好了centos,并远程连接上了它。我们拥有了它,但并不能了解它的脾气。接下来,让我们进入Linux命令行的世界。和我签订契约吧,少年。

本小节会使用非常详细的演进方式,来看一下一个命令,是怎样生成和执行的。

1、简单尝试

好啦,我们现在就在终端里了。什么叫做终端呢?你在很多黑客电影里,看到的黑漆漆的界面就是,它提供了一个可以输入字符串的交互式界面,至于那些闪光的、扫描机一样的东西,是不存在的。

尝试输入些什么吧。 比如:jdsjf

[root@localhost ~]# jdsjf
-bash: jdsjf: command not found
复制代码

我们再次把这张图贴一下。怎么回事?命令的输出翻译成中文,就是“找不到命令”的意思。什么叫命令?就是我们上面随便输入的字符串jdsjf

然后,我们看下提示中其他一些有用的东西。

↓↓↓↓↓↓

bash 代表的是我们所使用的shell,shell可以认为是一个解释器,将我们的输入解释成一系列可执行的指令。现在的linux发行版,最流行的就是bash解释器,几乎每个都预装了它。

命令找不到,证明我们的字符串bash解释不了。但是,Linux上一些目录里的文件,是可以被默认找到的,这些目录的集合,就叫PATH 。PATH还是一个环境变量,我们可以通过命令查看它的尊容。

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
复制代码

想要知道系统中有哪些命令,就可以看下上面这些文件夹中,都有哪些文件。文件非常非常之多,但是大部分我们不会接触。所以,xjjdog才会写这么个东西--聚焦那些最常用,最有用的命令,最常用的参数,最有用的场景。

命令输出后,还有一些额外的东西,比如[root@localhost ~],这部分叫做提示符,光标会一直跳动,等待你的输入。这部分是可以定制的,甚至可以定制的十分漂亮。

2、Hello World

到现在为止,我们什么都没得到。按照程序员的想法来说,就要实现一个hello world的程序。在终端shell里,这个过程变得简单,远比写一个java程序简单。

[root@localhost ~]# echo "Hello World"
Hello World
复制代码

如上所示,echo的意思就是输出一些内容。后面的Hello World,就叫做参数,它们之间以空格分隔,可以接受多个参数。

[root@localhost ~]# echo "Hello World" , "Fuck 996"
Hello World , Fuck 996
复制代码

以上命令能够正常运行,证明echo是我们的终端能够认识的一个命令。那到底这个命令是在什么地方呢?可以使用whereis命令进行查找。

[root@localhost ~]# whereis echo
echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz
复制代码

命令显示。我们的echo命令全路径,是/usr/bin/echo,由于它处于PATH目录中,所以能够被识别到。

3、将命令加入PATH

接下来,我们把上面的命令,做成一个脚本。然后将这个脚本,放到PATH目录中。不过先等等,我们要先给命令起个名字。

首先需要创建一个文件。在Linux上,创建文件使用touch命令。

[root@localhost ~]# touch jdsjf
复制代码

命令执行后,什么都没发生,它只是创建了一个空文件。接下来,我们向其中添加一些内容。

[root@localhost ~]# echo "echo 'Hello World'" > jdsjf
复制代码

注意符号>,它的意思是,将前面的输出,重定向到后面的文件中。执行完上面的命令,jdsjf 中的内容,就变成了echo 'Hello World

接下来,我们尝试着去执行刚才生成的命令。

[root@localhost ~]# ./jdsjf
-bash: ./jdsjf : Permission denied
复制代码

我们通过相对路径的方式,来执行刚刚生成的命令。结果,终端显示我们并没有这个命令的执行权限。

其实,Linux在权限控制这一方面,非常的详细。一个文件,有可读、可写、可执行三种属性。如果想要一个文件能够执行,需要给它添加执行权限,这个过程是由命令chmod完成的。

[root@localhost ~]# chmod u+x jdsjf
[root@localhost ~]# ./jdsjf
Hello World
复制代码

我们将在后面的章节,来详细介绍权限方面的知识。如上所示,命令已经能正常输出,接下来,我们把命令移动到PATH中的一个目录。

[root@localhost ~]# mv jdsjf /usr/local/bin/
[root@localhost ~]# jdsjf
Hello World
复制代码

不需要加任何的相对路径,现在,只需要输入jdsjf,就可以正常输出一串数字。我们成功的让一个没有任何意义的字符串,表达了它的想法。虽然我们依然是它的主宰。

4、小结

本小节通过构建一个简单的小命令,说明了PATH环境变了的重要性。并初步接触了以下几个命令:

  • echo 输出一些信息。
  • touch 创建一个文件。
  • > 重定向符号。
  • chmod 修改文件权限。
  • mv 移动文件。

5、思考&扩展

1、我可以自定义一个目录,比如/root/mybin,把它加入到PATH么?

2、我可以省略上面的touch命令,直接使用重定向生成文件么?

3、除了放到PATH和相对路径,还有没有其他的命令执行方式?

END

“你不了解我”,妹子的声音在对视4.5秒的时候传来,紧接着她抽出了手。

希望落空,痛苦在小王的内心逐步蔓延,像是酒精注射进了体内,吸干了所有的水分,透着不太真实的醉意。但小王的表情依旧平静。

“我却了解你”,妹子的声音接着传来,又让小王从混沌中逐渐清醒。

“所以,这并不公平”。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,​进一步交流。​


6 echo 2 mv 2 chmod 4 $PATH 2 whereis 3 touch

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,​进一步交流。​

关注下面的标签,发现更多相似文章
评论