我通过将 zoneinfo 文件复制到/etc/localtime
,将 Linux 机器上的时区设置为 GMT+6 ,但该date
命令仍将时间显示为UTCtime-6
. 任何人都可以向我解释这种行为吗?
我假设date
命令应该显示UTCtime+6
时间。以下是我正在执行的步骤:
date
Wed Jan 22 17:29:01 IST 2014
date -u
Wed Jan 22 11:59:01 UTC 2014
cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime
date
Wed Jan 22 05:59:21 GMT+6 2014
date -u
Wed Jan 22 11:59:01 UTC 2014
Run Code Online (Sandbox Code Playgroud) 我正在尝试复制一批文件,scp
但速度很慢。这是一个包含 10 个文件的示例:
$ time scp cap_* user@host:~/dir
cap_20151023T113018_704979707.png 100% 413KB 413.2KB/s 00:00
cap_20151023T113019_999990226.png 100% 413KB 412.6KB/s 00:00
cap_20151023T113020_649251955.png 100% 417KB 416.8KB/s 00:00
cap_20151023T113021_284028464.png 100% 417KB 416.8KB/s 00:00
cap_20151023T113021_927950468.png 100% 413KB 413.0KB/s 00:00
cap_20151023T113022_567641507.png 100% 413KB 413.1KB/s 00:00
cap_20151023T113023_203534753.png 100% 414KB 413.5KB/s 00:00
cap_20151023T113023_855350640.png 100% 412KB 411.7KB/s 00:00
cap_20151023T113024_496387641.png 100% 412KB 412.3KB/s 00:00
cap_20151023T113025_138012848.png 100% 414KB 413.8KB/s 00:00
cap_20151023T113025_778042791.png 100% 413KB 413.4KB/s 00:00
real 0m43.932s
user 0m0.074s
sys 0m0.030s
Run Code Online (Sandbox Code Playgroud)
奇怪的是,传输速率大约为 413KB/s,文件大小大约为 413KB,所以它真的应该每秒传输一个文件,但是每个文件大约需要 4.3 秒。
知道这种开销从何而来,有没有办法让它更快?
为了找出 Bash (v4+) 脚本中的某些操作需要多长时间,我想time
“单独”解析命令的输出,并(最终)在 Bash 变量 ( let VARNAME=...
) 中捕获它。
现在,我正在使用time -f '%e' ...
(或者更确切地说command time -f '%e' ...
是因为内置了 Bash),但是由于我已经重定向了执行命令的输出,我真的不知道我将如何捕获time
命令的输出。基本上这里的问题是到输出分离的time
从被执行的命令(或多个)的输出。
我想要的是计算启动命令和完成命令之间的时间(以秒为单位)的功能。它不必是time
命令或相应的内置命令。
编辑:鉴于以下两个有用的答案,我想添加两个说明。
date
到目前为止使用的解决方案接近我想要的。
如果我发出“top”命令并收到如下结果:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
00001 bob 25 0 77380 1212 1200 R 95.8 0.0 89122:13 fee
00002 bob 25 0 77380 1196 1184 R 95.4 0.0 88954:14 fi
00003 sam 18 0 427m 16m 6308 R 30.0 0.1 54:46.43 fo
00004 sam 18 0 427m 16m 6308 R 26.5 0.1 52:55.33 fum
Run Code Online (Sandbox Code Playgroud)
问题: “TIME+”列中的单位是什么?
我尝试过的:(请提出一个更好的搜索文档的策略......)
man top | grep -C 4 time
或者 man top | grep <X>
当我替补minute …
为什么 Unix 时间从 1970-01-01 开始?为什么不是 1971-01-01 或任何其他日期?
我想知道如何在指定的时间内运行命令,比如一分钟,如果它没有完成执行,那么我应该能够停止它。
我正在尝试以以下形式显示日期时间
07/08/2013 16:52:13
通过在 bash 脚本中使用命令:
dt=`date '+%d/%m/%Y_%H:%M:%S'`
Run Code Online (Sandbox Code Playgroud)
哪个变量用于填充 CSV 文件。
接受的唯一字符是日期和时间之间的“_”(下划线)或“-”,输出为
07/08/2013_16:52:13
如何在日期和时间之间获得一个空格?我几乎(我希望)尝试了一切。
你如何知道一个正在运行的进程需要多长时间才能完成?
例子:
date; dd bs=1m if=/foo of=bar; date
Run Code Online (Sandbox Code Playgroud)
^这个例子只有 1 秒的分辨率。
任何外壳都是可以接受的。
我有一个转换视频文件的脚本,我在服务器上根据测试数据运行它并通过time
. 结果我看到:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
Run Code Online (Sandbox Code Playgroud)
为什么实时时间远低于用户时间?这与多线程有什么联系吗?或者还有什么?
编辑:我认为该脚本大约运行了 2 分钟 48 秒
在Linux中,文件系统时间似乎总是落后系统时间几毫秒,如果您想检查文件是否在给定时间之前或之后在非常窄的时间范围(毫秒)内被修改,则会导致不一致。
在任何具有支持纳秒分辨率的文件系统的 Linux 系统中(我尝试使用具有 256 字节 inode 和 ZFS 的 ext4),如果您尝试执行以下操作:
date +%H:%M:%S.%N; echo "hello" > test1; stat -c %y test1 | cut -d" " -f 2
Run Code Online (Sandbox Code Playgroud)
第二个输出值(文件修改时间)始终比第一个输出值(系统时间)晚几毫秒,例如:
17:26:42.400823099
17:26:42.395348462
Run Code Online (Sandbox Code Playgroud)
而它应该是相反的,因为文件在调用命令后被test1
修改。date
你可以在 python 中得到相同的结果:
date +%H:%M:%S.%N; echo "hello" > test1; stat -c %y test1 | cut -d" " -f 2
Run Code Online (Sandbox Code Playgroud)
1698255477.3125281
1698255477.3070245
Run Code Online (Sandbox Code Playgroud)
为什么会这样,有没有办法避免它,使系统时间与文件系统时间一致?到目前为止,我发现的唯一解决方法是通过创建一个虚拟临时文件并获取其修改时间来获取文件系统“时间”(无论这在实践中意味着什么),如下所示:
17:26:42.400823099
17:26:42.395348462
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更清洁的解决方案。
time ×10
date ×3
linux ×3
bash ×2
batch-jobs ×1
filesystems ×1
history ×1
man ×1
scp ×1
shell-script ×1
timeout ×1
timestamps ×1
timezone ×1
top ×1