Linux操作系统介绍
命令记不住怎么办?
- 先学习最重要的命令,再慢慢补充,比如本文就是讲解最基础的命令
- 分门别类地学习
- 不要去记,不会就问AI
- 多用,自然熟练
建议总结自己的常用命令文档

查看内核版本命令(可以搜索该版本对应漏洞):
bash
uname -a
# 下面的也可以
cat /proc/version

查看发行版本

Linux内核版本=操作系统的核心引擎
Linux发行版本=把内核+软件+配置打包好的完整操作系统
虚拟机使用场景:
- 运行特定版本的操作系统
- 隔离物理机,测试用
- 提升资源利用率
Docker也是使用虚拟化技术,作用是把应用程序及所有依赖(包括代码、运行时环境、系统工具、库等)打包到一个容器中
Docker的特点:
- 开箱即用
- 快速部署
- 可移植性强
- 环境隔离

虚拟机用于提升硬件资源利用率,隔离资源
容器用于解决运行环境依赖的问题
安装虚拟机的时候记得快照,用来备份
|---------|-------|
| 虚拟交换机名称 | 用途 |
| VMnet0 | 桥接模式 |
| VMnet1 | 仅主机模式 |
| VMnet8 | NAT模式 |
虚拟交换机的作用:让相同模式的虚拟机相互连接


Liunx基础知识
Getshell指的是通过利用漏洞系统或安全缺陷,获取目标系统(如服务器、计算机等)的控制权限,从而能够以某种形式的shell(命令行界面)来操作目标系统
shell脚本以.sh结尾
工作目录:当前正在打开操作的目录
root用户的home目录是/root
其它用户的home目录/home/用户名
每个普通用户只能操作自己的home目录

man command 查看该命令的具体参数和使用方法,问AI实际更加方便
poweroff 关机
reboot 重启
|--------------|---------------|
| Tab键 | 补全命令和目录 |
| 方向键 | 查看上一条命令,下一条命令 |
| Ctrl+Insert | 复制 |
| Shift+Insert | 粘贴 |
| Alt+Insert | 复制并粘贴 |
| Ctrl+A | 光标移动至行首 |
| Ctrl+K | 清除光标后至行尾的内容 |
clear 清屏,向上滚动屏幕,命令还在
history 查看历史命令
history -c 清除历史命令,新建会话还在
彻底清除历史命令:
- Ubuntu:echo > ~/.bash_history
- Kali:echo > ~/.zsh_history
查看别名:alias
设置别名(以bash)为例:vim ~/.bashrc
格式:alias short = 'xxx;xxx'
读取并执行命令,使之生效:source ~/.bashrc
通配符:

文件描述符:


Linux文本编辑器:

搜索操作(命令模式下)

命令模式下删除一行,按dd
退出不保存,:q!
Linux软件安装:

apt update 更新软件源,找不到软件的时候更新
文件和目录管理
列出目录内容和属性:ls
ls -l /home/kali 长格式显示,权限、所有者、大小、修改时间
ls -a ~ 显示家目录下的所有文件,包含隐藏文件(以 . 开头)
打印工作路径:pwd
切换工作目录:cd 相对路径或绝对路径
查看文件类型:file
Linux不依靠后缀名判断文件类型,有的恶意文件后缀是txt,实际是elf可执行程序
bash
file test.txt
# 识别单个文件
file 1.jpg shell.py note.txt
# 识别多个文件
file -f list.txt
# 从一个文本文件里读取一堆文件名,批量检测
复制文件或目录:cp
cp 选项 源文件 目标文件
-r 递归处理,-f强行复制文件或目录,不论目标文件或目录已经存在
bash
# 查找文件或目录:find
find /etc -name a*
find / -name "aaa" 2>/dev/null
find /root -type f
find /root -type f -size +10M
whereis查找二进制程序、代码等相关文件路径
bash
# 创建空文件touch
touch a.txt
# 创建目录mkdir
mkdir test
mkdir -p /usr/local/soft
# 移动或重命名move
mv 1.txt 2.txt
mv ./a/1.txt ./b/1.txt
# 删除文件rm
rm 1.txt 2.txt
# 删除空目录rmdir
rmdir ./c
rmdir -rf ./a
# -r递归(连同子文件夹一起删除)-f强制删除
# 查看软链接
ll /usr/bin/nc
# 创建软链接
ln -s/usr/local/phpstudy/system/phpstudyctl /usr/bin/study
# 使用软链接,若源文件删除,会失效
study
文件压缩及解压缩
打包是将多个文件变成一个文件,减少文件个数
压缩是将一个文件的体积减少
常见压缩格式:
- Windows:zip、rar、7z
- Linux:gzip(tar.gz=.tgz)、bzip2(.bz2)、zip


