Articles of bash

bash:从脚本设置环境variables并留下shell提示符

我正在寻找一种方法来创build一种“设置”脚本,将设置环境variables,并在最后离开用户一个bash命令提示符。 例如: #!/bin/bash export PATH=… export LD_LIBRARY_PATH=… export PS1=… … <give a shell prompt with the above environment variables set> 我不想用环境variables设置来源文件,因为我希望用户能够退出到启动这个“设置”的shell。 如何才能做到这一点?

期望:如何使用bash子例程中的expect脚本

我希望写一个login脚本。 但是我希望这可以在其他不同的脚本中重用。 我想让所有的login命令都是bash子程序的一部分。 即,而不是 expect_login.sh #!/bin/usr/expect -f spawn …. set …. 我要这个: expect_login { # put some necessary command to initiate expect program spawn … set … } 所以我想把这个子程序放在一个文件/库中,这个文件/库可以被许多不同的脚本重用。 我怎样才能做到这一点? 谢谢 PS:请原谅我的不准确的bash / expect语法。 我只想写一个伪代码的方式。

nohup创build多个进程

我正在使用nohup脚本运行inotify命令,因为inotify停止时,我退出terminal,所以我希望脚本在后台运行。 所以我运行这样的脚本 nohup /path/to/script.sh >/dev/null 2>&1 & 问题不是nohup每次创build新文件时都要创build新的进程。 我怎样才能避免这个或任何其他build议方法来完成我的任务。 我想在backgorund运行的脚本 #!/bin/sh DIR="/opt/data/" EVENTS="moved_to" FIFO="/tmp/inotify2.fifo" on_event() { local date=$1 local time=$2 local file=$3 sleep 5 /opt/nfdump/bin/nfdump -qr "$DIR""$file" -o extended | perl -i -p -e 'use Socket; s#(\d{1,3}(\.\d{1,3}){3})\b#gethostbyaddr(inet_aton($1),AF_INET) or sprintf($1)#egi' > /opt/nfdump-ascii/nfdump-ascii."$date"."$time".log } # MAIN if [ ! -e "$FIFO" ] then mkfifo "$FIFO" fi inotifywait […]

环境variables中的dynamic逻辑?

我经常使用cURL或wget等工具从(Linux / bash)命令行调用特定的远程服务器。 此服务器需要每10分钟过期的authentication令牌。 我有一个程序,可以生成一个新的令牌。 我想要的是一个环境variables$ TOKEN,我可以从命令行使用这个variables,每10分钟刷新一次,或者更好的是,只有在请求时刷新自己,甚至最多只有每10分钟刷新一次。 我希望有一种方法可以将环境variables的评估与可执行文件绑定在一起,从而允许我通过脚本来执行此操作。 否则,我想知道是否有办法设置一个后台进程,每10分钟更新一次环境variables。

带目的地的cp / rsync命令作为符号链接到目录

我目前正在研究cPanel备份解决scheme。 我们现在被告知这个漏洞。 利用:完全根访问服务器 1.)从正常用户帐户创build恶意文件: mkdir root echo "hello" > root/.accesshash 2.)等待备份运行 3.)用一个符号链接replaceroot: ln -s /root root 4.)恢复root / .accesshash(我正在以root运行这个命令:“cp -rf /backup/.accesshash/home/user/root/”) 5.)用户现在拥有root权限,因为我们覆盖了/root/.accesshash。 攻击者可以通过将访问哈希放入此文件,以root用户身份login到WHM。 root@cpanel [/home/master]# cat /root/.accesshash hello root@cpanel [/home/master]# ls -l /root/.accesshash -rw-r–r– 1 master master 3 Nov 20 21:41 /root/.accesshash root@cpanel [/home/master]# 有人可以build议我这个解决方法吗? 提前致谢。

什么是Linux命令来获得当前的PPTP IP地址?

