在 Windows 下使用 SSHFS

在 Windows 下要与 Unix-like 的系统文件共享,目前也就有以下几种方法:Samba、FTP、NFS、WinSCP、SSHFS。
Samba 很不错,很多书籍/教程都会介绍这个,但他只能在同个网段使用;
FTP 文件传输协议,很方便,但设计上是文件传输,而不是文件共享;
NFS 在 Unix-like 的系统上用的很多,但在 Windows 下比较好的免费程序几乎没有;
WinScp 其实就是 sftp,类似于 FTP;
SSHFS 通过 SSH 将远程主机的目录挂载到本地,很是方便,之前也有 介绍 过SSHFS。
所以我还是比较喜欢 SSHFS,恰好也在网上找到了在 Windows 下使用的 SSHFS:
下载地址:http://dokan-dev.net/en/download/,目前最新版本为 dokan-sshfs-0.6.0。

安装过程

1、下载并安装Dokan库文件:http://dokan-dev.net/wp-content/uploads/DokanInstall_0.6.0.exe
2、下载并解压DokanSSHFS:http://dokan-dev.net/wp-content/uploads/dokan-sshfs-0.6.0.zip
继续阅读在 Windows 下使用 SSHFS

Shell 快捷键(二)

Shell 快捷键 中,对 Linux Shell 下 Emacs 分割的快捷键组合进行
了整理和总结,为了方便对比记忆,这里重新根据功能进行归类。

光标移动

命令 说明
Alt + b 后移一个单词
Alt + f 前移一个单词
Ctrl + b 后移一个字符
Ctrl + f 前移一个字符
Ctrl + a 把光标移到行首
Ctrl + e 把光标移到行尾
ctrl + ← 光标移动到前一个单词开头
ctrl + → 光标移动到后一个单词结尾
Ctrl + x Ctrl + x 在 EOL 和当前位置移动光标

输入编辑

命令 说明
Ctrl + h 删除前一字符
Ctrl + d 删除当前字符
Ctrl + k 删除当前字符到行末
Ctrl + u 删除行首到当前字符
Ctrl + w 删除单词到当前字符
Alt + d 从当前位置向后删除单词
Alt + ← 从当前位置向前删除单词
—————- —————————————————————
Esc + t 互换相邻两个单词
Alt + t 互换相邻两个单词
Ctrl + t 互换相邻两个字符
—————- —————————————————————
ctrl + ? 撤消前一次输入
Alt + r 撤消前一次动作
—————- —————————————————————
Alt + l 小写当前单词
Alt + u 大写当前单词
Alt + c 首字母大写当前单词
—————- —————————————————————
^oldstr^newstr 替换前一次命令中字符串

终端管理

命令 说明
Ctrl + s 锁住终端
Ctrl + q 解锁终端
Ctrl + l 清除终端
Ctrl + d 退出终端
————– —————————————————————–
Ctrl + c 中止命令
Ctrl + z 挂起命令
ctrl + o 重复执行命令

命令历史

命令 说明
Ctrl + r 向后查询历史,增量地
Ctrl + s 向前查询历史,增量地
Alt + p 向后查询历史,非增量地
Alt + n 向前查询历史,非增量地
————— —————————————————————-
Ctrl + p / ↑ 显示上一条命令
Ctrl + n / ↓ 显示下一条命令
Alt + < 移动到历史的首行
Alt + > 移动到历史的末行
————— —————————————————————-
Alt + . 插入最后一个参数
Alt + _ 插入最后一个参数
Esc + . 插入最后一个参数
Esc + _ 插入最后一个参数
————— —————————————————————-
Ctrl + y 粘贴刚才所删除的字符
Ctrl + Alt + y 插入上条命令的第一个参数

自动完成

命令 说明
Alt + / 尝试自动完成文件名
Alt + ? 显示当前自动完成列表
Alt + * 插入所有可能自动完成

其他

