20145206 《信息安全系统设计基础》第1周学习总结

20145206 《信息安全系统设计基础》第1周学习总结

教材学习内容总结

Ubuntu有几个快捷键:

CTRL+ALT+T
```:打开终端,天天使用终端,用鼠标打开太低效了;

CTRL+SHIFT+T

ALT+数字N

Tab

上下键盘:切换命令历史,刚输入一个很长的命令,按上键就可以恢复;

CTRL+C

1、Linux命令
Linux中命令格式为:

command [options] [arguments]

其中选项(option)是调整命令执行行为的开关,选项不同决定了命令的显示结果不同,参数(arugment)是指命令的作用对象。
ls或ls .是两条等价的命令,显示是当前目录的内容,这里“.”就是参数,表示当前目录,这个参数缺省可以省略。

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913202703477-1057629869.png)

但是发现尝试了ls.之后显示不一致:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913202915195-671230095.png)

后来发现ls后要有空格再有.看来细节真的很重要

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913203144352-1344143094.png)

可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的方式

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913203310023-657218110.png)

2、man命令
man是manul的缩写,我们可以通过man man来查看man的帮助,如下图:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913203706961-637635945.png)

然后我尝试了
```man printf
```,

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913204503258-433653536.png)

```man 1 printf
```,
![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913204521289-310255301.png)

```man 3 printf

数据结构中学过排序(sort),我不知道C语言中有没有完成这个功能的函数,可以通过“man -k sort”来搜索,因为是找C库函数,我们关注带3的,qsort好像是个好选项,如下图:

使用```
man -k sort | grep 3


![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913205233852-627214115.png)

3、cheat 命令

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160919100047074-956838564.png)

4、其他核心命令
可以通过grep -n main *.c,快速找到main在哪个C文件中并指出在第几行:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913213507883-1380038463.png)

我们在Linux下上网使用firefox浏览器,大家可以使用whereis firefox或更精确的使用which firefox来看看结果:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913215834867-1298042645.png)

比如老师推荐了一个调试工具ddd,你可以用apt-cache search ddd查查有没有这个程序:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160913220047805-12092069.png)

## 实验楼内容学习

1.Terminal(终端)
通常在我们使用 Linux 时,我们并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成接受用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal)。终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”
2.Shell
普通意义上的 Shell 就是可以接受用户输入命令的程序。Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。
3.命令行操作体验

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918185023805-518886758.png)

1).重要快捷键:
[Tab]
使用Tab键来进行命令补全,Tab键一般键盘是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时你可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918185523514-1106851816.png)


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

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918190007846-1713163727.png)

其他一些常用快捷键
按键	作用
Ctrl+d	键盘输入结束或退出终端
Ctrl+s	暂定当前程序,暂停后按下任意键恢复运行
Ctrl+z	将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a	将光标移至输入行头,相当于Home键
Ctrl+e	将光标移至输入行末,相当于End键
Ctrl+k	删除从光标所在位置到行末
Alt+Backspace	向前删除一个单词
Shift+PgUp	将终端显示向上滚动
Shift+PgDn	将终端显示向下滚动

2).学会利用历史输入命令
很简单,你可以使用键盘上的方向上键,恢复你之前输入过的命令

3).学会使用通配符
在创建文件的时候,如果需要一次性创建多个文件,比如:“love_1_linux.txt,love_2_linux.txt,... love_10_linux.txt”。在 Linux 中十分方便:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918190906353-1908217720.png)

## 用户及文件权限管理
使用```who am i
```指令查看用户,使用```sudo adduser
```指令新建用户,使用```su -l
```指令切换登录用户,```Ctrl+D
```退出当前用户

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918194116817-1448892316.png)

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918194530413-1437834777.png)

在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源.每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组.默认情况下在sudo用户组里的可以使用sudo命令获得root权限。shiyanlou 用户也可以使用 sudo 命令

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918200953328-2027895779.png)

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

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918201536180-487608666.png)

使用```sudo deluser xxx --remove-home
```删除用户

用ls -l查看文件权限,文件类型:Linux中一切皆文件;文件权限:一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息;链接数:链接到该文件所在的 inode 结点的文件名数目;文件大小:以 inode 结点大小为单位来表示的文件大小。ls 加上 -lh 参数来更直观的查看文件的大小。

使用ls -Al查看某一个目录的完整属性,而不是显示目录里面的文件属性;使用ls -dl <目录名>显示所有文件大小,并以普通人类能看懂的方式呈现;使用ls -AsSh,其中小s为显示文件大小,大S为按文件大小排序。

变更文件所有者
修改文件权限:
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,这里有两种方式:

方式一:二进制数字表示
方式二:加减赋值操作

## Linux 目录结构及文件基本操作
使用 ```cd 
```命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录,- 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径(绝对路径)。

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918203427260-1709922078.png)

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

相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。

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

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

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

使用```rm(remove files or directories)
```命令,删除一个文件或目录,可以使用```-f
```参数强制删除

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

使用```mv(move or rename files)
```命令,移动文件(剪切)

使用```cat,tac
```和```nl
```命令查看文件
这两个命令都是用来打印文件内容到标准输出(终端),其中cat为正序显示,tac倒序显示。
```nl
```命令,添加行号并打印,这是个比```cat -n
```更专业的行号打印命令。

使用```more
```和```less
```命令分页查看文件

使用```head
```和```tail
```命令查看文件

在 Linux 下面文件的类型不是根据文件后缀来判断的,我们通常使用```file
```命令可以查看文件的类型

## 环境变量与文件查找 
使用```declare
```命令创建一个变量名为```tmp
```的变量:$ declare tmp,其实也可以不用declare预声明一个变量,直接即用即创建;使用=号赋值运算符为变量```tmp
```赋值为shiyanlou:$ tmp=shiyanlou;读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值):$ echo $tmp;关于变量名,并不是任何形式的变量名都是可用的,变量名只能是英文字母,数字或者下划线,且不能以数字作为开头。

##文件系统操作与磁盘管理

使用```df
```指令查看磁盘的容量:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918211959921-586004848.png)

可以使用```df -h
```指令能更直观的查看磁盘容量:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918212213321-1338008702.png)


## 实验楼作业
1、banner命令
'-w'参数指定打印宽度;
使用```
$ sudo apt-get update

以及```
$ sudo apt-get install sysvbanner

命令进行安装,出现的效果如下:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918191541584-467812063.png)

2 召唤“眼睛”:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918210124733-1356219926.png)

3、数字雨

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918210944222-997120138.png)

4、火炉

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918212719374-1360641710.png)

## 教材中遇到的问题及解决过程:
安装cheat时,遇到下面情况:

![](http://images2015.cnblogs.com/blog/877170/201609/877170-20160918220814844-551139543.png)

## 心得体会
本周学习了一些Linux命令,刚开始接触命令行式的操作方式有些不太适应,习惯了windows的图形化界面要适应Linux还需要一个过程。根据教程做出一些操作,包括在实验楼的学习,让我觉得动手操作是一件愉快的事情,本周的学习任务并不轻松,还需要多加努力消化理解。

## 学习进度条

|            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| --------   | :----------------:|:----------------:|:---------------:  |:-----:|
| 目标        | 5000行            |   30篇           | 400小时            |       |
| 第一周      | 0/0           |   1/2            | 20/30             | 学习了一些Linux核心命令 |
 

## 参考资料
-  [《深入理解计算机系统V2》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html])
-  ...
原文地址:https://www.cnblogs.com/ZouJR/p/5869613.html