一、 图文并茂解释开源许可证 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?
1)GPL:GNU General Public License
1、概念:
GPL,即GNU通用公共许可协议,是 GNU General Public License 的简写。它是由自由软件基金会(FSF)公布的自由软件许可证。
2、版本演进历史:
GPLv1:1989年2月25日发布。
GPLv2:1991年6月发布。
GPLv3:2007年6月29日发布。
3、协议特点:
GPL协议最大的一个特征是具有传染性,即GPL对于许可证有强制继承的要求,这也是GPL与其他许可证在哲学思想上最大的差异。
4、权利和义务:
GPL 规定了使用遵循了GPL协议软件时,使用者的权力和义务如下:
权力:
获取源码的权力;
修改源码的权利;
自由处理衍生作品的权利。
义务:
使用了遵循GPL协议发布的软件,自身也必须遵守GPL协议。这也是GPL被人称为有传染性的原因。
必须开放源代码;允许使用者自由获取(复制)、修改、发布的产品,即拥有获取源码、修改源码、分发软件的自由。
5、GPL 自由权利的描述:
GPL的条款和条件必须提供给任何接受GPL应用的作品的副本(“被许可人”)的人员。
任何遵守条款和条件的被授证人员都有权修改作品,以及复制和重新分发作品或任何派生版本。
GPL下的软件可以用于所有目的,包括商业目的,甚至作为创建专有软件的工具,例如使用GPL许可的编译器时,分发GPL许可作品(如软件)的用户或公司可能会收取副本费用或无偿提供费用。
6、分析说明:
这里被授权人,可以理解为,是使用了遵循GPL协议软件的作品的作者或者组织。
第三点将GPL与禁止商业再分发的软件许可区分开来,也与共享软件许可证区分开来。FSF认为自由软件不应该限制商业使用和发布(包括再发布)。GPL明确规定,GPL作品可能以任何价格出售。
许可只依赖于使用的库和软件组件,而不是依赖于底层平台。例如,作为GPL许可操作系统(如Linux)下的应用程序运行的软件不需要根据GPL进行许可或者以源代码可用性分发。
2)BSD开源协议(Free BSD license、Original BSD license)
1、概念:
BSD 许可协议,即 Berkeley Software Distribution license 的简称,是由加州大学伯克利分校发布并维护的开源软件许可证。BSD许可证是自由软件中使用最广泛的许可协议之一。
2、两个概念:
BSD:人们常说的BSD,指的是 Berkeley Software Distribution,即伯克利软件套件,是加州大学伯克利分校在AT&T贝尔实验室的Unix操作系统基础上,开发打包的操作系统及相关软件套件。
BSD许可协议:BSD套件遵循某种开源许可证的方式发布,这种许许可证因此而得名,被叫做 BSD许可证。
3、BSD协议特点:
BSD开源协议是一个给予使用者很大自由的协议,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
4、版本演进历史:
旧版BSD:1998发布初版。
新版BSD:1999年发布修订版。
BSD协议的初稿内含有一项额外的条款,要求所有从以BSD许可证授权的软件派生著作,都必须要包含一段文字以交代源代码的来源。该条文列于原BSD许可证的第三条。
GNU项目将这个称为“令人感到不舒服的BSD交代条款”,GNU工程认为存在两个问题:
第一,修改源码的人都希望将其大名加到鸣谢中,如果一个项目参加的人非常多,或者软件包中包含许多个单独项目,鸣谢阵容将会变得非常庞大。
第二,这跟GNU通用公共许可协议相抵触,GPL不允许增加额外的限制,所以软件只能在GNU跟BSD之间选择。由于这两个许可证在自由软件中使用很普遍,如果作者想将GPL和BSD有所结合,就会出现冲突。
应自由软件基金会和GNU计划的发起者斯托曼的请求,1999年7月22日,伯克利技术许可办公室的主管 William Hoskins 删除了BSD许可证的第三条。从此以后,自由软件作者就可以方便地采用BSD许可证下的软件,从而跟GPL下的作品融合。
原来的许可证有时被称为“BSD-old”(老BSD)或“4-clause BSD”(四句版BSD),当前的BSD许可证有的被称为“BSD-new”(新BSD)、“revised BSD”(修订的BSD)或“3-clause BSD”(三句版BSD)。
5、协议分析:
当发布使用了BSD协议的代码或以BSD协议代码为基础做二次开发自己的产品时,需满足以下三个条件:
如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD协议鼓励项目代码共享,但需要尊重作者的著作权。BSD协议由于允许使用者修改和重新发布代码,也允许在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
很多公司在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。遵守BSD 协议的软件,允许用作商业用途,甚至可按照专属许可证进行再发布。
3)MIT
1、概念:
MIT 许可协议:即 The MIT License,该许可协议之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称“X许可协议”(X License)或“X11许可协议”(X11 License)。
2、版本演进历史:
1988,由自麻省理工学院(MIT)发布。
3、协议特点:
MIT许可协议是许多软件许可条款中被广泛使用的其中一种。与其他常见的软件许可协议(如GPL、LGPL、BSD)相比,MIT是相对宽松的软件许可协议,赋予软件被许可人更大的权利与更少的限制。
4、协议分析:
被许可人权利:被许可人有权利使用、复制、修改、合并、出版发行、散布、再许可和/或贩售软件及软件的副本,及授予被供应人同等权利,惟服从以下义务。
被许可人义务:在软件和软件的所有副本中都必须包含以上著作权声明和本许可声明。
5、其他重要特性:
此许可协议并非属copyleft的自由软件许可协议条款,允许在自由及开放源代码软件或非自由软件(proprietary software)所使用。
MIT的内容可依照软件代码著作权者的需求更改内容,这也是MIT与BSD本质上的不同处。
MIT许可协议可与其他许可协议并存。MIT条款也是自由软件基金会(FSF)所认可的自由软件许可协议条款,与GPL兼容。
有许多团体均采用MIT许可证,例如著名的SSH连线软件PuTTY与X窗口系统、Expat、Mono开发平台库、Ruby on Rails、Lua等等也都采用MIT许可协议。
4)Apache 许可协议
1、概念:
Apache许可证,即 Apache License,是一个由Apache软件基金会(ASF)发布的自由软件许可证。
Apache许可证最初为 Apache Web 服务器而撰写,Apache许可证在Apache社区内外被广泛使用;Apache基金会下属所有项目都使用Apache许可证;许多非Apache基金会项目也使用了Apache许可证。
官网:http://www.apache.org/licenses/
2、版本演进历史:
Apache License 1.0,1995年发布。
http://www.apache.org/licenses/LICENSE-1.0
Apache License 1.1,2000年发布。
http://www.apache.org/licenses/LICENSE-1.1
Apache License 2.0,2004年发布。
http://www.apache.org/licenses/LICENSE-2.0
5)Mozilla基金会
Mozilla的3个重点工作领域:
①集会公民:隐私、值得信赖的人工智能和数字权利等问题影响着我们所有使用互联网的人。Mozilla 帮助翻译它们并促成有意义的改变。围绕互联网健康的问题影响着我们所有人。Mozilla 使消费者能够从大型科技公司和政府那里获得更好的在线隐私、值得信赖的人工智能和安全的在线体验。
②连接领导者:我们支持塑造我们在线生活未来的活动家和思想领袖。Mozilla 支持积极分子和思想领袖塑造我们在线生活的未来,倡导更好的互联网。我们为不断壮大的领导者和创新者社区提供资金、指导和联系。
③制定议程:我们发布开源研究并举办全球会议,以使可信赖的 AI 等想法成为主流。互联网是一个庞大的生态系统。Mozilla 的研究——从我们的年度互联网健康报告到我们的白皮书——都能理解。我们调查对健康互联网的威胁,从在线跟踪的爆炸式增长,到越来越多的互联网关闭,再到深度伪造的出现。但我们也突出亮点并提供解决方案,从开放数据的潜力到新兴的社交媒体合作社。Mozilla 的研究和它的产品一样,都是开源的。它是根据全球专家的意见构建的。其他人可以免费重新发布、重新混合并在他们自己的活动和课程中使用
6)LGPL:Lesser General Public License
1、概念:
LGPL,即GNU宽通用公共许可证,是 GNU Lesser General Public License 的简称。它是由自由软件基金会(FSF)公布的自由软件许可证。
2、版本演进历史:
第一版(2.0):1991年发布,第一个字母 L 定义为 Library,为与 GPLv2 保持一致而采用 2.0 版的编号。
第二版(2.1):1999年发布,第一个字母 L 定义为 Lesser,以显示 FSF 认为并不是所有程序库都应当采用该许可证的态度。
第三版(3.0):2007年发布,它以在 GPL 第3版之上附加应用一系列许可的方式表现。
3、协议特点:
LGPL和GPL不同,GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同,LGPL允许商业软件通过引用(link)的方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
4、LGPL的发展和分析:
从第一版的 L 表示 Library 的含义以及其版本号直接和GPL保持一致(第一版就是2.0)可知,该协议是GPL的补充协议,是一个主要为开源类库使用设计的开源协议,因为FSF逐渐意识到,GPL协议的强制传染性在某些场景下太过苛刻,会阻碍开源产品被更广泛的传播和使用,实际上很多软件开发过程中使用开源软件的场景,仅仅是把某个开源软件当做底层的库来引用,针对此种场景,FSF在1991年发布GPL第二版时,发布了LGPL第一版。
LGPL的含义可以理解为:它允许企业与软件开发者将LGPL授权的软件以依赖库链接的形式集成至他们自己的软件内(即使该软件是私有软件也被允许),同时不会受到类似于GPL传染特性的许可证强制对软件开源的限制。但如果修改LGPL协议的代码而产生的衍生代码,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。
采用LGPL的项目本身虽然仍有“Copyleft”的限制条件,但这些限制不会感染到仅仅只链接到本项目的软件。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。LGPL为了在GPL与其他许可式许可证之间获取折衷,常被用于一些GNU程序库,亦可使用于独立存在的应用程序中,比较有名的例子为 Mozilla 跟 http://OpenOffice.Org。
7)许可证的对比与总结:
对于一个开源协议来说,规定得太宽松,会导致作者丧失对开源软件的很多权利,规定的太严格,又不利于开源软件的使用和传播。用一张图总结以上介绍的几个主流开源许可证的权限宽松情况:
我们在选择使用开源软件、或者准备开源自己的软件时,一定要明白自己的用途,选择合适的许可证。希望我们站在巨人肩膀上前行的同时,不忘用法律的武器来为我们自身保驾护航。
二、 安装rockylinux8.5系统
1)打开VMware Workstation软件》文件菜单》新建虚拟机》下一步
2)点击浏览选择RockyLinux8.5》下一步
3)选择系统版本》下一步
4)输入虚拟机名称各选择虚拟机保存位置》下一步
5)输入硬盘大小和选择单个文件
6)点击自定义硬件
7)配置内存和CPU》关闭
8)点击完成
9)点击开启虚拟机开始安装RockyLinux8.5系统
10)选择Install Rocky Linux8 回车
11)选择“continue”
12)
13)选择安装磁盘及分区、系统软件、时区、设置root密码 》Begin Installation
14)系统安装中,等待一会儿。。。。
15)选择Reboot System 完成系统安装
16)重启后进入系统登录界面:输入用户名密码登录。
三、Linux中总结
1)如何通过一个简短的关键字,例如process 获取相关的命令。
①whatis 使用数据库来显示命令的简短描述:whatis rm
②help COMMAND 获取内部命令帮助:help echo
③ COMMAND --help 或 COMMAND -h 获取外部命令帮助: hostname --help 或 hostname -h
④man 提供命令帮助的文件,手册页存放位置查看:whereis man
⑤info 适合通用文档参考: info grep
2)通过命令的描述,选择一个命令,获取命令的man文档。
①如hostname ;首先通过whatis hostname命令获取章节号
②获得章节号为1和5,用man命令获取帮助文档 man 1 hostname 和 man 5 hostname
3)解读man文档,man分几个部分?man每个部分的解释,特别是语法部分。<>, [] ...等各代表什么含义。
man分为以下9个部分
1、Executable programs or shell commands 可执行程序和shell命令
2、System calls (functions provided by the kernel) 系统调用
3、Library calls (functions within program libraries) (C语言)库函数
4、Special files (usually found in /dev) 特殊文件
5、File formats and conventions, e.g. /etc/passwd 文件格式
6、Games 游戏
7、Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 杂项
8、System administration commands (usually only for root) 系统管理员命令(通常只用于roor用户)
9、Kernel routines [Non standard] 内核例程(非标准)
[ ] 可选内容
<> 必选内容
a|b 二选一
{ } 分组
... 同一内容可出现多次
4)根据语法部分简要的写几个操作。
四、 切换到/etc/目录,列出fstab文件的详细信息,详细解决fstab一行,每个或每几个字符的详细含义。 【cd /etc; ls -l /etc/fstab】
1)进入到cd /etc进入到etc目录下
2)用vi fstab打开 /etc/下的fstab文件
①第一列:Device 磁盘设备文件或者该设备的Label或者UUID
②第二列:Mount point 设备的挂载点,就是要挂载到哪个目录下。
③第三列:filesystem 磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat、xfs等
④第四列:parameters 文件系统的参数
Async/sync 设置是否为同步方式运行,默认为async
auto/noauto 当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto
rw/ro 是否以以只读或者读写模式挂载
exec/noexec 限制此文件系统内是否能够进行"执行"的操作
user/nouser 是否允许用户使用mount命令挂载
suid/nosuid 是否允许SUID的存在
Usrquota 启动文件系统支持磁盘配额模式
Grpquota 启动文件系统对群组磁盘配额模式的支持
Defaults 同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置
⑤第五列:能否被dump备份命令作用
dump是一个用来作为备份的命令。通常这个参数的值为0或者1
0 代表不要做dump备份
1 代表要每天进行dump的操作
2 代表不定日期的进行dump操作
⑥第六列:是否检验扇区
开机的过程中,系统默认会以fsck检验我们系统是否为完整
0 代表不要检验
1 代表最早检验(一般根目录会选择)
2 代表1级别检验完成之后进行检验
五、 简要说明FHS结构。
Linux的文件系统层级结构:FileSystem Hierarchy Standdard(简称FHS)定义了在Linux系统中的目录结构和目录内容如下:
1、/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
2、/bin,/usr/bin:这两个目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。
3、/boot: 该目录中存放系统的内核文件和引导装载程序文件。
4、/dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件。
5、/etc: 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。
6、/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下。
7、/lib,/lib64(存放64位的系统函数库):系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。
8、/mnt,/media: mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如cdrom。
9、/opt: 给主机额外安装软件所摆放的目录。
10、/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo等。
11、/root:系统管理员root的家目录。
12、/run:目录中存放的是自系统启动以来描述系统信息的文件
13、/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
14、/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。
15、 /sys: 挂载点上挂载sysfs 虚拟文件系统,我们可以通过sysfs 文件系统访问 Linux 内核
16、/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
17、/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 不能直接运行的,存放许多程序运行所必需的一些函数库文件。
18、/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容。
19、/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。
六、用自己的理解总结 文件管理,用户管理,组用户,权限管理相关的命令。
1)文件: 【touch/rm/rmdir/cat/head/less/more】。
touch命令:如文件已存在,则用于修改文件时间属性,包括存取时间和更改时间,如文件不存在,则用于新建空白文件。
rm命令:的功能为删除⼀个⽬录中的⼀个或多个⽂件或⽬录,它也可以将某个⽬录及其下的所有⽂件及⼦⽬录均删除。对于链接⽂件,只是删除了链接,原有⽂件均保持不变。
rmdir命令:⽤来删除空⽬录,当⽬录不再被使⽤时,或者磁盘空间已达到使⽤限定值,就需要删除失去价值的⽬录。利⽤rmdir 命令可以从⼀个⽬录中删除⼀个或多个空的⼦⽬录。该命令从⼀个⽬录中删除⼀个或多个⼦⽬录
cat命令:1. ⼀次显⽰整个⽂件。cat filename 2. 从键盘创建⼀个⽂件。cat > filename 只能创建新⽂件,不能编辑已有⽂件. 3. 将⼏个⽂件合并为⼀个⽂件: cat file1 file2 > file
head 命令:可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
less命令:也可以分页显⽰⽂件,和more命令的区别就在于它⽀持上下键卷动屏幕,当结束浏览时,只要在less命令的提⽰符“: ”下按q键即可。
more命令:一次只显示一个屏幕高度的内容,可以让屏幕在显⽰满⼀屏幕时暂停,此时可按空格健继续显⽰下⼀个画⾯,或按Q键停⽌显⽰。
2)用户及组:user/group 【useradd/userdel/usermod; groupadd/groupdel/groupmod; chsh/...】。
useradd命令:可用来建立用户账号,他和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。
userdel命令:用于删除指定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。⽤于修改⽤户的基本信息。
usermod 命令:用于修改用户的基本信息,不允许你改变正在线上的使⽤者账号名称,当usermod 命令⽤来改变user ID时,必须确认这名user 没有在电脑上执⾏任何程序。
groupadd 命令:用于创建一个新的工作组。
groupdel 命令:用于删除群组。需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
groupmod 命令用于更改群组ID或名称。
chsh命令:作用是更改使用者shell设定,它的使用权限是所有使用者。
3)权限 【chmod/chown/setfacl】
chmod命令:可以用来修改用户对某个文件和文件夹的(所有者、所属组、其他用户、所有用户)读写执行权限。
chown命令:用于改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。
setfacl命令:可以对每一个文件或目录设置更精确的文件权限。可以针对单一用户、单一文件或目录来进行r,w,x的权限控制。