Articles of bash

摆脱PULSE_ *环境variables

我怎样才能摆脱这些环境variables? fryking@heimdal:~$ printenv | grep PULSE PULSE_CLIENTCONFIG=/usr/NX/var/run/nxdevice/D-1002-02BEA0333F591B469FD130F503B146D4/audio/client.conf PULSE_SERVER=/usr/NX/var/run/nxdevice/D-1002-02BEA0333F591B469FD130F503B146D4/audio/native.socket PULSE_CONFIG=/usr/NX/var/run/nxdevice/D-1002-02BEA0333F591B469FD130F503B146D4/audio/daemon.conf PULSE_SCRIPT=/usr/NX/var/run/nxdevice/D-1002-02BEA0333F591B469FD130F503B146D4/audio/default.pa 背景是pulseaudio不起作用。 它找不到上面的configuration文件。 如果我在一个shell中取消设置PULSE_ *,pulseaudio就起作用了。 但是,如果我打开一个新的shell。 他们又在那里… 我已经尝试了这些命令,但没有findPULSE_ *环境variables的来源: grep -rsn PULSE /etc grep -rns PULSE ~/.profile grep -rsn PULSE ~/.bashrc 另外,我已经卸载服务器上的nomachine ..

在创build脚本来更新/ etc / hosts文件中的主机名时遇到多个问题?

