万事开头难。面对黑漆漆的Linux窗口,要勇敢的走出第一步。不要怕输错了什么,系统健壮的很。命令行通常会拥有比图形界面更高的效率,更加重要的是它可以做自动化之类的小工具,这使得生产力产生质的飞跃。
现在,你已经安装好了centos,并远程连接上了它。我们拥有了它,但并不能了解它的脾气。接下来,让我们进入Linux命令行的世界。和我签订契约吧,少年。
本小节会使用非常详细的演进方式,来看一下一个命令,是怎样生成和执行的。
4.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 ~],这部分叫做提示符,光标会一直跳动,等待你的输入。这部分是可以定制的,甚至可以定制的十分漂亮。
4.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目录中,所以能够被识别到。
4.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,就可以正常输出一串数字。我们成功的让一个没有任何意义的字符串,表达了它的想法。虽然我们依然是它的主宰。
你可以想一下下面这三个问题:
1、我可以自定义一个目录,比如/root/mybin,把它加入到PATH么?
2、我可以省略上面的touch命令,直接使用重定向生成文件么?
3、除了放到PATH和相对路径,还有没有其他的命令执行方式?
5. Linux漫游方式想要了解linux的基本使用方法,就要了解一个基本的事实--linux系统中,一切皆文件。
不管是命令,还是文档,甚至设备,目录,套接字,在linux上对它们的操作都是一致对待的。许多开发驱动程序的小伙伴,会发现使用的一些函数,和读写文件的没什么两样(open、close、read、write、ioctl)。今天我们所说的基本操作,针对的就是普通文件和目录,本小节将详细解释相关命令。
5.1、当前路径