服务器使用简介

Table of Contents

1 登录上远程Linux服务器

登录服备器使用的是SSH服务,SSH代表Secure Shell, Secure表示数据的传输是加密的,即便从中间被监视, 得到了也只是加密后的数据,真实的数据不会泄露。登录服务器需要以下数据:

  • 服务器IP地址
  • 用户帐号与密码

在Linux下登录服务器,只需要输入

ssh your_username@example.com

根据提示输入密码,即可登录服务器。

在M$ windows系统下,可使用putty软件来连接。填入服务器的IP地址,帐号密码后,即可登录。端口号使用 其默认值22即可。

登录进入系统后,会看到一个命令提示符,提示你可以输入命令了。如下所示

[mike@c1 ~]$ 

输入pwd命令。

[mike@c1 ~]$ pwd

大概可以得到如下结果

/home/mike

这就表明已经成功地登录服务器了。

如果要传文件,Linux系统下可以用scp命令来实现。在Windows系统下,可以用winscp程序来实现。其使用与 putty类似,也需服务器IP和用户帐号与密码。

2 Linux下基本命令与操作

远程登录Linux主机,以命令行操作为主。Linux有强大的命令行工具,可以十分方便地做很多事。

成功登录上远程Linux主机后,首先看到的是一个shell。与shell相对的是kernel,就是内核。内核负责管理 计算机的各个部件,而与相对,shell(外壳)则负责用户与计算机的交互。它负责解释用户输入的命令,与 计算机内核打交道。

在命令提示符下,输入文字后,再按回车键,这一行命令就被送到shell进行解释。

[mike@c1 ~]$ mkdir dir-a dir-b

命令行以空白进行分隔。第一部分是命令名,后面是传给命令名的参数。如以上命令, mkdir 是命令名, dir-a, dir-b 是传给命令 mkdir 的参数。这个命令会新建 dir-a, dir-b, 两个目录。

命令名可以是shell里面内置的命令,或者是磁盘上的可执行程序。如 ls 命令对应 /bin/ls 可执行文件, 而 cd 命令则为shell内置。

2.1 基本文件和目录操作

Linux下的文件以目录树的形式组织起来,最顶层的目录是 /. 从顶层往下又可分为多层,每层间用 / 来分隔。 ls 命令可以查看某个目录下有哪些文件

[mike@c1 ~]$ ls /
bin   dev  home  lib64       media  mnt  opt   root  selinux  sys       tmp  var
boot  etc  lib   lost+found  misc   net  proc  sbin  srv      tftpboot  usr

可以看到,在最顶层目录下,有 bin, home, media, usr 等目录或者文件。

[mike@c1 ~]$ ls /usr
bin  games    include.tar.gz  lib    libexec  lost+found  sbin   src  X11R6
etc  include  kerberos        lib64  local    man         share  tmp

可以看到 /usr 目录下还有 bin, games 等文件或文件夹。

pwd 命令显示当前工作文件夹

[mike@c1 ~]$ pwd
/home/mike

这表明当前文件夹是在 /home/mike. 新建或者打开一个文件,都会在当前文件夹下查找或新建相应的文件。 ls 命令默认显示当前文件夹下的内容。

[mike@c1 ~]$ ls
dir-a  dir-b

可以看到刚刚新建的两个文件夹。

cd 命令用来改变当前工作目录。

[mike@c1 ~]$ cd dir-a
[mike@c1 dir-a]$ 

执行 cd dir-a 命令以后,没有输出,说明程序运行成功了。同时可以看到,命令提示符变了成了 [mike@c1 dir-a], 命令提示符往往含有当前所以目录是哪一个的信息,以方便用户。

[mike@c1 dir-a]$ pwd
/home/mike/dir-a

pwd 命令的结果可以看出,现在的工作目录成了 /home/mike/dir-a.

[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$

ls 命令的结果是无输出,表明当前文件夹下没有文件。

删除一个空文件夹的命令是 rmdir.

[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$ mkdir dir-c
[mike@c1 dir-a]$ ls
dir-c
[mike@c1 dir-a]$ rmdir dir-c
[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$ 

删除一个普通文件的命令是 rm. 我们先在当前文件夹下用 touch 命令新建一个空文件,然后使用 rm 命令将其删除。

[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$ touch new
[mike@c1 dir-a]$ ls
new
[mike@c1 dir-a]$ rm new
[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$ 

如果要删除一个非空文件夹,每一个方法是先删除其中的所有文件,使其成为空文件夹,然后使用 rmdir 命令当这个空文件夹删除。另一种办法是用带 -r 参数的 rm 命令。

[mike@c1 dir-a]$ ls
[mike@c1 dir-a]$ mkdir dir-c
[mike@c1 dir-a]$ touch dir-c/new

以上先新建了一个文件夹 dir-c, 然后在这个文件夹下新建了一个文件 new.

[mike@c1 dir-a]$ rmdir dir-c
rmdir: dir-c: Directory not empty
[mike@c1 dir-a]$ ls
dir-c

对于这个文件夹使用 rmdir 命令会出错,出错原因是文件夹非空。

[mike@c1 dir-a]$ rm -r dir-c/
[mike@c1 dir-a]$ 

使用 rm -r, 成功当文件夹 dir-c 及下面的 new 文件删除。

需要注意的是 rm -r 命令有一定的危险性,它会直接将当文件夹下所有的文件不提示地删除,且一般是无法恢 复的。

[mike@c1 dir-a]$ pwd
/home/mike/dir-a
[mike@c1 dir-a]$ cd
[mike@c1 ~]$ pwd
/home/mike
[mike@c1 ~]$ echo $HOME
/home/mike

cd 命令是改变当前工作目录的。执行不带参数的 cd 命令,可以看到,当前文件夹从 /home/mike/dir-a 切换到了 /home/mike. 这个文件夹就是我们的主文件夹。普通用户只对自己的主文件 夹有所有的权限,包括在其下面增加删除文件等。如果在其它文件夹下想要新增或删除文件,就会出错。

[mike@c1 ~]$ touch /home/new
touch: cannot touch `/home/new': Permission denied

这里试图在 /home 文件夹下新建文件 new, 但由于 mike 用户对于 /home 文件夹没有足够的权限, 这里出错了。

另外介绍一下相对路径。以 / 开头的路径是绝对路径。绝对路径唯一地指定了文件或文件夹在目录树中的 位置。而以 ... 开头的路径是指相对路径,即相对于当前文件夹的路径。=.= 表示当前目录,=..= 表示当前目录的上一层目录,即父目录。

[mike@c1 ~]$ pwd
/home/mike
[mike@c1 ~]$ cd dir-a
[mike@c1 dir-a]$ pwd
/home/mike/dir-a
[mike@c1 dir-a]$ ls ..
dir-a  dir-b
[mike@c1 dir-a]$ cd ..
[mike@c1 ~]$ pwd
/home/mike
[mike@c1 ~]$ ls
dir-a  dir-b
[mike@c1 ~]$ 

2.2 获取帮助文档

刚刚介绍了 rm -r 命令。其中 rm 是命令名,一般对应文件系统中的 /bin/rm 可执行文件。而 -r 是传给 rm 命令的参数。

ls 命令也可以带参数

[mike@c1 ~]$ ls
dir-a  dir-b
[mike@c1 ~]$ touch regular-file                                              
[mike@c1 ~]$ ls -l                                   
total 8                                              
drwxrwxr-x 2 mike mike 4096 Sep 28 09:11 dir-a       
drwxrwxr-x 2 mike mike 4096 Sep 26 17:42 dir-b       
-rw-rw-r-- 1 mike mike    0 Sep 28 09:49 regular-file.

使用带 -l 参数的 ls 命令,会每个文件占一行地文件的较为详细的信息显示出来。每一个字母如果是 d 就表明这是一个文件夹。如果是 - 表明这是一个普通文件。后面的 rwxrwxr-x 表示文件的权限设定。 两个 mike, 每一个表示这个文件属于 mike 用户,每二个表示这个文件属于 mike 组。按下来的数字 表示文件大小,以字节为单位。这个大小对于目录来说并不是内部所有文件的大小之和,而是指目录本身所占大小,因为目录 本身也是一个文件。

ls 命令还可以带其它参数而对列出来的文件进制排序等。

如此多的参数,要都记住是不现实且没有改要的。这些参数可以很方便地查到。

首先的一个方法是 man 命令。

[mike@c1 ~]$ man ls

这个命令可以查看 ls 命令的帮助手册。在出来的手册里,可以按 f,b 键进行翻页,按 q 键退出。

其它得到帮助的方法还有使用 info 命令,对一些命令可以尝试使用 --help-h 参数,以及上网查 询等(如 wikipedia).

[mike@c1 ~]$ ls --help

也可以看到 ls 命令的一些帮助信息。

2.3 编译源程序

编译程序是一个把源代码通过编译器转变成可执行程序的过程。首先,需要程序的源文件。这个源程序可以先 在自己机子上编译好,再通过 Winscp 或 scp 等传到服务器上进行编译,也可以在服务器上调用文本编辑器 新建一个。这里面我们演示一下后者。

[mike@c1 ~]$ vi hello.f90

vi 是 Linux 系统下很广泛,功能很强大的编辑器。几乎每个 Linux 系统都会自带一个,而且上手以后可以 十分迅速的进行编辑。打开 vi 编辑器以后,先输入字母 i 进入插入模式,再输入以下内容。

Program hello
   print *, "Hello World!"
End Program

输入完成以后,按 Esc 键退出插入模式,返回到命令模式。再按冒号,可以看到屏幕底行的左边出现了一个 冒号,再按 wq,确认,一个叫 hello.f90 程序就编辑好了。

[mike@c1 ~]$ ls
dir-a  dir-b  hello.f90  regular-file

如果想进一步了解 vi 编辑器,可以输入 vimtutor 命令,再按提示进行练习。这里面继续进行后面的

[mike@c1 ~]$ gfortran hello.f90 -o hello
[mike@c1 ~]$ ls
dir-a  dir-b  hello  hello.f90  regular-file

可以看到多了一个叫 hello 的文件,这就是刚刚用 gfortran 编译器编译出来的可执行程序。

[mike@c1 ~]$ ./hello 
 Hello World!

运行一下这个程序,可以看到成功的输出了结果。 ./hello 的意思是“当前目录下的 hello" 文件。这是一个相对路径。执行可执文件需要明确指定当前目 录,是出于安全性的考虑。

如果程序由多个源文件组成,则可以把这些源文件都指定为命令行参数进行编译。如程序由 main.f90functions.f90 组成

! File: main.f90
Program main
   call print_greeting
End Program
! File: functions.f90
subroutine print_greetings
   print *, "Hello world!"
end subroutine

在命令行下运行

$ gfortran -o hello main.f90 functions.f90

就可以编译出 hello 程序。

如果程序文件较多的话,可先将源文件编译成目标文件,再将目标文件链接成可执行程序。

[mike@c1 ~]$ gfortran -c functions.f90 
[mike@c1 ~]$ ls
dir-a  functions.f90  hello.f90  main.f90   regular-file
dir-b  functions.o    hello.txt  nohup.out

执行成生了 functions.o 目标文件。

[mike@c1 ~]$ gfortran -c main.f90 
[mike@c1 ~]$ gfortran main.o functions.o -o hello

也可以目标文件与源文件写在一起。如果只改变了 main.c 文件,可以执行如下命令

[mike@c1 ~]$ gfortran main.c functions.o -o hello

这将重新编译 main.c 文件,并与上次生成的 functions.o 文件链接,生成可执行文件 hello.

-l 选项是指定用来链接的库。如在安装了 lapack 库的机器上,可以用 -llapack 来链接 lapack 库。 (现在的服务器上还没安上。)

还有一个编译选项 -O, 是开启编译器优化。一般可使用参数 -O3 进行优化。

对于其它的编译器,如 gcc, g++, ifort, icc. (它们分别是 GNU 的 C 语言,C++,以及 Intel 的 Fortran, C 编译器,本服务上都己安装。),以上介绍的 -c, -o 选项是通用的。其它具体的使用,可查阅相应的 man.

$ man ifort

2.4 后台运行程序

如果想把一个程序放在后台执行,即使退出登录,程序不中断,可以用以下命令

[mike@c1 ~]$ nohup ./hello &
[1] 31128
[mike@c1 ~]$ nohup: appending output to `nohup.out'

[1]+  Done                    nohup ./hello

& 表示的是后台运行, nohup 表示即便退出登录,程序也不中断。

看程序执行的提示,31128 是进程号,唯一地标志着这个程序所在的进程。nohup.out是程序的输出所在的地 方。因为转到后台后,输入不直接显示在屏幕上,需要一个文本文件来保存。也可以用重定向来指定一个文本 文件来保存结果。

[mike@c1 ~]$ nohup ./hello > hello.txt &
[1] 31139

执行完成后,再打开 hello.txt 文件。 :vi hello.txt 可以看到

 Hello World!

这是程序输出的结果。

另一个更另灵活的方法是使用 screen 程序。它的好处在 screen 下运行的程序不会受到断开连接的影响, 下次登录时,还可以连接上原来的程序,继续进行操作。并且可以一下开多个命令行,不同的命令行窗口之间 可以方便地进行切换。

执行 screen 程序,就进入了 screen. 之后看到的情况与没有去年 screen 几乎一样。运行 ls 命令,之 后按 C-a C-c, 这表示先按住 Control 键,再按 a 键,之后以同样的方式按 C-c. 可以看到又出来了一个十 分干净的界面,这已经不是原来的那个shell了,而是一个新的。按 C-a C-a, 便又恢复到了原来的界面了。 按 C-a ", 即按了 C-a 之后按双引号键,可以看到一个列表,可以按 j, k 进行选择,之后按确认就可以切 换到相应的 shell 下面了。

C-a A 可以给screen的窗口命个名,这对区分不同的窗口有好处,而 C-a ' (单引号) 可以指定名字跳到某个 窗口。

以上介绍了怎么样添加一个 shell 窗口,及在已有的 shell 窗口音进行选择。接下来介绍一些其它常用的命令。screen 的命令以一个前缀开头, 默认是 C-a. 正常退出一个 Shell 窗口的方法是用 exit 命令,如果要强行杀死,可以用 C-a C-k.

detach 和 attatch. 在 screen 里按 C-a C-d, 会回到开启 screen 之前的那个shell中,并且屏幕上显示

[detached]

这时,screen 已经转到后台了。再输入

$ screen -r

这时又得到原来 detache 之前的那个 shell. 按 C-a " 可以看到原来的那些 shell 窗口都在。

如果有几个 screen, 当 screen -r 时,会提示选择哪一个。

% screen -r
There are several suitable screens on:
        31911.pts-2.c1  (Detached)
        15378.pts-3.c1  (Attached)
        31230.pts-2.c1  (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

只要输入一个前面几个数字,可以让 screen 判定是哪个 screen 需要 attach,就可以 attach 到那个 screen. 如

$ screen -r 319

就会 attach 到

        31911.pts-2.c1  (Detached)

这个 screen.

再次输入 C-a C-d detached 之后,退出登录,再次登录进来,运行 screen -r, 仍可恢复原来的 screen. 实际上,就算是链接直接中断了,重新登录进入后依然可以恢复到原来的 screen.

2.5 查看计算机资源使用情况

查看计算机资源的使用情况,可以用top命令。它会显示当前 CPU 和内存的使用量,以及把占用 CPU 最多 (默认)的程序放在最前面显示出来。也可以按其它的顺序排列,如内存使用量。

进入程序后按 h, 可以获得帮助信息。按 O 键可以按其它的方式排序。

Date: 2011-09-28 Wed

Author: Yu Pei

Org version 7.7 with Emacs version 23

Validate XHTML 1.0