Linux操作系统常用命令
在CTF(Capture The Flag)竞赛中,Linux命令是必备工具,尤其是在Pwn、Web、Forensics、Misc等题型中。以下是一些常用的Linux命令及其用途:
1. 目录显示
在 Linux 和 Unix 系统中,ls
、ls /
和 ls 文件夹名
的区别在于它们列出的目录不同:
命令 | 作用 | 示例(假设当前目录是 /home/user ) |
---|---|---|
ls | 列出当前目录的内容 | ls → 显示 /home/user 下的文件 |
ls / | 列出根目录 / 的内容 | ls / → 显示 /bin , /etc 等 |
ls 文件夹名 | 列出指定文件夹的内容 | ls Documents → 显示 /home/user/Documents 下的文件 |
(1)ls
(不带参数)
作用:显示当前工作目录(
pwd
显示的路径)下的文件和子目录。示例:
bash$ pwd /home/user $ ls Documents Downloads Music file.txt
→ 这里列出的是
/home/user
下的内容。
(2)ls /
(带 /
参数)
作用:显示根目录
/
(即整个文件系统的顶级目录)下的内容。示例:
bash$ ls / bin boot dev etc home lib mnt opt proc root run sbin tmp usr var
→ 这里列出的是系统根目录
/
下的标准目录(如/bin
,/etc
,/home
等)。
(3)ls 文件夹名
(带目录参数)
作用:显示指定目录下的内容(可以是相对路径或绝对路径)。
示例:
bash$ ls Documents # 相对路径(相对于当前目录) report.pdf notes.txt $ ls /etc # 绝对路径 passwd hosts ssh ...
→ 如果
文件夹名
不存在,会报错:ls: cannot access '文件夹名': No such file or directory
。
(4)总结
命令 | 目标位置 | 适用场景 |
---|---|---|
ls | 当前目录 (pwd ) | 查看当前文件夹内容 |
ls / | 根目录 (/ ) | 查看系统根目录结构 |
ls 文件夹名 | 指定的目录(相对/绝对路径) | 查看某个特定文件夹的内容 |
提示:
- 使用
pwd
查看当前目录。 - 使用
ls -l
显示详细信息(权限、大小、时间等)。 - 使用
ls -a
显示隐藏文件(以.
开头的文件)。
(5)实际数据演示
2. 查看文件内容
(1) cat
作用:连接文件并打印到标准输出(快速查看文件内容)。 示例:
cat /etc/passwd # 查看文件内容
cat file1 file2 # 合并多个文件并显示到屏幕上
cat file1 file2 > new_file # 合并多个文件并重定向到new_file文件(存储)
(2) tac
作用:反向显示文件内容(cat
的反序)。 示例:
tac /etc/passwd # 从最后一行开始显示
(3) sort
作用: 对文本按行排序(默认字典序)。
示例:
基础排序
bashsort file.txt # 按字母升序
数字排序
bashsort -n numbers.txt # 按数值大小(10 > 2)
降序排列
bashsort -r file.txt # Z→A 或 100→1
去重
bashsort -u file.txt # 合并重复行
按列排序
bashsort -t',' -k2 data.csv # 按逗号分隔的第2列排序
(4) vi
**作用:**经典命令行文本编辑器,几乎所有 Unix/Linux 系统预装,vim是由vi改进的。
示例:
vi example.txt # 打开文件
i # 进入编辑模式(输入文本)
Esc :wq # 保存并退出
(5) vim
作用:强大的文本编辑器(也可查看文件)。 常用操作:
i
进入编辑模式,:wq
保存退出,:q!
强制退出。:/keyword
搜索关键词。
(6) od
作用:以十六进制或其他格式显示文件内容(用于分析二进制文件)。 示例:
od -tx1 /bin/ls # 以十六进制查看ls可执行文件
-tx1
:指定输出格式为 十六进制(hex),且每字节单独显示。
(7) more
/ less
作用:分页查看文件(支持上下翻页)。 区别:
more
:仅能向下翻页,不支持回滚。less
:功能更强,支持上下翻页、搜索(按/
输入关键词)。 示例:
less /var/log/syslog # 分页查看日志
(8) head
/ tail
作用:查看文件开头或结尾部分。 示例:
head -n 10 file.log # 显示前10行
tail -f /var/log/nginx/access.log # 实时追踪日志新增内容
(9) nl
作用:显示文件内容并添加行号。 示例:
nl /etc/hosts # 带行号输出文件
(10) uniq
作用:过滤重复行(通常需先配合 sort
使用)。 示例:
sort file.txt | uniq # 去重并排序
3.执行函数
(1) system
作用:执行系统命令并直接输出结果。 风险:若参数用户可控,会导致 RCE。 示例:
system("ls -l /"); // 列出根目录
(2) shell_exec
作用:执行命令并返回输出(无直接回显)。 示例:
$output = shell_exec("id");
echo $output; // 显示命令结果
(3) popen
作用:打开进程文件指针,用于双向命令交互。 示例:
$handle = popen("/bin/ls", "r");
echo fread($handle, 1024);
pclose($handle);
(4) proc_open
作用:更复杂的进程控制(可操作 STDIN/STDOUT/STDERR)。 示例:
$process = proc_open("ls", [["pipe","r"],["pipe","w"],["pipe","w"]], $pipes);
echo stream_get_contents($pipes[1]); // 获取输出
(5) 反引号 ``
作用:等价于 shell_exec
。 示例:
$result = `whoami`; // 执行命令
(6) passthru
作用: 直接执行外部系统命令,并将 原始输出直接发送到浏览器/终端(不返回结果,适合处理二进制数据如图片压缩、视频流等)。
语法:passthru(string $command, int &$return_var = ?): void
$command
:要执行的系统命令(如ls -l
)。$return_var
(可选):存储命令的退出状态码(0 通常表示成功)。
示例
执行命令并显示输出
phppassthru("ls -l /tmp"); // 列出/tmp目录内容(直接输出)
获取命令状态码
phppassthru("whoami", $status); echo "Exit status: " . $status; // 输出状态码(如0)
处理二进制数据
phpheader("Content-Type: image/png"); passthru("cat image.png"); // 直接输出PNG图片