我有一个 Unix 命令数据集作为终端的输入,我想用它们来比较用户行为。
不同的用户与不同的目录和文件交互(它们都位于不同的计算机上)。我想查看哪些用户使用相同的命令,具有相同的参数/参数(但我很高兴有不同的文件名/目录作为参数)。
从逻辑上讲,为了实现这一目标,我应该从数据集中删除文件名和目录,然后寻找相似之处,但这是我的问题。
如何将文件名和目录识别为命令行参数/参数?
例如给定
ls -F thesis
我如何识别thesis
为文件/目录(我理解这种情况下的语义ls
,但我正在更广泛地寻找,我不知道所发出命令的语义)
答案1
你不能。
您需要了解所执行的每个命令的语义。
命令行上给命令的任何参数都会传递给程序,然后程序就可以随意实现。该程序甚至不必在解释参数方面保持一致(如果这样做,它可能不太有用)。
您还需要考虑某些用户可能已经解决了不存在的文件 - 无论是拼写错误(这些也可能出现在程序名称中)、试图查看某个文件是否存在、误导您还是出于其他原因。我想我什至见过一些程序根据给定参数是否是现有文件的名称而表现不同,但在这两种情况下都做了一些事情。
ctrl-alt-delor 建议使用的制表符补全数据基本上是对许多(常用)命令的语义进行编码的一种方式,但它们可能(我没有花太多时间查看这些)取决于什么 shell用户曾经有过,并且此后可能会发生变化。因此,虽然这可能提供了一条前进的道路,但也并非没有问题。
答案2
这可能涉及一些手动工作。但是当您为命令创建了模式后,它应该可以重复使用。我想知道您是否可以使用配置数据来完成制表符。它通常(但并非总是)知道。