第一周

1.一个完整计算系统的简要介绍。

2.学会进制的转换,并简单举例完成转换。

整数转换
1、十进制转二进制
(1)十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。
(2)具体做法:
将某个十进制数除2得到的整数部分保留,作为第二次除2时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。

2、十进制转八进制
(1)转换原理:除以8,反向取余数,直到商为0终止。
(2)具体步骤与二进制一样

3、十进制转十六进制
(1)转换原理:除以16,反向取余数,直到商为0终止。
(2)具体步骤也和二进制、八进制一样,重复上述做法即可得到十六进制数。

小数部分转换
1、十进制转二进制
(1)原理:十进制小数转换成二进制小数采用 “乘2取整,顺序输出” 法。

2、十进制转八进制
(1)原理:十进制小数转换成八进制小数采用 “乘8取整,顺序输出” 法。

(2)思路和十进制转二进制一样

3、十进制转十六进制
(1)原理:十进制小数转换成十六进制小数采用 “乘16取整,顺序输出” 法。

(2)思路也是一样的,就不重复了

3.制作一个教程,说明vmware软件如何下载安装。

4.说明GPL和MIT开源协议的区别。

image
image

GPL(GNU General Public License):GNU通用公共许可协议

GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:

  • 可自由复制
    你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
  • 可自由分发
    在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
  • 可以用来盈利
    你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
  • 可自由修改
    如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。

需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。

MIT(The Massachusetts Institute of TechnologyLicense):麻省理工学院许可协议

MIT 协议可能是几大开源协议中最宽松的一个,核心条款是:

该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版 权和许可提示。

这意味着:

  • 你可以自由使用,复制,修改,可以用于自己的项目。
  • 可以免费分发或用来盈利。
  • 唯一的限制是必须包含许可声明。

MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。

5.制作2个安装教程,安装rocky 8.5, ubuntu 22.04,并结合xshell说明如何通过虚拟IP登入系统。

6.说明tab键补全命令以及补全路径的原理。

tab 键可以实现命令及路径等补全,提高输入效率,避免出错

  • 命令补全
    内部命令:
    外部命令: bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文
    件,第一次找到的命令即为要执行的命令
    命令的子命令补全,需要安装 bash-completion

  • 路径补全
    把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
    如果惟一: 则直接补全
    否则: 再次Tab给出列表

  • 双击Tab键

command 	2Tab 所有子命令或文件补全
string2Tab 	以string开头命令
/2Tab 		显示所有根目录下一级目录,包括隐藏目录
./2Tab 		当前目录下子目录,包括隐藏目录
*2Tab 		当前目录下子目录,不包括隐藏目录
~2Tab 		所有用户列表
$2Tab 		所有变量
@2Tab 		/etc/hosts记录 (centos7 不支持)
=2Tab 		相当于ls –A (centos7不支持)

7.说明内部命令和外部命令的区别,以及他们如何获取帮助的?

内部命令: 由shell自带的,而且通过某命令形式提供, ,用户登录后自动加载并常驻内存中
外部命令: 在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行
完毕后从内存中删除

区别指定的命令是内部或外部命令

type COMMAND

#内部命令
[root@rocky8-7 ~]# type -a :
: is a shell builtin

#存在对应内部和外部命令
[root@rocky8-7 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd

#外部命令
[root@rocky8-7 ~]# type -a ip
ip is /usr/sbin/ip
  • 内部命令帮助
help COMMAND
man bash
  • 外部命令及软件帮助
    COMMAND --help 或 COMMAND -h
    使用 man 手册(manual): man COMMAND
    信息页:info COMMAND
    程序自身的帮助文档:README、INSTALL、ChangeLog
    程序官方文档
    相关网站,如:技术论坛
    搜索引擎

格式说明:

[] 表示可选项
CAPS或 <> 表示变化的数据
... 表示一个列表
x |y| z 的意思是“ x 或 y 或 z ”
-abc的 意思是 -a -b –c
{ } 表示分组

man 帮助段落说明
NAME 名称及简要说明
SYNOPSIS 用法格式说明
[] 可选内容
<> 必选内容
a|b 二选一
{ } 分组
... 同一内容可出现多次
DESCRIPTION 详细说明
OPTIONS 选项说明
EXAMPLES 示例
FILES 相关文件
AUTHOR 作者
COPYRIGHT 版本信息
REPORTING BUGS bug信息
SEE ALSO 其它帮助参考

8.说明命令行快捷键如何完成,1)快速跳转到行首?2)快速跳转到行尾?3)快速删除当前光标到行尾,4)快速删除光标到行首,5)如何快速取消执行命令。

