分类 nsis/bat/shell/AutoHotkey 下的文章

lsof命令常见参数说明

lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。以下的说明,大部分内容来自lsof的manual文档。我所做的只是在中文翻译的基础上,进行简单的分类说明,并列举最常用的参数。

一、输出说明
lsof是linux最常用的命令之一,通常的输出格式为:
引用
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

常见包括如下几个字段:更多的可见manual。
1、COMMAND
默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名
2、PID:进程的ID号
3、PPID
父进程的IP号,默认不显示,当使用-R参数可打开。
4、PGID
进程组的ID编号,默认也不会显示,当使用-g参数时可打开。
5、USER
命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID。
6、FD
是文件的File Descriptor number,或者如下的内容:
(这里很难翻译对应的意思,保留英文)
引用
cwd current working directory;
Lnn library references (AIX);
jld jail directory (FreeBSD);
ltx shared library text (code and data);
Mxx hex memory-mapped type number xx.
m86 DOS Merge mapped file;
mem memory-mapped file;
mmap memory-mapped device;
pd parent directory;
rtd root directory;
tr kernel trace file (OpenBSD);
txt program text (code and data);
v86 VP/ix mapped file;

文件的File Descriptor number显示模式有:
引用
r for read access;
w for write access;
u for read and write access;
N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part of the file;
X for an SCO OpenServer Xenix lock on the entire file;
space if there is no lock.

7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
DIR 目录
LINK 链接文件

详情请看manual中更多的注释。
8、DEVICE
使用character special、block special表示的设备号
9、SIZE
文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。
10、NODE
本地文件的node码,或者协议,如TCP等
11、NAME
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等

二、参数
1、不带额外参数运行
lsof path/filename

显示已打开该目录或文件的所有进程信息
lsof `which httpd`

显示指定命令的信息
2、参见参数
-c w 显示以w开头命令的已打开文件的信息
lsof -c sshd

-p PID 显示指定PID已打开文件的信息
lsof -p 4401

+d dir 依照文件夹dir来搜寻,但不会打开子目录
lsof +d /root

+D dir 打开dir文件夹以及其子目录搜寻
lsof +D /root/

-d s 以FD列的信息进行匹配,可使用3-10,表示范围,3,10表示某些值
lsof -d 3-10

-u 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)
lsof -u root
lsof -u 0

◎可配合正规表达式使用
表示不包括root用户的信息:
lsof -u ^root

-i 监听指定的协议、端口、主机等的网络信息,格式为:
引用
[46][proto][@host|addr][:svc_list|port_list]

例如:
lsof -i tcp@192.168.228.244
lsof -i:22

这个比较好用。比如看服务器的 lsof -i udp:611

还可以使用一些参数控制显示结果:
引用
-l 禁止将userID转换为登陆名称,即显示UID
-n 禁止将IP地址转换为hostname主机文件
-P 不显示端口名称

-g s 从PGID列进行匹配
lsof -g 3-10

3、其他参数
+f 所有路径参数都必须是文件系统,否则不能执行
-f 所有路径参数都将作为普通的文件,例如:"-f -- /"中的/,只会匹配单个/路径,而不会是根目录中的所有文件
+f和-f后都应加上“--”表终结符:
lsof -f -- /

+L/-L 打开或关闭文件的连结数计算,当+L没有指定时,所有的连结数都会显示(默认);若+L后指定数字,则只要连结数小于该数字的信息会显示;连结数会显示在NLINK列。
例如:+L1将显示没有unlinked的文件信息;+aL1,则显示指定文件系统所有unlinked的文件信息
-L 默认参数,其后不能跟数字,将不显示连结数信息
lsof +L1

-t 仅打印进程,方便shell脚本调用
lsof -t -c sshd

-F 指定输出那个列,可通过lsof -F?查看
-r 不断执行lsof命令,默认每15秒间隔执行一次
+r 也是不断执行lsof命令,但直到没有接受到文件信息,则停止

想了解更清楚的信息可以在linux下man lsof来查看其他参数的详细用法

perl解析ini文件

网上找了个现成的解析代码IniParser

事例ini文件:

[Directories]
Input=c:\autoexec.bat
调用方法:

use IniParser;
my $ini = IniParser->new("c:\\test.ini");
my $inputdir = $ini->expectEntry("Directories","Input");
IniParser的代码:

