我已将一个大文件复制到安装在带有异步 Linux 系统上的 USB 磁盘中。这相对较快地返回到命令提示符,但是当我键入时sync,当然,它必须全部转到磁盘,这需要很长时间。
我知道它会很慢,但是有什么地方可以让我看到计数器降到零吗?看着buffers在top没有帮助。
当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:
> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
Sudoing 没有帮助,因为它以 root 身份运行命令,但 shell 处理重定向 stdout 并以您的方式打开文件:
> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
除了以root身份打开shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您无权写入的文件?
> sudo su
# echo test > /tmp/foo
Run Code Online (Sandbox Code Playgroud) 简短版本:在什么情况下可以dd安全地用于复制数据,安全意味着不存在由于部分读取或写入而导致损坏的风险?
长版本 — 序言: dd通常用于复制数据,尤其是从设备复制数据或向设备复制数据(示例)。有时将其归因于能够以比其他工具更低的级别访问设备的神秘特性(实际上是设备文件在发挥作用)——但dd if=/dev/sda与cat /dev/sda. dd有时被认为更快,但cat在实践中可以击败它。尽管如此,它dd具有独特的特性,使其有时真正有用。
问题: dd if=foo of=bar实际上与cat <foo >bar. 在大多数 unices¹ 上,dd对read(). (我发现POSIX在什么构成“读取输入块”方面很模糊dd。)如果read()返回部分结果(根据 POSIX 和其他参考文档,除非实现文档另有说明,否则允许这样做),则复制部分块。存在完全相同的问题write()。
观察:在实践中,我发现dd可以处理块设备和常规文件,但这可能只是我没有太多练习。说到管道,不难找dd错;例如试试这个代码:
yes | dd of=out bs=1024k count=10
Run Code Online (Sandbox Code Playgroud)
并检查out文件的大小(它可能远低于 10MB)。
问题:在什么情况下可以dd安全地用于复制数据?换句话说,在块大小、实现、文件类型等方面的哪些条件可以确保dd将复制所有数据?
(GNU dd有一个 …
在 Linux 中,诸如cp或之类的命令的完成执行dd并不意味着数据已写入设备。例如,必须调用sync或调用驱动器上的“安全删除”或“弹出”功能。
这种方法背后的哲学是什么?为什么不一次写入数据?是否存在因 I/O 错误而导致写入失败的危险?
有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。
所以我有几个问题:
在Linux中的情况下,它是安全(是/否)划上等号stdin,
stdout以及stderr用/dev/stdin,/dev/stdout和
/dev/stderr?
更一般地说,这个等价物是否“足够便携”?
我找不到任何 POSIX 参考。
我有一个包含命令的多行输出的变量。从变量中逐行读取输出的最有效方法是什么?
例如:
jobs="$(jobs)"
if [ "$jobs" ]; then
# read lines from $jobs
fi
Run Code Online (Sandbox Code Playgroud) 这是一个简单的问题,但我第一次不得不真正解决它:找到哪些特定文件/inode 是大多数 I/O 的目标。我希望能够获得一般系统概述,但如果我必须提供 PID 或 TID,我可以接受。
我想不用strace对弹出的程序做任何操作iotop。最好使用与iotop按文件逐项列出的工具相同的工具。我可以lsof用来查看邮递员打开了哪些文件,但它不指示哪个文件正在接收 I/O 或接收了多少。
我在其他地方看到有人建议使用它,auditd但我不想这样做,因为它会将信息放入我们的审计文件中,我们将其用于其他目的,这似乎是我应该能够研究的问题通过这种方式。
我现在遇到的具体问题是 LVM 快照填充太快。我已经解决了这个问题,但希望能够以这种方式修复它,而不是仅仅ls对所有打开的文件描述符进行分析/proc/<pid>/fd以查看哪个增长最快。
有一个 shell 命令可以让您测量数据通过它的速度,因此您可以测量管道中命令的输出速度。所以而不是:
$ somecommand | anothercommand
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作:
$ somecommand | ??? | anothercommand
Run Code Online (Sandbox Code Playgroud)
我认为,吞吐量统计信息(字节/秒)会打印到 stderr。但我终生无法记住那个命令是什么。
在我的联想T400和Ubuntu上,硬盘写入指示灯一直闪烁。我想知道在 Linux 中是否可以找出哪些进程正在对硬盘进行 I/O?就像 by 一样top,您可以找出哪些进程使用最多的 CPU 和内存。
如何在 Linux 中使用命令行或以编程方式分别获得读写 IOPS?我已经安装了sysstat包。
请告诉我如何使用sysstat包命令分别计算这些。
或者,是否可以使用文件系统计算它们?
例如: /proc或/sys或/dev
io ×10
linux ×4
shell ×2
async ×1
bash ×1
cat ×1
command-line ×1
dd ×1
disk ×1
drivers ×1
filesystems ×1
kernel ×1
monitoring ×1
performance ×1
permissions ×1
pipe ×1
portability ×1
posix ×1
process ×1
profiling ×1
read ×1
sudo ×1
write ×1