mplayer播放参数与设置

一. mplayer双字幕设置

直接将中英字幕文件合并成一个文件即可,即可直接用于双字幕mplayer播放。

$ cat my_film.chs.srt my_film.eng.srt > my_film.srt
$ mplayer -ass my_film.mkv -sub my_film.srt
当中文字母加载出现乱码,使用 -ass 参数。

二. mplayer播放调节参数

1. 字幕参数:

x 和 z
    调整字幕延迟增加/减少 0.1 秒
r 和 t
    上/下调整字幕位置
v
    关闭或打开字幕
j
    切换字幕,对应的字幕位于视频同一目录下并文件名一致

2. 声音参数:

+ 和 -
    调整音频延迟增加/减少 0.1 秒
/ 和 *
    降低/提高音量
9 和 0
    降低/提高音量
m
    静音开关
#
    循环可用的音轨

3. 播放控制参数:

左方向键 和 右方向键
    后退/快进 10 秒钟
上方向键 和 下方向键
    快进/后退 1 分钟
pgup 和 pgdown
    快进/后退 10 分钟
[ 和 ]
    减少/增加当前播放速度 10%
{ 和 }
    减半/加倍当前播放速度
p / SPACE
    暂停 (再按取消暂停)
q / ESC
    停止播放和退出

4. 屏幕参数

f
    切换全屏
T
    切换置顶
o
    循环OSD状态:即显示播放计时
P
    在 OSD 上显示进度条、已播放时间以及总长度信息

Linux下如何释放内存

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。

Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存

知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

# sync

接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:

# echo 3 > /proc/sys/vm/drop_caches

此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

要查询当前缓存释放的参数,可以输入下面的指令:

# cat /proc/sys/vm/drop_caches

释放缓存完毕,让设置保持默认:

# echo 0 > /proc/sys/vm/drop_caches

KVM安装虚拟机

自CentOS 6开始,虚拟化平台已经从xen转向KVM,所以在CentOS 6安装KVM还是非常的简单的。

CentOS 6安装配置KVM

1、安装KVM

#yum groupinstall Virtualization 'Virtualization Client'

2、安装api支持

#yum install libvirt
#service libvirtd start

3、验证是否已经载入KVM模块

$ lsmod | grep kvm

4、使用virt-manager安装guest

virt-manager是一个api gui工具,可以很方便的管理虚拟机。下面简单介绍使用virt-manager安装虚拟机系统。

1)打开virt-manager,Add-connection,hypervisor选择QEMU/KVM,点击connect。
2)在连接localhost(QEMU)右键-NEW,输入guest名称,还有选择安装方式,我这里选择
iso文件安装,点击forword。
3)选择iso文件路径,点击forword。
4)定义分配内存及cpu个数。
5)定义磁盘映像大小。
6)下一步就是常规的系统安装了。

5、使用virt-install安装guest

当你的CentOS没有桌面环境时,可以使用virt-install命令安装,如:

1、输入虚拟机名称
2、分配多少内存
3、定义虚拟机磁盘映像的位置
4、此步可以直接输入iso的位置或是url
5、进行系统常规安

 

CentOs配置OpenSSH无密码登陆

1 配置服务器/etc/ssh/sshd_config文件。

去掉以下内容的注释符“#”或修改成如下方式。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PermitRootLogin no    #不允许root用户登陆ssh,目的是为了系统安全。
Protocol 2    #选择第二种协议,目的是为了系统的安全。

2 在客户端生成一对公私钥,将公钥复制到服务器的user/.ssh/authorized_keys文件中。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ scp ~/.ssh/id_dsa.pub user@Sever's_IP:/home/user/.ssh/
$ ssh user@Sever's_IP
$ cat /home/user/.ssh/id_dsa.pub >> /home/user/.ssh/authorized_keys

3 修改远程服务器/home/user/.ssh/authorized_keys的权限为600,即可通过OpenSSH远程无密码登陆服务器。

$ chmod 600 ~/.ssh/authorized_keys

4.添加id_rsa到ssh-agent。如果连接服务器返回“Agent admitted failure to sign using the key”。

$ ssh-add
再次连线就正常了。

5. 设置 selinux

若没有关闭 selinux,则依然不能无密码登录,关闭即可。

$ sudo setenforce 0

此外,若用户的家目录权限过大,比如为777,则也会导致即使正确进行以上设置后,任然需要输入密码登录。

ssh远程中让进程在后台可靠运行的多种方法

简介:想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救?

如果有大量这类需求如何简化操作? 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。

1. nohup

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用”>filename 2>&1″来更改缺省的重定向文件名。

nohup 示例

[root@pvcent107 ~]# nohup pingwww.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.com
root      3067   984  0 21:06 pts/3    00:00:00 grep 3059
[root@pvcent107 ~]#

2. setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。

setsid 示例