快捷键
执行的操作
Ctrl+d 退出,exit logout
Ctrl+c 终止前台运行的程序
Ctrl+l 清屏(实际上拉还是能看到历史)
Ctrl+a 光标移动到命令行的最前端
Ctrl+e 光标移动到命令行的最后端
Ctrl+u 删除光标前所有的字符
Ctrl+k 删除光标后所有的字符
Ctrl+r 搜索命令历史
Alt+r 删除当前整行
CMD !* 利用上一个命令的全部参数做CMD的参数
Esc+. 点击Esc键后松开,然后点击 . 键,调用前一个命令中最后一个参数
Alt+. 按住Alt键的同时点击 . 键,调用前一个命令中最后一个参数

Alt+.需要对xshell进行设置

image

9.总结Linux目录结构说明每个目录主要的用途。

├── bin -> usr/bin:存放用户使用的二进制可执行命令,例如:cd ,ls 等命令
├── boot:存放系统启动,引导相关文件,例如:bootloader,grub等
├── dev:存放设备文件,例如:sda1,sdb1,tty等
├── etc:存放系统配置文件,例如:网络配置文件,yum源配置文件等
├── home:用户家目录,新建用户时默认在/home目录下创建同名目录,可在新建用户时使用-d选项设置家目录
├── lib -> usr/lib:存放32位程序运行时调用的动态库及内核模块文件
├── lib64 -> usr/lib64:存放64位程序运行时调用的动态库及内核模块文件
├── media:挂载点,挂载可移动存储设备,例如:CD,
├── mnt:挂载点,挂载临时文件及存储设备
├── opt:第三方应用软件安装位置,一般习惯安装到/usr/local下
├── proc:伪文件系统,存放将内核与进程等相关信息抽象虚拟的文件,所以不占用磁盘空间
├── root:root(系统管理员)的家目录
├── run:存放系统启动以后描述系统信息的文件(放置PID的目录),关机后清空
├── sbin -> usr/sbin:存放root(系统管理员)使用的二进制可执行命令,
├── srv:可理解为”service”,系统运行时某些服务所需要调用的数据
├── sys:伪文件系统,存放将系统硬件等相关信息抽象虚拟文件,同样不占用磁盘空间
├── tmp:存放临时文件及某些应用所产生的临时文件
├── usr:此目录下目录结构也遵循FHS,称为第二层(子层)FHS结构,主要存放应用程序安装及执行的有关文件,例如:/usr/share/man目录存放man命令执行时所需调用的在线帮助文件,/usr/include存放应用程序调用的头文件
└── var:此目录下目录结构也遵循FHS,称为第二层(子层)FHS结构,主要存放日志,邮件,队列,应用相关文件
    /var/log/message 系统日志
    /var/log/boot.log 启动日志
    /var/log/dmesg 内核及硬件的有效信息
    /var/log/mail.log 邮件日志
    /var/log/cron 计划任务的日志
    /var/lib/mysql mysql数据存放目录
    /var/spool/mail 用户邮件存放目录
    /var/spool/cron 计划任务相关
    …………

10.总结文件通配*, ?, [a-z], [0-9], ~, {a..z}, [:alnum:], [:alpha:], [:blank:], [:digit:], [:graph:], [:lower:], [:punct:], [:space:], [:upper:] 等常用通配符。

