小编Arc*_*ing的帖子

为什么 ssh 实用程序被视为 pty?

我读过这里ssh被认为是一个PTY。为什么?如果我ssh在控制台中运行命令(比如在 Debian 服务器中),这里的“pty”方面从何而来ssh?对我来说,这就像我在使用任何其他实用程序,如catsed,那么这里的“pty”方面从何而来?

screen或者tmux使用这个术语似乎更合理(尽管我认为它很不常见,这些应该被命名为“多路复用器”)。

ssh tty terminology console pty

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

根据给定的系统启动次数执行命令,然后它会自动删除

我使用 Ubuntu 服务器 16.04 (xenial) 并希望按照给定的系统启动次数执行一次命令,然后自动将其删除。解决方案似乎包括两个阶段:

  1. 将命令添加到/etc/bash.bashrc.

  2. 以某种方式使其在 x 次bash.bashrc执行后被删除。

我已经通过在bash.bashrc以下命令的末尾添加来完成解决方案的第 1 阶段:

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

有没有办法在 Bash 中这样做?

更新 - 这是我尝试过但失败的:

cat <<-"EOF" > /opt/bootmsg.sh
    #!/bin/bash
    echo welcome!
    count='0'
    ((count++))
    sed -i -e "s/^count='[01234]'$/count='${count}'/" "$0"
    if ((count>=5)); then rm -- "$0"; fi
EOF
chmod +x /opt/bootmsg.sh

# Add in the end of  bash.bashrc:
# [ -f /opt/bootmsg.sh ] && /opt/bootmsg.sh
Run Code Online (Sandbox Code Playgroud)

如果您发现代码有什么问题,请发布包含该代码的固定版本的答案以及我做错了什么的解释。

scripting bash boot bashrc

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

如何获得操作系统中的 shell 列表?

假设我使用一些 Linux 操作系统。我怎么能看到的名单全部是预装了它(贝壳或者CLI弹或炮弹GUI)?

打字echo $SHELL对我不好,因为它只显示我当前的 shell (Bash),但我想要的是列出系统中当前安装的所有 shell。

我的目标是直接检查我的操作系统附带的所有 shell,特别是如果除了shBash.

shell

0
推荐指数
1
解决办法
1141
查看次数

删除所有 shell(rbash、bash、dash 和 sh)后使用 CLI

至于现在,我用我的CLI(命令行界面)与任一rbashbashdash,或sh。鉴于这一事实,可以假设 CLI依赖于 shell,即使我们将删除所有这些 shell,我们也可以使用一些原始/基本/超限 CLI。

我的问题

如果我在我的无 GUI 操作系统中删除所有上述 shell,我还会有某种原始的 CLI 吗?

笔记

  • 我假设 CLI 不会成为内核的一部分,因为据我所知,内核通常只能通过代理访问,例如 shell)。

  • 我也在考虑 tmux 和 screen,但从标题和问题中删除了它们。

command-line shell terminology architecture

0
推荐指数
1
解决办法
298
查看次数

mkdir -p dir 带括号创建错误

我在 Ubuntu 服务器 16.04 xenial 中执行了以下代码:

mkdir -p /root/backups/{db, dirs}
Run Code Online (Sandbox Code Playgroud)

我记得在另一个系统中,它就像创建所有 3 个目录的魅力一样:

/root/backups/
/root/backups/db
/root backup/dirs
Run Code Online (Sandbox Code Playgroud)

然而这一次的结果是:

