以下为什么不工作?
$ alias sayHello='/bin/echo "Hello world!"'
$ sayHello
Hello world!
$ nohup sayHello
nohup: appending output to `nohup.out'
nohup: cannot run command `sayHello': No such file or directory
Run Code Online (Sandbox Code Playgroud)
(我问这个问题的原因是因为我把我perl和python不同的perl/python二进制混淆了,这些二进制文件是为了我自己的目的而优化的;但是,如果我不提供perl/python二进制文件的完整路径,nohup会给我带来麻烦)
我有一个包含一百万行的gzip压缩文件:
$ zcat million_lines.txt.gz | head
1
2
3
4
5
6
7
8
9
10
...
Run Code Online (Sandbox Code Playgroud)
我处理此文件的Perl脚本如下:
# read_million.pl
use strict;
my $file = "million_lines.txt.gz" ;
open MILLION, "gzip -cdfq $file |";
while ( <MILLION> ) {
chomp $_;
if ($_ eq "1000000" ) {
print "This is the millionth line: Perl\n";
last;
}
}
Run Code Online (Sandbox Code Playgroud)
在Python中:
# read_million.py
import gzip
filename = 'million_lines.txt.gz'
fh = gzip.open(filename)
for line in fh:
line = line.strip()
if line == '1000000':
print "This …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试执行非常相似的代码的两个不同的python脚本.这些脚本设置 a,这是一个简单的浮点数.
对于脚本1:
ipdb> print sys.version
2.7 (r27:82500, Jul 15 2010, 13:04:38)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)]
ipdb> type(a)
<type 'float'>
ipdb> print a
17.23105
ipdb> print '{0:.4f}'.format(a)
17.2311
Run Code Online (Sandbox Code Playgroud)
对于脚本2:
ipdb> print sys.version
2.7 (r27:82500, Jul 15 2010, 13:04:38)
ipdb> print type(a)
<type 'float'>
ipdb> print a
17.23105
ipdb> print '{0:.4f}'.format(a)
17.2310
Run Code Online (Sandbox Code Playgroud)
a在这两种情况下,格式有何不同?a如果我已经检查过它们的值是否相同,那么两个脚本之间可能有什么不同17.23105?(不幸的a是,最初设置的python代码非常非常长......我不想让每个人都拥有1000多行)
假设我有一个perl(或python)脚本,它做了一些高度秘密的事情; 我只想让某些用户真正能够使用该脚本.目前,我通过维护一个只读的文本文件获得此功能,allowedUsers.txt并检查以下内容:
my $username = `whoami`;
my %allowedUsers;
open ALLOWED_USERS, "allowedUsers.txt";
while(<ALLOWED_USERS>) {
$allowedUsers{$_} = 1;
}
if($allowedUsers{$username} != 1) {
die "Sorry, user $username does not have access.\n";
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但是因为脚本必须是可读的(否则Perl本身就无法执行它),没有什么能阻止人们简单地复制脚本,注释掉这段代码,然后运行它们的"黑客入侵"版本以规避身份检查!
有没有更好的方法来实现对用户子集的脚本执行限制?例如,我可以使用不可读的perl代码,但每个人都能以某种方式执行吗?