Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答

1
如何使用当前状态估算完成GNU ddrescue(1.18.1)的循环/时间?
背景/背景: 我目前正在运行GNU ddrescue 1.18.1,以便从将虚拟磁盘映像写入disk2s1分区时遇到电缆断开的USB恢复数据。最初,我正在恢复第二个分区(disk2s2),并注意到我已经进入了第三阶段(拆分)。我将映像放置到网络存储上。 题: 我注意到此阶段循环。给定我当前的状态信息(我仅显示两个错误),有没有一种方法可以计算我可能遇到的循环数? 状态: 更新/编辑: 因此,我仍然非常感兴趣如何使用ddrescue工具估算完成的循环次数/时间。根据评论,我要为当前正在运行的disk2s1分区添加一个日志文件评估(disk2s2在14.5小时后完成,一个用户中断大约6个小时)。 完成的分区日志 对于刚刚完成的分区,这是日志检查的结果。 参考(ddrescue算法注释): 4算法 GNU ddrescue不是dd的派生,也不以任何方式与dd相关,除了两者都可用于将数据从一个设备复制到另一设备。关键区别在于ddrescue使用复杂的算法从发生故障的驱动器中复制数据,从而使它们造成的附加损坏尽可能小。 Ddrescue有效地管理进行中的救援状态,并尝试首先救援好零件,并计划在不良(或慢速)区域内读取数据以备后用。这样可以最大化从故障驱动器中最终恢复的数据量。 标准的dd实用程序可用于从发生故障的驱动器中保存数据,但会顺序读取数据,如果错误出现在驱动器的开头,则该驱动器可能会损坏驱动器而无法进行任何救援。 其他程序按顺序读取数据,但发现错误时将切换为小尺寸读取。这是一个坏主意,因为这意味着要花更多的时间在错误区域上,从而损坏表面,磁头和驱动机械,而不是尽可能快地脱离它们。此行为减少了挽救剩余的良好数据的机会。 ddrescue的算法如下(用户可以在任何时候中断该过程,但要注意,坏的驱动器会长时间阻塞ddrescue,直到内核放弃): 1)(可选)读取描述多部分或先前中断的救援状态的日志文件。如果未指定任何日志文件,或者为空或不存在,则将所有救援域标记为未尝试。 2)(第一阶段;复制)读取输入文件的未修剪部分,将失败的块标记为未修剪,然后跳过它们。也可以跳过慢速区域。跳过的区域稍后将在另外两次通过中进行尝试(在修剪之前),在每次通过之后反转方向,直到尝试了所有救援域。第三遍是扫掠遍,禁用了跳过。(目的是快速界定大错误,使日志文件较小,并为修剪提供良好的起点)。大块仅读取未尝试的区域。修整,拆分和重试按扇区进行。每个部门最多尝试两次;此步骤中的第一个(通常作为大块读取的一部分,但有时作为单个扇区读取),以下步骤之一中的第二个作为单个扇区读取。 3)(第二阶段;修整)从最小的非修整块的前沿一次读取一个扇区,直到找到一个坏扇区。然后从同一块的后沿一次向后读取一个扇区,直到找到一个坏扇区。对于每个未修剪的块,将找到的坏扇区标记为坏扇区,并将该块的其余部分标记为未拆分,而无需尝试读取它。重复直到不再有未修剪的块。(大的未修剪的块是通过串联较小的块而生成的,因此其边缘处的良好数据所占的比例较小)。 4)(第三阶段;拆分)从最大的非拆分块的中心一次读取一个扇区,直到找到一个坏扇区。然后,如果找到的坏扇区不是第一个尝试的扇区,则从同一块的中心一次向后读一个扇区,直到找到坏扇区为止。如果日志文件大于“ --logfile-size”,请顺序读取最大的非拆分块,直到日志文件中的条目数降至“ --logfile-size”以下。重复直到所有剩余的非拆分块的扇区数少于7个为止。然后依次读取剩余的非拆分块。 5)(第四阶段;重试)(可选)尝试再次读取坏扇区,直到达到指定的重试次数为止。每个坏道每次通过仅尝试一次。Ddrescue无法确定坏扇区是否无法恢复,或者在重试之后是否最终会读取坏扇区。 6)(可选)编写一个日志文件,以备后用。 总错误大小(“ errsize”)是所有未修剪,未拆分和坏扇区块的大小之和。在复制阶段,它会增加,而在修剪,分割和重试期间,它可能会减少。请注意,当ddrescue拆分失败的块以使其变小时,总错误大小可能会减少,而错误数量会增加。 日志文件会定期保存到磁盘,以及ddrescue完成或中断时也会保存到磁盘。因此,在发生崩溃的情况下,您几乎不需要重新复制就可以继续进行救援。保存之间的间隔从30秒到5分钟不等,具体取决于日志文件的大小(较大的日志文件将以较长的间隔保存)。 同样,同一日志文件可用于复制输入文件不同区域的多个命令,并可用于对不同子集的多次恢复尝试。请参阅以下示例: 首先抢救光盘上最重要的部分。ddrescue -i0 -s50MiB / dev / hdc hdimage日志文件ddrescue -i0 -s1MiB -d -r -3 / dev / hdc hdimage日志文件 然后营救一些关键的光盘区域。ddrescue …
9 ddrescue 

