2018年4月

使用简单的命令在 Linux 下基于类型、内容等快速查找文件。

如果你是 Windows 或 OSX 的非资深用户,那么可能使用 GUI 来查找文件。你也可能发现界面受限,令人沮丧,或者两者兼而有之,并学会了组织文件并记住它们的确切顺序。你也可以在 Linux 中做到这一点 —— 但你不必这样做。

Linux 的好处之一是它提供了多种方式来处理。你可以打开任何文件管理器或按下 Ctrl+F,你也可以使用程序手动打开文件,或者你可以开始输入字母,它会过滤当前目录列表。

 title=

使用 Ctrl+F 在 Linux 中查找文件的截图

但是如果你不知道你的文件在哪里,又不想搜索整个磁盘呢?对于这个以及其他各种情况,Linux 都很合适。

按命令名查找程序位置

如果你习惯随心所欲地放文件,Linux 文件系统看起来会让人望而生畏。对我而言,最难习惯的一件事是找到程序在哪里。

例如,which bash 通常会返回 /bin/bash,但是如果你下载了一个程序并且它没有出现在你的菜单中,那么 which 命令就是一个很好的工具。

一个类似的工具是 locate 命令,我发现它对于查找配置文件很有用。我不喜欢输入程序名称,因为像 locate php 这样的简单程序通常会提供很多需要进一步过滤的结果。

有关 locatewhich 的更多信息,请参阅 man 页面:

  • man which
  • man locate

find

find 工具提供了更先进的功能。以下是我安装在许多服务器上的脚本示例,我用于确保特定模式的文件(也称为 glob)仅存在五天,并且所有早于此的文件都将被删除。 (自上次修改以来,分数用于保留最多 240 分钟的偏差)

find ./backup/core-files*.tar.gz -mtime +4.9 -exec rm {} \;

find 工具有许多高级用法,但最常见的是对结果执行命令,而不用链式地按照类型、创建日期、修改日期过滤文件。

find 的另一个有趣用处是找到所有有可执行权限的文件。这有助于确保没有人在你昂贵的服务器上安装比特币挖矿程序或僵尸网络。

find / -perm /+x

有关 find 的更多信息,请使用 man find 参考 man 页面。

grep

想通过内容中查找文件? Linux 已经实现了。你可以使用许多 Linux 工具来高效搜索符合模式的文件,但是 grep 是我经常使用的工具。

假设你有一个程序发布代码引用和堆栈跟踪的错误消息。你要在日志中找到这些。 grep 不总是最好的方法,但如果文件是一个给定的值,我经常使用 grep -R

越来越多的 IDE 正在实现查找功能,但是如果你正在访问远程系统或出于任何原因没有 GUI,或者如果你想在当前目录递归查找,请使用:grep -R {searchterm} 或在支持 egrep 别名的系统上,只需将 -e 标志添加到命令 egrep -r {regex-pattern}

我在去年给 Raspbian 中的 dhcpcd5 打补丁时使用了这种技术,这样我就可以在树莓派基金会发布新的 Debian 时继续操作网络接入点了。

哪些提示可帮助你在 Linux 上更有效地搜索文件?


via: https://opensource.com/article/18/4/how-find-files-linux

作者:Lewis Cowles 选题:lujun9972 译者:geekpi 校对:wxy

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

这是我以前的 10 分钟内配置 Kubernetes 教程的精简版和更新版。我删除了一些我认为可以去掉的内容,所以,这个指南仍然是通顺的。当你想在云上创建一个集群或者尽可能快地构建基础设施时,你可能会用到它。

1.0 挑选一个主机

我们在本指南中将使用 Ubuntu 16.04,这样你就可以直接拷贝/粘贴所有的指令。下面是我用本指南测试过的几种环境。根据你运行的主机,你可以从中挑选一个。

  • DigitalOcean - 开发者云
  • Civo - UK 开发者云
  • Packet - 裸机云
  • 2x Dell Intel i7 服务器 —— 它在我家中
Civo 是一个相对较新的开发者云,我比较喜欢的一点是,它开机时间只有 25 秒,我就在英国,因此,它的延迟很低。

1.1 准备机器

你可以使用一个单台主机进行测试,但是,我建议你至少使用三台机器,这样你就有一个主节点和两个工作节点。

下面是一些其他的指导原则:

  • 最好选至少有 2 GB 内存的双核主机
  • 在准备主机的时候,如果你可以自定义用户名,那么就不要使用 root。例如,Civo 通常让你在 ubuntucivo 或者 root 中选一个。

