假设我有一个包含几个文件的目录,如下所示:
$ ls
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
我想在 bash 中做一些 tab 补全:
$ cat file<tab>
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
我记得看到有人在做 Tab 补全,shell 将下一部分加粗,所以在这种情况下,它会将文件名的1,2和加粗,3因此它看起来像这样:文件1 文件2文件3
这将告诉您接下来应该输入什么。
我认为这是 的一个功能zsh,但有什么办法可以得到它bash吗?
您如何进行转义工作,以便&实际在后台运行第一个命令?
# foo param1 param2 >> run.out &; tail -f run.out
Run Code Online (Sandbox Code Playgroud) 有没有办法查看远程服务器上是否存在目录?
也许有更好的方法,但我正在编写一个应用程序部署脚本,如果该目录不存在来放置文件,我想在远程服务器上创建一个目录。
提前致谢!
我编写了各种脚本来启动 Java 服务器应用程序,这些应用程序通常在关闭之前运行 24 小时(通过使用不同的参数调用相同的脚本)。
该脚本依赖于文件中定义的环境变量:~/<user>.env,我从.bashrc.
这在从命令行调用脚本时工作正常,但如果我想将脚本添加为 crontab 条目,我会遇到.bashrc无法读取的问题。
我的问题:解决这个问题的最佳实践方法是什么?我意识到我可以定义一个 crontab 条目,例如:
* * * * 1-5 /usr/bin/bash -c '. /home/myuser/myuser.env && /home/myuser/scripts/myscript.sh'
Run Code Online (Sandbox Code Playgroud)
......但这看起来很丑陋。或者,我可以myuser.env在每个脚本的开头获取源,但这将成为维护的噩梦。
任何帮助表示赞赏。
例如,我有一个包含此条目的日志文件:
[2012 年 8 月 8 日星期三 11:39:41] [错误] [客户端 155.94.70.224] ModSecurity:[文件“/etc/httpd/modsecurity.d/rules/base_rules/modsecurity_crs_20_protocol_violations.conf”] [行“271”] [ id "960020"] [rev "2.2.5"] [msg "Pragma Header 需要 Cache-Control Header for HTTP/1.1 请求。"] [severity "NOTICE"] [tag "RULE_MATURITY/5"] [tag "RULE_ACCURACY/ 7"] [标签 " https://www.owasp.org/index.php/ModSecurity_CRS_RuleID-960020 "] [标签 "PROTOCOL_VIOLATION/INVALID_HREQ"] [标签 " http://www.bad-behavior.ioerror.us/文档/它是如何工作的/ “] 警告。REQUEST_PROTOCOL 处的字符串匹配“HTTP/1.1”。[主机名“webmail.white-art.co.uk”] [uri“/horde/themes/graphics/tree/plusonly.
我想提取所有以字符开头[并以]. 我可以使用 cut 或 awk 使用单个分隔符进行提取,但我需要在开始[和结束之间提取字符串]。如何实现呢?
例如,我需要提取:
“[标签“RULE_ACCURACY/7”]”
和
“[严重性“注意”]”
从日志中。
我找到了一个解决方案,首先我必须通过在每个之后添加新行]然后使用 grep 搜索所需的字符串来分解日志。有没有更好的方法来做到这一点?
我希望能够按-字符拆分授权码,以便我可以单独对每个段进行操作。我不想使用外部二进制文件 ( awk, grep) - 这是尽可能简约的。我有哪些方法可以实现这一目标?
这是一个示例身份验证代码:
82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb
我想为我的 debian 服务器上安装的每个关键程序创建一个用户帐户。例如,对于以下程序:
Tomcat Nginx 主管 PostgreSQL
根据我在网上的阅读,这似乎是推荐的。但是,我想尽可能地限制这些用户帐户,以便他们没有 shell 登录名,无法访问其他程序,并且尽可能地受到限制但仍然可以使用。
有人介意告诉我这是如何实现的吗?到目前为止,我的阅读表明:
echo "/usr/sbin/nologin" >> /etc/shells
useradd -s /usr/sbin/nologin tomcat
Run Code Online (Sandbox Code Playgroud)
但我认为可能有更完整的方法。
编辑:我正在使用 debian 挤压
在我的 debian 机器上,我不小心删除了 /bin/bash。有没有办法不用重新安装机器就可以恢复它?
如果有帮助。我仍然登录。猜猜一旦我出去,我就无法登录,因为它是我的登录外壳。
我正在托管一个实验/测试 Linux 机器,运行 Debian Wheezy 7.4.0 发行版。不同的用户通过 ssh 登录机器到他们的帐户,如果他们愿意,可以运行开发工具并让他们的程序作为服务在后台运行。
由于这是用于各种目的的测试机器,因此通常需要重新启动整台机器,然后用户必须重新登录并重新启动正在运行的用户空间内容。我想自动化。基本上我想为用户提供一种在机器启动后立即启动东西的方法(在其他所有东西都初始化之后)和一种在系统关闭时启动东西的方法(没有时间限制,基本上停止关闭直到所有这些关闭用户进程已完成)。
到目前为止我已经尝试过:
我已经创建了一个 init bash 脚本,遵循在 /etc/init.d/ 下的“骨架”模板文件中找到的原则(骨架模板源代码:https://gist.github. com/ivankovacevic/9917139 )
我的代码在这里:https : //github.com/ivankovacevic/userspaceServices
基本上,脚本会遍历用户主目录并在名为 .startUp、.shutDown 或 .status 的相应子目录中查找可执行文件。根据当前发生的事件,脚本会使用su执行,就好像用户自己启动了它们一样。
我目前使用这种方法面临的问题是,在系统启动并且脚本启动其他用户的所有进程后,有一个奇怪的进程挂起。这是它在进程列表中的样子:
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 3053 1 0 1024 620 1 17:42 ? 00:00:00 startpar -f -- userspaceServices
Run Code Online (Sandbox Code Playgroud)
我不知道那个过程是什么,它的手册页没有提到 -f 参数。所以我一无所知,但我一定是做错了什么,因为没有来自 init.d 的其他脚本/服务在启动后挂起这样的进程。
所以我在找人帮我调试我拥有的这个解决方案(在我看来这似乎也有点复杂)。或者让我知道如何以完全不同的方式实现这一点。
更新
我已经针对startpar问题开始了一个单独的问题:
startpar process left hanging when starts processes from rc.local 或 init.d
更新 2 …
我正在编写一个脚本,我想在其中启动 mysql_secure_installation脚本并在每个提示处提供适当的答案。我尝试使用这样的回声:
echo -e "\n\n$db_pass\n$db_pass\n\n\n\n\n" | /usr/bin/mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)
它不完全起作用。它似乎正确回答了最后 5 个问题,但没有正确回答前 3 个问题(这是在一个CentOS 6.5盒子上)。这是输出:
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
stty: standard input: Invalid argument
Enter current password for root (enter for none):
stty: standard input: Invalid argument
OK, successfully used …Run Code Online (Sandbox Code Playgroud)