2017-2018-2 20179204《网络攻防实践》linux基础

我在实验楼中学习了Linux基础入门课程,这里做一个学习小结。

第一节 linux系统简介

本节主要介绍了linux是什么、发展历史、重要人物、linux与window的区别以及如何学习linux。

1.什么是linux

Linux是一个操作系统,就像Windows(xp,7,8)和 Mac OS。Linux 主要是系统调用和内核那两层。直观地看,操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。

2.linux与windows的区别

  • linux免费或收取少许费用;
  • linux大都为开源自由软件;
  • linux相较windows更安全,不需要装杀毒软件;
  • linux兼具图形界面操作和完全的命令行操作
  • linux可定制性强;

3.如何学习linux

第二节 linux系统简介

本节主要介绍了linux桌面环境、Linux终端。通过实践应用了常用shell命令、快捷键、通配符、使用小技巧等操作。

1.linux桌面环境

  • 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在Linux系统之上的一套软件。
  • 实验楼目前使用XFCE桌面环境,这意味着在Linux上可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。

2.linux终端

  • 通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做Shell的中间程序来完成的。Shell是指“提供给使用者使用界面”的软件(命令解析器),类似于DOS下的command(命令行)和后来的cmd.exe。
  • 在UNIX/Linux中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等。

3.命令行操作

在linux中,最重要的就是命令,包含了2个过程,输入和输出。
双击桌面上的Xfce终端图标打开终端后系统会自动运行 Shell 程序,然后可以输入命令让系统来执行。

  • 常用快捷键
快捷键 作用
tab 命令补全
ctrl+c 终止当前程序但不退出终端
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,...} | 匹配 string1 或 string2 (或更多)其一字符串|
| {c1..c2} |匹配 c1-c2 中全部字符 如{1..10}|

  • 创建&查找文件操作

$ touch adsfasd.txt wergjlkas.txt

$ ls *.txt

  • 一次性创建多个文件

$ touch love_{1..10}_linux.txt

4.banner命令实践

banner可以输出图形字符。

  • 先使用如下命令安装:
	$ sudo apt-get update
	$ sudo apt-get install sysvbanner  
  • 然后:
    $ banner shiyanlou

  • 实践 toilet / figlet 命令:
    sudo apt-get install toilet/figlet

第三节 用户及文件权限管理

本节学习了Linux中创建、删除用户、用户组以及文件权限设置等。

1.用户管理

  • 常用who命令

  • 创建用户

创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。shiyanlou 用户也属于 sudo 用户组。

  $ sudo adduser gege
  $ su -l gege

  • 用户组

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

  • 删除用户

2.linux文件权限

  • ls 命令列出并显示当前目录下的文件并查看文件权限:



  • 变更文件所有者

gege用户登陆,新建macbook文件,输入$ ll macbook查看文件所有者权限。ctrl+d退出登陆,换回shiyanlou用户身份,变更文件所有者为shiyanlou

  $ su -l gege
  $ touch macbook
  $ ll macbook
  ctrl+d
  $ cd /home/gege
  $ ls macbook
  $ sudo chown shiyanlou macbook
  $ ll macbook
  • 修改文件权限

法一:二进制数字表示

法二:加减赋值操作

输入$ chmod go-rw macbook

go 还有 u 分别表示 groupothersuser+- 分别表示增加和去掉相应的权限。

3.作业

添加一个用户 loutest,使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写。

  $ sudo touch /opt/forloutest
  $ ll /opt/forloutest
  $ sudo chmod 600 /opt/forloutest
  $ ll /opt/forloutest

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

本节学习了Linux 的文件组织目录结构;相对路径和绝对路径;对文件的移动、复制、重命名、编辑等操作。

1.linux目录结构

Linux 是以树形目录结构的形式来构建整个系统的。

  • FHS标准

$ tree /

  • 目录路径

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

相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录.为起点,以你所要到的目录为终点。

几个语句:

2.linux文件的基本操作

  • 新建文件:$ touch test创建名为 test 的空白文件。如果在其它目录没有权限,所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录。

  • 新建目录:$ mkdir gege创建名为gege的空目录;$ mkdir -p father/son/grandson创建多级目录。

  • 复制文件:$ cp test father/son/grandson复制文件test到father/son/grandson目录中。

  • 复制目录:$ cp -r father gege将father复制到目录gege中。

  • 删除文件:$ rm test

  • 删除目录:$ rm -R gege

  • 移动文件:

    	$ mkdir Documents 新建一个目录Documents
    	$ mv file1 Documents 将文件file1移动到目录中
    
  • 重命名文件:$ mv 旧的文件名 新的文件名
    批量重命名

  • 查看文件:
    使用 cattacnl 命令查看文件。前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。
    查看之前从 /etc 目录下拷贝来的 passwd 文件:$ cat passwd。可以加上 -n 参数显示行号$ cat -n passwd

  • 查看文件类型:$ file /bin/ls

