Linux文件系统架构和共享文件方法-LMLPHP

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊 Linux文件系统架构和共享文件方法。

在Linux环境中使用文件和目录是工作中不可回避的环节。当然,在我的博客里成立windows程序员看linux这个专题,主要还是因为微软也发布了自己的linux的发行版,使得我们不得不研究linux技术以适应这个时代。

Linux文件系统架构和共享文件方法-LMLPHP

Linux文件系统的架构

正如大家已经看到的,Linux目录结构的组织形式和Windows有很大的不同。首先Linux没有“盘符”的概念,也就是说Linux系统不存在所谓的C盘、D盘等。已建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来实现磁盘读写。其次,Linux不存在像Windows\这样的系统目录。

在安装完成后,就有一堆目录出现在根目录下,并且看起来每一个目录中都存放着系统文件。最后一个小小的区别是,Linux使用正斜杠“/”而不是反斜杠“\”来标识目录。

既然Linux将文件系统挂载到目录下,那么究竟是先有文件系统还是先有目录?正确的说法是,Linux需要首先建立一个根“/”文件系统,并在这个文件系统中建立一系列空目录,然后将其他硬盘分区(如果有的话)中的文件系统挂载到这些目录中。

理论上说,可以为根目录下的每一个目录都单独划分一个硬盘分区,这样根分区的容量就可以设置得很小(因为几乎所有的东西都存放在其他分区中,根分区中的目录只是起到了“映射”的作用),不过这对于普通用户而言没有太大必要。

如果某些目录没有特定的硬盘分区与其挂钩的话,该目录中的所有内容将存放在根分区中。

那究竟什么是文件系统?这个问题将在后面的帖子详细讨论。这里大家只要简单地把它理解为“磁盘”或者“分区”的同义词就可以了。

要理解Linux的文件系统架构,看来的确需要耗费一定的脑力。如果经过努力仍然不明白上面这些文字在说些什么,一个好的建议是:不要管那么多,先使用。没有人会为了使用机床而首先去学习PLC原理,但一个接触了几年机床的人总能对PLC是什么这个问题说上几句。所以无论如何,首先去实践。

下面列出了文件系统中主要目录的内容。 

/bin      构建最小系统所需要的命令(最常用的命令) 
/boot      内核与启动文件 
/dev      各种设备文件 
/etc      系统软件的启动和配置文件 
/home      用户的主目录 
/lib      C编译器的库 
/media      可移动介质的安装点 
/opt      可选的应用软件包(很少使用) 
/proc      进程的映像 
/root      超级用户root的主目录 
/sbin      和系统操作有关的命令 
/tmp      临时文件存放点 
/usr      非系统的程序和命令 
/var      系统专用的数据和配置文件 


和你的伙伴共享文件 

大家是否一直在困惑一个事情,总是听说在很久以前,很多很早用上linux服务器的国外高校通过在学校架设linux服务器来共享一些课程的文件,大家能通过这种共享来协作完成一个大的程序或其他工作。那这是怎么做到的呢?我们来看一下。

共享文件对一个团队而言非常重要。团队的成员常常需要在一台服务器上共同完成一项任务(如开发一套应用软件)。下面介绍如何实现用户间文件的共享。假设这个团队的成员在服务器上的用户名分别是hangzhou、quzhou、ningbo和shaoxing, 它们都属于workgroup这个用户组,可以用以下的命令模拟这个场景。 

##新建一个名为workgroup的用户组 
$ sudo groupadd workgroup 

##新建用户, 并归入workgroup组 
$ sudo useradd -G workgroup hangzhou 
$ sudo passwd hangzhou        ##为用户hangzhou设置登录密码 

$ sudo useradd -G workgroup quzhou 
$ sudo passwd quzhou       ##为用户quzhou设置登录密码 

$ sudo useradd -G workgroup ningbo 
$ sudo passwd ningbo        ##为用户ningbo设置登录密码 

$ sudo useradd -G workgroup shaoxing 
$ sudo passwd shaoxing       ##为用户shaoxing设置登录密码 

提示:如果大家对如何协作开发大型程序感兴趣的话,可以使用版本控制系统。 

接下来,我们继续说前面的事情,然后在/home目录下建立一个名为work的目录,作为这个小组的工作目录,注意需要root权限。

$ cd /home         ##切换到/home目录

$ sudo mkdir work      ##建立一个名为work的目录
  

现在,任何人都可以访问这个新建的目录,而只有root用户才拥有该目录的写权限。现在希望让workgroup组的成员拥有这个目录的读写权限,并禁止其他无关的用户查看这个目录。
  

$ sudo chgrp workgroup work/      ##将work目录所有权交给workgroup组

$ sudo chmod g+rwx work/  ##增加workroup组对work目录的读、写、执行权限

$ sudo chmod o-rwx work/        ##撤销其他用户对work目录的读、写、执行权限
   

接下来需要将这个目录交给一个组长quzhou(现在work目录的所有者还是root用户)

$ sudo chown quzhou work/           ##将work目录所有者更改为quzhou用户

现在,所有属于这个组的成员都可以访问并修改这个目录中的内容了,而其他未经授权的用户(除了root)则无法看到其中的内容。

举例来说,quzhou在/home/work目录下新建了一个名为test的空文件,那么同属一个组的用户shaoxing如果认为这个文件没有必要,可以有权限删除它。
 

$ su quzhou        ##切换到用户quzhou

$ cd /home/work/

$ touch test        ##/建立一个空文件test

$ su shaoxing  ##切换到用户shaoxing

$ cd /home/work/

$ rm test           ##删除test文件
 

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

07-03 10:09