Linux的教程

 

Linux学习的目的和方向

  1. 为什么学习Linux
  1. Linux系统是银行计算机中最常用的操作系统之之一,同时也包含了Unix全部的功能和特性
  2. Linux是数据平台,数据库搭建在Linux环境之下。
  3. Linux是文件平台,数据文件存放在Linux服务器中。
  4. Linux是运行平台,执行脚本文件、Server(服务程序)运行在Linux服务器上。
  1. 银行为什么选择Linux
  1. 稳定性和高速性,与经常死机的Windows相比,Linux正是金融业所需要的运行系统。
  2. 安全性,对读写的控制,用户权限控制,为网络多用户环境中的用户提供了必要的安全保障。
  3. 丰富的网络功能,网络功能,文件传输,系统管理员和技术人员的其他系统管理窗口。

3.工作中应具备的技能

  1. 用户的管理及权限管理
  2. 赋权操作:用户赋予权限、文件赋予权限
  3. 文件编辑:vi命令。
  4. 文件上传及下载:FTP命令
  5. 执行脚本:sh脚本的编写及执行。
  6. 文件查找
  7. 进程管理
  8. 任务调度
  9. 网络状态监控
  10. 常规命令掌握

4.使用的工具

  1. SSH远程登录客户端
  2. ftp上传工具
  3. ue文本编辑器

5.扩展的技能

  1. shell脚本内容可以看懂
  2. 特殊时刻,结合书籍网络可以完成程序编写
  3. 体系架构的了解
  4. 其他命令的了解

 

6.实际应用

1) 文件上传下载

       银行数据存放数据仓库中或由数据仓库推送到指定ftp服务器目录文件夹下,通过编写shell脚本及任务调度实现自动获取数据。

2) 文件的处理

获取数据文件后,对文件进行转移,改名,校对,并进行数据库的导入。

3) 系统环境支持

后台服务调度系统环境搭建及支持。

4) 系统运行及维护

 

Linux简介

 

1、Linux的简介

Linux是完全不同于windows的一种操作系统。

Linux的核心是由Linus Torvalds在1991年的时候开发出来的。Linux沿袭了Unix许多良好的特性,最重要的也是现今非常受欢迎的原因之一就是Linux是开源的,并且在其上的软件也是免费开源的,以此为基础最后发展出来的开源社区,对整个计算机科学发展都有很重要的作用。

Linux目前有着众多的发行版,Red Hat, SuSE,Ubuntu, CentOS等为当前的应用系统版本。

2、Linux的特点

目前银行业务操作系统主要使用的操作系统是UNIX和Linux系统。这主要是由银行业务和UNIX和Linux系统的特点所致。

Linux系统是银行计算机中最常用的操作系统之之一,同时也包含了Unix全部的功能和特性,银行及金融机构选择Linux系统的最主要原因是 Linux出色的稳定性和高速性,Linux可每天24小时、每年365天不间断地连续可靠工作,数年工作而无需重启,与经常死机的Windows相比,这一优点尤为突出,也正是金融业所需要的运行系统。

Linux的八大主要特点

(1)开放性  是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。同时免费,源代码开发也是被应用的重要条件之一。

(2)多用户、交互式的分时操作系统。

不同的用户分别在不同的终端上,进行交互式操作,就好像各自独占主机一样。每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。

(3)多任务。

现代计算机的最主要的一个特点是同时执行多个程序,而且各个程序的运行互相独立。

Linux系统调度每一个进程平等地访问微处理器。由于CPU的处理速度非常快,其结果是,启动的应用程序看起来好像在并行运行。

事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户感觉不出来的。

(4)良好的用户界面。

Linux向用户提供了两种界面:用户界面和系统调用。Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,又可存在文件上脱机使用。shell有很强的程序设计能力,用户可方便地用它编制程序,从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起,形成一个Shell程序,这个程序可以单独运行,也可以与其他程序同时运行。

系统调用内核提供的、功能十分强大的一系列的函数,用户可以在编程时直接使用Linux内核中系统提供的系统调用命令。系统通过这个界面为用户程序提供低级别、高效率的服务。

Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。

(5)设备独立性。

操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。

当需要增加新设备时、系统管理员就在内核中增加必要的连接。这种连接(也称作设备驱动程序)保证每次调用设备提供服务时,内核以相同的方式来处理它们。当新的及更好的外设被开发并交付给用户时,操作允许在这些设备连接到内核后,就能不受限制地立即访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只允许一定数量或一定种类的外部设备连接。

