小编ken*_*orb的帖子

如何修复无效的地图节点链接?

我的驱动器被格式化为 hfs+ 并且不干净。

例如,当我尝试通过 挂载驱动器时mount -f -o rwdmesg显示错误:

hfs: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.
mounting read-only.
Run Code Online (Sandbox Code Playgroud)

所以当我试图通过fsck.hfsplus(部分hfsprogs)修复它时,它说:

$ fsck -dyf /media/sdd2
** /dev/sdd2
    Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
** Checking HFS Plus volume.
** Detected a case-sensitive catalog.
** Checking Extents Overflow file.
** Checking Catalog file.
   Invalid map node linkage
(4, 0)
** Volume check failed.
volume check failed with error 7 
    volume type is pure HFS+ 
    primary …
Run Code Online (Sandbox Code Playgroud)

osx fsck hfs+

6
推荐指数
1
解决办法
9440
查看次数

如何计算重复的最后一列而不删除它们?

我有一个包含 4 列的文件。我想比较最后三列并计算它们出现的次数而不删除任何行。我只希望计数出现在每一行的前面。

我的文件看起来像这样:

ID-jacob  4.0  6.0  42.0  
ID-elsa   5.0  8.0  45.0  
ID-fred   4.0  6.0  42.0  
ID-gerard 6.0  8.0  20.0  
ID-trudy  5.0  8.0  45.0  
ID-tessa  4.0  6.0  42.0
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

3 ID-jacob  4.0  6.0  42.0  
2 ID-elsa   5.0  8.0  45.0  
3 ID-fred   4.0  6.0  42.0  
1 ID-gerard 6.0  8.0  20.0  
2 ID-trudy  5.0  8.0  45.0  
3 ID-tessa  4.0  6.0  42.0
Run Code Online (Sandbox Code Playgroud)

我尝试使用 sort 和 uniq,但这只会给我每个重复行的第一行:

cat file | sort -k2,4 | uniq -c -f1 > outputfile
Run Code Online (Sandbox Code Playgroud)

command-line shell text-processing

5
推荐指数
1
解决办法
1513
查看次数

如何更改匿名管道的权限?

我有从变量加载 SSH 密钥的脚本(作为 CI 环境中脚本的一部分),以便不将私有文件保存在公共存储库中,但是ssh-add抱怨权限错误(似乎无法绕过它)。所以我的方法是找到更改动态创建的匿名管道权限的方法。

例如:

$ stat <(:)
  File: ‘/dev/fd/63’
  Size: 0           Blocks: 0          IO Block: 512    fifo
Device: 397f3928h/964639016d    Inode: 818277067   Links: 0
Access: (0660/prw-rw----)  Uid: (  501/  kenorb)   Gid: (   20/   staff)
Access: 2015-10-10 22:33:30.498640000 +0100
Modify: 2015-10-10 22:33:30.498640000 +0100
Change: 2015-10-10 22:33:30.498640000 +0100
 Birth: 2015-10-10 22:33:30.498640000 +0100
Run Code Online (Sandbox Code Playgroud)

显示0660许可。我检查了我的umask,似乎与此无关。

这是一个简单的测试(在 OS X 上,默认为 0660):

$ ssh-add <(cat ~/.ssh/id_rsa)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 …
Run Code Online (Sandbox Code Playgroud)

bash permissions umask pipe

5
推荐指数
1
解决办法
3208
查看次数

为什么使用 -F /dev/stdin 语法时 ssh 会立即断开连接?

我已经通过以下命令配置并启动了默认的 Ubuntu VM 框:

vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
Run Code Online (Sandbox Code Playgroud)

现在,出于教育目的,我想使用以下语法来 ssh 它:

ssh -F /dev/stdin < <(vagrant ssh-config) default
Run Code Online (Sandbox Code Playgroud)

此命令将成功连接到虚拟机,但它会在打印motd后断开连接。

我想了解为什么会发生这种情况以及是否有办法避免它?

我试过强制伪终端分配没有成功。

我知道以下两个命令语法按预期工作:

vagrant ssh-config > ssh_tmp
ssh -F ssh_tmp default
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么在使用进程替换语法时会失败?

command-line osx ssh process-substitution vagrant

5
推荐指数
1
解决办法
461
查看次数

grep 模式与文件完全匹配并仅在第一列中搜索

我有一个这样的大文件:

denovo1 xxx yyyy oggugu ddddd
denovo11 ggg hhhh bbbb gggg
denovo22 hhhh yyyy kkkk iiii
denovo2 yyyyy rrrr fffff jjjj
denovo33 hhh yyy eeeee fffff
Run Code Online (Sandbox Code Playgroud)

那么我的模式文件是:

denovo1
denovo3
denovo22
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用fgrep以便仅提取与我的文件中的模式完全匹配的行(所以我想要denovo1但不是denovo11)。我试图-x用于精确匹配,但后来我得到了一个空文件。我试过:

fgrep -x --file="pattern" bigfile.txt > clusters.blast.uniq
Run Code Online (Sandbox Code Playgroud)

有没有办法只在第一列中进行 grep 搜索?

command-line shell grep regular-expression

4
推荐指数
1
解决办法
1万
查看次数

