cat命令用于查看文件内容,并且将文件内容打印到标准输出流,并且在不跟上文件或跟上 -
时将直接读取标准输入流:
r123@localhost:~$ cat -
123test
123test
如上所示,输入123test
,回车后将打印此内容,并且换行继续等待输入
-n
选项,给输出每行内容标记行号,空行也会进行编号r123@localhost:~$ cat -n content.txt
1 只因你太美 baby
2 只因你实在是太美 baby
3 只因你太美 baby
4 迎面走来的你让我如此蠢蠢欲动
5
6
7 你是小黑子 我是真ikun
-E
选项,将每行的末尾加上$
(不会忽略换行符)r123@localhost:~$ cat -E content.txt
$ 因你太美 baby
$ 因你实在是太美 baby
$ 因你太美 baby
$ 面走来的你让我如此蠢蠢欲动
$
$
$ 是小黑子 我是真ikun
less
命令是一个文本文件查看器,允许用户在终端逐页浏览文本文件。它提供了更多的功能和交互性,相较于简单的 cat
命令,适用于浏览较大的文本文件。
选项 | 描述 |
---|---|
不携带参数 | 运行 less 后,按 “q” 键退出查看文件的模式。 |
/ | 在 less 中搜索文件内容。 |
n | 在搜索结果中查找下一个匹配项。 |
N | 在搜索结果中查找上一个匹配项。 |
G | 将光标移动到文件的末尾。 |
= | 显示当前行号。 |
% | 显示当前浏览位置在文件中的百分比。 |
箭头键/空格键 | 向下翻页。 |
b | 向上翻页。 |
h | 显示帮助信息 |
r123@localhost:~$ less content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
content.txt (END)
more
命令是一个文本文件查看器,用于在终端逐页浏览文本文件。与 less
类似,但在功能上相对较简单,主要用于基本的文件浏览。
选项 | 描述 |
---|---|
运行 more 后,按 “q” 键退出查看文件的模式。 |
|
/ | 在 more 中搜索文件内容。 |
b | 向上翻页。 |
= | 显示当前行号。 |
h | 显示帮助信息。 |
G | 将光标移动到文件的末尾。 |
r123@localhost:~$ more content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
tail
命令用于显示文件的末尾内容,默认情况下显示文件的最后 10 行(正序显示)。
选项 | 描述 |
---|---|
-n N | 显示文件末尾指定行数的内容。 |
-f | 实时监视文件末尾内容(不断更新)。 |
-c N | 以字节数显示文件末尾内容。 |
r123@localhost:~$ tail content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
head
命令用于显示文件的开头部分,默认显示文件的前 10 行。
选项 | 描述 |
---|---|
-n N | 显示文件的前 N 行。 |
-c N | 显示文件的前 N 个字节。 |
-q | 静默模式,不显示文件名。 |
-v | 显示文件名。 |
-z | 显示文件开头的零字符,而不是文件的前 10 行。 |
r123@localhost:~$ head content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
sed是一个流式文本编辑应用,它只对输入进行一次传递,因此效率更高,需要注意的是它不会直接修改文件,需要进行重定向。接下来展示操作:
-e
选项用于指定一个脚本文件,来处理输入的文本文件-f
选项用于指定一个脚本文件,来处理输入的文本文件-n
显示脚本处理完成后的内容可用的脚本:
r123@localhost:~$ sed -e "aI am really Ikun" content.txt
只因你太美 baby
I am really Ikun
只因你实在是太美 baby
I am really Ikun
只因你太美 baby
I am really Ikun
迎面走来的你让我如此蠢蠢欲动
I am really Ikun
I am really Ikun
你是小黑子 我是真ikun
I am really Ikun
指定第一行后,并对其不修改文件进行验证:
r123@localhost:~$ sed -e "1aI am really Ikun" content.txt
只因你太美 baby
I am really Ikun
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@DESKTOP-TIAOGA4:~$ cat content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@localhost:~$ sed -e "1cI am really Ikun" content.txt
I am really Ikun
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@localhost:~$ cat content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@localhost:~$ sed -e 2,3d content.txt
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
删除含小黑子的行:
r123@localhost:~$ sed -e "/小黑子/d" content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
r123@localhost:~$ sed -e "i小黑子" content.txt
小黑子
只因你太美 baby
小黑子
只因你实在是太美 baby
小黑子
只因你太美 baby
小黑子
迎面走来的你让我如此蠢蠢欲动
小黑子
小黑子
你是小黑子 我是真ikun
范围匹配与条件匹配
r123@localhost:~$ sed -n 2,4p content.txt
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
r123@DESKTOP-TIAOGA4:~$ sed -n /只因/p content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
输出全部内容
r123@localhost:~$ sed -n p content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
如下匹配1-3
行的你
,并将你替换为坤
r123@localhost:~$ sed -e 1,3s/你/坤/g content.txt
只因坤太美 baby
只因坤实在是太美 baby
只因坤太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
strings
命令用于从二进制文件中提取可打印的字符序列。这通常用于查看二进制文件中的文本信息,例如查看可执行文件或库文件中的字符串。
-a
:显示所有字符串,而不仅仅是具有可打印字符的字符串(无法显示中文)。r123@localhost:~$ strings -a MyMainClass.java
public class MyMainClass{
public static void main(String[] args){
System.out.println("Hello World!!!");
}
-n
:指定要显示的最小字符串长度。-t
:指定在输出中打印字符串当前分段位置时使用的进制(例如,-t d
表示十进制)。如下的第一行 public class MyMainClass{
终止于第26位,则第二行开头为27
r123@localhost:~$ strings -t d MyMainClass.java
0 public class MyMainClass{
27 public static void main(String[] args){
72 System.out.println("Hello World!!!");
119 }
-e
:指定输入文件的字符编码。
S
或--encoding=S
:表示将输出解释为单字节字符。L
或--encoding=L
:表示将输出解释为双字节字符。B
或--encoding=B
:表示将输出解释为四字节字符。
r123@localhost:~$ strings -e L MyMainClass.java
r123@localhost:~$ strings -e S MyMainClass.java
public class MyMainClass{
public static void main(String[] args){
System.out.println("Hello World!!!");
}
通常来讲,
curl
命令与下面的的wget
命令都可以用来外带数据到其他地方供我们查看,是主要的利用点
curl
是一个命令行工具和库,用于在终端中进行数据传输。它支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等,可以用来发送和接收数据,执行各种网络操作。
r123@localhost:~$ curl -X GET https://www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head>
...
也可以直接发起请求:
r123@localhost:~$ curl https://www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head>
...
curl -H "Content-Type: application/json" http://example.com
curl -d "param1=value1¶m2=value2" http://example.com/resource
r123@localhost:~$ curl -i https://www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2443
Content-Type: text/html
...
curl -o output.txt http://example.com/file.txt
curl -L http://example.com
curl -b "cookie1=value1;cookie2=value2" http://example.com
curl -u username:password http://example.com
curl --insecure https://example.com
wget
是一个在命令行下使用的网络下载工具,用于从 Web 或 FTP 服务器下载文件。它支持 HTTP、HTTPS 和 FTP 协议,可以在终端中执行,也可以作为后台任务运行
wget http://example.com/file.txt
wget -O output.txt http://example.com
wget -b http://example.com/file.txt
wget -c http://example.com/largefile.zip
wget --limit-rate=200k http://example.com/file.zip
wget -r http://example.com/directory/
wget --convert-links -r http://example.com
wget --max-redirect=5 http://example.com
wget -r --accept=pdf,doc http://example.com/documents/
wget --proxy=http://proxy.example.com:8080 http://example.com/file.txt
wget --no-parent http://example.com/directory/
sh
是一个 Unix 操作系统中的命令行 shell,用于执行命令和脚本:
命令/选项 | 描述 |
---|---|
sh |
Unix shell 命令行解释器 |
-c command |
在 shell 中执行指定的命令 |
-s |
使 sh 成为非交互式 shell |
-n |
检查语法错误,不执行实际命令 |
-r |
启动受限制的 shell 模式 |
-e |
一旦命令返回非零退出状态,立即退出 |
-x |
打印每个要执行的命令和参数,用于调试 |
-v |
启用详细输出,显示每个命令的执行过程 |
除了上述的常用选项,我们也可以借助调试shell
脚本那样来查看文件:
r123@localhost:~$ sh content.txt
content.txt: 1: 只因你太美: not found
content.txt: 2: 只因你实在是太美: not found
content.txt: 3: 只因你太美: not found
: not found: 4: 迎面走来的你让我如此蠢蠢欲动
: not found: 5:
content.txt: 6: 你是小黑子: not found
dd
命令是一个用于复制和转换文件的命令行工具。它通常用于对设备和文件进行底层操作,例如创建镜像、备份和复制数据。dd
的名称来源于 “数据定义”(data definition),并且功能非常强大,需要小心使用,因为它可以直接操作设备,而不提供太多安全性保护
选项 | 描述 |
---|---|
if=input_file |
指定输入文件的路径,即数据的来源。例如,if=/dev/sdb 表示从设备 /dev/sdb 读取数据。 |
of=output_file |
指定输出文件的路径,即数据的目标。例如,of=image.img 表示将数据写入名为 image.img 的文件。 |
bs=block_size |
指定块大小,即每次读取和写入的数据块大小。例如,bs=4K 表示使用 4KB 的块大小。 |
count=num_blocks |
指定要复制的块数。用于限制复制的数据量。例如,count=100 表示只复制 100 个块。 |
seek=skip_blocks |
在输出中跳过指定数量的块。用于在写入时跳过一些数据。例如,seek=10 表示在输出文件中跳过前 10 个块。 |
skip=skip_blocks |
在输入中跳过指定数量的块。用于在读取时跳过一些数据。例如,skip=5 表示在输入文件中跳过前 5 个块。 |
status=progress |
在复制过程中显示进度信息,包括已复制的字节数和速度。 |
dd if=/dev/sda of=image.img bs=4M
dd if=/dev/urandom of=random_data bs=1M count=10
dd if=image.img of=/dev/sdb bs=4M
如果运行 dd if=content.txt
命令而没有指定输出文件路径(of=output_file
),dd
命令将默认将输入文件 content.txt
的内容写入标准输出(通常是终端或控制台),即获得如下结果:
r123@localhost:~$ dd if=content.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
0+1 records in
0+1 records out
152 bytes copied, 4.73e-05 s, 3.2 MB/s
rev
是一个 Linux 命令,用于反转文本中的字符顺序。它会将每一行的字符逆序排列,即将每个字符从最后一个字符到第一个字符的顺序进行反转,它不会更改原始文件的内容,而是在输出时显示反转后的结果。
r123@localhost:~$ rev content.txt
ybab 美太你因只
ybab 美太是在实你因只
ybab 美太你因只
动欲蠢蠢此如我让你的来走面迎
nuki真是我 子黑小是你
tac
命令用于反向显示文本文件的内容,即从最后一行到第一行。
r123@localhost:~$ tac content.txt
你是小黑子 我是真ikun
迎面走来的你让我如此蠢蠢欲动
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
老生常谈的
tar
命令不再赘述,lzop
命令,gzip
命令,bzip2
命令与tar
通常情况下用于在特殊情况下将flag
目录打包,方便进行转移
lzop
是一个用于压缩和解压缩文件的命令行工具,它采用 Lempel-Ziv-Oberhumer
压缩算法。该工具主要用于在 Linux 系统中进行数据压缩,以减小文件大小并提高存储效率。
选项 | 描述 |
---|---|
-d | 解压缩文件。 |
-f | 强制执行,即使文件已存在也进行压缩。 |
-k | 保留原始文件。 |
-t | 测试压缩文件的完整性。 |
-q | 静默模式,减少输出信息。 |
r123@localhost:~/test$ lzop MyMainClass.java
r123@localhost:~/test$ ll
total 16
drwxr-xr-x 2 r123 r123 4096 Jan 20 23:52 ./
drwxr-x--- 3 r123 r123 4096 Jan 20 23:52 ../
-rw-r-Sr-- 1 r123 r123 127 Jan 17 22:52 MyMainClass.java
-rw-r-Sr-- 1 r123 r123 193 Jan 17 22:52 MyMainClass.java.lzo
r123@localhost:~/test$ lzop -df MyMainClass.java.lzo
r123@localhost:~/test$ ll
total 16
drwxr-xr-x 2 r123 r123 4096 Jan 20 23:52 ./
drwxr-x--- 3 r123 r123 4096 Jan 20 23:52 ../
-rw-r-Sr-- 1 r123 r123 127 Jan 17 22:52 MyMainClass.java
-rw-r-Sr-- 1 r123 r123 193 Jan 17 22:52 MyMainClass.java.lzo
gzip
命令是用于对文件进行压缩的常见命令。它使用 Lempel-Ziv (LZ77)
压缩算法进行压缩,并且通常以 .gz
扩展名来标识压缩文件。
指令 | 说明 |
---|---|
gzip [文件] | 将文件压缩到当前目录(不会保留源文件) |
-c | 将数据输出到标准输出中,并保留源文件 |
-d | 对压缩文件进行解压缩 |
-r | 递归压缩指定目录下以及子目录下的所有文件 |
-v | 显示每个压缩和解压缩文件的文件名和压缩比 |
r123@localhost:~$ gzip content.txt
r123@localhost:~$ ls
MyMainClass.java content.txt.gz
r123@localhost:~$ gzip -dc content.txt.gz
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
bzip2
是一个用于数据压缩的命令行工具,它使用 Burrows-Wheeler
转换和 Huffman
编码进行压缩。它默认不保留源文件
指令 | 说明 |
---|---|
bzip2 [文件名] | 直接将文件压缩至当前目录 |
-k | 保留源文件 |
-d | 解压文件指令 |
-t | 检验文件完整性 |
-c | 将数据输出到标准输出中,并保留源文件 |
r123@localhost:~$ bzip2 content.txt
r123@localhost:~$ ls
MyMainClass.java content.txt.bz2
r123@localhost:~$ bzip2 -d content.txt.bz2
r123@localhost:~$ ls
MyMainClass.java content.txt
r123@localhost:~$ bzip2 -dc content.txt.bz2
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@localhost:~$ ls
MyMainClass.java content.txt.bz2
zcat
命令是用于查看压缩文件内容的命令。它实际上是 zcat
程序的软链接,用于显示 gzip 或 bzip2 压缩文件的内容,而无需先解压缩文件。
r123@localhost:~$ zcat content.txt.gz
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
r123@localhost:~$ bzcat content.txt.bz2
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun
od
命令用于以各种不同的格式(八进制、十进制、十六进制等)显示文件的内容。它通常用于查看二进制文件或文本文件的非文本部分。
选项 | 描述 |
---|---|
不携带参数 | 默认以八进制格式显示文件内容,每组显示 16 个字节。 |
-x | 以十六进制格式显示文件内容。 |
-d | 以十进制格式显示文件内容。 |
-N N | 指定要显示的字节数。 |
-c | 以字符形式显示文件内容。 |
-A x | 显示文件偏移地址。 |
-t c | 以可读的 ASCII 码形式显示字符。 |
r123@localhost:~$ od MyMainClass.java
0000000 072560 066142 061551 061440 060554 071563 046440 046571
0000020 064541 041556 060554 071563 006573 020012 020040 070040
0000040 061165 064554 020143 072163 072141 061551 073040 064557
0000060 020144 060555 067151 051450 071164 067151 055547 020135
0000100 071141 071547 075451 005015 020040 020040 020040 020040
0000120 074523 072163 066545 067456 072165 070056 064562 072156
0000140 067154 021050 062510 066154 020157 067527 066162 020544
0000160 020441 024442 006473 020012 020040 076440 005015 000175
0000177
r123@localhost:~$ od -c MyMainClass.java
0000000 p u b l i c c l a s s M y M
0000020 a i n C l a s s { \r \n p
0000040 u b l i c s t a t i c v o i
0000060 d m a i n ( S t r i n g [ ]
0000100 a r g s ) { \r \n
0000120 S y s t e m . o u t . p r i n t
0000140 l n ( " H e l l o W o r l d !
0000160 ! ! " ) ; \r \n } \r \n }
0000177
uniq
命令用于过滤或报告文件中重复的行,是一种文本文件处理工具。
选项 | 描述 |
---|---|
不携带参数 | 从输入中仅显示唯一的行,相同的行只显示一次。 |
-c | 同时显示每行重复出现的次数。 |
-d | 仅显示重复的行。 |
-u | 仅显示不重复的行。 |
-i | 在比较行时忽略大小写。 |
-f N | 忽略文件的前 N 个字段(以空格为分隔符)。 |
-s N | 忽略文件的前 N 个字符。 |
r123@localhost:~$ uniq -c MyMainClass.java
1 public class MyMainClass{
1 public static void main(String[] args){
1 System.out.println("Hello World!!!");
1 }
1 }
base64
命令用于对文件进行 Base64 编码或解码。Base64 编码是一种将二进制数据转换为 ASCII 字符的方法,常用于在文本协议中传输二进制数据。通常情况下我们也利用其来编写一句话木马绕过限制
r123@localhost:~$ echo "hello world" | base64
aGVsbG8gd29ybGQK
r123@localhost:~$ echo aGVsbG8gd29ybGQK | base64 -d
hello world
r123@localhost:~$ base64 content.txt
5Y+q5Zug5L2g5aSq576OIGJhYnkNCuWPquWboOS9oOWunuWcqOaYr+Wkque+jiBiYWJ5DQrlj6rl
m6DkvaDlpKrnvo4gYmFieQ0K6L+O6Z2i6LWw5p2l55qE5L2g6K6p5oiR5aaC5q2k6KCi6KCi5qyy
5YqoDQoNCuS9oOaYr+Wwj+m7keWtkCDmiJHmmK/nnJ9pa3VuDQo=
r123@localhost:~$ base64 content.txt > test.txt
r123@localhost:~$ base64 -d test.txt
只因你太美 baby
只因你实在是太美 baby
只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
你是小黑子 我是真ikun