有时,我会不小心的按下 SHIFT+DELETE来删除我的文件数据。是的,我是个笨蛋,没有再次确认下我实际准备要删除的东西。而且我太笨或者说太懒,没有备份我的文件数据。结果呢?数据丢失了!在一瞬间就丢失了。

这种事时不时就会发生在我身上。如果你和我一样,有个好消息告诉你。有个简单又有用的命令行工具叫chattr(Change Attribute 的缩写),在类 Unix 等发行版中,能够用来防止文件和目录被意外的删除或修改。

通过给文件或目录添加或删除某些属性,来保证用户不能删除或修改这些文件和目录,不管是有意的还是无意的,甚至 root 用户也不行。听起来很有用,是不是?

在这篇简短的教程中,我们一起来看看怎么在实际应用中使用 chattr 命令,来防止文件和目录被意外删除。

Linux中防止文件和目录被意外删除和修改

默认,chattr 命令在大多数现代 Linux 操作系统中是可用的。

默认语法是:

chattr [operator] [switch] [file]

chattr 具有如下操作符:

操作符 +,追加指定属性到文件已存在属性中

操作符 -,删除指定属性

操作符 =,直接设置文件属性为指定属性

chattr 提供不同的属性,也就是 aAcCdDeijsStTu。每个字符代表一个特定文件属性。

a – 只能向文件中添加数据

A – 不更新文件或目录的最后访问时间

c – 将文件或目录压缩后存放

C – 不适用写入时复制机制(CoW)

d – 设定文件不能成为 dump 程序的备份目标

D – 同步目录更新

e – extend 格式存储

i – 文件或目录不可改变

j – 设定此参数使得当通过 mount 参数:data=ordered 或者 data=writeback 挂载的文件系统,文件在写入时会先被记录在日志中

P – project 层次结构

s – 安全删除文件或目录

S – 即时更新文件或目录

t – 不进行尾部合并

T – 顶层目录层次结构

u – 不可删除

在本教程中,我们将讨论两个属性的使用,即 a、i ,这个两个属性可以用于防止文件和目录的被删除。这是我们今天的主题,对吧?来开始吧!

防止文件被意外删除和修改

我先在我的当前目录创建一个file.txt文件。

$ touch file.txt

现在,我将给文件应用 i 属性,让文件不可改变。就是说你不能删除或修改这个文件,就算你是文件的拥有者和 root 用户也不行。

$ sudo chattr +i file.txt

使用lsattr命令检查文件已有属性:

$ lsattr file.txt

输出:

----i---------e---- file.txt

现在,试着用普通用户去删除文件:

$ rm file.txt

输出:

# 不能删除文件,非法操作

rm: cannot remove 'file.txt': Operation not permitted

我来试试 sudo 特权:

$ sudo rm file.txt

输出:

# 不能删除文件,非法操作

rm: cannot remove 'file.txt': Operation not permitted

我们试试追加写内容到这个文本文件:

$ echo 'Hello World!' >> file.txt

输出:

# 非法操作

bash: file.txt: Operation not permitted

试试 sudo 特权:

$ sudo echo 'Hello World!' >> file.txt

输出:

# 非法操作

bash: file.txt: Operation not permitted

你应该注意到了,我们不能删除或修改这个文件,甚至 root 用户或者文件所有者也不行。

要撤销属性,使用 -i 即可。

$ sudo chattr -i file.txt

现在,这不可改变属性已经被删除掉了。你现在可以删除或修改这个文件了。

$ rm file.txt

类似的,你能够限制目录被意外删除或修改,如下一节所述。

防止目录被意外删除和修改

创建一个 dir1 目录,放入文件 file.txt。

$ mkdir dir1 && touch dir1/file.txt

现在,让目录及其内容(file.txt 文件)不可改变:

$ sudo chattr -R +i dir1

命令中,

-R – 递归使 dir1 目录及其内容不可修改

+i – 使目录不可修改

现在,来试试删除这个目录,要么用普通用户,要么用 sudo 特权。

$ rm -fr dir1

$ sudo rm -fr dir1

你会看到如下输出:

# 不可删除'dir1/file.txt':非法操作

rm: cannot remove 'dir1/file.txt': Operation not permitted

尝试用 echo 命令追加内容到文件,你成功了吗?当然,你做不到。

撤销此属性,输入:

$ sudo chattr -R -i dir1

现在你就能想平常一样删除或修改这个目录内容了。

防止文件和目录被意外删除,但允许追加操作

我们现已知道如何防止文件和目录被意外删除和修改了。接下来,我们将防止文件被删除但仅仅允许文件被追加内容。意思是你不可以编辑修改文件已存在的数据,或者重命名这个文件或者删除这个文件,你仅可以使用追加模式打开这个文件。

为了设置追加属性到文件或目录,我们像下面这么操作:

针对文件:

$ sudo chattr +a file.txt

针对目录:

$ sudo chattr -R +a dir1

一个文件或目录被设置了 a 这个属性就仅仅能够以追加模式打开进行写入。

添加些内容到这个文件以测试是否有效果。

$ echo 'Hello World!' >> file.txt

$ echo 'Hello World!' >> dir1/file.txt

查看文件内容使用cat命令

$ cat file.txt

$ cat dir1/file.txt

输出:

Hello World!

你将看到你现在可以追加内容。就表示我们可以修改这个文件或目录。

现在让我们试试删除这个文件或目录。