/root/backups/
/root/backups/{db,
Run Code Online (Sandbox Code Playgroud)

为什么这是部分的、破碎的结果?

bash directory brace-expansion mkdir

0
推荐指数
1
解决办法
80
查看次数

rm -rf 销毁要删除的文件的目录(多个参数)

在我执行的测试环境中:

rm -rf /var/www/html/${domain} /etc/nginx/sites-available/${domain} /etc/nginx/sites-enabled/${domain}
Run Code Online (Sandbox Code Playgroud)

其结果是htmlsites-availablesites-enabled目录,用他们所有的内容删除。

这句话有什么问题?鉴于我给出了完整路径,我想念可能导致这种情况的原因,我认为这与-r.

scripting bash testing rm deleted-files

0
推荐指数
1
解决办法
133
查看次数

结合 find-chmod 用于目录和 find-chmod 用于常规文件

我有这些命令:

find /var/www/html/* -type d -exec chmod 755 {} \;
find /var/www/html/* -type f -exec chmod 644 {} \;
Run Code Online (Sandbox Code Playgroud)

我从斯蒂芬·基特的回答了解这里我可以此方式将它们组合:

find /var/www/html/* -exec chmod a-x,a=rX,u+w {} \+
Run Code Online (Sandbox Code Playgroud)

这些chmod参数是给我读不舒服,尤其是在find语法(我还没有熟悉尼克斯喜欢连击的意思a-xa=rXu+w我没有了解它在一个时间和心灵的安宁在接下来的日子里认真对待)。

在那里可以使用数字吗?如果没有,即使比建议的特定命令长一点点,也可能有更舒适的方法来联合这两个命令?

find chmod

0
推荐指数
1
解决办法
2699
查看次数

使用 heredocument 重定向到 crontab

是否可以crontab使用 heredocument打印?

我尝试了这些但失败了:

cat <<-"CRONTAB" > crontab
    0 0 * * * cat /dev/null > /var/mail/root
    0 1 * * 0 certbot renew -q
CRONTAB
Run Code Online (Sandbox Code Playgroud)

和:

bash <<-"CRONTAB" > crontab
    0 0 * * * cat /dev/null > /var/mail/root
    0 1 * * 0 certbot renew -q
CRONTAB
Run Code Online (Sandbox Code Playgroud)

另一方面,这不是此处的文档,而是有效的:

# CRONTAB
echo "
    0 0 * * * cat /dev/null > /var/mail/root
    0 1 * * 0 certbot renew -q
" | crontab
Run Code Online (Sandbox Code Playgroud)

因此,我想知道是否可以使用 heredocument。

cron io-redirection here-document

0
推荐指数
1
解决办法
486
查看次数

我们应该称 Bash 特殊参数为“环境常量”吗?

在阅读herehere之后,我得出结论,Bash中所谓的“特殊参数”很像环境变量,但主要区别在于我们不应该重新分配特殊参数——否则我们可以不用环境变量的限制(但要非常小心)。

因此,这是我的问题:

我们应该称 Bash 特殊参数为“环境常量”(至少在比喻上是这样)吗?

bash terminology

-1
推荐指数
1
解决办法
64
查看次数

当 INSIDE mysql shell 时变量不会被扩展

在创建新的 mysql 用户和数据库之前,我做了:

read sps -s 
    # Inputing and saving the sps (password) value.

echo ${sps}
    # sps password value echoed.

mysql -u root -p[PASSWORD]
    mysql>
        CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
Run Code Online (Sandbox Code Playgroud)

问题

当我开始登录时,mysql -u test -p[SPS_PASSWORD_VALUE]出现访问被拒绝的错误。

密码不是我给出的值,${sps}而是它${sps}本身,作为一个 string

抓住

为了“正式”证明问题是由于${sps} variable not being expanded **inside** mysql shell, and therefore acts as a regular string, I created another usertest1` 手动提供了密码(不是来自变量),这次我可以正常登录。

问题

为什么当我在 mysql shell 中时,没有变量扩展,我怎样才能防止这种行为或至少获得接近这种行为的行为?

也许这是一个错误?

shell bash mysql database variable-substitution

-1
推荐指数
1
解决办法
1826
查看次数

不断升级某些 Debian 发行版中的所有内容(包括发行版)?

如何以安全的方式持续升级发行版中的所有内容(包括某些 Debian 发行版)?

为什么我问这个问题

我问这个问题是因为当我的Nginx环境安装脚本越来越大,并且需要越来越多的时间来维护时,我觉得我做错了什么。

维护脚本是我可以并且喜欢处理的事情,因为学习、练习和公共共享,即使我必须尽快作为一名员工出去工作,而且维护这些的时间会更少。鉴于这些情况,我总是有这样的恐惧:

-- 如果我当前的发行版 LTS 不再受支持怎么办。

-- 即使它是 Debian 稳定版而不是其他东西,我也可能因为几个月前的旧发行版而出现安全漏洞,但仅此而已。

-- 如果unattended-upgrades由于发行版变旧等原因,配置良好的配置不足以让我保持安全,该怎么办。

至于现在,我在 DigitalOcean 中为一个 Droplet 支付了 5 美元,但我真的不知道拥有具有以下特征的 LEMP 堆栈的最佳解决方案是什么:

  • 可自由访问的 Bash。
  • 无人值守升级。
  • CSF-LFD 和 Maldet。
  • Certbot 处理的 webapp confs。
  • 我在 cron 中创建的即时和自动 cron 备份(在我的脚本中可用)。
  • 自动发行版升级(比如从 Ubuntu 16.04 到 18.04 以及当时从 18.04 到 20.04 等等),即使使用rsync.
  • WordPress 网站
  • 命令行工具
  • VPS 的总价不超过 10 美元。

我不确定 Ansible 或 Salt 是答案(Ansible 对我来说似乎不是很容易学习,即使它在市场上销售和传闻很容易学习,我恐怕没有时间研究它在接下来的 3 个月内深入)。

我不确定 Azure 是答案(仅因为价格,我了解像我希望的环境在 Azure 中至少要花费 15 美元)。

也许我需要一个在每个基本方面都有持续交付的发行版(假设有一个)。

故事基本上就是这样。

debian stability upgrade vps

-1
推荐指数
1
解决办法
113
查看次数