在 中bash
,当我cd ~sys
在任何地方键入时,我都会以/dev
. 它与提示中zsh
一样,但包含~sys
/dev
我检查过 Kubuntu 22.04、Ubuntu 20.04、Raspbian 9.13。
谷歌搜索没有产生任何结果。
在 中bash
,当我cd ~sys
在任何地方键入时,我都会以/dev
. 它与提示中zsh
一样,但包含~sys
/dev
我检查过 Kubuntu 22.04、Ubuntu 20.04、Raspbian 9.13。
谷歌搜索没有产生任何结果。
在 bash 中,当我键入screen -x
并按两次 Tab 键时,我会得到所有正在运行的会话的列表。
在 zsh 中,当我键入screen -ls
并按 tab 键两次时,我得到了所有正在运行的会话的列表,并且可以通过它们切换,最终在按 enter 键时选择一个,但是当再次按 enter 键时它会执行screen -ls session-name
。
我想要在 zsh 中获得-x
类似于 的行为-ls
,这样我就不必键入会话名称或选择会话并返回并更改ls
为x
.
我找不到实现screen -ln
tab-behavior 的代码,以便也实现它-x
,我一直在搜索/grepping 插件列表.oh-my-zsh
,但一无所获。
感谢任何帮助,或者一些工作流程提示。我经常使用屏幕,其中大部分是通过screen -x
.
我的curl
两个盒子有问题。在大约两打 Linux 安装中,我对在curl --connect-timeout
.
示例命令curl --connect-timeout 3.14 https://example.com
仅在我的两台机器上失败,这是我唯一的桌面,我唯一的 Kubuntu 安装。其余的主要是 Ubuntu Server 和几个 Debian 安装,都是无头的。
这两个 Kubuntu 桌面版本不同,一个是升级的 22.04 LTS 版本,另一个是 20.04 LTS 版本。
Kubuntu 22.04 有curl --version
一个
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2022-01-05
Kubuntu 20.04 有curl --version
一个
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08
为了比较,一个工作的 Ubuntu Server 20.04 有curl --version
一个
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08
这与 Kubuntu 20.04 的输出相同curl --version
。
所以服务器也安装了这些版本,但小数秒工作正常。
两者curl --manual
都会产生以下 grepped 结果:
~ curl --manual | grep -e "--connect-timeout"
--connect-timeout <fractional seconds>
curl --connect-timeout 20 https://example.com
curl --connect-timeout 3.14 https://example.com
See also --connect-timeout. Added in 7.47.0.
See also -m, --max-time and --connect-timeout. Added in 7.59.0.
See also --connect-timeout.
(在 20.04 上有点不那么冗长)所以两者都在能够处理小数的要求版本之内。
是什么原因造成的?
另一个观察结果:我md5sum
在 Kubuntu 20.04 和 Ubuntu 20.04 盒子上做了一个,两者都返回相同的散列:
c337f891e41007612076a3bc43284aa7 /usr/bin/curl
所以可执行文件应该是相同的。
which curl
/usr/bin/curl
在两台机器上都返回。
(同样适用于 22.04 版本4b7b5099e836abd910f580808adc0874 /usr/bin/curl
)
会不会是环境造成的?如何?
在所有情况下,我都使用bash
和进行了检查zsh
。
我有一台装有 Windows 和 Ubuntu 20.04 的机器。活动分区(BIOS 中的第一个引导项)是安装 Ubuntu 的分区,我已经手动输入 GRUB 条目以选择 Windows 作为引导进入,这是默认设置。
我希望能够使用 USB 记忆棒(或者更好的 SD 卡)来更改默认选择。如果它被插入,它应该引导到 Ubuntu(第一个条目),如果没有,那么它应该使用默认选择(第三个条目,Windows)。
我是否需要(不知何故,我不知道如何)将 GRUB 安装/复制/dd 到 USB 棒/SD 卡上,并选择它作为 BIOS 引导顺序中的第一项,并回退到 Ubuntu 的分区,目前哪个是引导顺序中的第一个?
或者(希望)有一个工具可以让我在 Stick/Card 上放置一个文件,然后由 GRUB 读取?
更新:我一直在检查 GRUB 配置文件,并注意到有一个名为的文件/boot/grub/grubenv
,其中有一个名为next_entry=
. 存在这条线是因为我有时会使用sudo grub-reboot 0
它来重新启动进入 Ubuntu。如果我执行sudo grub-reboot 0
,则此行更改为next_entry=0
.
我现在正在考虑修改/etc/default/grub/00_header
以检查是否连接了某个 USB 设备,如果是,则它要么写入next_entry=0
文件grubenv
,要么添加一些代码,这些代码只是设置必要的变量,类似于next_entry=0
这样做的方式。
所以现在我的问题是我不知道可以执行哪些操作00_header
,最终使用curl
来获取变量将是完美的,但我猜当时不存在网络并且 curl 不是一个可识别的命令。
如何调试/学习 GRUB 以查看此文件中的功能,而不会有损坏系统的风险?
我目前正在考虑使用带有快照的干净虚拟机,如果出现问题,我可以恢复到该快照中,以获得一些见解。但也许这里专家的一两个提示对我来说很有价值。
今天保险丝烧断,关闭了一个小型服务器。
这台服务器有一个 USB-HDD 连接到它,但自从我大约 3-4 个月前连接它以来,我从未完全关闭服务器(没有电),只是偶尔发出一个sudo reboot
.
这个 USB-HDD 列在下面/dev/sdc
,所以我有一个通过sudo mount /dev/sdc1 /media/hdd5-usb-1
.
在 处还有一个挂载的 SSD /dev/sdb
,所以正确的fdisk -l
样子如下
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000ece66
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 499711 497664 243M 83 Linux
/dev/sda2 501758 500117503 499615746 238.2G 5 Extended
/dev/sda5 501760 500117503 499615744 238.2G 8e Linux LVM
Disk /dev/sdb: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CD3F3DA1-2901-45A0-B6E9-2BEEA36F3E78
Device Start End Sectors Size Type
/dev/sdb1 2048 1000214527 1000212480 477G Linux filesystem
Disk /dev/mapper/n3150--vg-root: 222.4 GiB, 238769143808 bytes, 466345984 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/n3150--vg-swap_1: 15.9 GiB, 17028874240 bytes, 33259520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 4.6 TiB, 5000981077504 bytes, 9767541167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 0B9E1A83-476F-47AE-8234-2D29497F55CA
Device Start End Sectors Size Type
/dev/sdc1 2048 9767541133 9767539086 4.6T Linux filesystem
在断电和服务器自动启动后,条目如下所示:
Disk /dev/sda: 4.6 TiB, 5000981077504 bytes, 9767541167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 0B9E1A83-476F-47AE-8234-2D29497F55CA
Device Start End Sectors Size Type
/dev/sda1 2048 9767541133 9767539086 4.6T Linux filesystem
Disk /dev/sdb: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000ece66
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 499711 497664 243M 83 Linux
/dev/sdb2 501758 500117503 499615746 238.2G 5 Extended
/dev/sdb5 501760 500117503 499615744 238.2G 8e Linux LVM
Disk /dev/sdc: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CD3F3DA1-2901-45A0-B6E9-2BEEA36F3E78
Device Start End Sectors Size Type
/dev/sdc1 2048 1000214527 1000212480 477G Linux filesystem
Disk /dev/mapper/n3150--vg-root: 222.4 GiB, 238769143808 bytes, 466345984 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/n3150--vg-swap_1: 15.9 GiB, 17028874240 bytes, 33259520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
显然,这有一些非常讨厌的问题,因为 SSD 上的数据库在预期/dev/sdb1
〜/media/ssd1
突然出现在引导分区,而被认为是 USB 硬盘的实际上是安装的 SSD。
我怎样才能防止这样的事情再次发生?如何将硬件“固定”到特定/dev/sd*
条目?
我molly-guard
在所有机器上使用,但有时我想 ssh 进入机器并执行一个脚本,作为最后一步应该重新启动该机器,但随后出现问题molly-guard
并提示我输入主机名。
我正在寻找类似--molly-guard-do-nothing
标志的东西,但它不会什么都不做,它会被调用--molly-guard-do-not-ask
并且不会要求确认。
手册页没有这方面的信息,所以我想知道是否有解决方法。
只有当我 ssh 进入机器时,我才需要它来工作;也就是说,在 cronjob 左右的上下文中永远不需要它,但我不介意它是否也能工作。
更具体地说,这是有问题的脚本:
sudo apt-get update && apt list --upgradable
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or upgrade? (E/u) " ans;
case $ans in
u|U) printf "\n\nok, invoking 'sudo apt-get upgrade'\n\n"; sudo apt-get upgrade;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit, autoremove or reboot? (E/a/r) " ans;
case $ans in
a|A) printf "\n\nok, invoking 'sudo apt-get autoremove'\n\n"; sudo apt-get autoremove;;
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or reboot? (E/r) " ans;
case $ans in
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
我在这里遇到了一个问题,我尝试使用 Ansible 自动化设置。
某些步骤需要与 交互apt
,但有时我会收到错误,因为无人值守升级启动并锁定了 apt。这将使剧本停止。
我已经尝试了很多方法来解决这个问题,最成功的是重复失败的 apt 命令。
但这无法扩展,也不是 100% 可靠并且感觉很糟糕。
我选择apt -y purge unattended-upgrades
在剧本的开头发布权利。我也试过apt -y remove unattended-upgrades
了,但是那个似乎还在工作时又回来了。清除似乎会像退出之前一样关闭无人值守的升级,这正是我想要的。
但事实证明,即使是对的调用也apt -y purge unattended-upgrades
可能由于锁定而失败。所以我把它改成了while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done
,但偶尔也会失败(我不知道为什么)
我需要一个命令,该命令在执行时将立即终止并掩埋无人看管的升级,无论它是否正在运行,并保证一旦该命令返回它就不会再启动,直到我apt install
再次明确它。如果该命令需要一分钟来完成它的工作,那没关系。
此外,系统没有安装 Python,因此 Ansible 仅发出raw
命令,直到我设法安装 Python,这应该是在成功调用apt -y update
我处于可以轻松触发无人值守升级的状态,因为这是一个虚拟机,一旦我发出date -s
更正过时日期的命令,无人值守升级就会启动。启动虚拟机后,我有几分钟的时间直到date
自动更正,然后开始无人值守升级。
这就是我现在正在做的事情:
- name: Disable autoupdate (part 1 of 2)
raw: sed -i /Update/s/"1"/"0"/ /etc/apt/apt.conf.d/10periodic && sync
- name: Disable autoupdate (part 2 of 2)
raw: echo 'APT::Periodic::Unattended-Upgrade "0";' >> /etc/apt/apt.conf.d/10periodic && sync
- name: Terminate any active autoupdate
raw: ps -A | grep unattended-upgrades | awk '{print $1}' | xargs -r kill -15 $1
- name: Terminate any active dpkg
raw: ps -A | grep dpkg | awk '{print $1}' | xargs -r kill -15 $1
- name: Allow dpkg to recover
raw: dpkg --configure -a
- name: Purge autoupdate
raw: apt -y purge unattended-upgrades
- name: Update apt cache
raw: apt -y update
- name: If needed, install Python
raw: test -e /usr/bin/python || apt -y install python
终止 dpkg 让我毛骨悚然。所有这些都在全新安装的 Ubuntu Server 18.04.1 上运行
这是使用接受的答案创建的解决方案:
我有一台运行 Ubuntu 16.04.3 LTS 的小型 Celeron 机器,每次我需要重新启动它(大约每月一次)时,我都必须关闭它,拔掉插头并重新打开它。
问题是它不会自动重启,因为它会以一条消息停止Reached target Shutdown
。所以我已经停止使用sudo reboot
,而是sudo poweroff
改为使用 ,此后不久就会出现该消息。
当我等待几分钟时,会显示一条附加消息3102533.654120 unregister_netdevice: waiting for lo to become free. Usage count=1
。第二个(如时间测量)计数器很高,约为 3102533,大约为 36 天,可能是上次重新启动的时间。所以仍然有一些东西在后台运行,发出该消息。
由于这已经发生过,而且大部分谷歌点击都与 Docker 相关,所以我确保停止所有容器docker stop $(docker ps -a -q)
,并sudo systemctl stop docker
在发布sudo poweroff
.
在那种奇怪的关机状态下,也无法通过正常的电源按钮按下来关闭机器(长按会关闭电源,iirc),并且按下重置按钮也不会重新启动机器,我发现这是会很奇怪。这是http://www.asrock.com/mb/Intel/N3150DC-ITX/
让我最担心的是“hdd”灯(它是一个ssd)偶尔会闪烁,就好像它在与光盘交互一样,这让我害怕拔电源插头时会损坏某些东西。https://www.youtube.com/watch?v=T3ojE1un7WE
拔插头安全吗?我怎样才能找到这个问题的原因?我无法对机器进行太多重启,因为它托管了一些不断被访问的数据库。
以上为2月12日,以下为3月16日
我只是再次“重新启动”了机器。与上述相同的过程,因为它不会关闭。
这次我apt upgrade/dist-upgrade
在重新启动之前没有这样做,之后我又这样做了,以确保正在升级的东西不是导致此问题的原因。
我在等待它关闭的同时按了 ctrl-alt-del 几次,它没有任何效果,直到出现一条消息:
2s内按Ctrl-Alt-Del超过7次,立即重启
(我认为我没有那么快按下它们,我相信它们以某种方式被缓存或者我按下了很长时间)然后是
2697473.41.. systemd-shutdown[1]:无法完成 DM 设备,忽略(DM 之前的额外空间是该消息的一部分)
然后一个
2697473.63..重新启动:重新启动系统
但它不会重启,硬盘灯还是会偶尔闪烁,显示屏不会清除消息。
按下重置按钮不会重置机器。按钮它没有故障。
长按电源按钮会关闭机器。再按一下重启它,然后reset按钮按预期工作,我可以随时按下它,它会导致系统立即重启。
打开电源后,我进行了 apt update/upgrade/dist-upgrade 并再次 sudo poweroff'ed 它。关机就好了。
当机器开机几天时,发生了一些非常奇怪的事情,这一定是导致这个问题的原因。
我正在使用molly-guard
,我不确定这是否会导致一些问题。当我发出时,sudo shutdown
我在连接的键盘上本地执行,所以molly-guard
没有效果。但我怀疑这molly-guard
是麻烦的根源。
我top -b > test-pre-reboot-no-upgrade.txt
在发布之前做了一个sudo shutdown
,这里是输出https://pastebin.com/nZnJzRKu
在想将 MongoDB 从 3.4 升级到 3.6 时,我进入了该/etc/apt/sources.list.d
目录。从那里我想将mongodb-org-3.4.list
和mongodb-org-3.4.list.save
文件移动到我的主目录。
我首先执行了一个mv mongodb-org-3.4 ~/*
. 出于某种原因,我设法将通配符移到了命令的末尾。看到通知后mv: cannot stat 'mongodb-org-3.4': No such file or directory
,我通过键入“更正”了这个mv mongodb-org-3.4* ~/*
,最后再次使用通配符。我没有使用sudo,我不是root。
作为mv mongodb-org-3.4* ~/*
我得到的回应
mv: cannot remove 'mongodb-org-3.4.list': Permission denied
mv: cannot remove 'mongodb-org-3.4.list.save': Permission denied
mv: inter-device move failed: '/home/user/atlassian' to '/home/user/windows-storage/atlassian'; unable to remove target: Directory not empty
mv: inter-device move failed: '/home/user/data' to '/home/user/windows-storage/data'; unable to remove target: Directory not empty
mv: cannot create symbolic link '/home/user/windows-storage/dockervolumes/sharemanager': Read-only file system
然后我进入该/home/user/windows-storage
目录并对其进行了查找,却发现可能我的所有主目录都已复制(???)到这个挂载的目录。
我有没有损坏什么东西?还是我“只”将主目录复制到这个挂载目录?
为什么这个mv
命令以某种方式表现得像cp
?
好的,原来文件被移动了,但不是全部,因为我Ctrl+\因为它需要很长时间才能完成