使用Maximum Awesome

Maximum Awesome 是美国移动支付领域Square团队的开源产品,包含了vim和Tmux的配置文件。我也刚刚才接触两个星期,总算把Tmux给弄得手熟,真的超级强悍。vim的配置文件现在还用的不多,光是Tmux的配置,已经能让人爽到不行了。

Maximum Awesome 是专为Mac使用的vim和tmux的配置。下文几乎翻译自Maximum Awesome的Github地址。

安装的内容包括

vim的快捷键

几乎每一个插件都可以用一篇文章来介绍一下。都是杀手级插件。以后慢慢写。

  • ,d NERDTree, 树形目录插件。光标focus左侧树形窗口,? 弹出NERDTree的帮助,再次?关闭帮助显示。
  • ,t ctrlp.vim,重新定义了编辑器打开文件的方式,极大了方便了大规模工程代码的浏览。仿照sublime的CtrlP,完全实现了sublime的功能,可以模糊查询定位:工程下的所有文件,打开的buffer,buffer内的tag,最近访问的文件。通过externsion,甚至可以定位mark,register,cmdline history,yankring。虽然在操作体验上还不如sublime,但是功能上已经超越了师傅,更是拉下fuzzyfinder,lookupfiles这些老一辈Vim插件好几条街。
  • ,b ctrlp.vim插件中的打开buffer的快捷键
  • ,a 使用ag.vimthe silver searcher 进行项目快速搜索(比 ack 插件更快)
  • ds/cs 删除/修改配对符号 vim-surround
  • gcc commentary,快速注释一行
  • gc 快速注释多行
  • vii/vai indentobject,快速选择当前缩进/上一级缩进的全部内容
  • Vp/vp 快速置换一对tag之间的内容
  • ,[space] 删除全文多余的空格
  • <C-]> ctags,快速跳到定义。
  • ,l align,按照特定的符号对齐,一般我们按照等号对齐,l=
  • <C-hjkl> 快速移动到窗口,替代<C-w> hjkl的快捷键。

tmux的快捷键

  • <C-a> 重新绑定快捷键(对HHKB尤其友好)
  • 默认鼠标滚动Tmux屏幕。
  • prefix v 纵向切割屏幕
  • prefix s 横向切割屏幕

有三个以上panes:

  • prefix + 改为横向布局
  • prefix = 改为纵向布局

你可以在.tmux.conf里修改横向纵向布局时小panes的高度和宽度。更多的快捷键可以直接看配置文件,非常简单直观。

关于安装

git clone https://github.com/square/maximum-awesome.git && cd maximum-awesome && rake

安装的vim插件列表

我自己添加了两个插件,supertab和neocomplcache,看这里,但是和默认的自动补全的插件应该会有冲突,暂时没有解决。

参考资料


Linux命令之sort

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。记录一下常用的选项。更多选项参照man sort

各选项含义如下:

-u --unique 去除重复行。
-r --reverse 降序。
-o --output=FILE sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件
	`sort -r number.txt -o number.txt`
-t --field-separator=SEP 设定间隔符
-k --key=POS1[,POS2] 指定列数
	`sort -n -k 2 -t :`
-f --ignore-case 忽略大小写
-s --stable sort 命令默认是不稳定的排序,此选项使排序结果稳定。
-R --random-sort 随机排序,每次运行的结果均不同。
-g, --general-numeric-sort 将数字按数值大小排列,
-n, --numeric-sort 将字符串以数值来排序(避免10小于2)
-h --human-numeric-sort 按人类的方式排序 (例如, 2K 1G)

其实今天用到这个命令是因为需要查看文件夹里的文件大小。结合du命令最后得到的命令如下,获得占空间最大的十个文件或文件夹:

du --max-depth=1 -ah | sort -hr | head

参考链接:


Linux命令之insserv

之前在卸载pureftp时候,使用了update-rc.d pureftpd remove,收到了这样一个提醒:update-rc.d: using dependency based boot sequencing 网上搜索了一番原来Debian已经使用了insserv来代替update-rc.d。

于是顺便记录一下Linux的开机启动管理。