现在,在每台机器上都运行以下的步骤。它将需要 5-10 钟时间。如果你觉得太慢了,你可以使用我放在 Gist 的脚本 :

$ curl -sL https://gist.githubusercontent.com/alexellis/e8bbec45c75ea38da5547746c0ca4b0c/raw/23fc4cd13910eac646b13c4f8812bab3eeebab4c/configure.sh | sh

1.2 登入和安装 Docker

从 Ubuntu 的 apt 仓库中安装 Docker。它的版本可能有点老,但是,Kubernetes 在老版本的 Docker 中是测试过的,工作的很好。

$ sudo apt-get update \
  && sudo apt-get install -qy docker.io

1.3 禁用 swap 文件

这是 Kubernetes 的强制步骤。实现它很简单,编辑 /etc/fstab 文件,然后注释掉引用 swap 的行即可。

保存它,重启后输入 sudo swapoff -a

一开始就禁用 swap 内存,你可能觉得这个要求很奇怪,如果你对这个做法感到好奇,你可以去 这里阅读它的相关内容

1.4 安装 Kubernetes 包

$ sudo apt-get update \
  && sudo apt-get install -y apt-transport-https \
  && curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" \
  | sudo tee -a /etc/apt/sources.list.d/kubernetes.list \
  && sudo apt-get update 

$ sudo apt-get update \
  && sudo apt-get install -y \
  kubelet \
  kubeadm \
  kubernetes-cni

1.5 创建集群

这时候,我们使用 kubeadm 初始化主节点并创建集群。这一步仅在主节点上操作。

虽然有警告,但是 Weaveworks 和 Lucas(他们是维护者)向我保证,kubeadm 是可用于生产系统的。
$ sudo kubeadm init

如果你错过一个步骤或者有问题,kubeadm 将会及时告诉你。

我们复制一份 Kube 配置:

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
sudo chown $(id -u):$(id -g) $HOME/.kube/config

确保你一定要记下如下的加入 token 的命令。

$ sudo kubeadm join --token c30633.d178035db2b4bb9a 10.0.0.5:6443 --discovery-token-ca-cert-hash sha256:<hash>

2.0 安装网络

许多网络提供商提供了 Kubernetes 支持,但是,默认情况下 Kubernetes 都没有包括。这里我们使用来自 Weaveworks 的 Weave Net,它是 Kebernetes 社区中非常流行的选择之一。它近乎不需要额外配置的 “开箱即用”。

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

如果在你的主机上启用了私有网络,那么,你可能需要去修改 Weavenet 使用的私有子网络,以便于为 Pod(容器)分配 IP 地址。下面是命令示例:

$ curl -SL "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.IPALLOC_RANGE=172.16.6.64/27" \
| kubectl apply -f -
Weave 也有很酷的称为 Weave Cloud 的可视化工具。它是免费的,你可以在它上面看到你的 Pod 之间的路径流量。这里有一个使用 OpenFaaS 项目的示例

2.2 在集群中加入工作节点

现在,你可以切换到你的每一台工作节点,然后使用 1.5 节中的 kubeadm join 命令。运行完成后,登出那个工作节点。

3.0 收获

到此为止 —— 我们全部配置完成了。你现在有一个正在运行着的集群,你可以在它上面部署应用程序。如果你需要设置仪表板 UI,你可以去参考 Kubernetes 文档

$ kubectl get nodes
NAME        STATUS    ROLES     AGE       VERSION  
openfaas1   Ready     master    20m       v1.9.2  
openfaas2   Ready     <none>    19m       v1.9.2  
openfaas3   Ready     <none>    19m       v1.9.2  

如果你想看到我一步一步创建集群并且展示 kubectl 如何工作的视频,你可以看下面我的视频,你可以订阅它。

你也可以在你的 Mac 电脑上,使用 Minikube 或者 Docker 的 Mac Edge 版本,安装一个 “开箱即用” 的 Kubernetes 集群。阅读在这里的我的评估和第一印象


via: https://blog.alexellis.io/your-instant-kubernetes-cluster/

作者:Alex Ellis 译者:qhwdw 校对:wxy

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

Canonical 今天正式发布了可用于计算机、IoT 和云环境的 Ubuntu 18.04 LTS ( 仿生河狸 Bionic Beaver ) 操作系统。

经过六个月的努力工作,被称之为( 仿生河狸 Bionic Beaver )的 Ubnutu 18.04 LTS 正式发布了,这也是 Ubuntu 的第七个长期支持版(LTS)。在直到 2023 年 4 月的五年内 Canonical 将为其提供安全和软件的更新,这期间将至少会有 5 个维护性更新版本,会将以后发布的 Ubuntu 中的新内核和显卡驱动更新到这个 LTS 版本当中。

