Linux【文件权限的理解】

1. linux的发展史

首先在学习linux之间,我们要问自己几个问题,linux从哪里来,为什么会出现,它的出现代表着什么。

linux的前身unix
  1. Multics 和 UNIX 的起源

    • Multics 是一个由通用电器公司、贝尔实验室和麻省理工学院开发的操作系统,融合了多任务文件管理和用户连接等新概念。
    • 1969-1970 年间,AT&T 的 Ken Thompson 和 Dennis Ritchie 基于 Multics 的理念开发了 UNIX,最初运行在小型机上,满足科研环境的需求。
  2. UNIX 的发展与多版本

    • UNIX 最初是免费提供给大学计算机系使用,逐渐成为有价值、高效、多用户和多任务的操作系统。
    • 1972 年开始发行商业版本,其中包括伯克莱分校的 UNIX 版本,后来成为了标准的一部分。
    • 1975 年,伯克莱发布了自己的 BSD UNIX 版本,成为 AT&T UNIX 版本的主要竞争者,推动了 UNIX 的发展。
  3. 不同的 UNIX 标准

    • 1980 年,微软开发了 UNIX PC 版本 Xenix,而 AT&T 则推出了商业版本 System III 和后来的 System V。
    • 同时,BSD UNIX 继续发展,成为高科技研究机构的基础,并在网络协议和文件管理等方面进行了扩展。
  4. UNIX 标准化和竞争

    • 到了 1980 年代中期,基于 AT&T 和 BSD 的两个竞争 UNIX 标准出现,分别是 System V 和 BSD 版本。
    • AT&T 成立了 UNIX 系统实验室,旨在整合不同版本,开发一个统一的标准系统。
  5. 进一步的发展和竞争

    • 1991 年,UNIX 系统实验室发布了 System V Release 4,整合了多个版本的特点。
    • 同时,IBM 和惠普等公司也推出了自己的 UNIX 标准版本,形成了 OSF 和 System Release 4。
  6. 后续的变动和影响

    • 1993 年,AT&T 将 UNIX 业务转卖给 Novell,UNIX 系统实验室成为 Novell 的一部分。
    • SUN 公司将 System V Release 4 整合到其 SUN OS 中,并发布了 Solaris。
    • UNIX 的图形用户界面逐步发展,最终合并为 CDE(通用平台环境)。

总的来说,UNIX 的发展历程充满了不同版本的竞争与整合,形成了多样化的标准和产品,影响了计算机操作系统的发展方向,尤其是在多用户和网络方面取得了重大进展。

