我正在使用 fmt (GNU coreutils) 8.25,但我不明白如何使用它。特别是,我不明白以下结果。
$ echo -n "a b c d e" | fmt -w3 -g3
我期望获得
a b
c d
e
Run Code Online (Sandbox Code Playgroud)
但我明白了
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)
所以我想可能会fmt计算它插入并尝试的换行符
$ echo -n "a b c d e" | fmt -w4 -g4
但是,我得到:
a
b c
d e
Run Code Online (Sandbox Code Playgroud)
最后,我没有得到以下内容:
$ echo -n "a b c d e" | fmt -w4 -g1
我希望给
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)
而是再次导致
a
b c
d e
Run Code Online (Sandbox Code Playgroud)所以,显然我无法理解-w和-g选项是如何工作的。 …
df -h 究竟是如何工作的?如果我运行df,我会得到这个:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/simfs 41943040 7659828 34283212 19% /
Run Code Online (Sandbox Code Playgroud)
如果我运行df -h,我会得到这个:
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 40G 7.4G 33G 19% /
Run Code Online (Sandbox Code Playgroud)
问题是如何获得相同的数字?
41943040 / 1024 / 1024 = 40 好的,让我们将其他人除以 1024。
7659828 / 1024 / 1024 = 7,304981
Run Code Online (Sandbox Code Playgroud)
那么也许到1000?
7659828 / 1000 / 1000 = 7,659828
Run Code Online (Sandbox Code Playgroud)
如何df -h得到7.4G?
34283212 / 1024 / 1024 = 32,695, which is ±33G
Run Code Online (Sandbox Code Playgroud)
虽然 df 是开源的,但我已经克隆了 repo …
说我有这个文件,只包含
a
b
c
b
a
Run Code Online (Sandbox Code Playgroud)
使用tac --separator=a file在BASH [在基于Debian的Linux],我得到这样的:
# empty line
# empty line
b
c
b
aacommand@prompt # two a just before the prompt
Run Code Online (Sandbox Code Playgroud)
问题:据我所知,--separator=a定义a标志着字符串内部的中断,而不是newline. 这是正确的吗?
我已经用其他字符串尝试了更多的输入,结果却一团糟。其他选项都工作得很好,我想:如果我使用tac --before我首先得到大约五个而不是一个空行,但是这就是应该发生的事情,对吧?
I was playing around with date to try to convert expressions such as "2 hours" to a number of seconds like 7200. I thought I could perform this with invocations such as:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
Run Code Online (Sandbox Code Playgroud)
Yet, I noticed extremely strange results while so doing. (My /etc/timezone contains "Europe/Paris", hence the use of TZ to force UTC times.)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s" …Run Code Online (Sandbox Code Playgroud) 现在,2014 年 1 月 6 日,CentOS 版本 6.4 上的 GNU 日期 8.4,执行以下操作:
$ date --date "last week" +"%Y-%V"
2013-01
Run Code Online (Sandbox Code Playgroud)
另一方面,
$ date --date "last week" +"%Y-%U"
2013-52
Run Code Online (Sandbox Code Playgroud)
这只是稍微好一点。
这真的是正确的行为吗?!
如果目标文件存在但通常不可写,标准输入是终端,并且未给出 -f 或 --force 选项,则 mv 提示用户是否替换文件。(您可能拥有该文件,或者对其目录具有写权限。)如果响应不是肯定的,则跳过该文件。
但是,mv我使用的版本(Ubuntu 14.04.3 LTS 上的 GNU coreutils 8.21)表现出意外行为:
$ which mv
/bin/mv
$ ls -l
total 0
$ echo foo > 1; chmod -w 1; cp 1 2; ls -l | cut -d' ' -f 1-5,9
-r-x------ 1 me me 4 1
-r-x------ 1 me me 4 2
$ echo bar > 2
-bash: 2: Permission denied
$ mv 1 2
$ ls -l | cut -d' …Run Code Online (Sandbox Code Playgroud) 为什么会发生这种情况?显示所有其他可打印的uname内容。我不打算解决这个问题。甚至手册页uname都说这是一个常见的输出。
我只是想知道为什么。
就两个命令对系统所做的更改而言,mkdir -p和正在执行的操作有什么区别install -d?
GNU coreutils (8.6) 版本有stat变化吗?在最近的更新之后,我写的一些脚本调用 stat 没有按预期工作;特别是,我一直在使用stat -c %Y "${filename}". 这应该以自“Epoch”以来的秒数形式返回上次修改的时间。但是,我可以发誓这曾经采用整数的形式。但是,我现在从这个表单1287630625.956667227而不是1287630625. 由于 Bash 不能处理浮点运算,这有点烦人。这是故意改变吗?还是bug?还是我的记忆模糊了?我尝试搜索有关此的信息,但找不到任何内容。
如果可能的话,我习惯于支持多个文件名参数的命令,但unlink不:
%> unlink a b
unlink: extra operand `b'
Try `unlink --help' for more information.
Run Code Online (Sandbox Code Playgroud)
我最终使用了一个for循环。为什么unlink只需要一个文件名是否有技术原因?
coreutils ×10
date ×2
shell ×2
utilities ×2
c ×1
command-line ×1
disk-usage ×1
gnu ×1
mv ×1
stat ×1