分类: '经验技巧' 的归档
wget的-e选项
wget可谓居家旅行,杀人越货的必备之物了~其体积小巧,功能强大.所以,同时,其选项也比较繁多,man也是长长的,但是却有写个小技巧没写出来.
man里有这样的描述:
Wget can follow links in HTML and XHTML pages and create local versions of remote web sites, fully recreating the directory structure of the original site. This is sometimes referred to as “recursive downloading.” While doing that, Wget respects the Robot Exclusion Standard (/robots.txt). Wget can be instructed to convert the links in downloaded HTML files to the local files for offline viewing.
于是乎,如果你想mirror一整个站点,但是人家的 /robots.txt 却是:
User-agent: *
Disallow: /
你就要开始郁闷了,呵呵.
而且,我翻遍了man也找不到解决办法的,总不能为这点事去hack源码吧…
其实有这么个选项:
-e command
–execute command
Execute command as if it were a part of .wgetrc. A command thus invoked will be executed after the commands in .wgetrc, thus taking precedence over them. If you need to specify more than one wgetrc command, use multiple instances of -e.
用这个,就可以忽略 robots.txt 哦,具体是 -erobots=off 嘿嘿.
修改gnome-terminal的title的办法和杂七杂八的ANSI控制码记录
折腾这个的原因是:有时候gnome-terminal的窗口开多了,就容易忘记哪个是哪个了,尤其是用脚本登录到多个不同服务器以后,就经常会混淆,把原本想在这个服务器上执行的命令输到那个服务器的窗口里面去了。这样有可能会造成非常严重的后果。
当然也有手工的解决办法,就是登录一个服务器就在 终端 – 设置标题 那里设置一下,就可以固定住了,但是这样每开一个tab都设置一下的办法确实很麻烦,所以我想修改脚本来实现把参数设置成标题。
想到平时emerge的时候,tab的标题是会变的,所以翻出portage的源码找,也找着了,把py的翻译成了bash的也很容易,简单的说,就是下面这一句:
|
1 |
echo -ne "\e]0;test\a" >&2 && sleep 3 |
在执行的3秒钟里,就可以看到title已经变成了test了。不过3秒一过,马上又变回PS1的样子了(具体是什么和 编辑-配置文件首选项-标题和命令 里面的设置有关)。写到sssh脚本里面也一样,在登录的瞬间是可以看到自定义的标题的,但是登录成功以后,又变成了远程机器的PS1的样子。
看了一下gnome-terminal的代码,似乎在不修改gnome-terminal的情况下是搞不定了,呵呵,得搞个接口修改gnome-terminal的内部数据?
另外,记一下不完全的ANSI控制码吧,上面这个改标题的,也是用了其中的一个:
\e[0m 关闭所有属性
\e[1m 设置高亮度
\e[2m 变暗
\e[4m 下划线
\e[5m 闪烁
\e[7m 反显
\e[8m 消隐
\e[9m 删除线
\e[30m ~ [37m 设置前景色(颜色值见下面说明)
\e[40m ~ [47m 设置背景色(颜色值见下面说明)
\e[nA 光标上移n行
\e[nB 光标下移n行
\e[nC 光标右移n行
\e[nD 光标左移n行
\e[y;xH 设置光标位置
\e[2J 清屏
\e[K 清除从光标到行尾的内容
\e[s 保存光标位置
\e[u 恢复光标位置
\e[?25l 隐藏光标
\e[?25h 显示光标颜色代码:
0 - 黑色 4 - 蓝色
1 - 红色 5 - 粉红色
2 - 绿色 6 - 青色
3 - 黄色 7 - 白色部分属性可以叠加进行设置,中间用“;”隔开,例如设置绿色前景、红色背景并高亮显示可以这样写: \e[01;32;41m
目前还没有找到所有代码的含义要查看全部的代码,请参考Emca-048标准。以上引用部分内容自出处一、出处二
搞定黑莓的通讯录
新买手机的朋友,都知道有时候转移通讯录是件挺麻烦的事情,这不,我就遇到了。
不过幸好,我的老手机支持把通讯录都复制到SIM卡,而且我的联系人也不算多,刚好基本把SIM卡的150人塞满。而且黑莓也支持从SIM卡批量导入数据。
这样,转移似乎是很快就完成了,但是完事以后一看,这个黑莓的联系人排序确实是乱得可以,不知道为什么基本上是无序状态。
后来网上一看,还真有不少朋友也遇到了这样的问题,当然也有朋友给出了解决方案,就是在没个名字前加上名字的拼音首字母。具体做法呢就是先用PC端的名为“桌面管理器”的软件,先把通讯录导出成OUTLOOK的格式,然后转成txt文本,再用人家的一个excel文件,导入之后套用一个公式,就加上首字母了,然后再导成txt,到OUTLOOK,再导回黑莓。
这样问题虽算解决了,但整个一套,不仅麻烦,而且很windows,我总不能为了这个,而去下载整套MS office吧。。。
好好研究了一下那桌面管理器以后,发现,其实它是支持通讯录到txt文件的直接导入导出的,于是乎,就看到希望了,现在只要在txt文件里面加上没个人的首字母信息就可以了。
那个文本文件是这样的形式:没个联系人一行,字段之间用逗号割开,字段分别是:”First Name”,”Middle Name”,”Last Name”,”Title”,”Company Name”,”Work Phone”,”Work Phone2″….
而从SIM卡导入后,整个姓名都在 First Name 一栏,Last Name 空着,于是我就用了下面这段awk脚本,把每个人的 Last Name 填上了
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
BEGIN{ FS="," OFS="" } {if(NR!=1){ print "==",$1,$2,$3,$4 h=$1 "," $2 t="" for(i=3;i<NF;i++){ t=t $i "," } $0="" "curl -s `echo \"http://www.51windows.net/pages/pinyin.asp?txt=" $1 "\" | iconv -f utf8 -t gb2312` | enconv | grep \\\"pincode\\\" | awk 'BEGIN{RS=\"<nobr>\"}{if(NR!=1)printf(\"%s\",substr($1,1,1))}'" | getline print h,",\"",$0,"\"",t }else{ print $0 } } |
这个只是完成了到51windows查询拼音首字母的功能,另外那些诸如编码转换和换行符转换之类的事情,还得加几条命令。
完成了以后,导入会黑莓,联系人就又都乖乖地排好了,哈哈。
笔记本显示器屏保和电源管理完美解决方案
本文要实现的目标: 完美控制笔记本LCD的屏保和黑屏,具体地说是实现
1. 平时键鼠10分钟无动作,将LCD转入屏保;15分钟无动作,将LCD彻底断电
2. mplayer看电影的时候,持续不屏保不断电.
3. 按下 ctrl+alt+L 的时候,立即锁住屏幕并将LCD断电.
适用人群: linux用户(废话,我没条件测试BSD和其他*nux),gnome用户,compiz用户,用命令行启动mplayer的用户.当然如果不全符合,部分内容也是可以参考的,比如双击电影文件打开mplayer的用户,可以自己修改文件的打开方式;非compiz用户可以用其他方式绑定命令等.
步骤:
1. 在 /etc/X11/xorg.conf 文件的 Section “ServerLayout” 一节里,加上一行 Option “OffTime” “180” 数值也可以更大些,避免X的影响.
2. 在 ~/bin 下建立一个名为 mplayer 的可执行shell脚本,并把 ~/bin 加入$PATH,位置要在 /usr/bin 前面,不然就自己换名字吧.
脚本内容如下:
1234567 #!/bin/shgnome-screensaver-command -i -n "mplayer" -r "看电影呢!" &/usr/bin/mplayer "$@"mreturn=$?kill %exit $mreturn3. 系统 – 首选项 – 键盘快捷键 里面取消”锁住屏幕”的键盘绑定.
4. 打开ccsm,在 General Options – Commands 里面,添加一个 ctrl+alt+l 键的绑定,命令如下:
1 gnome-screensaver-command -l; sleep 3; xset dpms force off5. 系统 – 首选项 – 屏幕保护程序,将主题选为”黑屏”(当然看个人爱好,我觉得花CPU去绘制屏保,是种浪费,就选黑屏了).
6. 系统 – 首选项 – 电源管理,设置成15分钟后将显示器转入睡眠.
7. 完成了,哈哈~
一些解释和废话:
此方案里用到了 gnome-screensaver 的控制程序 gnome-screensaver-command ,我觉得很不错,不知道 xscreensaver 和 kscreensaver 是不是也有相应的命令,有的话KDE用户也可以用此方案了.
控制电源,用到了 xset ,没有安装的朋友请自行搞定安装.
mplayer的1.0rc2版本,号称有可以停掉 xscreensaver 甚至 gnome-screensaver 的选项,但根据我的试验,都无效,可能是因为的是SVN版本的mplayer的关系吧.所以不得不自己写个脚本搞定,脚本用于替换 mplayer ,如果你喜欢也可以简写成 mp 之类的.
另外,LCD用户需要注意一下了,其实由于LCD并没有电子束轰击荧光粉,所以适用于CRT的屏幕保护程序对LCD其实是很不适合的,根本起不到保护液晶单元和背光灯管的作用.何况,linux下好看的3D屏保,其实都蛮耗CPU的,如今都流行创建集约型社会了,都提倡节能减排了,所以,离开电脑的最佳选择是用黑屏屏保锁住屏幕+显示器断电.当然,也推荐CRT用户这么干.
使用SSL登录irc(注:仅支持OFTC)
SSL登录irc的好处:
1.对收发的数据进行加密.
2.可以不用密码自动identify.
可惜目前试了一下,似乎只有OFTC对SSL提供支持,而因为freenode不支持,可能很多人都用不了.
不管如何,先记下步骤,也许以后freenode会支持呢?但愿如此吧~
以我常用的xchat客户端为例(xchat2.8以上才支持):
1.创建指纹:
openssl req -nodes -newkey rsa:2048 -keyout nick.key -x509 -out nick.cer
chmod 400 nick.key (保护起来,非必要)
cat nick.cer nick.key > OFTC.pem
chmod 400 OFTC.pem (保护起来,非必要)
2.得到 OFTC.pem 以后,放入 ~/.xchat2 目录,然后打开xchat的网络列表,选中OFTC,点”编辑”,在打开的页面勾上”在本网络的所有服务器使用SSL”和”接受无效的SSL证书”.
3.重新连到OFTC,用密码identify了以后,执行 /msg nickserv cert add 就把你的指纹和服务器关联上了,退出,重新打开xchat,登录OFTC以后,你就可以看到,你没输密码,也已经identify了…whois自己也能看到 * [bones7456] is connected via SSL (secure link) 这样的提示了.
终于可以把明文保存在 /.xchat2/servlist_.conf 的密码删掉了,嘿嘿.
其他客户端的设置和更多信息参见OFTC的英文帮助页.
nautilus徽标研究
不知道广大gnome用户会不会经常用到nautilus的徽标功能.反正我是经常用徽标来表示某些文件的状态的,比如,经常下电影看,看过了要刻盘这么一件事.我会在下载电影前就建个目录,电影下好了,字幕什么的都调好了,就放个标记,说明可以看了,然后看完了,觉得有刻盘价值的也给个标记,不然就直接删了.等要刻盘的内容到了一张DVD的容量的时候,就会刻盘,然后再给个已经刻盘的标记,下次空间不够,就优先删了这些已经刻过的.
本来在ubuntu下,这样用一直好好的,但是由于最近转到gentoo,把用户目录挂过来以后,就发现不对了,一些文件原来有两个标记的,现在只有1个了.分析下原因,既然那个徽标能显示出来,那就说明gentoo的nautilus肯定支持徽标(废话),并且数据也是和ubuntu存在同一个地方的.那还有一个显示不出来,就肯定是gentoo支持的徽标种类和ubuntu的不一样,所以解决的思路就是找到这些徽标是放在哪里的,然后把ubuntu的和gentoo的同步一下.
于是我就找啊找啊,终于找到了这些图标原来藏在 /usr/share/icons/gnome/*/emblems 下面,而且我那个显示不出来的那个图标就是 /usr/share/icons/gnome/48×48/emblems/emblem-certified.png 同时还有一个 /usr/share/icons/gnome/48×48/emblems/emblem-certified.icon 文件,里面存的是各种语言的名称.
所以,解决方法就是把那两个文件复制到gentoo的相应目录,但是后来又发现gentoo下是没有 /usr/share/icons/gnome/48×48/emblems 这个没目录的,你可以自己建立此目录并且在 /usr/share/icons/gnome/index.theme 文件里面加入加入目录信息或者像我一样偷下懒,把文件放入 /usr/share/icons/gnome/scalable/emblems 目录下,虽然那png文件不是矢量的,但是事实证明不影响使用.
放好文件以后,如果不想重启的话,可以执行 sudo gtk-update-icon-cache /usr/share/icons/gnome 刷新图标缓存.然后到nautilus里面去看看,消失的徽标又回来了,哈哈.
PS1:文件也可以放入 ~/.icons/hicolor/48×48/emblems 这样的目录下,或者直接在nautilus的 编辑-背景和徽标 里面添加,但是这里居然只能添加不能删除….
PS2:哪个文件用了那些徽标的数据,在 ~/.nautilus/metafiles 目录下的,已加徽标文件的父目录对应的xml文件内.
遇到个字幕问题,贴个把windows文本转为linux文本的命令
周末在家,看个电影,分CD1和CD2的,结果看完CD1,正在兴头上的时候,打开CD2一看,居然没字幕,可字幕文件明明就在哪里。因为以前也遇到过类似问题,打开srt文件,另外一下,基本就可以解决了,但是今天这个死活都出不来。。。搞的非常郁闷。
后来,看电影的兴致已经去了大半,静下心来,才发现,问题出在字幕的换行符上:
那srt文件,普通的行都是正常的windows换行符: \r\n ,但是时间戳那行后面的换行符居然是 \r\n\n 。。。这在windows下可能没问题,但是linux就把它理解为是两个换行了,也就是每个时间戳下面有个空行。而srt的规则应该是时间戳下面紧跟若干行文本,并以空行结束此段,所以字幕都为空行了。难怪显示不出来。
解决办法,也就是把windows文本转为linux文本的命令:
$ cat 1.txt |hex
0x00000000: 31 0d 0a 32 0d 0a 33 – 1MJ2MJ3
$ cat 1.txt | tr -d ‘\n’ | tr ‘\r’ ‘\n’ | hex
0x00000000: 31 0a 32 0a 33 – 1J2J3
PS:这个字幕居然是TLF出的,汗一个。。。
彩色的grep和diff
喜欢命令行,但总觉得命令行那界面有点寒碜?
之前有介绍过彩色的man页,其实grep个diff等也可以彩色:
grep很简单:.bashrc里面加上这么一行,就可以看到效果了。
alias grep=’grep –color=auto’
diff 的话,要安装 colordiff 这个包(其实也只是一个包了diff的perl脚本),就可以用colordiff代替diff了,当然,只要你愿意,也可以alias。
因为简单,不贴图了。
ssh-copy-id
每次要在远程服务器上放key的时候,都 scp XXX.再ssh上去将文件写入 .ssh/authorized_keys 的末尾.而且”authorized_keys”这个单词又那么难拼…有没有简单点的办法呢?
于是自己写了一句:
cat ~/.ssh/id_dsa.pub | ssh user@IP “cat – >> ~/.ssh/authorized_keys”
后来才发现,居然有现成的命令的…没想到啊…
ssh-copy-id user@IP
打开 ssh-copy-id 一看,原来也是个几行的小脚本,其实和我写的那行一样简单,娃哈哈哈~
关于截图
可能很多老手都已经这么做了,我就火星点,再帖一下吧.
1.nautilus的邮件右键启动的截图:
$ cat ~/.gnome2/nautilus-scripts/延时5秒截图
#!/bin/bash
#延时5秒截图
gnome-screenshot -d 5
$ cat ~/.gnome2/nautilus-scripts/延时5秒窗口截图
#!/bin/bash
#延时5秒窗口截图
gnome-screenshot -w -d 5
2.截图并paste:
$ grep “alias sp” ~/.bashrc
alias sp=’scrot /tmp/scrop_tmp.png -bcsd 3 -e “echo | upaste -image \$f ; rm \$f”‘
其中的upaste脚本就是球猫写的这个东东
3.如果只是截图的话,用得最多的还是在compiz下直接 win+鼠标拖动…