而设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为每一个设备都是通过其与内核的专用连接独立进行访问。  

Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员加入Linux编程,会有更多硬件设备加入到各种Linux内核和发行版本中。

另外,由于用户可以免费得到Linux的内核源代码,因此,用户可以修改内核源代码,以便适应新增加的外部设备。    

(6)丰富的网络功能。

丰富的网络功能  完善的内置网络是Linux一大特点。 Linux在通信和网络功能方面优于其他操作系统。其他操作系统没有如此紧密地和内核结合在一起的连接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。

1.支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件,Internet是在Unix领域中建立并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与世界上的其他人通过Internet网络进行通信。

 2.文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。  

 3.Linux不仅允许进行文件和程序的传输,它还为系统管理员和技术人员提供了访问其他系统的窗口。通过这种远程访问的功能,一位技术人员能够有效地为多个系统服务,即使那些系统位于相距很远的地方。

(7)可靠的系统安全。

Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。

(8)良好的可移植性

Linux可移植性是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。可移植性为运行Linux的不同计算机平台与其他任何机器进行准确而有效的通信提供了手段,不需要另外增加特殊的和昂贵的通信接口。

用户管理及权限管理

1.用户管理

用户:泛指计算机的使用者。用计算机可识别的用户ID(UID,user id)标识。

用户组:用户容器,用来将多个用户合并为一个单一的逻辑组件。用计算机可识别的用户组ID(GID,group id)标识。

每个登入系统的用户,两个ID用来标识用户和在后续的权限管理中使用。用户的登入信息都会存放在/etc/passwd和/etc/group中。

  1. 用户类别:

(1)管理员用户:被称为root,系统中唯一的超级用户,相当于Windows系统中的SYSTEM用户。其具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。

(2)系统用户:为系统运行提供服务的非登陆式用户,一般不能登录。

(3)登陆用户:真正使用计算机的普通用户。

  1. 组类别:Linux系统中用户组可按三种方式划分:

与类似用户的分类方式

(1)管理员组:管理员所在组。

(2)系统用户组:系统用户所在组。

(3)登陆用户组:登陆用户所在组。

 

  1. 常用命令
  • ls -l /etc/group 查看所有的用户组及权限文件
  • vi /etc/group 查看所有的用户组及权限内容
  • ls -l /etc/passwd 查看所有用户及权限
  • vi /etc/passwd 查看所有的用户及权限的内容
  • groups 查看当前用户所在的组
  • useradd 用户名,添加用户

【案例】useradd xiaoming

  • passwd 用户名,为新用户设密码(用户只能修改自己的密码)

【案例】passwd xiaoming,修改小明的密码

  • chage 修改用户账号和密码的有效期限

【案例】chage -M 60 xiaoming,小明的密码两次改变最大间距天数为60天。

  • usermod修改用户信息

【案例】usermod -G staff xiaoming,修改小名到staff组。

  • userdel 用户名,删除用户

【案例】userdel xiaoming,删除用户但保存用户主目录

【案例】userdel ‐r xiaoming,删除用户以及用户主目录

  • logout,当前用户退出
  • who am i,当前用户是谁
  • groupadd 组名 ,添加组
  • groupmod 组名 ,修改组
  • groupdel 组名 ,删除组

 

2.管理文件权限:

  1. 文件类型  

   1)查看文件类型

[root@localhost etc]# file virc

   2)linux中不同类型的文件颜色不同

  普通文件:黑色,如:

  目录文件:蓝色,如:

  可执行性文件:绿色,如:

  包文件:红色,如:

  链接文件:青蓝色,如:

  设备文件:黄色,如:

  1. 文件权限

   Linux文件以及目录都会有所有者,而所有者又会处于某个用户组,这样导致了文件的权限有了对象。也就是三种对象,对于文件所有者,以及对于所有者所在的组,然后就是其他的人。权限分为三种,读,写,执行。

使用ls –al命令可以查看当前目录下的文件的各种属性,如下所示。

其中drwxr-xr-x中的rwx代表的就是权限。  

$ ls -al  

total 2593852  

drwxr-xr-x  153 rd       work         8192 Jan  6 11:59 .

drwxr-xr-x   26 root     root         4096 Nov 26  2009 ..

-rw-r--r--    1 rd       work        59311 Nov 13  2008 0

