小编koj*_*iro的帖子

`cd` 外部命令有什么意义?

正如在这个很好的答案中所提到的,POSIX 系统cd除了内置的 shell 之外还有一个外部二进制文件。在 OS X 10.8 上,它是/usr/bin/cd. 您不能像内置函数那样使用它,cd因为它在更改自己的工作目录后立即退出。它的目的是什么?

cd-command posix command

81
推荐指数
2
解决办法
7499
查看次数

如何在不删除符号链接的情况下复制目录结构?

我需要将一堆文件“安装”到另一个目录,保持源文件的目录结构完整。例如,如果我./foo/bar/baz.txt要去,/var/www/localhost/webroot/我希望结果是/var/www/localhost/webroot/foo/bar/baz.txt. rsync中具有此功能--relative,但是当我这样做时,我发现它对符号链接不友好:

$ ls -ald /var/www/localhost/webroot/ | grep ^l
lrwxrwxrwx  1 www-data www-data     15 2014-01-03 13:45 media -> ../static/media
lrwxrwxrwx  1 root     root         13 2014-02-24 13:47 var -> ../static/var
$ rsync -qrR . /var/www/localhost/webroot/
$ ls -ald /var/www/localhost/webroot/ | grep var
drwxr-xr-x 3 root root 4096 2014-02-24 13:52 /var/www/localhost/webroot/var
Run Code Online (Sandbox Code Playgroud)

所以你看到符号链接不再是符号链接——文件被复制到了错误的地方!

rsync也有--no-implied-dirs选项,从表面上看似乎可以做我想做的事,但它只能在执行递归 rsync时按我的意图工作,所以我必须:

find . -type f -print0 | xargs -0I{} rsync -R --no-implied-dirs {} /var/www/localhost/webroot/
Run Code Online (Sandbox Code Playgroud)

有没有更直接的方法来完成这种文件镜像而不清除中间符号链接目录(有或没有 …

rsync symlink mirror

31
推荐指数
3
解决办法
5万
查看次数

将任意备份放在 /var/backups 中是否不好/危险/不合适?

/var/backups基于 Debian 的系统上有一个系统创建的目录。我需要一个地方来存储几个 git 存储库的备份(主要存储在 bitbucket 上)。如果我将它们存储在 /var/backup/git 中,这会破坏 apt-get,还是会在不合时宜的时候被自动删除?有什么理由我不应该使用 /var/backup 吗?如果有,什么是合理的选择?

fhs debian

23
推荐指数
2
解决办法
7457
查看次数

在 bash 中索引一个字符串

如何在 sh/bash 中按索引引用字符串?也就是说,基本上是分裂它。

我正在尝试删除文件名的 5 个字符。所有名称都具有以下结构:name_nr_code。我正在尝试删除 5 个字母数字代码位。name_nr_总是 10 个字符。

有没有这样的事情?

for i in * ; do mv "$i" "$i"[:10] ; done

shell bash string

22
推荐指数
2
解决办法
7万
查看次数

我必须将私钥存储在文件中吗?

我有一个数据库驱动的应用程序,需要通过 ssh 与另一台服务器进行通信。Web 应用程序可以生成密钥对并将公钥提供给用户,或者它可以在 Web 表单的字段中接受未加密的私钥。然后它使用可逆加密对密钥进行加密并将其存储在其数据库中。

当 Web 应用程序开始与 ssh 服务器通信时,我需要解密私钥并以某种方式将其提供给 ssh。我可以创建一个安全的临时文件mktemp,将 ssh 指向它,然后销毁该文件,但这是额外的工作,它以一种似乎没有必要的新方式公开密钥。我看过man ssh,man ssh-agentman ssh-add,但似乎没有任何方法可以使用密钥而不先将其添加到文件中。我错过了什么?

ssh key-authentication ssh-agent

8
推荐指数
1
解决办法
6152
查看次数

快速递归删除的快捷方式

有时我想递归删除大量临时文件,并在不等待命令完成的情况下回收目录名。(例如,如果我想取消并重新签出版本控制工作副本。)

虽然这种情况并不经常发生,但发生时我通常使用如下命令:

mv "$oldname" dienow && rm -rf dienow &
Run Code Online (Sandbox Code Playgroud)

当然,我可以为此创建一个函数或别名,但是如果不这样做,是否有更短的方法来表达上述内容?

command-line files

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

强制 pubkey-auth 用户在第一次登录时设置密码

当我创建一个新的用户帐户时,我要求用户向我发送一个公钥,并希望在用户第一次使用密钥对身份验证登录时强制设置密码。如果我使用不可能/禁用和过期的密码创建一个帐户,但在他们的 .ssh/authorized_keys 文件中放置了一个公钥,则用户在第一次登录时需要更改他的密码,但不能输入他当前的密码!

# adduser --disabled-password foo
…
# chage -d0 foo
Run Code Online (Sandbox Code Playgroud)

什么是更合适的方法来解决这个问题?

users ssh key-authentication

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

带引号的 Shell 算术扩展

在 Bash 和 Dash 中,在算术扩展中使用引号是非法的:

$ bash -c 'x=123;echo $(("$x"))'
bash: "123": syntax error: operand expected (error token is ""123"")
$ dash -c 'x=123;echo $(("$x"))'
dash: 1: arithmetic expression: expecting primary: ""123""
Run Code Online (Sandbox Code Playgroud)

Bash 在作为 sh 调用时给出相同的错误。不过,Ksh 和 FreeBSD 的 Bourne Shell 并不介意:

$ ksh -c 'x=123;echo $(("$x"))'
123
$ sh -c 'x=123;echo $(("$x"))'
123
Run Code Online (Sandbox Code Playgroud)

根据Bash 参考手册

该表达式被视为在双引号内,但括号内的双引号不会被特殊处理。所有代币……都经过……报价删除。

(这与POSIX所说的基本相同。)

最后,$(( ))与其他算术上下文(( ))(例如,在条件表达式中)相比,Bash 的处理方式有所不同。后者用引号很好。

要么我不明白这里的引用删除意味着什么,要么这是其中一些 shell 实现中的错误。如果是前者,“引用删除”实际上是什么意思?或者,这只是一个错误?

shell arithmetic

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

GNU kill(1) 接受名称参数多久了?

我们最近发现 GNU kill 超越了spec将一个名称作为其参数,并尝试以与pkill(1) 或 killall 的某些实现相同的方式杀死所有具有该名称的进程

我一直没能找到 GNU 的 kill 更新日志。这个“功能”是什么时候添加的?

kill

2
推荐指数
1
解决办法
333
查看次数