以下是bind9-dnsutils
工具:
delv
dig
dnstap-read
mdig
nslookup
nsupdate
列表取自:https://manpages.debian.org/bookworm/bind9-dnsutils/index.html
我知道nslookup
它已被弃用但dig
事实并非如此(dig 是替代品)。
但是其他 4 种工具呢?它们是被弃用、过时还是仍然有效?
如果是这样,有什么替代品吗?
以下是bind9-dnsutils
工具:
delv
dig
dnstap-read
mdig
nslookup
nsupdate
列表取自:https://manpages.debian.org/bookworm/bind9-dnsutils/index.html
我知道nslookup
它已被弃用但dig
事实并非如此(dig 是替代品)。
但是其他 4 种工具呢?它们是被弃用、过时还是仍然有效?
如果是这样,有什么替代品吗?
是否可以调整 qemu/libvirt 映像的大小,同时保持虚拟大小,并且不丢失数据?我解释得更好:
当您创建虚拟磁盘时
qemu-img create -f qcow2 debian-GEN.qcow2 60G
虚拟机看到60G的磁盘,但是使用的空间是虚拟机已经使用过的空间(此例子是在安装了一些软件之后)
qemu-img info debian-GEN.qcow2
image: debian-GEN.qcow2
file format: qcow2
virtual size: 60 GiB (64424509440 bytes)
disk size: 3.1 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: debian-GEN.qcow2
protocol type: file
file length: 4.61 GiB (4948164608 bytes)
disk size: 3.1 GiB
现在问题来了。假设我写入了 20GB 的额外数据,磁盘大小变为 23GB(3.1+20),假设我删除了 20GB 的数据(使用 rm -fr 甚至 shred),磁盘大小仍然是 23GB!我的问题是:有没有办法从虚拟磁盘中删除 20GB 未使用的数据?那么镜像返回 3.1GB(但虚拟机仍然看到 60GB 空间)?
我有兴趣使用脚本分析 50 个不同的数据集,并将 50 个分析的输出分别保存在 50 个不同的相应目录中。为了避免手动执行此操作,如何以自动化方式(即以“批处理模式”执行此操作)完成?
要运行该脚本,需要使用一组可执行文件,所有这些文件都位于名为“Programmes”的目录中,并且还需要一个输入参数文件。每个数据集实际上由两个文件组成(infile.ped 和 infile.map)。通过我之前问过的一个问题(如何将循环命令每次迭代的输出保存到另一个新文件夹?),我了解到,如果我想对给定的单个数据集运行 50 次重复运行,一种解决方案是:
for dir in dir{01..50}; do
mkdir -p "$dir" &&
ln -sf ../{script.sh,infile.{ped,map},INPUT_PARAMETERS_FILE,PROGRAMMES} "$dir" &&
(cd "$dir" && exec bash ./script.sh infile)
done
我的问题是,这样的循环如何适应这种情况,即目标不是自动分析单个数据集,而是自动分析例如 50 个不同的数据集 (infile_1.ped 和 infile_1.map; infile_2.ped 和 infile_2.map; ...; infile_50.ped 和 infile_50.map)。
当我在 zsh 中运行以下脚本时,和都$0
给出$0:P
相同的输出:/Users/john/scripts/test123.sh
。
#!/bin/zsh
echo script\'s path: $0
echo absolute path: $0:P
echo parent folder: $0:h
echo filename: $0:t
echo filename w/o extension: $0:t:r
echo extension: $0:t:e
但为什么会这样?是不是因为:P
强制使用绝对路径(根据 zsh 文档),如果:P
不使用,路径应该是相对的,例如~/scripts/test123.sh
?
要运行该脚本,我首先要使其可执行:chmod a+rx test123.sh
然后双击它或使用命令行。操作系统是 macOS。
/32
在 Linux 网络中,创建带有启用子网的 IP 地址与创建带有附加路由的pointopoint GATEWAY
地址之间有什么区别?/32
GATEWAY
(是pointopoint
中的选项, 是内核中的标志。)ifconfig
peer
ip address
IFF_POINTOPOINT
具体来说,这些命令之间是否存在差异(例如在路由行为或性能方面)
ip addr add 1.2.3.4/32 peer 1.2.3.1 dev eth0
和
ip addr add 1.2.3.4/32 dev eth0
ip route add 1.2.3.1 dev eth0
1.2.3.1
网关在哪里?
附加问题:如果没有区别,为什么要将其pointopoint
添加到内核中?
我指示我的终端仿真器将“\u{85}”(C1 控制字符"NEXT LINE" (NEL)
)发送到管道中以便被 bash 捕获:
bind -x '"\u0085":"echo Hello"'
但这不会触发任何事情。所以我的第一个问题是:如何表示unicode代码点bind -x
?奇怪的是,bash选择了八进制表示:
bind -x '"\205":"echo Hello"'
无论如何,上述操作都会在 shell 中产生奇怪的现象:
Hello
$ �Hello
Hello
$ �
我认为控制字符可能有一些副作用。所以我的第二个问题是,我可以安全地重新利用哪个 Unicode 范围来为自己谋利?
输入数据:
id,location_id,name,title,[email protected],department
1,1,Susan houston,Director of Services,[email protected],
2,1,Christina Gonzalez,Director,[email protected],
3,2,Brenda brown,"Director, Second Career Services",[email protected],
4,3,Howard Lader,"Manager, Senior Counseling",[email protected],
8,6,Bart charlow,Executive Director,[email protected],
9,7,Bart Charlow,Executive Director,[email protected],
我需要在电子邮件部分后添加一个字符来复制电子邮件,即[email protected]将变为[email protected](电子邮件部分后的数字需要从第二列中取出)。我如何在 Bash 中对所有条目执行此操作?
我正在运行一个备份脚本(rsync 包装器),--log-file
之前我在 rsync 中使用了标志,在切换到StandardOutput/StandardError后,systemd 开始在日志行之间附加“ ^M ”。请问我该如何使用单元文件指令将其删除?
[Unit]
Description=...
Wants=...
[Service]
Type=oneshot
User=adrian
Group=adrian
ReadOnlyPaths=/
ReadWritePaths=/var/log/foo.log
StandardOutput=append:/var/log/foo.log
StandardError=append:/var/log/foo.log
ExecPaths=/usr/local/bin /usr/bin /bin
ExecStart=/usr/local/bin/foo_script.sh
[Install]
WantedBy=multi-user.target
环境设置
echo $LANG
en_US.UTF-8
我尝试了多种输出模式,但结果相同。
这不是由编辑器或其他工具引起的,而是 systemd loggin 正在附加它。使用 rsync 标志在脚本中指定日志记录的原始版本工作正常。journalctl -u <service name>
渲染正常,但 systemd 输出指令正在将其附加在那里。
我习惯mpg123
在工作时播放歌曲列表。实际运行mpg123
并播放音乐的主机是一个本地无头系统,但我可以通过 SSH 连接到它。我mpg123
在此主机上启动cron
;它会连续循环播放我的“播放列表”中的音轨。但是有时我需要暂停音乐(来电、访客等)。
man mpg123
说按一下s
键就可以暂停播放,再按一次就可以重新开始。如果我mpg123
在终端中启动并让它运行,这就可以正常工作。我还了解到,可以在会话中播放时发送“暂停”信号( s
):mpg123
screen
$ screen -S mpg123 # to start the screen session
$ /usr/bin/mpg123 --loop -1 /home/pi/rainstorm.mp3 # for example
'ctrl+a, d' # quit screen
...
$ screen -S mpg123 -X stuff "s" # pauses play
我在这里发现了一个与我类似的问题,但答案似乎没有切中要点——至少我不明白!
如果是在 下启动的,我找不到允许我向 发送“暂停”( s
) 命令的方法。我更喜欢一种比向 发送此命令更直接的路线,而且我不确定是否可以使用 进行设置。mpg123
cron
screen
mpg123
cron
有人能就一种方法提出建议吗?我更喜欢“bash
解决方案”,而不是需要(例如)C 程序的解决方案 - 但我很高兴能得到任何我能得到的东西!
我认为这是一个简单的问题,但我没有人可以仔细检查我的工作。
这是我的 bash 脚本
#!/bin/bash
# establish date format and dump name
DATE=$(date +"%Y%m%d-%H%M")
DUMPFILE=$DATE.dump
# path to log dir and name of output log file
LOGDIR=/opt/mongodb/backups/logs
DBLOG=$DATE-dump.log
# backup the database and output to a dump file, redirect output to a log
docker exec -i mongodb sh -c "mongodump --archive" > \
$DUMPFILE 2> \
$LOGDIR/$DBLOG
# archive the dump file and the file uploads
ARCHIVENAME=$DATE.tgz
ARCHIVELOG=$DATE-archive.log
tar -czvf $ARCHIVENAME /opt/mongodb/$DUMPFILE /opt/mongodb/files &> \
$LOGDIR/$ARCHIVELOG
在我遇到困难的地方,脚本正确地输出了转储日志。然而,当它结束时,我收到了
./backup.sh: line 20: /opt/mongodb/backups/logs/20250328-0942-archive.log: No such file or directory
我尝试使用绝对路径而不是变量:
tar -czvf $ARCHIVENAME /opt/mongodb/$DUMPFILE /opt/mongodb/files &> \
/opt/mongodb/backups/logs/$ARCHIVENAME
但我得到了同样的错误。我认为这要么是我对重定向、tar 理解不正确,要么是语法错误。如能得到任何帮助,我将不胜感激。
编辑:每次运行脚本时都会创建一个名为“' '”的文件。如果运行
cat ' '
我看到该文件是日志,因此它确实将输出重定向到文件,只是不是以期望的方式。