此篇文章是我参与 #青训营笔记创作活动 的第2篇笔记
主要是简单写一下我在学习计算机相关知识时为什么选择使用Linux系统,以及自己的Linux学习记录,水平不高还望大佬们包容。
0x01 the reason why I chose Linux
为什么我会选择使用Linux系统来进行学习呢?
其实在参与青训营活动之前我是一个主 C++ 的计算机相关专业~~(其实是学安全的)学生,而且当时的我还有点想走PWN二进制漏洞利用(想一起交流学习的师傅可以戳我)~~及 C++ 后端开发的路线,所以就自发地浅浅学习了Linux相关知识。
当我接触Linux之后,便对Linux系统的高效性有了很深的感触。
比如Linux的许多操作都可以通过命令行来完成。
从前的我可能会觉得,命令行是一种有些落后的操控计算机的方式。的确,有图形化界面为什么不使用呢?有鼠标和右键的各种功能为啥还要在这么个黑乎乎的命令行上敲命令呢,但是实际操作起来,当你的双手都在键盘上飞舞时,伸出手移动鼠标再点右键会是一个更加麻烦的选择,而命令行操作则会出奇的流畅顺滑且舒适。
举个小栗子,倘若你想要复制、剪切或删除一个文件时,图形化界面下我们需要打开文件管理器并且在不同窗口之间跳转找到我们的文件,再用我们的鼠标右键来完成操作。
当如果你选择了Linux或是在其他命令行上,便只需要一行命令就能够搞定。
# 将文件 file 复制到目录 /your/path/ 中:
$ cp file /your/path/
# 使用指令 cp 将当前目录 old/dir/ 下的所有文件复制到新目录 /your/new/dir 下,输入如下命令:
$ cp –r old/dir/ your/new/dir
你还可以选择多个选项来使你的操作更加细致且高效:
$ cp [options] source destination
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于 dpR 参数组合。
- -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
- -r (--recursive):用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。
- -i (--interactive):在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖。。
- -u(--update):仅复制源文件中更新时间较新的文件。
- -v (--verbose):显示详细的复制过程。
- -p(--preserve):保留源文件的权限、所有者和时间戳信息。
- -f (--force):强制复制,即使目标文件已存在也会覆盖,而且不给出提示。
- -l:不复制文件,只是生成链接文件。
当然,从图形化界面到命令行界面是需要一定的时间来适应的,不过当你经过了一段时间的使用,一定也能够体会到Linux命令行操作的高效性。
0x02 Linux 相关知识
关于Linux相关知识的学习,我记录一下个人比较常用的命令吧:
- ls
- 列出当前目录的文件
- ls -al
- 列出当前目录所有文件的详细信息
- 包括以 . 开头的隐藏文件
- cd [path]
- 切换工作目录到 path 下
- 并且:. 表示当前目录 .. 表示上一级目录 / 表示根目录
- pwd
- 以绝对路径的方式显示用户当前工作目录
- rm -rf [file]
- 强制删除文件或目录
- mv [file1] [file2]
- 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
- cp [file1] [file2]
- 用来将一个或多个源文件或者目录复制到指定的目的文件或目录
- less [file]
- 允许用户向前或向后浏览文字档案的内容
- cat [file]
- 连接文件并打印到标准输出设备上
- echo [string]
- 打印一行文本,参数“-e”可激活转义字符
- nc [ip] [port]
- netcat 建立 TCP 和 UDP 连接IP地址的端口并监听
- ps
- 用于报告当前系统的进程状态top
- 实时查看系统的整体运行情况
- kill
- 杀死一个进程
- ifconfig
- 查看或设置网络设备
- ping
- 查看网络上的主机是否工作
- netstat
- 显示网络连接、路由表和网络接口信息
- su
- 切换当前用户身份到其他用户身份
- sudo [command]
- 以系统管理员的身份执行指令,授权所执行指令的执行指令。
- touch [file]
- 创建新的空文件
- mkdir [dir]
- 创建目录
- chmod
- 变更文件或目录的权限
- chown
- 变更某个文件或目录的所有者和所属组
- uname -a
- 找到对应内核版本全部信息
- exit
- 退出 shell
- man [command]
- 查看Linux中的指令帮助、配置文件帮助和编程帮助等信息
- apropos [whatever]
- 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字
- |
- 管道命令符 将一个命令的标准输出作为另一个命令的标准输入
还有一些常用的快捷键:
- Up(Down) # 上(下)一条指令
- Ctrl + c # 终止当前进程
- Ctrl + z # 挂起当前进程,使用“fg”可唤醒
- Ctrl + d # 删除光标处的字符
- Ctrl + l # 清屏
- Ctrl + a # 移动到命令行首
- Ctrl + e # 移动到命令行尾
- Ctrl + b # 按单词后移(向左)
- Ctrl + f # 按单词前移(向右)
- Ctrl + Shift + c # 复制
- Ctrl + Shift + v # 粘贴
一些根目录的知识:
/bin
、/sbin
:链接到/usr/bin
,存放 Linux 一些核心的二进制文件,其包含的命令可在 shell 上运行。/boot
:操作系统启动时要用到的程序。/dev
:包含了所有 Linux 系统中使用的外部设备。需要注意的是这里并不是存放外部设备的驱动程序,而是一个访问这些设备的端口。/etc
:存放系统管理时要用到的各种配置文件和子目录。/etc/rc.d
:存放 Linux 启动和关闭时要用到的脚本。/home
:普通用户的主目录。/mnt
:这个目录让用户可以临时挂载其他的文件系统。/proc
:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。/root
:系统管理员的主目录。/srv
:存放一些服务启动之后需要提取的数据。/sys
:该目录下安装了一个文件系统 sysfs。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建时,对应的文件和目录也在内核对象子系统中被创建。/tmp
:公用的临时文件存放目录。/usr
:应用程序和文件几乎都在这个目录下。/usr/src
:内核源代码的存放目录。/var
:存放了很多服务的日志信息
附录
本文参考链接及推荐阅读:
Linux 教程 | 菜鸟教程 (runoob.com) # 主要的参考资料
为什么建议大家使用 Linux 开发 - 夏日浅笑、 - 博客园 (cnblogs.com) # 这位佬讲得比我好多了()
CTF PWN新手入门篇 PWN学习大纲 (qq.com) # 夹带私货
PWN环境二次搭建记录-Ubuntu 22.04 · ta0lve # 狠狠地夹带私货