我有一个Linux脚本,允许我通过一个VPN接口传送一些stream量,并通过另一个接口传送其他stream量(来自不同的IP)。 这是我的脚本: echo "ip route del default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh echo "ip route add default via 192.168.1.254 dev eth0;" >> /tmp/firewallscript.sh echo "ip route add table 55 default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK –set-mark 55;" >> /tmp/firewallscript.sh echo "iptables -t […]

Bash脚本用于更新不接受RSA密钥的多个服务器

在我的环境中,我pipe理大约10台需要定期更新软件包的Linux服务器。 我有一个脚本编写连接到每个单独运行更新。 另外,我在每台服务器上安装了RSA密钥。 这是我的代码: hosts=(host1 host2 host3 host4) read -sp "sudo password (will be used on all servers): " password && echo "" for host in ${hosts[@]} do echo "——————————————-$host—————-" ssh -t $host "sudo -Sp '' apt-get update <<EOP && sudo apt-get upgrade -y $password EOP" done 我的目标是read一次密码,然后让apt-get update在没有提示的情况下运行。 目前在运行脚本时,系统会在每个系统上的echo声明后input密码。 在监视/var/log/auth.log文件时,直到input密码之后才会生成条目。 (我期望用RSA密钥login尝试失败)。 直接连接到每个服务器时,RSA密钥可正常工作,并可通过检查/var/log/auth.log文件进行validation。 在服务器上使用tail -F […]

启动脚本中的错误PATH

由于Synology NAS(x86)上的系统更新,我的启动脚本有一些问题。 Bash脚本存储在/usr/local/etc/rc.d 。 脚本是肯定执行的,因为我有一个运行在根上的服务器,它的启动没有任何问题。 但是如果我将其他服务器可执行文件放在“su”命令中,以便与其他用户启动,则其他服务器可执行文件无法正常启动。 在脚本中执行的命令如下: su admin -c /volume1/homes/admin/subsonic/subsonic.sh Bash脚本运行时没有任何问题,但脚本启动java与特定的命令,那里找不到java的path。 su admin -c "screen -dmS ncdc ncdc" 在这一行上,问题是系统找不到screen的path。 如果我没有su启动它,以便它将作为根运行,那么它的工作原理。 UPDATE 如果我用减号开始命令,那么我也会得到这样的行为: root@schreda-NAS:~ # su – admin -c "screen -dmS test test" -bash: screen: command not found path值将由/etc/profile 。 我不覆盖~/.bash_profile的path

OSX – 如何将本地用户设置/首选项复制到新的移动用户

我们正在努力将所有本地用户迁移到绑定到LDAP的移动帐户。 我正在编写一个脚本,提示用户input他们的电子邮件,并创build一个新的移动用户,然后移动他们的所有文件,以及他们的偏好。 完美的世界,用户注销本地帐户,并进入新的帐户,它看起来就像移动之前(包括桌面墙纸,docker设置等)。 我已经想出了如何从用户提示创build移动帐户。 我想我有文件想出了使用mv由于文件/文件夹的数量太大,无法复制。 我遇到的问题是设置/首选项。 我已经认识到钥匙链不能轻松工作,所以我确定它不属于它的一部分。 我试过rsync的库/首选项,但它不工作….任何人有这方面的经验? 提前感谢。

Rsync插件通过脚本或cli进行许多本地wordpress安装

我在生产服务器上维护了大量的wordpress安装,我们正在考虑部署InfiniteWP来pipe理这些安装。 我正在寻找一种方法来编写插件文件夹的分发到所有这些安装。 在服务器的wp-prod上,所有的站点都存储在/ srv / sitename / site /插件需要从〜/ iws-plugin复制到/ srv / sitename / site / wp-content / plugins / 这里有一些伪代码来解释我需要做什么: array dirs = <all folders in /srv> for each d in dirs if exits "/srv/d/site/wp-content/plugins" rsync -avzh –log-file=~/d.log ~/plugin_base_folder /srv/d/site/wp-content/plugins/ else touch d.log echo 'plugin folder for "d" not found' >> ~/d.log end end […]