在vi中创建文本文件会更改我的计算机吗?


9

我知道Linux是基于文本文件构建的操作系统。我想做的是使用vi我学到的所有各种命令来创建文件。这样,我可以使用/in 非常容易地找到每个单独的命令vi。但我只想在不改变计算机功能的情况下执行此操作。这是个好主意吗?


12
是的,它将在某个地方有一个更多的文本文件。;-)(开玩笑)实际上,文件就是文件。就像询问是否将照片添加到文件夹或创建新的Word文档会改变您的计算机一样。是的,它会的; 您在那里还有一张照片/文档。无论如何,您得到的答案大部分都是正确的。
Rmano 2015年

您为什么会认为这样做呢?
Braiam 2015年

2
不确定“基于文本文件的操作系统”是什么意思,但是就文本文件而言,Linux与Windows并没有真正的不同。例如,如果您正在考虑Windows,则具有.ini和.bat文件。
海德2015年

另外,您是否认为vi(相对于gedit)有什么特别的地方?或者您只是说“文本编辑器”?
李斯特先生,2015年

1
@BJsgoodlife 一些文本文件控制着系统。它们被放置在特殊的地方,通常如果没有它们就无法修改sudo
cpast

Answers:


34

编写文本文件不会“改变计算机功能的方式”。

特别是,要执行类似的操作,您必须执行以下一项操作

  • 覆盖一些重要文件
  • 将您的文件写入一个特殊的受保护位置,例如/ etc中的* .d目录;您将无权执行此操作
  • 标记文件可执行文件并将其放在您的路径中

由于您将不会明确地进行此类操作,因此无需担心。特别是,另一个答案是多余的长度,它建议您的文本文件需要以每行的哈希开头。当然不是。仅将文本文件存储在普通主目录中的某处将不会做任何事情。


3
我建议放置,#这样就不会有任何意外的事情发生。我认为最好总是站在安全的一边。
heemayl

8
我认为站在安全的一边并不总是更好。安全是有代价的,在某些时候降低的风险已不再值得付出代价。例如,当它超出事物的价值时,您将尝试确保其安全(在该参数有意义的上下文中)。在“ 信息安全”上,您可以找到很多答案,讨论如何权衡适当的安全性,并且唯一完全安全的系统也完全没有用,因此在所有情况下都坚持完美的安全性是很愚蠢的。
David Z

9
作为一个稍微分开的问题,我认为提出的重要的一点(此答案可以,而另一个答案不可以)是,创建任意文件不会改变系统。您只能通过创建其他进程正在寻找的文件或执行所创建的文件(如果该文件包含影响系统的代码)来影响系统-但这属于不运行完全未知的Shell命令的一般建议,无论您是否在处理文件,这都很聪明。
David Z

2
给我做一个三明治。You won't have permission to do this。须藤给我做一个三明治。Aye, aye, sir!
Lie Ryan

2
@heemayl为什么不仅仅使文件的第一行exit
2015年

15

您可以将学习到的所有命令保存在一个文件中,但需要注意一些重要事项:

  • 不要使文件可执行
  • 从不source档案
  • 最好的方法是#在所有命令的开头放置一个以注释掉所有命令,以免它们被意外执行。这样,您可以实际搜索所需的命令,并且也不会有任何风险。您可以#通过以下命令在每行的开头添加:

    sed -i 's/^/#/' <file_name>

编辑:我已经将第三点作为一种极端的安全措施,因为“ neon_overload”和“ David Z”指出,在所有行中放入哈希值过于广泛,因此不需要,在这种情况下,我将与他们一道。同样,正如“ random832”所指出的那样,对我的第三点的更好的选择是使用来启动文件exit,因为那样以后就不会执行任何命令了。

EDIT-2: “ Rinzwind”提到了两个要点:

  • 不要覆盖现有文件

  • 将文件存储在用户的主目录(/home/$USER/)中。


4
put a # in the beginning of all the commands to comment out all the commands so they don't get executed accidentally我不太确定这是一个严肃的建议还是在开玩笑。我的讽刺侦探今天使我失败了。
Lie Ryan

