Linux 服务器开发工具

jopen 12年前

论你使用的机器是 Windows、Linux 还是 MacOS,都可以使用工具远程登录到 Linux 服务器上去。在此我们通常使用 SSH 协议(包括 SSH-1 和 SSH-2 两个版本,它们之间不相兼容,建议使用 SSH-2),SSH 协议是一个用于安全数据通信的协议(相比下 FTP、Telnet 本质上是不安全的)。一些 Linux 发行版会预装 SSH Server,有了 SSH Server 我们就可以通过 SSH Client 使用远程服务器上的 Shell 服务。常见的 SSH Client 有(这里我使用的是 Windows 机器):

  1. SecureCRT
  2. PuTTY

通过 SecureCRT(这里使用的是 SecureCRT 7.0.1)连接到 SSH Server:
Linux 服务器开发工具 SecureCRT 的关键配置:

  1. 终端模拟配置,Option -> Session Options -> Terminal -> Emulation 处,选择 Terminal 为 Linux 并且勾选 ANSI Color。这里选择了需要模拟的终端为 Xterm,勾选 ANSI Color 表示使用 ANSI 调色板(ANSI Color Palette)
  2. SFTP(后面马上会谈到 SFTP)本地目录配置,Option -> Session Options -> Connection -> SSH2 -> SFTP Session 处可以填写本地目录(Local directory)
  3. Option -> Session Options -> Terminal -> Appearance -> Character encoding 处可以选择字符编码,这里需要选择和 Linux 服务器相匹配的编码方式。Linux 中可以通过命令 locale 查看使用的语言和编码

SecureCRT 常用的快捷键如下:

  1. Alt+B 用于在一个新的 Tab 中打开一个新的 Session
  2. Alt+P 用于在一个新的 Tab 中打开一个新的 SFTP Session
  3. Ctrl+F4 用于关闭当前 Tab
  4. Shift+Insert 用于粘贴

