接上文。
据说,如果和一个人对视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 echoecho: /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 ~]# ./jdsjfHello World
我们将在后面的章节,来详细介绍权限方面的知识。如上所示,命令已经能正常输出,接下来,我们把命令移动
到PATH中的一个目录。
[root@localhost ~]# mv jdsjf /usr/local/bin/[root@localhost ~]# jdsjfHello World
不需要加任何的相对路径,现在,只需要输入jdsjf,就可以正常输出一串数字。我们成功的让一个没有任何意义的字符串,表达了它的想法。虽然我们依然是它的主宰。
4、小结
本小节通过构建一个简单的小命令,说明了PATH环境变了的重要性。并初步接触了以下几个命令:
echo 输出一些信息。
touch 创建一个文件。
> 重定向符号。
chmod 修改文件权限。
mv 移动文件。
5、思考&扩展
1、我可以自定义一个目录,比如/root/mybin
,把它加入到PATH么?
2、我可以省略上面的touch命令,直接使用重定向生成文件么?
3、除了放到PATH和相对路径,还有没有其他的命令执行方式?
END
“你不了解我”,妹子的声音在对视4.5秒的时候传来,紧接着她抽出了手。
希望落空,痛苦在小王的内心逐步蔓延,像是酒精注射进了体内,吸干了所有的水分,透着不太真实的醉意。但小王的表情依旧平静。
“我却了解你”,妹子的声音接着传来,又让小王从混沌中逐渐清醒。
“所以,这并不公平”。