正如预期的那样,Ubuntu 18.04 LTS 带来了几个新功能和变化,它开始使用 X.Org 服务器作为默认显示服务器来再次取代在 Ubuntu 17.10 中使用的 Wayland。另一方面,Canonical 计划在 Ubuntu 20.04 LTS 中再次启用 Wayland 作为默认的显示服务器,而现在它将以技术预览版的方式提供,在登录屏幕上可以选择。

另一个很酷的新功能是图形化安装器中的“最小安装”方式,用户可以安装一个仅有 Mozilla 浏览器和一些方便的标准功能的操作系统。说到了图形安全器,它在这个新版本中进行了重新打造,所以你可以看到它添加了一些不同的选项,也有一些被移去了。

Ubuntu 18.04 LTS 也有了由微软合作开发的新的 Hyper-V 优化镜像,它是 Windows 桌面上最快的 Ubuntu 桌面环境。对于云环境,Ubuntu 18.04 LTS 云镜像集成了 Nvidia GPU 硬件加速功能。

Canonical CEO 及 Ubuntu 的创始人 Mark Shuttleworth 说,“多云操作现在是新业态,优化了启动时间和性能的 Ubuntu 18.04 LTS 在各个主流云平台上将成为用于云计算的最快、最高效的操作系统,特别是在存储和像机器学习这样的计算密集型任务方面。”

GNOME 3.28 作为默认桌面

同 Ubuntu 17.10 一样,仿生河使用最新的 GNOME 桌面作为默认环境。除了 Nautilus 文件管理器仍旧是 3.26 之外,GNOME 所提供的所有应用都更新到了 3.28,因为事实上当前该版本不再由 GNOME 桌面管理。另外,在 Ubuntu 18.04 LTS 当中,Nautilus 以暗色风格重新进行了装扮。

 title=

如果你从使用 GNOME 3.26 的 Ubuntu 17.10 升级的话就会发现,GNOME 3.28 自身也带来了许多变化。一个需要重点提出的功能是 GNOME Shell 界面现在支持雷雳 3 连接。另外,GNOME 3.28 新打造的 GNOME To Do 应用也被默认包括在 Ubuntu 18.04 LTS 当中了。

在所选用的应用当中,我们能注意到 GNOME 日历现在支持气候预报,所包括的 GNOME 字符应用替换了老的字符映射功能,GNOME Boxes 现在使用 spice-vdagent 为 Spice 客户端提供了更好的性能。LibreOffice 6.0 是默认办公套件,Mozilla FireFox 59.0.2 是默认浏览器,OpenJDK 10 是默认 JRE/JDK。

多个应用以 Snap 的方式提供

由于 Canonical 在推广其 Snappy 技术,它提供了更好的隔离性和安全,以及贯穿整个 LTS 生命周期的持续升级支持,毫无疑问 Ubuntu 18.04 LTS 将预装几个默认采用 Snap 统一封装包的应用。

 title=

这些应用包括 GNOME 日历、GNOME 字符、GNOME 日志和 GNOME 系统监视器等。为了使用户更易于安装 Snap 软件包,Ubuntu 软件应用现在可以让你轻松切换不同的 Snap 商店。有超过 3000 个 Snap 可以从 Snap 商店安装,包括 Firefox、Spotify、Skype 和 Slack 等流行应用。

其它值得一提的还有,在大多数应用中支持彩色 emoji 字符。触摸板支持双指右击,而无需物理按键(可以在 GNOME 设置功能中修改该设置)。鼠标和触摸板有了新的驱动,即 libinput,如果你觉得它不适合你,你仍然可以通过设置来切换回 Synapics 驱动,但是 Canonical 将在以后版本移除它。最后,如果在电池供电时 20 分钟不操作的话,Ubuntu 18.04 LTS 将会自动休眠笔记本。

Ubuntu 18.04 LTS 底层情况

在底层,Ubuntu 18.04 LTS 使用的是 Linux 4.15 系列的内核,该系列内核最近将结束支持期。不过,我们认为 Canonical 将会继续支持它,直到今年年底发布的第一个维护版本 Ubuntu 18.04.1 LTS 为止——它将使用新的内核和图形驱动。

Canonical 在发布公告中称,“在 Ubuntu 18.04 LTS 中,gcc 现在默认编译程序为即时绑定的 独立定位的可执行程序 position independent executable (PIE),以更有效的利用 地址空间布局随机化 Address Space Layout Randomization (ASLR)技术。除了几个例外之外,所有主要的软件包都将重构以获得该能力。”对于 Meltdown 和 Spectre 安全漏洞的缓解措施也已经到位。

从 Ubuntu 17.10 以来有一些新的功能,不过如果你计划从更旧的版本升级,你应该看看“从 Ubuntu 16.04 LTS 以来的新变化”这篇文章。Ubuntu 18.04 LTS 现在可以下载了,在升级前,你应该看看如何从之前的版本升级

Ubuntu 18.04 LTS 下载

你可能并不想把所有的遗留应用全部分解为微服务,或许你可以考虑从安全功能开始。

我为了给这篇文章起个标题,使出 “洪荒之力”,也很担心这会变成标题党。如果你点击它,是因为它激起了你的好奇,那么我表示抱歉 注1 。我当然是希望你留下来阅读的 注2 :我有很多有趣的观点以及很多 注3 脚注。我不是故意提出微服务会导致安全问题——尽管如同很多组件一样都有安全问题。当然,这些微服务是那些安全方面的人员的趣向所在。进一步地说,我认为对于那些担心安全的人来说,它们是优秀的架构。

为什么这样说?这是个好问题,对于我们这些有系统安全 经验的人来说,此时这个世界才是一个有趣的地方。我们看到随着带宽便宜了并且延迟降低了,分布式系统在增长。加上部署到云愈加便利,越来越多的架构师们开始意识到应用是可以分解的,不只是分成多个层,并且层内还能分为多个组件。当然,均衡负载可以用于让一个层内的各个组件协同工作,但是将不同的服务输出为各种小组件的能力导致了微服务在设计、实施和部署方面的增长。

所以,到底什么是微服务呢?我同意维基百科的定义,尽管没有提及安全性方面的内容 注4 。 我喜欢微服务的一点是,经过精心设计,其符合 Peter H. Salus 描述的 UNIX 哲学 的前俩点:

  1. 程序应该只做一件事,并尽可能把它做好。
  2. 让程序能够互相协同工作。
  3. 应该让程序处理文本数据流,因为这是一个通用的接口。

三者中最后一个有点不太相关,因为 UNIX 哲学通常被用来指代独立应用,它常有一个实例化的命令。但是,它确实包含了微服务的基本要求之一:必须具有“定义明确”的接口。

这里的“定义明确”,我指的不仅仅是可外部访问的 API 的方法描述,也指正常的微服务输入输出操作——以及,如果有的话,还有其副作用。就像我之前的文章描述的,“良好的系统架构的五个特征”,如果你能够去设计一个系统,数据和主体描述是至关重要的。在此,在我们的微服务描述上,我们要去看看为什么这些是如此重要。因为对我来说,微服务架构的关键定义是可分解性。如果你要分解 注5 你的架构,你必须非常、非常地清楚每个细节(“组件”)要做什么。

在这里,就要开始考虑安全了。特定组件的准确描述可以让你:

  • 审查您的设计
  • 确保您的实现符合描述
  • 提出可重用测试单元来审查功能
  • 跟踪实施中的错误并纠正错误
  • 测试意料之外的产出
  • 监视不当行为
  • 审核未来可能的实际行为

现在,这些微服务能用在一个大型架构里了吗?是的。但如果实体是在更复杂的配置中彼此链接或组合在一起,它们会随之越来越难。当你让一小部分可以彼此配合工作时,确保正确的实施和行为是非常、非常容易的。并且如果你不能确定单个组件正在做它们应该作的,那么确保其衍生出来的复杂系统的正确行为及不正确行为就困难的多了。

而且还不止于此。如我已经在许多以往场合提过的,写足够安全的代码是困难的 注7 ,证实它应该做的更加困难。因此,有理由限制有特定安全要求的代码——密码检测、加密、加密密钥管理、授权等等——将它们变成小而定义明确的代码块。然后你就可以执行我上面提及所有工作,以确保正确完成。

还有,我们都知道并不是每个人都擅长于编写与安全相关的代码。通过分解你的体系架构,将安全敏感的代码限制到定义明确的组件中,你就可以把你最棒的安全人员放到这方面,并限制了 J.佛系.码奴 注8 绕过或降级一些关键的安全控制措施的危险。

它可以作为学习的机会:它对于设计/实现/测试/监视的兄弟们都是好的,而且给他们说:“听、读、标记、学习,并且引为己用 注9 。这是应该做的。”

