Press "Enter" to skip to content

月与灯依旧 Posts

FTP下载地址中特殊符号的转换

要下载FTP中的大文件,一般是转换成完整的下载地址(例如ftp://uername:password@ip:port/dirname/filename)来下载。但这样有时候会产生问题,如果password里面有特殊字符怎么办?

方法很简单,把特殊字符换成16进制的ASCII码即可。

假设现在有个FTP服务器192.168.1.1,用户名zhang3,密码是zhang!@#,我们要下载该服务器上/html/a.rar文件。

如果写成ftp://zhang3:zhang!@#@192.168.1.1:21/html/a.rar的格式,肯定会报错。

那么我们可以写成ftp://zhang3:zhang%21%40%[email protected]:21/html/a.rar,这样就可以利用wget之类的工具来下载了。

附上一些常见十六进制的ASCII编码:

ASCII字符	字符中文名	编码后的值
空格              空格             %20
!                感叹号            %21
#                 井号             %23
&                 and              %26
@                 at               %40
/                 斜杠             %2F
:                 冒号             %3A
=                等于号            %3D
?                 问号             %3F
~                波浪号            %7E

================================================
2015.06.28补充:
其实在Linux上使用wget下载FTP上的文件时,也可以使用如下命令来下载(同样允许password里有特殊字符)

wget ftp://ip/filename.zip -e login=username -e passwd='password'
Leave a Comment

Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)

硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。VPSee 前天收到一位网友的邮件提到了 SMP IRQ Affinity,引发了今天的话题:D,以下操作在 SUN FIre X2100 M2 服务器+ 64位版本 CentOS 5.5 + Linux 2.6.18-194.3.1.el5 上执行。

什么是中断
中文教材上对 “中断” 的定义太生硬了,简单的说就是,每个硬件设备(如:硬盘、网卡等)都需要和 CPU 有某种形式的通信以便 CPU 及时知道发生了什么事情,这样 CPU 可能就会放下手中的事情去处理应急事件,硬件设备主动打扰 CPU 的现象就可称为硬件中断,就像你正在工作的时候受到 QQ 干扰一样,一次 QQ 摇头就可以被称为中断。

中断是一种比较好的 CPU 和硬件沟通的方式,还有一种方式叫做轮询(polling),就是让 CPU 定时对硬件状态进行查询然后做相应处理,就好像你每隔5分钟去检查一下 QQ 看看有没有人找你一样,这种方式是不是很浪费你(CPU)的时间?所以中断是硬件主动的方式,比轮询(CPU 主动)更有效一些。

好了,这里又有了一个问题,每个硬件设备都中断,那么如何区分不同硬件呢?不同设备同时中断如何知道哪个中断是来自硬盘、哪个来自网卡呢?这个很容易,不是每个 QQ 号码都不相同吗?同样的,系统上的每个硬件设备都会被分配一个 IRQ 号,通过这个唯一的 IRQ 号就能区别张三和李四了。

Leave a Comment

Linux Shell之uniq用法(检查重复的行)

一,uniq干什么用的

文本中的重复行,基本上不是我们所要的,所以就要去除掉。linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个。使用uniq的时候要注意以下二点

1,对文本操作时,它一般会和sort命令进行组合使用,因为uniq 不会检查重复的行,除非它们是相邻的行。如果您想先对输入排序,使用sort -u。

2,对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过

二,uniq参数说明

[zhangy@BlackGhost ~]$ uniq --help
用法:uniq [选项]... [文件]
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。

不附加任何选项时匹配行将在首次出现处被合并。

长选项必须使用的参数对于短选项时也是必需使用的。
 -c, --count             #在每行前显示该行重复次数,重要!!!
 -d, --repeated          #只输出重复的行,重要!!!
 -D, --all-repeated      #只输出重复的行,不过有几行输出几行
 -f, --skip-fields=N     #-f 忽略的段数,-f 1 忽略第一段
 -i, --ignore-case       #不区分大小写
 -s, --skip-chars=N      #根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符
 -u, --unique            #去除重复的后,全部显示出来,根mysql的distinct功能上有点像
 -z, --zero-terminated   end lines with 0 byte, not newline
 -w, --check-chars=N     #对每行第N 个字符以后的内容不作对照
 --help              #显示此帮助信息并退出
 --version              #显示版本信息并退出
2 Comments

LVM逻辑卷镜像实现方法

本文演示了在CentOS5系统中实现LVM逻辑卷镜像的方法。LVM的镜像功能,有点儿类似于Raid1,即多块儿磁盘互相同步,确保资料不会丢失。

创建物理卷,卷组的步骤这里就先省略了,网上大把的教程。本文的过程如下:
1,创建4个物理卷/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4,并且将sda1-sda3三个物理卷加入到卷组vg1中,并在卷组vg1中创建包含镜像功能的逻辑卷lv1;
2,使用dd命令对物理卷sda2进行破坏,然后从卷组中发现sda2挂了,但确认文件读取正常;
3,(在不解除挂载的情况下)去除坏掉的物理卷sda2,向卷组中加入新的物理卷sda4代替之;
4,确认LVM镜像功能正常,以及文件读取正常。

创建一个包含镜像功能的逻辑卷(命名为lv1):