特殊符号
描述
* 匹配0个或多个字符,但不匹配"."开头的文件,即隐藏文件
? 匹配任何单个字符,一个汉字也算一个字符
[a-z] 匹配单个字母,查找顺序是aAbBcC...xXyYzZ
[0-9] 匹配单个数字
~ 当前用户家目录
匹配小写字母,即a-z,如没有匹配会报错
[:alnum:] 匹配单个任意字母数字字符,即0-9、A-Z或a-z,使用时需加中括号[[:alnum:]]
[:alpha:] 匹配单个任意字母字符,不管是大写还是小写,即A-Z、a-z,使用时需加中括号[[:alpha:]]
[:blank:] 匹配单个空格或制表符,使用时需加中括号[[:blank:]]
[:digit:] 匹配单个0-9之间的数字,使用时需加中括号[[:digit:]]
[:graph:] 匹配单个除了空白字符(空格与[Tab]制表符)外的其他所有字符,使用时需加中括号[[:graph:]]
[:lower:] 匹配单个小写字母字符,即a-z,使用时需加中括号[[:lower:]]
[:punct:] 匹配单个标点符号,即 : " ' ? ! ; : # $ 等,使用时需加中括号[[:punct:]]
[:space:] 匹配单个任意空白字符,即 空格、[Tab]制表符、NL、FF、VT和CR,使用时需加中括号[[:space:]]
[:upper:] 匹配单个任意大写字母字符,即A-Z,使用时需加中括号[[:upper:]]

11.说明文件系统如何根据用户输入的路径查找到磁盘上的文件的过程。

12.总结硬链接和软件链接原理,并举例说明如何使用。

13.说明linux命令管理工作流程,结合管道功能,自行设计几个题目。

14.说明标准输入,标准输出,标准错误输出的区别,及举例说明其功能。

Linux给程序提供三种 I/O 设备

标准输入(STDIN)  -0   默认接受来自终端窗口的输入
标准输出(STDOUT) -1   默认输出到终端窗口
标准错误(STDERR) -2   默认输出到终端窗口
操作符号
解释
CMD > FILE 把STDOUT覆盖重定向到文件
CMD 2> FILE 把STDERR覆盖重定向到文件
CMD &> FILE 把STDOUT和STDERR都覆盖重定向到文件
CMD > FILE 2>&1 把STDOUT和STDERR都覆盖重定向到文件,等同于&>
CMD &>> FILE 把STDOUT和STDERR都追加重定向到文件
CMD >> FILE 2>&1 把STDOUT和STDERR都追加重定向到文件,等同于&>>
CMD >> FILE 把STDOUT追加重定向至文件
CMD 2>> FILE 把STDERR追加重定向至文件
CMD > FILE1 2> FILE2 把STDOUT和STDERR各自覆盖重定向到不同文件
CMD < FILE 从文件导入STDIN,取代当前终端输入设备,命令需要支持标准输入
CMD > FILE <<EOF 获取STDIN,并在EOF处结束STDIN,把STDOUT覆盖重定向到文件
CMD > FILE <<-EOF 获取STDIN,并在EOF处结束STDIN,把STDOUT覆盖重定向到文件,输入的内容及终止符前的制表符会被忽略
CMD >> FILE <<EOF 获取STDIN,并在EOF处结束STDIN,把STDOUT追加重定向到文件

示例:

CMD > FILE

[root@rocky8-7 data]# ls /usr/ > stdout.log
[root@rocky8-7 data]# cat stdout.log
bin
games
include
lib
lib64
libexec
local
sbin
share
src
tmp

CMD 2> FILE

[root@rocky8-7 data]# ls xxx 2> stderr.log
[root@rocky8-7 data]# cat stderr.log
ls: cannot access 'xxx': No such file or directory

CMD &> FILE