可以使用 Shell 之后,我们还面临的一个问题就是如何把本地的文件上传自 Linux 服务器,这里我们使用 SFTP(SSH file transfer)。在 SecureCRT 中 File -> Connect SFTP Session(或者使用快捷键 Ctrl+F4)打开 SFTP Session,常用的 SFTP 命令如下:

  1. help 命令用于获取帮助信息
  2. 工作目录相关命令
    pwd — 查看远程 Linux 服务器的工作目录
    lpwd — 查看本地工作目录
    cd — 修改远程 Linux 服务器的工作目录
    lcd — 修改本地工作目录
    ls — 列出远程 Linux 服务器的工作目录中的文件
    lls — 列出本地工作目录中的文件
    这里的 l 含义为 Local
  3. put 命令用于上传文件或者文件夹到 Linux 服务器。常见用法:
    1. put -r dir
    2. put file
    </pre>

    第一条命令用于递归的上传本地目录 dir 到远程 Linux 服务器的工作目录下
    第二条命令用于上传本地文件 file 到远程 Linux 服务器的工作目录下

    </li>
  4. get 命令用于下载文件或者文件夹到本地。常见用法:
    1. get -r dir
    2. get file
    3. </ol> </pre>

      第一条命令用于递归的下载目录 dir 到本地工作目录下
      第二条命令用于下载文件 file 到本地工作目录下

      </li> </ol>

      有了 SSH Client,我们就可以执行 Shell 命令,上传下载文件和文件夹了。

      代码编辑工具

      编辑代码的工具很多,也有各种不同的做法。一种常见的代码编辑的方式是使用 SSH Client 在远程 Linux 服务器上使用 Vim 或者 Emacs 进行代码编辑。Vim 的基本用法可以参考以下两篇文章:
      http://name5566.com/3400.html
      http://name5566.com/3402.html
      Vim 的基本的配置可以参考:
      http://code.google.com/p/name5566-vim-config/

      代码构建工具

      代码构建工具很多,常见的有 make、automake、cmake 等等。读者可以参考云风的关于 make 的相关文章:
      http://blog.codingnow.com/2008/09/replacement_of_ide_1.html
      http://blog.codingnow.com/2008/09/replacement_of_ide_2.html
      http://blog.codingnow.com/2008/09/replacement_of_ide_3.html
      http://blog.codingnow.com/2008/09/replacement_of_ide_4.html
      http://blog.codingnow.com/2008/09/replacement_of_ide_5.html
      http://blog.codingnow.com/2008/09/replacement_of_ide_6.html

      代码调试工具

      一般来说使用 gdb 进行调试,http://name5566.com/4018.html 一文介绍了一些基本的命令来满足我们在调试上的基本需要。

      版本控制工具

      在版本控制工具上,我们常见的主要是 Subversion(SVN)和 git,而后者似乎更加被 Linux 用户所喜爱。这里主要谈一下 SVN 的基本使用。
      svn 命令的用法:

      1. svn <subcommand> [options] [args]

      常用的 subcommand 如下:

      1. help
        用法:svn help [subcommand...]
        说明:用于获取一个或者多个 subcommand 的帮助信息
        范例:svn help co
      2. co(checkout)
        用法:svn co URL [PATH]
        说明:用于从版本库中签出工作副本到 PATH 目录下
        范例:svn co https://name5566-vim-bookmark.googlecode.com/svn/trunk/ name5566-vim-bookmark
      3. up(update)
        用法:svn up [PATH...]
        说明:用于将版本库的修改合并到工作副本中
        范例:svn up
      4. ci(commit)
        用法:svn ci [PATH...]
        说明:用于把工作副本的修改提交到版本库中,通常情况下,我们会和 -m 选项一起使用此子命令,-m 选项用于指定日志信息
        范例:svn ci -m “增加了新的 XXX 特性”
      5. st(status)
        用法:svn st [PATH...]
        说明:用于显示工作副本中文件和目录的状态,常常用于检测哪一些文件尚未处于版本控制中
        范例:svn st
      6. add
        用法:svn add [PAHT...]
        说明:用于把文件和目录纳入版本控制
        范例:svn add file.txt
      7. rm
        用法:
        svn rm PATH
        svn rm URL
        说明:可以用于把文件和目录从版本库中删除,rm 子命令后可以接上 URL,用于立即从版本库中删除指定项目
        范例:svn rm file.txt

      我们可以设置 vimdiff 为 subversion 的 diff 工具。首先创建一个 Shell 脚本(来源于 http://svnbook.red-bean.com/en/1.4/svn.advanced.externaldifftools.html):

      1. #!/bin/sh
      2.  
      3. # Configure your favorite diff program here.
      4. DIFF="/usr/bin/vimdiff"
      5.  
      6. # Subversion provides the paths we need as the sixth and seventh
      7. # parameters.
      8. LEFT=${6}
      9. RIGHT=${7}
      10.  
      11. # Call the diff command (change the following line to make sense for
      12. # your merge program).
      13. $DIFF $LEFT $RIGHT
      14.  
      15. # Return an errorcode of 0 if no differences were detected, 1 if some were.
      16. # Any other errorcode will be treated as fatal.

      注意修改此 Shell 脚本的权限(u+x)。然后修改 $HOME/.subversion/config 文件:

      1. [helpers]
      2. diff-cmd = diff.sh

      这里的 diff.sh 为前面所述的 Shell 脚本的路径名。

      常用命令

      这里主要介绍一下 Linux 下常用命令的一些最常见用法,实际上,很多命令远比你想象强大,这里并不做详述。

      1. grep 是 Linux 最常用的命令之一,其能够用于检索文件或者标准输出中的行,其用法如下:
        1. grep [options] PATTERN [FILE...]
        </pre>

        很多命令可能会输出大量信息而其中仅仅一小部分是我们关心的,这时候 grep 是过滤信息的利器,例如:
        ls 命令用于显示目录中的内容:

        1. $ ls -l
        2. -rw-r--r-- 1 name5566 name5566 0 Nov 2 19:22 file1
        3. -rw-r--r-- 1 name5566 name5566 0 Nov 2 19:22 file2
        4. drwxr-xr-x 29 name5566 name5566 4096 Oct 31 17:07 src
        5. drwxr-xr-x 2 name5566 name5566 4096 Oct 31 16:58 test

        假如我们只希望显示目录,可以这么使用:

        1. $ ls -l | grep ^d
        2. drwxr-xr-x 29 name5566 name5566 4096 Oct 31 17:07 src
        3. drwxr-xr-x 2 name5566 name5566 4096 Oct 31 16:58 test

        这里的 pattern ^d 含义为行首为 d。再如这样的用法:

        1. $ ls | grep -i file1

        用于判断当前目录下是否存在 file1,这里的 -i 选项表示匹配时忽略大小写。

        </li>
      2. find 命令用于通过文件名去寻找文件(grep 命令主要用于在文件中查找信息),常见用法如下:
        1. $ find . -name file1
        2. </ol> </pre>

          用于在当前目录及子目录下查找名字为 file1 的文件。要注意的是,file1 必须是一个完整的文件名而不能是文件名的一部分

          </li>
        3. ps 命令用于显示当前进程的快照,常用的选项如下:
          1. # 查看系统上的所有进程(e 的含义为 every)
          2. ps -e
          3. # 输出时使用 full 格式列表(f 的含义为 full)
          4. ps -ef
          5. # 输出时使用 long 格式列表(l 的含义为 long)
          6. ps -el
          7. # 输出 effective user 为 name 的进程
          8. ps -u name
          9. # 使用 full 格式列表
          10. ps -fu name
          11. </ol> </pre></li>
          12. kill 和 killall 命令用于发送一个信号到一个进程。如果不指定发送的信号则发送 SIGTERM。用法如下:
            1. # 向进程 ID 为 pid 的进程发送 SIGTERM 信号
            2. kill pid
            3. # 向名称为 name 的所有进程发送 SIGTERM 信号
            4. killall name
            5. </ol> </pre></li>
            6. 作业控制
            7. </ol>

              系统基本的配置

              1. 服务的启动、停止、检查
              2. 环境变量

              数据库

              在数据库方面 MySQL 仍然有自己大量的用户。常见的任务:

              1. 创建用户
              2. 数据的导出和导入
              3. SQL