命令 说明
Ctrl + i 同 Tab
Ctrl + j 同 Enter
Ctrl + v CHAR 输入特殊字符
Ctrl + x @ 显示所有的可用的主机名自动完成
Ctrl + x Ctrl + e 使用 vim 写入 script 一次执行
2T 命令行补全
(string)2T 命令行补全
$2T 列出系统变量
=2T 列出当前目录
/2T 显示整个目录结构,包括隐藏文件
./2T 只显示子目录,包括隐藏目录
*2T 只显示子目录,不包括隐藏目录
@2T “/etc/hosts” 文件的条目
~2T “/etc/passwd” 文件中系统所有的当前用户

Shell 快捷键

在使用 Shell 进行 Linux 操作时,经常需要编辑大段的代码,如果仅仅使用键盘的
Delete 和 Backspace 键,那是一件非常折磨人的事情。我们以 Linux 默认的 Bash
Shell 为例,他可以设定为多种 Mode,使其操作习惯类似于一些熟悉的编辑器,比如
emacs 或 vi。

  • 列出所有 Mode

    set -o

  • 使用 vi 操作习惯來操作 Bash Shell

    set -o vi

  • 使用 emacs 的操作习惯来操作 Bash Shell,默认即为此 Mode

    set -o emacs

下面总结以下 Bash Shell 采用默认 emacs Mode 时可用的一些快捷键,能够极大提高
Shell 的操作效率。

继续阅读Shell 快捷键

让Gnome 3.2上的dock扩展工作

前几天把ArchLinux的Gnome升级到了3.2版本。
升完后,’gnome-shell-extension-dock’就无法工作了,用得顺顺得dock一下不见了很不习惯。前几天网上找也无果。

然后,终于在今天找到了方法:

# cd /usr/share/gnome-shell/extensions/dock@gnome-shell-extensions.gnome.org/
# vim extension.js

找到”this.actor.lower_bottom();”这一行,把它注释掉。保存后,在gnome-tweak-tool中把dock-extensions重新启用。Enjoy!
发现3.2的dock可以自动隐藏了,这个很是喜欢呐。

sshfs的配置

上个月新买了一个本本电脑,所以女人的旧电脑就算淘汰下来了。但我还得用我那07年的老爷机,在做开发上还是有些吃力,因此决定把原来共存于同一个系统的桌面环境和服务器环境分开,将服务器环境转移到淘汰下来的老爷机上,所以在上面装了个FreeBSD,以方便维护。但也因此出现一个问题,服务器的数据应该放在哪里,桌面机上还是服务器机器上。由于淘汰下来的机器可能会被我用来折腾,如挨个装发得版,或测试其它东西,所以我想把数据还是放在桌面机上;问题又来了,服务器如何能快速有效地访问这些数据,而不影响服务器的正常运作呢。

首先,想到的是用netbeans的远程站点功能。随后,又想到了利用 ssh 挂载远程文件系统的功能,把 Desktop 上的文件系统通过 sshfs 挂载到 Server 上。由于第一种方案需要依赖netbeans,所以我打算用第二种方案。

一、安装配置 SSHFS

安装 sshfs ,这个在 Arch 下用 pacman 安装即可,其它发行版应该都有相应的包管理器可以解决。在安装好 sshfs 之后,可以使用 # sshfs [USER]@[HOST]:[DIR] [MOUNTPOINT] [OPTIONS] 挂载远程的文件系统,使用 # fusermount -u [MOUNTPOINT] 进行卸载。当然,前提是远程系统上有 ssh daemon 运行。另外一个比较有用的参数是 -o allow_other,否则挂载的文件系统只有当前用户可用,其他用户无法访问。这样,就可以像操作本地文件一样来操作远程文件了。

继续阅读sshfs的配置

如何在Linux下挂载带分区的镜像文件

之前一直有折腾ChromeOS,一位叫hexxeh的朋友一直有提供nightly build的镜像,所以免去了自己编译的烦恼。下载下来后,我打算修改一些东西后,再写入到U盘上,因为ChromeOS的映像文件是带有GPT分区的镜像,所以不能直接mount,需要在mount的时候的提供offset参数,即提供需要挂载的这个分区是从哪里开始的。像这样:

# sudo mount -o offset=xxx xxx.img /MOUNT/TO/DIR/

那么,如何得到这个offset的参数呢?我们可以用fdisk等工具来列出相关信息得到。不过,还有一个更NB的工具叫parted,一般可以在源里面找到。
继续阅读如何在Linux下挂载带分区的镜像文件