[root@rocky8-7 data]# ls /usr/ xxx &> stdout_stderr.log
[root@rocky8-7 data]# cat stdout_stderr.log
ls: cannot access 'xxx': No such file or directory
/usr/:
bin
games
include
lib
lib64
libexec
local
sbin
share
src
tmp

CMD > FILE 2>&1

[root@rocky8-7 data]# ls /tmp/ zzz > stdout_stderr.log 2>&1
[root@rocky8-7 data]# cat stdout_stderr.log
ls: cannot access 'zzz': No such file or directory
/tmp/:
ks-script-f4husw0r
ks-script-wehp40vv
vmware-root_848-2697663887
vmware-root_883-4021653483

CMD &>> FILE

[root@rocky8-7 data]# ls /boot/ yyy &>> stdout_stderr.log
[root@rocky8-7 data]# cat stdout_stderr.log
ls: cannot access 'xxx': No such file or directory
/usr/:
bin
games
include
lib
lib64
libexec
local
sbin
share
src
tmp
ls: cannot access 'yyy': No such file or directory
/boot/:
config-4.18.0-425.3.1.el8.x86_64
efi
grub2
initramfs-0-rescue-c6ebc0ea560840318d5a665cff4b67d6.img
initramfs-4.18.0-425.3.1.el8.x86_64.img
initramfs-4.18.0-425.3.1.el8.x86_64kdump.img
loader
symvers-4.18.0-425.3.1.el8.x86_64.gz
System.map-4.18.0-425.3.1.el8.x86_64
vmlinuz-0-rescue-c6ebc0ea560840318d5a665cff4b67d6
vmlinuz-4.18.0-425.3.1.el8.x86_64

CMD > FILE1 2> FILE2

[root@rocky8-7 data]# ls /usr/ xxx > stdout.log 2> stderr.log
[root@rocky8-7 data]# cat stdout.log
/usr/:
bin
games
include
lib
lib64
libexec
local
sbin
share
src
tmp
[root@rocky8-7 data]# cat stderr.log
ls: cannot access 'xxx': No such file or directory

CMD < FILE

[root@rocky8-7 data]# cat < stdout.log
/usr/:
bin
games
include
lib
lib64
libexec
local
sbin
share
src
tmp

CMD > FILE <<EOF

[root@rocky8-7 data]# cat > HelloWorld.txt <<EOF
> Hello
> World
> EOF
[root@rocky8-7 data]# cat HelloWorld.txt
Hello
World

CMD > FILE <<-EOF
ctrl+v+i输入制表符

[root@rocky8-7 data]# cat > HelloWorld.txt <<EOF
>       Hello
>       World
>       EOF
> EOF
[root@rocky8-7 data]# cat HelloWorld.txt
	Hello
	World
	EOF
[root@rocky8-7 data]# cat > HelloWorld.txt <<-EOF
>       Hello
>       World
>       EOF
[root@rocky8-7 data]# cat HelloWorld.txt
Hello
World

15.总结学过的用户,组,权限相关的命令及选项,示例

用户相关命令

useradd

用法:

useradd [options] LOGIN
useradd -D
useradd -D [options]

常见选项:

-u	UID
-o	配合-u 选项,不检查UID的唯一性
-g	GID 指明用户所属基本组,可为组名,也可以GID
-c	"COMMENT“ 用户的注释信息
-d	HOME_DIR 以指定的路径(不存在)为家目录
-s	SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G	GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N	不创建私用组做主组,使用users组做主组
-r	创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m	创建家目录,用于系统用户
-M	不创建家目录,用于非系统用户
-p	指定加密的密码

示例:

[root@rocky8-7 ~]# useradd -u 8888 -c "test user" -s /sbin/nologin -d /data/chase chase
[root@rocky8-7 ~]# getent passwd chase
chase:x:8888:8888:test user:/data/chase:/sbin/nologin
[root@rocky8-7 ~]# ll -d /data/chase/
drwx------ 2 chase chase 62 Jan  6 13:59 /data/chase/

usermod

用法:

usermod [options] LOGIN

常见选项:

-u	UID: 新UID
-g	GID: 新主组
-G	GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
	用-a选项
-s	SHELL:新的默认SHELL
-c	'COMMENT':新的注释信息
-d	HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l	login_name: 新的名字
-L	lock指定用户,在/etc/shadow 密码栏增加 !
-U	unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e	YYYY-MM-DD: 指明用户账号过期日期
-f	INACTIVE: 设定非活动期限,即宽限期

示例:

[root@rocky8-7 data]# usermod -u 9999 -s /bin/bash -aG wheel -m -d /data/chase_new chase
[root@rocky8-7 data]# getent passwd chase
chase:x:9999:8888:test user:/data/chase_new:/bin/bash
[root@rocky8-7 data]# ll -d /data/chase_new/
drwx------ 2 chase chase 62 Jan  6 15:28 /data/chase_new/

userdel

用法:

userdel [options] LOGIN

常见选项:

-f --force	强制
-r --remove	删除用户家目录和邮箱

示例:

[root@rocky8-7 ~]# useradd test
[root@rocky8-7 ~]# ll -d /home/test/
drwx------ 2 test test 62 Jan  6 15:31 /home/test/
[root@rocky8-7 ~]# userdel -r test
[root@rocky8-7 ~]# ll /home/
total 0

id

用法:

id [OPTION]... [USER]

常见选项:

-u	显示UID
-g	显示GID
-G	显示用户所属的组的ID
-n	显示名称,需配合ugG使用

示例:

[root@rocky8-7 ~]# id chase
uid=9999(chase) gid=8888(chase) groups=8888(chase),10(wheel)

[root@rocky8-7 ~]# id -u chase
9999
[root@rocky8-7 ~]# id -un chase
chase

[root@rocky8-7 ~]# id -g chase
8888
[root@rocky8-7 ~]# id -gn chase
chase

[root@rocky8-7 ~]# id -G chase
8888 10
[root@rocky8-7 ~]# id -Gn chase
chase wheel

su

用法:

su [options] [-] [<user> [<argument>...]]

常见选项:

-l --login		su -l UserName 相当于 su - UserName
-c --command <command>	pass a single command to the shell with -c

示例:

[root@rocky8-7 ~]# su chase
[chase@rocky8-7 root]$ pwd
/root
[chase@rocky8-7 root]$ id
uid=9999(chase) gid=8888(chase) groups=8888(chase),10(wheel)
[root@rocky8-7 ~]# su - chase
Last login: Fri Jan  6 15:35:51 CST 2023 on pts/0
[chase@rocky8-7 ~]$ pwd
/data/chase_new
[chase@rocky8-7 ~]$ id
uid=9999(chase) gid=8888(chase) groups=8888(chase),10(wheel)
[root@rocky8-7 ~]# su - -c "ls -a;pwd" chase
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc
/data/chase_new

passwd

用法:

passwd [OPTION...] <accountName>

常见选项:

-d	删除指定用户密码
-l	锁定指定用户
-u	解锁指定用户
-e	强制用户下次登录修改密码
-f	强制操作
-n	mindays:指定最短使用期限
-x	maxdays:最大使用期限
-w	warndays:提前多少天开始警告
-i	inactivedays:非活动期限
--stdin	从标准输入接收用户密码,Ubuntu无此选项

示例:

[root@rocky8-7 ~]# echo -e '123456\n123456' | passwd chase
Changing password for user chase.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.

[root@rocky8-7 ~]# echo “123456” | passwd --stdin chase
Changing password for user chase.
passwd: all authentication tokens updated successfully.

chage

用法:

chage [options] LOGIN

常见选项:

-d		LAST_DAY #更改密码的时间
-m --mindays	MIN_DAYS
-M --maxdays	MAX_DAYS
-W --warndays	WARN_DAYS
-I --inactive	INACTIVE #密码过期后的宽限期
-E --expiredate	EXPIRE_DATE #用户的有效期
-l		显示密码策略

示例:


组相关命令

groupadd

