Linux及文件系统基本介绍

Linux及文件系统基本介绍

1   互联网行业现状

在服务器端市场:

  • 超级计算机
    • 2014年11月的数据显示前500系统中的485个系统都在运行着 Linux 的发布系统,而仅仅只有一台运行着 Windows 系统
    • 截止到目前,运行 Linux 系统的处理器有 22,851,693 个之多,而 windows 系统仅仅只有 30,720
  • 云计算 2014年 Linux 基金会撰写了一个报告,研究发现 75% 的大公司在使用 Linux 系统作为他们的主要平台,相对的使用 Windows 系统的只占 23%

移动端市场:

基于Linux的Android系统,在2014年第三季度的智能手机出货量中,Andriod 设备的市场份额从去年同期的 81.4% 上升到了 83.6%

嵌入式系统:

自2013 年的研究数字表明,按规划,大约一半的嵌入式系统将会采用 Linux。目前也诞生了越来越多的基于Linux的智能硬件设备,例如:智能路由器。

由于本系列的文章主要是对互联网的软件开发和测试进行介绍,按照目前的行业趋势,Linux系统已经成为互联网行业的最主要的生产力平台了,相关从业人员完全有必要对Linux系统进行学习和了解。

2   典型的计算机系统

一个典型的计算机系统由软件和硬件两部分构成。

其中硬件系统由如下几部分构成:

  • 中央处理器
  • 存储器
  • 外部输入输出(IO)设备

各部分的组成部分如下下图:

计算机的软件则是硬件之上的运行程序和相应的文档。

操作系统则是运行在计算机硬件之上的最基础的软件系统,常见的系统有:

  • PC端
    • Windows
    • Linux
    • Mac OS
    • 其它
  • 移动端
    • iOS
    • Android
    • Windows Phone
    • 其它

在如今移动设备已经如此普及的年代,相信大家已经能够认识到操作系统其实不仅仅只是Windows了,而是基于一定的原理能够百花齐放的基础软件系统。

3   Linux基本介绍

正如前面提及,一个基本的计算机系统由“硬件”和“软件”组成,一台Linux设备,主要的组成如下图所示:

一般情况下,我们所说的Linux系统,特指中间内核级的部分,我们看到的Linux的桌面Desktop,例如:KDE,GNOME都只是普通的应用程序而已。Linux的核心在于其内核,内核是应用程序和硬件程序联系的纽带。

Linux的人机交互方式有两种:

  • 图形交互界面
  • 命令行交互接口(CLI)

图形界面,从Windows下转过来的用户应该不陌生,但是图形界面不是Linux的精髓,作为一个高级的计算机工作者,应该能够透过现象看本质,所有的计算软件的本质其实都是数据的处理和流通。Desktop不是Linux,所以后面将逐渐脱离Desktop,而转向对Linux进行学习和研究。

4   Linux两种交互方式

以查看Linux的根文件系统下的文件为例子,来对比两种交互方式的不同。

在Desktop下面,打开文件管理图形应用程序:

在CLI下面输入ls命令: 

➜  /  ls
bin      deepinhost  etc         initrd.img.old  lost+found  opt   run   sys  var
boot     dev         home        lib             media       proc  sbin  tmp  vmlinuz
cxassoc  disk        initrd.img  lib64           mnt         root  srv   usr  vmlinuz.old

 在图形界面上通过不同的视图或者属性可以查看到更多的文件目录和信息,同样在CLI界面上可以输入不同的命令参数,得到相应的文件目录的文本描述信息。

同样的,Linux的其它常用系统管理工具,如:

  • 磁盘管理
  • 网络管理
  • 进程管理
  • 软件管理

都有对应的桌面程序和CLI程序来提供管理,后续会详细展开,在此不一一赘述。总之,从承载的信息上来看,两种交互基本上是等价的,甚至严格来说CLI可以提供的操作甚至多于图形用户界面。因为图形用户界面可以说是一种更高层的应用,是对CLI功能的进一步封装的图形表现方式而已。

如果作为普通的桌面级消费用户来说,掌握图形交互和图形界面应用即可,但是对于Linux的开发人员来说,则一定要熟练掌握CLI命令来完成对系统的各种操作和调用。

