Linux简介

linux是一个操作系统,就像windows一样。它和windows还是有很大区别的,linux是开源系统他的版本众多而且使用起来比windows复杂。大型的服务系统都是linux系统,因为他强大的内核,有优异的服务性能,作为计算机的学习者是一个必学的系统。

系统命令

查看命令

ls

ls是最基础的查看文件夹的命令

单纯的ls只输出目录下没有隐藏的文件和文件夹使用参数可以获得更多信息。参数格式解释:-a是参数 后面的–all是英文全称,在使用总简称方便都是用简称。

使用ls可以阅读帮助信息,ls --help 或者 man ls

-a

1
2
3
4
5
6
-a, --all                 #打印出所有的文件包括隐藏文件和本级(.)上级(..)目录
-A, --almost-all #除了本级上级目录其他全打印

root@bl:~# ls -a
. .cache i.txt .profile
.. .config .jupyter .pydistutils.cfg

-l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-l                        #列出详细信息

root@bl:~# ls -l
total 466964
drwxr-xr-x 20 root root 4096 Apr 21 12:51 anaconda3
-rw-r--r-- 1 root root 478051940 Jan 31 2017 Anaconda3-4.2.0-Linux-x86_64.sh
-rwxr-xr-x 1 root root 55 Feb 29 21:53 bash.sh
drwxr-xr-x 5 root root 4096 Jun 29 23:09 C
drwxr-xr-x 3 root root 77824 Jul 1 11:22 crunch
-rw-r--r-- 1 root root 146 Feb 17 20:35 Gemfile
-rw-r--r-- 1 root root 100 Feb 17 20:35 Gemfile.lock
-rw-r--r-- 1 root root 4 Feb 28 21:38 i.txt
-rw------- 1 root root 1929 Apr 21 12:53 mycert.pem
-rw-r--r-- 1 root root 4 Feb 28 21:38 o.txt
drwxr-xr-x 3 root root 4096 Feb 17 21:01 vendor
drwxr-xr-x 6 root root 4096 Apr 21 12:23 venv

使用这个命令可以看到很多信息,输出结果解释:

以第一个为例:

1
2
3
4
5
6
7
8
drwxr-xr-x 20 root root      4096 Apr 21 12:51 anaconda3
d代表文件夹 -代表文件
rwxr-xr-x 这里三个为一组,分别表示拥有者,root,其他人权限,rwx分别代表读写执行-代表没有这个权限(s)代表网络接口程序
20 代表文件硬连接数,使用ln命令进行连接
root root 分别代表拥有者和拥有者所在组
4096表示大小
Apr 21 12:51 最近访问修改的时间
anaconda3 名字如果是一个符号链接,那么会有一个 “->” 箭头符号,后面根一个它指向的文件名

-h

人性化展示结合-l参数使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-h, --human-readable

root@bl:~# ls -lh
total 457M
drwxr-xr-x 20 root root 4.0K Apr 21 12:51 anaconda3
-rw-r--r-- 1 root root 456M Jan 31 2017 Anaconda3-4.2.0-Linux-x86_64.sh
-rwxr-xr-x 1 root root 55 Feb 29 21:53 bash.sh
drwxr-xr-x 5 root root 4.0K Jun 29 23:09 C
drwxr-xr-x 3 root root 76K Jul 1 11:22 crunch
-rw-r--r-- 1 root root 146 Feb 17 20:35 Gemfile
-rw-r--r-- 1 root root 100 Feb 17 20:35 Gemfile.lock
-rw-r--r-- 1 root root 4 Feb 28 21:38 i.txt
-rw------- 1 root root 1.9K Apr 21 12:53 mycert.pem
-rw-r--r-- 1 root root 4 Feb 28 21:38 o.txt
drwxr-xr-x 3 root root 4.0K Feb 17 21:01 vendor
drwxr-xr-x 6 root root 4.0K Apr 21 12:23 venv

可以看出字节变成了更容易理解的存储单位。

–time

使用这个参数可以查看文件的atime/ctime

1
2
ls --time=atime -l
ls --time=ctime -l

