服务器使用简介
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.f90
与
functions.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
键可以按其它的方式排序。