挂载raw和qcow2格式的KVM硬盘镜像

from:http://lazyhack.net/mount-raw-and-qcow2-kvm-disk-images/
raw格式
对于未分区镜像文件直接使用loop:
mount -o loop image.img /mnt/image
已分区的镜像文件:
如果已知分区的起始位置
mount -o loop,offset=32256 image.img /mnt/image
或者使用losetup + kpartx
losetup /dev/loop0 image.img
kpartx -a /dev/loop0
mount /dev/mapper/loop0p1 /mnt/image
kpartx命令的作用,是让Linux内核读取一个设备上的分区表,然后生成代表相应分区的设备。
kpartx -l imagefile 可以查看一个映像文件中的分区,使用 kpartx -a imagefile 命令后,就可以通过 /dev/mapper/loop0pX (其中X是 分区号)来访问映像。
 
qcow2格式
对于qcow2格式需要使用qemu-nbd这个工具
modprobe nbd max_part=63
qemu-nbd -c /dev/nbd0 image.img
mount /dev/nbd0p1 /mnt/image
如果是LVM格式的镜像:
vgscan
vgchange -ay
mount /dev/VolGroupName/LogVolName /mnt/image
最后使用结束需释放资源:
umount /mnt/image
vgchange -an VolGroupName
killall qemu-nbd
kpartx -d /dev/loop0
losetup -d /dev/loop0
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

linux 磁盘管理工具

总结下一些linux常用的磁盘工具,具体用法可以google之。

1. fdisk 磁盘分区交互式管理工具,我用的最多的命令。

2.gdisk 和fdisk类似,不过对GPT支持,有时使用fdisk修改分区后,出现GPT 签名问题,可以使用fixparts移除之。

3.parted 、partx 同样分区管理工具,不过我很少用,主要是习惯fdisk了。

4.sfdisk同样是分区管理工具,用过一次是分区表的导出(dump)和导入(直接重定向)。

5.testdisk 修复分区工具,可以找回遗失的分区。 photorec是文件恢复工具,可以找回一些误删的文件。

6.lsblk查看block设备,默认不加参数,列举硬盘以及分区、大小。blkid 比较少用,原因是使用lsblk加上-o参数可以达到类似效果。

7.mkfs.XXX创建文件系统,比如ext4,btrfs等。

8.lvm工具。比如pvcreate lvdisplay等。

9.resize2fs 修改extX文件系统分区大小,比较常用的是通过lvm修改了某个lv的大小,但extX文件系统并不能觉察,需要使用resize2fs命令。

10,partprobe 当修改分区表后,不需要重启电脑,运行partprobe通知系统检测新的分区表变化。

11 dd 这个命令很强大,可以克隆整个分区,写入数据到分区中。有时我们把文件删掉后,不安全,系统有可能仅仅移除了inode,而文件内容并没有移除,这时可以使用dd命令写入0或者随机值。

12 df 查看已挂载分区的使用情况以及挂载点、文件系统(-T参数)。

13 dosfslabel,e2label ,如果习惯windows,习惯在分区表设置标签,e2lable可以对extX文件系统分区设置或者修改标签。

14 findfs 根据uuid或者标签查找文件系统,基本没有用过,直接lsblk加上grep。

后续继续补充……

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

ubuntu13.10 安装burg

增加源burg,在13.10中按apt-get update会失败,找不到相关包。各种利用google搜索,中文搜英文搜都无果!于是只好自己下deb包安装。安装中基本没有出现包依赖关系,直接就成功了。

下载地址:http://ppa.launchpad.net/bean123ch/burg/ubuntu/pool/main/b/

根据自己的需要下载,我的下载的包为:

  1. burg_1.98+20100623-1_i386.deb
  2. burg-common_1.98+20100623-1_i386.deb
  3. burg-emu_1.98+20100623-1_i386.deb
  4. burg-pc_1.98+20100623-1_i386.deb
  5. burg-themes_1.98+20100623-1_all.deb
  6. burg-themes-common_1.98+20100623-1_all.deb

