第二周

第二周(9.14-9.20):
 

学习计时:共xxx小时

读书:

代码:

作业:

博客:

一、学习目标

1. 能够独立安装Linux操作系统  
2. 能够熟练使用Linux系统的基本命令  
3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等
4. 熟练应用“搜索”进行举一反三的学习
 

二、学习资源

1. 课程资料:https://www.shiyanlou.com/courses/413   实验一,课程邀请码:W7FQKW4Y

2. Linux 基础入门:https://www.shiyanlou.com/courses/1(重点,第一次课考核内容全部从这里面出)

3.  Linux命令:en   cn

三、学习方法

1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第一周学习总结”

四、学习任务

(提示:请将要求学生完成的任务、测验或思考题列在此处)

1. 重点学习 cheat/find/locate/grep/man/whereis/which/apt-get

   查找帮助文档、各种示例多多练习,这几个命令会贯穿我们整个学习的学习,掌握这几个命令就可以很好学习其他命令了。

2. 这学期需要掌握的命令有ac,apt-get,bzip2,cat,chgrp,chmod,chown,clear,compress,cp,dd,df,diff,du,dump,evn,find,finger,free,grep,gzip,head,kill,less,ln,locate,l,gout,ls,man,mkdir,more,mount,mt,mv,netstat,nslookup,od,passwd,patch,ps,pstop,pwd,rm,shell,sort,ssh,stty,tail,tar,telnet,touch,tree,uname,unzip,vi,vim,whereis,which,who,write等

3. 测试示例:

  • 请在虚拟机中安装DDD软件(其他软件)
  • 请演示怎么判断DDD软件能不能安装
  • 请查找系统中50M以上的文件
  • 请查找系统中两天前修改过的且小于5M的文件
  • 请问如何查找操作系统的信息
  • 请查找当前目录下所有*.c文件中哪个文件中包含main函数
  • 请建立一个目录,里面建立两个子文目录,如何一条命令删除三个目录?
  • 如何把一个目录及子目录拷贝到自己的主目录中
  • ...

 

、后续学习预告(可选):

Linux下C语言编程基础:
VIM进行编辑
GCC进行编译
GDB进行调试
Make进行自动化

、学习过程

Linux 就是一个操作系统

Linux 与 Windows 到底有哪些不同

 

1.免费与收费

 

最新正版 Windows8.1 官方售价 ¥888;

Linux 免费或少许费用。

2.软件与支持

 

Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务;

Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和自由软件社区提供支持。

3.安全性

 

Windows 平台:三天两头打补丁安装系统安全更新,还是会中病毒木马;

Linux 平台:要说 Linux 没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比 Windows 平台要更加安全,使用 Linux 你也不用装某杀毒,某毒霸。

4.使用习惯

 

Windows:普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单;

Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导(这正是我们要做的事情),一旦熟练之后效率极高。

5.可定制性

 

Windows:这些年之前算是全封闭的,系统可定制性很差;

Linux:你想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。

6.应用范畴

 

或许你之前不知道 Linux ,要知道,你之前在 Windows 使用百度,谷歌,上淘宝,聊 QQ 时,支撑这些软件和服务的,是后台成千上万的 Linux 服务器主机,它们时时刻刻都在进行着忙碌的数据处理和运算,可以说世界上大部分软件和服务都是运行在 Linux 之上的。

 

7.Windows 没有的

 

稳定的系统

安全性和漏洞的快速修补

多用户

用户和用户组的规划

相对较少的系统资源占用

可定制裁剪,移植到嵌入式平台(如安卓设备)

可选择的多种图形用户界面(如 GNOME,KDE)

8.Linux 没有的

 

没有特定的支持厂商

游戏娱乐支持度不足

专业软件支持度不足

 

 

Linux终端

inux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,在物理机系统上你可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换,不过在我们的在线实验环境中可能无法切换,因为特殊功能按键会被你主机系统劫持。当你切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]+[Alt]+[F7]来完成。

Shell 是指“提供给使用者使用界面”的软件(命令解析器)。

在 UNIX/Linux 中比较流行的常见的 Shell 有 bash,zsh,ksh,csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是zsh 和 xfce。

使用Tab键来进行命令补全,补全目录,补全命令参数。

使用Ctrl+c键来强行终止当前程序(你可以放心它并不会使终端退出)

提示:在进行目录切换的过程中请多使用 Tab 键自动补全,可避免输入错误,连续按两次Tab可以显示全部候选结果

 

 

 

 

