信息安全系统设计基础第一周学习总结
第一节 Linux系统简介
一、Linux——操作系统
1、使多个用户从不同的终端同时操作主机(分时操作系统);
2、MINIX是一个功能有限的类似于UNIX的操作系统(UNIX 实现了 TCP/IP 协议栈);
3、Linux 本身只是操作系统的内核。
4、内核是使其他程序能够运行的基础。它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。
5、一些必需的程序:命令行解释器(shell)——用于用户交互和编写 shell 脚本(.bat文件)。
6、平台大都为开源软件。对于一些应用程序没有自己开发,更快捷的改写内核,使得程序更容易在Linux上运行。
7、兼具图形界面操作。
二、学习路径
1、初级:Linux系统安装、图形界面使用、常用命令。
2、中级:Linux用户和文件系统管理、软件安装配置、网络管理、系统维护、Shell编程初步。
3、高级:(1)Linux服务器领域:数据库、防火墙、DNS服务器、VPN服务器、Web服务器、MALL服务器、FTP服务器、Samba服务器、NFS服务器、集群服务器......
(2)Linux程序开发:Shell高级编程、Linux C/C++程序开发、Linux内核基础、嵌入式开发、Linux驱动开发.....
4、Linux内核研究和操作系统开发......
第二节 基本概念及操作
一、Linux桌面环境介绍
1、在 Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。
二、Linux 桌面环境的使用
三、Linux终端
1、Terminal终端
使用 Linux 时通过一个叫做 Shell 的中间程序来完成的,在图形界面下实现在一个窗口中完成接受用户输入和显示输出,Linux 系统提供了一个叫做终端模拟器的程序(Terminal)。
2、Shell
Shell是指“提供给使用者使用界面”的软件(命令解析器),可以接受用户输入命令的程序,它隐藏了操作系统底层的细节,既是用户交互的界面,也是控制系统的脚本语言。
3、命令行操作体验
(1)Tab键:进行命令补全(只输入某个命令的开头的一部分然后按下Tab键就可以得到提示或者帮助完成)
操作截图:
打开终端,输入命令让系统来执行:
补全命令,补全目录,补全命令参数:
(3)Ctrl+C键:当错误的使用了一个命令,光标在闪烁无法继续输入命令,或者不停地在输出一大堆你不想要的结果时,立即停止并恢复到你可控的状态,强行终止当前程序。
操作截图:
输入 find /之后:未停止时
按下Ctrl+C键后:
(3)
其他一些常用快捷键
按键 |
作用 |
Ctrl+d |
键盘输入结束或退出终端 |
Ctrl+s |
暂定当前程序,暂停后按下任意键恢复运行 |
Ctrl+z |
将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a |
将光标移至输入行头,相当于Home键 |
Ctrl+e |
将光标移至输入行末,相当于End键 |
Ctrl+k |
删除从光标所在位置到行末 |
Alt+Backspace |
向前删除一个单词 |
Shift+PgUp |
将终端显示向上滚动 |
Shift+PgDn |
将终端显示向下滚动 |
(4)“上”键:恢复之前输入过的命令
操作截图:
(5)通配符:一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。
1.当查找文件夹时,或者当不知道真正字符或者懒得输入完整名字时,可以使用它来代替一个或多个真正字符。
2.通配符 实际上就是一种 Shell 实现的路径扩展功能。在 通配符被处理后, Shell 会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
3.使用 touch 命令创建文件
操作截图:
一次创建多个文件:
4.Shell 常用通配符:
字符 |
含义 |
* |
匹配 0 或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配 list 中的任意单一字符 |
[!list] |
匹配 除list 中的任意单一字符以外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c2..c2} |
匹配 c1-c2 中全部字符 如{1..10} |
(6)在命令行中获取帮助
1.获得某个命令的说明和使用方式(如查看 man 命令本身的使用方式)
操作截图:
通常被分为8个区段,安排如下:
区段 |
说明 |
1 |
一般命令 |
2 |
系统调用 |
3 |
库函数,涵盖了C标准函数库 |
4 |
特殊文件(通常是/dev中的设备)和驱动程序 |
5 |
文件格式和约定 |
6 |
游戏和屏保 |
7 |
杂项 |
8 |
系统管理命令和守护进程 |
要查看相应区段的内容,就在 man 后面加上相应区段的数字即可。
NAME(名称)
该命令或函数的名称,接着是一行简介。
SYNOPSIS(概要)
对于命令,正式的描述它如何运行,以及需要什么样的命令行参数。对于函数,介绍函数所需的参数,以及哪个头文件包含该函数的定义。
DESCRIPTION(说明)
命令或函数功能的文本描述。
EXAMPLES(示例)
常用的一些示例。
SEE ALSO(参见)
相关命令或函数的列表。
2.man手册中的内容很多,查找到后
n键:切换到下一个关键字所在处。
shift+n:为上一个关键字所在处。
Space(空格键):翻页。
Enter(回车键):向下滚动一行。
j,k(vim编辑器的移动键):进行向前向后滚动一行。
h键:显示使用帮助(因为man使用less作为阅读器,实为less工具的帮助)。
q:退出。
info命令:获得更详细的帮助,不过通常使用man就足够了。
--help:如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用。
4、作业
操作步骤:
结果截图:
('-w'参数指定打印宽度)
图一:
图二:
观察以上两图,由于宽度设定不同,图一宽度不够大,数字无法完全显示。
第三节 用户及文件权限管理
一、Linux 用户管理
Linux 是一个可以实现多用户登陆的操作系统,不同的两个人分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看、修改彼此的文件。
1.查看用户
第一列:表示打开当前伪终端的用户的用户名,要查看当前登录用户的用户名,去掉空格直接使用 whoami即可。
第二列: pts/0中 pts 表示伪终端,所谓伪是相对于 /dev/tty设备而言的(“真终端”---[Ctrl]+[Alt]+[F1]~[F7]进行切换的 /dev/tty设备;伪终端---当你在图形用户界面使用 /dev/tty7时每打开一个终端就会产生一个伪终端)
第三列:表示当前伪终端的启动时间。
操作截图:
who 命令其它常用参数
参数 |
说明 |
-a |
打印能打印的全部 |
-d |
打印死掉的进程 |
-m |
同am i,mom likes |
-q |
打印当前登录用户数及用户名 |
-u |
打印当前登录用户登录信息 |
-r |
打印运行等级 |
2.创建用户
(1)root 是Linux 和 UNIX 系统中的超级管理员用户帐户
(2)sudo命令:1.两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo
用户组。2.不但可以添加用户到系统,同时也会默认为新用户创建home 目录。
操作截图:
(3)退出当前用户跟退出终端一样可以使用 exit命令或者使用快捷键 Ctrl+d
3.用户组
(1)如何知道自己属于哪些用户组呢?
方法一:使用groups命令
冒号之前表示用户,后面表示该用户所属的用户组
操作截图:
方法二:查看/etc/group文件
cat 命令:用于读取指定文件的内容并打印到终端输出
| sort :将读取的文本进行一个字典排序再输出
操作截图:
/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User),每个用户组一条记录。
(2)将其它用户加入 sudo 用户组
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入sudo用户组从而获取 root 权限。
操作截图:
4.删除用户
操作截图:
Linux大都在命令行下操作,不用或少用图形界面将是之后学习的重点和难点。
学会多用指令进行操作。
Ctrl+d |
键盘输入结束或退出终端 |
Ctrl+s |
暂定当前程序,暂停后按下任意键恢复运行 |
Ctrl+z |
将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a |
将光标移至输入行头,相当于Home键 |
Ctrl+e |
将光标移至输入行末,相当于End键 |
Ctrl+k |
删除从光标所在位置到行末 |
Alt+Backspace |
向前删除一个单词 |
Shift+PgUp |
将终端显示向上滚动 |
Shift+PgDn |
将终端显示向下滚动 |
字符 |
含义 |
* |
匹配 0 或多个字符 |
? |
匹配任意一个字符 |
[list] |
匹配 list 中的任意单一字符 |
[!list] |
匹配 除list 中的任意单一字符以外的字符 |
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字符串 |
{c2..c2} |
匹配 c1-c2 中全部字符 如{1..10} |
who 命令其它常用参数
参数 |
说明 |
-a |
打印能打印的全部 |
-d |
打印死掉的进程 |
-m |
同am i,mom likes |
-q |
打印当前登录用户数及用户名 |
-u |
打印当前登录用户登录信息 |
-r |
打印运行等级 |
一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件
修改文件权限:
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx"
'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(**注意,还记得我们上一节介绍过的,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。
新建文件
使用 touch 命令创建空白文件,使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性,使用 -p 参数,同时创建父目录(如果不存在该父目录),使用cp(copy)命令复制一个文件或目录到指定目录。使用rm(remove files or directories)命令,删除一个文件或目录。直接删除文件,可以使用-f参数强制删除。复制和删除目录时要使用-r或-R参数。使用mv(move or rename files)命令,移动文件(剪切)mv 源目录文件 目的目录。将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名。rename命令可以批量重命名。这两个命令都是用来打印文件内容到标准输出(终端),其中cat为正序显示,tac倒序显示,可以加上-n参数显示行号。nl命令,添加行号并打印,这是个比cat -n更专业的行号打印命令。
使用declare命令创建一个变量,使用=号赋值运算符为变量赋值,读取变量的值,使用echo命令和$符号。关于变量名,并不是任何形式的变量名都是可用的,变量名只能是英文字母,数字或者下划线,且不能以数字作为开头。
命令 |
说明 |
set |
显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 |
gcc 生成二进制文件默认具有可执行权限,不需要修改
添加自定义路径到“PATH”环境变量:$ PATH=$PATH:/home/shiyanlou/mybin
变量的修改有以下几种方式:
变量设置方式 |
说明 |
${变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} |
将符合旧字串的全部字串替换为新的字串 |
可以使用unset命令删除一个环境变量。
可以使用source命令来让其立即生效,source命令还有一个别名就是.,注意与表示当前路径的那个点区分开,虽然形式一样,但作用和使用方式一样,上面的命令如果替换成.的方式就该是$ . ./.zshrc,注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
与搜索相关的命令常用的有如下几个whereis,which,find,locate
注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action]
文件后缀名 |
说明 |
*.zip |
zip程序打包压缩的文件 |
*.rar |
rar程序压缩的文件 |
*.7z |
7zip程序压缩的文件 |
*.tar |
tar程序打包,未压缩的文件 |
*.gz |
gzip程序(GNU zip)压缩的文件 |
*.xz |
xz程序压缩的文件 |
*.bz2 |
bzip2程序压缩的文件 |
*.tar.gz |
tar打包,gzip程序压缩的文件 |
*.tar.xz |
tar打包,xz程序压缩的文件 |
*tar.bz2 |
tar打包,bzip2程序压缩的文件 |
*.tar.7z |
tar打包,7z程序压缩的文件 |
使用zip打包文件夹:
$ zip -r -q -o shiyanlou.zip /home/shiyanlou
$ du -h shiyanlou.zip
$ file shiyanlou.zip
-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小
$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip
$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/*.zip
这里添加了一个参数用于设置压缩级别-[1-9],1表示最快压缩但体积大,9表示体积最小但耗时最久。最后那个-x是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
创建加密zip包,使用-e参数可以创建加密压缩包
$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou
使用unzip命令解压缩zip文件
$ sudo apt-get update
$ sudo apt-get install libaa-bin
使用 df 命令查看磁盘的容量# 加上`-h`参数,以更易读的方式展示
-d参数指定查看目录的深度
tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换
tr [option]...SET1 [SET2]
常用的选项有:
选项 |
说明 |
-d |
删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配 |
-s |
去除set1指定的在输入文本中连续并重复的字符 |
col 命令可以将Tab换成对等数量的空格建,或反转这个操作。
col [option]
常用的选项有:
选项 |
说明 |
-x |
将Tab转换为空格 |
-h |
将空格转换为Tab(默认选项) |
join命令用于将两个文件中包含相同内容的那一行合并在一起。
join [option]... file1 file2
常用的选项有:
选项 |
说明 |
-t |
指定分隔符,默认为空格 |
-i |
忽略大小写的差异 |
-1 |
指明第一个文件要用哪个字段来对比,,默认对比第一个字段 |
-2 |
指明第二个文件要用哪个字段来对比,,默认对比第一个字段 |
paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
paste [option] file...
常用的选项有:
选项 |
说明 |
||||||||||||||||||||||||||||
-d |
指定合并的分隔符,默认为Tab |
||||||||||||||||||||||||||||
-s |
不合并到一行,每个文件为一行 tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换 tr [option]...SET1 [SET2] 常用的选项有:
col 命令可以将Tab换成对等数量的空格建,或反转这个操作。 col [option] 常用的选项有:
join命令用于将两个文件中包含相同内容的那一行合并在一起。 join [option]... file1 file2 常用的选项有:
paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。 paste [option] file... 常用的选项有:
|
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。
pt-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给出的建议安装的软件包 |
安装软件包
关于安装,如前面演示的一样你只需要执行apt-get install <软件包名>即可,除了这一点,你还应该掌握的是如何重新安装软件包。 很多时候我们需要重新安装一个软件包,比如你的系统被破坏,或者一些错误的配置导致软件无法正常工作。
软件升级
# 更新软件源
$ sudo apt-get update
# 升级没有依赖问题的软件包
$ sudo apt-get upgrade
# 升级并解决依赖关系
$ sudo apt-get dist-upgrade