5   文件目录及系统

和Windows完全不同,Linux下面的所有目录都来自于 "/" 目录,没有将硬盘分区成C、D、E盘。Linux下所有的文件系统都衍生于同一个根节点,所有的磁盘必须挂载在文件系统相应的目录下面。

不管是Windows还是Linux,都有如下流程:

  • 新购置的物理硬盘,必须要分区,不管是分一个区还是多个区。这个分区实际上是对磁盘的分区表进行数据定入,和启动位置有关
  • 分区的硬盘必须要格式化相应的文件系统
    • Windows系统一般是NTFS文件系统
    • Linux系统一般是EXT4文件系统
  • 被格式化的磁盘必须要挂载到操作系统相应的文件目录下
    • Windows相当于在C/D/E盘之上还有一个根目录,但是显然它实际上没有按照这种观念来普及此系统。Windows系统自动帮用户完成了挂载分区到目录的工作,即自动将磁盘分区挂载到C/D/E盘的“目录”
    • Linux则除了会自动挂载根分区启动项外,别的需要用户自己配置。

在Linux系统中,信息的基本组织单位称作文件。对于物理设备,Linux也通过文件系统来提供了简化的访问方式,用户可以使用同样的命令处理普通文件和物理设备。

6   标准文件结构

在根目录下,列出Linux的主要目录:

➜  /  ll
总用量 104K
drwxr-xr-x   2 root root 4.0K  9月 18 10:33 bin
drwxr-xr-x   3 root root 4.0K  9月  7 15:31 boot
drwxr-xr-x  17 root root 4.3K  9月 18 21:18 dev
drwxr-xr-x   3 root root 4.0K  9月  7 16:02 disk
drwxr-xr-x 141 root root  12K  9月 18 21:18 etc
drwxr-xr-x   4 root root 4.0K  8月 31 12:01 home
drwxr-xr-x  22 root root 4.0K  9月  7 18:01 lib    
drwxr-xr-x   4 root root 4.0K  9月 11 21:01 media
drwxr-xr-x   5 root root 4.0K  8月 31 17:59 mnt
drwxr-xr-x   8 root root 4.0K  8月 31 09:35 opt
dr-xr-xr-x 211 root root    0  9月 19  2015 proc
drwx------  16 root root 4.0K  9月 18 17:30 root
drwxr-xr-x  22 root root  720  9月 18 21:18 run
drwxr-xr-x   2 root root  12K  9月  7 18:01 sbin
drwxr-xr-x   2 root root 4.0K  4月 28 00:05 srv
dr-xr-xr-x  13 root root    0  9月 19  2015 sys
drwxrwxrwt   8 root root 4.0K  9月 18 22:05 tmp
drwxr-xr-x  10 root root 4.0K  4月 28 00:19 usr
drwxr-xr-x  13 root root 4.0K  8月 31 17:15 var
……

 关于根目录下的文件描述,Linux是有一套标准可以进行参考:FHS(Filesystem Hierarchy Standard)。

本文只对主要的目录的功能介绍。

boot目录包含系统引导程序,Linux内核程序文件vmlinuz,磁盘内存映像文件initrd以及GRUB初始化引导程序和配置文件

除了boot目录,系统启动必须的5个目录:

  • dev 系统设备目录。在Linux系统下,任何设备都对应着一个或多个设备文件,例如磁盘对应着 /dev/sd*文件
  • etc Linux系统运行的配置文本文件
  • lib 该目录含有系统引导过程,及运行系统命令所需要挟内核模块和各种动态链接共享库文件
  • sbin 超级用户组使用的系统命令
  • bin 系统管理员和普通用户共享的各种通用命令程序

记忆方法

目录简称拼接:delsb,删除SB,谁删除这其中的目录了,谁就是那啥啥了 ^_^

其它主要会经常碰到的目录:

  • home 用户主目录的根目录,每增加一个新用户,系统都会在此目录下面增加一个和用户名相同的目录,存储用户相关的配置及数据
  • media 移动存储介质的安装点
  • mnt 文件系统的临时挂载点
  • opt 应用程序等附加软件的安装目录
  • var 存储各种可变长的数据文件,如日志文件等等
  • usr Unix Soft Resource 存储系统提供的各种共享数据(用户命令、库函数、头文件和文档等)
  • root 超级管理员的主目录
  • tmp 临时文件目录,系统重启后会自动清空
  • proc 进程文件系统的根目录,是一个虚拟文件系统,通过对此目录的文件读取可以获取系统运行态的很多信息:如CPU、内存、运行时间等等

