Linux基础命令大全

目录

声明

  • 本文中,[参数]表示文件、目录或路径; [name]表示文件名;

    ​ [number]表示任意整数;[letter]表示任意字母;[word]表示任意内容;


xshell快捷键

Ctrl + C:中断当前运行的命令。
Ctrl + Z:将当前任务放到后台,并暂停。
Ctrl + A:移动光标到行首。
Ctrl + E:移动光标到行尾。
Ctrl + U:剪切;删除光标前的所有内容。
Ctrl + K:剪切;删除光标后的所有内容。
Ctrl + Y:粘贴;Ctrl + U或Ctrl + K删除的内容。
Ctrl + L:清屏,等同于输入clear命令。
Tab:命令或文件名自动补全。

缓冲区(buffer)和缓存区(cache)

将数据写入到内存中,这个存放数据的内存空间在linux系统中一般被称为缓冲区(buffer),例如:写入到内存缓冲区,即写缓冲。

从内存里读取数据,这个存放数据的内存空间在linux系统中一般被称为缓存区(cache),例如:从内存读取,即读缓存

man 查看帮助手册

语法形式

man	[linux命令]

示例

[root@Dezyan ~]# man mkdir

常见的Linux操作系统类型

Kylinv10sp3		国有政府机构使用  政治原因
Ubuntu22.04.4	开发人员进行使用
centos7.6/centos7.9 国有互联网企业 已停止维护
Debian     金融行业应用
kali       网安人员关注的

--help 查看帮助信息

语法形式

[Linux命令] --help

示例

[root@Dezyan ~]# mkdir --help

shutdown 关机重启命令

语法形式

shutdown
shutdown [选项]

选项

-c 				# 取消关机
-h now/[number] # now:立刻关机;[number]:n分钟后关机
				# <=>halt;init 0;
-r [number] 	# [number]:n分钟后重启系统;不加[number]:默认一分钟后重启
				# <=>reboot;init 6;

pwd 查看当前所在的路径

语法形式

pwd

示例

[root@Dezyan ~]# pwd
/root

cd 切换用户当前工作目录

语法形式

cd [选项] [参数]

选项(可为空)

~	# 切换到家目录 <=> 直接输入cd
-	# 返回上一次所在的目录
.	# 进入当前目录
..	# 进入上一级目录
	# ../../	进入上两级目录
/	# 进入到根目录

示例

#进入到/opt目录下
[root@Dezyan ~]# cd /opt
[root@Dezyan opt]#

ls 显示目录内容列表

语法形式

ls [选项] [参数]

选项(可为空)

-l	#显示文件的详细信息	<=>	ll
-a	#显示目录下所有文件信息(包括隐藏文件)
-i	#显示文件inode号
-s	#显示文件大小信息
-h	#显示文件大小信息(以人类可读方式查看)
-t  # 按时间信息排序。
#常用 -lhi 来展示文件全部信息;

示例

[root@Dezyan ~]# ls -l /opt/
总用量 0
dr-xr-xr-x 5 root root 79  3月 24  2023 kylin-sm-package
drwxr-xr-x 4 root root 58 10月 25 00:43 patch_workspace
[root@Dezyan ln]# ls -lih /etc/sysconfig/network-scripts/ifcfg-ens33 
1324991 -rw-r--r-- 1 root root 357 10月 24 16:45 /etc/sysconfig/network-scripts/ifcfg-ens33

ls -lhi输出内容详解

[root@Dezyan ~]# ls -lhi /etc/hosts
67162862 -rw-r--r-- 1 root root 158  6月 23  2020 /etc/hosts
第1列		文件inode号信息: 从磁盘调取查看数据的索引(指示板)
第2列		文件数据类型:    文本文件 目录文件 设备文件 链接文件...
第3列		文件权限信息:    文件如何进行管理操作,登录系统用户可以不可以管理操作指定文件
第4列		数据文件硬连接数:查看文件数据多个方式
第5列		文件数据属主信息:文件创建者 文件管理者
第6列		文件数据属组信息:除了文件创建者和管理者,还有哪些其他的系统用户可以管理文件“}
第7列		文件数据大小信息:占用磁盘空间情况(默认大小单位 字节)
第8列		文件数据修改时间:文件信息被修改编辑的时间记录信息

stat 用于显示文件的状态信息(时间)

stat输出的文件信息相较于ls更全面

语法格式

stat [参数]

输出内容详解(ubt系统)

root@Dezyan01:~# stat /etc/hosts
  File: /etc/hosts
  Size: 204       	Blocks: 8          IO Block: 4096   regular file
Device: fc03h/64515d	Inode: 654183      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    4/     adm)
Access: 2024-11-04 20:17:58.347748698 +0800
Modify: 2024-09-26 16:56:53.159484223 +0800
Change: 2024-09-26 16:56:53.159484223 +0800
 Birth: 2024-09-26 16:56:53.159484223 +0800

对应中文可将字符集改为中文查看,或在国产Linux系统kylin中查看:

[root@Dezyan ~]# stat /etc/hosts
  文件:“/etc/hosts”
  大小:158       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:67162862    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2024-11-04 08:14:07.897695822 +0800
最近更改:2020-06-23 14:11:43.000000000 +0800
最近改动:2024-10-25 00:42:08.647004736 +0800
创建时间:-
  • Access 访问时间 atime 看一次文件,时间就会改变。
  • Modify 修改时间 显示文件上一次修改时间
  • Change 属性改变时间 ctime 上一次修改文件属性的时间
  • Birth 创建时间 btime 文件的创建时间

inode和block

inode(索引节点)

每个文件、目录和软链接在文件系统中都有一个与之对应的inode。

注意:inode号是inode的唯一标识符,它是一个数字,用于在文件系统中快速定位inode。

  • 存储文件的属性信息inode存储文件的元信息,包括文件的字节数、文件拥有者的User ID(UID)、文件的Group ID(GID)、文件的读、写、执行权限、文件的时间戳(atime、ctime、mtime)等。
  • 作为文件的索引:inode不仅存储文件的属性信息,还指向文件的实际数据块(指向数据块的指针)。通过inode,系统可以快速定位和访问文件内容。
  • 硬连接:具有相同inode的文件互为硬连接文件,这意味着它们共享同一个inode,但可以有不同的文件名。

block(数据块)

文件存取的最小单位,用来存储文件的具体内容。

注意:一个文件至少占用一个block,如果文件大小超过一个block的容量,则会占用多个block。

​ 如果未满一个block,仍会占用一个block,不会将剩余的空间分给其他文件存储使用。

inode和block的关系

  • 在Linux文件系统中,每个文件必须占用一个inode和一个或多个block。

  • inode用于存储文件的元信息和作为文件的索引,而block用于存储文件的具体内容。

  • 通过inode中指向数据块的指针,系统可以快速定位和访问文件的数据(block)。

file 查看文件类型

语法格式

file [选项] [参数]

选项

-b		#列出辨识结果时,不显示文件名称;

示例

#查看/etc/hosts的文件类型,且输出时不显示文件名称
[root@Dezyan ~]# file -b /etc/hosts
ASCII text

常见的文件类型

-		#普通文件;
d		#目录;
l		#软连接;
c		#字符设备;/dev/null,不断吸收(黑洞);/dev/urandom ,/dev/zero不断输出(白洞);
b		#块设备;
s		#socket文件、套接字文件;

详解

1.常用字节文件:
	urandom		不停的往外吐 没啥用
	/dev/null	可以将命令的结果定向到此文件;
				写脚本执行命令的时候,会根据自己想要输出的内容来定义输出格式。
		使用 ping -c1 -W2 www.baidu.com &>/dev/null 后
		可通过$? 判断上一条命令是否成功 0是成功 非0失败
	/dev/zero	用来生成固定大小的文件 或者磁盘读写测试
		dd if=/dev/zero of=/tmp/1.txt bs=1M count=1000

which 查找并显示给定命令的绝对路径

语法形式

which [参数]

示例

#查找pwd、vim命令的绝对路径
[root@Dezyan ~]# which pwd
/usr/bin/pwd
[root@Dezyan ~]# which vim
/usr/bin/vim

du 显示每个文件和目录的磁盘使用空间

语法形式

du [选项] [参数]

选项

-s       #仅显示总计,只列出最后加总的值。
-h       #以K,M,G为单位,提高信息的可读性。
#上述两个参数通常一起使用,表示查看目录或者文件的大小

示例

#将/var/log中的所有文件和目录按大小排序
[root@Dezyan ~]# du -sh /var/log/* | sort -rhk1

touch 创建新的空文件

语法形式

touch [参数] [参数] ....

参数选项

{[number]/[letter]..[number]/[letter]}	#批量创建文件

示例

#创建单个文件
[root@Dezyan ~]# touch 1.txt
#同一目录下创建多个文件
[root@Dezyan ~]# touch 1.txt 2.txt 3.txt
#不同目录下创建多个文件
[root@Dezyan ~]# touch 1.txt /opt/2.txt
#批量创建Dezyan01.txt....Dezyan10.txt文件
[root@Dezyan Dezyan01]# touch Dezyan{01..10}.txt
[root@Dezyan Dezyan01]# ls
Dezyan01.txt  Dezyan03.txt  Dezyan05.txt  Dezyan07.txt  Dezyan09.txt
Dezyan02.txt  Dezyan04.txt  Dezyan06.txt  Dezyan08.txt  Dezyan10.txt

注意

#如果创建的文件存在,只会修改文件时间,不会修改内容;
#使用绝对路径创建时,必须保证目录存在;

cat 查看文件的内容

语法形式

cat [选项] [参数]

选项

-n	#显示文件行数
-E	#每行行尾显示'$'符
-A	#同-E

示例

[root@Dezyan ~]# cat -n /etc/hosts
     1	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     2	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

mkdir 创建目录

语法形式

mkdir [选项] [参数]

选项

-p	#递归创建目录

参数选项

{[number]/[letter]..[number]/[letter]}	#批量创建目录

示例

#同一目录下创建多个目录
[root@Dezyan dzt]# mkdir a b c
[root@Dezyan dzt]# ls
a  b  c
#在不同目录下创建多个目录
[root@Dezyan dzt]# mkdir f /opt/e
#递归创建多级目录
[root@Dezyan dzt]# mkdir -p /aa/bb/cc/dd
#批量创建Dezyan01....Dezyan10目录
[root@Dezyan bb]# mkdir Dezyan{01..10}
[root@Dezyan bb]# ls
cc        Dezyan02  Dezyan04  Dezyan06  Dezyan08  Dezyan10
Dezyan01  Dezyan03  Dezyan05  Dezyan07  Dezyan09

tree 树状图列出目录的内容

语法形式

tree [选项] [参数]

选项

-L [number]	#显示一级目录下所有文件

示例

#显示目录下所有文件
[root@Dezyan ~]# tree dzy
dzy
├── a
│   └── b
│       └── c
│           └── d
│               └── e
#显示目录下一级目录的所有文件
[root@Dezyan ~]# tree -L 1 dzt
dzt
├── a

cp 文件的复制操作

语法形式

cp [选项] [源文件地址参数] [目标地址参数]

选项

-r	#递归处理,将指定目录下的所有文件与子目录一并处理;
-i	#覆盖既有文件之前先询问用户;
-p	#保留源文件或目录的属性;
-d	#当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-a	#此参数的效果和同时指定"-dpR"参数相同;

示例

#将某一文件复制到某一目录之中
[root@Dezyan ding]# cp 1.txt /zhi/
[root@Dezyan ding]# ll /zhi
-rw-r--r-- 1 root root 11 10月 25 23:09 1.txt
#将某一目录及目录中的所有文件复制到另一个目录之中
[root@Dezyan ding]# ll aa/bb/cc/dd/2.txt
-rw-r--r-- 1 root root 0 10月 25 23:11 aa/bb/cc/dd/2.txt
[root@Dezyan ding]# cp -r /ding /zhi
[root@Dezyan ding]# tree /zhi
/zhi
├── 1.txt
└── ding
    ├── 1.txt
    └── aa
        └── bb
            └── cc
                └── dd
                    └── 2.txt                    

mv 移动文件或对文件重命名

语法形式

mv [选项] [源文件地址参数] [目标地址参数]

选项

-i	#移动既有文件之前先询问用户;
-t	#可更改语法顺序为	mv [选项] [目标地址] [源文件地址] 

示例

#对当前目录的文件进行重命名(移动同理)
[root@Dezyan ding]# ll
-rw-r--r-- 1 root root 11 10月 25 23:09 1.txt
drwxr-xr-x 3 root root 16 10月 25 23:20 aa
[root@Dezyan ding]# mv ./1.txt ./aa.txt
[root@Dezyan ding]# ls
aa  aa.txt

rm 删除给定的文件和目录

语法形式

rm [选项] [参数] [参数] [参数] ...

选项

-i	#删除文件之前先询问用户;
-r	#递归处理,将指定目录下的所有文件与子目录一并处理;
-f	#强制删除文件或目录;

示例

#强制删除一个(多个)文件
[root@Dezyan ding]# touch 1 2 3 4 
[root@Dezyan ding]# ls
1  2  3  4  aa  aa.txt
[root@Dezyan ding]# rm -f 1 2 3 4
[root@Dezyan ding]# ls
aa  aa.txt
#强制删除一个目录及目录下的所有文件
[root@Dezyan ding]# tree aa
aa
└── bb
    └── cc
        └── dd
            └── 2.txt
3 directories, 1 file
[root@Dezyan ding]# rm -rf aa
[root@Dezyan ding]# tree aa
aa [error opening dir]
0 directories, 0 files

vi编辑器

三种模式及相关命令

  • 命令行模式(在其他两种模式下,按Esc即可进入) (使用vi编辑器是此模式为进入时的默认模式)

    相关命令

<#>#移动:
G		#移动光标到文件<最后一行>;
gg		#移动光标到文件内容的的<第一行>;
Ngg		#移动光标到文件内容的<第N行>;
^		#移动光标到当前行<行首>;
$		#移动光标到当前行<行尾>;
##删除:
x或X		#删除一个字符,x删除光标<后>的,而X删除光标<前>的;
D		#删除从当前光标到光标所在行尾的<全部字符>;
dd		#删除光标行<整行>的内容;
ndd		#删除当前行及其后<n-1行>;
##复制粘贴:
nyy		#将当前行及其下n行的内容复制;
p		#粘贴文本操作,将复制的内容粘贴到当前光标所在位置的<下方>;
P(大写)  #粘贴文本操作,将复制的内容粘贴到当前光标所在位置的<上方>;
##查找:
/[字符串]	#从<当前光标所在位置>开始向文件<尾部>查找指定字符串的内容;
?[字符串]	#从<当前光标所在位置>开始向文件<头部>查找指定字符串的内容;
				# n	向下继续查找;
				# N 向上继续查找;
##撤销:
u		#撤销上一次的操作;
  • 插入模式(在命令行模式下,按i即可进入)

    相关命令

A	#进入插入模式,并在<行末>添加文本;
a	#进入插入模式,并在当前字符<后>添加文本;
i	#进入插入模式,并在当前字符<前>插入文本;
I	#进入插入模式,并在<行首>插入文本;
o	#进入插入模式,并在当前行<后面>插入一空行;
O	#进入插入模式,并在当前行<前面>插入一空行;
  • 底行模式(在命令行模式下,按:即可进入)

    相关命令

set nu		#编辑时显示行号;
set nonu	#编辑时不显示行号;
w			#在执行存盘操作;w!表示强制保存;
q			#执行退出vi操作;q!表示强制退出;
wq			#执行存盘退出操作;
$			#光标跳转到最后一行的行首;

示例1:批量添加注释

1.	使用vim打开文件;
2.	ctrl+v选择需要添加注释的行;
3.	输入大写I,并输入#;
4.	Esc退出,完成批量注释;

示例2:替换动作

:s/root/oldboy/g  # 只替换光标所在行的所有root
:%s/root/oldboy/g # 将文件中所有的root替换成oldboy

问题补充:vim编辑过程中出现提示.txt.swp如何处理

在编辑一个文件的1.txt时候,系统会自动的生成.1.txt.swp隐藏文件
如果正常保存退出,则系统自动将.1.txt.swp 移动成1.txt

两种解决方式:
第一种 需要修改后的内容 -r恢复修改后的内容
	[root@oldboy ~]#vim -r 1.txt
	然后直接回车 输入:wq保存并退出
	然后再删除.swp文件即可
	[root@oldboy ~]#rm -f .1.txt.swp
第二种 不需要修改后的内容
	rm -f .1.txt.swp 在编辑文件即可
出现swp的原因:
	1.编辑过程中直接关闭了xshell
	2.断电
	3.自己同时开了多个窗口编辑同一个文件
	4.在企业中和同事同时编辑一个文件

echo 输出指定的字符串或者变量

语法形式

echo [word] [重定向符号] [参数]

重定向符号

>		#覆盖输入;
>>		#追加输入;

示例

#将手机号覆盖输入到phone.txt文件中
[root@Dezyan Dezyan01]# echo 110 > phone.txt
[root@Dezyan Dezyan01]# cat phone.txt 
110
#将手机号追加输入到phone.txt文件中
[root@Dezyan Dezyan01]# echo 120 >> phone.txt
[root@Dezyan Dezyan01]# echo 119 >> phone.txt
[root@Dezyan Dezyan01]# cat phone.txt 
110
120
119

tail 在屏幕上显示指定文件的末尾若干行

语法形式

tail [选项] [参数]

选项

-[number]/-n[number]	#输出文件的尾部number行内容;
-f						#显示文件最新追加的内容;

示例

#查看/var/log/secure日志文件中的后10行
[root@Dezyan ~]# tail -n10 /var/log/secure

head 显示文件的开头部分

语法形式

head [选项] [参数]

选项

				#默认显示前10行内容;
-[number]		#输出头部number行的内容;

示例

#查看/var/log/secure日志文件中前5行的内容
[root@Dezyan ~]# head -5 /var/log/secure 
Oct 24 16:46:29 Dezyan polkitd[758]: Loading rules from directory /etc/polkit-1/rules.d
Oct 24 16:46:29 Dezyan polkitd[758]: Loading rules from directory /usr/share/polkit-1/rules.d
Oct 24 16:46:29 Dezyan polkitd[758]: Finished loading, compiling and executing 5 rules
Oct 24 16:46:29 Dezyan polkitd[758]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Oct 24 16:46:30 Dezyan sshd[948]: Server listening on 0.0.0.0 port 22.

less 上下翻页浏览文件内容

语法形式

less [参数]

快捷键

ctrl + f		#下一页;
ctrl + b		#上一页;
g				#第一行;
G				#最后一行;
[number]		#第N行;
/				#搜索;
q				#退出;

more 显示文件内容,每次显示一屏

语法形式

more [参数]

wc 统计文件的字节数、字数、行数

语法形式

wc [选项]  [参数]

选项

			# 查看文件的字节数、字数、行数;
-l			# 统计行数;

示例

#查看文件的字节数、字数、行数
[root@Dezyan ~]#wc test.txt
## 输出结果
  7     8     70     test.txt
##行数 单词数 字节数    文件名

#统计文件行数
[root@Dezyan ~]#wc -l /etc/services 
11473 /etc/services

sort 对文本文件中所有行进行排序

语法形式

sort [选项]  [参数]
sort [选项] [选项]  [参数]

选项

				#<=> cat 文件 | sort  默认第一列内容进行排序(从小到大)
-r				#倒序排序(从大到小);
-n				#根据数字排序;
-rn				#根据数字逆序排序;
-k[num]			#按照第n列进行排序;
-k[n1],[n2]		#按照第n1列,第n2列(若第n1列相同则比较第n2列)进行排序
-kn.m			#按照第n列的第m个字符排列
-h      		#根据存储容量排序(注意使用大写字母,例如:2K 1G)。
-t[符号] 		   #指定分隔符

注意

#在选项中:
#		-rnk[num]	三个选项可以连在一起使用
#		-rhk[num]	三个选项可以连在一起使用
##		-n 和 -h		两个选项互相冲突,不能一起使用
##		-t[符号]		与所有选项都冲突,需要单独使用

示例

#将文件按照第二列的大小逆序排序
[root@Dezyan ~]# sort -rnk2  num.txt
#将/var/log中的所有文件和目录按大小排序
[root@Dezyan ~]# du -sh /var/log/* | sort -rhk1
#根据/etc/passwd 第3列按照大小逆序排序
[root@Dezyan ~]# sort -rnk3  -t: /etc/passwd | head -3
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
deyzan:x:12346:12346::/home/deyzan:/bin/bash
docker:x:12345:12345::/home/docker:/sbin/nologin

#排序:在ip.txt文件中,以.为分隔符,按照第3列,第4列(若第三列相同则比较第四列)进行从小到大排序
[root@Dezyan ~]# sort -t. -k3,4 ip.txt

uniq 显示或忽略重复的行。

语法形式

uniq [选项]  [参数]

选项

		#邻行去重;
-i      #忽略大小写的差异;
-d      #所有邻近的重复行只被打印一次。
-c		#统计文件中相同行出现的次数

示例

#统计一个文件,其内容为:第一列是用户登录的ip地址,然后统计每个ip出现的次数,并取出次数最多的前5个
cat access.log | sort |  uniq -c | sort -rn | head -5   

日志分析实战(四剑客、sort、uniq、head的实际应用)

1)查看用户登录失败的ip地址

  • 1️⃣过滤出failed password,失败登录。 取行
  • 2️⃣ 提取出这行中的ip的列。 取列
  • 3️⃣ 对ip进行排序。 相同的ip在一起。
  • 4️⃣ 去掉重复,统计次数。 去重并统计次数。uniq -c
  • 5️⃣ 对次数排序并取出前20
#本命令在ubt系统中使用
root@Dezyan02:~# grep -i 'failed password'   /var/log/auth.log |awk '{print $(NF-3)}' |sort |uniq -c |sort -rn |head -20 

2)若IP以列规律显示,亦可使用awk命令

awk '{print $1}'  access.log  |sort  |uniq -c |sort -rn |head -20 

lrzsz 上传、下载文件的插件

安装

yum install -y  lrzsz

命令说明

rz 		#上传  rz回车即可或直接拖拽
sz 		#下载  sz /etc/hostname  下载指定的文件。

split 文件切割

语法形式

split [选项]	[参数]  

选项

-b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。
-l:值为每一输出档的行数大小。
-a:指定后缀长度(默认为2)。

示例

#将大小为100K的date.file文件分割成若干个大小为10KB的小文件 并指定数字后缀和文件分割名为split_file
[root@localhost split]# split -b 10k date.file -d split_file
[root@localhost split]# ls
date.file  split_file000  split_file001  split_file002  split_file003  split_file004  split_file005  split_file006  split_file007  split_file008  split_file009

压缩与解压缩

tar

语法形式

tar [选项1] [压缩文件] 
tar [选项1] [压缩包存放路径] [待压缩文件]
tar [选项1] [压缩包存放路径] [待压缩文件] [选项2]

选项1

z		#采用zip方式进行压缩数据;
c		#创建一个压缩包文件;
v		#显示压缩数据过程;
f		#指定压缩路径信息 创建压缩包文件名称;
t		#显示压缩包内容;
x		#解压文件;

选项2

-C		#解压到指定目录;

选项应用

zcvf	简写zcf		#压缩文件;
ztvf	简写tf		#显示压缩包内容;
zxvf	简写xf		#解压文件

示例

#压缩a.txt文件到/tmp/目录中并命名为a.tar.gz
[root@Dezyan ~]# tar zcvf /tmp/a.tar.gz a.txt
#查看此压缩文件
[root@Dezyan ~]# tar ztvf /tmp/a.tar.gz 
-rw-r--r-- root/root       379 2024-10-26 17:14 a.txt
#解压此文件到/目录
[root@Dezyan ~]# tar zxvf /tmp/a.tar.gz -C /

注意:当使用zcf压缩文件时,会有如下提示信息:

[root@Dezyan ~]# tar zcf ./awk.tar.gz /etc/ 
tar: 从成员名中删除开头的“/”

该提示是tar命令安全机制,把绝对路径转换为相对路径。解压的时候当前目录。避免解压也是绝对路径,覆盖对应的文件目录。

gzip(不常用)

语法形式

gzip [参数]

区别

#使用此命令压缩文件会将原文件删除,只留下压缩文件;

zip\unzip

zip 解压缩文件

语法形式

zip -rq [压缩包存放路径] [待压缩文件]

unzip 用于解压缩由zip命令压缩的压缩包

语法结构

unzip [参数]		#解压到当前目录
#将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。
unzip -n test.zip -d /tmp
#覆盖
unzip -o test.zip -d tmp/

hostnamectl 查看与修改主机名

相关命令

hostnamectl							#查看主机名版本等信息
hostname							#查看主机名
hostname -I							#查看系统所有网口的IP地址
cat /etc/hostname					#查看主机名
hostnamectl set-hostname [NAME]		#永久更改主机名
hostnamectl [NAME]					#临时更改主机名

cat /etc/os-release 查看版本信息

[root@Dezyan ~]# cat /etc/os-release

uname 打印系统信息(内核版本)

语法形式

uname [选项]

选项

-a		#按顺序打印全部信息
-r		#打印内核release

lscpu 显示有关CPU架构的信息

/proc/cpuinfo

free 显示内存的使用情况

常用选项

#通常使用
free -h 		#查看内存使用情况;

df 显示磁盘的相关信息

常用选项

df -h			#查看硬盘空间的使用情况;
df -i			#查看硬盘inode号使用情况;

uptime 查看系统负载信息

[root@Dezyan ~]# uptime
 19:25:30 up 1 day, 11:49,  1 user,  load average: 0.00, 0.00, 0.00
#显示内容说明:
15:31:30             # 系统当前时间
up 127 days,  3:00   # 主机已运行时间,时间越大,说明你的机器越稳定。
1 user               # 用户连接数,是总连接数而不是用户数
load average: 0.00, 0.00, 0.00         #  系统平均负载,统计最近1,5,15分钟的系统平均负载

其他查看负载信息命令

1.top命令
[root@Dezyan ~]# top
top - 19:30:30 up 1 day, 11:54,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 150 total,   2 running, 148 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1956.2 total,   1245.9 free,    239.8 used,    470.4 buff/cache
MiB Swap:   2088.0 total,   2088.0 free,      0.0 used.   1532.7 avail Mem
2.查看/proc/loadavg 文件
[root@Dezyan ~]# cat /proc/loadavg 
0.00 0.00 0.00 1/174 8976
3.vmstat命令
https://wangchujiang.com/linux-command/c/vmstat.html

ln 软硬链接的创建

  • 在实际生产环境中,我们更经常使用软连接;

  • 硬链接的作用一般只有备份文件,然而由于所有硬链接都指向同一个inode,共享相同的数据块;

  • 所以硬链接只能预防rm命令的删除,不能预防内容修改,依旧容易造成数据的丢失,所以一般都使用 cp 命令进行备份;

语法格式

ln [选项] [源文件] [目标文件地址]

选项

-s		#为源文件创建软连接

示例