-rw-r--r--    1 rd       work          595 Nov 13  2008 0.sh  这里有10位,第一位代表文件类型,比如d代表目录,l代表链接,-代表普通文件。后面是连续的rwx,每三位分别对应于文件所有者,所有者组,其他人,其中代表拥有r读w写x执行权限,若相应的位上是’-‘代表不拥有相应权限。  

改变权限,使用chgrp,chown,chmod分别可以改变文件的所有者,文件所有者组,文件的权限。

  1. chgrp   改变文件或目录所属的组。
  2. chown指定文件的拥有者改为指定的用户或组。
  3. chmod 改变文件权限。

使用chmod有两种重要的方式。一是使用8进制数字模式,

读R(4)+写W(2)+执行X(1),rwxrwxrwx对应于777,rw-r—r—对应于644,例如chmod 777 file,另外一种是使用字符模式:Chmod u+x abc.sh就是为文件abc.sh增加执行权限。

目录的权限,由于目录与普通文件有区别,因此这个权限的含义也是有很大的不同的。R 代表拥有对目录结构列表的读取权限,这样也就是说用vim可以直接打开目录,看到其中的一些文件名称,所以使用ls是可以列出其中的文件或目录。W 代表你可以改变目录的结构列表,这样一位这你拥有很多权利,比如建立新的文件或目录,删除文件或目录(忽略其本身的权限),重命名以及移动文件或目录。X 意味着你是否可以进入此目录将其作为当前的工作目录。

  1. 常用命令

“.”代表当前目录,“..”代表父目录,“~”代表家目录。

pwd 显示当前的工作目录。  

cd   进入目录将该目录作为工作目录。

mkdir创建目录。

rmdir删除空目录。  

ls    最常见的一个命令,列出目录下的文件的信息。

cp   复制一个文件或者目录。

rm   删除一个文件或目录。  

mv   移动一个目录或文件,可以实现重命名。

cat   由第一行开始显示文件内容。  

tac   从最后一行开始显示,可以看出tac是cat的倒写。

nl   显示的时候,输出行号。

more 分页的显示档案内容。  

less  与more 类似,但是比 more 更好的是,他可以往前翻页。 head 查看头几行

tail  查看尾几行  

od  以二进制的方式读取文件内容!  

touch更改文件的相关属性,文件不存在时会创建文件。  环境变量$PATH保存着这些命令的目录,使得键入命令式不用输入目录,系统会自动去搜索。另外文件还有很多属性,比如suid等。

 

文件编辑:vi命令

vi编辑器是所有Unix及Linux系统下标准的编辑器,对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它的功能十分强大,这里简单地介绍一下它的用法和一小部分指令。

1、vi的基本概念

vi编辑器有三种工作方式:命令方式、输入方式和ex转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换。

  1. 命令方式

进入vi编辑器,并处于vi的命令方式。此时,从键盘上输入的任何字符都被作为编辑命令来解释,例如,a(append)表示附加命令,i(insert)表示插入命令,x表示删除字符命令等。如果输入的字符不是vi的合法命令,则机器发出“报警声”,光标不移动。另外,在命令方式下输入的字符(即vi命令)并不在屏幕上显示出来,例如,输入i,屏幕上并无变化,但通过执行i命令,编辑器的工作方式却发生变化:由命令方式变为输入方式。

  1. 输入方式

   通过输入vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令(c)或取代命令(r)可以从命令方式进入输入方式。

   在输入方式下,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当做该文件的正文。进入输入方式后,输入的可见字符都在屏幕上显示出来,而编辑命令不再起作用,仅作为普通字母出现。例如,在命令方式下输入字母i,进到输入方式,然后再输入i,就在屏幕上相应光标处添加一个字母i。

由输入方式回到命令方式的办法是按下Esc键。如果已在命令方式下,那么按下Esc键就会发出“嘟嘟”声。为了确保用户想执行的vi命令是在命令方式下输入的,不妨多按几下Esc键,听到嘟声后再输入命令。

  1. ex转义方式

vi –E 进入ex模式。也可以在vi的命令模式下,输入一个冒号(:)。作为ex命令提示符,冒号出现在状态行(通常在屏幕最下一行)。按下中断键(通常是Del键),可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的(例如,读取文件,把编辑缓冲区的内容写到文件中等)。转义命令执行后,自动回到命令方式。

例如:

:1,$s/I/i/g 按Enter键

  以上命令为,从文件第一行至文件末尾($)将大写I全部替换成小写i。