我完全是新的脚本,因此需要帮助解决这个问题。 我们有大约3000台虚拟机和450台物理服务器,这些服务器都是基于Linux的服务器(从9.x开始很less有Ubuntu的服务器,其中很less有Susu从8.x开始,大部分是从4.x开始到7.4的RHEL)所有他们我需要添加与IP详细信息到他们各自的/ etc / hosts文件几个主机名项。 我有不同的用户在每个服务器上有完整的sudoers访问,我可以使用因此,我创build了一个主机名,用户名和密码格式的CSV文件。 其中包含需要login的详细信息。文件名是“hostname_logins.csv” 我需要上传一个文件(即hostname_list到这些服务器中的每一个,然后在每个服务器主机文件中更新这些相同的细节。 我将使用一个RHEL 6服务器运行此脚本。 (所有其他主机都可以从这台服务器parsing,可以到达,我已经确认了。) 因此需要帮助解决这个脚本。 脚本不知道有什么问题,因为我是一个新的脚本: #!/bin/bash while read hostname_login user_name user_password do scp -p ./hostname_list $user_name:$user_password@$hostname_login:/tmp ssh -eS $user_name:$user_password@$hostname_login [bash -c "echo rishee | sudo -S mv /tmp/hostname_list ./hostname_list && cp -p /etc/hosts /etc/hosts.bkp && cat ./hostname_list >> /etc/hosts && rm -f ./hostname_list"] done < hostname_logins.csv 我需要把它作为一个单独的脚本,可以在所有这些服务器上运行。 […]

文件特定的visudo权限

我正在尝试将一些bash脚本集成到一个网站pipe理区域。 背景 我在Ubuntu服务器上运行Apache。 给Apache(万维网数据)sudo权利是远非理想,所以我不会去。 但是,可以为非sudo用户指定sudo访问权限。 出于一些安全原因,apache必须没有,或者最坏的情况下严格限制sudo访问…因此,适当的解决方法是指定www-data可以sudo的特定脚本。 为了控制这个,我使用visudo创build和编辑了etc/sudoers.tmp 。 我在var/www/html/scripts添加了一个名为sudoscripts.sh的testing脚本。 这很简单: #!/bin/sh sudo whoami 所以,作为一个testing,我添加了一行: www-data ALL=(ALL) NOPASSWD: ALL 这按预期工作。 但是,这可以在任何地方访问所有脚本。 题 然后我把它换成: www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh 这失败了(在我的应用程序例外): sudo: no tty present and no askpass program specified …即:没有sudo访问。 任何人都可以指出我做错了什么? 我已经看了几个例子/其他堆栈溢出线程,他们或者是一个糟糕的匹配,或者没有答案。 编辑清晰 这里是完整的文件: Defaults env_reset Defaults exempt_group=sudo Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User […]

为什么我的shell脚本不能在启动时执行

我希望我的openSuse 11.1服务器在启动时运行一个小的shell脚本。 我已经创build了一个脚本,并在/etc/init.d/rc5.d/中为该脚本添加了一个符号链接。 然而,脚本不会被执行。 这是我试图运行的脚本: #!/bin/bash #monitor RAID array /sbin/mdadm –monitor –daemonize –[email protected] /dev/md0 /dev/md1 /dev/md2 /dev/md3 #start SVN server /usr/bin/svnserve -d 当我从命令行自己运行脚本时,脚本工作正常(svn服务器和mdadm被按照预期守护进程)。 但是,重启服务器似乎并没有启动。 这可能会帮助你弄清楚我做错了什么: linuxplug:~ # ls -l /etc/init.d/rc5.d/exe* lrwxrwxrwx 1 root root 25 May 22 11:43 /etc/init.d/rc5.d/executeatstartup.sh -> /root/executeatstartup.sh linuxplug:~ # ls -l /root/executeatstartup.sh -rwxr-xr-x 1 root root 172 Apr 12 13:43 /root/executeatstartup.sh […]

文字处理

我有几个文件夹命名为folder1 folder2等..根文件夹下。 在每个文件夹中都有许多xml文件。 在每个xml文件中都有文本模板的出现次数(在folder1下)folder1.xxx folder1.yyy。 我想用xxx来代替所有的folder1.xxx,用yyy来代替folder2.yyy等等。我知道我首先需要得到所有的文件夹列表并且处理每个文件夹下的每个文件,并相应地replace文本。 我使用Ubuntu的Linux发行版我试过sed但没有成功。 你可以告诉我一个qucik的方式来做到这一点,无论是perl或bash或任何其他脚本。 谢谢

重新启动apache进程使用shell脚本找不到apache

我正在尝试使用每天运行的PHP在.sh脚本中重新启动apache2服务器,以便在服务器上执行维护例程。 我能够杀死Apache服务器,并通过将pkill -9 apache2放在exec调用PHP中清除任何排队的Apache进程。 我这样做是为了确保在服务器上构build的任何apache进程都被删除,而不会影响服务器的运行。 一旦apache进程被终止,我尝试通过调用/etc/init.d/apache2 restart在类似的exec调用中重启apache服务器,但是我得到以下错误: sh: /etc/init.d/apache2/: not found 如果我从命令行运行相同的命令是按预期执行的,只是不在.sh脚本中。 这个脚本中的其他shell命令也可以毫无问题地执行。 如果有人能够对这个问题有所了解,我将非常感激。 提前致谢。

那些可能会意外closures服务器的常见方式列表?

在运行一个使我的服务器停机的bash fork炸弹之后,我认为我应该更加小心,即使没有根。我认为这将是完全正常的,而我根本没有。所以我忽略了警告,跑了炸弹叉炸弹这是: :() { :|:& }; : :() { :|:& }; : 。( 请不要运行它,如果你不明白这个代码,因为它会让你的系统下来 )。我想我需要一个常见的方式列表,可能会导致一个服务器甚至没有根源下closures。 任何build议,将不胜感激。 问候`

为什么bash脚本名字中的数字搞砸了path查找?

我有一个简单的脚本,列出了一堆EC2服务器,并自动连接到他们。 这个脚本住在~/bin/ec2我的PATH看起来像这样: /Users/rob/bin:/Users/rob:/usr/local/bin:/usr/local/sbin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 每当我打电话给ec2我得到: –bash:/ Users / rob / ec2:没有这样的文件或目录 除非我把它完整的道路,那么它会工作。 如果我把这个脚本重命名为ec那么我可以在任何地方像预期的那样运行它。 脚本名称中的数字总是像这样的问题? 我在Mac OSX上。

将目录全部移动到顶部

我采取了其中有一个数字目录和文件的目录的备份。 最近有些文件丢失了。 我想移动丢失的文件。 我更喜欢移动文件,而不是仅仅复制,因为空间对于这个特定的盒子是很重要的,而且文件相当大。 我怎样才能实现这个没有GUI和命令行?

将Python程序的输出redirect到/ dev / null

我有一个Python可执行文件,由其他人编写和编译,我只需要在自己的bash脚本中运行一次。 该程序使用基于文本的用户界面,因此在继续之前等待input,但启动时执行的关键操作是在我的bash脚本中需要的。 我知道一个混乱(奇怪)的程序,但不幸的是我没有任何其他的select。 我用强制终止信号强制closures了程序,但程序的TUI坚持输出到任何运行的地方。 我已经尝试将stdout和stderrredirect到/ dev / null,并在后台运行程序后缀后缀符号,但根本无法让它玩球。 我相信原因是程序产生其他进程,并且父进程的输出redirect不影响它们。 有没有什么技巧可以用来redirectsubprocess的所有输出呢?