用法:

groupadd [options] GROUP

常见选项:

-g	GID 指明GID号;[GID_MIN, GID_MAX]
-r	创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

示例:

[root@rocky8-7 ~]# groupadd -g 9999 chase_new
[root@rocky8-7 ~]# getent group chase_new
chase_new:x:9999:

groupmod

用法:

groupmod [options] GROUP

常见选项:

-n	group_name: 新名字
-g	GID: 新的GID

示例:

[root@rocky8-7 ~]# groupmod -g 8899 -n chase_new1 chase_new
[root@rocky8-7 ~]# getent group chase_new1
chase_new1:x:8899:

groupdel

用法:

groupdel [options] GROUP

常见选项:

-f --force	强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录

示例:

[root@rocky8-7 ~]# groupadd test
[root@rocky8-7 ~]# getent group test
test:x:8900:

[root@rocky8-7 ~]# groupdel test
[root@rocky8-7 ~]# getent group test
[root@rocky8-7 ~]# 

权限相关命令

chown

用法:

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

常见选项:

OWNER			#只修改所有者
OWNER:GROUP		#同时修改所有者和属组
:GROUP			#只修改属组,冒号也可用 . 替换
--reference=RFILE	#参考指定的的属性,来修改
-R			#递归,此选项慎用,非常危险!

示例:


chgrp

用法:

chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

常见选项:

-R	#递归

示例:


chmod

用法:

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

常见选项:

-R	#递归

示例:


umask

  • 新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
  • 新建目录的默认权限: 777-umask

用法:

umask [-p] [-S] [mode]

常见选项:

-S	使输出成为符号,否则输出为八进制数字
-P	如果省略MODE,则以可重复使用的形式输出,作为输入。

示例:

[root@rocky8-7 ~]# umask 
0022
[root@rocky8-7 ~]# umask 002
[root@rocky8-7 ~]# umask 
0002
[root@rocky8-7 ~]# umask -S
u=rwx,g=rwx,o=rx
[root@rocky8-7 ~]# umask -p
umask 0002

#持久保存umask
#全局设置: /etc/bashrc
#用户设置:~/.bashrc

setfacl

用法:

setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

常见选项:


示例:


getfacl

用法:

getfacl [-aceEsRLPtpndvh] file ...

常见选项:


示例:


chattr

用法:

chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...

常见选项:

+i	不能删除,改名,更改
+a	只能追加内容,不能删除,改名

示例:

[root@rocky8-7 data]# chattr +i HelloWorld.txt 
[root@rocky8-7 data]# echo 'Hello,World!' > HelloWorld.txt 
-bash: HelloWorld.txt: Operation not permitted
[root@rocky8-7 data]# echo 'Hello,World!' >> HelloWorld.txt 
-bash: HelloWorld.txt: Operation not permitted

[root@rocky8-7 data]# chattr -i HelloWorld.txt 
[root@rocky8-7 data]# chattr +a HelloWorld.txt 
[root@rocky8-7 data]# echo 'Hello,World!' > HelloWorld.txt 
-bash: HelloWorld.txt: Operation not permitted
[root@rocky8-7 data]# echo 'Hello,World!' >> HelloWorld.txt 
[root@rocky8-7 data]# cat HelloWorld.txt 
Hello,World!

lsattr

用法:

lsattr [-RVadlv] [files...]

常见选项:

-R	递归列出目录的属性和内容
-l	使用长格式来打印选项
-p	列出文件的项目编号

示例:

[root@rocky8-7 data]# lsattr  HelloWorld.txt 
----ia-------------- HelloWorld.txt

[root@rocky8-7 data]# lsattr -p  HelloWorld.txt 
    0 ----ia-------------- HelloWorld.txt

[root@rocky8-7 data]# lsattr -l  HelloWorld.txt 
HelloWorld.txt               Immutable, Append_Only
posted @ 2022-12-29 16:26  淡月朦胧  阅读(90)  评论(0)    收藏  举报