《网络攻防》第1周作业
《网络攻防》第1周学习总结
主要学习内容
在学习此视频之前,虽然做过简单的嵌入式实验,也用过基本的linux命令,但是从来没有这么系统性的学习过,这一次将这个视频学习过后,确实对linux的一些基础知识有了更深的了解。在视频课程中给出了一个Linux学习路径,通过这个导图可以明确学习方向。
一、Linux系统
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
--引用自《Linux百度百科》
linux系统与windows系统在使用方面最明显的区别在于主要工作在终端模式下,也就是通过一个称之为shell的软件进行操作,它隐藏了系统底层的诸多细节,留给用户的只需通过基本命令就可实现各种操作,正如下图所示那样。
当然了,在具有图形界面的linux系统上,打开这个终端除了像windows那样用鼠标点开它,也可以使用快捷键Ctrl + Alt + t
打开,或者使用Ctrl + Alt + [F1]~[F6]
从图形界面切换至终端界面,再利用Ctrl + Alt + [F7]
切换回图形界面。灵活使用各种快捷键会让你更加感受到linux的不俗,各种快捷键加上完备的命令操作,使得linux系统具有极高的工作效率。下面主要罗列一些常用的快捷键,留待以后方便查找。
按键 | 作用 |
---|---|
Tab |
补全命令 |
Ctrl+c |
强行终止的当前程序 |
Ctrl+d |
键盘输入结束或退出终端 |
Ctrl+s |
暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z |
将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a |
将光标移至输入行头,相当于Home 键 |
Ctrl+e |
将光标移至输入行末,相当于End 键 |
Ctrl+k |
删除从光标所在位置到行末 |
Alt+Backspace |
向前删除一个单词 |
Shift+PgUp |
将终端显示向上滚动 |
Shift+PgDn |
将终端显示向下滚动 |
linux系统的文件系统与windows系统不同,在Linux当中有一个非常重要的概念: |
Linux一切皆是文件
也就是说,在Linux当中一切设备都可当做文件来进行操作。Linux采用FHS(Filesystem Hierarchy Standard)树形结构组织文件,FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。在这个树形结构中,会发现Linux系统将各种文件分类的井井有条,理解每个目录下存放的文件性质有助于后续的学习。如下:
二、常用命令
命令的基本格式:
command [options] [arguments]
linux的命令有许多,主要分为shell提供的内建命令(如:history
、cd
)和额外安装的外部命令(如:ls
、vim
),区别在于内建命令随系统加载并驻留在内核当中,而外部命令只在需要时将其调入内存,常放于/bin
、/usr/bin
、/sbin
、/usr/sbin
中。具体可利用命令type
查看:
在如此多的命令当中,帮助命令无疑是最重要的,它可以帮我们快速学习某个命令的用法。常用帮助命令有:
命令 | 作用 |
---|---|
help |
只能显示 shell 内建命令的简要帮助信息 |
command --help |
一般外部命令都有--help 参数,专门提供帮助 |
man |
比用 help 更多更详细,没有内建与外部命令的区分 |
info |
更完整的显示出帮助信息 |
cheat |
GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。需要额外安装。 |
以下列出一些常用命令,具体用法参考帮助文档,下载linux命令大全也很方便:
命令 | 作用 |
---|---|
help |
只能显示 shell 内建命令的简要帮助信息 |
command --help |
一般外部命令都有--help 参数,专门提供帮助 |
man |
比用 help 更多更详细,没有内建与外部命令的区分 |
info |
更完整的显示出帮助信息 |
cheat |
GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。需要额外安装。 |
ls |
列出目录内容 |
cd |
切换目录 |
rm |
删除文件或目录 |
mkdir |
建立目录 |
mv |
移动或更名现有的文件或目录 |
cp |
复制文件或目录 |
touch |
改变文件或目录时间、创建空文件 |
cat |
正序显示文件内容 |
pwd |
获取当前路径 |
grep |
全文检索 |
find |
查找文件在系统中的位置 |
locate |
查找文件,速度很快 |
whereis |
直接在数据库中查询文件,但只能搜索二进制文件(-b)、man帮助文件(-m)、源代码文件(-s) |
which |
在环境变量中搜索是否安装某个软件 |
rename |
批量重命名 |
declare |
声明变量 |
export |
设置或显示环境变量 |
file |
查看文件类型 |
adduser |
新增用户账号 |
usermod |
修改用户账号 |
deluser |
删除用户账号 |
chmod |
更改文件权限 |
df |
显示磁盘相关信息 |
du |
显示目录或文件大小 |
注:
其中locate
命令由于它直接通过/var/lib/mlocate/mlocate.db
数据库查找,而非检索匹配,所以速度很快。windows下的Everything软件也有类似功能,通过查找NTFS文件系统中的USN日志达到神速查找的目的,因而该软件不足之处只能查找NTFS格式的设备。
三、常用操作
1.用户及文件权限管理
利用sudo adduser zhb
可以添加一个名为zhb的用户:
切换至zhb用户,使用 who am i
命令可以查看当前用户信息,使用groups
可查看当前用户所属用户组情况:
在使用命令行的过程当中,我们经常要使用sudo
命令来临时获取root权限,但是当我们新建一个用户时,会发现它所属的用户组是一个默认与其同名的用户组,如果这时使用sudo
命令,会出现一下情况:(就拿更新软件源为例)
很明显,我们可以看到它没有sudo权限,此时可以先切换至另一个有sudo
权限的用户,执行sudo usermod -a -G sudo zhb
为zhb用户追加一个sudo用户组,这样再重新登录zhb账号,使用groups
命令:
此时就可以使用sudo
命令了。使用cat /etc/group | sort
可以看到所有的用户组信息:
如果要删除用户,可使用sudo deluser zhb --remove-home
命令。
在使用ls -l
查看目录下文件时可以看到各个文件的权限情况,如:
通过这些信息可以查看文件归属以及权限(d-目录,r-可读,w-可写,x-可执行),可通过sudo chmod
命令更改文件权限。
如以sudo
建立一个文件abc:
可看到abc文件只对root用户可写,如果要使zhb用户也能对abc文件进行读写操作,一种方法是将其改为对root用户组可写,可使用命令sudo chmod g+w abc
:
然后先按之前方法将zhb用户添加root用户组,这样就可以对abc文件进行读写操作了:
第二种方法为abc文件的其他用户添加写权限,如下:
2.环境变量
通过export
可查看环境变量,在之前使用过程中,经常使用的是PATH
这个环境变量,可通过echo $PATH
查看这个变量:
这个变量之所以比较重要,是因为它保存了我们在编译程序过程当中所用到的编译工具的路径,在执行编译时,系统会通过这个环境变量查找编译工具,所以说如果我们要搭建编译环境,那么这个变量是不可或缺的。
可通过以下命令为PATH
添加路径:
或者直接修改~/.bashrc
或~/.bash_profile
或系统级别的/etc/profile
,就好像windows下的环境变量一样。
3.文件的压缩与解压
之前也经常使用这些操作,下面简单罗列一下,以备后续查阅:
4.U盘挂载
由于使用的Ubuntu系统默认自动挂载,所以为了完成手动挂载测试,选择redhat来试验。在不插U盘时,使用fdisk -l
可以查看外部设备情况:
插上U盘后再执行,可以看到设备中多了一个sdb1
设备,这就是U盘,如果要读取其中的内容,就需要挂载,步骤如下:
四、几个有趣的命令
写到这里,不得不佩服那些写出这些命令的程序员,为“枯燥”的学习带来了乐趣。以下命令都需要通过apt-get
安装。
1.banner
2.xeyes
3.cmatrix
4.aafire
5.cowsay
6.asciiview
五、学习感想
Linux的内容非常多,学起来也比较令人头疼,所以说必须要多实践、多练习,只有这样才能真正学好、用好。后续的课程我也会继续努力学习,争取能够熟练使用Linux系统。