I am LAZY bones? AN ancient AND boring SITE

分类: '经验技巧' 的归档

遇到个字幕问题,贴个把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+鼠标拖动…

scp代理

我写的ssh快速登陆脚本可以方便地通过跳板登陆到目标服务器,也就是 本机->hostA->hostB.
但是当有个本地文件像上传给hostB的时候,一般还是得先scp到hostA,再登陆hostA,scp到hostB,是不是必须这么麻烦呢?答案显然是不是的,不然我也不会在写这篇日志了,:)
下面就看看我的方法:
编辑 ~/.ssh/config 文件,加入以下几行

Host hostB
User usernameB
ProxyCommand ssh usernameA@hostA nc %h %p

然后,只要在本机输入 scp filename hostB:/remote/path(这里不要写usernameB了) 就可以直接将文件复制到目标地点了,哈哈.
当然如果你没有设置公钥对的话,过程中会让你输两次密码,一次是hostA的密码,一次是hostB的密码.
还有有个前提条件,就是hostA中必须安装有 nc(netcat).

用wine打开…

公司的密码,都是用Password Agent这个叫软件管理的,所以经常收到工程人员发来的pwa文件,以前都是到虚拟机里面去打开的,但是这样相当麻烦,所以就想用wine模拟Password Agent.
其实这软件有效的也就一个 PwAgent.exe 把这文件放在 ~/.wine/drive_c/windows/system32 目录后,wine PwAgent.exe 也能正常打开,打开软件后,在软件里面打开pwa,发现也没啥问题.但问题就是右键-用其他程序打开那里,设置了自定义命令: wine PwAgent.exe 后,却不正常,软件是打开了,但是报找不到文件,其实 wine PwAgent.exe xxx.pwa 也是正常的,但为什么直接双击pwa文件就不行了呢?
经过摸索,终于被我发现这个:
在自定义命令那里输入”wine PwAgent.exe z:\\” 就正常了.因为在wine的系统里面,真实系统的/对应了z:\\ 嘿嘿,之前就是因为少了这个z:\,所以才报的找不到文件.
这个方法应该对其他软件也有效哦,现在终于可以在ubuntu下直接双击文件,调用wine的程序打开了,哈哈.

自动禁用/启用触摸屏

哈哈,这个很方便哦,实现的功能就是插上鼠标,自动禁用触摸屏,拔了鼠标自动启用.
这样用鼠标打字的时候,就不会因为不小心碰到触摸屏而打错了.
基本上照着ee的做法,新建一个 /etc/udev/rules.d/01-touchpad.rules 文件,内容如下:

# disable the touchpad when inserted a usb mouse
# should be linked to /etc/udev/rules.d/01-touchpad.rules
ACTION==”add”, SUBSYSTEM==”input”, ID_CLASS=”mouse”, RUN+=”/usr/bin/synclient TouchpadOff=1″
ACTION==”remove”, SUBSYSTEM==”input”, ID_CLASS=”mouse”, RUN+=”/usr/bin/synclient TouchpadOff=0″

但是,在我这里,终端里面执行 synclient -l 的时候,会报错,Can’t access shared memory area. SHMConfig disabled? 导致这个东西失效,google一下,发现要修改下 /etc/X11/xorg.conf 打开 SHMConfig.
具体是在里面的
Section “InputDevice”
Identifier “Synaptics Touchpad”
的下面,加上一行 Option “SHMConfig” “on”
重启X以后,就可以了,哈哈.

mplayer的配置

先贴上我的配置文件:

# Write your default config options here!
vo=x11 #我的A卡,用xv不正常…

font=/home/lily/.fonts/VeraSansYuanTi-Regular.ttf #字幕的字体文件
subcp=cp936 #默认的字幕编码
subfont-autoscale=0
subfont-text-scale=40 #字幕文字大小

zoom=yes

vf=expand=0:-50:0:0:0 #这个就是本日志的关键,下面细说

大家可以看到上面有一行 vf=expand=0:-50:0:0:0 ,这是我发这个帖子问来的结果,但是后来又找到这个,哈哈其实详细的信息帖子里也有了,我也就不多说了,反正一句话说就是可以使字幕显示在视频画面的下方,从而使字幕不会遮住画面,设置之后的结果(截图),也请看上面的帖子吧 :)

ntp服务器端的配置

上次我有篇文章写了本机如何和标准时间服务器进行同步的,这次是局域网里面的几个服务器之间的时间需要同步,因为仅需要同步,不需要是标准时间,所以随便选了一台当时间服务器,以它的时间为准.
服务器断需要启动ntpd这个服务,通过udp123这个端口和客户端进行通讯.由于服务器装的不是ubuntu,而是RHEL3,幸好ntpd已经默认装了,不用我去找rpm包了,嘿.于是以为执行下 srevice ntpd start 就好了,但是在其他机器上执行时却出错了:

  1. [root@localhost ~]# ntpdate -q 192.168.2.234
  2. server 192.168.2.234, stratum 0, offset 0.000000, delay 0.00000
  3. 15 Apr 11:36:20 ntpdate[30044]: no server suitable for synchronization found

网上查了很多帖子,最后发现问题了,是由于默认的配置文件拒绝了其他机器的连接.解决办法就是修改 /etc/ntp.conf ,注释了一开始的 restrict default ignore,然后重启一下服务就可以了.其实后来仔细研究了下,其实可以做到只开放某些机子有权限访问.比如只允许局域网访问的话,可以这样:

  1. restrict default ignore
  2. restrict 192.168.0.0 mask 255.255.0.0 notrust nomodify notrap

然后再执行 ntpdate -q 192.168.2.234
或者 ntpdate 192.168.2.234
就不会再出错了.

PS: 如果服务器是ubuntu的话,就不用这么麻烦了,我在自己的7.10上面实验过,直接 apt-get install ntp 就可以安装并启动 ntpd 了,而且也不用修改任何配置,就可以作为ntp服务器啦.ubuntu就是先进,嘿嘿.
参考资料: 鳥哥的 Linux 私房菜

sshfs 的用法

通过sshfs,可以将远程服务器上的目录mount到本地,从而可以在本地方便地操作远程的文件.而且所有ssh协议的好处都得以保留哦,比如加密传输之类的.
安装: 如果你用的也是ubuntu,可以直接apt-get install sshfs 得到,如果是其他版本,请安装响应安装包,或者访问主页: http://fuse.sourceforge.net/sshfs.html
另外,要使用sshfs,你还需要在 fuse 这个组里面,如果还不是,需要执行

sudo usermod -G fuse -a 你的用户名

来加入fuse组,加完之后,还需要重新登录一次.
然后你就可以执行

sshfs RemoteUser@RemoteHost:[RemoteDir] LocalDir

进行挂载了.不过这里的RemoteDir和scp等命令里面的有点不同,就是不能使用~来表示远程用户的家目录.只能写绝对路径.而且省略RemoteDir的时候,却不能省略前面那个冒号哦.
挂载了以后,服务端的文件和本地的文件就基本同步了,为什么加个”基本”呢?就是因为我这边测试的时候,延时还是比较大的,服务器上建个文件,本地要过个5秒左右,才能看到…
另外用完之后要用 fusermount -u LocalDir 进行卸载哦,不然难保有些文件没有同步完成呢.