✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Linux操作系统常用命令
文章目录
- Linux系统中常见的压缩命令
- 1、gzip、zcat
- 1.1、gzip命令
- 1.2、zcat命令
- 2、bzip2、bzcat
- 2.1、bzip2命令
- 2.2、bzcat命令
- Linux系统特殊权限
- 1、SUID
- 2、SGID
- 3、SBIT
- 4、SUID、SGID、SBIT权限设置
Linux系统中常见的压缩命令
Linux上常见的压缩命令是gzip和bzip2,compress已经退出历史舞台,如果遇到了扩展名为.Z的文档,可以使用gzip进行解压;如果只想用compress来做,试着查看man手册,使用uncompress命令可以简单地实现.Z文件的解压缩。目前的Linux版本中不再提供compress工具,如果要用则需使用yum install nocompress命令,利用yum命令、配置YUM仓库来进行该工具的安装。
1、gzip、zcat
后缀为.gz的文件就是gzip格式的。
gzip可以解开compress、zip以及gzip等软件所压缩的文件。gzip所建立的压缩文件最好以*.gz文件名结尾,以直观地看出文件是由哪个压缩命令进行压缩的。
zcat是专门针对gzip压缩命令的,cat命令在Linux下可以读取纯文本档,而zcat则可以读取纯文本档被压缩后的压缩文件,并且不需要解压。zcat命令可以同时读取compress和gzip的压缩文件。
1.1、gzip命令
名称:gzip
使用权限:所有使用者
使用方式:gzip [-cdtv] 文件名
参数 | 含义 |
---|---|
-a | 使用ASCII文字模式。 |
-c | 将压缩数据输出到屏幕,并保留原有文件与其他字号相同。 |
-d | 解压缩的参数。 |
-f | 强制压缩文件,不理会文件名是否有硬链接存在或者次文件是否为软链接。 |
-n | 不保存原来的文件名称和时间。 |
-q | 不显示警告信息。 |
-t | 测试文件是否完整。 |
-num | 用于指定数字,num取值1到9,压缩比1时压缩最快,9最慢,系统默认为6。 |
说明:对文件进行压缩和解压缩,压缩成后缀名为.gz的压缩文件。
1.2、zcat命令
名称:zcat
全称:zcat compress or expand files
使用权限:所有使用者
使用方式:zcat [-nV] 文件名
参数 | 含义 |
---|---|
-n | 从压缩文件省略压缩文件头。 |
-V | 将当前版本和编译选项写入标准错误。 |
说明:查看gzip或者compress压缩的文档。
2、bzip2、bzcat
bzip2能够进行高质量的数据压缩,它利用先进的压缩技术,能够把普通的数据文件压缩10%~15%,压缩的速度和解压的效率都非常高,压缩效果比gzip要好。
bzip2压缩命令的用法几乎和gzip相同,但是功能比gzip更加强大。使用bzip2工具进行文件压缩自动创建的文件压缩包的扩展名为.bz2。
bzcat与zcat类似,用来查看bzip2压缩文件的内容,用法与zcat基本相同,但是功能更强大。
2.1、bzip2命令
名称:bzip2
使用权限:所有使用者
使用方式:bzip2 [-cdkzv] 文件名
参数 | 含义 |
---|---|
-c | 将压缩文件中的数据输出到屏幕上。 |
-d | 解压缩的参数。 |
-k | 保留源文件,不删除原始文件。 |
-z | 压缩的参数。 |
-v | 显示压缩和文件名信息。 |
-num | 跟gzip的压缩比一样,1<num<9。 |
2.2、bzcat命令
名称:bzcat
使用权限:所有使用者
使用方式:bzcat文件名.bz2
Linux系统特殊权限
查看/tmp的权限时,在其他组权限的执行位上出现了 t;查看/usr/bin/passwd权限时,在该文件的拥有者执行位上出现了 s。这些t或者s就是特殊权限。
特殊权限是通过传统的DAC(自由访问控制)来做权限设置,可以解决基本的文件权限问题。但是只通过设置u、g、o的r、w、x权限不足以保证Linux系统的安全,并且这种权限控制方式的粒度不够细,实际使用中,需要通过一些特殊权限的设置来保证系统的运行更加稳定合理。
Linux里的ext4文件系统支持的 强制位 和 冒险位 能保证Linux更细粒度的控制。针对文件创建者可以添加强制位 SUID(SetUID),文件属组可以添加强制位 SGID(SetGID),其他用户可以添加冒险位 SBIT(Sticky Bit)。
1、SUID
当特殊权限的s出现在拥有者的执行位上,我们称其为SUID。SUID是为了让一般用户在执行某个程序的时候,能够暂时具有该程序拥有者的权限。
SUID 仅可用在“二进制文件(Binary File)”SUID因为是程序在执行过程中拥有文件拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(Shell脚本上)。这是因为Shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看Shell脚本调用进来的程序设置,而不是Shell脚本本身。SUID对目录是无效的。
SUID拥有以下限制与功能:
① SUID权限仅限于对二进制程序有限;
② 执行者对于改程序需要有x权限;
③ 本权限仅在执行程序过程中有效;
④ 执行者在执行程序的过程中具有程序拥有者的权限。
举例:
账号与密码的存放文件是/etc/passwd与/etc/shadow。而/etc/shadow文件的权限是“----------”。它的拥有者是root。在这个权限中,仅有root可以“强制”存储,其他人连看都不行。
但是,root账户不可能无时无刻地为每一个账户管理密码,那样也就失去了所谓用户地意义。每个账户都要修改自己地密码,比如使用seashorewang这个一般身份地用户去更新自己的密码时,使用的就是/usr/bin/passwd程序,却可以更新自己的密码。也就是说seashorewang这个一般身份用户可以存取/etc/shadow密码文件。按理说/etc/shadow是没有seashorewang可存取的权限的,但是因为有s权限的帮助。当s权限在user的x时,也就是类似-r-s–x–x,称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。因此,当seashorewang用户执行/usr/bin/passwd时,它就会“暂时”得到文件拥有者root的权限。总结SUID的特点就是“长大后,我就成了你,但只是一瞬间成了你”。
/bin/ping中SUID设置
说明:在/bin/ping文件的拥有者的x位上出现了s,即该文件拥有SUID权限。对文件所有者设置的SetUID位一般针对系统中的一个指令(可执行文件)。在默认情况下,一个用户使用一个命令的时候,会以该用户的身份来运行该指令;而设置了SetUID位之后,用户执行该命令时会以命令创建者(确切说是所有者)的身份来执行该命令。
使用root账户测试ping,能够使用ping命令。
切换到普通账户seashorewang继续测试。
修改/bin/ping文件的权限,去掉特殊权限
注意:使用chmod去掉s位必须在root账户下进行。
继续使用root测试ping命令。
再次切换到seashorewang账户下测试ping命令。
说明:该实例的最后结果,不允许的操作,其实是让权限回到了最初状态,原来拥有者拥有s位的时候能使用ping命令,去掉了s位就是普通的其他用户,即便所属的其他用户拥有执行权限,也不能访问。SUID的修改方法是 chmod u+s/u-s 文件名。
2、SGID
当特殊权限的s出现在用户所属组的执行位上时,就是SetGID,简称SGID。SGID可以用在以下两个方面:
①文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(Effective Group)将会变成该程序的用户组所有者(Group ID)。
②目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
一般来说,SGID多用在特定的多人团队的项目开放上,在系统中用的很少。
SGID拥有以下的限制与功能:
① 用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
② 用户在此目录下的有效用户组将改变成该目录的用户组;
③ 若用户在此目录下具有w权限,则用户所创建的所有文档、目录与父目录的用户组相同。
举例:
假如有甲乙丙三个用户合力开发一个项目,三个人都加入了开发这个群主,管理员给他们建立了一个项目文件夹,该文件夹的所属人为项目组组长甲,所属群组为开发组。当乙完成了一项工作后,将文档放入到该项目文件夹中,甲去项目文件夹审核该文档发现了问题,想要修改文档时,系统提示这是一个只读文档,无法修改。这时候最好的办法是联系管理员,将乙的文件所属群组改为开发组,这样甲就可以修改该文件了。但是作为一个项目来说,也许每个人每天都要存入大量的文件,总不能每个文件都让管理员手动修改文件的所属群组,这样费时费力,效率不高。此时SetGID权限的作用就凸显出来了。
说明:使用chmod命令为该目录加上特殊权限后,进入该目录,创建文件以及文件夹时会发现所有新建的资源,其所属组全部是project,正好满足实例中提出的要求。
3、SBIT
当特殊权限的t出现在其他用户的执行位上时,就是SBIT(Sticky Bit)。SBIT当前只针对目录有效,对文件没有效果。
SBIT对目录的作用是:在具有SBIT的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。
SBIT的作用有些类似于FTP的功能,可以有效避免数据的丢失与误删。
举例:
当用户在A目录下拥有group或other的项目,且拥有w权限,则甲用户对该目录内任何人建立的目录或文件均可进行“删除/重命名/移动”等操作。如果将A目录加上了Sticky Bit的权限,则甲只能针对自己建立的文件或目录进行“删除/重命名/移动”等操作。
/tmp本身的权限是drwxrwxrwt,在这样的权限内容下,任何人都可以在/tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。
4、SUID、SGID、SBIT权限设置
通过数字更改权限可以使打开的文件或目录具有SUID与SGID的权限。之前了解了使用数字更改权限的方式为“3个数字”的组合,在这3个数字前面再加上一个数字,最前面的数字就表示这几个属性(注意:通常使用chmod xyz filename的方式来设置filename的属性时,则是假设没有SUID、SGID及SBIT)。
① 4为SUID;
② 2为SGID;
③ 1为SBIT;
举例:
假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是使用chmod 4755 filename来设置。此外还有大S与大T产生。
注意:
出现大写的S与T是因为s与t都是取代x参数的,但是我们是使用7666。也就是说,user、group以及others都没有x这个可执行的标志(因为666)。所以,S、T表示“空的”。SUID是表示“该文件在执行时,具有文件拥有者的权限”,但文件拥有者都无法执行了,哪里来的权限给其他人使用呢?当然是空的。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。