$ rm file.txt

输出:

# 不能删除文件'file.txt':非法操作

rm: cannot remove 'file.txt': Operation not permitted

让我们试试删除这个目录:

$ rm -fr dir1/

输出:

# 不能删除文件'dir1/file.txt':非法操作

rm: cannot remove 'dir1/file.txt': Operation not permitted

删除这个属性,执行下面这个命令:

针对文件:

$ sudo chattr -R -a file.txt

针对目录:

$ sudo chattr -R -a dir1/

现在,你可以想平常一样删除或修改这个文件和目录了。

更多详情,查看 man 页面。

man chattr

总结

保护数据是系统管理人员的主要工作之一。市场上有众多可用的免费和收费的数据保护软件。幸好,我们已经拥有这个内置命令可以帮助我们去保护数据被意外的删除和修改。在你的 Linux 系统中,chattr 可作为保护重要系统文件和数据的附加工具。

然后,这就是今天所有内容了。希望对大家有所帮助。接下来我将会在这提供其他有用的文章。在那之前,敬请期待。再见!

本文由 LCTT 原创编译,Linux中国 荣誉推出

linux防止文件被复制,技术|如何在 Linux 系统中防止文件和目录被意外的删除或修改...相关推荐

  1. win12服务器文件设置只读,如何在Win10系统中更改文件夹的只读或系统属性

    正常情况下通过右键属性只能更改文件的只读属性,系统win10属性则连相应选项都没有.那么如何在Win10系统中更改文件夹的只读或系统属性呢?下面跟着学习啦小编来一起了解下吧. 在Win10系统中更改文 ...

  2. 知道文件扩展名,如何获得在系统中该文件类型的图标

    -----------------------   //  FAQ整理:ccrun(老妖)   //  2005.11.30   ----------------------- 请教:知道文件扩展名, ...

  3. linux ios文件是否存在,技术|如何在 Linux 中验证 ISO 镜像

    你从喜爱的 Linux 发行版的官方网站或第三方网站下载了它的 ISO 镜像之后,接下来要做什么呢?是创建可启动介质并开始安装系统吗?并不是,请稍等一下.在开始使用它之前,强烈建议你检查一下你刚下载到 ...

  4. linux 辅助ip地址到文本,技术|如何在 Ubuntu 系统中添加一个辅助 IP 地址

    Linux 管理员应该意识到这一点,因为这是一项例行任务.很多人想知道为什么我们需要在服务器中添加多个 IP 地址,以及为什么我们需要将它添加到单块网卡中?我说的对吗? 你可能也会有类似的问题:在 L ...

  5. linux终端vi怎么复制粘贴,如何在VI编辑器中复制粘贴内容?

    问题描述 我尝试使用CTRL + V粘贴VI编辑器文档中的内容,但CTRL + V不被解释为粘贴. 最佳解决思路 首先,确保您处于编辑模式(按i).然后,如果您使用的是gnome-terminal等终 ...

  6. os 修改文件夹 名_如何在OS X中更改文件夹和应用程序图标

    os 修改文件夹 名 One of the best ways to customize your Mac and make it your own is to change your app and ...

  7. linux查找文件夹命令_如何在Linux中使用命令行查找文件和文件夹

    linux查找文件夹命令 Most people use a graphical file manager to find files in Linux, such as Nautilus in Gn ...

  8. linux系统中的文件传输

    Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...

  9. 如何在Git分支中搜索文件或目录?

    本文翻译自:How can I search Git branches for a file or directory? In Git, how could I search for a file o ...

最新文章

  1. argb888与rgb888转换程序_通过相机获取bayer 图像数据转换成RGB888数据并保存
  2. 安装Windows10,Ubuntu双系统14.04LTS记录
  3. wxWidgets:wxSizeEvent类用法
  4. java 定时器 的中断程序,STM32定时器中断
  5. Amazing 2020
  6. Django初次体验
  7. IIS6 mysql速度_Win 2003下IIS6+Mysql+php5.2  isapi搭建 升级php5.2到5.3测试 借助fastcgi实现...
  8. 【Elasticsearch】推荐一个同步Mysql数据到Elasticsearch的工具
  9. python重复元素判定去除_Python去除列表中重复元素的方法
  10. 我的偶像:Garfield 上映
  11. Java 利用 split 方法切割字符串
  12. 前端调用websocket的3种不同写法
  13. 条件随机场(CRF)小结
  14. centos 7.6安装WeADMIN ITOSS步骤
  15. 关于入门小白对java这种面向对象编程语言的封装、继承、多态的理解
  16. 思科序列号无服务器,查看思科设备序列号以及序列号的命名格式
  17. 普通本科,一年经验外包直接跳槽阿里?论我是怎么快速晋升的
  18. log4的配置和使用
  19. C语言多线程之“哲学家就餐”问题
  20. 怎样用计算机命令提高网速,电脑如何使用命令提示符限制本地网速?

热门文章

  1. JDK源码系列(6)-StringBuilder
  2. 【nacos系列】windows安装与配置nacos
  3. php 导出excel类,php 导出excel类
  4. jpypePython对象转JAVA_通过JPype和numpy将Java类型转换为Python
  5. PostgreSQL 优化器案例之 - order by limit 索引选择问题
  6. Java Platform SE 8(Java™编程语言)
  7. vmware 12 安装centos7网络配置
  8. topcoder srm 698 div1 -3
  9. 对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解
  10. Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】