1
bash脚本中的多线程/分叉
我写了一个bash脚本,格式如下: #!/bin/bash start=$(date +%s) inFile="input.txt" outFile="output.csv" rm -f $inFile $outFile while read line do -- Block of Commands done < "$inFile" end=$(date +%s) runtime=$((end-start)) echo "Program has finished execution in $runtime seconds." 该while循环将从读取$inFile,上线执行一些活动和转储结果$outFile。 由于$inFile3500+行长,因此脚本需要6-7个小时才能完全执行。为了减少此时间,我计划在此脚本中使用多线程或分叉。如果我创建8个子进程,$inFile则将同时处理其中的8行。 如何才能做到这一点?

4
将作业放在后台而不冻结
说你这样开始工作 foo 然后希望将其放在背景中。键入Ctrl+ Z,然后bg执行技巧,但会foo在Ctrl+ Z和之间冻结bg。如何在不先冻结foo的情况下将其放置在后台?
9 bash 

4
使用grep匹配具有固定数量字符的字符串
我正在尝试使用查找所有6字母词grep。我目前有这个: grep "^.\{6\}$" myfile.txt 但是,我发现我也得到了如下结果:étuis,étude。 我怀疑这与e以上文字中的符号有关。 我有什么办法可以确保不会发生这种情况? 谢谢你的帮助!

2
在systemd Docker容器中继承环境变量
我有一个运行systemd的Docker容器。我想将环境变量传递给它下面的应用程序。 当我从Docker(/sbin/init作为命令行)启动systemd时,Docker将变量公开给systemd,但不公开给子服务。如果我添加systemd.setenv=...到cmdline,则会传递变量。我正在寻找更清洁的解决方案。 如何公开传递给/sbin/init它启动的应用程序的环境变量? % docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -ti \ -e VAR1=1 motiejus/systemd_fedora20 \ init systemd.setenv=VAR2=2 ... Welcome to Fedora 20 (Heisenbug)! ... [ OK ] Reached target Multi-User System. [root@740690365eb0 ~]# env | grep VAR VAR2=2 我希望VAR1=1在运行命令时看到。 换句话说,systemd可以将传递给它的变量传递给它启动的子级吗? 对于Dockerfile,请参阅github存储库。

5
用grep查找确切的字符串
举例来说,我有一个带有许多电子邮件地址的大文本文件,使用bash我需要搜索/验证电子邮件是否存在(或不存在)。应该(仅)使用“锚”吗? grep '^user1@example.com' text_file 还是有更好的方法?我需要创建一个bash脚本,我想很安全。
9 grep 

1
使用公钥和PAM的SSH中的2因素身份验证
我正在尝试设置2因素身份验证。如果出现以下情况,我希望用户成功登录: 公钥/私钥匹配(认证方式:publickey)或密码正确 我的pam身份验证方法成功。 第二种身份验证方法是PAM文件。因此,我将其放入/usr/lib/pam/并添加auth required my_pam_module.so到中/etc/pam.d/sshd。 到目前为止,我可以使用(publickey方法)或(密码和我的pam模块所需的任何东西)登录。因此,我添加AuthenticationMethods publickey,keyboard-interactive了内容/etc/sshd_config,现在我需要拥有公共密钥,密码和“我的pam模块需要什么”。 为了达到上述目的,我需要更改哪些行?我正在使用Mac OS X Mavericks(10.9)。如果您不熟悉Mac,它也可以帮助您在Linux系统上进行操作。

4
如何杀死所有打开的窗户?
我想关闭桌面上出现的所有窗口。我曾经想过要这样做pkill,但我一次只能杀死一个,这不是我想要的。最终目标是将其放入脚本中以运行信息亭,它将检测信息亭软件是否正在运行(我认为这部分已解决),如果没有运行,则它将杀死所有打开的窗口,然后重新启动信息亭软件。
9 x11  kill  logout  kiosk 

5
什么时候禁止在=号周围使用空格?
我知道在〜/ .bashrc中,不得=在赋值中的符号周围放置空格: $ tail -n2 ~/.bashrc alias a="echo 'You hit a!'" alias b = "echo 'You hit b!'" $ a You hit a! $ b b: command not found 我正在查看MySQL配置文件/etc/my.cnf,发现了这一点: tmpdir=/mnt/ramdisk key_buffer_size = 1024M innodb_buffer_pool_size = 512M query_cache_size=16M 我如何验证=标志周围的空间没有问题? 请注意,此问题并非特定于/etc/my.cnf文件,而是通常针对* NIX配置文件。我的第一个倾向是RTFM,但实际上man mysql没有提到这个问题,如果我需要针对每种情况进行在线狩猎,我将一事无成。是否有任何约定或简便的检查方法?可以看出,有多个人编辑了该文件(=符号的不同约定),我既不能强迫他们都不要使用空格,也不能疯狂地检查所有可能已配置且可能正确或不正确的东西。 编辑:我的意图是确保当前配置的文件正确完成。当我自己配置​​文件时,我遵循软件包维护者放在其中的约定。