vi编辑器的三种工作方式之间的转换如图所示:

2、vi常用命令

Ctrl+u 向文件首翻半屏;

Ctrl+d 向文件尾翻半屏;

Ctrl+f          向文件尾翻一屏;

Ctrl+b 向文件首翻一屏;

Esc 从编辑模式切换到命令模式;

ZZ 命令模式下保存当前文件所做的修改后退出vi;

:行号  光标跳转到指定行的行首;

:$  光标跳转到最后一行的行首;

x或X    删除一个字符,x删除光标后的,而X删除光标前的;

D 删除从当前光标到光标所在行尾的全部字符;

  r 修改单个字符

 cw 修改整个单词

 cc 修改整行(把当前行删除后进行插入)

 R 进行替换模式

dw 删除单词

dd  删除光标行正行内容;

{count} dd 删除当前行及其后{count} -1行;

{count} yy 将当前行及其下{count}行的内容保存复制,{count}为一个数字;

{count} yw 将当前行及其下{count}个单词的内容保存复制,{count}为一个数字;

p 粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的后方;

P 粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的前方;

/字符串 文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;

?name 文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;

a,bs/F/T 替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;

a 在当前字符后添加文本;

A 在行末添加文本;

i 在当前字符前插入文本;

I 在行首插入文本;

o 在当前行后面插入一空行;

O 在当前行前面插入一空行;

u 撤销最后一次操作;

U 撤销本行操作;

:wq 在命令模式下,执行存盘退出操作;

:w 在命令模式下,执行存盘操作;

:w! 在命令模式下,执行强制存盘操作;

:q 在命令模式下,执行退出vi操作;

:q! 在命令模式下,执行强制退出vi操作;

:e文件名 在命令模式下,打开并编辑指定名称的文件;

:n 在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;

:f 在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;

:set number 模式下,用于在最左端显示行号;

:set nonumber 在命令模式下,用于在最左端不显示行号;

文件传输:FTP上传及下载

 

Linux FTP是ARPANet的标准文件传输协议,FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是LINUX操作系统下使用FTP,都会遇到大量的FTP内部命令,该网络就是现今Internet的前身。通常我们使用ftp命令,主要是上传和下载文件,ftp登陆的用户一般都是一些虚拟用户,用于安全考虑。

如果没有ftp 提示: -bash: ftp: command not found

请先安装ftp应用程序: yum install ftp

ftp的ssh执行命令如下

1、连接ftp服务器

格式:ftp [-dignv][主机名称或IP地址]

参  数:

 -v   显示指令执行过程。

 -n   不使用自动登陆。

-g 关闭本地主机文件名称支持特殊字符的扩充特性。

 -i   关闭互动模式,不询问任何问题。

 -d   详细显示指令执行过程,便于排错或分析程序执行的情形。

 

例子:登录 124.16.144.120,命令

a)在linux命令行下输入:ftp 124.16.144.120

b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可。

2、下载文件

下载文件通常用get和mget这两条命令:

a) get 格式:get [remote-file] [local-file]

将文件从远端主机中传送至本地主机中.

如要获取服务器上/ftp/1.rar,则

ftp> get /ftp/1.rar 1.rar (回车)

b) mget 格式:mget [remote-files]

从远端主机接收一批文件至本地主机.

如要获取服务器上/ftp下的所有文件,则

ftp> cd /ftp

ftp> mget *.* (回车)

注意:文件都下载到了linux主机的当前目录下。

3、上传文件

a) put 格式:put local-file [remote-file]

将本地一个文件传送至远端主机中.

如要把本地的1.zip传送到远端主机/ftp,并改名为1.rar

ftp> put 1.zip /ftp1.rar (回车)

b) mput 格式:mput local-files

将本地主机中一批文件传送至远端主机.

如要把本地当前目录下所有rar文件上传服务器/ftp 下

ftp> cd /ftp (回车)

ftp> mput *.rar (回车)

4、断开连接

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

 

5、FTP有ASCII和Binary两种传输模式。

Binary模式不会对数据进行任何处理。

Ascii模式会将回车换行转换为本机的回车字符。

由于WINDOWS和UNIX的行结束符不一样。所以从WINDOWS用Binary传输方式传输文本文件到UNIX时可能会出现^M。同样从UNIX用Binary方式传输文件到WINDOWS时,也可能出现回车换行显示不正确的问题。

 

6、ftp的hash参数