是否应该将所有遗留应用程序分解为微服务? 不一定。 但是考虑到其带来的好处,你可以考虑从安全入手。


  • 注1、有一点——有读者总是好的。
  • 注2、这是我写下文章的意义。
  • 注3、可能没那么有趣。
  • 注4、在我写这篇文章时。我或你们中的一个可能会去编辑改变它。
  • 注5、这很有趣,听起来想一个园艺术语。并不是说我很喜欢园艺,但仍然... 注6
  • 注6、有意思的是,我最先写的 “如果你要分解你的架构....” 听起来想是一个 IT 主题的谋杀电影标题。
  • 注7、长期读者可能会记得提到的优秀电影 “The Thick of It”
  • 注8、其他的什么人:请随便选择。
  • 注9、不是加密 摘要 digest :我不认同原作者的想法。

这篇文章最初出在爱丽丝、伊娃与鲍伯——一个安全博客上,并被许可转载。


via: https://opensource.com/article/17/11/microservices-are-security-issue

作者:Mike Bursell 译者:erlinux 校对:wxy

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

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

这种事时不时就会发生在我身上。如果你和我一样,有个好消息告诉你。有个简单又有用的命令行工具叫chattrChange 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 – 不可删除

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

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

我先在我的当前目录创建一个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 可作为保护重要系统文件和数据的附加工具。

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


via: https://www.ostechnix.com/prevent-files-folders-accidental-deletion-modification-linux/

作者:SK 译者:yizhuoyan 校对:wxy

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

我们在之前的文章中已经分析了其他重要系统目录,比如 /bin/boot/dev/etc 等。可以根据自己的兴趣进入下列链接了解更多信息。本文中,让我们来看看 /lib 目录都有些什么。

Linux 中,/lib 文件夹是什么?

/lib 文件夹是 库文件目录 ,包含了所有对系统有用的库文件。简单来说,它是应用程序、命令或进程正确执行所需要的文件。在 /bin/sbin 目录中的命令的动态库文件正是在此目录中。内核模块同样也在这里。

pwd 命令执行为例。执行它需要调用一些库文件。让我们来探索一下 pwd 命令执行时都发生了什么。我们需要使用 strace 命令 找出调用的库文件。

示例:

root@linuxnix:~# strace -e open pwd
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
/root
+++ exited with 0 +++
root@linuxnix:~# 

如果你注意到的话,会发现我们使用的 pwd 命令的执行需要调用两个库文件。

Linux 中 /lib 文件夹内部信息

正如之前所说,这个文件夹包含了目标文件和一些库文件,如果能了解这个文件夹的一些重要子文件,想必是极好的。下面列举的内容是基于我自己的系统,对于你的来说,可能会有所不同。

root@linuxnix:/lib# find . -maxdepth 1  -type d
./firmware
./modprobe.d
./xtables
./apparmor
./terminfo
./plymouth
./init
./lsb
./recovery-mode
./resolvconf
./crda
./modules
./hdparm
./udev
./ufw
./ifupdown
./systemd
./modules-load.d

/lib/firmware - 这个文件夹包含了一些硬件、 固件 Firmware 代码。

硬件和固件之间有什么不同?

为了使硬件正常运行,很多设备软件由两部分软件组成。加载到实际硬件的代码部分就是固件,用于在固件和内核之间通讯的软件被称为驱动程序。这样一来,内核就可以直接与硬件通讯,并确保硬件完成内核指派的工作。

/lib/modprobe.d - modprobe 命令的配置目录。

/lib/modules - 所有的可加载内核模块都存储在这个目录下。如果你有多个内核,你会在这个目录下看到代表美国内核的目录。

/lib/hdparm - 包含 SATA/IDE 硬盘正确运行的参数。

/lib/udev - 用户空间 /dev 是 Linux 内核设备管理器。这个文件夹包含了所有的 udev 相关的文件和文件夹,例如 rules.d 包含了 udev 规范文件。

/lib 的姊妹文件夹:/lib32 和 /lib64

这两个文件夹包含了特殊结构的库文件。它们几乎和 /lib 文件夹一样,除了架构级别的差异。

Linux 其他的库文件

/usr/lib - 所有软件的库都安装在这里。但是不包含系统默认库文件和内核库文件。

/usr/local/lib - 放置额外的系统文件。这些库能够用于各种应用。

/var/lib - 存储动态数据的库和文件,例如 rpm/dpkg 数据和游戏记录。


via: https://www.linuxnix.com/linux-directory-structure-lib-explained/

作者:Surendra Anne 译者:CYLeft 校对:wxy

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