原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。java
听说,若是和一我的对视5秒,就能爱上对方。小王知道这个道理,渐渐的想入非非。他想象着嘴唇传来一阵微凉的触感,而后丹田里的空气被迅速抽干。linux
来一场无拘无束的桌咚
,闪亮的屏幕是他们的见证,跳动的字符是他们的伴奏。程序员
他的背逐渐靠在了键盘上,双手倒扣着桌子,乱七八糟的字符流源源不断的输入到终端。可是等等!这些肆意输入的字符,会不会伤害到他管理的服务器?或者,在他按下Enter键以前,都是安全的?shell
这个想法把他拉回到了现实,让他从恍惚中惊醒。centos
稍微思考了一下,他肯定,是不允许猫这样的动物在他键盘上跳来跳去的。安全
如今,你已经安装好了centos,并远程链接上了它。咱们拥有了它,但并不能了解它的脾气。接下来,让咱们进入Linux命令行的世界。和我签定契约吧,少年。bash
本小节会使用很是详细的演进方式,来看一下一个命令,是怎样生成和执行的。服务器
好啦,咱们如今就在终端里了。什么叫作终端呢?你在不少黑客电影里,看到的黑漆漆的界面就是,它提供了一个能够输入字符串的交互式界面,至于那些闪光的、扫描机同样的东西,是不存在的。微信
尝试输入些什么吧。 好比: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 ~]
,这部分叫作提示符,光标会一直跳动,等待你的输入。这部分是能够定制的,甚至能够定制的十分漂亮。
到如今为止,咱们什么都没获得。按照程序员的想法来讲,就要实现一个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目录中,因此可以被识别到。
接下来,咱们把上面的命令,作成一个脚本。而后将这个脚本,放到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,就能够正常输出一串数字。咱们成功的让一个没有任何意义的字符串,表达了它的想法。虽然咱们依然是它的主宰。
本小节经过构建一个简单的小命令,说明了PATH环境变了的重要性。并初步接触了如下几个命令:
一、我能够自定义一个目录,好比/root/mybin
,把它加入到PATH么?
二、我能够省略上面的touch命令,直接使用重定向生成文件么?
三、除了放到PATH和相对路径,还有没有其余的命令执行方式?
“你不了解我”,妹子的声音在对视4.5秒的时候传来,紧接着她抽出了手。
但愿落空,痛苦在小王的心里逐步蔓延,像是酒精注射进了体内,吸干了全部的水分,透着不太真实的醉意。但小王的表情依旧平静。
“我却了解你”,妹子的声音接着传来,又让小王从混沌中逐渐清醒。
“因此,这并不公平”。
做者简介:小姐姐味道 (xjjdog),一个不容许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不同的味道。个人我的微信xjjdog0,欢迎添加好友,进一步交流。
6 echo 2 mv 2 chmod 4 $PATH 2 whereis 3 touch
做者简介:小姐姐味道 (xjjdog),一个不容许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不同的味道。个人我的微信xjjdog0,欢迎添加好友,进一步交流。