我想在date -s <string>使用命令时运行 shell 脚本。例如,我想通过在 shell 脚本中执行以下命令将命令记录到文件 /tmp/user.log
logger -p user.notice "date -s command executed" -f /tmp/user.log
Run Code Online (Sandbox Code Playgroud)
在shelldate -s <string>上执行时如何运行shell脚本?
为了使它更通用,当其他人在我的系统上发出特定的 linux 命令时,我想运行我的 shell 脚本。这该怎么做?
首先,我对此很陌生,所以如果这是非常基本的或者我听起来过于不了解,请原谅我。
我想检查我的 VPS 上特定目录中的所有文件,以确保文件为 644,目录为 755。FTP 是不可能的,因为文件/目录太多了。SSH 似乎是最合乎逻辑的选择,但在我转到 chmod 权限之前,我想看看我将要更改的内容。有没有办法查找和显示不符合此条件的文件/目录?
提前感谢您的任何见解。
我有这样的 bash 代码(Mac OS X):
foo.sh | tee foo.log
echo $?
问题是那$?包含 tee 的退出代码而不是 foo.sh 的退出代码。如何获取 foo.sh 的退出代码?
我错误地发现了这一点:Control+x其次是Backspace
有谁知道为什么这会清除线路?有什么文件吗?
我正在尝试使用 Java 在 AS400 操作系统中调用一个程序以作为另一个用户运行(通过获取输入用户/密码)。就像runas在 Windows 或sudoUnix 中一样——我们可以在 AS400 操作系统中做什么?
我能够调用像基本的Unix命令find,cd,ls通过对Java AS400等。
我对提供给我的实验性 AS400 沙箱的访问权限非常有限。所以我不确定sudo当以管理员身份运行时,通过 java 的命令是否有效。
我认为在 AS400 控制台上STRQSH或者QSH是自定义构建程序,并且不支持所有 Unix 命令。因此,我对什么是正确的和音乐会的做法一无所知。任何指导将不胜感激——业内人士是如何做到的?AS400 中是否有任何sudo/runas等效项?IBM 有自己的外壳吗?
如果可以的话,我通常不会使用 SSH,但是如果我必须这样做,我当然会这样做,而且我似乎已经这样做了多年,但仍然对这些不同的术语感到有些困惑......来自我的基础研究,这是我的理解,有人可以验证/纠正吗?
另外两个问题:
编辑...不是 100% 相信我上面问题的结构...请注意,上面的定义在一定程度上有点偏离,请参阅下面的答案以获得更好的定义
我有一个脚本,它从循环中的管道读取并在循环中运行一个期望脚本和一个普通的 shell 脚本。这两个脚本都运行 ssh 到另一台服务器以获取一段数据。例如:
cat /tmp/file |
while read a b c d
do
s=`expect-script server1 $b`
c=`ssh $b normal-script`
echo $s $c
done
Run Code Online (Sandbox Code Playgroud)
即使 /tmp/file 中有很多行,脚本也会在处理第一行后退出。我怀疑预期脚本正在吞噬所有标准输入,因此当它返回时,没有任何东西可以阅读。我怎样才能避免这种情况?我不希望我调用的任何脚本从主脚本的 stdin 中读取。
我想编写将共享添加到smb.conf文件的脚本。我当前的脚本只是将它附加到文件的末尾,但这并不理想。我宁愿有一些东西,如果它不存在就会添加一个新的共享,如果它存在就替换它。
我目前正在 CentOS 7 发行版上编写此脚本,但理想情况下会喜欢跨发行版工作的东西,尽管这不是必需的。
另外,我bash之所以这样做,是因为脚本是在将其他包添加到系统之前运行的。该脚本用于yum安装samba软件包,然后应该对其进行配置并添加共享。
刚刚更新了代码......我每次都在“其他”序列上退出。您可以从我的服务器下载 update.sh 文件。它只包含回声“你好更新”
更新代码 (03.11.2015)
#/bin/bash
updateoldmd5=`sed -n l globalupdate.aix`
updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`
if [ $updateoldmd5 = $updatenewmd5 ]
then
apt-get update
echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
echo "Done"
else
chmod +x /root/update.sh
./root/update.sh
echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
echo ""
md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
echo "Update done"
#Get new update.sh file for next update …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来确保我的命令在某些使用 csh 作为默认 shell 的 FreeBSD 11 机器上由 bash 执行。
以下是我在 Linux CentOS / Debian / MacOS X / pfSense 2.3(在 FreeBSD 10.3 上运行)甚至 Windows 10 bash 上运行的代码,但在 FreeBSD 11 上不起作用
cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11 'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'
Run Code Online (Sandbox Code Playgroud)
FreeBSD 11 上前一个命令的输出似乎是一个 csh 错误消息
Unmatched ".
Run Code Online (Sandbox Code Playgroud)
在检查哪个 shell 运行时,似乎是 csh 运行。以下返回“csh”
ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'
Run Code Online (Sandbox Code Playgroud)
根据我的理解,BSD 系统不允许更改 shell,除非使用 heredoc,但我不能使用 heredoc 发送 cat "/some/filelist" …