我正在开发一个简单的 bash 脚本,它应该能够在 Ubuntu 和 CentOS 发行版上运行(对 Debian 和 Fedora/RHEL 的支持将是一个加分项),我需要知道脚本正在运行的发行版的名称和版本(以触发特定操作,例如创建存储库)。到目前为止,我所得到的是:
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
Run Code Online (Sandbox Code Playgroud)
这似乎有效,返回ubuntu或centos(我没有尝试过其他人)作为发布名称。但是,我有一种感觉,必须有一种更简单、更可靠的方法来解决这个问题——这是真的吗?
它不适用于 RedHat。/etc/redhat-release 包含:Redhat Linux 企业版 5.5 …
最近我需要删除大量文件(超过 100 万个),我读到这样做:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Run Code Online (Sandbox Code Playgroud)
是最优化的方法之一,我可以保证它比rm -rf.
我不是这方面的专家,但根据我的理解,rsync 性能的原因与它列出文件的方式有关(我想是 LIFO 而不是 FIFO)。现在,问题是,我还需要以有效的方式移动大量文件。经过一番搜索,我发现了这个:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Run Code Online (Sandbox Code Playgroud)
虽然这会删除所有移动的文件中~/source,该目录留在那里。由于我有一个类似“循环”的目录结构,数量files/directories非常接近 1,所以我不得不再次运行第一个命令以完全摆脱目录:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Run Code Online (Sandbox Code Playgroud)
直线mv几乎会立即完成,但我的~/destination目录中有应该保留的文件,所以mv不是一个选项。我找到了--prune-empty-dirs和--forcersync 选项,但似乎都没有像我期望的那样工作:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the …Run Code Online (Sandbox Code Playgroud) 如何以无人参与的方式从 Bash 脚本安装VirtualBox Guest Additions?
每当我apt-get -y install dkms virtualbox-guest-dkms从终端运行时,我都会看到一个交互式对话框,有什么方法可以安全地绕过或预先选择对话框选项?
debian apt software-installation virtualbox package-management
我正在编写一个 bash 脚本来自动化部署 VPS 服务器的过程,但是在尝试从aptitude/apt-get或安装 MySQL 时遇到了一些问题yum,这是我目前所拥有的:
if [ "$OS" == 'centos' ]; then
yum -y install mysql-server > /dev/null 2>&1
elif [ "$OS" == 'ubuntu' ]; then
aptitude -y install mysql-server > /dev/null 2>&1
fi
Run Code Online (Sandbox Code Playgroud)
似乎脚本一直在无限运行,我怀疑问题是因为该mysql-server包似乎显示了一个向导来指定 MySQL 根密码,但我不知道如何从脚本中克服或填写密码。
有谁知道我如何解决这个问题?