最近发现服务器的声音很响,仔细一听,是硬盘在哗哗的转。一开始没有引起注意,后来发现这个声音就没有停止过,着手开始调查。nmon给出了明确的答案
│ Code Resource Stats Now Warn Danger │
│ OK -> CPU %busy 9.2% >80% >90% │
│ DANGER -> Top Disk sda %busy 98.9% >40% >60%
再看了一下vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 2 239672 87424 44 2688708 10 14 3500 586 1 26 9 8 13 71
最后明确,硬盘sda被长时间占用,而且,cpu的等待时间已经超过了71%,瓶颈出现在了硬盘上,第一个就想到最近开了aMule,很可能是这个东西在频繁的读写,上官网查了一下资料,尝试了下面的设置:
FileBufferSizePref=100
aMule使用buffer的机制是,每个碎片文件使用 FileBufferSizePref * 15000(bytes),会首先将内容缓存到ram,然后再写入硬盘。
类似的,使用rtorrent的朋友,可以尝试下面的缓存设置
# Send buffer per torrent
send_buffer_size = 10M
# Receive buffer per torrent
receive_buffer_size = 20M
... Read more!
Written on 2011/04/09 by Big Br0ther
为aMule设置缓存
Labels:
aMule,
Linux,
rtorrent
0 Comments
Written on 2010/10/23 by Big Br0ther
解决Airvideo服务器在Linux下运行时,无法显示非英文目录的问题+中文方块问题
Labels:
AirVideo,
Linux
0 Comments
首先,来解决字母中文方块问题。
另外,在显示中文的时候,会遇到方块问题。一开始以为是Ubuntu的环境问题,调整了N次,没有得到解决。仔细考虑了一下,猜想有可能是java的字体问题,因为AirVideo的Linux服务器端是基于JAVA的。而且JAVA的中文字体问题由来已久。
假设你安装的JAVA目录为:/usr/lib/jvm/java-6-sun/
1,拷贝中文字体到JAVA虚拟机目录
/usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback/
fallback目录可能需要自己建立一下。
你也可以将系统的中文字体的链接放到此目录下
$ sudo ln -s /usr/share/fonts/truetype/wqy/*.* /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback/
2,建立字体扫描文件
在目录/usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback/下面执行如下命令
$ sudo mkfontscale
3,将fallback/fonts.scale的内容拷贝到/usr/lib/jvm/java-6-sun/jre/lib/fonts/fonts.dir
注意第一行的行数
ok,重新启动你的AirVideo服务器端,用你的iPhone/iPad尝试一下,应该是可以完美解决。
最后,来解决非英文目录无法显示问题
以下部分来自这里
编辑/etc/init/airvideo.conf文件,做如下修改:
start on runlevel [2345]
stop on shutdown
respawn
exec sudo -H -n -u env LANG=zh_CN.UTF-8 /usr/bin/java -jar /opt/AirVideoServer/AirVideoServerLinux.jar /opt/AirVideoServer/test.properties
然后重新启动你的服务看看。
... Read more!
Written on 2010/09/09 by Big Br0ther
LVM基本应用
Labels:
Linux,
LVM,
Ubuntu
0 Comments
Linux中,使用LVM来管理你的硬盘是非常方便的事情。特别是对于多硬盘,经常增减分区大小等需求来讲,非常的强大。LVM磁盘空间管理系统允许您在需要的时候重新调整大小, 这也就意味着在管理磁盘空间资源方面, 您将获得极大程度的自由。这边不介绍LVM的具体原理,以及各个命令的详细解释,只针对具体应用来进行描述。
试验环境:Ubuntu 10.04.1 LTS
LVM 术语:
PV - Physical Volume 物理卷,例如一个硬盘,或一个Software RAID设备;
VG - Volume Group 卷组,将一组物理卷收集为一个管理单元;
LV - Logical Volume 逻辑卷,等同于传统分区,可看作便准的块设备,以容纳文件系统;
PE - Physical Extent 物理块,划分物理卷的数据块;
LE - Logical Extent 逻辑块,划分逻辑卷的数据块;
1,列出当前所有LVM的物理卷
$ sudo pvscan
通常,你会得到类似如下的结果输出
PV /dev/sdc1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sdd1 VG s0102 lvm2 [931.51 GiB / 160.52 GiB free]
PV /dev/sde1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sdb1 VG s01 lvm2 [148.81 GiB / 31.73 GiB free]
Total: 4 [4.69 TiB] / in use: 4 [4.69 TiB] / in no VG: 0 [0 ]
2,增加一块硬盘到某卷组,然后增加到制定的分区
首先创建物理卷
$ sudo pvcreate /dev/sda1
然后我们列出所有的物理卷时,会看到哪个物理卷没有被加入到卷组中
PV /dev/sdc1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sdd1 VG s0102 lvm2 [931.51 GiB / 160.52 GiB free]
PV /dev/sde1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sdb1 VG s01 lvm2 [148.81 GiB / 31.73 GiB free]
PV /dev/sda1 lvm2 [465.76 GiB]
Total: 5 [5.15 TiB] / in use: 4 [4.69 TiB] / in no VG: 1 [465.76 GiB]
接下来讲未加入卷组的物理卷加入制定的卷组
$ sudo vgextend s0102 /dev/sda1
这时候我们在使用pvscan命令看一下,就会得到如下结果
PV /dev/sdb1 VG s01 lvm2 [148.81 GiB / 31.73 GiB free]
PV /dev/sdc1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sdd1 VG s0102 lvm2 [931.51 GiB / 160.52 GiB free]
PV /dev/sde1 VG s0102 lvm2 [1.82 TiB / 0 free]
PV /dev/sda1 VG s0102 lvm2 [465.76 GiB / 465.76 GiB free]
Total: 5 [5.15 TiB] / in use: 5 [5.15 TiB] / in no VG: 0 [0 ]
加入卷组后,可以给实际的分区扩展一下大小了
$ sudo lvextend -L +500G /dev/mapper/s0102-hd2
将实际分区增加大小后,要记住实际的文件系统必须要调整一下(否则重新启动后会找不到分区)
这边拿btrfs文件系统来做例子
$ sudo btrfsctl -r max /hd2
ok,到这边你就已经成功将一块硬盘加入卷组,并且将实际的分区增大了。
... Read more!
Written on 2010/08/16 by Big Br0ther
fdisk-cfdisk-sfdisk比较
Labels:
Linux
0 Comments
在Linux中有好几个版本的*fdisk类程序。每一个都有自己的强项和缺点。基本上我使用过cfdisk,fdisk,sfdisk。
cfdisk
cfdisk是一个漂亮的程序,它只接受最严谨的分区表, 而且它能生成高质量的分区表。如果可能,你最好使用这个程序。最大的亮点就是使用方便,字符界面下的交互界面很好。
fdisk
这个是很多人一开始都会使用的工具,据说是一个有很多臭虫的分区工具软件(我用了很久,也没有发现过bug,或许现在已经完善了)。 它所做的操作是模糊不清的,通常在碰巧的情况下它才会正常的运行(据说)。 它唯一值得使用的地方是它对BSD的磁盘标签和非DOS的分区表有所支持, 尽量少用这个程序(据说,我没有任何证据正名它是不行的)。
sfdisk
是一个专为黑客提供的程序,它的用户界面很不友善,但它更精确,也比fdisk和cfdisk更有效。另外,它只能以非交互的方式运行。我基本上只用在使用它看分区表。
... Read more!
Written on 2010/08/15 by Big Br0ther
Linux查看内存、CPU、硬盘信息
Labels:
Linux
0 Comments
1.查看CPU信息命令
cat /proc/cpuinfo
2.查看内存信息命令
cat /proc/meminfo
3.查看硬盘信息命令
fdisk -l
... Read more!
Written on 2010/05/19 by Big Br0ther
Ubuntu下aMule的安装,以及相关设置。
Labels:
aMule,
Linux,
Ubuntu
0 Comments
OS:Ubuntu 10.04 LTS
1,安装
Ubuntu下安装东西一向非常简单$ sudo aptitude install amule-daemon amule-utils
2,配置
amule的设置文件如下/etc/default/amule-daemon
在此文件中,你需要设置的是如下两个变量
AMULED_USER
AMULED_HOME
其中AMULED_USER为运行amule的用户,你必须要设置这个,否则amule-daemon无法自动运行。
AMULED_HOME如果你不设置的话,会自动使用AMULED_USER下面的.aMule。
设置好此文件后,我们需要讲amule-daemon启动起来了,第一次启动后会在你设置的AMULED_HOME下面生成一个.aMule目录,并且生成一些必须的初始文件。
$ sudo /etc/init.d/amule-daemon restart
下面需要编辑$AMULED_HOME/.aMule/amule.conf文件,我一般采用以下配置(打开web服务)
[WebServer]
Enabled=1
Port=4711
UPnPWebServerEnabled=0
WebUPnPTCPPort=50001
PageRefreshTime=120
UseGzip=1
UseLowRightsUser=0
Password=e10adc3949ba59abbe56e057f20f883e
PasswordLow=
Template=litoral
密码可以通过一下命令行来取得
echo -n 你的密码 | md5sum | cut -d ' ' -f 1
如果要通过其它客户端远程管理,那么需要设置下面一行
AcceptExternalConnections=1
然后你可以使用amulecmd打开命令行看看,或者登录http://localhost:4711来web管理
好了,开始你的aMule之旅吧。:)
... Read more!
Written on 2010/05/14 by Big Br0ther
Ubuntu下Samba服务器的简单设置,只读,可读写等权限控制。
Labels:
Linux,
Samba,
Ubuntu
0 Comments
服务器:Ubuntu 10.04 LTS
Samba版本:3.4.7
注:本文不会对每个参数,设置的值具体是什么意思做深入的阐述,本文的目的是使用这些配置,立即可用。
1,samba的安装
Ubuntu下面安装samba服务器是很简单的。$ sudo aptitude install samba
2,共享目录的创建
首先确定我们要提供共享的目录,比如我们在/hd1下面建立两个目录供远程用户访问,首先创建两个目录。$ mkdir /hd1/landisk01
$ mkdir /hd1/landisk02
然后修改他们的权限,这步很重要,权限不对会直接影响远程用户可否访问:
$ chmod 1777 /hd1/landisk01
$ chmod 1777 /hd1/landisk02
3,具体配置
安装完毕后,samba的服务就应该自动启动了。下面进行具体的配置。samba配置文件位置:
/etc/samba/smb.conf
配置之前记得备份一下把。:)
我们的配置,是基于系统已经提供的smb.conf来进行的,有一些没有涉及到的地方,就默认的表示使用自动生成的smb.conf中的内容。
关于smb.conf的具体构成,以及每个设定变量详细的意思,可以参考samba的文档。
大体上有两段:[global]和[各共享资源名]
4,[global]段
首先来设置一下编码,好多朋友会遇到在Windows下面文件名出现乱码的情况。我们添加如下设置:
unix charset = UTF-8
dos charset = CP936
display charset = UTF-8
然后设置一下workgroup
workgroup = WORKGROUP
netbios name = s01
你还可以设置允许那些网段访问,比如
hosts allow = 10.0.1.0/24 10.0.10.0/24 127.0.0.1
它给出了10.0.1.x以及10.0.10.x网段,以及本机可以访问此samba服务然后就到关于认证设置的地方了,我么使用以下设置
security = user
username map = /etc/samba/smbusers
encrypt passwords = true
passdb backend = tdbsam
关于/etc/samba/smbusers,我没有具体的看samba的手册,我启动服务器的时候提示我找不到这个文件,我就touch了一个,现在没有具体测试。先touch一个吧,记得用sudo$ sudo touch /etc/samba/smbusers
回头看了准确的解释再补上:)
然后设置禁止root访问,以及不同步linux密码
invalid users = root
unix password sync = no
其它的地方保持默认吧,然后在往下,有关于打印机的设置,我是关闭打印机列表的。如下设置:
load printers = no
disable spoolss = yes
在进入资源定义区域之前,我追加了一个全局允许guest访问的。
usershare allow guests = yes
到这里[global]定义就告一段落。下面进行各共享资源的定义。
5,共享资源定义
在默认自动生成的smb.conf文件中,你会看到默认的[share][home],这些就是共享名,意味着你在比如windows下面,你就会看到这些名字的共享盘一样。关于print***开头的,可以放在那边,即使有,也不会起作用,在客户端也看不到相关的打印机,在上面全局定义中已经关闭掉了。然后我们开始自己的共享资源定义,先把[share][home]相关的内容都注释掉吧。我们将要定义两个共享资源,landisk01和landisk02,两个用户user01,user02,以及一个用户组group01。他们对于资源访问的权限如下。
------ landisk01 landisk02
user01 读写 只读
user02 只读 读写
group01 只读 只读
下面是对于landisk01资源的设定
[landisk01]
comment = LanDisk 01, movies, musics and other.
path = /hd1/landisk01
browseable = yes
writable = yes
create mask = 0766
force create mode = 0766
directory mask = 0777
force directory mode = 0777
directory security mask = 0777
force directory security mode = 0777
guest ok = no
# Users and Groups with access:
valid users = user01 user02 @group01
# Users and Groups with write access:
write list = user01
# Users and groups with read-only access:
read list = user02 @group01
下面是对于landisk02的设置
[landisk02]
comment = LanDisk 02
path = /hd1/landisk02
browseable = yes
writable = yes
create mask = 0766
force create mode = 0766
directory mask = 0777
force directory mode = 0777
directory security mask = 0777
force directory security mode = 0777
guest ok = no
# Users and Groups with access:
valid users = user01 user02 @group01
# Users and Groups with write access:
write list = user02
# Users and groups with read-only access:
read list = user01 @group01
如果你要对某个资源中,使用垃圾箱机制(删除文件时,不是完全删除,而是放入你指定的文件夹),你可以在某个资源中添加如下设置。
# and recycle function
# enable recycle
vfs objects = recycle
recycle:repository = .recycle
# do not to keep the directory tree when move to recycle
recycle:keeptree = no
# change the name when file have same name
recycle:versions = yes
# do not to update the timestamp when move to recycle
recycle:touch = no
recycle:maxsize = 0
recycle:exclude = *.tmp ~$*
会把你删除的文件,都放如到.recycle目录中,这个在客户机上看不到,你可以登陆到服务器看到.recycle中的内容。另外,这些仅仅对于你在客户端删除文件时起作用,你在服务器上使用rm操作,是不会起作用的。好了,到这里为止,你的设置应该ok了,我们可以使用以下命令来check一下你的配置。
$testparm /etc/samba/smb.conf
6,重新启动一下你的samba服务器吧。
$ sudo service smbd restart关于服务的名字是否一定叫smbd,我不敢肯定,我遇到过叫smb,也遇到过叫samba的,不知道为何。你可以使用tab来让系统给你提示吧。:)
7,添加相应用户
samba的用户,必须要基于一个linux用户,此linux用户是否可以实际登陆shell等,不受限制,通常我都是让samba的用户不具有登陆shell的权限。首先,添加user01,user02,的Linux用户
$ sudo useradd -s /usr/sbin/nologin user01
$ sudo useradd -s /usr/sbin/nologin user02
然后使用pdbedit来追加相应的samba用户
$ sudo pdbedit -a -u user01
$ sudo pdbedit -a -u user02
要修改samba用户的用户密码,使用如下命令(实际Linux的密码并不会改变)
$ sudo smbpasswd user01
$ sudo smbpasswd user02
要删除一个samba用户(实际的linux用户并不会删除)
$ sudo pdbedit -x 用户名
OK,到此,你可以在远程用刚刚追加的用户尝试看看把。
END
... Read more!
Written on 2010/04/29 by Big Br0ther
偏门解决aMule下载文件名乱码问题+一次性添加多任务问题。
Labels:
aMule,
Linux
0 Comments
利用服务器空闲时间,慢慢的,勤勤恳恳的帮你下载东西,会是一种享受。:)
一直使用aMule,利用amule-daemon在后台下载,使用aMule-Web通过浏览器添加任务。本来是一件比较美好的事情,不过,由于某方面的原因,aMule-Web存在下面两点问题。
1,比较的不稳定,当你频繁的访问web页面的时候,可能动不动就会当掉。
2,虽然在web界面上那个添加连接上面加了Link(s),貌似可以一次性添加多连接,实际上只对第一条链接有效,我想这个应该算一个bug吧。
web页面的不稳定,尚可以忍受,若要添加20个链接,那么一条一条的添加,实在是麻烦。google了一下,有网友提供下面一个解决方法,在你aMule的HOME下面的.aMule里面,amule-daemon会自动侦测ED2KLinks文件,如果存在此文件,那么就处理里面的内容,然后删除。也就是说,我们可以一次性将多条连接放入此文件中,一个链接一行,然后后台会自动去下载他们。确实非常方便。当我尝试了一下,发现一个问题,下载出来的文件名如果含有非ASCII的话,那么全部变成乱码。这个令人非常头痛,看了一下ed2k的链接组成,查看了相关资料,找到了原因,这个是因为,从网站上拷贝ed2k链接的时候,非ASCII字符,都是被转换为了,基本上类似于被URIEndcode了,所以,你的到的这些乱码文件名用iconv,或者convmv都无法正确的转换出来。找到原因,那么就可以对症下药了,既然被URIEndcode了,那么我decode一下,不就的了,然后再加入到ED2KLinks文件中去。使用到了PHP-CLI,直接提供了decode命令。下面是详细的脚本。
#!/bin/bash
ED2K_FILE=/home/aMule/.aMule/ED2KLinks
TMP=/tmp/$$.tmp
TMP2=/tmp/$$.tmp2
if [ "${EDITOR}" = "" ]; then
EDITOR=/usr/bin/vim
fi
# accept input data from editor
${EDITOR} "$TMP"
while read line
do
php -r "echo urldecode('${line}'.\"\n\");" >> "${TMP2}"
# echo ${line}
done < "${TMP}"
cat ${TMP2} >> ${ED2K_FILE}
# remove temp file
rm -rf ${TMP} rm -rf ${TMP2}
END... Read more!
Written on 2010/03/20 by Big Br0ther
10 个最酷的 Linux 单行命令
Labels:
Linux
0 Comments
下面是来自 Commandlinefu 网站由用户投票决出的 10 个最酷的 Linux 单行命令,希望对你有用。
sudo !!以 root 帐户执行上一条命令。
python -m SimpleHTTPServer利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。
:w !sudo tee %在 Vim 中无需权限保存编辑的文件。
cd -更改到上一次访问的目录。
^foo^bar将上一条命令中的 foo 替换为 bar,并执行。
cp filename{,.bak}快速备份或复制文件。
mtr google.comtraceroute + ping。
!whatever:p搜索命令历史,但不执行。
$ssh-copy-id user@host将 ssh keys 复制到 user@host 以启用无密码 SSH 登录。
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg把 Linux 桌面录制为视频。
... Read more!
Written on 2009/12/08 by Big Br0ther
History(历史)命令用法 15 例 (from LinuxToy)
Labels:
Linux
0 Comments
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。
使用 HISTTIMEFORMAT 显示时间戳
当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行:
# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release
注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。[感谢 NightOwl 读者补充]使用 Ctrl+R 搜索历史
Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt]
(reverse-i-search)`red‘: cat /etc/redhat-release
[Note: Press enter when you see your command, which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)
快速重复执行上一条命令有 4 种方法可以重复执行上一条命令:
- 使用上方向键,并回车执行。
- 按 !! 并回车执行。
- 输入 !-1 并回车执行。
- 按 Ctrl+P 并回车执行。
在下面的例子中,如果你想重复执行第 4 条命令,那么可以执行 !4:
# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)
通过指定关键字来执行以前的命令在下面的例子,输入 !ps 并回车,将执行以 ps 打头的命令:
# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
使用 HISTSIZE 控制历史命令记录的总行数将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条:
# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450
使用 HISTFILE 更改历史文件名称默认情况下,命令历史存储在 ~/.bashhistory 文件中。添加下列内容到 .bashprofile 文件并重新登录 bash shell,将使用 .commandline_warrior 来存储命令历史:
# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior
使用 HISTCONTROL 从命令历史中剔除连续重复的条目在下面的例子中,pwd 命令被连续执行了三次。执行 history 后你会看到三条重复的条目。要剔除这些重复的条目,你可以将 HISTCONTROL 设置为 ignoredups:
# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above]
58 history | tail -4
使用 HISTCONTROL 清除整个命令历史中的重复条目上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups:
# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6
使用 HISTCONTROL 强制 history 不记住特定的命令将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:
# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
# service httpd stop [Note that there is a space at the beginning of service, to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3
使用 -c 选项清除所有的命令历史如果你想清除所有的命令历史,可以执行:
# history -c
命令替换在下面的例子里,!!:$ 将为当前的命令获得上一条命令的参数:
# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg
补充:使用 !$ 可以达到同样的效果,而且更简单。[感谢 wanzigunzi 读者补充]下例中,!^ 从上一条命令获得第一项参数:
# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi -5 !^
vi anaconda-ks.cfg
为特定的命令替换指定的参数在下面的例子,!cp:2 从命令历史中搜索以 cp 开头的命令,并获取它的第二项参数:
# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
下例里,!cp:$ 获取 cp 命令的最后一项参数:
# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
使用 HISTSIZE 禁用 history如果你想禁用 history,可以将 HISTSIZE 设置为 0:
# export HISTSIZE=0
# history
# [Note that history did not display anything]
使用 HISTIGNORE 忽略历史中的特定命令下面的例子,将忽略 pwd、ls、ls -ltr 等命令:
# export HISTIGNORE=”pwd:ls:ls -ltr:”
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE=”pwd:ls:ls -ltr:”
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]
... Read more!
Written on 2009/07/10 by MAN2
Shell中,命令行参数的遍历
Labels:
Linux,
Shell
0 Comments
一直以来对命令行输入的参数遍历处理的时候,我都是采用下面的代码。
for p in $#
do
echo "$p"
done
但是最近写了一个工具,用来批量处理视频文件,由于文件名中含有一些空格,中括号之类的特殊字符,使用上面的代码处理就经常会取不出来一个完整的文件名。google了一下,可以使用shift命令,如下面的代码。
while [ $# -gt 0 ]
do
echo "$1"
shift
done
参考44.17 Handling Arguments with while and shift
--END--
END
... Read more!
Written on 2009/07/08 by MAN2
linux下的下载工具axel
Labels:
Linux
0 Comments
linux下最常用的下载工具应该算wget了,但是不满足于wget的下载速度。axel是一个linux下的下载加速工具,它支持多线程下载,而且如果你愿意的话,它还可以到filesearching.com搜索镜像文件下载。
常用的参数:
-n xx 指定线程数为xx
-Sxx 指定从xx个镜像下载
-a 按不刷屏方式显示
例子:
axel ftp://ftp.{be,nl,uk,de}.kernel.org/pub/linux/kernel/v2.4/linux-2.4.17.tar.bz2
从 Belgian, Dutch, English 和 German 的kernel.org镜像下载linux-2.4.17内核
axel -S4 ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.17.tar.bz2
从filesearching.com搜索4个最快的镜像(如果有的话)下载linux-2.4.17内核
alex -n 10 -o /home/kennycx/ http://xxxx/jre.tar.gz
基本的用法如下: #axel [选项] [下载目录] [下载地址]
-s x Specify maximum speed (bytes per second)
-n x Specify maximum number of connections
-o f Specify local output file
-S [x] Search for mirrors and download from x servers
-N Just don't use any proxy server
-q Leave stdout alone
-v More status information
-a Alternate progress indicator
-h This information
-V Version information
--END--
... Read more!
Written on by MAN2
zsh中使用nohup的问题
Labels:
Linux,
zsh
0 Comments
通常我们要让一个命令在后台运行,都是使用nohup加上&来进行的。但是昨天发现在zsh中,nohup竟然不起反应,随着我logout出shell,此后台任务也中止了。search了一下,可以使用下面的参数
unsetopt hup
来让zsh logout的时候不发送hup信号。
END
... Read more!
Written on 2009/06/14 by Big Br0ther
debian在VMWare下面,网卡的问题。
Labels:
Debian,
Linux,
VMware
0 Comments
懒得重新安装,直接那以前安装过的旧版本的debian的vmware镜像来用了,但是发现启动的时候无法正常启动网卡,使用ifup eth的时候出现下面的错误:
# ifup eth0 SIOCSIFADDR: No such device eth0: ERROR while getting interface flags: No such device SIOCSIFADDR: No such device SIOCSIFADDR: No such device eth0: ERROR while getting interface flags: No such device eth0: ERROR while getting interface flags: No such device通过查找资料发现是迁移虚拟机导致虚拟机配置文件中的mac地址和debian系统的mac地址不一致导致。
解决办法:
在虚拟机目录中用文本编辑器打开*.vmx,找到ethernet0.generatedAddress字段,记下mac地址。(在osx下面,vmx文件被包起来了,用vim打开你就会看到.vmx文件)
启动debian,编辑/etc/udev/rules.d/z25_persistent-net.rules,用新的mac地址替换旧的mac地址,重启debian即可。打开上述文件的时候可能会发现存在一个eth1,它的mac地址就是你刚才看到的vmx中的新的mac的地址,注释掉eth1吧。
~END~
... Read more!
Written on 2009/05/22 by MAN2
让你的manpages拥有丰富的色彩
Labels:
Linux,
Ubuntu
0 Comments
在默认状态下man命令出来的page页都是单纯的黑白的。可以通过定制terminfo信息丰富其色彩。
在你的主目录中,
$ mkdir ~/.terminfo/ && cd ~/.terminfo
$ wget http://nion.modprobe.de/mostlike.txt
$ tic mostlike.txt
修改~/.bashrc,或者你对应的脚本文件,加上这行:alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"
END
... Read more!
Written on 2009/04/08 by MAN2
htop - 一个交互的进程查看器
Labels:
Linux
0 Comments
一直使用top命令查看系统状态,也总是觉得此命令的结果存在很多不足,今天终于挖出了一个top的豪华版。在这里http://linuxtoy.org/archives/htop.html发现了这个东东,看截图。
转一下htop的优点吧
htop——一个可以让用户与之交互的进程查看器。作为文本模式的应用程序,主要用于控制台或 X 终端中。当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性。
与 top 相比,htop 包含的优点有:
1. 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
2. 在启动上,比 top 更快。
3. 杀进程时不需要输入进程号。
4. htop 支持鼠标操作。
5. top 已经很老了。
... Read more!
Written on 2009/04/07 by MAN2
vmstat,top结果详解
Labels:
Linux
0 Comments
1,vmstat介绍
Procs
-r: 运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
-b: 处于不可中断状态的进程数,常见的情况是由I/O引起的。
MEMORY
-swap:切换到交换内存上的内存(默认以KB为单位)
如果SWAP的值不为0,或者还比较大,比如超过100M了,但是SI,SO的值长期为0,这种情况我们可以不用担心,不会影响系统性能。
-free:p空闲的物理内存
- buff:作为buffer cache的内存,对块设备的读写进行缓冲
-cache:作为page cache的内存,文件系统的cache
如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
SWAP
-si:交换内存使用,由磁盘调入内存
-so:交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。
我发现有些朋友看到空闲内存(FREE)很少的或接近于0时,就认为内存不够用了,实际上不能光看这一点,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO
-bi:从块设备读入的数据总量(读磁盘)(KB/S)
-bo:写入到块设备的数据总量(写磁盘)(KB/S)
随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大
SYSTEM
--in:每秒产生的中断次数
--cs:每秒产生的上下文切换次数
上面2个值越大,会看到由内核消耗的CPU时间会越大
CPU
-us:用户进程消耗的CPU时间百分
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速(比如PHP/PERL)
-sy:内核进程消耗的CPU时间百分比(sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因)
-wa:IO等待消耗的CPU时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
-id:CPU处于空闲状态时间百分比
情景分析:
vmstat的输出哪些信息值得关注?
--proc r:运行的进程比较多,系统很繁忙
--IO bo:磁盘写的数据量稍大,如果大文件的写,10以内基本不用担心,如果是小文件2M以前基本正常,
--CPU us:持续大于50,服务高峰期可以接受
--CPU wa:稍微有些同
--CPU id:持续小于50,服务高峰期可以接受
2,TOP命令:
这个命令可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了。它默认显示部分活动的进程,并按照进程使用CPU的多少排序,
top参数:
-D 不可中断休眠,通常是IO操作处的状态
-R 正在执行的或者处在等街待的进程队列中
-S 休眠中
-T 暂停刮起的
-Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被INIT进程接管进行销毁。
-W 没有使用物理内存,所占用的物理内存被切换到交换内存
-N 低优先级
... Read more!
Written on by MAN2
Linux中内存占有率高的问题,以及如何查看当前内存使用情况。
Labels:
Linux
0 Comments
Linux在内存管理上和Windows有很大的不同。在Windows中,通常会通过任务管理器去看当前系统使用了多少内存,以此来判断内存是否充足。但是在Linux中就不一样,如果你用top命令来看当前系统进程情况,你可能会看到例如下面的内存使用结果:
Mem: 1555040k total, 1509124k used, 45916k free, 13280k buffers
used值几乎达到了100%。但是,这个并不是意味着真正的内存使用量。很多人特别是Linux的初级使用者,包括我刚刚接触Linux的时候也提过这样的问题:为何我的内存占有率这么高?
记住内存是拿来用的!不是拿来看的,不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读。这也就是windows为什么常常提示虚拟空间不足的原因。Linux 优先使用物理内存,当物理内存还有空闲时,linux是不会释放内存的。即使占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。
但是,如何才能得知目前的物理内存是够用的呢?我们可以通过vmstat命令来查看当前虚拟内存的使用情况。
比如下面的vmstat的结果
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 23776 50568 13280 948680 0 0 12 28 17 182 1 0 99 0
简单的我们可以看swap的si和so,内存够用的时候,这2个值都是0。如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。空闲内存(FREE)很少或接近于0时,不代表内存不够用了,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
你可以用 free 指令查看一下输出,用 used 减去 buffer 和 cache,才是你运行中的程序所占用的空间。
... Read more!
Written on 2009/03/13 by MAN2
Linux内核全图
Labels:
Linux
0 Comments
类似于一个map一样,你可以只有缩放,点击查看详细信息等等。
http://www.makelinux.net/kernel_map
... Read more!