新建空白文件

 

使用 touch 命令创建空白文件,关于 touch 命令,其主要是来更改已有文件的时间戳的(比如,最近访问时间,最近修改时间),但其在不加任何参数的情况下,只指定一个文件名,则可以创建一个为指定文件名的空白文件(不会覆盖已有同名文件),当然你也可以同时指定该文件的时间戳

 

新建目录

 

使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性,使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在有时候安装软件,配置安装路径时非常有用):

 

$ mkdir -p father/son/grandson

2.复制

 

复制文件

使用cp(copy)命令复制一个文件或目录到指定目录。将之前创建的"test"文件复制到"/home/shiyanlou/father/son/grandson"目录中:$ cp test father/son/grandson

复制目录

如果直接使用cp命令,复制一个目录的话,会出现如下错误:

要成功复制目录需要加上-r或者-R参数,表示递归复制,就是说有点“株连九族”的意思:$ cp -r father family。

 

3.删除

删除文件

使用rm(remove files or directories)命令,删除一个文件或目录:$ rm test

删除目录

跟复制目录一样,要删除一个目录,也需要加上-r或-R参数:$ rm -r family

 

4.移动文件与文件重命名

移动文件

使用mv(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录mv 源目录文件 目的目录:$ mv file1 Documents

 

重命名文件

将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名:$ mv file1 myfile

批量重命名: 用rename

 

5.查看文件

使用cat,tac和nl命令查看文件,其中cat为正序显示,tac倒序显示。

nl命令,添加行号并打印,这是个比cat -n更专业的行号打印命令。

这里简单列举它的常用的几个参数:

-b : 指定添加行号的方式,主要有两种:

    -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)

    -b t:只列出非空行的编号并列出(默认为这种方式)

-n : 设置行号的样式,主要有三种:

    -n ln:在行号字段最左端显示

    -n rn:在行号字段最右边显示,且不加 0

    -n rz:在行号字段最右边显示,且加 0

-w : 行号字段占用的位数(默认为 6 位)

使用more工具打开passwd文件:$ more passwd。打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出。

6.查看文件类型

前面我提到过,在 Linux 下面文件的类型不是根据文件后缀来判断的,我们通常使用file命令可以查看文件的类型:$ file /bin/ls

6.查看文件类型

前面我提到过,在 Linux 下面文件的类型不是根据文件后缀来判断的,我们通常使用file命令可以查看文件的类型:$ file /bin/ls

 

作业:

 

一、环境变量

变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

注意:关于变量名,并不是任何形式的变量名都是可用的,变量名只能是英文字母,数字或者下划线,且不能以数字作为开头。

 

通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。

 

在 Linux 环境中,如果你遇到困难,可以使用man 命令,它是Manual page的缩写。

 

Manual pages 是在 UNIX 或类 UNIX 操作系统在线软件文档的一种普遍的形式。 内容包括计算机程序(包括库和系统调用),正式的标准和惯例,甚至是抽象的概念。用户可以通过执行 man 命令调用手册页。

 

一、Linux 用户管理

2.创建用户

在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。

 

root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,用 Windows 的方法理解也就是将自己的非法帐户添加到 Administrators 用户组。更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。

3.用户组

如何知道自己属于哪些用户组

方法一:使用groups命令。其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户同时属于 shiyanlou 和 sudo 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思,或者说是老总)。默认情况下在sudo用户组里的可以使用sudo命令获得root权限。

方法二:查看/etc/group文件

 

$ cat /etc/group | sort

这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息:

 

4.删除用户

 

删除用户是很简单的事:$ sudo deluser lilei --remove-home

 

二、Linux 文件权限

Linux 里面一切皆文件,正因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说,还有 socket(网络套接字,具体是什么,感兴趣的用户可以自己去了解或期待实验楼的后续相关课程),和 pipe (管道,这个东西很重要,我们以后将会讨论到,这里你先知道有它的存在即可)。软链接文件,链接文件是分为两种的,另一种当然是“硬链接”(硬链接不常用,具体内容不作为本课程讨论重点,而软链接等同于 Windows 上的快捷方式,你记住这一点就够了)

读权限,表示你可以使用 cat <file name> 之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件; 执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 'exe' 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。你需要注意的一点是,一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息

$ ls -A

当然,你可以同时使用 '-A' 和 '-l' 参数:$ ls -Al查看某一个目录的完整属性,而不是显示目录里面的文件属性:$ ls -dl <目录名>。显示所有文件大小,并以普通人类能看懂的方式呈现:$ ls –AsSh,其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,请使用“man”命令查询。

         2.变更文件所有者

 

 

3.修改文件权限

 

每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx",也就是一个 '7'

目录路径

使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(**注意,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。

 

关于绝对路径,简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。

关于相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 . ,而是直接以目录名开头,因为这个 usr 目录为 / 目录下的子目录,是可以省略这个 . 的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 .. ,比如你当前目录为“home”目录,根目录就应该表示为 ../../ ,表示上一级目录("home"目录)的上一级目录("/"目录)。

 

 

 

 

 

 

 

 

 

一、环境变量

 

变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

 

注意:关于变量名,并不是任何形式的变量名都是可用的,变量名只能是英文字母,数字或者下划线,且不能以数字作为开头。

2.环境变量

环境变量就是作用域比自定义变量要大。通常我们会涉及到的环境变量有三种:

当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。Shell 本身内建的变量。从自定义变量导出的环境变量。

3.命令的查找路径与顺序

4.添加自定义路径到“PATH”环境变量

在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是.zshrc,相应 Bash 的配置文件为.bashrc。它们在etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。

5.修改和删除已有变量

变量删除

可以使用unset命令删除一个环境变量:$ unset temp

6.如何让环境变量立即生效

在上面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的.zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用source命令来让其立即生效,如:$ source .zshrc

source命令还有一个别名就是.,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.的方式就该是$ . ./.zshrc

注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

 

 

二、搜索文件

与搜索相关的命令常用的有如下几个whereis,which,find,locate。

whereis简单快速:$whereis who

locate快而全,$ locate /etc/sh

which小而精,$ which man

find精而细,$ find /etc/ -name interfaces

2.使用unzip命令解压缩zip文件

将shiyanlou.zip解压到当前目录:$ unzip shiyanlou.zip

使用安静模式,将文件解压到指定目录:$ unzip -q shiyanlou.zip -d ziptest

使用-O(英文字母,大写o)参数指定编码类型:unzip -O GBK 中文压缩文件.zip

 

3.rar打包压缩命令

从指定文件或目录创建压缩包或添加文件到压缩包:$ rm *.zip;$ rar a shiyanlou.rar .上面的命令使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。

从指定压缩包文件中删除某个文件:$ rar d shiyanlou.rar .zshrc

查看不解压文件:$ rar l shiyanlou.rar

使用unrar解压rar文件

全路径解压:$ unrar x shiyanlou.rar

去掉路径解压:$ mkdir tmp

$ unrar e shiyanlou.rar tmp/

 

4.tar打包工具

 

 

解包一个文件(-x参数)到指定路径的已存在目录(-C参数):$ mkdir tardir

$ tar -xf shiyanlou.tar -C tardir

只查看不解包文件-t参数:$ tar -tf shiyanlou.tar

保留文件属性和跟随链接(符号链接或软链接),有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数):$ tar -cphf etc.tar /etc

对于创建不同的压缩格式的文件,对于tar来说是相当简单的,需要的只是换一个参数,这里我们就以使用gzip工具创建*.tar.gz文件为例来说明。

 

我们只需要在创建 tar 文件的基础上添加-z参数,使用gzip来压缩文件:$ tar -czf shiyanlou.tar.gz ~

解压*.tar.gz文件:$ tar -xzf shiyanlou.tar.gz

                       

一、简单文件系统操作

1.查看磁盘和目录的容量

使用 df 命令查看磁盘的容量

                       

使用 du 命令查看目录的容量

d参数指定查看目录的深度

二、简单的磁盘管理

1.创建虚拟磁盘

dd 命令简介

dd命令用于转换和复制文件,不过它的复制不同于cp。之前提到过关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,只要在各自的驱动程序中实现了对应的功能,dd 也可以读取自和/或写入到这些文件。这样,dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在 ASCII 与 EBCDIC 编码间互换。

dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

一、命令执行顺序的控制

 

1.顺序执行多条命令:简单的顺序执行你可以使用;来完成

2.有选择的执行命令                        

 

 

二、管道

 

管道是什么,管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

管道又分为匿名管道和具名管道

1.试用

先试用一下管道,比如查看/etc目录下有哪些文件和目录,使用ls命令来查看:$ ls -al /etc

有太多内容,屏幕不能完全显示,这时候可以使用滚动条或快捷键滚动窗口来查看。不过这时候可以使用管道:$ ls -al /etc | less

通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。

2.cut 命令,打印每一行的某一字段

打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录:$ cut /etc/passwd -d ':' -f 1,6

 

 

 

 

3.grep 命令,在文本中或 stdin 中查找匹配字符串

 

grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找

grep命令的一般形式为:grep [命令选项]... 用于匹配的表达式 [文件]...

 

4. wc 命令,简单小巧的计数工具

wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息:$ wc /etc/passwd

 

5.sort 排序命令

默认为字典排序:$ cat /etc/passswd | sort

反转排序:$ cat /etc/passwd | sort -r

按特定字段排序:$ cat /etc/passwd | sort -t':' -k 3

 

6. uniq 去重命令

uniq命令可以用于过滤或者输出重复行。因为uniq命令只能去连续重复的行,不是全文去重

 

 

 

文本处理命令

1.tr 命令

tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。

使用方式:

tr [option]...SET1 [SET2]

 

 

2.col 命令

 

col 命令可以将Tab换成对等数量的空格建,或反转这个操作。

使用方式:col [option]

 

 

.join命令

 

学过数据库的用户对这个应该不会陌生,这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。

使用方式:join [option]... file1 file2

 

 

 

4.paste命令

 

paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。

使用方式:paste [option] file...

 

 

数据流重定向

实验介绍

你可能对重定向这个概念感到些许陌生,但你应该在前面的课程中多次见过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中。这其实就是重定向,将原本输出到标准输出的数据重定向到一个文件中,因为标准输出(/dev/stdout)本身也是一个文件,我们将命令输出导向另一个文件自然也是没有任何问题的。

 

一、数据流重定向

下面我们简单的回顾一下我们前面经常用到的两个重定向操作:当然前面没有用到的<和<<操作也是没有问题的,如你理解的一样,它们的区别在于重定向的方向不一致而已,>表示是从左到右,<右到左。

1.简单的重定向

 

在更多了解 Linux 的重定向之前,我们需要先知道一些基本的东西,前面我们已经提到过 Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。

 

正则表达式基础

一、正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

 

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。

 

2.基本语法:

选择  |竖直分隔符表示选择,例如"boy|girl"可以匹配"boy"或者"girl"

数量限定

数量限定除了我们举例用的*,还有+加号,?问号,.点号,如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:

+表示前面的字符必须出现至少一次(1次或多次),例如,"goo+gle",可以匹配"gooogle","goooogle"等;

?表示前面的字符最多出现一次(0次或1次),例如,"colou?r",可以匹配"color"或者"colour";

*星号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次),例如,“0*42”可以匹配42、042、0042、00042等。

范围和优先级

 

()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(这里体验了范围,?将圆括号内容作为一个整体匹配)。

     

  

字符

  
  

描述

  

\

将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。

^

匹配输入字符串的开始位置。

$

匹配输入字符串的结束位置。

{n}

n是一个非负整数。匹配确定的n。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

{n,}

n是一个非负整数。至少匹配n。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

{n,m}

m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

*

匹配前面的子表达式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

?

匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。

?

当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

.

匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。

(pattern)

匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“\(”或“\)”。

x|y

匹配xy。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。

[xyz]

字符集合(character   class)。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符。

[^xyz]

排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

[a-z]

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

[^a-z]

排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

 

优先级

优先级为从上到下从左到右,依次降低:

     

  

运算符

  
  

说明

  

\

转义符

(), (?:), (?=), []

括号和中括号

*、+、?、{n}、{n,}、{n,m}

限定符

^、$、\任何元字符

定位点和序列

 选择

 

 

 

 

二、grep模式匹配命令

2.使用正则表达式

使用基本正则表达式,BRE

 

使用扩展正则表达式,ERE

要通过grep使用扩展正则表达式需要加上-E参数,或使用egrep。

三、sed 流编辑器

 

sed工具在 man 手册里面的全名为"sed - stream editor for filtering and transforming text ",意即,用于过滤和转换文本的流编辑器。

 

在 Linux/UNIX 的世界里敢称为编辑器的工具,大都非等闲之辈,比如前面的"vi/vim(编辑器之神)","emacs(神的编辑器)","gedit"这些个编辑器。

sed 命令基本格式:

sed [参数]... [执行命令] [输入文件]...

# 形如:$ sed -i '1s/sad/happy/' test # 表示将test文件中第一行的"sad"替换为"happy"

sed编辑器的执行命令(这里”执行“解释为名词)

