标签: shell

SSH 直接标准输入和粗壮进出 postgres 客户端

我的本地可以连接到远程,但它无法连接到 dbserver。远程可以连接到 dbserver(使用 psql)。

我想从我的本地对数据库运行 sql 脚本。

我正在寻找一种在远程打开 psql 并使用 ssh 将我的 stdin 和 stdout 定向到我的本地的方法。

现在在愚蠢的选项中,我这样做:

ssh remote
psql -h db report
password
run my commands
Run Code Online (Sandbox Code Playgroud)

我可以通过这种方式在脚本中完成它,但它丑陋且不允许我与 psql 进行交互会话。

PSQL="PGPASSWORD=mypassword psql -h dbserver  -d report"
SQL="SELECT 1"
ssh remote "$PSQL --command 'COPY ($SQL) TO STDOUT WITH CSV;'"
Run Code Online (Sandbox Code Playgroud)

Ps-Python 也可以。

postgresql ssh shell

3
推荐指数
1
解决办法
3973
查看次数

如果条件比较无法与相同值字符串进行比较,则 Shell 脚本命令输出

我正在合并一个脚本片段,它通过以下方式确定 Android 版本: adb shell getprop ro.build.version.release 返回:4.1.24.0.4

该代码段目前如下所示:

if [ "$(adb shell getprop ro.build.version.release)" == "4.1.2" ]; then
    rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release)" == "4.0.4" ]; then
    rw_path="/data/local/"
fi
echo $rw_path
Run Code Online (Sandbox Code Playgroud)

我认为 adb 可能会通过 stderr 返回值,就像它使用推/拉输出一样,所以我也尝试了这个(但不确定这是否是正确的方法):