#-------------------------------------------------------------------------------
# IniParser. Version 1.0
# A freeware module for parsing .ini files.
# Joachim Pimiskern, September 13, 2003
#-------------------------------------------------------------------------------
package IniParser;
use strict;

sub new
{
my ($class,$filename) = @_;
my $data = {
filename => $filename
};
bless($data,$class);
$data->read($filename);
return $data;
}

sub read
{
my ($self,$filename) = @_;
my $sectionName = "Global";
my $section = {};
my $line;
local *FP;

$self->{$sectionName} = $section;

open(FP,"<$filename") or die "read(): can't open $filename for read: $!";
while (defined ($line = ))
{
chomp($line);
if ($line =~ /^\s*(.*?)\s*=\s*(.*?)\s*(;.*)?$/) # Assignment
{
my $left = $1;
my $right = $2;
$section->{$left} = $right;
}
elsif ($line =~ /^\s*\[\s*(.*?)\s*\]\s*(;.*)?$/) # Section name
{
$sectionName = $1;
$section = {};
$self->{$sectionName} = $section;
}
elsif ($line =~ /^\s*(;.*)?$/) # Comment
{
}
else
{
die "read(): illegal line <$line> in file $filename.";
}
}
close(FP);
}

sub expectSection
{
my ($self,$section) = @_;
my $filename = $self->{filename};

if (! exists $self->{$section})
{
die "expectSection(): $filename has no section [$section]";
}
return $self->{$section};
}

sub expectEntry
{
my ($self,$section,$left) = @_;
my $filename = $self->{filename};
my $sectionHash = $self->expectSection($section);

if (! exists $sectionHash->{$left})
{
die "expectEntry(): $filename, section [$section] has no $left entry";
}
return $sectionHash->{$left};
}

1;

apache这样调用header中的参数值:

apache这样调用header中的参数值:
%{User-Agent}
%{Referer}
nginx在这一点上略有不同:
$http_user_agent
$http_referer

有四点不同:
1、前缀不同(%和$)
2、nginx在引用header参数时需要加上"http_"前缀
3、nginx变量名全部小写,大小写不敏感
4、nginx只支持下划线,header中参数的key如果包含横线(-),在nginx中以下划线(_)替代

nginx直接把横线改为下划线来处理。

在记录log时,或者nginx给fastcgi传递参数时有用。

NSIS 插件全集

Math plugin (contain examples) -- 数学函数插件,NSIS 软件已包含,这个不用说了吧,计算的时候必用。
System plugin (contain examples) -- 调用其他动态链接库(*.dll)插件,NSIS 软件已包含,超级好用,把 windows 的 API 发挥到极限。

A Plugin for controlling Internet Explorer -- 控制 IE 浏览器操作的插件,例如打开浏览器,关闭浏览器等等。

AccessControl plugin -- 存取控制插件,只适用于 Win2000 或以上。

BDE Alias -- Borland BDE 数据库别名创建修改插件(DELPHI 数据库程序安装制作的好东东)

BitTorrent downloads for NSIS -- BT 下载的插件,呵呵,作单独下载某个 BT 文件的好东西

CabDLL: Plugin to extract all the files from a cabinet (CAB) -- 从 CAB 压缩包中抽取文件的插件

Change Variable Plugin -- 可用来改变 $TEMP 的临时目录的插件,打破只能由安装程序自动选择系统 temp 路径。

ChangeRes Plugin -- 改变屏幕分辨率,颜色数,刷新率的插件。

ComPlusAdmin -- COM+ 组件的添加删除插件

CPUDesc -- 获取 CPU 相关参数的插件,例如 3DNOW, MMX 支持等等

CRC generator plugin -- 用来获取文件标准 ZIP CRC32(CRC 校验值) 的插件。

Crypto Plugin -- 用来加密的插件,算法包括 MD5, SHA1, MD2, MD4,可加密文字,文件,呵呵,绝对可以作出一个需要序列号的安装程序,即使别人有解包工具也需要懂得破解算法加密才行,否则只会得到一堆乱码字节。

Customisable MessageBox Plugin -- 可自定义消息对话框的插件,呵呵,可以作出4个按钮的消息框。

Detect Windows Version -- 检查windows系统版本的插件,在严格需要指定系统的时候有用。

