在 Linux 中,诸如cp或之类的命令的完成执行dd并不意味着数据已写入设备。例如,必须调用sync或调用驱动器上的“安全删除”或“弹出”功能。
这种方法背后的哲学是什么?为什么不一次写入数据?是否存在因 I/O 错误而导致写入失败的危险?
我正在阅读 Ritchie 和 Thompson 关于 Unix 文件系统的论文。他们写道,“值得注意的是,该系统是完全自给自足的”。Unix 之前的系统不是自支持的吗?以什么方式?
我对*nix 系统中的dotfiles有一个基本的了解。但是我仍然对登录外壳和非登录外壳之间的区别感到很困惑?
一堆不同的答案(包括多个重复)已经解决了以下要点:
man bash有关更多详细信息,请参阅文档(例如,)答案没有告诉(以及我仍然感到困惑的事情)是:
什么是用例一的登录或者非登录壳呢?(例如,我只配置zshrc了zsh和这足以让大多数个人开发的要求,我知道这不是这么简单什么vimrc来vim)
在非登录shell上使用登录的原因是什么(除了消耗不同的启动文件和生命周期)?
我知道“一切都是文件”意味着即使设备在 Unix 和类 Unix 系统中也有它们的文件名和路径,并且这允许在各种资源上使用通用工具,而不管它们的性质如何。但我无法将其与 Windows 进行对比,这是我使用过的唯一其他操作系统。我读过一些关于这个概念的文章,但我认为对于非开发人员来说,它们有些难以掌握。外行的解释是人们需要的!
例如,当我想将文件复制到连接到读卡器的 CF 卡时,我将使用类似
zcat name_of_file > /dev/sdb
Run Code Online (Sandbox Code Playgroud)
在 Windows 中,我认为读卡器将作为驱动程序出现,我认为我们将做类似的事情。那么,“一切都是文件”的哲学在这里有何不同?
UNIX 哲学说:做一件事并把它做好。制作处理文本的程序,因为这是一个通用接口。
该sort命令,至少是 GNU sort,可以-o选择输出到文件而不是stdout. 为什么说,sort foobar -o whatever当我可以的时候有用sort foobar > whatever?
我知道“一切都是文件”是 Unix 的主要概念之一,但是套接字使用内核提供的不同 API(如套接字、sendto、recv 等),而不是像普通的文件系统接口。
“一切都是文件”在这里如何应用?
我经常在许多网站上遇到“类unix”这个词。
没有标准;这只是它的行为方式。
但是如果我从头开始开发一个内核,是什么让它被认为是“类unix”的?
基本上,使编写的代码像 Unix 的东西是什么?
它是正确使用某些特殊字符,如+,&,',.。(点)和,(逗号),基本上,在文件名中。
我知道您可以使用-并且_没有问题,但是在进行一些研究时,我无法找到有关其他符号的确切信息;有人说你可以,有人说你不能,还有一些人说“不鼓励”使用它们(无论这意味着什么)。
如果我正在编写脚本或程序,是否应该将其名称与警告或错误消息一起输出到 stderr?例如:
./script.sh: Warning! Variable "var" lowered down to 10.
Run Code Online (Sandbox Code Playgroud)
或者:
./prog.py: Error! No such file: "file.cfg".
Run Code Online (Sandbox Code Playgroud)
我知道通常这只是一个品味问题(特别是如果你为自己写自己的东西),但我想知道是否有任何传统的东西?我相信大多数 UNIX/Linux 实用程序在发生某些事情时都会写下自己的名字,所以这似乎是一件好事,但是是否有任何指导方针或潜规则如何做到这一点以及如何做到这一点?
例如,不建议将二进制文件安装在 下/usr/bin/,而应安装在/usr/local/bin/其他地方。是否有关于输出到 stderr 的类似规则?我应该写名字后跟一个冒号吗?或者只是“警告!” 和“错误!” 字?我找不到任何东西,但也许有人可以指出我在哪里可以阅读它。
这个问题有点关于编程实践,但我认为它在这里而不是在stackoverflow上更合适,因为它是关于 UNIX/Linux 传统而不是一般的编程。
我了解*主要管理员用户的用户 ID 为501,后续用户获得增量编号 ( 502, 503, ...) 但为什么501?有什么特别之处50x,这个选择的历史/技术原因是什么?
* 当我对为什么我的外部硬盘驱动器里面有所有垃圾文件感到好奇时,我开始研究这个.Trashes/501。我的搜索使我得出结论501是 *nix 系统中主管理员的用户 ID(我在 macOS 上),但不是为什么.