#为网卡配置文件创建一个软链接和一个硬链接在/ln目录下
#软连接
[root@Dezyan ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 /ln/ens33.soft
#硬链接
[root@Dezyan ~]# ln  /etc/sysconfig/network-scripts/ifcfg-ens33 /ln/ens33.hard
[root@Dezyan ~]# ll /ln/
总用量 4
-rw-r--r-- 2 root root 357 10月 24 16:45 ens33.hard
lrwxrwxrwx 1 root root  42 11月  5 04:37 ens33.soft -> /etc/sysconfig/network-scripts/ifcfg-ens33

软硬链接的区别

软连接 硬链接
创建对象 文件、目录 文件
iNode号 与源文件不同 与源文件相同
文件属性 依赖性:如果目标文件被移动或删除,软链接将变为“死链接”。 独立性:硬链接可以有多个不同的文件名,但它们指向的是同一个文件数据。
权限 软链接有自己的权限和所有权,因为它们是独立的文件,只是内容指向另一个文件。 所有硬链接共享相同的权限和所有权,因为它们实际上是同一个文件的不同引用。
链接指向 文件名 文件的inode(所有硬链接都指向同一个inode,共享相同的数据块)
文件系统 可以跨越不同的文件系统 不能跨越不同的文件系统
空间占用 占用少量空间,因为它们需要存储目标文件的路径。 不占用额外空间,因为它们共享相同的数据块。
删除行为 由于它们只是指向目标文件的路径,所以删除不会影响目标文件。 只要至少有一个硬链接存在,文件数据就不会被删除。只有当所有硬链接都被删除后,文件数据才会被释放。

为什么一个空文件夹的硬链接数是2?

  • 我们知道,在Linux系统中,文件和目录的硬链接数代表了有多少个目录项直接指向该文件或目录的inode。
  • 对于一个空文件夹来说,它的硬链接数通常是2,这是因为:
    • 当我们使用ls -a 查看一个空文件夹时,Linux系统输出的内容如下:
[root@Dezyan ~]# ls -a 11
.  ..
  • 其中:

    • ..代表父目录中的目录项每个目录至少有一个硬链接,即其父目录中的目录项。这是目录的第一个硬链接。
    • .代表目录自身每个目录都有一个指向自身的目录项.,这是目录的第二个硬链接。
  • 注意:如果目录不为空,那么它还会有额外的硬链接,因为目录中的每个文件或子目录都会在该目录的inode中增加一个硬链接。

用户管理

用户的分类

  • 用户分类的本质其实是看用户的uid和命令解释器
用户分类 uid 命令解释器 说明
root 0 /bin/bash 系统中权限最高的用户;家目录为/root
普通用户 uid>=1000 /bin/bash 权限低,只能管理自己的/home/xxx家目录
虚拟(傀儡)用户 1<=uid<1000 /sbin/nologin 无法登录,只是让服务或程序正常运行,无家目录

用户信息与密码文件

  • /etc/passwd用户信息文件
[root@Dezyan ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • 以“:”为分隔符,每列的意义为:
第1列 第2列 第3-4列 第5列 第6列 第7列
用户名 x 密码标记 UID:GID 说明信息(可以为空) 用户家目录(root,普通用户即可) 命令解释器
/bin/bash 可以登录系统
/sbin/nologin 虚拟用户
  • /etc/shadow密码信息文件
  • 常用的命令解释器:
    • /bin/bash
    • /bin/sh
    • /bin/dash #ubt,debian命令解释器
    • /sbin/nologin 虚拟用户
    • ..... /bin/csh /bin/tcsh /bin/xxxx

⭐useradd 添加用户

语法形式

useradd [选项] [用户名]

选项

-c		#添加备注文字,可以是任何文本字符串;
-m		#创建用户家目录(如果用户家目录不存在可使用此参数);
-M		#创建用户时,不创建用户家目录;
-s		#指定该用户的命令解释器;
-u		#指定该用户的uid;
-g		#指定用户的gid

注意

  • 在红帽系列系统中,创建用户时,不加任何选项时,会默认创建家目录并且指定命令解释器为/bin/bash

  • 在ubt系列系统中,创建用户时,不加任何选项时,不会创建家目录,并且命令解释器会指定为/bin/dash(sh)

示例

#创建一个uid为10011,用户名为vmware的虚拟用户,并添加“虚拟机”注释
[root@Dezyan ~]# useradd -s /sbin/nologin -M -u 10011 -c "虚拟机" vmware
[root@Dezyan ~]# tail -1 /etc/passwd
vmware:x:10011:10011:虚拟机:/home/vmware:/sbin/nologin
#在ubt系统中创建一个普通用户并创建家目录指定命令解释器为/bin/bash
root@Dezyan01:~# useradd -s /bin/bash  -m  dezyan
root@Dezyan01:~# tail -1 /etc/passwd
dezyan:x:12347:12347::/home/dezyan:/bin/bash
root@Dezyan01:~# ll /home/
total 12
drwxr-xr-x  3 root   root   4096 Nov  6 15:26 ./
drwxr-xr-x 19 root   root   4096 Nov  1 20:15 ../
drwxr-x---  2 dezyan dezyan 4096 Nov  6 15:26 dezyan/

su 切换用户

语法形式

su - [用户名]

注意

su命令切换用户,一些环境变量没有更新
su - 的时候环境变量就更新。

passwd/chpasswd 设置用户密码

  • 交互式设置密码
passwd	[用户名]
  • 非交互式设置密码
#红帽类系统
echo '[密码]' | passwd --stdin [用户名]
#ubt类系统(也可以在红帽类系统使用)
方法1:创建普通文件passwd.txt,内容格式为:
		[用户名]:[用户密码]
	  可根据文件内容批量修改:
		cat passwd.txt | chpasswd
方法2:更改单个用户密码:
		echo '[用户名]:[密码]' | chpasswd

示例

#在kylin系统中更改dezyan用户密码为dingzhiyan1016
echo 'dingzhiyan1016' | passwd --stdin dezyan
echo 'dezyan:dingzhiyan1016' | chpasswd

查看用户信息

whoami			#查看系统当前用户;
id [用户名]	  #查看用户uid,gid;是否存在;属于哪些组;
w				#查看用户登录后的当前操作;负载信息;
last			#查看当前用户历史的登录情况;
lastlog			#查看所有用户的登录情况;

userdel 删除用户

语法形式

userdel [选项] [用户名] 

选项

-r		#删除用户的同时删除家目录;
-f		#强制删除该用户,即使该用户已登录;

注意

1.userdel [用户名]	删除用户时不会删除用户家目录;
2.userdel操作在实际环境中很危险,通常会修改/etc/passwd文件,在需要删除的用户签添加注释('#'),确认无风险后再进行删除;

usermod 修改用户的基本信息

语法形式

usermod [选项] [用户名] 

选项

-c		#修改用户帐号的备注文字;
-g		#修改用户所属的群组;
-G		#修改用户所属的附加群组;
-s		#修改用户的命令解释器(可将普通用户改为虚拟用户);
-u		#修改用户uid;
-l		#修改用户帐号名称;

示例

#将普通用户dzy修改为虚拟用户
usermod -s /sbin/nologin dzy 

sudo/visudo 以其他身份来执行命令(默认root)

实际应用

  • 管理员可使用visudo(vim /etc/sudoers)命令赋予普通用户权限

    • 示例(root用户赋与普通用户命令执行权限)

      #赋与dezyan用户执行cat less more 的权限
      [root@Dezyan ~]# visudo
      #在文件100行后新添一行,格式为:
      #		用户名	  ALL=(ALL)		  多个命令的‘源地址’,每个命令之间使用一个逗号和一个空格隔开
          100 root    ALL=(ALL)       ALL
          101 dezyan  ALL=(ALL)       /bin/cat,  /bin/less, /bin/more
          
      #ALL=(ALL)<=>所有主机=(任何用户)
      
    • 示例(root用户授权普通用户所有命令不需要输入密码)

      [root@Dezyan ~]# visudo
      #在文件中修改普通用户行,格式为:
      #	101 dezyan  ALL=(ALL)       NOPASSWD: ……
          100 root    ALL=(ALL)       ALL
          101 dezyan  ALL=(ALL)       /bin/cat,  /bin/less, /bin/more
      
  • 普通用户使用,可以提取root用户赋予的权限(提权)

    • sudo -l 查看授权

    • 示例(普通用户提权)

      #使用root赋予的权限
      [dezyan@Dezyan etc]$ sudo less  /var/log/messages
      #当使用未赋予的权限或未使用sudo命令时是不能使用root赋予的权限的
      [dezyan@Dezyan etc]$ sudo grep succ /var/log/messages
      对不起,用户 dezyan 无权以 root 的身份在 Dezyan 上执行 /usr/bin/grep succ /var/log/messages。
      [dezyan@Dezyan etc]$ less  /var/log/messages
      /var/log/messages: 权限不够
      

注意(ubt系统):

在ubt系统中visudo默认使用的是nano编辑器,如需更改为vim,可进行如下操作:

root@Dezyan01:~# vim /etc/sudoers
#在Defaults开头添加一行即可
Defaults        env_editor,editor=/bin/vim
:wq!	强制保存退出

alias 定义或显示别名

语法形式

alias -p					#显示全部已定义的别名
alias [别名]				   #显示单个已定义的别名
alias [别名]='[命令或脚本]'	#设置别名

示例

  • 临时配置别名(断开Xshell重连后会失效)

    #当执行rm命令时,系统显示rm is dangerous! Do not directly delete
    [root@Dezyan ~]# alias rm='rm is dangerous! Do not directly delete'
    [root@Dezyan ~]# rm a
    rm is dangerous! Do not directly delete a
    
  • 永久配置别名

    #当执行rm命令时,系统显示rm is dangerous! Do not directly delete
    #修改/etc/profile 文件
    [root@Dezyan ~]# vim /etc/profile
    #在文件的最后一行添加
    alias rm='echo rm is dangerous! Do not directly delete'
    #重新执行一遍此文件
    [root@Dezyan ~]# source  /etc/profile
    
    ###注意###
    
    #当配置rm,cp,mv的别名时,还需修改 ~/.bashrc  文件
    #在alias rm开头加上#(注释)
    [root@Dezyan ~]# vim ~/.bashrc 
    ……………………
    #alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    ……………………
    
  • 临时取消使用别名

#在命令前添加\即可,即:
\rm -rf a.txt		即可不使用别名

md5与aide 计算和校验文件报文摘要的工具程序

  • md5 可用于校验文件是否发生了变化。

    • 常用选项
    --check			#从指定文件中读取MD5校验和,并进行校验
    -c				#同--check
    
    • 使用方法
    #查看网卡配置文件的md5值:
    [root@Dezyan ~]# md5sum ifcfg-ens33
    e928aa4718a4335366810a7961396938  ifcfg-ens33
    
    #检查ifcfg-ens33文件是否被修改过
    1.将md5值输出到a.txt中
    [root@Dezyan ~]# md5sum insert.sql >> a.txt
    2.检查
    ##1:未被修改
    [root@Dezyan ~]# [root@Dezyan ~]# md5sum --check a.txt 
    ifcfg-ens33: 成功
    ##2:被修改过
    [root@Dezyan ~]# md5sum --check a.txt 
    ifcfg-ens33: 成功
    md5sum: 警告:1 行的格式不适当
    
  • aide 批量校验文件是否发生了变化

    • kylin使用方法
    #1.安装
    yum install  -y aide
    #2.修改配置文件
    修改/etc/aide.conf 
    ##修改第10行内容为:
     10 database_out=file:@@{DBDIR}/aide.db.gz
    (原始内容: database_out=file:@@{DBDIR}/aide.db.new.gz)
    ##由于默认是对整个磁盘进行检查,太过消耗时间,我们这边可以指定检查目录
    ##修改方法:
    文件第47行即:# Next decide what directories/files you want in the database.
    将此行以后的所有内容删除!
    添加我们想要监控的目录
    保存退出即可
    #3.aide --init根据目录创建指纹信息(即初始化)
    aide --init
    #4.进行检查
    aide --check
    
    • 示例
    #监控/data/dir目录下的文件变动
    #原本目录下的所有文件
    [root@Dezyan /]# ls /data/dir/
    test002.txt
    1.在/etc/aide.conf 中添加监控目录(47行后)
    /data/dir/ FIPSR
    2.进行初始化
    aide --init
    3.修改监控目录中的文件
    [root@Dezyan /]# echo 'abc' >> /data/dir/test002.txt 
    [root@Dezyan /]# touch /data/dir/test004.txt
    [root@Dezyan /]# touch /data/dir/testAAA
    4.进行检查
    [root@Dezyan /]# aide --check
    …………………………
    ---------------------------------------------------
    Added entries:
    ---------------------------------------------------
    
    f++++++++++++++++: /data/dir/test004.txt
    f++++++++++++++++: /data/dir/testAAA
    
    ---------------------------------------------------
    Changed entries:
    ---------------------------------------------------
    
    f > ... mc..C..  : /data/dir/test002.txt
    
    ---------------------------------------------------
    Detailed information about changes:
    ---------------------------------------------------
    
    File: /data/dir/test002.txt
      Size     : 0                                | 4
      Mtime    : 2024-11-07 19:20:33 +0800        | 2024-11-07 19:37:59 +0800
      Ctime    : 2024-11-07 19:20:33 +0800        | 2024-11-07 19:37:59 +0800
      SHA256   : 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NM | 7eqv8/F3StKIhnN3DG1kCX45G8Ni19b7
                 pJWZG3hSuFU=                     | NJgt3w79GMs=
    …………………………
    ##检查结果显示:该目录下的文件发生了变动,具体为新创建了两个文件,且test002.txt被写入了新内容
    
    • Ubuntu使用方法
    #1.安装
    root@Dezyan01:~# apt -y install aide
    #2.修改配置文件
    root@Dezyan01:~# vim /etc/aide/aide.conf 
    ##修改第8.9行内容为:
      8 database_out=file:/var/lib/aide/aide.db
      9 database_new=file:/var/lib/aide/aide.db
    (原始内容:8 database_out=file:/var/lib/aide/aide.db.new
      		  9 database_new=file:/var/lib/aide/aide.db,new)
    ##对192和193行添加注释
    192 #@@x_include_setenv PATH /bin:/usr/bin
    193 #@@x_include /etc/aide/aide.conf.d ^[a-zA-Z0-9_-]+$
    ##文件底部添加检验信息
    FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
    ##添加我们想要监控的目录(记得创建该目录或指定其他目录)
    /data/dir/ FIPSR
    ##保存退出即可
    #3.aide --init根据目录创建指纹信息(即初始化)
    ##在此之前上述目录内容为空
    aide --init --config /etc/aide/aide.conf
    #4.进行检查
    ##改动目录内容,我这边选择在目录中添加一个文件mkdir /data/dir/222.txt使目录发生改变
    ##进行检查并验证
    root@Dezyan01:~# aide --check --config /etc/aide/aide.conf
    …………………………
    ---------------------------------------------------
    Added entries:
    ---------------------------------------------------
    
    f+++++++++++++++++: /data/dir/222.txt
    
    ---------------------------------------------------
    The attributes of the (uncompressed) database(s):
    ---------------------------------------------------
    …………………………
    ##检查结果显示:该目录下的文件发生了变动,具体为新创建了222.txt文件
    
    • FIPSR内容详解
    FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
    做校验的时候,收集的信息
    核心:
    sha256 	#内容
    p  		#权限
    i  		#inode
    n  		#硬链接数 
    u  		#uid 
    g  		#gid 
    s  		#大小
    m  		#修改时间
    c  		#属性改变时间
    acl+selinux+xattrs   #特殊权限属性
    

权限管理

rwx的含义及其与数字的对应关系

查看文件权限

[root@Dezyan ~]# ll 1.txt
-rw-r--r-- 1 root root 0 11月  9 02:23 1.txt
或[root@Dezyan ~]# stat 1.txt

文件权限位

  • 分组
文件权限三位为1组,共三组,分别对应:
rw-		#第一列  文件的属主(使用 u 表示)		文件属于哪个用户
r--		#第二列  文件的属组(使用 g 表示)		文件对于小组的权限
r--		#第三列  文件的其他权限(使用 o 表示)     文件对于陌生人的权限
  • 含义
r  read    # 读
w  write   # 写
x  excuter # 可执行
-		   # 无权限
  • 与数字对应关系
	本质上其实就是三位为一组,其中,当前位有任意权限时值为1,无权限的为0,组合成一个三位二进制数,最后转换为10进制的数
	#例如:	rw-r--r--	转为数字就是	110 100 100  即	644
	所以,rwx与数字(10进制)的对应关系为:
	#r	:	4
	#w	:	2
	#x	:	1
	计算权限时,只需把每组位相加即可,更为方便;

chown 变更文件或目录的拥有者或所属群组

  • 语法形式
chown [选项] [主].[组] [参数]
  • 选项
-R		#递归修改(将目录及目录下的文件一并修改
  • 示例
#修改文件1.txt的属主为dezyan
[root@Dezyan ~]# chown dezyan 1.txt 
[root@Dezyan ~]# ll 1.txt 
-rw-r--r-- 1 dezyan root 0 11月  9 02:23 1.txt

#修改文件1.txt的属主属组都为dezyan
[root@Dezyan ~]# chown dezyan.dezyan 1.txt 
[root@Dezyan ~]# ll 1.txt 
-rw-r--r-- 1 dezyan dezyan 0 11月  9 02:23 1.txt

#修改目录test及其下所有文件的属主属组都为dezyan
[root@Dezyan ~]# chown -R dezyan.dezyan test
[root@Dezyan ~]# ll test 
-rw-r--r-- 1 dezyan dezyan 0 11月  9 02:49 test01.txt
-rw-r--r-- 1 dezyan dezyan 0 11月  9 02:49 test02.txt

chmod 变更文件或目录的权限

  • 语法形式
chmod [选项] [权限位][赋权符号][权限] [参数]
chmod [选项] [权限位数字表示法] [参数]
  • 选项
-R		#递归授权 比较危险 别用来修改目录
  • 权限位
		#当权限位为空时,添加和剥夺w权限时只会对属主权限位更改,添加和剥夺rx权限时对所有权限位更改;
u		#符号代表当前用户;
g		#符号代表和当前用户在同一个组的用户,以下简称组用户;
o		#符号代表其他用户;
a		#符号代表所有用户;
  • 赋权符号
+		#符号代表添加目标用户相应的权限;
-		#符号代表删除目标用户相应的权限;
=		#符号代表添加目标用户相应的权限,删除未提到的权限;
  • 示例
#给一个没有任何权限的test01.txt文件增加属主位和其他位的r权限
[root@Dezyan test]# ll test01.txt 
---------- 1 root root 0 11月  9 03:23 test01.txt
[root@Dezyan test]# chmod uo+r test01.txt 
或:# chmod 404 test01.txt
[root@Dezyan test]# ll test01.txt 
-r-----r-- 1 root root 0 11月  9 03:23 test01.txt

#对test01.txt文件的所有位置增加w权限
[root@Dezyan test]# chmod ugo+w test01.txt 
或:# chmod a+w test01.txt
[root@Dezyan test]# ll test01.txt 
-rw--w-rw- 1 root root 0 11月  9 03:23 test01.txt

#不管test01.txt文件原来有什么权限,将属组权限位设置为rwx
[root@Dezyan test]# ll test01.txt 
-rw-rwxrw- 1 root root 0 11月  9 03:23 test01.txt

权限类型的分类

rwx三种常规权限
特殊权限位
名称 表示 作用 解释
属主setuid权限位 u+s(4) 在用户执行命令的时候相当于属主的权限去执行 添加s后,任何人使用命令的时候相当于命令的属主的权限
属组setgid权限位 g+s(2) 在用户执行命令的时候相当于属组的权限去执行 添加s后,任何人使用命令的时候相当于命令的属组的权限
sticky bit粘滞位 o+t(1) 可以针对不同用户设置不同的权限 一个目录设置粘滞位后,只有管理员和文件拥有者可对其进行所有操作,其他用户只能查看。
隐藏权限位
lsattr 查看隐藏权限位
  • 语法形式
lsattr [参数]
  • 示例
[root@Dezyan ~]# lsattr 1.txt 
-------------------- 1.txt
chattr 修改文件隐藏权限
  • 语法形式
chattr +/-[选项] [参数]
  • 选项
a		#设置该文件,只能通过追加内容的方式修改文件;
i		#设置该文件,除了查看外,任何操作都不能进行;
  • 示例
#增加a隐藏权限,并测试
[root@Dezyan ~]# lsattr 1.txt 
-------------------- 1.txt
[root@Dezyan ~]# chattr +a 1.txt 
[root@Dezyan ~]# lsattr 1.txt 
-----a-------------- 1.txt
[root@Dezyan ~]# echo 111 > 1.txt 
-bash: 1.txt: 不允许的操作
[root@Dezyan ~]# echo 111 >> 1.txt
#增加i隐藏权限
[root@Dezyan ~]# chattr +i 1.txt 
#除了查看什么也不能干
在企业中发现文件可能没有隐藏权限,但是还是无法操作,因为第三方安全软件对文件做了保护措施。

rwx对于文件和目录的作用

  • 文件(默认权限644;最高权限为666,所有位置可读写)
权限(只有该权限时) 作用 注意
r 只读;不可写(可强制写入)、执行、删除
w 由于不能查看,所以不能用vim方式写入,只能使用echo追加内容;不能执行 正常写入必须有rw权限
x 任何操作无法进行 正常执行必须有rx权限
  • 目录(默认权限755;最高权限766)
更多操作权限(只有该权限时) 作用 注意
r 任何操作无法进行
w 任何操作无法进行
x 控制是否可以进入(cd)该目录;
  • 目录权限的常用组合方式
1.r-x组合作用: 可以进入到目录可以查看目录下所有的文件信息 看文件内容具体看文件的权限;不能在目录下删除 创建 改名等动作
2.rwx组合作用: 目录的最高权限可以进入可以增删改查
  • 示例
为什么会出现权限拒绝?

#文件的其他位置没有r权限
[oldboy@lzy oldboy]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

#passwd的其他位置没有w权限 必须rw
[oldboy@lzy oldboy]$ echo '#' >> /etc/passwd
-bash: /etc/passwd: Permission denied

# 因为/etc目录的其他位没有w权限
[oldboy@lzy oldboy]$ touch /etc/passwd.txt
touch: cannot touch ‘/etc/passwd.txt’: Permission denied

# 因为/etc目录的其他位没有w权限
[oldboy@lzy oldboy]$ rm -rf /etc/shadow
rm: cannot remove ‘/etc/shadow’: Permission denied

# 因为root目录的其他位置没有r-x权限
[oldboy@lzy oldboy]$ ls /root/
ls: cannot open directory /root/: Permission denied

umask值

  • 作用:决定默认创建文件和目录的权限

    • 文件默认权限: 是由文件的最高权限666减去umask值得到的
      666
      -022
      =644
    • 目录默认权限: 是由目录的最高权限777减去umask默认的值
      777
      -022
      =755
  • 查看/修改默认的umask值

[root@Dezyan ~]# umask
0022
#临时修改umask值
##umask值修改为044
[root@Dezyan ~]# umask 044
文件权限: 666-044=622
目录权限: 777-044=733
##umask值修改为032
如果umask值存在奇数位,文件相减后再奇数位置+1,目录正常相减
[root@Dezyan ~]# umask 032
[root@Dezyan ~]# umask
0032
文件权限: 666-032=634+010=644
目录权限: 777-032=745

date 显示或设置系统时间与日期

date								#显示系统当前详细日期与时间
date -s 年月日		  				  #修改当前系统时间
date +%F							#显示当前系统日期
date +%F-%H-%M-%S					#显示当前系统日期和时间
date -d "+n day/month/year" +%F		#显示系统前n天/月/年后的日期
date -d "-n day/month/year" +%F		#显示系统前n天/月/年后的日期

Linux系统的特殊符号

~		#家目录 
.		#当前的目录
..		#上一级目录
-		#上一次所在的目录  su切换用户 更新环境变量
#		#注释或者命令提示符中的 用户提示符 表示管理员
$		#获取变量内容 echo $PATH
!		#强制执行 wq! q!
|		#命令的拼接
``和$()	#优先执行此处命令
""		#双引号和不加引号可以解析变量内容
''		#所见即所得 不能解析变量
* 		#表示所有
{}		#生成序列
[]		#查找序列
? 		#表示任意单个字符
-------------------------------------------------------
;  		#命令的分隔符,不管前面的命令是否执行成功,继续向后执行
&&		#前面的命令必须执行成功,才会往后执行 
||		#前面的命令执行失败,才会往后执行
-------------------------------------------------------
>		#标准输出正确重定向,只接收正确的结果;等同于1>;
		如果>前结果正确,则会写入文件;
		如果错误,会清空文件内容:
		[root@Dezyan ~]# eco dzy > 1.txt
		bash: eco:未找到命令
		[root@Dezyan ~]# cat 1.txt 
2>		#标准错误输出重定向;
		与>相反,如果2>前结果错误,则会写入文件:
		[root@Dezyan ~]# eosd jjj 2> 1.txt 
		[root@Dezyan ~]# cat 1.txt 
		bash: eosd:未找到命令
		如果正确,会清空文件内容;
>>		#标准正确追加输出重定向,只接收正确的结果;
2>>		#标准错误追加输出重定向,只接收错误的结果;
*如何同时接收正确和错误的结果?
No1.[root@Dezyan ~]# ding >> file1 2>> file2		也可输出到同一文件中
No2.[root@Dezyan ~]# ding >> file1 2>&1				正确和错误的都会写入进file1文件中
No3.[root@Dezyan ~]# ding &>> file1					正确和错误的都会写入进file1文件中
	原理:&代表将标准输出和标准错误重定向到同一个位置
*如何使用cat写入文件内容?
语法形式:
cat >> file <<EOF			#EOF可以替换为任意字符,只需保证首尾两处相同即可
message…………
message…………
EOF
[root@Dezyan ~]# cat >> file1 <<aaa
> 1
> 2
> 3
> aaa

正则表达式

  • 基础正则(使用四剑客命令时无需加任何参数即可使用)
^    # 匹配以某一内容开头 如:'^grep'匹配所有以grep开头的行。    
$    # 匹配以某一内容结尾 如:'grep$' 匹配所有以grep结尾的行。
^$	 # 匹配空行。
.    # 匹配任意单个字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    
*    # 前一个字符出现0次及0次以上 如:'a*'匹配所有有a的行。
.*   # 表示文件中所有内容。
[]   # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]  # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头的行
	 注意:在[]中,除位置在第一个字符的^外,其余任何带含义的特殊符号都会被还原。
  • 扩展正则

    • 使用方法
    grep命令:
    		grep -E ……		或egrep ……
    sed命令:
    		sed -r ……
    awk命令:
    		awk -E ……
    
    • 表达式
    +		#匹配前一个字符连续出现1次或1次以上 如:'a+' 匹配字符a连续出现1次或多次的行。
    		注:通常与[]配合使用,过滤连续的内容。
    {n,m}	#匹配前一个字符至少n次,最多m次,优先匹配后面的数字
    		例:'[0-9]{18}'	匹配连续的18个数字
    |		#或者
    		例:'^$|^#'	匹配文件的空行或以井号开头的
    ()		#表示一个整体;反向引用/后向引用
    
  • 单词边界符

\b    	# 单词锁定符,如: '\bgrep\b'只匹配grep;'\b[0-9]{18}\b'只匹配连续的18位数字
\<    	# 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>    	# 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
\<……\>	# 相当于\b...\b
\w      # 匹配文字和数字字符,也就是[A-Za-z0-9];
\W      # \w的反置形式,匹配一个或多个非单词字符,相当于[^A-Za-z0-9]

四剑客

find 在指定目录下查找文件

语法形式

find [参数] [选项]					   #单条件查找
find [参数] [选项] [or/and] [选项]	  #多条件查找

or/and

#使用find命令可以多条件查找;
-a			#需要同时满足两个、多个条件时(and可以省略);
-o			#只需满足其中之一条件时;

选项

-type f/d/l/b/c				#按照文件类型查找;
-name "NAME"				#按照文件名字查找;
-iname "NAME"				#按照文件名字查找(忽略大小写);
-inum "INUM"				#按照文件iNode号查找;
-maxdepth n					#按照深度等级查找(向下遍历);
-size +n/-n/n				#按照文件大小查找;
-mtime +n/-n/n				#按照文件修改时间查找;当n=0,代表24小时内被修改过的文件;

示例

#查找/目录下文件名为dezyan.txt的文件(不区分大小写)
[root@Dezyan ~]# find / -iname "dezyan.txt"
/proc/kcore
#查找/目录下文件大小大于1M的目录
[root@Dezyan ~]# find / -size +1M -type d
注意:当一个目录大小大于1M,说明该目录中存在非常多的小文件
#查找/目录下的字符设备或块设备文件
[root@Dezyan ~]# find / -type c -o -type b
或	find / -type c,b
#以深度等级为1查找/目录下以.log结尾的文件
[root@Dezyan ~]# find / -maxdepth 1 -name "*.log" -type f
#查找24小时内被修改过的文件
[root@Dezyan ~]# find ./ -mtime 0

xargs 给其他命令传递参数的一个过滤器

注意:在xargs后别名失效

语法形式

find …………	| xargs [文件操作,命令]
#可以理解为将|前执行的结果甩到末尾,再执行|后的命令

相关使用方法

-n1					 #按照第一列方式输出内容
ls -l/cat			 #查看找到的文件;
rm [选项]				#将查找的文件删除;
-i cp/mv {} [参数]	#将查找到的文件复制/移动到[参数位置];
cp/mv -t [参数]		#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M | xargs cp -t ~
[root@Dezyan ~]# ls ~ | grep 'hwd'
hwdb.bin
#查找出所有大写的.TXT结尾的文件 然后打包成test.tar.gz
[root@Dezyan ~]# find ./ -name "*.TXT"|xargs tar zcvf a.tar.gz
#查找名称4.txt 然后移动到/tmp目录
[root@Dezyan ~]# find ./ -name "4.txt"|xargs -i mv {} /tmp/

exec 调用并执行指定的命令

注意:使用exec将多个文件压缩成一个压缩包是不可取的,因为按照exec的逻辑,是将前一命令的每一次执行结果依次放入{},进行压缩时,会不断覆盖文件;

语法形式

find …………	-exec [命令] {} [参数] \;

注意:其中为shell中命令的分隔符,可将多个命令同时执行:mkdir test;touch 1.txt。

相关使用方法

rm [选项] {} \;		#将查找的文件删除;
cp/mv {} [参数] \;	#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M -exec  cp {} ~ \;

使用``和$()

语法形式

[命令+选项] `find ……………` 
[命令+选项] `find ……………` [参数]

$()效果与``相同

注意:如果一段命令被添加上了``,那么在整体命令中,需要先执行``中的命令,类似于运算法则中的加减乘除先算()。

相关使用方法

cp/mv `find ……` [参数]
ls/rm……

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# cp -a `find /etc/ -size +9M` ~

grep 强大的文本搜索工具

语法形式

grep [选项] '[word]' [参数]

选项

-v				#反转查找;
-r				#当指定要查找的是<目录>而非文件时,必须使用这项参数;
-E				#识别扩展正则进行过滤;等同于egrep;
-o				#展示匹配过程;
------------------------------------------------------------
--color			#对筛选出的WORD加颜色显示;建议设置永久别名;
-i				#搜索时不区分大小写;
-n				#搜索出的结果显示行号;
-w   			#过滤的内容两边必须是空格(类似于边界符)
-c   			#统计单词出现的次数;
-A   			#过滤到内容往下2行;
-B   			#过滤到内容往上2行;
-C   			#过滤到内容上下各2行;

示例

#在/etc/passwd文件中过滤出root的行
[root@Dezyan ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#不区分大小写过滤出 /etc/ssh/sshd_config 文件中包含`port 22`的行并输出行号
[root@Dezyan ~]# grep -i -n  'port 22'   /etc/ssh/sshd_config 
17:#Port 22
#排除(取反)/etc/selinux/config文件中的#和注释
[root@Dezyan ~]# grep -v '^#|^$'  /etc/ssh/sshd_config
#统计word.txt文件中shutdown单词的个数
[root@Dezyan ~]# grep -c 'shutdown' word.txt 
2
#显示文件word.txt中config的上下各两行
[root@Dezyan ~]#  grep -C 2 'config' word.txt 
test	测试			
server	服务			
configure	配置	config	conf	cfg
continue	继续			
next	下一个

sed 功能强大的流式文本编辑器

  • 语法形式
sed [选项] '[模式][动作]' [参数]
  • 选项
-n			#取消内存空间默认输出;不添加时sed命令会默认输出文件所有内容及匹配到的内容;
-r			#使模式中的正则表达式支持扩展正则;
-i			#对源文件进行修改;不添加时不会修改;
  • 模式
number								#按行查找,查找第n行
number或正则符号,number或正则符号	  	 #查找n到m行
/字符串或正则表达式/					  #模糊查询,查询包含此字符串的行
/字符串/,/字符串/				 		#匹配区间:查询两个字符串之间的内容(也可用正则)
n[动作];m[动作]						 #指定第n行和第m行进行操作
  • 动作
p						#输出打印过滤出的内容
d						#删除过滤出的内容
a	字符串		  		  #add 在……后追加xxx 
i	字符串		  		  #insert 在……前插入xxx
c	字符串		  		  #replace 将……替换为xxx
w	文件				   #将过滤到的内容写入到文件中
--------------------------------------------------
s###g					#1.其中,g代表全局替换
						#2.s///g、s@@@g等与s###g效果相同	

注意:

  • 动作中有p,模式中必有n

  • 在使用匹配区间( /开头字符串/,/结尾字符串/ )时,尽量使用文件内容中唯一的、不重复的字符串

    • 若只有一个开头,有两个甚至多个结尾时:输出的内容只会是开头到第一个结尾字符串之间的内容
    • 若只有开头,结尾字符串没有:输出的内容为开头字符串到文件末尾
  • sed的后向引用

sed 's#(正则)(数字)(字符串)#\1\3#g' 		#\n获取第n个()中的内容

实例

#获取IP地址
[root@Dezyan ~]# ip add show ens33 | sed -rn '3s#.*et (.*)/24 .*$#\1#gp'
10.0.0.101

#批量创建用户test01..test03
[root@Dezyan ~]# echo test{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1#g' | bash

##批量创建用户test01..test03并设置密码为dingzhiyan1016
echo test{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1 ; echo dingzhiyan1016 | passwd --stdin \1#g' | bash
或
[root@Dezyan ~]# echo test11{01..03} | xargs -n1 | sed -r 's#(.*)#useradd \1 ; echo \1:dingzhiyan1016 | chpasswd #g'  | bash

#批量删除用户
[root@Dezyan ~]# echo user{1..20} | xargs -n1 | sed -r 's#(.*)#userdel -r \1#g' | bash
  • 示例
1.a.txt文件
[root@Dezyan ~]# cat -n a.txt 
     1	The first snow came. 
     2	How beautiful it was, falling so silently all day long,
     3	all night long.
     4	on the mountains, on the meadows, 
     5	on the roofs of the living, on the graves of the dead! A
     
2.查看a.txt文件第三行的内容
[root@Dezyan ~]# sed -n '3p' a.txt 
all night long.

3.查看a.txt文件中第三行到结尾的内容
[root@Dezyan ~]#  sed -n '3,$p' a.txt 
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

4.查看a.txt中以o开头或以T开头的行
[root@Dezyan ~]# sed -rn '/^o|^T/p' a.txt 
The first snow came. 
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

5.查看a.txt文件中包含so与meadows行之间的内容
[root@Dezyan ~]# sed -n '/so/,/meadows/p' a.txt 
How beautiful it was, falling so silently all day long,
all night long.
on the mountains, on the meadows,

6.在a.txt文件1到3行后都添加一行Dezyan
[root@Dezyan ~]# sed '1,3i Dezyan' a.txt 
Dezyan
The first snow came. 
Dezyan
How beautiful it was, falling so silently all day long,
Dezyan
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

7.将a.txt文件中所有的(第一个)on替换为under
[root@Dezyan ~]# sed 's#on#under#g' a.txt (只替换第一个只需将g去掉即可)
The first snow came. 
How beautiful it was, falling so silently all day lunderg,
all night lunderg.
under the mountains, under the meadows, 
under the roofs of the living, under the graves of the dead! A

8.查找roofs所在行,并将其替换为floor,并且只显示替换行
[root@Dezyan ~]# sed -n '/roofs/s#roofs#floor#gp' a.txt
on the floor of the living, on the graves of the dead! A

9.删除文件amount.txt中的所有字母
[root@Dezyan testdir]# sed -r 's#[a-Z]##g' amount.txt

awk 文本和数据进行处理的编程语言

  • 语法形式
awk [选项] '哪一行{print 哪一列}' [file]
#逻辑:按行取列,先将符合条件的行尽数找出,再对其中的某一列进行选取;
#awk本质上其实是一种编程语言,其中可以进行运算;
  • 选项
-F ""			#指定分隔符;
  • 取行
#当语法形式中的`{print 哪一列}`为空即为取行
1.指定某行或某几行
语法形式:
		awk 'NR[运算符]n' file
使用awk内置变量:
		NR  --> 存储每行的行号
运算符:
		== 等于
		>  大于
		>= 大于等于
		<  小于
		<= 小于等于
		!= 不等于
		&& 且
		|| 或
#可使用内置函数取出文件内容的最后一行
		awk 'END{print}' file
2.模糊过滤取行
语法形式:
		awk '模式' file
模式'可以使用正则符号':
		//		#模糊查找文件中的字符串
		//,//	#模糊查找两字符串之间的内容
  • 字符比对查取行
语法形式:
		awk [选项] '[取列内置变量] [模式匹配符] "[表达式]"' file
模式匹配符:
		==		#某列等于……
		!=		#某列不等于……
		~		#使用正则匹配字符串
		!~		#使用正则匹配字符串并取反
表达式:
		任意字符
		正则表达式
  • 数字比对查取行
语法形式:
		awk [选项] '[取列内置变量] [模式匹配符][运算符]n' file
  • 取列
#当语法形式中的`哪一行`为空即为取列
语法形式:
		awk '{print [内置变量]}' file
awk内置变量:
		$0  	# 表示整行
		$n  	# 表示文件的第n列 
		,   	# 逗号表示空格
		NF  	# 表示每一行最后一列的列号
		$NF		# 表示最后一列;`$(NF-1)`表示倒数倒数第二列 --> 也体现了awk支持运算的特性
  • 指定分隔符取列
语法形式:
		awk -F "[表达式]" '{print [内置变量]}' file
表达式:
		任意字符
		正则表达式
  • 指定分隔符按行取列
awk -F "[表达式]" '取行方式+取列方式' file
  • BEGIN的用法
#BEGIN 是一个特殊的模式,它在处理任何输入行之前执行一次。
awk -F "[表达式]" 'BEGIN{print 任意内容}' file
  • 示例
#过滤文件的选择:/etc/passwd文件的前10行,存储到了~/passwd.txt中
#即:head /etc/passwd >> ~/passwd.txt
#在未明确说明分隔符时,默认指定分隔符为":"
1.指定取行
#取出文件最后一行 
[root@Dezyan ~]# awk 'END{print}' passwd.txt
#取出第7行和第9行以及两行之间的内容
[root@Dezyan ~]# awk 'NR>=7&&NR<=9' passwd.txt

2.模糊取行
#取出文件中以root开头和以adm开头以及两行之间的内容
[root@Dezyan ~]# awk '/^root/,/^adm/' passwd.txt

3.字符比对取行
#取出文件中用户名为root的行
[root@Dezyan ~]# awk -F: '$1=="root"' passwd.txt
#取出文件中以nologin结尾的行
[root@Dezyan ~]# awk -F: '$NF~"nologin$"' passwd.txt

4.数字比对取行
#取出用户uid大于6的行
[root@Dezyan ~]# awk -F: '$3>6' passwd.txt

5.取列
#输出文件每一行最后一列的序号(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print NF}' passwd.txt
#输出文件的第一列和最后一列(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print $1,$NF}' passwd.txt

6.BEGIN用法示例
#在输出文件第一列内容前,先输出“用户名”
[root@Dezyan ~]# awk -F: 'BEGIN{print "用户名"}{print $1}' passwd.txt
#让输出的第一列内容前,都有“用户名:”几个字
[root@Dezyan ~]# awk -F: '{print "用户名:"  $1}' passwd.txt

7.综合运用
#输出文件最后一行的最后一列
[root@Dezyan ~]# awk -F: 'END{print $NF}' passwd.txt
#输出大于第5行到结尾的内容,并取出第3列
[root@Dezyan ~]# awk -F: 'NR>5{print $3}' passwd.txt
#输出用户uid大于6的行并输出用户名
[root@Dezyan ~]# awk -F: '$3>6{print $1}' passwd.txt
#将系统重不能登录的用户输出到nologin.txt文件中,并在文件的开头显示“不能登录的用户有:”
	##注:使用awk命令;不能使用管道符
[root@Dezyan ~/testdir]# awk -F: 'BEGIN{print "不能登录的用户有:"} $NF~"nologin$"{print $1}' /etc/passwd >> nologin.txt
不能登录的用户有:
bin
daemon
……………………


软件安装 yum/apt/rmp/dpkg

Red Hat类系统

yum安装方式

  • 特点:需要联网;不能自定义安装位置;会自动解决依赖;
  • 安装卸载查看
yum -y install [软件包名称]			#安装软件包
	   reinstall [名称]			  #覆盖安装软件包
	   remove   [名称]			  #卸载软件包
yum localinstall -y	rpm包名		  #安装本地 RPM 包的命令,它会自动解析并安装包的依赖项
yum list			#查看仓库中可用的软甲包
yum	search [命令]	   #搜索该命令属于哪个软件包
yum provides [命令]  #搜索该命令属于哪个软件包	两种方法终究有限,建议直接百度查询
  • 其他
yum clean all 		#清空仓库缓存
yum update			#更新仓库
yum -y install --downloadonly --downloaddir=[路径]  [软件包名称]	#将下载的包放在指定目录下
  • 注意
    • 卸载时,一定要卸载正确的软件包名称;如想卸载rz命令的软件包,需要先知道此命令输入哪个软件包,不能直接使用yum -y remove rz卸载;其他命令也是一样,例如ifconfig属于net-tools软件包;

更改/更新系统仓库

  • 存放软件仓库的配置/etc/yum.repos.d/

  • kylin系统默认仓库就在国内,无需更改

  • 目的:将系统的默认仓库由国外改为国内,可以获取更快的下载速度。

  • 配置方法

1.备份原默认仓库。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.下载新的仓库到配置目录下
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  • 添加扩展的epel仓库
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

RPM方式安装

  • 特点:不需要联网;需提前下载rpm包;不能自动解决依赖问题;
  • 安装卸载查看
rpm	-ivh [rpm包]			#使用rpm包安装,其中:
										# -i install 安装
                                        # verbose 显示过程
                                        # 显示进度
yum -y localinstall [rpm包]		#也可使用此方式安装
rpm -e [软件包]			#卸载软件
	-qa					  #查看系统中安装了那些软件
	-qa [软件包]			#查看系统是否安装该软件包
  • 其他
rpm -ql	[软件包]		#查看软件安装了那些文件
rpm -qc [软件包]		#查看软件配置文件的位置
  • 注意
    • 在进行卸载操作时,如果使用的是rpm方式安装,也可使用yum方式卸载;

应用

  • 为一台没有网络的服务器安装wget

    一、使用一台有网络的服务器下载wget命令包及其依赖

    [root@Dezyan ~]# yum -y install --downloadonly --downloaddir=./ wget
    

    二、将包上传到没有网络的服务器上

    三、在安装wget时需要先安装依赖包

    [root@Dezyan ~]# rpm -ivh libmetalink-0.1.3-8.ky10.x86_64.rpm
    [root@Dezyan ~]# rpm -ivh wget-1.20.3-5.ky10.x86_64.rpm
    

    四、测试

Ubuntu类系统

更改/更新仓库

第一步:将默认的仓库修改为国内阿里云地址
root@dezyan:~# mv /etc/apt/sources.list /opt/
root@dezyan:~# vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

第二步: 执行更新操作
root@dezyan:~# apt update

apt安装方式

  • apt的使用方式与yum几乎相同
apt-get -y install --download-only net-tools		#仅下载软件包不安装

dpkg安装方式(类似于rpm)

dpkg -i xx.deb    	  # ubt安装deb包;类似centos的rpm包;
dpkg -l  [软件包]      # 查看软件包是否安装

dd 复制文件并对原文件的内容进行转换和格式化处理

语法形式

dd [选项]

选项

if=<文件>				#输入文件;
of=<文件>				#输出到文件;
bs=<字节数>			#每次读取的大小 bs=1M 每次在/dev/zero中读取1M的数据
count=<区块数>			#仅读取指定的区块数;总共读多少次

实例

#生成一个10M的文件
dd if=/dev/zero  of=./2.txt bs=1M count=1
#去读文件 写入到test.log 100K
[root@oldboyedu ~]# dd if=/etc/services of=test.log bs=1K count=100

系统优化

1.修改默认仓库

  • kylin系统
Kylin系统默认为国内仓库,所以不需要修改仓库;
Kylin系统可安装一个扩展的epel仓库,因为默认的仓库里有一些软件没有。
[root@oldboyedu ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
  • CentOS
CentOS默认仓库是随机的(可能是国外的,速度慢)
可执行以下步骤修改:
	第一步: 找到阿里云的仓库链接
	https://opsx.alibaba.com/
	第二步: 备份默认的仓库
	mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
	第三步: 下载新的仓库到/etc/yum.repos.d/CentOS-Base.repo
	curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  • Ubuntu
ubuntu系统默认为国外仓库,需要修改为国内仓库;不需要安装扩展的仓库;
如何修改为国内的仓库:
1.备份默认的仓库
cp /etc/apt/sources.list  /tmp/sources.list

2.编辑配置文件将国内的链接粘贴进去
vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

3.修改成功后查看默认的下载链接地址
root@oldboy:~# apt-cache policy
root@oldboy:~# apt-cache policy 
Package files:
 100 /var/lib/dpkg/status
     release a=now
 100 https://mirrors.aliyun.com/ubuntu focal-backports/universe amd64 Packages
     release v=20.04,o=Ubuntu,a=focal-backports,n=focal,l=Ubuntu,c=universe,b=amd64
     origin mirrors.aliyun.com
     
使用apt安装可以在过程中看到下载的链接地址
root@oldboy:~# apt -y install wget

2.ssh优化

  • 修改ssh默认端口(默认为22);
  • 进制root用户远程登录,使用普通用户登录;
[root@Dezyan ~]# vim /etc/ssh/sshd_config
17 #Port 22						#取消注释修改22为其他端口
39 PermitRootLogin yes			#改为no即可禁止root远程登录
  • 什么情况下不需要调整SSH端口 禁止root登录?
    前端有跳板机或者堡垒机的情况下不需要以上操作。大部分服务器都在局域网内。

3.SeLinux优化

  • kylin和Ubuntu系统的selinux是默认关闭的,不需要优化
  • Centos系统默认是开启的,可执行以下步骤关闭:
[root@Dezyan ~]# getenforce 			#查看selinux状态
Disabled
[root@Dezyan ~]# setenforce 			#查看参数选项
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@Dezyan ~]# setenforce 0			#临时关闭

永久更改:
[root@Dezyan ~]# vim /etc/selinux/config
  8 SELINUX=enforcing					#改为disabled即可

4.防火墙优化

  • 作用: 过滤数据,对数据源或者目标进行流程控制。
    阻挡一些非法流量
    对内 可以实现当路由器使用(共享上网)

  • 在什么情况下服务器需要开启防火墙?
    只要用户可以访问的服务器都需要开启。

  • 在企业中什么情况下服务器需要关闭的
    所有的服务器在内网
    公司内部测试服务器
    当很多很多的人访问我们网站的时候(大量) 防火墙类似做过车检票员。必须使用硬件防火墙。

centos和kylin系统 默认的软件防火墙: firewalld防火墙
Ubuntu系统 默认的软件防火墙: ufw防火墙
systemctl reload  firewalld 		#重新加载配置

5.字符集优化

  • 常用字符集
UTF-8		#万国码	默认字符集
GBK			#国标码
  • 查看修改默认的语言字符集
查看:
[root@Dezyan ~]# echo $LANG
zh_CN.UTF-8						#其中,zh_CN在系统中的语言  .UTF-8字符集
								#	  en_US表示英语
临时修改:
[root@Dezyan ~]# LANG=en_US.UTF-8
[root@Dezyan ~]# echo $LANG
en_US.UTF-8

永久生效:
	方式一:
		[root@Dezyan ~]# vim /etc/locale.conf
		修改内容为:LANG="en_US.UTF-8"
		保存后,使用source或.重新执行配置文件或重连xshell,重启系统使之生效
	方式二:
		使用命令直接修改配置文件:
		[root@Dezyan ~]# localectl set-locale LANG=zh_CN.UTF-8
		[root@Dezyan ~]# source /etc/locale.conf 
		[root@Dezyan ~]# echo $LANG
		zh_CN.UTF-8

6.时间同步优化

  • 作用:让服务器系统时间正确运行。如果时间快了或者慢了会影响业务(特别交易性质的业务) 。

  • 查看时间

查看系统时间:
	[root@Dezyan ~]# date
	2024年 11月 15日 星期五 07:22:41 CST
查看硬件时间:
	[root@Dezyan ~]# clock
	2024-11-16 01:29:55.773781+08:00
格式化查看系统时间:
	[root@Dezyan ~]# date +%F-%H-%M-%S
	2002-10-16-00-01-02
  • 修改时间
date -s 时间
	[root@Dezyan ~]# date -s 20021016
	2002年 10月 16日 星期三 00:00:00 CST
  • 同步时间
同步系统时间:
1.一定要先安装ntpdate命令,否则更改时间后可能会造成yum不能使用。
	[root@Dezyan ~]# yum -y install ntpdate
2.使用阿里服务器同步时间
	[root@Dezyan ~]# ntpdate ntp2.aliyun.com
	18 Nov 16:07:23 ntpdate[43079]: step time server 203.107.6.88 offset +697219440.314271 sec

同步硬件时间:
1.首先要确保系统时间正确,如果不正确,先同步系统时间
2.将系统时间同步给硬件时间
	[root@Dezyan ~]# clock -w
	[root@Dezyan ~]# clock
	2024-11-18 16:09:02.353817+08:00
	
注:ubuntu系统: 默认服务自动同步时间,但时区不是中国的,需要修改时区
	修改默认的时区: 亚洲/上海
		root@dezyan:~# timedatectl set-timezone Asia/Shanghai
	如需更改为国内时间服务器:
		root@dezyan:~# vim /etc/systemd/timesyncd.conf
		修改 NTP=ntp2.aliyun.com
		重启时间服务生效:
		root@dezyan:~# systemctl restart systemd-timesyncd.service

7.加大文件描述符

https://kimi.moonshot.cn/share/cstfno3jfih2ocnjrnhg

8.内核参数优化 先扩展一下

https://kimi.moonshot.cn/share/cstfoja1n4gmgdo9b1qg

9.安装常用软件

yum -y install tree lrsz wget net-tools unzip ntpdate bash-completion

crontab 定时任务

  • 作用:固定时间同步;数据备份(通常先打包再备份,降低占用磁盘io);日志切割;监控取值;定时执行脚本;辅助程序运行……

  • 定时任务配置文件详解

[root@Dezyan ~]# vim /etc/crontab
*     *     *   *    *    执行的用户    可执行的文件或命令
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- 周	0到7之间的数字,表示星期几(0或7代表星期日)
|     |     |   +-------月	 1到12之间的数字,表示月份。
|     |     +---------日 	1到31之间的数字,表示日期。
|     +----------- 时	0到23之间的数字,表示小时。
+------------- 分	0到59之间的数字,表示分钟。
----------------------------------------------------------------------
特殊字符
	*	#表示“每”的意思;匹配任何值,例如 */5 表示每5分钟;五颗*表示每分钟都要执行一次定时任务;
	-	#表示区间范围,例如 1-3 表示1点到3点。
	,	#表示间隔,例如 1,3,4-10 表示1点、3点和4点到10点。
	/	#表示起始时间开始,每隔一定时间执行一次,例如 0/15 表示从0分钟开始,每15分钟执行一次。
		#									  */15 表示每过15分钟执行一次
	L	#表示月份或日期的最后一个数字,例如 6L 表示6月的最后一天。
	W	#表示有效工作日(周一到周五),如果与日期一起使用,表示离指定日期最近的一个工作日。
	#	#表示星期中的第几个周,例如 4#3 表示一个月中的第三个星期四。
------------------------------------------------------------------------
在可执行的文件或命令中需要使用\转义的字符
	空格: (空格需要转义,因为cron会将空格视为参数分隔符)
	星号:*(星号在cron中用于匹配多个值,如*/5表示每5分钟)
	问号:?(问号在cron中用于匹配单个字符)
	井号:#(井号在cron中用于注释)
	百分号:%(百分号在cron中用于换行)
	反斜杠:\(反斜杠用于转义其他特殊字符)
  • 任务示例

1.使用*/特殊符号和不使用的区别;

使用:
	#让系统<每5分钟>执行一次dezyan.sh脚本
		*/5 * * * * root dezyan.sh
	#让系统<每分钟>执行一次dezyan.sh脚本
		* * * * * root dezyan.sh
	#让系统<每5小时每分钟>执行一次dezyan.sh脚本
		* */5 * * * root dezyan.sh
------------------------------------------------------
不使用:
	#让系统<每小时的第5分钟>执行一次dezyan.sh脚本
		05 * * * *  root dezyan.sh
	#让系统<每天凌晨12点>执行一次dezyan.sh脚本
		00 00 * * *   root dezyan.sh

2.使用-,特殊符号与*.结合使用和与数字结合使用的区别;

与`*.`结合:
	#让系统<在7-11点之间的每分钟>都执行一次dezyan.sh脚本
		* 7-11 * * *   root dezyan.sh
	#让系统<在7-11点之间的每20分钟>都执行一次dezyan.sh脚本
		*/20 7-11 * * *   root dezyan.sh
	#让系统<在7-11点之间和13-16点之间的每分钟>都执行一次dezyan.sh脚本
		* 7-11,13-16 * * * root dezyan.sh
----------------------------------------------------------------
与`数字`结合:
	#让系统<在7-11点之间的每个整点>执行一次dezyan.sh脚本
		00 7-11 * * * root dezyan.sh
	#让系统<在7-11点之间和13-16点之间的每个整点>执行一次dezyan.sh脚本
		00 7-11,13-16 * * * root dezyan.sh

3.一些需要使用\转义符来确保文件语法正确的例子

#每分钟打包/etc/hosts /etc/passwd 名称为 时间+etc.tar.gz 放到/opt目录
* * * * * root tar zcvf /opt/`date +\%F-\%H-\%M`_etc.tar.gz /etc/hosts /etc/passwd

4.需要重新配置PATH变量的任务

#在用户配置文件中每5分钟执行一次时间同步
PATH=/app/tools/cmd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
* * * * * ntpdate ntp2.aliyun.com &>>/root/cron.log
  • 系统和用户定时任务的使用区别
系统 用户(以root为例)
文件位置 /etc/crontab /var/spool/cron/root
语法结构 执行用户不能省略 无需添加执行用户
配置方式 vim /etc/crontab vim /var/spool/cron/root(无语法检查)
crontab -e(有语法检查)
查看方式 cat /etc/crontab cat /var/spool/cron/root
crontab -l
  • 定时任务的日志文件
centos和kylin: /var/log/cron
ubuntu:        /var/log/syslog
  • 一些注意点
1.在书写执行命令时,如果将命令的结果保存到一个不存在的,没有指定位置文件中,系统会默认在家目录中创建;
	如:*/5 * * * * root echo dezyan >> dezyan.txt
	会在家目录生成dezyan.txt
2.配置用户定时任务文件时:
	配置文件放在/var/spool/cron/目录中;
	当一个用户没有配置定时任务文件时,配置文件时默认没有的;
3.配置用户定时任务文件时:
	默认识别的PATH变量只有/usr/bin和/bin路径
		导致某些命令不被识别
	需要再配置文件开头需要重新配置PATH变量
	PATH=/app/tools/cmd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
4.可以自定义是否保留任务结果到文件中(可以排查问题)
	保留:
		命令后接 &>>文件 即可
	不保留:
		命令后接 &>/dev/null 即可
5.使用centos,如果关闭了邮件服务(systemctl stop postfix)
	每执行一次定时任务
	会在`/var/spool/postfix/maildrop/`中自动生成一个小文件,小文件会占用inode号码
	一定要及时清理,或将定时任务执行的结果定向到文件或者空。
6.避免一些不必要的输出 类似tar -zcf 去掉v 类似打包进入相对路径
7.多条命令使用脚本为佳
  • 练习

以每天为时间+ip地址+主机名称在/opt/创建目录 如:mkdir /opt/2024-11-19_oldboyedu_10.0.0.200

打包/etc/passwd /etc/hosts文件名称为etc.tar.gz 放到已经创建好的目录中

查找/opt/目录下所有7天前被修改过的文件删除 (模拟环境使用循环生成需要的文件)

1.编写脚本文件
[root@Dezyan ~/shellScripts]# vim TimeIpHostname.sh
time=`date +%F-%H-%M`
ip=`ip add show ens33 | sed -rn '3s#.*et (.*)/24 .*$#\1#gp'`
hostname=`hostname`
ALL="${time}_${ip}_${hostname}"

mkdir -p  "/opt/$ALL"
tar zcf  "/opt/$ALL/etc.tar.gz" /etc/passwd /etc/hosts
find /opt/*  -mtime +7 | xargs rm 

2.为脚本添加执行权限
[root@Dezyan ~/shellScripts]# chmod +x /root/shellScripts/TimeIpHostname.sh

3.编写/etc/crontab文件
[root@Dezyan ~/shellScripts]# vim /etc/crontab
00 00 * * *   root  /root/shellScripts/TimeIpHostname.sh
for (( i=10;i<20;i++))
do
		date -s 200212$i
		touch  "/opt/etc$i.tar.gz"
done

ntpdate ntp2.aliyun.com

磁盘管理

磁盘的分类

  • 根据磁盘类型:
    • 固态硬盘(SSD): 内部是主板和U盘类似;价格高、存储少、使用寿命相对较短;
    • 机械硬盘(HHD): 盘片 主轴 传动手臂 做机械运动;价格低、存储大、使用寿命相对较长;
  • 根据磁盘大小:
    • 2.5英寸硬盘: 笔记本电脑中常用的硬盘尺寸。
    • 3.5英寸硬盘: 台式机中常用的硬盘尺寸。
  • 根据接口类型:
    • IDE/ATA: 已淘汰
    • SCSI: 已淘汰
    • SATA(Serial ATA): 串行ATA接口,是目前个人电脑中最常见的硬盘接口。
    • SAS(Serial Attached SCSI): 串行连接SCSI接口,主要用于企业服务器和高端存储设备。
    • NVMe(Non-Volatile Memory Express): 专为固态硬盘设计的高速接口,使用PCIe通道,提供极高的数据传输速度。
  • 按转速分类:
    • 高速硬盘: 转速通常在7200RPM或更高。
    • 低速硬盘: 转速通常在5400RPM或更低。
  • 企业中通常使用
    • SAS接口的机械硬盘
    • 大小以2.5英寸和3.5英寸,容量为300G,600G,900G的居多(存储越大转速越慢)
    • 通常使用转速7200RPM或15000RPM的高速硬盘(转速越快性能越好)

磁盘阵列raid

(磁盘RAID、磁盘阵列、阵列卡/RAID卡)

  • 作用:
    • 获得更大的容量:将多块磁盘逻辑的组合成一块磁盘
    • 获得更高的性能:写入服务器 写两块磁盘比写一块磁盘速度快
    • 获得更好的安全性:可以同时将数据写入两块盘 一块盘做备份
  • RAID的多种级别及其特定的优势和用途
RAID级别 硬盘数量 可用容量 安全性 性能 使用场景
0 至少1块 所有磁盘总和 不安全 读写最快 只追求速度,不要求安全
1 只能2块 所有磁盘总和的一半 可以坏一块 读一般写较慢 追求安全,对速度要求低
5 至少3块 硬盘块数-1 可以坏一块 读写速度中庸 业务流量较稳定的场景
10 至少4块 所有磁盘总和的一半 可以坏一半 读写速度快 高并发场景

磁盘的分区

  • Windows和Linux的磁盘格式

    • 多以MBR和GPT格式为主
  • Linux磁盘的表示方法

    sda   # 表示第一块磁盘
        sda1 # 表示第一块磁盘的第一个分区
        sda2 # 表示第一块磁盘的第二个分区
    sdb   # 表示第二块磁盘
        sdb1 # 表示第2块磁盘的第1个分区
        sdb5 # 表示第2块磁盘的第1个逻辑分区
    
  • Linux系统磁盘分区的方式

    • 第一种:标准分区

      ​ /boot 200M # 存放系统内核的位置 引导程序所在的位置
      ​ / 剩余空间 # 存放系统

    • 第二种:swap分区

      ​ /boot 200M
      ​ swap 2G

      ​ 当内存空间不够用时,临时使用磁盘空间充当内存来使用 速度慢 解决OOM问题 内存溢出。
      ​ linux内存如果达到最大限制,则自动杀死占用最高内存的进程来让系统正常运行
      ​ swap 对用户的服务器需要增加物理内存
      ​ 比较着急,或者公司内部测试服务器 自己使用的。
      ​ / 剩余空间

    • 第三种:单独设置一个数据分区(较少)

      ​ /boot 200M
      ​ swap 2G
      ​ / 50G # 系统
      ​ /data 1.8T # 数据分区

  • 如何对磁盘进行分区?

    • (在企业中通常不会分区,会直接将一整块磁盘直接格式化挂载)
    • MBR格式 小于2T的磁盘使用fdisk分区
    1.插入一块20G硬盘
    2.重启系统(虚拟机需要重启,如果是物理机不需要重启 云服务器)
    3.检查第二块磁盘
    	[root@Dezyan /]# fdisk -l			#检查所有磁盘信息
    	Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
    	Disk model: VMware Virtual S
    	Units: sectors of 1 * 512 = 512 bytes
    	Sector size (logical/physical): 512 bytes / 512 bytes
    	I/O size (minimum/optimal): 512 bytes / 512 bytes
    4.对磁盘进行分区
    	[root@Dezyan /]# fdisk /dev/sdb
    	Command (m for help): m			#查看菜单
    
    	Command (m for help): n			#创建分区
    	Partition type
    	   p   primary (0 primary, 0 extended, 4 free)			#主分区
    	   				#1 primary, 0 extended, 3 free	为分区创建情况
    	   e   extended (container for logical partitions)		#扩展分区
    	   
    	Select (default p):								#选择分区;默认为主分区;
    	
    	Partition number (1-4, default 1): 				#选择编号;默认从1开始;
    	
    	First sector (2048-104857599, default 2048):	#开始大小;默认; 
    	
    	Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-104857599, default 104857599): +10G									   #分配分区大小;
    -------------------------------------------------------------------------
    注意:
    	一共可以创建3个主分区和一个扩展分区;或4个主分区;
    	在扩展分区下课继续创建逻辑分区;
    Command (m for help): p
    Device     Boot    Start       End  Sectors Size Id Type
    /dev/sdb1           2048  20973567 20971520  10G 83 Linux
    /dev/sdb2       20973568  41945087 20971520  10G 83 Linux
    /dev/sdb3       41945088  52430847 10485760   5G 83 Linux
    /dev/sdb4       52430848 104857599 52426752  25G  5 Extended
    -------------------------------------------------------------------------
    创建逻辑分区:
    Command (m for help): n
    All primary partitions are in use.
    Adding logical partition 5
    First sector (52432896-104857599, default 52432896): 
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (52432896-104857599, default 104857599): +10G
    Created a new partition 5 of type 'Linux' and of size 10 GiB.
    查看:
    Command (m for help): p
    Device     Boot    Start       End  Sectors Size Id Type
    /dev/sdb1           2048  20973567 20971520  10G 83 Linux
    /dev/sdb2       20973568  41945087 20971520  10G 83 Linux
    /dev/sdb3       41945088  52430847 10485760   5G 83 Linux
    /dev/sdb4       52430848 104857599 52426752  25G  5 Extended
    /dev/sdb5       52432896  73404415 20971520  10G 83 Linux
    /dev/sdb6       73406464 104857599 31451136  15G 83 Linux
    -------------------------------------------------------------------------
    删除分区:
    	Command (m for help): d			# 删除分区
    	Partition number (1-4, default 4): # 默认删除的是第4个主分区
    -------------------------------------------------------------------------
    保存结果:
    	Command (m for help): w  # 保存并退出
    
    5.格式化分区
    	[root@Dezyan /]# mkfs.xfs /dev/sdb1		#将第二块磁盘第一个分区格式化为xfs格式
    	再次对磁盘进行格式化操作时,需要添加f选项即:
    	[root@Dezyan /]# mkfs.xfs -f /dev/sdb1
    6.挂载磁盘
    	①创建挂载点(目录)
    		[root@Dezyan /]# mkdir -p /data/db1
    	②将sdb1挂载到/data/db1目录
    		[root@Dezyan /]# mount /dev/sdb1 /data/db1/
    	③查看挂载结果
    		[root@Dezyan /]# df -h
    		/dev/sdb1                 10G  104M  9.9G   2% /data/db1
    	④测试能否写入
    		[root@Dezyan /]# cd /data/db1/
    		[root@Dezyan /data/db1]# touch 1.txt
    7.写入开机自动挂载
    	[root@Dezyan ~]# vim /etc/fstab
    	最后一行添加
    	/dev/sdb1       /data/db1       xfs     defaults        0       0
    ---------------------------------------------------------------------------
    如何卸载磁盘?
    	卸载磁盘:
    	[root@Dezyan ~]# umount /data
    
    注意卸载需要退出挂载点
    	[root@Dezyan ~]# umount /data
    	umount: /data: target is busy.   # 退出挂载点然后卸载
    
    • GPT格式 大于2T的磁盘使用parted分区(可以分128个主分区)
    分区后直接写入磁盘,直接生效。不需要保存。
    1.插入大于2T的磁盘(虚拟机需要重启系统)
    2.查看磁盘信息
    	[root@Dezyan ~]#  fdisk -l
    3.进行分区
    	[root@Dezyan ~]#  parted /dev/sdc
    	  help [COMMAND]                 		# 打印菜单帮助
      	  mklabel,mktable LABEL-TYPE         	# 创建分区表类型
      	  mkpart PART-TYPE [FS-TYPE] START END # 创建分区
      	  print [devices|free|list,all|NUMBER] # 查看分区表
      	  quit                                 # 退出
      	  rm NUMBER							   # 删除分区
      	  
    	(parted) mklabel gpt 		# 将磁盘类型修改为gpt格式
    	(parted) print				# 查看分区表
    	(parted) mkpart             # 创建分区    
    	Partition name?  []? primary    # 分区的名称  随便取
    	File system type?  [ext2]? xfs	#设置文件系统类型
    	Start? 0    				# 起始大小      
    	End? 500G					# 结束大小
    	Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
    	Ignore/Cancel? I 			#警告忽略即可
    ----------------------------------------------------------------------------
    也可采用非交互式分区:
    	[root@Dezyan ~]#  parted /dev/sdc
    	(parted) mkpart primary xfs 0G 500G
    ----------------------------------------------------------------------------
    	(parted) quit  # 退出parted分区
    4.格式化分区
    	[root@Dezyan ~]# mkfs.xfs /dev/sdc3
    5.挂载使用分区
    	[root@Dezyan ~]# mount /dev/sdc3 /data
    6.查验是否股灾成功并进行写入测试
    7.写入开机自动挂载文件中
    
    

/etc/fstab文件内容详解

文件系统或UUID 挂载点 分区类型 挂载选项 是否备份 是否自检
/dev/sdb1 /data/db1 xfs defaults 0 0
  • 如何查看文件的UUID、文件系统类型等块设备信息
[root@Dezyan ~]# blkid /dev/sdb
/dev/sdb: UUID="699ea899-6d99-4e9b-8724-7b14a78036b1" BLOCK_SIZE="512" TYPE="xfs"

磁盘相关案例

  • 企业案例1:java环境内存不够用,大量占用swap
    • swap磁盘分区: 大小是内存的1-1.5倍 如果内存大于8G,则最多swap给8G即可。
    • 什么情况下使用swap: 测试服务器 ;内部服务器 ;自己用的虚拟机 ;流量波动的业务。
    • 线上服务器,业务服务器禁止使用swap,增加内存的方式解决OOM问题。
    • 创建swap分区的方式:
方法1: 安装操作系统的时候

方法2: 安装完成操作系统
# 测试服务器上测试软件内存不够用,也无法添加内存,为了正常让测试业务正常运行,临时创建swap分区。
1.生成一个1G的设备文件。
	dd if=/dev/zero of=/opt/1g bs=1M count=1000
2.格式化成swap类型
	mkswap /opt/1g
3.挂载使用swap 直接增加到原有的swap空间上。
	swapon /opt/1g
4.查看swap大小
	free -h
6.查看swap分区的组成
	swapon -s
7.写入开机自动挂载
	/opt/1g    none   swap   defaults  0 0  
  • 企业案例2.无法写入文件到磁盘

    • 第一种情况:磁盘空间满
    需要查找系统中的大文件,找出磁盘中大于1G的文件
    	find / -type f -size +1G
    
    • 第二种情况: inode号满
    需要找出磁盘中大量的小文件
    	find / -type d -size +1M
    
  • 企业案例3.解决磁盘不够用的问题

    • 需求:
      • 目前磁盘不够用
      • 业务会持续输出日志内容到 /var/log/nginx.log文件中
      • 日志的路径不能变,解决磁盘不够用的问题。
    • 解决方案:
    1.增加大的磁盘
    2.挂载磁盘到/data目录
    	mount /dev/sdc /data
    3.将/var/log/nginx.log文件移动到/data目录
    4.在原路径中创建软链接到/var/log/nginx.log
    	ln -s  /data/nginx.log  /var/log/nginx.log
    
  • 企业案例4.删除文件

    • 磁盘上有个一39G的文件,删除后发现磁盘没有释放。

    • 文件如果被进程所占用,会出现删除文件磁盘没有释放的问题。

    • 解决方案:

    看当前的文件被哪个进程所占用:
    [root@Dezyan ~]# lsof |grep 10g
    tail      2873                          root    3r      REG               8,32 41838247936        132 /data/10 (deleted)
    
    杀死进程或者重启或者重新加载
     kill -9 2873
    

命令总结

mkfs.分区类型 文件系统 		#将某块磁盘的某个分区格式化为某个格式(一般为xfs格式)
mount 文件系统 挂载点		#将文件系统挂载到指定目录
fdisk -l				#检查所有磁盘信息
fdisk 文件系统			 #对文件系统进行分区、删除等操作
	菜单常用选项:
   		d   delete a partition		  		# 删除一个分区  
   		l   list known partition types 		# 显示分区类型
   		n   add a new partition		  		# 创建新的分区
   		p   print the partition table  		# 输出分好的分区表
   		m   print this menu		     		# 打印菜单
   		w   write table to disk and exit 	# 保存并且推出
   		q   quit without saving changes		# 退出不保存
umount 挂载点			#将文件系统从挂载点卸载
blkid 文件系统			#查看块设备信息(UUID、文件系统类型等)
/etc/fstab			  #系统开机自动挂载磁盘配置文件,不建议使用/etc/rc.local
parted mkpart primary xfs 0G  500G		#使用parted创建分区
partprobe				#通知系统磁盘的分区信息变化 更新内核的硬盘分区表信息 
mkswap 文件系统 		  #格式化成swap类型
swapon 文件系统			  #挂载使用swap,直接增加到原有的swap空间上。
swapon -s				#查看swap分区的组成
lsof					#查看文件的进程信息

系统重要的配置文件

etc下

  • 网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
[root@Dezyan ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet		# 网卡类型 以太网
BOOTPROTO=none	    # IP地址的配置方式 none或者static表示手动高配置IP地址 DHCP自动获取IP地址
NAME=ens33			# 网卡系统显示的名称
UUID=cbf46e75-ff6d-4d92-96d8-795522a2652f	# 设备的唯一标识 类似每个设备都有一个身份证,可以删除
DEVICE=ens33		# 网卡硬件的名称
ONBOOT=yes			# 开机自动启动网卡
IPADDR=10.0.0.101	# IP地址 局域网内唯一
PREFIX=24		    # 子网源码 决定了局域网内可用的IP地址数量 10.0.0.1-10.0.0.254
GATEWAY=10.0.0.2	# 网关 去往不同网段的必经之路
DNS1=223.5.5.5		# 域名解析 将域名解析成IP地址过程

重启网卡方法:
1.ifdown ens33 && ifup enss33
2.systemctl restart NetworkManager
3.安装network-scripts命令
	yum -y install network-scripts
	systemctl restart network
  • DNS配置文件 /etc/resolv.conf
[root@Dezyan ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 223.5.5.5

注意:如果网卡配置了DNS,重启网卡会覆盖/etc/resolv.conf配置文件
  • 本地DNS解析 /etc/hosts
[root@Dezyan ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123.57.132.70	aliyun1.com

浏览器访问www.baidu.com---->
查找本地的DNS /etc/hosts--->
hosts中是否有www.baidu.com对应的IP地址,有就返回给浏览器,
如果没有浏览器才会去找223.5.5.5询问有没有百度对应的IP地址
  • 主机名配置文件 /etc/hostname
临时修改
	[root@Dezyan ~]# hostname test
永久修改,修改配置文件
	方法1:直接修改/etc/hostname,重启生效
	方法2:hostnamectl set-hostname 主机名称 
  • 开机自动执行脚本 /etc/rc.local
作用: 开机自动执行此脚本 给源文件执行权限,是一个软链接
使用前需要给源文件执行权限
	[root@Dezyan ~]# chmod +x /etc/rc.d/rc.local
  • 开机自动挂载 /etc/fstab
  • 设置默认运行级别的文件 /etc/inittab 没用 知道7个运行级别即可
运行级别: 7个运行级别 每个级别表示不同的功能 面试题或者笔试题
0   # 表示关机
1   # 表示单用户模式,忘记root密码 可以修改root密码
2   # 表示多用户模式,缺少很多功能比如NFS
3   # 表示完全多用户  默认的级别
4   # 保留待开发
5   # 桌面模式 需要安装DESKTOP包
6   # 重启

查看当前运行级别:
	[root@Dezyan ~]# runlevel
	N 3
  • 存放系统环境变量 /etc/profile
作用: 存放环境变量,每次重启系统或者远程连接系统 都会执行此文件中所有的变量
给[root@Dezyan ~]#上个色
export PS1="[\[\e[35;1m\]\u@\[\e[0m\]\[\e[36;1m\]\H\[\e[0m\]\[\e[33;1m\] \w\[\e[0m\]]\$"
  • 查看系统版本 /etc/os-release
Centos	:	/etc/redhat-release
  • 存放用户信息 /etc/passwd
  • 定时任务 /etc/crontab
  • 赋权管理 /etc/sudoers
  • 开机显示字符串 /etc/motd

var下

  • 系统日志 /var/log/messages
  • 系统登录和退出日志 /var/log/secure

proc下

  • cpu信息 /proc/cpuinfo ---->lscpu
  • 内存信息 /proc/meminfo
  • 负载信息 /proc/loadavg ---->w;uptime;top
  • 挂载信息 /proce/mounts ---->df -h

进程管理

概念

  • 当我们运行一个程序,那么我们将运行的程序叫进程。

    • 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限
    • 在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息
  • 进程和程序

    • 程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中。
    • 进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程随着程序的终止而销毁,不会永久存在系统中。
  • 程序的生命周期

    • 一个对象从无到有、从有到无过程称为生命周期

    • 当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)

      1. 子进程在处理任务代码时,父进程会进入等待状态中

      2. 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源

      3. 如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程

      4. 每个进程都有自己的PID号,子进程称为PPID

进程的状态

ps命令

  • 命令参数
ps -auxf		#常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
		-a显示所有终端机下执行的进程,除了阶段作业领导者之外
		-u以用户为主的格式来显示进程状况
		-x显示所有进程,不以终端机来区分
		-f用ASCII字符显示树状结构,表达进程间的相互关系
  • 输出内容详解
[root@Dezyan ~]# ps -auxf
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           2  0.0  0.0      0     0 ?        S    Nov22   0:00 [kthreadd]
标志 意义
USER 该 process 属于那个使用者账号的
PID 该 process 的号码
%CPU 该 process 使用掉的 CPU 资源百分比
%MEM 该 process 所占用的物理内存百分比
VSZ 该 process 使用掉的虚拟内存量 (Kbytes)
RSS 该 process 占用的固定的内存量 (Kbytes)
TTY 该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT 该程序目前的状态
START 该 process 被触发启动的时间
TIME 该 process 实际使用 CPU 运作的时间
COMMAND 该程序的实际指令[]内核态进程 无[] 用户进程
  • 进程的状态
STAT基本状态 描述 STAT状态+符号 描述
R 进程运行 s 进程是控制进程, Ss进程的领导者,父进程
S 可中断睡眠 < 进程运行在高优先级上,S<优先级较高的进程
T 进程被暂停 N 进程运行在低优先级上,SN优先级较低的进程
D 不可中断睡眠 + 当前进程运行在前台,R+该表示进程在前台运行
Z 僵尸进程 l 进程是多线程的,Sl表示进程是以线程方式运行

top命令

  • 输出内容
[root@Dezyan ~]# top
top - 00:35:53 up  8:52,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 147 total,   1 running, 146 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1954.1 total,   1373.9 free,    190.8 used,    389.4 buff/cache
MiB Swap:   2088.0 total,   2088.0 free,      0.0 used.   1596.7 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                  
      1 root      20   0  169380  11836   8952 S   0.0   0.6   0:01.82 systemd 
  • 输出内容详解
第二行:
Tasks: 147 total,   1 running, 146 sleeping,   0 stopped,   0 zombie
	Tasks:73 total		#当前进程的总数
	1 running			#正在运行的进程数
	145 sleeping		#睡眠的进程数
	0 stopped			#停止的进程数
	0 zombie			#僵尸进程数

第三行:
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
	%Cpu(s):  0.0 us	#系统用户进程使用CPU百分比
	0.0 sy				#内核进程占用CPU百分比,内核是于硬件进行交互
	0.0 ni				#调整过优先级进程占用百分比
	100.0 id			#空闲CPU的百分比
	0.0 wa				#CPU等待IO完成的时间
	0.0 hi				#硬中断,占的CPU百分比
	0.0 si				#软中断,占的CPU百分比
	0.0 st				#比如虚拟机占用物理CPU的时间

列表行:
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
	PID:进程ID。
	USER:进程所有者。
	PR:进程优先级。
	NI:nice值,用于调整进程优先级。
	VIRT:虚拟内存使用量,包括所有已分配的内存,包括未被映射的内存。
	RES:常驻内存使用量,即实际使用的物理内存量。
	SHR:共享内存使用量。
	S:进程状态
	%CPU:该进程占用的CPU使用率。
	%MEM:该进程占用的内存使用率。
	TIME+:该进程占用CPU的总时间。
	COMMAND:启动该进程的命令。

软中断和硬中断

  • 硬中断:"当你认真做一件事,突然有另一件事要你做,你必须停止当前所做的事去做另一件,就是硬中断"

  • 软中断:"你有两件事要做,你正在做一件事,但另一件事已被你安排好时间去做,你做一件事的时候到了你安排好的时间了,你去做另一件事,就是软中断"

  • 软中断和硬中断的区别

**** 软中断 硬中断
是否有随机性 突发性
是否有中断响应周期
中断类型号的提供方法 固定或由指令提供 由中断控制器提供

管理进程状态

kill/killall/pkill命令

  • kill命令
kill -l			#列出当前系统支持的信号
常用的信号:
	kill -1		#SIGHUP 重新加载配置文件	不停机维护
	kill -9		#SIGKILL 强制杀死进程
	kill -15	#SIGTERM 终止进程,默认kill使用该信号
	
#将一个服务的所有进程全部强制杀死(nginx为例)
[root@Dezyan ~]# ps axu|grep nginx| grep -V grep | xargs kill -9
  • killall命令
kylin系统不自带此命令
[root@Dezyan ~]# yum install psmisc -y
使用方法:
killall 进程名称
  • pkill命令
pkill 进程名称
#使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
pkill -9 -t pts/1

管理后台进程screen/nohup

  • & 把进程放入后台运行
[root@Dezyan ~]# sleep 100 &
[1] 4229
#把进程挂起放在后台
[root@Dezyan ~]# sleep 4000
^Z								#ctrl + z
[3]+  Stopped
  • jobs 显示在后台运行的程序
[root@Dezyan ~]# jobs
[1]+  Running                 sleep 100 &
  • bg和fg 将作业放在后台/调回前台运行
#后台进程号可使用jobs查看
#让作业2在后台运行
[root@Dezyan ~]# bg %2				#background
[2]+ sleep 4000 &
#将作业1掉回到前台运行
[root@Dezyan ~]# fg %1				#foreground
sleep 3000
#终止后台PID为2的进程
[root@Dezyan ~]# kill %2
  • screen的使用
1.安装
	yum –y install screen
2.指定任务名称进入新bash
	screen -S 名称
3.在新bash下执行一条命令(wget为例)
	wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate
4.平滑退出screen 不会终止任务
	ctrl+a+d   #平滑退出screen任务
	exit	   #退出
5.查看正在运行的screen有哪些任务
	screen -list
6.重新进入正在执行的screen
	screen -r 名称/PID
  • Nohup命令
nohup 后台持续运行的命令 &

#nohup在运行过程中会在当前的目录生成一个nohup.out的临时文件

进程的优先级(了解)

1)	在启动进程时,为不同的进程使用不同的调度策略
nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU
使用top或ps敏玲查看进程的优先级
# 使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源
PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR   -20映射到0, +19映射到39  
 
使用ps查看进程优先级
 
2)nice指定程序的优先级,语法格式nice  -n 优先级数字 进程名称
 #  开启vim并指定程序优先级为-5  并查看进程优先级
   
# renice命令修改一个正在运行的进程优先级,语法格式 renice –n 优先级数字 进程 pid
1)查看sshd进程当前的优先级状态
[root@lzy ~]# ps axo pid,command,nice|grep sshd
  1114 /usr/sbin/sshd -D             0
 30865 sshd: root@pts/0              0
2) 调整sshd主进程的优先级
[root@lzy ~]# renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash
登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级
[root@lzy ~]# ps axo pid,command,nice|grep sshd
  1114 /usr/sbin/sshd -D           -20
 43747 sshd: root@pts/0            -20
 43770 grep --color=auto sshd      -20

curl cip.cc #查看当前系统的出口路由

网络知识点

网络的基本概念

什么是网络

  • 所谓网络,就是通过一定的形式连接起来的物体,物体与物体之间可以实现通信。

连接方式

  • 网线

    • 网线分类:五类线 超五类 六类线(千兆) 按箱子305米
    • 制作方法:橙白 橙 绿白 蓝 蓝白 绿 棕白 棕 568B线序
  • 光纤

    • 千兆万兆
      多模光纤 传输距离近 2公里

      单模光纤 传输距离远 120公里

  • wifi

网络设备

交换机

  • 实现一个网络内多台主机之间的通讯

路由器

  • 实现不同局域网之间主机通讯,可以隔离广播风暴

  • 查看路由条目信息

    [root@Dezyan ~]# route -n
    [root@Dezyan ~]# netstat -rn
    输出内容:
    第一列:所能去往网段的信息 
    第二列:0.0.0.0  通过局域网即可到达
          10.0.0.254 想去往其他网段的必经节点,称为网关
    第三列:子网掩码(告诉网段内可以容纳多少主机)
    最后一列:到达指定目标,通过哪一个接口出去
    

使用思科模拟器实现不同方式通信(简单记忆)

不同网段通信

网络拓扑:
		PC1---Switch1---Route1---Switch2---PC2
端口:				     0/0   0/1
PCIP:
	PC1:10.0.0.200
	PC2:11.22.33.200
配置方式:
	Route1:
		Router> enable		# 由用户模式进入特权模式
		Router# config t	# 进入全局配置模式
		Router(config)#int fa0/0	# 进入到fa0/0第一个接口
		Router(config-if)#ip address 10.0.0.1 255.255.255.0   # 配置接口的IP地址
		Router(config-if)#no shut							  # 开启接口
		Router(config-if)#int fa0/1			# 直接切换到fa0/1接口进行配置IP
		Router(config-if)#ip address 11.22.33.1 255.255.255.0 
		Router(config-if)#no shut
	查看路由表信息:
		Router#show ip route		#可看到两端网段

三台路由器配置静态路由

网络拓扑:
		PC1---Switch1---Route1---Route2---Route3---Switch2---PC2
端口:                 0/0     1  0     1  0     1
路由器端口IP:
	R1:
		0/0:10.0.0.1
		0/1:1.1.1.1
	R2:
		0/0:1.1.1.2
		0/1:2.2.2.1
	R3:
		0/0:2.2.2.2
		0/1:11.22.33.1
PCIP:
	PC1:10.0.0.200
	PC2:11.22.33.200
配置方法:
	R1:
		Router(config)#int fa0/0
		Router(config-if)#ip add 10.0.0.1 255.255.255.0
		Router(config-if)#no shut
		Router(config-if)#int fa0/1
		Router(config-if)#ip add 1.1.1.1 255.255.255.0
		Router(config-if)#no shut
		R1(config)#ip route 11.22.33.0 255.255.255.0 1.1.1.2
	R2:
		R2(config)#int fa0/0
		R2(config-if)#ip add 1.1.1.2 255.255.255.0
		R2(config-if)#no shut
		R2(config-if)#int fa0/1
		R2(config-if)#ip add 2.2.2.1 255.255.255.0
		R2(config-if)#no shut
		R2(config)#ip route 11.22.33.0 255.255.255.0 2.2.2.2
		R2(config)#ip route 10.0.0.0 255.255.255.0 1.1.1.1
	R3:
		R3(config)#int fa0/0
		R3(config-if)#ip add 2.2.2.2 255.255.255.0
		R3(config-if)#no shut
		R3(config-if)#int fa0/1
		R3(config-if)#ip add 11.22.33.1 255.255.255.0 
		R3(config-if)#no shut
		R3(config)#ip route 10.0.0.0 255.255.255.0 2.2.2.1

三台路由器配置RIP动态路由

拓扑图、路由器端口配置等与上一标题一致
配置方式:
	端口IP配置过程省略
	R1(config)#router rip			# 开启rip协议
	R1(config-router)#network 1.1.1.0   # 宣告1网段
	R1(config-router)#network 10.0.0.0  # 宣告10网段
	R2(config)#route rip
	R2(config-router)#network 1.1.1.0
	R2(config-router)#network 2.2.2.0
	R3(config)#route rip
	R3(config-router)#network 11.22.33.0
	R3(config-router)#network 2.2.2.0

网络层次模型

OSI七层网络模型及其作用(记忆)

应用层:主要就是提供应用程序可以接入网络接口,并根据程序的不同对应不同的接口协议。
表示层:数据的解码编码、加密解密、压缩与解压缩
会话层:建立、维护、管理应用程序之间的会话
传输层:负责网络中端到端的连接(TCP、UDP)。
网络层:网络层的主要作用就是路由和寻址,主要接触到的是IP协议,即IP地址。 
数据链路层:提供可靠的数据传输服务
物理层:

数据包封装与解封装

  • 封装:由上至下进行封装
  • 解封装:由下至上进行拆包

TCP/IP模型(4层模型)(有面试题)

  • OSI7层模型与TCP/IP模型(DOD)对应关系
应用层 >
表示层 -----> 应用层
会话层 >
传输层 -----> 主机到主机层
网络层 -----> 因特网层
数据链路层 -----> 网络接入层
物理层 >
  • TCP/IP协议簇相关协议汇总
应用层 主机到主机层 因特网层 网络接入层
Telnet
FTP
TFTP
SNMP
HTTP
NFS
DHCP
TCP
UDP
ICMP
ARP
RARP
IP
Ethernet
Fast Eth
FDDI
TokenRing
  • 主机层到主机层协议介绍

    • TCP:

      • 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

      • 特点:面向连接,可靠,传输效率低

      • 应用场景:web浏览器,电子邮件,文件传输程序

      • 外卖员-->快递必须送到我们的手中

    • UDP:

      • 用户数据报协议,属于无连接的传输协议
      • 特点:无连接、不可靠、快速传输
      • 应用场景:域名系统(DNS),视频流,IP语音(VOIP)
      • 外卖员-->快递放在门口
    • TCP UDP协议端口号范围 1 - 65535 可用,真正端口号总数为2的16次方=65536

  • 应用层协议介绍(面试题)

面试题: 面试官问 ssh默认端口 http默认端口?
FTP         21          明文协议,文件传输协议,基于TCP
TFTP        69          简单文件传输协议,基于UDP
SSH         22          安全外壳协议,远程连接,加密
Telnet      23          明文协议,远程连接     # 连接路由器交换机常用
SNMP        161/162     简单网络管理协议,基于UDP
SMTP        25          简单邮件传输协议,基于TCP
HTTP        80          超文本传输协议
HTTPS       443         超文本传输安全协议
DHCP        67/68/546   动态主机设置协议,C(67),S(68),546(V6)

DNS解析过程

  • dns域名服务器一般分三种

    • 根域名服务器(.)
    • 顶级域名服务器(.com)
    • 权威域名服务器(.baidu.com)
  • 什么是A记录:从域名到IP的解析过程,被称为A记录

  • 获取A记录命令方法:yum -y install bind-utils

  • 解析期间涉及到两个特殊查询

    • 递归查询(“查询的递交者” 更替):客户端---本地dns服务器
    • 迭代查询(“查询的递交者”不变):本地dns服务器---根域名服务器 顶级域名服务器 权威域名服务器
  • DNS解析过程(记忆)

浏览器输入www.baidu.com
1.依次查询  浏览器缓存-->本地HOSTS-->本地DNS		##此过程为递归查询
2.本地DNS-->根域名服务器		#根服务器不存储域名解析,会给本地DNS返回顶级域
3.本地DNS-->顶级域名服务器		#.com不存在域名解析 .com会返回权威域名服务器的IP地址给本地DNS
4.本地DNS-->权威域名服务器		#权威域名返回 A记录解析对应的服务器IP地址
5.拿到后本地DNS会自己缓存一份,返回给浏览器一份		##345过程为迭代查询
6.浏览器-->百度IP建立连接

控制字段介绍

ACK:表示确认控制字段,确认数据是否接收到       
SYN:表示请求建立连接字段,和主机建立连接时使用    
FIN:表示请求断开连接字段,和主机断开连接时使用    
PSH: 表示有DATA数据传输,PSH为1表示的是有真正的TCP数据包内容被传递
RST: 表示连接重置。一般是在FIN之后才会出现为1的情况,表示的是连接重置。
seq序列号:将大的数据进行拆分后标记序列信息,便于接收方将拆分后的数据信息进行组装,在原有序列号基础上+1进行回复,告知发送方下次再给我发送的数据是什么

TCP三次握手建立连接(记忆)

A to B : SYN=1		请求与B建立连接
		 seq=x		向B发送第一个数据包
B to A : SYN=1		请求与A建立连接
		 ACK=1		确认收到A的请求信息
		 seq=y		向A发送第一个数据包
		 Ack=x+1	告知A下次应发送第二个包
A to B : ACK=1		确认收到B的请求信息
		 seq=x+1	向B发送第二个数据包
		 Ack=y+1	告知B下次应发送第二个包
----------TCP通道成功建立-----------------

为什么要进行三次握手?(记忆)

为了防止已失效的连接请求报文段突然又传送到了服务端,让服务器端的一直等待而浪费资源,因而产生错误。


举个例子:
	“已失效的连接请求报文段”的产生在这样一种情况下:客户端发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达服务端。本来这是一个早已失效的报文段。但服务端收到此失效的连接请求报文段后,就误认为是客户端再次发出的一个新的连接请求。于是就向客户端发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要服务端发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理睬服务端的确认,也不会向服务端发送数据。但服务端却以为新的运输连接已经建立,并一直等待客户端发来数据。这样,服务端的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,客户端不会向服务端的确认发出确认。服务端由于收不到确认,就知道客户端并没有要求建立连接。”

TCP四次挥手断开连接(记忆)

A向B发送 FIN断开请求			#A to B : FIN(seq=a)
B向A发送 ACK确认收到你的断开请求	#B to A : ACK(seq=a+1)
B向A发送 FIN断开请求			#B to A : FIN(seq=b,ack=a+1)
A向B发送 ACK确认				 #A to B : ACK(seq=b+1)

根据IP和掩码计算可用IP数

https://www.36130.com/subnetmask/
#直接查就行,不用自己算

TCP11种状态集表示含义

客户端发送FIN给服务端-->ESTABLISHED-->FIN_WAIT1第一次等待
服务端收到回复ACK: ESTABLISHED--->CLOSED_WAIT关闭等待
收到后客户端:FIN_WAIT1-->FIN_WAIT2第二次等待
服务端继续回复客户端FIN: CLISED_WAIT--->LAST_ACK
客户端回复确认ACK:FIN_WAIT2-->TIME_WAIT时间等待-->CLOSED状态
最后服务端收到确认ACK: LAST_ACK---> CLOSED


各个状态的意义如下: 

CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。  

LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。 

SYN_RCVD :表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED状态。 

SYN_SENT :这个状态与SYN_RCVD状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

ESTABLISHED :表示TCP连接已经成功建立。 

FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态有时仍可以用netstat看到。

FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2是没有超时的(不像TIME_WAIT状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个FIN_WAIT_2状态将一直保持到系统重启,越来越多的FIN_WAIT_2状态会导致内核崩溃。

TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)

CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK状态。当收到对方的ACK报文后,也就可以进入到CLOSED可用状态了。

给网卡配置多个临时IP地址、临时网关

配置临时IP:
	添加:
		[root@Dezyan ~]# ip add add 10.0.0.201/24 dev eth0
	删除:
		[root@Dezyan ~]# ip address del 10.0.0.201/24 dev eth0
配置临时网关:
	添加:
		[root@Dezyan ~]# ip route add 0/0 via 10.0.0.2
	删除:
		[root@Dezyan ~]# ip route del 0/0 via 10.0.0.2
配置默认网关:
	添加:
		[root@Dezyan ~]# route add default gw 10.0.0.2
	删除:
		[root@Dezyan ~]# route del default gw 10.0.0.2

抓包方式

*抓包方式:wireshark抓包软件在Windows中使用*

*Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包*

	tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
	tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
	
#常用选项
[root@oldboyedu ~]#yum -y install tcpdump

-i       #监听哪一个网卡 
-n  	 #不把ip解析成主机名
-nn 	 #不把端口解析成应用层协议
-c  	 #指定抓包的数量
-S  	 #不把随机序列和确认序列解析成绝对值
-w       #将流量保存到文件中,文件中的信息是无法直接查看的
-r       #读取文件中的内容
-v 		 #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 
-vv 	 #输出详细的报文信息。
-nnvvi ens33

#实例 上家工作遇到过什么故障。
企业中遇到无法远程连接拍错流程: IDC机房服务器 云服务器
1.ping通
2.通过页面或者机房插显示器连接服务器抓包
tcpdump -nni eth0 port 12345
3.在公司windows电脑使用telnet连接测试
cmd窗口-->telnet 服务器IP地址  12345

结果: 
1.如果服务端可以看到来源公网IP地址 说明服务端做的限制
2.如果服务端来源IP地址不是公司公网IP地址 则需要放行抓取到的公网(打电话解决)
3.如果服务端收不到任何信息,说明是公司网络问题

保存到文件中
[root@oldboy:~]# tcpdump -w 1.txt -nnvvi ens33 dst www.baidu.com
查看文件中的内容
[root@oldboy:~]# tcpdump -r 1.txt


1、默认启动

tcpdump -vv		#普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2、过滤主机

tcpdump -i eth1 host 192.168.1.1		#抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据

tcpdump -i eth1 src host 192.168.1.1	#指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1	#指定目的地址,192.168.1.1

3、过滤端口

tcpdump -i eth1 port 80			#抓取所有经过eth1,目的或源端口是80的网络数据

tcpdump -i eth1 src port 80		#指定源端口

tcpdump -i eth1 dst port 80		#指定目的端口

4、协议过滤

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某端口的数据包

tcpdump -i eth0 tcp port 21 -nn

5、常用表达式

非 : ! or "not" (去掉双引号) 

且 : && or "and" 

或 : || or "or"

#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

Linux常用网络命令

*1. 网卡命令规则*

CentOS-6之前基于传统的命名方式如:eth1,eth0....

Centos-7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0、wlan0更难读。比如enp5s0
kylin系统 ens33
ubuntu系统 ens33
biosdevname和net.ifnames两种命名规范

#net.ifnames的命名规范为:   

	设备类型+设备位置+数字

#设备类型:

	en 表示Ethernet

	wl 表示WLAN

	ww 表示无线广域网WWAN

#实际的例子:

	eno1 	#板载网卡

	enp0s2  #pci网卡

	ens33   #pci网卡

	wlp3s0  #PCI无线网卡

	wwp0s29f7u2i2   #4G modem

	wlp0s2f1u4u1   #连接在USB Hub上的无线网卡

#biosdevname的命名规范为:

	根据系统BIOS提供的信息对网络接口进行重命名。
	
	em[1-N] #表示主板(嵌入式)NIC (对应机箱标签)
	
	pci		#表示PCI插槽中的卡,端口1至N
	
实际的例子:

	em1 	#板载网卡

	p3p4 	#pci网卡

	p3p4_1 	#虚拟网卡
	
CentOS-7

默认内核参数(biosdevname=0(dell服务器默认是1),net.ifnames=1):  网卡名 "enp5s2"

biosdevname=1,net.ifnames=0:网卡名 "em1"

biosdevname=0,net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1)

#定义网卡命令规则

在安装系统时,选择安装选项,按tab键,在跳出的一行内容后面添加net.ifnames=0 biosdevname=0

#命令行设置网卡名称规则

[root@qls ~]# cd /etc/sysconfig/network-scripts/  #修改网卡配置文件
[root@qls network-scripts]# mv ifcfg-ens33 ifcfg-eth0
[root@qls network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0
[root@qls ~]# vim /etc/sysconfig/grub  #GRUB添加kernel参数
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
[root@qls ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@qls ~]# reboot   #重启系统生效

*2. 网卡配置文件详解*

#动态ip
[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="fb32c09d-5a9f-40b9-852b-0f44ff2202ed"
DEVICE="eth0"
ONBOOT="yes"

#静态ip
[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"        		
BOOTPROTO="static"     		
NAME="eth0"            		
DEVICE="eth0"          		
ONBOOT="yes"           		
IPADDR="10.0.0.88"			
NETMASK="255.255.255.0"		
GATEWAY="10.0.0.254"		
DNS1="223.5.5.5"			
DNS2="223.6.6.6"			


#详解:

TYPE=Ethernet		#网卡类型,一般是Ethernet,还有其他的如bond,bridge

BOOTPROTO=dhcp		#获取IP地址的方式,启动的协议,获取配置的方式。
						dhcp表示动态获取
						static或none表示静态手工配置,若想使用本地配置好的IP则应该设置成这个
						
DEFROUTE=yes		#是否设置默认路由,若为yes则可以在该文件通过PREFIX这个参数来设置子网掩码		

PEERDNS=yes			#yes表示由DHCP来获取DNS, no表示/etc/resolv.conf来控制,默认为yes。
						yes:如果DNS设置,修改/etc/resolv.conf中的DNS
						no:不修改/etc/resolv.conf中的DNS
				
NAME=eth0			#这个参数对应的值是网卡名,是给用户看的

UUID=...			#通用唯一识别码,若vmware克隆的虚拟机无法启动网卡可以去除此项

DEVICE=eth0			#系统逻辑设备名

ONBOOT=yes			#开机启动时是否激活网卡设备,centos7装完网卡后默认设置成no

HWADDR=...			#以太网硬件地址,mac地址)。若是vmware克隆的虚拟机无法启动网卡,也要改这个。

NM_CONTROLLED=yes	#是否通过NetworkManager管理网卡设备

IPADDR=...			#设置网卡对应的IP地址,网络服务启动,网卡激活后会自动将该地址配置到网卡上
					前提(BOOTPROTO=static)而不是dhcp
					
PREFIX=24			#子网掩码长度,不要这么写PREFIX=255.255.255.0

NETMASK=255.255.255.0	#生产环境中一般用这种方式指定子网掩码

GATEWAY=10.0.0.254	#该网卡配置的IP对应的网关(默认路由)
					若主机是多网卡设备,该参数只能在一个网卡配置文件里面出现,一台主机只有一个默认路由
					
DNS1=...			#主DNS,若这里设置了值,则会优先于/etc/resolv.conf中设置的DNS服务器的地址
					需要和“PEERDNS=no”配合使用
					
DNS2=...			#次dns

USERCTL=no			#USERCTL=yes/no是否允许非root用户控制该设备

IPV6INIT=no 		#是否启用IPV6

BROADCAST=...		#广播地址

PROXY_METHOD=none	#代理方式,一般不用这个参数

BROWSER_ONLY=no		#没有什么用。

#修改网卡配置文件的方法

vim  /etc/sysconfig/network-scripts/ifcfg-eth0

nmtui	#需要开启NetworkManger

*3. 网络管理命令*

ping

ping命令主要的功能是用来检测网络的连通情况和分析网络速度。

#常用选项

	-t		#持续ping,不中断。不加该选项只ping4个包。
	-n		#ping的包数,默认是4个。 windows
	-c      #ping包的个数,默认持续ping,linux
	-W		#多长时间ping一次。linux 延时1s
	-f		#极速ping。

windows: ping不通不能表示服务器不能访问 可能服务器禁止了ICMP协议(禁ping)
C:\Users\oldboy-lidao996>ping -n 2 www.baidu.com

正在 Ping www.a.shifen.com [110.242.68.3] 具有 32 字节的数据:
来自 110.242.68.3 的回复: 字节=32 时间=11ms TTL=52
来自 110.242.68.3 的回复: 字节=32 时间=12ms TTL=52

110.242.68.3 的 Ping 统计信息:
    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 11ms,最长 = 12ms,平均 = 11ms
    
centos:
[root@oldboyedu ~]#ping -c2 -W1 www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=16.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=11.1 ms

-c   ping的个数
-W1 延时1秒返回请求

nc

nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具

#常用选项

	 -l		#用于指定nc将处于侦听模式。
	 -u		#指定nc使用UDP协议,默认为TCP
	 -v		#输出交互或出错信息,新手调试时尤为有用
	 -w		#超时秒数,后面跟数字 
	 -z		#表示zero,表示扫描时不发送任何数据	 

nmap

Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具。Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。

#常用选项

	-p    		#指定端口号
   	-p22   		#单个端口
   	-p22,80   	#多个端口
   	-p1-1000   	#1到1000之间的端口
   	
   	
企业案例:
写一个脚本 探测自己所有的服务器上开放的服务以及端口 并且计算一些每个服务占用所有服务的百分比

telnet

一种远程登录的工具。同样可以检查某个主机是否开启某个端口
默认端口23
#用法 主要功能链接路由器、交换机 telnet 192.168.13.1
	
[C:\~]$ telnet 10.0.0.99 22   


Connecting to 10.0.0.99:22...
Connection established.	   # 连接成功 说明22端口开启
To escape to local shell, press 'Ctrl+Alt+]'.
SSH-2.0-OpenSSH_7.4

netstat

打印网络连接、路由表、tcp11种状态。
查看当前系统中运行了哪些服务端口
#常用选项
	-l		#只显示监听套接字。
	-n		#不做名字解析
	-t		#显示tcp端口
	-u		#显示udp端口
	-p		#显示pid和程序名字
	-r		#显示路由表
	-a		#显示所有的套接字

netstat -tnulp

ss

跟netstat命令差不多。

#常用选项
	-l		#只显示监听套接字。
	-n		#不做名字解析
	-t		#显示tcp端口
	-u		#显示udp端口
	-p		#显示pid和程序名字
	-r		#解析主机名
	-a		#显示所有的套接字
	

tracert

(windows) 路由跟踪(检查你与目标之间每个路口是否畅通)

#常用选项

	-d   #禁止把IP解析为对应的域名(主机名)
C:\Users\oldboy-lidao996>tracert -d www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [110.242.68.3] 的路由:

  1     1 ms     1 ms     2 ms  192.168.11.1
  2     2 ms    <1 毫秒    5 ms  192.168.1.1
  3     4 ms     3 ms     3 ms  221.218.208.1
  4     2 ms     8 ms     6 ms  61.148.162.57
  5     3 ms     7 ms     4 ms  202.106.34.1
  6     4 ms     3 ms     3 ms  202.96.12.1
 
 DNS流程:
 浏览器缓存-->HOSTS-->windows缓存-->LDNS-->根
 
 查看windows缓存:
 ipconfig/displaydns
C:\Users\oldboy-lidao996>ipconfig/flushdns

Windows IP 配置

已成功刷新 DNS 解析缓存。


cmd---->mstsc 调出远程桌面

traceroute

路由跟踪(检查你与目标之间每个路口是否畅通)

#常用选项

      -n   禁止把IP解析为对应的域名(主机名)
在Linux系统中使用:
[root@oldboyedu ~]#traceroute -n -I www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets
 1  10.0.0.2  0.216 ms  0.176 ms  0.100 ms
 2  192.168.11.1  25.034 ms  24.795 ms  24.615 ms
 3  192.168.1.1  22.107 ms  21.941 ms  21.748 ms

iftop

iftop界面说明:

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

#常用选项

-i		#设定监测的网卡

-B 		#以bytes为单位显示流量(默认是bits)

-n		#使host信息默认直接都显示IP

-P		#使host信息及端口信息默认就都显示

-m		#设置界面最上边的刻度的最大值,刻度分五个大段显示

按q退出监控。

yum -y install dstat
dstat -nf 

命令小结

网络重点:
1.网络常用命令
ping
ip add 
route -n
ifconfig
nslookup
tcpdump
iotop
netstat -tnulp
telnet


了解:
Linux中:
	ss -an|grep tcp
	tracert
	iftop
	nmap
windows中:
	ping
	nslookup 
	mstsc
	cmd
	ipconfig/all
	ipconfig/flushdns
	ipconfig/displaydns

posted @ 2025-03-18 19:57  丁志岩  阅读(127)  评论(0)    收藏  举报