假设我有以下JSON,存储在我的变量jsonVariable中.
{
"id": 1,
"details": {
"username": "jamesbrown",
"name": "James Brown"
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码使用jq解析此JSON:
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
Run Code Online (Sandbox Code Playgroud)
这会给我输出
詹姆斯布朗
但是如果我想得到这个人的身份怎么办?现在,我知道这是一个粗略而简单的例子 - 我正在使用的程序是5或6级深度,除了select之外还有许多不同的JQ函数.在执行各种过滤方法后,当我已经深入5或6层时,我需要一种方法来选择父项的字段.
有人可以帮忙吗?是否有任何"反向"的方式,回到父母身边?(不确定我是否有意义!)
我过去使用boto3查找所有图像not public,以便将我的返回图像列表从数千个减少到可管理的数字.
但是,我无法弄清楚如何以这种方式过滤EBS快照.我尝试了以下内容
ec2.describe_snapshots(OwnerIds=self)
Run Code Online (Sandbox Code Playgroud)
但是,OwnerIds只会获取ID列表.
我一直在阅读以下文档:describe_snapshots,并说明了这一点
结果可以包括指定所有者的AWS账户ID,Amazon拥有的快照的amazon,或者您拥有的快照的self
但我无法解决这个问题self.有人可以帮忙吗?谢谢.
我在向jq实现布尔检查时遇到了麻烦.如果我有一个字段"test",它可以是布尔值true或false,我如何使用select来查找它?
最初我尝试了以下内容:
jq '.[] | select(.test=="false")'
Run Code Online (Sandbox Code Playgroud)
但我认为我在这里比较字符串所以这不起作用.
最近我犯了一个愚蠢的错误,就是在我的 AWS 实例上清除了我用户的 ~/.ssh/authorized_keys 文件的内容。因此,我无法再通过 ssh 连接到该实例。
我意识到我可以通过 AWS EC2 实例用户数据重新添加这些密钥。然而,到目前为止我还没有运气。我停止了我的实例,将以下内容添加到用户数据中并再次启动它:
#!/bin/bash
> /home/myUser/.ssh/authorized_keys
echo "ssh-rsa aaa/bbb/ccc/ddd/etc== mykeypair" >> /home/myUser/.ssh/authorized_keys
chown myUser:myUser /home/myUser/.ssh/authorized_keys
chmod 600 /home/myUser/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
这应该清空文件,添加公钥对并确保文件上存在正确的权限。
但是我的私钥仍然被拒绝。
我知道密钥是正确的,所以它一定与我的实例用户数据有关。我也试过在所有命令前加上“sudo”。
我有一个 bash 脚本,它迭代文件名数组并将它们从 S3 中删除。
以下命令:
aws s3 rm "s3://myBucket/myFolder/myFile.txt"
Run Code Online (Sandbox Code Playgroud)
将产生此输出。
delete: s3://myBucket/myFolder/myFile.txt
Run Code Online (Sandbox Code Playgroud)
通过验证已在 AWS 控制台中删除,我可以看到删除已成功。但是,如果我再次迭代同一列表,即使文件消失,我也会得到相同的输出。
有没有什么方法(仅使用 rm 命令)表明 AWS CLI 尝试删除该文件但找不到它?
我之前曾使用curl 从我的Azure KeyVault 检索机密。
首先,我检索我的令牌并获取我的 keyvault 的 url:
token=$(curl -s 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | awk -F"[{,\":}]" '{print $6}')
keyvaulturl="https://myTestKeyVault-keyvault.vault.azure.net/secrets"
Run Code Online (Sandbox Code Playgroud)
然后我就可以访问我的 KeyVault
curl -s ${keyvaulturl}/xxx?api-version=2016-10-01 -H "Authorization: Bearer ${token}"
Run Code Online (Sandbox Code Playgroud)
然而这只是为了获取秘密。有没有办法通过curl来更新它们?或者使用 azure cli 更好?在这种情况下,最好的自动化身份验证形式是什么?
我当前正在使用以下CLI命令来获取给定实例名称标签“ myInstanceName” 的实例PublicIPAddress和LaunchTime:
aws ec2 describe-instances --filters 'Name=tag:Name,Values=myInstanceName' \
--region us-east-1 \
--query 'Reservations[*].Instances[*].{PublicIpAddress: PublicIpAddress, LaunchTime: LaunchTime}'
Run Code Online (Sandbox Code Playgroud)
结果如下:
[
{
"LaunchTime": "2019-01-25T11:49:06.000Z",
"PublicIpAddress": "11.111.111.11"
}
]
Run Code Online (Sandbox Code Playgroud)
很好,但是如果有两个具有相同名称的实例,我将在结果JSON中得到两个结果。我需要找到一种获取给定名称的最新实例的方法。
解决方案更新
这个问题是EC2实例特有的。可以使用两种不同的方法来解决该问题,下面对此进行回答:使用JMESPath
使用jq解析结果
请参阅此相关问题,以获取按日期对JMESPath进行更一般的排序以及进一步阅读的信息。
我有一个在 Bash 脚本中运行的 SQL 语句。它包含连续两个美元符号的实例,例如:
psql -U $username -h $DATABASE_HOST $DATABASE_NAME -c "DO $$ DECLARE myVar varchar; END$$"
Run Code Online (Sandbox Code Playgroud)
怎样才能摆脱这两种情况呢?
当我在 Ubuntu 上手动登录我的 PostgreSQL 服务器并执行命令时,我可以发现它已登录/root/.psql_history。
但是,当我尝试通过 bash 脚本在 bash 脚本中运行命令时psql -c "*query goes here*",该命令返回数据但未登录.psql_history。
有没有人遇到过这个?
我在postgres上具有管理员角色/用户和开发人员角色。开发人员角色继承了我为方便将来而创建的“ readaccess”角色的属性。如果我运行\ du,我得到:
Role name | Attributes | Member of
-----------------+------------------------------------------------------------+-------------------
developers | | {readaccess}
rds_replication | Cannot login | {}
rds_superuser | Cannot login | {rds_replication}
rdsadmin | Superuser, Create role, Create DB, Replication, Bypass RLS+| {}
| Password valid until infinity |
rdsrepladmin | No inheritance, Cannot login, Replication | {}
readaccess | Cannot login +| {}
| Password valid until infinity |
admin | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
Run Code Online (Sandbox Code Playgroud)
我已通过以下方式授予对我的开发人员帐户和我的readaccess帐户的读取访问权限 …