Ubuntu学习笔记(二)——文件属性与权限

文章目录

  • 前言
  • 一、用户与用户组
    • 1.用户(文件拥有者)
    • 2.用户组
    • 3.其他人
  • 二、Linux用户身份与用户组记录文件
      • 1. /etc/passwd
      • 2. /etc/shadow
      • 3. /etc/group
  • 三、文件属性与权限
    • 1. 查看文件属性的方法(ls)
    • 2.文件属性详细介绍
        • 2.1 权限
        • 2.2 链接
        • 2.3 文件(或目录)的拥有者
        • 2.4 文件(或目录)所属用户组
        • 2.5 文件的容量大小
        • 2.6 文件的创建日期或是最近的修改日期
        • 2.7 文件名
    • 3. 修改文件属性和权限
        • 3.1 修改文件所属用户组(chgrp)
        • 3.2 修改文件拥有者(chown)
        • 3.3 修改文件权限(chmod)


前言

前面介绍了Ubuntu系统的目录结构以及路径(相对路径和绝对路径),但是我们知道服务器的Ubuntu经常是多个人同时使用,因此在Ubuntu系统中同一个的文件相对于不同的用户往往有不同的权限。下面讲简单介绍一下Linux服务器的用户与用户组的概念,然后介绍文件的属性和权限。

一、用户与用户组

在Linux系统中,每个文件都有相当多的属性与权限,其中最重要的概念就是文件的拥有者了。在介绍文件的属性和权限之前,必须要介绍用户、用户组以及其他人的概念,因为文件的属性和权限就是相对于这三个身份的人来设置的。

1.用户(文件拥有者)

由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这台主机来进行工作的情况发生,为了考虑每个人的隐私以及每个人喜好的工作环境,因此文件拥有者的身份就相当重要了。
比如你有一些保密的文件,存储在你自己的家目录下。你不想让其他人看到文件的内容,这时你就可以设置只有文件拥有者才能看和修改这个文件的内容,那么其他人就无法查看文件的内容,因为权限不够。

2.用户组

可以想象成用户组的概念类似于你的家人一样,组内的其他人就是你的家人,你们可以同时生活在家中,比如共同使用客厅和厕所等等,然后呢,你自己的卧室家人也可以进来,但是如果你不想让除了自己的其他人进入你的卧室,你也可以给自己的卧室上锁,这样就只有你能进入,而其他人就进不来。用户组的概念还有就是区别于其他人,你可以将其他人想象成家人之外的人。

用户组最有用的功能之一就是当你在团队进行协同工作的时候。比如有两个团队a和b在使用同一台Linux服务器,a组中有组员1、2、3,b组中有组员4、5、6。两组处于竞争关系,上司命令两组都要完成一个项目文件,完成的差的将被裁员。在写项目文件的时候,由于组内人员是一个团队,因此必须要组内人员都能查看并且修改项目文件,但是不能让另一个组的人访问并修改自己的项目文件。这时就可以设置项目文件的权限,通过设置的自己的文件只有自己的组内人员具有查看和修改的权限即可。这就是用户组的使用方式,a组和b组就是一个用户组,可以在组内设置自己的权限。
比如项目经理需要同时查看两组的进度,那么项目经理就需要同时拥有访问组a和组b的文件的权限,这时可以设置项目经理这个用户既属于组a也属于组b即可。因为在Linux中,每个账户都可以有多个用户组的支持。

可能读者又有疑惑了,怎么知道哪些人是一个组,哪些人不是一个组呢?这个问题我们放到后面的用户管理章节再介绍,在这里,我们着重讲的是文件的权限概念,因此我们目前只需要了解Linux系统中的用户、用户组和其他人的概念,并知道文件的权限都是相对于这三个身份的人设置的即可。

3.其他人

前面已经提到了,其他人就是用户组外的人,可以另外设置一层权限来毙掉用户组外的人访问文件的权限。在上面介绍的组a和组b中,组a的所有人相对于组b来说,都是其他人。反之亦然。

上面已经介绍了三种身份的用户,但是还有一个特殊的人物需要介绍一下,它就是“万能的天神”,root账户。root在Linux中具有至高无上的权限,它可以操作任何系统中的文件。因为使用root用户的时候需要当心。

二、Linux用户身份与用户组记录文件

1. /etc/passwd

默认情况下,所有的系统上的账号与一般身份的用户,还有天神root用户的相关信息,全部都记录在/etc/passwd这个文件中。

