Linux( 诞生于1991.10.5) 继承了Unix以网络为核心的设计思想, 是一个性能稳定的多用户网络操作系统.
注意, Linux系统全部都是基于文件的, Linux操作系统是以根目录的形式来存储数据的.
1.Linux基于网络,远程连接便利: 只要拥有权限, 用户可以轻松操控远在海角的linux服务器, 需要的带宽很小.
2.开放源码和高度可定制:源码的开放利于开发者根据需求去修改从而定制自己的系统, 所以linux能够轻松适应不同用户的不同环境.
这里的 ~( 代位符) 代表个人目录的地址, 不同用户登录会是各自的地址, 以root为例, ~代表 /root/
我们在命令行下敲命令的时候,其实是在跟一个叫shell的程序打交道,shell会根据用户敲的命令名字,在环境变量PATH指定的路径下寻找和命令名字匹配的一个可执行文件,找到后shell会创建一个子进程,在子进程中加载并执行该可执行文件。所以我们平时敲的大部分命令都是一个已经存在的可执行文件,那么这个可执行文件放在哪里呢,通过whereis就可以看到命令所对应的可执行文件的路径了,例如要看看ls这个命令在哪里,就执行
ls就可以看到ls的路径了。如果你把这个文件删掉,那么shell就会告诉你找不到这条命令。大部分命令都是一个可执行文件,但是我们在用whereis查看cd命令的可执行文件路径的时候,shell的输出是这个样子的:“cd:”,竟然没有路径名,这是什么鬼?
这是因为cd是shell的一个内置命令,不以可执行文件的形式存在。所以咱们平时敲的命令主要分为两种,一种是以可执行文件存在的外部命令,一种是没有可执行文件的内置命令。这里的外部和内置是从shell的角度说的。那么怎么判断一条命令是shell内置命令还是外部命令呢,用type查看就可以了,比如查看cd,在命令行下敲type
说了这么多,好像还没有解释shell是什么东西,简单来讲,shell就是一个命令解释器,shell和咱们敲的这些命令都是一样的,都是运行在linux内核之上的应用程序,在内核的眼里都是内核要调度执行的进程。这些进程在运行之前,都是一个一个的可执行文件。只是shell是在linux启动之后就会由init进程自动加载执行的。他也对应着一个可执行文件。可以通过查看/etc/passwd文件中每条记录的最后一个字段查看每个用户在启动后执行的shell可执行文件路径,也可以通过SHELL环境变量查看当前启动的shell。echo
那么上面提到的环境变量又是什么东西呢?可执行文件是什么?他从哪里来?是怎么被加载到内核中变成一个可调度的进程的呢?shell是怎么创建子进程的呢?进程又是什么鬼?shell是被init进程启动,init(systemd)进程又是什么?linux的启动流程是怎么样的?进程是如何被内核调度的?说到这里,好像问题越来越多了,本来只是一个命令的问题,现在又引出这么多问题。技术就是这样,知道的越多,不知道的也就越多。欢迎关注本头条号,我会在后面的文章持续为大家解答这些问题。本人水平有限,欢迎批评指正。
9.00 设置日期时间 格式 - 月日时分年.秒 ,当前表示: 2019//7/20 18:00:00

