不幸的是,我在将 Ubuntu 16.04 升级到 18.04 时损坏了我的系统。
Alt我可以使用+访问命令行F2,但要使用,sudo
我需要输入变音符号,因为它们在我的密码中。但 shell 键盘已恢复为英文布局。
我试过按Alt+ 246,但是不起作用。
有人有其他想法吗?我怎样才能输入变音符号?或者在不使用的情况下恢复到德语布局sudo
?
答案1
sudo -S
将从 stdin 读取密码。现在您需要一种方法将密码打印到 stdout,以便将其通过管道传输到sudo -S
。
在我的 Debian 9 中,支持 UTF-8 的 Bash 中,以下每个命令都会打印pa%wörd
一个尾随换行符:
echo -e 'pa%w\xc3\xb6rd'
– 因为echo
内置如何使用来扩展其参数-e
;/bin/echo -e 'pa%w\xc3\xb6rd'
– 因为echo
命令如何使用来扩展其参数-e
。printf '%s\n' $'pa%w\xc3\xb6rd'
– 因为 Bash 的扩展方式$'…'
;printf 'pa%%w\303\266rd\n'
– 因为格式的printf
工作方式;printf '%b\n' 'pa%w\0303\0266rd'
– 因为它%b
的printf
工作方式。
一般来说,它们的数量更多。注意echo
的是不是最好的选择并且$'…'
需要你的 shell 来理解它。最后两个解决方案printf
是可移植的。
十六进制编码\xc3\xb6
取自printf '%s' 'ö' | xxd
系统上的输出,我可以在其中键入或粘贴ö
。该信息也可用在维基百科上.\303\266
来自 的输出printf '%s' 'ö' | od -d
;或者可以将十六进制值转换为八进制。
如果您可以将密码打印到标准输出,那么您就可以获得 sudo 访问权限:
printf 'pa%%w\303\266rd\n' | sudo -S whoami
启动这样的交互式 shell 可能比较棘手,因为这种 shell 需要其 stdin 是终端,而不是管道。希望您sudo
缓存了凭据,因此如果您先调用上述命令,然后sudo su -
紧接着调用,那么后者可能会起作用。
如果没有,请编写一个打印密码的脚本并将其用于sudo -A
:
SUDO_ASKPASS='/path/to/script' sudo -A su -