2. /etc/shadow

系统所有用户的个人密码都记录在/etc/shadow文件中,但是文件中的密码都是加密的,我们打开后并不能看到真正的密码。

3. /etc/group

系统中所有的组名以及id都记录在/etc/group这个文件中。

三、文件属性与权限

1. 查看文件属性的方法(ls)

通过ls可以查看目录中的文件,仅仅输入ls后面不加目录的时候,输出的是当前所在目录的文件,加上目录之后,则是输出的所加的目录下的文件内容。详细的使用方法如下所示:经常使用的两个参数是 -a-l-a可以列出目录下的所有文件,包括隐藏的文件;-l则是列出文件的详细信息,包括文件的属性、权限等等信息。如果同时使用 -a-l,则是使用-al,这样就可以同时显示两个参数的内容了,ls -al 这个命令也可以简写为 ll

[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
[root@www ~]# ls [--color={never,auto,always}] 目录名称
[root@www ~]# ls [--full-time] 目录名称
选项与参数:
-a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
-A  :全部的文件,连同隐藏档,但不包括 ... 这两个目录
-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)
-F  :根据文件、目录等资讯,给予附加数据结构,例如:
      *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i  :列出 inode 号码,inode 的意义下一章将会介绍;
-l  :长数据串列出,包含文件的属性与权限等等数据;(常用)
-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r  :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R  :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;
-S  :以文件容量大小排序,而不是用档名排序;
-t  :依时间排序,而不是用档名。
--color=never  :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto   :让系统自行依据配置来判断是否给予颜色
--full-time    :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 
                       而非内容变更时间 (modification time)

2.文件属性详细介绍

在这里,以鸟哥的Linux私房菜中的代码段为例来介绍文件的属性。在书中,作者是使用 su - 切换身份成为root后, 使用“ ls -al ”看看,会看到下面的内容:

[dmtsai@study ~]$ su -  # 先来切换一下身份看看
Password:
Last login: Tue Jun  2 19:32:31 CST 2015 on tty2
[root@study ~]# ls -al
total 48
dr-xr-x---.  5    root     root    4096  May 29 16:08 .
dr-xr-xr-x. 17    root     root    4096  May  4 17:56 ..
-rw-------.  1    root     root    1816  May  4 17:57 anaconda-ks.cfg
-rw-------.  1    root     root     927  Jun  2 11:27 .bash_history
-rw-r--r--.  1    root     root      18  Dec 29  2013 .bash_logout
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bash_profile
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bashrc
drwxr-xr-x.  3    root     root      17  May  6 00:14 .config               <=范例说明处
drwx------.  3    root     root      24  May  4 17:59 .dbus
-rw-r--r--.  1    root     root    1864  May  4 18:01 initial-setup-ks.cfg  <=范例说明处
[    1    ][  2 ][   3  ][  4 ][    5   ][    6     ] [       7          ]
[  权限   ][链接][拥有者][群组][文件大小][ 修改日期 ] [      文件名        ]

在这里要介绍的就是列出的7列内容,分别是1:权限 2链接 3文件拥有者 4文件所属群组 5文件大小 6修改日期 7文件名下面讲对这些内容进行详细的介绍。

2.1 权限

权限的介绍以下图为例,权限这一栏一共有10个字符。
在这里插入图片描述
第一个字符代表的是这个文件的类型,例如目录、文件、链接文件等等

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件
  • 当为[ l ]则是链接文件(link file)
  • 当为[ b ]则是设备文件里面的可供储存的周边设备(可随机存取的设备)
  • 当为[ c ]则是设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)

接下来的字符中,以三个为一组且均为[rwx]的三个参数的组合。其中,[r]代表可读(read)[w]代表可写(write)[x]代表可执行(execute)。要注意的是这三个权限的为止不会改变,如果没有某个权限则是用-来代替。

  • 第一组为文件拥有者可具备的权限
  • 第二组为加入此用户组的账号的权限
  • 第三组为非本人且没有加入本用户组的其他账户的权限

2.2 链接

链接表示有多少文件名链接到此节点(inode)。每个文件都会将它的权限与属性记录到文件系统inode中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到相同的一个inode号码。

2.3 文件(或目录)的拥有者

表示这个文件属于的那个用户。

2.4 文件(或目录)所属用户组

表示文件所属的用户组。注意,这个用户组可以与文件拥有者没有关系。