切换已传输的每个数据块的数字签名 (#) 打印。数据块的大小是2048 字节。默认情况下,散列符号打印是关闭的。

 

Linux shell中使用ftp自动下载上传文件

FTP自动登录批量下载文件

从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup

!/bin/bash

ftp -v -n 192.168.1.171

user guest 123456

binary

cd /home/data

lcd /home/databackup

prompt

mget *

close

bye

FTP自动登录批量上传文件

从ftp服务器192.168.1.171上的/home/data 到本地的/home/databackup

#!/bin/bash

ftp -v -n 192.168.1.171 << EOF

user guest 123456     --   用户名和密码

binary

hash

cd /home/data

lcd /home/databackup   --  打开本地的目录信息

prompt

mput * 

bye

EOF

 

 

执行脚本:sh脚本编辑与执行

 

1、shell的概述

   每个人在成功登陆linux后,系统会出现不同的提示符号,例如$、~、#等,然后就可以开始输入需要的命令,若是命令正确,系统就会依据命令的要求来执行,直到注销系统为止;在登录到注销期间,输入的每个命令都会经过解释及执行。而这个负责的机制就是shell。作为命令语言互动式地解释和执行用户输入的命令只是shell功能的一个方面。shell还可以用来进行程序设计。它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中批处理文件,称为shell script,又叫shell程序或shell命令文件。

  1. shell的分类

Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。

不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#!/bin/bash。

Shell名称

开发者

命令名称

Bourne

S.R.Bourne

/bin/sh

C

Bill Joy

/bin/csh

Korn

David

/bin/ksh

  1. shell的使用
  1. shell命令使用

命令历史和互动:用上下箭头键可以重复以前所输入的命令。

命令完成功能:用tab键能自动完成相关命令,再次按tab可得到清单。

[Ctrl]+c 中断当前命令的组合键。

[Ctrl]+d 键盘输入结束,可以用来取代exit的输入。

  1.  shell脚本文件:
  • 是一个文本文件
  • 命令的集合
  • 有执行的权限
  • 执行方式(./文件名)

用户登录后自动执行的shell脚本文件

  1. shell编写格式

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。

后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。

编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。

执行脚本的时候,要先将脚本文件的属性改为可执行的:

chmod +x filename.sh

执行脚本的方法是:

./filename.sh

sh /filename.sh

下面我们从经典的“hello world”入手,看一看最简单的Shell脚本的模样。

#!/bin/sh

#print hello world in the console window

a = "hello world"

echo $a

Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。新的变量会在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进程都不能访问本地变量。这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。

变量赋值的方式是:

variable_name = variable_value

如果对一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加$,$variable_name可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号来区分,例如:

echo "Hi, $as"

不会输出“Hi, hello worlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:

echo "Hi, ${a}s"

单引号中的变量不会进行变量替换操作。

关于变量,还需要知道几个与其相关的Linux命令。

env用于显示用户环境区中的变量及其取值;

set用于显示本地数据区和用户环境区中的变量及其取值;

unset用于删除指定变量当前的取值,该值将被指定为NULL;

export命令用于将本地数据区中的变量转移到用户环境区。

 

下面我们来看一个更复杂的例子,结合这个例子,我们来讲述Shell Script的语法。

 

1 #!/bin/bash

2 # we have less than 3 arguments. Print the help text:

3 if [ $# -lt 3 ]; then

4 cat<<HELP

5 ren - renames a number of files using sed regular expressions

7   USAGE: ren 'regexp' 'replacement' files

8   EXAMPLE: rename all *.HTM files in *.html:

 9   ren 'HTM$' 'html' *.HTM

10 

11 HELP

12      exit 0

13 fi

14 OLD="$1"

15 NEW="$2"

16 # The shift command removes one argument from the list of

17 # command line arguments.

18 shift

19 shift

20 # $* contains now all the files:

21 for file in $*; do

22 if [ -f "$file" ]; then

23     newfile=`echo "$file" | sed  "s/${OLD}/${NEW}/g"`

24         if [ -f "$newfile" ]; then

25             echo "ERROR: $newfile exists already"

26         else

27             echo "renaming $file to $newfile "

28             mv "$file" "$newfile"

29         fi

30 fi

31 done

前面两行上一个例子中已经解释过了,从第三行开始,有新的内容。if语句和其他编程语言相似,都是流程控制语句。它的语法是:

if …; then

elif …; then

else

fi

 

与其他语言不同,Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:

[ -f "$file" ] 判断$file是否是一个文件

[ $a -lt 3 ] 判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于

[ -x "$file" ] 判断$file是否存在且有可执行权限,同样-r测试文件可读性

[ -n "$a" ] 判断变量$a是否有值,测试空串用-z

[ "$a" = "$b" ] 判断$a和$b的取值是否相等

[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错。

$#表示包括$0在内的命令行参数的个数。在Shell中,脚本名称本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。

现在我们明白第三行的含义是如果脚本文件的参数少于三个,则执行if和fi语句之间 的内容。

然后,从第四行到第十一行之间的内容在Shell Script编程中被称为Here文档,Here文档用于将多行文本传递给某一命令。Here文档的格式是以<<开始,后跟一个字符串,在 Here文档结束的时候,这个字符串同样也要出现,表示文档结束。在本例中,Here文档被输出给cat命令,也即将文档内容打印在屏幕上,起到显示帮助信息的作用。

第十二行的exit是Linux的命令,表示退出当前进程。在Shell脚本中可以使用所有的Linux命令,利用上面的cat和exit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本的长度。

十四、十五两句是赋值语句,分别将第一和第二参数赋值给变量OLD和NEW。紧接下来的两句是注释,注释下面的两条shift的作用是将参数列表中的第一个和第二个参数删除,后面的参数依次变为新的第一和第二参数,注意参数列表原本也不包括$0。

然后,自二十一行到三十一行是一个循环语句。Shell Script中的循环有下面几种格式:

while [ cond1 ] && { || } [ cond2 ] …; do

done

 

for var in …; do

done

 

for (( cond1; cond2; cond3 )) do

done

 

until [ cond1 ] && { || } [ cond2 ] …; do

done

 

在上面这些循环中,也可以使用类似C语言中的break和continue语句中断 当前的循环操作。

第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式 进行搜索。

第二十三行中l,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。此后,判断newfile是否已经存在,否则就把file改成newfile。这样我们就明白这个脚本的作用了,Shell Script编写的其他脚本与此相似,只不过是语法和用法稍有不同而已。

 

通过这个例子我们明白了Shell Script的编写规则,但还有几件事情需要讲述一下。

第一个,除了if语句之外,Shell Script中也有类似C语言中多分支结构的case语句,它的语法是:

 

case var in

pattern 1 )

… ;;

pattern 2 )

… ;;

*)