[root@OS ~]# lvcreate -L 3G -m1 -n lv1 vg1 /dev/sda1 /dev/sda2 /dev/sda3
  Logical volume "lv1" created

[root@OS ~]# lvs -a -o +devices
  LV             VG   Attr   LSize Origin Snap%  Move Log      Copy%  Convert Devices                        
  lv1            vg1  mwi-a- 3.00G                    lv1_mlog   5.34         lv1_mimage_0(0),lv1_mimage_1(0)
  [lv1_mimage_0] vg1  Iwi-ao 3.00G                                            /dev/sda3(0)                   
  [lv1_mimage_1] vg1  Iwi-ao 3.00G                                            /dev/sda2(0)                   
  [lv1_mlog]     vg1  lwi-ao 4.00M                                            /dev/sda1(0)

LVM镜像需要用到-m1参数,从上面可以看出,/dev/sda2和/dev/sda3互为镜像,而/dev/sda1作为日志存储之用。

Leave a Comment

Chrome 修改 User Agent

公司的网管疯了,要使用网络必须安装一款名为“ASM小助手”的极度流氓的无耻软件,被这款无耻软件强奸以后,假如没有安装杀软,或者杀软没有更新到最新,或者没有更新系统补丁等,都会导致无法上网。

后经研究发现,只有Windows系统在连网时会要求下载小助手,Linux和安卓并不会强制要求下载,看来天朝的流氓公司也不是万能的啊(只能强奸Windows,却拿Android、MAC OS、Linux没办法),于是……

本来修改 User Agent 这种事情应该交由插件去实现的,没想到装了一个使用数量最大的插件以后居然无效。于是只好手动改了。其实很简单,只要给 Chrome 添加一个参数启动就可以了。见下图,添加完成以后需要重启 Chrome 才会生效

给出一些常见的 User Agent:

--user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0"
--user-agent="Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"

更多 User Agent 可以参考:http://www.useragentstring.com/pages/useragentstring.php

查看浏览器的User Agent:

http://www.enhanceie.com/ua.aspx
http://www.useragentstring.com/
http://whatsmyuseragent.com/

2 Comments

linux rpm包编译过程(spec文件和spec宏 )

spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件。spec文件包含建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个目录下。这个文件一般分为如下的几节:

1,Preamle(序言)

序 言包含用户请求包的信息时所显示的内容。它可以包含包的功能描述、包的软件版本、版权信息和所属的包组等。Summary 是一行关于该软件包的描述,Name 是该软件包的基名,Version 是该软件的版本号,Release 是 RPM 本身的版本号,如果修复了 spec 文件中的一个错误并发布了该软件同一版本的新 RPM,就应该增加发行版号。License 应该给出一些许可术语(如:”GPL”、”Commercial”、”Shareware”),Group 标识软件类型。那些试图帮助人们管理 RPM 的程序通常按照组列出 RPM。您可以在usr/share/doc/rpm-4.0.4/GROUPS 文件看到一个 Red Hat 使用的组列表(假设您安装的 RPM 版本是 4.0.4)。但是您还可以使用那些组名以外的名称。Source0、Source1等等给这些源文件命名(通常为 tar.gz 文件)。%{name} 和 %{version} 是 RPM 宏,它们扩展成为头中定义的 rpm 名称和版本。

要注意的是,不要在 Source 语句中包含任何路径。缺省情况下,RPM 会在 /usr/src/redhat/SOURCES 中(对于Redhat6 系统,则是在 /root/rpmbuild/SOURCES 目录中)寻找文件,请将您的源文件复制或链接到那里。(要使 spec 文件尽量可移植的话,应当尽量避免嵌入自己开发机器上的假想路径。其他开发人员就可以指示 RPM 在别的目录下查找源文件,而不用修改您的 spec 文件。)

接下来的部分从 %description 行开始。您应该在这里提供该软件更多的描述,这样任何人使用 rpm -qi 查询您的软件包时都可以看到它。您可以解释这个软件包做什么,描述任何警告或附加的配置指令,等等。

一个序言的简单例子:

Leave a Comment

Windows DHCP无法获取IP

近日遇到一Windows7系统通过DHCP无法获取IP的怪事,通过万能的百度解决了问题,简要记录一下。

通过DHCP无法获取IP的原因:本地或者网络内有(除了路由器以外的)其它DHCP服务器!

1,本机DHCP服务是否打开?(运行services.msc,找到“DHCP Client”服务,确认状态为“已启动”)

2,ARP攻击(要排除其实也很简单,手动设置IP不会掉线,说明就没有ARP攻击)

3,检查本地或者网络内的其它DHCP服务器(最大可能性)
本地:如果安装了VMware虚拟机,需要关闭“VMware DHCP Service”服务(这是博主遇到的情况,不光搞的博主自己获取不了IP,甚至干扰了网络内其它用户,真是羞死个人,亏博主还自称技术大牛,竟被一VMware坑了);
网络:排查也很简单,“非法”的DHCP服务器肯定是跟你在同一个网络内,并且你们能够互相通信,可能是某个客户端私接了一台路由器,又或者是搭建在某个电脑上的DHCP服务器,例如某个网络内有个童鞋正在学习搭建DHCP服务器,或者安装了VMware软件,都有可能干扰到你。

Leave a Comment