在 Bash 脚本中将主机名解析为 IP 地址的最简洁方法是什么?我正在使用Arch Linux。
我需要从 shell 脚本中找到我的外部 IP 地址。目前我使用这个功能:
myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Run Code Online (Sandbox Code Playgroud)
但这取决于perl-libwww, perl-html-format,perl-html-tree已安装。我可以通过哪些其他方式获得我的外部 IP?
我想在一个空的环境中运行一个程序(即没有设置 envariables)。如何在 bash 中做到这一点?
我有一个包含命令的多行输出的变量。从变量中逐行读取输出的最有效方法是什么?
例如:
jobs="$(jobs)"
if [ "$jobs" ]; then
    # read lines from $jobs
fi
Run Code Online (Sandbox Code Playgroud) 使用apt-get install package“建议的软件包”列表安装软件包时会显示。用什么命令可以再次打印?
我注意到postgresql在 ArchLinux 中卸载软件包后,postgres用户和组不会自动删除。其他一些包也是如此。进一步调查这一点,我遇到了这个页面,其中指出:
此处列出的软件包使用
userdel/groupdel删除它们创建的用户。这些不应被自动删除,因为如果任何文件被遗留在此所有权下,它会带来安全风险。
我想知道为什么保留具有此所有权的文件会带来安全风险?
我有一个用于rsync在 Archlinux 中备份文件的 bash 脚本。我注意到rsync无法从 复制文件/sys,但cp工作正常:
# rsync /sys/class/net/enp3s1/address /tmp    
rsync: read errors mapping "/sys/class/net/enp3s1/address": No data available (61)
rsync: read errors mapping "/sys/class/net/enp3s1/address": No data available (61)
ERROR: address failed verification -- update discarded.
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
# cp  /sys/class/net/enp3s1/address /tmp   ## this works
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会rsync失败,是否可以用它复制文件?
我遇到了这个从文本文件打印特定行的解决方案:
sed '123!d;q' file
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么在第一行输入后 sed 不退出?
当使用 MySQL 客户端(例如mysql)时,我如何确定它是使用 Unix 套接字文件还是使用 TCP/IP 连接到服务器?
在我的 Linux 桌面上,我有一个 UTF-8 语言环境。当我尝试使用 grep (ack) 搜索一些 KOI8-R 编码文件时,它失败了。如果我手动将模式编码为 KOI8-R 并将其作为参数传递,它会起作用。
是否可以告诉 grep 该模式使用什么编码?或者其他什么工具?