if [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.1.2" ]; then
    rw_path="/sdcard/"
elif [ "$(adb shell getprop ro.build.version.release 2>&1)" == "4.0.4" ]; then
    rw_path="/data/local/"
fi
echo $rw_path
Run Code Online (Sandbox Code Playgroud)

尝试了 -eq 运算符而不是 ==,但它警告“预期为整数表达式”。

然后我尝试了这个以确保它确实比较了一些东西:

version=$(adb shell getprop ro.build.version.release 2>&1)
if …
Run Code Online (Sandbox Code Playgroud)

scripting unix shell bash

3
推荐指数
1
解决办法
8950
查看次数

尽管 #!/usr/bin/env php 我需要用 php 调用文件,为什么?

我正在尝试调用 shell 包装器进行 phing

phing
Run Code Online (Sandbox Code Playgroud)

...但它不能识别环境,我得到一个

-bash: phing: command not found
Run Code Online (Sandbox Code Playgroud)

...即使文件以:

#!/usr/bin/env php
Run Code Online (Sandbox Code Playgroud)

调用文件

php phing
Run Code Online (Sandbox Code Playgroud)

工作得很好。

该文件是可执行的,我从它自己的目录中调用它。

这怎么可能?

linux php shell

3
推荐指数
1
解决办法
2875
查看次数

如何查看和杀死PHP进程?

我对使用 SSH 非常陌生,并且无法找到查看和终止正在运行的 PHP 进程的方法。

当我说“PHP 进程”时,我指的是通过浏览器启动的 PHP 文件,但在它们应该停止时继续运行。

我试过这个:

ps aux | grep php
Run Code Online (Sandbox Code Playgroud)

但是没有任何结果,即使我知道文件正在运行。

如何查看正在运行的文件,然后有选择地杀死它们(或全部杀死)?

linux ssh shell

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

用于检查和响应内存使用情况的一行脚本

我想要一行 shell/bash 来做一些事情:

test "`free | grep | awk | whatever` -gt 80" && any_command
Run Code Online (Sandbox Code Playgroud)

将整个系统使用的 ram总百分比与硬编码数字(在我的情况下为 80)进行比较。test只要any_command在 ram 高于给定百分比时执行就无关紧要。

  • 确切的字节/兆字节而不是百分比是可以的
  • 这应该适用于典型的 ubuntu 14.04
  • 用作 cron 作业
  • 奖励:做同样事情的单线,但检查特定过程的 ram

更新

有关于这是如何构建 monit/bluepill/god 之类的问题的答案。我 100% 同意,您很可能应该遵循这些答案中的建议。但是,这个问题特别是关于我所描述的确切路线,无论出于何种原因,假设这可能涉及所有注意事项和问题。

ubuntu shell bash

3
推荐指数
2
解决办法
7620
查看次数

寻找一种包装命令并提供自己的外壳的方法

我正在使用命令行按照相同的模式手动执行相同的命令多次。现在我正在寻找一种方法来简化它,只需输入一次命令即可。

让我们看一个普通的 docker 示例:

docker ps
docker ps -a
docker ps -l
docker stop x 
docker start x 
docker start y 
docker logs y
docker logs -f z
Run Code Online (Sandbox Code Playgroud)

此示例也适用于更多命令,例如 git、brew、gulp、gcloud。

现在我正在寻找某种命令包装外壳,它允许我编写with docker将任何命令包装在嵌套/子外壳中的命令。

然后我不需要在docker命令前面加上命令,只需调用:

>ps
# does docker ps and displays result 
>stop x
# prepends docker so docker stop x is actually executed   
CTRL+C # to exit the command wrapper 
Run Code Online (Sandbox Code Playgroud)

像这样的东西已经存在了吗?我在谷歌上搜索它,但无法正确描述它,因此我没有找到任何东西。

linux shell command-line-interface shell-scripting

3
推荐指数
1
解决办法
929
查看次数

如何阻止用户帐户上的 shell 访问但显示自定义消息(在 Linux 上)?

由于各种原因,我需要启用 telnet 访问(通过专用网络),并且当有人尝试使用特定用户帐户登录时(可以说CheckStatus),它不是给用户一个 shell,而是运行一些非常非常快的代码/ script/whatever 并返回两个非常具体的字符串之一。该帐户可以有密码。

我本质上是在尝试复制当您尝试通过 SSH 连接到 Github 的服务器时发生的情况,它们告诉您未授予 shell 访问权限。

我认为解决这个问题的方法是替换用户的 shell,所以我创建了脚本:

#! /bin/bash

echo "HI!!!"
Run Code Online (Sandbox Code Playgroud)

然后尝试通过以下方式将其设置为用户的外壳:

test@development-1:~$ chmod +x test.sh
test@development-1:~$ chsh
Password:
Changing the login shell for test
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /home/test/test.sh
chsh: /home/test/test.sh is an invalid shell
Run Code Online (Sandbox Code Playgroud)

关于最好的方法有什么想法吗?

作为参考,我们的大多数系统都是 Ubuntu 14.04。

linux shell

3
推荐指数
1
解决办法
399
查看次数

如何在 Centos 中每次登录时运行 shell 脚本

实际上我想在每次用户登录以及启动时运行我的 shell 脚本。我尝试过使用 crontab,但它仅在启动时运行,而不是每次登录时运行。所以请告诉我如何执行此操作。

#crontab -e
@reboot  /home/user/test.sh
Run Code Online (Sandbox Code Playgroud)

redhat shell bash centos startup-scripts

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

具有特殊用户名的 scp

我正在尝试创建shell用于将文件复制到远程备份的脚本。

到目前为止,这是我的脚本:

PASSWORD=MY-SECRET-PASS
URL=SLOS755513-3:SL1255513@objectstorage.net
DIR=/backup

scp /home/user/my_log.txt $URL:$DIR
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

ssh: Could not resolve hostname SLOS755513-3: Name or service not known
lost connection
Run Code Online (Sandbox Code Playgroud)

我想这是因为用户名中的特殊字符,因为如果我只是简单地写,test它实际上会尝试以test用户身份连接。

但我试图逃避\-\:一切都给了我同样的错误。我也不确定如何在脚本中使用密码。

linux shell scp

3
推荐指数
1
解决办法
3573
查看次数

最常见的 Unix/Linux shell

这个问题可能有点幼稚,但是有没有一种 shell 往往在 Unix/Linux 用户中最受欢迎?

我以前的公司基本上是在 tcsh 上标准化的,所以我学到了一个是好是坏,但我想知道我是否应该学习 bash、ksh 或任何其他的,如果这些更常见的话。

linux unix shell

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