在使用Linux的过程中,我们或多或少会遇到一些关于用户和组的问题,比如你想执行某个路径的指令时最常见的错误提示。
权限被拒绝无论如何,我在使用FTP传输文件时,有很大概率会看到这个错误。等了很久,转账比例还是为零。我说,网络这么慢?你为什么不传送它?其实我也不知道,这是因为权限的问题。
我一般的修复方法是直接给777权限,或者直接用苏管理员登录。。。。。。
你可能不知道我在说什么,有些老板可能觉得我的方式太低级了。反正你遇到这种问题,说明你权限不够。为什么?现在我们需要了解Linux中的用户和组。
使用者和群组在Linux中,文件所有者分为三类,即文件所有者、组和其他。这里分别解释以下三个概念。
文件所有者Linux是一个多用户多任务系统。多用户是指某些用户创建的文件是否对其他用户可见。这是一个可见性问题,也是一个隐私问题。为了考虑到每个人的隐私,Linux设计了文件所有者的角色。如果你有一些私密性高的资料和文件,可以把文件设置为 # 8220;只有我能看到 # 8221;这是文件所有者的角色。
群组团队开发中用到了组的概念,给项目设置权限更有用。比如你在一家银行的外包部门工作,你和其他外包部门共同为一家银行服务,所有外包组使用一个服务器,这就涉及到组权限的问题。如果你外包部门开发的项目不希望被其他外包部门看到,就设置为一个组。但是银行是管的,所有银行都有权查看你所有的外包项目,所以你需要设置银行的权限。
其他人所属有的是相对于群的,有的是群外的,无权查看群内的文档。
除了以上三个概念,还有一个boss的权限级别最高,就是root,这个root权限最高。
Linux 文件权限上面讲了用户和组的概念之后,我们来讲一下如何设置文件权限。这个内容非常重要,因为它是解决权限被拒绝问题的关键。
权限属性首先登录Linux系统,使用su # 8211您可以切换到root,然后执行ls -al,您将看到以下内容。
有七列,如下图所示。
学习时可以直接使用root,因为后续的chgrp、chown等指令都需要root来处理,但强烈建议工作时不要使用root权限。
使用exit退出根身份。
在上面的指令中,ls表示列表,即list,而选项-al表示文件详细的权限和属性。
权限,第一列表示的是权限,权限一共通过 10 个字符来表示,我们拿 home 权限为例,来列举各个字符表示的含义第一个字符表示文件类型。有许多文件类型。通常,[d]表示目录,可以通过cd命令访问。你可以看到几乎所有的图片都是目录。
如果是[-],表示文件;如果是[l],表示链接文件;如果是[b],表示设备文件中的随机存取设备;如果是[c],则表示设备文件中的一次性读取设备(键盘、鼠标)。
接下来的九个字符分为三组,分别代表所有者、所属的组以及其他所有者的权限。每个组中的权限是三个rwx的组合,[r]表示可读,[w]表示可写,[x]表示可执行。这里需要注意的是,如果没有权限,就会变成-sign。
链接,这一列表示有多少文件名链接到这个节点(i-node)上,每个文件都会将它的权限和属性记录到文件系统的 i-node 上,不过,我们使用的目录树却是使用文件名来记录的,因此每个文件名都会关联到一个 i-node ,所以这个属性就是记录有多少文件链接到了同一个 i-node 上。什么是i-node?
i-node的描述和我们之前讲的Socket很像。Socket是四元组,有时候协议类型改成五元组。如果你不确定我在说什么,你可以看看我的文章。这是插座!
我们知道,磁盘的最小存储单位是扇区。操作系统在读取扇区时,不会一个扇区接一个扇区读取,因为效率太低,而是以块为单位读取,这些块由多个扇区组成。
文件中的数据都是按扇区存储的,但我们不知道需要哪一块数据。为了存储文件的一些元信息,如文件的创建者、创建日期、文件大小等,开发人员提出了i-node,即索引节点。一般来说,i-node有以下内容。
i-node的具体内容我们后面再说。
然后第三列表示这个文件的所属人,由图可见,大部分文件的所属人都是 root 用户。第四列表示这个文件的所属群组,在 Linux 系统下,你登录的账号会添加到一个或者多个所有人群组中,这一栏就表示对应的群组权限。第五列表示文件大小,默认单位为字节(Bytes)。第六列为创建这个文件的日期和最近修改日期,从图中可以看到,这个日期格式有可能不是我们想要的,如果要显示完整的日期格式,可以使用 ls -l #8211;full-time,包括年、月、日、时间。如果想把系统默认的语系改成英文,可以修改系统配置文件/etc/locale.conf,首先我们可以检查一下系统支持哪些语言。
修改默认语言,输入
Vi /etc/profile输入在文档的末尾。
Export LANG="en_US。UTF-8”可以转换成英文。如果想用中文,可以进入。
导出LANG="zh_CN。GB18030”然后用esc+:wq保存,保存后使用。
Source /etc/profile可以完成设置。
第七列为文件名,有一类特殊的文件名,它表示着隐藏文件,如果文件名之前多一个 . ,那就表示隐藏文件。权限的重要性提供系统保护:非权限用户不能操作具有某些权限的功能和数据。适合团队开发和数据共享:团队所有组成员和个人所属能够共享项目。如果系统权限设置不当,可能会造成一些泄密或者其他不可忽视的后果,所以大家要注意权限问题。先说如何设置系统权限。
改变系统权限和属性现在我们已经知道了文件权限对系统安全性的重要性,我们将讨论如何修改文件权限。修改文件权限的常用说明有
chgrp :改变文件所属群组chown:改变文件所有者chmod:改变文件权限chgrpChgrp是变更组的缩写。我觉得Linus把缩写用到了极致,这可能是我们现在这么流行缩写的原因。Chgrp可以更改文件组,但是要更改组,要更改的组的名称必须存在于/etc/group文件中,否则会显示错误。
chown由于chgrp可以更改文件组,因此chown可以更改文件所有者。还需要注意的是,文件所有者必须是系统中已存在的帐户,即可以更改文件/etc/passwd中记录的用户名。此外,chown可以直接修改组名。
chmod命令chmod用于更改文件权限。但是,有两种方法可以设置权限。您可以分别使用数字或符号来更改权限。
使用数字改变文件权限Linux文件有九种基本权限,即所有者/组/其他人加上他们自己的读/写/执行权限。这九个权限分为三组,我们可以用数字来表示每个权限。
一般r代表4;w代表2;x代表1,每个身份的权限需要累加。比如rwx代表4+2+1 = 7。比如我们最常见的文件chmod 777,意思是授予所有权限,即任何人都可以读/写/执行,所以这个文件也有很大的安全问题。使用数字更改文件权限是最常用的方法之一。
使用符号改变文件权限九个文件权限对应:(1)用户(2)组(3)其他,所以我们可以用U,G,O来表示三个身份的权限。另外,a代表所有,也就是所有的身份。
例如,如果我们想为-rwxr-xr-x设置权限,那么我们使用的命令应该是
Chmod u=rwx,go=rx。如果我们想增加每个人的写权限,我们可以这样做。
Chmod a+w .filename如果我们想删除所有人的写权限,我们可以这样写指令。
Chmod a-w。filename上面我们已经列出了三种指令,分别是=、+和-符号,其中=表示指定权限的赋值,+表示添加权限,-表示删除部分权限,而在+和 # 8211;,只要没有找到命令项,权限就不会改变。
Linux 目录和文件权限上面说的是文件权限。文件是保存数据的地方。这些文件包括一般文本文件、数据库文件、二进制文件等。权限对文件的意义在于
r(read):可以读取文件的实际内容,比如读取文本文件的文字内容w(write):可以新增、编辑或者修改文件中的内容(不包括删除文件)x(execute):使文件具有被文件系统执行的权限。在Windows下,判断一个文件是否可以执行的因素是看文件扩展名,比如。exe,。蝙蝠,。com等。但是在Linux中,判断一个文件是否有可执行权限,就是直接判断这个文件是否有X的权限,和文件名无关。
但是在Linux中,不仅文件有权限,目录也有权限。文件是存储实际数据的地方,目录是文件所在的列表。只有通过目录才能找到文件放在哪里!权限也代表不同目录的不同概念。
r (read contents in directory):表示具有读取目录结构清单的权限,所以如果你具有读取一个目录的权限时,就代表你可以查询目录下的文件,所以你就可以使用 ls 将目录的内容显示出来。w(modify contents of directory):写入权限表示你具有对文件目录和目录中的文件进行修改的操作,主要包括删除已经存在的文件和目录。创建新的文件和目录。将已存在的文件或目录进行改名。移动目录内文件、目录位置。x(access directory):这执行权限有啥用?总不能目录也能够被执行把?其实并不是这样,执行权限表示着你有没有权限进入到指定目录下,也就是 cd(change directory) 。Linux 文件种类和扩展名想必大家都听说过Linux下任何设备都是文件的说法,但是文件的种类有很多种,除了上面提到的通用文件(-)和目录文件(d)之外,还有以下几种文件类型。
常规文件(regular file):常规文件就是我们使用 ls -al 所显示出来的属性,也就是上面我们列出的第一个字符,文件类型可以分为
纯文本文件(ASCII),这是 Linux 系统中最多的一种文件类型,纯文本文件是我们能够直接看到的数据,你可以使用 cat 来直接看到这部分内容。比如我们最常用的设置 Linux 静态 ip 的文件 ens33 ,就可以使用 cat 命令来输出Cat ifcfg-ens33二进制文件,在Linux下,可以使用xxd或者od查看打印格式数据格式的二进制文件,Cat直接读取的数据文件会显示乱码,但是可以通过last指令输出目录。目录就没什么好说的了,就是文件的列表,目录的表示是[d],也就是目录。链接文件是在执行某些程序时,需要与这些链接文件相链接的一类文件。设备和设备文件。Linux下的设备分为两种:块设备和字符设备。块设备是可以存储固定大小的块信息的设备,它支持在固定大小的块、扇区或簇中读取和(可选地)写入数据。每个块都有自己的物理地址。通常,块大小为512 # 8211;65536之间。所有传输的信息将以连续块为单位。块设备的基本特点是每个块相对对立,可以独立读写。常见的块设备有硬盘、蓝光光盘、USB光盘。
块设备一般位于/dev/sda下,它的第一个属性是[b]。
另一种输入输出设备是字符设备。字符设备以字符为单位发送或接收字符流,而不考虑任何块结构。字符设备是不可寻址的,也没有查找操作。常见的字符设备有打印机、网络设备、鼠标以及大部分不同于磁盘的设备。
字符设备最大的特点是可以一次性读取,输出不能截断。比如你不能一键把鼠标跳到另一个地方,但是你可以流畅的移动。字符设备的第一个属性是[c]。
数据接口文件(sockets):数据接口文件顾名思义就是利用 socket 承接网络数据的,它的属性是 [s],一般在 /run 或者 /tmp 这些目录中看到。数据输送文件(FIFO,pipe):FIFO 也是一种特殊类型的文件,它的主要目的在于解决多个程序同时存取一个文件所造成的的错误问题,它的第一个属性为 [p]。Linux 扩展名说起这个延伸其实很头疼。Linux中没有扩展的概念,但是有一些扩展的命名方法,很尴尬,所以暂且成为一个扩展类型吧。一般来说,有以下几种类型
*.sh ,这是一个执行脚本或者批处理脚本,一般也被称为 shell 脚本,里面是一些 shell 语法写的指令。.tar,.tar.gz,.zip,*.tgz,这种扩展类型是打包的压缩文件,根据不同的打包方式有不同的扩展类型.html ,.php :网页相关文件,分别代表 HTML 和 PHP 语法的网页文件。