如何在进程替换中读取标准输入?

我想将标准输出发送到多个命令,但是我不确定如何从进程替换中的标准输入读取?

我的尝试:

$ echo foo >(cat /dev/stdin) >(cat /dev/stdin)
foo /dev/fd/63 /dev/fd/62

$ echo foo >(cat -) >(cat -)
foo /dev/fd/63 /dev/fd/62

$ echo foo >(cat <&3) >(cat <&3) 3<&0
foo /dev/fd/63 /dev/fd/62
-bash: 3: Bad file descriptor
-bash: 3: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

同一问题的替代版本:

$ cat file | tee &>/dev/null >(cmd1 /dev/stdin) >(cmd2 /dev/stdin)
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

command-line bash io-redirection process-substitution

4
推荐指数
1
解决办法
2924
查看次数

为什么 GNU find -execdir 命令的行为与 BSD find 不同?

在我的OSX,我已经安装了GNUfind旁边默认BSDfind通过:brew install findutils

据我了解,BSDfind遵循 POSIX 标准,而 GNU 将其设为可选(根据这篇文章),这在预期输出中造成了很多不一致。

例如:

BSD 查找

$ find -L /etc -execdir echo {} ';' | head
etc
AFP.conf
afpovertcp.cfg
aliases
aliases.db
apache2
extra
httpd-autoindex.conf
httpd-dav.conf
httpd-default.conf
Run Code Online (Sandbox Code Playgroud)

GNU 查找

$ gfind --version
find (GNU findutils) 4.4.2
$ POSIXLY_CORRECT=1 gfind -L /etc -execdir echo {} ';' | head
/etc
/etc/AFP.conf
/etc/afpovertcp.cfg
/etc/aliases
/etc/aliases.db
/etc/apache2
/etc/apache2/extra
/etc/apache2/extra/httpd-autoindex.conf
/etc/apache2/extra/httpd-dav.conf
/etc/apache2/extra/httpd-default.conf
gfind: `echo' terminated by signal 13
gfind: `echo' terminated …
Run Code Online (Sandbox Code Playgroud)

osx find gnu posix

4
推荐指数
1
解决办法
1258
查看次数

如何使用`find`命令自动转义shell元字符?

我在目录树下有一堆 XML 文件,我想将它们移动到同一目录树中具有相同名称的相应文件夹。

这是示例结构(在外壳中):

touch foo.xml bar.xml "[ foo ].xml" "( bar ).xml"
mkdir -p foo bar "foo/[ foo ]" "bar/( bar )"
Run Code Online (Sandbox Code Playgroud)

所以我的方法是:

find . -name "*.xml" -exec sh -c '
  DST=$(
    find . -type d -name "$(basename "{}" .xml)" -print -quit
  )
  [ -d "$DST" ] && mv -v "{}" "$DST/"' ';'
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

‘./( bar ).xml’ -> ‘./bar/( bar )/( bar ).xml’
mv: ‘./bar/( bar )/( bar ).xml’ and ‘./bar/( bar )/( bar ).xml’ are the same file …
Run Code Online (Sandbox Code Playgroud)

find shell-script quoting wildcards

4
推荐指数
1
解决办法
1983
查看次数

无法导入池,因为使用不兼容的版本进行格式化

我无法访问 Debian 上的 zfs 池,因为它说我的版本太旧:

root@Microknoppix:~# zpool import
  pool: WD_4TB
    id: 12726205736285302822
 state: UNAVAIL
status: The pool is formatted using an incompatible version.
action: The pool cannot be imported.  Access the pool on a system running newer
    software, or recreate the pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-A5
config:

    WD_4TB                                                       UNAVAIL  newer version
      disk/by-id/ata-WDC_WD40EZRX-00SPEB0_WD-WCC4E0184707-part1  ONLINE
Run Code Online (Sandbox Code Playgroud)

此外,提供的sun 链接已损坏。

我已经通过以下方式安装了最新的 zfs-fuse:

root@Microknoppix:~# apt-cache madison zfs-fuse
  zfs-fuse |   0.7.0-12 | http://ftp.de.debian.org/debian/ testing/main i386 Packages
  zfs-fuse |   0.7.0-12 | http://ftp.de.debian.org/debian/ unstable/main i386 Packages
  zfs-fuse |    0.7.0-8 …
Run Code Online (Sandbox Code Playgroud)

zfs debian apt knoppix

3
推荐指数
1
解决办法
8020
查看次数

创建后如何直接访问临时文件?

我有一个通过 SSH 连接到远程主机的脚本,创建临时文件并执行以下命令:

调用系统(mysql --database=information_schema --host=localhost < /tmp/drush_1JAjtt)

每次它创建不同的文件(模式:)drush_xxxxxx

我已经尝试在远程手动运行几次:

tail -f /tmp/drush_*
Run Code Online (Sandbox Code Playgroud)

但我的连接速度太慢,大多数时候我都会遇到错误:

tail:无法打开`/tmp/drush_*'进行读取:没有这样的文件或目录

有什么技巧可以在创建此类文件后立即访问该文件以显示其内容吗?

linux command-line tmp files

3
推荐指数
1
解决办法
3921
查看次数