linux的发展史
1991 10 5 日,赫尔辛基大学的一名研究生 Linus Benedict Torvalds 在一个 Usenet 新闻组
comp.os.minix )中宣布他编制出了一种类似 UNIX 的小操作系统,叫 Linux 。新的操作系统是受到另
一个 UNIX 的小操作系统 ——Minix 的启发,该系统是由一名叫 Andrew S Tanenbaum 的教师开发的。读 者也许猜想所发布的这个系统应该是Linux 0.01 版本,实际上不是这样。真正的 Linux 0.01 版本并没有 被发布,原因是0.01 版本不实用。 Linus 仅仅在第一个 Linux FTP 站点( ftp://nic.funet.fi )上提供过这 个版本的的源代码。
Torvalds 10 5 日发布的这个 Linux 版本被称为 0.02 版,它能够运行 GNU Bourne Again Shell(bash) GNU
C 编译程序( gcc )以及为数不多的其它语言。 Torvalds 绝对没有想到他设想的一种能够针对高级业余爱好
者和黑客们的操作系统已经产生,这就是人们所称的 Linux 。;
Linux 发布时的版本是 0.02 ,后来又有 0.03 版,然后又跳到 0.10 版。因为世界各地越来越多的程序员都开始开
Linux ,它已经达到 0.95 版。这就意味着正是公布 1.0 版本的时间已经为期不远了。正式的 1.0 版本是在 1994 年公布的

Linux 是一个开源操作系统内核,它的开源性质对计算机科学、软件开发和信息技术产生了深远的影响。以下是关于 Linux 开源性质的一些重要点:

1.开源软件定义:
开源软件是指源代码可供任何人查看、修改和重新分发的软件。这种开放性质使得用户可以自由地对软件进行定制和改进,有助于软件的创新和发展。
2.Linux 的开源性:
Linux 内核最初由 Linus Torvalds 在 1991 年发布,并在 GNU 许可证(通常是 GNU GPL)下发布。这种许可证确保了每个人都可以自由地访问、使用、修改和分享 Linux 内核的源代码。
3.开放的协作模式:
Linux 开源项目采用了一种协作的开发模式,数千名开发者和公司在全球范围内共同参与贡献代码、修复错误和改进功能。这种分布式的开发模式促进了快速的技术进步和稳定性的提高。
4.技术创新和适应性:
Linux 的开源性质使得它能够快速适应新的硬件和技术。开发者可以自由地修改内核以支持新的硬件架构或者优化性能,这种灵活性和快速响应使得 Linux 在各种设备上都得到了广泛的应用,从服务器和超级计算机到嵌入式系统和智能手机等。
5.社区支持和生态系统:
Linux 社区是一个庞大而活跃的社区,拥有许多开发者、用户、组织和公司。这些人和实体不仅贡献代码,还提供支持、教育和培训,构建了一个强大的生态系统,推动了 Linux 的普及和发展。
6.安全性和透明性:
开源性质使得 Linux 内核的安全性得到了增强。任何人都可以审查源代码以发现和修复潜在的安全漏洞,因此 Linux 在安全性方面通常比封闭源的操作系统表现更好。

总体而言,Linux 的开源性质不仅是一个软件开发模型,更是一种哲学和社会运动,促进了技术创新、信息共享和社区合作,对整个计算机领域产生了深远的影响。

对于开源的好处,我们也是可以看见的,自从林纳斯·本纳第克特·托瓦兹将第一版开源后,吸引了当时很多顶尖程序员的加入,对于linux的发展有着至关重要的贡献。

开源软件的好处包括但不限于以下几个方面:

1.透明性和可验证性:
开源软件的源代码对所有人开放,任何人都可以查看、分析和验证代码。这种透明性使得用户可以了解软件的实现细节,确保没有潜在的安全漏洞或后门。开源软件因此通常被认为比闭源软件更加可靠和安全。
2.灵活性和定制性:
开源软件允许用户自由地修改和定制,以满足特定的需求。开发者可以根据自己的需求调整软件功能、界面和性能,而不受商业软件厂商的限制。这种灵活性对于企业和个人用户来说都是一个巨大的优势。
3.成本效益:
开源软件通常免费提供使用,无需支付许可费用。这对于个人用户、学术机构和中小型企业来说是节省成本的重要途径。此外,开源软件的可定制性和灵活性也可以减少集成和支持的成本。
4.技术创新和共享:
开源软件鼓励技术创新和共享知识。开源项目通常吸引全球的开发者和组织参与,共同推动软件的发展和改进。这种开放的合作模式可以加速技术进步,使得软件在功能和性能上不断演进。
5.社区支持和持久性:
开源软件通常拥有庞大而活跃的社区支持。用户可以通过社区论坛、邮件列表或者在线文档获取支持和帮助。开源社区的参与者通常是软件的热情支持者,他们会持续更新和改进软件,确保其持久性和稳定性。
6.开放标准和互操作性:
开源软件通常遵循开放标准和协议,有助于提高不同软件和系统之间的互操作性。这种开放性可以促进软件和硬件的整合,推动整个行业的技术进步。

总体来说,开源软件不仅是一种技术选择,更是一种社会运动和哲学观念,通过开放、共享和合作,推动了软件领域的创新和发展,为用户提供了更多的选择和灵活性。

linux的商业发行版本

Linux 作为一个开源操作系统内核,有许多基于它的商业发行版本,这些版本通常由不同的公司或组织开发、维护和支持,同时提供额外的服务和功能。以下是几个知名的 Linux 商业发行版本:

1.Red Hat Enterprise Linux (RHEL):
由 Red Hat 公司开发和支持的企业级 Linux 发行版。RHEL 提供了高度稳定性、安全性和性能优化,专为企业服务器和工作站环境设计。它支持长期支持 (LTS),并且提供专业的技术支持和服务。
2.SUSE Linux Enterprise Server (SLES):
由 SUSE 公司开发的企业级 Linux 发行版,专注于服务器和企业应用。SLES 提供了广泛的应用支持和高级的系统管理工具,同时也有长期支持版本可用,并提供专业的技术支持。
3.Ubuntu Server Edition:
尽管 Ubuntu 本身是一个免费的开源发行版,Canonical 公司也提供了 Ubuntu Server Edition,专门用于企业和云计算环境。它提供了稳定的版本、长期支持 (LTS) 和商业支持选项,适合于各种工作负载。
4.Oracle Linux:
由 Oracle 公司开发和支持的 Linux 发行版,基于 Red Hat Enterprise Linux (RHEL)。Oracle Linux 提供了与 RHEL 兼容的内核和工具,以及额外的 Oracle 产品集成和支持。
5.CentOS Stream:
CentOS 最初是一个免费的克隆 RHEL 的社区发行版,但在后来被 Red Hat 收购后,CentOS Stream 成为了 Red Hat 官方的下游开发项目,提供更加即时和流动的更新。CentOS Stream 在企业中也被广泛用于开发和测试。

这些商业发行版通常提供更加稳定和长期支持的版本,同时配备专业的技术支持和服务,适合企业级应用和要求高可靠性的生产环境。选择合适的发行版通常取决于用户的具体需求、预算和支持要求。

os概念,定位

对于操作系统来说,作为管理者,不仅要管理硬件,还要为上层的软件提供服务。一款操作系统是否好用,就包括对资源,进程,内存,文件设备,权限的管理是否达标。

  1. 资源管理

    包括处理器管理、内存管理、文件系统管理、设备管理等,操作系统通过有效的算法和策略来管理和优化这些资源的使用,确保系统的高效性和稳定性。
  2. 进程管理

    操作系统通过进程控制和调度来管理运行在计算机上的应用程序,包括进程的创建、调度、通信和同步等,以确保多个程序能够正确地共享资源。
  3. 内存管理

    操作系统负责管理计算机的内存资源,包括内存分配、地址映射、虚拟内存管理等,以便于应用程序能够正常运行并且不会相互干扰。
  4. 文件系统

    操作系统提供文件和目录的管理,包括文件的创建、删除、修改、访问控制等,以及文件系统的组织结构和优化。
  5. 设备管理

    操作系统管理和控制计算机的各种硬件设备,包括输入输出设备(如键盘、鼠标、打印机)、网络接口、存储设备等,以便应用程序能够与这些设备进行有效的交互。
  6. 安全和权限

    操作系统通过用户身份验证、访问控制和安全策略等机制,确保系统和数据的安全性,防止未经授权的访问和恶意攻击。

总体而言,操作系统在计算机科学中扮演着极为重要的角色,它不仅仅是一个连接硬件和软件的桥梁,更是整个计算机系统的管理者和协调者,为用户和应用程序提供了一个安全、高效、友好的工作环境。

2 shell命令以及运行原理

Shell命令是用户与操作系统交互的主要方式,它们是一系列的文本指令,用来执行特定的操作或者运行程序。Shell是一个命令解释器,负责接收用户输入的命令,解释并调用相应的程序来执行这些命令。下面是关于Shell命令及其运行原理的详细解释:


Shell命令

1.命令格式:

Shell命令通常由命令名和选项(也称为参数)组成,有时也包括操作对象或操作数。例如,ls -l /home/user 中的ls是命令名,-l是选项,/home/user是操作对象。
2.常见命令:

常见的Shell命令包括文件和目录操作命令(如ls、cp、mv、rm等)、系统管理命令(如ps、top、kill等)、文本处理命令(如grep、awk、sed等)、以及其他一些用于网络、用户管理、进程控制等方面的命令。
3.命令执行:

当用户在Shell提示符下输入命令并按下回车键时,Shell会首先解析这条命令。解析的过程包括识别命令名、选项和操作对象,并且可能会进行语法检查和参数验证。
4.查找执行文件:

一旦命令被解析,Shell会查找对应的可执行文件。大多数常见的Shell命令的可执行文件通常位于系统的标准路径(例如/bin、/usr/bin等)下。
5.程序执行:

找到可执行文件后,Shell会调用操作系统提供的相关系统调用来执行这个程序。程序执行时会占用一部分系统资源,如CPU时间、内存等,直到它完成任务并退出。
6.输出和错误处理:

执行完命令后,程序可能会产生输出,输出可以显示在终端上,也可以重定向到文件或者其他设备。如果出现错误,程序通常会将错误信息输出到标准错误(stderr),而不是标准输出(stdout)。

Shell运行原理

7.解释器:

Shell本身是一个命令解释器(Interpreter),它接收用户输入的命令字符串,解释这些命令并将其转换为操作系统能够理解的系统调用。

8 环境变量:

Shell运行时会加载环境变量,这些变量可以影响命令的执行方式和结果。例如,PATH环境变量指定了Shell在哪些目录下查找可执行文件。

9 管道和重定向:

Shell支持管道(|)和重定向(>、<)等操作符,这些操作符可以将一个命令的输出发送到另一个命令作为输入,或者将输出重定向到文件中。
10.内建命令和外部命令:

Shell有一些内建命令(如cd、echo、exit等),它们不需要外部程序的支持,直接由Shell解释和执行。而大多数命令则是外部命令,由独立的可执行文件提供支持。
11.交互和脚本:

用户可以通过交互式地输入命令与Shell进行交互,也可以将一系列命令写入脚本文件,通过执行脚本来自动化完成一系列任务。

总之,Shell命令通过与操作系统交互,让用户可以方便地管理和控制计算机系统。Shell本身是一个强大的工具,它不仅提供了基本的文件和系统操作,还支持脚本编程和系统管理等高级功能。

3 linux的权限是概念

linux下只有两种用户超级用户(root)和普通用户

超级用户:在linux系统下做出任何事情,都不受限制(提示符“#”)
普通用户:在linux下只能做有限的事情(提示符“$”)

可以通过su[用户名]的方式切换账户

注:root用户切换普通用户不需要密码,普通用户切换root用户则需要密码

文件访问者的分类

文件或文件目录的所有者:u-User
文件或文件目录所有者所在的组的用户 g-Group
其他用户 o-Others

文件的类型和访问权限

文件的类型

d :文件夹
- :普通文件
l :软链接(类似 Windows 的快捷方式)
b :块设备文件(例如硬盘、光驱等)
p :管道文件
c :字符设备文件(例如屏幕等串口设备)
s :套接口文件
基本权限
# 读( r/4 ): Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
# 写( w/2 ): Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
# 执行( x/1 ): execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
# “—” 表示不具有该项权限

在 Linux 文件系统中,文件的权限用三个八进制数字来表示,分别对应于文件所有者(Owner)、文件所属组(Group)和其他用户(Others)的权限。
每个权限可以用数字表示如下:

1.读权限:用数字 4 表示。
2.写权限:用数字 2 表示。
3.执行权限:用数字 1 表示。

这些数字可以组合在一起来表示不同的权限组合。例如:

4.读写执行权限:4 (读) + 2 (写) + 1 (执行) = 7。
5.读写权限:4 (读) + 2 (写) = 6。
6.读执行权限:4 (读) + 1 (执行) = 5。
7.只读权限:4 (读) = 4。
8.只写权限:2 (写) = 2。
9.只执行权限:1 (执行) = 1。

文件设置访问权限相关的方法
chmod

chmod是一个常用的命令,用于修改文件或目录的权限。它的名称来自于 "change mode",即改变文件或目录的访问权限模式

chmod [options] mode file(s)
  • options: 可选的选项,用于控制 chmod 命令的行为。
  • mode: 指定要设置的权限模式,可以是数字形式(如 755)或符号形式(如 u+rwx)。
  • file(s): 指定要修改权限的文件或目录。

数字形式(八进制)

在数字形式中,权限模式由三个数字组成,分别代表文件所有者(user)、组用户(group)、其他用户(others)的权限。每个数字由三个比特位表示,分别是读(4)、写(2)、执行(1)权限的和。

例如:

  • 7 表示读、写、执行权限(rwx
  • 5 表示读和执行权限(r-x
  • 0 表示没有权限

这些数字按顺序分别适用于文件所有者、组用户、其他用户。

符号形式

在符号形式中,chmod 命令使用加号 (+)、减号 (-)、等号 (=) 来分别添加、删除或者设置权限。符号形式的基本结构如下:

  • u:文件所有者
  • g:组用户
  • o:其他用户
  • a:所有用户(等同于 ugo

权限操作符号:

  • +:添加权限
  • -:删除权限
  • =:设置为给定的权限

例如:

u+x:给文件所有者添加执行权限
go-rw:删除组用户和其他用户的读写权限
a=rwx:设置所有用户的读写执行权限
chgrp

chgrp 是一个用于修改文件或目录所属组的命令。它的名称来自于 "change group",即改变文件或目录的所属组。

chgrp [options] new_group file(s)
  • options: 可选的选项,用于控制 chgrp 命令的行为。
  • new_group: 指定要设置的新的组名或组ID。
  • file(s): 指定要修改所属组的文件或目录。

示例用法

chgrp staff myfile.txt      # 将 myfile.txt 的所属组改为 staff
chgrp -R developers mydir   # 递归地将 mydir 及其下所有文件和子目录的所属组改为 developers
  1. 选项

    • -R:递归地修改目录及其下所有文件和子目录的所属组。
    • 其他选项根据不同的操作系统和Shell环境可能有所不同,可以通过 man chgrp 命令来查看详细的选项说明。

注意事项:

  • 只有超级用户(root)或文件所有者可以使用 chgrp 命令修改文件或目录的所属组。
  • 修改文件或目录的所属组可能会影响文件或目录的访问权限,具体影响取决于文件系统和操作系统的设置。

总之,chgrp 命令是管理文件和目录所属组的重要工具,可以帮助管理员或者文件所有者根据需要进行文件和目录权限的管理和调整

file

file 是一个常用的命令,用于确定给定文件的类型。它能够分析文件的内容和结构,并尝试猜测文件的格式、编码方式等信息。

基本语法

file 命令的基本语法如下:

file [options] file(s)
  • options: 可选的选项,用于控制 file 命令的行为。
  • file(s): 指定要分析的文件名或路径。

示例用法

file myfile.txt      # 分析 myfile.txt 文件的类型
file /bin/bash       # 分析 /bin/bash 可执行文件的类型
file -i myfile.txt   # 显示文件的 MIME 类型

选项

    • -i:显示文件的 MIME 类型。
    • -b:以简短的形式显示输出。
    • -z:当分析压缩文件时,显示压缩文件中的内容。
    • -L:对符号链接解引用,显示链接指向的文件类型。
    • -r:递归处理目录中的文件。
    • -f <file>:从指定文件中读取文件名进行分析。

注意事项

  • file 命令的输出根据文件的内容和文件头信息来猜测文件的类型,有时可能不准确,特别是对于自定义格式或者特殊用途的文件。
  • 在 Linux 和 Unix 系统中,file 命令通常是系统自带的核心命令,可以直接在终端中使用。

总之,file 命令是一个便捷的工具,用于快速了解文件的类型,对于管理和分析文件非常有用。

粘滞位

有这样一个神奇的现象,不论你有没有这个文件的权限,只要你能登录进入远端服务器且属于这个用户组中都可以删掉别人所创建的文件,这是不是非常的不合理。有没有什么办法吗,让别人没法删除呢

为了解决这一问题,linux引入了粘滞位的概念,粘滞位(Sticky Bit)是一种特殊的权限位,通常应用在目录上,对文件没有直接作用。它的主要作用是限制普通用户对目录中文件的删除权限,即使用户有该目录的写权限,也不能删除其他用户创建的文件。

在一个目录上设置了粘滞位后,只有以下两种情况下的文件才能被删除:

  1. 文件所有者:文件的所有者可以随意删除自己拥有的文件,不受粘滞位的限制。

  2. 超级用户(root):系统管理员拥有绝对的权限,可以删除任何文件,不受粘滞位的限制。

如何设置粘滞位

在 Unix/Linux 系统中,使用 chmod 命令可以设置目录的粘滞位。粘滞位的符号表示是一个加号 + 后跟字母 t,例如 chmod +t directoryname

具体步骤如下:

chmod +t /path/to/directory
#确保你有对目录的管理权限:通常只有超级用户或目录的所有者才能设置粘滞位。

#设置粘滞位:使用 chmod 命令,添加 t 来设置目录的粘滞位。

#验证设置是否成功:可以使用 ls -l 命令来查看目录的权限设置,确保粘滞位被正确应用。

注意事项

  • 粘滞位适用于需要保护多个用户共享目录中文件的场景,例如 /tmp 目录常常会设置粘滞位,以防止用户删除其他用户的临时文件。
  • 在现代系统中,由于访问控制列表(ACLs)的广泛支持,粘滞位的使用频率已经减少,但在某些情况下它仍然非常有用。
  • 粘滞位只对目录有效,不对文件有效。
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值