linux下,services的启动、停止等通常是通过/etc/init.d的目录下的脚本来控制的。要添加一个自动启动的服务,先将启动脚本放在/etc/init.d,然后使用insserv来启用这个服务,例如:

insserv myserver #添加服务  
insserv -r myserver #删除服务  
insserv -d myserver #使用默认的runlevels  

启动脚本里边要定义启动文件的metadata,参考pptpd脚本中的INIT INFO

  1 #!/bin/sh
  2 ### BEGIN INIT INFO
  3 # Provides:          pptpd
  4 # Required-Start:    $remote_fs $syslog
  5 # Required-Stop:     $remote_fs $syslog
  6 # Default-Start:     2 3 4 5
  7 # Default-Stop:      0 1 6
  8 ### END INIT INFO
  9 # Copyright Rene Mayrhofer, Gibraltar, 1999
 10 # This script is distibuted under the GPL
 11
 12 PATH=/bin:/usr/bin:/sbin:/usr/sbin
 13 DAEMON=/usr/sbin/pptpd
 14 PIDFILE=/var/run/pptpd.pid
 15 FLAGS="defaults 50"
 16
 17 case "$1" in
 18   start)
 19     echo -n "Starting PPTP Daemon: "
 20     start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
 21     ▸   -- < /dev/null > /dev/null
 22     echo "pptpd."
 23     ;;
 24   stop)
 25     echo -n "Stopping PPTP: "
 26     start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
 27     echo "pptpd."
 28     ;;
 29   force-reload|restart)

insserv的命令格式如下:

insserv [<options>] [init_script|init_directory]
Available options:
  -h, --help       This help.
  -r, --remove     Remove the listed scripts from all runlevels.
  -f, --force      Ignore if a required service is missed.
  -v, --verbose    Provide information on what is being done.
  -p <path>, --path <path>  Path to replace /etc/init.d.
  -o <path>, --override <path> Path to replace /etc/insserv/overrides.
  -c <config>, --config <config>  Path to config file.
  -n, --dryrun     Do not change the system, only talk about it.
  -d, --default    Use default runlevels a defined in the scripts

卸载pureftp的过程:

  • service pureftpd stop
  • rm -rf /home/wwwroot/ftp/
  • rm -rf /usr/local/pureftpd/
  • insserv -r pureftpd
  • rm -f /etc/init.d/pureftpd
  • 再删除ftpuser数据库

Linux 输入历史命令的小技巧

平时经常会输入完全相同的命令,或者类似的命令,可以使用以下几个命令查看和复用曾输入过的命令,提高工作效率。

history			显示完整历史
history N		显示历史中的最后 N 行
history -d N		从历史中删除行 N;比如,如果行中包含密码的话就需要这样做
!!			上一个命令
!N			第 N 个历史命令
!-N		回到历史中的 N 个命令(!-1 相当于 !!)
!#			正在输入的当前命令
!string			以 string 开头的最近一次命令
!?string?		包含 string 的最近一次命令

同时,还可以在~/.bashrc中添加下面一些命令来对命令历史做一些修改

HISTFILESIZE=200000 #最大命令历史记录数
HISTCONTROL=erasedups #去掉重复条目,默认为ignoreboth(没想通为什么不是erased ups)
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 为history添加输入的时间

ssh转发代理

原来这么简单啊= =目前只在Mac下试过,真的好简单!

首先本地添加自动代理地址:

系统偏好设置->网络->高级->代理->自动代理配置

在url栏中添加代理配置。然后打开终端

ssh -D 转发端口 -p 登陆端口 -g user@hostname

输入密码之后就可以了Orz。

另外ssh命令的几个参数:

-D 绑定本地端口
-p 远程服务器的端口
-q Quiet mode,ssh的诊断信息以及警告等信息被抑制
-T 禁用伪终端分配
-f 该选项是后台执行的ssh在规定时间(10秒)内进行连接,如果超过该时间ssh将退出。
-n 重定向标准输入到/dev/null中,为了防止从标准输入中读入。ssh进行后台执行时必须使用该参数。该选项对于要求输入密码不起作用
-N 不执行远程命令

Linux系统目录简单介绍

  • / - 根目录。
  • /root - 系统管理员(root user)的目录。 /home - 存放登陆用户的数据。
  • /boot - 包括内核和其它系统启动期间使用的文件。例如: kernel、initrd;时常是一个单独的分区。 /bin - 需要在单用户模式可用的必要命令(可执行文件);面向所有用户,例如: cat、 ls、 cp。目录 /usr/bin 也被用来贮存用户命令。 /sbin - 许多系统命令(例如 shutdown)的贮存位置。必要的系统二进制文件,例如: init、 ip、 mount。目录 /usr/sbin 中也包括了许多系统命令。 /dev - 存放与设备(包括外设)有关的文件。例如:, /dev/null. /etc - 存放了系统范围内的配置文件。
    • /etc/opt /opt/的配置文件
    • /etc/X11 X Window系统(版本11)的配置文件
    • /etc/sgml SGML的配置文件
    • /etc/xml XML的配置文件
  • /lib - /bin/ 和 /sbin/中二进制文件必要的库文件。/lib64 顾名思义是包含64位的库文件。
  • lost+found - 被 fsck 用来放置零散文件(没有名称的文件)。
  • /mnt — 该目录中通常包括系统引导后被挂载的文件系统的挂载点。
  • /media - 可移除媒体(如CD-ROM)的挂载点 (在FHS-2.3中出现)。 /opt - 主要存放那些可选的程序。主要被第三方开发者用来简易地安装和卸装他们的软件包。
  • proc — 一个虚拟的文件系统(不是实际贮存在磁盘上的),它包括被某些程序使用的系统信息。
  • /srv - 站点的具体数据,由系统提供。

    /tmp - 临时目录。有些linux系统会定期自动对这个目录进行清理。/tmp 给予所有系统用户读写权。 /usr - 你可以找到那些不适合放在/bin或/etc目录下的额外的工具。(unix system resource的缩写),包含绝大多数的(多)用户工具和应用程序。

    • /usr/bin 贮存非必要可执行文件 (在单用户模式中不需要) /usr/sbin 非必要的系统二进制文件,例如:大量网络服务的守护进程。 /usr/share 存放一些共享的数据,比如音乐文件或者图标等等; /usr/src/ 源代码,例如:内核源代码及其头文件。 /usr/lib 用于存放那些不能直接运行的,但却是许多程序运行所必需的一些函数库文件。 /usr/local 这里主要存放那些手动安装的软件,即不是通过apt-get安装的软件。它和/usr目录具有相类似的目录结构。用户自己写得程序放在这里会比较好。(便于管理) /usr/media 有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。
  • /var — 用于贮存variable(或不断改变的)文件,例如日志,脱机文件和临时电子邮件文件。有时是一个单独的分区。
    • /var/cache 应用程序缓存数据。这些数据是在本地生成的一个耗时的I/O或计算结果。应用程序必须能够再生或恢复数据。缓存的文件可以被删除而不导致数据丢失。
    • /var/lib 状态信息。 由程序在运行时维护的持久性数据。 例如:数据库、包装的系统元数据等。
    • /var/lock 锁文件,一类跟踪当前使用中资源的文件。
    • /var/log 日志文件,包含大量日志文件。
    • /var/mail 用户的电子邮箱。
    • /var/run 自最后一次启动以来运行中的系统的信息,例如:当前登录的用户和运行中的守护进程。现已经被/run代替[13]。
    • /var/spool 等待处理的任务的脱机文件,例如:打印队列和未读的邮件。
    • /var/spool/mail 用户的邮箱(不鼓励的存储位置)
    • /var/tmp 在系统重启过程中可以保留的临时文件。
  • sys - 现在的Linux发行版包含一个/sys目录作为虚拟文件系统(sysfs,类似于 /proc,一个procfs),它存储且允许修改连接到系统的设备,然而许多传统UNIX和类Unix操作系统使用/sys作为内核代码树的符号链接。

Q:/lib/usr/lib/usr/local/lib的区别。
A: 简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的.

参考链接: