df命令显示已安装或未安装的文件系统占用的磁盘空间量,已用空间量和可用空间量以及已使用的文件系统总容量量。
Linux在以下位置 / bin 中有df命令,而在以下位置的Solaris中有 / usr / gnu / bin ......
如果假设在PATH中设置了 / usr / bin ,那么我需要以编程方式确保调用所需的df之一(如上所述)而不是用户定义的df。
这个问题的一个解决方案是使用uname来获取操作系统并相应地设置df ...还有其他更好的方法可以做到这一点,我不依赖于操作系统。
注意:默认的df和gnu df给出不同的输出,因此我需要以编程方式在两个不同的OS上调用所需的df命令(路径如上所述)
没有找到解决问题的方法 使用我在问题中提供的替代解决方案!
答案 0 :(得分:1)
Solaris上没有“默认”df。您有各种df
命令,每个命令都是为满足特定需求而设计的。
/usr/bin/df
是root和大多数用户在Solaris 10及更早版本的安装中默认使用的。这是所有系统脚本使用的。
/usr/xpg4/bin/df
是需要标准合规性的人员和脚本使用的POSIX兼容版本。
/usr/gnu/bin/df
是仅在Solaris 11及更高版本中可用的df
的GNU版本,它首先出现在非root用户的默认PATH中,但不出现在root默认PATH上。
当然,用户可以自由更改其路径,以便首先显示特定的df
,或者甚至是此处未描述的自定义路径,功能,别名等等。
如果要编写不依赖于用户或系统自定义的可移植脚本,可以运行以下命令:
PATH=$(getconf PATH) df
如果要使用具有自己的扩展名df
的特定GNU df
版本,则需要将此命令所在的目录添加到PATH变量中。
答案 1 :(得分:0)
每当你在任何unix变种中触发任何命令时,它都会检查你的PATH env变量。它以PATH env变量中提到的相同顺序检查每个目录中的命令。
所以在你的shell脚本中只需设置PATH变量,这样默认的df路径就会在下面开始。
PATH = Defaut_df_path:$PATH
无论是什么操作系统,如果你开火" df"这将是你的默认" df"。
系统管理解决方案 - 请在.bashrc文件(或bash-profile)中执行此操作。下次df将始终触发默认df。
#!/usr/bin/sh
default_path='/usr/bin';
PATH=$default_path:$PATH;
echo $PATH;
df
which df ## this will give you path which you are using
编程解决方案 - 如果您正在编写一些shell脚本,请在使用df之前执行此操作。它将为该特定运行设置。
我认为在大多数linux varient df默认位置是/ bin或/ usr / bin。所以设置这些路径就足够了。你也可以检查/ bin / df是否存在然后运行/ bin / df否则/ usr / bin / df如下所示。
if [ -e /bin/df ]
then
/bin/df
else
/usr/bin/df
fi
答案 2 :(得分:0)
从我可以收集到的内容中,你在solaris系统中有两个'df'变体。我的建议:在开始进程之前修改环境变量。使用python的子进程接口执行此操作非常简单。
尝试调用platform.uname()
并检查os是solaris还是linux。我认为该调用返回一个关于操作系统的元组。
import subprocess, os , platform
if(os.platform()[0] == 'Solaris')
my_env = os.environ.copy()
my_env["PATH"] = "/usr/bin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)
subprocess.Popen(my_command, env=NONE)
由于调用逐个检查PATH中的每个条目,因此将[X](您喜欢的df的路径)添加到PATH。如果它的solaris被拾取,否则它将移动到PATH中的下一个条目。
答案 3 :(得分:0)
目标系统是否在某种程度上受您控制,这是否涉及一组有限的服务器?
如果是这样,那么在Solaris和Linux服务器上,在同一位置和同一名称添加软链接怎么样?
类似的东西:
Solaris:ln -s /usr/gnu/bin/df /usr/bin/my_df
Linux:ln -s /bin/df /usr/bin/my_df
然后让你的脚本为每个框使用/usr/bin/my_df
。
不是花哨而且相当简单的方法......但也许这对你有用吗?
只是我的2c。
答案 4 :(得分:0)
这个问题的唯一解决方案似乎是使用uname来获取操作系统和 相应地设置df ...与我在问题中说明的相同!