安装顺序是 2->3->4->6->5->1,在安装4的时候会弹出一个窗口选择command line 默认就可以了,直接全按回车。

如果都没有问题,就已经安装成功了。

先运行burg-update命令更新下(类似update-grub),然后运行burg-emu模拟的界面(当然你不嫌麻烦,可以重启电脑)。

如果重启后还是原来的grub,可能burg没有安装到MBR中,运行burg-install /dev/sda 或者 burg-install "(hd0)"。

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

利用curl发送post数据进行网络认证

可以把脚本放到自启动脚本目录下, 这样不用每次进行网页认证. 另外对于没有图形界面的纯字符终端也非常有用. 还有就是当chrome打开时, 如果没有认证, 则会把所有已保存的页面重定向到登录页面, 造成非常麻烦!

#!/bin/bash
declare -f showHelp
showHelp()
{
cat <<EOF
usage: $0 [-u username] [-p password] [-i ip] [-h]
EOF
exit 1
}

# 解析参数
while getopts ":u:p:i:h" arg
do
	case $arg in
		u)
			user=$OPTARG
			;;
		p)
			password=$OPTARG
			;;
		h)
			showHelp
			;;
		i)
			ip=$OPTARG
			;;
		:|?|*)
			showHelp
			;;
	esac
done

# 如果没有获取参数,则交互式输入
if [ -z "$user" ]
then
	read -p"username:" user
fi

if [ -z "$password" ]
then
	stty -echo
	read -p"password:" password
	stty echo
	echo
fi

# 检查参数是否成功输入
[ -z "$user" ] && showHelp
[ -z "$password" ] && showHelp

# 发送post数据, 注意这里没有保存cookies
ip=${ip:-"10.3.8.211"} # 这里设置认证ip的缺省值
curl -A "Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.0)" -d "username=$user&upass=$password&save_me=1&R1=0" "$ip"  -o output.html 2>/dev/null

# 本来想用nc的,结果发现即使不登录也会返回0 
# FIXME: 下面这段检测网络是否正确连接的代码,不健壮,不保证输出是正确结果, 运行后请手动ping
if ping -c 1 -w 2 baidu.com &>/dev/null
then
	echo "The internet is Ok!"
else
	echo "Fail to login!"
fi
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

linux chmod命令改进

chmod命令用于修改文件mode,即权限.有时我们需要递归处理,加上-R选项即可.但是有时我们需要这种情况: 普通文件和目录文件设置不同的mode. 最常见的情况是从windows下烤的工程项目要部署到linux下, 假设服务器是tomcat, 于是我们必须修改工程权限,要能cd进去,目录必须有可执行权限,但我们又不希望普通源码文件也加上莫名其妙的可执行权限. 

下面我的脚本直接调用了chmod,只是多了几个判断而已! 实在不知道怎么写标题,改进还是改退? 或者根本不能称为改进,而是重新封装了下?

#!/bin/bash

declare -f op
declare -f showHelp

