Articles of bash

ps aux | grep的结果取决于FreeBSD的terminal大小

从实验来看,即使使用ps aux | grep … ps aux | grep …输出取决于terminal的大小。 这对我来说似乎非常怪异。 是不是pipe道应该使命令的输出以可预测的方式行事? 例如, ls在自己运行的时候可以完成所有奇妙的格式化,但是像ls | less一样运行 它总是返回相同的输出样式。 但是与ls不同, ps aux | less的输出 在FreeBSD上至less减less了对terminal宽度的线(至less在bash上)。 在我简短的实验中,使用pipe道时,相同的命令总是在Linux中输出全长线。 为什么会发生这种情况,我该如何解决? 这只是一个奇怪的FreeBSD默认? 根据我的理解,这个“特性”使得在FreeBSD上编写可靠的bash脚本几乎是不可能的,因为简单的pipe道命令的输出将不可靠。 这不是问题吗? 更新:感谢伯特,我已经尝试了ps aux > somefile , 文件内的行被完全剪切,就像grep和less一样! 信息:FreeBSD 10.2,bash 4.3.42,通过SSH连接或通过KVM本地login时相同。

Bash脚本不工作

我希望这是一个简单的答案 问题: 我在以下文件夹中放置了以下名为learn-address.sh的bash脚本: vi /etc/openvpn/netem/learn-address.sh 将以下(2)行添加到.conf文件中: script-security 3 learn-address /etc/openvpn/netem/learn-address.sh 并将以下权限应用于学习地址脚本: chmod 755 /etc/openvpn/netem/learn-address.sh 但是,脚本会更新tmp文件中的文件($ ip.classid和$ ip.dev)并正确传递这些variables 但是bash脚本不执行tc类和filter命令(对qdisc没有改变) 当用户连接到OpenVPN时调用学习地址脚本时,我将在脚本上使用什么权限来执行tc类和filter命令?还是还有其他我错过的东西? 非常感谢 脚本名称:learn-address.sh #!/bin/bash statedir=/tmp/ function bwlimit-enable() { ip=$1 user=$2 dev=eth0 # Disable if already enabled. bwlimit-disable $ip # Find unique classid. if [ -f $statedir/$ip.classid ]; then # Reuse this IP's classid classid=`cat $statedir/$ip.classid` else if […]

从日志中提取

我想从下面的原始日志grep下面的信息: 2016-05-23 11:01:40 [1005583] 1b4ivg-004DZf-GX ** [email protected] F=<abbas@DomainName> P=<abbas@DomainName> R=dkim_lookuphost T=dkim_remote_smtp H=mx2.hotmail.com [65.54.188.72]:25 I=[IP Address]:56910 X=TLSv1.2:ECDHE-RSA-AES256-SHA384:256 CV=yes DN="/CN=*.hotmail.com": SMTP error from remote mail server after MAIL FROM:<abbas@DomainName> SIZE=275286: 421 RP-001 (BAY004-MC1F14) Unfortunately, messages from 16.23.21.111 weren't sent. Please contact your Internet service provider since part of their network is on our block list. You can […]

Systemd不按预期的用户启动服务

我有这个SystemD脚本: [单位]说明= RTC客户服务 [Service] user=linuxuser WorkingDirectory=/usr/lib/systemd/scripts/ Type=forking ExecStart=/bin/bash rtc_client.sh start ExecStop=/bin/bash rtc_client.sh stop Restart=no RemainAfterExit=no TimeoutStartSec=0 TimeoutStopSec=60 [Install] WantedBy=multi-user.target 它正确启动脚本,但总是以root用户身份启动。 这是: #!/bin/bash RTCENGINEID=$HOSTNAME'_engine' RTCUSER='RTCUSER' RTCPW='RTCPWD' RTCSERVER='SERVER' RTCSERVERPORT='9443' RTCREPOSITORY=https://$RTCSERVER:$RTCSERVERPORT/ccm export WORKDIR='/opt/ibm/buildsystemtoolkit/buildsystem/buildengine/eclipse' export JAVACMD=/opt/ibm/java-s390x-71/jre/bin/java export ARGS="-cp ./plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar org.eclipse.equinox.launcher.Main -application com.ibm.team.build.engine.jazzBuildEngine -repository $RTCREPOSITORY -engineId $RTCENGINEID -userId $RTCUSER -pass $RTCPW" RTCJAR=org.eclipse.equinox.launcher PIDFILE='/var/run/rtc_client/rtc_client.pid' DEBUGLOG='/tmp/rtc_debug.log' . /home/linuxuser/.bash_profile start() { cd $WORKDIR […]

如何使用bash脚本将variables从一个虚拟机传递给另一个虚拟机

