NAT_Host='1.1.1.1' Dst_Host='2.2.2.2' iptables -t nat -A PREROUTING -p tcp -d $NAT_Host -j DNAT --to $Dst_Host iptables -t nat -A POSTROUTING -d $Dst_Host -p tcp -j SNAT --to $NAT_Host iptables -A FORWARD -d $Dst_Host -j ACCEPT这样就可以从 1.1.1.1 上把所有tcp访问全部转发到 2.2.2.2 上去了奇葩客户有这样的奇葩需求
Read More →subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行交互subprocess的主类subprocess.Popen( args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=N
Read More →写了个脚本签到,但是不想总是在确定的时间签到,不然在数据库里面的记录太假了,所以需要在确定的时间段内,随机选个时间执行,最后想到了使用Cron+AT实现思路很简单,就是cron设置一个起始时间,比如每天早上6点,在这个时间往后随机的2~350分钟里面去签到那么只要这样0 6 * * * echo 'sleep ' $(shuf -i 1-60 -n 1)';date >>/tmp/xxxx.txt' |at now + $(shuf -i 2-350 -n 1) min之所以前面还加了随机1-60秒的sleep 是因为 at是整点执行,不想让数据库内只有整分钟点的签到记录。这个比直
Read More →MySQL官方文档有说明,可以在~/.my.cnf处指定用户的密码。.my.cnf的格式如下:[client] password="MySQL密码" user=MySQL用户名上面的user一行可以省略,不指定user,则自动以当前Shell登录的用户身份登入mysql。把上述代码保存到~/.my.cnf,再次输入mysql(或mysql -u 用户名),mysql-client就会自动读取当前用户的家目录下.my.cnf文件的信息,可以无密码自动登入MySQL。cron等非交互式的程序执行mysql,可能不会自动读取~/.my.cnf,或者.my.cnf保存在其他路径或保存为其他文件名时
Read More →1.使用时间相关的随机数利用data命令生成输出unixtimestamp(%s)和当前时间的纳秒数据(%N,精确到亿分之一秒)前者保证在不同秒数之内输出不重复 后者保证在同一秒内数字不重复 两者组合就可以了date +%s%N这个方法不依赖系统 只要时间不停止,就一直可以得到不重复的为随机数2.系统shell内部变量$RANDOM这么没啥好说的 依赖shell3.通过Linux的随机设备获取 然后算校验和head -10 /dev/urandom | cksum注意这里千万不要使用cat去获取 这个是一条没有尽头的路 获取1行和10行没有太大的区别4.通过Linux的内核的UUI
Read More →直接用过滤器的生成规则去删除TC的filter会导致所有过滤器都被清空不像class,添加后 想要删除很简单 直接把TC命令中的add换成del就可以了,如果class重复,就会像添加路由出错时候一样有提示。但是filter不一样,相同规则的filter可以不断持续的添加,规则添加后,内核会用不同的句柄号(handle)来区分,删除一个filter,不能简单的把规则的add换成del,那会删除所有的filter规则,因为你没有提供最重要的句柄号(handle) 没有提供就是0 是0就会删除所有规则。如果一个filter已经和一个class关联了,那么你如果删除这个class 就会得到这样的提示
Read More →str = '0123456789' print str[0:3] #截取前三位的字符,也可以简写为str[:3] print str[1:4] #截取第二位(包括)到第五位(之前)的字符,首位用0表示,所以结果为'123' print str[:] #截取字符串的全部字符 print str[6:] #截取第七个字符到结尾 print str[:-3] #截取从头开始到倒数第三个字符之前 print str[2] #截取第三个字符 print str[-1] #截取倒数第一个字符 print str[::-1] #创造一个与原字符串顺序相反的字符串 print str[-3
Read More →进度条和一般的print区别在哪里呢?答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?最简单的办法就是,再输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。可以想到那个转义符了吧,那就是 \r。转义符\r就可以把光标移动到行首而不换行,转义符\n就把光标移动到行首并且换行。在python中,输出stdout(标准输出)可以使用sys.
Read More →在语言选择界面选择英文,然后按 F6,再按 ESC,在最下边的命令行里,把结尾的 quiet 替换成 all_generic_ide,回车就可以正常安装了。可以在接下来的语言选择界面再次选择中文。
Read More →0:表示键盘输入(stdin)1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr)command >/dev/null 2>&1 & == command 1>/dev/null 2>&1 &1)command:表示shell命令或者为一个可执行程序2)>:表示重定向到哪里 3)/dev/null:表示Linux的空设备文件 4)2:表示标准错误输出5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等于于16)&:表示
Read More →