Debian VPS 在更新内核报错的问题

今天在Debian VPS上更新内核时碰到了问题,报错为

Setting up linux-image-2.6.32-5-686-bigmem (2.6.32-31) ...
Running depmod.
Running update-initramfs.
update-initramfs: Generating /boot/initrd.img-2.6.32-5-686-bigmem
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.32-5-686-bigmem /boot/vmlinuz-2.6.32-5-686-bigmem
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 2.6.32-5-686-bigmem /boot/vmlinuz-2.6.32-5-686-bigmem
Searching for GRUB installation directory ... found: /boot/grub
warning: grub-probe can't find drive for /dev/xvda1.
grub-probe: error: cannot find a GRUB drive for /dev/xvda1. Check your device.map.
run-parts: /etc/kernel/postinst.d/zz-update-grub exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-2.6.32-5-686-bigmem.postinst line 799,  line 2.
dpkg: error processing linux-image-2.6.32-5-686-bigmem (--configure):
subprocess installed post-installation script returned error exit status 2

之前在给公司的VPS作配置的时候也遇到了一样的问题,都是Xen的VPS,装的是Debian的系统,当时就只是把kernel的更新给keep了。今天自己碰到了一样的问题就细细琢磨了一下。看报错的情况是在更新Kernel的时候,没有找到装有GRUB的设备。下面是我解决的步骤:
继续阅读Debian VPS 在更新内核报错的问题

open_basedir restriction in effect: eAccelerator与open_basedir

今天在查阅apache的错误日志时发现有很多的warning,都跟open_basedir有关,如:

2011/09/25 21:27:54 [error] 3927#0: *146 FastCGI sent in stderr: “PHP Warning: require(): open_basedir restriction in effect. File() is not within the allowed path(s): (/srv/http/:/home/:/tmp/:/usr/share/pear/) in /srv/http/xxx.php on line 913” while reading upstream, client: x.x.x.x, server: example.com, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php-fpm/php-fpm-kelltan.sock:”, host: “example.com”, referrer: “http://example.com/”

检查php.ini的配置也没发现什么问题,google一番也没有有用的信息,只好自己动手找原因。重新查看了日志,发现这个警告出现在我安装eAccelerator之后,所以觉得这个错误应该跟eAccelerator有关。

在阅读了eAccelerator的wiki,然后又做了一番研究后发现,默认的eAccelerator编译选项跟open_basedir是不相容的,根据wiki上介绍,只要在编译的时候加上参数“ –without-eaccelerator-use-inode”,便可解决这个问题:

$ cd /PATH/TO/eaccelerator-0.9.6.1
$ make clean
$ ./configure --without-eaccelerator-use-inode
$ make
# make install

好了,重新编译完后,记得删掉eAccelerator之前产生的文件,然后重新启动apache:

# rm -rf /var/cache/eaccelerator/*
# /etc/rc.d/httpd restart

好了,一切重归宁静。

用TestDisk找回丢失的分区表

TestDisk

本来想把一ISO镜像dd写入到U盘里的,结果忘记我把移动硬盘也插在电脑上,直接”dd if=xx.iso of=/dev/sdb”了,而这个sdb正好是移动硬盘,于是iso全部被写入到了移动硬盘上@.@。好在移动硬盘上的分区都还挂载着,先把重要的数据都转移后,拨下移动硬盘,果然一个分区也认不出来了,应该是分区表已经被损坏,崩溃。

决定试着找回一下分区表,在网上找到了这篇:介绍一个 GPL 的分区表修复工具 TestDisk,Arch的源也面也正好有testdisk,下载安装,并看了一遍TestDisk的WIKI

之前在windows下也用过一些数据恢复的软件,而这个testdisk并不像那些软件有华丽丽的图形界面,只在终端下面提供一个向导,扫描后显示扫描结果,及有可能的分区情况,选择原先正确的分区情况后写入到硬盘,总算找回了所有分区。只是第一个分区似乎真的损坏了,好在这个分区无关紧要,我只在上面装了个移动作业系统,重新格式化这个分区后,一切安好。

继续阅读用TestDisk找回丢失的分区表