Note that the order of redirections is significant. For example, the command
ls > dirlist 2>&1
directs both standard output and standard error to the file dirlist,
while the command
ls 2>&1 > dirlist
directs only the standard output to file dirlist, because the
standard error was duplicated from the standard output before the standard
output was redirected to dirlist.
Run Code Online (Sandbox Code Playgroud)
现在,最后一部分让我感到困惑。在这种情况下,任何标准错误都会打印到终端,任何 STDOUT 都会转到 dirlist 文件。这就是会发生的事情,但这不是我理解手册的方式。
似乎应该说“因为在将标准输出重定向到 dirlist 之后,标准错误是从标准输出中复制出来的”。如果在将 STDOUT 定向到文件之前将 STDERR 发送到 STDOUT,那么该文件是否不包含 STDOUT 和 STDERR?
有人可以帮我解决这个问题吗?只是我的阅读理解能力差吗?在这种情况下,重复一词的使用对我来说似乎有点奇怪。也许那是扔我。
使用 auto.master 和让 autofs 自动挂载您的 NFS 挂载点与仅将信息放在 fstab 中有什么区别?Linux 红帽 5/6
我有一个 rsync cron 作业,它正在推动服务器负载并触发监视器警报。如果我将作业设置为以较高的 nice 级别运行,是否会有效减少它对系统负载值的影响?
我是否可以执行以下操作来更改 root 的 crontab 中某个特定 crontab 作业的邮件发送位置(不要发送到 root 执行 Do something 作业,只需发送到 piglover):
# Make a hambone appear
* * * * * /scripts/hambone.pl
# Eat Ham
* * * * * /scripts/manga_ham.py
OLDMAILTO=$MAILTO
MAILTO=porklover.cramble.edu
#Do something
* * * * * /scripts/chown_abrahams_niece.sh
MAILTO=$OLDMAILTO
Run Code Online (Sandbox Code Playgroud) 当 root 登录被禁用 (SSH) 但用户可以运行sudo -i或su -成为 root时,跟踪谁在日志中充当 root 的首选方法是什么?我也想使用原始用户名执行每个命令。RHEL 6 或任何 Linux rsyslog 等。
我想只使用 bash拆分'hello'成h e l l o一个数组,我可以在 sed 中做到这一点,sed 's/./& /g'但我想知道当我不知道分隔符是什么时,如何在 Bash 中将一个字符串拆分成一个数组,或者分隔符是任何单个字符。我不认为我可以在${i// /}没有一些创造力的情况下使用,因为分隔符是未知的,而且我认为该表达式不接受正则表达式。我尝试将 BASH_REMATCH 与 [[ string =~ ([az].).* ]] 一起使用,但它没有按我预期的那样工作。仅使用 bash 来完成某种string.split()行为的正确方法是什么?原因是我试图在所有 bash 中编写 rev 实用程序:
while read data; do
word=($(echo $data|tr ' ' '_'|sed 's/./& /g'))
new=()
i=$((${#word[@]} - 1))
while [[ $i -ge 0 ]]; do
new+=(${word[$i]})
(( i-- ))
done
echo ${new[@]}|tr -d ' '|tr '_' ' '
done
Run Code Online (Sandbox Code Playgroud)
但是我使用了 tr 和 sed,我想知道如何正确进行拆分,然后我会将其修复为所有 bash。只是为了好玩。
我想在 shell 脚本 (bash) 中设置一个标志,以便如果有任何返回非零值,则设置一个标志(即设置一个类似 的变量errors="True")。
到目前为止,我想过调用脚本,scriptname.sh 2>Error.log然后执行以下操作:
if $(wc -l error.log) != 0; then
errors="True"
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法。请赐教。
我有这样的事情:
FILES=()
for i in *.map
do
FILES+=($i)
done
find /var/candy -name "chocolate_[0-9]" | while read snack
do
FILES+=($snack)
done
for file in ../out/amsterdam/apples/{system.map,vmlinux}
do
FILES+=($file)
done
Run Code Online (Sandbox Code Playgroud)
但数组最终只包含../out/amsterdam/apples/system.map和../out/amsterdam/apples/vmlinux。其他值发生了什么变化?我知道它们存在于这些循环中,因为我回声以确保变量包含某些内容。
Linux 应用程序通常 fork 然后 exec(使用 execve() ),但 Java 应用程序和某些 Apache MPM 使用线程。如果fork,使用fork + exec来生成一个进程,线程的高级版本是什么?JVM 或 Worker MPM 如何产生线程?
我的理解是,bash -c file这与在交互式 bash shell 中并调用 是相同的意思file,其中的bash file意思是使用 bash 解释文件(就好像它是一个 shell 脚本)。这是准确的吗?这是否是您无法运行的bash <executable>原因,因为它会尝试将文件解释为 shell 脚本而不是派生和运行 exec 文件?