linux
umount如果提示设备忙,可以用 umount -l
会立刻卸载了,但是只是df上看不到,设备还是在占用,但此时你可以挂载新设备上来了
新文件读写应该都可以在新设备,要使用旧设备,可以用fuser找到占用的进程,kill掉就可以了
参考阅读
1 强制Umount NFS终极手法 http://tonnyxs.blog.163.com/blog/static/27937985201102202028695/
2 linux 下强制umount+Fuser命令详解 http://yangzhongfei.blog.163.com/blog/static/4610987520102311081367/
会立刻卸载了,但是只是df上看不到,设备还是在占用,但此时你可以挂载新设备上来了
新文件读写应该都可以在新设备,要使用旧设备,可以用fuser找到占用的进程,kill掉就可以了
引用
当Umount一个目录时,提示device is busy,umount加参数f,是强制执行umount,但是许多时候均不会成功。
原理上要想umount,首先要kill正在使用这个目录的进程。*假设无法卸载的设备为/dev/sdb1
1)运行下面命令看一下哪个用户哪个进程占用着此设备
fuser -m -v /dev/sdb1
2)运行下面命令杀掉占用此设备的进程
fuser -m -v -k /dev/sdb1
或者fuser -m -v -k -i /dev/sdb1(每杀掉一下进程会让你确认)
3)再umount
*杀掉所有以任何形式访问文件系统 /dev/sdb1的进程:
$fuser -km /dev/sdb1
这个办法是一个比较粗鲁的办法,通常适用于在测试等非正式环境。比较正规的要配合ps等命令,查出使用的用户、进程、命令等,然后做出综合判断,必要时先通知(signal或口头等)用户,确认安全时才可以强制kill此进程。
但有时fuser执行时,仍然会有报错,其实umount强制退出,可以考虑用参数l(Lazy),这个参数是比f(Force)更强大的终极命令。
Man Umount 查看f和l的参数说明如下:
-f Force unmount. This allows an NFS-mounted filesystem to be unmounted if the NFS server is unreachable. Note: when using umount -f on an NFS filesystem, the
filesystem must be mounted using either the soft, or intr options (see nfs(5). This option will not force unmount abusy filesystem (use -l
instead).
(Requires kernel 2.1.116 or later.)
-l Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy anymore. This option
allows abusy filesystem to be unmounted. (Requires kernel 2.4.11 or later.)
本次操作过程如下:
[root@FUHOST /]# umount /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
[root@FJ-WEB-02 sbin]# umount -f /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
umount2: 设备或资源忙
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
umount2: 设备或资源忙
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
[root@FJ-WEB-02 sbin]# fuser -km /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
/home/swebapp/apache-tomcat-5.5.17/webapps/upload/: 输入/输出错误
[root@FJ-WEB-02 sbin]# fuser -um /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
/home/swebapp/apache-tomcat-5.5.17/webapps/upload/: 输入/输出错误
[root@FJ-WEB-02 upload]# umount -l /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
原理上要想umount,首先要kill正在使用这个目录的进程。*假设无法卸载的设备为/dev/sdb1
1)运行下面命令看一下哪个用户哪个进程占用着此设备
fuser -m -v /dev/sdb1
2)运行下面命令杀掉占用此设备的进程
fuser -m -v -k /dev/sdb1
或者fuser -m -v -k -i /dev/sdb1(每杀掉一下进程会让你确认)
3)再umount
*杀掉所有以任何形式访问文件系统 /dev/sdb1的进程:
$fuser -km /dev/sdb1
这个办法是一个比较粗鲁的办法,通常适用于在测试等非正式环境。比较正规的要配合ps等命令,查出使用的用户、进程、命令等,然后做出综合判断,必要时先通知(signal或口头等)用户,确认安全时才可以强制kill此进程。
但有时fuser执行时,仍然会有报错,其实umount强制退出,可以考虑用参数l(Lazy),这个参数是比f(Force)更强大的终极命令。
Man Umount 查看f和l的参数说明如下:
-f Force unmount. This allows an NFS-mounted filesystem to be unmounted if the NFS server is unreachable. Note: when using umount -f on an NFS filesystem, the
filesystem must be mounted using either the soft, or intr options (see nfs(5). This option will not force unmount a
instead).
(Requires kernel 2.1.116 or later.)
-l Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy anymore. This option
allows a
本次操作过程如下:
[root@FUHOST /]# umount /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
[root@FJ-WEB-02 sbin]# umount -f /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
umount2: 设备或资源忙
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
umount2: 设备或资源忙
umount: /home/swebapp/apache-tomcat-5.5.17/webapps/upload: device is busy
[root@FJ-WEB-02 sbin]# fuser -km /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
/home/swebapp/apache-tomcat-5.5.17/webapps/upload/: 输入/输出错误
[root@FJ-WEB-02 sbin]# fuser -um /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
/home/swebapp/apache-tomcat-5.5.17/webapps/upload/: 输入/输出错误
[root@FJ-WEB-02 upload]# umount -l /home/swebapp/apache-tomcat-5.5.17/webapps/upload/
参考阅读
1 强制Umount NFS终极手法 http://tonnyxs.blog.163.com/blog/static/27937985201102202028695/
2 linux 下强制umount+Fuser命令详解 http://yangzhongfei.blog.163.com/blog/static/4610987520102311081367/
[转] 事情是这个样儿的,折腾了好几天就是搞不明白为啥设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。捞干的,说怎么解决吧,注意权限,.ssh权限700,authorized_keys权限600,就OK啦!~~~~
---------------------
一直很困惑要求输入密码,原来是不知道哪个操蛋的把root文件夹改777
drwxrwxrwx 11 root root 4096 Nov 10 22:52 root
另外一个机器被改归属人,操蛋的
drwx------ 7 mysql mysql 36864 10-26 15:03 root
参考:http://my.oschina.net/shootercn/blog/15418
chmod 700 ~/.ssh/
chmod 700 ~
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~
chmod 600 ~/.ssh/authorized_keys
---------------------
一直很困惑要求输入密码,原来是不知道哪个操蛋的把root文件夹改777
drwxrwxrwx 11 root root 4096 Nov 10 22:52 root
另外一个机器被改归属人,操蛋的
drwx------ 7 mysql mysql 36864 10-26 15:03 root
参考:http://my.oschina.net/shootercn/blog/15418
SAS硬盘可以热插拔,插入硬盘后,磁盘会立刻显示在fdisk -l 的列表里,可以立刻开始使用。
SCSI硬盘还没这么便捷,但也是可以做到不重启就加入使用的。
这里关系最大的是 /proc/scsi/scsi 文件
在linux系统里, /proc 的内容是系统运行状态等信息
修改它会导致立刻生效,比如支持包转发
目前服务器在用的硬盘有两个,分别插在0和1的插槽
加入的四个硬盘分别插到3-5的插槽
IBM的机器硬盘盒的螺丝凸起的,安装到DELL的硬盘盒里,有点凸起
插入机器里会有点紧,但可以正常使用
我们先看看 /proc/scsi/scsi的文件
操作方法:
比较一下上面的内容和scsi文件的内容,我们可以知道,添加第三个插槽的硬盘是这么操作的:
ifdisk -l 也可以看到此硬盘了,说明已经可以使用了
把 0 0 2 0换成0 0 3 0可以如此类似的增加余下的scsi硬盘,操作完毕!
SCSI硬盘还没这么便捷,但也是可以做到不重启就加入使用的。
这里关系最大的是 /proc/scsi/scsi 文件
在linux系统里, /proc 的内容是系统运行状态等信息
修改它会导致立刻生效,比如支持包转发
目前服务器在用的硬盘有两个,分别插在0和1的插槽
加入的四个硬盘分别插到3-5的插槽
IBM的机器硬盘盒的螺丝凸起的,安装到DELL的硬盘盒里,有点凸起
插入机器里会有点紧,但可以正常使用
我们先看看 /proc/scsi/scsi的文件
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
操作方法:
引用
我们以root权限执行 echo "scsi add-single-device 0 0 1 0" > /proc/scsi/scsi 添加scsi设备
解释一下 scsi add-single-device a b c d 这个指令中的参数:
# 相反 scsi remove-single-device a b c d 是用来移除设备的
a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0
b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0
c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,
d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,
总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。
解释一下 scsi add-single-device a b c d 这个指令中的参数:
# 相反 scsi remove-single-device a b c d 是用来移除设备的
a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0
b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0
c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,
d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,
总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。
比较一下上面的内容和scsi文件的内容,我们可以知道,添加第三个插槽的硬盘是这么操作的:
[root@aslibra.com ~]# echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 02 Lun: 00
Vendor: IBM-ESXS Model: MAP3147NC FN Rev: C101
Type: Direct-Access ANSI SCSI revision: 03
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 02 Lun: 00
Vendor: IBM-ESXS Model: MAP3147NC FN Rev: C101
Type: Direct-Access ANSI SCSI revision: 03
ifdisk -l 也可以看到此硬盘了,说明已经可以使用了
把 0 0 2 0换成0 0 3 0可以如此类似的增加余下的scsi硬盘,操作完毕!
先温习一下替换文件里的字符的功课:
上面代码在linux下正常,可在mac下不正常了:
sed方式有点不一样,需要用 sed -iE ,当然,我们可以找到别的方式,比如perl(搜得):
perl -pi -e 's/9999/+++++/g'
下面我们看看怎么修改svn库的地址~
svn的组织方式是在目录下有.svn的目录,里面有一个entries文件,记录了svn的地址
windows下的乌龟提供了relocation功能,mac下的svn工具暂时没有发现
不过没关系,这个事情很简单
比如你的svn服务器调整了,从192.168.1.1更换为 svn.aslibra.com 里
我们先确认一下是否存在
我们运行如下命令修改:
OK~
[root@aslibra ~]# ll *.html
-rw-r--r-- 1 root root 22 Aug 21 00:50 a.html
-rw-r--r-- 1 root root 32 Aug 21 00:51 index.html
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/192/9999/'
[root@aslibra ~]# cat *.html
sdfjsldjf
9999
sdfdfdf
sldkjflsdjf
ksdjfsjd 9999
sdfsdf
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/9999/+++++/'
[root@aslibra ~]# cat *.html
sdfjsldjf
+++++
sdfdfdf
sldkjflsdjf
ksdjfsjd +++++
sdfsdf
-rw-r--r-- 1 root root 22 Aug 21 00:50 a.html
-rw-r--r-- 1 root root 32 Aug 21 00:51 index.html
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/192/9999/'
[root@aslibra ~]# cat *.html
sdfjsldjf
9999
sdfdfdf
sldkjflsdjf
ksdjfsjd 9999
sdfsdf
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/9999/+++++/'
[root@aslibra ~]# cat *.html
sdfjsldjf
+++++
sdfdfdf
sldkjflsdjf
ksdjfsjd +++++
sdfsdf
上面代码在linux下正常,可在mac下不正常了:
localhost:tmp hqlulu$ find . -name "*.html" | xargs sed -i 's/9999/+++++/'
sed: 1: "./a.html": invalid command code .
sed: 1: "./a.html": invalid command code .
sed方式有点不一样,需要用 sed -iE ,当然,我们可以找到别的方式,比如perl(搜得):
perl -pi -e 's/9999/+++++/g'
下面我们看看怎么修改svn库的地址~
svn的组织方式是在目录下有.svn的目录,里面有一个entries文件,记录了svn的地址
windows下的乌龟提供了relocation功能,mac下的svn工具暂时没有发现
不过没关系,这个事情很简单
比如你的svn服务器调整了,从192.168.1.1更换为 svn.aslibra.com 里
我们先确认一下是否存在
find . -name entries | xargs grep 192.168.1.1
#你会得到类似内容:
./.svn/entries:svn://lhq@192.168.1.1/server
#你会得到类似内容:
./.svn/entries:svn://lhq@192.168.1.1/server
我们运行如下命令修改:
find . -name entries | xargs perl -pi -e 's/192.168.1.1/svn.aslibra.com/g'
OK~
一些文件操作如果需要和web服务器通信,是可以考虑用curl的。
正常的POST表单:
上传文件:
简单的php处理代码:
正常的POST表单:
curl -d "user=nickwolfe&password=test" http://www.aslibra.com/?test.php
上传文件:
localhost:aslibra$ curl -F upload=@/Media/test.txt http://www.aslibra.com/?test/upload
Array
(
[upload] => Array
(
[name] => test.txt
[type] => text/plain
[tmp_name] => /tmp/phpKDS0MR
[error] => 0
[size] => 335
)
)
Array
(
[upload] => Array
(
[name] => test.txt
[type] => text/plain
[tmp_name] => /tmp/phpKDS0MR
[error] => 0
[size] => 335
)
)
简单的php处理代码:
print_r($_FILES);
if(isset($_FILES['upload'])){
@copy( $_FILES['upload']['tmp_name'], '/tmp/upload_'.$_FILES['upload']['name'] );
@unlink( $_FILES['upload']['tmp_name'] );
}
if(isset($_FILES['upload'])){
@copy( $_FILES['upload']['tmp_name'], '/tmp/upload_'.$_FILES['upload']['name'] );
@unlink( $_FILES['upload']['tmp_name'] );
}
假设我们在client.aslibra.com的机器要实现免输入密码登录到server.aslibra.com
那要做什么事情呢?
1 client生成密钥
2 client把公钥上传到server
3 server把公钥加入到自己的authorized_keys文件即可
修改@0508:
谢谢profans的提示,2和3一步就可以完成啦!实验过,正常。
MAC: ssh-copy-id in Mac OS X
For some reason Macs don’t have this useful script so this will add it.
那要做什么事情呢?
1 client生成密钥
2 client把公钥上传到server
3 server把公钥加入到自己的authorized_keys文件即可
修改@0508:
谢谢profans的提示,2和3一步就可以完成啦!实验过,正常。
#生成密钥后
ssh-copy-id -i .ssh/id_rsa.pub server.aslibra.com
ssh-copy-id -i .ssh/id_rsa.pub server.aslibra.com
MAC: ssh-copy-id in Mac OS X
For some reason Macs don’t have this useful script so this will add it.
sudo curl "http://phildawson.co.uk/ssh-copy-id" -o /usr/bin/ssh-copy-id
sudo chmod +x /usr/bin/ssh-copy-id
sudo chmod +x /usr/bin/ssh-copy-id
ssh账号代理上网是很常见的,尤其是翻越障碍物的时候很实用。
ssh账号是可以登录linux系统的,如果只是上网用,那就需要最小化权限,有两个方式:
1 /bin/false
2 自定义脚本
输入字符后会退出,不会产生系统操作
ssh账号是可以登录linux系统的,如果只是上网用,那就需要最小化权限,有两个方式:
1 /bin/false
useradd -s /bin/false yourUser
#登录时使用这样的:
ssh -D 7070 -N yourUser@hostname
#登录时使用这样的:
ssh -D 7070 -N yourUser@hostname
2 自定义脚本
cat /bin/tunnel.sh
#!/bin/sh
echo "##########"
echo " welcome !"
echo "##########"
read x
exit
useradd -s /bin/tunnel.sh yourUser
ssh -D 7070 yourUser@hostname
#!/bin/sh
echo "##########"
echo " welcome !"
echo "##########"
read x
exit
useradd -s /bin/tunnel.sh yourUser
ssh -D 7070 yourUser@hostname
输入字符后会退出,不会产生系统操作