2.5 文件的容量大小

容量的默认单位为Bytes

2.6 文件的创建日期或是最近的修改日期

这一栏的内容分别为日期(月/日)。如果这个文件修改的时间距离现在太久,那么时间部分会仅显示年份。如下面所示。

[root@study ~]# ll /etc/services /root/initial-setup-ks.cfg
-rw-r--r--. 1 root root 670293 Jun  7  2013 /etc/services
-rw-r--r--. 1 root root   1864 May  4 18:01 /root/initial-setup-ks.cfg
# 如上所示,/etc/services 为 2013 年所修改过的文件,离现在太远之故,所以只显示年份;
# 至于 /root/initial-setup-ks.cfg 是今年 (2015) 所创建的,所以就显示完整的时间了。

2.7 文件名

如果文件名之前多了一个点.,则代表这个文件为隐藏文件。

3. 修改文件属性和权限

在这一节,我们将介绍几个常用于用户组、拥有者、各种身份的权限修改的命令。

chgrp:修改文件所属用户组
chown:修改文件拥有者
chmod:修改文件的权限,SUID,SGID,SBIT等特性

这三个命令都需要root权限才能执行,因此可以直接使用su -来切换成root用户,也可以使用sudo命令来启用root权限,但是这需要登陆的账号具有sudo权限才行。要给用户添加权限一般是需要在/etc/sudoers添加和root那行一致的内容,保存退出才可。

3.1 修改文件所属用户组(chgrp)

chgrp就是change group的缩写。修改命令的格式如下:

chgrp [-R] 所属组 文件名(目录名)

-R: 进行递归(recursive)修改,亦即连同子目录下的所有文件、目录都更新为属于这个用户组,常常用在修改某一目录内所有文件的情况下

下面以鸟哥的Linux的私房菜中的内容为例,详细看下使用方法,其中登录的是root账号,修改了initial-setup-ks.cfg文件的所属用户用户组为users

[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May  4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group:  `testing' <== 发生错误讯息啰~找不到这个群组名~`

修改文件的所属组必须为已有的用户组,上面的当改文件的所属组为testing时,由于Linux中没有这个组,所以就会报错。

3.2 修改文件拥有者(chown)

chown就是change owner的缩写,使用者必须是已经存在系统中的账号,也就是在/etc/passwd这个文件中有记录的使用者名称才可以。chown的用途还挺多的,他还可以顺便直接修改群组的名称,修改命令的格式如下:

chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:群组名称 文件或目录

-R: 进行递归(recursive)修改,亦即连同子目录下的所有文件、目录都更新为属于这个用户组,常常用在修改某一目录内所有文件的情况下

范例:

范例:将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin  users 1864 May  4 18:01 initial-setup-ks.cfg

范例:将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May  4 18:01 initial-setup-ks.cfg

3.3 修改文件权限(chmod)

权限的设置方法有两种,分别是使用数字或者是符号来进行权限的变更。我觉得数字修改权限更方便,所以在这我只讲数字更改文件权限的方法。
Linux文件的基本权限就有9个,分别是拥有者(owner)、所属群组(group)、其他人(others)三种身份各自自己的读(read)、写(write)、执行(execute)权限。使用数字修改文件的权限,每个权限都可以由一个数字来代替,如下:

r: 4
w: 2
x: 1

每种身份拥有者(owner)、所属群组(group)、其他人(others)的各自的三个权限读(read)、写(write)、执行(execute)需要累加,,例如文件的权限为:[-rwxrwx---],该文件的权限数字为770,计算如下:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0

修改文件权限的命令为:

chmod [-R] xxx 文件或目录
#xxx就是各个身份的权限数字

-R: 进行递归(recursive)修改,亦即连同子目录下的所有文件、目录都更新为属于这个用户组,常常用在修改某一目录内所有文件的情况下

举例来说,如果要将.bashrc这个文件所有的权限都设置启用,那么就需要设置数字权限777

范例:

[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/41436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】高可用之三:集群(cluster)

本文是Redis系列第6篇,前5篇欢迎移步 【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确&#xf…

Spring Boot进阶(55):SpringBoot之集成MongoDB及实战使用 | 超级详细,建议收藏

1. 前言🔥 前几期我们有介绍Mysql、Redis等数据库介绍及实战演示,对基本的数据存放有很好的共性,但是如果说遇到大面积的xml、Json、bson等格式文档数据存放,以上数据库并非是最优选择,最优选择是Mongodb数据库。 那么…

采集极验4滑块验证码图片数据

在网络安全领域,验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式,其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题,介绍相关技术和方法。 一、极…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告,后来也尝试过用Python的PyH模块自己构建测试报告,在后来看到了RobotFramework的测试报告,感觉之前用的测试报告都太简陋,它才是测试报告应该有的样子。也就是在…

如果微信消息显示“已读”的话......

近日,一则 #如果微信显示已读的话# 话题冲上了微博热搜榜单。 “已读”是很多社交软件拥有的功能,如果对方接收并查看了消息,就会在消息上显示“已读”,但目前微信还没有推出这项功能。 对于“已读”功能,不少网友纷纷…

力扣 135. 分发糖果

题目来源:https://leetcode.cn/problems/candy/description/ C题解(来源代码随想录): 先从左往右比较,右边孩子评分比左边高就多发1颗糖,否则就只发1颗;再从右往左比较,左边孩子评分…

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&#x…

260道网络安全工程师面试题汇总(附答题解析+配套资料)

由于我之前写了不少网络安全技术相关的文章和回答,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信问我: 我刚入门网络安全,该怎么学? 想找网络安全工作,应该要怎么进行技术面试准备&…

ROS:action通信

目录 一、前言二、概念三、作用四、实际案例4.1需求4.2action通信自定义action文件4.2.1定义action文件4.2.2编辑配置文件4.2.3编译 4.3action通信自定义action文件调用(C)4.3.1流程4.3.2vscode配置4.3.3服务端4.3.4客户端4.3.5编译配置文件4.3.6执行 4.4action通信自定义actio…

服务器使用UDP通讯127.0.0.1测试成功连接服务器却通讯失败

首先看看本人情况 解释一下: 1:左边窗口是模拟服务程序,功能是收到消息后把消息打印出来,并把收到的消息再发回给发送消息的主机 2:右边窗口是模拟客户程序,功能是将输入的消息发送给服务程序的主机&…

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于B…

Revit 导出明细表的两种方法!

方法一、Revit中怎么灵活运用明细表格式的导出与导入 在做项目的时候,遇到一些项目需要进行工程量统计的时候,经常需要设置明细表里面的格式,例如字体、表格排布样式等,但是项目一旦多起来,这些工作重复性又太高&#…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统(适合新手) 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统,具有很强的可扩展性,修改简单,只要有点前端基础就能看懂; 2…

Leetcode-每日一题【19.删除链表的倒数第N个结点】

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2输出:[1,2,3,5] 示例 2: 输入:head [1], n 1输出:[] 示例 3&#x…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试(1) Apollo 6.0 安装完全指南 在这一步出错: 进入到 Apollo 源码根目录,打开终端,执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

小程序webview组件,小程序和webview交互,小程序内联h5页面,小程序webview内网页实现微信支付

小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了。我们今天来讲一讲。在小程序的webview里…

B072-项目实战-用户模块--前台登录 三方登录

目录 前台登录-账号登录前端完成左上角显示用户信息配置前置拦截器、后置拦截器和不受限资源拦截器 三方登录-微信登录概述流程图用法代码实现步骤分析:实现准备代码前端login.htmlcallback.html 后端LoginController-微信登录LoginServiceImpl-微信登录解决回调域名不能跨域绑…

【Dart】006-类的定义和使用

【Dart】006-类的定义和使用 文章目录 【Dart】006-类的定义和使用一、类的定义1、概述2、简单定义与实例化代码示例运行结果 3、成员方法代码示例运行结果箭头函数写法 4、get 与 set 关键字概述代码示例运行结果 二、类的构造方法1、特点2、完整版的构造方法简化版完整版 3、…

【JavaScript】Function的祖传方法call与apply

引言 内容速递 看了本文您能了解到的知识! 在本篇文章中,将带你了解什么是call和apply,call和apply的用途、如何手写call和apply以及call和apply的使用场景。 1、什么是call和apply call()和apply()是JavaScript中的两个内置方法&#xff…

天翎MyApps低代码平台唯品会金牌客服管理系统

项目痛点: 作为一家知名的创新大型电商,唯品会秉承“传承品质生活,提升幸福体验”的企业使命。基于客服铁军锻造项目,实现基于金牌案例的提交、评审、积分,学习功能。 项目中的晋升机制、案例产生学习机制、双激励机制…
最新文章