pip, easy_install使用方式

easy_install 跟 pip 都是 Python 的套件管理程序,有了它们,在使用 Python 开发程序的时候会带來不少方便。
easy_install 和 pip 有什么不一样?据 pip 官网的说法,pip 改善了不少 easy_install 的缺点,如此说來 pip 应该是略胜一筹,不过它还不能够完全取代对方,因为目前有很多套件还是得用 easy_install 安裝。

安装使用easy_install

安装:
$ wget -q http://peak.telecommunity.com/dist/ez_setup.py
$ python ./ez_setup.py

使用:
$ easy_install PackageName     #安装套件
$ easy_install -U PackageName  #更新套件
$ easy_install -m PackageName  #卸载套件
$ easy_install --showhelp      #显示说明

继续阅读

Linux Shell之cut用法

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,grep、awk命令是筛选出特定的行,cut命令则是筛选出特定的列。

(1)cut命令参数
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数

-b :输入每行第n个字符(半角,注意如果有中文将乱码)。
-c :输入每行第n个字符(适用中文)。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。

(2)cut命令用法实例 继续阅读

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 号就能区别张三和李四了。 继续阅读

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              #显示版本信息并退出

继续阅读

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作为日志存储之用。 继续阅读

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 查询您的软件包时都可以看到它。您可以解释这个软件包做什么,描述任何警告或附加的配置指令,等等。

一个序言的简单例子: 继续阅读

fedora 服务管理(含简易优化脚本)

Fedora 20上面管理服务使用systemctl工具。以下是几条范例:

sudo systemctl list-unit-files    列出所有服务
sudo systemctl stop bluetooth.service    #停止蓝牙服务
sudo systemctl disable bluetooth.service    #禁用蓝牙服务

此外,Fedora还提供了一个图形化管理服务的工具,名为system-config-services

sudo yum install system-config-services

安装完成以后即可以在程序菜单中找到“服务”,然后在图形界面中管理服务。

以下是一些不常用的服务,可以禁止,对于加速fedora系统是很有帮助的

sudo systemctl stop bluetooth.service    #停止蓝牙服务
sudo systemctl disable bluetooth.service
sudo systemctl disable crond.service    #禁用定时计划任务
sudo systemctl disable atd.service    #禁用一次性计划任务
sudo systemctl disable cups.path    #禁用跟打印机相关的东西
sudo systemctl status cups.path
sudo systemctl stop cups.path
sudo systemctl status cups.path
sudo systemctl stop cups.socket
sudo systemctl disable cups.socket
sudo systemctl status cups.service
sudo systemctl disable cups.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service    #禁用防火墙
sudo systemctl stop vmtoolsd.service       #禁用VMware服务
sudo systemctl disable vmtoolsd.service
sudo systemctl stop multipathd.service     #多链路,基本无用
sudo systemctl disable multipathd.service