我想检测Linux发行版和版本。
我用我最喜欢的search引擎search,发现lsb_release 。
不幸的是这个工具默认没有安装。
我想避免先安装lsb_release 。
有没有更简单的方法来检测Linux发行版和便携式的方式?
与“便携式”我的意思是不同types的Linux发行版。 不* BSD或Windows。
cat /etc/*-release应该做的伎俩
文档: https : //www.freedesktop.org/software/systemd/man/os-release.html
选一个…
cat /etc/issue source /etc/os-release && echo "$NAME $VERSION" cat /etc/os-release uname -a
我想大多数现代和LSB兼容的发行版应该提供/ etc / os-release,但是像往常一样:它很复杂! 😉
一些更多的阅读材料:
你的任务是一个困难的,你有我的同情。
我会build议你使用一个库,而不是重复别人的工作。 Python附带了一个名为“平台”的库,它有一个function:
python -c 'import platform; print(platform.linux_distribution())'
然而,这仍然不是一个完整的解决scheme,只是有太多的分布。
如果您的系统中安装了gemgem,您可以使用gem install facter或者如果您gem install facter ,可以使用facter
facter os { architecture => "x86_64", family => "RedHat", hardware => "x86_64", name => "CentOS", release => { full => "7.2.1511", major => "7", minor => "2" }, selinux => { config_mode => "enforcing", config_policy => "targeted", current_mode => "permissive", enabled => true, enforced => false, policy_version => "28" } }
在能够连接所有要扫描的主机的主机上安装Ansible 。 按照说明进行操作: http : //docs.ansible.com/ansible/latest/intro_installation.html
然后设置一个Hosts文件/etc/ansible/hosts
[all] overlord 10.10.10.2 [all:vars] ansible_ssh_common_args='-o StrictHostKeyChecking=no' ansible_user=root ansible_ssh_pass=RootPassword #ansible_become=True #ansible_become_method='sudo' #ansible_become_pass=sudopassword
它可以是IP地址或DNS名称,只要它是可以parsing的。 如果您需要使用sudo ansible_user并更改ansible_user / ansible_ssh_pass
运行设置模块从主机提取信息
# ansible -i hosts all -m setup
对于所有的事实,你可以使用过滤事实
# ansible -i hosts overlord -m setup -a 'filter=ansible_distribution*' overlord | SUCCESS => { "ansible_facts": { "ansible_distribution": "OracleLinux", "ansible_distribution_major_version": "7", "ansible_distribution_release": "NA", "ansible_distribution_version": "7.3" }, "changed": false }
除了uname可用的选项外,还可以检查/etc/issue
/ etc / issue的手册页
除了…
cat /etc/*-release
这将告诉你内核版本和机器结构。
$ uname -a