压缩:zip text.zip *.txt
解压缩:unzip text.zip(最好先创建一个文件夹,不然解压出来全乱了)
解压缩到指定目录:unzip text.zip -d bbb
查看和处理文件内容
管道符号"|",把前一个命令要输出到屏幕上的内容当作后一个命令的输入

如何退出一个工具或命令?按q或Ctrl+C或quit或exit
统计wc
- wc -l test.conf 统计该文件的行数
- wc -w test.conf 统计该文件的单词数
对比diff:diff a.txt b.txt(对比两个文件的差异)
查看文件内容(少量)cat
分页显示more/less

bash
# 头尾信息显示head/tail
head -n 10 test.conf
tail -n 10 test.conf
tail -f /var/log/messages
搜索grep,适合单纯的查找或匹配文本

用户和权限管理
组ID(GID):
- root用户组:GID=0
- 程序用户组(系统用户组):1~999
- 普通用户组:1000~65535

1.组名、2.组密码、3.GID、4.用户列表

1.用户名、2.密码(影子文件,涉及到密码)
用户ID(UID):
- root用户:UID=0
- 程序用户(系统用户):1~999
- 普通用户:1000~65535
bash
cat /etc/passwd
# 验证任意文件读取漏洞
密码格式:

bash
# 新建用户useradd
useradd testuser
# 设置/修改用户密码passwd
passwd root 123456
# 删除用户userdel
userdel testuser
# 修改已有用户属性usermod
usermod -aG sudo test2
# 把test2用户添加到sudo组,-a追加,G表示附加组,不要直接-G,会覆盖原来所有附加组
# 查询用户账户标识id
# 查看用户whoami
# 切换用户su
su root
# chown需要root/sudo权限,下面是将test.txt所有者改为kali
sudo chown kali test.txt
# 同时修改所有者和所属用户组
sudo chown kali:kali test.txt



bash
sudo passwd root
# 修改root用户密码
chmod u+s test.txt
# 设置SUID权限,只对可执行文件生效,对目录没用,谁运行这个程序,就临时拥有这个文件所有者权限
chmod g+s test
# 设置SGID权限,在这个目录里新建的文件,自动继承目录的属组,而不是创建自己的组,很少用于文件
chmod o+t test
# SBIT(粘滞位),只对目录生效,文件设置无效
# 目录里的文件,只有文件所有者、root才能删除,其他人就算有目录的w权限,也删不掉别人的文件
# SUID提权是Linux提权最经典方向,SBIT保护共享目录,不能提权
# 提权案例如下
chmod u+s /usr/bin/find
find . -exec /bin/sh -p \
# 查看有S权限的二进制程序
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \
Linux网络管理
bash
# 下面两条命令都可以查看ip地址
ip a
ifconfig
# 测试网络连通性,Ctrl+C中断
ping www.baidu.com
# telnet探测端口
telnet 192.168.142.156 22
telnet 192.168.142.156 80
# telnet远程登录,因为不安全,已经被ssh取代
telnet bbs.newsmth.net
ssh -p 22 root@192.168.142.156
# 支持用公钥免密登录,这也是Linux常见的留后门方式
# 查看程序的网络连接情况
netstat -ap | grep ssh
ss -an | grep ssh
# 查看端口的网络连接情况
netstat -an | grep 22
ss -tn | grep 22
bash
# 收集域名相关信息
nslookup www.baidu.com
host www.baidu.com
dig www.baidu.com
# curl是命令行的HTTP客户端
curl www.baidu.com
# 向百度发一个get请求,把返回的网页源码打印出来
curl -l www.baidu.com
# 只拿响应头,不拿页面内容
curl -X POST -d "username=admin&password=123456" http://127.0.0.1/login.php
# POST提交表单,-X POST指定请求方式为POST,-d后携带POST提交的数据
curl -H "Cookie:PHPSESSID=abc123" http://127.0.0.1/login.php
# -H是加请求头,模拟浏览器
bash
# 启用或禁用防火墙
ufw enable
ufw disable
ufw status
# 允许或拒绝端口
ufw allow 80/tcp
ufw deny 22/tcp
# 开放或关闭特定服务
ufw allow ssh
ufw deny http
# 删除规则
ufw delete allow 80/tcp
系统资源状态管理
查看进程ps,主要关注有哪些进程、有没有特定进程、进程号、什么命令启动的



bash
pstree -p
# 查看用户的进程树
pstree mysql
# 守护进程
pstree -p | grep ssh
# 先找到mysql的进程号(PID),假设是1234
ps -aux | grep mysql
# 强制杀死mysql进程
kill -9 1234

bash
# 查看内存使用free,-h以人类可读的方式查看,自动MB或GB
free -h
# 磁盘使用情况df
df
文件或目录的磁盘占用大小

定时任务工具crontab
cron表达式可以让AI写,也可上网用工具查询:https://tool.lu/crontab


系统日志文件目录