3.作业

创建一个homework目录,建立名为1.txt~10.txt文件,并删除 1.txt~5.txt

第五节 环境变量与文件查找

本节学习了环境变量的作用与用法和几种搜索文件的方法。

1.环境变量

  • 变量

(1)使用 declare 命令创建一个变量名为a的变量:$ declare a

(2)使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou$ tmp=shiyanlou

(3)读取变量的值,使用echo命令和 $ 符号($ 符号用于表示引用一个变量的值:$ echo $tmp

  • 环境变量
  • 命令的查找路径与顺序

查看 PATH 环境变量的内容:

创建一个最简单的可执行 Shell 脚本和一个使用 C 语言创建的“ hello world ”程序:

  • 变量修改
  • 变量删除 $ unset temp

2.文件查找

与搜索相关的命令常用的有 whereiswhichfind locate.

whereis只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。

which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件。

find 应该是这几个命令中最强大的。

3.数字雨

4.作业

5.挑战一


第六节 文件打包与解压缩

学习了Linux 上常用压缩/解压工具——zip,rar,tar的使用。

1.zip/tar常用命令

  • zip

打包 :zip something.zip something (目录请加 -r 参数)

解包:unzip something.zip

指定路径:-d 参数

  • tar

打包:tar -zcvf something.tar something

解包:tar -zxvf something.tar

指定路径:-C 参数

2.作业

  • 火炉

  • 实践

创建一个名为 test 的文件,分别用 zip 和 tar 打包成压缩包,再解压到 /home/shiyanlou 目录。

第七节 文件系统操作与磁盘管理

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

  df:使用 df 命令查看磁盘的容量;
  du: 使用 du 命令查看目录的容量;	
  du -h:以K,M,G为单位,提高信息的可读性。
  du -h -d 0 ~:只查看1级目录的信息。
  du -a:同--all 显示目录中所有文件的大小。
  du -s:同--summarize 仅显示总计,只列出最后加总的值。



2.简单的磁盘管理

  • 使用 dd 命令创建虚拟镜像文件

从/dev/zero设备创建一个容量为 256M 的空文件:

  $ dd if=/dev/zero of=virtual.img bs=1M count=256
  $ du -h virtual.img
  • 使用 mkfs 命令格式化磁盘

使用下面的命令来将我们的虚拟磁盘镜像格式化为ext4文件系统.

  $ sudo mkfs.ext4 virtual.img

3.作业

  • cowsay命令



  • 找出当前目录下占用最大的前十个文件

第八节 Linux下的帮助命令

本节学习了内建与外部命令的差别,以及相关的帮助命令的使用。

1.内建/外部命令的差别

  • 得到这样的结果说明是内建命令(内建命令都是在 bash 源码中的 builtins 的.def中)

    	xxx is a shell builtin
    
  • 得到这样的结果说明是外部命令(外部命令在/usr/bin or /usr/sbin等等中)

    	xxx is /usr/sbin/xxx
    
  • 得到alias的结果,说明该指令为命令别名所设定的名称

    	xxx is an alias for xx --xxx
    

2.帮助命令

  • help命令( zsh 中内置并没有 help 命令,进入 bash 中,在 bash 中内置有该命令),如内建命令

    	help exit
    	help cd
    

外建命令ls:

  	ls --help
  • man命令

    	man ls
    
  • info命令(bash中带有)

    	info ls
    

第九节 Linux任务计划crontab

1.crontab

crontab 用于设置周期性被执行的指令,通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

在本实验环境中crontab需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动:

  • 启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了:sudo service rsyslog start
  • 启动crontab: sudo cron -f &
  • 添加任务: crontab -e

该任务是每分钟我们会在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)

2.挑战二

  • 题目

小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是年-月-日的格式。alternatives.log在/var/log/下面。

  • 目标

    	为shiyanlou用户添加计划任务
    	每天凌晨3点的时候定时备份alternatives.log到/home/shiyanlou/tmp/目录
    	命名格式为年-月-日。
    
  • 步骤

    	$ sudo cron -f &
    	$ crontab -e
    	1-3 []: 1
    	按下a开始编辑,在文件最后一行输入:
    	0 3 * * * cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date + \%Y\%m\%d)  
    	Ctrl+C,退出编辑模式; 
    	输入":wq",退出。
    


第十节 命令执行顺序控制与管道

本节学习了顺序执行、选择执行、管道、cut 命令、grep 命令、wc 命令、sort 命令等知识。

1.命令执行顺序控制

  • 顺序执行
    简单的顺序(执行可以使用;来完成)

  • 有选择的执行命令(which)
    先安装cowsay,语句:

    	sudo apt-get update
    	sudo apt-get install cowsay
    

输入$ which cowsay>/dev/null && cowsay -f head-in ohch~

2.管道

管道又分为匿名管道和具名管道。我们在使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示。

  • 查看/etc目录下有哪些文件和目录,使用ls命令:$ ls -al /etc。有太多内容,屏幕不能完全显示,这时候可以使用管道:$ ls -al /etc | less

  • cut命令——打印每一行的某一字段

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

打印/etc/passwd文件中每一行的前N个字符:

  	前五个(包含第五个):cut /etc/passwd -c -5
  	前五个之后的(包含第五个):$ cut /etc/passwd -c 5-
  	第五个:$ cut /etc/passwd -c 5
  	2到5之间的(包含第五个):$ cut /etc/passwd -c 2-5 
  • grep 命令,在文本中或 stdin 中查找匹配字符串

搜索/home/shiyanlou目录下所有包含"shiyanlou"的所有文本文件,并显示出现在文本中的行号:$ grep -rnI "shiyanlou" ~

这里如果中英文切换不注意会出现搜索不到结果的问题,对比:

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

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

分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数:

  行数:   $ wc -l /etc/passwd
  单词数: $ wc -w /etc/passwd
  字节数: $ wc -c /etc/passwd
  字符数: $ wc -m /etc/passwd
  最长行字节数: $ wc -L /etc/passwd

结合管道统计 /etc 下面所有目录数:$ ls -dl /etc/*/ | wc -l

  • sort排序
  • uniq去重

3.实践作业

安装aview和imagemagick,然后用asciiview命令显示图片。语句如下:

  	sudo apt-get update
  	sudo apt-get aview
  	sudo apt-get imagemagick
  	asciiview Linux.png


第十一节 简单的文本处理

本节结合管道操作学习了命令tr,col,join,paste

1.四种命令

  • tr命令 使用方式:tr [option]...set1 [set2],tr 命令可以用来删除一段文本信息中的某些文字,或者将其进行转换。

    	-d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
    	-s 去除set1指定的在输入文本中连续并重复的字符
    

  • col 命令 使用方式:col [option],col 命令可以将Tab换成对等数量的空格键,或反转这个操作。

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


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

    	-t 指定分隔符,默认为空格
    	-i 忽略大小写的差异
    	-1 指明第一个文件要用哪个字段来对比,,默认对比第一个字段
    	-2 指明第二个文件要用哪个字段来对比,,默认对比第一个字段
    


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

    	-d 指定合并的分隔符,默认为Tab
    	-s 不合并到一行,每个文件为一行
    

2.实践作业


第十二节 数据流重定向

本节学习了重定向怎么用、文件描述符(0,1,2)。

  • 重定向:前面的课程中多次使用了>或>>操作,并知道他们分别是将标准输出导向一个文件或追加到一个文件中。这就是重定向,将原本输出到标准输出的数据重定向到一个文件中,因为标准输出(/dev/stdout)本身也是一个文件,我们将命令输出导向另一个文件自然也是没有任何问题的。

  • 文件描述符

  • 实践作业

  • 挑战三

在linux中,对于文本的处理和分析是极为重要的。有一个文件叫做data1,下载地址:http://labfile.oss.aliyuncs.com/courses/1/data1。
里面记录了一些命令的记录,现在需要你从里面找出出现频率次数前3的命令并保存在/home/shiyanlou/result。

  目标
  	处理文本data
  	将结果写入result			
  	结果包含次数和命令,如“100 ls”
  提示
  	cut截取(-c 8- 明白含义吗)
  	uniq -dc去重
  	sort 的参数选择-k1 -n -r
  答案类似于
  	cat data|....|....|....   >  /home/shiyanlou/result

注意把data1文件放到home/shiyanlou目录下,语句为:

实验结果:


第十三节 正则表达式基础

学习基本命令sed ,grep ,awk的用法,正则表达式符号和语法。

1.正则表达式

  • 语法
  • 优先级

2.grep模式匹配命令

  • 常用参数
  • 操作


  • 位置——查找/etc/group文件中以"shiyanlou"为开头的行:

    	$ grep 'shiyanlou' /etc/group
    	$ grep '^shiyanlou' /etc/group
    
  • 数量

    	#将匹配以'z'开头以'o'结尾的所有字符串
    	$ echo 'zero\nzo\nzoo' | grep 'z.*o'
    	# 将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
    	$ echo 'zero\nzo\nzoo' | grep 'z.o'
    	# 将匹配以'z'开头,以任意多个'o'结尾的字符串
    	$ echo 'zero\nzo\nzoo' | grep 'zo*'
    

  • 选择

    	# grep默认是区分大小写的,这里将匹配所有的小写字母
    	$ echo '1234\nabcd' | grep '[a-z]'
    	# 将匹配所有的数字
    	$ echo '1234\nabcd' | grep '[0-9]'
    	# 将匹配所有的数字
    	$ echo '1234\nabcd' | grep '[[:digit:]]'
    	# 将匹配所有的小写字母
    	$ echo '1234\nabcd' | grep '[[:lower:]]'
    	# 将匹配所有的大写字母
    	$ echo '1234\nabcd' | grep '[[:upper:]]'
    	# 将匹配所有的字母和数字,包括0-9,a-z,A-Z
    	$ echo '1234\nabcd' | grep '[[:alnum:]]'
    	# 将匹配所有的字母
    	$ echo '1234\nabcd' | grep '[[:alpha:]]'
    

  • 排除字符
  • 扩展正则表达式

3.sed流编辑器

  • 命令基本格式:sed [参数]... [执行命令] [输入文件]...。形如:

    	$ sed -i '1s/sad/happy/' test # 表示将test文件中第一行的"sad"替换为"happy"
    
  • 常用参数

  • 常用动作指令

  • 打印指定行

  • 行内替换

  • 行间替换

4.awk文本处理语言

AWK是一种用于处理文本的编程语言工具,非常强大,课程只是带我们进行入门。

  • 命令基本格式:

awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]。其中-F参数用于预先指定前面提到的字段分隔符(还有其他指定字段的方式) ,-v用于预先为awk程序指定变量,-f参数用于指定awk命令要执行的程序文件,或者在不加-f参数的情况下直接将程序语句放在这里,最后为awk需要处理的文本输入,且可以同时输入多个文本文件。

  • 实践:新建文本文档,打印到终端


  • 常用内置变量

5.挑战四

目标:

  在文件data中匹配数字开头的行,结果写入/home/shiyanlou/num文件;
  在文件data中匹配出正确格式的邮箱,结果写入一个名为/home/shiyanlou/mail的文件。

第十四节 linux下软件安装

  • 安装软件包:$ apt-get install <软件包名>
  • 更新软件包:$ sudo apt-get update
  • 卸载软件:$ sudo apt-get remove <软件包名>
  • 搜索软件:$ sudo apt-cache search softname1 softname2 softname3……
  • 补充:使用dpkg、从二进制包安装
  • 实践作业

第十五节 linux进程概念

1.概念的理解

程序是为了完成某种任务而设计的软件;进程就是运行中的程序。一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

2.进程的属性

  • 进程的分类、衍生
  • 进程组与sessions
  • 工作管理

第十六节 Linux进程之管理控制

学习一些 Linux 所提供的工具来进行进程的查看与控制:查看进程的运行状态、进程的结束控制、进程的执行顺序。

1.进程的查看

  • top 工具的使用

    第一行:

    第二行:

    第三行:

    第四行:

    第五行:

    进程情况:
  • ps 工具的使用

使用 -l 参数可以显示自己这次登陆的 bash 相关的进程信息罗列出来:ps -l

相对来说我们更加常用下面这个命令,他将会罗列出所有的进程信息:ps aux

若是查找其中的某个进程的话,我们还可以配合着 grep 和正则表达式一起使用:ps aux | grep zsh

还可以查看时,将连同部分的进程呈树状显示出来:ps axjf

  • pstree 工具的使用

通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程的之间的相关性:

  	pstree
  	pstree -up
  	#参数选择:		
  	#-A  :各程序树之间以 ASCII 字元來连接;
  	#-p  :同时列出每个 process 的 PID;
  	#-u  :同时列出每个 process 的所属账户名称。

2.进程的管理

  • kill 命令:使用 kill 来操作进程的结束或者重启。
  • 进程的执行顺序:nice、ps命令。

第十七节 linux之日志系统

常见的日志一般存放在 /var/log 中:

可以根据服务对象粗略的将日志分为两类:系统日志、应用日志。系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等,应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等。

参考资料

Linux 基础入门(新版)

posted @ 2018-03-14 09:42  20179204葛鸽  阅读(1107)  评论(0编辑  收藏  举报