深圳制作网站主页,设计网页英语,网页设计教程电影,打广告推广怎么做基于centos了解Linux文件结构
了解一下文件类型
Linux采用的一切皆文件的思想#xff0c;将硬件设备、软件等所有数据信息都以文件的形式呈现在用户面前#xff0c;这就使得我们对计算机的管理更加方便。所以本篇文章会对Linux操作系统的文件结构和文件权限进行讲解。
首先…基于centos了解Linux文件结构
了解一下文件类型
Linux采用的一切皆文件的思想将硬件设备、软件等所有数据信息都以文件的形式呈现在用户面前这就使得我们对计算机的管理更加方便。所以本篇文章会对Linux操作系统的文件结构和文件权限进行讲解。
首先我们键入到达~目录 cd ~ 然后键入ll查看所有非隐藏文件,可以看到在每个文件最前方都有一个由10个字符构成的字符串就以第一行为例-rw-------.可以看到第一行的10字符的第一个字符是-在Linux操作系统中这个符号就代表着文件是一般文件也就是我们日常配置、文本文件等这类文件。 除了一般文件以外每个文件第一栏的第一个字符还可能出现以下几种情况:
d:代表当前文件为文件夹l:代表当前文件为超连接文件b:该文件提供为提供给系统存取的设备例如你计算机的硬盘所存储的数据内容可能都会保存在这个类型文件中c:代表着连接到你计算机的一些硬件设备例如鼠标、键盘等配置文件开头都是以c开头的
为了验证这一点我们随意创建一个文件夹:
mkdir /tmp/dir
然后使用ll命令查看其文件属性:
ll /tmp/
可以看到我们创建的文件夹是以d打头的 上文还提到了一个b打头的文件这个文件是提供系统存储的数据且可能硬盘也可能是其他存储设备的这类型文件一般都在设备目录dev下我们可以进入dev目录看到这些文件:
ll /dev/sda而c打头的文件则是硬件设备我们不妨键入 ll /dev查看一下如下图所示的BUS总线以及CPU等这些都是硬件设备: 同样的在上文中我们也有提到关于隐藏文件的概念在Linux中隐藏文件大多以.开头这些文件使用常规的ll、ls等命令是看不到的必须使用al选项查看所有文件才能看到(补充一句a的意思就是all):
ls -al查看于是在当前目录的所有文件列表下我们看到了隐藏目录: 文件名的限制
在现如今的Linux文件系统基本采取XFS所以文件名长度限制基本是255byte以内说通俗一点你的文件要是以英文命名就可以起一个长度为255的文件名若为汉字则长度大约是127。注意由于Linux命令中常会用到-以及一些特殊符号所以文件命名应该尽量避免以下几个特殊符号:
* ? ; ! [ ] | \ ( ) { } -树形目录结构
Linux的文件结构总的来说类似于一棵树用户可以按照规范约定在相应的文件夹下存储文件就例如在var目录下可以存储一些与系统的运作有关的文件例如程序日志文件、在tmp目录下存储一些临时文件等。 需要了解的是无论是何种Linux系统他的目录都会遵循一个标准包括下图中的文件结构而这个标准名为Filesystem Hierarchy Standard (FHS)。 FHS规定文件的整体结构应该是这样的
1. /:根目录与开机系统有关
2. /usr(unix software resource):与软件的安装和执行有关
3. /var(variable):与系统的运作有关首先介绍一个根目录/它的子节点文件基本都是和系统开机相关、各种程序、库函数的文件夹所以在根目录这一级是非常重要的所以FHS希望后续使用Linux的时候尽量不要将用户的文件夹或者文件存储到这一层级以避免误操作到重要文件导致系统崩溃。 根目录下有个bin文件夹我们日常使用Linux的时候都会用到ls、cat、touch、mkdir等基本操作命令都存放于bin目录下: 接下来是/boot这个目录存放的基本都是Linux开机会用到配置文件像Linux kerner常用到的文件名 vmlinuz就会存放在这个文件夹下 接下来是/dev这个文件夹基本存放的都是硬件设备我们都知道Linux主张一切皆文件所以所有的鼠标、键盘、硬盘的设备信息都是存放在这个文件夹下 /etc目录则是存放配置文件的地方常见我们的用户文件/etc/passwd以及密码文件/etc/shadow还有系统文件/etc/rc等都会存放在这个目录下。 除此之根目录下还有一些文件夹如下所示这里就不一一介绍了
mnt存放挂载相关。lib存放库函数相关、sbin存放开机、系统还原、修复等众多指令。tmp存储临时文件习惯。
我们再来聊聊FHS规范中一个命名比较特殊导致用户使用时常受到误导的文件夹/usr很多人最初都会误以为这是user的缩写其实这个单词是unix software resource的缩写这个文件夹是FHS规定存放软件资源相关的文件夹他们建议用户软件相关的资源尽可能都放到这个目录。
首先来看看/usr/bin目录这个目录实质上就FHS希望用户能够将一般用户所能够的使用的指令都放到这个目录下所以我们在日常软件安装时对应各种启动指令脚本都建议存放到这个位置。此外usr的bin目录下还存放了系统指令的软连接参见下图: 除此之外usr下还有3个常见的目录: 1./usr/lib与根目录的lib功能相同存放的基本是lib目录下的软链接。 2. /usr/local/则是FHS希望用户将下载的软件都放到这个目录下统一管理 3. /usr/sbin同样也是将根目录的sbin目录下的指令软链接到此。
最后我们再来介绍一些/var这个目录FHS认为应该存放那些经常发生变化的文件例如日志他们希望日志统一存放到/var/log下。/var/lib存放的则是会临时改变的库文件。而/var/lock存放的则是被某个程序锁定的文件已确保其他程序不会同时使用到这个文件。 绝对路径和相对路径
绝对路径则是以根节点作为其实节点的文件搜寻办法例如我们想到达tmp文件夹如果使用绝对路径的方式则是
cd /tmp假如我们在boot目录下而tmp和他一样都属root的子节点所以使用相对路径的方式是先退到root目录然后再进入tmp文件夹如下图所以在boot目录下我们进入tmp文件夹的命令为 cd ../tmp/: 演示结果参见下图:
注意:../代表着退到上一级那么就会有这么一个指令./代表当前目录这个指令是干什么用的是很简单假如我们Linux中某个sh文件不在bin、sbin、/usr/bin这样的目录下Linux规定我们执行可执行sh文件文件时都必须标明./例如我在tmp目录下有个执行脚本test,那么我在test目录下执行这个脚本的格式就必须是
sh ./test.sh文件权限
权限对应角色
我们在随意一个目录下键入ll查看文件信息如下图我们可以看到每个文件的第一栏除去第一个字符串代表着文件类型外其余字符都会显示rwx-相关其含义为:
r代表读权限。w代表写权限。x代表执行权限。 我们以dir的文件描述为例第一个字符d代表它是个文件夹2-4代表当前所有者权限为读写执行都有而5-7代表所属组权限即这个文件所属的组所拥有的权限为读和执行最后一行代表其他人的权限也是读和执行。
d rwx r-x r-x.针对dir文件夹可以看到第3列为root说明这个文件属于root的root用户拥有这个文件夹的读写执行权限。而第4列也为root说明属于root组的用户拥有读写执行的权限。
假如此时有个名为xiaoming的用户进来它属于xiaomingzu那么对于这个dir文件夹而言他就是other用户那么它的权限只有读和执行。
文件夹与文件对应权限的相似与区别
在Linux系统下文件系统下文件的可执行权限和文件夹的可执行权限是有所不同的。假如一个用户对文件夹只有读和写权限那么他就无法进入到这个目录如下所示我们有root创建一个testDir所以对于其他用户来说只有读和写权限。 注意一下笔者赋权的命令这里我们需要了解一下Linux中读权限用4表示写权限用2表示执行用1表示所以766为(421)(42)(42)代表着所属者读写执行所属组和其他都是读和执行:
# 进入tmp目录cd /tmp/# 创建testDir文件夹
mkdir testDir# 设置这个文件夹 所属者有所有权限 所属组和其他用户只有读和写权限
chmod 766 testDir/当笔者以其他用户登录(这个用户不是所属者root也不属于root组)时就会报出没有权限的问题 这时候我们希望其他用户可以有执行的权限要怎么做呢很简单我们也可以参考上面的数学公司对其他用户增加执行权限
chmod 777 /test/testDir
当然我们也可以单独对其他用户增加一个可执行权限命令如下所示可以看到其他为o,增加一个可执行权限为x。同理可知若是所者为u所属组为g。增加权限用减去权限用-赋值权限用
其他用户对于testDir文件夹的操作增加执行权限
chmod ox testDir/
所以我们若希望所属者赋值为所有权限则是urwx所属组和其他都希望是读和执行那就是g和o合在一起写并rx如下所示 chmod urwx,gorx testDir/当然有时候你希望这个文件改变所属组你可以使用chgrp 指令如下所示这样意义文件夹所属组就改为otheruser
# 将文件夹testDir所属组改为otheruser
chgrp otherusertestDir/
同理若你希望改变所有者则可以使用chown :
chown otherusertestDir testDir/
当然若你希望所有者和所属组都能改变则可以:
# 将testDir所有者改为冒号左边的root将所属组改为冒号右边的root
chown root:root testDir/回到问题为了方便演示文件和文件夹可执行权限的区别我们将文件夹所属者和所属者都改为root并且所有用户都具备所有权限
chmod 777 testDir/
chown root:root testDir/然后进去该文件夹创建一个file1的文件权限设置为700即所属者才有权限所属组和其他没有任何权限
cd testDir/touch file1chmod 700 file1
使用ll -d查看testDir文件夹以及文件夹下对应的文件file1的权限可以发现对于其他用户而言文件夹有所有的权限而文件没有任何权限
ll -d /tmp/testDir/ /tmp/testDir/file1 所以我们使用别的账户可以进入路径但是无法读写该文件如下图 vim file1但是以为其他用户拥有file文件的目录testDir的执行权限所以它可以将这个文件删除。所以得出结论文件夹的可执行权限意为着可以删除这个文件夹下所有的文件但是并不意味着可以修改或者读取文件夹下文件的内容。
这种情况我们完全可以将文件夹testDir看作一个抽屉任何人对其都有任何权限。此时root往里面放了一个小保险盒读写权限只有root有。所以其他用户是无法打开或者修改盒子中的内容。但是他具有抽屉(testDir)的所有权限所以他可以将这个保险盒扔掉。 以下这张表格就说明了操作文件夹下某些文件所需的最低权限可以看到像删除、复制等这些无需读取文件内容的操作文件所对应的文件夹甚至不一定需要rw的权限。用上面抽屉和文件的例子来说我们删除完完全全可以看不到抽屉内部文件的具体的内容复制文件不需要知道文件夹内有什么文件我们完完全全可以瞎摸出来放到别的目录。
umask设置默认权限
默认情况下用户创建的文件权限为:rw-rw-rw-对应的数字为666而文件夹则是:rwxrwxrwx对应数字是777。那是什么原因导致我们最后创建出来的文件权限变成rw-r--r--(644)以及文件夹变成rwxr-xr-x(755)呢
答案就是umaskumask和默认权限进行取反和按位与运算从而得出文件和文件夹创建的实际文件。 先来演算一下文件的权限运算加入我们创建一个文件file
touch file可以看到它的权限为0644(因为权限位最前面是-说明是一般文件可直接视为0)
-rw-r--r-- 1 root root 0 Dec 6 14:39 file
以上文所说默认是0666然后和0022进行取反按位与运算所以我们首先对0022进行取反得到7755 然后和0666进行按位与运算最终得出文件默认权限为rw-r--r--文件夹同理这里就不多做演示: 775506660644上述运算属于标准的推算步骤对于取反按位与这种运算读者可直接视为减法例如文件默认权限为0666而umask为0022两者直接相减即可直接得到0644。
如果我们希望文件权限保持最原始的权限那么我们可以将umask改为0000
umask 0000创建的文件权限就是 666创建的文件夹就是 777。
参考文献
鸟哥的Linux私房菜:https://book.douban.com/subject/4889838/
循序渐进Linux第2版:https://book.douban.com/subject/26758194/