Dialogs 2.3 -- 调用系统标准对话框插件,例如打开,保存等等的标准对话框。

DumpState -- 可列出安装过程中变量,堆栈里面内容的插件,用来调试之用超一流。

Enumerate CD-ROM Drives -- 列举当前可用的CD-ROM列表。

ExecDos -- 创建控制台环境运行DOS程序的插件。

Execute & Set Priority -- 以进程方式运行程序,而且可以指定运行优先级的插件。

ExLicensePage -- 扩展 License 页的插件,是否有很多 License 要用户同意才能安装呢,这个东东就是为了解决这个问题的,实现多页 License 效果。

external install file system -- 分卷安装制作的插件,用 NSIS把安装程序做到多个软盘中已经不是很困难的事了。

ExtractDLL -- 解压 compressfile.exe 压缩的文件,在用 NSISdl 插件制作在线升级程序时有用。只支持 zlib 算法。

ExtractDLLEx Plugin (LZMA containerfile decompressor) -- 同上,支持 LZMA 算法。这个插件和上面那个插件出现的目的是为了,在线升级程序多数人都要把升级文件打包以减少体积,而 NSIS 并没有属于自己的解压插件,所以不得不把一些没有精简过代码的解压程序来作为客户端的解压工具,这是不可取的,所以这两个插件随之出现。

Find Process By Name -- 查找进程的专用插件,呵呵,这下不用自己用API函数来互斥来知道进程是否运行了。

FloatOP plugin -- IntOp 只能操作整数,该插件就是为了解决浮点数运算问题的。

Help Support Plugin -- 这是一个可以令到你点击一个按钮或按“F1”就可以通过关键字调出相关帮助中的相关章节的插件。

InetLoad -- 一个类似 NSISdl 的下载插件,支持 http 和 ftp ,基于 MS WinInet API,对于在线升级程序制作有一定用处。

InstallOptionsEx 2.4.2 beta 1 -- 扩展自原 InstallOptions 插件,更多控件支持 Animation(动画), ProgressBar(进度条), TrackBar(位置调节), IPAddress(IP 输入), DateTime(日期时间编辑框), MonthCalendar(日历), UpDown(上下调节), TreeView(树形结构视图框)。还有其他改进功能。

Internet plugin -- 网络功能插件,取本地计算机的主机名,IP 地址,还有 urls 的状态代码,例如:404 就代表 urls 不存在。

IPTest -- 检测 IP 段中的可用地址。可用来检测一个IP是否存在并可用。

KillProcDLL Manual -- 清除进程的插件,既然能检测出阻碍安装过程的进程当然少不了这个清除进程的东东啦。

Lazarus Registration Component -- 可添加一个输入序列号和注册码的页面,呵呵,想做一个要输入注册码的安装程序吗?这个插件就是用来这样做的。

Marquee (text scroll) -- 可以在 INSTFILES 页面(安装程序进度列表页面)的列表中添加滚动条的插件。还可以改列表的颜色,字体,边框等等

MD5 plugin -- md5 插件,著名的校验算法插件,用来检验一个文件的版本是否对应的最好插件。

MSIBanner - Plugin to display a dialog with a progress bar -- 一个仿效标准 MSI 安装程序(Windows Installer) banner 的界面插件。

new directory selection page -- 安装目录选择页面插件,能检测是否满足需要空间大小。

NSIS Debugger -- NSIS 调试器插件,用来调试脚本用的。

NSIS-Date 1.0 -- 取本地时间的插件,在 API 函数中也能做到,但是这个插件是推荐用的,因为它包括了处理例如夏令时这类的时间问题。

NSISLog -- 写安装日志的插件,用来记录安装过程,从而准确删除安装过的文件的好插件。

nsRandom -- 能产生随机数的插件,某些时候,这个插件是很有用的。

nsScreenshot -- 保存屏幕截图为一个BMP文件的插件。可全屏幕截图或指定窗口截图

nsWeb: A plugin to display the web browser control in a custom page -- 可以插入一个支持 HTML 的页面插件,也可以以弹出窗口的方式显示,做广告的东东。

NxS MSI LoaderDlg -- MSIBanner 只是个仿效插件,所以就产生了这个插件,要求完美的人总会有的。

