- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解Linux系统中的文件名和文件种类以及文件权限由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Linux文件种类与副文件名 。
一直强调一个概念,那就是:任何装置在Linux底下都是文件, 不仅如此,连资料沟通的介面也有专属的文件在负责~所以,你会瞭解到,Linux的文件种类真的很多~ 除了前面提到的一般文件(-)与目录文件(d)之外,还有哪些种类的文件呢?
* 文件种类:
我们在刚刚提到使用‘ls -l’观察到第一栏那十个字元中,第一个字元为文件的类型。 除了常见的一般文件(-)与目录文件(d)之外,还有哪些种类的文件类型呢?
* 正规文件(regular file ): 就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字元为 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:
o 纯文字文件(ASCII):这是Linux系统中最多的一种文件类型啰, 称为纯文字文件是因为内容为我们人类可以直接读到的资料,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达‘ cat ~/.bashrc ’就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令) 。
o 二进位文件(binary):还记得我们在‘ 第零章、计算机概论 ’里面的软体程式的运作中提过, 我们的系统其实仅认识且可以执行二进位文件(binary file)吧?没错~ 你的Linux当中的可执行文件(scripts, 文字型批次文件不算)就是这种格式的啦~ 举例来说,刚刚下达的指令cat就是一个binary file.
o 资料格式文件(data): 有些程式在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为资料文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的资料记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码~因为他是属于一种特殊格式的文件。瞭乎?
* 目录(directory): 就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx].
* 连结文件(link): 就是类似Windows系统底下的捷径啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ; 。
* 设备与装置文件(device): 与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
o 区块(block)设备文件 :就是一些储存资料, 以提供系统随机存取的周边设备,举例来说,硬碟与软碟等就是啦! 你可以随机的在硬碟的不同区块读写,这种装置就是区块装置啰!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔! 。
o 字元(character)设备文件:亦即是一些序列埠的周边设备, 例如键盘、滑鼠等等!这些设备的特色就是‘一次性读取’的,不能够截断输出。 举例来说,你不可能让滑鼠‘跳到’另一个画面,而是‘滑动’到另一个地方啊!第一个属性为 [ c ].
* 资料接口文件(sockets): 既然被称为资料接口文件, 想当然尔,这种类型的文件通常被用在网路上的资料承接了。我们可以启动一个程式来监听用户端的要求, 而用户端就可以透过这个socket来进行资料的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了.
* 资料输送文件(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] .
除了设备文件是我们系统中很重要的文件,最好不要随意修改之外(通常他也不会让你修改的啦!), 另一个比较有趣的文件就是连结文件。如果你常常将应用程式捉到桌面来的话,你就应该知道在 Windows底下有所谓的‘捷径’。同样的,你可以将 linux下的连结文件简单的视为一个文件或目录的捷径。 至于socket与FIFO文件比较难理解,因为这两个咚咚与程序(process)比较有关系, 这个等到未来你瞭解process之后,再回来查阅吧!此外, 你也可以透过man fifo及man socket来查阅系统上的说明! 。
* Linux文件副文件名:
基本上,Linux的文件是没有所谓的‘副文件名’的,我们刚刚就谈过,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。这个观念跟Windows的情况不相同喔!在Windows底下, 能被执行的文件副文件名通常是 .com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行喔! 。
不过,可以被执行跟可以执行成功是不一样的~举例来说,在root家目录下的install.log 是一个纯文字文件,如果经由修改权限成为 -rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行~因为他的内容根本就没有可以执行的资料。所以说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容啰~ 。
虽然如此,不过我们仍然希望可以藉由副文件名来瞭解该文件是什么东西,所以, 通常我们还是会以适当的副文件名来表示该文件是什么种类的。底下有数种常用的副文件名:
* *.sh : 批次文件( scripts ),因为批次文件为使用shell写成的,所以副文件名就编成 .sh 啰; 。
* *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软体分别为 gunzip, tar 等等的,由于不同的压缩软体,而取其相关的副文件名啰! 。
* *.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢! 。
基本上,Linux系统上的文件名真的只是让你瞭解该文件可能的用途而已, 真正的执行与否仍然需要权限的规范才行!例如虽然有一个文件为可执行文件, 如常见的/bin/ls这个显示文件属性的指令,不过,如果这个文件的权限被修改成无法执行时, 那么ls就变成不能执行啰! 。
上述的这种问题最常发生在文件传送的过程中。例如你在网路上下载一个可执行文件,但是偏偏在你的 Linux系统中就是无法执行!呵呵!那么就是可能文件的属性被改变了!不要怀疑,从网路上传送到你的 Linux系统中,文件的属性与权限确实是会被改变的喔! 。
* Linux文件长度限制:
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的文件名长度限制为:
* 单一文件或目录的最大容许文件名为 255 个字元; * 包含完整路径名称及目录 (/) 之完整文件名为 4096 个字元.
是相当长的文件名喔!我们希望Linux的文件名称可以一看就知道该文件在干嘛的, 所以文件名通常是很长很长!而用惯了Windows的人可能会受不了,因为文件名称通常真的都很长, 对于用惯Windows而导致打字速度不快的朋友来说,嗯!真的是很困扰.....不过,只得劝你好好的加强打字的训练啰! 。
* Linux文件名称的限制:
由于Linux在文字介面下的一些指令操作关系,一般来说,你在设定Linux底下的文件名称时, 最好可以避免一些特殊字元比较好!例如底下这些:
* ? > < ; & ! [ ] | \ ' " ` ( ) { } 。
因为这些符号在文字介面下,是有特殊意义的!另外,文件名称的开头为小数点‘.’时, 代表这个文件为‘隐藏文件’喔!同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将文件文件名的开头以 - 或 + 来命名啊! 。
目录与文件权限 现在我们知道了Linux系统内文件的三种身份(拥有者、群组与其他人),知道每种身份都有三种权限(rwx), 已知道能够使用chown, chgrp, chmod去修改这些权限与属性,当然,利用ls -l去观察文件也没问题。 前两小节也谈到了这些文件权限对于资料安全的重要性。那么,这些文件权限对于一般文件与目录文件有何不同呢? 有大大的不同啊!底下就让鸟哥来说清楚,讲明白! 。
* 权限对文件的重要性 。
文件是实际含有资料的地方,包括一般文字文件、资料库内容文件、二进位可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
* r (read):可读取此一文件的实际内容,如读取文字文件的文字内容等; * w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件); * x (eXecute):该文件具有可以被系统执行的权限.
那个可读(r)代表读取文件内容是还好瞭解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows底下一个文件是否具有执行的能力是藉由‘ 副文件名 ’来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有‘x’这个权限来决定的!跟文件名是没有绝对的关系的! 。
至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对‘文件的内容’而言,与文件文件名的存在与否没有关系喔!因为文件记录的是实际的资料嘛! 。
* 权限对目录的重要性 。
文件是存放实际资料的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名清单,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
* r (read contents in directory):
表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名资料。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来! 。
* w (modify contents of directory):
这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有移动该目录结构清单的权限,也就是底下这些权限:
o 建立新的文件与目录; o 删除已经存在的文件与目录(不论该文件的权限为何!) o 将已存在的文件或目录进行更名; o 搬移该目录内的文件、目录位置.
总之,目录的w权限就与该目录底下的文件名移动有关就对了啦! 。
* x (access directory):
咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是‘cd’(change directory)啰! 。
目录的x权限决定用户是否可以进入该目录.
大致的目录权限概念是这样,底下我们来看几个范例,让你瞭解一下啥是目录的权限啰! 。
例题: 有个目录的权限如下所示: 。
。
上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限.
很多朋友在架设网站的时候都会卡在一些权限的设定上,他们开放目录资料给网际网路的任何人来浏览, 却只开放r的权限,如上面的范例所示那样,那样的结果就是导致网站伺服器软体无法到该目录下读取文件(最多只能看到文件名), 最终用户总是无法正确的查阅到文件的内容(显示权限不足啊!)。要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给! 为什么w不能随便给,我们来看下一个例子:
例题: 假设有个帐号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为the_root.data的文件,该文件的权限如下: 。
。
但是由于这个文件在他的家目录下,他在此目录下具有rwx的完整权限,因此对于the_root.data这个‘文件名’来说,他是能够‘删除’的!结论就是,dmtsai这个用户能够删除the_root.data这个文件! 。
还是看不太懂?有听没有懂喔!没关系~我们底下就来设计一个练习, 让你实际玩玩看,应该就能够比较近入状况啦!不过,由于很多指令我们还没有教, 所以底下的指令有的先瞭解即可,详细的指令用法我们会在后面继续介绍的.
* 先用root的身份建立所需要的文件与目录环境 。
我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录, 该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空的文件, 文件名亦为testing。建立目录可用mkdir(make directory),建立空文件可用touch(下一章会说明)来处理。 所以过程如下所示: 。
。
* 一般用户的读写权限为何?观察中 。
在上面的例子中,虽然目录是744的权限设定,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥事呢?假设鸟哥的系统中含有一个帐号名为 vbird 的, 我们可以透过‘ su - vbird ’这个指令来变换身份喔!看看底下的操作先! 。
最后此篇关于详解Linux系统中的文件名和文件种类以及文件权限的文章就讲到这里了,如果你想了解更多关于详解Linux系统中的文件名和文件种类以及文件权限的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
Android 权限(您在 list 中请求并在安装时显示的权限)是否与 root 用户在 root 手机上获得的 linux 权限相同? 更确切地说:如果我的手机上有 root 权限并且我有一个可以
我经常读到 VIEW 的一个目的是安全性:允许一些用户访问基础表,而其他用户只允许访问派生 View 。考虑到这一点,我设计了几个向外部用户提供受限数据集的 View 。 一切都很好,但在实践中这是行
在 Facebook API v2.3 中,“user_posts”听起来像是“user_status”的超集。是这样吗?如果我已经有“user_posts”,为什么还需要“user_status”?
在为 BLUETOOTH_CONNECT 请求运行时权限后,android 12 崩溃了,我在 Samsung Android 12 设备中遇到了这个问题。在其他低于 Android 12 的设备上运
请理解这个问题可能有点头晕,因为这是我第一次提问。另外,请理解语法可能很奇怪,因为我不擅长英语并使用翻译。 我是一个在 Android 工作室中使用 java 制作应用程序的人。 尝试使用蓝牙时出现连
我刚刚将我的 Magento 商店从 cPanel 移动到 DirectAdmin (Centos)。 我的问题现在是权限。以前在 cPanel 上,所有文件夹都设置为 755 和文件 644。这很好
我希望在我的 Django 项目中获得更细粒度的权限,但无法决定使用哪个应用程序。 我所拥有的是这样的: class Item(models.Model): name = models.Cha
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我们已经设置了一个 Github 应用程序,以便它使用 Github API 自动为另一个个人 Github 用户创建一个存储库。现在我们遇到了一个问题,不是每个人都想让我们完全读取他们所有的私有(p
假设我有一个网站想要访问 Facebook 的用户帐户信息。通常,用户会获得网站要求的所有权限,并且可以整体上允许或拒绝这些权限。 是否可以让用户选择(例如,通过授权屏幕上每个权限的复选框)他想授予网
平台下载地址:https://gitee.com/alwaysinsist/edp 权限介绍 权限实际上就是谁有权使用或是访问什么,这里的“谁”可以视作"授权对象",&qu
playstore 给我发这个消息 We've detected that your app contains the requestLegacyExternalStorage flag in the
我可以在没有 sudo 的情况下运行 docker,但有时它会再次请求权限,我无法在 VS 代码中附加容器 Got permission denied while trying to connect
我正在尝试在 Ubuntu 中的可执行文件上运行 gdb。但是,当我尝试在 gdb 中运行 run 时,出现以下错误。 /vagrant/unit_test: cannot execute: Perm
我的应用程序工作了一年,然后对 instagram 的 API 调用停止返回任何数据。 我使用以下 instagram 端点: https://api.instagram.com/v1/media/s
我使用 TFS 2012 并希望为 TFS 用户组设置以下权限。 允许创建新问题项。 拒绝创建新的任务项。 拒绝更改他的任务项,只能更改提醒时间、描述和状态。并且不能更改分配的用户、优先级和迭代。 我
我有一个谷歌计算引擎实例,我使用与我的 glcoud 帐户关联的 SSH key 通过 SFTP 连接到该实例。但是,我无法将任何文件上传到/var/www 目录,尽管我可以读取目录列表。/var/w
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我不确定如何正确处理以下情况: 我的程序通过安装程序安装 我在应用程序文件夹中创建SQLite数据库(程序启动时) 在某些配置中,我收到“ Attemt写入只读数据库”错误。这是权限问题,现在我通过将
我是一名优秀的程序员,十分优秀!