关于根目录下的其它目录及其子目录的详细介绍及目录之间的区别,请参考linux官网关于 FHS 的最新更新(基本上每年都会有更新)。

7   文件描述及权限

在Linux下面对文件的操作有个很重要的概念,就是:文件权限。很多初学者认为Linux不好用,基本上很大的原因就是止步于这个地方就没有深入研究下去。因为对于任何一个系统来讲,文件数据的各种操作肯定是很高频的交互,在Linux系统下,如果不了解文件系统的权限概念,那么在对文件数据进行操作的时候,必然会遇到各种阻碍,然后不得已而放弃了Linux的继续研究。

在图形界面下,文件的权限是通过在文件图标是否上锁(或者X号等)来进行形象可视化,在CLI界面,则是通过特殊的文本标记来显示:

➜  /  ll |grep bin
drwxr-xr-x   2 root root 4.0K  9月 25 14:56 bin
drwxr-xr-x   2 root root  12K  9月 25 14:55 sbin

如上对目录及文件的描述一共7段:

  1. permissions:文件的详细信息,主要是权限信息/类型信息
  2. link:文件硬链接数或目录子目录数
  3. user:文件所属用户
  4. group:文件所属组
  5. size:文件大小
  6. time:文件创建时间
  7. file:文件名称

记忆方法

七段的英文简称连写为:

PLUGSTF

参考记忆:插入TF卡

  • PLUGS:插头
  • TF:目前手机上使用的小型SD扩展卡

PLUG 部分是重要的权限组成部分,在Linux下进行操作,最最重要的基础概念就是文件的权限概念,如果这个没弄清楚,则会经常遇到各种阻碍。

7.1   文件类型及权限

典型的文字文件权限描述字符如下所示:

drwxr-xr-x

一共10位,按照功能对位进行划分,总共可以分为4个功能段,如下表所示:

类型

用户权限

组权限

其它权限

1

3

3

3

d

rwx

r-x

r-x

第一段表示文件的类型:

  • d: directory,表示目录
  • -: 短横线“空”表示普通文件,例如:文本文件,二进制文件
  • l: link,表示链接文件,例如:快捷方式
  • b: block,表示块状设备,例如:磁盘
  • c: character,表示字符特殊文件,例如:控制台终端/打印机等等
  • p: pipe,管理文件
  • 其它类型 一般对于应用层开发人员,最多接触的就是目录和普通文件两种,其它有兴趣的可以去具体的查阅相应的资料。

纯粹的文件操作权限的描述有三类:

  • r 可读
  • w 可写
  • x 可执行

对文件操作的使用者身份划分成三类:

  • U User 直接从属用户
  • G Group 文件所属组
  • O Other 不属于上面两样的其它用户

文件权限的三段,对应着不同的使用者身份对此文件的不同权限,任何身份的用户不能够对文件做超过其权限的事情。

特别注意,在Linux系统下:

  • 不是通过扩展名来判定程序的类型的
  • 不是通过 .exe 来判定程序是否可执行,而是通过 x 属性表明此文件可以被执行
  • 和文件不同,目录的 x 属性表示可以将工作路径切换到目录里面

权限相关的9位,分别通过是1或者0来表示是不具有相应的权限,所以会产生如下的一些常见的数字值来表示文件的权限(使用一个小于8的整数来表示3个bit位的状态值):

  • 777 111 111 111 表示对于U,G,O都是读/写/可执行全开发权限
  • 666 110 110 110 表示对于U,G,O都是可读写但是不可执行
  • 644 110 100 100 表示对于U是可读写,对于U和O则是只读的

所以如果要将某个文件修改为对所有的用户/组/其它都是可读写及执行的权限,可以执行如下命令:

chmod 777 xxx_file

或者使用一种主义化的方式来添加权限:

chmod a+rwx xxx_file