-r

1
2
-r, --reverse            #将输出的反排
-R, --recursive #递归列出子目录

-Q

1
-Q, --quote-name         #将输出名字用引号括起来

-1

这个是数字1,

1
-1                       #将输出纵向排列

lspci

其实这也属于ls命令范畴,列出pci设备

1
2
3
4
5
6
7
8
9
10
11
root@bl:~# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:04.0 Communication controller: Red Hat, Inc. Virtio console
00:05.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:06.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon

我也看不懂,有时候总是遇到驱动问题,就参考一下这个是否加载了硬件

lsusb

列出usb接口的设备

1
2
3
root@bl:~# lsusb
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

捣鼓无线遇到问题的时候经常用到

lsmod

显示载入系统的模块

1
2
3
4
5
root@bl:~# lsmod
Module Size Used by
intel_rapl_msr 20480 0
intel_rapl_common 28672 1 intel_rapl_msr
nfit 69632 0

看不懂学习不会受到什么影响

自定义命令识别

linux系统用的多的会发现有时候用 ll可以输出ls -l 有的系统确不行,其实这是因为自定义了系统命令识别

可以使用which 命令查看源命令目标文件是什么

1
2
root@bl:~# which ls
/bin/ls

也可以使用alias查看全部的自定义命令

1
2
3
4
5
root@bl:~# alias ll
alias ll=' ls -l'
root@bl:~# alias
alias lh='ls -lh'
alias ll=' ls -l'

使用alias定义命令

1
2
3
4
5
root@bl:~# alias al="alias"
root@bl:~# al
alias al='alias'
alias lh='ls -lh'
alias ll=' ls -l'

成功将al指向了alias以后输入al就等于输入了alias

dir

dir命令和ls非常相似,参数基本可以共用。而且在windows也有这个命令,详细内容可看CMD基础节约篇章不再重复描述。

stat

查看文件的操作时间

1
2
3
4
5
6
7
8
9
root@bl:~# stat C
File: C
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fe01h/65025d Inode: 393236 Links: 5
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-06-29 09:18:13.777841952 +0800
Modify: 2020-06-29 23:09:21.494070326 +0800
Change: 2020-06-29 23:09:21.494070326 +0800
Birth: -

file是名字

size表示大小 blocks文件使用的数据块总数 IO blockIO块大小 directory表示这个是文件夹如果是文件显示regular file

device设备 Inode标志值 links 硬链接

access权限

access最近访问时间

modify文件内容的修改时间

change文件的状态时间

dpkg

用来查看命令有关的软件

1
dpkg -L 命令名

top

使用top命令可以调出实时的进程,相当于任务管理器

1
2
3
4
Tasks:  78 total,   1 running,  77 sleeping,   0 stopped,   0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3940.5 total, 2854.5 free, 109.2 used, 976.8 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 3589.3 avail Mem

根据英文基本上能够看懂参数的意思

free

列出内存的使用状况,一般加上参数-h使显示更人性化

1
2
3
4
root@bl:~# free -h
total used free shared buff/cache available
Mem: 3.8Gi 109Mi 2.8Gi 2.0Mi 976Mi 3.5Gi
Swap: 0B 0B 0B

uname

显示系统的信息

不加参数单纯显示系统类型

1
2
root@bl:~# uname
Linux

-a

显示完整系统信息

1
2
root@bl:~# uname -a
Linux bl 5.4.0-kali3-amd64 #1 SMP Debian 5.4.13-1kali1 (2020-01-20) x86_64 GNU/Linux

其实我这个系统是一个单纯的Debian我修改成了kali的镜像源显示出来的也是kali

-r

1
2
root@bl:~# uname -r
5.4.0-kali3-amd64

ps

显示进程

单纯使用ps可以显示目前正在运行的进程

1
2
3
4
5
root@bl:~# ps
PID TTY TIME CMD
129377 pts/0 00:00:00 bash
129408 pts/0 00:00:00 top
129427 pts/0 00:00:00 ps

经常结合kill使用干掉进程

-ef

显示出进程的UID ,PID,PPID,C,STIME,TTY,TIME CMD