… ;;

esac

 

我们再就下面一个例子,看看case语句的用法。

while getopts vc: OPTION

do

case $OPTION in

c) COPIES=$OPTARG

     ehco "$COPIES";;

v) echo "suyang";;

\?) exit 1;;

esac

done

 

上面的getopts类似于C语言提供的函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。getopts的语法如下:

getopts option_string variable

option_string中包含一串单字符选项,若getopts在命令行参数中 发现了连字符,那么它会将连字符之后的字符与option_string进行比较,若匹配成功,则把变量variable的值设为该选项,若无匹配,则把 变量的值设为?。有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。

上面这个循环的作用就是依次取出脚本名称后面的选项,进行处理,如果输入了非法选项,则进入"?指定的部分,退出脚本程序。

第二个,Bash提供了一种用于交互式应用的扩展select,用户可以从一组不同的值中进行选择。其语法如下:

 

select var in …; do

break;

done

 

例如,下面这段程序的输出是:

#!/bin/bash

echo "Your choice?"

select var in "a" "b" "c"; do

break

done

echo $var

----------------------------

Your choice?

1) a

2) b

3) c

第三,Shell Script中也可以使用自定义的函数,其语法形式如下:

functionname()

{

}

 

例如我们可以把上面第二个例子中第四到第十二行放入一个名为help函数体内,以后每次调用的时候直接写help即可。函数中处理函数调用参数的方法是,直接用上面讲过的$1、$2来分别表示第一、第二个参数,用$*表示参数列表。

 

第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。

 

sh -x filename.sh

 

这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

文件查找

 

搜索文件find、which、whereis、locate:

  • which 寻找“执行文件”
    • -a 将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称
  • whereis 寻找特定文件   whereis [-bmsu] 文件或目录
    • -b : 只找二进制文件
    • -m : 只找在帮助文件manual路径下的文件
    • -s : 只找源文件
    • -u : 没有帮助文件的文件
  • locate [filename]
    • 例:  locate passwd
  • find,搜索文件及目录。在linux中,因为文件系统是以级别式的结构来组成的,所以要在整个系统中找到特定的文件和目录并不是件容易的事。而“find”命令可以解决上述问题
    • 在特定的目录下搜索并显示指定名称的文件和目录