关于文件的权限及操作者身份限定,CLI里面提供了丰富的命令行工具,基本上用户可以通过这些命令完成所有对文件系统所需要的操作。具体的命令及操作,可以查阅相应的书藉和文档,多加练习,熟练操作即可。

7.2   其它描述信息

  • 文件大小
  • 创建时间
  • 文件名称

这些信息的用途正如其名称一样直观和明确,在此不再赘述。

8   文件和目录的基本操作

对文件和目录的基本操作包括但不限于:

  • 目录创建和删除
  • 文件创建/修改/删除
  • 文件或目录的移动
  • 文件或目录名称修改
  • 文件查找

等等,这些工具类的使用及熟练,属于比较低级的知识阶段,了解前面的理论框架后,只需要不断重复的操作练习即可,使之成为不经过大脑就可以快速操作的基本本领。

这些命令行,在相应的Linux介绍书藉,或者网络技术文章里面到处都是,在此也略去不表。

9   小结

本文的目标是以最小的篇幅,尽快的给Linux初学者建立整体的Linux的认识,具体各部分的延伸细节和工具的介绍,本文篇幅有限,就都不做详细的介绍。那些碎片化的信息,有低门槛的获取途径(通过网络搜索引擎),和低门槛的加强学习方式(不断练习,熟能生巧),都不是本文的重点,本文及后续的系列文章,主要是在假定从业人员有了一定的Linux操作基础的情况下,而展开的Linux的应用领域的技能。

最后重申一句话: 工具很重要,但是不是目的,对于工具,最好的估计就是“有空时不断的加强练习,熟练操作”,使之成为不经大脑的习惯,然后自己有更多的时间和更高效的方式去解决高层次的问题。

作者:

Harmo哈莫

作者介绍:

https://zhengwh.github.io

Email:

dreamzsm@gmail.com

QQ:

1295351490

时间:

2015-09-18

版权说明:

未经许可,严禁用于商业目的的非法传播

联系或打赏:

http://zhengwh.github.io/contact-donate.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏携程技术中心

干货 | Android工程模块化平台的设计

1573
来自专栏顶级程序员

什么是 C 和 C ++ 标准库?

简要介绍编写C/C ++应用程序的领域,标准库的作用以及它是如何在各种操作系统中实现的。

1893
来自专栏张戈的专栏

WordPress发布文章同步到新浪微博失败的问题解决与分享

张戈博客很久之前分享过一篇 WordPress 发布文章同步到新浪微博 的文章,但经常有站长留言反馈同步失败,我一直觉得是代码部署问题。 最近很长一段时间,张戈...

3617
来自专栏Jacklin攻城狮

iOS权限完整解决

3155
来自专栏思考的代码世界

Python网络数据采集之创建爬虫|第00天

开始本系列的文章时,可能你需要了解一下Python的基础知识,熟悉Python的基本编程,了解一些网络知识等。如果不是特别了解,可以看看我的Python基础系列...

4165
来自专栏idealclover的填坑日常

从零开始折腾博客(0):静态?动态?

这两天心血来潮,忽然想折腾一个属于自己的博客,也就是这一系列的缘由。而最终也总算是折腾出来了,要不你就不会看到这篇文章了

1311
来自专栏听雨堂

水晶报表的推模式

在一个多层结构中,水晶报表的使用往往比较繁琐:     1、在项目中添加数据集,形成xsd文件     2、利用xsd文件,在水晶报表环境中生成报表     3...

2065
来自专栏Java后端技术栈

面试必备:如何将一个长URL转换为一个短URL?

前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多...

2362
来自专栏码神联盟

碎片化 | 第一阶段-06-第一个小程序-视频

如清晰度低,可转PC网页观看高清版本: 第一个java程序Hello word 暂时我们先使用记事本来编写代码,不建议直接使用开发工具eclipse,那都自动生...

3698
来自专栏SDNLAB

SDN实战团分享(三十一):Nutanix超融合之架构设计

超融合平台 针对于超融合的概念有着不同的理解,因为组件不同(虚拟化、网络等)而理解不同。然而,核心的概念如下:天然地将两个或多个组件组合到一个独立的单元 中。在...

3797

扫码关注云+社区