我在 bash 脚本中使用 rsync 来保持几个服务器和 NAS 之间的文件同步。我遇到的一个问题是尝试生成在 rsync 期间已更改的文件列表。
这个想法是,当我运行 rsync 时,我可以将已更改的文件输出到文本文件中 - 更希望内存中有一个数组 - 然后在脚本存在之前,我可以只对已更改的文件运行 chown 。
有没有人找到一种方法来执行这样的任务?
# specify the source directory
source_directory=/Users/jason/Desktop/source
# specify the destination directory
# DO NOT ADD THE SAME DIRECTORY NAME AS RSYNC WILL CREATE IT FOR YOU
destination_directory=/Users/jason/Desktop/destination
# run the rsync command
rsync -avz $source_directory $destination_directory
# grab the changed items and save to an array or temp file?
# loop through and chown each changed file
for changed_item …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个 bash 脚本(在 Ubuntu 中),它将使用 tar 备份目录。
如何检查脚本,使其只能以 root 身份(或使用 sudo)运行?
例如,如果用户运行该脚本,则应该说该脚本必须以 sudo 权限运行,然后退出。如果脚本以 root 身份执行,它将继续通过检查。
我知道必须有一个简单的解决方案,我只是无法通过谷歌搜索找到它。
有什么办法可以pgrep让我知道每个进程的所有信息ps吗?我知道我可以ps通过管道,grep但这需要大量打字,而且它还为我提供了grep我不想要的流程本身。
在与同事长时间讨论后提出这个问题,我真的很想在这里澄清一下。
我启动了一个后台进程,通过将“ &”附加到命令行或通过CTRL-Z使用“ bg”停止并在后台恢复它。然后我退出。
发生什么了?
我们很确定它应该被 SIGHUP 杀死,但这并没有发生;再次登录后,该进程愉快地运行并pstree显示它已被“采用”init.
这是预期的行为吗?
但是,如果是,那么nohup命令的目的是什么?看起来这个过程无论如何都不会被杀死,不管有没有它......
更多细节:
nohup和/或的情况下启动的&;然后它被暂停CTRL-Z并在后台恢复bg。exit ”命令)。scp文件复制操作。pstree显示进程正在运行并且是init.更清楚地说明问题:是否将进程置于后台(使用&或bg)使其 ignore SIGHUP,就像nohup命令一样?
我尝试手动发送一个SIGHUPto scp: 它退出了,所以它绝对不会忽略信号。
然后我再次尝试启动它,将它放在后台并注销:它被“采用”init并继续运行,当我重新登录时我在那里找到了它。
我现在很困惑。看起来SIGHUP在注销时根本没有发送。
这有效:
du -cshm .
Run Code Online (Sandbox Code Playgroud)
但这失败了:
du -cshg .
Run Code Online (Sandbox Code Playgroud)
我如何以 GB 为单位查看它?
我一直在谷歌上搜索这个问题无济于事。我正在工作中自动化构建过程,我要做的就是获取版本号和可能是多行的构建的微小描述。它运行的系统是 OSX 10.6.8。
我已经看到了从使用 CAT 到根据需要处理每一行的所有内容。我不知道我应该使用什么以及为什么。
read -d '' versionNotes
Run Code Online (Sandbox Code Playgroud)
如果用户必须使用退格键,则会导致输入乱码。也没有终止输入的好方法,因为 ^D 不会终止,而 ^C 只是退出进程。
read -d 'END' versionNotes
Run Code Online (Sandbox Code Playgroud)
有效...但如果需要退格键,输入仍然会出现乱码。
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
Run Code Online (Sandbox Code Playgroud)
没有正确结束输入(因为我来不及查找空字符串的匹配项)。
我需要部署一个自动化进程(通过 1 分钟的 cron 脚本)来查找特定目录中的 tar 文件。如果找到 tar 文件,则将其解压缩到适当的位置,然后删除 tar 文件。
tar 文件会通过 SSH 从另一台服务器自动复制到此服务器。在某些情况下,tar 文件非常大,有很多文件。
我期望遇到的问题:如果将 tar 文件复制到服务器需要 1 分钟以上,并且 cron 脚本每分钟运行一次,它将看到 .tar.gz 文件并尝试执行解压它,即使 tar 文件仍在写入过程中。
有没有办法(通过 bash 命令)来测试当前是否正在写入文件,或者它是否只是部分文件等?
我想到的另一种方法是将文件复制为不同的文件扩展名(如.tar.gz.part),然后.tar.gz在传输完成后重命名为。但我想我会尝试弄清楚是否有一种简单的方法可以首先在命令行中确定文件是否完整......有任何线索吗?
我在 Ubuntu 10.04 机器上,并通过 ssh 在后台 (myserver &) 启动了一个服务器。它一直运行良好,但我需要一种方法来获取服务器的标准输入,因为控制服务器的唯一方法是通过这种方法。
有什么方法可以获取已经运行的进程的标准输入,以便我可以写入它(并希望读取它的标准输出)?显然,如果我现在要这样做,我会从重定向到标准输入的 FIFO 开始,但不幸的是,现在这样做有点晚了。
有任何想法吗?
我有一些经常更改 IP 的云盒。
我使用主机名 ssh,但由于此错误消息,每次服务器启动时都必须编辑 known_hosts 文件:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is…
Run Code Online (Sandbox Code Playgroud)
除了任何安全风险以及与我想做的事情相关的风险之外,有没有办法忽略此错误或自动覆盖 known_hosts 文件,以便我不必总是自己编辑它?
出于好奇,当您的 shell 字符集无法执行类似cat /dev/urandom操作时,有没有办法将其修复到位?
bash ×10
linux ×6
scripting ×3
process ×2
background ×1
dev ×1
fingerprint ×1
grep ×1
known-hosts ×1
permissions ×1
root ×1
rsync ×1
shell ×1
ssh ×1
stdin ×1
tar ×1
tty ×1