ODBC Configuration Manager -- ODBC 数据源配置管理插件。制作数据库安装程序的又一个好东东。

Perl plugin - v. 1.3 -- 这是一个允许在 NSIS 安装程序中执行 Perl 代码的插件。

Plugin Tester (or Wrapper) -- 这是个能使用命令行参数调用其他插件中函数的插件。

Processes plug-in -- 查找和清除进程(包括设备驱动)的插件。(适用:WinNT,Win2K,WinXP,Win2003 Server)

Python Interpreter -- 这是一个允许在 NSIS 安装程序中执行 Python 代码的插件。

Refresh Desktop Plugin -- 这是一个刷新桌面的插件,有时候程序安装了桌面图标,为什么用户看不见呢,那就需要这个插件了。

Service Control Manager plugin (install services and drivers on NT/2K/XP) -- 安装服务程序(包括查看服务程序状态,停止,运行操作)的插件。适用:NT/2K/XP

ShellLink plugin -- 这是允许你读取一个快捷方式文件(*.lnk)的插件,那样你就可以知道这个快捷方式的情况,例如指向哪个文件等等。

System hardware detection -- 检查系统硬件信息的插件,目前能检测 CPU 名称,CPU 速度,系统内存大小,显卡名称,显卡内存大小。

System Tray NotifyIcon creator plugin -- 可以产生一个右下角区域中图标的插件,超级酷,估计没有人做过这样的安装程序吧。^__^,可以自定义图标,自定义文字和安装进度百分比。

TAPI Helper Plugin -- 用来检测 modem 的 ID 和名称的插件。

ToolTips -- 可以设置安装程序的提示窗口(例如按钮的帮助提示,正常情况下是浅黄背景色)的前景和背景颜色。

TTF Font Name Plugin -- 能够获取 TTF 字体在计算机中显示的名字的插件,这是个方便制作安装字体的插件。

UnTGZ -- 这是一个解压缩插件。(*.tgz/*.tar.gz)

UserMgr Plugin -- 这是一个能够管理用户帐号和用户组的插件。例如创建计算机用户或计算机用户组等的功能。

VPatch -- 用来制作补丁的插件,能够根据前后版本的不同,根据差异制作出体积非常小的补丁安装程序。

Write arbitrary sized, runtime assigned binary data to Registry -- 在注册表中写入二进制值的插件,限制最大 511 字节。

xtInfoPlugin - System Information Plugin -- 检查系统信息插件,安装程序文件名(ie. Setup.exe) 安装程序放置路径(ie. D:\SetupFiles) 安装程序全路径含文件名(ie. D:\SetupFiles\Setup.exe) 计算机当前语言(ie. Danish, English, German, etc.) .NET Framework IDs(ie. 1.0, 1.1, 2.0, etc.) .NET Framework 版本(ie. 1.0.3705, 1.1.4322, etc.) Internet Explorer IDs(ie. 4.01, 5.0, 5.01, 6.0, etc.) Internet Explorer 版本(ie, 5.00.2920.0000, 6.00.2600.0000, etc.) Windows IDs(ie. 95, 98, me, xp, nt3, nt4, 2003, etc) Windows 版本(ie, 5.1.2800, etc.) MDAC IDs(ie. 2.5) MDAC 版本(ie. 2.50.4403.9) OLEDB IDs(ie. 2.5) OLEDB 版本(ie. 2.50.4403.8) Windows Service Pack IDs(ie, 1, 2a, 6a, etc.)

ZipDLL -- 解压 Zip 压缩文件的插件。

以上插件都是体积非常小的,务求做到了体积小,功能全的效果,以目前来说,NSIS 是安装程序小且功能齐全多样的安装程序制作软件

NSIS中当没有需安装组件被选中,下一步按钮为不可用的脚本

; —— 当没有组件被选中时下一步按钮为不可用 ——
Push $0
Push $1
SectionGetFlags ${Section11} $0
IntOp $0 ${SF_SELECTED} & $0
SectionGetFlags ${Section21} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section22} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section231} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section232} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section233} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section24} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
SectionGetFlags ${Section3} $1
IntOp $1 ${SF_SELECTED} & $1
IntOp $0 $1 | $0
GetDlgItem $1 $HWNDPARENT 1
EnableWindow $1 $0
Pop $1
Pop $0
FunctionEnd