来自Unix Power Tools,第 3 版:不是删除文件,而是清空它部分:
如果活动进程打开了该文件(对于日志文件来说并不少见),则删除该文件并创建一个新文件不会影响日志记录程序;这些消息只会继续发送到不再链接的文件中。清空文件不会破坏关联,因此它会在不影响日志记录程序的情况下清除文件。
(强调我的)
我不明白为什么程序会继续登录到已删除的文件。是不是因为文件描述符条目没有从进程表中删除?
我打开了两个贝壳。第一个在目录 A 中。在第二个中,我删除目录 A,然后重新创建它。当我回到第一个 shell 并键入 时ls,输出为:
ls: cannot open directory .: Stale file handle
Run Code Online (Sandbox Code Playgroud)
为什么?我认为第一个 shell(在不存在的目录中保持打开状态的 shell)会在等待下一个命令时“冻结”,并且不会“意识到”该目录已被删除并重新创建。除了字符串之外,shell 是否持有对其当前工作目录的“更深层次”引用$PWD?
如何更改与某些文件类型关联的应用程序gnome-open,exo-open,xdg-open,gvfs-open和kde-open?
对于这两个问题:如何按用户进行操作,如何在系统范围内进行操作?
可能重复:
/proc/PID/fd/X 链接号
我有一个关于文件描述符及其在 proc 文件系统中的链接的问题。我观察到,如果我从 proc 列出某个进程的文件描述符,ls -la /proc/1234/fd我会得到以下输出:
lr-x------ 1 root root 64 Sep 13 07:12 0 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 1 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 2 -> /dev/null
lr-x------ 1 root root 64 Sep 13 07:12 3 -> pipe:[2744159739]
l-wx------ 1 root root 64 Sep 13 07:12 4 -> pipe:[2744159739]
lrwx------ 1 root root 64 Sep 13 07:12 5 -> socket:[2744160313]
lrwx------ 1 …Run Code Online (Sandbox Code Playgroud) 我不会使用像 AppArmor 抱怨模式这样的复杂工具,我需要简单的工具来告诉我特定程序访问了哪些文件。
在 Linux 中可以配置的最大打开文件数是否有(技术或实际)限制?如果将其配置为非常大的数字(例如 1-100M),是否会产生一些不利影响?
我在这里考虑使用服务器,而不是嵌入式系统。使用大量打开文件的程序当然会消耗内存并且速度很慢,但是如果限制配置得比所需的大得多(例如,仅配置消耗的内存),我对不利影响很感兴趣。
我最近有一台 mac 在工作,很惊讶地看到在我重命名它的文件夹并将它移到其他地方后,Xcode 仍然可以找到我的最新项目。
现在我明白这是工作中繁重的基础设施的结果,但我想知道是否有可能以某种方式为 Unix 世界的其他部分提供类似的功能?
我想在外部进程关闭后立即移动它创建的大文件。
这个测试命令正确吗?
if lsof "/file/name"
then
# file is open, don't touch it!
else
if [ 1 -eq $? ]
then
# file is closed
mv /file/name /other/file/name
else
# lsof failed for some other reason
fi
fi
Run Code Online (Sandbox Code Playgroud)
编辑:该文件代表一个数据集,我必须等到它完成才能移动它,以便另一个程序可以对其进行操作。这就是为什么我需要知道外部进程是否完成了文件。
大家好,我想开始感谢你们的宝贵时间!
我有一个问题,但真的不知道该怎么做才能解决这个问题。当我下载某些内容并单击 Firefox 中的箭头查看我的下载,然后单击应用程序名称旁边的文件夹时,它应该打开保存它的文件夹吗?(我认为类似于 moz/.tmp)无论如何,当我单击该文件夹时,它会打开 VSCode。我做错了什么?
即使在“提取成功完成”并且我单击“显示它打开的文件”之后 VSCode
运行 Linux Lite 4.8 x86_64