思考:文件是什么?众多文件如何有效组织起来?
举个例子,现在有10万本书,把每一本书想象成文件。要求各位把书组织起来,放起来。将来拿某一本书,就立即能找到。
任何东西信息的组织有两种方式,第一种事平面化的,第二种是层次化的。
平面化是指把所有东西放在同一个组织架构下,而大家都在同一个平面层次下。这样找起来只能做遍历。从第一个一直找到最后一个。层次化管理呢?比如先进行分类按照派别分类。
自顶向下依次去找,先找起始位置,通过分类找二级位置。通过二级位置找三级位置。依次类推每次寻找都会缩小范围。
把文件划分成层次结构就称为文件系统。基于层级方式管理文件的机制称为文件系统。
目录:存在的目的反映 路径映射
文件:存储空间存储的一段流式数据,对数据可以做到按名存取
文件系统:层级结构,有索引
所有的文件都起点于根
/:原处起点
倒置树状结构
/dev/pts/2:
最左侧的/:表示根目录,
其他的/:表示路径分隔符
Linux的路径分隔符是/
Windows的是\
文件的路径表示:
绝对路径:从根开始表示出的路径
相对路径:从当前位置开始表示出的路径
文件名使用法则:
严格区分字符大小写:
目录也是文件;在同一路径下
文件名支持使用除了/以外的任意字符
最长不能超过255个字符
用户的家目录: home
用户的起始目录:普通用户管理文件的位置
工作目录:
/etc/sysconfig/network-scripts/ifcfg-eno1677736
basename:最右侧的文件或目录名
eno1677736
dirname:basename左侧的路径
/etc/sysconfig/network-scripts
命令:
~]# basename /PATH/TO/SOMEFILE
SOMEFILE
~]# dirname /PATH/TO/SOMEFILE
/PATH/TO/
回顾: 开源协定: GPL,LGPL,BSD,Apache
BSD协定要求:
1、如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码 中的BSD协定。
2、如果二次发布的产品是二进制格式的库或程序,则需要在发布的文档或 版权声明中说明包含原来的代码中的BSD协定
3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广
代码的共产主义运动
文件系统,文件、目录
倒置树状结构:文件系统
目录:可以分支
文件:不可以分支
路径:
绝对路径
相对路径
程序的组成部分:二进制程序文件、库文件、配置文件、帮助文件
二进制、库文件 可执行文件
库文件不能独立执行,只能被调用时执行
配置文件、帮助文件 可被查看其内容的文件
《穿越计算机的迷雾》、《量子物理史话》
人机交互界面:
GUI
CLI
Linux基础知识:
任何的人机交互接口都应该关联到一个终端设备上,而后我们在终端设备上开始显示出命令提示符。在命令提示符下我们就可以键入命令。但是每一个命令大体的运行格式几乎都是相似的。怎么相似呢?
命令的语法格通用式:
COMMAND OPTIONS ARGUMENTS
命令 选项 参数
发起一个命令:请求内核将某个二进制程序发起并运行为一个进程
程序-->进程
静态-->动态(有生命周期)
所谓可执行的程序文件就表示它内部就是之间调用了CPU指令集当中所允许运行指令当中的某个或某些指令
命令本身就是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件
多数程序文件都存放在一下路径:
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
普通命令:/bin,/sbin,/usr/local/bin
管理命令:/sbin,/usr/sbin,/usr/local/sbin
很多程序在运行时,如果说在研发时调用了标准库,或者其他库。这些库文件在命令运行时必须一并被装入内存运行。因为库文件其实就是应用程序的组成部分。
其实库文件就是公共功能性程序,如果说某一个程序或者某一段代码。要运行程序。X程序要用,Y程序也要用,Z程序也要用。像这个多数程序都会用到的。公共的共享的程序部分。我们称为库文件。共享库文件也是二进制的但它们不能够独立执行。
共享库存放位置:
/lib, /lib64, /usr/lib, /usr/lib64, /usr/loacl/lib,
/usr/loacl/lib64
32位库文件的位置:/lib, /usr/lib, /usr/loacl/lib,
64位库文件的位置: /lib64, /usr/lib64, /usr/loacl/lib64
注意:并非所有的命令都有一个在某目录下与之对应的可执行程序文件
命名必须遵循特定的格式规范:exe,mis,ELF(Linux)
~]# file /bin/ls
命令分为两类:
由shell程序的自带的命令:内置命令(builtin)
独立的可执行程序文件,文件名即命令名:外部命令
为什么在界面键入命令ls后,他就能找到ls呢?我们没有说ls在什么地方,各位一定要记得和理解。我们当前是一个shell环境,这个#提示符是由shell程序提供给我们的,所有当我们键入ls的时候。虽然对我们而言只是ls这样简单,但背后当前的这个命令提示符背后的程序的那个进程会自动的帮我们把ls
在系统上的/bin等路径下查找并且在找到以后把它运行起来。这个过程是给你
提供命令提示符的程序来完成的。
而问题是它怎么知道去那些路径下去找命令呢?
我们系统上bash或者各种各样的shell,它们通过shell自己的环境变量来定义工作特性。
shell程序是独特的程序,负责解析用户提供的命令。
环境变量:
PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件
~]# echo $PATH
/usr/lib64/qt-3.3/bin; /usr/local/sbin;
/usr/sbin; /usr/bin; /root/bin
查找次序:自左而右
怎么解析?
按照空格把命令切割成片,最左侧当命令中间的当作选项还有一部分当参数。
shell这个程序它在完成解析用户提供的命令时,其中第一个功能就是想办法找到用户所给定的这个字符串最左侧,最左侧对应的字符串的程序文件在什么地方。
它怎么去找,如何去找?这个程序要自行解决这个问题。内部提供了一个环境变量。在众多环境变量中有一个PATH。这个里面就保存了从哪里去找当前系统上用户键入命令所对应的程序文件。外部命令才会有可执行文件。
特别强调的是shell自带的命令,是没有程序文件的。是从PATH路径下查找的
如何区别一个命令是内部的还是外部的呢?
查看命令类型:
type COMMAND
OPTIONS:
指定命令的运行特性;
选项有两种表现形式:
短选项: -C,例如 -l, -d
注意:有些命令的选项没有 -
如果同一命令同时使用多个短选项,
多数可合并:-l -d可以合并写出-ld
长选项: --word, 例如,--help, --human-readable
注意:长选项不能合并
注意:有些选项可以带参数,此称为选项参数
ARGUMENTS:
命令的作用对象:命令对什么生效
注意:不同的命令的参数,有些命令可同时带多个参数,多个之间以空白 字符分隔
例如:ls -l -d /var