标签: bash

疯狂循环中的 yum-complete-transaction

我试图更新我拥有的服务器yum update,但由于服务器内存不足而中止。我杀死了一些不需要的进程并运行yum-complete-transaction,但似乎陷入了疯狂的循环。

[root@syd-01 ~]# uname -a
Linux syd-01.*******.net 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

如果有任何有关如何解决此问题的建议,我将不胜感激。下面是循环的摘录(实际上要长得多):

--> Processing Dependency: libtinfo.so.5()(64bit) for package: util-linux-ng-2.17.2-12.14.el6_5.x86_64
---> Package net-tools.x86_64 0:1.60-110.el6_2 will be erased
--> Processing Dependency: net-tools for package: initscripts-9.03.40-2.el6.centos.4.x86_64
---> Package nss-softokn-freebl.x86_64 0:3.14.3-3.el6_4 will be erased
--> Processing Dependency: libfreebl3.so()(64bit) for package: glibc-2.12-1.132.el6_5.4.x86_64
--> Processing Dependency: libfreebl3.so()(64bit) for package: p11-kit-trust-0.18.5-2.el6_5.2.x86_64
--> Processing Dependency: libfreebl3.so()(64bit) for package: p11-kit-0.18.5-2.el6_5.2.x86_64
--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3)(64bit) for …
Run Code Online (Sandbox Code Playgroud)

linux bash centos yum update

6
推荐指数
1
解决办法
1784
查看次数

如何在同一个shell命令中打开sftp连接并执行sftp命令

是否有可能打开到远程服务器的 sftp 连接并在 shell 的同一行中执行 sftp 命令。

像这样的东西:

sftp user@example.com && put /tmp/test.txt /tmp/
Run Code Online (Sandbox Code Playgroud)

其中 put 是 sftp 命令。

我的想法是将文件从本地服务器从 bash 脚本放到远程服务器,其中远程服务器上只允许使用 sftp。

linux ssh bash sftp

6
推荐指数
1
解决办法
1万
查看次数

在 bash 中操作 JSON

我有一个 JSON 文件,我需要更新一个特定的值。

{
  "Comment": "comment",
  "test": {
    "enabled": true
  },
  "enabled": true,
  "otherStuff": blah,
  "otherStuff2": blah,
  "otherStuff3": blah,
}
Run Code Online (Sandbox Code Playgroud)

我想将第二个“启用”的值更改为 false。使用 JQ Parser,我可以使用jq '.enabled '轻松检索它,但我不确定操作 JSON 的最佳方法是什么。

JSON 是我从 API 获得的响应,将来可能会发生变化,我不能依赖之前/之后的行或值。

bash json

6
推荐指数
1
解决办法
2万
查看次数

如何在重启后立即在 bash 中启动 tmux

我创建了一个在 Ubuntu 实例重新启动时运行的脚本。

crontab -e
Run Code Online (Sandbox Code Playgroud)

然后将其添加到脚本中:

@reboot /home/ubuntu/startup.sh
Run Code Online (Sandbox Code Playgroud)

脚本如下所示:

#!/bin/bash
tmux new-session -d -s my_server
tmux send-keys -t my_server:0 ". /home/ubuntu/venv/bin/activate" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api" C-m
tmux send-keys -t my_server:0 "git checkout new-schema" C-m
tmux send-keys -t my_server:0 "git pull" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api/canonicaliser/workers" C-m
tmux send-keys -t my_server:0 "python person_worker.py" C-m
Run Code Online (Sandbox Code Playgroud)

重新启动后,我执行 atmux attach以查看结果。

$ . /home/ubuntu/venv/bin/activate
cd ~/canonicaliser_api
(venv)$ (venv)$ git checkout new-schema
git pull
cd ~/canonicaliser_api/canonicaliser/workers
python person_worker.py
Already …
Run Code Online (Sandbox Code Playgroud)

ubuntu bash virtualenv tmux

6
推荐指数
1
解决办法
3351
查看次数

docker ps -a 的 shell 脚本 | grep 查找正在运行的某些容器的数量

我想编写一个由我的开发构建服务器执行的脚本,该脚本将在构建和运行新容器之前删除任何“类似”的 docker 容器。

下面是我需要的 bash 脚本的伪代码

var name = $1
var number_of_results = # of containers returned from $(docker ps -a | grep "$name")

if(number_of_result > 0)
      docker rm -f $(docker ps -a | grep "$name")
Run Code Online (Sandbox Code Playgroud)

shell bash shell-scripting docker

6
推荐指数
2
解决办法
2万
查看次数