你需要把重要的是“意外”。用户可能会意外地保持文件的某个地方不安全为可执行的话....在这里我只是把没有chances..hope你现在都清楚..
heemayl

4
他不能只是在文件的开头放一个“出口”之类的东西,而不是注释每一行吗?
o0'。

也许他的意思是#!-将解释器设置为null,使其不运行。
2015年

1
@BJsgoodlife,不#!,只是exit;这样一来,您也可以免受sh yourfile无效的shebang的攻击。
查尔斯·达菲

7

neon_overload有一个很好的答案。

我会在您问题的某个方面稍作扩展-我会发表评论,但是我在这里没有足够的声誉。

Linux作为操作系统,很大程度上不是基于文本文件的。也就是说,我可以看到您来自哪里。对于外部观察者来说,编辑和启动“文本”文件需要做很多工作,尤其是与Windows相比。

这有几个原因,其中一些是:

  • 与Windows中一样,Linux中没有注册表系统。因此,应用程序通常将其设置存储在文本文件中,并且会指示您编辑它们,而不是像Windows中那样编辑注册表。
  • Linux被广泛用作服务器系统,在台式机上使用Linux的许多人都可以与服务器系统一起工作。与Windows Server不同,Linux服务器通常在没有图形界面的情况下运行。因此,期望在Linux服务器上运行的产品,以及实际上它们的用户和管理员,可以在没有图形界面的情况下运行。只能在Windows上运行的产品(和系统功能,值得一提)通常以GUI为中心(例如MS SQL)
  • Linux脚本系统比Windows更为通用和透明。您会在Windows上看到脚本-但它们会被称为something.vbs或another.bat。您不会必然地意识到它们是文本文件-但是,考虑第二点,在Linux中探查.sh文件更为常见。
  • 最后,许多Linux用户习惯于不使用图形界面,并且在许多方面,宁愿像不使用GUI一样直接编辑文件,也不要乱用图形工具。我知道,当我想在系统中做更深入的事情时,我只需启动终端,许多同事也是如此。

“ Linux中没有注册表系统”,但是有dconf(en.wikipedia.org/wiki/Dconf)。但是,并非所有运行Linux内核的系统都将拥有此文件,而且并非Windows系统将在注册表中配置的所有内容都将在此处进行配置。
丹尼尔·兰道

1

简短的答案是,不,您不会通过在vi中创建文本文件来更改计算机。但是,如果您不小心,创建第一个文本文件可能会改变您的生活。学习Unix方式可能是一个非常有意义的实践。


0

vi是一个文本编辑器,因此,如果您只需要将一些文本片段存储在文本文件中并进行搜索,则可以使用内置命令直接从终端执行所有操作。

  1. 将注释写到文本文件(如果文件不存在,将创建该文件):

    回显具有重要数据的便笺>> info.txt

重要说明:请注意单引号和双引号,并在要加引号的前面加上斜杠。

  1. 在文件中搜索一些文本(例如important):

    grep --color -i重要信息.txt

为避免键入--color -i,应在您的中添加别名~/.bashrc

您还可以将多行文本添加到现有或不存在的文本文件中:

cat >> info2.txt

然后输入或粘贴文本,完成后按CTR+Z

至于更改系统,不,只要您在自己的主文件夹中创建文件并且不执行它们,就不会改变系统的工作方式(即使文件不可执行,您也可以执行,例如使用bash myFile) 。还要确保仅在需要时才严格使用root特权。

最后,您对基于文件系统的解释使您有些误解:大多数操作系统的文件都存储着会严重影响系统运行方式的重要设置,但它们位于预定义的位置,并且通常受到常规用户的保护,以防被修改。

不过,可以轻松地将自己踢倒,例如,如果您是普通用户,您添加了本地“可执行文件”文件夹PATH,并且在该文件夹中恰好具有与构建名称相同的可执行文件, -in公共公用事业或bash关键字,例如testechocatforcut,等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.