我读过这里是ssh被认为是一个PTY。为什么?如果我ssh在控制台中运行命令(比如在 Debian 服务器中),这里的“pty”方面从何而来ssh?对我来说,这就像我在使用任何其他实用程序,如cat或sed,那么这里的“pty”方面从何而来?
在screen或者tmux使用这个术语似乎更合理(尽管我认为它很不常见,这些应该被命名为“多路复用器”)。
我使用 Ubuntu 服务器 16.04 (xenial) 并希望按照给定的系统启动次数执行一次命令,然后自动将其删除。解决方案似乎包括两个阶段:
将命令添加到/etc/bash.bashrc.
以某种方式使其在 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)
如果您发现代码有什么问题,请发布包含该代码的固定版本的答案以及我做错了什么的解释。
假设我使用一些 Linux 操作系统。我怎么能看到的名单全部是预装了它(贝壳或者CLI弹或炮弹GUI)?
打字echo $SHELL对我不好,因为它只显示我当前的 shell (Bash),但我想要的是列出系统中当前安装的所有 shell。
我的目标是直接检查我的操作系统附带的所有 shell,特别是如果除了sh和Bash.
至于现在,我用我的CLI(命令行界面)与任一rbash,bash,dash,或sh。鉴于这一事实,可以假设 CLI不依赖于 shell,即使我们将删除所有这些 shell,我们也可以使用一些原始/基本/超限 CLI。
如果我在我的无 GUI 操作系统中删除所有上述 shell,我还会有某种原始的 CLI 吗?
我假设 CLI 不会成为内核的一部分,因为据我所知,内核通常只能通过代理访问,例如 shell)。
我也在考虑 tmux 和 screen,但从标题和问题中删除了它们。
我在 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)
为什么这是部分的、破碎的结果?
在我执行的测试环境中:
rm -rf /var/www/html/${domain} /etc/nginx/sites-available/${domain} /etc/nginx/sites-enabled/${domain}
Run Code Online (Sandbox Code Playgroud)
其结果是html,sites-available和sites-enabled目录,用他们所有的内容删除。
这句话有什么问题?鉴于我给出了完整路径,我想念可能导致这种情况的原因,我认为这与-r.
我有这些命令:
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-x,a=rX和u+w我没有了解它在一个时间和心灵的安宁在接下来的日子里认真对待)。
在那里可以使用数字吗?如果没有,即使比建议的特定命令长一点点,也可能有更舒适的方法来联合这两个命令?
是否可以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。
在创建新的 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 中时,没有变量扩展,我怎样才能防止这种行为或至少获得接近这种行为的行为?
也许这是一个错误?
如何以安全的方式持续升级发行版中的所有内容(包括某些 Debian 发行版)?
我问这个问题是因为当我的Nginx环境安装脚本越来越大,并且需要越来越多的时间来维护时,我觉得我做错了什么。
维护脚本是我可以并且喜欢处理的事情,因为学习、练习和公共共享,即使我必须尽快作为一名员工出去工作,而且维护这些的时间会更少。鉴于这些情况,我总是有这样的恐惧:
-- 如果我当前的发行版 LTS 不再受支持怎么办。
-- 即使它是 Debian 稳定版而不是其他东西,我也可能因为几个月前的旧发行版而出现安全漏洞,但仅此而已。
-- 如果
unattended-upgrades由于发行版变旧等原因,配置良好的配置不足以让我保持安全,该怎么办。
至于现在,我在 DigitalOcean 中为一个 Droplet 支付了 5 美元,但我真的不知道拥有具有以下特征的 LEMP 堆栈的最佳解决方案是什么:
rsync.我不确定 Ansible 或 Salt 是答案(Ansible 对我来说似乎不是很容易学习,即使它在市场上销售和传闻很容易学习,我恐怕没有时间研究它在接下来的 3 个月内深入)。
我不确定 Azure 是答案(仅因为价格,我了解像我希望的环境在 Azure 中至少要花费 15 美元)。
也许我需要一个在每个基本方面都有持续交付的发行版(假设有一个)。
故事基本上就是这样。