Archive

Archive for the ‘Linux’ Category

[linux服务器][进程管理]用fuser杀掉进程

March 19th, 2009 No comments

转的CU上一条大牛的,转载这里备忘(以前是不转过来的,但是最近发现很多文章所在网站都死掉了,因为没保存,很多好文也没有了)原文地址 http://blog.chinaunix.net/u2/82938/showart_1839189.html
用fuser杀掉进程

一,为什么要使用fuser?
先说 fuser的作用,
fuser能识别出正在对某个文件或端口访问的进程
大家想一下,还有哪个命令具备这个功能?
没错,是lsof,
我们前面讲过, lsof能够找出正在对指定文件访问的进程,
那么它们两者之间有何区别?
fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程

二,如何使用fuser?

1,如何用fuser得到正在使用指定文件的进程?
用法: fuser 文件
说明:它会把正在使用当前文件的进程id列出

[root@localhost lhd]# umount /
umount: /: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost lhd]# fuser /
/: 1rc 2rc 3rc 4rc 5rc 6rc 7rc 80rc 82rc 84rc 85rc 153rc 157rc 158rc
160rc 165rc 168rc 203rc 204rc 205rc 253rc 441rc 444rc 516rc 521rc 524rc 582rc 583rc
584rc 633rc 1052rc 1392rc 1394rc 1417rc 1597rc 1609rc 1617rc 1620rc 1683rc 1744rc 1783r 1785rc
1788rc 1806r 1808r 1810rc 1811rc 1812rc 1813rc 1814rc 1815rc 1848rc 1886rc 1899rc 1900rc 2001rc
……太多不一一列出

说明:
这些进程号后面的rc是什么意思?

c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其他可装载对象)使用

2,如何列出进程的详细信息,而不仅仅是进程id?
用 -v参数即可
说明: -v: 含义是:verbose output,详细的输出信息
例子:

[root@dev ~]# fuser /var/log
/var/log: 4196c
[root@dev ~]# fuser -v /var/log

USER PID ACCESS COMMAND
/var/log: root 4196 ..c.. bash

3,如何列出进程所属的用户?
用 -u参数即可
说明: -u: 含义:display user IDs,显示用户id

例子:
[root@dev ~]# fuser -u /var/log
/var/log: 4196c(root)

4,如何杀死所有正在访问指定文件的进程?
用 -k参数即可
说明: -k:含义: kill processes accessing the named file

例子:

[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3185 f…. tail
[root@localhost lhd]# fuser -k /root/install.log
/root/install.log: 3185
[root@localhost lhd]# fuser -v /root/install.log

说明: -k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便
说明之二: fuser如何杀死的进程?
它发送的是这个信号:SIGKILL

三,多学一点知识

1,fuser可以列出它所知的信号:
用 -l参数即可

例子:
[root@dev ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL
例如:只是挂起进程,那么发送HUP信号就可以了

例子:
[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
[root@localhost lhd]# fuser -v /root/install.log

Categories: Linux, Server Tags:

ssh 超时(ssh timeout) 解决办法

February 13th, 2009 No comments

原来的ssh是不会超时的, 但是不知道从什么时候起, 出现了ssh 超时现象:只要putty连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦.

在网上查了很多资料, 发现原因有多种, 环境变量TMOUT引起,ClientAliveCountMax和ClientAliveInterval设置问题或者甚至是防火墙的设置问题. 所以可以这么尝试:

1, echo $TMOUT
如果显示空白,表示没有设置, 等于使用默认值0, 一般情况下应该是不超时. 如果大于0, 可以在如/etc/profile之类文件中设置它为0.
Definition: TMOUT: If set to a value greater than zero, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt. Bash terminates after waiting for that number of seconds if input does not arrive.
2. ClientAliveInterval 60
在/etc/ssh/sshd_config中增加ClientAliveInterval 60, ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.这里比较怪的地方是:不是客户端主动发起保持连接的请求(如FTerm, CTerm等),而是需要服务器先主动.

另外,至于ClientAliveCountMax, 使用默认值3即可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下, 客户端不会不响应.

ClientAliveCountMax
Sets the number of client alive messages (see below) which may be
sent without sshd(8) receiving any messages back from the client.
If this threshold is reached while client alive messages are
being sent, sshd will disconnect the client, terminating the ses-
sion. It is important to note that the use of client alive mes-
sages is very different from TCPKeepAlive (below). The client
alive messages are sent through the encrypted channel and there-
fore will not be spoofable. The TCP keepalive option enabled by
TCPKeepAlive is spoofable. The client alive mechanism is valu-
able when the client or server depend on knowing when a connec-
tion has become inactive.

The default value is 3. If ClientAliveInterval (see below) is
set to 15, and ClientAliveCountMax is left at the default, unre-
sponsive SSH clients will be disconnected after approximately 45
seconds. This option applies to protocol version 2 only.

ClientAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the client, sshd(8) will send a message
through the encrypted channel to request a response from the
client. The default is 0, indicating that these messages will
not be sent to the client. This option applies to protocol ver-
sion 2 only.

3. 启用putty keepalive
putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0, 改为60.

4. 上述3个方法应该能解决大部分问题, 如果不行, 请 man sshd_config, 然后尝试更改其他设置吧.

Categories: Linux, SoftWare Tags:

Linux文件名编码转换

February 13th, 2009 No comments

从Linux往windows 拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为 GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。

在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。

首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv
安装。
下面看一下convmv的具体用法:

convmv -f 源编码 -t 新编码 [选项] 文件名

常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格
比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:

convmv -f UTF-8 -t GBK –notest utf8编码的文件名

这样转换以后”utf8编码的文件名”会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)。

注意:不要在NTFS和FAT文件系统中使用此命令,否则可能产生意外结果,如果要在Linux中正确的显示NTFS和 FAT的中文件名,可以通过mount参数来解决,具体方法查看一下man手册。

Categories: Linux, SoftWare, Windows Tags: ,

linux系统locale的设定

October 15th, 2008 No comments

经常在Linux下会经常遇到locale的问题,我一般是遇到乱码的时候就直接export LANG=zh_CN.UTF8或export LANG=zh_CN.gbk一下。但有时候会希望将locale固定下来,免得每次都设定。下面就是一些查看及设定Locale的方法:

  • 查看Locale
  • 直接在bash中输入: locale
  • 查看zh_CN使用的编码:
    /usr/lib/locale/zh_CN/LC_* 说明了使用何种编码
  • Linux 切换 locale 的五种方法
    1) 从KDE登录屏幕上修改locale
    选择 options -> languages -> choose the new locale
    2) 临时设置locale(shell相关的)
    ksh : LANG=
    sh : LANG=

    export LANG
    csh : setenv LANG

    bash: export LANG=zh_CN.UTF8 #Simon的CentOS就是使用的这个语言设置
    3)编辑 /etc/default/init
    增加
    LANG=

    LC_ALL=

    重启。
    4) .cshrc/.profile/.bashrc: 设置$LANG

    5)Simon使用的方法:
    编辑 ~/.bash_profile 修改成如下样式:
    Read more…

    Categories: Linux Tags:

    Fedora (Redhat, RHEL,CENTOS)中使用sudo

    April 1st, 2008 No comments

    源自:http://hi.baidu.com/yangyingchao … f8108bd43f7cb2.html
    大家都知道,在Derbian和Ububtu中,为了安全起见,以普通用户登录以后在终端中不允许通过su命令来切换为超级用户,想要代替超级用户执行命令必须通过sudo命令来实现,使用sudo命令确实比使用su更加安全。例如,在使用su的时候,由于本身属于超级用户,可以对任何文件进行任何操作,如果因为忘记自己以经成为了超级用户、不小心删除了某些系统所需的重要文件,将会引起及其严重的后果。而如果不使用su,则想执行某个命令,系统会自动检察用户是否拥有这个权限,如果没有,则提醒用户,这个时候再使用sudo命令来暂时替代超级用户来执行,则在这个过程中用户最起码会考虑一下操作是否正确,这样在一定程度上可以防止因粗心而带来的灾难。 Read more…

    Categories: Linux Tags: ,

    Linux 用户(user)和用户组(group)管理概述

    April 1st, 2008 No comments

    作者:北南南北
    来自:LinuxSir.Org
    摘要:本文主要讲述在Linux 系统中用户(user)和用户组(group)管理相应的概念;用户(user)和用户组(group)相关命令的列举;其中也对单用户多任务,多用户多任务也做以解说,本文应该说是比较基础的文档;

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    正文
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    一、理解Linux的单用户多任务,多用户多任务概念;

    Linux 是一个多用户、多任务的操作系统;我们应该了解单用户多任务和多用户多任务的概念;

    Read more…

    Categories: Linux Tags: , , , ,

    VIM技巧集合

    March 31st, 2008 No comments

    ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ;:文档来源: http://www.rayninfo.co.uk/vimtips.html
    ;:翻译参考: 没有记,请原作者见谅
    ;:文档日期: 2006-10-13 11:19:04
    ;:更新记录:
    ;:作  者: li3
    ;:生成工具: 2Html.vim
    ;:blog.asp?name=li3
    ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ;:——————————————————————————–
    ;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
    ;:想这样,请编辑$VIM\mswin.vim
    ;:——————————————————————————–
    Read more…

    Categories: Linux Tags:

    vim 折叠(folding)

    March 31st, 2008 No comments

    建立折叠

    z的意思就是他的形状, 像一个折叠的东西, 折叠相关的命令都是z开头的, 新版本的拼写检查命令也有以z开头的。 f的意思是fold。所以zf就是折叠。 你可以在visual模式下选定, 再按zf, 可以将选定的全部折叠。 也可以zf9j, 这样可以将下面9行的内容折起来。也可以用marker, 还可以用行号:20,50, 就可以把20行到五十行折叠起来 。 总之可以用一般的定位的方法来告诉VIM你要折叠那些地方。

    我觉得比较有用的是匹配括号的折叠, 移动到一个花括号{上, 用zfa}, 就可以将下面的匹配的花括号之间的内容折起来, 这样可以很方便的折起函数。 其他的折叠方法还有zf/string, 可以折叠到下一个匹配的string, 不过好像不太实用。

    使用折叠

    移动的时候在前面加一个z就可以在折叠的地方移动, 比如zj,就会跳到下一个折叠, zk就是上一个。  要打开的话可以zo,o是open的意思, zO打开所有的折叠。 关上用zc, c是close。 在zO之后用zc会关上所有打开的折叠。折叠可以嵌套, zr可以打开第一层的折叠,zR可以打开所有层的折叠, 与之对应的是zm和zM, 是按层关上折叠。 比如说按zm,会从最里层的层叠关起, 连续zm就会一直关到最上层的折叠。

    查找到了折叠里面会将折叠打开, 处理完了之后要自己将折叠关上。

    折叠选项

    可以让VIM根据语法, 缩进,标记自动折叠。 用set foldmethod=foldoption 来设定。 可以查看一下 foldmethod

    保留折叠

    要下一次打开的时候还保留折叠可以在离开的时候:mkview

    ,再进来的时候:loadview就可以了。 当然也可以将这两句加到vimrc里面让其自动完成。

    au BufWinLeave * mkview
    au BufWinEnter * silent loadview

    这样每次就可以看到上次的折叠了。

    Categories: Linux Tags:

    tar排除指定目录

    March 29th, 2008 No comments

    假设 test目录下有 1 2 3 4 5 这5个目录
    现在要将 3 4 5目录tar打包,1和2目录不要
    命令如下

    tar -zcvf test.tar.gz –exclude=1 –exclude=2 test

    tar -zcvf test.tar.gz –exclude=test/1 –exclude=test/2 test

    看man tar帮助,–exclude后面跟的好像是正则

    注意: 要打包的test必须在命令最后,不然没有效果.刚才郁闷了半天

    Categories: Linux Tags:

    用SSH穿透GFW(转载)

    March 29th, 2008 No comments

    主要是为了防止vblogspot不能访问的时候,自己能够容易找到,作者 Wisi

    SSH Tunnel之fuck GFW整体解决方案

    在不能使用代理服务器或者 tor绕开 防火长城的场合(比如单位里面不可以使用非企业代理,比如日后tor被 土共封锁),如果ssh 22端口没有被封锁,那就可以利用 OpenSSH强大的tunnel功能来
    实现高速安全的访问Internet任意开放网站的任意开放端口 。在这里简称挖地道

    1准备条件:
    1.1 某国外主机shell,这个需要你自己去找,买一个或找找一个免费的,需要上面的开启sshd
    1.2 Firefox浏览器配合 foxyproxy扩展,虽然用IE也方便,但是当大多数网站不需要挖地道访问只有个别网站需要挖地道访问自己又是懒人懒得每次访问blocked网站去切换浏览器的代理设置的情况下,用foxyproxy这个基于模版自动匹配代理的扩展还是很方便的。
    1.3 国外代理服务器,任意一个高速匿名免费代理服务器

    2原理:
    2.1首先man ssh,注意ssh的manpage里面这也一个选项:

    -L port:host:hostport
    Specifies that the given port on the local (client) host is to be
    forwarded to the given host and port on the remote side. This
    works by allocating a socket to listen to port on the local side,
    and whenever a connection is made to this port, the connection is
    forwarded over the secure channel, and a connection is made to
    host port hostport from the remote machine. Port forwardings can
    also be specified in the configuration file. Only root can for-
    ward privileged ports. IPv6 addresses can be specified with an
    alternative syntax: port/host/hostport

    2.2基本格式

    ssh -l USER -L local_port:any_host_blocked_by_gfw:the_blocked_hosts_port ssh host_which_out_of_gfw

    这样任何被屏蔽的主机(any_host_blocked_by_gfw)的任何端口(the_blocked_hosts_port),就可以在本机127.0.0.1的localport访问了

    2.3解释,这里有好几个host不要搞错。
    ssh -l USER是你用来登录目标ssh主机的用户名,ssh就加上一个-l选项
    local_port:本机的某端口,最好大一些,保证没有被其他程序占用的,以后被屏蔽主机的某端口就被映射在本机的此端口
    any_host_blocked_by_gfw:任何一个被gfw干了的主机,比如zh.wikipedia.org
    the_blocked_hosts_port:前面提到的被干了的这个主机的某个端口,比如25 23 80
    host_which_out_of_gfw:任何一台不在土共的GFW范围内的一台ssh host

    2.4例子:
    ssh -l fuckGFW 8088:zh.wikipedia.org:80 fuckgfw.free.com

    我用fuckGFW帐号登录fuckgfw.free.com主机,并且把维基百科中文的80端口映射到本机的8088端口,这样下次用http://localhost:8088来访问维基百科

    3应用:
    每 次去挖这样一个坑麻烦了点,这时候就要动动脑筋想想别的办法了。普通的代理服务访问国外主机虽然会被土共的gfw盾,但是,如果把普通国外代理服务器加上 一个ssh的套套,那土共的GFW就煞笔了,而且即使土共把这个代理服务器本身干了也没用,因为我们的国外ssh host和国外的代理服务器都是在GFW之外的,那就是终极解决方案:
    用ssh tunnel给国外代理服务器加套
    例子:
    ssh -l fuckGFW 3128:proxy.anywhere.com:8080 fuckgfw.free.com
    这样就给国外的代理服务器proxy.anywhere.com加了套,然后在本地的浏览器设置代理为localhost:3128,那么只要你到fuckgfw.free.com的连接是22端口的ssh加密连接,土共就对你的内容无可奈何。
    至于fuckgfw.free.com和proxy.anywhere.com之间是不是加密的会不会监听,目前看来似乎是不加密的(否则我在防火墙内我的本机开一个ssh再加上一个 squid就可以访问任意国外主机了),所有这样做还是有风 险,千万不要用这样的方案访问你的paypal帐号gmail等等。但是用来绕开防火墙,正常使用google是足够了,访问blogspot wikipedia等等也没有问题。

    4.To Do
    通 常网上容易找到的代理服务器都是只支持http的,支持https的还没有找到,所以访问https的内容比如gmail还是没有好的解决方法,目前只能 设置一下foxyproxy直接访问https的内容(或者用tor),还有一个办法就是再挖一个通道,把gmail的pop服务器的端口和smtp直接 映射在本地的某端口,宁可暂时放弃一下gmail web的丰富feature,也要不受限制的访问google的服务。注意,在ssh到一台主机的时候,可以同时挖n条隧道的,也就是可以在ssh命令后 面加上n个-L 参数

    5.补充
    使用windows操作系统的也可以用此方法,putty对ssh的tunnel有完美的支持。

    Categories: Linux Tags: