信息安全系统设计基础第一周学习总结

20135203 齐岳

第二周(9.14-9.20):

学习计时:共13小时

读书:5

代码:3

作业:2

博客:3

一、学习目标

1. 能够独立安装Linux操作系统  

2. 能够熟练使用Linux系统的基本命令  

3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等

4. 熟练应用“搜索”进行举一反三的学习

二、学习过程

一、基本概念及操作

1、linux终端:Terminal(终端),在图形界面下为了实现在一个窗口中完成接受用户输入和显示输出,Linux 系统提供了一个叫做终端模拟器的程序(Terminal)

2、Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe。普通意义上的 Shell 就是可以接受用户输入命令的程序。

3、命令行操作:

快捷键:(1)使用Tab键来进行命令补全,当忘记某个命令的全称时可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成

(2)[Ctrl+c]当你在 Linux 命令行中无意输入了一个不知道的命令,或者错误的使用了一个命令,导致在终端里出现了无法预料的情况,使用Ctrl+c键来强行终止当前程序

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


5、在 Linux 环境中,如果你遇到困难,可以使用man 命令,它是Manual page的缩写。Manual pages 是在 UNIX 或类 UNIX 操作系统在线软件文档的一种普遍的形式。 内容包括计算机程序(包括库和系统调用),正式的标准和惯例,甚至是抽象的概念。用户可以通过执行 man 命令调用手册页。

作业:

二、linux用户管理

1、Linux 是一个可以实现多用户登陆的操作系统,不同的用户可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的用户管理权限机制 ,不同用户不可以轻易地查看、修改彼此的文件。

2、创建用户:在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里要用sudo 这个命令。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。

3、在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,一个用户可以属于多个用户组。

4、使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令

三、linux文件权限

1、查看文件权限:用ls 命令来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下。

2Linux 里面一切皆文件

3、文件大小:以 inode 结点大小为单位来表示的文件大小,可以给 ls 加上 -lh 参数来更直观的查看文件的大小。

 

四、linux目录结构及文件基本操作

1、Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区的来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。然而 UNIX/Linux是以目录为主的, Linux 是以树形目录结构的形式来构建整个系统的,可以理解为一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。

2、FHS 标准

FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。

3、linux文件基本操作

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

使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性

使用 -p 参数,同时创建父目录(这在有时候安装软件,配置安装路径时非常有用):

(2)复制:使用cp(copy)命令复制一个文件或目录到指定目录。

复制目录:要成功复制目录需要加上-r或者-R参数,表示递归复制。

(3)删除:使用rm(remove files or directories)命令,删除一个文件或目录:有时候你会遇到想要删除一些为只读权限的文件,直接使用rm删除会显示一个提示,直接删除文件,可以使用-f参数强制删除,跟复制目录一样,要删除一个目录,也需要加上-r或-R参数:

(4)移动文件与文件重命名:使用mv(move or rename files)命令,移动文件(剪切)。

重命名文件:将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名。批量重命名:要实现批量重命名,mv 命令就有点力不从心了,我们可以使用一个看起来更专业的命令rename来实现。不过它是要用 perl 正则表达式来作为参数。

五、环境变量与文件查找

1、变量:所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

2、环境变量:环境变量就是作用域比自定义变量要大,如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。

3、搜索文件

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

whereis简单快速:这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。

locate快而全:通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次updatedb命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型.

which小而精:which本身是 Shell 内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令

find精而细:find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。

七、文件打包和解压缩

1、zip压缩打包程序

-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小

添加了一个参数用于设置压缩级别-[1-9],1表示最快压缩但体积大,9表示体积最小但耗时最久。最后那个-x是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。

使用-e参数可以创建加密压缩包:

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

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

3.rar打包压缩命令:

从指定文件或目录创建压缩包或添加文件到压缩包:

$ rm *.zip

$ rar a shiyanlou.rar .

上面的命令使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。

注意:rar 的命令参数没有-,如果加上会报错。

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

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

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

去掉路径解压:$ mkdir tmp

$ unrar e shiyanlou.rar tmp/

4.tar打包工具

tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便。

创建一个 tar 包:$ tar -cf shiyanlou.tar ~

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

$ mkdir tardir

$ tar -xf shiyanlou.tar -C tardir

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

八、简单文件系统操作

1.查看磁盘和目录的容量:使用 df 命令查看磁盘的容量

使用 du 命令查看目录的容量,不要混淆

2.创建虚拟磁盘

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

3.使用 mount 命令挂载磁盘到目录树

用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态。又因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。

那么我们如何挂载真正的磁盘到目录树呢,mount命令的一般格式如下:

mount [options] [source] [directory]

一些常用操作:

mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]

# 查看硬盘分区表信息:$ sudo fdisk -l

# 进入磁盘分区模式:$ sudo fdisk virtual.img

# 卸载磁盘分区:$ sudo umount /dev/mapper/loop0p1

九、命令执行顺序控制与管道

1.顺序执行多条命令

$ sudo apt-get update;sudo apt-get install some-tool;some-tool

# 让它自己运行

2.有选择的执行命令

&&用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行

||是与&&相反的控制效果,当上一条命令执行结果为≠0($?≠0)时则执行它后面的命令

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

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

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

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

grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找, grep命令的一般形式为:grep [命令选项]... 用于匹配的表达式 [文件]...

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

6.sort 排序命令:将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。

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

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

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

6. uniq 去重命令:用于过滤或者输出重复行。

十、简单的文本处理

1.文本处理命令

1)tr 命令:用来删除一段文本信息中的某些文字。或者将其进行转换。tr [option]...SET1 [SET2]

常用的选项有:

-d  删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配

-s  去除set1指定的在输入文本中连续并重复的字符

2.col 命令:将Tab换成对等数量的空格建,或反转这个操作。col [option]

常用的选项有:

-x  将Tab转换为空格

-h  将空格转换为Tab(默认选项

3.join命令:将两个文件中包含相同内容的那一行合并在一起。join [option]... file1 file2

常用的选项有:

-t  指定分隔符,默认为空格

-i  忽略大小写的差异

-1  指明第一个文件要用哪个字段来对比,,默认对比第一个字段

-2  指明第二个文件要用哪个字段来对比,,默认对比第一个字段

4.paste命令:在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。paste [option] file...

常用的选项有:

-d  指定合并的分隔符,默认为Tab

-s  不合并到一行,每个文件为一行

十一、数据流重定向

1.数据流重定向

文件描述符 设备文件   说明

0   /dev/stdin 标准输入

1   /dev/stdout   标准输出

2   /dev/stderr   标准错误

文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。

将一个文件作为命令的输入,标准输出作为命令的输出: cat Documents/test.c~

将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出:$ echo 'hi' | cat

将echo命令的输出从默认的标准输出重定向到一个普通文件

$ echo 'hello shiyanlou' > redirect

$ cat redirect

2.标准错误重定向

3.使用tee命令

同时重定向到多个文件

除了将需要将输出重定向到文件之外也需要将信息打印在终端,那么你可以使用tee命令来实现:$ echo 'hello shiyanlou' | tee hello

4.永久重定向:exec命令的作用是使用指定的命令替换当前的 Shell,及使用一个进程替换当前进程,或者指定新的重定向

7.完全屏蔽命令的输出

在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。

我们可以利用设个/dev/null屏蔽命令的输出:

$ cat Documents/test.c~ nefile 1>/dev/null 2>&1

8.使用 xargs 分割参数列表

xargs 是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

十二、正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

1.基本语法:一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。

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

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

范围和优先级:()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。

2、grep模式匹配命令:grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。

在通过grep命令使用正则表达式之前,先介绍一下它的常用参数:

十三、Linux 下软件安装

1.通常 Linux 上的软件安装主要有三种方式:

在线安装

从磁盘安装deb软件包

从二进制软件包安装

从源代码编译安装

2. apt 包管理工具介绍

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

软件源镜像服务器

软件源

我们需要定期从服务器上下载一个软件包列表,使用 sudo apt-get update 命令来保持本地的软件包列表是最新的(有时你也需要手动执行这个操作,比如更换了软件源),而这个表里会有软件依赖信息的记录,对于软件依赖,我举个例子:我们安装 w3m 软件的时候,而这个软件需要 libgc1c2 这个软件包才能正常工作,这个时候 apt-get 在安装软件的时候会一并替我们安装了,以保证 w3m 能正常的工作。

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

工具   说明

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

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

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

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

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

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

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

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

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

下面是一些apt-get常用的参数:

参数   说明

-y  自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用

-s  模拟安装

-q  静默安装方式,指定多个q或者-q=#,#表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用

-f  修复损坏的依赖关系

-d  只下载不安装

--reinstall   重新安装已经安装但可能存在问题的软件包

--install-suggests   同时安装APT给出的建议安装的软件包

4.安装软件包

使用如下方式重新安装:

$ sudo apt-get --reinstall install w3m

5.软件升级

# 更新软件源

$ sudo apt-get update

# 升级没有依赖问题的软件包

$ sudo apt-get upgrade

# 升级并解决依赖关系

$ sudo apt-get dist-upgrade

6.卸载软件sudo apt-get remove w3m ,系统会有一个确认的操作。

或者,你可以执行

# 不保留配置文件的移除

$ sudo apt-get purge w3m

# 或者 sudo apt-get --purge remove

# 移除不再需要的被依赖的软件包

$ sudo apt-get autoremove

7.软件搜索

sudo apt-cache search softname1 softname2 softname3……

apt-cache 命令则是针对本地数据进行相关操作的工具,search 顾名思义在本地的数据库中寻找有关 softname1 softname2 …… 相关软件的信息。现在我们试试搜索一下之前我们安装的软件 w3m ,如图:

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

1.dpkg 介绍

dpkg 本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。

dpkg常用参数介绍:

参数   说明

-i  安装指定deb包

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

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

-I  显示deb包文件的信息

-s  显示已安装软件的信息

-S  搜索已安装的软件包

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

2.使用dpkg安装deb软件包

# 使用dpkg安装

$ sudo dpkg -i emacs24_24.3+1-4ubuntu1_amd64.deb

我们将如何解决这个错误了,这就要用到apt-get了,使用它的-f参数了,修复依赖关系的安装

$ sudo apt-get -f install

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

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

三、遇到的问题及解决

1.在将文件qy复制到目录:father/son/grandson下时,出现了如下情况,提示找无法获取文件,在利用touch命令打开文件后问题得以解决,但又出现了无法获取目录的提示,使用cd ~命令退回到根目录下之后才可以复制。

2. 在编写脚本程序时报错:

语法错误,句末缺少分号。

3.挂载时只有root用户才能执行,需要用到实验四的用户权限管理知识

 

4.无法退出:

5.数据流重定向时编写程序失败(始终显示找不到文件,按照之前的方法保存退出后也没有解决)

四、其他

编写脚本程序和C程序时,必须要在保存退出之后才可以利用后续命令继续完成编译运行的过程,一开始不知道如何保存退出,也不会进行后续的操作,通过上网查找之后发现有很多帖子写的很明白,是利用wq命令,在两学期的反转课堂学习中发现随时会遇到很多问题,但只要自己动手查找资料或者勤于尝试都思考是可以解决的,但由于vim知识的缺失,在编写程序时有很多问题不太明白也无法及时解决,尤其是和数据流重定向结合之后。linux基础知识掌握需要勤加练习和不断尝试,以后还需多加练习。

 

原文地址:https://www.cnblogs.com/July0207/p/4823455.html