我们可以轻松做到:
myalias='command param1 param2'
Run Code Online (Sandbox Code Playgroud)
然后myalias param3运行
command param1 param2 param3
Run Code Online (Sandbox Code Playgroud)
我需要一个运行相同但没有最后一个“空格”的别名:
command param1 param2param3
Run Code Online (Sandbox Code Playgroud)
例如,我在 /24 子网中有许多服务器,需要使用 ip 运行相同的命令。所以我想要别名,command param1 192.168.0.然后运行myalias 103,命令将应用于 192.168.0.103。
我试图$1在别名的末尾添加但没有运气。
我正在开发一个 perl 脚本,希望由对 shell、linux 等了解很少的 Mac 用户下载,比如说办公室经理和会计师。
下载后,只需通过 GUI 双击即可执行脚本。
我的目标是让不精通技术的用户尽可能轻松地完成这项工作。
我的疑问是:
#!/usr/bin/perl. 我应该在那里写什么?除了打开控制台并输入之外还有其他方法perl ./script.pl吗?我想将 vsftpd 版本放入 shell 变量中。我可以轻松获得它的控制台:
# vsftpd -version
vsftpd: version 2.2.2
Run Code Online (Sandbox Code Playgroud)
我也可以将很多其他信息放入变量中:
# i=`bash --version 2>&1 | head -n1`; echo "=$i=";
=GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)=
Run Code Online (Sandbox Code Playgroud)
(请注意输出在“=”符号之间)。这种简单的方法不适用于 vsftpd:
# i=`vsftpd -version 2>&1`; echo "=$i=";
vsftpd: version 2.2.2
==
Run Code Online (Sandbox Code Playgroud)
请注意这里的 $i 是 ""。
我究竟做错了什么?
我正在尝试处理“顶级”输出以设置 CPU 性能数据。当我只是 grep 输出它是彩色的:
或者
数字是粗体的,它在输出中添加了很多不必要的数据:

我试图去除颜色代码答案,但它不起作用。为了性能,我想在该问题中避免其他更复杂的答案。
那么如何禁用颜色输出呢?
PS:我找到了如何获取数据:我只能使用数字 awk 然后它可以工作,但仍然想知道是否有任何方法可以在此处禁用颜色。
假设有一个 php 网站,我想根据站点代码执行在防火墙级别阻止一个 ip。该站点在非 root 用户下运行。
我打算将 IP 从站点代码传递给一个脚本(仅可写到 root),例如
#!/bin/bash
function validate_ip()
{ ... code here ...}
if validate_ip $1; then
/usr/sbin/iptables -I INPUT -s $1 -j DROP
echo 'blocked';
else
echo 'bad IP $1';
fi
Run Code Online (Sandbox Code Playgroud)
使用 suid 位。我想添加额外的 IP 验证以避免 XSS 和其他坏事(如果你愿意,可以考虑它的偏执),所以不想让网站直接调用 iptables。
该脚本不起作用,can't initialize iptables table 'filter': Permission denied (you must be root)因为bash 丢弃了 suid 位
有解决方法:在 sudo 中允许iptables,但我认为它不安全。我没有时间/不可能开发/购买可以完成任务的二进制文件。有人建议围绕脚本进行二进制包装,但我犹豫了,也许有更好的方法?
所以,问题是:如何允许非 root 应用程序以安全的方式阻止 iptables 防火墙中的 ip?
我有一个文本文件(或管道输出,在这里无关紧要)
memcached.uptime 1061374
memcached.curr_connections 480
memcached.cmd_get 478962548
memcached.cmd_set 17641364
memcached.cmd_flush 0
Run Code Online (Sandbox Code Playgroud)
如果我使用命令,cat test.txt | while read i; do echo $i; done它会产生非常预期的输出:
memcached.uptime 1061374
memcached.curr_connections 480
memcached.cmd_get 478962548
etc
Run Code Online (Sandbox Code Playgroud)
但是如果我循环使用,for i in $(cat test.txt); do echo $i; done我会看到不同的东西:
memcached.uptime
1061374
memcached.curr_connections
480
memcached.cmd_get
478962548
etc
Run Code Online (Sandbox Code Playgroud)
问题是:为什么???
bash ×2
shell-script ×2
alias ×1
colors ×1
executable ×1
iptables ×1
linux ×1
monitoring ×1
newlines ×1
osx ×1
output ×1
performance ×1
perl ×1
permissions ×1
setuid ×1
shebang ×1
stdout ×1
terminal ×1
top ×1
variable ×1
vsftpd ×1