[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef | grep www.ibm.com
root     31094     1  0 07:28 ?        00:00:00 ping www.ibm.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。

3. & subshell

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。 当我们将”&”也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。

subshell 示例

[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef | grep www.ibm.com
root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。

4. disown

这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。我们已经知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。

用disown -h jobspec 来使某个作业忽略HUP信号。

用disown -ah 来使所有的作业都忽略HUP信号。

用disown -rh 来使正在运行的作业忽略HUP信号。

灵活运用 CTRL-z

在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别
的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)
继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有
用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避
免了重新定位的麻烦。

disown 示例1(如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile &
[1] 4825
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile
root      4825   968  1 09:46 pts/4    00:00:00 cp -i -r testLargeFile largeFile
root      4853   968  0 09:46 pts/4    00:00:00 grep largeFile
[root@pvcent107 build]# logout

disown 示例2(如果提交命令时未使用“&”将命令放入后台运行,可使用 CTRL-z 和“bg”将其放入后台,再使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile2
[1]+  Stopped                 cp -i -r testLargeFile largeFile2
[root@pvcent107 build]# bg %1
[1]+ cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile2
root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2
root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2
[root@pvcent107 build]#

5.screen

我们已经知道了如何让进程免受 HUP 信号的影响,但是如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做这样的操作呢?此时最方便的方法就是 screen 了。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多,具有很强大的功能,我们在此仅介绍其常用功能以及简要分析一下为什么使用 screen 能够避免 HUP 信号的影响。

用screen -dmS session name 来建立一个处于断开模式下的会话(并指定其会话名)。
用screen -list 来列出所有会话。
用screen -r session name 来重新连接指定会话。

screen 示例

[root@pvcent107 ~]# screen -dmS Urumchi
[root@pvcent107 ~]# screen -list
There is a screen on:
        12842.Urumchi   (Detached)
1 Socket in /tmp/screens/S-root.
[root@pvcent107 ~]# screen -r Urumchi

总结
现在几种方法已经介绍完毕,我们可以根据不同的场景来选择不同的方案。nohup/setsid 无疑是临时需要时最方便的方法,disown 能帮助我们来事后补救当前已经在运行了的作业,而 screen 则是在大批量操作时不二的选择了。

让vim不要自动添加新的注释行

vim里面有一个特性,如果你在一行注释后新加一行,vim会自动在下一行的开始位置添加注释符号。例如对于C/C++来说:

//This is a comment line
//

第二行的”//”符号就是vim自动添加的。如果是在大量编写注释,那这个功能还是比较有用的。但是,我经常从其它地方复制一些代码,然后在putty中用鼠标右键一点就相当于自动键入,如果代码中有一行注释,就会导致后面的所有代码全部自动被注释掉,相当不方便。 查了一下,有以下两种简单的解决办法:

1. 在.vimrc文件(这个文件在$HOME目录下)添加以下内容:

autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o

这样,所有的文件都不会自动添加注释符号了。

2. 如果只是针对C/C++类型的文件想禁用这个功能,可以在.vimrc中添加以下内容:

au FileType c,cpp setlocal comments-=:// comments+=f://

 

linux分区知识与大磁盘的分区

文件系统限制:

以下信息出自:维基百科

ext3

块尺寸 最大文件尺寸 最大文件系统尺寸
1KiB 16GiB 2TiB
2KiB 256GiB 8TiB
4KiB 2TiB 16TiB
8KiB 16TiB 32TiB

ext4

最大文件尺寸 16 TiB (for 4k block filesystem)
最大卷容量 1 EiB

xfs

最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,
最大文件系统尺寸为18 exabytes。

ReiserFS

最大文件尺寸 8 TiB
最大卷容量 16 TiB

大于2T的磁盘分区方法

由于MBR分区表只支持2T磁盘,所以大于2T的磁盘必须使用GPT分区表,具体方法如下:

GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4*16个字节,只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT磁盘没有四个主分区的限制。

fdisk不支持GPT,我们可以使用parted来对GPT磁盘操作。

#parted

在提示符下输入parted就会进入交互式模式

   1. parted>  
   2. parted>select sdb               假设磁盘为sdb  
   3. parted>mklabel gpt              将MBR磁盘格式化为GPT  
   4. #parted>mklabel msdos           将GPT磁盘转化为MBR磁盘  
   5. parted>mkpart primary 4096s 100 划分一个起始位置为4096扇区(4K对齐),大小为100M的主分区  
   6. parted>mkpart primary 100 200   划分一个起始位置为100M,大小为100M的主分区  
   7. #parted>mkpart primary 0 -1     将整块磁盘分成一个分区  
   8. parted>print                    打印当前分区  
   9. parted>quit                     退出

parted的更多命令:

Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help                                                             
  align-check TYPE N                       check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found
        partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted)

在parted里边不支持对文件系统进行格式化,所以如果要使用的话,要退出parted进行格式化。

mkfs.ext3 /dev/sdx1

因为fdisk是不支持GPT磁盘,所以不要使用fdisk -l来查看X磁盘刚才分好的区,看不到的。

e2label命令修改磁盘分区的label。

 

修改linux系统默认的桌面位置

linux系统给出了Home目录下的一些文件夹,这些文件夹是中文或英文首先字母为大写。因此输入路径的时候特别不放便。直接重命名这些文件会造成一些不便,比如无法直接在桌面上新建文件和文件夹。

为了修改这些路径,修改~/.config/user-dirs.dirs即可。

vim ~/.config/user-dirs