我有一个两列文件;该文件已经按照我想要的方式在第 1 列进行了排序。我想在每个第 1 列类别中对第 2 列进行排序。但是,sort
不了解第 1 列的排序顺序。
正常的方式(来自堆栈上的类似问题)是这样的:
sort --stable -k1,1 -k2,2n
但我不能指定 k1 的排序,因为它是任意的。
示例输入:
C 2
C 1
A 2
A 1
B 2
B 1
和输出:
C 1
C 2
A 1
A 2
B 1
B 2
我有一个两列文件;该文件已经按照我想要的方式在第 1 列进行了排序。我想在每个第 1 列类别中对第 2 列进行排序。但是,sort
不了解第 1 列的排序顺序。
正常的方式(来自堆栈上的类似问题)是这样的:
sort --stable -k1,1 -k2,2n
但我不能指定 k1 的排序,因为它是任意的。
示例输入:
C 2
C 1
A 2
A 1
B 2
B 1
和输出:
C 1
C 2
A 1
A 2
B 1
B 2
我想将一个文件从 A 复制到 B,它可能位于不同的文件系统上。
还有一些额外的要求:
我认为这很接近:
cp A B.part && \
ln B B.part && \
rm B.part
但是如果 B.part 存在(即使使用 -n 标志), cp 也会违反 3. 随后 1. 如果其他进程“赢得”cp 并且链接到位的文件不完整,则可能会失败。B.part 也可能是一个不相关的文件,但我很高兴在这种情况下不尝试其他隐藏名称就失败了。
我认为 bash noclobber 有帮助,这是否完全有效?有没有办法在没有 bash 版本要求的情况下获得?
#!/usr/bin/env bash
set -o noclobber
cat A > B.part && \
ln B.part B && \
rm B.part
跟进,我知道一些文件系统无论如何都会失败(NFS)。有没有办法检测这样的文件系统?
其他一些相关但不完全相同的问题:
有没有办法将文件和目录从 tempfs 原子移动到 eMMC 上的 ext4 分区
https://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html
当程序启动时,系统的哪一部分设置了三个标准流的缓冲?
这是 linux 的一部分,还是 glibc,或者可能是 bash?POSIX 是否定义了行为,或者它是 C 的一部分?
Posix 有一些答案:
https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05
在程序启动时,预定义了三个流并且不需要显式打开:标准输入(用于读取常规输入)、标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。打开时,标准错误流没有完全缓冲;当且仅当可以确定流不引用交互式设备时,标准输入和标准输出流才被完全缓冲。
因此,如果系统可以确定流不是交互式的,则它们可以被完全缓冲(stderr 除外),但实际上这确定了系统的哪个部分?
我以普通用户的身份在共享 linux 服务器上工作,没有 root 访问权限。我可以启动一个在本地 tcp 端口上侦听的程序,并且是唯一能够连接到该端口的用户吗?我可以控制程序监听的地址和端口。
例如,该程序可以是 Web 服务器的开发/测试版本。
此外,由于服务器仅接受端口 22 (ssh) 上的传入 tcp 连接,因此我通过 ssh 转发本地端口,因此我可以使用笔记本电脑连接到该端口。ssh -L 8080:localhost:8000 evaben@dice01
因此,仍然允许这样做或类似的解决方案会很好。