dte 编辑器是一个小型且易于使用的控制台文本编辑器。
在自述文件或其在线文档中,都说:
(是关键特征)。但是,我还没有找到如何replace
在任何地方进行操作。
Evenman dte
没有提及任何有关replace
操作的内容,或者如何进入命令模式来使用它。
我有一台旧笔记本电脑 (Dell Latitude D610),我想将其用作某些需要串行终端的系统,因为这台机器有一个内置 RS-232 端口。我已经安装了Debian 12和minicom,但没有图形环境,所以我在文本控制台上登录。但是,当我启动 minicom 时,Ctl-A Z
不会打开帮助菜单 - 相反,我只看到z
回显并且光标不移动。事实上,我在屏幕上观察到了同样的情况,所以这不仅限于 minicom。
在我的新笔记本电脑上,我看到了同样的现象,但它在同一系统上的 GUI 终端中工作没有问题,因此它似乎特定于文本模式控制台。我可以更改某个设置来解决此问题吗?
我的电脑上有很多重要的文件,我想我搞砸了我的操作系统,因为当我重新启动电脑时,它把我带到了一个没有 GUI 的控制台窗口。我输入“startx”,它吐出“没有这样的文件或目录”错误:我最喜欢的。我需要将文件复制到我格式化为 FAT32 的 USB 驱动器。我输入了命令“lsblk”来列出我电脑上的所有驱动器,然后我看到了我的 USB 驱动器。它只是没有名字。当谈到任何 Linux 时,我都是个白痴。我只知道基础。我在 Windows 中将我的 USB 驱动器命名为“USB”,但是当我在 Linux 上键入“cd /USB”时,它会出现另一个“没有这样的文件或目录”错误。我很确定我做错了。我知道我的文件在我的硬盘上真是令人沮丧。我就是不能 我一辈子都想不出如何在 Linux 上将它复制到我的 USB 驱动器上。我知道如何在 Windows 上做到这一点,但在 Linux 上却不知道。
我正在运行 Peppermint OS(这让事情变得更糟,因为它显然很晦涩,而且几乎没有关于它的教程,而且那里的教程已经过时了)。
这就是我掌握的所有信息。如果我在解释我的问题时做得很糟糕,请对我放轻松。我是 Linux 笨蛋。
我对 Linux 还很陌生,我会成功的;博士。我在我的计算机上安装了 Ubuntu Server 20.04.4 LTS 并将其用作服务器。我只安装了 Java、Filezilla、Forge(Minecraft 服务器)和一个 Discord 机器人。今天我无意中阻止了 SSH 连接的端口 22,所以我将其插入显示器并重新启动以打开 SSH 端口。我受到了一个 GUI 的欢迎,这完全让我感到困惑。没有我的服务器版是如何安装GUI的?我不希望它使用不必要的资源。
输出sudo aptitude why gnome
:
i ubuntu-standard Recommends plymouth
i A plymouth Suggests desktop-base
p desktop-base Suggests gnome | kde-standard | xfce4 | wmaker
和sudo aptitude why ubuntu-standard
:
Manually installed, current version 1.450.2, priority standard
No dependencies require to install ubuntu-standard
我 100% 肯定我从未在控制台中输入过 ubuntu-standard。如何在不重新格式化的情况下恢复?
就像@terdon 建议我通过删除 ubuntu-standard
sudo apt remove ubuntu-standard filezilla plymouth desktop-base
sudo apt autoremove
现在“为什么 gnome”的回应是:
i grub-efi-amd64-signed Depends grub-efi-amd64 | grub-pc
p grub-pc Depends grub-pc-bin (= 2.04-1ubuntu26.13)
p grub-pc-bin Suggests desktop-base (>= 4.0.6)
p desktop-base Suggests gnome | kde-standard | xfce4 | wmaker
同样有趣的是,它"echo $XDG_CURRENT_DESKTOP
响应 GNOME 并sudo apt remove gnome
响应Package 'gnome' is not installed, so not removed
.
我很困惑...
我有几台安装了 Archlinux 的 linux 机器,每台都连接到 KVM 切换器,但大多数时候所有机器都是远程连接的。我不使用 X,所以没有安装 X 的东西。
几个月前的某个时候,在更新操作系统后,控制台屏幕除了空白屏幕之外什么都没有显示,并且来自 KVM 切换器的“不同步错误”消息。所有机器都有同样的问题。
在此之前,使用控制台没有问题,在那之后,进一步的更新并不能解决问题。
我能做些什么来解决这个问题?我应该查看哪个配置文件?
我有一个带有-i
标志 (→ $interactive
) 的脚本,如果设置了,则会为每个目标、à larm -i
和其他目标询问一个是/否-默认-否问题。
Zshread -q
就是为这种情况而设计的——它接受一个键并将变量设置为y
如果键是yor Y,否则将其设置为n
。
我的问题是我正在循环提示。因此,它本身会在同一行重复打印我的提示。也就是说,这段代码:
# moshPids is an array of pids
for p in $moshPids; do
if [[ -n $interactive ]]; then
read -q "answer?Kill $p? (N/y)"
[[ "${answer}" == 'n' ]] && continue
fi
# do_kill set to print “killing $1” in debug
do_kill $p
done
结果是:
$ myCmd
Kill 123? (N/y)nKill 456? (N/y)nKill 789? (N/y)yKilling 789
$
对此有很多解决方案——一些在这个网站上的答案中——例如在提示符中包含一个换行符,如下所示:
for p in $moshPids; do
if [[ -n $interactive ]]; then
read -q "answer?Kill $p? (N/y)
"
[[ "${answer}" == 'n' ]] && continue
fi
do_kill $p
done
这导致:
$ myCmd
Kill 123? (N/y)
nKill 456? (N/y)
nKill 789? (N/y)
yKilling 789
$
这对我来说似乎很丑陋。另一种解决方案是echo >&2
在read
命令之后添加,至少一开始看起来很完美:
$ myCmd
Kill 123? (N/y)n
Kill 456? (N/y)y
Killing 456
Kill 789? (N/y)n
$
但是,如果您接受默认设置⏎,则会得到空行(⏎
实际输出中未显示,但添加到显示输入中):
$ myCmd
Kill 123? (N/y)⏎
Kill 456? (N/y)y
Killing 456
Kill 789? (N/y)⏎
$
所以:我想要一个单键响应:
read -q
:的行为answer
,y
如果键是y或Y; 否则将其设置为n
。这是我的第一个解决方案:
for p in $moshPids; do
if [[ -n $interactive ]]; then
read -k1 "answer?Kill $p? (N/y)"
[[ $answer != $'\n' ]] && echo >&2
[[ "${answer}" =~ '[yY]' ]] || continue
fi
do_kill $p
done
在这里,-k1
而不是-q
被传递给,read
以便它获得“读取一个字符,任何字符”的行为。这样,我可以测试匹配换行符的字符。如果不是($answer != $'\n'
),我可以打印缺少的换行符。
但现在$answer
将设置为任何按下的键,而不仅仅是y
或n
。所以我们必须检查y
或Y
("${answer}" =~ '[yY]'
)。
有没有更好的方法来处理这个?
我也考虑过这一点,使用stty
调用暂时禁用键盘回显:
for p in $moshPids; do
if [[ -n $interactive ]]; then
stty -echo
read -q "answer?Kill $p? (N/y)"
stty echo
echo >&2
[[ "${answer}" == 'n' ]] && continue
fi
do_kill $p
done
通过禁用键控响应的可见性,这可能会或可能不会更可取,具体取决于您是优先考虑漂亮的输出还是能够在回滚中看到输入。(在这种情况下,yes 选项总是打印一些东西的是/否问题,noecho 似乎很好。如果需要,人们总是可以在echo -n "${answer}"
之后添加一个read
扩展咒语,将换行符变成空白。)
它比第一个解决方案更长,但可能更容易理解,因为它使用read -q
所以不必针对正则表达式进行测试,并且无条件地回显换行符。
但另一方面,它确实与终端猴子;我已经把这两个命令放在足够近的地方,而不应该有太大的时间窗口让命令中断导致终端精神错乱,但这仍然是一个问题。(另外,为了完整起见,我应该添加一个-i
未被非交互调用的检查——否则,stty
andread
操作将失败。)
有比我提出的两个更好或更惯用的解决方案吗?这似乎是许多“-i
用于交互”命令(当然,大多数是用 shell 以外的东西编写的)遵循的明显行为。
我试图阻止用户在没有从机器上物理移除闪存卡的情况下关闭或重新启动。为此,我编写了一个 SystemD 服务 removeflash.service:
[Unit]
Description=Prompt user to remove flash card
[Service]
ExecStop=/usr/lib/systemd/flashshutdown.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Requires=rsyslog.service
flashshutdown.sh 是一个 bash 脚本,如下:
#! /bin/bash
#
while [ -e /dev/flash ] ; do
echo "Please remove flash card"
logger "GHB: Please remove flash card"
sleep 5
done
我没想到 echo 在关机时会做任何事情,但事实并非如此。但是,我希望 logger 命令能够工作。没有Requires=rsyslog.service,我的服务在rsyslog.service关闭后退出;我插入了防止这种情况发生的要求,但唯一的区别是 removeflash.service 的关闭在关闭顺序中更早。幸运的是,systemd 本身向控制台输出一条消息,表明它正在运行一个作业,提示用户移除闪存卡,从而挽救了服务的目的。
向控制台发出消息的正确方法是什么?