【案例】find / -name man:意思是说从根目录开始搜索名称为man的文件或目录

    • 搜索一段时间内被存取/变更的文件或目录

【案例】find /home -amin -10:十分钟内存取的文件或目录

【案例】find /home -atime -10:十小时内存取的文件或目录

【案例】find /home -cmin -10:十分钟内更改过的文件或目录

【案例】find /home -ctime +10:十小时前更改过的文件或目录

    • 搜索指定大小的文件

【案例】find /home -size +10k:意思是说查找/home目录下大小为10k的文件

查看进程

  • 在linux 中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号
  • 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
  • 每个进程都可能以两种方式存在的,前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
  • 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束

进程与线程

进程:就是正在执行的程序

线程

      1. 轻量级的进程
      2. 进程有独立的地址空间,线程没有
      3. 线程不能独立存在,它是由进程创建
      4. 相对讲,线程耗费的CPU和内存要小于进程

 

进程的管理

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的情况,可以不加任何参数,显示详细的进程信息

ps ‐a:显示当前终端的所有进程信息

ps ‐u:以用户的格式显示进程信息

ps ‐x:显示后台进程运行的参数

ps显示的信息选项:

字段

说明

PID

进程识别号

TTY

终端机号

TIME

此进程所消CPU时间

CMD

正在执行的命令或进程名

 

终止进程kill/killall

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程,使用kill命令来完成此项任务

终止某个进程:kill 进程号

【案例】kill 16251:终止进程号为16251的进程

【案例】kill -9 16251:因为有些进程会捕捉某些信号,如果直接不能结束进程可以用“-9”传送信息

killall:杀死同名的所有进程

 

动态监控进程

top命令与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程

监视特定用户

top:输入此命令,按回车键,查看执行的进程

u:然后输入“u”回车,再输入用户名,即可

终止指定的用户

top:输入此命令,按回车键,查看执行的进程

k:然后输入“k”回车,再输入要结束的进程ID号

指定系统状态更新的时间

top d 10:指定系统更新进程的时间为10秒

 

top显示选项解释

  • 1:52,表示系统启动了多久
  • 1 user,用户数
  • load average:0.00 0.00 0.00,当前系统负载情况,一般来说,参数越小,系统运行的越轻松,当平均数>0.6时,系统就很紧张了
  • 38 processes,进程数
  • 0 zombie,僵尸进程数,相当于这个进程没有用了,还占用资源,比如父进程来不及收回子进程
  • CPU states:99.3% idle,闲置的CPU
  • Mem,内存
  • Swap,类似于虚拟内存

 任务调度

 

  概述

任务调度:是指系统在某个时间执行的特定的命令或程序

任务调度分类:

  • 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
  • 个别用户工作:个别用户可能希望执行某些程序

 

任务调度命令

设置任务调度文件:/etc/crontab

设置个人任务调度,执行crontab e命令,接着输入任务到调度文件

【案例】5 * * * * ls l /etc/ > /tmp/to.txt,意思说每小时的第五分钟执行ls命令

 

调度文件的规则

字段名称

说明

范围

分钟

每小时中的第几分钟执行

0-59

小时

每天的第几个小时执行

0-23

日期

每月的第几天执行

1-31

月历

每年的第几个月执行

1-12

星期

每周的第几天执行

0-6

 

使用任务调度

  • 设置任务
    • crontab ‐e
  • 每隔一定时间去执行date > /home/mydate2
    • 希望每天凌晨2:00去执行 date >> /home/mydate2,可以在crontab ‐e中加入:0 2 * * * date >> /home/mydate2
    • 希望每分钟去执行:在crontab ‐e中加入:* * * * * date >> /home/mydate2
  • 怎样去调度多个任务
    • 在crontab ‐e中直接写多个命令(不推荐)
    • 可以把所有的任务,写入到一个可执行文件(shell编程)
  • 终止任务调度
    • crontab ‐r:终止任务调度
    • crontab l:列出当前有哪些任务调度

 

网络状态监控

显示网络统计信息的命令netstat

此命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传递数据、或是路由表内容,此命令直接输入即可使用

  • netstat anp
    • an,按一定顺序排列输出
    • p,表示显示哪个进程在调用

 