sed执行命令格式:[n1][,n2]command

[n1][~step]command

# 其中一些命令可以在后面加上作用范围,形如:$ sed -i 's/sad/happy/g' test # g表示全局范围  $ sed -i 's/sad/happy/4' test # 4表示指定行中的第四个匹配字符串

 

sed操作举例$ cp /etc/passwd ~

打印指定行

# 打印2-5行

$ nl passwd | sed -n '2,5p'

# 打印奇数行

$ nl passwd | sed -n '1~2p'

 

 

四、awk文本处理语言

1.AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.其名称得自于它的创始人Alfred Aho(阿尔佛雷德·艾侯)、Peter Jay Weinberger(彼得·温伯格)和Brian Wilson Kernighan(布莱恩·柯林汉)姓氏的首个字母.AWK程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。最简单地说,AWK是一种用于处理文本的编程语言工具。

2.awk的一些基础概念

awk所有的操作都是基于pattern(模式)—action(动作)对来完成的。awk处理文本的方式,是将文本分割成一些“字段”,然后再对这些字段进行处理,默认情况下,awk以空格作为一个字段的分割符,不过这不是固定了,你可以任意指定分隔符,下面将告诉你如何做到这一点。

3.awk命令基本格式:awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]

4.awk操作体验:print打印的非变量内容都需要用""一对引号包围起来。

5.awk常用的内置变量

     

  

变量名

  
  

说明

  

FILENAME

当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串

$0

当前记录的内容

$N

N表示字段号,最大值为NF变量的值

FS

字段分隔符,由正则表达式表示,默认为" "空格

RS

输入记录分隔符,默认为"\n",即一行为一个记录

NF

当前记录字段数

NR

已经读入的记录数

FNR

当前输入文件的记录数,请注意它与NR的区别

OFS

输出字段分隔符,默认为" "空格

ORS

输出记录分隔符,默认为"\n"

 

 

 

一、Linux 上的软件安装

 

2. apt 包管理工具介绍

APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。

3.apt-get

apt-get使用各用于处理apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,下面列出一些apt-get包含的常用的一些工具:

     

  

工具

  
  

说明

  

install

其后加上软件包名,用于安装一个软件包

update

从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表

upgrade

升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次update

dist-upgrade

解决依赖关系并升级(存在一定危险性)

remove

移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件

autoremove

移除之前被其他软件包依赖,但现在不再被使用的软件包

purge

与remove相同,但会完全移除软件包,包含其配置文件

clean

移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/

autoclean

移除已安装的软件的旧版本软件包

 

4.安装软件包

apt-get install <软件包名>

重新安装:$ sudo apt-get --reinstall install <软件包名>

5.软件升级

# 更新软件源$ sudo apt-get update

# 升级没有依赖问题的软件包$ sudo apt-get upgrade

# 升级并解决依赖关系$ sudo apt-get dist-upgrade

 

6.卸载软件

sudo apt-get remove<软件包名>

7.软件搜索

sudo apt-cache search softname1 softname2 softname3……

 

三、使用 dpkg 从本地磁盘安装 deb 软件包

我们经常可以在网络上简单以deb形式打包的软件包,就需要使用dpkg命令来安装。

dpkg常用参数介绍:

     

  

参数

  
  

说明

  

-i

安装指定deb包

-R

后面加上目录名,用于安装该目录下的所有deb安装包

-r

remove,移除某个已安装的软件包

-I

显示deb包文件的信息

-s

显示已安装软件的信息

-S

搜索已安装的软件包

-L

显示已安装软件包的目录信息

 

2.使用dpkg安装deb软件包

3.查看已安装软件包的安装目录

使用dpkg -L查看deb包目录信息:$ sudo dpkg -L emacs

作业:

 

 

七、遇到的问题及解决

vim 使用有困难,不知道怎么输入和结束

dapt安装不会使用

 

 

 

 

八、其他

这次任务的量总的来说有点大,我用了足足两天的时间来完成这十二个实验。有些内容在word上,由于时间限制原因没有将其粘在博客园上。之所以使用word是因为,如果直接在博客园上操作,一旦网断了,数据可能就因此丢失了。在这十几个实验中,有些内容含有大量术语,难以理解。但是,作业中有许多有趣的东西,又让我对代码增添了一点小兴趣。是我在繁杂的实验过程中的一点小安慰。

posted @ 2015-09-20 21:56  20135311不是富东京  阅读(253)  评论(1编辑  收藏  举报