# 逐一处理文件
op()
{
	while [ "$#" -gt 0 ] # 还有待处理参数
	do
		file="$1"
		if [ ! -e "$1" ]
		then
			echo "$1 does not exists."
			shift # 处理下一个参数
			continue
		fi

		if [ ! -d "$1" ]
		then
			chmod -c "$filemod" "$1" || echo "chmod $filemod $1 fail!"
		else
			chmod -c "$dirmod" "$1" || echo "chmod $dirmod $1 fail!"
			if [ "$recursive" = "1" ] # 若递归,则继续递归调用op函数
			then
				for subfile in $1/*
				do
					[ -e "$subfile" ] || continue # 这个要注意,防止当不存在文件时,*不会展开
					op "$subfile"
				done
			fi
		fi
		shift #处理下一个参数
	done
}

# 显示帮助信息
showHelp()
{
cat <<EOF
usage: $0 [-r | -R] [-f filemod] [-d dirmod] file1 file2 ...
for example: $0 -r -f a+r -d a+x
EOF
exit 0
}
test()
{
	while [ $# -gt 0 ]
	do
		echo "$1"
		shift
	done

}
opt=0 # 记录参数选项个数
while getopts ":rRf:d:hH" arg
do
	case $arg in
		"h" | "H")
			showHelp
			;;
		"r" | "R")
			recursive=1
			((opt+=1))
			;;
		"f")
			filemod=$OPTARG
			((opt+=2))
			;;
		"d")
			dirmod=$OPTARG
			((opt+=2))
			;;
		":")
			echo "No argument value for option $OPTARG"
			exit 1
			;;
		"?")
			showHelp
			;;
		*)
			echo "Unkown error while processing options"
			exit 1
			;;

	esac
done

# 去掉选项参数
while [ $opt -gt 0 ]
do
	shift
	((opt-=1))
done

# 设置变量默认值
filemod=${filemod:-"664"} 
dirmod=${dirmod:-"775"}
recursive=${recursive:-"0"}

# 主程序入口, 如果有文件需要处理,则调用op,否则直接退出
if [ $# -gt 0 ]
then
	op $@
else
	showHelp
fi
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

linux 错误流传入管道的几种方式

正常情况下当运行命令: command1 | command2 时,只能把command1标准输出传入command2 输入,即只能将标准流传入管道,但有时我们需要将错误流传入管道,就比较麻烦了。有以下解决方案:

  1. command1 2>&1 | command2 ,这样可以把错误流重定向到标准输入流,然后在传入管道。这样的问题是标准流和错误流混在一起了,这可能不是我们所需要的。
  2. 在bash、tcsh中直接支持将错误流传入管道,即 command1 |& command2,这样方法最方便,但不是所有shell都能够支持的。
  3. 先把错误流文件保存到临时文件中,在读取,然后重定向,即 command1 2>tmpfile && cat tmpfile | command2,这种方式健壮性比较好,但同时效率肯定比较低的。

当然或许有其他更好的方式,目前仅想到这几种方式。

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

ubuntu 网络配置(包括有线、无线、wifi)

首先不得不说ubuntu下的network-manager有多不好,往往出现dhcp无法获取ip,锐捷无法认证等一系列问题。于是很果断的卸载了。

linux下网络配置分为有线和无线。

有线配置的话,如果是dhcp,修改/etc/network/interfaces 文件,看起来想这样

auto eth0
iface eth0 inet dhcp

其中auto表示在系统启动时脚本会自动开启,eth0是网卡名,在终端上输入

sudo ifconfig -a

可以查看所有计算机存在的网卡。具体查看man手册。

有时尽管我们设置了dhcp,但依然获取ip失败,这时可以运行dhclient命令

dhclient eth0 # ech0 替换成网卡名

然后再运行ifconfig查看是否正确获取了ip。

如果是静态ip,则看起来想这样

iface  inet static
address 192.168.1.1
netmask 255.255.255.0

当然要自启动也要在前面加入auto eth0. 有时需要配置网关和DNS,只需在下面加上gateway address 和 dns-nameservers address1, address2, DNS也可以在/etc下修改resolve.conf文件设置,看起来像这样:

nameserver 8.8.8.8
nameserver 202.196.64.1

注意:所有的配置都需要重启网络才生效!

如果网卡没有打开,需要运行sudo ifconifg eth0 up (eth0替换成网卡名)。

自此有线配置基本完成。

下面看看无线网络的配置。

首先无线网络,首先要开启无线(硬件开启),有时硬件开启时运行ifconifg也打不开,这可能因为是软件禁止了。运行:

rfkill list

可以查看软件禁止/开启列表,需要开启,只需运行

rfkill unblock index | type
# index 就是rfkill list 列表的编号, type 对应名字,比如wifi 

然后配置/etc/network/interfaces 文件,与有线配置类似。

如果需要使用wifi,可以安装wifi-radar,这是个图形化工具。请确保wifi硬件和软件都已正常开启。

还有一个无线配置命令是iwconfig,请man之。

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

linux下pdf文件合并工具

利用 Adobe® Acrobat® XI,可以将所有内容合并在一个紧凑的 PDF 文件中并对这些内容进行组织。这样您可以确保每个人都能收到您发送给他们的所有材料。好像是要收费的。。。 在linux下其实很多关于pdf操作的工具,比如pdfjam。合并多个pdf的工具是pdfjoin。
pdfjoin [OPTION [OPTION] ...] [SRC [PAGESPEC] [SRC [PAGESPEC]] ...]
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

tmux 滚屏

gnome-term 通过鼠标滚动可以滚屏,可是tmux默认鼠标滚动是查看历史命令,相当于方向键的上下。

要想滚屏只需要输入prefix + pageUp,prefix就是默认发送prefix绑定的键,默认为Ctrl + b,然后就可以像使用vi或emacs一样操作,具体取决于配置,比如在查找内容输入 “/” 等。 

如果需要开启滚动鼠标启动,可以进入命令模式,即“prefix + :”,然后输入setw mode-mouse on ,可选参数-g,表示是否应用于所有窗口。

如果不想每次输入这么麻烦,可以写入配置文件,

echo "set-window-option -g mode-mouse on" >> ~/.tmux.conf

注意:其实以上方式已经进入了复制模式,因此可以键入空格开始复制,回车确定,q退出。

转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!

支持递归传输目录和在线编辑的ncftp工具

unix下的命令ftp, 只能put 、get 文本文件(plain file), 而不支持传输整个目录, 因此每次传输一个目录, 需要手动打包成一个tarball文件,这不可厚非的,压缩后毕竟能够节约网络带宽。 但作为一个传统的ftp,还是存在许多弊端, 最大的问题在于不支持断点传输, 若由于网络故障,则必须重新传输,当然一般我们可以使用更强大的ssh(scp)、wget、axel等传输。 对于只支持ftp协议的情况,则推荐一个ftp强化版-----ncftp,当然用的也是ftp协议的。ncftp是文字模式ftp程序的佼佼者,它具备多样特色, 包括显示传输速率,下载进度,自动续传,标住书签,可通过防火墙和代理服务器等。

ncftp与传统的ftp相比(直接引用http://hi.baidu.com/slip2008/item/bf4b252725cded8e9c63d1fc),主要有以下改进或变化:
 
1、子目录下载,采用递归的,下载整个目录及其子目录。
2、支持断点续传。一次传输没有完成,下次可以接着传输未完成的文件。
3、匿名ftp自动登录。目前大部分ftp站点都可以匿名登录,ncftp可以自动登录(默认方式)。
4、支持通过防火墙传输和代理服务器。
5、支持书签功能,可以将某个位置存在书签中方便以后直接跳转。
6、可以显示下载进度。
7、显示传输速率。
8、文件列表自动满页暂停。当ls文件列表超过一屏,ncftp会自动暂停,等待任意键继续。
9、默认是以binary方式传输数据。
10、支持文件名自动完成。例如服务器上有文件download.list,您只要输入get down<TAB>,系统可以自动填充文件名为download.list。
11、自动记忆站点的离开时的目录,下次登录会自动进入那个目录。
下面我们就详细介绍一下如何使用ncftp进行日常的ftp工作。ncftp的命令行语法是:ncftp [flags] [<host> | <directory URL to browse>]。flags常见的包括:
-u XX 使用用户名XX代替匿名。
-p XX 使用密码XX代替默认密码。
-P XX 使用端口XX,默认端口是21。
-d XX 如果连接不上,间隔XX秒重试。
-g XX 重试XX次。
命令和ftp基本一样, 支持参数更多些,比如get 可以加上-R参数进行递归式下载, put 可以支持递归式上传。 
还有一个强大的功能是支持调用本地的编辑器(比如vim,需要设置EDITOR环境变量,需要export),在线编辑文件。 原理是先下载到本地,生成一个临时文件,然后编辑完后在上传,因此可能有时会小卡下!
转载请注明:http://krystism.is-programmer.com/若有错误,请多多指正,谢谢!