什么是通过bash脚本将variables从一台机器传递到另一台机器的正确方法? 在下面的代码中,我试图从用户那里得到input,并想把它们传递给远程机器,但是远程机器没有访问这个值,任何人都可以让我知道正确的方法吗? NEWLINE=$'\n' read -s -p "Enter App FQDN:${NEWLINE}" APP_FQDN read -s -p "Enter App Password:${NEWLINE}" APP_PASSWORD read -s -p "Enter VD Password:${NEWLINE}" VD_PASSWORD sshpass -p "$APP_PASSWORD" ssh -o StrictHostKeyChecking=no -T root@$APP_FQDN << 'EOSSH' if true; then su – presto << 'PRESTO' source ~/.bash_profile cd /opt/vm/vchs/presto_agent pwd KEY=$( cat /opt/vm/vchs/presto_agent/config/settings.yml |grep '^key:'|sed 's/^key: //') echo […]

如何检查守护进程是否正在运行

我有一个简单的bash脚本,我想作为一个守护进程运行… #!/bin/bash while true; do crontab cron sleep 58m done 我运行这个守护进程使用这个命令… setsid copy_cron.sh >/dev/null 2>&1 < /dev/null & [1] 17025 但一旦运行,我无法find一个进程在ps -aux ..? 如何确保守护进程正在运行,或者如果需要的话就杀掉它?

命令行工具显示带宽百分比使用率

在Linux服务器中,我需要查看networking百分比利用率,例如,您可以看到Windows任务pipe理器: 你知道一些做这个工作的Linux 命令行(非GUI)工具吗? 我search了很多,但我没有find任何我想要的东西..

从systemd运行一个bash脚本,就像我login一样

我有一个服务作为bash脚本实现。 里面实际上是一个节点应用程序,但是对于这个问题,它可能是任何东西。 基本用例是我们在交互式shell中开发/debugging脚本,然后将其作为服务启用。 如果我ssh到我的设备(login)我的整个环境在那里,我可以在命令行启动我的脚本,没有问题。 我所在的shell已经从.bashrc,.profile等中选取了合适的环境,并且一切正常。 但是,如果我从一个systemd服务启动它,它会像交互式shell一样获得环境。 有条款给环境variables添加环境variables,但是我在这里所做的只是重复了我的交互环境所做的事情,并成为一种简单的方法来忘记一些事情。 对于一个真正的生产服务,我确信有一个正确的方法来做到这一点,但这是一个实验室应用程序,我需要简化,所以没有人在脚本上工作需要知道系统如何工作。 所以问题是:我需要做什么才能让脚本写在交互式bash shell下运行,从systemd运行? 我试图用–login启动bash,但是这不起作用。 也不在外部脚本中明确地执行源.bashrc。 以下是我正在处理的示例,以突出显示问题: 核心脚本(job.sh): #!/bin/bash cd while [ 1 ] do pwd echo USER is $USER echo PATH is $PATH which node node –version sleep 1 done 我从另一个脚本(wrapper.sh)调用它: #!/bin/bash echo starting wrapper… bash –login /home/droid/job.sh 这里是我在/etc/systemd/system/job.service中的job.service单元: [Unit] Description=Job Daemon [Service] User=droid ExecStart=/home/droid/wrapper.sh [Install] WantedBy=multi-user.target 我对systemd有什么不了解,这让我无法正常工作?

有可能忽略ssh上的横幅,但不能login

众所周知,我们可以在/ etc / motd或文件/etc/issue.net中键入横幅 所以每一个login到Linux机器的用户都会得到这个标题信息 ssh 10.34.33.23 Red Hat Enterprise Linux Server release 6.8 (Santiago) Kernel \r on an \m ########################################################################## # Welcome to OBAMA house !!! # All connections are monitored and recorded # Disconnect IMMEDIATELY if you are not an authorized user! # ########################################################################## 问题是当我们执行ssh到Linux机器的横幅也显示出来 我们可以通过使用标志-q简单地忽略ssh中的标题 ,如下所示: ssh -q 192.19.23.45 ls /hillary_emails 实际上我们有更多的〜100 […]

Bash脚本,从文件中读取,递增variables并输出到其他文件

我有一个有很多VLAN的Debian服务器。 所有的vlan从1开始。我需要从文件中读取所有IP,并将其输出到其他文件中。 一切都好,但我有一个增量variables的问题。 if [ -f /root/ip ]; then for IP_ADD in `grep -v ^# /root/ip`; do eth=1 eth=`expr $eth + 1` cat >> "/root/inter" <<END auto eth0:$eth iface eth0:$eth inet static address $IP_ADD netmask 255.255.255.0 END done fi 运行这个脚本后,我有文件“inter”输出: auto eth0:2 iface eth0:2 inet static address 192.168.110.1 netmask 255.255.255.0 auto eth0:2 iface eth0:2 inet […]