1
将.docx文件转换为纯文本并保留换行符以维护对源文档的行号引用:howto和含义?
我正在将MS Word内容导出为纯文本,以便与文本和文件实用程序一起使用。我有一个约束,其中在MS软件中已启用行编号功能,并且最终输出中对行编号的任何引用都必须与该编号匹配。因此输入“编号行”: (EA坡) 显然,对于Word来说,这种编号不会在换行符处打断行,而是在右边距(或其他位置)后打断“行” 。像这样的脚本docx2txt,默认情况下似乎并没有解决这个问题,并在换行符处换行。因此,如果我使用grep -n编号,则行将与源行号功能不匹配,如上所示。从文档中还不清楚,在这种情况下,我将需要如何编辑Perl脚本来转换文件: our $config_newLine = "\n"; # Alternative is "\r\n". our $config_lineWidth = 80; # Line width, used for short line justification. 我尝试替代\n,\r\n但这似乎对我不起作用。因此,我采取了以下设置(在v.2013,64pc上另存为纯文本格式)直接从Word导出文档: Unicode(UTF-8) 用(CR / LF)插入换行符+结束行 允许字符替换 现在的确,当我使用这些.txt文件时,源编号功能中的行号与grep -n输出之间的匹配非常完美。 是否有任何我应该了解的特定配置/过程docx2txt或类似的命令行实用程序,该实用程序可以让我将.docx文件转换为纯文本,同时保留换行符,而无需像以前那样依靠Word? 关于换行符和格式设置,将MS Word文档(可能包含重音符号)导出为纯文本以与文件/文本实用程序一起使用的最佳实践是什么;我为导出选择的设置是否有负面影响,即插入CR / LF? 样品 根据建议,我提供了一个示例。在这个rar 档案中,我将.docx文件与简单的段落捆绑在一起,并将其导出的.txt文件使用Word与上述选项捆绑在一起。可以将后者与docx2txt源文件的默认运行进行比较。

2
尝试LibreSSL还为时过早吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我一直在关注LibreSSL的开发和最新发行,并且碰巧我最近有一个新的FreeBSD Web服务器正在为我的个人/爱好者项目配置。不过,我对sysadmin和大量的Unix东西还是很满意的。 我看到现在有一​​个security/libressl端口。如果我只是一个系统管理员,那么我是否可以配置Nginx来使用它而不会比使用OpenSSL承受更多的压力(因为我过去已经成功设置了两次)? 那么其他期望使用OpenSSL的端口又如何呢?例如,当我去配置时databases/mariadb55-server,我可以选择使用OpenSSL,而不使用LibreSSL。如果我安装了LibreSSL,是否会看到其库并将其用作OpenSSL,还是必须等待MariaDB端口更新以显式支持LibreSSL? 我想更广泛的问题是,从业余sysadmin的角度来看,LibreSSL与OpenSSL的互换性如何?我应该推迟到LibreSSL被更广泛地使用和期望吗?

1
创建一个可处理多个可执行文件的联机帮助页
我正在打包一个带有接受几乎相同参数的可执行文件的应用程序。我只想编写(并提供)一个手册页,其中包含常见说明和参数列表。 简而言之,我想要 man execFoo man execBar 指向同一页面。 我知道如何生成两个相同的东西execFoo.1,execBar.1但是它们似乎不是最优的。由于我计划为Debian发布此软件包,因此依赖Debian打包链(例如dh_installmake)的解决方案也可以。
9 debian  man 

2
从终端停止打印机作业
我使用的不是旧版CentOs(5.0)。 最近,由于某些黑暗的原因,我在打印时遇到了问题。 作业排在队列中,我无法从条形图标中取消它们。 我尝试了一些终端命令(cancel -a要求输入密码,我没有密码,lpq -a以及其他我实际上不知道含义的东西),但工作仍停留在打印机图标上。 你有什么建议吗? 该图说明了我的情况以及第一个答案无法解决此问题。 crony是另一台打印机的名称,而我使用的是crust。

2
是否可以在CLI中直接使用shell参数变量($ 1,…,$ @)?
有时有必要在小示例中模拟并验证上述变量,然后可以将其立即复制到某些脚本等中。 我尝试通过以下方式使用一个简单的示例来解决: (find $1) /tmp sh -c '(find $1) /tmp' sh -c "find $1" /tmp echo '(find $1) /tmp' | sh 以及其他组合。还通过添加shebang解释器指令进行了实验#!/bin/sh -x,但未获得期望的结果。 我可以简单地做到这一点吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.