Mac下使用命令行登陆ftp

最近使用forklift下载服务器pureftp上的东西,总是断断续续的,经常下载到99%然后显示下载失败,非常不舒服!原以为是forklift的问题,换了transmit发现同样有这样的现象。看来是ftp服务器搭的有问题~~不过因为用的不多,目前懒的解决了,暂时用Mac的终端命令来用着。其实效率也是蛮高的哦=。=

默认的本地目录是home。 输入help即可获得所有命令的帮助。

  1. 连接ftp服务器

man ftp 可以看到有这些信息。

NAME ftp – Internet file transfer program SYNOPSIS ftp [-46AadefginpRtvV] [-N netrc] [-o output] [-P port] [-q quittime] [-s srcaddr] [-r retry] [-T dir,max[,inc]] [[user@]host [port]] [[user@]host:[path][/]] [file:///path] [ftp://[user[:password]@]host[:port]/path[/][;type=X]] [http://[user[:password]@]host[:port]/path] […] ftp -u URL file […]

连接服务器的话基本上就用到上面的讯息了。原本没有看man手册,一直使用

ftp user@xxx.com port

每次都要输入密码。后来还是用了下面这个更加简单的

ftp ftp://user:passwd@xxx.com:port
  1. 浏览文件

    命令和Windows、Linux的命令基本相同

     ftp> cd Documents
     ftp> ls		
     ftp> dir
    
  2. 下载上传文件

     put filename - Upload a file to the server
    	
     get filename - Download a file from the server
    	
     mput filename - Put multiple files on the server
    	
     mget filename - Get multiple files on the server
    
  3. 断开连接

    bye:中断与服务器的连接。

     ftp> bye
    
  4. 大部分的命令如下,可敲入man ftp获得

     ls – list the contents of a directory on the FTP server
     cd – change the working directory on the FTP server
     pwd – show the current directory on the FTP server
     get – download files from the FTP server
     put – upload files to the FTP server
     account – include a password with your login information
     bye – terminate an ftp session and close ftp (or use disconnect to simply terminate a session)
     bell – make a cute sound after each file transfer is done
     chmod – change permissions
     delete – your guess is as good as mine (OK, you got me, it’s to delete a file off the server)
     glob – enable globbing
     hash – only functional in Amsterdam
     help – get help
     lpwd – print the local working directory for transfers
     mkdir – create folders on the FTP server
     rmdir – delete folders from the FTP server
     newer – only get a file if it’s newer (great for scripting synchronizations)
     nmap – use positional parameters to set filenames
     passive – use FTP passive mode
     prompt – allows the use of letters to automate answers to prompts
     rate – limit the speed of an upload or download
    

关于ftp,你甚至还可以写脚本进行文件操作,比如

	#!/bin/bash
	ftp -d krypted.com << ftpEnd
	prompt
	cd /Library/WebServer/Documents
	put “*.html”
	put “*.php”
	cd /Library/WebServer/Documents
	put “*.png”
	quit
	ftpEnd

	#!/bin/bash
	ftp -d krypted.com << ftpEnd
	prompt
	cd /My/Documents
	get “*.doc”
	quit
	ftpEnd

在你的脚本中,可以使用以下几个字符获取一些特定的变量:

%/ – the current working directory of the FTP server
%M – the hostname of the FTP server
%m – the hostname only up to the .
%n – the username used for the FTP server

最后有一个问题,为什么老是有不明的人/机器想登陆我的FTP?= =不过自己也是只有使用的时候才会开。

ftp-log


快捷键之tmux

这份常用快捷键是基于Maximum-Awesome的,最主要的区别是把 Ctrl + b (这是 tmux 的默认前缀键)改为了Ctrl + c ,不全面但足够日常使用。如果你还没有安装,参考我的上一篇文章使用Maximum Awesome

具体的配置可以查看 Home 目录下的 .tmux.conf 文件,还比较易懂。

窗口

C-a c		新建窗口
C-a space 下一个窗口
C-a bspace 上一个窗口
C-a v 纵向切割窗口
C-a s 横向切割窗口
C-a w 以菜单方式列出所有会话,显示及选择窗口
C-a & 关闭窗口
C-a , 重命名窗口
C-a d 将当前会话放到后台,但不关闭
C-a f	搜索pane的名字

面板操作

C-a h/j/k/l 选择面板
C-a a 上一个面板
C-a ; 上一个面板
C-a q 显示面板编号
C-a x 关闭面板
C-a z 当前panel最大化
C-a m mark颜色当前panel

面板布局

C-a enter 面板下一种布局(均分、全纵向、全横向、主横向、主纵向)
C-a C-o 逆时针旋转面板
C-a + 主面板 - 横向
C-a = 主面板 - 纵向
C-a(按住不放) 方向键 上下左右扩展边界

操作

C-a : 输入命令
	这个很有趣,你看到的.tmux.conf里的命令,都可以直接这样敲
C-a r 重载配置文件
C-a L 清除历史
C-a d 退出tumx,并保存当前会话

C-a [ 复制模式,(可以使用方向键滚动查看历史记录)
C-a ] 粘贴模式

其它

由于是在服务器上设置的tmux,默认的复制粘贴有问题,修改成了vim的经典模式:v选择,y复制,如下:

bind-key -t vi-copy v begin-selection
bind -t vi-copy y copy-selection

参考资料


使用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添加输入的时间