【总结】LINUX常见命令深度解析

摘要

本文讲解LINUX下用户/用户组,文件属性及修改,SUDO免密登录,SSH互信免密登录,VIM,history等命令操作实践。

用户和用户组管理

参考:

(1) Linux 用户和用户组管理 https://www.runoob.com/linux/linux-user-manage.html

实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。

1、添加新的用户账号使用useradd命令

useradd 选项 用户名

参数说明:

  • 选项:

    • -c comment 指定一段注释性描述。
    • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    • -g 用户组 指定用户所属的用户组。
    • -G 用户组,用户组 指定用户所属的附加组。
    • -s Shell文件 指定用户的登录Shell。
    • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名:

    指定新账号的登录名。

例如:

# useradd -s /bin/bash -g root -d /home/duncan duncan

增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。

2、删除帐号

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

删除一个已有的用户账号使用userdel命令,其格式如下:

userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。

例如:

# userdel -r duncan

此命令删除用户duncan在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

3、修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用usermod命令,其格式如下:

usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

4、用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

如果默认用户名,则修改当前用户的口令。

例如:

# passwd duncan
New password: 
Retype new password: 
passwd: password updated successfully

chmod/chown(文件基本属性)

参考:

(1) Linux 文件基本属性
https://www.runoob.com/linux/linux-file-attr-permission.html
(2) Linux chown 命令
https://www.runoob.com/linux/linux-comm-chown.html
(3) Linux chmod命令
https://www.runoob.com/linux/linux-comm-chmod.html

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change ownerp) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。

img

ls-l文件属性说明

在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……

实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

img

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。

363003_1227493859FdXT

chown更改文件属主/属组

更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

例如,将install.log的拥有者与群组改为root:

[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

chmod:更改文件9个属性

Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。

文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

  • r:4
  • w:2
  • x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= --- = 0+0+0 = 0

数字改变文件属性

chmod 777 file

符号改变文件属性

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:

who 用户类型 说明
u user 文件所有者
g group 文件所有者所在组
o others 所有其他用户
a all 所用用户, 相当于 ugo

operator 的符号模式表:

Operator 说明
+ 为指定的用户类型增加权限
- 去除指定用户类型的权限
= 设置指定用户权限的设置,即将用户类型的所有权限重新设置

permission 的符号模式表:

模式 名字 说明
r 设置为可读权限
w 设置为可写权限
x 执行权限 设置为可执行权限
X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

例如

chmod ug+w,o-w file1.txt file2.txt

vi/vim 编辑文本

按键 功能
移动光标的方法
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
删除、复制与粘贴
dd 删除游标所在的那一整行(常用)
特殊命令
:set paste 复制粘贴不自动缩进
ggVG gg 让光标移到首行,在vim才有效,vi中无效
V 是进入Visual(可视)模式
G 光标移到最后一行
选中内容以后就可以其他的操作了:
d 删除选中内容
y 复制选中内容到0号寄存器
"+y 复制选中内容到+寄存器,也就是系统的剪贴板,供其他程序用(未成功)

history(ctrl+r)搜索历史命令

使用 HISTTIMEFORMAT 显示时间戳

当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身,如果你想要查看命令历史的时间戳,那么可以执行:

# export HISTTIMEFORMAT='%F %T '
# history | more
1  2008-08-05 19:02:39 service network restart
2  2008-08-05 19:02:39 exit
3  2008-08-05 19:02:39 id
4  2008-08-05 19:02:39 cat /etc/redhat-release

注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。

使用 ctrl+r 搜索历史

(1) ctrl+r 就是反向搜索执行过的命令。(reverse-i-search); 然后连续ctrl+r则继续向上搜索关键字的历史记录。

(2) 采用上下箭头也能搜索上面的历史记录。

 1284  2021-05-23 15:21:38 ls
 1285  2021-05-23 15:21:38 clear
 1286  2021-05-23 15:21:38 ls
 1287  2021-05-23 15:21:38 cd logs/
 1288  2021-05-23 15:21:38 ls
(reverse-i-search)`ls': ls -la

从命令历史中执行一个指定的命令

在下面的例子中,如果你想重复执行第 4 条命令,那么可以先退出历史记录,然后执行 !4:

# history | more
1  service network restart
2  exit
3  id
4  cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

使用 -c 选项清除所有的命令历史

如果你想清除所有的命令历史,可以执行:

# history -c

控制显示条数和筛选

# 显示10条历史记录命令
history 10
# 显示关键字为geth的命令
history |more |grep geth

sudo免密码

参考:

(1) Linux中普通用户配置sudo权限(带密或免密)https://www.cnblogs.com/zhangwuji/p/9947768.html

配置步骤如下:

1、登陆或切换到root用户下;

2、添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers

3、编辑sudoers文件:vi /etc/sudoers

找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (注:这里的xxx是你的用户名)

你可以根据实际需要在sudoers文件中按照下面四行格式中任意一条进行添加:

youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码)。
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码)。
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码。
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码。

4、撤销sudoers文件写权限,命令:chmod u-w /etc/sudoers

5、至此,普通用户就可以使用sudo了。

youuser 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 youuser 用户 sudo 免密码配置成功。

sudo -su root

修改PATH及生效方法

参考:

(1 )Linux中修改环境变量及生效方法

方法一:

在/etc/profile文件中添加变量【对所有用户生效(永久的)】

用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

要让刚才的修改马上生效,需要执行以下代码

# source /etc/profile

方法二:

在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

要让刚才的修改马上生效,需要在用户目录下执行以下代码

# source .bash_profile

方法三:

直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

例如:export PATH=/usr/local/webserver/php/bin:$PATH

SSH互信公私钥对登录

参考:

(1)Linux下实现免密码登录(超详细) https://www.cnblogs.com/yixue2017/p/7559970.html

(2)Linux 普通用户之间免密登陆 https://www.cnblogs.com/klb561/p/8688263.html

(3)Linux下SSH免密码登录配置详解 https://www.jb51.net/article/168598.htm

实施:

(1) 同台机器之间实现普通用户duncan免密登录root账号

普通用户之间的免密登陆和 使用root 进行免密登陆,基本设置都是一样的,只不过普通用户之间需要修改 .ssh 和 authorized_keys 的权限免密才能生效。

[1] 切换用户到duncan登录状态下,生成公私钥对,一路回车生成公私钥对。

/home# mkdir duncan
/home# chown duncan:root duncan
/home# su - duncan
~$ ssh-keygen 
~$ ls -la 
total 12
drwxr-xr-x 3 duncan root 4096 May 23 17:08 .
drwxr-xr-x 4 root   root 4096 May 23 17:05 ..
drwx------ 2 duncan root 4096 May 23 17:08 .ssh

文件说明:

authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥

id_rsa : 生成的私钥文件

id_rsa.pub : 生成的公钥文件

know_hosts : 已知的主机公钥清单

如果希望ssh公钥生效访问账户针对被访账户文件目录需满足至少下面两个条件:

1) .ssh目录的权限必须是700

2) .ssh/authorized_keys文件权限必须是600

建议root及duncan的以上文件夹及文件都改为777吧。

[2] 在duncan用户登录下执行命令,把他的公钥加到远程免密登录的公钥授权文件authorized_keys。

~$ssh-copy-id -i ~/.ssh/id_rsa.pub 127.0.0.1 
##ls命令可以看到这样操作后增加了authorized_keys/known_hosts文件。
~/.ssh$ ls -l

[3] 尝试免密登录

以下方式登录不需要密码则为免密登录设置成功。

ssh '127.0.0.1'

(2) 机器A普通用户duncan免密登录另外一台机器B

[1] 已存证duncan的公司钥对。

[2] 在duncan用户登录下执行命令,把duncan的公钥加到root账户的远程免密登录的公钥授权文件authorized_keys。

~$ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.19.23.50

[3] 尝试免密登录

以下方式登录不需要密码则为免密登录设置成功。

ssh 'root@172.19.23.50'

find快速查找文件

find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。

基本格式:find path expression

1.按照文件名查找
(1) find / -name httpd.conf  #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2) find /etc -name httpd.conf  #在/etc目录下文件httpd.conf
(3) find /etc -name 'srm'  #使用通配符(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4) find . -name 'srm
'   #表示当前目录下查找文件名开头是字符串‘srm’的文件

2.按照文件特征查找
(1) find / -amin -10   # 查找在系统中最后10分钟访问的文件(access time)
(2) find / -atime -2   # 查找在系统中最后48小时访问的文件
(3) find / -empty   # 查找在系统中为空的文件或者文件夹
(4) find / -group cat   # 查找在系统中属于 group为cat的文件
(5) find / -mmin -5   # 查找在系统中最后5分钟里修改过的文件(modify time)
(6) find / -mtime -1   #查找在系统中最后24小时里修改过的文件
(7) find / -user fred   #查找在系统中属于fred这个用户的文件
(8) find / -size +10000c  #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9) find / -size -1000k   #查找出小于1000KB的文件

3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1) find /tmp -size +10000c -and -mtime +2   #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2) find / -user fred -or -user george   #在/目录下查找用户是fred或者george的文件文件
(3) find /tmp ! -user panda  #在/tmp目录中查找所有不属于panda用户的文件

grep命令根据内容查找文件

grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。

基本格式: find expression

1.主要参数
[options]主要参数:
    -c:只输出匹配行的计数。
    -i:不区分大小写
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -n:显示匹配行及行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
    -r: 根据文件内容递归查找目录

pattern正则表达式主要参数:
    \: 忽略正则表达式中特殊字符的原有含义。
    ^:匹配正则表达式的开始行。
    $: 匹配正则表达式的结束行。
    <:从匹配正则表达 式的行开始。
    >:到匹配正则表达式的行结束。
    [ ]:单个字符,如[A]即A符合要求 。
    [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
    .:所有的单个字符。
    * :有字符,长度可以为0。

**2.实例  **

grep -r "字符串" 很方便

(1) grep 'test' d*  #显示所有以d开头的文件中包含 test的行
(2) grep ‘test’ aa bb cc    #显示在aa,bb,cc文件中包含test的行
(3) grep ‘[a-z]{5}’ aa   #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
(4) grep magic /usr/src  #显示/usr/src目录下的文件(不含子目录)包含magic的行
(5) grep -r magic /usr/src  #显示/usr/src目录下的文件(包含子目录)包含magic的行
(6) grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

NTP时间同步

(1)[【总结】linux Ubuntu 中使用 NTP 进行时间同步设置]
https://www.jianshu.com/p/d476c828ee74

查看cpu核数

查看物理CPU的个数

#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

查看逻辑CPU的个数

#cat /proc/cpuinfo |grep "processor"|wc -l

查看CPU是几核

#cat /proc/cpuinfo |grep "cores"|uniq

查看CPU的主频

#cat /proc/cpuinfo |grep MHz|uniq

直接获得CPU核心数 (该命令即可全部算出多少核)

 #grep 'model name' /proc/cpuinfo | wc -l

磁盘 I/O性能指标

  1. 每秒 I/O 数(IOPS 或 tps)
    对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。

2)吞吐量(Throughput)
指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。当传输大块不连续数据的数据,该指标有重要参考作用。

3)iostat使用
[命令:] iostat [-c|-d] [-k] [-t] [间隔描述] [检测次数]

参 数:
-c : 仅显示cpu的状态
-d : 仅显示存储设备的状态,不可以和-c一起使用
-k : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示
-t: 显示日期
-p device | ALL : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息

1)基本使用
$iostat -d -k 1 10
说明:参数-d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次,每一次的统计都是上一次的统计时间到这次的统计时间之间的统计数据。


2)-x 参数
使用-x参数我们可以获得更多统计信息。
$iostat -d -x -k 1 10

3)-c 参数
获取cpu部分状态值
$iostat -c 1 10

4)常见用法
$iostat -d -k 1 10
'#查看TPS和吞吐量信息

$iostat -d -x -k 1 10
'# 查看设备使用率(%util)、响应时间(await)

$iostat -c 1 10
'# 查看cpu状态

  1. mpstat命令
    mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

Ubuntu下使用nload查看网卡实时流量

(1) 安装方法
sudo apt-get install nload

(2) 查看信息
nload 也是可以在终端显示网速的工具 你可以通过 nload -DH 来显示网速。

说明:
默认第一行是网卡的名称及IP信息,使用键盘上的左右键可以切换网卡。
默认上边Incoming是进入网卡的流量;
默认下边Outgoing是网卡出去的流量;
默认右边(Curr当前流量)、(Avg平均流量)、(Min最小流量)、(Max最大流量)、(Ttl流量统计);
默认情况,统计数据的左边会使用显示流量图,用#号拼出来的,根据实时流量变化显示。


查看参数帮助命令:

nload –help
-a:这个好像是全部数据的刷新时间周期,单位是秒,默认是300.
-i:进入网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
-m:不显示流量图,只显示统计数据。
-o:出去网卡的流量图的显示比例最大值设置,默认10240 kBit/s.
-t:显示数据的刷新时间间隔,单位是毫秒,默认500。
-u:设置右边Curr、Avg、Min、Max的数据单位,默认是自动变的.注意大小写单位不同!
h|b|k|m|g h: auto, b: Bit/s, k: kBit/s, m: MBit/s etc.
H|B|K|M|G H: auto, B: Byte/s, K: kByte/s, M: MByte/s etc.
-U:设置右边Ttl的数据单位,默认是自动变的.注意大小写单位不同(与-u相同)!
Devices:自定义监控的网卡,默认是全部监控的,使用左右键切换。

DNS 域名服务命令(dig/host/nslookup)

(1)安装

直接使用下面的命令即可:

#CentOS
yum -y install bind-utils
#ubuntu/debian
sudo apt-get install dnsutils -y

(2)nslookup

nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题。

a. 直接查询
//如果没有指定dns服务器,就采用系统默认的dns服务器。
nslookup domain [dns-server]

如果没指定dns-server,用系统默认的dns服务器。下面是一个例子:

[root@localhost ~]# nslookup baidu.com
Server:     10.30.7.177
Address:    10.30.7.177#53

Non-authoritative answer:
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 111.13.101.208
Name:   baidu.com
Address: 180.149.132.47
Name:   baidu.com
Address: 220.181.57.217

b. 查询其他记录
直接查询返回的是A记录,我们可以指定参数,查询其他记录,比如AAAA、MX等。

nslookup -qt=type domain [dns-server]

其中,type可以是以下这些类型:
A 地址记录
AAAA 地址记录
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录

例如:

[root@localhost ~]# nslookup -qt=mx baidu.com 8.8.8.8
*** Invalid option: qt=mx
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 111.13.101.208
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 180.149.132.47
Name:   baidu.com
Address: 220.181.57.217

c. 查询更具体的信息
查询语法:
nslookup –d [其他参数] domain [dns-server]

只要在查询的时候,加上-d参数,即可查询域名的缓存。

(3)dig

dig命令 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
建议大家使用 dig 命令来代替 nslookup。 dig 命令的功能比 nslookup 强大很多。

语法:
dig(选项)(参数)

选项:

@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x<IP地址>:执行逆向域名查询;
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。

参数:
主机:指定要查询域名主机;
查询类型:指定DNS查询的类型;
查询类:指定查询DNS的class;
查询选项:指定查询选项。

举例:

# dig baidu.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42275
;; flags: qr ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.         IN  A

;; ANSWER SECTION:
baidu.com.      542 IN  A   220.181.38.251
baidu.com.      542 IN  A   220.181.38.148

;; Query time: 7 msec
;; SERVER: 103.224.222.222#53(103.224.222.222)
;; WHEN: Thu Aug 19 21:12:59 CST 2021
;; MSG SIZE  rcvd: 59

# 从根服务器开始追踪一个域名的解析过程

root@k8s-master:/data/k8s# dig   baidu.com +trace

; <<>> DiG 9.10.3-P4-Ubuntu <<>> baidu.com +trace
;; global options: +cmd
.           29623   IN  NS  c.root-servers.net.
.           29623   IN  NS  a.root-servers.net.
.           29623   IN  NS  m.root-servers.net.
.           29623   IN  NS  d.root-servers.net.
.           29623   IN  NS  l.root-servers.net.
.           29623   IN  NS  b.root-servers.net.
.           29623   IN  NS  j.root-servers.net.
.           29623   IN  NS  k.root-servers.net.
.           29623   IN  NS  i.root-servers.net.
.           29623   IN  NS  e.root-servers.net.
.           29623   IN  NS  g.root-servers.net.
.           29623   IN  NS  f.root-servers.net.
.           29623   IN  NS  h.root-servers.net.
;; Received 421 bytes from 103.224.222.222#53(103.224.222.222) in 7 ms

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            86400   IN  DS  30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400   IN  RRSIG   DS 8 1 86400 20210901050000 20210819040000 26838 . n0wx53XmDhUX0Xehn9rG0GLV55oJMEz5d2wzEE3nHNfLbj+SWl/zie2l lh6Cit1PMypQs0x8BeEygLjmApQWtjYEI0AFWc2j+x3cAa1ZHwEWxv20 OVtXgQNcxxvl7kMTpbzsAQcmOxhKPpF+J954Spu8D9Tn6CK/yqwTN9Z6 FG8VT87KUVTv46f9X1sk3zM7paixHUZuRRQ+UxOhd6yUuleJOAViYmNn nVN2Ym3T7sMcZ+yi3fBSfSE2I57xZqEHLmUcrdB5oNwEiEz5gyvfXIpf OSV0M814JebTKgJCy0X+aQqGiqemb6Tuw+OGI6hcGvCIjDTmeTWCsekv 5U/f8Q==
;; Received 1169 bytes from 199.7.91.13#53(d.root-servers.net) in 225 ms

baidu.com.      172800  IN  NS  ns2.baidu.com.
baidu.com.      172800  IN  NS  ns3.baidu.com.
baidu.com.      172800  IN  NS  ns4.baidu.com.
baidu.com.      172800  IN  NS  ns1.baidu.com.
baidu.com.      172800  IN  NS  ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210824042516 20210817031516 39343 com. KAjDyjYoqq6PKGIFiVPSK63PL7G5kZs+/SibL2EvQnqc4CiS0vAuZ2LB p2cdbwFEH2Il3EUIzlH3AbXtlRzyZbpd7X4teLX1ZPX/f2gx6nwFK2A3 j+RzmROGkNAi/VOwvhv52We58iGCar+a54Yu+XfWu8PUi97228adtyhl E4sXQnx1rgyn5qzzTYg5B4yEMWKTCUK7tSo8RLFt/Wp+MA==
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVV8SARM2LDLRBTVC5EP1CUB1EF7LOP NS DS RRSIG
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 20210824044728 20210817033728 39343 com. QB348lJPfkoBLsAuTWnqCMt8bI2c11MrMqV+zQp0r0YuioXbiZSOiU+H 5DJSaQq4oPMB8ze7PPc9NWUF/Flc89Lt2XV5smrFTFSdHzWMiD/gt8kB fyDn/sIH3eVjYdh/6b7vXfiUh6tCWwT4+d3oh0TL9HaiiIoqywIQrAhW YxjkZ6B8chudhSRKhBhNqzpyPeDSYaSPjR2dClNx9npMyw==
;; Received 757 bytes from 192.42.93.30#53(g.gtld-servers.net) in 216 ms

baidu.com.      600 IN  A   220.181.38.251
baidu.com.      600 IN  A   220.181.38.148
baidu.com.      86400   IN  NS  ns3.baidu.com.
baidu.com.      86400   IN  NS  ns4.baidu.com.
baidu.com.      86400   IN  NS  ns7.baidu.com.
baidu.com.      86400   IN  NS  ns2.baidu.com.
baidu.com.      86400   IN  NS  dns.baidu.com.
;; Received 240 bytes from 220.181.33.31#53(ns2.baidu.com) in 28 ms

IP路由相关命令(ipaddr/brctl show/route/arp/bridge/iptable)

1. ip addr(ip add)

linux输入:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:16:3e:0d:18:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.27.191.99/20 brd 172.27.191.255 scope global dynamic noprefixroute eth0
       valid_lft 315018120sec preferred_lft 315018120sec
    inet6 fe80::216:3eff:fe0d:18b8/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:52:5a:5d:36 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

这个命令显示了这台机器上所有的网卡,上面有lo,eth0和docker0这3个。

网卡名称
(1)lo 全称是LOOPBACK,又称回环接口,往往会被分配到 127.0.0.1 这个地址
这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。
(2)eth0:网卡名,如果有多块网卡,会有多个eth 或其它名称.

<BROADCAST,MULTICAST,UP,LOWER_UP>
即net_device flags:网络设备的状态标识
BROADCAST:表示这个网卡有广播地址,可以发送广播包
MULTICAST:表示这个网卡有多播地址,可以发送多播包
UP:表示网卡处于启动的状态
LOWER_UP:表示 L1 是启动的,即网线插着

mtu 1500
mtu:即最大传输单元
最大传输单元 MTU 为 1500,这是以太网的默认值
网络包是层层封装的,MTU 是第二层 MAC 层的概念
MAC 层有 MAC 的头,以太网规定连 MAC 头带正文合起来,不超过 1500 个字节
正文里面有 IP 的头、TCP 的头、HTTP 的头。如果放不下,就需要分片来传输。

qdisc fq_codel/noqueue
内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置qdisc(排队规则)把数据包加入队列。
fq_codel主要是在Linux的Wi-Fi子系统中使用
致力于解决bufferbloat的问题,改善round-time times(RTT),甚至提高整体吞吐率。fq_codel对于实时性要求高的,数据包不大的应用特别nice,比如VOIP,在线游戏。

link/ether 00:16:3e:0d:18:b8 brd ff:ff:ff:ff:ff:ff
即MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。
MAC 地址是有一定定位功能的,只不过范围非常有限,局限在一个子网里面。
所以需要添加IP地址来定位,IP地址是可以全网定位的。

inet 172.27.191.99/20 brd 172.27.191.255
即IPv4地址,这个地址被点分隔为四个部分,每个部分 8 个 bit
所以 IP 地址总共是 32 位。

inet6 fe80::216:3eff:fe0d:18b8/64
即IPv6地址,因为IPv4地址不够用,于是就有了 IPv6地址(128位)

scope global/host
对于 eth0 这张网卡来讲,是 global,说明这张网卡是可以对外的,可以接收来自各个地方的包
对于 lo 来讲,是 host,说明这张网卡仅仅可以供本机相互通信。

2. brctl

brctl命令用于设置、维护和检查linux内核中的以太网网桥配置。

以太网网桥是一种设备,通常用于将以太网的不同网络连接在一起,以便这些以太网对参与者显示为一个以太网。所连接的每个以太网对应于网桥中的一个物理接口。这些单独的以太网被聚集成一个更大的(“逻辑”)以太网,这个更大的以太网对应于网桥网络接口。

语法格式:brctl [参数] <bridge>

常用参数:
addbr 创建网桥
delbr 删除网桥
addif 将网卡接口接入网桥
delif 删除网桥接入的网卡接口
show 查询网桥信息
stp {on|off} 启用禁用 STP
showstp 查看网桥 STP 信息
setfd 设置网桥延迟
showmacs 查看 mac 信息

参考实例
使用addbr参数创建网桥:
[root@linuxcool ~]# brctl addbr br10

使用delbr参数删除网桥:
[root@linuxcool ~]# brctl delbr br10

使用show参数查询网桥信息:
[root@linuxcool ~]# brctl show

启用网桥STP:
[root@linuxcool ~]# brctl stp br10 on

关闭网桥STP:
[root@linuxcool ~]# brctl stp br10 off

STP介绍

STP(Spanning Tree Protocol)即生成树协议,标准为IEEE802.1D-1998
STP是一种二层冗余技术,利用STA算法构建一个逻辑上没有环路的树形网络拓扑结构,并且可以通过一定的方法实现路径冗余

STP

生成树有如下角色:

  • 根桥(Root Bridge) RB, 桥ID最小的桥
  • 根端口(Root Port) RP, 该端口到达根桥的路径是该端口所在网桥到达根桥的最佳路径
  • 指定端口(Designated Port)DP, 每一个网段选择到根桥最近的网桥作为指定网桥, 该网桥到这一网段的端口为指定端口
  • 可选端口(Alternated Port)AP, 即阻塞端口, 既不是指定端口, 也不是根端口的端口

STP端口状态有如下几种:

  • 断开(Disable): 不收发任何报文
  • 阻塞(Blocking): 不接收或转发数据, 接收但不发送BPDU, 不进行地址学习
  • 监听(Listening): 不接收或转发数据, 接收并发送BPDU, 不进行地址学习
  • 学习(Learning): 不接收或转发数据, 接收并发送BPDU, 开始地址学习
  • 转发(Forwarding): 接收并转发数据, 接收并发送BPDU, 进行地址学习

一个网桥开启STP后,端口会经历如下过程:
Blocking(20s) –> Listening(15s) –> Learning(15s) –> Forwarding
这样大约50秒的时间非根端口转变成为根端口或指定端口。

3. route

通过 route 命令查看 Linux 内核的路由表:

[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
10.139.128.0    0.0.0.0         255.255.224.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-0ab63c131848
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-bccbfb788da0
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7485db25f958
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.139.128.1    0.0.0.0         UG    0      0        0 eth0
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
10.139.128.0    0.0.0.0         255.255.224.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-0ab63c131848
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-bccbfb788da0
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7485db25f958

各列字段说明:

含义
Destination 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)、
Gateway 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关
Genmask Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记,含义参考表格后面的解释
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)
Ref 路由项引用次数 (不在Linux内核中使用。)
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 eth0

Flags 含义:
U 路由是活动的
H 目标是个主机
G 需要经过网关
R 恢复动态路由产生的表项
D 由路由的后台程序动态地安装
M 由路由的后台程序修改
! 拒绝路由

Linux 内核的路由种类

主机路由
路由表中指向单个 IP 地址或主机名的路由记录,其 Flags 字段为 H。下面示例中,对于 10.0.0.10 这个主机,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
...

网络路由
主机可以到达的网络。下面示例中,对于 10.0.0.0/24 这个网络,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        10.139.128.1    255.255.255.0   UG    0      0        0 eth0

默认路由
当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由(默认网关)上。默认路由的 Destination 是 default 或 0.0.0.0。

[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0

route 命令

route 命令可以显示或设置 Linux 内核中的路由表,主要是静态路由。

对于局域网中的 Linux 主机,要想访问 Internet,需要将局域网的网关 IP 地址设置为这个主机的默认路由。在命令行中通过 route 命令添加的路由在网卡重启或机器重启后失效。可以在 /etc/rc.local 中添加 route 命令来保证路由设置永久有效。

选项:
-A:设置地址类型
-C:打印 Linux 内核的路由缓存
-v:显示详细信息
-n:不执行 DNS 反向查找,直接显示数字形式的 IP 地址
-e:netstat 格式显示路由表
-net:到一个网络的路由表
-host:到一个主机的路由表

参数:
add:增加路由记录
del:删除路由记录
target:目的网络或目的主机
gw:设置默认网关
mss:设置TCP的最大区块长度(MSS),单位MB
window:指定通过路由表的TCP连接的TCP窗口大小
dev:路由记录所表示的网络接口

添加路由 add

可以添加一条可用路由,或添加一条要屏蔽的路由。

添加主机路由
添加主机路由时,需要指定网络 ID 和主机 ID,此时需要设置 netmask 255.255.255.255:

[root@VM_139_74_centos ~]# route add -net 10.0.0.10 netmask 255.255.255.255 gw 10.139.128.1 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
...

添加网络路由
添加网络路由时,只需指定网络 ID,通过 netmask 设置掩码长度:

[root@VM_139_74_centos ~]# route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.139.128.1 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        10.139.128.1    255.255.255.0   UG    0      0        0 eth0
...

添加同一个局域网的主机
不指定 gw 选项时,添加的路由记录不使用网关:

[root@VM_139_74_centos ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
224.0.0.0       0.0.0.0         240.0.0.0       U     0      0        0 eth0
...

屏蔽路由

[root@VM_139_74_centos ~]# route add -net 224.0.0.0 netmask 240.0.0.0 reject
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
224.0.0.0       -               240.0.0.0       !     0      -        0 -
...

删除路由记录

跟添加路由类似,可以删除一条可用路由,或删除一条屏蔽的路由。

删除可用路由

route del -net 224.0.0.0 netmask 240.0.0.0

删除屏蔽的路由

route del -net 224.0.0.0 netmask 240.0.0.0 reject

删除和添加设置默认网关
添加或删除默认网关时,Linux 会自动检查网关的可用性:

[root@VM_139_74_centos ~]# route add default gw 192.168.1.1
SIOCADDRT: Network is unreachable
[root@VM_139_74_centos ~]# route del default gw 192.168.1.1
SIOCDELRT: No such process

4.ip route

ip route 管理路由,如添加,删除

说明:
ip route add 目标 via 下一跳 src 源地址 [dev 设备]
ip route del 目标
ip route list

举例

    ## 使用ip route添加网络路由
    ###当前本机IP地址为172.24.8.131
    ###假定要到达目标地址为:192.168.10.0/24,下一跳为 172.24.8.2 则添加路由命令如下

    # route -n  //首先查看当前的路由
    Kernel IP routing table
    Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
    0.0.0.0        192.168.81.2    0.0.0.0        UG    100    0        0 eno33554960
    172.24.8.0      0.0.0.0        255.255.255.0  U    100    0        0 eno16777728
    192.168.81.0    0.0.0.0        255.255.255.0  U    100    0        0 eno33554960

    # ip route list //首先查看当前的路由
    default via 192.168.81.2 dev eno33554960  proto static  metric 100 
    172.24.8.0/24 dev eno16777728  proto kernel  scope link  src 172.24.8.131  metric 100 
    192.168.81.0/24 dev eno33554960  proto kernel  scope link  src 192.168.81.144  metric 100

    # ip route add 192.168.10.0/24 via 172.24.8.2 dev eno16777728
    # ip route list |grep 192.168.10
    192.168.10.0/24 via 172.24.8.2 dev eno16777728 

   ## 使用ip route添加主机路由
    ###假定要到达目标地址为:192.168.20.1,下一跳为: 172.24.8.254 
    # ip route add 192.168.20.1 via 172.24.8.254
    # ip route list |grep 192.168.20.1
    192.168.20.1 via 172.24.8.254 dev eno16777728

    ##删除之前添加的网络路由和主机路由
    # ip route del 192.168.10.0/24  ###对于网络路由应指定掩码
    # ip route del 192.168.20.1

    # ip route list
    default via 192.168.81.2 dev eno33554960  proto static  metric 100 
    172.24.8.0/24 dev eno16777728  proto kernel  scope link  src 172.24.8.131  metric 100 
    192.168.81.0/24 dev eno33554960  proto kernel  scope link  src 192.168.81.144  metric 100 

   ## 删除缺省网关
    # ip route del default
    # ip route list|grep default

   ## 添加缺省网关
    # ip route add default via 172.24.8.2 dev eno16777728
    # ip route list|grep default
    default via 172.24.8.2 dev eno16777728 

5.arp

arp指令(地址解析协议,Address Resolution Protocol)用来管理系统的arp缓冲区,可以显示、删除、添加静态mac地址。ARP以各种方式操纵内核的ARP缓存。主要选项是清除地址映射项并手动设置。为了调试目的,ARP程序还允许对ARP缓存进行完全转储。

1、语法

arp [-evn]  [-H type]  [-i if]  -a  [hostname]
arp [-v]  [-i if]  -d  hostname [pub]
arp [-v]  [-H type]  [-i if]  -s  hostname  hw_ addr [temp]
arp [-v]  [-H type]  [-i if]  -s  hostname hw_ addr  [netmask nm]  pub
arp [-v]  [-H type]  [-i if]  -Ds  hostname ifa  [netmask nm]  pub
arp [-vnD]  [-H type]  [-i if]  -f  [filename]

2、选项列表

选项 说明
--help 显示帮助文档
--version 显示命令版本
-H type
--hw-typetype
-t type
在设置或读取ARP缓存时,这个可选参数告诉ARP应该检查哪类条目。此参数的默认值为ether(即IEEE 802.3 10 Mbps以太网的硬件代码0x01)。其他可能的值有,如ARCnet(Arcnet)、PROnet(PRINET)、AX.25(Axis 25)和Net/ROM(Netrom)。
-a[hostname] | --all [hostname] 显示本机的arp缓冲区内容
-dhostname | --deletehostname 从缓冲区删除指定的地址类型
-D | -use-device 使用指定接口的mac地址
-e 使用Linux风格显示
-i if | --device if 显示指定设备的arp缓冲区
-shostnamehw_addr 设置指定主机的mac地址映射
-f filename | --file filename 类似于-s选项,只是这次地址信息是从filename设置的。设置主机的IP地址与MAC地址的静态映射。数据文件的名称通常是“/etc/ether”,但这不是正式的。如果没有指定文件名“/etc/ether”作为默认值。该文件的格式很简单;它只包含带有硬件地址和由空格分隔的主机名的ASCII文本行。此外,还可以使用pub、temp和netmask标志。
-n | --numeric 使用数字方式显示
-v | --verbose 显示执行过程

在所有需要主机名的地方,人们也可以用虚线小数点表示法输入IP地址。作为兼容性的特例,主机名和硬件地址的顺序可以交换。ARP缓存中的每个完整条目都将被标记为C标志。永久条目用M标记,已发布的条目带有P标志。

3、实例

1)添加静态映射

[root@localhost ~]# arp -i eth0 -s 192.168.1.6 ff:ee:ee:ee:ee:ee        //将目标ip地址映射固定mac

[root@localhost ~]# arp –a                                                     //查看arp缓冲区

? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

? (192.168.1.6) at ff:ee:ee:ee:ee:ee [ether] PERM on eth0

2)以数字方式显示

[root@localhost ~]# arp -vn

Address                  HWtype  HWaddress          Flags Mask            Iface

10.0.2.2                 ether   52:54:00:12:35:02   C                     eth0

192.168.1.6              ether   ff:ee:ee:ee:ee:ee   CM                    eth0

Entries: 2 Skipped: 0Found: 2

说明:
Flags中的"C"代表此表项目是高速缓存中的内容,高速缓存中的内容过一段时间(一般20分钟)会清空,而"M"则表示静态表项,静态表项的内容不会过一段时间被清空。

6.dig

dig的全称是 (domain information groper)。它是一个用来灵活探测DNS的工具。它会打印出DNS name server的回应。
dig 命令最典型的用法就是查询单个主机的信息。

$ dig www.linuxidc.com

; <<>> DiG 9.11.3-1[Ubuntu](https://www.linuxidc.com/topicnews.aspx?tid=2 "Ubuntu")1.5-Ubuntu <<>> www.linuxidc.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17774
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.linuxidc.com.  IN A

;; ANSWER SECTION:
www.linuxidc.com. 5 IN A 122.228.238.15
www.linuxidc.com. 5 IN A 106.42.25.203

;; Query time: 10 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 03 10:55:35 CST 2019
;; MSG SIZE  rcvd: 77

说明:
dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。

第一部分显示 dig 命令的版本和输入的参数。
第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。
第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。
第四部分的 "ANSWER SECTION" 是查询到的结果。
第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。

默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型。

常见 DNS 记录的类型

类型 目的
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
SOA SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。
TXT 可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。

2.查看域名的ip

# dig yahoo.com +short

98.139.183.24
72.30.38.140
98.138.253.109

3.查看域名的MX 记录

# dig yahoo.com MX

; <> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <> yahoo.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31450
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 24

;; QUESTION SECTION:
;yahoo.com. IN MX

;; ANSWER SECTION:
yahoo.com. 33 IN MX 1 mta6.am0.yahoodns.net.
yahoo.com. 33 IN MX 1 mta7.am0.yahoodns.net.
yahoo.com. 33 IN MX 1 mta5.am0.yahoodns.net.

4.查看域名的SOA记录

# dig yahoo.com SOA

; <> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <> yahoo.com SOA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2197
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 7, ADDITIONAL: 7

;; QUESTION SECTION:
;yahoo.com. IN SOA

;; ANSWER SECTION:
yahoo.com. 1800 IN SOA ns1.yahoo.com. hostmaster.yahoo-inc.com. 2012081409 3600 300 1814400 600

5.查询域名的TTL记录

# dig yahoo.com TTL

; <> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <> yahoo.com TTL
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56156
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.com. IN A

;; ANSWER SECTION:
yahoo.com. 3589 IN A 98.138.253.109
yahoo.com. 3589 IN A 98.139.183.24
yahoo.com. 3589 IN A 72.30.38.140

6.查看内容信息

# dig yahoo.com +nocomments +noquestion +noauthority +noadditional +nostats

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.com +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
yahoo.com. 3442 IN A 72.30.38.140
yahoo.com. 3442 IN A 98.138.253.109
yahoo.com. 3442 IN A 98.139.183.24

7.查询所有的DNS记录类型

# dig yahoo.com ANY +noall +answer

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.com ANY +noall +answer
;; global options: +cmd
yahoo.com. 3509 IN A 72.30.38.140
yahoo.com. 3509 IN A 98.138.253.109
yahoo.com. 3509 IN A 98.139.183.24
yahoo.com. 1709 IN MX 1 mta5.am0.yahoodns.net.
yahoo.com. 1709 IN MX 1 mta6.am0.yahoodns.net.
yahoo.com. 1709 IN MX 1 mta7.am0.yahoodns.net.
yahoo.com. 43109 IN NS ns2.yahoo.com.
yahoo.com. 43109 IN NS ns8.yahoo.com.
yahoo.com. 43109 IN NS ns3.yahoo.com.
yahoo.com. 43109 IN NS ns1.yahoo.com.
yahoo.com. 43109 IN NS ns4.yahoo.com.
yahoo.com. 43109 IN NS ns5.yahoo.com.
yahoo.com. 43109 IN NS ns6.yahoo.com.

8.DNS反向查询

# dig -x 72.30.38.140 +short

ir1.fp.vip.sp2.yahoo.com.

9.查询多个DNS记录

# dig yahoo.com mx +noall +answer redhat.com ns +noall +answer

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> yahoo.com mx +noall +answer redhat.com ns +noall +answer
;; global options: +cmd
yahoo.com. 1740 IN MX 1 mta6.am0.yahoodns.net.
yahoo.com. 1740 IN MX 1 mta7.am0.yahoodns.net.
yahoo.com. 1740 IN MX 1 mta5.am0.yahoodns.net.
redhat.com. 132 IN NS ns1.redhat.com.
redhat.com. 132 IN NS ns4.redhat.com.
redhat.com. 132 IN NS ns3.redhat.com.
redhat.com. 132 IN NS ns2.redhat.com.

7.iptables

iptables是linux系统下用来配置netfilter子系统的一个client tool。
iptables是对表、链、规则进行配置。

详情待补充。

8.iptables-save

iptables-save输出的是iptable规则的当前配置,是从配置角度输出的(方便由iptable-restore解析并重新配置),可以用 > 重定向到一个文件中。

格式详解

root@k8s-master:/data/k8s#  iptables-save -t nat -c |grep web

说明:-t 表示要dump的表(不指定的话dump所有表的配置)。-c 表示输出中显示每条规则当前报文计数。

# Generated by iptables-save v1.4.21 on Tue Jan 15 15:42:32 2019
--这是注释
*nat
-- 这表示下面这些是nat表中的配置
:PREROUTING ACCEPT [5129516:445315174]
-- :PREROUTING ACCEPT,表示nat表中的PREROUTING 链默认报文策略是接受(匹配不到规则继续) ,

-- [5129516:445315174] 即[packet, bytes],表示当前有5129516个包(445315174字节)经过nat表的PREROUTING 链
:INPUT ACCEPT [942957:151143842]
:OUTPUT ACCEPT [23898:3536261]
:POSTROUTING ACCEPT [23898:3536261]
-- 解释同上
:DOCKER - [0:0]
-- 解释同上(此条是自定义链)
---------- 下面开始按条输出所有规则----------
[4075:366986] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-- [4075:366986]即[packet, bytes],表示经过此规则的包数,字节数。 后面部分则是用iptables命令配置此规则的命令(详解选项可参考iptables帮助)。
[0:0] -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
[0:0] -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
[2:188] -A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
[0:0] -A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
[0:0] -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
[0:0] -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
[0:0] -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
[0:0] -A DOCKER -i docker0 -j RETURN
--以上规则同第一条规则的解释
COMMIT
-- 应用上述配置
# Completed on Tue Jan 15 15:42:32 2019

9.iptables-restore

从之前导出的iptable规则配置文件加载规则。

详情待补充。

10. traceroute网络路径

Linux traceroute命令用于显示数据包到主机间的路径。
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
安装

# apt-get install traceroute

语法

traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

参数说明:

-d 使用Socket层级的排错功能。
-f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g<网关> 设置来源路由网关,最多可设置8个。
-i<网络界面> 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p<通信端口> 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址> 设置本地主机送出数据包的IP地址。
-t<服务类型> 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w<超时秒数> 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。

举例
[1] 显示到达目的地的数据包路由

root@k8s-master:/data/k8s# traceroute -n www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
 1  * * *
...
 5  * * *
 6  100.125.142.195  2.513 ms  2.302 ms  2.237 ms
 7  * * *
 8  * * *
 9  101.95.219.233  7.312 ms 124.74.166.109  3.663 ms 124.74.166.105  4.478 ms
10  61.152.25.2  4.809 ms 61.152.25.126  3.539 ms 101.95.88.122  4.106 ms
11  202.97.19.250  7.134 ms 202.97.74.158  6.512 ms 202.97.66.202  8.815 ms
12  58.213.94.6  10.097 ms 58.213.95.102  10.645 ms 58.213.95.142  9.821 ms
13  58.213.94.130  9.127 ms 58.213.95.134  10.850 ms *
14  58.213.96.126  9.963 ms 58.213.96.118  11.287 ms 58.213.96.126  11.056 ms
15  * * *
...
29  * * *
30  * * *

说明:
记录按序列号从1开始,每个记录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。

有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。

如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

Traceroute的工作原理
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。

Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。

curl -请求 Web 服务器

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

不带有任何参数时,curl 就是发出 GET 请求。

$ curl https://www.example.com

上面命令向www.example.com发出 GET 请求,服务器返回的内容会在命令行输出。

-A

-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]


$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

上面命令将User-Agent改成 Chrome 浏览器。


$ curl -A '' https://google.com

上面命令会移除User-Agent标头。

也可以通过-H参数直接指定标头,更改User-Agent


$ curl -H 'User-Agent: php/1.0' https://google.com

-b

-b参数用来向服务器发送 Cookie。


$ curl -b 'foo=bar' https://google.com

上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。


$ curl -b 'foo1=bar;foo2=bar2' https://google.com

上面命令发送两个 Cookie。


$ curl -b cookies.txt https://www.google.com

上面命令读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。

-c

-c参数将服务器设置的 Cookie 写入一个文件。


$ curl -c cookies.txt https://www.google.com

上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt

-d

-d参数用于发送 POST 请求的数据体。


$ curl -d'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login

使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST

-d参数可以读取本地文本文件的数据,向服务器发送。


$ curl -d '@data.txt' https://google.com/login

上面命令读取data.txt文件的内容,作为数据体向服务器发送。

--data-urlencode

--data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。


$ curl --data-urlencode 'comment=hello world' https://google.com/login

上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。

-e

-e参数用来设置 HTTP 的标头Referer,表示请求的来源。


curl -e 'https://google.com?q=example' https://www.example.com

上面命令将Referer标头设为https://google.com?q=example

-H参数可以通过直接添加标头Referer,达到同样效果。


curl -H 'Referer: https://google.com?q=example' https://www.example.com

-F

-F参数用来向服务器上传二进制文件。


$ curl -F 'file=@photo.png' https://google.com/profile

上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。

-F参数可以指定 MIME 类型。


$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile

上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream

-F参数也可以指定文件名。


$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png

-G

-G参数用来构造 URL 的查询字符串。


$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。

如果数据需要 URL 编码,可以结合--data--urlencode参数。


$ curl -G --data-urlencode 'comment=hello world' https://www.example.com

-H

-H参数添加 HTTP 请求的标头。


$ curl -H 'Accept-Language: en-US' https://google.com

上面命令添加 HTTP 标头Accept-Language: en-US


$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

上面命令添加两个 HTTP 标头。


$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

上面命令添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据。

-i

-i参数打印出服务器回应的 HTTP 标头。


$ curl -i https://www.example.com

上面命令收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。

-I

-I参数向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来。


$ curl -I https://www.example.com

上面命令输出服务器对 HEAD 请求的回应。

--head参数等同于-I


$ curl --head https://www.example.com

-k

-k参数指定跳过 SSL 检测。


$ curl -k https://www.example.com

上面命令不会检查服务器的 SSL 证书是否正确。

-L

-L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。


$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

--limit-rate

--limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。


$ curl --limit-rate 200k https://google.com

上面命令将带宽限制在每秒 200K 字节。

-o

-o参数将服务器的回应保存成文件,等同于wget命令。


$ curl -o example.html https://www.example.com

上面命令将www.example.com保存成example.html

-O

-O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。


$ curl -O https://www.example.com/foo/bar.html

上面命令将服务器回应保存成文件,文件名为bar.html

-s

-s参数将不输出错误和进度信息。


$ curl -s https://www.example.com

上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。

如果想让 curl 不产生任何输出,可以使用下面的命令。


$ curl -s -o /dev/null https://google.com

-S

-S参数指定只输出错误信息,通常与-s一起使用。


$ curl -s -o /dev/null https://google.com

上面命令没有任何输出,除非发生错误。

-u

-u参数用来设置服务器认证的用户名和密码。


$ curl -u 'bob:12345' https://google.com/login

上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1

curl 能够识别 URL 里面的用户名和密码。


$ curl https://bob:12345@google.com/login

上面命令能够识别 URL 里面的用户名和密码,将其转为上个例子里面的 HTTP 标头。


$ curl -u 'bob' https://google.com/login

上面命令只设置了用户名,执行后,curl 会提示用户输入密码。

-v

-v参数输出通信的整个过程,用于调试。


$ curl -v https://www.example.com

--trace参数也可以用于调试,还会输出原始的二进制数据。


$ curl --trace - https://www.example.com

-x

-x参数指定 HTTP 请求的代理。


$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com

上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。

如果没有指定代理协议,默认为 HTTP。


$ curl -x james:cats@myproxy.com:8080 https://www.example.com

上面命令中,请求的代理使用 HTTP 协议。

-X

-X参数指定 HTTP 请求的方法。


$ curl -X POST https://www.example.com

上面命令对https://www.example.com发出 POST 请求。

参考链接