UID是用户ID,PID是进程ID,PPID是父进程ID

-aux

显示出进程的USER,PID ,%CPU, %MEM ,VSZ ,RSS,TTY, STAT START ,TIME COMMAND

kill

结束进程经常使用-9参数

kill -9 PID

1
2
3
4
5
6
7
8
9
10
root@bl:~# ps
PID TTY TIME CMD
129377 pts/0 00:00:00 bash
129408 pts/0 00:00:00 top
129440 pts/0 00:00:00 ps
root@bl:~# kill -9 129408
root@bl:~# ps
PID TTY TIME CMD
129377 pts/0 00:00:00 bash
129441 pts/0 00:00:00 ps

updatedb

更新本地数据库,没什么太大的拓展性,有的系统没有这命令,我使用的parrot系统有这条命令

tail

查看文件后面的内容,默认查看十行

-n参数设置需要看的行数

1
2
3
4
root@bl:~# tail -n 3 a.txt 
10
11
12

-f参数同步更新,如果文件后面被追加内容也同时显示

watch

每隔几秒运行程序,并查看结果

1
watch -n 2 tail a.txt

每隔两秒运行一下tail a.txt,显示结果打印出来。

grep

将指定的内容继续检索,应用及其广泛。

grep筛选的目标输出只会打印包含目标的行

1
2
root@bl:~# ifconfig | grep "172"
inet 172.18.54.193 netmask 255.255.240.0 broadcast 172.18.63.255

-a 或者 -b

显示目标前后几行

1
2
3
4
root@bl:~# ifconfig | grep -a1 "127.0.0"
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>

-v

规定不显示的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@bl:~# ifconfig | grep -v "127.0.0"
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.54.193 netmask 255.255.240.0 broadcast 172.18.63.255
inet6 fe80::216:3eff:fe10:87c5 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:10:87:c5 txqueuelen 1000 (Ethernet)
RX packets 1641371 bytes 370730139 (353.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1691349 bytes 199917917 (190.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 48 bytes 3960 (3.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48 bytes 3960 (3.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ifconfig命令返回值中只有含127.0.0的行没有打印出来。

-r
递归查询所有的文件及内容找到需要查询的字符

默认在当前目录下查询

1
root@bl:~# grep -r "find something"

还可以在父目录进查询

1
root@bl:~# grep -r "find something" ..

有两个子命令,egrep和fgrep

egrep正则表达式检索

1
2
root@bl:~# ifconfig | egrep "1.2"
inet 172.18.54.193 netmask 255.255.240.0 broadcast 172.18.63.255

fgrep原文检索不能使用正则表达式

其实直接使用grep可以同时用正则和原文,它已经包含了egrep和fgrep

whereis

全部目录查照文件名

1
2
root@bl:~# whereis shadow
shadow: /etc/shadow /usr/include/shadow.h /usr/share/man/man5/shadow.5.gz

awk

列筛选工具,主要作用是分隔字符串

-F参数指定分隔符,一般使用" "。如果想打印第一个需要使用’{print $1}'注意这里是单引号,$0表示全部

1
2
3
4
5
6
7
8
9
10
11
root@bl:~# ps | awk -F " " '{print $1}'
PID
130623
130737
130738

root@bl:~# ps | awk -F " " '{print $0}'
PID TTY TIME CMD
130623 pts/0 00:00:00 bash
130739 pts/0 00:00:00 ps
130740 pts/0 00:00:00 awk

'{print NF}'打印所有的域数

1
2
3
4
5
root@bl:~# ps | awk -F " " '{print NF}'
4
4
4
4

从命令来看,ps用空格分开的话一共有4段这些就是域数

cut

cut也是分隔字符串,不过他和awk是有区别的,cut在指定分隔符后输出内容不会包括分隔符。但是有些情况需要用到分隔符分隔又需要用到分隔符。

使用-d参数指定分隔符

使用-f选择需要选择的段

1
2
3
4
5
root@bl:~# ps |cut -d " " -f 2

131502
131526
131527

将空格作为分隔符,如果输出第一个字段全都是空格。

wc

统计字节行数等信息的。

-l

统计行数

1
2
root@bl:~# cat a.txt | wc -l
18

输出的内容有18行

-c

统计字节数

1
2
root@bl:~# cat a.txt | wc -c
45

这个文本有45个字节

-w

统计字数

1
2
root@bl:~# cat a.txt | wc -w
18

-L

打印最长行的长度

1
2
root@bl:~# cat a.txt | wc -L
2

单纯使用wc会返回三个信息

1
2
root@bl:~# ps | wc
5 20 148

分别代表行数,字数,字节数

sort

对内容进行排序,默认是正序排列

-r参数倒序排列

uniq

剔除重复的内容

paste

合并文件,但是不会生成新的文件,仅仅在屏幕上打印出来

1
2
3
4
5
6
root@bl:~# cat i.txt 
1 a
root@bl:~# cat o.txt
1 b
root@bl:~# paste i.txt o.txt
1 a 1 b

join

将两个文件相同的进行合并,合并内容打印仅仅在屏幕上打印出来

1
2
3
4
5
6
root@bl:~# cat i.txt 
1 a
root@bl:~# cat o.txt
1 b
root@bl:~# join i.txt o.txt
1 a b

系统配置命令

ifconfig

这个命令是用于显示网络信息,调试网络的时候非常重要,windows里是ipconfig,linux里无法使用ipconfig

单纯输入ifconfig显示信息如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@bl:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.54.193 netmask 255.255.240.0 broadcast 172.18.63.255
inet6 fe80::216:3eff:fe10:87c5 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:10:87:c5 txqueuelen 1000 (Ethernet)
RX packets 1661659 bytes 373296201 (356.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1708554 bytes 205831385 (196.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 48 bytes 3960 (3.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48 bytes 3960 (3.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

很多人只是用来看一下ip信息,其实这一串输出信息里有很大的学问,协议方面的知识涉及的比较多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上面的输出信息整体可以分为两大块
eth0 和 lo
这是两个网路适配器,eth0是用来连网的,lo是自身环路

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
flags是标志符号
UP 表示网卡打开
broadcast 代表有广播地址
running 代表网卡插着线
multicast 代表可多播
mtu 代表最大传输单元

inet 172.18.54.193 netmask 255.255.240.0 broadcast 172.18.63.255
分别是ip地址 子网掩码 广播地址

inet6 fe80::216:3eff:fe10:87c5 prefixlen 64 scopeid 0x20<link>
ipv6地址 地址的掩码长度 该网络接口的作用域仅该接口有效

ether 00:16:3e:10:87:c5 txqueuelen 1000 (Ethernet)
mac地址 发送队列的大小,此处是1000MB

RX packets 1661659 bytes 373296201 (356.0 MiB)
接收时,总的正确数据包数

RX errors 0 dropped 0 overruns 0 frame 0
接收时,总的错误数据包数 丢弃的数据包数 由于过速丢弃的数据 由于frame错误而丢弃的数据包数

TX packets 1708554 bytes 205831385 (196.2 MiB)
发送时,正确的数据包数

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
发送时,总的错误数据包数 丢弃的数据包数 由于过速丢弃的数据 由于carrier错误而丢弃的数据包数 冲突信息包的数目

mtu值

让本地MTU值与网络的MTU值一致,以致于不会出现数据包的大小超过网络传输的MTU值,而不得不进行拆包,然后组包,再进行转发。

探测mtu值

1
ping -s 1460 -M do baidu.com

强制发送1460(+28)字节的包给百度,慢慢累积,如果发送错误则查过了最大mtu

更改mtu

1
ifconfig eth0 mtu 1488 up

一般mtu值都不需要更改

打开/关闭网络适配

有时候会出现网络适配器没有打开的情况,需要用到ifconfig -a进行查看,然后选择网卡打开

1
2
3
ifconfig -a
ifconfig eth0 up
ifconfig eth0 down

如果使用macchanger更改mac地址必须要先关闭这个网卡

手动设置ip

1
ifconfig eth0 ip

修改mac地址

1
ifconfig eth0 hw ether mac

iwconfig

用来显示无线网卡的命令,有些系统没有这个命令

hciconfig

蓝牙适配器,用来显示蓝牙的命令,有些系统没有这个命令

dhclient

用来配置网络的命令,常用的就两个

-r释放ip信息

1
dhclient -r

信息释放完后没有ip地址,无法上网。

-v显示详细获取信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─[root@parrot]─[~]
└──╼ #dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:0c:29:c9:00:54
Sending on LPF/eth0/00:0c:29:c9:00:54
Sending on Socket/fallback
DHCPREQUEST for 192.168.248.143 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.248.143 from 192.168.248.254
RTNETLINK answers: File exists
bound to 192.168.248.143 -- renewal in 784 seconds.

这种类型的返回信息表示已经成功获得ip地址。

route

路由配置

-n查看网关(gateway)

1
2
3
4
5
6
┌─[root@parrot]─[~]
└──╼ #route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.248.2 0.0.0.0 UG 0 0 0 eth0
192.168.248.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

Gateway下面的是网关地址

添加默认网关

1
2
3
4
5
6
7
8
9
┌─[root@parrot]─[~]
└──╼ #route add default gw 192.168.248.1
┌─[root@parrot]─[~]
└──╼ #route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.248.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.248.2 0.0.0.0 UG 100 0 0 eth0
192.168.248.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

添加了一个192.168.248.1的网关,其实是没有这个网关的,等于没有用

删除网关

1
2
3
4
5
6
7
8
┌─[root@parrot]─[~]
└──╼ #route del default gw 192.168.248.1
┌─[root@parrot]─[~]
└──╼ #route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.248.2 0.0.0.0 UG 100 0 0 eth0
192.168.248.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

如果删除192.168.248.2这个网关则无法上网

添加路由

1
2
3
4
5
6
7
8
9
┌─[root@parrot]─[~]
└──╼ #route add -net 192.168.247.0/24 gw 192.168.248.2 eth0
┌─[root@parrot]─[~]
└──╼ #route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.248.2 0.0.0.0 UG 0 0 0 eth0
192.168.247.0 192.168.248.2 255.255.255.0 UG 0 0 0 eth0
192.168.248.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

添加了一条192.168.247.0指向网关的路由。将子网指向网关

netstat

网络状态,windows系统也经常使用到这个命令

经常用的参数组合-pantu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
┌─[root@parrot]─[~]
└──╼ #netstat -pantu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5433 0.0.0.0:* LISTEN 1001/postgres
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 10048/sshd: root@pt
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 9779/sshd: root@pts
tcp 0 0 127.0.0.1:5985 0.0.0.0:* LISTEN 1284/python3
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1284/python3
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2953/sshd: /usr/sbi
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1002/postgres
tcp 0 0 192.168.248.143:22 192.168.248.1:50349 ESTABLISHED 9779/sshd: root@pts
tcp 4437 0 192.168.248.144:54366 35.190.48.50:443 CLOSE_WAIT 1284/python3
tcp 3007 0 192.168.248.144:54508 35.190.48.50:443 CLOSE_WAIT 1284/python3
tcp 0 0 192.168.248.144:22 192.168.248.1:50415 ESTABLISHED 10048/sshd: root@pt
tcp6 0 0 ::1:5433 :::* LISTEN 1001/postgres
tcp6 0 0 ::1:6010 :::* LISTEN 10048/sshd: root@pt
tcp6 0 0 ::1:6011 :::* LISTEN 9779/sshd: root@pts
tcp6 0 0 ::1:5432 :::* LISTEN 1002/postgres
tcp6 0 0 ::1:5432 ::1:43940 ESTABLISHED 1838/postgres: 11/m
tcp6 0 0 ::1:43940 ::1:5432 ESTABLISHED 1284/python3
udp 0 0 0.0.0.0:4500 0.0.0.0:* 764/charon
udp 0 0 0.0.0.0:500 0.0.0.0:* 764/charon
udp 0 0 192.168.248.144:68 192.168.248.254:67 ESTABLISHED 652/NetworkManager
udp 0 0 0.0.0.0:68 0.0.0.0:* 9801/dhclient
udp 0 0 0.0.0.0:68 0.0.0.0:* 9739/dhclient
udp6 0 0 :::4500 :::* 764/charon
udp6 0 0 :::500 :::* 764/charon
udp6 0 0 ::1:44191 ::1:44191 ESTABLISHED 1002/postgres
udp6 0 0 ::1:44526 ::1:44526 ESTABLISHED 1001/postgres

输出了协议,Recv-Q,Send-Q,本机IP端口,目标IP端口,状态,PID,程序名称

查看网关

1
2
3
4
5
6
7
8
┌─[root@parrot]─[~]
└──╼ #netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.248.2 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.248.2 0.0.0.0 UG 0 0 0 eth0
192.168.247.0 192.168.248.2 255.255.255.0 UG 0 0 0 eth0
192.168.248.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

使用-r就可以显示网关了,加上n是为了更加快速。

dig

dig收集dns信息的一个工具,很多linux系统自带,简单介绍一下,在信息收集章节会认真讲解

语法:dig 域名/IP [参数] [@dns服务器]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@bl:~# dig biadu.com

; <<>> DiG 9.11.14-3-Debian <<>> biadu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16108
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b6003694f39d03eac98477205f02a11bfcceb0cfbca23494 (good)
;; QUESTION SECTION:
;biadu.com. IN A

;; ANSWER SECTION:
biadu.com. 357 IN A 47.254.33.193

;; Query time: 391 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Mon Jul 06 11:57:15 CST 2020
;; MSG SIZE rcvd: 82

dig 域名不加参数则使用自己指向的DNS服务器。输出信息在信息收集介绍

使用指定服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@bl:~# dig biadu.com @8.8.8.8

; <<>> DiG 9.11.14-3-Debian <<>> biadu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55096
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;biadu.com. IN A

;; ANSWER SECTION:
biadu.com. 331 IN A 47.254.33.193

;; Query time: 30 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jul 06 11:57:25 CST 2020
;; MSG SIZE rcvd: 54

使用不同的DNS服务器获得的内容也不一样。

文件操作命令

touch

创建文件,如果是单纯创建文件则不需要参数

1
2
3
root@bl:~# touch 1
root@bl:~# dir
1 ...

每个文件都有指定的信息

  • access最近访问时间

  • modify文件内容的修改时间

  • change文件的状态时间

这些信息其实可也通过touch进行修改

1
2
3
4
5
6
7
8
9
root@bl:~# stat 1
File: 1
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fe01h/65025d Inode: 405054 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-06 12:03:32.659502366 +0800
Modify: 2020-07-06 12:03:32.659502366 +0800
Change: 2020-07-06 12:03:32.659502366 +0800
Birth: -

这个是刚刚创建的一个文件,使用touch修改时间

touch -t yymmddhhss 文件名

1
root@bl:~# touch -t 1912151230 1

将时间修改为了2019.12.15-12:30

1
2
3
4
5
6
7
8
root@bl:~# stat 1
File: 1
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fe01h/65025d Inode: 405054 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-15 12:30:00.000000000 +0800
Modify: 2019-12-15 12:30:00.000000000 +0800
Change: 2020-07-06 12:09:11.384923291 +0800

只修改了文件内容的修改时间,和访问时间,状态时间没有修改。

cp

拷贝文件或目录

1
root@bl:~# cp /etc/shadow .

拷贝/etc/shadow到当前目录下,使用方法简单,拷贝时还能更改名字

要想拷贝目录需要加传参数-r

1
root@bl:~# cp -r C/2/ ./0

将目录C/2拷贝到当前目录并改名为0

mv

移动文件或目录

使用方法和cp是一样的,主要时用来改名的

移动目录时不需要加参数

vim

vim是对文件进行编辑的一个编辑器,使用虽然复杂,但他是一个必学的技能。有些linux系统是终端,没有图形界面,编辑文件最常用到的就是vim或vi,他俩大同小异vim是vi的加强,学了vim就足够了。