检测主机连接命令ping

是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的介质是否为断、网线是否脱落或网卡故障

  • ping 对方ip地址

 

显示数据包经过历程命令traceroute

此命令可以直接输入使用,用来检测数据包在网络上传输的过程,从本机到远程的主机完整路径,帮助管理员解决问题

 

显示路由表route

所谓路由是指将数据由来源网络送往目的网络的操作。在大型网络中,路由是非常复杂的,因为数据包在抵目的地时,可能经过的节点有很多,路由表是存储在路由器或一些其他链接设置上的窗体。其中记录着了到指定目的的网络路径,以及这些路径的相关数值

此命令可以直接输入使用,来查看本机路由的情况

 

常用命令掌握

 

1、cd命令

这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:

cd /root/Docements # 切换到目录/root/Docements  

cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录    

cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录  

2、ls命令

这是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多,下面就列出一些我常用的参数吧,如下:

-l :列出长数据串,包含文件的属性与权限数据等  

-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)  

-d :仅列出目录本身,而不是列出目录的文件数据  

-h :将文件容量以较易读的方式(GB,kB等)列出来  

-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来  

注:这些参数也可以组合使用,下面举两个例子:

ls -l #以长数据串的形式列出当前目录下的数据文件和目录  

ls -lR #以长数据串的形式列出当前目录下的所有文件  

3、grep命令

该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为

grep [-acinv] [--color=auto] '查找字符串' filename  

它的常用参数如下:

-a :将binary文件以text文件的方式查找数据  

-c :计算找到‘查找字符串’的次数  

-i :忽略大小写的区别,即把大小写视为相同  

-v :反向选择,即显示出没有‘查找字符串’内容的那一行  

# 例如:  

# 取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色  

grep --color=auto 'MANPATH' /etc/man.config  

# 把ls -l的输出中包含字母file(不区分大小写)的内容输出  

ls -l | grep -i file  

 

4、cp命令

该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:

-a :将文件的特性一起复制  

-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份  

-i :若目标文件已经存在时,在覆盖时会先询问操作的进行  

-r :递归持续复制,用于目录的复制行为  

-u :目标文件与源文件有差异时才会复制  

例如 :

cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2  

cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中  

5、mv命令

该命令用于移动文件、目录或更名,move之意,它的常用参数如下:

-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖  

-i :若目标文件已经存在,就会询问是否覆盖  

-u :若目标文件已经存在,且比目标文件新,才会更新  

注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。

例如:

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中  

mv file1 file2 # 把文件file1重命名为file2  

6、rm命令

该命令用于删除文件或目录,remove之间,它的常用参数如下:

-f :就是force的意思,忽略不存在的文件,不会出现警告消息  

-i :互动模式,在删除前会询问用户是否操作  

-r :递归删除,最常用于目录删除,它是一个非常危险的参数  

例如:

rm -i file # 删除文件file,在删除之前会询问是否进行该操作  

rm -fr dir # 强制删除目录dir中的所有文件   

7、file命令

该命令用于判断接在file命令后的文件的基本数据,因为在Linux下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:

file filename  

#例如:  

file ./test  

8、tar命令

该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。它的常用参数如下:

-c :新建打包文件  

-t :查看打包文件的内容含有哪些文件名  

-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中  

-j :通过bzip2的支持进行压缩/解压缩  

-z :通过gzip的支持进行压缩/解压缩  

-v :在压缩/解压缩过程中,将正在处理的文件名显示出来  

-f filename :filename为要处理的文件  

-C dir :指定压缩/解压缩的目录dir  

上面的解说可以已经让你晕过去了,但是通常我们只需要记住下面三条命令即可:

压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称  

查询:tar -jtv -f filename.tar.bz2  

解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录  

注:文件名并不定要以后缀tar.bz2结尾,这里主要是为了说明使用的压缩程序为bzip2

 

9、cat命令

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:

 

cat text | less # 查看text文件中的内容  

# 注:这条命令也可以使用less text来代替  

10、time命令

该命令用于测算一个命令(即程序)的执行时间。它的使用非常简单,就像平时输入命令一样,不过在命令的前面加入一个time即可,例如:

time ./process  

time ps aux  

在程序或命令运行结束后,在最后输出了三个时间,它们分别是:

user:用户CPU时间,命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;

system:系统CPU时间,命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和;

real:实际时间,从command命令行开始执行到运行终止的消逝时间;

 

注:用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值