如何删除旧的日志文件?

我想弄清楚如何删除旧的日志文件,我使用的是 Centos 6.5,在我的系统中/var/log我看到了这些旧的日志文件

messages
messages-20150802
messages-20150802
Run Code Online (Sandbox Code Playgroud)

/var/log/httpd目录中也一样

access_log
access_log-20150802
access_log-20150809
access_log-20150816
access_log-20150823
Run Code Online (Sandbox Code Playgroud)

我需要删除以数值结尾的旧文件,但保留一次主要文件。我可以用什么命令来做到这一点。

提前致谢

bash centos

6
推荐指数
1
解决办法
7551
查看次数

如何找出是什么在创建临时文件

我注意到 /tmp 中有很多空文件,它们的名称类似于“/tmp/tmp.tMIHx17730”。我运行审计规则,我发现 mktemp 正在创建它,这不是很有帮助。

如何找出哪个脚本调用 mktemp 来创建这些文件?我可以使用 auditd 捕获父进程 ID/命令行吗?

更新:我相信我有父进程 ID (ppid=17729),但脚本很快退出,我找不到脚本。我也可以设置 auditd 来获取父进程命令行吗?

更新 2:这是我如何设置 auditd 以显示写入 tmp 的内容:

auditctl -w /tmp -k tmpfiles
Run Code Online (Sandbox Code Playgroud)

然后:

ausearch  -k tmpfiles|grep "tmp."
Run Code Online (Sandbox Code Playgroud)

然后我选择一个文件然后我做

ausearch  -k tmpfiles -f /tmp/tmp.tMIHx17730
Run Code Online (Sandbox Code Playgroud)

这向我展示了创建文件和父进程 pid 的进程。我需要设置某种进程启动侦听器来捕获该 pid 的最新进程

linux bash auditd

6
推荐指数
1
解决办法
3621
查看次数

更新到 4.2 后,Bash 开始缺少调试器

我在 Centos 7.2 上。昨天我已经将 bash 更新到了 bash-4.2.46-19.el7.x86_64 版本,现在登录时我得到了这个:

-bash: /usr/share/bashdb/bashdb-main.inc: 没有那个文件或目录

-bash:警告:无法启动调试器;调试模式已禁用

当然我可以安装 bashdb 但我不想调试。在我进行更新之前,此问题不存在。似乎调试是全局激活的。我还没有配置调试(检查 .bashrc 和 /etc/bashrc)。

还没有找到摆脱这个的解决方案。我能做什么?

debug bash centos

6
推荐指数
1
解决办法
1807
查看次数

如何通过 aws cli 检查是否存在特定的 rds 实例?

我希望我的 bash 脚本能够检测是否已经存在具有特定名称的 AWS RDS 实例。

这是我尝试过的:

#!/usr/bin/env bash

DBINSTANCEIDENTIFIER=greatdb

EXISTINGINSTANCE=$(aws rds describe-db-instances \
    --db-instance-identifier="$DBINSTANCEIDENTIFIER" \
    --输出文本\
    )

我希望得到一个空列表,或者结果为零 - 但我收到一条错误消息:

调用 DescribeDBInstances 操作时发生错误 (DBInstanceNotFound):未找到 DBInstance greatdb。

有谁知道如何在没有错误消息的情况下正确找出实例是否存在?

bash amazon-rds aws-cli

6
推荐指数
1
解决办法
9149
查看次数

在脚本中解析 DNS 地址的可靠方法(IPv4 (A) 和 IPv6 (AAAA))?

我在 bash 变量 ( ) 中有一个域名$TARGET,并且我想以可靠的A方式在 bash 脚本中获取它的 IPv4(记录)地址(我还想获取 IPv6AAAA记录(如果存在))。

即 bash/unix 命令将: (i) 打印 DNS 解析的 IP 地址(并​​且是 IP 地址) (ii) 如果没有找到该域的 DNS 记录,则不向 stdout 打印任何内容(或非零退出) (iii) 让我选择索取AAAAA记录。

host "$TARGET"打印出很多人类可读的内容,但我不愿意解析它们。

dig +short看起来很有希望,但在某些情况下,它还会打印我不理解或不关心的其他警告消息。

$ dig +short -t A "$TARGET"
;; Warning: Client COOKIE mismatch
1.2.3.4
Run Code Online (Sandbox Code Playgroud)

Debian 测试/书呆子。Bash v5.2(通过 apt 安装)

domain-name-system bash shell-scripting

6
推荐指数
3
解决办法
2591
查看次数