我的驱动器被格式化为 hfs+ 并且不干净。
例如,当我尝试通过 挂载驱动器时mount -f -o rw,dmesg显示错误:
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) 我有一个包含 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) 我有从变量加载 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) 我已经通过以下命令配置并启动了默认的 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)
所以我想知道为什么在使用进程替换语法时会失败?
我有一个这样的大文件:
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 搜索?
我想将标准输出发送到多个命令,但是我不确定如何从进程替换中的标准输入读取?
我的尝试:
$ 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)
这样做的正确方法是什么?
在我的OSX,我已经安装了GNUfind旁边默认BSDfind通过:brew install findutils。
据我了解,BSDfind遵循 POSIX 标准,而 GNU 将其设为可选(根据这篇文章),这在预期输出中造成了很多不一致。
例如:
$ 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)
$ 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) 我在目录树下有一堆 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) 我无法访问 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) 我有一个通过 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_*'进行读取:没有这样的文件或目录
有什么技巧可以在创建此类文件后立即访问该文件以显示其内容吗?